0% au considerat acest document util (0 voturi)
3 vizualizări8 pagini

Proiect 4

Documentul descrie un proiect de programare care lucrează cu tabele bidimensionale de note ale studenților la examene. Acesta include operații precum determinarea notelor minime și maxime, interschimbarea liniilor, adăugarea coloanelor cu mediile și generarea unor matrice. Proiectul se finalizează cu concluzii referitoare la calcularea procentelor de reușită și calitate, excluzând ultima coloană cu mediile studenților.

Încărcat de

Veronica Gușan
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
0% au considerat acest document util (0 voturi)
3 vizualizări8 pagini

Proiect 4

Documentul descrie un proiect de programare care lucrează cu tabele bidimensionale de note ale studenților la examene. Acesta include operații precum determinarea notelor minime și maxime, interschimbarea liniilor, adăugarea coloanelor cu mediile și generarea unor matrice. Proiectul se finalizează cu concluzii referitoare la calcularea procentelor de reușită și calitate, excluzând ultima coloană cu mediile studenților.

Încărcat de

Veronica Gușan
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.

A elaborat: Gușan Veronica Semnătura: __________

PROIECT DE PROGRAME NR. 4. LUCRUL CU TABELE BIDIMENSIONALE DE NUMERE

I. Formularea problemei
Tema: Notele a n studenți dintr-o grupă la m examene
De efectuat următoarele operaţii:
1. De determinat într-o matrice nota minimă şi maximă şi poziţiile lor.
2. De interschimbat 2 linii.
3. De adăugat o coloană și de completat cu media studenților.
4. De aranjat lista studenților după media lor.
5. De adăugat o linie cu mediile studenților pe obiecte și media generală.
6. De adăugat o linie și de completat cu procentul reușitei.
7. De adăugat o linie și de completat cu procentul calității.
1 1 1
 
8. De generat matricea de forma  2 2 2 .
 3 3 3
 

II. Studiu preliminar


Procentul calității reprezintă raportul dintre numărul de note mai mari sau egal cu 5 și numărul total de
note.
Procentul reușitei reprezintă raportul dintre numărul de note mai mari sau egal cu 8 și numărul total de
note.
III. Indicaţii metodice
1. De scris funcţii pentru citirea, afişarea şi prelucrarea tabelelor statice, generate aleator sau citite de la
tastatură.
2. Programul trebuie să fie universal, adică trebuie să se obţină rezultatul pentru orice date iniţiale.
3. Matricea poate fi de formă pătratică sau dreptunghiulară.
IV. Programul
#include <iostream>
#include <iomanip>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <iomanip>
#define NMAX 20

using namespace std;

//interfata programului
int Citire_tabel(int n, int m, float x[NMAX][NMAX]);
int Afisare_tabel(int n, int m, float x[NMAX][NMAX], char mesaj[], int k = 1, int afis = 0);
float Minimum(int n, int m, float x[NMAX][NMAX]);
float Maximum(int n, int m, float x[NMAX][NMAX]);
void Pozitia(int n, int m, float x[NMAX][NMAX], float val);
int Interschimbare(int n, int m, float x[NMAX][NMAX], int l1, int l2);
int Media(int n, int &m, float x[NMAX][NMAX]);
int Ordonare(int n, int m, float x[NMAX][NMAX]);
int Adaugare(int &n, int m, float x[NMAX][NMAX]);
int Reusita(int &n, int m, float x[NMAX][NMAX]);
int Calitatea(int &n, int m, float x[NMAX][NMAX]);
int Generare(int n, int m, int tab[NMAX][NMAX]);
int main()

