Olimpiada Nationala de Informatica
- liceu -
ghidul elevului
Evaluarea se realizeaza cu un sistem automat de evaluare (un sistem de programe
care compileaza sursele voastre, executa programul vostru pentru fiecare set
de date de intrare pregatit de comisie pentru evaluare, verifica daca datele
de iesire furnizate de programul vostru sunt corecte, acorda un punctaj pentru
fiecare set de date, genereaza borderouri individuale de evaluare si clasamente
pentru fiecare proba de concurs).
Sistemul de evaluare nu este tolerant, el impune respectarea cu rigurozitate
a cerintelor specificate în regulament si în enuntul problemei.
Recomandari generale
- În prima jumatate de ora cititi cu mare atentie enunturile tuturor
problemelor. Un enunt trebuie citit cu atentie pâna la sfârsit.
Descrierea datelor de intrare si de iesire clarifica mult enuntul problemei.
De asemenea este bine sa verificati "de mâna" exemplele date
în enunt.
- Orice neclaritate sau dubiu ati avea, adresati în scris întrebari
comisiei, în limita timpului acordat pentru aceasta! Formulati întrebarile
astfel încât sa puteti primi un raspuns util (DA sau NU). Evitati
întrebarile inutile ("Este alba sau neagra?", "Nu înteleg
ce înseamna X", etc) sau întrebarile negative (de obicei
conduc la neîntelegeri).
- Restrictiile precizate în enunt sunt deosebit de importante. Declararea
datelor din programul vostru trebuie sa fie în concordanta cu aceste
restrictii. Restrictiile, corelate cu timpul maxim de executie pe fiecare
test, sunt indicatii referitoare la complexitatea algoritmilor de rezolvare
solicitata de comisie pentru punctaj maxim. Ceea ce nu înseamna ca un
program corect având complexitate mai mare va lua 0 puncte. Testele
de evaluare sunt diferite ca structura si dimensiune (în general în
teste se trateaza cazurile particulare, exista teste de dimensiuni mici, medii
si mari).
- Cititi datele de intrare din fisierul de intrare si afisati rezultatele
în fisierul de iesire specificat în enunt. Respectati cu strictete
numele si extensia fisierului (scrise cu litere mici) si formatul datelor
specificat în enunt. Fiti atenti inclusiv la caracterele albe (spatii,
tab-uri sau marcaje de sfârsit de linie). Daca nu cititi în formatul
specificat, veti avea erori la citire. Daca nu scrieti în formatul cerut,
programul de evaluare al comisiei va detecta erorile din structura fisierului
de iesire si veti obtine 0 puncte. NU precizati cumva calea catre fisierele
de intrae/iesire (fiti convinsi ca fisierele se vor afla în directorul
curent, altul decât cel pe care ati lucrat voi).
- Orice linie se termina obligatoriu cu un marcaj de sfârsit de linie
(Enter).
- Datele de intrare utilizate la evaluare sunt corecte (respecta restrictiile
specificate în enunt).
- Nu uitati sa închideti fisierul de iesire! Altfel este extrem de probabil
ca ultimele date scrise sa ramâna în buffer, fara sa fie scrise
si în fisier.
- Creati directorul denumit cu ID-ul vostru. Rezervati ultimele 5 minute pentru
salvarea surselor corecte si stergerea tuturor celorlalte fisiere din directorul
vostru. Nu va grabiti la salvare! Verificati de x ori (x>3)! Mare atentie
la numele fisierelor! Trebuie sa coincida cu numele specificate în enunt
(scrise cu litere mici!).
- Chiar daca credeti ca ati terminat tot, nu plecati!!! Testati programele
proprii pe cât mai multe date de test (preferabil si de dimensiuni mari,
în conformitate cu restrictiile din enuntul problemei).
- Nu afisati nimic pe ecran si (mai ales!!!) NU uitati în programe instructiuni
de genul readln; readkey; sau getch(); Daca asteptati (inutil) o tasta, cu
siguranta veti depasi timpul de executie precizat în enunt! Daca depasiti
timpul de executie veti lua 0 puncte.
- Nu utilizati variabile neinitializate!
- Pentru programatorii Pascal utilizarea unit-ului CRT este interzisa (si
de altfel inutila, din moment ce nu folositi ecranul). Daca insistati totusi
sa utilizati acest unit, veti primi eroare la executie (Division by 0), deci
0 puncte. Programatorii în C nu vor utiliza conio.h.
- Salvati frecvent! Calculatoarele se pot bloca, poate aparea o pana de curent,
etc.
Windows versus Linux
La ONI 2003 veti fi evaluati atât sub Linux, cât si sub Windows.
Daca doriti sa beneficiati de avantajele evaluarii sub Linux trebuie sa tineti
cont de câteva particularitati ale lucrului sub Linux.
- În primul rând trebuie sa fiti atenti la numele fisierelor (Linux
este case-sensitive!). Conventia generala este: numele tuturor fisierelor
care intervin în problema se vor scrie cu litere mici.
- Evaluatorul testeaza daca programul nu returneaza un cod de eroare. Programatorii
C si C++ trebuie sa fie atenti ca tipul functiei main() sa fie int si la sfârsit
sa returneze valoarea 0 (return 0; sau exit(0);). Pentru programatorii Pascal
nu exista aceasta problema, deoarece în caz de terminare "normala"
a programului codul returnat este 0. Daca iesiti dintr-un program în
mod fortat (cu subprograme de tip exit), returnati valoarea 0, daca doriti
sa fie considerat un mod de terminare "normal".
- În Linux, daca utilizati pointeri care acceseaza zone de memorie
în afara zonelor de memorie alocate programul vostru se va termina cu
un mesaj de eroare (Segmentation Fault). Comportamentul unui astfel de program
rulat sub Windows este impredictibil.
- Daca utilizati tablouri si folositi indici care sa depaseasca limitele declarate
pentru tablou, programul vostru se va termina de asemenea cu un mesaj de eroare
(Segmentation Fault). Comportamentul unui astfel de program rulat sub Windows
este greu predictibil.
- Mediile de lucru sub Linux sunt foarte stabile.
- Timpul de executie a aplicatiilor sub Linux este mai mic decât sub
Windows.
Free Pascal versus Borland Pascal
1. Memorie disponibila
| FreePascal |
Borland Pascal |
| Puteti aloca oricâta memorie doriti (în limita
memoriei RAM disponibile si a restrictiilor specificate în problema).
Daca în problema nu exista alte restrictii, în mod uzual se
utilizeaza un o zona de date de 15 Mb si stiva de 1 Mb. |
Pentru datele alocate static aveti la dispozitie 64 KB. Pentru
stiva maxim 65520 B, iar pentru heap maxim 655360 B. |
2. Tipuri de date
| FreePascal |
Borland Pascal |
| Datele de tipuri reale se aloca pe 8 B, exceptând tipul
extended care se aloca pe 10B si tipul single care se aloca pe 4B. |
Datele de tip real se aloca pe 6 B.
Pentru a utiliza date de tipuri double, extended, comp trebuie utilizata
directiva de compilare {$N+}
Datele de tip comp se aloca pe 8B.
Datele de tip double se aloca pe 8B.
Datele de tip extended se aloca pe 10B.
Datele de tip single se aloca pe 4B.
|
| Exista tipul întreg int64 pentru lucrul cu numere întregi
pe 64 de biti. |
- |
3. Optiuni de compilare
Cei obisnuiti sa introduca la începutul surselor lor Pascal toate optiunile
de compilare cu CTRL/O CTRL/O vor primi urmatoarele avertismente la compilare:
$A, $B, $N, $O - optiune inexistenta în FP
$F, $G - optiuni ignorate
$S - controlul stivei este global în Linux.
GNU versus Borland
1. Memorie disponibila
| gcc, g++ |
Borland C |
| Puteti aloca oricâta memorie doriti (în limita
memoriei RAM disponibile si a restrictiilor specificate în problema).
Daca în problema nu exista alte restrictii, în mod uzual se
utilizeaza un o zona de date de 15 Mb si stiva de 1 Mb. |
Pentru datele alocate static aveti la dispozitie 64 KB. Pentru stiva
maxim 65520 B, iar pentru heap maxim 655360 B.
|
| Gestiunea memoriei este impecabila. |
Exista situatii frecvente în care desi exista memorie
disponibila, nu se face corect alocarea dinamica a memoriei. |
2. Memorie disponibila
| gcc, g++ |
Borland C |
Datele de tip int se aloca pe 4B, la fel si datele de tip
long int.
Datele de tip short int se aloca pe 2B.
Exista tipul long long care se aloca pe 8B.
|
Datele de tip int se aloca pe 2B, la fel datele de tip short int. Datele
de tip long int se aloca pe 4B.
|
| Erorile în lucrul cu numere reale sunt în limitele
admise teoretic. |
La lucrul cu numere reale apar erori "grosolane". |
3. Fisiere antet disponibile
Nu toate fisierele antet disponibile în mediul Borland sunt disponibile
si în gcc/g++. Lista de fisiere antet disponibile este mare. Putem preciza
ca în gcc puteti conta de exemplu pe stdio.h, stdlib.h, string.h, math.h,
limits.h, time.h, assert.h, iar în g++ si pe iomanip.h, iostream.h, ostream.h,
fstream.h.
Nici functiile declarate în aceste fisiere antet nu coincid 100%.
|
|
contact organizatori : emil@lufo.ro |
realizatori web : vivi, irina
|