Sunteți pe pagina 1din 45

IP Centrul de Excelență în Economie și Finanțe

Catedra Informatica

PORTOFOLIU
la unitatea de curs
Programarea Procedurală

Elaborat: Verificat:
Eleva grupei AAW2312 Burca Eugenia,
Nume Prenume master în informatică,
Diana Curicheri profesor de informatică.

Chișinău, 2024
Cuprins

1. Programarea-pasiunea mea. 4
2. Tipul de date fișier. Operații de specifice tipului de date fișier 5
2.1 În cadrul orelor de teorie 5
2.2 Probleleme rezolvate în cadrul lecției de laborator și tema pentru acasă 5
3. Metode de sortare 7
3.1. În cadrul orelor de teorie 7
3.2. În cadrul orelor de laborator și tema pentru acasă 7
4. Structuri. Tablouri de structuri. 8
4.1 Structuri. 8
4.1.1 În cadrul orelor de teorie 8
4.1.2 În cadrul orelor de laborator și tema pentru acasă 8
4.2 Tablouri de structuri. 8
4.2.1 În cadrul orelor de teorie 8
4.2.2 În cadrul orelor de laborator și tema pentru acasă 8
5. Pointeri. Variabile Pointeri. 9
5.1 Variabile Pointeri. 9
5.1.1 În cadrul orelor de teorie 9
5.1.2 În cadrul orelor de laborator și tema pentru acasă 9
5.2 Pointeri și tablouri. 9
5.2.1 În cadrul orelor de teorie 9
5.2.2 În cadrul orelor de laborator și tema pentru acasă 9
5.3 Alocarea dinamică a memoriei pentru tablouri. Eliberarea memoriei. 9
5.3.1 În cadrul orelor de teorie 9
5.3.2 În cadrul orelor de laborator și tema pentru acasă 9
6. Subprograme. 10
6.1 Subprograme 1 10
6.1.1 În cadrul orelor de teorie 10
6.1.2 În cadrul orelor de laborator și tema pentru acasă 10
6.2 Subprograme 2 10
6.2.1 În cadrul orelor de teorie 10
6.2.2 În cadrul orelor de laborator și tema pentru acasă 10
6.3 Subprograme (parametri de tip tablou) 10
6.3.1 În cadrul orelor de teorie 10
6.3.2 În cadrul orelor de laborator și tema pentru acasă 10

-2-
6.4 Subprograme recursive. 10
6.4.1 În cadrul orelor de teorie 10
6.4.2 În cadrul orelor de laborator și tema pentru acasă 10
6.5 Subprograme. Particularități în utilizare. 10
6.5.1 În cadrul orelor de teorie 10
6.5.2 Realizare proiect propriu 11
DECLARAŢIA PRIVIND ASUMAREA RĂSPUNDERII 12

-3-
1. Programarea-pasiunea mea.

conform însărcinării

-4-
2. Tipul de date fișier. Operații de specifice tipului de date fișier

2.1 În cadrul orelor de teorie

Plasează condiția, codul și execuția de la problemele rezolvate la teorie și din prezentare

Ca de exemplu:

Programa 5
Condiție
Lunar Ionel primește de la părinți A lei pentru a achita factura pentru consumul de gaz şi
apă. În luna curentă consumul de gaze a fost de 43.23 m 3, iar de apă de 67.78 m3. De la tastatură se
citește suma de bani primită de Ionel, costul unui m 3 de gaz și costul unui m3 de apă. Să se
elaboreze un program prin intermediul căruia se va afișa la ecran suma ce necesită a fi achitată de
către Ionel, cât și suma de bani rămasă.

Implementare în C++
#include<iostream>
#include<iomanip>
using namespace std;
float A,apa,gaz,rest,f;
const float g=43.23;
const float a=67.78;
main(){
cout<<"Indicati suma initiala ";cin>>A;
cout<<"Dati costul pentru un metru cub de gaz";
cin>>gaz;
cout<<"Dati costul pentru un metru cub de apa";
cin>>apa;
f=gaz*g+apa*a;
rest=A-f;
cout<<"Suma pentru achitarea facturii=";
cout<<setprecision(2)<<f<<endl;
cout<<"Lui Ionel iau ramas";
cout<<setprecision(2)<<rest<<" lei";
}

Rezultatul execuției

2.2 Probleleme rezolvate în cadrul lecției de laborator și tema pentru acasă

-5-
se includ toate probleme de la orele de laborator + prezentarea de pe classroom

1)Fişierul date.in conţine 3 valori separate printr-un singur spaţiu, care reprezintă vârsta, înălţimea şi genul unei
persoane. Să se scrie un program care determină greutatea ideală a unei persoane cunoscând înălţimea, vârsta şi
genul persoanei (f sau m). Formulele de calcul sunt: Gmasculin = 50 + 0.75 * (inaltime - 150) + (varsta - 20) / 4,
Gfeminin = Gmasculin – 10, unde înălţimea este exprimată în cm şi vârsta în ani.. La ecran se va afişa greutatea
ideală. Toate datele despre persoană (vârsta, înălţimea, genul, greutatea ideală) se vor scrie în fişierul date.out.

