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).