1. Технология за състезателно програмиране и оценка на алгоритми

Студентски състезания по програмиране

Стандарти на С++, компилатори

 Dev-C++, Code::Blocks за Windows, gcc за Linux, BSD и др. UNIX-ови ОС
Конзолни приложения, вход и изход

Стандартен вход и изход в С++

cin >> <име на променлива>;

int k;
cin >> k;

cout << <име на променлива>;

int ik = -10;
unsigned int uk = 10;
long lk = -1000000;
unsigned long ulk = 1000000; // 16 битов цял тип данни
double dk = 2.52;
cout << ik << " " <<uk << " " << lk << " "
     << ulk<< " " << dk << "\n";

Вход и изход за много примери

- Четене на зададен брой примери (числа)
int n;
cin >> n;
for (int i = 0; i < n; i++) { cin >> ... }


- Четене до края на файла за числа или думи (низове)
while (cin >> x) { ...}
while (cin >> x && x > 0) { ... }


- Четене до края на файла на редове (низове)
string st;
while(getline(cin, st)) { ... }

- Четене всички числа от един ред
string st;
getline(cin, st);
int a[100], n = 0;
istringstream is(s);
while(is >> a[n]) n++;

Пренасочване на входа и изхода

Файл с програма на C или C++ със стандартни вход и изход:
prog.exe

Текстов файл с входните данни за програмата:
test1.inp

Изпълнение (стартиране) на програмата:
prog <test1.inp >test1.out

Текстов файл, произведен от програмата при това изпълнение:
test1.out

Проверка на програмата в Хакерранк и от проверяващия

Решенията се проверяват с много примери, неизвестни за студента, включително гранични случаи.
Проверка на програма f12345_1.cpp: с входни данни във файла 1.inp.

mini:CSCB300 nkirov$ ./ad.sh 1 12345

Скрипт за проверка:

g++ f$2_$1.cpp
./a.out < $1.inp
rm a.out


Тестване на програмата:
- стандартни случаи;
- гранични случаи;
- минимални и максимални размерности на входа;
- специални случаи;
- НЕ се разглеждат случаи, които са извън зададените ограничения
- НЕ се прави проверка за коректност на входа


Домашно:
- оценка на границите на данните (прочитане на тестовете примери ??)
- необходими ли са масиви?
- размер на масивите
- избор на тип данни (int, unsigned, long, long long, long double)
- загуба на точност (sqrt)
- избор на алгоритъм
- предварителни пресмятания (преди или след прочитане на входа)
- избор на примери за тестване на програмата
- прецизиране на кода (изпилване)



Оценка на алгоритми (преговор)

• грешка при изпълнение (Run-Time еrror - RT);
• изтичане на определения лимит от време за тестване (Time Limit еxceeded - TL);
• грешен резултат (Wrong Answer - WA).