algoritm fundamentali

4
Algoritmi fundamentali 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 n 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 număr 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; 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ăr 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; 1

Upload: hrimiuc-robert

Post on 28-Nov-2015

14 views

Category:

Documents


0 download

DESCRIPTION

algoritm

TRANSCRIPT

Page 1: Algoritm fundamentali

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

Page 2: Algoritm fundamentali

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

Page 3: Algoritm fundamentali

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