Diferente pentru documentatie/ghid-evaluator intre reviziile #13 si #18

Nu exista diferente intre titluri.

Diferente intre continut:

h1. Ghid Evaluator
== include(page="documentatie/sidebar")==
 
h2. Ce este un evaluator?
Pentru problemele in care raspunsul nu este unic, site-ul *infoarena* a fost conceput sa foloseasca un program extern pentru verificarea raspunsului. Acest program se numeste _evaluator_, si poate fi scris in $C, C++$ sau $Pascal$.
Pentru a realiza un evaluator compatibil cu design-ul infoarena trebuie respectate urmatoarele reguli:
* In functie de numele introdus in setarile problemelei pentru evaluator, fisierul care va fi atasat la pagina problemei trebuie prefixat cu cuvantul $grader_$ (spre exemplu daca s-a introdus in setarile problemei $eval.cpp$ fisierul care trebuie atasat se va numi $grader_eval.cpp$)
* In functie de numele introdus in setarile problemei pentru evaluator, fisierul care va fi atasat la pagina problemei trebuie prefixat cu cuvantul $grader_$ (spre exemplu daca s-a introdus in setarile problemei $eval.cpp$ fisierul care trebuie atasat se va numi $grader_eval.cpp$)
* Daca numele problemei este $prob$ fisierul de intrare care se evalueaza se numeste $prob.in$, fisierul de iesire al utilizatorului se numeste $prob.out$, iar fisierul de evaluare (care contine informatii despre raspunsul corect pentru testul respectiv) se numeste $prob.ok$. Nu se recomanda folosirea altor fisiere in timpul evaluarii.
 
* Evaluator trebuie sa verifice ca fiecare din operatiile de deschidere de fisier sau de citire se efectueaza corect. Cateva exemple in $C/C++$:
** functia $fopen$ returneaza un pointer catre fisierul deschis, iar daca acesta este $NULL$ s-a produs o eroare la deschiderea fisierului iar aceasta trebuia raportata
** functiile $scanf / fscanf$ returneaza numarul de valori citite din lista de argumente; astfel se poate verifica la fiecare apel daca au fost citite toate datele si se poate detecta orice eroare de citire
** asemanator cu $scanf$ , functia $gets / fgets$ returneaza o valoarea diferita de $0$ daca a efectuat cu succes citirea
Toate aceste verificari sunt *necesare*, in caz contrar evaluator poate crapa daca fisierul de iesire al utilizatorului nu respecta formatul de iesire.
 
* Desi se presupune ca fisierul de intrare ({$.in$}) si fisierul de verificare ({$.ok$}) sunt corecte, se recomanda sa se verifice daca acestea sunt intr-adevar valide folosind acelasi tratament ca pentru fisierul de iesire al utilizatorului. In plus, se poate verifica daca fisierul de intrare respecta intr-adevar restrictiile din enuntul problemei. Aceste verificari pot identifica eventualele greseli din fisierele de intrare "din fasa" si de aceea recomandam cu insistenta folosirea lor.
 
* Odata ce s-a evaluat fisierul de iesire, mesajul trimis de evaluator trebuie afisat la $stderr$, iar punctajul la $stdout$, iar executia programului de evaluare trebuie terminata. Se recomanda scrierea unei functii care sa faca aceste lucruri:
== code(cpp) |
p{width:75%}. == code(cpp) |
void result(char msg[], int p)
{
    fprintf(stderr, msg);
    fprintf(stderr, "%s", msg);
    printf("%d", p);
    exit(0);
}
==
* Evaluator trebuie sa verifice ca fiecare din operatiile de deschidere de fisier sau de citire se efectueaza corect. Cateva exemple in $C/C++$:
** functia $fopen$ returneaza un pointer catre fisierul deschis, iar daca acesta este $NULL$ s-a produs o eroare la deschiderea fisierului iar aceasta trebuia raportata
** functiile $scanf / fscanf$ returneaza numarul de valori citite din lista de argumente; astfel se poate verifica la fiecare apel daca au fost citite toate datele si se poate detecta orice eroare de citire
** asemanator cu $scanf$ , functia $gets / fgets$ returneaza o valoarea diferita de $0$ daca a efectuat cu succes citirea
Toate aceste verificari sunt *necesare*, in caz contrar evaluator poate crapa daca fisierul de iesire al utilizatorului nu respecta formatul de iesire.
 
* Desi se presupune ca fisierul de intrare ({$.in$}) si fisierul de verificare ({$.ok$}) sunt corecte, se recomanda sa se verifice daca acestea sunt intr-adevar valide folosind acelasi tratament ca pentru fisierul de iesire al utilizatorului. In plus, se poate verifica daca fisierul de intrare respecta intr-adevar restrictiile din enuntul problemei. Aceste verificari pot identifica eventualele greseli din fisierele de intrare "din fasa" si de aceea recomandam cu insistenta folosirea lor.
Daca ai probleme cu redactarea unui evaluator, poti contacta un 'administrator':echipa-infoarena sau o persoana 'implicata':implica-te in proiectul 'Extinde Arhiva':implica-te/extinde-arhiva.

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.