Sunteți pe pagina 1din 22

ELEMENTELE DE BAZA ALE LIMBAJULUI C++

Limbajul C a aparut la inceputul anilor 70, creat de dennis Ritchie si Brian Kernighan.
Limbajul C++ este o extensie a limbajului C si a fost creat de Bjarne Stroustrup in scopul
programarii orientate pe obiecte.
Programele C / C++ sunt organizate sub forma de functii. O functie este o secventa de
program care codifica un algoritm. De obicei, incercam sa scriem functii care rezolva o
singura problema.
De exemplu, fie problema : Se citesc de la tastatura n numere naturale. Sa se spuna cate
perechi de numare citite consecutiv au cmmdc un numar prim.
Ex: pentru n=7 si sirul de numere 16, 22, 15, 25, 100, 98, 7, se va afisa 4.
Problema se poate rezolva luand cate 2 numere consecutive, afland cmmdc-ul lor si
verificand daca acesta este prim. Rezolvarea se simplifica mult daca facem o functie care
calculeaza cmmdc a doua numere si o alta care verifica daca un numar este prim.
Un program C++ este asadar alcatuit din una sau mai multe functii, dintre care una este
functia radacina main, care este obligatorie si cu care incepe executia oricarui program.
Aceasta functie poate apela alte functii. Toate functiile folosite in program trebuie descrise in
fisierele scrise de catre programator sau in fisierele header (Un fisier header este un fisier
aflat in sistem sau creat de catre programator, care contine declaratii si definitii de functii si
variabile). Un fisier header se invoca astfel : #include<fisier_header.h>
Program
Fisier sursa
Fisier sursa
Fisiere header

Functii

main

Structura unui program in limbajul C++

Cel mai simplu program C++ (care nu face nimic J) este :


int main( )
{
return 0 ;
}
Acoladele au semnificatia de inceput functie si sfarsit functie si constituie corpul
functiei, in care se scriu instructiunile; main este numele functiei ; intre parantezele rotunde

se scriu, optional, anumiti parametri, care in acest caz lipsesc ; void este tipul functiei
(void=nici-un-tip), cu semnificatia ca functia nu intoarce nici un rezultat.
Observatii :
1. 1.
Limbajul face distinctie intre literele mari si cele mici (spunem ca este
case-sensitive).
2. 2.
Nu are importanta plasarea cuvintelor pe linie, nici spatiile dintre ele. Dar,
pentru lizibilitate, e bine sa existe o anumita aliniere a instructiunilor.
Vocabularul limbajului
Este format din :

Setul de caractere

Literele mari si mici ale alfabetului englez (A Z, a z)

Cifre (0 9)

Caractere speciale (+ - * / = < > { } ( ) [ ] . , : ; # ^ _ si toate celelalte
simboluri de pe tastatura)

Identificatori reprezinta succesiuni de litere, cifre si caracterul special _ ,
de lungime maxima 63 si care nu trebuie sa inceapa cu o cifra. Se utilizeaza
pentru a da nume variabilelor, functiilor etc.
Exemple de identificatori corecti : x, x1, eu_sunt_un_identificator_corect, _1X
Contraexemple : 1x, Tom&Jerry, eu-sunt-un-identificator-incorect

Cuvinte cheie sunt cuvinte ale limbajului, imprumutate din limba engleza,
carora programatorul nu le poate da o alta utilizare. Cuvintele cheie se scriu cu
litere mici (Exemple: int, char, double, if, for, while etc.);

Separatori pentru separarea unitatilor lexicale (cele mai simple elemente
care au o semnificatie). Ca separatori se folosesc : blancurile (space, tab), enter,
punctul si virgula ( ;).

Comentarii sunt secvente ignorate de compilator, in care de obicei
programatorul explica semnificatia unei linii sau a unei secvente de program. Pot
fi plasate oriunde in program si sunt de doua feluri :

Comentarii pe o singura linie sunt precedate de // si se considera
comentariu toata secventa pana la sfarsitul liniei
Ex : a=b+c ; // eu sunt un comentariu pe o singura linie

Comentarii pe mai multe linii incep cu /* si se termina cu /*
Ex : /* eu sunt
un comentariu
pe mai multe linii */
Tipuri de date
In C++, datele pot fi intregi si reale.
Tipurile intregi sunt:

unsigned char caracter fara semn, ia valori intre 0 si 255 si ocupa 1
octet (ia valori intre 0 si 28-1, 1 octet=8 biti)

char caracter, ia valori intre 128 si 127 si ocupa 1 octet (imparte
intervalul precedent in doua jumatati egale, una in stanga lui 0, cealalta in
dreapta)

unsigned int intreg fara semn, ia valori intre 0 si 65535 si ocupa 2
octeti (ia valori intre 0 si 216-1, 2 octeti=16 biti)

int intreg, ia valori intre -32768 si 32767 si ocupa 2 octeti (imparte


intervalul precedent in doua jumatati egale, una in stanga lui 0, cealalta in
dreapta)

unsigned long intreg lung fara semn, ia valori intre 0 si 4.294.967.295
si ocupa 4 octeti (ia valori intre 0 si 232-1, 4 octeti=32 biti)

long intreg lung, ia valori intre 2.147.483.648 si 2.147.483.647 si
ocupa 4 octeti (imparte intervalul precedent in doua jumatati egale, una in
stanga lui 0, cealalta in dreapta)
Tipurile reale sunt:

float ia valori intre 3.4x10-38 si 3.4x1038 , are 6 zecimale exacte si
ocupa 4 octeti

double ia valori intre 1.7x10-308 si 1.7x10308 , are 14 zecimale exacte si
ocupa 8 octeti

long double ia valori intre 3.4x10-4932 si 1.1x104932 , are 20 zecimale
exacte si ocupa 10 octeti
Observatii :
1. 1.
Nu este necesar sa retineti aceste valori. Important e sa stiti numele tipurilor.
Scrieti in editorul C++ numele unui tip, pozitionati cursorul in interiorul cuvantului si
actionati combinatia de taste CTRL+F1 (Help). Vedeti in fereastra care se afiseaza
toate detaliile tehnice.
2. 2.
In header-ul <values.h> sunt definite constantele simbolice (cum ar fi:
MAXINT, MAXSHORT, MAXLONG, MINDOUBLE, MINFLOAT, etc.) care au ca
valoare limitele inferioara si superioara ale intervalului de valori pentru tipurile de
date enumerate. (de exemplu MAXINT reprezinta valoarea intregului maxim care se
poate memora, etc. )

