Sunteți pe pagina 1din 18

1

PrhP Prof. Mirela Irimia oct. 2017

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

2. Se citeşte un număr întreg n. Să se realizeze un algoritm care să afiseze toate numerele


perfecte mai mici sau egale cu n......................................................................................................... 11
3. Sa se calculeze si sa se afiseze valoarea distantei intre doua puncte ......................................... 11
4. Se dau doua numere naturale a si b. Sa se introduca unul dintre caracterele: +, -, *, iar, in
fuctie de caracterul introdus, sa se efectueze operatia corespunzatoare. ........................................ 12
5. Se dă un număr natural. Să se modifice acest număr, micșorând cu o unitate fiecare cifră
impară. ................................................................................................................................................ 12
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. .......... 13
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 ................................................................................... 13
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. .................................................................................................................................... 14
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. ................................................................................ 15
9. Adrian este trimis de mama sa la cumparaturi si are de platit o suma de S lei .......................... 16
Ecuatia de grad 1, ecuatia de grad 2 ........................................................................................................... 16
Ultima cifra a unei puteri ............................................................................................................................ 17
Linkuri utile ................................................................................................................................................. 18

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

Test de patrat perfect


1. Test patrat perfect
#include<cmath>
void main(){
int n;
cout<<"n="; cin>>n;
if (sqrt(n)==(int)(sqrt(n)))
cout<<n<<" este patrat perfect "<<endl;
else
cout<<n<<" nu este patrat perfect "<<endl;}

Sau:
citeste n
r=sqrt(n);
daca r*r==n scrie "Patrat perfect!\n"
altfel scrie "Nu e patrat perfect!\n"

Probleme de minim maxim


1. Se citeste un sir de numere intregi. Sa se afiseze primele doua maxime.

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

void main () void main ()


{ {
int a,b,rest; int a,b,rest;
cin>>a>>b; // aici citim a si b cin>>a>>b; // aici citim a si b
rest=a%b; do
while (rest!=0) { rest=a%b;
{ a=b; b=rest; a=b;
rest=a%b; } b=rest;
cout << b; } }
while (rest!=0)
cout << endl<<a; }
5
PrhP Prof. Mirela Irimia oct. 2017

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++;}
}

2. Descompunerea in factori primi


void main(){
int n,d=2,p;
cout<<"n=";cin>>n;
while(n>1){
6
PrhP Prof. Mirela Irimia oct. 2017

p=0;
while(n%d==0){
p=p+1;
n=n/d; }
if(p) cout<<d<<" la puterea "<<p<<endl;
d=d+1;}}

Compunerea unui numar din cifrele sale


1. Se citesc cifre. Sa se afiseze numarul format din cifele citite

#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;}

2. Sa se genereze sirul: 1+1*2+1*2*3+...+1*2*...*n


#include<iostream.h>
main()//sa se calculeze 1+1*2+1*2*3+...+1*2*...*n
{int n,i,s=0,p=1;
7
PrhP Prof. Mirela Irimia oct. 2017

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

3. Se citeste un numar natural n cu cel mult 2 cifre. Afisati pe ecran o figura


sub forma de romb formata cu numerele naturale de la 1 la n, ca in exemplul
alaturat pentru n=6.

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; }

Conversii intre baze de nuneratie


1. Conversia din baza 10 în baza b din [2,10]
int m, b,nr,p,r;
int main()
{
cout << "nr=";cin>>nr;
cout << "b=";cin>>b;
m=0;p=1;
while(nr!=0){
r=nr%b;
m=m+r*p;
p=p*10;
nr=nr/b; }
cout<<m;
return 0;}
2. Formarea unui numar din cifrele sale (in baza 10 sau alta baza)

#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;}

2. Se citeşte un număr întreg n. Să se realizeze un algoritm care să afiseze toate numerele