#include <iostream>
#include <fstream>

using namespace std;


int main()
{
int v,h;
char g;
float gi;
fstream f;

f.open("date.in", ios::in);
f>>v>>h>>g;
f.close();

gi=50+0.75*(h-150)+(v-20)/4;

f.open("date.out",ios::out);
if(g=='m')
{
cout<<"greutatea ideala este:"<<gi<<endl;
f<<"greutatea ideala este:"<<gi<<endl;
}
else { cout<<"greutatea ideala este:"<<gi-10<<endl;
f<<"greutatea ideala este:"<<gi-10<<endl;

return 0;
}}

-6-
2) Fişierul date.in conţine 3 numere întregi separate printr-un singur spaţiu. Să se elaboreze un program care va afişa
aceste numere unul sub altul, afișând în dreptul fiecăruia unul dintre cuvintele PAR sau IMPAR. Rezultatul va fi afişat la
ecran cât şi în fişierul date.out
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
fstream f;
int n1,n2,n3;
f.open("date.in", ios::in);
f>>n1>>n2>>n3;

cout<<"Introduceti numerele"<<endl;
f.close();
f.open("date.out", ios::out | ios::app);

f<<n1<<" ";
if(n1 %2==0)
f<<" PAR"<<endl;
else f<<"IMPAR"<<endl;

f<<n2<<" ";
if(n2 %2==0)
f<<" PAR"<<endl;
else f<<"IMPAR"<<endl;

f<<n3<<" ";
if(n3 %2==0)
f<<" PAR"<<endl;
else f<<"IMPAR"<<endl;
f.close();
return 0;
}

-7-
3) Fişierul date.in conţine 3 numere întregi distincte separate printr-un singur spaţiu. Să se elaboreze un program care
va specifica care dintre numere are valoare maximală, minimală şi care nu este nici minim nici maxim. Rezultatul va fi
afişat la ecran cât şi în fişierul date.out.
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
fstream f;
float n1,n2,n3,maxim;
f.open("date.in", ios::in);
f>>n1>>n2>>n3;

cout<<"Introduceti numerele"<<endl;
f.close();
f.open("date.out", ios::out );

if (n1>n2 && n1>n3) f<<"max="<<n1<<endl;


else if (n2>n1 && n2>n3) f<<"max="<<n2<<endl;
else f<<"max="<<n3<<endl;
if (n1<n2 && n1<n3) f<<"min="<<n1<<endl;
else if (n2<n1 && n2<n3) f<<"min="<<n2<<endl;
else f<<"min="<<n3<<endl;
if ((n1 < n2 && n2 < n3) || (n3 < n2 && n2 < n1))
f <<n2 << endl;
else if ((n2 < n1 && n1 < n3) || (n3 < n1 && n1 < n2))
f << n1 << endl;
else
f << n3 << endl;

f.close();
return 0;
}

-8-
4) Fişierul date.in conţine 12 numere întregi separate printr-un singur spaţiu care reprezintă temperaturile medii ale
lunilor unui an, ca numere întregi. Să se afişeze cu două zecimale media anuală a temperaturilor pozitive şi a celor
negative. Rezultatul va fi afişat la ecran cât şi în fişierul date.out.

#include <iostream>
#include <fstream>
#include<iomanip>

using namespace std;

int main()
{
ifstream f("date.in");
ofstream t("date.out");
int i,n;
float s=0,d=0,medp,medn,a=0,b=0;

for(i=1; i<=12;i++){
f>>n;
if(n>0) {
s+=n;
a++;
}
else if(n<0){
d+=n;
b++;
}}

t<<"media pozitiva="<<fixed<<setprecision(2)<<s/a<<endl;
t<<"media negativa="<<fixed<<setprecision(2)<<d/b<<endl;
f.close();
return 0;

-9-
5) Fişierul date.in conţine n numere întregi separate printr-un singur spaţiu. Primul număr reprezintă numărul de
numere din fişier. Datele din fişier reprezintă mediile a n elevi, ca numere reale. Să se afişeze cea mai mare şi cea mai
mică medie. Să se verifice dacă sunt corigenţi. Rezultatul va fi afişat la ecran cât şi în fişierul date.out
Exemplu : Date de intrare 4 9.50 4.25 9.66 6.33 Date de ieşire max=9.66 min=4.25
1 corigent.
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
ifstream a("date.in");
ofstream b("date.out");
int n,i,c=0;
float med, maxi=0,mini=11;
a>>n;

cout<<"numarul de elevi "<<n<<" si mediile acestora"<<endl;


b<<"numarul de elevi "<<n<<" si mediile acestora"<<endl;
for(i=1;i<=n;i++){
a>>med;

cout<<med<<endl;
b<<med<<endl;
if(med>maxi)maxi=med;
if(med<mini)mini=med;
if(med<5)c++;
}
cout<<"max="<<maxi<<endl;
cout<<"min="<<mini<<endl;
cout<<"corigenti "<<c;
b<<"max="<<maxi<<endl;