Constante
Constantele sunt date cu valoare fixa (care nu poate fi modificata). Constantele sunt de mai
multe tipuri:

constante numerice, intregi sau reale (12, -34, 3.14)

constante caracter care se scriu intre apostroafe (a, 7, *) si care au
ca valoare codul ASCII al caracterului pe care il reprezinta
Se pune problema : cum pot scrie caracterul ? Daca scriem se semnaleaza
eroare la compilare, deoarece al doilea apostrof il inchide pe primul iar al
treilea nu mai are pereche. Pentru o astfel de situatie se folosesc secventele
escape, adica se precede caracterul respectiv cu un \. Se va scrie : \. La fel
se procedeaza pentru caracterul \ (\\).
Mai exista o serie de secvente escape cu semnificatii prestabilite.
Ex : \n face trecerea la o linie noua (newline); \t tab; \r retur de car
(carriage return), pozitioneaza cursorul la inceputul liniei.

constante sir de caractere - o succesiune de zero sau mai multe
caractere, incadrate de ghilimele. In componenta unui sir de caractere, poate
intra orice caracter, deci si caracterele escape. Lungimea unui sir este practic
nelimitata. Daca se doreste continuarea unui sir pe randul urmator, se
foloseste caracterul backslash.
Ex : Acesta este un sir de caractere
Sir de caractere continuat\
pe randul urmator!
Sir \t cu secvente escape\n

VARIABILE
Spre deosebire de constante, variabilele sunt date ale caror valori se pot modifica in timpul
executiei programului. Variabilele sunt caracterizate de atributele nume, tip, si valoare.
Variabilele sunt nume simbolice utilizate pentru memorarea valorilor introduse pentru datele
de intrare sau a rezultatelor. La o variabila ne vom referi prin numele ei. Numele unei
variabile ne permite accesul la valoarea ei, sau schimbarea valorii sale, daca este necesar
acest lucru. Numele unei variabile este un identificator ales de programator. Ca urmare,
trebuie respectate regulile de scriere a identificatorilor. Toate variabilele care vor fi folosite
in program, trebuie declarate inainte de utilizare.
Declararea variabilelor
Modul general de declarare a variabilelor este:
tip_data lista_nume_variabile;
Se specifica tipul variabilei (variabilelor) si o lista formata din unul sau mai multi
identificatori ai variabilelor de tipul respectiv. Intr-un program in limbajul C++, declaratiile
de variabile pot apare in orice loc in programul sursa. La declararea variabilelor, se rezerva
in memorie un numar de octeti corespunzator tipului variabilei, urmand ca ulterior, in acea
zona de memorie, sa fie depusa (memorata, inregistrata) o anumita valoare.
Exemple:
int i, j;
/*declararea variabilelor i, j, de tip int. Se rezerva pentru i si j cate
2octeti */
char c;
/* declararea variabilei c, de tip char. Se rezerva un octet. */
float lungime; /* declararea variabilei reale lungime. Se rezerva 4 octeti */
Initializarea variabilelor in declaratii
In momentul declararii unei variabile, acesteia i se poate da (asigna, atribui) o anumita
valoare. In acest caz, in memorie se rezerva numarul de locatii corespunzator tipului
variabilei respective, iar valoarea va fi depusa (memorata) in acele locatii.
Forma unei declaratii de variabile cu atribuire este:
tip_data nume_variabila=valoare;
Variabilei specificate I se asigneaza valoarea valoare.
Exemple:
char backslash=\\; //declararea si initializarea variabilei simple backslash
int a=7*9+2;
/* declararea variabilei simple a, de tip int si initializarea ei cu
valoarea 65*/
float radiani, pi=3.14; /*declararea variabilei radiani;declararea si initializarea var.
pi*/
double x=9.8, y=0;
Calificatorul const, asociat unei variabile, nu va permite modificarea ulterioara a valorii
acesteia, prin program (printr-o atribuire). Se poate spune ca o variabila precedata de const
este de fapt un nume dat unei constante.
Exemple:
const float b=8.8;
b=4/5;
//nu este permisa modificarea valorii variabilei b

OPERATII DE INTRARE/IESIRE (CITIRI / SCRIERI)


Limbajele C/C++ nu poseda instructiuni de intrare/iesire, deci de citire/scriere (ca limbajul
PASCAL, de exemplu). In limbajul C aceste operatii se realizeaza cu ajutorul unor functii
(de exemplu, printf si scanf), iar in limbajul C++ prin folosirea operatorilor >> si << . Vom
folosi in continuare abordarea limbajului C++, fiind, in momentul de fata, mai simpla. In
limbajul C++ sunt predefinite urmatoarele dispozitive logice de intrare/iesire:
cin - console input - dispozitivul de intrare (tastatura);
cout - console output - dispozitivul de iesire (monitorul).
Transferul informatiei se realizeaza cu operatorul >> pentru intrare si operatorul << pentru
iesire. Dupa operator se specifica informatiile care vor fi citite sau afisate.
Exemple:
cout << var; /* afiseaza valoarea variabilei var pe monitor*/
cin >> var; /* citeste valoarea variabilei var de la tasatatura */
Sunt posibile operatii multiple, de tipul:
cout << var1 << var2 << var3;
cin >> var1 >> var2 >> var3;
In acest caz, se efectueaza succesiv, de la stanga la dreapta, scrierea, respectiv citirea
valorilor variabilelor var1, var2 si var3.
Observatie :
1. Tipurile de date transferate catre iesire pot fi: toate tipurile numerice, caracter sau sir
de caractere.
2. Utilizarea dispozitivelor si operatorilor de intrare/iesire in C++ impune includerea
fisierului iostream.h.
Exemple:
int x;
cout<<"Introduceti o valoare pentru x";
//afisarea constantei sir de caractere,
deci a mesajului
cin>>x;
//citirea valorii variabilei x, de
tip int
int a, b, e; double d;
cin>>a>>b>>e>>d;
//citirea valorilor variabilelor a,
b, e, d de tip int, int, int, double
cout<<"a="<<a<<"Valoarea expresiei a+b este:"<<a+b<<endl;
/* endl este echivalentul C++ al constantei caracter \n si provoaca trecerea la linie
noua */
OPERATORI

Operatorul de atribuire (de asignare) este un operator binar care se aplica tuturor
tipurilor de variabile. Este folosit sub formele urmatoare:
nume_variabila=expresie;
sau:
expresie1=expresie2;
Se evalueaza expresia din membrul drept, iar valoarea acesteia este atribuita
variabilei din membrul stang.
Exemplu:
float x; int a,b; x=9.18;
a=b=10;
int s; s=a+20*5;
//rezultat: s=110

