Documente Academic
Documente Profesional
Documente Cultură
obiectul unor enunuri, fie sunt utilizai ca etape, pai, n elaborarea unor rspunsuri. Aceti algoritmi au fost concepui spre a veni n ajutorul programatorilor, care i folosesc ori de cte ori este necesar n probleme, fr a mai fi nevoie s-i elaboreze de fiecare dat. Acetia se refer la separarea cifrelor unui numr (folosit de fiecare dat cnd n rezolvarea unei probleme este necesar accesul la cifrele unui numr), determinarea divizorilor proprii ai unui numr natural dat, testarea dac un numr natural mai mare ca 1 este prim, determinarea celui mai mare divizor comun a dou numere naturale date, descompunerea unui numr natural mai mare ca 1 n factori primi, determinarea maximului/minimului unui ir de numere citite, pe rnd, de la dispozitivul de intrare. n continuare, voi prezenta fiecare algoritm fundamental astfel: prezentarea algoritmului, descrierea lui n limbaj pseudocod i n limbaj C++ i rezolvarea cte unei aplicaii n care intervine.
Exemple 1. Se citete de la tastatur un numr ntreg a. S se afieze suma cifrelor numrului. Limbaj pseudocod Limbaj C++ intreg a,s #include <iostream.h> citeste a void main() s=0 {int a,s=0; cout<<a=;cin>>a; ct_timp a 0 execut while(a!=0) s=s+a%10 {s=s+a%10; a=[a/10] a=a/10; } scrie s cout<<s=<<s<<endl; } 2. Se citete de la tastatur un numr ntreg a. S se precizeze cte cifre are numrul citit. Limbaj pseudocod Limbaj C++ intreg a,k citeste a k=0 ct_timp a 0 execut k=k+1 (numr cifrele) a=[a/10] scrie k #include <iostream.h> void main() {int a,k=0; cout<<a=;cin>>a; while(a!=0) {k++; a=a/10; } cout<<numrul are <<k<< cifre <<endl; }
3. Se citete de la tastatur un numr ntreg a. S se afieze oglinditul numrului. Ex. a=3147; oglinditul este 7413. Limbaj pseudocod Limbaj C++ intreg a,ogl #include <iostream.h> citeste a void main() ogl=0 {int a; long ogl=0; ct_timp a 0 execut cout<<a=;cin>>a; ogl=ogl*10+a%10 while(a!=0) a=[a/10] { ogl=ogl*10+a%10; a=a/10; scrie ogl } cout<<oglinditul numrului dat este <<ogl; }
Exemplu Se citete de la tastatur un numr natural x. S se verifice dac x este numr perfect. Un numr este perfect dac este egal cu suma divizorilor si, mai mici dect el. Ex. 6=1+2+3; 28=1+2+4+7+14 Limbaj pseudocod ntreg n,i,s citeste n s=1 pentru i2, [n/2] execut dac n%i=0 atunci s=s+i Limbaj C++ #include <iostream.h> void main() {int n,i,s=1; cout<<n=;cin>>n; for(i=2;i<=n/2;i++) if(n%i==0) s=s+i; if(s==n) cout<<numarul dat este perfect; else cout<<numarul dat nu este perfect; }
dac s=n atunci scrie numr perfect altfel scrie numrul nu este perfect
Limbaj pseudocod ntreg n,i logic prim citeste n primtrue pentru i2, [ n] execut dac n%i=0 atunci primfalse dac prim=true atunci scrie nr prim altfel scrie nr nu este prim
Limbaj C++ #include<math.h> #include <iostream.h> void main() {int n,i,prim; cout<<n=;cin>>n; prim=1; for(i=2;i<=sqrt(n);i++) if(n%i==0) prim=0; if(prim==1) cout<<numarul dat este prim; else cout<<numarul dat nu este prim; }
Exemplu Se citesc, pe rnd, de la tastatur n numere naturale. S se afieze media aritmetic a valorilor prime citite. Limbaj pseudocod Limbaj C++ ntreg n,i,j,s,k,x logic prim citeste n s=0 k=0 pentru i1,n execut citete x primtrue pentru j2, [ x ] execut dac x%j=0 atunci primfalse dac prim=true atunci s=s+x k=k+1 dac k0 atunci scrie media aritmetic ,s/k altfel scrie irul dat nu conine numere prime #include <iostream.h> void main() {int n,i,j,prim,s=0,k=0,x; cout<<n=;cin>>n; for(i=1;i<=n;i++) {cout<<dati un numar;cin>>x; prim=1; for(j=2;j<=sqrt(n);j++) if(n%j==0) prim=0; if(prim==1) {s=s+x; k=k+1;} } if(k!=0) cout<<media aritmetica este <<(float)s/k; else cout<<sirul dat nu contine numere prime; }
4. Determinarea celui mai mare divizor comun a dou numere naturale date Varianta 1 (prin mpriri)
S presupunem c avem dou numere naturale a i b, pentru care trebuie s aflm cel mai mare divizor comun(cmmdc). Dac numrul a se mparte exact la numrul b, atunci cmmdc(a,b)=b. Dac cele dou numere nu se mpart exact unul la cellalt, atunci se procedeaz astfel: se mparte n mod repetat a la b, pn cnd restul mpriri devine 0. La fiecare pas se reine restul, mpritorul devine deimpartit, iar restul mpritor. Cmmdc(a,b) este ultimul rest nenul obinut. i aici avem dou modaliti de determinare, dup cum folosim structura repetitiv ct_timp ... execut sau repet ... ct_timp. ct_timp ... execut Limbaj pseudocod Limbaj C++ ra%b ct_timp r0 execut ab br ra%b scrie b r=a%b while(r!=0) {a=b; b=r; r=a%b; } cout<<cmmdc=<<b;
Exemple 1. Se dau dou numere naturale a i b. S se verifice dac cele dou numere sunt prime ntre ele. Dou numere sunt prime ntre ele dac cmmdc al lor este 1. Limbaj pseudocod ntreg a,b citete a,b ct_timp ab execut dac a>b atunci aa-b altfel bb-a dac a=1 atunci scrie cele dou nr sunt prime ntre ele altfel scrie cele dou nr nu sunt prime ntre ele Limbaj C++ #include <iostream.h> void main() {int a,b; cin>>a>>b; while(a!=b) if(a>b) a=a-b; else b=b-a; if(a==1) cout<<cele doua nr sunt prime intre ele; else cout<<cele doua nr nu sunt prime intre ele; }
2. Se dau dou numere naturale a i b. S se determine cmmmc (cel mai mic multiplu comun) al celor dou numere.
cmmmc ( a, b) =
Limbaj pseudocod
a *b cmmdc ( a, b)
Limbaj C++ #include <iostream.h> void main() {int a,b,x; cin>>a>>b; x=a*b; while(a!=b) if(a>b) a=a-b; else b=b-a; cout<<cmmmc=<<x/a; }
intreg a,b,x citeste a,b xa*b ct_timp ab execut dac a>b atunci aa-b altfel bb-a scrie cmmmc= ,[x/a]
Algoritm: se pornete de la primul factor prim posibil, 2; ct timp numrul dat este diferit de 1, se execut operaiile: ct timp numrul se mparte exact la un factor prim se execut mprirea, se prelucreaz factorul i ctul devine demprit se trece apoi la urmtorul factor prim Limbaj pseudocod Limbaj C++ f2 ct_timp n1 execut ct_timp n%f=0 execut scrie f (sau orice alta prelucrare ceruta) n=[n/f] ff+1 #include <iostream.h> void main() {int n,f; cin>>n; f=2; while(n!=1) {while(n%f==0) {cout<<f; n=n/f;} f=f+1; } }
Exemplu Se citete de la tastatur un numr natural mai mare ca 1. S se afieze descompunerea numrului n factori primi sub forma f la puterea p, unde f este factorul prim i p puterea la care apare n descompunere. Ex. descompunerea numrului 120 va fi afiat astfel: 2 la puterea 3 3 la puterea 1 5 la puterea 1 Limbaj pseudocod Limbaj C++ ntreg n,f,p citete n f2 ct_timp n1 execut p0 ct_timp n%f=0 execut p=p+1 n=[n/f] dac p0 atunci scrie f, la puterea ,p ff+1 #include <iostream.h> void main() {int n,f=2,p=1; cin>>n; while(n!=1) {p=0; while(n%f==0) {p=p+1; n=n/f;} if(p!=0) cout<<f<< la puterea <<p<<endl; f=f+1; } }
Se presupune c primul numr citit este maximul.Se citesc apoi, pe rnd, numerele i la fiecare pas se compar numrul citit cu maximul existent. Dac numrul citi este mai mare dect maximul, se nlocuiete maximul. Limbaj pseudocod intreg n,i,x,max citeste n,x maxx pentru i2,n executa citeste x daca x>max atunci maxx scrie max Limbaj C++ #include <iostream.h> void main() {int n,i,x,max; cout<<cate numere se dau?;cin>>n; cout<<dati un numar;cin>>x; max=x; for(i=2;i<=n;i++) {cout<<dati un numar;cin>>x; if(x>max) max=x;} cout<<maximul numerelor citite este=<<max<<endl; }
Determinarea minimului Se presupune c primul numr citit este minimul.Se citesc apoi, pe rnd, numerele i la fiecare pas se compar numrul citit cu minimul existent. Dac numrul citi este mai mic dect minimul, se nlocuiete minimul. Limbaj pseudocod Limbaj C++ intreg n,i,x,min citeste n,x minx pentru i2,n executa citeste x daca x<min atunci minx scrie min #include <iostream.h> void main() {int n,i,x,min; cout<<cate numere se dau?;cin>>n; cout<<dati un numar;cin>>x; min=x; for(i=2;i<=n;i++) {cout<<dati un numar;cin>>x; if(x<min min=x;} cout<<minimul numerelor citite este=<<min<<endl; }
Determinarea n acelai timp a minimului i maximului Se presupune c primul numr citit este minimul i n acelai timp maximul. .Se citesc apoi, pe rnd, numerele i la fiecare pas se compar numrul citit cu minimul i maximul existente. Dac numrul citi este mai mic dect minimul, se nlocuiete minimul; dac numrul citi este mai mare dect maximul, se nlocuiete maximul. Limbaj pseudocod Limbaj C++ intreg n,i,x,max,min citeste n,x maxx pentru i2,n executa citeste x daca x>max atunci maxx daca x<min atunci minx scrie max,min #include <iostream.h> void main() {int n,i,x,max,min; cout<<cate numere se dau?;cin>>n; cout<<dati un numar;cin>>x; max=x; min=x; for(i=2;i<=n;i++) {cout<<dati un numar;cin>>x; if(x>max) max=x; if(x<min) min=x;} cout<<maximul numerelor citite este=<<max<<endl; cout<<minimul numerelor citite este=<<min<<endl; }