Académique Documents
Professionnel Documents
Culture Documents
Observaii
nedeterminare: a=0 i b=0 (orice real este soluie); nu are soluie: 0x+b=0, b nenul; soluie: -b/a, a nenul
double a,b,x; Rezolvarea ecuaiei de gradul I cu coeficieni reali //intrare: a,b if(a==0) ax +b=0
if(b==0) cout<<nedeterminare; else cout<<nu are sol.; else x=-b/a; double a,b,c,x1,x2,delta; //intrare: a,b,c delta=b*b-4*a*c; if(delta>0) { x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a); } else if(delta==0) { x1=x2=-b/(2*a); } else cout<<fara sol. reale!;
Calculul ariei unui triunghi double a,b,c,s,p; //intrare: a,b,c pe baza lungimilor if(a>0 && b>0 && c>0 && laturilor
Calculul celui mai mare divizor comun folosind algoritmul lui Euclid
unsigned a,b,r; //intrare: a,b while(b!=0) { r=a%b; a=b; b=r; } //aici cmmdc=a unsigned a,b,c,d,r; //intrare: a, b nenul c=a;d=b; while(d!=0) { r=c%d; c=d;
1/5
Algoritm
Cod C++
d=r; } //simplificare cu c a/=c; b/=c;
Observaii
unsigned a,b,r,c,d,m; //intrare: a,b c=a; d=b; while(b!=0) { r=a%b; a=b; b=r; } if(a==0) m=0; else m=c/a*d; //aici cmmmc=m unsigned n,i,f; //intrare: n f=1; for(i=1;i<=n;i++) f*=i; //final: f unsigned n,i; double s; //intrare: n s=0; for(i=1;i<=n;i++) s+=1.0/i; //final: s unsigned n,d; bool b; //intrare: n if(n==0 || n==1) b=false; else if(n==2) b=true; else { b=true; d=2; while(b && d<=sqrt(n)) { if(n%d==0) b=false; d++; } } //final: b bool b; //intrare: n if(n==0 || n==1) b=false; else if(n==2)
(a,b)[a,b]=ab [a,0]=[0,a]=0
Calculul factorialului
0!=1 n!=1x2x...xn
Calculul sumei 1 1 1 1+ + ++ 2 3 n
Verificarea primalitii(I)
orice numr par (diferit de 2) nu este prim; modificarea permite verificarea doar a posibililor divizori impari
2/5
Algoritm
Cod C++
b=true; else if(n%2==0) b=false; else { b=true; d=3; while(b && d<=sqrt(n)) { if(n%d==0) b=false; d+=2; } } //final: b
Observaii
unsigned n,f,p; //intrare: n>1 f=2; while(n!=1) { p=0; while(n%f==0) { p++; n/=f; } if(p!=0) cout<<f<< la <<p<<endl; f++; } unsigned n,d; //intrare: n for(d=1;d<=n;d++) if(n%d==0) [prelucrare divizor d] unsigned n; //intrare: n while(n!=0) { [prelucrare n%10] n/=10; } unsigned n,nr; //intrare: n nr=0; do { n++; n/=10; } while(n!=0); //final: nr unsigned n,s; //intrare: n s=0; while(n!=0)
n%10 este ultima cifr a lui n; cifrele se obin de la ultima la prima la final n devine 0
s-a folosit do-while pentru a se obine un rezultat corect n cazul n=0 (o cifr)
3/5
Algoritm
{ s+=n%10; n/=10; } //final: s
Cod C++
Observaii
m=n; o=0; while(m!=0) { o=o*10+m%10; m/=10; } if(n==o) cout<<palindrom; else cout<<nu este palindrom; unsigned n,i; double v,min,max; //intrare: n if(n==0) cout<<secv. vida; else { cin>>v; min=max=v; for(i=1;i<=n-1;i++) { cin>>v; if(v<min) min=v; if(v>max) max=v; } } //final: min,max unsigned n,v,pare,impare; //intrare: n pare=impare=0; cin>>v; while(v!=0) { if(v%2==0) pare++; else impare++; cin>>v; } //final: pare,impare
exemple de palindroame: 5, 77, 121, 4334, etc. algoritmul protejeaz valoarea variabilei n; variabila o conine oglinditul lui n
cele n valori reale se prelucreaz pe rnd, folosind variabila v; dac n>0 iniializarea variabilelor min/max se face cu prima valoare din secven iar apoi se pelucreaz celelalte n-1 valori
4/5
Algoritm
Cod C++
Observaii
f 0=f 1=1 f n=f n2+f n1 , n2
if(n==0 || n==1) f=1; else { a=b=1; for(i=2;i<=n;i++) { f=a+b; a=b; b=f; } } //final: f
5/5