Ghidul propunătorului

Adăugarea de probleme este permisă numai unei categorii de utilizatori pbInfo.ro, propunătorii. Un utilizator poate deveni propunător cu acceptul unui administrator pbInfo.ro.

Notă: Deocamdată nu se mai adaugă propunători.

Tipuri de probleme

pbInfo.ro permite adăugarea a două tipuri de probleme:

  • probleme la care soluția este un program complet. La rândul lor, pot fi împărțite în două categorii, după modul în care se fac operațiile de intrare/ieșire:
    • operațiile de intrare/ieșire de la consolă
    • operațiile de intrare/ieșire din fișiere text
  • probleme la care soluția este o secvență de program.

Etapele elaborării unei probleme

Etapele elaborării unei probleme sunt:

  • stabilirea parametrilor pentru problemă – problema nu este vizibilă
  • solicitarea aprobării pentru problemă – problema nu este vizibilă
  • administratorul acceptă problema – problema devine vizibilă
    sau
  • administratorul refuză problema – problema nu este vizibilă. Administratorul motivează refuzul. Răspunsul este vizibil în pagina de solicitare a aprobării.

Adăugarea unei probleme

Pentru a adăuga o problemă se precizează în primă fază:

  • denumirea problemei nu se poate repeta; nu începe cu cifră
  • limbajul de programare utilizat:
    • pentru problemele la care cere un program complet, alegeți Toate;
    • pentru problemele la care se cere scrierea unei secvențe de program alegeți limbajul dorit
  • tipul operațiilor de intrare/ieșire ( consola sau fișiere). Poate fi modificat mai târziu, dar vă recomandăm să faceți alegerea corecta de la început – pentru enunț sunt pregătite șabloane particularizate pentru tipul de citire.

Editarea problemei

Ceilalți parametri ai problemei se stabilesc în continuare. Aceștia sunt:

  • parametri generali (setări): denumire, limbaj de programare, dificultate, clasa, autor (numele și prenumele), sursa (concurs/examen/etc)
  • enunț și rezumat
  • indicații de rezolvare
  • parametri specifici pentru evaluare (verificator)
  • program suport – numai pentru problemele cu limbaj de programare precizat, la care soluția este o secvență de program
  • categorii.

Modificările efectuate în problemele aprobate duc la pierderea acestui statut, fiind necesară solicitarea unei noi aprobări!

Parametri generali

Denumirea problemei

Denumirile problemelor nu se pot repeta. Vă recomandăm să nu folosiți spații în denumirea problemei. Dacă aceasta este formată din mai multe cuvinte (deși n-ar fi de dorit) vă recomandăm să le separați prin caractere de subliniere (underscore). De asemenea, este recomandat ca denumirea problemei să nu înceapă cu cifră!

Dificultate

Dificultatea unei probleme poate fi:

  • ușoară
  • medie
  • dificilă
  • concurs

La stabilirea dificultății, țineți cont de:

  • pentru problemele care au fost date în concursuri stabiliți nivelul de dificultate concurs;
  • nivelul de dificultate trebuie privit din perspectiva celor care rezolvă problema (în cele mai multe cazuri elevi), nu a propunătorului
    • pentru problemele la care se aplică direct o definiție sau un algoritm elementar precizați nivelul de dificultate ușor
    • pentru problemele la care se aplică doi sau mai mulți algoritmi elementar, precizați nivelul de dificultate mediu
    • pentru problemele la care se aplică tehnici de programare suplimentare, artificii pentru eficientizarea spațiu/timp a soluției, cunoștințe specifice altor discipline, precizați nivelul de dificultate dificil
  • dacă o problemă poate avea mai multe rezolvări, de complexități diferite, vă recomandăm adăugați mai multe probleme, cu restricții, teste și nivel de dificultate specifice rezolvării dorite.

Stabilirea clasei

Vă rugăm să alegeți clasa pentru care este propusă problema în concordanță cu programa de informatică pentru profilul matematică informatică, intensiv informatică.

Pentru problemele care au fost date în concursuri, se poate stabili pentru clasă Probleme din concursuri; aici se găsesc probleme de dificultate sporită, adresate cu precădere olimpicilor la informatică.

Enunț, rezumat, indicații de rezolvare

Enunțul, rezumatul și indicațiile de rezolvare ale problemei sunt materiale text realizate de propunător. Modul de editarea a acestora este descris spre sfârșitul acestui document.