perfecte mai mici sau egale cu n. Spunem că un număr este perfect dacă este egal
cusuma divizorilor săi, fară el însuşi.
De exemplu dacă se citeşte pentru n valoarea 30 atunci algoritmul va afişa 6 ,
2 8 , deoarece aceste două numere sunt singurele pentru care putem scrie: 6 = 1 + 2 + 3 şi 28 = 1 + 2
+ 4 + 7 + 14.
n, i, d, s întreg
citeşte
n
pentru i← 1, n executa
| s ← 0 // verificăm fiecare i dacă este perfect
| pentru d ← 1, i/2 execută
| dacă i % d = 0 atunci// dacă d este divizor
| s ← s + d // îl adaug la sumă
|▄
| dacă s = i atunci //dacă suma = i atunci i este perfect
| scrie i
3. Sa se calculeze si sa se afiseze valoarea distantei intre doua puncte, dandu-se coordonatele
acestora: A(xa, ya) si B(xb, yb).
#include<iostream.h>
#include<math.h>
void main(void)
{
int x1,y1,x2,y2;
float d;
cout<<"dati xa= ";cin>>x1;
12
PrhP Prof. Mirela Irimia oct. 2017

cout<<"dati ya= ";cin>>y1;


cout<<"dati xb= ";cin>>x2;
cout<<"dati yb= ";cin>>y2;
d=sqrt( (xa-xb)*(xa-xb) + (ya-yb)*(ya-yb) );
cout<<"Distanta intre "<<A<<"si"<<B<<" este = "<<d;
}

4. Se dau doua numere naturale a si b. Sa se introduca unul dintre caracterele: +, -, *, iar, in


fuctie de caracterul introdus, sa se efectueze operatia corespunzatoare. In cazul in care
caracterul introdus nu este unul din cele trei mentionate, sa se afiseze mesajul "Operatie
necunoscuta".
#include <iostream>
using namespace std;
int main()
{
int a,b;
char c;
cout<<"Introduceti primul numar: a=";
cin>>a;
cout<<"Introduceti al doilea numar: b=";
cin>>b;
cout<<"Introduceti caracterul: c=";
cin>>c;
switch (c)
{
case '+': cout<<a+b;break;
case '-': cout<<a-b;break;
case '*': cout<<a*b;break;
default: cout<<"Operatie necunoscuta";
}
}
5. Se dă un număr natural. Să se modifice acest număr, micșorând cu o unitate fiecare cifră
impară. Dacă numărul dat este 275rezultatul va fi 264. Rez
#include <iostream>
//se citeste un numar. Sa se incrementeze fiecare cifra impara a acestuia
using namespace std;
int inv,n,n1,r,p,c;
int main()
{
cout << "n=";cin>>n;
c=n;p=1;
13
PrhP Prof. Mirela Irimia oct. 2017

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

din punct de vederea al timpului de executie.


Exemplu: pentru intervalul [100,1000] sunt 10 astfel de numere.

#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;
}

Ecuatia de grad 1, ecuatia de grad 2

1. Scrieti in pseudocod un program care rezolva ecuatia de gradul I,


ax+b=0, unde a si b sunt numere intregi citite de la tastatura.
a*x+b=0 pentru coeficienţii a,b reali daţi .
citeste a,b
daca a!=0 atunci
{
x= (-b/a)
scrie x
}
altfel daca b!=0
17
PrhP Prof. Mirela Irimia oct. 2017

atunci scrie 'nu exista solutii'


altfel scrie 'o infinitate de solutii'
sf.daca
sf.daca

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 "

Ultima cifra a unei puteri


Exemplu:

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

deci, din 4 in patru se repeta ultima cifra. 2013/4=503 rest 1


iei restul si ultima cifra este egala cu numarul(3) la puterea restului(1), deci 3la1 cu=3.
Un alt exempul ca sa te verifici este sa iei un numar la o putere mai mica si sa aplici regula.

7 la a-5a=16807 ultima cifra=7


7 la a1-a=7
18
PrhP Prof. Mirela Irimia oct. 2017

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

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