s=x+2;
//rezultat s=11, deoarece s este int si se face o conversie
automata de la float la int, pierzandu-se zecimalele
Asa cum se observa in linia a 2-a din exemplul precedent, operatorul de atribuire poate fi
utilizat de mai multe ori in aceeasi expresie. Mai intai b=10, apoi a=b (de la dreapta la
stanga).
Exercitiu: Sa se scrie urmatorul program si sa se urmareasca rezultatele executiei acestuia.
#include <iostream.h>
void main()
{
float x,y=4.25;char car=A; int a,b,c;
cout<<Val. lui y este:<<y<<endl;
//Afisare: Val. lui y este:4.25
x=y; cout<<Val. lui x este:<<x<<endl;
//Afisare: Val. lui x este:4.25
a=x;cout<<Val.lui a este:<<a<<endl;
//Afisare:Val. lui a este:4,
deoarece a de tip int!!!
c=b=a; cout<<b=<<b<<\tc=<<c<<endl;
//Afisare: b=4 c=4
cout<<Introduceti val. lui c:; cin>>c;
// citire val. pentru c (de ex, 7)
cout<<Val. lui c este:<<c<<\n;
//Afisare: Val. lui c este:7
}

Operatori aritmetici unari dau semn datelor


Operator
Semnificatie
Exemple
Minus unar
-4
+
Plus unar
+8
Exemplu:
int a,b;
cout<<a=<<-a<<\n;
b=-a;
cout<<b=<<b<<\n;
Operatorul - unar poate fi aplicat datelor intregi, reale, caracter.

Operatori aritmetici binari:


Operator
Semnificatie
Exemple
+
Adunarea celor doi operanzi
a+b
Scaderea celor doi operanzi
a-b
*
Inmultirea celor doi operanzi
a*b
/
Impartirea celor doi operanzi
a/b
%
Operatorul modulo (operatorul rest)
a%b
(furnizeaza restul impartirii operatorului stang la operatorul drept).

Operatorul modulo se aplica numai operanzilor intregi. Ceilalti operatori aritmetici binari pot
fi aplicati datelor intregi sau reale.
Observatie foarte importanta:
Daca intr-o expresie cu 2 operanzi si un operator binar aritmetic, ambii operanzi sunt intregi,
rezultatul expresiei va fi tot un numar intreg. De exemplu, la evaluarea expresiei 9/2, ambii
operanzi fiind intregi, rezultatul furnizat este numarul intreg 4. Pentru a se obtine o valoare
reala, trebuie ca macar unul din operanzi sa fie real.

Operatori relationali binari


Operator
Semnificatie
Exemple
==
Egal cu
a= =b
!=
Diferit de
a!=b
<
Mai mic decat
a<b
<=
Mai mic sau egal
a<=b
>
Mai mare decat
a>b
>=
Mai mare sau egal
a>=b
Primii doi operatori mai sunt numiti operatori de egalitate. Operatorii relationali servesc la
compararea valorilor celor doi operanzi si nu modifica valorile operanzilor. Rezultatul unei
expresii in care apare unul din operatorii relationali binari este intreg si are valoarea zero (0)
daca relatia este falsa, sau valoarea unu (1), daca relatia este adevarata. Acesti operatorii pot
fi aplicati datelor de tip intreg, real sau char.

Observatie: Deosebirea dintre operatorii == (relational, de egalitate) si = (de atribuire)


consta in faptul ca primul nu modifica valoarea nici unuia dintre operanzii sai, pe cand cel
de-al doilea modifica valoarea operandului stang (vezi exemplul urmator)
Exercitiu: Sa se scrie urmatorul program si sa se urmareasca rezultatele executiei acestuia.
#include <iostream.h>
void main()
{
int a=1, b=20, lim=100; int rezult;
rezult=a<b;
cout<<a<b=<<rezult<<\n;
// Afisare: a<b=1
rezult=a<=b;
//operatorul relalional <= are prioritate mai
mare decat cel de atribuire
cout<<a<=b=<<rezult<<\n;
// Afisare: a<b=1
rezult=a>b;
cout<<a>b=<<rezult<<\n;
// Afisare: a<b=0
rezult=a==b;
cout<<a==b=<<rezult<< endl;
// Afisare: a==b=0
cout<<a=<<a<< endl;
// Afisare: a=1
cout<<b=<<b<< endl;
// Afisare: b=20
rezult=a=b;
cout<<a=b=<<rezult<<endl;
// Afisare: a=b=20
}

Operatori logici
Operator
Semnificatie
Exemple
!
Not (negatie logica)
!(a==b)
&&
And (conjunctie, si logic)
(a>b) && (b>c)
||
Or (disjunctie, sau logic)
(a>b) || (b>c)
Acesti operatori pot fi aplicati datelor de tip intreg, real sau caracter. Evaluarea unei expresii
in care intervin operatorii logici se face conform tabelului:

x
adevarat (1)
adevarat (1)

y
adevarat (1)
fals (0)

!x
fals (0)
fals (0)

x&&y
adevarat (1)
fals (0)

x||y
adevarat (1)
adevarat (1)

x
fals (0)
fals (0)

y
adevarat (1)
fals (0)

!x
adevarat (1)
adevarat (1)

x&&y
fals (0)
fals (0)

x||y
adevarat (1)
fals (0)

