Sunteți pe pagina 1din 39

Clasa 9-a , INFO

1. Notiunea de algoritm
2. Pseudocod. Date. Expresii
3. Instructiuni de intrare/iesire. Atribuirea. AF: interscimbarea a 2 !alori
". Instructiunea de deci#ie. AF: maximul a doua numere $psp%multimi&
'. Instructiunea (A) )I*P $ x+#% capete% alo% cadouri%sume"%,a#anr&
1. AF:Prelucrarea sirurilor cu numar necunoscut de !alori $care se inceie cu #ero&
2. AF:(alculul (**D(si (***( $ingerasi&
-. Instructiunea PEN)./ $case1% conturi% bancomat%gardul%racete%pri#e%!ra0i%pin%barca%cabina&
1. AF:Prelucrarea sirurilor cu numar cunoscut de !alori
2. AF:Di!i#ibilitate. N este prim1 $tort%!ra0i&
2. Instructiunea E3E(/)A (A) )I*P $triplu&
1. AF:Prelucrarea ci,relor unui numar natural
4. (are instructiune repetiti!a este mai buna1
5. AF: (on!ersia unui numar natural din ba#a 16 in ba#a 7
16. AF:(on!ersia unui numar din ba#a 7 in ba#a 16
11. AF:8irul lui Fibonacci
Despre
Ma numesc Chelariu Mihai si sunt profesor de informatica. Intentia mea este de a crea material didactic online pentru uzul elevilor
mei sau a tuturor doritorilor. Sper sa pot acoperi, in timp, intreaga materie.
In meniu, puteti observa sectiunile:
operare Windows structura calc, notiuni de retele, foldere, fisiere, lin!uri, creare fisiere video cu Movie Ma!er"
elemente Internet situri, motoare de cautare, cercetare #ahoo.com, cercetare $oogle.com, elemente %&M'"
MS. (ffice
MS (ffice Word
MS (ffice)owerpoint in lucru"
MS (ffice*+cel in lucru"
MS (ffice ,ccess in lucru"
-e asemenea, e+ista si articole legate de algoritmica si programare in limba. C/C00" corespunzatoare cursului de Informatica
aferent claselor 1233.
,stept observatiile si sugestiile voastre.
Multumesc,
(elariu *iai
1.
L1. Notiunea de algoritm
Istoric. Definitie
Cuvantul algoritm provine de la numele unui matematician arab Mohammed ibn2Musa al24howarizmi" a carui lucrari au fost
traduse in latina sub numele de Algoritmus.
-efinitia actuala a cuvantului algoritm :
,nsamblu de simboluri folosite 5n matematic6 i 5n logic6, permi7nd g6sirea 5n mod mecanic prin calcul" a unor
rezultate.
Succesiune de operaii necesare 5n rezolvarea unei probleme oarecare
-in punctul de vederea al informaticii, algoritmul reprezinta rezolvarea etapizata, in pasi mici, elementari, a unei probleme.
Scopul folosirii algoritmului este aplicarea lui la o serie pe probleme care au aceeasi metoda de rezolvare8 adica, pentru orice
dateale problemei, algortimul trebuie sa se incheie cu un raspuns.
9n e+emplu in acest sens este acuatia de gradul I. *+ista o infinitate de ecuatii de gradul I dar toate se subscriu aceleiasi ecuatii
generice A93:7;6. ,lgoritmul trebuie sa rezolve aceasta ecuatie generica pentru a obtine rezultate corecte pentru intreaga clasa
se ecuatii de gradul I sau sa anunte eroarea in cazul in care simbolul , ar avea valoarea :.
Caracteristici
-educem de aici o serie de proprietati pe care un algoritm corect trebuie sa le indeplineasca:
sa aiba caracter de generalitate: sa rezolve o intreaga clasa de probleme de acelasi gen pentru orice date de intrare"
sa aiba finitudine: sa ofere un raspuns la problema si sa se incheie in timp util
sa fie clar: calculul/etapele sa fie descriese intr2o maniera fara dubii
DA)E DE IN).A.E <= A>?@.I)* <= DA)E DE IE8I.E
Reprezentarea algoritmilor
S2au identificat cateva structuri folosite in descrierea unui algoritm:
sec!enta: pasii sa se e+ecute unul dupa altul
testul: in cazul in care rezolvarea trebuie sa raspunda unei intrebari sa putem aplege traseul logic ce trebuie urmat
repetitia: sa putem repeta o anumita secventa daca algoritmul o cere
-e asemeni, pentru e+primarea algoritmilor s2au incercat metode care sa poata fi intelese de toti. Iata cateve dintre ele:
sceme logice: metoda grafica care specifica traseul ce trebuie urmat
pseudocod: un set de reguli de scriere , in principiu in limba engleza8 pt elevi s2a simplificat, folosindu2se aceleasi notatii
si limba romana o varianta care se poate folosi in laborator gasiti la http://www.has!ell.org/has!ellwi!i/;odin/-ownload"
limba0 de programare: mult mai strict ca e+primare dar folosind aceleasi concepte.
Limbajul RODIN prezentare succinta
@bs: Nu exista declaratii de !ariabile
Programul principal
<= instr8 =>
Instructiuni de citire/afisare
citeste variabila8
scrie expresie8
te+t ?. text?8
Atribuirea
fie variabila @ expresie8
Operatori logici:
S,9, SI,
Instructiune de test
daca COND" atunci instr altfel instr8
Instructiuni repetitive
cat timp COND" <instr;>8
e+ecuta <inst1; instr2;> atat cat COND"8
repeta <instr1; instr2;> pana cand COND"
pentru atribuire; test ;pasul urm" <instr;>8
2.
L2. Pseudocod. Date. !presii
Cuvantul pseudocod provine din pseudo, care inseamna fals, si cod care se refera la te+tul scris intr2un limba. de programare.
-eci pseudocod inseamna un asa2zis limba. de programare.
)seudocodul foloseste aceeasi operatori si o e+primare la rela+ata fata de un limba. consacrat , care cere rigurozitate.
)seudocodul, ca orice limba., foloseste date, variabile, operatii si instructiuni.
)entru doritori, va prezint o varianta de pseudocod apropiata de cea din manual, limba.ul .odin a domnului profesor -an )opa de
la 9niveristatea Aacau. In acest fel puteti pigmenta orele de informatica din clasa a 12a si cu ore de laborator. :"
Date
-atele cu care lucreaza un algoritm scris in pseudocod" sunt:
valori intregi: 3B, 2C, 3D
valori reale: E.3F, 23::C.BC, = 8 observati ca folosim punct zecimal si nu virgula ca in notatia de la matematica
valori logice: adevarat true" si fals false"
siruri de caractere: ?introdu valoarea:G, ?rezultatul este:G
Variabile
( variabila este un simbol care se caracterizeaza prin:
nume8 se noteaza cu combinatii de litere sau cifre dar intotdeauna primul caracter este litera: a, Aeta, nr3, nrB
tip de data: intreg, real, sir de caractere, logic
!aloare: functie de tipul de data asociat, o variabila poate avea valori din cele de mai sus8 valoarea memorata se poate
schimba, de unde si numele de variabila8
)ractic, o variabila se comporta ca o cutie ce poate fi folosita doar pentru ceva anume: valorile intregi in cutii pentru valori intregi si
valori reale in cutii pentru valori reale8 doar nu puneti zahar intr2o cutie de pantofi. :".
-in acest motiv, la inceputul algoritmului nostru in pseudocod trebuie sa specificam cu ce variabile lucram si ce tip au, ca in
e+emplul de mai .os:
intreg m,n
real x,y.z
logic o, exista, este
Expresii
*+presiile sunt foormate din operatori si operanzi. Hormeaza e+presie urmatoarele
o variabila
variabila operator variabila
expresie operator expresie
operator expresie cazul operatorilor unari de genul - (5+3) "
-intre operatorii folositi vom vorbi acum numai de cei intregi care se folosesc numai pentru operanzi intregi":
semnul A < G se foloseste pentru scaderi sau ca operator unar
semnul G : G se foloseste pentru adunari
semnul G 9 G se foloseste pentru inmultiri
semnul G / G se foloseste pentru impartiri
semnul G I G se foloseste pentru a obtine restul impartirii primului operand la cel de al doilea
o a I b @ restul impartirii lui a la b
o a I B @ restul impartirii lui a la B, care este 3 daca a este impar si : daca a este par
o a I 3: @ restul impartirii lui a la 3:, care este intotdeauna ultima cifra a lui a, cifra unitatilor
prioritatea operatiilor este aceeasi ca in matematica8 mai intai inmultirile si impartirile si apoi adunarile si scaderile
se pot folosi si paranteze pentru e+presiile mai complicate, dar numai perechide paranteze rotunde
atentie la ordinea operatiilor si folosirea parantezelor rotunde e+. ecuatia de gradul B":
o +3@2b0 radicalbJb2FJaJc"/BJa
o +3@2b0 radicalbJb2FJaJc""/BJa
o +3@2b0 radicalbJb2FJaJc""/BJa"
care din variantele de mai sus este corectaK
o prima imparte numai radicalul la B, rezultatul este inmultit cu a si apoi se efectueza scaderea
o al doilea e+emplu pune parantezele pentru numarator dar imaprte numai la B, rezultatul impartirii fiind inmultit cu
a
o abia ultima varianta separa numitorul si numaratorul prin paranteze
".
L". Instruc#iuni intrare$ie%ire. &tri'uirea
Instructiuni e intrare ie!ire
,sa cum am vazut in lectiile anterioare schema flu+ului de date in rezolvarea unei probleme este urmatoarea:
Date de intrare <= Algoritm <= Date de iesire $.e#ultate&
-educem ca aven nevoie de o metoda de a prelua datele initiale ale problemei reale" pentru a le putea prelucra in algoritm. -e
asemenea, avem nevoie de o metoda de a transmite rezultatul calculului nostru.
)entru preluarea datelor vom folosi instructiunea (iteste.
!intaxa: (iteste variabila8
"xemplu: (iteste a8
"fect: Se citeste o valoarea care va fi memorata in variabila a
Observatii:
o pentru G intreg n8 citeste n G , nu putem introduce o valoare reala E.3F" deoarece variabila n este declarata ca
fiind intreaga
)entru afisarea rezultatului vom folosi instructiunea 8crie:
!intaxa: 8crie e+presie
"xemplu: 8crie a
"fect:
o instructiunea 8crie afiseaza valoarea e+presiei
o presupunand ca ceea ce se scrie este transmis care monitor, atunci prima instructiune scrie afiseaza sirul de
caractere #ezultatul problemei iar cea de a doua afiseaza valoarea memorata in variabila a la acel moment
Observatii
o pentruafisarea unor te+te folosim text acesta este mesajul
o instructiunea scrie afiseaza valoarea e+presiei8 atunci o instructiune de tipul 8crie a:b va afisa valoarea
calculata a e+presiei a:b8 adica se aduna valoarea lui a cu valoarea lui b si se afiseaza rezultatul e+presiei
)ana acum, cel mai complicat algoritm pe care il putem scrie este cel de adunare a doua valori intregi:
Intreg a, b8
(iteste a, b8
8crie a0b.
-aca ar fi doar atat= :)
"tribuirea
)entru a schimba valoarea unei variabile pot folosi citirea. -aca totusi doresc ca variabila sa primeasca valoarea unei e+presii
calculate pe parcursul algoritmului, atunci am nevoie de atribuire:
8intaxa: variabilaL2 e+presie8
E,ect: In ?cutiaG variabilei se memoreaza valoarea e+presiei8
Exemplu:
o intre$ a; a%& 1';
o real b; fie b%& (.1);
o sir c; fie c%& *totul e o+8
@bser!atie:
o noua valoare se memoreaza peste vechea valoare care se va pierde8 adica, se inloceste vechea valoare cu cea noua
o in fiecare din e+emple in variabila se memoreaza o valoare de acelasi tip cu variabila8 nu putem memora intr2o variabila o valoare de alt tip:
secventa intre$ a; a%&(.1); scrie a; nu este corecta8 variabila a este de tip intreg si nu poate memora o valoare reala.
secventa real a; a%& ,1'; este corecta deoarece valoarea intreaga 3: este si valoare reala, conform incluziunii matematice.
greselile frecvente sunt cele in care valori obtinute in urma unor impartiri sau radicali valori reale" sunt atribuite unor variabile intregi
o operatiile cele mai de intalnite la atribuire sunt incrementarea marirea cu 3 a valorii variabilei" si decrementarea micsorarea cu 3 a valorii variabilei"
o incrementarea: a<- a+1;
asa cum stim , intai se calculeaza valaorea e+presiei cresterea cu 3 a lui a" si apoi se memoreaza in variabila, peste vechea valoare
o decrementarea: a<- a-1;
se calculeaza valoarea e+presiei scadereacu 3 a lui a" si apoi se memoreaza in variabila, peste vechea valoare
Exemplul 1: calculul vitezei, atunci cand stim valoarea distantei parcurse si timpul necesar8
real viteza8
intreg timp, distanta8
citeste timp, distanta8
viteza B< distanta/timp8
scrie viteza.
Exemplul 2 $interscimbarea a doua !ariabile ,olosind auxiliar&. Hie doua variabile intregi. Sa se interschimbe valorile
variabilelor. -aca variabila a are valoarea C si variabila b are valoarea D, dupa e+ecutarea algorimului, variabila a sa aiba valoare D
si variabila b sa aiba valoare C.
intreg a, b, au+8
citesc a, b8
au+L2a8
aL2b8
bL2au+8
scrie a, b.
observatie: problema este similara cu urmatoarea problema. ,veti un pahar de bere rolul variabilei a" si o halba de suc
rolul variabilei b". )entru a schimba bauturile aveti nevoie de o cana goala rolul variabilei au+"8
o turnam in cana goala continutul paharului
o turnam in pahar continutul halbei
o turnam in halba continutul canii
o acum toate sunt in ordine8 berea in halba si sucul in pahar si gana este goala8 M9 A*M -*C,& S9C9'N
Exemplul 2 $interscimbarea !alorii a doua !ariabile ,ara auxiliar&. ,vem aceeasi problema dar trebuie rezolvata fara o
variabila in plus.
intreg a, b8
citeste a,b8
a L2 a0b8 bL2 a2b8 aL2 a2b8
scrie a,b.
(.
L(. Instruc#iunea de deci)ie
Hara instructiunea de decizie sau de test in nici un caz detest" algorimul ar fi linear. ,ceasta instructiune ne a.uta in cazul in care
avem o intrebare privind natura datelor folosite, a valorii lor la un moment dat.
)ractic, trebuie sa punem intrebari la care algoritmul sa raspunda cu adevarat/fals8 ce operatori folosim pentru a obtine raspunsuri
adevarat/falsK
Expresii cu #aloare logica $ae#arat%fals&
Operatori de relatie*
?OG inseamna mai mare
o aOb are valoarea adevarat numai daca valoarea variabilei a este mai mare decat valoarea variabilei b
?LG inseamna mai mic
o aLb are valoarea adevarat numai daca valoarea variabilei a este mai mica decat valoarea variabilei b
?O@G inseamna mai mare egal
o aOb are valoarea adevarat numai daca valoarea variabilei a este mai mare sau egala cu valoarea variabilei b
?L@G inseamna mai mic sau egal
o aOb are valoarea adevarat numai daca valoarea variabilei a este mai mica sau egala cu valoarea variabilei b
G @G inseamna egal
o a@b are valoarea adevarat numai daca variabila a are aceeasi valoare cu variabila b
?N@G inseamna diferit
o aN@b are valoarea adevarat numai daca variabila a M9 are aceeasi valoare cu variabila b
Operatori logici
(peratorii logici cu care lucreaza si logica matematica" sunt SI, S,9 si M*$,;*:
@peratorul 8I este un operator binar, cu doi operanzi cu valoare logica. ;ezultatul operatorului SI este adevarat numai
daca ambii operanzi au valoarea ,-*P,;,&.
o ?Mie imi place fata bruneta si cu ochi albastriNG
o daca fata nu este bruneta sau nu are ochi albastri nici nu ma uit la ea :)", ceea ce inseamna fals8 daca macar
una dintre conditii este falsa atunci intreaga e+presie este falsa
@peratorul 8A/ este un operator binar cu doi operanzi cu valoare logica. ;ezultatul operatiei S,9 este adevarat daca
macar unul din operanzi are valoarea ,-*P,;,&.
o ?Mie imi place fata bruneta S,9 cu ochi albastriN?
o Hata nu trebuie sa aiba ambele calitati. -aca este bruneta imi place ,-*P,;,&". -aca este cu ochi albastri imi
place ,-*P,;,&".
o -aca macar una din conditii este adevarata atunci intreaga e+presie este adevarata
@peratorul de negatie vom folosi semnul G N G " schimba valoarea de adevar a e+presiei: N,-*P,;,&@@H,'S si NH,'S
@@,-*P,;,&
Exemple:
Q apartine R2C, 2BS
o +O@2C" SI QL@2B"
+ apartine :, 3:"
o +O:" SI +L3:"
+ nu apartine 2D,1S
o +L@2D" S,9 +O1"
o N+O2D" S,9 N+L@1"
o NQO2D" SI +L@1""
@bser!atii
prioritatea operatorilor logici: negare, SI, S,9
in cazul e+presiilor logice se pot aplica regulile lui -e Morgan:
o C e+p3 si e+pB" @ Ce+p3 sau Ce+pB
o Ce+p3 sau e+pB" @ Ce+p3 si Ce+pB
Instructiunea e ecizie $e test' sau etest ()&
!intaxa:
daca $e+pTlogica" atunci instructiune3
Dalt,el instructiuneB8S
"fect: Se evalueaza e+presia logica8 daca valoarea logia ca e+presiei este ,-*P,;,& se e+ecuta intructiunea 38 -aca e+ista
sectiunea ,'&H*' si valoarea logica a e+presiei este H,'S se e+ecuta intructiunea B8 in ambele cazuri, dupa e+ecutarea
intructiunii corespunzatoare si e+ecuta ce instructiune urmeaza dupa testul nostru.
@bser!atie. 9n algoritm trebuie sa fie clar si sa poata fi inteles intr2un singur fel. -in acest punct de vedere, e+ista doua moduri de
a scrie un algoritm:
cate o instructiune pe linie si cu marcatori la sfarsitul instructiunilor de test si repetitive cum cere manualul"
mai multe instructiuni pe line, separate printr2un marcator8 pentru cazul cand un grup de instructiuni trebuie e+ecutate
impreuna pe unul din cazurile intrtuctiunii de decizie de e+emplu ", acestea pot fi incadrate cu acolade in limba.ul C00" sau cu
cuvinte rezervate begin = end"8
)entru ca pdeudocodul nu este un limba. in sine ci doar o conventie de notatii, sugerez sa folosim de.a notatiile din C008
cand o secventa de instructiuni trebuie e+ecutate una dupa alta, datorita logicii algoritmului, acea secventa o vom incadra
in acolade de e+emplu: Einstructiune1% instructiune2% instructiune3% FG"8 vom reveni cu amanunte.
Exemple:
!a se afiseze maximul a doua valori citite.
intreg a,b8
citeste a,b8
daca aOb" atunci scrie a
alt,el scrie b.
Sa se afiseze modulul matematic" al unui numar intreg.
intreg a8
citeste a8
daca aO:" atunci scrie a
alt,el scrie 2a.
!a memoram valoarea maxima intr&o variabila si sa o afisam.
intreg a,b,ma+8
citeste a,b8
daca aOb" atunci ma+L2a
alt,el ma+L2b8
8crie ma+.
!a se citeasca o valoare intrea$a si sa se stabileasca daca s&a citit o valoare para sau nu.
intreg a8
citeste a8
daca aIB @@:" atunci scrie ?Paloarea citita este paraNG
alt,el scrie ?Paloarea citita este imparaNG.
-ie a si b coeficientii unei ecuatii de $rad 1. !a se afiseze solutia ecuatiei a.x , b /'8
o evident +@2b/a daca aN@:8
intreg a,b8
real +8
citeste a,b8
daca aN@:" atunci E xL2 <b/a% scrie ?Solutia ecuatiei este ?8 Scrie +8>
alt,el scrie ?Mu se poate calcula solutia ecuatieiG.
Secventa 0 x/&b1a; scrie 2!olutia ecuatiei este 2; !crie x;3 trebuie gandita ca un intreg deoarece este valabila numai pentru cazul in
care a este nenul8 de aceea am incadrat2o intre acolade.
-ie a, b si c coeficientii unei ecuatii de $rad 2 4a.x52,b.x,c/'6. !a se calculeze valorile radacinii, daca exista.
o conditia pentru a fi ecuatie de grad B: coeficientul a trebuie sa fie nenul aN@:"
o trebuie calculata valoarea -*'&,@bJb2FJaJc
o pentru a avea solutii, valoarea -*'&, trebuie sa fie pozitiva, cel putin nula8
o vom folosi radical $expr& pentru a calcula valoarea radicalului unei e+presii reale/intregi
intreg a,b,c,delta8
real +3,+B8
citeste a,b,c8
daca a@@:" atunci scrie G Coeficientii nu formeaza ecuatie de gradul BU8
alt,el <delta@bJb2FJaJc8
daca deltaL:" atunci scrie ?Mu se pot calcula radacini reale ?
alt,el <+3L2 2b0radicaldelta""/BJa"8 +BL2 2b2radicaldelta""/BJa"8
scrie ?Solutiile sunt :G, +3,G ?, +B8 >
>
@bser!atii:
+3 si +B sunt declarati reali pentru ca se obtin in urma radicalului si a unei impartiri
urmariti daca algoritmul scrie concide cu termenii problemei
pentru cazul coeficientului a nenul trebuie efectuate doua operatii calculul lui delta si testul lui delta", motiv pentru care
acestea au fost incadrate intre acolade
la calculul solutiilor au fost puse paranteze pentru separarea numitorului si a numaratorului
de asemenea, aici au trebuit puse acolade pentru calculul celor doua solutii si a afisarii solutiilor
-ie o functie matematica data pe intervale. !a se calculeze valoarea functiei intr&un punct x oarecare daca expresia
functiei este7
o x52,2.x,1 daca x%'
o (.x,8 daca x apartine 9',86
o &x,2 daca x:/8
o este clar ca valoarea functie difera pe cele trei intervale8 va trebui sa verificam, pe rand, carui interval apartine
valoarea citita pentru x8
real +,f8
citeste +8
daca +L:" atunci fL2 +J+0BJ+03
alt,el daca +O@C" atunci fL2 2+0B
alt,el fL2 EJ+0C8
scrie f.
+.
L+. Instruc#iunea repetiti,- C./ /I0P
Chiar si cu atribuirea si intructiunea de decizie, si tot nu este de a.uns. *+ista probleme ce necesita repetarea unor operatii si cu
ceea ce stim, nu putem face fata.
*+ista trei instructiuni structuri" repetitive folosite in toate limba.ele:
instructiunea repetitiva cu test initial C,& &IM) W%I'*" se foloseste cand numarul de repetitii este nedefinit"
instructiunea repetitiva cu test final ;*)*&,2),M, C,M- / *Q*C9&, C,& &IM) -( W%I'* sau ;*)*,&" se foloseste
cand numarul de repetitii este nede,init"
instructiunea repetitiva cu un numar cunoscut de pasi )*M&;9 H(;" se foloseste cand numarul de repetitii
este cunoscut"
Instructiunea C"* *I+)
!intaxa: cat timp 4expresie;lo$ica6 executa instructiunea8
"fect:
3. se stabileste valoarea de adevar a e+presiei logice
B. daca valoarea e+presiei logice este ,-*P,;,& atunci se e+ecuta instructiunea si se reia de la pasul 3
E. daca valoarea e+presiei logice este H,'S atunci se continua cu instructiunea de dupa C,& &IM)
@bser!atii:
C,& &IM) este repetitiva conditionata anterior deoarece intai se evaluaeza conditia si apoi se e+ecuta instructiunea
)ractic, succesiunea de etape este exp logica, instructiune,exp logica, instructiune,exp logica,instructiune,=exp
logica%succesiunea se incheie cu e+p logica in momentul in care valoarea e+presiei este H,'S.
daca pe cazul ,-*P,;,& trebuie sa scriem mai multe instructiuni, acestea vor fi grupate cu acolade
Exemplul 1
-ie a si b doua valori naturale. !e se simuleze inmultirea a.b prin adunari repetate.
o )@aJb@a0a0=.0a de b ori
o *+presia de mai sus spune ca a trebuie adunat la P de b ori8 adica, la fiecare adunare la P a lui a putem sa
scadem un 3 din b decrementam", pentru a pastra numarul de adunari ce mai trebuie efectuat8 candb va fi zero , se va
adunat a de b ori
intreg a,b,p8
citeste a,b8
pL2:8
cat timp bO:" executa <pL2 p0a8 bL2 b238>8
scrie p.
@bser!atii:
pentru fiecare adunare a lui a la p, scadem un 3 din b
aceste operatii trebuie e+ecutate pentru fiecare caz in care b este pozitiv8 de aceea au fost grupate cu acolade
este algoritmul corectK Sa verificam cazurile cu zero:
o daca a este zero, atunci la ) se aduna zero de b ori8 practic ) ramane la valoarea zero. C(;*C&N
o daca b este zero, conditia din C,& &IM) este falsa si atunci nu se e+ecuta instructiunile8 in consecinta se
afiseaza direct valoarea lui ),adica zero8 C(;*C&N
Exemplul 2
-ie a si b doua valori naturale. !a se simuleze impartirea lui a la b prin scaderi repetate si sa se afiseze catul si restul.
o vom scadea din a valoarea lui b de mai multe ori, numarand intr2o variabila contor de cate ori am facut scaderea
practic variabila contor va fi catul impartirii"
o operatia se va repeta cat timp din a se mai poate scadea un b, adica cat timp a mai mare decat b
o Ce reprezinta valoarea ramasa in aK ( valoare mai mica decat bK *vident, restul impartirii.
intreg a, b, contor8
contorL2 :8
daca b@:" atunci scrie ?nu se realizeaza impartiri la zeroNG8
alt,el <cat timp aO@b" executa <aL2 a2b8 contorL2contor038>8
scrie ?catul este ?, contor8
scrie ?restul este ?, a8
>.
@bser!atii:
am pus intre acolade secventa in care numaram de cate ori am scazut pe b din a8 erau doua instructiuni8
este corect algoritmulK -aca incercati cazurile normale, va merge. Sa verificam cazurile speciale:
o daca a este mai mic decat b atunci cat timp nu va functiona si se va afisa direct contor zero" si arestul"8
C(;*C&N
o daca a este zero, atunci nu se e+ecuta cat timp si se afiseaza contor si a : si : " C(;*C&N
o daca b este zero, se afiseaza mesa.ul de eroare si algoritmul se incheie C(;*C&N
Exemplul 3.
!a se calculeze cel mai mare divizor comun a doua valori a si b naturale.
o asa cum spune definitia, cel mai mare divizor comun trebuie sa fie o valoare, care sa divida atat pe a cat si pe b8
aceasta valoare poate fi in cel mai bun caz a sau b
intreg a,b8
citeste a,b8
cmmdcL2 a8
cat timp aIcmmdc 0bIcmmdc N@:" executa cmmdcL2 cmmdc238
scrie cmmdc.
@bser!atii:
e+presia a<cmmdc ,b<cmmdc =/' este nula doar daca atat aIcmmdc cat si bIcmmdc sunt nule, adica cmmdc divide
simultan a si b8 atat timp cat aceasta conditie nu se realizeaza scadem cmmdc2ul
ultima valoare panaa la care se poate scadea este 3, divizorul tuturor numerelor8 in acest caz a si b se numesc numere
prime intre ele.
Exemplul "
Ghiceste-mi numarul! "u imi ale$ un numar intre 1 si 1''. >n cati pasi il poti $?ici@ Aa fiecare incercare raspund cu
!BCC"!, C>C sau CD#".
o prima varianta este sa intrebam aleator8 cam multi pasiN
o sa parcugem valorile de la 3 la 3::8 cam multi pasiN
o sa gandimN vom testa intodeauna mi.locul intervalului8 in acest fel, la fiecare intrebare, elimin .umatate din cazuri.
intreg +,m3,mB, mi., pasi8
citesc +8 m3 L2 38 mBL2 3::8
mi.L2 C:8 pasiL2 :8
cat timp mi.N@+" executa
<daca +Lmi." atunci mBL2 mi.8
alt,el m3L2 mi.8
mi.L2m30mB"/B8
pasiL2 pasi 038>8
scrie pasi.
Observatie:
dupa fiecare test fara succes intervalul in care cautam se a.usteaza la stanga daca mi0 este mai mic decatx" sau la
dreapta daca mi0 este mai mare decat x"
Exemplul '.
-ie N un numar natural. !a se calculeze suma cifrelor lui N.
o vom initializa o variabila suma cu zero
o trebuie ca delimitam pe rand cifrele care formeaza numarul M8 putem determina rapid ultima cifra: nI3:8 daca o
stergem nL2 n/3:" putem deternima penultima cifra8 s.a.m.d.
o cand ne oprimK = cand M nu mai are cifre8 deci , cand M este zero.
intreg n, suma8
citeste n8
suma L2:8
cat timp nN@:" executa <sumaL2suma0nI3:8 nL2n/3:8>8
scrie suma.
Observatie7
instructiunea suma%&suma,n<1' creste suma cifrelor de.a obtinute cu valoarea ultimei cifre a lui n.
pentru cazul in care n este nul, cat timp nu se mai e+ecuta si se afiseza suma cu valoarea :8 Suma cifrelor lui : este :.
C(;*C&N
+.1
L9. &lgoritmi 1undamentali. 2iruri de numere
)entru a prelucra un sir de numere trebuie sa stim fie numarul de valori in discutie sir cu numar cunoscut de valori", fie sa avem o
valoare care sa marcheze sfarsitul sirului de obicei V zero".
Prelucrarea unui ir cu numr cunoscut de valori
-e vreme ce stim cate valori vor fi in sir prelucrarea va fi retetat de un numar cunoscut de ori" putem folosi instructiunea
H(;/)*M&;9.
natural x, n, i;
citeste N
pentru i=1,N executa
{ citeste X;
//prelucrez X
........
}
Prelucrarea unui ir cu un numr necunoscut de valori (care se ncheie cu zero
Paloarea zero nu face parte din sir si nu trebuie prelucrata. Mu stim e+act cand primim valoarea zero care marcheaza sfarsitul
sirului", motiv pentru care la fiecare citire trebuie sa verificam daca s2a citit zero saunu.-aca valoarea citita nu este zero avem de
realizar prelucrarea ceruta de problema si o noua citire.
citeste x;
cat timp (x!=0) {
//prelucrez valorea X
.........
//trec la valoarea urmatoare
citeste X
}
Probleme
3. Sa se calculeze suma/produsul valorilor din sir
B. Sa se determine valoarea minima/ma+ima dintre valorile citite.
E. ( valoare data # se gaseste in sirK
F. -e cate ori apare o valoare data #K
C. )resupunand ca sirul reprezinta coeficientii uni polinom dati incepand cu gradul cel mai mic", calculati valoarea polinomului intr2un
punct #.
+.2
L11. Cmmdc. Cmmmc
C.m.m.d.c. este acronimul prima liter6 de la fiecare cuv7nt" de la ?cel mai mare divizor comunG Wi se aplic6 pentru dou6 numere
naturale.
Problema. Hie doua numere naturale , si A. Sa se determine cel mai mare divizor comun a lui , si A.
Sa citim iar. )ractic trebuie sa determin un numar natural care sa fie divizor atat pentru , cat si pentru A. -aca sunt mai multe
numere in aceasta situatie, atunci il aleg pe cel mai mare. Ceea ce ma duce cu gandul la
Varianta ,.
citeste D, E;
cmmdc/';
pentru D/1 pana la D executa
daca 4D<D//' si E<D//' 6 atunci cmmdc/D;
scrie cmmdc;
)ractic, cmmdc2ul va fi cel mult unul dintre numere. ,s putea sa fiu prevazator si sa aleg ca limita superioara pe cel mai mic dintre
, si A. Si conditia de numitor comun se poate rescrie ,I- 0AI-@@:.
Varianta -.
citeste D,E
min/D; daca 4min:E6 atunci min/E;
pentru D/1 pana la min executa
daca 4A! +"!##$6 atunci cmmdc/D;
scrie cmmdc;
Varianta ..
)roblema nu e noua, *uclid cca EBC V BXC 5.%r.NNNNN" s2a gandit si el la acelasi lucru si a gasit o solutie.
(AS. M2am gandit de multe ori cum sa e+plic elevilor ce anume l2a facut pe *uclid sa se gandeasca la problema cmmdc si mi2am
imaginat urmatorul scenariu: %ucli& a'ea o camera &e latime A si lungime " (e care sotia lui 'roia sa o aco(ere cu (laci
(atrate &e gresie) *entru a-si im(resiona (rietenele+ (lacile trebuiau sa aco(ere integral su(ra,ata camerei si sa ,i cat mai
mari) -um a re.ol'at %ucli& (roblema/ *ractic trebuie &esenat un caroiaj cu (atrate &e latura -00!-)
-aca - este divizorul comun a lui , si A, atunci estista ,B si AB asa incat:
,@-J,B
A@-JAB si deduce ca si diferenta acestor numere are acelasi divizor comun
,2A@-J,B2AB"
)ractic, in ?leneaG lui de a calcula cmmdc,,A", *uclid propune mereu o pereche mai mica ,2A, A" daca ,OA sau ,, A2," daca
AO,. -eci, cmmdc,, A" este
,2A, A" daca ,OA
,, A2," daca AO,
, daca ,@@A
Se observa ca in primele doua cazuri trebuie sa reluam algoritmul, ceea ce ne duce cu gandul la urmatoarea secventa:
citeste D,E
cat timp 4D=/E6 executa
daca 4D:E6 atunci D/D&E;
altfel E/E&D;
scrie D;
Varianta /.
-eci varianta E e de acum B::: de aniN Intre timp, s2a mai facut o varianta. -aca ,@BEFCX si A@Y1 ar trebui sa se efectueze o
multime de scaderi a lui A din ,. Scaderi repetate, pana nu se mai poate scadea pe A din ,N ,sta este o impartire si ce ramane in
, este restul. In consecinta, pe cel mai mare il vom transforma in restul impartirii. Cand ne oprimK Me vom opri cand , sau A vor fi
nule, ceea ce inseamna ca cealalta valoare, nenula, va fi CMM-C.
citeste D,E;
cat timp 4D.E=/'6 executa 11&aca nici unul nu e nul1)
daca 4D:E6 atunci D/D<E;
altfel E/E<D;
scrie D,E; 11a,ise. 'aloarea nenula
Parianta C.
-esi varianta F e o solutie respectabila, inca nu e de a.uns. )ractic, la fiecare iteratie se e+ecuta B teste V cel din C,& &IM) si cel
din -,C,. Parianta urmatoare foloseste aceeasi idee de mai sus dar elimina unul din teste.
citeste D,E;
cat timp 4E=/'6 executa
0#/D<E; D/E; E/#;3
//se iese cand A este nul@O
scrie D;
Anali#a !ariantelor
*vident, ultima varianta este cea mai buna. ,m e+plicat de.a ratiunile prin care s2a trecut de la o varianta la alta. In vederea
e+amenului de bacalaureat va trebuie toate variantele, indeosebi ultima pentru momentul cand va trebui sa programati.
Calculul C+++C
)entru calculul matematic a cmmdc pentru doua numere , si A, se realizeaza descompunerea in factori primi si apoi se considera
termenii comuni, la puterea cea mai mica.
)entru calculul matematic a cmmmc pentru doua numere , si A, se realizeaza descompunerea in factori primi si apoi se considera
termenii comuni si necomuni, la puterea cea mai mare.
)ractic daca as scrie produsul ,JA ca inmultire intre descompunerile lor, as observa ca toti termenii e+istenti sunt fie parte a
CMM-C, fie parte a CMMMC.
-e aici apare si relatia ,JA@CMM-C,,A"JCMMMC,,A". )ractic ne vom folosi de (***($AH7&;A97/(**D($AH7&.
citeste D,E
D2/D; E2/E; 11salvez separat datele initiale
11calculez CCCDC
cat timp 4E=/'6 0#/D<E; D/E; E/#;3
//afisez CMMMC
scrie 2CCCCC este 2, D2.E21D.
3.
L3. Instructiunea PN/45 6 7C5/&
*+ista trei instructiuni structuri" repetitive folosite in toate limba.ele:
instructiunea repetitiva cu test initial C,& &IM) W%I'*" se foloseste cand numarul de repetitii este nedefinit"
instructiunea repetitiva cu test final ;*)*&,2),M, C,M-/*Q*C9&, C,& &IM) -( W%I'* sau ;*)*,&" se foloseste
cand numarul de repetitii este nede,init"
instructiunea repetitiva cu un numar cunoscut de pasi )*M&;9 H(;" se foloseste cand numarul de repetitii
este cunoscut I un numar ,ix de ori."
!intaxa: *%2345 contor%&exp;init,exp;fin %6%-53A instructiune
"fect: pentru fiecare valoare a contorului intre e+presia initiala si e+presia finala se e+ecuta instructiunea8
"xemplu: pentru i L2 3,3: executa scrie G Mu ma prinziNG8
pentru fiecare valoarea a variabile i, de la 3 la 3:, se afiseaza G Mu ma prinziNG
de 3: ori se afiseaza G Mu ma prinziNG
daca secventa ce trebuie repetata contine mai multe instructiuni, acestea se vor grupa cu acolade
Observatii7
practic, pentru fiecare valoare a lui i, intai se testeaza daca nu s2a depasit valoarea finala 3: si apoi se e+ecuta
instructiunea8
algoritmic, propozitia de mai sus este :
o iL238 cat timp iL@3:" <scrie G Mu ma prinziNG8 iL2i038 >8
practic , secventa de mai sus me e+plica faptul ca instructiunea pentru este o clona a instructiunii cat timp.
instructiunea este ?cerutaG daca descrierea algorimului spune ?de la valoarea Q la valoarea #G, ?pentru primele Q valoriG,
?de Q oriG, =
Exemplul 1.
!a se afiseze numerele pare pana la o valaore N, naturala.
intreg n,i8
citeste n8
pentru iL2 :,n executa
daca iIB@@:" atunci scrie i.
Observatii:
algoritmul ia fiecare valoare intre : si n si o testeaza daca este para restul impartirii lui i la B sa fie nul : i<2//'"
se efectueaza n pasi din care .umatate sunt gresiti8 trebuie o varianta mai buna
Exemplul 2.
Dceeasi problema dar incercam sa mer$em din doi in doi
o intreg n,i8 citeste n8 pentru iL2:,n,B executa scrie i.
o intreg n,i8 citeste n8 pentru iL2:,n/B executa scrie iJB.
Observatie7
in primul caz, B2ul de dupa n i%&',n,2 " stabileste cresterea lui i cu B si nu cu 3 asa cum este implicit
in al doilea caz, ne folosim de faltul ca valorile cautate sunt pare, divizibile cu B8
Exemplul 3
Sa se calculeze suma primelor M numere naturale.
o evident, stim formula nJn03"/B dar sa incercam un algoritm8
o va trebui sa adunam, la o suma , toate valoarile de la 3 la n
intreg n,i,suma8
citeste n8
sumaL2:8
pentru iL2 : ,n executa sumaL2 suma 0i8
scrie suma.
*+emplul E.
!e citeste un sir de N valori intre$i. !a se determine cea mai mare valoare citita 4valoarea maxima dintr&un sir6.
intreg n,i,ma+,val8
citeste n8
citeste ma+8
pentru iL2B,n executa <citeste val8 daca valOma+ atunci ma+L2val8>8
scrie val.
3.1
L9. &lgoritmi 1undamentali. 2iruri de numere
)entru a prelucra un Wir de numere trebuie s6 Wtim fie num6rul de valori 5n discuZie Wir cu num6r cunoscut de valori", fie s6 avem o
valoare care s6 marcheze sf7rWitul Wirului de obicei V zero".
Prelucrarea unui ir cu numr cunoscut de valori
-e vreme ce stim cate valori vor fi in sir prelucrarea va fi retetat de un numar cunoscut de ori" putem folosi instructiunea
H(;/)*M&;9.
natural x, n, i;
citeste N
pentru i=1,N executa
{ citeste X;
//prelucrez X
........
}
Prelucrarea unui ir cu un numr necunoscut de valori (care se ncheie cu zero
Paloarea zero nu face parte din sir si nu trebuie prelucrata. Mu stim e+act cand primim valoarea zero care marcheaza sfarsitul
sirului", motiv pentru care la fiecare citire trebuie sa verificam daca s2a citit zero saunu.-aca valoarea citita nu este zero avem de
realizar prelucrarea ceruta de problema si o noua citire.
citeste x;
cat timp (x!=0) {
//prelucrez valorea X
.........
//trec la valoarea urmatoare
citeste X
}
Probleme
3. Sa se calculeze suma/produsul valorilor din sir
B. Sa se determine valoarea minima/ma+ima dintre valorile citite.
E. ( valoare data # se gaseste in sirK
F. -e cate ori apare o valoare data #K
C. )resupunand ca sirul reprezinta coeficientii uni polinom dati incepand cu gradul cel mai mic", calculati valoarea polinomului intr2un
punct #.
3.2
L18. &lgoritmi 1undamentali. Di,i)i'ilitate. N este prim9
!ivizibilitate
Problema. Pentru un N datH care sunt di!i#orii lui N1
Multimea divizorilor lui M este cuprinsa intre valorile 3 si M. 9n numar - este divizor al lui M daca M se imparte e+act la -. )entru
noi, impartirea e+acta inseamna ca restul impartirii lui M la - este zero. &rebuie sa cautam acele valori intre 3 si M la care M se
imparte e+act. Pom aifsa si vom numara aceste valori.
natural N, , N!;
N!=0;
citeste N;
pentru =1, N executa
"aca (N#==0) atunci { scrie ; N!=N!$1}
scrie N!;
Cu numarul de divizori putem stabili daca numarul M este prim.
"aca (N!==%) atunci scrie N, & este prim!&
"ste # numr prim$
Problema. Fie N un numJr natural. Este N numJr prim1
Conform matematicii un numar M este prim daca are drept divizori pe 3 si pe M.
Karianta 1. Ideea este sa realizam cat mai putine teste, astfel incat algoritmul sa se incheie mai repede
-@B8
cat timp -L@M23 si MI-N@:" e+ecuta -@-038
daca MI-@@:" atunci scrie ?divizibilG
altfel scrie ?primG
,m redus doua teste : nu mai testam cazul -@3 si -@M. -e asemenea, profitam de situatia in care gasim primul divizor pentru a
iesi din repetitie. &otusi, pentru cazul in care numarul ar fi prim, inca se e+ecuta M2B pasi.
Parianta B. Mumarul B este cel mai mic potential divizor. -educ ca numarul M/B este cel mai mare potential divizor.
-@B8
cat timp -L@M/B si MI-N@:" e+ecuta -@-038
daca MI-@@:" atunci scrie ?divizibilG
altfel scrie ?primG
In aceasta varianta se e+ecuta, in cel mai rau caz, M/B operatii. SuperN ,m redus munca la .umatateN Se poate mai bineK
Karianta 3. Sa cercetam, in continuare, perechile de potential divizori: B cu M/B, E cu M/E, F cu M/F, =. (bserv ca pe masura ce
primul termen creste, al doilea scade. -educ ca, la un moment dat cei doi termeni pot fi egali. ,dica ar putea fi un element Q astfel
incat M@@QJQ sa fie adevaratN In consecinta Q@radicalM" . -eci ultima pereche care ar trebui studiata este cea cu radical $N&.
-@B8
cat timp -L@radicalM" si MI-N@:" e+ecuta -@-038
daca MI-@@:" atunci scrie ?divizibilG
altfel scrie ?primG
*ste cert ca radicalM"LM/B. Iata ca am obtinut un numar mai mic de operatii. Sa cercetam cat de eficienti sunt algoritmii nostri.
Mumarul M@X331CE este prim, spun unii.
varianta 3 va e+ecuta maxim -115'1 pasi
varianta B va e+ecuta ma+im 36' 52- pasi
varianta % va e&ecuta ma&im '() pasi*******
* ceva, nuK
Karianta ". Si inca mai merge=
daca M@@B" atunci scrie ?primG
altfel daca nMIB@@: " atunci scrie ?divizibilG
altfel <
o -@E8
o cat timp -L@radicalM" si MI-N@:" e+ecuta -@-0B8
o daca MI-@@:" atunci scrie ?divizibilG
o altfel scrie ?primG >
,lgoritmul de mai sus verifica daca M este B si elimina din discutie numerele pare. )entru ca ma.oritatea numerelor prime sunt
impare, parcurg numai valorile impare si le intreb daca nu cumva sunt divizori pentru M.
Parianta F va efectua ma+im 356 pasi pentru M@X331CE.
:.
L:. Instruc#iunea 7C5/; C./ /I0P
*+ista trei instructiuni structuri" repetitive folosite in toate limba.ele:
instructiunea repetitiva cu test initial C,& &IM) W%I'*" se foloseste cand numarul de repetitii este nedefinit"
instructiunea repetitiva cu test final ;*)*&,2),M, C,M-/ *Q*C9&, C,& &IM) -( W%I'* sau ;*)*,&" se foloseste
cand numarul de repetitii este nede,init"
instructiunea repetitiva cu un numar cunoscut de pasi )*M&;9 H(;" se foloseste cand numarul de repetitii
este cunoscut"
Instructiunea "+",-./ ,0. .I1P
!intaxa: executa instructiune cat timp e+prTlogica"
"fect:
3. se e+ecuta instructiunea
B. se stabileste valoarea de adevar a e+presiei logice
E. daca valoarea conditiei este ,-*P,;,& atunci se revine la pasul 3
F. daca valoarea conditiei este H,'S, atunci se continua cu instructiunea de dupa *Q*C9&, C,& &IM)
Observatii:
instructiunea *Q*C9&, C,& &IM) este o instructiune repetitiva conditionata posterior sau cu test final"
intai e+ecuta instructiunea de repetat si apoi verifica necesitatea repetarii8 instrutiunea se e+ecuta macar o data
secventa de operatii este: instructiuneH conditie, instructiune, = , conditie, instructiune, conditie
)utewti folosi aceasta instructiune pentru algortimul de prelucrare a cifrelor unui numar natural M:
executa <cifL2 nI3:8 prelucre# ci,ra 8 nL2n/3:> cat timp nN@:"8
Exemple:
sa se afiseze cifrele numarului
sa se numere cate cifre are M
sa se stabileasca de cate ori apare o cifra anume
sa se determine cifra ma+ima/minima din numar
sa se creeze oglinditul numarului M M@3BEF @O FEB3"
sa se stabileasca daca M estre palindrom egal cu oglinditul sau". *+: 3BEB3, 33, 3B3, =
:.1
L<. &lgoritmi 1undamentali. Prelucrarea ci1relor unui num-r natural
Hie M un numar natural. ,vem nevoie sa prelucram pe rand cifrele unui numar natural.
In prelucrarea cifrelor numarului, cel mai usor a.ungem la ultima cifra MI3:" . -upa prelucrarea ei, ultima cifra va trebui inlaturata
M@M/3:". Si totul trebuie repetat cat timp M mai are cifre MN@:".
-e vreme ca nu stim cate cifre are M, nu putem folosi intructiunea H(;/)*M&;9. ;aman instructiunile repetitive cu un numar
necunoscut de pasi : C,& &IM) *Q*C9&,/W%I'* si *Q*C9&, C,& &IM)/ -( W%I'*.
)entru C,& &IM) *Q*C9&,/W%I'* am un contraargmuent. ,lgoritmul ar trebui sa fie
cat timp (N!=0) executa { //prel ultima ci'ra a lui N
.......N#10;
//ster(em ultima ci'ra
N=N/10;
}
-aca utilizatorul doreste sa aplice algoritmul pentru valoarea zero, nu se va efectua nimic si secventa noastra nu se va
e+ecuta.*vident, situatia se poate evita prin plasarea unui test inainte de C,& &IM) , care sa verifice daca M este nul.
Mu ramane decat varianta cu *Q*C9&, C,& &IM)/-( W%I'*.
executa{ //prel ultima ci'ra a lui N
.......N#10;
//ster(em ultima ci'ra
N=N/10;
} cat timp (N!=0);
Cateva probleme clasice pentru acest algoritm:
3. Sa se numere cate cifre are numarul M
B. Sa se stabileasca cate cifre pare/impare are numarul M.
E. Sa se stabileasca daca M contine o cifra data, CIH.
F. Sa se numere de cate ori apare cifra CIH in numarul M.
C. Sa se determine cifra ma+ima/minima din numarul M
X. Sa se construiasca ?oglinditulG numarului M. )entru M@EXFY se va afisa YFXE.
D. Sa se stabilesca daca M este palindrom egal cu oglinditul sau".
Y. )entru un numar M dat, sa se construiasca cel mai mare numar natural care se poate forma cu cifrele lui M.
cat timp (N!=0) executa { //prel ultima ci'ra a lui N
.......N#10;
//ster(em ultima ci'ra
N=N/10;
}
<.
L:.2. Care instruc#iune repetiti,- este mai 'un-9
-esi sunteti tentati sa alegeti trebuie sa stit ca ambele instructiuni au aceeasi capacitate. &oata problema este sa verificati in
algoritmul dumneavoastra daca trebuie sau nu efectuat un test inainte de e+ecutarea instructiunii/instructiunilor de repetat.
8imularea instructiunii (A) )I*P E3E(/)A cu E3E(/)A (A) )I*P. Instructiunea C,& &IM) *Q*C9&, intai testeaza si apoi
e+ecuta8 daca comparam secventele de e+ecutie observam ca la C,& &IM) *Q*C9&, intai apare un test/conditie. si apoi este
identica cu *Q*C9&, C,& &IM)8 nu ramane decat sa folosim o instructiune de test pentru aceasta conditie8
cat
timp e+pTlogica" executa instructiune8
daca e+pTlogica" atunciexecuta instructiune cat
timp e+pTlogica"
(bservati ca pentru transformarea unei instructiuni cat timp in una e+ecuta cat timp, nu trebuie dacat sa
identificati conditia si secventa care se repeta8 apoi copiati corespunzator in sablon.
8imularea instructiunii E3E(/)A (A) )I*P cu (A) )I*P *Q*C9&, .
executa instructiune cat
timp e+pTlogica&% instructiune8cat timp e+pTlogica" executa instructiune8
8imularea instructiunii .EPE)A PANA (AND cu E3E(/)A (A) )I*P.
repeta instructiune pana cand e+pTlogica"8 executa instructiune cat timpNe+pTlogica"
8imularea instructiunii PEN)./ cu (A) )I*P *Q*C9&, .
pentru iB<A pana la 7 cu pasul ( executa
instructiune. i L2 ,8cat timp iL@A" executa <instructiune8 iL2i0C>8
9.
L1(. Con,ersia unui num-r din 'a)a 18 =n 'a)a >
9n numar MA scris in baza A are ?cifreG cu valori intre : si A23.
)entru a obtine reprezentarea numarului M3: in baza A, trebuie sa realizam un sir de impartiri repetate la A.
Hie M3:@BF1: si A@Y
BF1: impartit la Y produce catul E33 si restul B.
E33 impartit la Y produce catul EY si restul D
EY impartit la Y produce catul F si restul X
F impartit la Y produce catul : si restul F
'uam resturile in ordine inversa si obtinem MA@FXDB.
,lgoritmul de mai .os urmareste e+act acest tip de calcul. Se observa ca pentru constructia lui MA trebuie sa lipim fiecare rest in
fata numarului MA.
citeste N10;
N)=0;
p10=1;
cat timp(N10!=0)
{
N)=N)$*10+(N10#));
*10=*10+10;
N=N/);
}
scrie N).
18.
L1". Con,ersia unui num-r din 'a)a > =n 'a)a 18
9n numar MA scris in baza A are ?cifreG cu valori intre : si A23. )roblema noastra este sa determinam ce numar M3: ii corespunde
lui MA pentru baza 3:.
)entru aceasta sa observam urmatorul e+emplu. 9n numar in baza 3:, M3:@BF1: poate fi scris si in forma canonica, adica
M3:@BJ3:[E0FJ3:[B01J3:[30:J3:[:.
Hie MA@FXDB scris in baza A@Y. )entru a converti MA in baza 3: trebuie sa il scriem in forma canonica.
M3:@FJY[E0XJY[B0DJY[30BJY[:. -upa calcule se obtine valoarea M3:@BF1:.
)ractic trebuie sa calculam o suma de produse a cifrelor din MA cu puteri ale bazei. Pom folosi algoritmul de prelucrare a cifrelor
unui numar MA".
citeste NE, E;
N1'/';
FE/1;
executa0
N1'/N1',4NE<1'6.FE;
*"#*"7";
NE/NE11';
3cat timp 4NE=/'6;
scrie N1';
11.
L12. 2irul lui Fi'onacci
\irul lui Hibonacci este 3, 3, B, E, C, Y, 3E, B3, EF, =. Wi are leg6tur6 cu celebrul num6r de aur.
Se observ6 c6 Wirul 5ncepe cu valorile 3 Wi 3 , dup6 care, fiecare nou6 valoare se obZine prin adunarea ultimelor dou6 valori:
H3"@3
HB"@3
Hn"@Hn23"0Hn2B"
)entru noi problema este de a determina al N<lea termen din Lir.
-ac6 M@3 sau M@B, r6spunsul este simplu, 3. ]n restul cazurilor trebuie ca av7nd mereu ultimile valori , si A, s6 calcul6m noua
valoare C@,0A mereu trebuie memorat6 noua pereche format6 V ultimile doua valori determinate"
citeste N;
D/1;E/1;
daca 4N%/26 atunci scrie 1;
altfel 0pentru i/(,N executa
011calculam noua valoare
C/D,E;
11pre$atim noua perec?e
D/E;E/C3
scrie E;3
Clasa a 18-a, INFO
Lim'a?ul C$C@@
1. Al,abetH identi,icatoriH constante H !ariabile
2. )ipuri
3. @peratori. Expresii
". 8tructura unui program (/(::
'. (itirea. A,isarea
-. Atribuirea
2. Instructiunea IF
4. Instructiunea D@ I MNI>E
5. Instructiunea MNI>E
16. Instructiunea F@.
11. Algoritmi ,undamentali
1. (on!ersia unui numar din ba#a 16 in ba#a 7
2. (on!ersia unui numar din ba#a 7 in ba#a 16
3. 8irul lui Fibonacci
". (mmdc. (mmmc
'. Di!i#ibilitate. N este prim1
-. Prelucrarea sirurilor de numere
2. Prelucrarea ci,relor unui numar natural
12. )ablouri.
3.
L.. "lfabet0 ientificatori0 constante 0 #ariabile
25N@K
"lfabetul
,lfabetul folosit in limba.ul C/C00este format din:
litere mici: a2z
litere mari: ,2^
cifre: :21
semne speciale: <>RS:8LO@0J2_,.I`N"a
Ientificatori
Cu caracterele din alfabetul de mai sus se pot construi cu!inte. In programare aceste cuvinte se
numescidenti,icatori. Identificatorii sunt de doua tipuri:
identi,icatori proprii limba0ului cuvinte rezervate, din care sunt formate instructiunile": for, G?ile, if, do,
identi,icatori ai programatorului: trebuie sa fie formati din litere, cifre si semnul G T ?8 regula este ca primul
caracter sa fie obligatoriu litera.
Identificatorii programatorului pot avea rolul:
nume de constante simboluri a caror valoare nu se modi,ica pe parcursul e+ecutiei programului"
nume de variabile simboluri a caror valoare se modi,ica pe parcursul e+ecutiei programului"
nume de tipuri create de utilizator de e+: vector, matrice, punct V la structuri"
Variabilele
( variabila este un identificator, purtator a unei singure valori. ( variabila se caracterizeaza prin:
nume
tip de data ceea ce determina spatiul de memorie alocat variabilei si in consecinta, domeniul de
!alori care se pot memora in variabila respectiva"
locatie de memorie
*+ista si aici cateva reguli:
in principiu, la inceputul programului trebuie sa declarati ce variabile folositi si tipul fiecareia din ele
nu puteti folosi o variabila nedeclarata sau care inca nu a primit valoare neinitializata"8
o e+ceptie de la regula o reprezinta cazul valorilor intregi care se initializeaza automat cu zero ordonat ar fi
sa cititi sau sa initializati voi fiecare variabila="
limba.ul C/C00 face distinctie intre litere mari si mici
o identificatorul H(; va genera eroare, pentru ca limba.ul cunoaste doar ,or%
o variabilele N.H n.H nrH Nr sunt diferite din punctul de vedere al C/C00
B.
L/. *ipuri
*ipurile intregi
&ipurile intregi din C/C00 sunt: enum, short int, int, unsigned int, long, unsigned long.
)entru fiecare variabila se aloca rezerva" un spatiu de memorie conform cu tipul ei. ,cest lucru influenteaza domeniul de valori
care se poate aloca variabilei:
enum+ short int+ int:
o spatiu: 3X biti
o domeniu: 2EBDXY..EBDXD
unsigne& int
o spatiu: 3X biti
o domeniu: :..XCCEC
long
o spatiu: EB biti
o domeniu:2B3FDFYEXFY .. B3FDFYEXFD
unsigne& long
o spatiu: EB biti
o domeniu:: .. FB1F1XDB1C
@bser!atii:
valorile 9MSI$M*- eng: fara semn" sunt valori naturale, cu valori pozitive
in spri.inul ideii de mai sus, ca tipul determina domeniul de valori, venim cu urmatoarea demonstratie:
o presupunem ca avem o variabila , de tip int pe 3X biti"8 aceasta inseamna ca valoarea ma+ima ce se poate
memora este un sir de 3C pozitii binare cu 3 primul bit memoreaza semnul"8 daca convertim aceasta valoare din baza B in
baza 3: puteti folosi aplicatia C,'C9',&(; din Windows" obtinem e+act EBDXD
o analog, pentru o variabila unsi$ned int 3X biti" putem memora 3X pozitii binare cu 3 din cauza unsi$ned, nu mai
avem semn V adica valori pozitive"8 sirul de 3X pozitii binare reprezinta valoarea XCCEC din baza 3:.
*ipurile reale

floatEB biti": E.F J 3:JJ2EY" .. E.F J 3:JJ0EY"
doubleXF biti": 3.D J 3:JJ2E:Y" .. 3.D J 3:JJ0E:Y"
long doubleY: biti": E.F J 3:JJ2F1EB" .. 3.3 J 3:JJ0F1EB"
*ipul caracter
char 23BD .. 3BD pentru fiecare caracter este asociata, in mod unic, o valoare de la : la 3BD8 aceasta asociere se
numeste C(-9' ,SCII"

E.
L1. Operatori. Expresii
Palorile variabilelor interactioneaza intre ele prin operatii. Simbolurile prin care reprezentam aceste operatii se numesc operatori.
Combinatiile care apar in urma folosirii operatorilor si variabilelor/constantelor se numescexpresii.
( ex(resie poate fi:
o constanta/!ariabila
o combinatie de tipul operator ex(resie cazul operatorilor unari: H a"
o combinatie de tipul ex(resie operator ex(resie cazul operatorilor binari: a,b "
(peratorii folositi in C/C00 sunt:
operatori aritmetici: 0,2,J, /, I
o ,/A reprezinta catul impartirii lui , la A
o ,IA reprezinta restul impartirii lui , la A
,I3: reprezinta ultima cifra a lui ,
,IB va avea valoarea zero daca , este par si 3 daca , este impar

)rioritatea operatorilor
F.
L2. 3tructura unui program C%C44
In general, un program este un sir de instructiuni. In C/C00 programul este o functie numita main.
*fectul instructiunillor din C/C00 este stabilit intr2un fisier numit stdio. h vine de la ?eader". ,cest fisier este incarcat implicit
pentru a asigura buna functionare a programului. -aca dorim sa folosim instructiuni mai comple+e gen cinH cout" trebuie sa
specificam si headerul care e+plica functionarea acestor instructiuni iostream.".
-e asemenea, trebuie sa stabilim ce variabile folosim, pentru a le putea aloca spatiu si a le da valori. Spre deosebire de alte
limba.e, in C/C00 declararea variabilelor folosite poate fi facuta si pe parcursul e+ecutiei programului.
Structura unui program C/C00 este urmatoarea
//acesta este un comentariu; el nu in'luenteaza pro(ramul
//"eclararea ,ea"erelor
-inclu"e .iostream.,/
//"eclararea varia0ilelelor
....
//pro(ramul principal
int main()
{
// instructiunile pro(ramului
..........
return 1;} //aici se inc,eie pro(ramul
In exemplul urmator (citirea a doua valori si afisarea sumei lor) trebuie sa observati:
3. orice program are trei parti:
B. citirea datelor initiale si initializarea variabilelor necesare
E. prelucrarea datel8or programul propriuzis"
F. afisarea rezultatelor
)uteti observa de asemenea:
cum se declara o variabila
cum se foloseste o constanta te+t sir de caractere"
cum se citeste o data
cum se afiseaza un sir de caractere, constante, variabile si e+presii
cum putem schimba valoarea unei variabile
- inclu"e .iostream.,/
int a,0,c;
int main()
{//citirea "atelor initiale; initializarea altor varia0ile;
cin//a//0;
//prelucrarea "atelor
c=a$0;
//a'isarea "atelor
cout ..&a'isarea rezulattului&..en"l;
cout....a..1$1..0..1=1..a$0;
cout..&2uma calculata este &..c;
return 1;}
@bser!atie
instructiunea return permite intreruperea brusca a e+ecutiei unui program8 puteti folosi aceasta instructiune daca , din
diverse motive doriti intreruperea brusca a e+ecutiei unui program.
C.
L5. Citirea. "fisarea
)rogramele in limba.ul C folosesc instructiunile print, pentru afisarea datelor" si scan, pentru citirea datelor" ca operatii de
intrare/iesire.
)entru usurinta operatiilor de citire/afisare vom folosi instructiuni consacrate in C00: cin si cout.
Instructiunea CIN
8intaxa: cin::variabila1::variabila2;
E,ect: se preiau de la tastatura Console IMput" valori pentru fiecare variabila din sir8
(erinte : folosirea instructiunii necesita Oinclude Biostream.=
Exemplu:
int D,E; cin::D::E;
)e rand, se introduc valori de la tastatura pentru variabilele intregi , si A.
Instructiunea CO6*
8intaxa: cout%%expresie1%%expresie2;
E,ect: se afiseaza, pe rand, valorile e+presiilor8
(erinte: necesita, de asemenea, folosirea `include Liostream.hO
Exemple:
cout%%2#ezultatul esteI%%endl%% D%%*,J%%E%%*/J%%D,E;
s2au afisat :
o constanta sir de caractere te+t" ?;ezultatul esteG
o constantele caracter b0c si b@c
o valorile variabilelor , si A
o valoarea e+presiei ,0A
X.
L7. "tribuirea
Pariabilele pot primi valori prin citire sau atribuire.
"tribuirea
8intaxa: variabila/expresie;
E,ect:
se calculeaza valoarea e+presiei
aceasta valoare se scrie in !ariabila, peste vechea valoare, care se pierde
Exemple:
,@:8
A@C8
,@A0X8
,@A0,8 in , se va memora suma dintre , si A"
un caz deosebit este incrementarea cresterea cu 3 a valorii unei variabile"
o a;a:1%
o aceasta operatie se mai scrie a::% 00 este operator unar"
operatia analoga, de scadere cu 3 a valorii unei variabile, se numeste decrementare:
o a;a<1%
o sau aI%
citind diverse programe realizate in C/C00 puteti intalni si e+primari de genul:
o a;a: Ib% cu semnificatia bI% a;a:b% analog 00b"
o a:;b% cu semnificatia a;a:b%
= cum va placeN
Probleme
3. &eodor is consuma .umatate din salariul sau pe facturi. Cititi salariul lui &eodor si afisati cu cat ramane &eodor.
B. Cititi de la tastatura distanta si timpul necesar unui tren pentru a parcurge respectiva distanta. Calculati viteza medie de
deplasare.
E. ,na si Aogdan sunt colegi de banca. In pauza s2au gandit sa2si schimbe scaunele intre ei astfel incat , in orice moment,
fiecare sa stea pe un scaun. Copiii astia chiar n2au treabaNNN
@bser!atii:
la problema 3 pot apare urmatoarele dificultati:
o daca salariul are valoare impara, rezultatul nu este real @O ,loat re#;$,loat& salar/2%
o salariul este declarat int salar% si introduceti un salariu mai mare de EBDXD rezultatele sunt imposibile8 de ceK @O
variabilele de tip int nu pot depasi EBDXD8 de aceea, valorile mai mari sunt trunchiate
la problema B, pe langa valori de bun simt, puteti incerca si impartirea la zero :"
problema E face apel la o tehnica de lucru numita interschimbarea a doua valori8
o una dintre variantele de rezolvare face apel la inca un scaun variabila": int aux;a% a;b%b;aux%
o e+ista si o varianta fara variabila au+iliara pentru cazul in care vorbim de valori :" ": a;a:b% b;a<b%a;a<b%
8a pri!im inainte:
din e+emplele de mai sus este limpede ca variabilele/datele de intrare trebuiesc verificate inainte de a fi prelucrate
de aceea, vom studia in continuare instructiunea IH
D.
L8. Instructiunea I9
Instructiunea I9
8intaxa: if 4exp;lo$ica6 instrDD; else instrNB;
E,ect:
se evalueaza valoarea e+presie logice
daca valoarea calculata este adevarata nenula" se e+ecuta instructiunea instrDA si apoi instructiunea de dupa IH
daca valoarea calculata a e+presiei este nula se e+ecuta instructiunea instrN/ daca e+ista ramura *'S*" si apoi
instructiunea de dupa IH
Exemplu:
if 4a<2//'6 cout::Ivaloarea este paraI; else cout%%I valoarea este imparaI;
se verifica daca restul impartirii la B a variabilei , este zero
daca -, se e+ecuta cout::Ivaloarea este paraI;
daca M9 se e+ecuta cout::Ivaloarea este imparaI;
@bser!atii:
in C/C00 instructiunile, pe langa efectul lor, returneaza o valoare adevarat 3 V unu" daca se e+ecuta corect si fals : V
zero" daca e+ecutia a fost eronata8
secventa i, $a;b& instr1% else instr2% va e+ecuta intotdeauna numai instr1 pentru ca atribuirea a;b se e+ecuta corect
a nu se confunda a;b lui a i se atribuie valoarea lui b" cu a;;b care verifica daca cele doua valori sunt egale"
daca in loc pentru o valoare a conditiei testate algortimul impune e+ecutarea a mai mult de o instructiune, acestea se vor
incadra intre acolade: i, $conditie& E Finstructiuni pe ramura DAG else Einstructiuni pe ramura N/G%
Probleme:
3. Hie M un numar natural. Sa se afiseze te+tul ),; sau IM),;, functie de valoarea lui M.
B. Hie M un numar natural. Sa se afiseze te+tul )(^I&IP, M*$,&IP sau ^*;( dupa caz.
E. Hie , si A capetele unui interval. Sa se stabileasca daca o valoare Q apartine intervalului R,,AS.
F. Hie , si A doua valori intregi. Sa se afiseze , si A in ordine crescatoare.
C. Hie , si A doua valori intregi. Sa se calculeze Q, solutia ecuatiei D.K,E/'.
@bser!atii:
3. Se verifica valoarea e+presiei MIB@@:
B. Se compara M cu : si se afiseaza dupa caz.
E. -aca , este mai mare decat A, valorile trebuie interschimbate.
F. 2
C. &rebuie verificat daca , nu este zero, caz in care se afiseaza un mesa. si se iese fortat, cu ;*&9;M.
Y.
L,:. Instructiunea DO ;<ILE
*+ista trei instructiuni structuri" repetitive folosite in toate limba.ele:
instructiunea repetitiva cu test initial C,& &IM) W%I'*" se foloseste cand numarul de repetitii este nedefinit"
instructiunea repetitiva cu test final ;*)*&,2),M, C,M- -( W%I'* sau ;*)*,&" se foloseste cand numarul de
repetitii este nede,init"
instructiunea repetitiva cu un numar cunoscut de pasi )*M&;9 H(;" se foloseste cand numarul de repetitii
este cunoscut I un numar ,ix de ori."
Instructiunea DO ;<ILE
8intaxa: do 0 instructiuni3 G?ile 4conditie6 ;
E,ect:
3. se e+ecuta secventa de instructiuni
B. se evalueaza conditia
E. daca valoarea conditiei este adevarata se revine la pasul 3
F. daca valoarea conditiei este falsa se continua cu instructiunea de dupa punct si virgula
@bser!atii:
do<Pile se mai numeste instructiune cu test final sau conditionata posterior
observati ca intai se e+ecuta secventa de instructiuni macar o data" si apoi se testeaza
succesiunea de operatii este instructiune, test, instructiune, test, =.. test, instructiune, test.
Exemplu:
( problema la care putem folosi -(2W%I'* este prelucrarea cifrelor unui numar natural/intreg. Cifrele vor fi prelucrate pe rand, de
la sfarsitul numarului catre inceput, de fiecare data taind ultima cifra de.a prelucrata". ,lgoritmul se reia pana cand nu mai sunt
cifre in numar, adica valoarea M a.unge la valoarea zero.
Sesizati ca orice numar are o ultima cifra, motiv pentru care intai prelucrez si tai , si apoi verific daca mai sunt cifre de prelucrat.
Scheletul algoritmului ar fi:
cin//n;
"o { //prelucrarea ultimei ci're
..............;
// tai ultima ci'ra
n=n/10;
} 3,ile (n!=0);
@bser!atii: puteti determina intai ultima cifra int uc;nQ16% " si apoi sa prelucrati variabila uc
Probleme. fie M un numar natural.
3. Cate cifre are MK
B. Care este suma cifrelor lui MK
E. Care este cea mai mare cifra din numarK valoarea ma+ima". ,nalog minima.
F. Sa se determine prima cifra a numarului M.
C. -e cate ori apare o cifra data C, in numarul MK
X. Sa se genereze ?oglinditulG numarului M. daca M@31YD atunci oglinditul va fi DY13"
D. Holosind problema de mai sus, stabiliti daca numarul M este palindrom.
1.
L,,. Instructiunea ;<ILE
Exista trei instructiuni (structuri) repetitive folosite in toate limbajele:
instructiunea repetitiva cu test initial C,& &IM) W%I'*" se foloseste cand numarul de repetitii este
nedefinit"
instructiunea repetitiva cu test final ;*)*&,2),M, C,M- -( W%I'* sau ;*)*,&" se foloseste
cand numarul de repetitii este nede,init"
instructiunea repetitiva cu un numar cunoscut de pasi )*M&;9 H(;" se foloseste cand numarul
de repetitii este cunoscut I un numar ,ix de ori."
Instructiunea 23I4"
Sintaxa :
while e+p'" instructiune8
Efect
3. Se evalueaza e+presia logica
B. -aca valoarea e+presiei logice este 3 adevarata" se e+ecuta instructiunea si se revine la pasul 3
E. daca valoarea e+presiei logice este zero falsa" se continua cu instructiunea de dupa punct<!irgula
Observatii:
in esenta, cat timp valoarea e+presiei logice este adevarata, se e+ecuta instructiunea
daca valoarea e+presiei logice este falsa de la inceput atunci instructiunea nu se mai e+ecuta
daca W%I'* trebuie sa repete mai mult de o instructiune, acestea se vor incadra intre acolade8
instructiunea W%I'* se mai numeste Rrepetiti!a cu test initialA sau Rconditionata anteriorA,
pentru ca intai verifica valoarea conditiei si apoi e+ecuta secventa ce trebuie repetata
Problema exemplu. Fie A si B doua valori naturale. Sa se simuleza impartirea cu rest a lui A la B (prin
scaderi repetate) si sa se determine catul si restul impartirii.
-inclu"e .iostream.,/
voi" main()
{//"eclararea
int 4, ), 5=0;
//citirea
cin//4//);
//prelucrarea
3,ile(4/=)) {4=46); 5$$;};
//4'isarea rezultatelor
cout..&catul este 7&..5..en"l;
cout..&restul este 7 &..4;
}
Explicatii. and impartim pe A la B cautam !de cate ori se cuprinde" B in A# altfel spus cate scaderi ale lui
B din a se pot face.
$n tip e problema ce necesita folosirea instructiunii %&'(E este prelucrarea unui sir de valori ce se
incheie cu zero.
'deea : Se citeste fiecare valoare si daca este nenula se prelucreaza) Acest pas se repeta pana citim valoarea
zero. (Ex: *+# ,-# .# /*# 01# 2).
odul corespunzator este:
cin//x;
8,ile (x!=0) { //prelucrez valoarea X citita;
..............................
//citesc urmatoarea valoare "in sir
cin//x;};
3robleme ce folosesc acest al4oritm pot umari:
numarul de valori din sir
valoarea ma+ima/minima
numarul de aparitii a unei valori 4
3:.
Instructiunea 9OR
*+ista trei instructiuni structuri" repetitive folosite in toate limba.ele:
instructiunea repetitiva cu test initial C,& &IM) W%I'*" se foloseste cand numarul de repetitii este nedefinit"
instructiunea repetitiva cu test final ;*)*&,2),M, C,M- -( W%I'* sau ;*)*,&" se foloseste cand numarul de
repetitii este nede,init"
instructiunea repetitiva cu un numar cunoscut de pasi )*M&;9 H(;" se foloseste cand numarul de repetitii
este cunoscut I un numar ,ix de ori."
!intaxa:
F@.$initiali#are% test ,inal% pasul urmator& instructiune;
,or (i#A; i<#"; i++) 8sec'enta &e re(etat9
,or (i#1; i<#n; i++) 8sec'enta &e re(etat9
"fect:
pentru fiecare valoare a contorului i intre e+presia initiala si e+presia finala se e+ecuta instructiunea8
"xemplu: ,or (i#1; i<#n; i++) cout<<G Mu ma prinziNG8
pentru fiecare valoarea a variabilei i, de la 3 la M, se afiseaza G Mu ma prinziNG8 de M ori
daca secventa ce trebuie repetata contine mai multe instructiuni, acestea se vor grupa cu acolade
Observatii7
instructiunea este ?cerutaG daca descrierea algorimului spune ?de la valoarea Q la valoarea #G, ?pentru primele Q valoriG,
?de Q oriG, =
33.3.
L,/. Con#ersia unui numar in baza ,: in baza =
9n numar MA scris in baza A are ?cifreG cu valori intre : si A23.
)entru a obtine reprezentarea numarului M3: in baza A, trebuie sa realizam un sir de impartiri repetate la A.
Hie M3:@BF1: si A@Y
BF1: impartit la Y produce catul E33 si restul B.
E33 impartit la Y produce catul EY si restul D
EY impartit la Y produce catul F si restul X
F impartit la Y produce catul : si restul F
'uam resturile in ordine inversa si obtinem MA@FXDB.
,lgoritmul de mai .os urmareste e+act acest tip de calcul. Se observa ca pentru constructia lui MA trebuie sa lipim fiecare rest in
fata numarului MA.
citeste M3:8
MA@:8
p3:@38
cat timpM3:N@:"
<
MA@MA0)3:JM3:IA"8
)3:@)3:J3:8
M@M/A8
>
scrie MA.
33.B
L,.. Con#ersia unui numar in baza = in baza ,:
9n numar MA scris in baza A are ?cifreG cu valori intre : si A23. )roblema noastra este sa determinam ce numar M3: ii corespunde
lui MA pentru baza 3:.
)entru aceasta sa observam urmatorul e+emplu. 9n numar in baza 3:, M3:@BF1: poate fi scris si in forma canonica, adica
M3:@BJ3:[E0FJ3:[B01J3:[30:J3:[:.
Hie MA@FXDB scris in baza A@Y. )entru a converti MA in baza 3: trebuie sa il scriem in forma canonica.
M3:@FJY[E0XJY[B0DJY[30BJY[:. -upa calcule se obtine valoarea M3:@BF1:.
)ractic trebuie sa calculam o suma de produse a cifrelor din MA cu puteri ale bazei. Pom folosi algoritmul de prelucrare a cifrelor
unui numar MA".
citeste NE, E;
N1'/';
FE/1;
executa0
N1'/N1',4NE<1'6.FE;
FE/FE.E;
NE/NE11';
3cat timp 4NE=/'6;
scrie N1';
33.E
L,-. 3irul lui 9ibonacci
Sirul lui Hibonacci este 3, 3, B, E, C, Y, 3E, B3, EF, =. si are legatura cu celebrul numar de aur.
Se observa ca sirul incepe cu valorile 3 si 3 , dupa care, fiecare noua valoare se obtine prin adunarea ultimelor doua valori:
H3"@3
HB"@3
Hn"@Hn23"0Hn2B"
)entru noi problema este de a determina al N<lea termen din sir.
-aca M@3 sau M@B, raspunsul este simplu, 3. In restul cazurilor trebuie ca avand mereu ultimile valori , si A, sa calculam noua
valoare C@,0A mereu trebuie memorata noua pereche formata V ultimile doua valori determinate"
citeste N;
D/1;E/1;
daca 4N%/26 atunci scrie 1;
altfel 0pentru i/(,N executa
011calculam noua valoare
C/D,E;
11pre$atim noua perec?e
D/E;E/C3
scrie E;3
33.F
L,,. Cmmc. Cmmmc
C.m.m.d.c. este acronimul prima litera de la fiecare cuvant" de la ?cel mai mare divizor comunG si se aplica pentru doua numere
naturale.
Problema. Hie doua numere naturale , si A. Sa se determine cel mai mare divizor comun a lui , si A.
Sa citim iar. )ractic trebuie sa determin un numar natural care sa fie divizor atat pentru , cat si pentru A. -aca sunt mai multe
numere in aceasta situatie, atunci il aleg pe cel mai mare. Ceea ce ma duce cu gandul la
Varianta ,.
citeste D, E;
cmmdc/';
pentru D/1 pana la D executa
daca 4D<D//' si E<D//' 6 atunci cmmdc/D;
scrie cmmdc;
)ractic, cmmdc2ul va fi cel mult unul dintre numere. ,s putea sa fiu prevazator si sa aleg ca limita superioara pe cel mai mic dintre
, si A. Si conditia de numitor comun se poate rescrie ,I- 0AI-@@:.
Varianta -.
citeste D,E
min/D; daca 4min:E6 atunci min/E;
pentru D/1 pana la min executa
daca 4A! +"!##$6 atunci cmmdc/D;
scrie cmmdc;
Varianta ..
)roblema nu e noua, *uclid cca EBC V BXC 5.%r.NNNNN" s2a gandit si el la acelasi lucru si a gasit o solutie.

(AS. M2am gandit de multe ori cum sa e+plic elevilor ce anume l2a facut pe *uclid sa se gandeasca la problema cmmdc si mi2am
imaginat urmatorul scenariu: %ucli& a'ea o camera &e latime A si lungime " (e care sotia lui 'roia sa o aco(ere cu (laci
(atrate &e gresie) *entru a-si im(resiona (rietenele+ (lacile trebuiau sa aco(ere integral su(ra,ata camerei si sa ,i cat mai
mari) -um a re.ol'at %ucli& (roblema/ *ractic trebuie &esenat un caroiaj cu (atrate &e latura -00!-)
-aca - este divizorul comun a lui , si A, atunci estista ,B si AB asa incat:
,@-J,B
A@-JAB si deduce ca si diferenta acestor numere are acelasi divizor comun
,2A@-J,B2AB"
)ractic, in ?leneaG lui de a calcula cmmdc,,A", *uclid propune mereu o pereche mai mica ,2A, A" daca ,OA sau ,, A2," daca
AO,. -eci, cmmdc,, A" este
,2A, A" daca ,OA
,, A2," daca AO,
, daca ,@@A
Se observa ca in primele doua cazuri trebuie sa reluam algoritmul, ceea ce ne duce cu gandul la urmatoarea secventa:
citeste D,E
cat timp 4D=/E6 executa
daca 4D:E6 atunci D/D&E;
altfel E/E&D;
scrie D;
Varianta /.
-eci varianta E e de acum B::: de aniN Intre timp, s2a mai facut o varianta. -aca ,@BEFCX si A@Y1 ar trebui sa se efectueze o
multime de scaderi a lui A din ,. Scaderi repetate, pana nu se mai poate scadea pe A din ,N ,sta este o impartire si ce ramane in
, este restul. In consecinta, pe cel mai mare il vom transforma in restul impartirii. Cand ne oprimK Me vom opri cand , sau A vor fi
nule, ceea ce inseamna ca cealalta valoare, nenula, va fi CMM-C.
citeste D,E;
cat timp 4D.E=/'6 executa 11&aca nici unul nu e nul1)
daca 4D:E6 atunci D/D<E;
altfel E/E<D;
scrie D,E; 11a,ise. 'aloarea nenula
Parianta C.
-esi varianta F e o solutie respectabila, inca nu e de a.uns. )ractic, la fiecare iteratie se e+ecuta B teste V cel din C,& &IM) si cel
din -,C,. Parianta urmatoare foloseste aceeasi idee de mai sus dar elimina unul din teste.
citeste D,E;
cat timp 4E=/'6 executa
0#/D<E; D/E; E/#;3
//se iese cand A este nul@O
scrie D;
Anali#a !ariantelor
*vident, ultima varianta este cea mai buna. ,m e+plicat de.a ratiunile prin care s2a trecut de la o varianta la alta. In vederea
e+amenului de bacalaureat va trebuie toate variantele, indeosebi ultima pentru momentul cand va trebui sa programati.
Calculul C+++C
)entru calculul matematic a cmmdc pentru doua numere , si A, se realizeaza descompunerea in factori primi si apoi se considera
termenii comuni, la puterea cea mai mica.
)entru calculul matematic a cmmmc pentru doua numere , si A, se realizeaza descompunerea in factori primi si apoi se considera
termenii comuni si necomuni, la puterea cea mai mare.
)ractic daca as scrie produsul ,JA ca inmultire intre descompunerile lor, as observa ca toti termenii e+istenti sunt fie parte a
CMM-C, fie parte a CMMMC. -e aici apare si relatia ,JA@CMM-C,,A"JCMMMC,,A". )ractic ne vom folosi
de (***($AH7&;A97/(**D($AH7&.
citeste D,E
D2/D; E2/E; 11salvez separat datele initiale
11calculez CCCDC
cat timp 4E=/'6 0#/D<E; D/E; E/#;3
//afisez CMMMC
scrie 2CCCCC este 2, D2.E21D.
33.C
L,:. "lgoritmi funamentali. Di#izibilitate. N este prim>
!ivizibilitate
Problema. Pentru un N datH care sunt di!i#orii lui N1
Multimea divizorilor lui M este cuprinsa intre valorile 3 si M. 9n numar - este divizor al lui M daca M se imparte e+act la -. )entru
noi, impartirea e+acta inseamna ca restul impartirii lui M la - este zero. &rebuie sa cautam acele valori intre 3 si M la care M se
imparte e+act. Pom aifsa si vom numara aceste valori.
natural N, , N!;
N!=0;
citeste N;
pentru =1, N executa
"aca (N#==0) atunci { scrie ; N!=N!$1}
scrie N!;
Cu numarul de divizori putem stabili daca numarul M este prim.
"aca (N!==%) atunci scrie N, & este prim!&
"ste # numar prim$
Problema. Fie N un numar natural. Este N numar prim1
Conform matematicii un numar M este prim daca are drept divizori pe 3 si pe M.
Karianta 1. Ideea este sa realizam cat mai putine teste, astfel incat algoritmul sa se incheie mai repede
-@B8
cat timp -L@M23 si MI-N@:" e+ecuta -@-038
daca MI-@@:" atunci scrie ?divizibilG
altfel scrie ?primG
,m redus doua teste : nu mai testam cazul -@3 si -@M. -e asemenea, profitam de situatia in care gasim primul divizor pentru a
iesi din repetitie. &otusi, pentru cazul in care numarul ar fi prim, inca se e+ecuta M2B pasi.
Parianta B. Mumarul B este cel mai mic potential divizor. -educ ca numarul M/B este cel mai mare potential divizor.
-@B8
cat timp -L@M/B si MI-N@:" e+ecuta -@-038
daca MI-@@:" atunci scrie ?divizibilG
altfel scrie ?primG
In aceasta varianta se e+ecuta, in cel mai rau caz, M/B operatii. SuperN ,m redus munca la .umatateN Se poate mai bineK
Karianta 3. Sa cercetam, in continuare, perechile de potential divizori: B cu M/B, E cu M/E, F cu M/F, =. (bserv ca pe masura ce
primul termen creste, al doilea scade. -educ ca, la un moment dat cei doi termeni pot fi egali. ,dica ar putea fi un element Q astfel
incat M@@QJQ sa fie adevaratN In consecinta Q@radicalM" . -eci ultima pereche care ar trebui studiata este cea cu radical $N&.
-@B8
cat timp -L@radicalM" si MI-N@:" e+ecuta -@-038
daca MI-@@:" atunci scrie ?divizibilG
altfel scrie ?primG
*ste cert ca radicalM"LM/B. Iata ca am obtinut un numar mai mic de operatii. Sa cercetam cat de eficienti sunt algoritmii nostri.
Mumarul M@X331CE este prim, spun unii.
varianta 3 va e+ecuta maxim -115'1 pasi
varianta B va e+ecuta ma+im 36' 52- pasi
varianta % va e&ecuta ma&im '() pasi*******
* ceva, nuK
Karianta ". Si inca mai merge=
daca M@@B" atunci scrie ?primG
altfel daca nMIB@@: " atunci scrie ?divizibilG
altfel <
o -@E8
o cat timp -L@radicalM" si MI-N@:" e+ecuta -@-0B8
o daca MI-@@:" atunci scrie ?divizibilG
o altfel scrie ?primG >
,lgoritmul de mai sus verifica daca M este B si elimina din discutie numerele pare. )entru ca ma.oritatea numerelor prime sunt
impare, parcurg numai valorile impare si le intreb daca nu cumva sunt divizori pentru M.
Parianta F va efectua ma+im 356 pasi pentru M@X331CE.
33.X
L8. "lgoritmi funamentali. 3iruri e numere
)entru a prelucra un sir de numere trebuie sa stim fie numarul de valori in discutie sir cu numar cunoscut de valori", fie sa avem o
valoare care sa marcheze sfarsitul sirului de obicei V zero".
Prelucrarea unui sir cu numar cunoscut de valori
-e vreme ce stim cate valori vor fi in sir prelucrarea va fi retetat de un numar cunoscut de ori" putem folosi instructiunea
H(;/)*M&;9.
natural x, n, i;
citeste N
pentru i=1,N executa
{ citeste X;
//prelucrez X
........
}
Prelucrarea unui sir cu un numar necunoscut de valori (care se incheie cu zero
Paloarea zero nu face parte din sir si nu trebuie prelucrata. Mu stim e+act cand primim valoarea zero care marcheaza sfarsitul
sirului", motiv pentru care la fiecare citire trebuie sa verificam daca s2a citit zero saunu.-aca valoarea citita nu este zero avem de
realizar prelucrarea ceruta de problema si o noua citire.
citeste x;
cat timp (x!=0) {
//prelucrez valorea X
.........
//trec la valoarea urmatoare
citeste X
}
)robleme
3. Sa se calculeze suma/produsul valorilor din sir
B. Sa se determine valoarea minima/ma+ima dintre valorile citite.
E. ( valoare data # se gaseste in sirK
F. -e cate ori apare o valoare data #K
C. )resupunand ca sirul reprezinta coeficientii uni polinom dati incepand cu gradul cel mai mic", calculati valoarea
polinomului intr2un punct #.
33.D
L7. "lgoritmi funamentali. )relucrarea cifrelor unui
numar natural
Hie M un numar natural. ,vem nevoie sa prelucram pe rand cifrele unui numar natural.
In prelucrarea cifrelor numarului, cel mai usor a.ungem la ultima cifra MI3:" . -upa prelucrarea ei, ultima cifra va trebui inlaturata
M@M/3:". Si totul trebuie repetat cat timp M mai are cifre MN@:".
-e vreme ca nu stim cate cifre are M, nu putem folosi intructiunea H(;/)*M&;9. ;aman instructiunile repetitive cu un numar
necunoscut de pasi : C,& &IM) *Q*C9&,/W%I'* si *Q*C9&, C,& &IM)/ -( W%I'*.
)entru C,& &IM) *Q*C9&,/W%I'* am un contraargmuent. ,lgoritmul ar trebui sa fie
cat timp (N!=0) executa { //prel ultima ci'ra a lui N
.......N#10;
//ster(em ultima ci'ra
N=N/10;
}
-aca utilizatorul doreste sa aplice algoritmul pentru valoarea zero, nu se va efectua nimic si secventa noastra nu se va
e+ecuta.*vident, situatia se poate evita prin plasarea unui test inainte de C,& &IM) , care sa verifice daca M este nul.
Mu ramane decat varianta cu *Q*C9&, C,& &IM)/-( W%I'*.
executa{ //prel ultima ci'ra a lui N
.......N#10;
//ster(em ultima ci'ra
N=N/10;
} cat timp (N!=0);
Cateva probleme clasice pentru acest algoritm:
3. Sa se numere cate cifre are numarul M
B. Sa se stabileasca cate cifre pare/impare are numarul M.
E. Sa se stabileasca daca M contine o cifra data, CIH.
F. Sa se numere de cate ori apare cifra CIH in numarul M.
C. Sa se determine cifra ma+ima/minima din numarul M
X. Sa se construiasca ?oglinditulG numarului M. )entru M@EXFY se va afisa YFXE.
D. Sa se stabilesca daca M este palindrom egal cu oglinditul sau".
Y. )entru un numar M dat, sa se construiasca cel mai mare numar natural care se poate forma cu cifrele lui M.
cat timp (N!=0) executa { //prel ultima ci'ra a lui N
.......N#10;
//ster(em ultima ci'ra
N=N/10;
}

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