Documente Academic
Documente Profesional
Documente Cultură
Subiecte programare
34. Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (1<
=n<=20), elementele unei matrice cu n linii şi n coloane, numere întregi din int
ervalul [-100, 100] şi afişează pe ecran m1 şi m2, unde m1 este media aritmetic
ă a elementelor strict pozitive ale matricei, situate deasupra diagonalei princi
pale, iar m2 este media aritmetică a elementelor strict pozitive ale matricei, s
ituate sub diagonala principală, ca în exemplu. Cele două medii se consideră ega
le cu 0 dacă nu există valori strict pozitive în zonele corespunzătoare.
Exemplu: pentru n=4 şi matricea alăturată se afişează
m1=2.75, calculată din elementele aflate deasupra diagonalei
principale, şi m2=2.5, calculată din elementele aflate sub diagonala principală
.
-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 pri
ncipale este "<<sumaunu();
cout<<"Media aritmetica a elementelor strict pozitive de dedesubtul diagonalei p
rincipale este "<<sumadoi();
getch();
}
37. Scrieţi un program care citeşte de la tastatură două numere naturale nenule
m şi n şi care construieşte în memorie şi apoi afişează o matrice A cu m linii ş
i n coloane cu proprietatea că fiecare element aij memorează cea mai mică dintre
valorile indicilor i şi j. Matricea se va afişa în fișierul matrice.txt, câte o
linie a matricei pe câte o linie a ecranului, elementele fiecărei linii fiind s
eparate prin câte un spaţiu.
Exemplu: Pentru m=4 şi n=5 fișierul va con ine matricea alăturată
#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 tastatură doi vectori cu câte n elemente. Afişaţi ultima cif
ră a sumei fără 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. Scrie i un program care construiește în memorie o matrice pătratică de ordin
n cu elemente numere naturale astfel încât pe diagonala principală să existe nu
mai elemente egale cu 1, elementele de pe cele două « semidiagonale » paralele c
u diagonala principală și alăturate diagonalei principale să fie toate egale cu
2, elementele de pe urmatoarele două « semidiagonale » să fie egale cu 3,etc.
Valoarea lui n se citeste de la tastatură, iar matricea se va afișa pe ecran.
Pentru n=4 se va afișa 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). Să se obtină din a vectorul b
care să indeplinească condi iile :
- 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 c
and 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();
}
42. Scrieţi programul C, C++ sau Pascal, care citeşte de la tastatură un şir s d
e cel mult 30 de caractere şi un caracter c. Programul determină triplarea fiecă
rei apariţii a caracterului c în s şi scrie noul şir obţinut în fişierul text fi
nal.out. (neintensiv: șirul poate fi scris în fișier fără a fi construit efectiv
în memorie)
De exemplu, dacă se citeşte şirul : ciocarlie şi caracterul c atunci fişierul va
conţine şirul : 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();
}
44. Defini i structura frac ie care memorează în câmpul a al structurii numărăto
rul, iar în câmpul b numitorul frac iei. Citi i numitorul și numărătorul a n fra
c ii. Pentru fiecare frac ie să se verifice dacă este ireductibila, în caz afirm
ativ să se afișeze, iar în caz contrar să se afișeze numitorul și numărătorul du
pă 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 consideră un text cu maximum 255 de caractere în care cuvintele sunt sepa
rate prin unul sau mai multe spaţii. Primul caracter din textul citit este o lit
eră, iar cuvintele sunt formate numai din litere mici ale alfabetului englez. Sc
rieţi un program C/C++ care citeşte de la tastatură textul şi îl transformă înlo
cuind prima literă a fiecărui cuvânt cu litera mare corespunzătoare, restul cara
cterelor rămânând nemodificate. Textul astfel transformat va fi afişat pe ecran.
#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;
}
Exemplu: dacă de la tastatură se introduce textul: clasă elev şcoală se va afişa
pe ecran: Clasă Elev Şcoală
46. Se dă o înregistrare cu numele cerc,în care sunt stocate abscisa și ordonat
a centrului cercului și raza acestuia. Pentru un n număr natural <100, citi i da
tele caracteristice a n cercuri, sorta i structurile descrescător în func ie de
diametru și afișa i coordonatele centrelor cercurilor în ordinea ob inută după o
rdonare.
#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();
49. Fie s1 şi s2 două şiruri de caractere. Verificaţi dacă s2 este o codificare
„shift” a lui s1(o codificare „shift” se obţine din s1 prin adăgarea la codul AS
CII al fiecărui caracter din s1 a unei constante k) afişând în caz afirmativ val
oarea lui k sau mesajul „NU” în caz contar.
Ex: Pentru şirurile s1=”acdrtu” şi s2=”ceftvx” se afişează k=2.
#include<string.h>
#include<stdlib.h>
#include<iostream.h>
#include<conio.h>
int n,i;
char s[100],c[100],cuv[100];
void citire()
{cin.getline(s,30);
cin.get(c,30);
}
void main()
{int t,k=0;
clrscr();
citire();
t=c[0]-s[0];
for(i=0;i<strlen(s)-1;i++)cuv[i]=s[i]+t;
cout<<cuv;
if(strcmp(cuv,c)==0) cout<<"Da"<<t;
else cout<<"Nu";
getch();
}
51. Scrieţi programul C/C++ care citeşte de la tastatură un cuvânt de cel mult
15 litere mici ale alfabetului englez şi care afişează pe ecran, pe linii distin
cte, cuvintele obţinute prin ştergerea succesivă a vocalelor din cuvântul citit
, de la stânga la dreapta, ca în exemplu de mai jos:
Exemplu: Dacă se citeşte cuvântul examen se afişează:
xamen
xmen
xmn
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{clrscr();
char cuv[100],voc[]="a,e,i,o,u";
int i,n,j;
cout<<"Dati cuvantul"<<endl;
cin.get(cuv,30);
n=strlen(cuv);
for(i=0;i<n;i++)if(strchr(voc,cuv[i])){for(j=i;j<n;j++)cuv[j]=cuv[j+1];
cuv[n-1]=NULL;
cout<<cuv<<endl;
n--;
i--;
}
getch();
}