Expresia !expresie are valoarea 0 (fals) daca expresie are o valoare diferita de 0 si valoarea
1 (adevarat) daca expresie are valoarea 0.
Expresia expresie1||expresie2 are valoarea diferita de 0 (true) daca FIE expresie1, FIE
expresie2 au valori diferite de zero.
Expresia expresie1 && expresie2 are valoarea diferita de 0 (true) daca AMBELE expresiioperand ( expresie1 si expresie2) au valori diferite de zero.
Exercitiu: Sa se scrie urmatorul program si sa se urmareasca rezultatele executiei acestuia.
#include <iostream.h>
void main()
{ int a=0, b=10, c=100, d=200; int rezult;
rezult=a&&b;
cout<<a&&b=<<rezult<<\n;
//Afisare a&&b=0
rezult=a||b;
cout<<a||b=<<rezult<<\n;
//Afisare a||b=1
rezult=!a;
cout<<!a=<<rezult<<\n;
//Afisare !a=1
rezult=!b; cout<<!b=<<rezult<<\n;
//Afisare !b=0
rezult=(a>b) || (b>c);
cout<<(a>b) || (b>c)=<<rezult<<\n;
//Afisare (a>b) || (b>c) =1
rezult=!(c<d);
cout<<!(c<d)=<<rezult<<\n;
//Afisare !(c>d)=0
}
EXPRESII
Prin combinarea operanzilor si a operatorilor in scopul efectuarii unor operatii (calcule,
atribuiri etc) se obtin expresii. Operanzii pot fi atat constante cat si variabile.
Tipul unei expresii este dat de tipul rezultatului obtinut in urma evaluarii acesteia.
Exemple :
(2+10)*3; //expresie de tip intreg ; are valoarea 36
-1-5*2>=8+1
//expresie de tip intreg; are valoarea 0 (fals)
Aplicatii propuse:
1. Sa se citeasca doua numere intregi a si b si sa se calculeze suma, diferenta, produsul
lor, catul si restul impartirii lui b la a
2. Sa se calculeze si sa se afiseze media aritmetica a trei numere naturale a, b, c.
3. a si b retin valorile pentru doua numere intregi citite de la tastatura. Sa se
interschimbe valorile celor doua numere.
4. Cunoscand cele 4 note obtinute de un elev la informatica pe parcursul unui semestru
si nota de la teza scrieti un algoritm care sa afiseze media lui.
5. Fie un numar format din trei cifre. Sa se afiseze cifrele sale incepand cu cifra
unitatilor.
6. Se citeste un numar natural format din 4 cifre. Afisati numerele obtinute in
urmatoarele moduri:

schimband prima cifra cu ultima


schimband intre ele cifrele din mijloc
7. Fie a un numar natural format din 5 cifre. Scrieti un algoritm care sa determine si sa
afiseze numarul format din prima, a treia si a cincea cifra din a.
8. Un melc a cazut intr-o fantana adanca de x metri. Ziua, melcul urca a cm iar noaptea
aluneca b cm. In cate zile va iesi melcul din fantana?
9. In fiecare zi lucratoare din saptamana, Pinocchio spune o minciuna in urma careia ii
creste nasul cu x cm pe zi. Sambata si duminica, cand vine Gepetto acasa, pentru a
nu-l supara, nu spune nici o minciuna, ba chiar ii scade nasul cu y cm/zi. In fiecare
saptamana, singur acasa, Pinocchio continua sirul minciunilor. Care este lungimea
nasului dupa z zile, stiind ca initial nasul are p cm? (Zilele incep cu luni)
10. Ana a ramas singura acasa si vrea sa faca placinte. Pentru aceasta are nevoie de x
grame faina, y grame zahar, z ml lapte, p oua, m kg mere. Stiind ca pretul unui kg de
faina este px, al unui kg de zahar este py, litrul de lapte costa pz, kilogramul de mere
costa pm si ouale sunt pp lei/buc, sa se afle pretul placintei Anei.
11. Sa se calculeze suma 1+2+3++n
12. Sa se calculeze suma k+(k+1)++n
13. Sa se determine ultima cifra a sumei x+y, unde x si y sunt date de la tastatura.
14. Fiind dat un numar de 4 cifre, sa se construiasca inversul acestuia si sa se faca media
aritmetica a cifrelor sale.
15. Date fiind 3 variabile a,b,c, sa se interschimbe circular de la stanga la dreapta valorile
lor si apoi sa se afiseze.
16. Sa se determine ultimele doua cifre ale produsululi a*b.
17. O persoana are initial la banca o suma de bani S. In primele 6 luni ale anului,
dobanda a fost p%, iar in urmatoarele 6 luni a fost q% din suma la care s-a adaugat si
dobanda, sa se determine suma pe care o va avea persoana la sfarsitul anului.
18. Sa se calculeze aria si perimetrul unui:
a. patrat, cunoscand lungimea laturii
b. dreptunghi, cunoscand lungimile ccelor doua laturi
c. triunghi, cunoscand cele 3 laturi
d. trapez, cunoscand lungimile bazelor si inaltimea
e. cerc, cunoscand raza

Lectia 5
IMPLEMENTAREA STRUCTURILOR DE CONTROL
Algoritmul proiectat pentru rezolvarea unei anumite probleme trebuie implementat
intr-un limbaj de programare; prelucrarea datelor se realizeaza cu ajutorul instructiunilor.
Instructiunea descrie un proces de prelucrare pe care un calculator il poate executa. O
instructiune este o constructie valida (care respecta sintaxa limbajului) urmata de ; (punct si
virgula). Ordinea in care se executa instructiunile unui program defineste asa-numita
structura de control a programului.
Limbajele moderne sunt alcatuite pe principiile programarii structurate. Conform lui C.
Bohm si G. Jacopini, orice algoritm poate fi realizat prin combinarea a trei structuri
fundamentale:
structura secventiala
structura alternativa (de decizie, de selectie)
structura repetitiva (ciclica)
IMPLEMENTAREA STRUCTURII SECVENTIALE
Structura secventiala este o insiruire de secvente de prelucrare (instructiuni), plasate
una dupa alta, in ordinea in care se doreste executia acestora.
Instructiunea vida
Sintaxa: ;
Instructiunea vida nu are nici un efect. Se utilizeaza in constructii in care se cere prezenta
unei instructiuni, dar nu se executa nimic (de obicei, in instructiunile repetitive).
Exemple:
int a;
for (;;) {}
Instructiunea expresie
Sintaxa:

expresie;

Exemple:
int b, a=9;
double c;
b=a+9;
cout<<a;
Instructiunea compusa (instructiunea bloc)
Sintaxa: { declaratii de variabile;
instr1;
instr2;
.... }

Intr-un bloc se pot declara si variabile care pot fi accesate doar in corpul blocului.
Instructiunea bloc este utilizata in locurile in care este necesara prezenta unei singure
instructiuni, insa procesul de calcul este mai complex, deci trebuie descris in mai multe
secvente.
IMPLEMENTAREA
SELECTIE)

STRUCTURII

DE

DECIZIE