Pentru enunțul problemei se va respecta formatul existent în șablonul furnizat. Enunțul trebuie să conțină obligatoriu restricțiile pentru problemă, care vor fi respectate și atinse de testele propuse pentru evaluare.

Rezumatul prezintă pe scurt problema propusă, fiind afișat în listele de probleme de pe site. Complexitatea sa este la alegerea propunătorului, dar se recomandă să fie concis.

Indicațiile de rezolvare reprezintă un text care explică modul de rezolvare a problemei, fără a conține programe sursă.

Verificator

Verificatorul este alcătuit din trei componente:

  • restricțiile
  • testele de evaluare
  • programul de verificare (opțional)

Restricțiile

Restricțiile problemei stabilesc:

  • numele fișierul de intrare, al fișierului de ieșire și al fișierului ok – care conține răspunsul corect, corespunzător fișierului de intrare. Valorile implicite sunt în concordanță cu numele problemei. Aceste fișiere se folosesc la evaluare, chiar dacă problema precizează că citirea datelor se face de la consolă.
  • restricția de timp, cu o zecimală, exprimată în secunde
  • restricțiile de memorie, exprimate în MB. Memoria de tip stivă face parte din memoria totală. Vă recomandăm să precizați limite generoase de memorie acolo unde este posibil, ținta acestor probleme fiind elevul obișnuit, nu neapărat olimpicul la informatică.

Testele de evaluare

Testele de evaluare sunt alcătuite din:

  • etichetă – un număr natural care precizează ordinea de afișare testelor
  • punctajul – un număr natural nenul. Valoarea acestuia este la alegerea propunătorului. Suma punctajelor tuturor testelor trebuie să fie 100
  • fișierul de intrare (conține datele de intrare) și fișierul OK (conține răspunsul corect). Acestea trebuie să respecte următoarele:
    • datele din fișierele de intrare trebuie să respecte restricțiile precizate în enunț și să le atingă – cel puțin un test să conțină valorile maxime din restricții;
    • exemplele date în enunț trebuie să se regăsească printre teste, iar acest lucru să fie marcat corespunzător. Exemple vor primi, cumulat dacă este cazul, maxim 20 de puncte;
    • fișierul OK vor conține întotdeauna un răspuns corect pentru datele din fișierul de intrare, chiar dacă, folosindu-se un program de verificare personalizat, valorile din fișierul OK nu sunt folosite pentru evaluare;
    • datele din fișierele de intrare trebuie să reflecte cât mai bine specificul problemei și eventualele cazuri particulare.

Pentru o problemă se recomandă minim 5 teste, o parte dintre ele fiind exemplele din enunț. Acestea nu vor depăși 20 de puncte. Nu se acceptă probleme cu mai puțin de trei teste.

Programul de verificare

În realizarea evaluării unei soluții, dacă executarea programului se finalizează normal, are loc verificarea rezultatelor, folosind un program de verificare.

Pentru verificare, se poate folosi programul de verificare implicit , care verifică fișierul OUT și fișierul OK linie cu linie (folosind comanda Linux diff). Aceasta este metoda implicită și nu necesită nici o acțiune din partea propunătorului. Metoda poate fi folosită numai la problemele fără punctaje parțiale și cu soluție unică. Mai precis, programul de verificare implicit permite următoarele diferențe între fișierul OUT și fișierul OK:

  • o linie goală în plus la sfârșitul unuia dintre fișiere
  • un spațiu în plus la sfârșitul liniei în oricare dintre cele două fișiere

Orice altă diferență va conduce la depunctarea soluției.

Pentru alte situații este posibilă încărcarea unui program de verificare personalizat, scrin în C++, C sau Pascal. Acesta va fi executat după programul rezolvitorului și va avea acces la fișierele IN, OUT și OK, ele fiind în directorul curent, Programului i se transmit trei paramatri:

  • numele fișierului OUT
  • numele fișierului OK
  • punctajul curent

Verificatorul va afișa la ieșirea standard un mesaj de forma
scor mesaj obtinut la evaluare
alcătuit dintr-un număr natural reprezentând scorul obținut, respectiv un mesaj explicativ. Exemple:

  • 20 Raspuns corect
  • 0 Nu este bine...