1
{
int opt;
float car, reus, val;
int n = 4, m = 4, l2, l1, rot;
int n1, m1;
char sir[81];
cout << "\n Dati numarul de studenti: "; cin >> n;
cout << "\n Dati numarul de examene: "; cin >> m;
float table[NMAX][NMAX] = {{9, 9, 8, 2}, {8, 5, 7, 8}, {5, 6, 7, 8},{10, 10, 10, 10}};
Citire_tabel(n, m, table);
do
{
system("cls");
cout << "-------- Proiect Nr.4 elaborat de Gusan Veronica! --------" << endl;
cout << "\nTema: Tabele bidimensionale - Notele studentilor la examenene" << endl;
cout << "\n 1. Nota minima si maxima si pozitiile lor.";
cout << "\n 2. De interschimbat 2 linii.";
cout << "\n 3. De adaugat o coloana, de completat cu mediile studentilor.";
cout << "\n 4. De aranjat lista studentilor dupa media lor.";
cout << "\n 5. De adaugat o linie cu mediile studentilor pe obiecte si media generala.";
cout << "\n 6. De adaugat o linie si de completat cu procentul reusitei.";
cout << "\n 7. De adaugat o linie si de completat cu procentul calitatii.";
cout << "\n 8. De generat o matrice de forma {{1,1,1}, {2,2,2}, {3,3,3}}.";
cout << "\n 0. STOP";
cout << "\n \t Alege (de la 0 la 8) ->";
cin >> opt;
switch(opt)
{
case 1:
Afisare_tabel(n, m, table, "initiala");
val = Maximum(n, m, table);
cout << "\nNota maxima este: " << val << "." << endl;
cout << "Pozitiile notei maxime sunt: " << endl;
Pozitia(n, m, table, val);
val = Minimum(n, m, table);
cout << "\nNota minima este: " << val << "." << endl;
cout << "Pozitiile notei minime sunt: " << endl;
Pozitia(n, m, table, val);
_getch();
break;
case 2:
Afisare_tabel(n, m, table, "initiala");
cout << "Introduceti liniile ce trebuie interschimbate: " << endl;
cin >> l1 >> l2;
val = Interschimbare(n, m, table, l1-1, l2-1);
if (val)
{
sprintf(sir, "cu liniile %d si %d interschimbate", l1, l2);
Afisare_tabel(n, m, table, sir);
}
else cout << "Nu sunt interschimbari. \n";
_getch();
break;
case 3:
Afisare_tabel(n, m, table, "initiala");

2
Media(n, m, table);
Afisare_tabel(n, m, table, "cu media studentilor adaugata");
_getch();
break;
case 4:
Afisare_tabel(n, m, table, "initiala");
Ordonare(n, m, table);
Afisare_tabel(n, m, table, "aranjata dupa mediile studentilor");
_getch();
break;
case 5:
Afisare_tabel(n, m, table, "initiala");
Adaugare(n, m, table);
Afisare_tabel(n, m, table, "cu mediile studentilor pe obiecte");
_getch();
break;
case 6:
Afisare_tabel(n, m, table, "initiala");
Reusita(n, m, table);
Afisare_tabel(n, m, table, "cu procentul reusitei", 1, 1);
_getch();
break;
case 7:
Afisare_tabel(n, m, table, "initiala", 1, 1);
Calitatea(n, m, table);
Afisare_tabel(n, m, table, "cu procentul calitatii", 2, 1);
_getch();
break;
case 8:
cout << "\nIntroduceti numarul de randuri ale matricei\n"; cin >> n1;
cout << "\nIntroduceti numarul de coloane ale matricei\n"; cin >> m1;
if((n1 <= 0) || (m1 <= 0)) cout << "\nNu exista asa matrice!\n";
else
{
cout << "Matricea generata: \n";
int tabel[NMAX][NMAX];
Generare(n1, m1, tabel);
}
_getch();
break;
}
}
while(opt);
return 0;
}
//functii utilizate in program
int Citire_tabel(int n, int m, float x[NMAX][NMAX])
{
if(((n <= 0) || (m <= 0)) && (m > NMAX)) return 0;
cout << "\n Introdu notele\n";
for( int i = 0; i < n; i++)
{
for( int j = 0; j < m; j++)
cin >> x[i][j];
}

3
return 1;
}

int Afisare_tabel(int n, int m, float x[NMAX][NMAX], char mesaj[], int k, int afis)
{
cout << " \n Lista de note " << mesaj << ": \n";
for( int i = 0; i < n-k; i++)
{
for( int j = 0; j < m; j++)
cout << setw(8) << setprecision(3) << x[i][j];
cout << endl;
}
for( int i = n-k; i < n; i++)
{
for( int j = 0; j < m-afis; j++)
cout << setw(8) << setprecision(3) << x[i][j];
cout << endl;
}
}

float Minimum(int n, int m, float x[NMAX][NMAX])


{
int i, j;
float minim;
minim = x[0][0];
for(i = 0; i < n; i++)
for(j = 0; j < m; j++)
if(x[i][j] < minim)
minim = x[i][j];
return minim;
}

