Sunteți pe pagina 1din 10

1.

Scrieți un subprogram care are int sumacif(int x)


parametrii de intrare un număr n { int s=0;
și un vector de n numere care să while(x)
returneze, prin alți 2 parametrii, { s=s+x%10;
care este cea mai mare sumă a x/=10; }
cifrelor întâlnită la aceste return s;
numere și câte dintre cele n }
numere respectă această void aparitii(int n, int v[], int &smax, int &nrap)
proprietate. Ex: pentru n=6 și { int i;
numere 777 991 99 678 781 786 smax=0;
se va returna 21 3. nrap=0;
for(i=0; i<n; i++)
if(sumacif(v[i])>smax)
smax=sumacif(v[i]);
for(i=0; i<n; i++)
if(sumacif(v[i])==smax)
nrap++;
}
Metoda 2 int sumacif(int x)
{
int s=0;
while(x)
{
s=s+x%10;
x/=10;
}
return s;
}
void aparitii(int n, int v[], int &smax, int &nrap)
{ int i;
smax=0;
nrap=0;
for(i=0; i<n; i++)
if(sumacif(v[i])>smax)
{smax=sumacif(v[i]);
nrap=1;
}
else
if(sumacif(v[i])==smax)
nrap++;
}
Programul complet – pt testarea subprogramului

#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("numere.in");
int v[100],n,smax,nrap;
void citire(int &n, int v[])
{
fin>>n;
for(int i=0; i<n; i++)
fin>>v[i];
}

int sumacif(int x)
{
int s=0;
while(x)
{
s=s+x%10;
x/=10;
}
return s;
}

void aparitii(int n, int v[], int &smax, int &nrap)


{
int i;
smax=0;
nrap=0;
for(i=0; i<n; i++)
if(sumacif(v[i])>smax)
{smax=sumacif(v[i]);
nrap=1;
}
else
if(sumacif(v[i])==smax)
nrap++;
}

int main()
{
citire(n,v);
aparitii(n,v,smax,nrap);
cout<<smax<<" "<<nrap;
return 0;
}
2. Scrieți un subprogram care are parametrii int sumdiv(int a, int b, int n)
de intrare trei numere întregi pozitive: a și b {
și n, care să returneze suma divizorilor int s=0,d;
numărului n, din intervalul determinat de a și if(a>b)
b. Ex: Pentru n=64, si a=10, b=50, se swap(a,b);
returnează 48 =16 + 32 for(d=1; d<=n; d++)
if (n%d==0 && d>=a && d<=b)
s=s+d;
return s;
}

3.. int pozcifmin(int n)


Să se determine și să se returneze – printr- { int k=0,mini=10,pozmin;
un subprogram - poziția celei mai mici while(n!=0)
cifre a unui număr n, primit ca parametru. { k++;
Poziția 1 se consideră a fi cea a cifrei if(n%10<mini)
unităților. Dacă cea mai mică cifră apare {mini=n%10;
pe mai multe poziții, returnați poziția mai pozmin=k;
mică. }
Ex: Pentru numărul 789554334 se va n=n/10;
returna 2. }
return pozmin;
}

4. Scrieți un subprogram care are int sumacif(int x)


parametrii de intrare un număr n și un { int s=0;
vector de n numere și care determină while(x)
suma tuturor cifrelor, a tuturor numerelor { s=s+x%10;
pare din șir. Ex Pentru n=4, si numerele 1, x/=10;
12, 123, 1234 se returnează }
13=1+2+1+2+3+4 return s;
}

int scifnrpare(int n, int v[])


{
int i;
int s=0;
for(i=0; i<n; i++)
if(v[i]%2==0)
s=s+sumacif(v[i]);
return s;
}
5. Scrieți un subprogram care are parametrii int ogl(int x)
de intrare un număr n și un vector de n { int inv=0;
numere care să returneze numărul care are while(x)
cea mai mică valoare a oglinditului. Ex: { inv=inv*10+x%10;
pentru n=6 și numere 44 121 187 781 654 x/=10; }
31 se va returna 31. return inv;
}
int nroglmin(int n, int v[])
{ int i,y;
int mini=ogl(v[0]);
for(i=1; i<n; i++)
if(ogl(v[i])<mini)
{mini=ogl(v[i]);
y=v[i];
}
return y;
}
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("numere.in");
int v[100],n;
void citire(int &n, int v[])
{
fin>>n;
for(int i=0; i<n; i++)
fin>>v[i];
}
int ogl(int x)
{ int inv=0;
while(x)
{ inv=inv*10+x%10;
x/=10; }
return inv;
}
int nroglmin(int n, int v[])
{ int i,y;
int mini=ogl(v[0]);
for(i=1; i<n; i++)
if(ogl(v[i])<mini)
{mini=ogl(v[i]);
y=v[i];
}
return y;
}
int main()
{ citire(n,v);
cout<<nroglmin(n,v);
return 0;}
6. Să se determine și să se returneze, printr- int divmin(int n)
un subprogram, dintre divizorii proprii unui {
număr n, primit ca parametru, divizorul care int ucmax=0, dmax,d;
are cea mai mare cifră a unităților. Dacă mai for(d=2; d<=n/2; d++)
mulți divizori au o astfel de proprietate, se if(n%d==0)
returnează cel mai mare dintre ei. Ex: Pentru if(d%10>=ucmax)
numărul 171, care are divizorii 3 9 19 57 se {
va returna 19. dmax=d;
ucmax=d%10;
}
return dmax;
}

7. Scrieți un subprogram care are parametrii de intrare void aparitii(int n, int v[], int &cmax, int &nrap)
un număr n și un vector de n numere și care să {
determine și să returneze prin alți doi parametri, cea int i;
mai mare cifră a unităților pe care o au aceste cmax=0;
numere și câte dintre cele n numere o au ca cifră a nrap=0;
unităților. Ex: pentru n=6 și numere 8 18 187 78 654 6 for(i=0; i<n; i++)
se va returna 8 3. if(v[i]%10>cmax)
{cmax=v[i]%10;
nrap=1;
}
else
if(v[i]%10==cmax)
nrap++;
}

8. Scrieți un subprogram care să determine și să se int divmin(int n)


returneze, dintre divizorii proprii unui număr n, primit {
ca parametru, divizorul care are cea mai mică cifră a int ucmin=10, dmin=0,d;
unităților. Dacă mai mulți divizori au o astfel de for(d=n/2; d>=2; d--)
proprietate, se returnează cel mai mic dintre ei. Ex: if(n%d==0)
Pentru numărul 847, care are divizorii 7 11 77 121 if(d%10<=ucmin)
se va returna 11. {
dmin=d;
ucmin=d%10;
}
return dmin;
}
9. Scrieți un subprogram care să determine și să se int prim(int x)
returneze, dintre divizorii proprii unui număr n, {
primit ca parametru, divizorii primi însumați. Ex. int kd=0;
Pentru n=1260 se returnează 17=2+3+5+7 for(int d=2;d<=x/2;d++)
if(x%d==0)kd++;
if(kd==0 && x>1)
return 1;
else return 0;
}
int prim2(int x)
{
if(x<2)return 0;
if(x==2) return 1;
if(x%2==0) return 0;
int d=3;
while(d*d<=x)
if(x%d==0)
return 0;
else d=d+2;
return 1;
}
int sdiv(int n)
{
int s=0;
for(int d=2; d<=n/2; d++)
if(n%d==0 && prim(d))
s=s+d;
return s;
}

10. Scrieți un subprogram care să int pozcifmax(long long int n)


returneze poziția celei mai mari cifre a { int k=0,maxi=0,pozmax;
unui număr n, primit ca parametru. Poziția while(n!=0)
1 se consideră a fi cea a cifrei unităților. { k++;
Dacă cea mai mare cifră apare pe mai if(n%10>maxi)
multe poziții, returnați poziția mai mică. {maxi=n%10;
Ex: Pentru numărul 12345434543 se va pozmax=k;
returna 3. }
n=n/10;
}
return pozmax;
}
11. Scrieți un subprogram care să determine int ogl(int x)
și să se returneze, dintre divizorii proprii unui { int inv=0;
număr n, primit ca parametru, divizorii while(x){
oglindiți însumați. Ex. Pentru n=64 se inv=inv*10+x%10;
returnează 145=1+2+4+8+61+23+46 x/=10;
}
return inv;
}

int sdiv(int n)
{ int s=0;
for(int d=1; d<=n; d++)
if(n%d==0)
s=s+ogl(d);
return s;
}

12. Scrieți un subprogram care are parametrii de intrare două numere întregi pozitive: a și b care să creeze și să
returneze un număr prin lipirea lui b la sfârșitul lui a. Ex: pentru a=123 și b=345 se va returna valoarea 123345

13. Scrieți un subprogram care are parametrii de int ogl(int x)


intrare un număr n și un vector de n numere. Să se { int inv=0;
returneze numărul care are cea mai mare valoare a while(x)
oglinditului. Ex: pentru n=6 și numere 777 991 99 678 { inv=inv*10+x%10;
781 786 se va returna 678. x/=10; }
return inv;
}
int nroglmin(int n, int v[])
{ int i,y;
int maxi=ogl(v[0]);
for(i=1; i<n; i++)
if(ogl(v[i])>maxi)
{maxi=ogl(v[i]);
y=v[i];
}
return y;}

14. Scrieți un subprogram care are parametru de intrare x, cu un număr par de cifre. Să se creeze și să se
returneze două numere a și b, obținute prin tăierea în două părți egale a lui x. Ex: pentru x=112233, a=112 și
b=233, iar pentru x=11100033, a=1110 și b=33.
15. Scrieți un subprogram care are parametrii de intrare trei numere întregi pozitive: a și b și n, care să
returneze suma multiplilor numărului n, din intervalul determinat de a și b Ex: Pentru n=64, si a=1000, b=5000,
se returnează 7168=1024+2048+4096

