Sunteți pe pagina 1din 11

Prelucrarea la nivel de cifra

if (n == 0) prelucrare_caz_special()
while (n > 0)
{
cif = n%10;
n = n / 10;
}
Ex:
1)Determinarea oglinditului

Int ogl, cif, n;


ogl = 0;
while (n > 0)
{
cif = n % 10;
ogl = ogl * 10 + cif;
n = n / 10;
}


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

for(d = 2; d <= n / 2; d++)


if (n % d==0)
s = s + d;
nrd++;

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

Formula lui Euler

Formula lui Euler


Fie N = p1m1 * p2m2 * ...* pkmk
Nrdiv = (m1 + 1)*(m2 + 1)*...*(mk + 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;
}

Sirul lui Fibonacci

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

1) Sa se afle radacina patrata a unui numar in C++.


{
int numar;
cin >> numar;
cout << sqrt(numar) << "\n";
cout << int(sqrt(numar));
return 0;
}
Conversie dintr-o baza de numere in alta

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

Se aplica pe 2 vectori ordonati in acelasi mod cu scopul de a obtine un al 3 lea


sir care sa contina toate elementele vectorilor initiali,ordonate in acelasi mod ca
acestia.
Ex:n=4
a=(15,29,64,101)<-i
m=6
b=(1,16,20,29.201,465)<-j
{int a,n,m,b,i,j,k;
i=0;
j=0;
k=0;
while(i<n && j<n)
if(a[i]<b[j])
{c[k]=a[i];k++;
i++;
}
Else
{c[k]=b[j];k++;
j++;
}
If(i<n)
While(i<n)
{C[k]=a[i];k++;
i++;
}
Else
If(j<b)
While(j<m)
{c[k]=b[j];k++;
j++
}
For(i=0;i<k;i++)
Cout<<c[i]<<’ ‘;

Algoritm de ordonare a elementelor unui vector

1)Prin selecția directa

Fiecare element al vectorului joaca rolul unui pivot fiind comparat cu


restul elementelor aflate dupa el in vecotr.Elementele pivot sunt parcurse cu un
contor i.
I=0,n-2,iar restul elementelor aflate dupa pivot sunt parcurse cu un contor j
luand valori de la i+1 pana la n-1 inclusiv.
Se compara v[i] cu v[j] so daca nu este respecatata ordinea ceruta cele 2
elemente se interschimba prin metoda paharelor
For(i=0;i<n;i++)//parcurgerea elementelor pivot
For(j=i+1;j<n;j++)//restul elementelor aflate dupa pivot
If(v[i]>v[j])//ordonarea crescatoare
{
Aux=v[i];
V[i]=v[j];
V[j]=aux;
)
//afisare v

2)Prin metoda bulelor
{
int n,a[51],i,j,aux,ok;
cout<<"n= ";
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
do
{
ok=1;
for(i=1;i<n;i++)
if(a[i]>a[i+1])
{
aux=a[i];
a[i]=a[i+1];
a[i+1]=aux;
ok=0;
}
}
while(!ok);
cout<<"Vectorul sortat crescator este: ";
for(i=1;i<=n;i++)
cout<<a[i]<<" ";
return 0;
}

Eliminarea si adaugarea unui element dintr-un vector

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

1) Sa se insereze intre oricare 2 nr. cu acelasi paritate media lor aritmetica.

{ 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]<<” ”;
}

Algoritm de permutari la stanga

1.Deplasati un vector ,cu k pozitii, circular spre stanga.


Metoda I
//citire n,v;
aux=v[1];
for(i=2;i<=n;i++)
v[i-1]=v[i];
v[n]=aux;
//afisare v[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

1)Stergerea tuturor elementelor negative


{
int v[100],n,i;
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
i=1;
while(i<=n)
if(v[i]<0)
{
for(j=i+1;j<=n;j++)
v[j-1]=v[j];
n--;
}
else
i++;
for(i=1;i<=n;i++)
cout<<v[i]<<" ";
cout<<endl;
}

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