Upload
hrimiuc-robert
View
14
Download
0
Embed Size (px)
DESCRIPTION
algoritm
Citation preview
Algoritmi fundamentali Prelucrarea cifrelor unui numar nCitesc 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 nCitesc 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_dacaParcurg numerele de la 2 la √n cu variabila i
Daca n se imparte exact la i (n%i==0) atunciprim<-false; (numarul nu este prim);
Sfarsit_dacaSfarsit_parcurgDaca prim==true atunci
Afisez „Numarul ”<<n<<” este prim”;Altfel
Afisez „Numarul ”<<n<<” nu este prim”;Sfarsit_dacaPrelucrarea divizorilor ai unui numărCitesc n;Initializari;Parcurg numerele de la 1 la n cu variabila i
Daca n se imparte exact la i (n%i==0) atunciPrelucrez i pentru ca este divizor;
Sfarsit_dacaSfarsit_parcurgAfisari;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 numărCitesc n;Initializari;i<-2;Cat timp n diferit de 1 executa
Daca n se imparte exact la i (n%i==0) atunciPrelucrez 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_dacaCrestem pe i cu o unitate (i++);
Sfarsit_cat_timpAfisari;
1
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;Prelucrarea a n numere Citesc n;Initializari;Parcurg numerele de la 1 la n cu variabila i
Citesc a;Prelucrez a;
Sfarsit_parcurgAfisari;Prelucrarea numerelor pana intalnesc un numar x Initializari;Repetea
Citesc a;Prelucrez a;
Cat timp a<>x;Afisari;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 inițializează cu 0 (s<-0;)2. La fiecare pas se puna in suma nr dorit (s<-s+nr;)
Variabila contor1. Se inițializează cu 0 (c<-0;)2. La fiecare pas contorul creste cu o unitate (c<-c+1;)
Variabila produs1. Se inițializează cu 1 (p<-1;)2. La fiecare pas se puna in produs nr dorit (p<-p*nr;)
Variabila maxim1. Se inițializează cu prima valoare din cele care doresc sa fac maximul sau cu o valoare foarte mica2. La fiecare pas se testează daca nr curent este mai mare decât maximul iar daca da maximul devine nr
respectivDaca nr>max atunci
max<-nr;Sfarsit_daca
Variabila minim1. Se inițializează 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 decât minimul iar daca da minimul devine nr respectiv
Daca nr<min atuncimin<-nr;
Sfarsit_dacaVariabila de verificare (această variabilă verifică dacă toate numerele îndeplinesc o anumită condiţie)
1. Se pleacă cu ideea că toate numerele îndeplinesc condiția solicitată (verifc<-true;)2. La fiecare pas se testează daca nu este îndeplinită condiția iar în acest caz verifică devine fals;
Daca nu conditie atunciverific<-false;
Sfarsit_daca
Instructiuni de controlLiniare
citesc n; cin>>n;afisez a; cout<<”a=”<<a;a<-3; a=3;
Decizionale
daca cond atunciinstr;
sfarsit_daca
if(cond){ instr;}
daca cond atunciinstr;
sfarsit_daca
if(cond){ instr;}
daca cond atunciinstr1;
altfel instr2;sfarsit_daca
if(cond){ instr1;}else{ instr2;}
Repetitive
repeta instr;cat_timp cond;
do{ instr;}while(cond);
cat_timp cond executa instr;sfarsit_cat_timp
while (cond){ instr;}
parcurg numerele de la x al y cu variabila i instr;sfarsit_parcurg
for(i=x;i<=y;i++){ instr;}
3