Documente Academic
Documente Profesional
Documente Cultură
Algoritmi elementari
Contents
Expresii .......................................................................................................................................................... 2
1. Sa se calculeze expresia: ............................................................................................................... 2
Test de patrat perfect ................................................................................................................................... 3
1. Test patrat perfect ........................................................................................................................ 3
Probleme de minim maxim ........................................................................................................................... 3
CMMDC ......................................................................................................................................................... 3
1. CMMDC si CMMMC-scaderi repetate........................................................................................... 3
2. Euclid ............................................................................................................................................. 4
3. Scaderi repetate ............................................................................................................................ 5
Factori primi .................................................................................................................................................. 5
1. Factori prim ................................................................................................................................... 5
2. Descompunerea in factori primi ................................................................................................... 5
Compunerea unui numar din cifrele sale...................................................................................................... 6
1. Se citesc cifre. Sa se afiseze numarul format din cifele citite ....................................................... 6
Generare de siruri ......................................................................................................................................... 6
1. Sa se scrie primii n termeni Fibonacci........................................................................................... 6
2. Sa se genereze sirul: 1+1*2+1*2*3+...+1*2*...*n......................................................................... 6
3. Test nr Fibonacci ........................................................................................................................... 7
4. Se citesc doua numere naturale a si b (ambele mai mari decat 1). Calculati si afisati cati
termeni din sirul lui Fibonacci se afla in intervalul [a,b]. Exemplu: In intervalul [20,40] sunt 2
termeni (21 si 34) .................................................................................................................................. 7
1. Sume de siruri ................................................................................................................................... 8
Afisari ............................................................................................................................................................ 8
Conversii intre baze de nuneratie ............................................................................................................... 10
1. Conversia din baza 10 în baza b din [2,10].................................................................................. 10
2. Formarea unui numar din cifrele sale (in baza 10 sau alta baza) ............................................... 10
Probleme diverse ........................................................................................................................................ 10
1. Sa se un program C++ care citeste masurile a doua unghiuri exprimate in grade si
minute. Programul afiseaza media celor doua unghiuri, ................................................................... 10
2
PrhP Prof. Mirela Irimia oct. 2017
Expresii
1. Sa se calculeze expresia:
e=a+b c>0
e=a*b c=0
e=a-b c>0
int main()
{
double a,b,c,e;
cout<<"dati pe a";cin>>a;
cout<<"dati pe b";cin>>b;
cout<<"dati pe c";cin>>c;
if(c>0)e=a+b;
else
if(c==0)e=a*b;
else e=a-b;
cout<<"e="<<e<<endl;}
3
PrhP Prof. Mirela Irimia oct. 2017
Sau:
citeste n
r=sqrt(n);
daca r*r==n scrie "Patrat perfect!\n"
altfel scrie "Nu e patrat perfect!\n"
cin >> n;
for(int i = 1; i <= n; ++i) {
cin >> nr;
if(mx1 < nr) {
mx2 = mx1;
mx1 = nr;
}
else {
if(mx2 < nr) {
mx2 = nr;
}
cout << mx1 << ' ' << mx2 << '\n';
CMMDC
1. CMMDC si CMMMC-scaderi repetate
#include<iostream.h>
#include<conio.h>
void main()
{ int a,b, cmmdc,cmmmc, ca, cb;
4
PrhP Prof. Mirela Irimia oct. 2017
cout<<"a=" ; cin>>a;
cout<<"b=" ; cin>>b;
ca=a; cb=b;
while (a!=b)
if(a>b)
a=a-b;
else
b=b-a;
cmmdc=a;
cout<<"cmmdc="<<cmmdc;
cout<<"cmmmc="<<(ca*cb)/cmmdc;
getch();
}//ok
2. Euclid
3. Scaderi repetate
Factori primi
1. Factori prim
#include<iostream.h>
#include<conio.h
void main()
{
int n, p, d;
cout<<"n=";cin>>n;
d=2;
while(n!=1)
{ p=0;
while(n%d==0)
{ p++;
n=n/d; }
if(p)
cout<<d<<"^"<<p<<endl;
d++;}
}
p=0;
while(n%d==0){
p=p+1;
n=n/d; }
if(p) cout<<d<<" la puterea "<<p<<endl;
d=d+1;}}
#include<iostream.h>
int n10,nq,c,p,q;
void main(){
n10=0;
cout<<"ptr iesire tastati un numar >=10"<<endl;
cout<<"q=";cin>>q;
cout<<"DATI CIFRA";cin>>c;
while((c>=0)&&(c<=9)){
n10=n10*q+c;
cout<<"DATI CIFRA";cin>>c; }
cout<<"nr baza 10 este:"<<n10;}
Generare de siruri
1. Sa se scrie primii n termeni Fibonacci
#include<iostream.h>
long unsigned n,i,f1,f2,f3;
void main()
{ clrscr();
cout<<"n="; cin>>n;
f1=1;
f2=1;
for(i=3;i<=n;i++)
{ f3=f1+f2;
f1=f2;
f2=f3;}
cout<<"fib="<<f3;}
cout<<"dati pe n ";cin>>n;
for(i=1;i<=n;i++)
{
p=p*i;s=s+p;
}
cout<<"suma este "<<s;
endl; }
3. Test nr Fibonacci
#include <iostream>
using namespace std;
int f1,f2,f3,f4,d,nr;
int main()
{
cout << "dati nr:" ;cin>>nr;
f1=1;f2=2;
do{
f3=f1+f2;
f1=f2;
f2=f3;
if(f3==nr)d=f3;
}while(f3<=nr);
cout<<f3<<endl;
if(d==nr)cout<<"fibo";else cout<<"nu e fibo";
return 0;}
4. Se citesc doua numere naturale a si b (ambele mai mari decat 1). Calculati si afisati cati
termeni din sirul lui Fibonacci se afla in intervalul [a,b].
Exemplu:
In intervalul [20,40] sunt 2 termeni (21 si 34)
#include <iostream>
using namespace std;
int main()
{
int a,b,k=0,x,y,z;
cin>>a>>b;
x=y=1;
while(x+y<=b)
{
z=x+y;
8
PrhP Prof. Mirela Irimia oct. 2017
if(z>=a) k++;
x=y;
y=z;
}
cout<<k;
return 0;}
1. Sume de siruri
1.
2.
Afisari
1.
2.
9
PrhP Prof. Mirela Irimia oct. 2017
int main()
{int n;
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n-i;j++) cout<<' ';
for(int j=1;j<=2*i-1;j++) cout<<i;
cout<<endl;
}
for(int i=n-1;i>=1;i--)
{
for(int j=1;j<=n-i;j++) cout<<' ';
for(int j=1;j<=2*i-1;j++) cout<<i;
cout<<endl;
}}
4. Se citeste un numar natural n cu cel mult 2 cifre. Afisati pe ecran o figura formata din
caracterul * ca in exemplul alaturat pentru n=5.
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n-i;j++) cout<<' ';
for(int j=1;j<=2*i-1;j++) cout<<'*';
10
PrhP Prof. Mirela Irimia oct. 2017
cout<<endl; }
#include <iostream.h>
int n,nr,i,c,p;
void main(){
clrscr();
cin>>n;
p=1;
for(i=1;i<=n-1;i++) p=p*10;
for(i=1; i<=n; i++) { cin>>c;
nr=nr+c*p;
p=p/10;}
cout<<n;
getch();}
Probleme diverse
1. Sa se un program C++ care citeste masurile a doua unghiuri exprimate in grade si minute.
Programul afiseaza media celor doua unghiuri, exprimata ca unghi, adica in grade, minute si
secunde.
Exemplul 1: 57 20
55 50
se va afisa : 56 35 0
Exemplul 2: 57 21
11
PrhP Prof. Mirela Irimia oct. 2017
55 50
se va afisa : 56 35 30
#include <iostream>
using namespace std;
int main()
{
int g1,m1,g2,m2,s;
cin>>g1>>m1;
cin>>g2>>m2;
s=g1*60+m1+g2*60+m2;
cout<<s/2/60<<" "<<s/2%60<<" ";
if(s%2==0) cout<<0;
else cout<<30;
return 0;}
while(n){
r=n%10;
if(r%2==0)n1=n1*10+r;
else{++r;n1=n1*10+r;}
n=n/10;
}
while(n1){
inv=inv*10+n1%10;
n1=n1/10;
}
cout<<"noul nr="<<inv;
return 0;
}
6. Se citeste un numar natural n si apoi n numere naturale nenule cu cel mult 5 cifre fiecare.
Afisati fractia ireductibila minima care se poate construi folosind numere dintre cele citite.
Exemplu: pentru n=5 si numerele 7 9 8 3 6 fractia este 1/3 (obtinuta din simplificarea
fractiei 3/9) .
#include <iostream>
using namespace std;
int main()
{
int n,x,min=100000,max=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x; //citesc numerele
if(x<min) min=x;//calculez minimul
if(x>max) max=x;//calculez maximul
}
int a=min, b=max;
while(b!=0) //calculex cmmdc(min,max)
{
int r=a%b; a=b; b=r;
}
min=min/a; max=max/a;//simplific
cout<<min<<"/"<<max;
return 0;
}
7. Se da un interval [a,b]. Afisati cate dintre numerele din intervalul [a,b] au proprietatea ca atat
ele cat si rasturnatul lor sunt patrate perfecte (ex: 144 si 441). Se cere un algoritm eficient
14
PrhP Prof. Mirela Irimia oct. 2017
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a,b, x, r,k=0;
cin>>a>>b;
for(int i=sqrt(a);i<=sqrt(b);i++)
{
x=i*i; r=0;
while(x>0)
{
r=r*10+x%10;
x=x/10;
}
if(sqrt(r)==floor(sqrt(r))) k++;
}
cout<<k;
return 0;}
3. Se citesc dintr-un fisier: pe prima linie un numar natural iar pe a doua linie 2*n cifre de la
1 la 5. Sa se calculeze suma produsului intre cifrele din prima jumatate si cele de paritate
diferita din a doua jumatate.
N
1245001243
S=1*0+1*2+1*4+ 2*1+2*3
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("sum.in");
int k0,k1,k2,k3,k4,k5,s1,s2,s,x,n,i;
int main()
{f>>n;
for(i=1;i<=n;i++){
f>>x;
if(x==0)k0++;
15
PrhP Prof. Mirela Irimia oct. 2017
if(x==1)k1++;
if(x==2)k2++;
if(x==3)k3++;
if(x==4)k4++;
if(x==5)k5++;}
cout<<"k0="<<k0<<endl;
cout<<"k1="<<k1<<endl;
cout<<"k2="<<k2<<endl;
cout<<"k3="<<k3<<endl;
cout<<"k4="<<k4<<endl;
cout<<"k5="<<k5<<endl;
for(i=1;i<=n;i++){
f>>x;cout<<x<<" ";
if(x%2==0)s2=s2+x;
if(x%2==1)s1=s1+x;
}
s=s2*(k1*1+k3*3+k5*5)+s1*(k2*2+k4*4);
cout<<s;
return 0;}
8. Se citesc masurile a doua unghiuri exprimate in grade si minute. La primul unghi aduna x1
minute, iar cel de al doilea se aduna x2 minute.
Sa se afiseze masura unghiului mai mare astfel obtinut si indicativul unghiului.
Date de intrare: Se citesc de la tastatura g1 m1 x1, apoi g2 m2 x2 reprezentand numarul de
grade, minute si numarul de minute adunate pentru fiecare unghi.
Date de iesire: Se va afisa h, m si ind reprezentand numarul de grade, minute si indicativul
unghiului mai mare.
Exemplu: 57 20 28
76 50 47
se va afisa : 77 37 2
int main()
{
int g1, m1, x1, g2, m2, x2, a, b;
cin>>g1>>m1>>x1;
cin>>g2>>m2>>x2;
a=g1*60+m1+x1;
b=g2*60+m2+x2;
if(a>b) cout<<a/60<<" "<<a%60<<" "<<1;
else cout<<b/60<<" "<<b%60<<" "<<2;
return 0;
16
PrhP Prof. Mirela Irimia oct. 2017
9. Adrian este trimis de mama sa la cumparaturi si are de platit o suma de S lei. El are in
buzunar bancnote cu valorile a, b si c. Afisati cate bancnote de fiecare fel foloseste astfel
incat sa dea vanzatorului cat mai putine bancnote pentru a plati integral suma S. Se
presupune ca Adrian are suficiente bancnote de fiecare fel. Datele de intrare asigura ca
suma poate fi platita. Rezultatele se vor afisa ca in exemple, adica nu se vor afisa tipurile de
bancnote care nu sunt folosite.
Exemple:
S=75, a=50, b=30, c=5 => se va afisa 1*50 5*5 (va plati 1 de 50 si 5 de 5)
S=170, a =100, b=20, c=10 => se va afisa 1*100 3*20 1*10 (va plati 1 de 100, 3 de 20 si 1 de
10)
#include <iostream>
using namespace std;
int main()
{
int S,a,b,c,x,y,z;
cin>>S>>a>>b>>c;
x=S/a;
S=S%a;
y=S/b;
S=S%b;
z=S/c;
if(x!=0) cout<<x<<"*"<<a<<" ";
if(y!=0) cout<<y<<"*"<<b<<" ";
if(z!=0) cout<<z<<"*"<<c<<" ";
return 0;
}
2. Scrieti in pseudocod un program care rezolva ecuatia de gradul II, ax2+bx+c=0, unde a,b si c
sunt numere intregi citite de la tastatura.
D.I: a, b,c
D.Ie: x1, x2
citeste a, b, c
daca a != 0
D=b*b-4*a*c
daca D > 0 atunci
x1 = ( -b + SQRT ( D ) ) / ( 2 * a )
x2 = ( -b - SQRT ( D ) / ( 2 * a )
scrie x1, x2
altfel
daca D = 0 atunci
x1 = ( -b ) / ( 2 * a )
x2 = x1
scrie x1, x2
altfel
scrie " Ecuatia nu are solutii reale "
3 la 2013
3la 1 are ultima cifra=3
3la 2 are ultima cifra= 9
3la 3 ultima cifra=7
3 la 4=1
3 la 5=9
la a 2-a=9
la a 3-a=3
la a 4-a=1
la a 5-a=7
deci se repeta din 4 in 4
5/4=1rest1
7 la 1 are ultima cifra=7
Linkuri utile
• http://info64.ro/Instructiuni/#16
• https://sites.google.com/site/eildegez/home/ix/lectia-15
• http://info.mcip.ro/?cap=Algoritmi%20elementari
• http://tys.ro/programare/cpp/struct_cont.html
• http://info.mcip.ro/?cap=Elemente%20de%20baza%20C