return 0;
}

-10-
6) Fişierul date.in conţine n numere întregi separate printr-un singur spaţiu. Primul număr reprezintă numărul de
numere din fişier. Să se afişeze numărul minimal, maximal, numărul de elemente pare, impare şi media numerelor cu
două zecimale. Rezultatul va fi afişat la ecran cât şi în fişierul date.out

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;

int main()
{
ifstream a("date.in");
ofstream b("date.out");
int i,n, nmin, nmax, pare=0, impare=0,c;
float med,sum;

a>>n;
b<<"numarul de numere"<<" "<<n<<endl;
cout<<"numarul de numere"<<n<<endl;
b<<"numerele"<<endl;
cout<<"numerele"<<endl;

for (i=0; i<n; i++){


a>>c;
b<<c<<endl;
cout<<c<<endl;

if(c>nmax) nmax=c;
if(c<nmin) nmin=c;
if(c>0) pare++;
else if (c<0)impare++;
sum+=c;
} med=sum/n;

cout<<"numarul minim"<<nmin<<endl;
cout<<"numarul maxim"<<nmax<<endl;
cout<<"numarul de elemente pare"<<pare<<endl;
cout<<"numarul de elemente impare"<<impare<<endl;
cout<<"media numerelor"<<fixed<<setprecision(2)<<med<<endl;

b<<"numarul minim"<<" "<<nmin<<endl;


b<<"numarul maxim"<<" "<<nmax<<endl;
b<<"numarul de elemente pare"<<" "<<pare<<endl;
b<<"numarul de elemente impare"<<" "<<impare<<endl;
b<<"media numerelor"<<" "<<fixed<<setprecision(2)<<med<<endl;

a.close();
b.close();

return 0;
}

-11-
-12-
7) Fişierul date.in conţine elementele unei matrice. În prima linie sunt scrise numărul de lini şi de coloane separate
printr-un spaţiu. Pe următoarele linii sunt scrise elementele matricei. Elaboraţi un program care va afişa la ecran şi va
scrie în fişierul date.out elementele matricei şi poziţiile pe care se află valoarea maximală.

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;

int main()
{
ifstream a("date.in");
ofstream b("date.out");
int i, n ,m, j, r[100][100],maxi=-100000, l,c;
a>>n>>m;
b<<" nr de linii"<<" "<<n<<" "<<"nr de coloane"<<" "<<m<<endl;

for (i=0; i<n; i++){


for (j=0; j<m; j++){

a>>r[i][j];}}

for (i=0; i<n; i++){


for (j=0; j<m; j++){ b<<setw(6)<<r[i][j];

if (r[i][j]>maxi){l=i; c=j;}} b<<endl; }


b<<"elementul maximal se afla pe linia"<<" "<<l<<" "<<"coloana"<<" "<<c;
a.close();
b.close();

return 0;
}

-13-
8) Fişierul date.in conţine elementele unei matrice. În prima linie sunt scrise numărul de lini şi de coloane separate
printr-un spaţiu. Pe următoarele linii sunt scrise elementele matricei. Elaboraţi un program care va afişa la ecran si va
scrie în fişierul date.out elementele matricei şi suma de pe fiecare linie.
#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

int main() {
ifstream a("date.in");
ofstream b("date.out");

int i, j, n, m, tab[100][100], suma;

a >> n >> m;

b << "numarul de linii " << n << " si numarul de coloane " << m << endl;

for (i = 0; i < n; i++) {


for (j = 0; j < m; j++) {
a >> tab[i][j];
} }

for (i = 0; i < n; i++) {


suma=0;
for (j = 0; j < m; j++) {
b << setw(6) << tab[i][j];
suma+=tab[i][j]; }
b<<endl;
b << "suma:" <<suma<< endl;
}
a.close();
b.close();

return 0;
}

-14-
9) Fişierul date.in conţine elementele unei matrice. În prima linie sunt scrise numărul de lini şi de coloane separate
printr-un spaţiu. Pe următoarele linii sunt scrise elementele matricei. Elaboraţi un program care va afişa la ecran si va
scrie în fişierul date.out elementele matricei şi minimul de pe fiecare coloană.

#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;


int main() {
ifstream a("date.in");
ofstream b("date.out");

int i, j, n, m, tab[100][100];
a >> n >> m;
b << "numarul de linii " << n << " si numarul de coloane " << m << endl;
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
a >> tab[i][j]; } }
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
b << setw(6) << tab[i][j]; }
b << endl; }
b << "valorile minime" << endl;
for (i = 0; i < n; i++) {
int mini = 100000;
for (j = 0; j < m; j++) {
if (tab[i][j] < mini)
mini = tab[i][j]; }
b << setw(6) << mini << " ";
}
a.close();
b.close();

return 0;
}

-15-
10) Fişierul date.in conţine un şir de caractere. Elaboraţi un program care va determina numărul de majuscule din şir.
Rezultatul va fi afişat la ecran cât şi în fişierul date.out

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int main() {
int n = 0, i;
char f[1000];

ifstream a("date.in");
ofstream b("date.out");
a >> f;
b << "sir introdus:" << endl << f << endl;

for (i = 0; i < strlen(f); i++) {


if (f[i] < 91 && f[i] > 64) {
n++;
}
}
b << "numarul de majuscule in sir este " << n << endl;
a.close();
b.close();

return 0;
}

