CATEGORII DOCUMENTE |
Limbajul pseudocod este prin definitie un limbaj alcatuit din cateva instructiuni prestabilite, specifice programarii structurate, folosit pentru reprezentarea algoritmilor.
Plecand de la o definitie a programului ca fiind:
PROGRAM = ALGORITM + DATE (Niklaus Wirth)
programul evolueaza spre instructiuni structurate, iar datele spre tipuri prestabilite (constante, variabile, stive, coada, vector, tablou, multime (set), tip complex).
Aceasta definitie indica faptul ca reprezentarea sub forma de pseudocod implica si faptul ca datele sint structurate sub o anumita forma, deci viziunea algoritmica trebuie imbinata cu una asupra structurilor de date.
Datele pot fi clasificate dupa unul din criteriile:
1. Tipul datelor - poate fi unul dintre urmatoarele:
- intreg (integer)
- real (real)
- logic (bool)
- sir de caractere (char)
2. Natura datelor:
- constante
- variabile
3. Organizarea datelor:
- tablouri (array)
- stive (stack)
- cozi (queue)
- ansamble (heap)
Operatiile cu date depind de natura si organizarea datelor.
Se aplica o serie de conventii la reprezentarea calculelor prin formule. Una dintre acestea se refera la faptul ca putem plasa numai o singura variabila in partea stanga a semnului "=". Astfel, computerul realizeaza toate calculele indicate in partea dreapta a semnului "=" si genereaza un unic rezultat. Acesta va fi memorat in locatia de memorie corespunzatoare variabilei inscrisa in partea stanga a semnului "=".
Pentru datele numerice (de tip intreg si real) folosim urmatoarele operatii:
operatii aritmetice: adunare (+), scadere (-), inmultire (*), si impartire (/).
operatii de decizie (care precizeaza relatia existenta intre doua date) : egalitate (=), mai mic decat (<), mai mare decat (>), inegalitate (< >), mai mic sau egal decat (<=), mai mare sau egal decat (>=).
Datele numerice sunt alcatuite numai din cifrele de la 0 la 9 (eventual este folosit si punctul zecimal); aceste date nu pot contine caractere speciale sau literele alfabetului. Prin contrast cu ele, datele ne-numerice sunt alcatuite din orice combinatie de caractere numerice, alfabetice, sau speciale. Caracterele alfabetice sunt formate de literele de la A la Z, iar caracterele speciale sunt toate celelalte semne (de ex. $, @, #, %, etc.).
Pentru datele de tip logic se folosesc urmatoarele operatii:
negatia logica ù
conjunctia logica Ù
disjunctia logica
Pentru datele de tip sir de caractere folosim:
concatenarea (+) - reuniunea a doua sau mai multe siruri de caractere (rezultatul acestei operatii fiind tot un sir de caractere);
compararea bazata pe ordine lexicografica (rezultatul fiind o data de tip logic).
Pentru celelalte categorii de date folosim urmatoarele operatii:
extragerea unui element x;
introducerea unui element x;
verificarea daca un asemenea ansamblu de date este sau nu vid.
Cuvintele prestabilite cu ajutorul carora se construieste algoritmul se numesc cuvinte cheie.
Exemple: do, if, integer.
Instructiunile se grupeaza in doua categorii:
declaratii: alcatuite dintr-un cuvant cheie (ex.: integer, real, bool, char, array, stack, queue, heap), urmat de un sir de variabile; astfel se precizeaza ca acele variabile au tipul de data indicat de cuvantul cheie;
instructiuni efective.
Exemple:
integer a, B, c;
real d(n), E(m,n);
Instructiunile efective sunt urmatoarele:
Instructiunea de atribuire:
Forma de baza: V e
unde V = variabila; e = expresie de acelasi tip.
Efect: Se evalueaza expresia e si se atribuie rezultatul obtinut variabilei V.
Forma generala: (V1, V2, .Vn ) (e1, e2, . en) sau
Vi ei , i I
Instructiunile READ/ WRITE:
Forma generala: read a1, a2, .an
Efect: Sunt citite n variabile de la intrare si sunt scrise in locatii de memorie.
si
Forma generala: write a1, a2, .an
Efect: Se scriu din memorie pe banda de iesire valorile a n variabile.
Instructiunea STOP:
Efect: Se incheie un program.
Decizia cu o alternativa vida (IF-THEN):
Sintaxa:
daca <conditie> atunci
<secventa>
stop
Pseudocod:
if P then sau if P then
S1 begin
endif S1
end
endif
Semnificatie:
ADEVARAT
evalueaza executa
<conditie> <secventa>
FALS
Se evalueaza <conditie>; daca <conditie> este ADEVARATA, se executa instructiunile din <secventa>; altfel, se sare peste aceste instructiuni si se continua algoritmul cu prima instructiune de dupa <secventa>.
Schema logica:
DA NU
<conditie>
<secventa>
Exemplu: Calculul valorii maxime dintre trei numere date, A, B, C.
Programul in pseudocod va fi:
start
citeste A, B, C
# afla X = max (A, B)
# afla X = max (X, C)
scrie X
stop
Daca se detaliaza cele doua proceduri marcate cu #, obtinem urmatorul algoritm:
start
citeste A, B, C
daca A > B atunci
atribuie X A
altfel
atribuie X B
daca C > X atunci
atribuie X C
scrie X
stop
Secventa de program din dreptunghiul punctat reprezinta decizie cu o alternativa vida.
Decizie cu doua alternative (IF-THEN-ELSE):
Sintaxa:
daca <conditie> atunci
<secventa 1>
altfel
<secventa 2>
stop
Pseudocod:
if P then sau if P then
S1 begin
else S1
S2 end
begin
S2
end
endif
Semnificatie:
evalueaza ADEVARAT executa
<conditie> <secventa 1>
FALS executa
<secventa 2>
Aceasta instructiune defineste o relatie logica pe care ulterior o testeaza. Conditia este construita in mod deliberat sub forma de intrebare, cu numai doua raspunsuri posibile, DA si NU. Aceste doua optiuni definesc ramurile conditionale care permit evaluarea expresiei logice cu ajutorul simbolilor de decizie.
Se evalueaza <conditie>; daca <conditie> este ADEVARATA, se vor executa instructiunile din <secventa 1>; altfel (<conditie> este FALSA) se vor executa instructiunile din <secventa 2>. Dupa acest pas, se executa urmatoarea instructiune din algoritm (prima instructiune dupa IF-THEN-ELSE).
Schema logica:
DA NU
<conditie>
<secventa 1> < secventa 2>
Exemplu: Reluam aceeasi problema, si anume calculul valorii maxime dintre trei numere A, B, C.
O alta solutie pentru rezolvarea problemei ar fi:
start
citeste A, B, C
daca A > B atunci
atribuie X A
altfel
atribuie X B
daca C > X atunci
atribuie X C
altfel
atribuie X X
scrie X
stop
Secventele de program din dreptunghiurile punctate reprezinta decizie cu doua alternative.
Selectia (CASE):
Sintaxa:
alege <expresie> dintre:
<constanta 1> : <secventa 1>
<constanta 2> : <secventa 2>
.
<constanta n> : <secventa n>
altfel : <secventa (n+1) >
stop
Pseudocod:
P2 : S2
.
Pn : Sn
else Sn+1
endcase
Semnificatie:
Se evalueaza <expresie> si se executa diferite operatii corespunzator valorilor posibile pentru <expresie>: daca <expresie> = <constanta 1>, se executa instructiunile din <secventa 1>; daca <expresie> = <constanta 2> se executa instructiunile din <secventa 2>, si asa mai departe; daca <expresie> = <constanta n>, se executa instructiunile din <secventa n>, si altfel (cand <expresie> ¹ <constant1>, <constant 2>, ., <constant n>) se executa instructiunile din <secventa (n+1)>. Apoi se executa urmatoarea instructiune din algoritm (prima instructiune dupa CASE).
<constanta 1> executa
<secventa 1>
evalueaza <constanta 2> executa
<expresie> <secventa 2>
.
<constanta n> executa
<secventa n>
¹ <constant 1>,.
¹ <constant n> executa
<secventa (n+1)>
Schema logica:
<expresie>
<constanta 1> . <constanta n> <constanta (n+1)>
<secventa 1> <secventa n> <secventa (n+1)>
Exemplu: Valoarea intreaga oarecare V se adauga la una din valorile (sumele) S0, S1, S2, S3 dupa cum restul impartirii sale la 4 este 0, 1, 2, 3.
Algoritmul care realizeaza aceste calcule va fi:
alege V - int(V/4) 4 dintre
0: atribuie S0 S0 + V
1: atribuie S1 S1 + V
2: atribuie S2 S2 + V
3: atribuie S3 S3 + V
stop
Secventa de program din dreptunghiul punctat reprezinta un exemplu de selectie.
7. Ciclu cu test initial (WHILE-DO, structura repetitiva conditionata anterior):
Sintaxa:
<secventa>
stop
Pseudocod:
while P do
begin
S
end
enddo
Semnificatie:
DA
evalueaza executa
<conditie> <secventa>
NU
Se evalueaza <conditie>; atata timp cat <conditie> este ADEVARATA, se executa instructiunile din <secventa>, si apoi se evalueaza <conditie> din nou; cand <conditie> devine FALSA se iese din bucla; deoarece mai intai se evalueaza <conditie> , si dupa aceea se executa instructiunile, WHILE-DO este cunoscuta sub numele de "ciclare cu test initial". Daca <conditie> este FALSA la prima evaluare, instructiunile din <secventa> nu se executa nici o data, si se trece direct la prima instructiune de dupa WHILE-DO; prin urmare este posibil sa avem o bucla WHILE-DO vida.
Schema logica
DA
<conditie>
NU
<secventa>
Ciclu cu test final (REPEAT-UNTIL, structura repetitiva conditionata posterior):
Sintaxa:
repeta
<secventa>
pana cand <conditie>
Pseudocod:
repeat
S
until P
Semnificatie:
NU
executa evalueaza DA
<secventa> <conditie>
Se executa <secventa> si apoi se evalueaza <conditie>; atata timp cat <conditie> este FALSA, ne intoarcem inapoi si executam <secventa> din nou, dupa care evaluam iarasi <conditie>; atunci cand <conditie> devine ADEVARATA, se iese din bucla si se executa urmatoarea instructiune de dupa REPEAT-UNTIL. Deoarece mai intai se executa <secventa> si apoi se evalueaza <conditie>, REPEAT-UNTIL mai este numita si ciclare cu test final. Se observa ca nu putem avea o bucla REPEAT-UNTIL vida, deoarece <secventa> este executata cel putin o data (cand <conditie> este ADEVARATA la prima evaluare).
Schema logica:
<secventa>
<conditie> NU
DA
Ciclare cu contor (FOR):
Sintaxa:
pentru <variabila> = <val. initiala>, <val. finala>, <pas> repeta
<secventa>
stop
Pseudocod:
for v:=vi to vf step vp do
begin
S
end
endfor
Semnificatie:
Instructiunea FOR realizeaza o ciclare pana cand este indeplinita o anumita conditie. De aceea este cunoscuta ca un tip de ciclare cu test posterior, conditia fiind verificata la sfarsitul buclei. Partea de dupa FOR a instructiunii defineste ciclul, iar partea de dupa TO defineste conditia de iesire din bucla.
evalueaza <VAR> <vi> executa
<vi>, <vf>, <vp> <secventa>
<VAR> <VAR> + <vp>
NU
VAR> > <vf>
DA
Avem un contor, <variabila>, cu valori intre o <valoare initiala> si o <valoare finala>. La inceput avem <variabila> = <valoare initiala> si se executa instructiunile continute in <secventa>. Apoi marim valoarea din <variabila> cu <valoare pas> si comparam <variabila> cu <valoare finala>. Daca <variabila> £ <valoare finala>, repetam pasul anterior. Se procedeaza in acest mod pana cand <variabila> > <valoare finala>; in acest moment se iese din bucla.
Schema logica:
<VAR> <vi>
< secventa >
<VAR> <VAR> + <vp>
NU
<VAR> > <vf>
DA
Decizie multipla (IF-THEN-ELSE-.-ELSE):
Sintaxa:
daca <conditie 1> atunci
<secventa 1>
altfel daca <conditie 2> atunci
<secventa 2>
altfel
altfel
<secventa n>
stop
Pseudocod:
if <conditie 1> then
S1
else if <conditie 2> then
S2
else if <conditie 3> then
S3
else
.
else
Sn
endif
Semnificatie:
evalueaza ADEVARAT executa
<conditie 1> <secventa 1>
FALS
evalueaza ADEVARAT executa
<conditie 2> <secventa 2>
FALS
.
FALS
executa
<secventa n>
Schema logica:
ADEVARAT
<conditie 1> <secventa 1>
FALS
ADEVARAT
<conditie 2> <secventa 2>
FALS
.
FALS <secventa n>
Se evalueaza <conditie 1>; daca este ADEVARATA, se executa <secventa 1>; altfel, se evalueaza <conditie 2>; daca este ADEVARATA, se executa <secventa 2>; altfel, se evalueaza <conditie 3> si asa mai departe, pana la <conditie (n-1)>; daca aceasta este ADEVARATA, se executa <secventa (n-1)> si altfel se executa <secventa n>; apoi se executa urmatoarea instructiune din algoritm (prima de dupa IF-THEN-ELSE-.-ELSE).
Aceasta instructiune este numita decizie multipla deoarece este formata din mai multe instructiuni simple de decizie (IF-THEN-ELSE), legate impreuna intr-o singura structura de decizie; este similara instructiunii CASE, dar ramificatiile se construiesc diferit: la CASE, era vorba de valori diferite pentru o expresie data, in timp ce aici avem diferite conditii de evaluat.
Exemplu:
citeste X
daca X > Ù X < 10 atunci
atribuie A A + 1
ori X > Ù X < 20 atunci
atribuie B B + 1
ori
altfel
scrie "varsta eronata"
stop
Instructiunile din dreptunghiul punctat reprezinta un exemplu de decizie multipla.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 3260
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved