[email protected] IEEI - 2016 www.infopuc.ro C5-1
Programarea Calculatoarelor și Limbaje de Programare
- Curs 5 –
• biblioteca math.h
• if-else, ternary
• switch-case
• break, return, continue
[email protected] IEEI - 2016 www.infopuc.ro C5-2
Organizare: desfăşurarea evaluării
• S11 (5-8 dec) – programare individuală susţinere colocviu, variante:
– S13 (19-23 dec 2016) SAU
– S14 (9-12 ian 2017)
• Portofoliu cu probleme rezolvate complet (paşii a,b,c,d,e,f din referate):
– minim 2 probleme structura secvenţială (L8-9)
– minim 2 probleme structura secvenţială (L10-11)
• Portofoliul se va alcătui conform exemplului din referatul L8-9
(https://drive.google.com/open?id=1ckAIKDJFcrL0bqtce0k2uFKAbQ
Dd-BE-rcQ1K5MsuRM)
• Desfăşurare examen:
– Intrarea în sală pe baza CI + carnet student
– Prezentare portofoliu cu lucrări (un portofoliu incomplet anulează nota la examen)
– Susţinere test practic (ECLIPSE): program elementar (nota 5, timp: 20 minute) +
program complementar + întrebări de autocontrol (6-10, timp: 30 minute)
[email protected] IEEI - 2016 www.infopuc.ro C5-3
Biblioteca math.h
• Funcţii
sin cos tan
asin acos atan
sinh cosh tanh
exp log log10
pow sqrt ceil
floor fabs ldexp
frexp modf fmod
• Constante
M_E M_LOG2E M_LOG10E
M_LN2 M_LN10 M_PI
M_PI_2 M_PI_4 M_1_PI
M_2_PI M_2_SQRTPI
M_SQRT2 M_SQRT1_2
#include<stdio.h>
#include<math.h>
int main(){
printf("%.2f\n",sin(M_PI));
printf("%.2f",sin(M_PI_2));
return 0;
}
[email protected] IEEI - 2016 www.infopuc.ro C5-4
Operatorul ternar
• exp1 ? exp2 : exp3
• a ? b : c
• Ex. rezultat = a > b ? x : y;
int a,b,x,y,rez;
a=3;
b=5;
x=10;
y=20;
rez=a<b?x:y;
printf("rez=%d\n",rez);
[email protected] IEEI - 2016 www.infopuc.ro C5-5
Reguli de precedenţă
• Operatorul ternar
int a=1, b=2, c=3;
int x, y, z;
x = a?b:c?a:b;
y = (a?b:c)?a:b; /* left-to-right */
z = a?b:(c?a:b); /* right-to-left */
// x = 2 y = 1 z = 2
[email protected] IEEI - 2016 www.infopuc.ro C5-6
Reprezentarea algoritmilor
bloc de decizie
blocuri de conectare blocuri de atribuire
blocuri de intrare/ieşire blocuri delimitatoare
[email protected] IEEI - 2016 www.infopuc.ro C5-7
Instrucţiunea if()
• Instrucţiunea if poate fi utilizată cu sau fără ramura else:
if (test)
set instrucţiun;
if (a >= 3) a = a - 3;
#include <stdio.h> int main(){ int x; printf("Dati x:"); fflush(stdout);
scanf("%d",&x); if( x < 0 ) x = -x; printf("|x| = %d", x); return 0; }
[email protected] IEEI - 2016 www.infopuc.ro C5-8
Instrucţiunea if - else
• Forma completă a lui if:
if (test)
set instrucţiuni1;
else
set instrucţiuni2;
if (a = = 3) a = a * 3;
else a = a * 5;
#include <stdio.h> int main(){
int a, b; int max, suma; printf("Dati a si b:"); fflush(stdout); scanf("%d%d", &a, &b); if( a > b ) max = a; else max = b; suma = a + b; printf("max = %d\n", max); printf("suma = %d", suma); return 0;
}
[email protected] IEEI - 2016 www.infopuc.ro C5-9
Instrucţiuni if-else imbricate (nested if)
if (a >= 3){
a = a - 3;
if ( a = = 3)
a = a * 3;
}
else
a = a * 5;
[email protected] IEEI - 2016 www.infopuc.ro C5-10
Break, Return, Continue
• return se foloseşte fie pentru a returna o valoare
fie pentru a opri execuţia unei funcţii
• break se foloseşte pentru terminarea setului de
instrucţiuni {…} în care este poziţionat
• continue se foloseşte pentru trecerea la pasul
următor (fără parcurgerea celui curent) în cazul
instrucţiunilor repetitive
[email protected] IEEI - 2016 www.infopuc.ro C5-11
Break, Return, Continue
#include <stdio.h>
int main(){
int u, r1, r2, r3, rt;
float i;
scanf("%d%d%d%d", &u, &r1, &r2, &r3);
printf(" U=%d R1=%d R2=%d R3=%d", u, r1, r2, r3);
rt = r1 + r2 + r3;
if( rt == 0){
printf(“Rezistenta totala nula!!!");
return 0;
}
i = u / rt;
printf("\n Valoarea curentului prin circuit I=%f",i);
return 0;
}
[email protected] IEEI - 2016 www.infopuc.ro C5-12
Instrucţiunea switch-case
• Instrucţiunea switch este folosită pentru a
selecta o ramură de execuţie funcţie de
valoarea unei variabile întregi (selector)
switch (selector) {
case valoare1 : instrucţiuni1;
break;
case valoare2 : instrucţiuni2;
break;
case valoare3 : instrucţiuni3;
break;
default: instrucţiuni4;
}
selector
valoare1==
selector
?
instrucţiuni1
valoare2==
selector
?
valoare3==
selector
?
instrucţiuni4
DA
NU
NU
NU
instrucţiuni2 DA
instrucţiuni3 DA
utilizarea cu break
• Instrucţiunea break se foloseşte pentru a specifica programului să iasă
din structura curentă de execuţie
[email protected] IEEI - 2016 www.infopuc.ro C5-13
Instrucţiunea switch-case
switch (selector) {
case valoare1 : instrucţiuni1;
case valoare2 : instrucţiuni2;
case valoare3 : instrucţiuni3;
default: instrucţiuni4;
}
selector
valoare1==
selector
?
instrucţiuni1
valoare2==
selector
?
valoare3==
selector
?
instrucţiuni4
DA
NU
NU
NU
instrucţiuni2 DA
instrucţiuni3 DA
utilizarea fără break • Dacă nu se apelează instrucţiunea break programul va executa toate
instrucţiunile ulterioare unei condiţii
adevărate
[email protected] IEEI - 2016 www.infopuc.ro C5-14
Instrucţiunea switch-case - exemplu
int n;
scanf("%d",&n);
switch( n ) {
case 0 :
printf("Nimic\n"); break;
case 1 :
printf("Unu\n");
case 2 :
printf("Doi\n"); break;
case 3 :
case 4 :
case 5 :
printf("3, 4 sau 5\n"); break;
default :
printf("Altele!\n"); break;
}