if (expresie) instruc instruciune1; [else instruc instruciune2;}
unde: •
expresie - orice expresie valida în limbajul C
instruc instruciune1, instruc instruciune2 - orice instruciune corecta din limbajul C ; Mod de funcionare: • se evalueaz ă expresia • dacă expresia este ne nul ă (convenia pentru adevărat) se executa instruc iune1 • dacă expresia este nula (fals ă) se executa instruc iune2 • se trece la următoarea instruciune a programului instruciune2 poate să lipsească. Observaie: alternativa else instruc Exemplul 4: Să se scrie un program pentru calcularea maximului a doua numere. •
#include void main(void){ int a,b; int max; cout<<”a=”; cin>>a; cout<<”\nb=”; cin>>b; if (a<=b) max=b; else max=a; cout<<”Maximul celor doua numere este=”<
Exemplul 5: Scriei un program care calculează maximul a 3 numere.
#include void main (void){ int a,b,c; int max; cout<<”a=”; cin>>a; cout<<”\nb=”; cin>>b; cout<<”\nc=”; cin>>c; if (a<=b) if (c<=b) max=b; else max=c; else if (c<=a) max=a; else max=c; cout<<”\nMaximul cout<<”\nMaximul este=”<
Observaie: După cum se vede din exemplu, instruc instruciune1 şi instruc instruciune2 pot fi de asemenea instruc iuni if. Spunem ca sunt instruciuni if imbricate. A se observa şi modul cum a fost scris programul, astfel încât s ă se vadă clar cărei instruciuni if ii aparine fiecare else. Exemplul 6: Se dau trei numere întregi a,b,c. Să se testeze dac ă numerele date pot fi lungimile laturilor unui triunghi.
17
#include #include void main() { int n; //numă //numărul de elemente int v[30]; //vector maxim 30 întregi int pare, impare; // memorează memorează nr. elementelor pare, impare int j; //variabila contor pentru for
#include #include void main(){ char cuvant[30]; clrscr(); cout<<”Introduceti cout<<”Introduceti cuvantul:”; cin>>cuvant; cout<<”Cuvantul introdus este:”<
clrscr(); //citim numă numărul de elemente cout<<”n=”; cin>>n; /* se citesc elementele şirului */ for(i=0;i>v[i]; } //ini //iniializam variabilele pare=0; impare=0; //luam fiecare element din v şi testam dacă dacă acesta este sau nu par for(j=0;j
Observai cu atenie cum am declarat variabila ce va memora cuvântul: folosim un vector cu elemente de tip caracter. Acest mod de declarare ne permite s ă lucrăm cu oricare dintre caracterele ce formează cuvântul. De exemplu, dac ă utilizatorul introduce cuvântul salariu, vectorul nostru de caractere arata cam aşa: Dacă dorim să modificam puin cuvântul putem scrie: cuvant[6]=’i’;
şi vom obine cuvântul salarii. Exemplul 4: Să se citească un cuvânt şi să se găseasc ă numărul de vocale pe care le con ine. #include #include # include void main(){ char c[30];// memorează memorează cuvântului int vocale; // numă numărul vocalelor int j; clrscr(); cout<<”Introduceti cout<<”Introduceti cuvantul:”; cin>>c; vocale=0; //că //căutam vocalele for(j=0;j
În programul de mai sus verificam, pentru fiecare element, dac ă acesta se împarte exact la doi, caz în care am mai descoperit un element par. În caz contrar, numărul elementelor impare se măreşte cu unu. Am utilizat operatorul % , numit şi modul aritmetic, care are ca rezultat restul împ ăririi lui v[j] la 2. Exemplul 3: Să se introducă de la tastatura un cuvânt şi să se afişeze. } •
Observaii: Am utilizat funcia strlen, care are ca rezultat numărul de caractere al şirului dat ca parametru. Funcia poate fi utilizata doar dac ă a fost inclus fi şierul header string.h, fişier ce conine funciile ce acionează asupra şirurilor de caractere.
22
void citeste(int a[30], int n) { int k;
#include int cmmdc(int m, int n){ int r;
for(k=0;k>a[k];
do{ r=m%n; m=n; n=r; }while(r!=0); return m;
}
Funcia are doi parametri: variabila de tip vector care va retine numerele citite şi variabila n, care ne spune cate elemente trebuiesc citite. Func ia main poate să arate astfel: void main (){ int b[30]; int n; cout<<”n=”; cin>>n; citeste(a,n);
} void main(){ int a,b; cout<<"Primul cout<<"Primul numă număr="; cin>>a; cout<<"Al doilea numă număr="; cin>>b; cout<
}
Exerciiul 6: Scriei o funcie pentru afişarea elementelor unui vector şi adăugai-o exemplului precedent. Exemplul 7. Scriei o funcie care calculează suma elementelor dintr-un vector. int suma(int a[40], int n) { int k; int s; s=0; for(k=0;k
Este necesar să introducem ca parametru şi numărul de elemente din vector n. Exerciiul 8: Folosii funcia de mai sus în programul de la exerci iul precedent. Exemplul 9. Scriei o funcie care calculează ax, unde a real şi x întreg pozitiv. float putere(float a, int x) { int k; int p; //retine puterea p=1; for(k=1;k<=x;k++) p=p*a; return p; }
Exerciiul 10. Modificai funcia din exemplul 7 astfel încât să poată ridica pe a şi la puteri negative. Exemplul 11. Scriei o funcie pentru a calcula cel mai mare divizor comun a 2 numere întregi folosind algoritmul lui Euclid.
}
Exemplul 12 Să se scrie o func ie care verifica dacă un întreg x aparine unui vector v. int cauta(int v[50], int n){ int k; int apartine; apartine=0; //se presupune ca x nu este element în v for(k=0;k
Exemplul 13. Să se scrie o funcie care realizează suma a doua matrice cu m linii şi n coloane. void suma_mat(int a[20][20], int b[20][20], int c[20][20], int m, int n){ int j, k; //variabile contor în for for(j=0;j
Parametrii de care depinde rezolvarea sarcinii sunt: a - prima matrice b - a doua matrice c - matricea suma (rezultatul sumei) 29
m - numărul de linii n - numărul de coloane
Exerciiul 5. Să se scrie funcia main corespunzătoare funciei de mai sus, precum şi funcii pentru citirea şi afişarea unei matrice. O situaie interesanta apare atunci când vrem ca variabilele ce apar ca parametri formali s ă poată fi modificate în cadrul funciei, modificările fiind disponibile în funcia apelanta. Să luam următorul exemplu: Exemplul 14. Să se scrie o func ie care interschimbă valorile a doua variabile întregi. Varianta următoare este greşita:
Parcurgei din nou exemplul 10 şi privii cu atenie antetul funciei suma_mat. Parametrul formal c este o matrice calculata ca suma matricelor a şi b, deci valoarea elementelor lui c este modificata în cadrul funciei, dar parametrul formal este corect? Răspunsul este afirmativ deoarece, după cum ştii, tablourile sunt tratate exact ca şi pointerii, deci tablourile care apar ca parametrii formali se considera parametri referina.