1. Se citesc de la tastatura n numere naturale, cu cel mult
9 cifre fiecare. Scrieti un program care
pentru o cifra k citita de la tastatura, afiseaza pe ecran cate numere
prime in scrierea carora apare cifra k, se gasesc in sirul dat.
Exemplu: pentru n=4 , cifra k=2 si valorile citite 23, 603,
122, 27 se obtine numarul nr = 1, care corespunde valorii 23 .
#include <iostream>
#include <math.h>
using namespace std;
int prim(long int x){
if(x<=1)
return
0;
for(long
d=2;d<=sqrt(x);d++)
if(x%d==0)
return
0;
return 1;
}
int test(long x,int k){
while(x>0){
if(k==x%10)
return
1;
x/=10;//x=x/10;
}
return 0;
}
int main() {
long x;
int
k,nr,n,i;
cin>>k>>n;
nr=0;
for(i=1;i<=n;i++){
cin>>x;
if(prim(x)
&& test(x,k))
nr++;
}
cout<<nr;
return 0;
}
2. Se citeste de la tastatura un numar natural n cu cel mult
noua cifre. Scrieti un program care verifica
daca exista un numar natural k cu
proprietatea ca n=1*2*3*…*k. Daca exista un astfel de numar, programul va afisa
mesajul “Da” si valoarea k , altfel va afisa mesajul “Nu”.(intensiv: valoarea
se determina utilizand o metoda eficienta din punct de vedere al timpului de
executie)
#include <iostream>
using namespace std;
int main() {
long n,f=1;
cin>>n;
int k=0;
do {
k++;
f*=k;
}while(f<n);
if(f==n)
cout<<"Da
"<<k;
else
cout<<"Nu";
return 0;
}
3. In fisierul valori.txt se gasesc pe prima linie maximum
1000 de numere intregi despartite printr-un spatiu. Scrieti un program care sa
determine valoarea maxima si valoarea minima, impreuna cu numarul de aparitii
al maximului, respectiv al minimului.(intensiv: folositi o metoda eficienta din
punct de vedere al memoriei si al numarului de operatii efectuate si afisati pe
ecran valorile obtinute).
Exemplu:continutul fisierului valori.txt
este : 24 3 89 24 1 3 1 1 89, atunci se vor afisa rezultatele:
min = 1 nr_aparitii =
3
max = 89 nr_aparitii = 2
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream
f("valori.txt");
//fstream
f("valori.txt",ios::in);
int
x,max,min,fmax,fmin;
f>>x;
max=min=x;
fmax=fmin=1;
while(f>>x)
{
if(x<min)
{
min=x;
fmin=1;
}
else
if(min==x)
fmin++;
if(x>max)
{
max=x;
fmax=1;
}
else
if(max==x)
fmax++;
}
f.close();
cout<<"min
= "<<min<<" nr_aparitii = "<<fmin<<endl;
cout<<"max
= "<<max<<" nr_aparitii = "<<fmax;
return 0;
}
4.Fisierul unu.in contine pe primul rand valoarea n (
2=n=1.000.000 ), iar pe a doua linie se gasesc n numere intregi formate din cel
mult 9 cifre si despartite prin spatiu. Stiind ca fisierul contine cel putin
doua numere distincte printre cele n de pe a doua linie, scrieti un program
care sa scrie in fisierul unu.out pe o singura linie si separate printr-un
spatiu, in ordine descrescatoate, cele mai mari doua valori distincte din
fisierul de intrare. (intensiv :alegeti o metoda eficienta de rezolvare atat
ca timp de executare, cat si ca
gestionare a memoriei)
Exemplu :
unu.in unu.out
10
-8 14 8 14 15 9 -7 1 4 10 15 14
#include <iostream>
#include <fstream>
using namespace std;
int main() {
long
n,x,maxM,maxm;
ifstream
f("unu.in");
f>>n>>x;
maxM=maxm=x;
while(n>1)
{
f>>x;
if(x>maxM)
{maxm=maxM; maxM=x;}
else//x<=maxM
if(maxm<x
&& x<maxM)
maxm=x;
n--;
}
f.close();
ofstream
g("unu.out");
g<<maxM<<'
'<<maxm;
g.close();
return 0;
}
5. Fisierul text numere.in contine pe prima linie un numar
natural n (0=n=5000), iar pe a doua linie n numere naturale de cel mult 9 cifre
fiecare, separate prin cate un spatiu. Sa se scrie un program care citeste n,
apoi cele n numere naturale din fisierul numere.in si scrie in fisierul
numere.out, pe cate o linie fiecare, numerele de pe a doua linie a fisierului
numere.out care sunt palindroame cu exact patru cifre (un numar este palindrom
daca este egal cu oglinditul sau).
De exemplu daca
fisierul numere.in are urmatorul continut :
5
1441 5
14 2552 78
atunci fisierul
numere.out va contine :
1441
2552
#include <iostream>
#include <fstream>
using namespace std;
int main() {
int n,i;
long nr;
ifstream f("numere.in");
ofstream g("numere.out");
f>>n;
for(i=1;i<=n;i++){
f>>nr;
if(1000<=nr&&nr<=9999&&nr%10==nr/1000&&nr/10%10==nr/100%10)
g<<nr<<endl;
}
f.close(); g.close();
}
6.Se citeste de la tastaturp n, si apoi n perechi de cate
doua numere intregi a si b cu ( a < 0
< b) reprezentand capetele intervalului[a, b]. Afisati pe ecran , daca
exista, capetele intervalului de intersecsie al celor n intervale citite. in cazul in care nu exista
intervalul de intersecsie se afiseaza 0.
De exemplu, pentru n=3 si perechile [-1,20], [-4,9], [-7,
12] , obtinem solutia x= -1 si y= 9.
#include <iostream>
using namespace std;
int main() {
int n, a,
b, amax , bmin; //amax este maximul de valori negative a iar bmin este minimul
de valori pozitive b
cin>>n;
cin>>amax>>bmin;
//valorile maxime/minime sunt intializate cu valori din sir
for(int
i=1;i<=n-1;i++){
cin>>a>>b;
if(a>amax)
amax=a;
if(b<bmin)
bmin=b;
}
cout<<amax<<"
"<<bmin;
}
7. Se citesc de la tastatura n numere naturale, cu cel mult
9 cifre fiecare. Scrieti un program care afiseaza cifra care apare de cele mai
multe ori in numerele citite. Daca exista mai multe astfel de cifre se vor
afisa toate.
Exemplu:Pentru n=4 si valorile 23, 431, 154, 452 se afiseaza
3 pentru ca cifra 4 apare de 3 ori in numerele citite.
#include <iostream>
using namespace std;
int v[10];
int main() {
int n, i;
long val;
cin>>n;
for
(i=1;i<=n;i++) {
cin
>>val;
while
(val>0) {
v[val%10]++;
val/=10;
}
}
int
max=v[0];
for
(i=1;i<=9;i++)
if
(max<v[i]) max=v[i]; // am calculat frecventa max a unei cifre;
for
(i=0;i<=9;i++)
if
(v[i]==max)
cout<<i<<"
";
return 0;
}
8. Se citeste de la tastatura un numar natural n cu maxim
cinci cifre. Afisati cel mai apropiat numar fata de n care are aceeasi suma a
cifrelor.
#include <iostream>
#include <fstream>
using namespace std;
int sc(long x) {
int s=0;
while(x) {
s+=x%10;
x/=10;
}
return s;
}
int main() {
long x;
ifstream
f("date.txt");
f>>x;
f.close();
int
s=sc(x);
long st=x,
dr=x;
do {
st--;
}
while(sc(st)!=s);
do {
dr++;
}
while(sc(dr)!=s);
ofstream
g("r.txt");
if(x-st<dr-x)
g<<st;
else
if(x-st>dr-x)
g<<dr;
else
g<<st<<'
'<<dr;
return 0;
}
9.Se citesc n numere naturale. Sa se ordoneze numerele
crescator dupa numarul de divizori. (intensiv: numarul de divizori se va
determina utilizand o metoda eficienta din punct de vedere al timpului de
execusie)
Exemplu: n=4, numerele 12,4,6,13s 13,4,6,12 .
#include <iostream>
#include <fstream>
using namespace std;
int nrd(long x) {
int
nrdiv=0;
for(long
int d=1;d<=x/2;d++)
if(x%d==0)
nrdiv++;
return
nrdiv+1;}
int main() {
long
x[100];
int n,i;
ifstream
f("sir.txt");
f>>n;
for(i=0;i<=n-1;i++)
f>>x[i];
f.close();
int
sortat=0;
while(!sortat)
{
sortat=1;
for(i=0;i<=n-2;i++)
if(nrd(x[i])>nrd(x[i+1]))
{
long
aux=x[i];
x[i]=x[i+1];
x[i+1]=aux;
sortat=0;}}
ofstream
g("rezultat.txt");
for(i=0;i<=n-1;i++)
g<<x[i]<<'
';
g.close();
return 0;
}
10. Se citeste n numar natural (n<32000) si apoi se
introduc pe rand n numere intregi. Sa se
afiseze numerele prime si sa se calculeze media lor aritmetica.
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int prim(long x) {
if(x<=1)
return
0;
for(long
d=2;d<=sqrt(x);d++)
if(x%d==0)
return
0;
return 1;}
int main() {
long x;
float s=0;
int
nrp=0,n,i;
ifstream
f("date.txt");
ofstream
g("out.txt");
f>>n;
for(i=1;i<=n;i++)
{
f>>x;
if(prim(x))
{
g<<x<<'
';
s+=x;
nrp++;}}
if(nrp)
g<<s/nrp;
f.close(); g.close();
return 0;}
11. Se citeste de la tastatura un numar natural n cu cel
mult 9 cifre. Sa se afiseze cel mai mare
si cel mai mic numar care se poate forma cu cifrele distincte ale numarului.
#include <iostream>
#include <fstream>
using namespace std;
int fr[10];
int main() {
long n;
int i;
ifstream
f("intrare.txt");
f>>n;
f.close();
ofstream
g("iesire.txt");
if(n==0)
g<<0<<endl<<0;
else
{
while(n) {
fr[n%10]++;
n/=10;
}
for(i=9;i>=0;i--)
if(fr[i])
g<<i;
g<<endl;
if(!fr[0])
for(i=0;i<=9;i++)
{if(fr[i])
g<<i;}
else
{
int
primnenul=0;
for(i=1;i<=9;i++)
if(fr[i])
{
if(primnenul==0)
g<<i<<0;
else
g<<i;
primnenul=1;
}}
}f.close();g.close();
return 0;}
12. Se citeste din fisierul numar.txt un numar natural n. Sa
se verifice daca este putere a lui 2 si sa se calculeze frecvensa de aparisie a
fiecarei cifre in scrierea in baza 10 a numarului.
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int fr[10];
int main() {
long n;
ifstream
f("numar.txt");
f>>n;
f.close();
ofstream
g("r.txt");
if(n==pow(2,floor(log(n)/log(2))))
g<<"ok\n";
else
g<<"eroare\n";
while(n){fr[n%10]++;n/=10;}
for(int
i=0;i<=9;i++)
g<<i<<"
:: "<<fr[i]<<endl;
g.close();
return 0;
}
13. Scrieti un program care afiseaza pe ecran toate numerele
naturale cu maxim 9 cifre care sunt rotunde(numerele care convertite in binar
au acelasi numar de 0 respectiv de 1).
Exemplu: 12=>1100 este rotund; 13 =>1101 nu este
rotund )
#include <iostream>
#include <fstream>
using namespace std;
int test(long x)
{
int nr0=0;
int nr1=0;
do{
if(x%2==1)
nr1++;
else
nr0++;
x/=2;
}
while(x>0);
return
nr0==nr1;
}
int main() {
ofstream
f("rezultat.txt");
long x;
for(x=0;x<=999999999;x++)
if(test(x))
f<<x<<endl;
f.close();
return 0;}
14. Fisierul text numere.in contine pe prima linie un numar
natural n (0<n<1000), iar pe a doua linie n numere naturale cu cel mult 9
cifre fiecare, despartite prin cate un spatiu. Scrieti un program C/C++ care
citeste toate numerele din fisier si afiseaza pe ecran, separate prin cate un
spatiu, numerele de pe a doua linie a fisierului, care sunt formate din cifre
identice.
Exemplu: daca fisierul numere.in are continutul:
9
55 107 3 101 99 7 208 2222 80
numerele ce se vor afisa sunt:
55 3 99 7 2222
#include <iostream>
#include <fstream>
using namespace std;
int test(long x)
{
int
uc=x%10;
while(x)
{
if(x%10!=uc)
return
0;
x/=10;
}
return 1;
}
int main() {
ifstream
f("numere.in");
ofstream
g("numere.out");
int n;
long x;
f>>n;
for(int
i=1;i<=n;i++)
{
f>>x;
if(test(x))
g<<x<<'
';}
f.close();
g.close();
return 0;}
15.Fisierul atestat.txt contine pe prima linie un numar
natural n (n=100), iar pe a doua linie, separate prin cate un spatiu, n numere
naturale nenule, cu cel mult 4 cifre fiecare. Scrieti programul C/C++ care
afiseaza pe ecran cifra de control a fiecarui numar (c(4568)=c(4+5+6+8)=c(23)=5).
Exemplu: daca fisierul are continutul alaturat,
7
120 346 68
9 32 0 112
atunci se
afiseaza 3 4
5 9 5 0 4
#include <fstream>
#include <iostream>
using namespace std;
int cc(unsigned short int n)
{
unsigned
short int sc;
while(n>=10)
{
sc=0;
while(n>0)
{
sc+=n%10;
n/=10;
}
n=sc;
}
return n;}
int main() {
ifstream
f("atestat.txt");
unsigned
short int n,x,i;
f>>n;
for(i=1;i<=n;i++)
{
f>>x;
cout<<cc(x)<<'
';
}
f.close();
return 0;}
16. Fisierul numere.in contine pe prima linie mai multe
numere naturale in ordine crescatoare dintre care cel pusin o putere a lui 3.
Scrieti un algoritm eficient care afiseaza pe ecran numerele din fisier ce sunt
puteri ale lui 3.
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int main() {
ifstream
f("numere.in");
long x;
while(f>>x)
if(log(x)/log(3)==floor(log(x)/log(3)))
cout<<x<<'
';
f.close();
return 0;}
17. Dat n natural, sa se descompuna ca suma de puteri
distincte ale lui 2.
Exemplu : 25=24+23+20.
#include <fstream>
#include <iostream>
#include <math.h>
using namespace std;
int main() {
long x;
cin>>x;
int
e;//exponentul lui 2
while(x)
{
e=floor(log(x)/log(2));
cout<<"2^"<<e<<endl;
x-=pow(2,e);}
return 0;}
18. Sa se scrie un program care sa verifice daca suma
cifrelor de pe pozitiile impare si suma cifrelor de pe pozitiile pare ale unui
numar natural n citit de la tastatura sunt egale. Pozitiile se numara de la
dreapta la stanga incepand cu pozitia 1. Se afiseaza sumele si un mesaj
corespunzator pe ecran.
Exemplu: se citeste: n=12345 si
se
afiseaza: sp=6 si simp=9 Nu coincid!
#include <fstream>
#include <iostream>
using namespace std;
int main() {
long int n;
int
sp=0,simp=0;
cin>>n;
int p=1;
while(n) {
if(p%2)
simp+=n%10;
else
sp+=n%10;
n/=10;
p++;
}
if(sp==simp)
cout<<"sp="<<sp<<"
si simp="<<simp<<" Coincid!";
else
cout<<"sp="<<sp<<"
si simp="<<simp<<" Nu Coincid!";
return 0;
}
19. Sa se afiseze primele n perechi de numere prime gemene,
unde n este un numar natural nenul citit de la tastatura.
Exemplu: se citeste: n=4
se
afiseaza: (3 ; 5) ; (5 ; 7) ; (11 ; 13) ; (17 ; 19)
#include <fstream>
#include <iostream>
#include <math.h>
using namespace std;
int prim(int x)
{
for(int
d=2;d<=sqrt(x);d++)
if(x%d==0)
return
0;
return 1;}
int main() {
int n;
cin>>n;
int a=3;
while(n) {
if(prim(a)
&& prim (a+2))
{
cout<<'('<<a<<','<<a+2<<")\n";
n--;}
a+=2;}
return 0;}
20. Se citesc n numere naturale nenule. Sa se precizeze cu
cate zerouri se va termina produsul numerelor fara a calcula efectiv produsul
lor.
Exemplu: se citeste:n=3 si numerele25, 12, 9
se
afiseaza: 2 de zero
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream
f("date.txt");
int
n,x,nr2=0,nr5=0;
f>>n;
while(n) {
f>>x;
while(x%2==0)
{
nr2++;
x/=2;}
while(x%5==0)
{
nr5++;
x/=5;}
n--;}
ofstream
g("rezultat.txt");
if(nr2>nr5)
g<<nr5;
else
g<<nr2;
g.close();
return 0;
}
21. Se citeste un numar natural n. Sa se afiseze toate numerele
prime mai mici decat n astfel incat suma cifrelor a fiecarui numar sa fie mai
mica decat un alt numar citit m.
Exemplu: se citeste: n= 30
si m=7
se
afiseaza: 2, 3, 5, 11, 13, 23
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int prim(int x) {
for(int d=2;d<=sqrt(x);d++)
if(x%d==0)
return
0;
return 1;}
int suma_cifre(int x) {
int s=0;
while(x>0) {
s+=x%10;x/=10;}
return s;}
int main() {
ifstream
f("date.txt");
int n,m;
f>>n>>m;
f.close();
ofstream
g("iesire.txt");
for(int
i=2;i<n;i++)
if(prim(i)&&suma_cifre(i)<m)
g<<i<<'
';
g.close();
return 0;}
22. Fisierul matrice.txt
contine pe primul rand doua valori naturale m si n (1=n=100, 1=m=100), reprezentand
numarul de linii si respectiv de coloane ale unei matrice a, iar pe urmatoarele
m linii cate n valori intregi cu maximum 4 cifre fiecare, separate prin cate un
spatiu, reprezentand elementele matricei a. Afisati pe ecran un sir de 2*(n+m)
– 4 numere ordonate crescator, sir format din elementele aflate pe chenarul
exterior al matricei a. Chenarul exterior este format din prima si ultima
linie, respectiv prima si ultima coloana din matrice.
Exemplu: daca matricea data este :
3 4
1 2 3 4
5 6 7 8
9 1 2 3
se va afisa sirul : 1 1 2 2 3 3 4 5 8 9.
#include <iostream>
#include <fstream>
using namespace std;
void citire(int a[100][100],int &m,int &n) {
ifstream
f("matrice.txt");
f>>m>>n;
for(int
i=0;i<=m-1;i++)
for(int
j=0;j<=n-1;j++)
f>>a[i][j];
f.close();
}
void Bubble_Sort(int v[400], int n) {
int
sortat=0;
while(!sortat)
{
sortat=1;
for(int
i=0;i<=n-2;i++)
if(v[i]>v[i+1])
{
int
aux=v[i]; v[i]=v[i+1];
v[i+1]=aux;
sortat=0;}}}
void contur(int a[100][100],int m,int n,int v[400]){
int k=0,i;
for(i=0;i<=n-1;i++)
v[k++]=a[0][i];
for(i=1;i<=m-1;i++)
v[k++]=a[i][n-1];
for(i=n-2;i>=0;i--)
v[k++]=a[m-1][i];
for(i=m-2;i>=1;i--)
v[k++]=a[i][0];
}
int main() {
int
a[100][100],v[400];int m;int n;
citire(a,m,n);
contur(a,m,n,v);
Bubble_Sort(v,2*(m+n)-4);
ofstream
f("iesire.txt");
for(int
i=0;i<=2*(m+n)-4-1;i++)
f<<v[i]<<'
';
f.close();
return 0;
}
23. Se citeste de la tastatura o valoare naturala m
(2=m=100). Scrieti programul C/C++/Pascal care construieste in memorie si apoi
afiseaza pe ecran matricea a cu m linii si m coloane de numere intregi,
construita dupa urmatoarea regula :
elementul de pe linia i si coloana j a matricii ( 1=i , j=m) este :
s 1 daca
i*i+j*j este patrat perfect
s 2 daca
i*i+j*j nu este patrat perfect, dar este numar prim mai mare decat 2
s 3 in rest.
Exemplu: pentru m = 2, se va afisa matricea :
3 2
2 3
#include <fstream>
#include <iostream>
#include <math.h>
using namespace std;
int pp(int x)
{return sqrt(x)==floor(sqrt(x));}
int prim(int x){
if(x<2)
return 0;
for(int
d=2;d<=sqrt(x);d++)
if(x%d==0)
return
0;
return 1;}
int main() {
int
m,t[100][100],i,j;
ifstream
f("input.txt");
f>>m;
f.close();
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
if(pp(i*i+j*j))
t[i][j]=1;
else
if(i*i+j*j>2
&& prim(i*i+j*j))
t[i][j]=2;
else
t[i][j]=3;
ofstream
g("output.txt");
for(i=1;i<=m;i++){
for(j=1;j<=m;j++)
g<<t[i][j]<<'
';
g<<endl;}
g.close();
return 0;}
24. Se citeste un vector v cu n componente numere naturale.
Sa se afiseze cel mai mare numar care se poate forma cu cifra maxima a fiecarui
numar din vector.
Exemplu: se citeste: n= 5
si v=(29, 171, 0, 2222, 100)
se
afiseaza: 97210
#include <iostream>
#include <fstream>
using namespace std;
int cmax(long x)
{
int
cm=x%10; x/=10;
while(x) {
if(x%10>cm) cm=x%10; x/=10; }
return cm;
}
int c[10];
int main() {
long
v[100];
int n,i;
ifstream
f("input.txt");
f>>n;
for(i=0;i<=n-1;i++)
f>>v[i];
f.close();
for(i=0;i<=n-1;i++)
c[cmax(v[i])]++;
ofstream
g("output.txt");
for(i=9;i>=0;i--)
for(int
j=1;j<=c[i];j++)
g<<i;
g.close();
return 0;
}
25. Se considera o matrice oarecare de dimensiune mxn cu
elemente numere naturale. Sa se afiseze numerele cu numar impar de divizori din
matrice si sa se indice numarul lor.
Exemplu: se citeste: m=2 si n=3 si matricea
se
afiseaza: 4, 25,
2 numere
#include <fstream>
#include <iostream>
using namespace std;
int nrd(int x)
{
int nr=0;
for(int
d=1;d<=x/2;d++)
if(x%d==0)
nr++;
return
nr+1;
}
int main() {
int
t[100][100],m,n,nr=0,i,j;
ifstream
f("input.txt");
f>>m>>n;
for(i=0;i<=m-1;i++)
for(j=0;j<=n-1;j++)
f>>t[i][j];
f.close();
ofstream
g("output.txt");
for(i=0;i<=m-1;i++)
for(j=0;j<=n-1;j++)
if(nrd(t[i][j])%2==1)
{
g<<t[i][j]<<' '; nr++; }
g<<endl<<nr;
return 0;
}
26. Fie un vector v cu n elemente numere intregi citite de
la tastatura. Fara a folosi alt vector auxiliar, sa se mute la sfarsitul lui v
elementele sale nule, pastrand ordinea celorlalte elemente.
Exemplu: se citeste: n=7 si vectorul v=(2,3,0,9,0,0,8)
se afiseaza: v=(2,3,9,8,0,0,0)
#include <iostream>
#include <fstream>
using namespace std;
int main() {
long
v[100];
int n,i;
ifstream
f("input.txt");
f>>n;
for(i=0;i<=n-1;i++)
f>>v[i];
f.close();
int test=0;
while(!test)
{
test=1;
for(i=0;i<=n-2;i++)
if(v[i]==0
&& v[i+1])
{
int aux=v[i]; v[i]=v[i+1]; v[i+1]=aux; test=0; }}
ofstream
g("output.txt");
for(i=0;i<=n-1;i++)
g<<v[i]<<'
';
g.close();
return 0;}
27. Fie a o matrice patratica de dimensiune n. Folosind o
functie de ordonare a unui vector de dimensiune k, afisati matricea modificata
prin ordonarea crescatoare a liniilor impare.
#include <iostream>
#include <fstream>
using namespace std;
void sortare(long x[100], int n){
int
sortat=0;
int i;
while(!sortat)
{
sortat=1;
for(i=0;i<=n-2;i++)
if(x[i]>x[i+1])
{
long
aux=x[i];
x[i]=x[i+1];
x[i+1]=aux;
sortat=0;}}
}
int main() {
long
x[100][100],n;
ifstream
f("date.txt");
f>>n;
int i,j;
for(i=0;i<=n-1;i++)
for(j=0;j<=n-1;j++)
f>>x[i][j];
f.close();
for(i=0;i<=n-1;i+=2)
sortare(x[i],
n);
for(i=0;i<=n-1;i++){
for(j=0;j<=n-1;j++)
cout<<x[i][j]<<'
';
cout<<endl;}
return 0;
}
28. Fisierul matrice.in contine pe prima linie un numar
natural n (0=n=5000), iar pe urmatoarele 2n linii cate n numere naturale de cel
mult 5 cifre fiecare, separate prin cate un spatiu reprezentand elementele a
doua matrice a si b cu cate nXn elemente fiecare. Verificati daca b este
obtinuta din a prin rotirea spre stanga cu 270 de grade, afisand un mesaj
afirmativ sau „nu”.
Exemplu:
Daca fisierul matrice.in are urmatorul continut :
3
1 2 3
3 4 5
5 6 7
5 3 1
6 4 2
7 5 3
atunci se va afisa
“DA”
#include <iostream>
#include <fstream>
using namespace std;
int main() {
long
a[100][100],b[100][100],n;
ifstream
f("matrice.in");
f>>n;
int i,j;
for(i=0;i<=n-1;i++)
for(j=0;j<=n-1;j++)
f>>a[i][j];
for(i=0;i<=n-1;i++)
for(j=0;j<=n-1;j++)
f>>b[i][j];
f.close();
//linia i
din a trebuie sa coincida cu coloana n-1-i din b
int test=1;
//test
devine 0 in caz de nepotrivire
for(i=0;i<=n-1&&test;i++)
for(j=0;j<=n-1&&test;j++)
if(a[i][j]!=b[j][n-1-i])
test=0;
if(test)
cout<<"DA"; else cout<<"NU";
return 0;
}
29. Data o matrice cu elemente numere intregi de dimensiune
nXm sa se determine punctele-sa din matrice, adica elementele care sunt minime
pe linia lor si maxime pe coloana lor. in cazul in care nu exista se va afisa
mesajul “NU”.
Exemplu=3;
4 3 6
12 1 4
=> numarul 3 este sa.
5 0 7
#include <iostream>
#include <fstream>
using namespace std;
int main() {
long
x[100][100],n,m;
ifstream
f("matrice.in");
f>>n>>m;
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
f>>x[i][j];
f.close();
//pastram
maximul coloanei i in x[0][i]
//pastram
minimul liniei i in x[i][0]
for(i=1;i<=n;i++)
for(j=1;j<=m;j++){
if(x[i][j]>x[0][j])
x[0][j]=x[i][j];
if(x[i][j]<x[i][0])
x[i][0]=x[i][j];
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(x[i][j]==x[i][0]
&& x[i][j]==x[0][j])
cout<<x[i][j]<<'
';
return 0;
}
30. Fie n si m doua numere naturale citite de la tastatura.
Sa se formeze un tablou bidimensional cu n linii si m coloane cu primele n×m
numere naturale imperfecte. Un numar natural n este perfect daca suma S a
divizorilor sai mai mici decat n este egala de numarul n (exceptand numarul
insusi ).
Exemplu:n=2, m=3 atunci matricea este
1 2 3
4 5 7
! 6 este numar perfect – 6=1+2+3
#include<iostream.h>
#include<conio.h>
int n,v[100],i,j;
void citire()
{cout<<"n="; cin>>n;
}
int perfect(int a)
{int s=1,d;
for(d=2;d<=a/2;d++) if(a%d==0) s=s+d;
if(s==a) return 1;
return 0;
}
void vector(int n,int v[100])
{int sw=1,t=1,i=1;
while(sw!=0){if(perfect(i)==0||i==1) {v[t]=i;
if(t==n*n) sw=0;
t++;
}
i++;
}
}
void afis()
{cout<<endl;
for(i=1;i<=n*n;i++)
if(i%n==0) cout<<v[i]<<endl;
else
cout<<v[i]<<"
";
}
void main()
{clrscr();
citire();
vector(n,v);
afis();
getch();
}
31. Scrieti un program C/C++ care citeste de la tastatura un
numar natural n (2<n<20), construieste in memorie si afiseaza pe ecran o
matrice cu n linii si n coloane, numerotate de la 1 la n. Fiecare element din
matrice aflat pe o linie impara va fi egal cu numarul liniei pe care se afla
iar elementele de pe linii pare sa fie completate cu valorile de la n la 1.
Elementele matricei vor fi afisate pe ecran, cate o linie a matricei pe cate o
linie a ecranului cu cate un spatiu intre elementele fiecarei linii.
Exemplu: pentru n=5 se va afisa matricea de mai jos
1 1 1 1 1
5 4 3 2 1
3 3 3 3 3
5 4 3 2 1
5 5 5 5 5
#include<iostream.h>
#include<conio.h>
int n,a[20][20],i,j;
void citire()
{cout<<"n="; cin>>n;
}
void formare()
{for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i%2==1)a[i][j]=i;
else a[i][j]=n-j+1;
}
void afis()
{for(i=1;i<=n;i++)
for(j=1;j<=n;j++){gotoxy(j*3,i+4);
cout<<a[i][j];
}
}
void main()
{clrscr();
citire();
formare();
afis();
getch();
}
32. Se dau numarul
de n linii si m coloane a unei
matrici.Sa se construiasca si sa se
afiseze matricea in fisierul matrice.out
stiind ca elementul din pozitia i,j este egal cu minimul dintre i si j.
Afisarea se realizeaza prin intermediul unui vector construit prin parcurgerea
matricei sub forma de L.
#include<iostream.h>
#include<conio.h>
int n,a[20][20],i,j,v[100];
void citire()
{cout<<"n="; cin>>n;
}
void formare()
{for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i>j)a[i][j]=j;
else a[i][j]=i;
}
void afis()
{for(i=1;i<=n;i++)
for(j=1;j<=n;j++){gotoxy(j*3,i+4);
cout<<a[i][j];
}
cout<<endl;
}
void vector()
{int t,k=0;
for(t=1;t<=n;t++)
{for(j=1;j<=n-t;j++)v[++k]=a[j][t];
for(j=t;j<=n;j++) v[++k]=a[n-t+1][j];
}
}
void main()
{clrscr();
citire();
formare();
afis();
vector();
for(i=1;i<=n*n;i++) cout<<v[i]<<" ";
getch();
}
33. Fisierul text NUMERE.IN contine pe prima linie un numar
natural nenul n (1=n=100) si pe urmatoarea linie n numere reale pozitive
separate prin cate un spatiu. Scrieti un program C/C++ care citeste din
fisierul NUMERE.IN numarul natural n, si determina, utilizand un algoritm
eficient din punct de vedere al timpului de executare si al memoriei utilizate,
pozisia pe care se afla primul si ultimul numar din cele n numere reale care
sunt egale cu valoarea minima dintre ele.
Exemplu: Daca fisierul NUMERE.IN are continutul:
6
2.8 2.3 5.7 5.7 2.3 6.3
atunci se afiseaza 2 si 5 (valoarea minima este 2.3 si
numerele de pe pozitia 2 si 5 sunt egale cu 2.3)
#include<iostream.h>
#include<conio.h>
int n,i;
float v[100];
void citire()
{cout<<"n="; cin>>n;
for(i=1;i<=n;i++) cin>>v[i];
}
float minim()
{float min;
min=v[1];
for(i=2;i<=n;i++) if(min>v[i]) min=v[i];
return min;
}
void main()
{float a; int b;
clrscr();
citire();
a=minim();
for(i=1;i<=n;i++)if(v[i]==a){cout<<i<<" ";
i=n+1;
b=i;
}
for(i=n;i>=1;i--) if(v[i]==a){if(i!=b)cout<<i;
i=0;
}
getch();
}
34. Scrieti un program C/C++ care citeste de la tastatura un
numar natural n (1<=n<=20), elementele unei matrice cu n linii si n
coloane, numere intregi din intervalul [-100, 100] si afiseaza pe ecran m1 si m2, unde m1 este
media aritmetica a elementelor strict pozitive ale matricei, situate deasupra
diagonalei principale, iar m2 este media aritmetica a elementelor strict
pozitive ale matricei, situate sub diagonala principala, ca in exemplu. Cele
doua medii se considera egale cu 0 daca nu exista valori strict pozitive in
zonele corespunzatoare.
Exemplu: pentru n=4 si matricea alaturata se afiseaza
m1=2.75, calculata din elementele aflate deasupra diagonalei
principale, si m2=2.5, calculata din elementele aflate
sub diagonala principala.
-1 2 -4 5
0 6
3 1
2 4
2 0
3 -5 1 -3
#include<iostream.h>
#include<conio.h>
int a[20][20],n,i,j,k,t;
float m1,m2;
void citire()
{cout<<"n="; cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){gotoxy(j*7,i+9);
cin>>a[i][j];
}
}
float sumaunu()
{float s=0;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++) if(a[i][j]>0){s=s+a[i][j];
k++;
}
m1=s/k;
return m1;
}
float sumadoi()
{float s=0;
for(i=1;i<n;i++)
for(j=1;j<i;j++)if(a[i][j]>0){s=s+a[i][j];
t++;
}
m2=s/t;
return m2;
}
void main()
{clrscr();
citire();
cout<<"Media aritmetica a elementelor strict
pozitive de deasupra diagonalei principale este "<<sumaunu();
cout<<"Media aritmetica a elementelor strict
pozitive de dedesubtul diagonalei principale este "<<sumadoi();
getch();
}
35. Scrieti un program C/C++ care citeste de la tastatura
numerele intregi m si n (1<=m<=50, 1<=n<=50) si elementele unui
tablou bidimensional cu m linii si n coloane, numere intregi distincte de cel
mult 4 cifre fiecare. Programul va afisa pe prima linie a ecranului numarul de
elemente prime de pe fiecare coloana a matricii, separate prin cate un
spasiu.Definisi o functie care verifica daca un numar intreg este prim si
folosii apeluri ale ei pentru rezolvarea cerintei.
Exemplu: pentru m=3 si n=4 si tabloul de mai jos
2 7 1 4
14 6 12 3
9 22 8 5
Pe ecran se va afisa:
3 1 1
#include<iostream.h>
#include<conio.h>
int a[20][20],n,i,j;
void citire()
{cout<<"n="; cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){gotoxy(j*7,i+9);
cin>>a[i][j];
}
}
int prim(int a)
{int d;
for(d=2;d<=a/2;d++) if(a%d==0) return 0;
return 1;
}
void main()
{clrscr();
citire();
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)if(prim(a[j][i])==1)
cout<<a[j][i]<<"
";
getch();
}
36. Fie x un vector de numere intregi de lungime n, sa se
construiasca un vector y, astfel incat y[i]=numarul de aparitii ale lui x[i] in
vectorul x.
Exemplu: Pentru x=(1,5,2,1,5,7,2,1,5) se obtine
y=(3,3,2,3,3,1,2,3,3).
#include<iostream.h>
#include<conio.h>
int v[50],y[50],n,i,j,k;
void citire()
{cout<<"n="; cin>>n;
for(i=1;i<=n;i++)cin>>v[i];
}
int aparitie(int a)
{int s=0;
for(i=1;i<=n;i++)if(v[i]==a)s++;
return s;
}
void formare(int n,int v[50],int y[50])
{for(j=1;j<=n;j++){k=aparitie(v[j]);
y[j]=k;
}
}
void afis(int n,int x[100])
{for(i=1;i<=n;i++) cout<<x[i]<<" ";
cout<<endl;
}
void main()
{clrscr();
citire();
formare(n,v,y);
afis(n,v);
afis(n,y);
getch();
}
37. Scrieti un program care citeste de la tastatura doua
numere naturale nenule m si n si care construieste in memorie si apoi afiseaza
o matrice A cu m linii si n coloane cu proprietatea ca fiecare element aij
memoreaza cea mai mica dintre valorile indicilor i si j. Matricea se va afisa
in fisierul matrice.txt, cate o linie a matricei pe cate o linie a ecranului,
elementele fiecarei linii fiind separate prin cate un spatiu.
Exemplu: Pentru m=4 si n=5 fisierul va consine matricea
alaturata
#include<iostream.h>
#include<conio.h>
int a[20][20],n,m,i,j;
void citire()
{cout<<"n="; cin>>n;
cout<<"m="; cin>>m;
}
void formare()
{for(i=1;i<=n;i++)
for(j=1;j<=m;j++)if(i<j)a[i][j]=i;
else a[i][j]=j;
}
void afis()
{for(i=1;i<=n;i++)
for(j=1;j<=m;j++){gotoxy(j*3,i+5);
cout<<a[i][j];
}
}
void main()
{clrscr();
citire();
formare();
afis();
getch();
}
38. Se citesc de la tastatura doi vectori cu cate n
elemente. Afisati ultima cifra a sumei
fara a calcula efectiv suma.
#include<iostream.h>
#include<conio.h>
int n,a[100],b[100],i;
void citire()
{cout<<"Dati numarul de elemente:";
cin>>n;
for(i=1;i<=n;i++) {cin>>a[i];
cin>>b[i];
}
}
int ultimacifra(int n,int a[100],int b[100])
{int s=0;
for(i=1;i<=n;i++){s=s+a[i]+b[i];
s=s%10;
}
return s;
}
void main()
{clrscr();
citire();
cout<<"Suma se termina cu
cifra:"<<ultimacifra(n,a,b);
getch();
}
39. Scrieti un program care construieste in memorie o
matrice patratica de ordin n cu elemente numere naturale astfel incat pe
diagonala principala sa existe numai elemente egale cu 1, elementele de pe cele
doua « semidiagonale » paralele cu diagonala principala si alaturate diagonalei
principale sa fie toate egale cu 2, elementele de pe urmatoarele doua «
semidiagonale » sa fie egale cu 3,etc.
Valoarea lui n se
citeste de la tastatura, iar matricea se va afisa pe ecran.
Pentru n=4 se va afisa tabloul :
1 2 3 4
2 1 2 3
3 2 1 2
4 3 2 1
#include<iostream.h>
#include<conio.h>
int a[20][20],n,m,i,j;
void citire()
{cout<<"n="; cin>>n;
}
void formare()
{for(i=1;i<=n;i++)
for(j=n;j>=i;j--){a[i][j]=j-i+1;
a[j][i]=a[i][j];
}
}
void afis()
{for(i=1;i<=n;i++)
for(j=1;j<=n;j++){gotoxy(j*3,i+4);
cout<<a[i][j];
}
}
void main()
{clrscr();
citire();
formare();
afis();
getch();
}
39. Fie a un vector cu n componente reale (n>=30). Sa se
obtina din a vectorul b care sa indeplineasca conditiile :
- b[i]>=b[i+1] pentru i=1,2,…,k-1
- b[i]<=b[i+1] pentru i=k,k+1, , n-1
- b[k-i]>=b[k+i] pentru i=1,2, …, k-1, unde k=n/2 cand n
este par si k=(n+1)/2 cand n este impar.
#include<iostream.h>
#include<conio.h>
int v[50],n,b[50],i,j;
void citire()
{cout<<"n="; cin>>n;
for(i=1;i<=n;i++) cin>>v[i];
}
void sortare()
{int sw,aux;
do{sw=1;
for(i=1;i<n;i++)
if(v[i]<v[i+1]){aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
sw=0;
}
}while(sw==0);
}
void formare(int &t,int b[50])
{t=0;
for(i=1;i<=n/2;i++)b[++t]=v[i];
for(i=n;i>=n/2;i--)b[++t]=v[i];
}
void afis(int m,int x[100])
{for(i=1;i<=m;i++) cout<<x[i]<<" ";
cout<<endl;
}
void main()
{int t;
clrscr();
citire();
afis(n,v);
sortare();
formare(t,b);
afis(n,b);
getch();
}
40. Se citeste de la tastatura o matrice a cu m linii si n
coloane, ale carei elemente sunt cifre de la 0 la 9 (0<=m,n<=5). Sa se
afiseze suma numerelor care se pot forma cu cifrele fiecarei linii (numarul
aferent fiecarei linii se va obsine prin citirea cifrelor de pe linia
respectiva de la stanga la dreapta, ignorandu-se zerourile de la inceputul
liniei).
Exemplu : Pentru matricea :
0 3 8 2 5
0 0 5 1 4
0 7 7 9 3 se va afisa valoarea 12132 reprezentand suma
3825+514+7793.
#include<iostream.h>
#include<conio.h>
int a[20][20],n,m,i,j;
void citire()
{cout<<"n="; cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){gotoxy(j*3,i+4);
cin>>a[i][j];
}
}
int numar(int t)
{int p=0;
for(i=1;i<=n;i++)if(a[t][i]!=0) p=p*10+a[t][i];
else if(p!=0) p=p*10+a[t][i];
return p;
}
int suma()
{int s=0,b;
for(j=1;j<=n;j++){b=numar(j);
cout<<b<<" ";
s=s+b;
}
return s;
}
void main()
{clrscr();
citire();
cout<<"Suma obtinuta este "<<suma();
getch();
}
41. Scrieti un program care construieste in memorie o
matrice t patratica de ordin n cu elemente numere naturale astfel incat pe
ultima coloana si pe ultima linie sa se afle numai elemente egale cu 1, iar
oricare alt element al matricei sa fie egal cu suma dintre elementul aflat
imediat sub el si elementul aflat imediat in dreapta lui.
Exemplu : Pentru n =4 se va afisa tabloul urmator :
20 10 4 1
10 6 3 1
4 3
2 1
1 1
1 1
include<iostream.h>
#include<conio.h>
int a[20][20],n,m,i,j;
void citire()
{cout<<"n="; cin>>n;
for(i=1;i<=n;i++){a[n][i]=1;
a[i][n]=1;
}
}
void formare()
{for(i=n-1;i>=1;i--)
for(j=n-1;j>=1;j--)a[i][j]=a[i+1][j]+a[i][j+1];
}
void afis()
{for(i=1;i<=n;i++)
for(j=1;j<=n;j++){gotoxy(j*3,i+5);
cout<<a[i][j];
}
}
void main()
{clrscr();
citire();
formare();
afis();
getch();
}
42. Scrieti programul C, C++ sau Pascal, care citeste de la
tastatura un sir s de cel mult 30 de caractere si un caracter c. Programul
determina triplarea fiecarei aparitii a caracterului c in s si scrie noul sir
obtinut in fisierul text final.out. (neintensiv: sirul poate fi scris in fisier
fara a fi construit efectiv in memorie)
De exemplu, daca se citeste sirul : ciocarlie si caracterul
c atunci fisierul va contine sirul : ccciocccarlie.
#include<iostream.h>
#include<string.h>
#include<conio.h>
void main()
{char cuv[100],ch;
int i,n,j;
clrscr();
cout<<"Dati cuvantul:"<<endl;
cin.get(cuv,30); cin.get();
cout<<"Dati caracterul ch:"; cin>>ch;
n=strlen(cuv);
for(i=0;i<n;i++)if(cuv[i]==ch)
{for(j=n;j>i+1;j--)cuv[j]=cuv[j-1];
cuv[i+1]=ch;
n++;
i++;
for(j=n;j>i+1;j--)cuv[j]=cuv[j-1];
n++;
cuv[i+1]=ch;
i=i+2;
}
cuv[n]=NULL;
cout<<cuv;
getch();
}
43. Fisierul cuv_a.txt contine mai multe cuvinte ordonate
alfabetic. Pentru un cuvant c dat de la tastatura generati fisierul cuv_b.txt
contine cuvintele din primul fisier si cuvantul c, toate in ordine alfabetica.
#include<iostream.h>
#include<string.h>
#include<conio.h>
void main()
{char cuv[100][100],ch[100];
int i,n,sw=1,j;
clrscr();
cout<<"Dati nr de cuvinte:"; cin>>n;
cin.get();
for(i=1;i<=n;i++){cin.get(cuv[i],20);
cin.get();
}
cin.get(ch,20);
if(strcmp(cuv[1],ch)>=0){for(j=n+1;j>=1;j--) strcpy(cuv[j],cuv[j-1]);
strcpy(cuv[1],ch);
n=n+1;
sw=0;
}
else for(i=2;i<=n;i++)if(strcmp(cuv[i],ch)>=0)
{for(j=n+1;j>=i;j--)strcpy(cuv[j],cuv[j-1]);
strcpy(cuv[i],ch);
n++;
sw=0;
i=n+3;
}
if(sw==1){strcpy(cuv[n+1],ch);
n++;
}
for(i=1;i<=n;i++) cout<<cuv[i]<<endl;
getch();
}
44. Definiti structura fractie care memoreaza in campul a al
structurii numaratorul, iar in campul b numitorul fracsiei. Citisi numitorul si
numaratorul a n fracsii. Pentru fiecare fracsie sa se verifice daca este
ireductibila, in caz afirmativ sa se afiseze, iar in caz contrar sa se afiseze
numitorul si numaratorul dupa simplificare.
#include<iostream.h>
#include<conio.h>
struct fractie{int a;
int b;
};
fractie f;
void citire()
{cout<<"Dati numaratorul fractiei:";
cin>>f.a;
cout<<"Dati numitorul fractiei:";
cin>>f.b;
}
int divizor(int p,int t)
{int i;
if(p>t)for(i=t;i>1;i--) if(p%i==0&&t%i==0)
return i;
for(i=p;i>1;i--)if(p%i==0&&t%i==0) return i;
return 0;
}
void main()
{clrscr();
citire(); int k;
k=divizor(f.a,f.b);
if(k!=0) cout<<"Fractia simplificata este
"<<f.a/k<<"/"<<f.b/k;
else
cout<<"Fractia este ireductibila";
getch();
}
45. Se considera un text cu maximum 255 de caractere in care
cuvintele sunt separate prin unul sau mai multe spatii. Primul caracter din
textul citit este o litera, iar cuvintele sunt formate numai din litere mici
ale alfabetului englez. Scrieti un program C/C++ care citeste de la tastatura
textul si il transforma inlocuind prima litera a fiecarui cuvant cu litera mare
corespunzatoare, restul caracterelor ramanand nemodificate. Textul astfel
transformat va fi afisat pe ecran.
Exemplu: daca de la tastatura se introduce textul: clasa
elev scoala se va afisa pe ecran: Clasa Elev Scoala
#include<iostream.h>
#include<string.h>
#include<conio.h>
#include<ctype.h>
void main()
{char cuv[100];
int i,n;
clrscr();
cin.get(cuv,30);
n=strlen(cuv);
cuv[0]=toupper(cuv[0]);
for(i=1;i<n;i++) if(cuv[i]==' '&&cuv[i+1]!='
')cuv[i+1]=toupper(cuv[i+1]);
cout<<cuv;
}
46. Se da o
inregistrare cu numele cerc,in care sunt stocate abscisa si ordonata centrului
cercului si raza acestuia. Pentru un n numar natural <100, citisi datele caracteristice
a n cercuri, sortasi structurile descrescator in funcsie de diametru si afisasi
coordonatele centrelor cercurilor in ordinea obsinuta dupa ordonare.
#include<iostream.h>
#include<conio.h>
struct cerc
{int x;
int y;
float r;
};
cerc c[100];
int n,i;
void citire()
{cout<<"Dati numarul de cercuri:";
cin>>n;
for(i=1;i<=n;i++){cout<<"Dati abscisa
centrului cercului:";
cin>>c[i].x;
cout<<"Dati ordonata centrului
cercului:";
cin>>c[i].y;
cout<<"Dati raza cercului:";
cin>>c[i].r;
}
}
void ordonare()
{int sw,aux1,aux2;
float aux3;
do{sw=1;
for(i=1;i<n;i++)
if(2*c[i].r>=2*c[i+1].r){sw=0;
aux1=c[i].x;
c[i].x=c[i+1].x;
c[i+1].x=aux1;
aux2=c[i].y;
c[i].y=c[i+1].y;
c[i+1].y=aux2;
aux3=c[i].r;
c[i].r=c[i+1].r;
c[i+1].r=aux3;
}
}while(sw==0);
}
void main()
{clrscr();
citire();
ordonare();
for(i=1;i<=n;i++)
cout<<"Cercul de
centrul("<<c[i].x<<","<<c[i].y<<")
si de raza "<<c[i].r<<endl;
getch();
}
47. Scrieti programul C/C++ care citeste de la tastatura un
numar de n siruri de cel mult 40 de caractere, formate doar din litere mici ale
alfabetului englez. Sa se verifice daca sirul de pe pozitia i se termina cu
acelasi caracter cu care incepe sirul de pe pozitia i+1, pentru i de la 1 la
n-1.
Se va afisa pe ecran mesajul Sirurile citite verifica
proprietatea sau Sirurile citite nu
verifica proprietatea
Exemplu: daca se citeste sirul n=4 si sirurile
proba
a
acoperit
tot
atunci pe ecran se va afisa: Sirurile citite verifica
proprietatea
#include <iostream>
#include <string>
using namespace std;
int main() {
char
curent[41], anterior[41];
int n;
cin>>n;
cin.get();
cin.get(curent,41);
int test=1;
for(int
i=1;i<=n-1;i++)
{
strcpy(anterior,curent);
cin.get();
cin.get(curent,41);
if(anterior[strlen(anterior)-1]!=curent[0])
test=0;
}
if(test)
cout<<"Sirurile
citite verifica proprietatea.";
else
cout<<"Sirurile
citite nu verifica proprietatea.";
return 0;
}
48. Fisierul text linii.txt este alcatuit din mai multe
linii de lungime variabila, pe fiecare linie gasindu-se cate un cuvant. Scrieti
un program care afiseaza linia (liniile) de lungime maxima.
Exemplu: Pentru fisierul „linii.txt”: Se va afisa:
informatica informatica
isoscel programator
triunghi
trapez
programator
caiet
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main() {
char
cuvant[200];
int max=0;
ifstream
f("linii.txt");
while(f.getline(cuvant,200))
if(strlen(cuvant)>max)
max=strlen(cuvant);
f.close();
ifstream
g("linii.txt");
while(g.getline(cuvant,200))
if(strlen(cuvant)==max)
cout<<cuvant<<endl;
g.close();
return 0;
}
49. Fie s1 si s2 doua siruri de caractere. Verificati daca
s2 este o codificare „shift” a lui s1(o codificare „shift” se obtine din s1
prin adagarea la codul ASCII al fiecarui caracter din s1 a unei constante k)
afisand in caz afirmativ valoarea lui k sau mesajul „NU” in caz contar.
Ex: Pentru sirurile s1=”acdrtu” si s2=”ceftvx” se afiseaza
k=2.
#include <iostream>
using namespace std;
int test(char *s1, char *s2)
{
if(strlen(s1)!=strlen(s2))
return
0;
int
d=s1[0]-s2[0];
for(int
i=1;i<=strlen(s1)-1;i++)
if(d!=s1[i]-s2[i])
return
0;
return 1;
}
int main() {
char
s1[30],s2[30];
cin.get(s1,30);
cin.get();
cin.get(s2,30);
cout<<test(s1,s2);
if(test(s1,s2))
cout<<' '<<s2[0]-s1[0];
return 0;
}
50. Scrieti un program care citeste de la tastatura un sir
de caractere ce contine litere mici si spatii. Afisati cuvantul cu cele mai
multe vocale (daca exista mai multe se va afisa unul singur). Exista cel pusin
un cuvant ce consine vocale.
#include <iostream>
#include <string>
using namespace std;
int nrv(char *s)
{
int k=0;
for(int
i=0;i<=strlen(s)-1;i++)
if(strchr("aeiouAEIOU",s[i]))
k++;
return k;
}
int main() {
char
propozite[1000], *cuvant, cuvant_max[20];
int
nrv_max=0;
cin.get(propozite,1000);
cuvant=strtok(propozite,"
");
while(cuvant)
{
int
aux=nrv(cuvant);
if(aux>nrv_max)
{
nrv_max=aux;
strcpy(cuvant_max,cuvant);
}
cuvant=strtok(NULL,"
");
}
cout<<cuvant_max;
return 0;
}
51. Scrieti programul C/C++ care citeste de la
tastatura un cuvant de cel mult 15
litere mici ale alfabetului englez si care afiseaza pe ecran, pe linii
distincte, cuvintele obtinute prin stergerea succesiva a vocalelor din cuvantul
citit, de la stanga la dreapta, ca in exemplu de mai jos:
Exemplu: Daca se citeste cuvantul examen se afiseaza:
xamen
xmen
xmn