Sunteți pe pagina 1din 7

CAP.

1 ALGORITMI • Tipul ei ;
• Valoarea ei la un moment dat ;
1.1 NoŃiunea de algoritm, caracteristici. • Locul în memoria calculatorului unde poate fi găsită variabila
(adresa ei ).
Def. Prin algoritm se înŃelege o metodă de soluŃionare a unei clase de
probleme, reprezentată de o succesiune finită de operaŃii bine definite, 1.2.3 Expresii .
numite instrucŃiuni . Cu ajutorul constantelor, variabilelor şi operatorilor se pot construi
diverse expresii. În scrierea expresiilor este permisă folosirea
Caracteristicile unui algoritm : parantezelor.
Expresiile sunt de mai multe tipuri :
• este descris clar, fără ambiguităŃi în privinŃa ordinii de execuŃie a • Întregi ;
instrucŃiunilor ; • Reale ;
• este corect, deci este o metodă care rezolvă problema pe orice caz • Logice ;
(rezolvă o clasă de probleme ) ; • De tip şir de caractere .
• este finit, deci se termină după un număr finit de paşi, indiferent cât de
mulŃi ; 1.2.3.1 Expresii întregi .
• este realizabil cu resursele disponibile . Folosesc operatorii +, -, * (pentru înmulŃire), DIV (pentru câtul împărŃirii
întregi), MOD (pentru restul împărŃirii întregi) ş.a.
1.2 Date, variabile, expresii, operaŃii . Rezultatul evaluării lor este un număr întreg .
Exemple :
1.2.1 Date 3*x+7, unde x este variabilă întreagă ;
Orice algoritm porneşte de la anumite date de intrare, le prelucrează, iar în a*(b+c), unde a, b, c sunt variabile întregi .
final obŃine date de ieşire .
Datele pot fi clasificate după tipul lor : 1.2.3.2 Expresii reale .
• Întregi ; ex. 120, -120 Operanzii care le alcătuiesc sunt constante şi variabile întregi sau
reale.Pe lângă operatorii utilizaŃi în cadrul expresiilor întregi, putem
• Reale ; ex. 3.12, 12.3 (pentru despărŃirea zecimalei în loc de
virgulă se foloseşte punctul ) utiliza şi alŃii cum ar fi de exemplu : ‘/’ (pentru împărŃirea cu zecimale ).
Rezultatul evaluării lor este întotdeauna un număr real .
• Logice; ex. TRUE(adevărat), FALSE(fals)
• Şir de caractere; ex. ‘un text’ .
1.2.3.3 Expresii logice .
Datele din primele doua tipuri se numesc date numerice .
Rezultatul lor poate avea numai două valori :TRUE sau FALSE .
Operatorii sunt cei din logica matematică : OR, AND, NOT .De
1.2.2 Variabile . asemenea este permis să folosim şi operatorii <, >, >= (mai mare sau
Tipurile de variabile coincid cu tipurile de date. Printr-o variabilă
egal), <= (mai mic sau egal), <> (diferit).
înŃelegem un ansamblu de patru elemente:
Exemple :
• Numele variabilei ; a OR b, unde a si b sunt variabile logice ;
1
(a>=b) AND (c<d) . Dacă atribuim variabile z valoarea z+z+7 (z:=z+z+7) atunci z va avea
valoarea 11 .
1.2.3.4 Expresii de tip şir de caractere . OperaŃia de atribuire se efectuează astfel :
Se folosesc constante si variabile de tip şir de caractere .Singurul operator • Se evaluează expresia din partea dreaptă a operaŃiei de
permis este operatorul + având semnificaŃia de concatenare (scrierea a atribuire ;
celor două şiruri unul după altul ). • Valoarea care se obŃine astfel este preluată de variabila din
Exemplu : partea stângă, iar valoarea avută de aceasta se pierde .
a + ‘text’, unde a este o variabilă de tip şir de caractere având conŃinutul
‘acest ‘ are ca rezultat şirul ‘acest text’ . 1.2.4.3 OperaŃii de decizie .
În general, în funcŃie de anumite condiŃii, trebuie făcute anumite operaŃii
1.2.4 OperaŃii . sau altele. OperaŃia prin care testăm acele condiŃii se numeşte operaŃia de
decizie. În funcŃie de rezultatul testului, algoritmul execută anumite
Clasificare operaŃii : operaŃii.
• OperaŃii de intrare şi ieşire ;
• OperaŃii de atribuire ; 1.3 Structuri de bază(liniară, alternativă, repetitivă)
• OperaŃii de decizie ; • Structurile : liniară, alternativă şi repetitivă ;
• Descrierea algoritmilor cu ajutorul schemelor logice şi în pseudocod ;
1.2.4.1 OperaŃii de intrare şi ieşire . Programarea structurată este o metodă independentă de limbajul de
Prin operaŃia de intrare ( de citire) se înŃelege preluarea unei date de la un programare, ea acŃionând la nivelul stilului de lucru. Programarea
dispozitiv de intrare (tastatura, unitatea de dischetă, unitatea de disc) către structurată reprezintă o manieră de concepere a programelor potrivit unor
memoria internă a calculatorului, în spaŃiul rezervat pentru aceasta (spaŃiul reguli bine stabilite, utilizând un anumit set, redus, de tipuri de structuri
rezervat pentru variabila care primeşte ca valoare acea dată ). de control .
Prin operaŃia de ieşire (scriere ) se înŃelege trecerea unei date din memoria Programarea structurată poate fi reprezentată ca o combinaŃie a trei
internă către un dispozitiv de ieşire ( monitorul, unitatea de dischetă, structuri de control :
unitatea de disc) . • SecvenŃa (succesiunea de două sau mai multe operaŃii) ;
• Decizia (alegerea unei operaŃii dintre două alternative posibile );
1.2.4.2 Operatii de atribuire . • Ciclul cu test iniŃial (repetarea unei operaŃii atâta timp cât o anumită
Să presupunem că un algoritm foloseşte o variabilă notată arbitrar z şi o condiŃie este îndeplinită) .
alta notată y .Dorim ca z să ia o anumită valoare ( de ex. 2) .Spunem că Programarea structurată admite şi utilizarea altor structuri de control,
am atribuit variabilei z valoarea 2 şi pentru moment vom nota acest lucru cum sunt :
astfel : z:=2.Atât timp cât asupra variabilei z nu efectuăm nici o altă • SelecŃia (permite o alegere între mai mult de două alternative ) ;
operaŃie de atribuire şi nu efectuăm nici o operaŃie de citire, aceasta îşi • Ciclul cu test final ;
păstrează valoarea 2.Presupunem că scriem valoarea variabilei z pe
• Ciclul cu contor .
monitor .După scriere variabila z va avea în continuare valoarea
Ultimele două structuri de control reprezintă variante ale structurii
2.Presupunem că atribuim variabilei y valoarea variabilei z (y:=z).În urma
referită în general ca ‘iteraŃie’.
atribuirii, valoarea variabilei y va fi 2 şi valoarea variabilei z va rămâne 2.
2
1.3.1 Structura liniară
Structura liniară este definită de mai multe instrucŃiuni: instrucŃiunea de
apel a unui subprogram, instrucŃiunea de atribuire, instrucŃiunea compusă 1.3.2 Structura alternativă (de selecŃie)
şi instrucŃiunea vidă. 1.3.2.1 Structura de selecŃie simplă
Sintaxă:
1.3.1.1 InstrucŃiunea de apel a unui subprogram dacă <expresie> atunci
Cu ajutorul acestei instrucŃiuni, se apelează un subprogram (procedură sau <secvenŃa_1>
funcŃie). Se scrie numele subprogramului urmat de şirul de parametrii pe altfel
care îi conŃine. <secvenŃa_2>
Principiul de funcŃionare a structurii de selecŃie simplă:
1.3.1.2 InstrucŃiunea de atribuire 1. Se testează condiŃia dată de expresia logică <expresie>
Prin această instrucŃiune i se atribuie unei variabile o anumită valoare. 2. Dacă această condiŃie este adevărată se execută secvenŃa de
Exemplu: a2; instrucŃiuni <secvenŃa_1> (corpul ramurii „atunci”)
b2*a+3; 3. în caz contrar, se execută <secvenŃa_2> (corpul ramurii
Prin această atribuire, variabila a primeşte valoarea 2, iar variabila b, „altfel”);
valoarea 7. În continuare, orice referire la variabilele a sau b, înseamnă o ObservaŃii:
referire la valorile 2, respectiv 7. • dacă ramura „altfel” lipseşte nu se execută nimic dacă
Exemplu 2: c5; condiŃia logică se dovedeştea fi falsă
În general, prin atribuire, partea din stânga primeşte valoarea părŃii din • dacă cele două secvenŃe de instrucŃiuni: <secvenŃa_1>,
dreapta. (în exemplul 2, c devine 5). respectiv <secvenŃa_2> cuprind două sau mai multe
instrucŃiuni, ele trebuie cuprinse între „început” şi „sfârşit”
1.3.1.3 InstrucŃiunea compusă • Oricare dintre cele două secvenŃe de instrucŃiuni pot
InstrucŃiunea compusă mai poartă denumirea şi de bloc de instrucŃiuni. cuprinde la rândul lor structuri de selecŃie, obŃinându-se
InstrucŃiunea compusă este formată din totalitatea instrucŃiunilor cuprinse aşa-numita structură de selecŃie imbricată . În acest caz,
între „început” şi „sfârşit” fiecare ramură “altfel” se asociază ultimei ranuri “dacă-
ObservaŃie: atunci” dinaintea sa, care nu a fost încă asociată. Dacă se
1. InstrucŃiunea compusă poate cuprinde la rândul ei alte instrucŃiuni doreşte schimbarea acestei asocieri, se vor folosi cuvintele
compuse. “început” şi “sfârşit”
2. Însăşi partea de instrucŃiuni a programului este de fapt un bloc de • Înainte de cuvântul “altfel” nu se pune “punct şi virgulă”
instrucŃiuni. (“ ;”)
Exemplu de program care foloseşte structura de selecŃie simplă:
1.3.1.4 InstrucŃiunea vidă - program care calculează maximul a două numere întregi a şi b
Această instrucŃiune este o instrucŃiune aparte deoarece ea nu conŃine citite de la tastatură
nimic. O succesiune de două sau mai multe simboluri „ ; ”, indică faptul că
între ele se află o instrucŃiune vidă. citeşte a,b;
3
dacă a>b atunci - InstrucŃiunea de selecŃie multiplă se încheie cu cuvântul
maxa; “sfârşit”
altfel
maxb;
scrie max; Exemplu de program care utilizează secvenŃa de selecŃie multiplă:

