PORTOFOLI
U
la unitatea de curs
Programarea Procedurală
Elaborat: Verificat:
Elevul/a grupei AAW-231 Burca Eugenia,
Nume Prenume master in informatica,
Ticu Victor profesor de informatica.
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
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
1. Programarea-pasiunea mea.
Cînd eram mic eram pasionat de tehnică,
tehnologii, diferite mașinării si cod.
Acum cînd am crescut am aflat ce este
programarea și cu adevărat am rămas uimit de ceea
ce poti face cu ajutorul unui laptop si cunostinte in
programare.
În concluzie pot spune că programarea si
cunostintele in tehnologiile moderne ne va ajuta sa
progresăm semnificativ și foarte rapid, creînd
viitorul generatiei.
2. Tipul de date fișier. Operații de specifice tipului de date
fișier
2.1 În cadrul orelor de teorie:
Problemele 1-10 p 33-34
Problema 1.
Conditie:
Fişierul [Link] 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 [Link].
Implimentare in C++
Rezultatul executiei
#include <iostream>
using namespace std;
int main() {
int varsta, inaltime;
char gen;
// Citire date de la utilizator
cout << "Introduceti varsta, inaltimea (in cm) si genul (m/f),
separate prin spatiu: ";
cin >> varsta >> inaltime >> gen;
double greutateIdeal;
// Calculul greutatii ideale
if (gen == 'm') {
greutateIdeal = 50 + 0.75 * (inaltime - 150) + (varsta - 20) / 4;
} else if (gen == 'f') {
greutateIdeal = 50 + 0.75 * (inaltime - 150) + (varsta - 20) / 4 - 10;
} else {
cout << "Genul introdus nu este valid. Folositi 'm' sau 'f'." <<
endl;
return 1;
}
// Afisare greutate ideala la consola
cout << "Greutatea ideala: " << greutateIdeal << " kg" << endl;
// Scriere date in fisierul "[Link]"
cout << "Varsta: " << varsta << " ani" << endl;
cout << "Inaltime: " << inaltime << " cm" << endl;
cout << "Gen: " << gen << endl;
cout << "Greutatea ideala: " << greutateIdeal << " kg" << endl;
return 0;
}
Rezultatul execuției
Problema 2.
Conditie:
Fişierul [Link] 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 [Link]
Implimentare in C++
Rezultatul executiei
#include <iostream>
using namespace std;
int main() {
int numar1, numar2, numar3;
// Citire numere de la consola
cout << "Introduceti 3 numere intregi separate prin spatiu: ";
cin >> numar1 >> numar2 >> numar3;
// Afisare numere si evaluare daca sunt pare sau impare
cout << "Numarul " << numar1 << " este " << (numar1 % 2 == 0 ? "PAR" :
"IMPAR") << endl;
cout << "Numarul " << numar2 << " este " << (numar2 % 2 == 0 ? "PAR" :
"IMPAR") << endl;
cout << "Numarul " << numar3 << " este " << (numar3 % 2 == 0 ? "PAR" :
"IMPAR") << endl;
// Scriere rezultate la consola
cout << "Rezultatele au fost afisate la ecran." << endl;
return 0;
}
Rezultatul execuției
Problema 3.
Cerinte:
Fişierul [Link] 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 [Link].
Implimentare in C++
Rezultatul executiei
#include <iostream>
#include <fstream>
using namespace std;
int main() {
int numar1, numar2, numar3;
// Citire numere de la consola
cout << "Introduceti 3 numere intregi distincte separate prin spatiu: ";
cin >> numar1 >> numar2 >> numar3;
// Determinare minim, maxim si numar intermediar
int minim, maxim, intermediar;
if (numar1 < numar2 && numar1 < numar3) {
minim = numar1;
intermediar = (numar2 < numar3) ? numar2 : numar3;
maxim = (numar2 > numar3) ? numar2 : numar3;
} else if (numar2 < numar1 && numar2 < numar3) {
minim = numar2;
intermediar = (numar1 < numar3) ? numar1 : numar3;
maxim = (numar1 > numar3) ? numar1 : numar3;
} else {
minim = numar3;
intermediar = (numar1 < numar2) ? numar1 : numar2;
maxim = (numar1 > numar2) ? numar1 : numar2;
}
// Afisare rezultate la consola
cout << "Numarul minim: " << minim << endl;
cout << "Numarul intermediar: " << intermediar << endl;
cout << "Numarul maxim: " << maxim << endl;
// Scriere rezultate in fisierul "[Link]"
ofstream outputFile("[Link]");
if (outputFile.is_open()) {
outputFile << "Numarul minim: " << minim << endl;
outputFile << "Numarul intermediar: " << intermediar << endl;
outputFile << "Numarul maxim: " << maxim << endl;
[Link]();
cout << "Rezultatele au fost afisate la ecran si in fisierul [Link]." <<
endl;
} else {
cout << "Nu s-a putut deschide fisierul [Link] pentru scriere." << endl;
}
return 0;
}
Rezultatul execuției
Problema 4.
Cerinte:
Fişierul [Link] 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 [Link].
Implimentare in C++
Rezultatul executiei
#include <iostream>
#include <fstream>
#include <iomanip>
int main() {
// Deschide fișierul de intrare
std::ifstream infile("[Link]");
// Verifică dacă fișierul s-a deschis corect
if (!infile.is_open()) {
std::cerr << "Eroare la deschiderea fisierului de intrare." << std::endl;
return 1;
}
// Citirea temperaturilor din fișier
int temperatura;
int numarLuni = 12;
int temperaturiPozitive = 0, temperaturiNegative = 0;
for (int i = 0; i < numarLuni; ++i) {
infile >> temperatura;
if (temperatura > 0) {
temperaturiPozitive += temperatura;
} else {
temperaturiNegative += temperatura;
}
}
// Calculul mediilor
double mediaPozitive = static_cast<double>(temperaturiPozitive) / numarLuni;
double mediaNegative = static_cast<double>(temperaturiNegative) / numarLuni;
// Afișarea rezultatelor la ecran
std::cout << std::fixed << std::setprecision(2);
std::cout << "Media anuala a temperaturilor pozitive: " << mediaPozitive <<
std::endl;
std::cout << "Media anuala a temperaturilor negative: " << mediaNegative <<
std::endl;
// Deschide fișierul de ieșire
std::ofstream outfile("[Link]");
// Verifică dacă fișierul s-a deschis corect
if (!outfile.is_open()) {
std::cerr << "Eroare la deschiderea fisierului de iesire." << std::endl;
return 1;
}
// Afișează rezultatele și în fișierul de ieșire
outfile << std::fixed << std::setprecision(2);
outfile << "Media anuala a temperaturilor pozitive: " << mediaPozitive <<
std::endl;
outfile << "Media anuala a temperaturilor negative: " << mediaNegative <<
std::endl;
// Închide fișierele
[Link]();
[Link]();
return 0;
}
Rezultatul execuției
Problema 5.
Cerinte:
Fişierul [Link] 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 [Link]
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.
Implimentare in C++
Rezultatul executiei
#include <iostream>
#include <fstream>
#include <iomanip>
#include <vector>
int main() {
// Deschide fișierul de intrare
std::ifstream infile("[Link]");
// Verifică dacă fișierul s-a deschis corect
if (!infile.is_open()) {
std::cerr << "Eroare la deschiderea fisierului de intrare." << std::endl;
return 1;
int numarElevi;
infile >> numarElevi;
// Verifică dacă numărul de elevi este valid
if (numarElevi <= 0) {
std::cerr << "Numarul de elevi invalid." << std::endl;
return 1;
// Citirea mediilor elevilor din fișier
double medie;
double maxMedie = -1; // Initializăm cu o valoare negativa pentru a asigura actualizarea
double minMedie = 11; // Initializăm cu o valoare mare pentru a asigura actualizarea
int corigenti = 0;
for (int i = 0; i < numarElevi; ++i) {
infile >> medie;
// Actualizarea valorilor maxime și minime
if (medie > maxMedie) {
maxMedie = medie;
if (medie < minMedie) {
minMedie = medie;
// Verificare corigenți
if (medie < 5.00) {
corigenti++;
// Afișarea rezultatelor la ecran
std::cout << std::fixed << std::setprecision(2);
std::cout << "Max medie: " << maxMedie << std::endl;
std::cout << "Min medie: " << minMedie << std::endl;
std::cout << corigenti << " corigenti." << std::endl;
// Deschide fișierul de ieșire
std::ofstream outfile("[Link]");
// Verifică dacă fișierul s-a deschis corect
if (!outfile.is_open()) {
std::cerr << "Eroare la deschiderea fisierului de iesire." << std::endl;
return 1;
// Afișează rezultatele și în fișierul de ieșire
outfile << std::fixed << std::setprecision(2);
outfile << "Max medie: " << maxMedie << std::endl;
outfile << "Min medie: " << minMedie << std::endl;
outfile << corigenti << " corigenti." << std::endl;
// Închide fișierele
[Link]();
[Link]();
return 0;
Rezultatul execuției
Problema 6.
Cerinte:
Fişierul [Link] 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
[Link]
Implimentare in C++
Rezultatul executiei
#include <iostream>
#include <fstream>
#include <iomanip>
int main() {
std::ifstream infile("[Link]");
std::ofstream outfile("[Link]");
if (!infile.is_open() || !outfile.is_open()) {
std::cerr << "Eroare la deschiderea fisierelor." << std::endl;
return 1;
}
int numarElemente, numar;
int minim = INT_MAX, maxim = INT_MIN, numarPare = 0,
numarImpare = 0, suma = 0;
infile >> numarElemente;
for (int i = 0; i < numarElemente; ++i) {
infile >> numar;
suma += numar;
if (numar % 2 == 0) {
numarPare++;
} else {
numarImpare++;
}
minim = std::min(minim, numar);
maxim = std::max(maxim, numar);
}
double media = static_cast<double>(suma) / numarElemente;
std::cout << "Minim: " << minim << std::endl;
std::cout << "Maxim: " << maxim << std::endl;
std::cout << "Numar elemente pare: " << numarPare << std::endl;
std::cout << "Numar elemente impare: " << numarImpare << std::endl;
std::cout << std::fixed << std::setprecision(2);
std::cout << "Media: " << media << std::endl;
outfile << "Minim: " << minim << std::endl;
outfile << "Maxim: " << maxim << std::endl;
outfile << "Numar elemente pare: " << numarPare << std::endl;
outfile << "Numar elemente impare: " << numarImpare << std::endl;
outfile << std::fixed << std::setprecision(2);
outfile << "Media: " << media << std::endl;
[Link]();
[Link]();
return 0;
}
Problema 7.
Cerinte:
Fişierul [Link] 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
[Link] elementele matricei şi poziţiile pe care se
află valoarea maximală.
Implimentare in C++
#include <iostream>
#include <fstream>
int main() {
std::ifstream infile("[Link]");
std::ofstream outfile("[Link]");
if (!infile.is_open() || !outfile.is_open()) {
std::cerr << "Eroare la deschiderea fisierelor." << std::endl;
return 1;
}
int numarLinii, numarColoane;
// Citirea numarului de linii si coloane
infile >> numarLinii >> numarColoane;
// Declararea matricei
int matrice[numarLinii][numarColoane];
// Citirea elementelor matricei
for (int i = 0; i < numarLinii; ++i) {
for (int j = 0; j < numarColoane; ++j) {
infile >> matrice[i][j];
}
}
// Găsirea valorii maxime și a poziției corespunzătoare
int valoareMaxima = matrice[0][0];
int liniaMaxima = 0, coloanaMaxima = 0;
for (int i = 0; i < numarLinii; ++i) {
for (int j = 0; j < numarColoane; ++j) {
if (matrice[i][j] > valoareMaxima) {
valoareMaxima = matrice[i][j];
liniaMaxima = i;
coloanaMaxima = j;
}
}
}
// Afisarea elementelor matricei
std::cout << "Elemente matrice:" << std::endl;
for (int i = 0; i < numarLinii; ++i) {
for (int j = 0; j < numarColoane; ++j) {
std::cout << matrice[i][j] << " ";
}
std::cout << std::endl;
}
// Afisarea poziției valorii maxime
std::cout << "Valoarea maxima: " << valoareMaxima << std::endl;
std::cout << "Poziție: Linia " << liniaMaxima + 1 << ", Coloana " << coloanaMaxima + 1 <<
std::endl;
// Scrierea în fișierul "[Link]"
outfile << "Elemente matrice:" << std::endl;
for (int i = 0; i < numarLinii; ++i) {
for (int j = 0; j < numarColoane; ++j) {
outfile << matrice[i][j] << " ";
}
outfile << std::endl;
}
outfile << "Valoarea maxima: " << valoareMaxima << std::endl;
outfile << "Poziție: Linia " << liniaMaxima + 1 << ", Coloana " << coloanaMaxima + 1 << std::endl;
// Închiderea fișierelor
[Link]();
[Link]();
return 0;
}
Rezultatul executiei
Problema 8.
Fişierul [Link] 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
[Link] elementele matricei şi suma de pe fiecare
linie.
Implimentare in C++
#include <iostream>
#include <fstream>
int main() {
std::ifstream infile("[Link]");
std::ofstream outfile("[Link]");
if (!infile.is_open() || !outfile.is_open()) {
std::cerr << "Eroare la deschiderea fisierelor." << std::endl;
return 1;
}
int numarLinii, numarColoane;
// Citirea numarului de linii si coloane
infile >> numarLinii >> numarColoane;
// Declararea și inițializarea matricei
int matrice[numarLinii][numarColoane];
// Citirea elementelor matricei
for (int i = 0; i < numarLinii; ++i) {
for (int j = 0; j < numarColoane; ++j) {
infile >> matrice[i][j];
}
}
// Afisarea elementelor matricei si sumei pe fiecare linie
std::cout << "Elemente matrice si suma pe fiecare linie:" << std::endl;
for (int i = 0; i < numarLinii; ++i) {
int sumaLinie = 0;
for (int j = 0; j < numarColoane; ++j) {
std::cout << matrice[i][j] << " ";
sumaLinie += matrice[i][j];
}
std::cout << "Suma: " << sumaLinie << std::endl;
}
// Scrierea în fișierul "[Link]"
outfile << "Elemente matrice si suma pe fiecare linie:" << std::endl;
for (int i = 0; i < numarLinii; ++i) {
int sumaLinie = 0;
for (int j = 0; j < numarColoane; ++j) {
outfile << matrice[i][j] << " ";
sumaLinie += matrice[i][j];
}
outfile << "Suma: " << sumaLinie << std::endl;
}
// Închiderea fișierelor
[Link]();
[Link]();
return 0;
}
Rezultatul executiei
Problema 9.
Cerinte:
Fişierul [Link] 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
[Link] elementele matricei şi minimul de pe fiecare coloană.
Implimentare in C++
#include <iostream>
#include <fstream>
#include <limits>
int main() {
std::ifstream infile("[Link]");
std::ofstream outfile("[Link]");
if (!infile.is_open() || !outfile.is_open()) {
std::cerr << "Eroare la deschiderea fisierelor." << std::endl;
return 1;
int numarLinii, numarColoane;
// Citirea numarului de linii si coloane
infile >> numarLinii >> numarColoane;
// Declararea și inițializarea matricei
int matrice[numarLinii][numarColoane];
// Citirea elementelor matricei
for (int i = 0; i < numarLinii; ++i) {
for (int j = 0; j < numarColoane; ++j) {
infile >> matrice[i][j];
// Afisarea elementelor matricei si minimul de pe fiecare coloana
std::cout << "Elemente matrice si minim pe fiecare coloana:" << std::endl;
for (int i = 0; i < numarLinii; ++i) {
for (int j = 0; j < numarColoane; ++j) {
std::cout << matrice[i][j] << " ";
std::cout << std::endl;
for (int j = 0; j < numarColoane; ++j) {
int minimColoana = std::numeric_limits<int>::max();
for (int i = 0; i < numarLinii; ++i) {
minimColoana = std::min(minimColoana, matrice[i][j]);
std::cout << "Minim coloana " << j + 1 << ": " << minimColoana << std::endl;
// Scrierea în fișierul "[Link]"
outfile << "Elemente matrice si minim pe fiecare coloana:" << std::endl;
for (int i = 0; i < numarLinii; ++i) {
for (int j = 0; j < numarColoane; ++j) {
outfile << matrice[i][j] << " ";
outfile << std::endl;
for (int j = 0; j < numarColoane; ++j) {
int minimColoana = std::numeric_limits<int>::max();
for (int i = 0; i < numarLinii; ++i) {
minimColoana = std::min(minimColoana, matrice[i][j]);
outfile << "Minim coloana " << j + 1 << ": " << minimColoana << std::endl;
// Închiderea fișierelor
[Link]();
[Link]();
return 0;
Rezultatul executiei
Problema 10.
Cerinte:
Fişierul [Link] 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
[Link]
Implimentare in C++
#include <iostream>
#include <fstream>
#include <cctype> // pentru std::isupper
int main() {
std::ifstream infile("[Link]");
std::ofstream outfile("[Link]");
if (!infile.is_open() || !outfile.is_open()) {
std::cerr << "Eroare la deschiderea fisierelor." << std::endl;
return 1;
}
std::string sirCaractere;
// Citirea șirului de caractere din fișier
getline(infile, sirCaractere);
// Determinarea numărului de majuscule
int numarMajuscule = 0;
for (char caracter : sirCaractere) {
if (std::isupper(caracter)) {
numarMajuscule++;
}
}
// Afișarea rezultatului la ecran
std::cout << "Numarul de majuscule: " << numarMajuscule << std::endl;
// Scrierea în fișierul "[Link]"
outfile << "Numarul de majuscule: " << numarMajuscule << std::endl;
// Închiderea fișierelor
[Link]();
[Link]();
return 0;
}
Rezultatul executiei
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:Ticu Victor