-16-
11) Fişierul date.in conţine un şir de caractere. De la tastatură se citeşte un şir de caractere. Elaboraţi un program care
va înlocui cifrele din şir cu semnul +. Rezultatul va fi afişat la ecran cât şi în fişierul date.out

#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string.h>

using namespace std;

int main()
{
char c[100];
fstream f,g;
int i=0;
f.open("date.in", ios::in);
g.open("date.out", ios::out);
while(!f.eof()){
f.get(c[i]);
if(c[i]>=48 && c[i]<=57){c[i]='+';}
g<<c[i];
i++;
}
f.close();
g.close();

return 0;
}

-17-
12) Fişierul date.in conţine un şir de caractere. De la tastatură se citeşte un şir de caractere. Elaboraţi un program care
va afişa doar cifrele din şir. Rezultatul va fi afişat la ecran cât şi în fişierul date.out

#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string.h>

using namespace std;

int main()
{
char c[100];
fstream f,g;
int i=0;
f.open("date.in", ios::in);
g.open("date.out", ios::out);
while(!f.eof()){
f.get(c[i]);
if(c[i]>=48 && c[i]<=57)
g<<c[i];
i++;
}
f.close();
g.close();

return 0;
}

-18-
13) Fişierul date.in conţine un şir de caractere. De la tastatură se citeşte un şir de caractere. Elaboraţi un program care
va determina numărul de cifre din şir. Rezultatul va fi afişat la ecran cât şi în fişierul date.out

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int main() {
char f[1000];
int i, n = 0;
ifstream a("date.in");
ofstream b("date.out");
a >> f;
for (i = 0; i < strlen(f); i++) {
if (f[i] >= '0' && f[i] <= '9') {
n++;
}
}
b <<n;
a.close();
b.close();

return 0;
}

-19-
14) Fişierul date.in conţine un şir de caractere. De la tastatură se citeşte un şir de caractere. Elaboraţi un program care
va înlocui vocalele din şir cu spaţiu. Rezultatul va fi afişat la ecran cât şi în fişierul date.out

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int main() {
char f[1000];
int i, n = 0;
ifstream a("date.in");
ofstream b("date.out");
while(a.get(f[i])){

if (f[i] == 'a' || f[i] == 'e' || f[i] == 'i' || f[i] == 'o' || f[i] == 'u' ||
f[i] == 'A' || f[i] == 'E' || f[i] == 'I' || f[i] == 'O' || f[i] == 'U') {
f[i] = ' ';
}
b <<f[i];
n++;
}
b <<f;
a.close();
b.close();

return 0;
}

-20-
15) Fişierul date.in conţine un şir de caractere. De la tastatură se citeşte un şir de caractere. Elaboraţi un program care
va determina numărul de caractere speciale (paranteze, operatori aritmetici) din şir. Rezultatul va fi afişat la ecran cât
şi în fişierul date.out

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int main() {
char f[1000];
int i, n = 0;
ifstream a("date.in");
ofstream b("date.out");
a>>f;
for(i=0;i<strlen(f); i++) {
if ((f[i]>='!' && f[i]<='/') ||
(f[i]>=':' && f[i]<='@') ||
( f[i]>='[' && f[i]<='`')||
( f[i]>='{' && f[i]<='~')) {
n++;
}
}
b <<n;
a.close();
b.close();

return 0;
}

-21-
16) În fişierul numere.in sunt scrise mai multe numere întregi. Elaboraţi un program prin intermediul căruia se vor
adăuga numerele pare din fişierul numere.in în fişierul date.txt.

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int main() {
int n ;
ifstream a("numere.in");
ofstream b("date.txt");
while (a>>n) {
if (n % 2==0) {
b <<n<<" ";
}
}
a.close();
b.close();

return 0;
}

-22-
17) Elaboraţi un program prin intermediul căruia va fi creat un fişier. Numele fişierului se va citi de la tastatură. În fişier
vor fi scrise toate numerele pare mai mici decât n(n<10000), n se citeşte de la tastatură.

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;

int main() {
char f[100];
int i, n;

cout << "dati numele fisierului" << endl;


gets(f);

ofstream g(f);
cout << "introduceti un nr n " << endl;
cin >> n;
cout << endl;

for (i = 1; i <= n; i++) {


if (i % 2 == 0) {
cout << i << endl;
g << i << " ";
}}
g.close();
return 0;
}

-23-
18) Elaboraţi un program prin intermediul căruia va fi creat un fişier. Numele fişierului se va citi de la tastatură. În fişier
vor fi scrise toate numerele impare mai mici decât n(n<10000), n se citeşte de la tastatură.

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;

