PROBLEMA 1
Sa se afiseze elementele de valori egale a[i,j]=b[i,j] din doua matrici de aceeasi dimensiune introduse de la tastatura
#include <iostream>
#include <math.h>
using namespace std;
void main(){
int a[100][100], b[100][100], i,j, m,n;
//citim dimensiunile
cout <<"\n Dati m: ";
cin >>m;
cout <<" Dati n: ";
cin >>n;
//citim matricea a
for(i=1;i<=m;i++)
for(j=1;j<=n;j++){
cout <<"\ Dati a[" <<i <<"," <<j <<"]: ";
cin >>a[i][j];
}
//citim matricea b
for(i=1;i<=m;i++)
for(j=1;j<=n;j++){
cout <<"\ Dati b[" <<i <<"," <<j <<"]: ";
cin >>b[i][j];
}
cout <<" Elementele comune: ";
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if(abs(a[i][j])==abs(b[i][j])) cout <<abs(a[i][j]) <<" ";
}
PROBLEMA 2
Sa se afiseze elementele de indici [i,j] impari,precum si suma acestor elemente dintr-o matrice citita de la tastatura
#include <iostream>
using namespace std;
void main(){
int a[100][100], i,j, m,n, si=0,sp=0;
//citim dimensiunile
cout <<"\n Dati m: ";
cin >>m;
cout <<" Dati n: ";
cin >>n;
//citim matricea a
for(i=1;i<=m;i++)
for(j=1;j<=n;j++){
cout <<"\ Dati a[" <<i <<"," <<j <<"]: ";
cin >>a[i][j];
}
cout <<" Elementele de indici [i,j] impari: ";
for(i=1;i<=m;i=i+2)
for(j=1;j<=n;j=j+2){
si=si+a[i][j];
cout <<a[i][j] <<" ";
}
cout <<"\n Elementele de indici [i,j] pari: ";
for(i=2;i<=m;i=i+2)
for(j=2;j<=n;j=j+2){
sp=sp+a[i][j];
cout <<a[i][j] <<" ";
}
cout <<"\n Suma elementelor de indici [i,j] impari: " <<si;
cout <<"\n Suma elementelor de indici [i,j] pari: " <<sp;
}
PROBLEMA 3
Sa se afiseze indici [i,j] ai elementelor impare dintr-o matrice introdusa de la tastatura
#include <iostream>
using namespace std;
void main(){
int a[100][100], i,j, m,n;
//citim dimensiunile
cout <<"\n Dati m: ";
cin >>m;
cout <<" Dati n: ";
cin >>n;
//citim matricea a
for(i=1;i<=m;i++)
for(j=1;j<=n;j++){
cout <<"\ Dati a[" <<i <<"," <<j <<"]: ";
cin >>a[i][j];
}
cout <<" Indicii [i,j] ai elementelor pare: ";
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if (a[i][j]%2==0) cout <<"[" <<i <<"," <<j <<"] ";
cout <<"\n Indicii [i,j] ai elementelor impare: ";
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if (a[i][j]%2==1) cout <<"[" <<i <<"," <<j <<"] ";
}
PROBLEMA 4
Sa se calculeze si sa se afiseze produsul dintre o matrice de ordin mxn si un vector coloana de ordin nx1,introduse de la tastatura
#include <iostream>
using namespace std;
void main(){
int a[100][100], i,j, m,n, v[100], b[100];
//citim dimensiunile
cout <<"\n Dati m: ";
cin >>m;
cout <<" Dati n: ";
cin >>n;
//citim matricea a
for(i=1;i<=m;i++)
for(j=1;j<=n;j++){
cout <<"\ Dati a[" <<i <<"," <<j <<"]: ";
cin >>a[i][j];
}
//citim vectorul coloana v
for(i=1;i<=n;i++){
cout <<"\ Dati v[" <<i <<"]: ";
cin >>v[i];
}
//initializam vectorul rezultat b
for(i=1;i<=m;i++) b[i]=0;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++) b[i]=b[i]+v[j]*a[i][j];
//afisam rezultatul
for(i=1;i<=m;i++) cout <<"\n " <<b[i];
}
PROBLEMA 5
Sa se afiseze cel mai mic numar si cel mai mae dintre elementele imparalele unei matrici introduse de la tastatura
#include <iostream>
using namespace std;
void main(){
int a[100][100], i,j, m,n, mic, mare;
//citim dimensiunile
cout <<"\n Dati m: ";
cin >>m;
cout <<" Dati n: ";
cin >>n;
//citim matricea a
for(i=1;i<=m;i++)
for(j=1;j<=n;j++){
cout <<"\ Dati a[" <<i <<"," <<j <<"]: ";
cin >>a[i][j];
}
mic=mare=a[1][1];
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if(a[i][j]%2==1){
if(a[i][j]>mare) mare=a[i][j];
if(a[i][j]<mic) mic=a[i][j];
}
cout <<" Cel mai mic element impar: " <<mic;
cout <<"\n Cel mai mare element impar: " <<mare;
}
PROBLEMA 6
Sa se sorteze invers alfabetica cuvintele citite de la tastatura
#include<iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
void main(){
char s[250], x[100][20], aux[20];
int n=0, i, j;
//citim fraza
printf("\n Dati fraza: ");
gets(s);
//punem in sirul de stringuri x cuvintele din fraza
strcpy(x[0],"");
for(i=0;i<strlen(s);i++)
if(s[i]!=' '){
//convertirea unui caracter in string
char aa[1];
aa[0]=s[i];
//aa[1]='\0'; este optional
//concatenarea in elementul din sirul de stringuri
strcat(x[n],aa);
}
else
strcpy(x[++n],"");
//ordonam sirul x
for(i=0;i<=n;i++)
for(j=i+1;j<=n;j++)
if(strcmp(x[i],x[j])<0){
strcpy(aux,x[i]);
strcpy(x[i],x[j]);
strcpy(x[j],aux);
}
//afisam continutul sirului x
for(i=0;i<=n;i++){
puts(x[i]);
}
}
PROBLEMA 7
Sa se afiseze sub forma de tabel9ca mai jos) numarul de aparitii a fiecarei vocale majuscula si minuscula sunt considerate aceeasi vocala) intr-o fraza intodusa de la tastatura
#include <stdio.h>
#include <string.h>
void main(){
char *s, ss[250];
int x[5];
int i;
//citim fraza
printf("\n Dati fraza: ");
gets(ss);
//convertirea in majuscule
s=strupr(ss);
//initializare sir
for(i=0;i<5;i++) x[i]=0;
//x: 0-A, 1-E, 2-I, 3-O, 4-U
for(i=0;i<strlen(s);i++){
switch(s[i]){
case 'A': x[0]++; break;
case 'E': x[1]++; break;
case 'I': x[2]++; break;
case 'O': x[3]++; break;
case 'U': x[4]++; break;
}
}
//afisarea tabelului cerut
printf("\n A E I O U\n");
for(i=0;i<5;i++) printf("%5d",x[i]);
}
PROBLEMA 8
Sa se afiseze numarul de aparitii a cuvantului 'examen'' intr-o fraza intodusa de la tastatura
#include <stdio.h>
#include <string.h>
void main(){
char s[250], *ss;
int na=0;
//citim fraza
printf("\n Dati fraza: ");
gets(s);
//calculez numar aparitii cuvant "examen"
ss=s;
while(ss!=NULL){
ss=strstr(ss,"examen");
if(ss!=NULL){
na++;
ss=ss+strlen("examen");
}
}
printf("%d",na);
}
PROBLEMA 9
Sa se introduca de la tastatura un sir de valori intregi.Sa se construiasca doua liste simple inlantuite,una continand numerele pare si cealanta numere impare din sirul dat si sa se afiseze continutul listelor
#include <iostream>
using namespace std;
void main(){
int a[100], i,n;
typedef struct lista{
int inf;
lista* leg;
} lis;
lis *pn, *pp, *un, *up, *p;
//citim sirul
cout <<"\n Dati n: ";
cin >>n;
for(i=1;i<=n;i++){
cout <<"\ Dati a[" <<i <<"]: ";
cin >>a[i];
}
//crearea celor doua liste
pn=NULL; pp=NULL;
for(i=1;i<=n;i++){
//aloc pointer pentru lista
p=(lis *) malloc(sizeof(lis));
p->leg=NULL;
p->inf=a[i];
//testez introducerea in una din cele doua liste
if(a[i]%2==0)
if(pp==NULL) pp=up=p;
else{ up->leg=p; up=p;}
else
if(pn==NULL) pn=un=p;
else{ un->leg=p; un=p;}
}
//afisarea celor doua liste
cout <<"\n Lista :impare ";
p=pn;
while(p!=NULL){
cout <<p->inf <<" ";
p=p->leg;
}
cout <<"\n Lista pare: ";
p=pp;
while(p!=NULL){
cout <<p->inf <<" ";
p=p->leg;
}
}
PROBLEMA 10
Sa se introduca de la tastatura un sir de valori intregi.Sa se construiasca o lista simplu inlantuita care sa contina valorile pozitive ale sirului dat.Sa se sorteze lista in ordine crescatoare.Se vor afisa atat lista initiala cat si cea sortata.
#include <iostream>
using namespace std;
void main(){
int a[100], i,n;
typedef struct lista{
int inf;
lista* leg;
} lis;
lis *pp, *up, *p;
//citim sirul
cout <<"\n Dati n: ";
cin >>n;
for(i=1;i<=n;i++){
cout <<"\ Dati a[" <<i <<"]: ";
cin >>a[i];
}
//crearea lista
pp=NULL;
for(i=1;i<=n;i++){
//aloc pointer pentru lista
p=(lis *) malloc(sizeof(lis));
p->leg=NULL;
p->inf=a[i];
//introduc in lista elementele pozitive
if(a[i]>0 )
if(pp==NULL) pp=up=p;
else{ up->leg=p; up=p;}
}
//afisarea listei
cout <<"\n Lista pozitivelor: ";
p=pp;
while(p!=NULL){
cout <<p->inf <<" ";
p=p->leg;
}
//ordonarea listei
do{
n=0;
p=pp;
while(p->leg!=NULL){
if(p->inf>p->leg->inf){
i=p->inf;
p->inf=p->leg->inf;
p->leg->inf=i;
n=1;
}
p=p->leg;
}
}while(n==1);
//afisarea listei ordonate
cout <<"\n Lista pozitivelor ordonate: ";
p=pp;
while(p!=NULL){
cout <<p->inf <<" ";
p=p->leg;
}
}
PROBLEMA 11
Sa se scrie un program care sa creeze o lista simplu inlantuita cu un numar n (citit de la tastatura) de numere intregi generate aleatoriu,sorteaza lista si o afiseaza si apoi sterge toate elementele listei.Valorile numerelor aleatoriu cuprinse intre 0 si n
#include <iostream>
#include <stdlib.h>
#include<time.h>
using namespace std;
void main(){
//randomize();
srand((unsigned)time(NULL) );
int n,i;
typedef struct lista{
int inf;
lista* leg;
} lis;
lis *pp, *up, *p;
//citim n
cout <<"\n Dati n: ";
cin >>n;
//crearea listei
pp=NULL;
for(i=1;i<=n;i++){
//aloc pointer pentru lista
p=(lis *) malloc(sizeof(lis));
p->leg=NULL;
p->inf=rand();
//introduc in lista elementul
if(pp==NULL) pp=up=p;
else{ up->leg=p; up=p;}
}
//ordonarea listei
do{
n=0;
p=pp;
while(p->leg!=NULL){
if(p->inf>p->leg->inf){
i=p->inf;
p->inf=p->leg->inf;
p->leg->inf=i;
n=1;
}
p=p->leg;
}
}while(n==1);
//afisarea listei ordonate
cout <<"\n Lista ordonata: ";
p=pp;
while(p!=NULL){
cout <<p->inf <<" ";
p=p->leg;
}
//distrugerea listei
while(pp!=NULL){
p=pp;
pp=p->leg;
free(p);
}
}
PROBLEMA 12
Sa se calculeze si sa se afiseze distanta dintre doua puncte de coordonate carteziene (x1,y1,z1),(x2,y2,z2),introduse de la tastatura.Se vor folosi structuri numite punct 3D obtinute prin gruparea a 3 valori float.
#include <iostream>
#include <math.h>
using namespace std;
void main(){
// int n,i;
float d;
typedef struct punct{
float x,y,z;
} punct3d;
punct3d a1,a2;
//citim cele doua puncte
cout <<"\n Dati a1.x: ";
cin >>a1.x;
cout <<" Dati a1.y: ";
cin >>a1.y;
cout <<" Dati a1.z: ";
cin >>a1.z;
cout <<" Dati a2.x: ";
cin >>a2.x;
cout <<" Dati a2.y: ";
cin >>a2.y;
cout <<" Dati a2.z: ";
cin >>a2.z;
//calculam distanta
d=sqrt((a1.x-a2.x)*(a1.x-a2.x)+(a1.y-a2.y)*(a1.y-a2.y)+(a1.z-a2.z)*(a1.z-a2.z));
cout <<d;
}
PROBLEMA 13
Sa se realizeze un program care sa compacteze la stanga un sir de caractere,elimind separatorii9prin separator se intelege un spatiu sau un tabulator orizontal (,\,)
#include<iostream>
#include<conio.h>
#include<stdio.h>
using namespace std;
char f[100];
int i=0,j=0;
int main()
{
cin.get(f,100);
j=0;
for(;f[i];i++)
if (f[i]!=' ' && f[i]!='"' && f[i]!='/' && f[i]!=',' && f[i]!='.' && f[i]!='\t')
{
f[j]=f[i];
j++;
}
// se adauga la sfarsit terminatorul de sir
f[j]='\0';
puts("Textul compactat este : ");
puts(f);
return 0;
}
PROBLEMA 14
Sa se elaboreze un program care citeste dintr-un fisier de tip text un set de numere reale si afiseaza pe ecran cea mai mica,respectiv cea mai mare dintre valorile citite.
#include <iostream>
#include <stdio.h>
using namespace std;
void main(){
int mic, mare, x;
FILE *pf;
pf=fopen("test.txt","r");
fscanf(pf,"%d",&x);
mic=mare=x;
while(feof(pf)==0){
fscanf(pf,"%d",&x);
if(mic>x) mic=x;
if(mare<x) mare=x;
}
fclose(pf);
cout <<"\n Cel mai mare: " <<mare;
cout <<"\n Cel mai mic: " <<mic;
}
PROBLEMA 15
Sa se scrie un program care realizeaza afisarea pe ecran a numerelor intregi cuprinse intre doua valori a si b citite de la tastatura.
#include <iostream>
#include <stdio.h>
using namespace std;
void main(){
int x, a[200], n=0, i, aux;
FILE *pf;
pf=fopen("test.txt","r");
while(feof(pf)==0){
fscanf(pf,"%d",&x);
a[++n]=x;
}
fclose(pf);
//ordonarea
for(x=1;x<=n;x++)
for(i=x+1;i<=n;i++)
if(a[x]>a[i]){
aux=a[x]; a[x]=a[i]; a[i]=aux;
}
//scrierea sirului in fisier
pf=fopen("test.txt","w");
for(i=1;i<=n;i++){
if(i%5==0) fprintf(pf,"\n");
fprintf(pf,"%d ",a[i]);
}
fclose(pf);
}
PROBLEMA 16
Sa se scrie un program care citeste a,b,c ale laturilor unui triunghi,calculeaza si afiseaza aria triunghiului respectiv (aria=sqrt(p*(p-a)*(p-b)*(p-c)),unde p este semiperimetru triunghiului
#include<conio.h>
#include<iostream>
#include<math.h>
#include<stdio.h>
using namespace std;
float a,b,c,p,aria;
int main()
{
cout<<"Lungimea lui a : "; cin>>a;
cout<<"Lungimea lui b : "; cin>>b;
cout<<"Lungimea lui c : "; cin>>c;
if (a>0 && b>0 && c>0 && a<b+c && b<a+c && c<a+b)
{
p=(a+b+c) /2;
aria=sqrt(p*(p-a)*(p-b)*(p-c));
printf("%0.2f",aria);
}
else
cout<<"Laturile nu formeaza un triunghi !!!"<<endl;
return 0;
}
PROBLEMA 17
Sa se scrie un program care citeste o succesiune de cuvinte,le sorteaza in ordine alfabetica,apoi le afiseaza in ordinea respectiva.
#include<conio.h>
#include<iostream>
#include<string.h>
using namespace std;
char cuv[100][20],aux[20];
int n,i;
int main()
{
cout<<"n=";
cin>>n;
// se pun cuvintele intr-un sir
for (int i=1;i<=n;i++)
{
cout<<"Cuvantul "<<i<<" ";
cin>>cuv[i];
}
// se sorteaza descrescator sirul de cuvinte
for (i=1;i<n;i++)
for (int j=i+1;j<=n;j++)
if (strcmp(cuv[i],cuv[j])<0)
{
strcpy(aux,cuv[i]);
strcpy(cuv[i],cuv[j]);
strcpy(cuv[j],aux);
}
// se afiseaza sirul sortat
cout<<"Cuvintele ordonate descrescator :"<<endl;
for (i=1;i<=n;i++)
cout<<cuv[i]<<endl;
return 0;
}
PROBLEMA 18
#include<conio.h>
#include<iostream>
using namespace std;
long int data,an,zi,luna;
int bisect=0,valid=1,zile[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char luni[][20]={"","Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie",
"August","Septembrie","Octombrie","Noiembrie","Decembrie"};
int main()
{
cout<<"Introduceti data calendaristica :";
cin>>data;
if (data>=31129999 || data<=1011000) valid=0;
if (valid)
{
//se extrage anul din data calendaristica
an=data % 10000;
data=data/10000;
// se verifica daca este bisect
if ((an % 100 ==0 ||an %4 ==0) && an % 400!=0) bisect=1;
// se extrage luna din data calendaristica ramasa
luna=data % 100;
// se verifica daca luna este corecta
if (luna<1 || luna>12) valid=0;
// se extrage ziua
if (valid) zi=data / 100;
// se verifica daca ziua este corecta pentru anii nebisecti
if (luna!=2 && (zi>zile[luna] || zi<1)) valid=0;
if (luna==2 && bisect && (zi>29 || zi<1)) valid=0;
if (luna==2 && !bisect && (zi>29 || zi<1)) valid=0;
}
if (valid)
{
if (zi<10)cout<<'0'<<zi<<' ';
else cout<<zi<<' ';
cout<<luni[luna]<<' '<<an<<endl;
}
else cout<<"Data este invalida";
return 0;
}