Atenție!

  • Programul de verificare va lucra cu cele trei fișiere chiar dacă problema precizează că operațiile de intrare/ieșire se fac la consolă.
  • Programul de verificare nu va afișa la ieșirea standard altceva decât mesajul corespunzător.
  • Probleme pentru care datele de ieșire conțin numere reale trebuie să aibă program de verificare care să verifica corectitudinea răspunsului cu o anumită precizie – de regulă cel puțin două zecimale corecte.

Un model de program de verificare poate fi descărcat din pagina de editare a problemelor.

Programul suport

O categorie aparte de probleme care pot fi postate pe pbInfo.ro este reprezentată de problemele la care soluția constă într-o secvență de program.

Pentru aceste probleme trebuie precizat limbajul de programare utilizat, deoarece se folosește un program suport. Acesta este furnizat de propunător și pentru fiecare soluție postată, aceasta va fi inserată în programul suport care va fi apoi compilat și evaluat.

Categorii pentru problemă

Categoriile de probleme pot fi gestionate către administrator. Dacă nicio categorie nu se potrivește cu problema propusă ne puteți contacta pentru a adăuga o nouă categorie.

La stabilirea categoriei țineți cont de următoarele:

  • fiecare problemă se înscrie la o singură categorie. Excepție fac problemele date în concursuri care pot fi publicate la mai multe categorii
  • la stabilirea categoriei se va ține cont de programa de informatică de la profilul matematică-informatică, intensiv informatică. Se va alege categoria care vizează conținuturile din programă care sunt, cronologic și logic, cele mai avansate. De exemplu, alegerea unei categorii de la Algoritmi elementari pentru o problemă a cărei rezolvare cere tablouri este considerată nepotrivită.

Verificarea problemei, sursa oficială

După stabilirea proprietăților specifice problemei urmează verificarea acesteia, prin încărcarea unor soluții de test. Acest lucru se face din pagina problemei, disponibilă în acest moment numai propunătorului și administratorilor.

Soluțiile trimise acum trebuie să verifice dacă restricțiile precizate în enunț sunt respectate.

După ce se verifică problema cel puțin una dintre soluțiile trimise va fi marcată ca soluție oficială. Din soluțiile oficiale pot să lipsească verificările restricțiilor și trebuie să obțină punctaj maxim.

Soluțiile oficiale trebuie să reprezinte modele de urmat pentru elevi. Ele vor fi scrise respectând regulile uzuale de editare ale limbajului de programare folosit. Iată câteva reguli:

  • operațiile importante vor fi însoțite de comentarii
  • toate instrucțiunile imbricate vor fi indentate. Numărul de spații recomandat pentru un TAB este 4.
  • între subprograme se lasă un rând liber;
  • între operatori și operanzi se lasă exact un spațiu. Excepție fac operatorii de incrementare/decrementare.
  • nu se declară global identificatori cu semnificație locală;
  • pentru sursele C++ operațiie de intrare/ieșire se vor face cu stream-uri, în cel puțin o soluție oficială.

Încurajăm publicarea mai multor soluții oficiale, cu rezolvări alternative

Editarea documentelor

Este obligatorie folosirea diacriticelor și spațierea corectă: cuvânt, semn de punctuație, spațiu, următorul cuvânt!

pbInfo.ro folosește Textile pentru formatarea documentelor. Sintaxa este foarte simplă, iar paginile produse sunt curate și prezintă un aspect uniform. Pe paginile în care se cere formatarea unui document este afișat un panou cu o listă condensată a regulilor Textile.

Pentru enunțul, rezumatul și soluția unui probleme codul HTML generat de Textile va conține marcajele HTML inserate, alături de cele generate de Textile. De exemplu, codul x2 poate fi generat astfel:

 @x@<sup>@2@</sup> 

Pentru inserarea unei secvențe C++ se poate folosi următorul cod:

pre(code_c).. #include 
using namespace std;

int main()
{
    int a , b;
    cin >> a >> b;
    int s = a + b;
    cout << s;
    return 0;
}
cu următorul efect:
#include <iostream>
using namespace std;

int main()
{
    int a , b;
    cin >> a >> b;
    int s = a + b;
    cout << s;   
    return 0;
}

Pentru a insera expresii cu conținut matematic folosim MathJax și Latex. O expresie inline va fi delimitată de \( și \). De exemplu \(1 \over x\) produce \(1 \over x\).

Părerea ta contează. A fost utilă această pagină?

Informații pentru propunătorii de probleme