(ALTERNATIVE,

DE

Instructiunea if:
Sintaxa:
if (expresie)
instructiune1;
[ else
instructiune2; ]
Ramura else este optionala.
La intalnirea instructiunii if, se evalueaza expresie (care reprezinta o conditie) din paranteze.
Daca valoarea expresiei este 1, sau diferita de 0 (conditia este indeplinita) se executa
instructiune1; daca valoarea expresiei este 0 (conditia nu este indeplinita), se executa
instructiune2. Deci, la un moment dat, se executa doar una dintre cele doua instructiuni: fie
instructiune1, fie instructiune2. Dupa executia instructiunii if se trece la executia
instructiunii care urmeaza acesteia.
Observatii:
1. Instructiune1 si instructiune2 pot fi instructiuni compuse (blocuri), sau chiar alte
instructiuni if (if-uri imbricate).
2. Deoarece instructiunea if testeaza valoarea numerica a expresiei (conditiei), este posibila
prescurtarea: if (expresie), in loc de if (expresie != 0).
3. Deoarece ramura else a instructiunii if este optionala, in cazul in care aceasta este omisa
din secventele if-else imbricate, se produce o ambiguitate. De obicei, ramura else se asociaza
ultimei instructiuni if.
Exemplu:
if (n>0)
if (a>b)
z=a;
else z=b;
4. Pentru claritatea programelor sursa se recomanda alinierea instructiunilor prin utilizarea
tabulatorului orizontal.
5. Deseori, apare constructia:
if (expresie1)
instructiune1;
else
if (expresie2)
instructiune2;
else

if (expresie3)
instructiune3;
.........
else
instructiune_n;
Expresiile sunt evaluate in ordine; daca una dintre expresii are valoarea nenula, se executa
instructiunea corespunzatoare si se termina intreaga inlantuire. Ultima parte a lui else
furnizeaza cazul cand nici una dintre expresiile 1,2,. . ., n-1 nu are valoarea nenula.
Instructiunea switch
In unele cazuri este necesara o decizie multipla speciala. Instructiunea switch permite acest
lucru.
Reprezentare prin schema logica:

=exp_const
_1

=exp_const
_2

Instructiune1

Instructiune2

expr
esie

=exp_const_n1
Instructiunen-1

altfel
Instructiunen

Reprezentare prin pseudocod:


Dac expresie=expr_const_1
instructiune1;
[iesire;]
Altfel daca expresie=expr_const_2
instructiune2;
[iesire;]
........
Altfel daca expresie=expr_const_n-1
instructiune_n-1;
[iesire;]
Altfel instructiune_n;
Se testeaza daca valoarea pentru expresie este una dintre constantele specificate
(expr_const_1, expr_const_2, etc.) si se executa instructiunea de pe ramura corespunzatoare.
In schema logica test_expresie este una din conditiile: expresie=expr_const_1,
expresie=expr_const_2, etc.
Sintaxa:
switch (expresie)
{
case expresie_const_1: instructiune_1;

[break;]
case expresie_const_2: instructiune_2;
[break;]
..................................
case expresie_const_n-1: instructiune_n-1;
[break;]
[ default: instructiune_n; ]
}
Este evaluata expresie (expresie aritmetica), iar valoarea ei este comparata cu valoarea
expresiilor constante 1, 2, etc. (expresii constante=expresii care nu contin variabile). In
situatia in care valoarea expresie este egala cu valoarea expr_const_k, se executa
instructiunea corespunzatoare acelei ramuri (instructiune_k). Daca se intalneste instructiunea
break, parcurgerea este intrerupta, deci se va trece la executia primei instructiuni de dupa
switch. Daca nu este intalnita instructiunea break, parcurgerea continua. Break-ul cauzeaza
deci, iesirea imediata din switch.
In cazul in care valoarea expresiei nu este gasita printre valorile expresiilor constante, se
executa cazul marcat cu eticheta default (cand acesta exista). Expresiile expresie,
expresie_const_1, expresie_const_2,etc., trebuie sa fie intregi.
Probleme propuse:
1. 1.
Sa se verifice daca un numar este par sau impar.
2. 2.
Scrieti un algoritm care sa determine cel mai mare dintre doua numere intregi
citite.
3. 3.
Scrieti un algorim care sa determine cel mai mare dintre 3 numere intregi citite.
4. 4.
Scrieti un program care citeste de la tastatura trei valori numerice a, b, c si apoi
afiseaza pe ecran cea mai mare diferenta dintre oricare doua valori date.
Ex. a=100, b=15, c=105. Se va afisa 90.
5. 5.
Se da un numar din 3 cifre.Sa se genereze cel mai mare numar care are aceleasi
cifre ca el.
6. 6.
Intr-un parc se joaca 3 copii care au greutatile a,b,c. Sa se stabileasca daca se pot
aseza pe un balansoar astfel incat acesta sa stea in echilibru.
7. 7.
Sa se rezolve ecuatia de gradul I cu o necunoscuta: ax+b=0 unde a si b sunt
coeficienti reali cititi. Discutie.
8. 8.
Sa se rezolve ecuatia de gradul al II-lea cu 2 necunoscute: ax2+bx+c=0 unde a,b,c
sunt coeficienti reali cititi. Discutie.
9. 9.
Sa se verifice daca 3 numere a,b,c sunt pitagorice.
10. 10. Fie 2 numere cu 4 cifre. Sa se afiseze acela care are suma cifrelor mai mare.
11. 11. Se citesc de la tastatura coordonatele x si y ale celor trei varfuri ale unui triunghi. Sa
se scrie un algoritm care citeste aceste valori si verifica daca acestea pot constitui
varfurile triunghiului. In caz afirmativ se va afisa tipul triunghiului (oarecare, isoscel sau
echilateral).
12. 12. Sa se verifica daca o fractie a/b se poate simplifica prin k. Sa va afisa DA sau NU.
13. 13. Se citesc coordonatele unui punct in plan. Sa se afiseze cadranul caruia ii apartine.
14. 14. Sa se determine pozitia relativa a 2 segmente in plan.
15. 15. Se citesc varsta, inaltimea si sexul unei persoane. Sa se calculeze greutatea ideala,
dupa formula :
G=50+0.75*(i-150)+(v-20)/4, pentru baieti
G=G*0.9, pentru fete

16. 16. Sa se determine ultima cifra a lui 2x.


17. 17. Se citesc de la tastatura 2 numere naturale a si b si un operator op. Sa se calculeze
expresia a op b.
18. 18. Sa se calculeze ultima cifra a lui ab.
19. 19. Sa se calculeze ultima cifra a lui 1*2*3**n
20. 20. Se citesc valorile intregi a 3 numere a,b,c si inca o variabila x. Daca x=1, sa se
afiseze maximul dintre cele 3 numere. Daca x=2, sa se afiseze minimul dintre cele 3
numere. Daca x=3, sa se calculeze media lor aritmetica. Daca x=4, sa se afiseze valoarea
a
b
expresiei a 2 b 2 c 2 . Daca x=5, sa se afiseze valoarea expresiei a * | c | .
b
Altfel, se va afisa ultima cifra a lui |a*b*c|.
21. 21. Se citesc 3 numere naturale x,y,z. Sa se stabileasca daca pot forma laturile unui
triunghi. Daca da, sa se testeze natura triunghiului. Daca este isoscel, sa se calculeze
perimetrul. Daca este echilateral, sa se calculeze inaltimea. Daca este dreptunghic, sa se
calculeze lungimea medianei corespunzatoare unghiului drept. Daca este oarecare, se va
calcula aria triunghiului.
22. 22. Fiind dat un numar n de maxim trei cifre, sa se verifice daca patratul numarului are
ultimele cifre egale cu n. (Ex : n=5, n=6, n=25)
23. 23. Sa se afle numarul de cifre necesar pentru numerotarea paginilor unei carti cu n
pagini. (n<10000).
24. 24. Un melc a cazut intr-o fantana adanca de x metri. Ziua, melcul urca a cm iar noaptea
aluneca b cm. In cate zile va iesi melcul din fantana?
Lucrare de control
Nr. 1
1. 1.
Se citesc 3 numere reale a,b,c. Sa se precizeze daca ele pot fi laturile unui
triunghi.
(3 puncte)
2. 2.
Se citeste un numar natural L si un numar intreg x. Daca x=1, sa se calculeze si
sa se afiseze aria patratului de latura L. Daca x=2, sa se calculeze si sa se afiseze aria
triunghiului echilateral de latura L. Daca x=3, sa se calculeze si sa se afiseze
inaltimea triunghiului echilateral de latura L. Altfel, nu se va afisa nimic. (4 puncte)
3. 3.
Se citesc 3 numere naturale a,b,c. Sa se afiseze cele 3 numere in ordine
crescatoare, facand cat mai putine comparatii (minim 4). (2 puncte)
Nr. 2
1. 1.
Sa se verifice daca 3 numere naturale a,b,c sunt pitagorice. (3 puncte)
2. 2.
Se citesc lungimile bazelor unui trapez isoscel, B si b, si lungimea laturilor
neparalele, L (B, b, L numere naturale). Se citeste apoi un numar intreg x. Daca
x=1, sa se calculeze si sa se afiseze perimetrul trapezului. Daca x=2, sa se calculeze
si sa se afiseze aria trapezului. Daca x=3, sa se calculeze si sa se afiseze lungimea
liniei mijlocii. Altfel, programul va afisa numele vostru.
(4 puncte)
3. 3.
Se da un numar format din 3 cifre. Sa se afiseze cel mai mare numar care are
aceleasi cifre cu el. (Ex : pentru 386, se va afisa 863).
(2 puncte)
Se acorda 1 punct din oficiu.

IMPLEMENTAREA STRUCTURILOR REPETITIVE (CICLICE)

Exista doua categorii de instructiuni ciclice: cu test initial si cu test final.


IMPLEMENTAREA STRUCTURILOR CICLICE CU TEST INITIAL
Structura ciclica cu test initial este implementata prin instructiunile while si for.
Instructiunea while
Sintaxa:
while (expresie)
instructiune;
La intalnirea acestei instructiuni, se evalueaza expresie. Daca aceasta are valoarea 1 - sau
diferita de 0 - (conditie indeplinita), se executa instructiune. Se revine apoi in punctul in care
se evalueaza din nou valoarea expresiei. Daca ea este tot nenula, se repeta instructiune,
s.a.m.d. Astfel, instructiunea (corpul ciclului) se repeta atat timp cat expresie are valoarea
nenula. In momentul in care expresie ia valoarea 0 (conditie neindeplinita), se iese din ciclu
si se trece la urmatoarea instructiune de dupa while.
Observatii:
1. In cazul in care la prima evaluare a expresiei, aceasta are valoarea zero, corpul
instructiunii while nu va fi executat niciodata.
2. Instructiune din corpul ciclului while poate fi compusa (un bloc), sau o alta instructiune
ciclica.
3. Este de dorit ca instructiunea din corpul ciclului while sa modifice valoarea expresiei.
Daca nu se realizeaza acest lucru, corpul instructiunii while se repeta de un numar infinit de
ori.
Exemplu:
int a=7;
while (a==7)
cout<<Buna ziua!; // ciclu infinit; se repeta la infinit afisarea mesajului

Instructiunea for
In majoritatea limbajelor de programare de nivel inalt, instructiunea for implementeaza
structura ciclica cu numar cunoscut de pasi . In limbajul C instructiunea for poate fi utilizata
intr-un mod mult mai flexibil.

Sintaxa:
for (expresie1; expresie2; expresie3)
instructiune;
Se evalueaza expresie1. Cat timp expresie2 are o valoare diferita de zero, se executa
instructiune si se evalueaza expresie3.
Nu este obligatorie prezenta expresiilor, ci doar a instructiunilor vide.
for ( ; expresie2; )
sau:
for ( ; ; )
instructiune;
instructiune;
IMPLEMENTAREA STRUCTURILOR CICLICE CU TEST FINAL
Instructiunea do-while
Sintaxa:
do instructiune;
while(expresie);
Se executa instructiune. Se evalueaza apoi expresie. Daca aceasta are valoarea 1, se
executa instructiune. Se testeaza din nou valoarea expresiei. Se repeta instructiune cat timp
valoarea expresiei este 1 (conditia este indeplinita). In cazul instructiunii do-while, corpul
ciclului se executa cel putin o data.
Exercitii:
Sa se calculeze suma si produsul primelor n numere naturale, n fiind introdus de la
tastatura. Se vor exemplifica modalitatile de implementare cu ajutorul instructiunilor dowhile, while, si for.
cout<<"n="; int n; cin>>n;
int S=0, P=1, k=1;
while (k <= n) {
S=S+k; P=P*k;
k++;
}
cout<<"P="<<P<<"\tS="<<S<<'\n';
cout<<"n="; int n; cin>>n;
int S=0, P=1, k=1;
do{
S=S+k; P=P*k;
k++;
} while (k <= n);
cout<<"P="<<P<<"\tS="<<S<<'\n';

int S=0, P=1, k;


for (k=1; k<=n; k++){
S=S+k; P=P*k;
}
cout<<"P="<<P<<"\tS=";
cout<<S<<'\n';
FACILITATI DE INTRERUPERE A UNEI SECVENTE
Pentru o mai mare flexibilitate (tratarea exceptiilor care pot apare in procesul de prelucrare),
in limbajul C se utilizeaza instructiunile break si continue. Ambele instructiuni sunt utilizate
in instructiunile ciclice. In plus, instructiunea break poate fi folosita in instructiunea switch.
Instructiunea break
Este utilizata in cadrul instructiunilor ciclice, instructiunea break "forteaza" iesirea din
acestea. Fara a se mai testa valoarea expresiei (conditia) care determina repetarea corpului
instructiunii ciclice, se continua executia cu instructiunea care urmeaza instructiunii ciclice.
Astfel, se intrerupe repetarea corpului instructiunii ciclice, indiferent de valoarea conditiei de
test.
Utilizarea in cadrul instructiunii switch: In situatia in care s-a ajuns la o valoare a unei
expresiei constante egala cu cea a expresiei aritmetice, se executa instructiunea
corespunzatoare acelei ramuri. Daca se intalneste instructiunea break, parcurgerea este
intrerupta (nu se mai compara valoarea expresiei aritmetice cu urmatoarele constante), deci
se va trece la executia primei instructiuni de dupa switch. Daca nu este intalnit break,
parcurgerea continua. Instructiunea breakl cauzeaza deci, iesirea imediata din switch.
Instructiunea continue
Intalnirea instructiunii continue determina ignorarea instructiunilor care o urmeaza in corpul
instructiunii ciclice si reluarea executiei cu testarea valorii expresiei care determina repetarea
sau nu a corpului ciclului.
Probleme propuse:
1. Tabla inmultirii cu 8.
2. Tabla inmultirii.
3. Sa se determine cel mai mare divizor comun a doua numere naturale a si b citite (prin
scaderi repetate).
4. Sa se determine suma cifrelor unui numar natural
5. Sa se determine cate cifre are un numar natural
6. Sa se inverseze un numar natural
7. Sa se determine cifra cea mai mare a unui numar natural

8. Se citeste un numar natural de maxim 9 cifre. Sa se determine de cate ori se gaseste cifra
7 in scrierea lui
9. Un numar natural se numeste perfect daca este egal cu suma divizorilor sai, mai putin el.
Sa se verifice daca un n dat este numar perfect. (Ex : 6=1+2+3, 28=1+2+4+7+14)
10. Sa se afiseze primele n numere naturale perfecte. (n<10)
11. Un bancher are un seif cu cifru. Pentru a nu uita cifrul, vrea sa-l scrie pe o foaie, dar
codificat: fiecare cifra sa fie inlocuita cu diferenta dintre cifra 9 si cifra respectiva.
Codificati numarul bancherului.De exemplu pentru 386281 veti obtine 613178.
12. Se citesc numere pana la 0. Sa se calculeze suma celor negative si produsul celor
pozitive. Numarul 0 nu se ia in calcul.
13. Sa se verifice daca un numar natural este prim
14. Scrieti un algoritm care sa afiseze triunghiul
1 2 3 4 5 6 7 8
2 4 6 8 10 12 14
3 6 9 12 15 18
4 8 12 16 20
5 10 15 20
6 12 18
7 14
8
Gasiti regula dupa care s-a format acest triunghi si generati un triunghi asemanator cu
latura de marime n, unde n este un numar natural oarecare, citit de la tastatura.
15. Sa se descompuna un numar natural in factori ireductibili. Afisarea se va face sub forma
factor1^exponent1, factor2^exponent2 etc.
16. Sa se verifice daca doua numere a si b citite de la tastatura sunt gemene (adica sunt
prime si diferenta lor in modul este 2).Ex 11 si 13 sunt gemene, 19 si 21 nu sunt gemene.
17. Se citesc numere intregi pana cand se introduce un numar de 2 ori, unul dupa altul. Sa se
afiseze cate din numerele citite sunt patrate perfecte.
18. Sa se aduca la forma ireductibila fractia a/b (a si b nenule, citite de la tastatura)
19. Suma, produsul, media aritmetica a primelor n numere naturale.
20. Inversarea unui numar. Verificarea daca un numar este palindrom.
21. Sa se afiseze si sa se contorizeze toate numerele prime din intervalul [a,b].
22. Determinarea divizorilor unui numar. Suma divizorilor.
23. Sa se calculeze suma S=1k+2k+3k++nk.

24. Algoritmul lui Euclid. Determinarea cmmdc si cmmmc a 2 numere.


25. Conjectura lui Goldbach: orice numar par mai mare decat 4 se poate scrie ca suma de
doua numere prime. Sa se descompuna un numar par 4 ca suma de doua nr. prime.
26. Sa se determine perechile de numere gemene pana la n citit (numere prime impare
consecutive).
27. Doua numere se numesc prietene daca suma divizorilor unuia este egala cu celalalt
numar. (Ex: 18 si 39 deoarece suma_div(18)=1+2+3+6+9+18=39)
-

Sa se verifice daca 2 numere date sunt prietene

Sa se gaseasca toate perechile de numere prietene dintr-un interval dat.

28. Se introduce de la tastatura un sir de numere intregi, distincte doua cate doua, pana la
intalnirea numarului 0. Sa se afiseze cele mai mici doua elemente din sir.
29. Sa se determine un numar pana la n citit care sa aiba un numar maxim de divizori.
30. Se citeste un numar cu n cifre (n9). Sa se determine numarul obtinut prin eliminarea
cifrei / cifrelor din mijloc.
31. Cifra de control a unui numar.
32. Sa se afiseze numerele de la 1 la n care sunt egale cu suma factorialelor cifrelor sale.
(Ex: 145=1!+4!+5!)
33. Sa se genereze toate cuburile perfecte pana la n citit.
34. Sa se afiseze toate numerele pana la n care sunt egale cu suma cuburilor cifrelor sale.
35. Sa se genereze toate numerele pitagorice pana la n citit.
36. Serviciul de paz al unei firme are nevoie de un program care s verifice corectitudinea
codului de pe cartelele de identificare a angajailor. Codul este un numr ntreg de maxim
9 cifre, care conine cel puin o cifr par i una impar pentru care suma tuturor cifrelor
impare i produsul tuturor cifrelor pare trebuie obligatoriu s produc acelai rest la
mprirea cu prima cifr a codului (n ordinea de la stnga la dreapta). Scriei un
program care s citeasc de la tastatur un cod i s afieze pe ecran mesajul CORECT
sau INCORECT, n funcie de situaie.
Exemplu: pentru n=253271 se va afia mesajul CORECT
37. Sa se genereze sirul 1 2 2 3 3 3 4 4 4 4 n n n ..n (de n ori)
38. Se citeste un intreg n si n perechi (a,b) de numere naturale. Sa se afiseze acele perechi al
caror cmmdc este numar prim.

39. Se citesc n numere naturale. Sa se afiseze cate din ele au indicativul lui Euler o putere a
lui 2. (Indicativul lui Euler al unui numar x este numarul de numere naturale mai mici ca
x si prime cu el)
40. Se citesc numere naturale pana la 0. Sa se afiseze cate dintre ele sunt egale cu suma
cuburilor cifrelor lor. (Ex: 153=13+53+33)
41. Pe o insula se afla 3 marinari si o maimuta. Marinarii au strans o gramada de nuci de
cocos, pe care au hotarat sa le imparta frateste a doua zi. In timpul noptii, un marinar s-a
sculat, a impartit nucile in 3 parti egale, ascunzand una din parti. A ramas o nuca in plus,
pe care a dat-o maimutei. Pana dimineata, povestea s-a repetat si cu ceilalti doi marinari.
Dimineata, marinarii impart nucile ramase in 3 parti egale, ramanand o nuca pe care o
dau maimutei. Sa se determine toate numerele n<=1000 care permit derularea exacta a
evenimetelor. Cate nuci revin in fiecare din cazuri fiecarui marinar si maimutei ?
(Incercati sa generalizati problema pentru n marinari si o maimuta). Un exemplu : 727
nuci de cocos, primul marinar ia 313 nuci, al doilea 232, al treilea 178 si maimuta 4.
42. Sa se scrie un program care calculeaza patratul unui numar cu maxim 5000 de cifre, care
incepe cu 2 si urmatoarele cifre sunt toate 3. (Ex : 233332=544428889)
43. Sa se scrie un program care calculeaza patratul unui numar cu maxim 5000 de cifre, care
incepe cu 3 si urmatoarele cifre sunt toate 6. (Ex : 36662=1344395556)
44. Sa se scrie un program care calculeaza patratul unui numar cu maxim 5000 de cifre, care
incepe cu 4 si urmatoarele cifre sunt toate 3. (Ex : 433332=18774889)
45. O carte are n pagini, numerotate cu numere de la 1 la n (20<n<10000). Sa se afle cate
cifre au fost folosite la paginare. (Ex : pentru n=100 se folosesc 192 de cifre)
46. Scrieti un program care afiseaza si genereaza tabla lui Pitagora.
| 1 2 3 10
-------------------1 | 1 2 3 10
2 | 2 4 6 20
.
10 |10 20 30 100

47.
48. Dat fiind un numar natural n, sa se afiseze
a) cel mai apropiat numar care este patrat perfect. (Ex: pentru n=13 se va afisa 16)
b) cel mai apropiat numar care este cub perfect. (Ex: pentru n=25, se va afisa 27)
c) cel mai apropiat numar care este numar prim. Daca exista doua astfel de numere, se
vor afisa amandoua. (Ex: pentru n=27, se va afisa 29, pentru n=15 se vor afisa 13 si
17)
49. Sa se gaseasca toate solutiile ecuatiei 7x-4y=3.