int main() {
char f[100];
int i, n;

cout << "dati numele fisierului" << endl;


gets(f);

ofstream g(f);
cout << "introduceti un nr n " << endl;
cin >> n;
cout << endl;

for (i = 1; i <= n; i++) {


if (i % 2 != 0) {
cout << i << endl;
g << i << " ";
} }
g.close();
return 0;
}

-24-
19) Fişierul numere.in conţine mai multe numere reale (cel puţin 2). Elaboraţi un program prin intermediul căruia în
acest fişier se va adăuga media aritmetică a ultimelor 2 numere.

#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

int main() {
float n,m,x,med;
ifstream f("numere.in", ios::in);
while (f>>x){
n=x;
f>>m;
}
f.close();
ofstream g("numere.in", ios::app);
med = (n+m) / 2;
g<<"media="<<med<<endl;
g.close();

return 0;
}

-25-
20) Fişierul numere.in conţine mai multe numere reale (cel puţin 2). Elaboraţi un program prin intermediul căruia în
acest fişier se va adăuga media aritmetică a numerelor din fişier.

#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

int main() {
float n,m,suma,med,nc;
ifstream f("numere.in", ios::in);
for (int i =0; f>>n;i++){
suma+=n;
nc++; }
f.close();

ofstream g("numere.in", ios::app);


med = suma / nc;
g<<"media="<<med<<endl;
g.close();

return 0;
}

-26-
21) În fişierul date.in este scris un număr întreg pozitiv mai mic decât 1000. Elaboraţi un program care va adăuga în
fişier un triunghi:

#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

int main() {
fstream a;
a.open("numere.in", ios::out | ios::app);

int i, n, j;
cout << "Introduceti un numar: ";
cin >> n;
a << n << endl;
a<<endl;
for (i = 1; i <= n; i++) {
for (j = 1; j <= i; j++) {
a << j; }
a << endl; }
a << endl;

for (i = n; i > 0; i--) {


for (j = 1; j <= i; j++) {
a << j; }
a << endl; }
a << endl;
for (i = 1; i <= n; i++) {
for (j = i; j > 0; j--) {
a << j; }
a << endl; }
a.close();

return 0;
}

-27-
22) În fişierul date.in sunt scrise mai multe cuvinte, fiecare cuvânt este separat printr-un singur spaţiu. Elaboraţi un
program prin intermediul căruia se va afişa la ecran conţinutul fişierului, cel mai lung cuvânt şi cel mai mare cuvânt.
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string.h>

using namespace std;

int main() {
char t[100], cmax[100], clung[100];
int k;
fstream f;

f.open("datee.in", ios::in);
f >> t;
strcpy(cmax, t);
strcpy(clung, t);
k = strlen(clung);
while (f >> t) {
if (strcmp(t, cmax) > 0) {
strcpy(cmax, t); }
if (strlen(t) > k) {
k = strlen(t);
strcpy(clung, t); }
}
cout << "cel mai mare cuvant:" << cmax << endl;
cout << "cel mai lung cuvant: " << clung << endl;
f.close();

getch();
return 0;
}

-28-
3. Metode de sortare

3.2. În cadrul orelor de laborator și tema pentru acasă

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

1) De la tastatură se citeşte numele şi data naşterii a trei copii. Elaboraţi un program prin intermediul căruia la ecran se
va afişa copilul cu vârsta cea mai mică, cea mai mare şi cea mijlocie.

#include <iostream>
using namespace std;

int main() {
struct copil {
char nume[10];
int zi, luna, an;
};

copil c1, c2, c3;

cout << "Dati numele primului copil: "; cin >> c1.nume;
cout << "Dati numele pentru al doilea copil: "; cin >> c2.nume;
cout << "Dati nume pentru al treilea copil: "; cin >> c3.nume;

cout << "Data nasterii a primului copil (zi luna an): "; cin >> c1.zi >> c1.luna >> c1.an;
cout << "Data nasterii al doilea copil (zi luna an): "; cin >> c2.zi >> c2.luna >> c2.an;
cout << "Data nasterii al treilea copil (zi luna an): "; cin >> c3.zi >> c3.luna >> c3.an;

int v1, v2, v3;

v1 = c1.zi + c1.luna * 30 + c1.an * 360;


v2 = c2.zi + c2.luna * 30 + c2.an * 360;
v3 = c3.zi + c3.luna * 30 + c3.an * 360;

if (v1 <= v2 && v1 <= v3) {


cout << "Cel mai mic este " << c1.nume << endl;
if (v2 <= v3) {
cout << "Cel mijlociu este " << c2.nume << endl;
cout << "Cel mai mare este " << c3.nume << endl;
} else {
cout << "Cel mijlociu este " << c3.nume << endl;
cout << "Cel mai mare este " << c2.nume << endl;
}
} else if (v2 <= v1 && v2 <= v3) {
cout << "Cel mai mic este " << c2.nume << endl;
if (v1 <= v3) {
cout << "Cel mijlociu este " << c1.nume << endl;
cout << "Cel mai mare este " << c3.nume << endl;
} else {
cout << "Cel mijlociu este " << c3.nume << endl;
cout << "Cel mai mare este " << c1.nume << endl;
}
} else {
cout << "Cel mai mic este " << c3.nume << endl;
if (v1 <= v2) {
cout << "Cel mijlociu este " << c1.nume << endl;
cout << "Cel mai mare este " << c2.nume << endl;

-29-
}

else {
cout << "Cel mijlociu este " << c2.nume << endl;
cout << "Cel mai mare este " << c1.nume << endl;
}
}

return 0;
}

-30-
2) De la tastatură se citesc datele despre două variabile de tipul data (an, luna, zi). Elaboraţi un program prin intermediul
căruia la ecran se va afişa suma şi diferenţa dintre cele două variabile de tipul data. La ecran data va fi afişată corect
(0≤zi≤30, 0≤luna≤12)

#include <iostream>

using namespace std;

int main()
{
struct data{int zi, luna, an;};
data d1,d2,dif,suma;

int zile[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

cout<<"introduceti d1"<<endl;
cin>>d1.zi>>d1.luna>>d1.an;

cout<<"introduceti d2"<<endl;
cin>>d2.zi>>d2.luna>>d2.an;

suma.zi=d1.zi+d2.zi;
suma.luna=d1.luna+d2.luna;
suma.an=d1.an+d2.an;

if ((suma.an % 4 == 0 && suma.an % 100 != 0) || (suma.an % 400 == 0))


zile[1] = 29;
else
zile[1] = 28;

while(suma.zi > zile[suma.luna - 1])


{
suma.zi = suma.zi - zile[suma.luna - 1];
suma.luna++;
if (suma.luna > 12)
{
suma.luna = 1;
suma.an++;
if ((suma.an % 4 == 0 && suma.an % 100 != 0) || (suma.an % 400 == 0))
zile[1] = 29;
else
zile[1] = 28;
}}

cout<<"suma: "<<suma.zi<<" / "<<suma.luna<<" / "<<suma.an<<endl;


dif.zi=d1.zi-d2.zi;
dif.luna=d1.luna-d2.luna;
dif.an=d1.an-d2.an;

if (dif.zi < 0)
{
dif.luna--;
if (dif.luna < 1)
{
dif.luna = 12;
dif.an--;
if ((dif.an % 4 == 0 && dif.an % 100 != 0) || (dif.an % 400 == 0))
zile[1] = 29;
else
zile[1] = 28;
-31-
}
dif.zi = dif.zi + zile[dif.luna - 1];
}

if (dif.luna < 0)
{
dif.luna = dif.luna + 12;
dif.an--;
}

cout<<"diferenta: "<<dif.zi<<" / "<<dif.luna<<" / "<<dif.an<<endl;


return 0;
}

-32-
3) De la tastatură se citesc datele despre două variabile de tipul timp (ore, min, sec). Elaboraţi un program prin
intermediul căruia la ecran se va afişa suma şi diferenţa dintre cele două variabile de tipul timp. La ecran timpul va fi
afişată corect (0≤sec≤59, 0≤min≤59).
#include <iostream>
using namespace std;

struct Timp {
int ore, minute, sec;
};

int main() {
Timp timp1, timp2, suma, dif;

cout << "Introduceti timpul 1 (ore minute secunde): ";


cin >> timp1.ore >> timp1.minute >> timp1.sec;

cout << "Introduceti timpul 2 (ore minute secunde): ";


cin >> timp2.ore >> timp2.minute >> timp2.sec;

suma.sec = timp1.sec + timp2.sec;


suma.minute = timp1.minute + timp2.minute + suma.sec / 60;
suma.ore = timp1.ore + timp2.ore + suma.minute / 60;

suma.sec %= 60;
suma.minute %= 60;

dif.sec = timp1.sec - timp2.sec;


dif.minute = timp1.minute - timp2.minute + dif.sec / 60;
dif.ore = timp1.ore - timp2.ore + dif.minute / 60;

dif.sec = (dif.sec + 60) % 60;


dif.minute = (dif.minute + 60) % 60;

cout << "Suma: " << suma.ore << " ore " << suma.minute << " minute " << suma.sec << "
secunde" << endl;
cout << "Diferenta: " << dif.ore << " ore " << dif.minute << " minute " << dif.sec << " secunde"
<< endl;

return 0;
}

-33-
4) Elaboraţi un program prin intermediul căruia:
A. De la tastatură se citesc coordonatele vârfurilor unui triunghi (3 vârfuri). Determinaţi:
a) Dacă coordonatele introduse pot forma un triunghi;
b) În cazul în care triunghiul poate fi format:
-) se va afişa aria şi perimetrul triunghiului;
-) tipul triunghiului: ascuţit, obtuz, drept.

#include <iostream>
#include <cmath>

using namespace std;

struct triunghi {
int x1, y1, x2, y2, x3, y3;} v;

float AB, BC, AC, P, SP, A;


