Documente Academic
Documente Profesional
Documente Cultură
if (n == 0) prelucrare_caz_special()
while (n > 0)
{
cif = n%10;
n = n / 10;
}
Ex:
1)Determinarea oglinditului
Verificarea daca un numar este prim
if (n < 2) prim = 0;
else { prim = 1; //presupunem ca n este prim
for (d = 2; d * d <= n; d++)
if (n % d == 0) {prim = 0; break;}
if (prim == 1) //operatiile de efectuat cand n este prim
Ex:
1)
{
int n,i,prim;
cout<>n;
prim=1;
for(i=2;i<=sqrt(n);i++)
if(n%i==0) prim=0;
if(prim==1)
cout<<”numarul dat teste prim”;
else
cout<<”numarul dat nu este prim”;
}
CMMDC(a,b)
rest = a % b;
while (rest != 0)
{
a = b;
b = rest;
rest = a % b;
}
cmmdc = b;
Ex:
1) Se citesc de la tastatura doua numere a si b. Determinati si afisati pe ecran
cel mai mare divizor comun al acestora
int a,b;
int main()
{
cout<<"Introduceti numerele a si b: "<<endl;
cin>>a>>b;
while(a!=b)
{
if(a>b)
a=a-b;
else
b=b-a;
}
cout<<"Cmmdc = "<<a;
}
Determinarea divizorilor proprii ai unui numar dat
Ex:
1) Se citeşte de la tastatură un număr natural x. Să se verifice dacă x este număr
perfect. Un număr este perfect dacă este egal cu suma divizorilor săi, mai mici
decât el. Ex. 6=1+2+3; 28=1+2+4+7+14
{int n,i,s=1;
cout<>n;
for(i=2;i<=n/2;i++)
{
if(n%i==0)
s=s+i;
}
if(s==n)
cout<<”numarul dat teste perfect”;
else
cout<<”numarul dat nu este perfect”;
2) Următorul program afișează divizorii lui n în acest fel.
{
int n;
std :: cin >> n;
for(int d =1 ; d <= n ; d ++ )
if(n % d == 0)
std :: cout << d << " ";
return 0;
}
Descompunerea in factori primi
d = 2;
while (d * d <= n)
{
m = 0;
while ( n % d == 0)
{
m++;
n = n / d;
}
if (m>0)
d++;
}
Ex:
1) Programul de mai sus afișează pentru n descompunerea în factori primi
{
int n;
cin >> n;
int d = 2,
p;
while(n > 1)
{
p = 0;
while(n % d == 0)
{
++p;
n /= d;
2) Se citeste de la tastatura un numar n. Determinati si afisati pe ecran
descompunerea in factori primi ai acestuia.
{int n,d,p;
cout<<"Introduceti numarul n: ";
cin>>n;
d=2;
while(n>1)
{
p=0;
while(n%d==0)
{
p++;
n=n/d;
}
if(p>0)
cout<<d<<"^"<<p<<" ";
d=d+1;
}
}
d = 2;
nrdiv = 1;
while (d * d <= n)
{
m = 0;
while (n % d == 0)
{
m++;
n = n / d;
}
nrdiv = nrdiv * (m + 1);
d++;
}
if (n>1)
nrdiv = nrdiv * 2;
1) int phi(int n)
{
int r = n , d = 2;
while(n > 1)
{
if(n % d == 0)
{
r = r / d * (d - 1);
while(n % d == 0)
n /= d;
}
d ++;
if(d * d > n)
d = n;
}
return r;
}
r = r / d * (d - 1);
while(n % d == 0)
n /= d;
}
d ++;
if(d * d > n)
d = n;
}
return 0;
}
fin>>n;
f0 = f1 = 1;
while (f0+f1 <= n)
{
f2 = f0 + f1;
f0 = f1;
f1 = f2;
}
Prelucreaza f1
Ex:
1) Sa se afiseze primii n termeni ai sirului lui Fibonacci. Sirul are primii doi
termeni egali cu 1 si fiecare dintre urmatorii termeni este egal cu suma dintre
precedentul si ante-precedentul.
{
int n;
cout << "n = "; cin >> n;
int nr_2, nr_1, nr_0;
nr_0 = 1;
nr_1 = 1;
cout << nr_0 << "\n" << nr_1 << "\n";
for(int i = 3; i <= n; i++)
{
nr_2 = nr_1 + nr_0;
nr_0 = nr_1;
nr_1 = nr_2;
cout << nr_2 << "\n";
}
return 0; }
Cifra de control al lui n
if (n == 0)
cifc = 0;
else if (n % 9 == 0)
cifc = 9;
else
cifc = n % 9;
Ex:
1) Fie n un numar natural citit de la tasatura. Scrieti un program care calculeaza
si afiseaza cifra de control a lui n. Cifra de control se obtine calculcand suma
cifrelor numarului, apoi suma cifrelor sume si tot asa pana la obtinerea unei
singure cifre.
{
int v[1000],i,c=3,n;
cout<<"Dati n: ";cin>>n;
do
{
for (i=0;i<c;i++)
{
v[i]=n%10;
n=n/10;
}
n=0;
for (i=0;i<c;i++)
n+=v[i];
c--;
}
while (c!=1);
if (c==1) cout<<"Cifra de control: "<<n;
getch();
return 0;
}
Citirea pe rand a n numere
fin>>n;
for (i=1; i<=n; i++)
{
fin>>a;
}
Radacina patrata
cmax = 0;
cin >> n >> b;
while(n)
{
int cif= n % b;
if(cif > cmax)
cmax = cif;
n /= b;
}
Vectori ( tablouri unidimensionale)
Este o structura de date omogena ( toate elementele sunt de acelas tip) in
care valoarea unui element se identifica prin pozitia elementului (i) in cadrul
structurii. Exp. v=(-3, 8, 21, 34, 6)
V[1]=8
In C++ - pozitia incepe de la 0 ( vom fi intotdeauna cu 1 mai putin decat in
realitate).
Declare: tip_elem nume_vector[dim_max];
unde: - tip_elem - reprezinta tipul elementelor din vector - nume_vector -
reprezinta identificatorul variabilei de tip vector - dim_max - reprezinta
dimensiunea maxima a vectorului (nr maxim de elemente) Zona de memorie: dim_max*
sizeof(tip_elem)
Exp: int V[100]; // am declarat un vector v cu maxim 100 de elemente de tip intreg
100*sizeof(int)= 100*2 byte= 200byte float x[50];
Un vector poate fi initializat inca de la declarare Exp: int v[100]={0}; //
initial, toate elementele vectorului au valoarea egala cu o
int x[4]={ -5, 2, 16, 8} ==> x[0]=-5, x[1]=2, x[2]=16, X[3]=8
Citirea unui vector - se citeste numarul efectiv de elemente din vector,
notat de obicei cu n
n<=dim_max - deoarece avem de citit n elemente, putem folosi un for
cout<<"n="; cin>>n; for (i=0; i<n; i++)
{ cout<<"V["<< i+1<<"]=";
cin>>v[i];
V 17
MIT.d
>
Afisarea unui vector for(i=0;i<n; i++)
cout<<v[i]<<'';
Prelucrarea elementelor unui vector
for (i=0; i<n; i++)
< prelucreaza v[i]>
Exp: se citeste un vector v cu n elemente nr intregi. Determinati: a) suma
elementelor din vector; b) nr de elemente pozitive, negative si nule din vector.
int main() { int n, v[100], i, s, nrp, nrn, nrnule; cout<<"n="; cin>>n; for (i=0;
i<n; i++)
{ cout<< "v["<<i+1<<"]=";
cin>>v[i];
cout<<" vectorul este:" for (i=0;i<n;i++)
cout<< v[i]<< ''; s=0; for (i=0;i<n;i++)
S+=v[i]; cout<<endl<<"s="<<s; nrp=0; nrn=0; nrnule=0; for(i=0; i<n;i++)
if (v[i]>0)
nrp++;
else
if(v[i]==0)
nrnule++;
else
nrn++; cout<<endl<<nrp<<''<<nrn<<" "<<nrnule;
return 0;
Căutarea secvențiala(liniară)
n=6
v=(2,8,7,3,6,9)
x=6
x=100 Nu există
{int n,I,x,v[50];
cin>>n;
for(i=0;i<n;i++)
{cout<<”v[“<<i+1<<”]=”;
Cin>>v[i];
}
cin>>x;
for(i=0;i<n;i++)
if(v[i]==x)
{cout<<I;
Break;
}
If(i==n)
Cout<<”Nu exista”;
Return 0;
}
Algoritm de interclasare a 2 vectori
1)Eliminarea
{int N;
cin>>N;
int v[100];
int i;
for (i = 1; i <= N; i++)
cin>>v[i];
int pozitie;
cin>>pozitie;
for (i = pozitie; i <= N - 1; i++)
v[i] = v[i+1];
N = N - 1;
for (i = 1; i <= N; i++)
cout<<v[i]<<" ";
return 0;
}
2)Adaugarea
{int N;
cin>>N;
int v[100];
int i;
for (i = 1; i <= N; i++)
cin>>v[i];
int pozitie,valoare;
cin>>valoare>>pozitie;
for (i = N; i >= pozitie; i--)
v[i + 1] = v[i];
N = N + 1;
v[pozitie] = valoare;
for (i = 1; i <= N; i++)
cout<<v[i]<<" ";
return 0;
}
Inserare multipla
{ int v[100],n,i;
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
i=1;
while(i<n)
if(v[i]%2==v[i+1]%2)
{
for(j=n;j>=i+1;j--)
v[j+1]=v[j];
n++;
v[i+1]=(v[i]+v[i+2])/2;
i=i+2;
}
else
i++;
for(i=1;i<=n;i++)
cout<<v[i]<<" ";
cout<<endl;
}
Vectorul de frecventa
1.Se dau n numere numere naturale cu cel mult două cifre fiecare. Să se determine
acele numere care apar o singură dată.
{
int n,x,fr[100];
int main(){
cin>>n;
for(int i=0;i<n;i++)
{cin>>x;
fr[x]++; }
for(int i=0;i<100;i++)
if(fr[i]==1)
cout<<i<<" ";
return 0;
}
Vectorul constructie
1)Se considera un vector v care are n elemente numere intregi. Sa se formeze un nou
vector cu elementele pare si sa se afiseze
{
Int m,n,v[100],w[100],i;
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
m=0;
for(i=1;i<=n;i++)
if(v[i]%2==0)
{
m=m+1;
w[m]=v[i];
}
for(i=1;i<=m;i++)
cout<<w[i]<<” ”;
}
Metoda II
//citire n,v;
v[0]=v[1];
for(i=2;i<=n;i++)
v[i-1]=v[i];
v[n]=v[0];
Metoda III
//citire n,v;
for(i=1;i<=n;i++)
v[i-1]=v[i];
v[n]=v[0];
Stergerea multipla