• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Algoritmi și Programare
 

Algoritmi și Programare

on

  • 914 views

 

Statistics

Views

Total Views
914
Views on SlideShare
914
Embed Views
0

Actions

Likes
0
Downloads
5
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Algoritmi și Programare Algoritmi și Programare Document Transcript

    • Concursul Național de Informatică F11 CompetitionRegulamentul Secțiunii Algoritmică și ProgramareAcest regulament intră în vigoare începând cu runda a doua a etapei de pregătire din cadrul secțiunii.În cazul unei schimbări de regulament, regulile din cel inițial sunt scrise cu albastru.Concursul Național de Informatică F11 Competition este organizat, sub egida Universității Alexandru IoanCuza Iași, de către Facultatea de Informatică Iași și Asociația Studenților Informaticieni Ieșeni, în parteneriat cuInspectoratul Școlar Județean Iași.ObiectiveÎn cadrul concursului, se urmărește motivarea studenților și elevilor să: ● dezvolte pasiunea și interesul pentru Informatică și Tehnologia Informației și Comunicării, ● își valorifice, verifice și dezvolte competențele în rezolvarea problemelor folosind calculatorul, ● capete experiență profesională și personală prin schimbul de idei, cunoștințe cu alți participanți cu interese comune, ● își valorifice abilitățile de prezentare și promovare a proiectelor realizate, ● se pregătească pentru a participa la competiții internaționale de Informatică și TIC.În cadrul probei de Algoritmică se urmărește dezvoltarea: ● gândirii algoritmice, ● abilităților de programare, ● spiritului competitiv.ParticipanțiParticipanții se pot grupa în echipe. În fiecare echipă se află minim 1 (un) și maxim 3 (trei) participanți înscrișiîn anul 2010-2011 la un liceu sau o facultate, indiferent de naționalitate.Dacă numărul de persoane de la proba de Algoritmi depășește 15, Comisia își rezervă dreptul de a organiza oetapă de calificare, în urma căreia se garantează calificarea primelor 5 echipe. Spre deosebire de probele deTehnologii Web și Computer Art, la proba de Algoritmică, în etapa de calificare programele echipelorparticipante sunt evaluate automat, într-un mod similar evaluării din etapa finală.Nu pot participa persoanele din organigrama internă a proiectului, și nici angajații unei companii partenere,dacă respectiva companie a propus o problemă la această secțiune.Condiții privitoare la statutul de mentor: ● trebuie să aibă împlinită vârsta de 18 ani la data de 27 Mai 2011, ● poate să-i însoțească pe participanți la etapa finală, în cazul calificării, ● nu poate contribui la activitățile echipei în proba Fast Development.EtapeCompetiția constă în trei etape: ● etapa de pregătire, în perioada 1 Martie - 20 Mai, ● etapa de calificare, în perioada 20 Mai - 27 Mai, ● etapa de concurs, în perioada 27 Mai - 31 Mai.
    • Etapa de pregătire constă în rezolvarea unor seturi de 1-4 probleme publicate în câte 3-5 runde. Fiecare rundăse desfășoară pe o perioadă de 1-3 săptămâni. Punctajele participanților se cumulează după fiecare rundă.Etapa de calificare constă în selectarea cel puțin a primelor 5 echipe și se organizează, deoarece numărul totalde participanți la proba de Algoritmică și Programare deja depășește 15. Etapa de concurs constă în rezolvarea de probleme algoritmice în decursul a 4 ore. O echipă are dreptul la unnumăr de calculatoare egal cu numărul de membri.Comisia își rezervă dreptul să se asigure înainte de etapa de concurs că nu au avut loc tentative de fraudă aleprimelor echipe și să adopte măsuri în cazul în care se constată nereguli.ÎnscriereEtapa de pregătire se desfășoară pe situl concursului F11 Competition. Pentru a participa, orice echipă trebuiesă se înscrie pe site. Atunci când completează formularul de înscriere, echipa trebuie să furnizeze informaţiicorecte şi complete. După înscriere, fiecare echipă va avea un nume de utilizator şi o parolă (pe care le va utilizapentru a intra pe site), precum şi un ID, care va fi utilizat la evaluare.LimbajeLimbajele de programare admise sunt Pascal, C și C++. Compilatoarele și mediile de lucru necesare rezolvăriiproblemelor algoritmice vor fi instalate pe discurile stațiilor de lucru. Folosirea de resurse de orice fel, alteledecât cele indicate de Comisia este strict interzisă.ComisieComisia la proba de Algoritmică este formată din: ● coordonatorul Comisiei Concursului, ● coordonatorul Comisiei la secțiunea Algoritmică, ● cadre didactice ale Facultății de Informatică, ● cadre didactice ale liceelor și colegiilor din Iași, ● colaboratori ai Facultății de Informatică, ● reprezentanți ai companiilor partenere Platinum.ProblemeProblemele variază ca dificultate și se încadrează în programa la Informatică IX-XI.Enunțurile problemelor respectă un format standard, care include: ● cerința, ● datele de intrare sau modelul de interacțiune pentru problemele interactive, ● datele de ieșire sau modelul de interacțiune pentru problemele interactive, ● minim un exemplu, ● restricțiile de timp, ● restricțiile de spațiu, ● detalii despre structura testelor, unde este cazul.Pentru fiecare problemă poate fi specificată o limită de memorie. Memoria pentru stivă este utilizată de funcţiipentru a memora valorile variabilelor locale, ale parametrilor, rezultatul şi adresa de revenire. Memoria totalădisponibilă reprezintă memoria utilizată de program pentru datele statice (de exemplu, variabilele globale),memoria pentru stivă, memoria pentru variabilele dinamice, precum şi memoria utilizată de program pentru amemora propriul cod.
    • Pentru fiecare problemă este specificat un timp maxim de execuţie. Acest timp este specificat pentru evaluareape stația de lucru a concurenților și poate diferi de timpul real, utilizat pe stația de evaluare.Un model de enunț de problemă este următorul:ZogPe Zog, de unde Excelența Sa, Plenipotențiarul Ambasador TF provine, nu există decât două numere naturale.Pentru a-și îmbogăți universul, el vrea să știe suma lor. S-a luat decizia ca Excelența Sa, PlenipotențiarulAmbasador TF și pământenii să comunice prin intermediul unui traducător automat.CerinţăSă se realizeze un program care afișează suma numerelor A și B.Date de intrareProgramul tău va citi de pe prima linie a fișierului zog.in două numere naturale A și B separate prin spațiu.Date de ieșireProgramul tău va scrie pe prima linie din fișierul zog.out suma celor două numere citite.Numărul este urmat de caracterul sfârșit de linie.Precizări• 0 ≤ A, B ≤ 105• Memorie totală: 2MB• Memorie stivă: 1MB• Timp execuție: 1sExempluzog.in zog.out34 7O problemă propusă conține:  enunț conform specficațiilor,  descrierea soluției,  două sau mai multe surse oficiale, dintre care minim două cu punctaj maxim,  teste de evaluare funcționale în evaluatorul OJI, împreună cu punctajele aferente.EvaluareEste recomandat să instalaţi pe calculatorul vostru aceleaşi versiuni pentru compilatoare ca şi cele specificateîn regulament, deoarece există diferenţe între versiuni. Fiţi deosebit de atenţi la fişierele antet utilizate.Evaluatorul testează dacă programul nu returnează un cod de eroare. Programatorii C şi C++ trebuie să fieatenţi ca tipul funcţiei main() să fie int şi la sfârşit să returneze 0.Concurenții sunt invitați să inițializeze variabilele înainte de a le utiliza, să încadreze programele în limitele despațiu și timp ale problemei. În caz contrar, nu vor obține puncte pe testele respective.După terminarea rundei de concurs, participanții vor pregăti rezolvările lor pentru evaluare, conform cuspecificațiile Comisiei. În cadrul rundei de pregătire, se consideră la evaluare ultima sursă trimisă pentru oanumită problemă.
    • Participanții la runda de concurs vor salva sursele într-un director specificat de Comisie. La finalul concursului,în acest director se vor găsi doar sursele, ale căror nume și extensii vor fi scrise cu litere mici.De exemplu, echipa HAWK33, care lucrează în C++ și rezolvă problemele MAX6, PERMUTARE și JOC, va salva îndirectorul specificat 3 surse, cu numele max6.cpp, permutare.cpp și, respectiv, joc.cpp. Convenţia generală esteca numele tuturor fişierelor care intervin în problemă să se scrie folosind litere mici și cifre, conform cu numeleproblemei.Problemele sunt evaluate în Microsoft Windows cu un program automat, utilizat și la Olimpiada Județeană deInformatică. Evaluatorul se găsește public la adresa http://www.cnlr.ro/~tucu/Evaluator.rar și este realizat șiîntreținut de prof. C. Gălățan. Executabilul echipei concurente este confruntat cu o baterie de teste, ale cărorrăspunsuri așteptate sunt calculate sau pe loc calculabile, tot de către un program al Comisiei. Compilatoareleutilizate se găsesc la adresa http://www.cnlr.ro/~tucu/OJIkit2.exe. Recomandăm verificarea timpilor deexecuție pentru diferite variante de citire/scriere.Evaluarea se realizează de două ori, de către minim doi membri ai comisiei.Dacă apar diferențe între punctajele aceleiași echipe pentru aceeași problemă, se consideră punctajul mai mare.Rezultatele evaluării (sub formă de borderouri pentru fiecare problemă în parte), soluțiile oficiale (atâtindicațiile, cât și sursele optime), testele de evaluare și programele de evaluare sunt publicate după probapentru care au fost utilizate pe situl concursului. Recomandăm participanților să testeze propriile programe peseturile de teste publicate pe site.Dacă rezultatele nu coincid cu cele obținute de echipa participantă la testare, sau consideră că unele date detest nu respectă restricțiile și precizările problemei, participanții sunt invitați să se adreseze prin e-mail sauformular Comisiei.Contestații și întrebăriContestațiile se trimit exclusiv la una din adresele f11@asii.ro sau f11@info.uaic.ro. Contestațiile trimise pe altecanale, inclusiv dar fără a ne limita la adresele persoanelor din comisie, nu vor fi luate în considerare.Întrebările se trimit exclusiv la una din adresele f11@asii.ro sau f11@info.uaic.ro precum și la adresaspecificată în enunțul problemei, dacă aceasta este diferită de cele de mai sus.În mesajele e-mail sau via formular trimise Comisiei, fie ele întrebări sau contestaţii, trebuie să specificaţi clarID-ul echipei şi trebuie să utilizaţi un limbaj politicos. În caz contrar, mesajele vor fi ignorate, iar echipa va fidescalificată. În contestație, echipa trebuie să specifice problema și motivul contestației. Fiecare contestaţieeste analizată de comisie și are ca rezultat un mesaj către echipă.Se pot trimite întrebări comisiei despre probleme, în primele 7 zile de la publicarea problemei, pentru runda depregătire, respectiv în primele 25% minute din timpul alocat rundei finale. Răspunsurile oficiale (la finală) suntsemnate de un membru al Comisiei și pot fi: ● Da, ● Nu, ● Fără comentarii / No comment.Contestațiile se pot face în decursul a 3 zile de la publicarea soluțiilor, testelor și rezultatelor pentru fiecarerundă din etapa de dezvoltare și, respectiv, 6 ore de la publicarea acestora pentru runda finală. Dacă se acceptăcontestaţia, pe sit apare punctajul obținut în urma reevaluării pentru echipa care a depus contestaţia şi, în cazulîn care testele de evaluare sau verificatorul au fost modificate, pentru toţi participanții care au trimis soluții larespectiva problemă. Va fi publicat pe sit şi un anunţ general în acest sens.
    • RezultateFiecare participant are asociat un cod ce reprezintă anul de studiu în care se află: ● un punctaj între 9 și 12 pentru elevi (clasa a XIII-a se consideră clasa a XII-a), ● un punctaj între 13 și 18 pentru studenți.Fiecare echipă are asociat un cod ce reprezintă suma codurilor participanților. Codul unei echipe pentru probade Algoritmică poate lua valori cuprinse între 9 și 45. De exemplu, un elev de clasa a XI-a, unul de clasa a XIII-a,un student în anul I și unul în anul al IV-lea fomează o echipă cu suma 11+12+13+16=52.Ordonarea echipelor pentru clasamentul de calificare la runda finală ține cont, în această ordine, de: ● rezultatul din etapa de pregătire (descrescător), urmat de ● codificarea echipei (crescător), urmată de ● vârsta celui mai mic participant (crescător).Ordonarea echipelor pentru clasamentul de premiere în runda finală ține cont, în această ordine, de: ● rezultatul din etapa finală (descrescător), urmat de ● penalizările de submisie a problemelor (crescător), urmate de ● rezultatul din etapa de pregătire (descrescător), urmat de ● codificarea echipei (crescător), urmată de ● vârsta celui mai mic participant (crescător).În acest mod, se asigură unicitatea rezultatelor și se pot stabili de la început procentele din totalul disponibil. Încomun acord cu partenerii, se pot stabili premii speciale, dar nu mai târziu de festivitatea de premiere. Fiecareconcurent va primi o diplomă de participare. Premiile vor fi oferite în cadrul festivității de premiere.Premiile obținute sunt: ● Premiul I: 45% din totalul disponibil, ● Premiul al II – lea: 25% din totalul disponibil, ● Premiul al III – lea: 15% din totalul disponibil, ● Mențiunea I: 10% din totalul disponibil, ● Mențiunea a II – a: 5% din totalul disponibil.LaboratoareÎn sălile de concurs se găsesc câte un calculator pentru fiecare concurent și un ceas vizibil. Se vor oferiinstrumente de scris și hârtii albe. Concurenții nu pot folosi: ● calculatoare, inclusiv cele programabile, ● secvențe de cod anterioare, ● suporturi de stocare externe, discuri, ● dispozitive de comunicare, inclusiv telefoane mobile, ● materiale imprimate, altele decât cele oferite de comisie.Stațiile de lucru beneficiază de aceeași configurație și au instalat Microsoft Windows, împreună cu: ● Microsoft Visual Studio Professional Edition, ● Compilatoarele GCC, G++, FreePascal.Configurația exactă va fi comunicată în prealabil participanților calificați în finală.DescalificareO echipă care: ● interferează cu activitățile altor participanți (inclusiv electronic), ● atacă stațiile de lucru sau comisia științifică (inclusiv electronic),
    • ● instigă la fraudă prin orice mijloc (inclusiv electronic) ● accesează rețeaua, realizează fork, ● creează alte fișiere decât cele specificate, ● atacă securitatea sistemului sau evaluatorul, ● execută alte programe, ● schimbă permisiuni de fișiere, ● citește informații despre sistem, ● încalcă în alt fel regulamentulva fi descalificată fără drept de contestație.Coordonatorii concursului își rezervă dreptul de a descalifica fără notificare prealabilă și fără drept decontestație participanții aflați în situație de descalificare. Pentru a descalifica o echipă, este necesar acordulambilor coordonatori. Echipele descalificate vor primi un mesaj cu motivul concret al descalificării.Echipele disjuncte care au surse duplicat sunt marcate în clasament, iar punctajul lor pentru întreaga rundă seanulează. Echipele în respectiva situație au obligația de a contesta acest fapt. În cazul în care duplicatele serepetă într-o rundă ulterioară, echipa este descalificată fără drept de contestație.RegulamentCoordonatorii concursului își rezervă dreptul de a modifica fără notificare prealabilă acest regulament.
    • Citire | ScrierePentru începătorii în programare, poate că este util un exemplu de utilizare a fişierelor pentru citirea/scrierea unui număr întreg.Recomandăm participanților să compare timpii de execuție pentru citirea/scrierea unor seturi de date de dimensiuni mari, pentru a se încadra în timp.Începând cu runda a doua, comisia își rezervă dreptul de a nu aproba contestații pe motivul depășirii timpului de execuție din enunț din cauza citirii.Limbajul C Limbajul C++ Limbajul Pascal#include <stdio.h> #include <fstream.h> { declară fisierele de intrare şi de iesire }... ... fin, fout: text;/* declară şi deschide fişierul de intrare */ /* declară şi deschide fişierul de intrare */ ...FILE * fin=fopen("input_file_name", "r"); ifstream fin("input_file_name"); { asignează variabila fin fişierului de intrare }/* citeste un intreg în variabila n */ /* citeste un intreg în variabila n */ assign(fin,input_file_name);fscanf (fin, "%d", &n); fin >> n; { deschide fişierul de intrare }/* inchide fişierul de intrare */ /* închide fişierul de intrare */ reset(fin);fclose(fin); fin.close(); { citeşte un întreg în variabila n }... ... read(fin,n);/* declară şi deschide fişierul de ieşire */ /* declara şi deschide fişierul de iesire */ { închide fişierul de intrare }FILE * fout=fopen("output_file_name", "w"); ofstream fout("output_file_name"); close(fin);/* scrie o linie care conţine valoarea variabilei n */ /* scrie o linie care conţine valoarea variabilei n */ ...fprintf (fout, "%dn", n); fout<<n<<n; { asignează variabila fout fişierului de iesire }/* inchide fişierul de iesire */ /* închide fişierul de iesire */ assign(fout,output_file_name);fclose(fout); fout.close(); { deschide fişierul de iesire } rewrite(fout); { scrie o linie care conţine valoarea variabilei n } writeln(fout, n); { închide fişierul de iesire } close(fout);