int main() {
cout << "Introduceti coordonatele pentru primul varf" << endl;
cout << "x1="; cin >> v.x1; cout << "y1="; cin >> v.y1; cout << endl << "Coordonatele pentru al doilea varf" <<
endl;
cout << "x2="; cin >> v.x2; cout << "y2="; cin >> v.y2; cout << endl << "Coordonatele pentru al treilea varf" <<
endl;
cout << "x3="; cin >> v.x3; cout << "y3="; cin >> v.y3; cout << endl;

AB = sqrt(pow((v.x1 - v.x2), 2) + pow((v.y1 - v.y2), 2));


BC = sqrt(pow((v.x2 - v.x3), 2) + pow((v.y2 - v.y3), 2));
AC = sqrt(pow((v.x3 - v.x1), 2) + pow((v.y3 - v.y1), 2));

if (AB + BC > AC && AB + AC > BC && AC + BC > AB) {


cout << "Coordonatele introduse pot forma un triunghi" << endl;
P = AB + BC + AC;
SP = (AB + BC + AC) / 2;
cout << "Perimetrul triunghiului este " << P << endl;
A = sqrt(SP * (SP - AB) * (SP - BC) * (SP - AC));
cout << "Aria triunghiului este " << A << endl;
if (AB > AC && AB > BC) {
if (pow(AC, 2) + pow(BC, 2) == pow(AB, 2)) cout << "Triunghiul este drept" << endl;
else if (pow(AC, 2) + pow(BC, 2) > pow(AB, 2)) cout << "Triunghiul este ascutit" << endl;
else cout << "Triunghiul este obtuz" << endl;}
else if (BC > AC && BC > AB) {
if (pow(AC, 2) + pow(AB, 2) == pow(BC, 2)) cout << "Triunghiul este drept" << endl;
else if (pow(AC, 2) + pow(AB, 2) > pow(BC, 2)) cout << "Triunghiul este ascutit" << endl;
else cout << "Triunghiul este obtuz" << endl;
}
else if (AC > BC && AC > AB) {
if (pow(BC, 2) + pow(AB, 2) == pow(AC, 2)) cout << "Triunghiul este drept" << endl;
else if (pow(BC, 2) + pow(AB, 2) > pow(AC, 2)) cout << "Triunghiul este ascutit" << endl;
else cout << "Triunghiul este obtuz" << endl;
}
} else {
cout << "Coordonatele introduse nu pot forma un triunghi" << endl;
}

return 0;
}

-34-
-35-
B. De la tastatură se citesc datele despre două cercuri(coordonatele centrului şi raza). Determinaţi:
a) Pentru fiecare cerc aria şi lungimea discului;
b) Poziţia cercurilor(unul în interiorul altuia, tangente, au două puncte comune, nu au nici un punct comun(exclude
cazul când un cerc este situat în interiorul altui cerc).

#include <iostream>
#include <cmath>

#define pi 3.14

using namespace std;

struct cerc {
int x1, y1, x2, y2;
} c;

float r1, r2, o, lungime1, lungime2, arie1, arie2;

int main() {
cout << "Introduceti raza si coordonatele " << endl << "primului cerc" << endl;
cout << "r="; cin >> r1; cout << "x1="; cin >> c.x1; cout << "y1="; cin >> c.y1; cout << endl;
cout << "al doilea cerc" << endl;
cout << "r="; cin >> r2; cout << "x2="; cin >> c.x2; cout << "y2="; cin >> c.y2; cout << endl;
lungime1 = 2 * pi * r1;
arie1 = pi * pow(r1, 2);
cout << "Pentru primul cerc" << endl << "Lungimea cercului este " << lungime1 << endl <<
"Aria cercului este " << arie1 << endl;
lungime2 = 2 * pi * r2;
arie2 = pi * pow(r2, 2);
cout << "Pentru al doilea cerc" << endl << "Lungimea cercului este " << lungime2 << endl <<
"Aria cercului este " << arie2 << endl;
o = sqrt(pow(c.x1 - c.x2, 2) + pow(c.y1 - c.y2, 2));
if (r1 > r2) {
if (r1 > o + r2) cout << "Cercul al doilea este in interiorul primului cerc" << endl;
else if (r1 == o + r2) cout << "Cercurile se suprapun" << endl;
else {
if (r1 + r2 > o) cout << "Cercurile au 2 puncte comune" << endl;
else if (r1 + r2 == o) cout << "Cercurile sunt tangente" << endl;
else cout << "Cercurile nu au puncte comune" << endl;
}}
if (r2 > r1) {
if (r2 > o + r1) cout << "Primul cerc se afla in interiorul al doilea cerc" << endl;
else if (r2 == o + r1) cout << "Cercurile se suprapun" << endl;
else {
if (r1 + r2 > o) cout << "Cercurile au 2 puncte comune" << endl;
else if (r1 + r2 == o) cout << "Cercurile sunt tangente" << endl;
else cout << "Cercurile nu au puncte comune" << endl;
}}
return 0;
}
-36-
-37-
5) Elaboraţi un program prin intermediul căruia se va crea tipul de date fracţie.

De la tastatură se citesc datele despre două fracţii, la ecran se va afişa:

a) ce mai mare şi ce mai mică fracţie;

b) suma fracţiilor;

c) diferenţa fracţiilor;

d) produsul fracţiilor;

e) câtul fracţiilor;

