Правила

Здружението на информатичарите на Македонија организира циклус на натпревари по информатика, во областа на програмирањето. Натпреварите се стремат да ги опфатат сите ученици од основното и средното образование кои се стекнале со познавања од програмирање. Програмирањето се изведува во програмскиот јазик C++.

Циклусот на натпревари ќе се состои од:

  • подготовки
  • училишен натпревар
  • регионален натпревар
  • државен натпревар

  • Најдобрите учесници на државниот натпревар добиваат можност за учество на понатамошни натпревари од тип олимпијада, преку кои се избираат тимови за учество на интернационалните натпревари.

    Официјалниот распоред на натпреварите и специфичните правила за бодување се објавени на веб–сајтот на Здружението на информатичарите на Македонија, во делот за натпревари. Натпреварувачите се натпреваруваат со решавање на множество од задачи, а рангирањето се прави според наставна година (I, II, III, IV), односно одделение (VI, VII, VIII, IX).

    Натпреварите и подготовките за натпреварите претставуваат можност голем број ученици да навлезат во тајните на програмирањето и на тој начин да создадат една одлична подлога за една перспективна професија, инженер по информатика, како во Македонија така и во светот.
    Натпреварите по Информатика целосно ќе бидат спроведувани преку веб-системот за натпревари mendo.mk, преку поставување на задачите за натпреварите, испраќање на решенијата, објавување на резултати и целосната комуникација.

    При првата посета на сајтот, потребно е најпрво да се регистрирате. Регистрацијата е неопходна за да се учествува на натпревар.

    Циклусот натпревари се спроведува според следните правила:

  • Пристап до интернет (освен до mendo.mk) е ЗАБРАНЕТ.
  • Работата е исклучиво индивидуална и непочитување на истото ќе биде санкционирано.
  • Читањето на влезните податоци и запишувањето на резултатите се изведува преку стандарден влез/излез.
  • При испраќање на решение, системот веднаш го преведува извршниот код и ја тестира програмата на тест примерот (тест групата) даден/а во текстот на задачата. Целта на ова е да се избегнат грешките при преведување, читање, запишување, итн.
  • На секој натпревар, учесниците ќе добијат множество од задачи со различна тежина кои треба да ги решат за времетраење на натпреварот, јасно рангирани, со евентуална напомена кои од задачите соодветствуваат на нивната возраст.
  • За време на одржувањето на натпреварите, ќе имате можност да ги прочитате задачите, како и да ги испратите вашите решенија. Решенијата можете да ги испратите повеќе пати во текот на траењето на натпреварот, а ќе се прегледува само последното испратено решение.
  • За некои од поставените задачи, можно е да има овозможен детален повратен одговор (на натпреварувачот ќе му биде овозможено тестирање на решението на дел од официјалните тест групи веднаш по испраќањето на решението).
  • Програмскиот јазик се одбира автоматски, освен во случај на експлицитна промена од страна на натпреварувачот.
  • Во рамки на веб-системот за натпревари постои дел за прегледување и поставување на прашања, каде можете да поставите прашање или да ги прочитате одговорите на некои значајни претходно поставени прашања. Специфики околу начинот и времето на поставување на прашања се објавуваат пред почетокот на секој натпревар.


  • Програмски Алатки

    Решавањето на зададените проблеми треба да се изведува во следната програмска алатка која е стандардна за меѓународните натпревари по информатика:

    - Code::Blocks (13.12 или повисоко)
    Oваа алатка може да се користи на сите популарни оперативни системи - Windows, Linux, Mac OS X, а може да се најде на http://www.codeblocks.org.

    Подготовка (тренинг) за натпреварите

    Веб-системот за натпревари може да се користи и како тренинг систем. По регистрацијата, на корисниците им е овозможено решавање на задачи кои се појавувале на поранешни натпревари по информатика (државни или меѓународни), како и други задачи кои служат како подготовка за овогодинешните натпревари.

    Корисниците, по најавата на системот преку страната http://mendo.mk, соодветно ја следат врската “Тренинг”, по што им се појавува листа на задачи групирани во неколку категории. Корисникот одбира задача од листата, по што му се појавува текстот на задачата и дел за испраќање на решение. По испраќањето на решение за соодветната задача, решението се додава во редот за тестирање. По завршување на тестирањето, на корисникот му се презентираат резултатите од извршувањето на програмата.
    Сите задачи кои ќе се појават на натпреварите се дизајнирани да бидат алгоритамски во природа. Ефикасноста игра важна улога во дел од задачите. Доколку ефикасноста е важна во некој алгоритам, тест случаите ќе бидат дизајнирани за да ги одделат решенијата со различно ниво на ефикасност; најмалиот тест случај ќе биде направен така што кое било разумно решение на задачата ќе успее да произведе резултат во дадените временски и мемориски рамки.

    Задачите кои ќе се појават на натпреварите, ќе спаѓаат во една од следниве категории:

  • Batch задачи: Решението се состои од една изворна датотека за компјутерска програма која чита податоци од стандарден влез (тастатура), и ги запишува решенијата на стандарден излез (екран).
  • Реактивни задачи: Решението се состои од една изворна датотека за компјутерска програма која комуницира со “противничка” програма преку стандарден влез (тастатура) и стандарден излез (екран).
  • Излез задачи: Решението се состои од една или повеќе текстуални датотеки, во кои се запишани одговорите за однапред дадените тест примери.


  • Поставување и прегледување на задачите

    За секоја задача, ќе биде специфициран и временски и мемориски лимит. По правило, вашите програми треба да произведат решение во рок од 1 секунда (временски лимит), и да не користат повеќе од 64MB меморија (мемориски лимит), освен ако не е поинаку нагласено во условите на задачата.

    Прегледувањето на задачите е автоматизирано. Се врши евалуација на вашето решение на неколку веќе дефинирани влезни примери. По завршување на извршувањето на вашето програмско решение во предвидениот временски рок, излезот од истото ќе биде спореден со точниот излез и ќе бидат доделени соодветен број на поени за секој точен излез. Делумните решенија или решенијата кои не се согласно форматот наведен во задачата не носат половични поени. Се признаваат само оние излези кои во целост се поклопуваат со бараното решение. На крајот од натпреварот ќе биде направен обид да се достават точните решенија на задачата во некој од програмските јазици кои се користат на натпреварот, како и влезните и излезните податоци со кои биле тестирани решенијата.

    Детален повратен одговор при испраќање решение

    За дел од задачите ќе биде овозможен детален повратен одговор. За секоја задача со овозможен детален повратен одговор, секое прифатено испратено решение ќе биде тестирано на дел од официјалните тест случаи.

    По завршување на тестирањето, резултатите од секој тест случај ќе му бидат презентирани на натпреварувачот. Имајте предвид дека програмите можат да останат во редот за тестирање подолго време.

    Тест случај, тест група и резултат

    Тест случај претставува едно извршување на компјутерска програма.  За секој тест случај, ќе бидат спроведени соодветни временски и мемориски ограничувања. Доколку програмата прекрши некои од овие ограничувања, тест случајот се смета за неточен. Доколку програмата произведе погрешен излез (или не произведе излез), тест случајот се смета за неточен. Тест случаите ќе бидат групирани во тест групи. По завршувањето, програмите мораат експлицитно да излезат со код 0. Други излезни кодови (различни од 0) ќе предизвикаат оценување на тест случајот од страна на системот како неточен.

    Тест група претставува множество од еден или повеќе тест случаи. Резултатот за секоја тест група претставува 0 поени (доколку некој тест случај од групата бил неточен). Ако сите тест случаи произвеле точен резултат се добиваат поените назначени за таа група. Различни тест групи можат да носат различен број на поени.

    Финалниот резултат за секоја задача ќе биде збирот на освоените поени од секоја тест група.
    Само решенијата кои се испратени и прифатени од страна на електронскиот систем ќе бидат оценувани.
    Решенијата се една верзија програмски код (.CPP). Испратеното решение треба да биде датотека со програмски код (не извршна верзија) во соодветен програмски јазик.

    Преведувањето на испратените решенија се врши со следната наредба:

    C++

    g++ -O2  -std=c++11 -s -static -lm -Wl,–stack={memlimit} -x c++ -o a.exe {filename.cpp}

    Влезните и излезните операции се едноставни што ви дозволува да се сконцентрирате на програмирање на самиот алгоритам. Не се потребни и не се користат никакви посебни програмерски техники што се однесуваат на графички излез и употреба на глувче, тастатура и слично. Посебно, следните техники нема да влијаат во оценувањето и треба да се избегнуваат: графички излез, користење на глувче во вашите програми, напредни операции со датотеки, напредни техники на нумеричко процесирање, повици на DOS функции и сл.

    Потребно е добро да ja познавате програмската средина во која се работи, поврзувањето со библиотеки и unit-и, преведување и дебагирање. За побрзо извршување на програмите придонесува и подоброто познавање на преведувачите кои се користат и нивно подобро искористување.

    Влезни податоци
    Целиот влез на програмите ќе се изведува преку стандарден влез (тастатура). Влезните податоци се состојат од секвенци на податоци. Секој податок може да биде цел број или непразна низа на знаци (букви, декадни цифри, итн). Податоците меѓусебно се разделени или со едно празно место или со знак за крај на линија (новите податоци во нова линија).

    Излезни податоци
    Програмите треба својот излез да го запишуваат на стандарден излез (екран). Секоја линија мора да завршува со знак за нова линија, дури и последната. Излезот на програмата претставуваат низи од податоци. Секој податок може да биде цел број или непразна низа на знаци (букви, цифри, итн). Податоците меѓусебно се разделени или со едно празно место или со знак за крај на линија (новите податоци во нова линија).

    Пример на програма во С++  која користи стандарден влез/излез
    Со оваа програма се илустрира читање на два броја од тастатура (стандарден влез) и испишување на нивниот збир на екран (стандарден излез).

    #include <iostream>

    using namespace std;

    int main()

    {

      int a, b;

      cin >> a >> b;

      cout << a+b << endl;

      return 0;

    }
    По објавувањето на прелиминарните резултати од одреден натпревар, натпреварувачите преку нивните ментори можат да поднесат приговор на резултатите. Приговорите се разгледуваат од страна на комисијата за натпревари, која во своето одлучување по одреден приговор, пред сѐ, се води од правилата за приговори (жалби) на Интернационалната Олимпијада по информатика (IOI Rules – Appeal Process).

    Сите учесници кои ќе имаат направено грешка во однос на правилата објавени на почетната страна на системот и на веб-сајтот на ЗИМ, нема да може да приговараат за реевалуација на задачите и слично. Накратко, приговорите не смее да се однесуваат на какви било поправки во предадениот код на натпреварувачот, со кои евентуално би работела програмата.