Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string.h>
- using namespace std;
- struct nod {
- char nume[50];
- char prenume[50];
- float notaLimbaRomana;
- float notaMatematica;
- float notaPurtare;
- float medieGenerala;
- nod* next;
- };
- void initializare(nod* &p);
- void adaugareDreapta(nod* &p, nod* &u);
- void afisare(nod * p);
- int numarDeElementeInLista(nod *p);
- float calculareMedieGeneralaEleviPromovati(nod *p);
- int eCorigent(nod *elev);
- void afisareEleviPromovatiInOrdineDescAMediei(nod * &p);
- int calculEleviPromovati(nod *p);
- void afisareStudentiCorigenti(nod * p);
- int main() {
- ifstream file("elevi.in");
- char line[255];
- nod* primulStudent = nullptr;
- while (file.getline(line, sizeof(line))) {
- char *token = strtok(line, ",");
- nod *studentulCurent = new nod;
- strcpy(studentulCurent->nume, token);
- token = strtok(NULL, ",");
- strcpy(studentulCurent->prenume, token);
- token = strtok(NULL, ",");
- studentulCurent->notaLimbaRomana = atof(token);\
- token = strtok(NULL, ",");
- studentulCurent->notaMatematica = atof(token);
- token = strtok(NULL, ",");
- studentulCurent->notaPurtare = atof(token);
- token = strtok(NULL, ",");
- studentulCurent->medieGenerala = atof(token);
- if (primulStudent == nullptr) {
- primulStudent = studentulCurent;
- initializare(primulStudent);
- } else {
- adaugareDreapta(primulStudent, studentulCurent);
- }
- }
- afisare(primulStudent);
- cout << "Cerinta 1. \n";
- cout << "Media generala a elevilor care nu sunt corigenti: " << calculareMedieGeneralaEleviPromovati(primulStudent);
- cout << "\nCerinta 2.\n";
- cout << "Afisare elevi promovati in ordinea descrescatoare a mediei generale: \n";
- afisareEleviPromovatiInOrdineDescAMediei(primulStudent);
- cout <<"\nCerinta 3\n";
- cout << "Afisare baza de date elevi corigenti:\n ";
- afisareStudentiCorigenti(primulStudent);
- }
- void initializare(nod* &primulNod) {
- {
- primulNod->next = nullptr;
- }
- }
- void adaugareDreapta(nod* &primulNod, nod* &nodDeAdaugat) {
- nod *curent;
- curent = primulNod;
- while (curent->next != nullptr){
- curent = curent->next;
- }
- curent->next = nodDeAdaugat;
- nodDeAdaugat->next = nullptr;
- }
- void afisareEleviPromovatiInOrdineDescAMediei(nod * &p) {
- nod *elevulCurent;
- elevulCurent = p;
- int numarEleviPromovati = calculEleviPromovati(elevulCurent);
- struct nod eleviPromovati[numarEleviPromovati];
- int i =0;
- while (elevulCurent != nullptr) {
- if (!eCorigent(elevulCurent)) {
- eleviPromovati[i] = *elevulCurent;
- i++;
- }
- elevulCurent = elevulCurent->next;
- }
- for (int i = 0; i < numarEleviPromovati; i++) {
- for (int j = 0; j < numarEleviPromovati-1; j++) {
- if (eleviPromovati[j].medieGenerala < eleviPromovati[j+1].medieGenerala) {
- nod temp = eleviPromovati[i];
- eleviPromovati[i] = eleviPromovati[j];
- eleviPromovati[j] = temp;
- }
- }
- }
- for (int i = 0; i < numarEleviPromovati; i++) {
- cout << eleviPromovati[i].nume << " " << eleviPromovati[i].prenume << endl;
- }
- }
- float calculareMedieGeneralaEleviPromovati(nod* primulNod) {
- int numarElevi=0;
- float sumaNote = 0.0;
- nod *temp = primulNod;
- while (temp->next != nullptr) {
- if (!eCorigent(temp)) {
- sumaNote += temp->medieGenerala;
- numarElevi++;
- }
- temp = temp->next;
- }
- return sumaNote / numarElevi;
- }
- int eCorigent(nod* elev) {
- if (elev->notaMatematica < 5 || elev->notaLimbaRomana < 5) {
- return 1;
- } else {
- return 0;
- }
- }
- void adaugareStanga(nod* &primulNod, nod* &nodDeAdaugat) {
- nodDeAdaugat->next = primulNod;
- primulNod = nodDeAdaugat;
- }
- void afisare(nod * p) {
- nod *c;
- c = p;
- while (c != 0) {
- cout<<"Nume: " << c->nume <<"\t";
- cout<<"\nPrenume: " << c->prenume <<"\t";
- cout<<"\nNota Lb. Romana: " << c->notaLimbaRomana << "\t";
- cout<<"\nNota Matematica: " << c->notaMatematica << "\t";
- cout<<"\nNota Purtare: " << c->notaPurtare << "\t";
- cout<<"\nNota Media Generala: " << c->medieGenerala << "\t";
- c = c->next;
- cout << endl<<endl<<endl;
- }
- }
- void afisareStudentiCorigenti(nod * p) {
- nod *elevulCurent;
- elevulCurent = p;
- while (elevulCurent != 0) {
- if (eCorigent(elevulCurent)) {
- cout<<"Nume: " << elevulCurent->nume <<"\t";
- cout<<"\nPrenume: " << elevulCurent->prenume <<"\t";
- cout << endl;
- }
- elevulCurent = elevulCurent->next;
- }
- }
- int calculEleviPromovati(nod *p) {
- int numar = 0;
- nod *c = p;
- while(c != nullptr) {
- if (!eCorigent(c)) {
- numar++;
- }
- c = c->next;
- }
- return numar;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement