This is an old revision of the document!


Tema 1 – Catalog studenți (C++)

Publicare: 06.10.2024
Deadline: 19.10.2024, ora 23:59

Autor: Trifu Marius-Constantin

Informații generale

  • Tema trebuie realizată exclusiv în C++.
  • Nu se permite folosirea STL (implementați structuri și algoritmi de la zero).
  • Testare automată pe 8 seturi input/output.
  • Toate valorile numerice din fișiere trebuie să fie în format standard (punct pentru zecimale).
  • Se acceptă implementare procedurală sau OOP (dar organizată pe fișiere `.h/.cpp`).

1. Descriere

Se dă un fișier catalog.in cu date despre studenți. Cerința este să calculați media fiecărui student, să sortați descrescător după medie și să afișați primii K studenți în fișierul catalog.out.

Criterii de sortare:

  • Media descrescător
  • La egalitate, după nume (alfabetic A→Z)
  • La egalitate, după vârstă (crescător)

Cerințe suplimentare:

  • Media se afișează cu exact două zecimale, folosind rotunjire corectă.

Exemple:

  1. 9.666 → 9.67
  2. 9.664 → 9.66
  • Output-ul (`catalog.out`) trebuie să respecte formatul exact conform testelor oficiale.

2. Formate fișiere

2.1 Fișier de intrare

Format general:

catalog.in
N K
nume varsta m nota1 nota2 ... nota_m
nume varsta m nota1 nota2 ... nota_m
...

Explicații câmpuri:

  • N – numărul total de studenți (1 ≤ N ≤ 1000)
  • K – câți studenți se afișează în fișierul de ieșire (1 ≤ K ≤ N)
  • nume – un cuvânt (maxim 20 caractere)
  • varsta – număr întreg pozitiv
  • m – numărul de note, 1 ≤ m ≤ 20
  • notele – valori reale în [0, 10], separate prin spațiu
catalog.in
5 3
Ion 20 3 9.5 8.0 10.0
Maria 19 2 10.0 9.0
Andrei 21 4 7.5 8.0 9.0 8.5
Elena 22 3 9.0 9.0 9.5
Vlad 20 2 8.0 7.5

2.2 Fișier de ieșire: catalog.out

  • Primele K linii după sortare.
  • Format: `Nume Varsta Media`

Format tabel obligatoriu:

  • Prima linie este antetul tabelului: `Nume`, `Varsta`, `Medie`
  • Următoarele linii conțin datele studenților
  • Fiecare coloană are un spațiu fix:
    • `Nume` – 20 caractere (spații incluse)
    • `Varsta` – 6 caractere
    • `Medie` – 5 caractere, cu exact două zecimale
  • Separatorii liniilor (`+—+—+—+`) trebuie păstrați
  • Liniile de date se completează exact sub antet, iar formatul se respectă pentru fiecare rând, inclusiv spațiile

Exemplu:

+----------------------+--------+-------+
| Nume                 | Varsta | Medie |
+----------------------+--------+-------+
| Maria                | 19     | 9.50  |
| Elena                | 22     | 9.17  |
| Ion                  | 20     | 9.17  |
+----------------------+--------+-------+

Observații:

  • Media se rotunjește corect la 2 zecimale.
  • Dacă două medii sunt egale → sortare după nume.
  • Dacă media și numele sunt egale → sortare după vârstă.

3. Implementare

  • În main.cpp trebuie să existe doar `int main`, unde apelați funcții.
  • Evitați declararea variabilelor direct în `main`.
  • Toate funcțiile trebuie documentate cu un scurt comentariu.
  • Folosiți `<fstream>` și verificați deschiderea fișierelor.
  • Separator zecimal: punct (`.`).

4. Punctaj (5p)

  • Teste automate (4p)
    • 8 teste × 0.5p = 4p
  • Fișier README.md (1p) care să conțină:
    • Nume și grupă
    • OS și IDE
    • Explicația organizării funcției `int main`

Notă: Dacă tema nu compilează sau nu trece niciun test, va fi notată cu 0 puncte, iar README.md nu se ia în considerare.

5. Încărcare

Link de încărcare: aici

Foarte important: După ce dați accept la repository, schimbați numele din Settings în formatul:

  • *tema1-322AB-Nume-Prenume

Ex: tema1-322AB-Trifu-Marius**

După accept:

  • Clonați repository-ul (`git clone`).
  • Lucrați doar în structura dată (nu ștergeți fișierele existente).
poo-is-ab/tema/2025/01.1758986299.txt.gz · Last modified: 2025/09/27 18:18 by marius.trifu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0