Sunteți pe pagina 1din 23

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 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.
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 "date.out"


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 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

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 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.
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 "date.out"


ofstream outputFile("date.out");
if (outputFile.is_open()) {
outputFile << "Numarul minim: " << minim << endl;
outputFile << "Numarul intermediar: " << intermediar << endl;
outputFile << "Numarul maxim: " << maxim << endl;
outputFile.close();
cout << "Rezultatele au fost afisate la ecran si in fisierul date.out." <<
endl;
} else {
cout << "Nu s-a putut deschide fisierul date.out pentru scriere." << endl;
}

return 0;
}
Rezultatul execuției
Problema 4.
Cerinte:
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.

Implimentare in C++
Rezultatul executiei
#include <iostream>
#include <fstream>
#include <iomanip>

int main() {
// Deschide fișierul de intrare
std::ifstream infile("date.in");

// 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("date.out");

// 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
infile.close();
outfile.close();

return 0;
}

Rezultatul execuției

Problema 5.
Cerinte:
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.
Implimentare in C++
Rezultatul executiei
#include <iostream>

#include <fstream>

#include <iomanip>

#include <vector>

int main() {

// Deschide fișierul de intrare

std::ifstream infile("date.in");

// 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("date.out");

// 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

infile.close();

outfile.close();

return 0;

Rezultatul execuției

Problema 6.
Cerinte:
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
Implimentare in C++
Rezultatul executiei
#include <iostream>
#include <fstream>
#include <iomanip>

int main() {
std::ifstream infile("date.in");
std::ofstream outfile("date.out");

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;

infile.close();
outfile.close();
return 0;
}

Problema 7.
Cerinte:
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ă.

Implimentare in C++
#include <iostream>
#include <fstream>

int main() {
std::ifstream infile("date.in");
std::ofstream outfile("date.out");

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 "date.out"


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
infile.close();
outfile.close();

return 0;
}
Rezultatul executiei

Problema 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.
Implimentare in C++
#include <iostream>
#include <fstream>

int main() {
std::ifstream infile("date.in");
std::ofstream outfile("date.out");

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 "date.out"


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
infile.close();
outfile.close();

return 0;
}
Rezultatul executiei
Problema 9.
Cerinte:
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ă.
Implimentare in C++
#include <iostream>
#include <fstream>

#include <limits>

int main() {

std::ifstream infile("date.in");

std::ofstream outfile("date.out");

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 "date.out"

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

infile.close();

outfile.close();

return 0;

Rezultatul executiei
Problema 10.
Cerinte:
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
Implimentare in C++
#include <iostream>
#include <fstream>
#include <cctype> // pentru std::isupper

int main() {
std::ifstream infile("date.in");
std::ofstream outfile("date.out");

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 "date.out"


outfile << "Numarul de majuscule: " << numarMajuscule << std::endl;

// Închiderea fișierelor
infile.close();
outfile.close();

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

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