Probleme de informatica - enunturi si rezolvari

Probleme de informatică
Clasa a IX-a
Elementele de bază C++ (46)
Subprograme predefinite (1)
Fişiere text (2)
Algoritmi elementari (109)
Tablouri unidimensionale (83)
Tablouri bidimensionale (64)
Probleme diverse (13)
Clasa a X-a
Subprograme (funcții) (87)
Şiruri de caractere (49)
Tipul înregistrare (26)
Recursivitate (57)
Alocarea dinamică a memoriei (2)
Liste înlănţuite (25)
Algoritmul lui Lee (1)
Clasa a XI-a
Metoda "Divide et impera" (12)
Metoda Backtracking (85)
Metoda Greedy (6)
Programare dinamică (18)
Grafuri neorientate (37)
Grafuri orientate (38)
Arbori (33)
Clasa a XII-a
Elemente de bază C# (32)
POO în C# (13)
Programare vizuală în C# (10)
Examen de bacalaureat
Competențe digitale
Examen de atestat
Admitere UBB (18)
Cei n elevi dintr-o clasa au dat proba de rezistenta la ora de sport. Profesorul a intocmit un tabel cu cei en elevi si pentru fiecare dintre i:
- numele si prenumele
- rezultatul exprimat in minute si secunde
Exista un barem de trecere a probei, dat la final in minute si secunde
Afisati elevii care au trecut baremul in ordine crescatoara dupa rezultat, iar la rezultate identice, alfabetic dupa nume si prenume. Fiecare elev se afiseaza pe cate o linie prin nume, prenume si timpul obtinut la proba.
Numarul de elevi din clasa este cel mult 30. Un elev trece baremul daca timpul sau este mai mic sau egal cu baremul.
Exemplu:
rezistenta.in
7
Pop Alin
4 23
Rus Dan
4 23
Stan Darius
5 4
Pop Tudor Flaviu
4 12
Rusu Alin Dan
5 23
Sas Mihai
4 39
Rusu Paul
4 23
4 40
rezistenta.out
Pop Tudor 4:12
Pop Alin 4:23
Rus Dan 4:23
Rusu Paul 4:23
Sas Mihai 4:39

#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("rezistenta.in");
ofstream fout("rezistenta.out");

struct timp
{
    int min,sec;
};

struct elev
{
    char nume_prenume[51];
    timp rez;
};

void citire(elev &e)
{
    fin.getline(e.nume_prenume,51);
    fin>>e.rez.min>>e.rez.sec;
    fin.get();
}

void citire(elev A[], int &n, timp &barem)
{
    fin>>n;
    fin.get();
    for(int i=1;i<=n;i++)
        citire(A[i]);
    fin>>barem.min>>barem.sec;
}

int maibun(timp t1, timp t2)
{
    if(t1.min*60+t1.sec<=t2.min*60+t2.sec) return 1;
    else return 0;
}

int egal(timp t1, timp t2)
{
    if(t1.min*60+t1.sec==t2.min*60+t2.sec) return 1;
    else return 0;
}

void inter(elev &x, elev &y)
{
    elev aux;
    aux=x;
    x=y;
    y=aux;
}

void ordonare(elev A[], int n)
{
    for(int i=1;i<n;i++)
        for(int j=i+1;j<=n;j++)
            if(maibun(A[i].rez,A[j].rez)==0 ||
               egal(A[i].rez,A[j].rez) && strcmp(A[i].nume_prenume,A[j].nume_prenume)>0)
                inter(A[i],A[j]);
}

void afisare(elev e)
{
    fout<<e.nume_prenume<<" "<<e.rez.min<<":"<<e.rez.sec<<endl;
}

void afisare(elev A[], int n, timp barem)
{
    for(int i=1;i<=n;i++)
        if(maibun(A[i].rez,barem))
            afisare(A[i]);
}

int main()
{
    int n;
    elev A[31];
    timp barem;
    citire(A,n,barem);
    ordonare(A,n);
    afisare(A,n,barem);
    return 0;
}

18 aug 2018
Site-ul conține 867 de probleme rezolvate
Copyright © 2009-2018 Muresan Vasile Ciprian