Sunteți pe pagina 1din 4

ENUNT

Funcia prima determin i returneaz prima


cifr a unui numr natural n, cu cel mult 9
cifre, primit ca parametru. Se citesc de la
tastatur numere naturale nenule, cu cel
puin
dou cifre fiecare, pn cnd se citete unul
care are prima cifr egal cu ultima.
a) Scriei funcia prima definit mai sus.
b) Folosind apeluri utile ale subprogramului
prima determinai i afiai pe ecran cte
perechi de forma (x, y) de numere, citite
consecutiv, au ultima cifr a lui x egal cu
prima
cifr a lui y.
Exemplu: Dac se citesc, n aceast ordine,
numerele:
1422 237 1447 721 1271
atunci se va afia:
3
REZOLVARE
#include<iostream.h>
#include<fstream.h>
int prima(long n)
{
while (n>9)
n=n/10;
return n;
}
int main()
{
int nr=0; long x,y;
cin>>y;
while (prima(y) !=y%10)
{
x=y%10;
cin>>y;
if (prima(y)==x) nr++;
}
cout<<nr;
return 0;
}

Se citesc din fiser text numar.in n numere


naturale de ce mult 9 cifre. Sa se realizeze
un program care determina afiseaza pe
prima linie a fisierului text numar.out :
a.
Numarul format cu prima cifra
a fiecarui numar citit.
b.
Sa se afiseze pe a doua linie a
fisierului daca numarul astfel
format este palindorm, astfel
se va afisa mesajulnumarul nu
este palindrom
In cadrul programului, se vor defini doua
subprograme:
-functia cifra, care returneaza prima cifra
a valorii transmise prin intermediulunui
parametru valoare.
-functia verifica daca valoarea transmisa
prin intermediul parametrului este
palindrom.
ex:
numar.in
7
12 34 567 78 988 3333 189
numar.out
1357931
REZOLVARE:
#include<fstream>
#include<iostream>
using namespace std;
ifstream f("numar.in");
ofstream g("numar.out");
int invers;
int cifra(int nfp)
{
while(nfp!=0)
{
invers=invers*10+nfp%10;
nfp=nfp/10;
}
}
int verificare(int nfp)
{
if(nfp==invers)
g<<endl<<"palindrom";
else
{
g<<endl<<"nu este palindrom";
}
}
int main()
{
int n,pc,nfp=0,s, a[100];
f>>n;
for(int i=1; i<=n; i++)
f>>a[i];
for(int i=1; i<=n; i++)
{
s=a[i];
while(s>0)
{
pc=s%10;
s=s/10;
}
nfp=nfp*10+pc;
}
g<<nfp;
cifra(nfp);
verificare(nfp);
}

Se introduc de la tastatura numere intregi


pana cand se introduce un numar de doua ori
unul dupa altul. Sa se afiseze cate dintre
acestea sunt patrate perfecte.Ultimul numar
introdus in sir(cel egal cu cel precedent)nu va
fi numarat.
Exemplu: Daca numerele introduse sunt:
169,144,12,22,25,6,16,16 se va afisa
numarul 4
#include <iostream>
#include <math.h>
using namespace std;
int pp(int n)
{
if (sqrt(double(n)) *
sqrt(double(n)) == n)
return 1;
return 0;
}
int main ()
{
int x, nr = 0, y, p = 1;
cin >> x;
if(pp(x))
nr++;
while (p != 0)
{
cin >> y;
if (x == y)
p = 0;
else
if
(pp(y))
{
nr++;
x = y;
}
}
cout << nr << " ";
return 0;
}

Din fisierul text atestat.in se citesc trei


