Технология за състезателно програмиране
Увод
Стандарти на С++, компилатори
Code::Blocks
за Windows, gcc за Linux, BSD и др. UNIX-ови ОС
Конзолни приложения, вход и изход
Стандартен вход и изход
cin >> <име на
променлива>;
Пример:
int k;
cin >> k;
cout << <име на
променлива>;
Пример:
int ik = -10;
unsigned int uk = 10;
long lk = -1000000L;
unsigned long ulk = 1000000L; // 16 или 64 битов цял тип данни
long long llk = 100000L; //
unsigned long long ull; //
double dk = 2.52;
cout << ik << " " <<uk << " " << lk << " "
<< ulk<< " " << dk << "\n";
Проверка за големината на цял тип без знак.
unsigned long maxx = ~0;
cout << sizeof(maxx) << " " << maxx << endl;
Пренасочване на входа и изхода
Пренасочване на стандартни вход и изход.
Файл с програма на C или C++ със стандартни вход и изход:
prog.exe
Текстов файл с входните данни за програмата:
test1.inp
Изпълнение на програмата:
prog <test1.inp >test1.out
Текстов файл, произведен от програмата при това изпълнение:
test1.out
Пример 1: Сума на две числа
Дадени са две цели числа в интервала [-100, 100]. Напишете
програма,
която пресмята сумата на числaтa.
#include <iostream>
using namespace std;
int main()
{
int i, j;
cin >> i >> j;
cout << (i+j);
return 0;
}
Име на файл с текст на програмата: add.cpp
Име на изпълним файл (Windows): add.exe
Изпълнение на програмата:
C:\my_dir\>add
< inp.txt > out.txt
Файл за вход: inp.txt
12
5 |
Създаден от ОС файл: out.txt
17
|
Вход и изход за много примери
- Четене на зададен брой примери
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)) { ... }
*
Даден е броят на примерите.
Пример 2: Сума на две числа
Дадени са две цели числа в интервала [-100, 100]. Напишете
програма,
която пресмята сумата на числaтa.
Вход
От стандартния вход се въвеждат много примери. Първото число е броят
на примерите, на всеки следващ ред са дадени по две числа за
събиране.
Изход
За всеки пример от входа на стандартния изход на отделен ред се
извежда едно число - сумата на числата от съответния пример от
входа.
Пример:
Вход
3
-10 2
20 3
30 4
Изход
-8
23
34
Решение:
#include
<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
for (int k = 0; k < n; k++)
{
int i, j;
cin >> i >> j;
cout << (i+j) << endl;
}
return 0;
}
* Не е даден броят на
примерите.
Пример 3: Сума на две числа
Дадени са две числа в интервала [-100, 100]. Напишете програма, която пресмята сумата
на числaтa.
Вход
От стандартния вход се въвеждат много примери, на всеки ред са
дадени по две числа за събиране.
Изход
За всеки пример от входа на стандартния изход се извежда на отделен
ред едно число - сумата на числата от съответния пример от входа.
Пример:
Вход
-10 2
20 3
30 4
Изход
-8
23
34
Решение:
#include
<iostream>
using namespace std;
int main()
{
int i, j;
while(cin
>>
i
>>
j) cout <<
(i+j) << endl;
return 0;
}
* Не е даден броят на
примерите, чете се по редове.
Пример 4: Сума на много числа
Дадени са няколко числа в интервала [-100, 100]. Напишете
програма,
която пресмята сумата на числaтa.
Вход
От стандартния вход се въвеждат много примери, на всеки ред по един
пример, състоящ се от няколко (повече от 1 и по-малко от 100) числа
за събиране .
Изход
За всеки пример от входа на стандартния изход се извежда на отделен
ред едно число - сумата на числата от съответния пример от входа.
Пример:
Вход
-10 2 4 20
20 -3
30 4 -10 -99
Изход
16
17
-75
Решение:
#include
<iostream>
#include <string>
#include <sstream>
using namespace
std;
int main()
{
string s;
while(getline(cin, s))
{
istringstream is(s);
int k, sum = 0;
while(is >> k) sum
+= k;
cout << sum <<
endl;
}
return 0;
}
Тестване на програмата:
- стандартни случаи;
- гранични случаи;
- минимални и максимални размерности на входа;
- специални случаи;
- НЕ се разглеждат случаи, които са извън зададените ограничения (НЕ
се прави проверка за коректност на входа).
* Големи числа.
Пример 5: Сума на две големи числа
Дадени са две цели числа в интервала [-10100, 10100].
Напишете програма,
която пресмята сумата на числaтa.
Вход
От стандартния вход се въвеждат много примери, на всеки ред са
дадени по две числа за събиране.
Изход
За всеки пример от входа на стандартния изход се извежда на отделен
ред едно число - сумата на числата от съответния пример от входа
Пример:
Вход
-100000000000000000000000000
1
200000000000000000000000000000000000000
-200000000000000000000000000000000000000
Изход
-999999999999999999999999999
0
Решение:
// Николай Киров F12345
#include
<iostream>
#include <string>
using namespace std;
string sum(string s1, string s2)
{
......
}
int main()
{
string i, j;
while(cin
>>
i
>>
j) cout << sum(i, j) << endl;
return 0;
}
https://www.hackerrank.com/nbu-december-2018-programming-contest
Задача J. Автобус