float Maximum(int n, int m, float x[NMAX][NMAX])


{
int i, j;
float maxim;
maxim = x[0][0];
for(i = 0; i < n; i++)
for(j = 0; j < m; j++)
if(x[i][j] > maxim)
maxim = x[i][j];
return maxim;
}

void Pozitia(int n, int m, float x[NMAX][NMAX], float val)


{
int i, j;
for(i = 0; i < n; i++)
for(j = 0; j < m; j++)
if(x[i][j] == val) cout << '[' << i+1 << ';' << j+1 << "] ";
cout << endl;
}

int Interschimbare(int n, int m, float x[NMAX][NMAX], int l1, int l2)


{

4
int j;
float aux;
if((l1 >= n) || (l2 >= n) || (l1 == l2) || (l1 < 0) || (l2 < 0)) return 0;
for(j = 0; j < m; j++)
{
aux = x[l1][j];
x[l1][j] = x[l2][j];
x[l2][j] = aux;
}
return 1;
}

int Media(int n, int &m, float x[NMAX][NMAX])


{
int i, j;
float med;
for(i = 0; i < n; i++)
{
med = 0;
for(j = 0; j < m; j++)
med += x[i][j];
x[i][m] = med / m;
}
m++;
return 1;
}

int Ordonare(int n, int m, float x[NMAX][NMAX])


{
int i, j, k, i_max;
float aux, maxim;
for(i = 0; i < n-1; i++)
{
maxim = x[i][m-1];
i_max = i;
for(k = i+1; k < n; k++)
{
if(x[k][m-1] > maxim)
{
maxim = x[k][m-1];
i_max = k;
}
}
for(j = 0; j < m; j++)
{
aux = x[i_max][j];
x[i_max][j] = x[i][j];
x[i][j] = aux;
}
}
return 1;
}

int Adaugare(int &n, int m, float x[NMAX][NMAX])


{

5
int i, j;
float med;
for(j = 0; j < m; j++)
{
med = 0;
for(i = 0; i < n; i++)
med += x[i][j];
x[n][j] = med / n;
}
n++;
return 1;
}

int Reusita(int &n, int m, float x[NMAX][NMAX])


{
int i, j;
float reusita;
for(j = 0; j < m-1; j++)
{
reusita = 0;
for(i = 0; i < n-1; i++)
if(x[i][j] >= 5)
reusita += 1;
x[n][j] = (reusita/(n-1))*100;
}
n++;
return 1;
}

int Calitatea(int &n, int m, float x[NMAX][NMAX])


{
int i, j;
float calitate;
for(j = 0; j < m-1; j++)
{
calitate = 0;
for(i = 0; i < n-2; i++)
if(x[i][j] >= 8)
calitate += 1;
x[n][j] = (calitate/(n-2))*100;
}
n++;
return 1;
}

int Generare(int n, int m, int tab[NMAX][NMAX])


{
int i, j;
for( i = 0; i < n; i++)
{
for( j = 0; j < m; j++)
tab[i][j] = i + 1;
}
for ( i = 0; i < n; i++)
{

6
for( j = 0; j < m; j++)
cout << tab[i][j] << " " ;
cout <<"\n";
}
return 1;
}
V. Rezultate
1. Determinarea notei minimă şi maximă şi poziţiile lor.

2. Interschimbarea a 2 linii.

3. Adăugarea coloanei cu media studenților.

4. Aranjarea listei studenților după media lor.

5. Adăugarea liniei cu mediile studenților pe obiecte și media generală.

7
6. Adăugarea liniei cu procentul reușitei.

7. Adăugarea liniei cu procentul calității.

1 1 1
 
8. Generarea matricei de forma  2 2 2 .
 3 3 3
 

VI. Concluzie
La realizarea punctelor 6 și 7 din acest proiect a fost necesar să se adauge 2 linii cu procentul reușitei
și al calității, dar s-a pus condiția să nu se calculeze aceste caracteristici pentru ultima coloană, în care se
află media studenților. Pentru a rezolva această însărcinare a fost nevoie de construit matricea nouă în 2
părți. Prima parte consta de fapt în afișarea matricei existente, iar a doua parte afișa caracteristicile, dar fără
a calcula și afișa ceva pe ultimile poziții ale ambelor rânduri.

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