Difference between revisions of "Rodin/BuclePentru"

From HaskellWiki
Jump to navigation Jump to search
 
Line 4: Line 4:
 
''In realitate mesajul se referea la substructurile acestor structuri.''
 
''In realitate mesajul se referea la substructurile acestor structuri.''
   
Exemplu:Transcriind un mic algoritm din cartea "68 de pagini de probleme rezolvate si teorie in Pascal" de pe www.referate10.ro
+
'''Exemplu:'''Transcriind un mic algoritm din cartea "68 de pagini de probleme rezolvate si teorie in Pascal" de pe www.referate10.ro
 
(din Cap.1 de Prof. S.Groze, Prof. M.Frenţiu si colectiv. -
 
(din Cap.1 de Prof. S.Groze, Prof. M.Frenţiu si colectiv. -
 
Problema 1.1.2) in Rodin ....
 
Problema 1.1.2) in Rodin ....
Line 51: Line 51:
 
Mesajul de eroare semnala ca a treia bucla ''pentru'' ar fi avut paranteza initiala neasteptata. Totusi Rodin la celelalte bucle (exterioare), scrise sintactic la fel, nu semnala nici o eroare.
 
Mesajul de eroare semnala ca a treia bucla ''pentru'' ar fi avut paranteza initiala neasteptata. Totusi Rodin la celelalte bucle (exterioare), scrise sintactic la fel, nu semnala nici o eroare.
   
Concluzia: Eroarea trebuia cautata in corpul sau substructurile buclei.
+
'''Concluzia:''' Eroarea trebuia cautata in corpul sau substructurile buclei.
   
Solutia: Daca nu observati eroarea, copiati cu CUT/COPY corpul buclei intr-un alt fisier si testati-l ca pe un program separat. Apoi il puteti lipi (Paste) inapoi.
+
'''Solutia:''' Daca nu observati eroarea, copiati cu CUT/COPY corpul buclei intr-un alt fisier si testati-l ca pe un program separat. Apoi il puteti lipi (Paste) inapoi.
   
Surpriza: Cu un corp vid {} acea bucla nu mai da nici o eroare de sintaxa. Si corpul buclei are o eroare usor de depistat, daca este scris ca un "program" separat.
+
'''Surpriza:''' Cu un corp vid {} acea bucla nu mai da nici o eroare de sintaxa. Si corpul buclei are o eroare usor de depistat, daca este scris ca un "program" separat.
   
 
Corpul buclei, extras separat si corectat:
 
Corpul buclei, extras separat si corectat:
Line 86: Line 86:
 
</haskell>
 
</haskell>
   