50. Sa se afiseze toate numerele din intervalul [a,b] care sunt rotunde (transformate in baza
2, au numarul de cifre de 1 egal cu numarul de cifre de 0). Capetele intervalului, a si b, se
citesc de la tastatura.
51. Avand la dispozitie monede de 3 valori a,b,c, sa se determine toate posibilitatile de a
plati o suma S folosind cele 3 tipuri de monede.
52. Bit-Imparat se afla la mare ananghie : tinutul stapanit de el este de amar de vreme
parjolit de ostile lui Rau-Imparat, care e pe cale sa puna stapanire pe tara. Sarmanul Bitmparat nu are alta solutie decat sa ceara ajutor varului sau, Help-Imparat, pentru ca
acesta sa-i trimita grabnic intariri. Bit-Imparat pregateste un sol ce va duce mesajul.
Odata ajuns, solul trebuie sa-i sopteasca lui Help-Imparat o parola, care consta dintr-un
numar ce poate fi scris ca putere a lui 2. Daca numarul corespunde regulii, mesajul
solului va fi interceptat, altfel solul va fi considerat spion si i se va taia capul.
Sa se decida daca pentru o soapta data , solul scapa cu viata sau nu.
53. Se citeste un numar natural n>100. Sa se verifice daca numarul obtinut prin eliminarea
primei si ultimei cifre este patrat perfect.
54. Sa se afiseze ultima cifra a lui an
55. Sa se afiseze ultima cifra a lui a1*a2*a3*...*an)
56. Sa se scrie numarul natural n ca suma de numere consecutive. Daca exista mai multe
solutii, se vor afisa toate (Ex : 105=1+2+...+14=15+16+...+20=34+35+36=52+53,
147=18+19+...+24=48+49+50)
57. Un numr natural se numete autopomorfic dac este sufixul ptratului su (52=25,
62=36). S se afle primele n numere autopomorfice, pentru n dat (1 n 50). ( Exemplu:
pentru n=4 se va afia: 1 5 6 10)
58. Sa se afiseze triunghiul pe n linii :
1
232
34543
4567654 etc. //dupa 9 urmeaza 0, inainte de 0 este 9
59. Scrieti un program prin care calculatorul sa ghiceasca din cat mai putine incercari un
numar natural [1..10000] la care va ganditi in prealabil. Atunci cand calc propune un nr,
ii raspundeti cu 1 daca nr este prea mare, cu -1 daca e prea mic si cu 0 daca a ghicit
60. Se consider irul : 1 2 1 3 2 1 4 2 2 5 4 3 2 1 6 2 2 3 3 3 7 6 .
obinut din irul numerelor naturale prin nlocuirea fiecrui numr n printr-un grup de
numere astfel : orice numr prim p este nlocuit prin numerele p, p-1, 3,2,1 iar
numrul compus n este nlocuit prin n urmat de toi divizorii si proprii, un divizor d

repetndu-se succesiv de d ori. S se tipreasc un numr precizat de termeni din irul


definit mai sus.
61. Cate perechi de iepuri se pot obtine in n luni dintr-o singura pereche de iepuri, stiind ca:
- iepurii din prima prima pereche sunt nou nascuti
- fiecare noua pereche de iepuri devine fertila la o luna
- fiecare pereche produce o pereche de descendenti in fiecare luna
- nici un iepure nu moare

Lectia 5

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