Fracţiile se vor afişa doar sub formă de fracţii ireductibile de forma a/b, de exemplu 3/4.

#include <iostream>
using namespace std;
struct fractie {
int n1,m1,n2,m2;}n;
int sn,sm,dn,dm,f1,f2;
int main()
{cout<<"introduceti numitorul si numaratorul"<<endl<<"primei fractii"<<endl;
cout<<"numaratorul=";cin>>n.n1; cout<<"numitorul=";cin>>n.m1;
cout<<"a fractiei a doua"<<endl;
cout<<"numaratorul=";cin>>n.n2;cout<<"numitorul=";cin>>n.m2;
cout<<"prima fractie este:"<<n.n1<<"/"<<n.m1<<endl;
cout<<"a doua fractie este:"<<n.n2<<"/"<<n.m2<<endl;
f1=n.n1/n.m1;
f2=n.n2/n.m2;
if(f1>f2){
cout<<"fractie mai mare este "<<n.n1<<"/"<<n.m1<<endl;
cout<<"fractia mai mica este "<<n.n2<<"/"<<n.m2<<endl;}
else {cout<<"fractia mai mica este "<<n.n1<<"/"<<n.m1<<endl;
cout<<"fractie mai mare este "<<n.n2<<"/"<<n.m2<<endl;}\
if (n.m1!=n.m2){
sm=n.m1*n.m2;
sn=(n.n1*n.m2)+(n.n2*n.m1);}
if (f1>f2){if(n.n1!=n.n2){
dm=n.m1*n.m2;
dn=(n.n1*n.m2)-(n.n2*n.m1);}}
else { if(n.n1!=n.n2){
dm=n.m1*n.m2;
dn=(n.n2*n.m1)-(n.n1*n.m2);}}
cout<<"suma fractilor este "<<sn<<"/"<<sm<<endl;
cout<<"diferenta fractilor este "<<dn<<"/"<<dm<<endl;
cout<<"produsul fractilor este "<<n.n1*n.n2<<"/"<<n.m1*n.m2<<endl;
cout<<"catul fractilor este "<<n.n1/n.n2<<"/"<<n.m1/n.m2<<endl;
return 0;}

-38-
-39-
6) Pe o suprafaţă plană sunt mai multe puncte, date prin coordonatele lor. Elaboraţi un program prin intermediul căruia
se vor sorta crescător în dependenţă de distanţa acestora de la centru axei de coordonate a sistemului cartezian.
Date de intrare. Fişierul puncte.in, care pe prima linie conţine numărul de puncte din plan, iar pe următoarele linii sunt
scrise coordonatele punctelor. Date de ieşire. La ecran se va afişa punctele sortate, fiecare coordonată de punct
fiind urmată de distanţa acestuia de la centru.

-40-
4. Structuri. Tablouri de structuri.
4.1 Structuri.
4.1.1 În cadrul orelor de teorie

se includ toate programele de la ora de teorie + prezentarea de pe classroom

4.1.2 În cadrul orelor de laborator și tema pentru acasă

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

4.2 Tablouri de structuri.


4.2.1 În cadrul orelor de teorie

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

4.2.2 În cadrul orelor de laborator și tema pentru acasă

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

-41-
5. Pointeri. Variabile Pointeri.
5.1 Variabile Pointeri.
5.1.1 În cadrul orelor de teorie

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

5.1.2 În cadrul orelor de laborator și tema pentru acasă

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

5.2 Pointeri și tablouri.


5.2.1 În cadrul orelor de teorie

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

5.2.2 În cadrul orelor de laborator și tema pentru acasă

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

5.3 Alocarea dinamică a memoriei pentru tablouri. Eliberarea memoriei.


5.3.1 În cadrul orelor de teorie

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

5.3.2 În cadrul orelor de laborator și tema pentru acasă

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

-42-
6. Subprograme.
6.1 Subprograme 1
6.1.1 În cadrul orelor de teorie

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

6.1.2 În cadrul orelor de laborator și tema pentru acasă

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

6.2 Subprograme 2
6.2.1 În cadrul orelor de teorie

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

6.2.2 În cadrul orelor de laborator și tema pentru acasă

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

6.3 Subprograme (parametri de tip tablou)


6.3.1 În cadrul orelor de teorie

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

6.3.2 În cadrul orelor de laborator și tema pentru acasă

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

6.4 Subprograme recursive.


6.4.1 În cadrul orelor de teorie

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

6.4.2 În cadrul orelor de laborator și tema pentru acasă

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

6.5 Subprograme. Particularități în utilizare.


6.5.1 În cadrul orelor de teorie

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

-43-
6.5.2 Realizare proiect propriu

se includ toate probleme de la orele de laborator + prezentarea de pe classroom

-44-
DECLARAŢIA PRIVIND ASUMAREA RĂSPUNDERII

Subsemnatul, declar pe proprie răspundere că materialele prezentate în


Portofoliu, se referă la propriile activităţi şi realizări, în caz contrar urmând să suport
consecinţele, în conformitate cu legislaţia în vigoare.

Nume, Prenume:

-45-

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