Sunteți pe pagina 1din 6

Algoritmi elementari

1. Algoritmul de interschimbare a două valori


#include <iostream> #include <iostream>
using namespace std; using namespace std;
int main() int main()
{ {
int a, b, aux; int a, b;
cout<<"a="; cin>>a; cout<<"a="; cin>>a;
cout<<"b="; cin>>b; cout<<"b="; cin>>b;
aux=a; a=a+b;
a=b; b=a-b;
b=aux; a=a-b;
cout<<"a="<<a<<endl; cout<<"a="<<a<<endl;
cout<<"b="<<b; cout<<"b="<<b;
return 0; return 0;
} }

2. Algoritmul de determinare a minimului / maximului a n valori


#include <iostream> #include <iostream>
using namespace std; using namespace std;
int main() int main()
{ {
int n, i, x, min; int n, i, x, max;
cout<<"n="; cin>>n; cout<<"n="; cin>>n;
cout<<"x="; cin>>x; cout<<"x="; cin>>x;
min=x; max=x;
for(i=2;i<=n;i++) for(i=2;i<=n;i++)
{ {
cout<<"x="; cout<<"x=";
cin>>x; cin>>x;
if(x<min) if(x>max)
min=x; max=x;
} }
cout<<"min="<<min; cout<<"max="<<max;
return 0; return 0;
} }
3. Algoritmul de prelucrare a cifrelor unui număr
a. generarea numărului din cifre citite
#include <iostream>
using namespace std;
int main()
{
int n=0, c;
do{
cout<<"c=";
cin>>c;
if(c>=0 && c<=9)
n=n*10+c;
}while(c>=0 && c<=9);
cout<<"n="<<n;
return 0;
}
b. generarea inversului
#include <iostream>
using namespace std;
int main()
{
int n, inv=0, c;
cout<<"n=";
cin>>n;
while(n) //cat timp n are cifre
{
c=n%10; //extragerea cifrei unitatilor
inv=inv*10+c; //generarea inv din cifrele c extrase
//din n
n=n/10; //eliminarea ultimei cifre din n
}
cout<<"inv="<<inv;
return 0;
}
c. verificarea proprietății de palindrom
#include <iostream>
//palindrom = numarul care este egal cu inversul sau
using namespace std;
int main()
{
int n, inv=0, c, cn;
cout<<"n=";
cin>>n;
cn=n; //cn este copia lui n
while(n) //cat timp n are cifre
{
c=n%10;
inv=inv*10+c; //generarea inv din cifrele c extrase
//din n
n=n/10; //eliminarea ultimei cifre din n
}
//n este egal cu 0
if(inv==cn)
cout<<cn<<" este palindrom";
else
cout<<cn<<" nu este palindrom";
return 0;
}
d. generarea unui nou număr din cifrele numărului inițial care îndeplinesc o
anumită condiție, în ordinea în care acestea apar în număr inițial
#include <iostream>
using namespace std;
int main()
{
int n, m=0, p=1, c;
cout<<"n=";
cin>>n;
while(n)//cat timp n are cifre
{
c=n%10;
if(c%2==1)
{
m=m+c*p; //generarea lui m din cifrele impare
//ale lui n, IN ORDINEA IN CARE
//APAREAU IN n
p=p*10;
}
n=n/10;
}
cout<<"m="<<m;
return 0;
}
e. suma cifrelor unui număr
#include <iostream>
using namespace std;
int main()
{
int n, S=0, c; //P=1; ct=0;
cout<<"n=";
cin>>n;
while(n) //cat timp n are cifre
{
c=n%10;
//generarea noii sume prin adaugarea cifrei c
//curente la vechea suma
S=S+c; //P=P*c; ct=ct+1;
n=n/10; //eliminarea ultimei cifre din n
}
cout<<"S="<<S;
return 0;
}
f. cifra de control (se obține prin adunarea cifrelor unui număr și apoi adunarea
cifrelor sumei astfel obținută până când rezultatul este o cifră).
Ex: 1998 – 9 (deoarece (1+9+9+8=27, 2+7=9)
#include <iostream>
using namespace std;
int main()
{
int n, S, c;
cout<<"n=";
cin>>n;
do{
S=0;
while(n)
{
c=n%10;
S=S+c;
n=n/10;
}
n=S;
}while(n>9);
cout<<"cifra de control este: "<<S;
return 0;
}
 Algoritmul care generează divizorii unui număr.
#include <iostream>
using namespace std;
int main()
{
int n, d;
cout << "n=";
cin>>n;
cout<<1<<" ";
for(d=2;d<=n/2;d++)
if(n%d==0)
cout<<d<<" ";
cout<<n;
return 0;
}
a. verificarea proprietății de număr perfect (număr perfect = numărul care este egal
cu suma divizorilor săi proprii + 1)
#include <iostream>
using namespace std;
int main()
{
int n, d, S=0;
cout << "n=";
cin>>n;
for(d=2;d<=n/2;d++)
if(n%d==0)
S=S+d;
if(n==S+1)
cout<<"numarul este perfect";
else
cout<<"numarul nu este perfect";
return 0;
}
 Algoritmul care verifică dacă un număr este prim.
#include <iostream>
using namespace std;
int main()
{
int n, d, ok=1;
/*ok=variabila semafor,
ia doua valori:1 daca este indeplinita conditia,
respectv 0 altfel*/
cout << "n=";
cin>>n;
for(d=2;d<=n/2;d++)
if(n%d==0)
ok=0;
if(ok==1 && n!=1)
cout<<"Numar prim";
else
if(ok==0)
cout<<"Numarul nu este prim";
else
if(n==1)
cout<<"1 nu este nici prim, nici compus";
return 0;
}
 Generarea cmmdc a două numere
Varianta 1 Varianta 2
(Euclid cu scăderi) (Euclid cu împărțiri repetate)
#include <iostream> #include <iostream>
using namespace std; using namespace std;
int main() int main()
{ {
int x, y; int x, y, r;
cout<<"x="; cin>>x; cout<<"x="; cin>>x;
cout<<"y="; cin>>y; cout<<"y="; cin>>y;
while(x!=y) while(y!=0)
if(x>y) {
x=x-y; r=x%y;
else x=y;
y=y-x; y=r;
cout<<"cmmdc="<<x; }
return 0; cout<<"cmmdc="<<x;
} return 0;
}

Pentru algoritmii care urmează, se va determina cmmdc cu una dintre cele două variante, la
alegerea elevului. Aici, am ales prima variantă.
a. generarea cmmmc a două numere (cmmmc(a,b)=a*b/cmmdc(a,b))
#include <iostream>
using namespace std;
int main()
{
int x, y, P;
cout<<"x="; cin>>x;
cout<<"y="; cin>>y;
P=x*y;
while(x!=y)
if(x>y)
x=x-y;
else
y=y-x;
cout<<"cmmmc="<<P/x;
return 0;
}
b. simplificarea fracțiilor
#include <iostream>
using namespace std;
int main()
{
int x, y, cx, cy;
cout<<"numaratorul="; cin>>x;
cx=x;
cout<<"numitorul="; cin>>y;
cy=y;
while(x!=y)
if(x>y)
x=x-y;
else
y=y-x;
cout<<"fractia simplificata este "<<cx/x<<"/"<<cy/y;
return 0;
}
c. numere prime între ele
#include <iostream>
using namespace std;
int main()
{
int x, y;
cout<<"x="; cin>>x;
cout<<"y="; cin>>y;
while(x!=y)
if(x>y)
x=x-y;
else
y=y-x;
if(x==1)
cout<<"numerele sunt prime intre ele";
else
cout<<"numerele nu sunt prime intre ele";
return 0;
}

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