citeşte a,b;
1.3.2.2 Structura de selecŃie multiplă citeşte opt ;
Cu ajutorul structurii de selecŃie multiplă putem alege o secvenŃă de alege opt dintre
instrucŃiuni dintre mai multe secvenŃe posibile, spre deosebire de structura 1: scrie (a+b)/2;
de selecŃie simplă, unde puteam alege o secvenŃă de instrucŃiuni din două 2: scrie a*a+b*b;
posibile, în funcŃie de valoarea de adevăr a unei condiŃii logice. 3: scrie a*a*a+b*b*b;
altfel
Alegerea unei secvenŃe de instrucŃiuni în cazul unei structuri de selecŃie scrie ‘Eroare’;
multiplă se va face în funcŃie de valoarea unei expresii numite selector. De sfârşit.
cele mai multe ori, această expresie este o variabilă.
Sintaxă: Se citesc de la tastatură valorile variabilelor a,b, respectiv opt. Se testează
apoi valoarea variabilei opt în cadrul unei instrucŃiuni de selecŃie
alege <selector> dintre multiplă.
caz_1: Dacă opt primeşte valoarea 1 atunci se va afişa media aritmetică a
<secvenŃa_1> valorilor primite de a şi b.
caz_2: Dacă valoarea lui opt în urma citirii este 2, atunci se va afişa suma
<secvenŃa_2> pătratelor celor 2 numere.
………………………………… Dacă valoarea lui opt în urma citirii este 3, atunci se va afişa suma
caz_n: cuburilor celor 2 numere.
<secvenŃa_n> Dacă opt primeşte în urma citirii orice altă valoare în afară de 1,2 sau 3
altfel atunci se va afişa mesajul ‘Eroare’.
<secvenŃa_0>
sfârşit 1.3.3 Structura repetitivă