numere naturale x, y, k; (1<x<y<2000000,
k<1000).
din intervalul [x,y], pe primul rand al fisierului
text atestat.out, separate prin cate un spatiu.
Daca nu exista k numere prime in intervalul
[x,y] se vor afisa toate numerele prime gasite,
iar pe al doilea rand ai fisierului atestat.ou se
va afisa mesajul s-au gasit mai putine
numere prime: urmat de numarul acestora
Exemplu: Daca fisierul atestat.in are forma:
3 12 5
atunci fisierul atestat.out va contine:
3 5 7 11
s-au gasit mai putine numere prime: 4
Rezolvare:
#include<fstream>
using namespace std;
int main()
{
int k, d, i, prim, l=0;
long x,y;
ifstream f("atestat.in");
ofstream g("atestat.out");
f>>x>>y;
for(i=x;i<=y;i++)
{
prim=0;
for(d=2;d<=i/2;d++)
{
if(i%d==0)
prim=1;
}
if(prim==0)
{
g<<i<<" ";
l++;
}
}
g<<endl<<"s-au gasit mai putine numere
prime: "<<l;
if(l==0)
g<<"Nu este nici un numar prim in
intervalul ["<<x<<","<<y<<"].";
}

)
Dou numere naturale cu proprietatea c
suma divizorilor fiecrui numr
(neconsidernd n acest caz numrul nsui
ca divizor) este egal cu cellalt numr plus
1, se numesc numere quasi-amiabile sau
numere logodite.
Pe fiecare linie a fiierului text numere.txt se
gsesc cte 2 numere naturale. tiind c 2
numere situate pe o linie a fiierului formeaz
o pereche, s se afieze la ecran toate
perechile de numere quasi-amiabile din fiier.
Exemplu: Dac fiierul numere.txt conine:
25 18
48 75
195 140
260 310
atunci la ecran se vor afia perechile:
48 75
195 140
#include<iostream>
#include<fstream>
using namespace std;
int s=0;
int verificare(int a)
{
for(int i=1; i<a; i++)
{
if(a%i==0)
s=s+i;
}
}
int main()
{
int a=1, b, p=0;
ifstream f("numere.txt");
while(a!=p)
{
p=a;
f>>a>>b;
s=0;
verificare(a);
if(s==b+1)
cout<<a<<" "<<b<<endl;
}
}

Stiind ca se citeste de la tastatura un numar


natural n (n>=5), sa se afiseze in fisierul
numere.out toate numerele naturale mai mici
sau egale cu n care au prop. de numar
puternic. Numerele vor fi separate prin cate
un spatiu.
Un numar puternic este un numar natural cu
proprietatea ca, daca este divizibil cu numarul
prim p, atunci este divizibil si cu p*p, deci toti
factorii sai primi sunt cel mai putin la puterea
a doua.
Spre exemplu: Daca se citeste numarul 200,
fisierul numere.out va contine numerele:
4 8 9 16 25 27 32 36 49 64 72 81 100 108
121 125 128 144 169 196 200.
Rezolvare :
#include<iostream>
#include<fstream>
using namespace std;
ofstream g(numere.out);
int prim (int n)
{
int ok=1;
for(int i=2;i<n;i++)
if (n%i==0)
ok=0;
return ok;
}
int verific(int n)
{
int ok=0;
for(int p=2;p<n;p++)
if(prim(p))
if(n%p==0)
if(n%(p*p)==0)
ok=1;
else
ok=0;
return ok;
}
int main()
{
int n;
cout<<Dati n:;
cin>>n;
for(int i=4;i<=n;i++)
if(verific(i))
g<<i<< ;
}

Sa se creeze fisierul gemene.txt care sa


contina primele n perechi de numere prime
gemene stiind ca n este un numar natural
care se citeste de la tastatura.Se numesc
prime gemene 2 numere naturale prime de
forma p,p+2.
Exemplu:Daca se citeste numarul 3,fisierul
numere.out va contine numerele
35
57
11 13
Rezolvare
#include<fstream>
#include<iostream>
using namespace std;
int prim(int x);
{
int main()
ifstream f(gemene.txt)
ofstream g(gemene.out)
for(int d=2;d<=sqrt(x);d++)
if(x%d==0)
return 0;
}
int main()
{
int n;
cout<<n= ; cin>>n;
int a=3;
while(n)
{
if(prim(a)&&prim(a+2))
{
cout<<(<<a<<;<<a+2<<)\n;
n--;
}
a+=2;
}
return 0;
}
8?????

):