16. Să se determine și să se returneze, dintre divizorii int divmin(int n)


proprii unui număr n, primit ca parametru, divizorul {
care are cea mai mică cifră a unităților. Dacă mai mulți int ucmin=10, dmin,d;
divizori au o astfel de proprietate, se returnează cel for(d=2; d<=n/2; d++)
mai mare dintre ei. Ex: Pentru numărul 507, care are if(n%d==0)
divizorii 3 13 39 169 se va returna 13. if(d%10<=ucmin)
{
dmin=d;
ucmin=d%10;
}
return dmin;
}

17. Scrieți un subprogram care are parametrii de int ogl(int x)


intrare un număr n și un vector de n numere care să { int inv=0;
determine și să returneze prin alți doi parametri, cea while(x)
mai mică primă cifră pe care o au aceste numere și { inv=inv*10+x%10;
câte dintre cele n numere o au ca primă cifră. Se x/=10; }
consideră prima cifră ca fiind cea cu ordinul cel mai return inv;
mare. Ex: pentru n=6 și numere 2 12 123 32 654 6 se }
va returna 1 2.
void aparitii(int n, int v[], int &cmin, int &nrap)
{
int i;
cmin=10;
nrap=0;
for(i=0; i<n; i++)
if(ogl(v[i])%10<cmin)
{cmin=ogl(v[i])%10;
nrap=1;
}
else
if(ogl(v[i])%10==cmin)
nrap++;}
18. Să se determine și să se returneze, printr-un int pozcifmax(long long int n)
subprogram, poziția celei mai mari cifre a unui număr { int k=0,maxi=0,pozmax;
n, primit ca parametru. Poziția 1 se consideră a fi cea a while(n!=0)
cifrei unităților. Dacă cea mai mare cifră apare pe mai { k++;
multe poziții, returnați poziția mai mare. Ex: Pentru if(n%10>=maxi)
numărul 543477743 se va returna 5. {maxi=n%10;
pozmax=k;
}
n=n/10;
}
return pozmax;
}

19. Scrieți un subprogram care are parametrii de void aparitii(int n, int v[], int &cmax, int &nrap)
intrare un număr n și un vector de n numere care să {
determine și să returneze prin alți doi parametri, cea int i;
mai mică cifră a unităților pe care o au aceste numere cmin=10;
și câte dintre cele n numere o au ca cifră a unităților. nrap=0;
Ex: pentru n=6 și numere 2 12 123 32 654 6 se va for(i=0; i<n; i++)
returna 2 3. if(v[i]%10<cmin)
{cmin=v[i]%10;
nrap=1;
}
else
if(v[i]%10==cmin)
nrap++;
}

20. Scrieți un subprogram care să calculeze media cifrelor unui număr. Ex: Pentru numărul 44556677 se va
returna 5.5 .

21. Scrieți un subprogram care are parametrii de intrare un număr n și un vector de n numere care să returneze
elementul care este numărul palindrom cu cele mai multe cifre (dacă sunt mai multe numere ce îndeplinesc
condiția, se returnează doar primul). Un număr este palindrom dacă citit de la dreapta spre stânga și de la stânga
spre dreapta este același. Ex: pentru n=7 si șirul: 1221 , 25, 1410 , 6 , 505 , 22, 52125 se returnează 52125
22. Să se determine și să se returneze poziția celei mai mici cifre a unui număr n, primit ca parametru. Poziția 1 se
consideră a fi cea a cifrei unităților. Dacă cea mai mică cifră apare pe mai multe poziții, returnați poziția mai mare.
Ex: Pentru numărul 8843334 se va returna 4 .
23. Să se determine și să se returneze, dintre divizorii proprii unui număr n, primit ca parametru, divizorul care
are cea mai mare cifră a unităților. Dacă mai mulți divizori au o astfel de proprietate, se returnează cel mai mic
dintre ei. Ex: Pentru numărul 256, care are divizorii 2 4 8 16 32 64 128 se va returna 8.
24. Scrieți un subprogram care are parametrii de intrare un număr n și un vector de n numere care să determine
și să returneze, prin alți doi parametri, care este cea mai mică sumă a cifrelor întâlnită la aceste numere și câte
dintre cele n numere respectă această proprietate. Ex: pentru n=6 și numere 4 121 187 781 654 31 se va returna
4 3.

25. Scrieți un subprogram care are parametrii de intrare un număr n și un vector de n numere care să calculeze
suma numerelor din șir care au prima cifră egală cu ultima. Exemplu: pentru n=6 și șirul 52, 1251, 3, 169, 222,
458 se returnează 1476
26. Scrieți un subprogram care are parametrii de intrare un număr n și un vector de n numere care să determine
și să returneze prin alți doi parametri, cea mai mare primă cifră pe care o au aceste numere și câte dintre cele n
numere o au ca primă cifră. Se consideră prima cifră ca fiind cea cu ordinul cel mai mare. Ex: pentru n=6 și
numere 7 78 187 781 654 7 se va returna 7 4.

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