Principiul de funcŃionare al structurii de decizie multiplă: 1.3.3.1 Structura repetitivă cu test iniŃial
-Se va alege o valoare a selectorului (selectorul poate avea una dintre Sintaxă:
valorile: caz_1, caz_2,…, caz_n) Cât timp <expresie> execută <secvenŃă>
- Se va executa secvenŃa de instrucŃiuni corespunzătoare valorii
alese <Expresie> este o condiŃie (expresie logică), iar <secvenŃă> este o
- Dacă valoarea aleasă pentru selector nu este cuprinsă în nici secvenŃă formată dintr-una sau mai multe instrucŃiuni numite corpul
unul din cazurile caz_1,…, caz_n se va executa corpul ramurii ciclului;
altfel (<secvenŃa_0>).
Principiul de funcŃionare al structurii repetitive cu test iniŃial
4
Cât timp este îndeplinită condiŃia dată de <expresie> se execută 2) se evaluează condiŃia logică dată de <expresie>
corpul ciclului <secvenŃă>: - dacă aceasta (<expresie>) este adevărată atunci se execută
1) se evaluează expresia logică <expresie> secvenŃa <secvenŃă>, apoi se revine la 1.
2) dacă aceasta este adevărată atunci se execută secvenŃa <secvenŃă>, apoi -dacă condiŃia impusă nu este adevărată, se trece la prima
se revine la 1. (între timp este posibil ca valoarea expresiei <expresie> să instrucŃiune de după ciclu.
fi suferit modificări) ObservaŃie:
- dacă condiŃia impusă nu este adevărată, se trece la prima instrucŃiune de 1.În cazul în care corpul ciclului conŃine mai multe instrucŃiuni, acesta
după ciclu. trebuie cuprins între „început” şi „sfârşit”
ObservaŃie: 2.Testarea condiŃiei are loc la început, deci corpul ciclului se va executa
1. În cazul în care corpul ciclului conŃine mai multe instrucŃiuni, cel puŃin o dată.
acesta trebuie cuprins între „început” şi „sfârşit”. Exemplu de program care foloseşte structura repetitivă cu test final
2. Testarea condiŃiei are loc la început, deci corpul ciclului poate să Program care calculează câte numere negative sunt într-un şir de
nu se execute niciodată. numere citit de la tastatură până la întâlnirea valorii 0.
Exemplu de program care foloseşte structura repetitivă cu test iniŃial:
Program care calculează câte numere dintr-un şir sunt pozitive: citeşte x;
nr0;
citeşte x; repetă
dacă x<0 atunci
nr0;
cât timp x<>0 execută nrnr+1;
început citeşte x;
dacă x>0 atunci până când x=0
scrie nr;
nrnr+1;
citeşte x;
sfârşit 1.3.3.3 Structura repetitivă cu număr fix de paşi
scrie nr; Sintaxă:
pentru <contor> de la <v1> la <v2> execută <secvenŃă>
1.3.3.2 Structura repetitivă cu test final
Sintaxă: Principiul de funcŃionare al structurii
repetă <secvenŃă> până când <expresie> Variabila <contor> ia pe rând toate valorile de la <v1> la <v2> şi
• <expresie> este o condiŃie (expresie logică), iar pentru fiecare valoare a lui <contor> execută corpul ciclului constituit de
<secvenŃă> este o secvenŃă formată dintr-una sau mai <secvenŃă>;
multe instrucŃiuni, numită corpul ciclului AplicaŃie:Suma primelor n numere naturale:

Principiul de funcŃionare al structurii: citeşte n;


Repetă execuŃia secvenŃei de instrucŃiuni <secvenŃă > până când condiŃia s0;
pentru i de la 1 la n execută
logică dată de <expresie> ia valoarea true (devine adevărată).
ss+i;
1) se execută secvenŃa de instrucŃiuni <secvenŃă> scrie s;

5
1.4 Descrierea algoritmilor(programe în pseudocod) 1.4.2 Numere prime
1.4.1 Probleme care operează asupra cifrelor unui număr Program care testează dacă un număr este prim .
Varianta Pascal Varianta pseudocod Program nrprim; Citeşte n
Program care calculează suma cifrelor unui număr . var n,mij,i:longint; mij←round(sqrt(n))
program suma_nr; Citeşte n este:boolean; este←false
var n,s,r: longint; s←0 begin Pentru i=2,mij Execută
begin r←0 readln(n); Dacă n mod i=0 Atunci
readln(n); Repetă mij:=round(sqrt(n)); este←true
s:=0; r←n mod 10 este:=false; Dacă este Atunci Scrie
r:=0; s←s+r for i:=2 to mij do (‘Numărul nu este prim’)
repeat n←n div 10 if n mod i=0 then Altfel Scrie (‘Numărul este
r:=n mod 10; PânăCând n<=0 este:=true; prim’)
s:=s+r; Scrie s if este then writeln('nr ',n,'nu
n:=n div 10; este prim')
until n<=0; else writeln( 'nr ',n,' este
writeln(s); prim');
end. end.
Program care inversează cifrele unui număr .
Program inversare_cifre; 1.4.3 Algoritmul lui Euclid
var n,nr:longint; Citeşte n Program care calculează cel mai mare divizor comun dintre
begin nr←0 două numere .
readln(n); Repetă Program cmmdc;
nr:=0; nr←nr*10+n mod 10 Var n1,n2,r:longint; Citeşte n1 şi n2
repeat n←n div 10 begin Repetă
nr:=nr*10+ n mod 10; PânăCând n<=0 readln(n1,n2); r←n1 mod n2
n:=n div 10; Scrie nr repeat n1←n2
until n<=0; r:=n1 mod n2; n2←r
write(nr); n1:=n2; PânăCând r=0
end. n2:=r; Scrie n1
until r=0;writeln(n1);end.

6
1.4.4 Şirul lui Fibonacci (fără array)
Program care calculează al n-lea termen din şirul lui
Fibonacci .
Program fibonacci;
var n,i,a1,a2,a3:longint;
begin
readln(n); Citeşte n
a1:=1; a1←1
a2:=1; a2←1
for i:=3 to n do begin
Pentru i=3,n Execută
a3:=a1+a2;
a1:=a2; a3←a1+a2
a2:=a3; a1←a2
end; a2←a3
writeln(a2);
end.
Scrie a2

S-ar putea să vă placă și