!!!Водич во натпреварите

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

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

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

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

!!Подготовка за натпреварите
   За да можете да учествувате во натпреварите, најпрвин треба да "научите" еден од програмските јазици Паскал, C или C++ (по ваш избор). Ние би ви препорачале тоа да биде C++, бидејќи, во многу параметри, е помоќен од другите. За оние кои што се прашуваат колку време би им било потребно да научат еден од понудените програмски јазици, би им одговориле дека според нашето искуство, доколку навистина се вложи труд во учењето, основните работи на било кој од понудите програмски јазици можат да се научат за само неколку дена - и тоа би било доволно за учество, на пример во почетничка група.

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

Сепак, поради тоа што во средното образование, барем досега, со програмирање учениците се сретнуваат во погорните години, почетниците кои сакаат да учат програмирање можат да најдат материјали на интернет. Со помош на Google/Bing можете да најдете голем број на сајтови како, на пример,  [http://cplusplus.com/|http://cplusplus.com/doc/tutorial/] и [http://www.learncpp.com/], за оние кои што ќе сакаат да програмираат во C/C++, или [http://www.taoyue.com/tutorials/pascal] за оние кои ќе сакаат да програмираат во Паскал. 

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

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

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

* Algorithms (Robert Sedgewick)
* The Algorithm Design Manual (Steven Skiena)
* Programming Challenges: The Programming Contest Training Manual (S. Skiena, Miguel Revilla)
* Introduction to Algorithms (Cormen, Leiserson, Rivest)
* Art of Computer Programming Vol 1-3 (Donald Knuth)

\\
Покрај книгите наведени погоре, многу ресурси можете да најдете и на Интернет. Некои од попознатите веб-сајтови се:

* [Z-Trening|http://www.z-trening.com] (содржи голем број на задачи од српски, хрватски, босански, светски и балкански олимпијади по информатика)
* [UVA Online Judge|http://uva.onlinejudge.org] (огромен број на задачи од секакви натпревари, но претежно од  меѓу-универзитетски натпревари за студенти)
* [USA Computing Olympiad|http://ace.delos.com/usacogate] (комплетен водич за натпревари, со тематско изучување на потребните алгоритми и структури на податоци за успешно учество на натпревари по информатика, USA)
* [Topcoder|http://www.topcoder.com/tc] (сајт со преку 250000 членови, на кој се организираат алгоритамски натпревари неколку пати месечно)

За да пишувате програми, како и да наоѓате грешки во нив, единствено нешто што ви е потребно (ова нормално, како и останатите поими – компајлер, линкер, ..., е опфатено и со секој добар курс/туториал, но ние сепак би го напоменале и тука) е IDE - Интегрирана Развојна Околина. Препорачани алатки за користење на овие натпревари се Code::Blocks - кој можете да го најдете на [http://www.codeblocks.org/], и Free Pascal - на [http://www.freepascal.org/]. Двете алатки се бесплатни и можат едноставно да се преземат преку соодветниот линк наведен погоре. Овие алатки стандардно се користат и на меѓународните натпревари по информатика.

!!Опис на системот за натпревари
   Системот за натпревари по информатика (наречен Мендо – Македонски електронски натпревари и државни олимпијади) е предвиден како систем на кој корисниците ќе можат да се натпреваруваат, но и во било кој период од денот да решаваат задачи од повеќе минати државни и меѓународни натпревари.
   
%%slimbox 
|[|prva.jpg]|[{Image src='prva.jpg' width=192 height=120}]|[|vtora.jpg]|[{Image src='vtora.jpg' width=192 height=120}]
%%
    
   Деловите "Тренинг" и "Натпревари" се предвидени за вакви активности. Во делот "Тренинг" може во секој момент да се испрати задача за оценување, и да се добие повратен одговор од системот. По испраќање на решение за одредена задача, решението се додава во редот за тестирање. По завршување на тестирањето, на корисникот му се презентираат резултатите од извршувањето на програмата.
   
!!Праќање на решенија на системот
   Во ред, сте ги научиле основите на еден програмски јазик и сте се регистирале на системот за електронски натпревари. Следно што треба да направите е да одберете една од понудените задачи (од делот за тренинг – доколку сакате да вежбате, или од делот за натпревари – доколку учествувате на натпревар), да смислите алгоритам по кој ќе ја решавате и да го внесете решение во една од понудените интегрирани развојни околини (Free Pascal или Code::Blocks). Покрај Code::Blocks, при решавање од дома, можете да користите и [Visual Studio Community|Решавање на задачи со Visual Studio].

Да речеме дека ја извршувате програмата на вашиот систем и го добивате очекуваниот резултат (доколку тоа не е случај, прво треба да ја пронајдете грешката локално – пред да го испратите решението на системот – бидејќи доколку решението не ви работи локално, малку е веројатно дека ќе работи на системот). Исто така, локално (на вашиот компјутер) на располагање имате IDE кое нуди алатки за пронаоѓање на грешки, извршување на операции ред по ред, итн.

Следно што треба да направите е да го испратите вашето решение на системот – имате линк под текстот на секоја задача. Едниот начин на кој можете да го направите тоа е посочување каде се наоѓа решението (датотеката со изворен код) на решената задача. Вториот начин е да го ископирате целиот код и да го внесете во празниот прозорец кој е предвиден за испраќање на решение.

%%slimbox 
|[|treta.jpg]|[{Image src='treta.jpg' width=192 height=120}]|[|cetvrta.jpg]|[{Image src='cetvrta.jpg' width=192 height=120}] 
%%

%%slimbox 
|[|peta.jpg]|[{Image src='peta.jpg' width=192 height=120}]|[|shesta.jpg]|[{Image src='shesta.jpg' width=192 height=120}] 
%%

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

!!Останати информации
За крај, би сакале само да наведеме дека системот за натпревари е целосно автоматизиран и него можете да го користите 24/7. Покрај тестирање на решенија, преку делот за chat и форумот, можете да комуницирате со останатите натпреварувачи (како сегашни, така и поранешни), нивните ментори, членовите на комисијата за натпревари, итн.

Доколку погорниот текст ве заинтересира, повеќе информации можете да најдете на веб-сајтот на Здружението на информатичарите на Македонија - [http://www.cs.org.mk/], како и на почетната страница на овој сајт - [http://mendo.mk/]. Можете да побарате дополнителни информации и преку нашиот форум.

На сите кои ќе решат да земат учество во натпреварите, им посакуваме успех.


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

!Pascal
%%prettify
{{{
Program Primer; 
var a, b: integer;

begin 
   ReadLn(a, b);
   WriteLn(a+b); 
end.
}}}
/%

!C
%%prettify
{{{
#include <stdio.h>

int main()
{
   int a, b;
   scanf("%d %d", &a, &b);
   printf("%d\n", a+b);
   return 0;
}
}}}
/%

!C++
%%prettify
{{{
#include <iostream>
using namespace std;

int main()
{
   int a, b;
   cin >> a >> b;
   cout << a+b << endl;
   return 0;
}
}}}
/%

!!Додаток - избор на натпреварувачка група
Натпреварувачот при регистрација во системот за натпревари може да избере една од следните три групи:

* Почетничка - учениците кои за прв пат учествуваат на натпреварите, сеуште имаат мали познавања од програмирање и се основно училиште или прва или втора година средно училиште
* Основна - учениците кои за прв или втор пат учествуваат на натпреварите и сметаат дека нивните познавања од програмирање се сеуште мали за да може да се натпреваруваат на меѓународните натпревари
* Напредна - ученици кои без разлика по кој пат учествуваат на натпреварите, сметаат дека се подготвени да решаваат сложени алгоритамски проблеми и ќе се натпреваруваат за влез во екипите кои ќе ја претставуваат Македонија на меѓународните натпревари