ENUNT:
Un numr n se numete rotund dac are un
numr egal de cifre de 0 i 1 n reprezentarea
sa matematic n baza 2. De exemplu,
numrul 184 este un numr rotund deoarece
reprezentat n baza 2 conine 4 cifre de 0 i 4
cifre de 1. Numrul 120 nu este rotund
deoarece reprezentat n baza 2 conine 3 cifre
de 0 i 4 cifre de 1.
a) Scriei definiia complet a unui
subprogram baza, cu trei parametri, care
primete prin
intermediul parametrului n un numr natural
nenul de cel mult 9 cifre; subprogramul
returneaz prin intermediul celui de-al doilea
parametru, x, numrul de cifre de 0 din
reprezentarea n baza2 a numrului n, iar
prin intermediul celui de-al treilea
parametru, y,
numrul de cifre de 1 din reprezentarea n
baza 2 a numrului n.
Exemplu: pentru n=28 subprogramul va
returna prin parametrul x valoarea2, iar prin
parametrul y
valoarea3.
b) Fiierul text atestat.in conine, pe o singur
linie, cel mult 100 de numere naturale
nenule, de cel puin dou cifre i cel mult 9
cifre fiecare, numerele fiind separate prin cte
un spaiu. Scriei programul C++ care creeaz
fiierul text atestat.out i scrie n el, pe prima
linie, separate prin cte un spaiu, toate
numerele din fiierul text atestat.in care sunt
rotunde. Dac nu exist niciun numr rotund,
atunci n fiierul text atestat.out se va scrie
Nu exist!.
REZOLVARE:
a)#include <iostream>
using namespace std;
int rotund(int n,int x,int y)
{
x=0;
y=0;
while(n!=0)
{
if(n%2==0)
{
x++;
n=n/2;
}
else
{
y++;
n=n/2;
}
}
cout<<"In reprezentarea sa in baza 2,
numarul are "<<x<<" cifre de 0 si "<<y<<"
cifre de 1."<<endl;
if(x==y)
cout<<"Numarul este rotund.";
else
cout<<"Numarul nu este rotund.";
}
int main()
{
int n,x,y;
cout<<"n=";
cin>>n;
rotund(n,x,y);
return 0;
}

Enunt :
a).Scrieti definitia completa a unui
subprogram cmmdc, cu doi parametri, care
primeste prin intermediul parametrilor x si y
doua numere naturale de cel mult patru cifre

fiecare. Subprogramul returneaza cel mai


mare divizor comun al celor doua numere x si
y.
b).Fisierul text fractii.in contine, pe prima linie
un numar natural n(n<=100), iar pe
urmatoarele n linii,n fractii de forma a/b,unde
a si b sunt numaratorul,respectiv
numitorul,numere naturale nenule de cel mult
patru cifre fiecare,separate prin cate un
spatiu. Scrieti programul c++ care simplifica
fractiile din fisierul de intrare si care creeaza
fisierul text fractii.out si scrie in el, pe cate o
linie, numaratorul si numitorul fractie obtinute
dupa simplificare,separate prin cate un
spatiu, precum si numarul fractiilor
ireductibile.
Exemplu:
Daca fisierul fractii.in are forma:
4
26 12
19 4
20 15
17 17
atunci fisierul fractii.out va avea forma:
13 6
19 4
43
11
1
Rezolvare:
a).
int cmmdc(int a,int b)
{
while(a!=b)
{
if(a>b)
{
a=a-b;
}
else
{
b=b-a;
}
}
return a;
}
b).#include<fstream.h>
int cmmdc(int a, int b)
{
while(a!=b)
if(a>b)
a=a-b;
else
b=b-a;
return a;
}
int main()
{
int n,i,x,y,r,k=0;
ifstream f("fractii.n");
ofstream g("fractii.out");
f>>n;
for(i=1;i<=n;i++)
{
f>>x>>y;
r=cmmdc(x,y);
g<<x/r<<" "<<y/r<<endl;
if(r==1)
k++;
}
g<<k;
f.close();
g.close();
return 0;
}

Din fisierul text tablou.in se citesc: un numar


natural n reprezentand numarul de
componente ale unui vector cu numere
naturale nenule si cele n componente ale
vectorului(n<=100).

b) Afisati elementele vectorului pe primul rand


al fisierului text tablou.out, separate prin cate
un spatiu, in ordinea inversa citirii lor.
c) Pe al doilea rand al fisierului text tablou.out
afisati media aritmetica a celor n elemente
citite la punctul anterior, care indeplinesc
conditia ca au prima cifra egala cu ultima.
Exemplu: Daca fisierul tablou.in are forma:
6
1422 131 1445 9009 321 171
atunci fisierul tablou.out va contine:
171 321 9009 1445 131 142
3103.67
Rezolvare:
#include<fstream>
#include<iostream>
using namespace std;
int main()
{
ifstream f("tablou.in");
ofstream g("tablou.out");
int n, a[100], pc=0, uc=0, nr=0, s=0;
double ma=0;
f>>n;
for(int i=1; i<=n; i++)
{
f>>a[i];
}
for(int i=n; i>=1; i--)
{
g<<a[i]<<" ";
}
for(int i=1; i<=n; i++)
{
uc=a[i]%10;
s=a[i];
while(s>0)
{
pc=s%10;
s=s/10;
}
if(uc==pc)
{
nr++;
ma=ma+a[i];
}
}
ma=ma/nr;
g<<endl<<ma;
}