Algoritmul intial era din cartea "68 de pagini de probleme rezolvate si teorie in Pascal" de pe www.referate10.ro
+
'''Algoritmul intial''' provenea din cartea "68 de pagini de probleme rezolvate si teorie in Pascal" de pe site-ul [http://www.referate10.ro/ acesta: www.referate10.ro.]
(Cap.1 de Prof. S.Groze, Prof. M.Frenţiu si colectiv. - Problema 1.1.2)
+
(Cap.1 este scris de Prof. S.Groze, Prof. M.Frenţiu si colectiv iar Problema purta numarul 1.1.2)
   
   
Iata si ideea algoritmului, in viziunea autorilor, textul fiind doar usor modificat:
+
Iata si ideea algoritmului, in viziunea autorilor, textul de mai jos fiind doar usor modificat fata de cel din carte:
 
"Vom nota cu s suma a+b+c. Se ştie că (3,4,5) este primul triplet de numere pitagorice. În acest caz s ia valori de la 12 la n. Deoarece 3a<s variabila a ia valori de la 3 la s/3. Apoi 2b<s-a deci b va lua valori de la a+1 la (s-a)/2. "
 
"Vom nota cu s suma a+b+c. Se ştie că (3,4,5) este primul triplet de numere pitagorice. În acest caz s ia valori de la 12 la n. Deoarece 3a<s variabila a ia valori de la 3 la s/3. Apoi 2b<s-a deci b va lua valori de la a+1 la (s-a)/2. "
   
Nu uitati aceasta solutie:
+
'''Nu uitati aceasta solutie:'''
 
In caz ca nu gasiti eroarea, copiati bucla in alt fisier si depanati-o ca atare.
 
In caz ca nu gasiti eroarea, copiati bucla in alt fisier si depanati-o ca atare.
   

Revision as of 21:50, 14 March 2009

Am avut surpriza, experimentand interpretorul adaptabil modular pentru Rodin sa observ un fapt cel putin curios. Unele programe semnalau o eroare stranie la inceputul buclelor pentru, imediat dupa cuvantul cheie. Aparent problema era "(" sau spatiul care urma dupa pentru - daca el exista.

Un fenomen similar am constatat la unele surse si in cazul instructiunii daca. In realitate mesajul se referea la substructurile acestor structuri.

Exemplu:Transcriind un mic algoritm din cartea "68 de pagini de probleme rezolvate si teorie in Pascal" de pe www.referate10.ro (din Cap.1 de Prof. S.Groze, Prof. M.Frenţiu si colectiv. - Problema 1.1.2) in Rodin ....

 
"Algoritmul NRPITAGORICE este :
 Date n;	{n; pentru n<12 nu există triplete}
 Dacă n<12
   atunci Tipăreşte "Nu există numerele cerute"
   altfel Pentru S=12,n execută
            Pentru a=3,S/3 execută
              Pentru b=a+1,(S-a)/2 execută
                Fie c:=S-a-b;
                Dacă c=a+b atunci Tipăreşte(a,b,c) Sf-dacă
              Sf-pentru
           Sf-pentru
          Sf-pentru 	
 Sf-dacă
Sf-algoritm.
"


... am obtinut dupa o prima transcriere urmatorul program cu o mica eroare sintactica...

{text "Algoritmul NRPITAGORICE"; 
 citeste n;	
 daca n<12
   atunci text "Nu exista numerele cerute"
   altfel pentru(fie s=12; s<n; fie s=s+1)
            pentru(fie a=3; a<s/3; fie a=a+1)
              pentru(fie b=a+1;b<(s-a)/2;fie b=b+1)
                {fie c=s-a-b;
                 daca c==a+b atunci {scrie a; scrie b; scrie c} altfel 0;        
                }
              ;
            
          	
 
}

Mesajul de eroare semnala ca a treia bucla pentru ar fi avut paranteza initiala neasteptata. Totusi Rodin la celelalte bucle (exterioare), scrise sintactic la fel, nu semnala nici o eroare.

Concluzia: Eroarea trebuia cautata in corpul sau substructurile buclei.

Solutia: Daca nu observati eroarea, copiati cu CUT/COPY corpul buclei intr-un alt fisier si testati-l ca pe un program separat. Apoi il puteti lipi (Paste) inapoi.

Surpriza: Cu un corp vid {} acea bucla nu mai da nici o eroare de sintaxa. Si corpul buclei are o eroare usor de depistat, daca este scris ca un "program" separat.

Corpul buclei, extras separat si corectat:

{fie c=s-a-b;
 daca c==a+b
 atunci {scrie a; scrie b; scrie c;} ;        
}

Apoi dupa lipirea sa inapoi obtinem:


{text "Algoritmul NRPITAGORICE"; 
 citeste n;	
 daca n<12
   atunci text "Nu exista numerele cerute pentru n mai mic ca 12"
   altfel pentru(fie s=12; s<n; fie s=s+1)
            pentru(fie a=3; a<s/3; fie a=a+1)
              pentru(fie b=a+1;b<(s-a)/2;fie b=b+1)
                {fie c=s-a-b;
                 daca c==a+b
                 atunci {scrie a; scrie b; scrie c;} ;        
                }
              ;

}

Algoritmul intial provenea din cartea "68 de pagini de probleme rezolvate si teorie in Pascal" de pe site-ul acesta: www.referate10.ro. (Cap.1 este scris de Prof. S.Groze, Prof. M.Frenţiu si colectiv iar Problema purta numarul 1.1.2)


Iata si ideea algoritmului, in viziunea autorilor, textul de mai jos fiind doar usor modificat fata de cel din carte: "Vom nota cu s suma a+b+c. Se ştie că (3,4,5) este primul triplet de numere pitagorice. În acest caz s ia valori de la 12 la n. Deoarece 3a<s variabila a ia valori de la 3 la s/3. Apoi 2b<s-a deci b va lua valori de la a+1 la (s-a)/2. "

Nu uitati aceasta solutie: In caz ca nu gasiti eroarea, copiati bucla in alt fisier si depanati-o ca atare.

In fond vorbim despre limbaje pentru programare structurata . :)


Pagina in dezvoltare.


Sursele le gasiti in arhiva Rodin2009e-Linux.zip <Download>