Sunteți pe pagina 1din 3

Algoritmi elementari

Prelucrarea numerelor pana indeplinesc o condiie Initializari; Repetea Citesc a; Prelucrez a; Cat timp nu ndeplinesc condiie; Afisari; Prelucrarea a n numere Citesc n; Initializari; Parcurg numerele de la 1 la n cu variabila i Citesc a; Prelucrez a; Sfarsit_parcurg Afisari; Prelucrarea cifrelor unui numar n Citesc n; Initializari; Cat timp n<>0 u<-ultima cifra a lui n (n% 10); Prelucrez ultima cifra (adica u); Elimin ultima cifra din n (n<-n/10); Sfarsit_cat timp; Afisari; Verificarea primalitatii unui numar n Citesc n; prim<-true; (Plec cu idee ca n este prim ); Daca n este egal cu 0 sau n egal cu 1 ((n==0)||(n==1) ) atunci prim<-false; (numarul nu este prim); Sfarsit_daca Parcurg numerele de la 2 la cu variabila i Daca n se imparte exact la i (n%i==0) atunci prim<-false; (numarul nu este prim); Sfarsit_daca Sfarsit_parcurg Daca prim==true atunci Afisez Numarul <<n<< este prim; Altfel Afisez Numarul <<n<< nu este prim; Sfarsit_daca Prelucrarea divizorilor ai unui numr Citesc n; Initializari; Parcurg numerele de la 1 la n cu variabila i Daca n se imparte exact la i (n%i==0) atunci Prelucrez i pentru ca este divizor; Sfarsit_daca Sfarsit_parcurg Afisari; 1

Observatie: Daca se doreste doar prelucrarea divizorilor proprii (fara 1 si n) atunci parcurgerea se face de la 2 la n-1. Prelucrarea divizorilor primi ai unui numr Citesc n; Initializari; i<-2; Cat timp n diferit de 1 executa Daca n se imparte exact la i (n%i==0) atunci Prelucrez i pentru ca este divizor prim; Cat timp n se imparte exact la i (n%i==0) executa Elimin pe i din divizorii lui n (n<-n/i); Sfarsit_cat_timp Sfarsit_daca Crestem pe i cu o unitate (i++); Sfarsit_cat_timp Afisari; Cel mai mare divizor comun a doua numere (algoritmul lui Euclid) Citesc a si b; repeta calculam r restul dintre a si b (r<-a%b); a<-b; b<-r; cat_timp r diferit de 0; Afisam a (utlimul rest diferit de 0); Cel mai mic multiplu comun a doua numere - Observatie: cmmmc(a,b)=(a*b)/cmmdc(a,b); Citesc a si b; x<-a; y<-b;(facem copii ale celor doua valori pentru ca la calcularea cmmdc valorile lor se vor pierde) repeta r<-x%y; x<-y; y<-r; cat_timp r diferit de 0; cmmdc<-x; cmmmc<-(a*b)/cmmdc; Afisam cmmmc; Generarea sirurilor recursive (Algoritmul lui Fibonnacci) Observatie: Sirul lui Fibonnacci este constituit astfel: se dau primii doi termeni 0 si 1 ai sirului; restul termenilor se calculeaza ca suma din ultimii doi termeni anteriori elementului. Sirul arata astfel: 0, 1, 1=0+1, 2=1+1, 3=1+2, 5=2+3, 8=3+5, 13=5+8, 21=8+13, 34=13+21, 55=21+34, Problema: Se citeste un numar n sa se afiseze primi n termeni ai sirului. a<-0; (primul termen al sirului) b<-1; (al doilea termen al sirului) afisam a si b; i<-2; (numarul de ordine al sirului) repeta c<-a+b (calculam termenul urmator); afisam c; a<-b; (pregatim pentru calculul urmatorului element) b<-c; i<-i+1 (crestem numarul de ordine cu o unitate); cat_timp i<=n; 2

Observatie: Metoda se aplica si pentru calculul altor siruri recursive difera doar modalitatea de calcul al termenului urmator (c<-a+b);

Variabile des utilizate:


Variabila suma 1. Se iniializeaz cu 0 (s<-0;) 2. La fiecare pas se puna in suma nr dorit (s<-s+nr;) Variabila contor 1. Se iniializeaz cu 0 (c<-0;) 2. La fiecare pas contorul creste cu o unitate (c<-c+1;) Variabila produs 1. Se iniializeaz cu 1 (p<-1;) 2. La fiecare pas se puna in produs nr dorit (p<-p*nr;) Variabila maxim 1. Se iniializeaz cu prima valoare din cele care doresc sa fac maximul sau cu o valoare foarte mica 2. La fiecare pas se testeaz daca nr curent este mai mare dect maximul iar daca da maximul devine nr respectiv Daca nr>max atunci max<-nr; Sfarsit_daca Variabila minim 1. Se iniializeaz cu prima valoare din cele care doresc sa fac minim sau cu o valoare foarte mare 2. La fiecare pas se testeaz daca nr curent este mai mic dect minimul iar daca da minimul devine nr respectiv Daca nr<min atunci min<-nr; Sfarsit_daca Variabila de verificare (aceast variabil verific dac toate numerele ndeplinesc o anumit condiie) 1. Se pleac cu ideea c toate numerele ndeplinesc condiia solicitat (verifc<-true;) 2. La fiecare pas se testeaz daca nu este ndeplinit condiia iar n acest caz verific devine fals; Daca nu conditie atunci verific<-false; Sfarsit_daca

Instructiuni de control
Liniare citesc n; cin>>n; afisez a; cout<<a=<<a; a<-3; a=3; Decizionale daca cond atunci instr; sfarsit_daca daca cond atunci instr; sfarsit_daca daca cond atunci instr1; altfel instr2; sfarsit_daca if(cond){ instr; } if(cond){ instr; } if(cond){ instr1; }else{ instr2; } Repetitive repeta instr; pana cand cond; cat timp cond executa instr; sfarsit_cat_timp parcurg numerele de la x al y cu variabila i instr; sfarsit_parcurg do{ instr; }while(cond); while (cond){ instr; } for(i=x;i<=y;i++){ instr; }

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