Самое весомое задание экзамена и при этом самое предсказуемое: каждый год один и тот же каркас, меняется только логика функции.
*.in → обработать именованной функцией → записать ответ в *.out.
| объявления типов/переменных | заголовок функции | тело функции | return |
| открытие файлов | чтение n | цикл | чтение данных |
| вызов функции | ветвление (синтаксис+булево+присвоение) | запись (числа + пробелы + новая строка) | |
// Слой 1 #include <fstream> using namespace std; // Слой 2 — глобальные данные int a[105]; int n; // Слой 3 — функция (имя по условию) int F(int i){ int r = 0; // ... логика по индексу i ... return r; } int main(){ ifstream f("in.in"); // Слой 4 ofstream g("out.out"); f >> n; for(int i=1;i<=n;i++) f >> a[i]; for(int i=1;i<=n;i++){ // Слой 5 int s = F(i); g << s << ' '; } f.close(); g.close(); return 0; }
carte.in: 1-я строка — n школ; далее n строк по 3 числа. Вывести в carte.out: 1-я строка — суммы книг по школам; 2-я — индекс школы-лидера. Функция fc(i) = сумма книг школы i.
4 / 10 4 12 / 15 7 18 / 12 5 12 / 4 8 22 → 26 40 29 34 / 2#include <fstream> using namespace std; int a[16][4]; int n; int fc(int i){ // сумма 3 чисел школы i int sum = 0; for(int j=1;j<=3;j++) sum += a[i][j]; return sum; } int main(){ ifstream f("carte.in"); ofstream g("carte.out"); f >> n; for(int i=1;i<=n;i++) for(int j=1;j<=3;j++) f >> a[i][j]; int smax=-1, imax=1; for(int i=1;i<=n;i++){ int s = fc(i); g << s; if(i<n) g << ' '; // пробел между числами if(s>smax){ smax=s; imax=i; } // поиск лидера } g << endl << imax; // 2-я строка f.close(); g.close(); return 0; }✓ Проверено: выдаёт
26 40 29 34 / 2
nota.in: n учеников, их оценки. Функция NI(x): вернуть −1 если оценка ≤5; 0 если 6–8; 1 если 9–10. Вывести в nota.out сколько учеников каждого квалификатора.
10 / 6 10 5 8 9 7 4 6 9 8 → 2 5 3Попробуй написать сам по каркасу, потом сверься:
► показать решение#include <fstream> using namespace std; int ocenka[105]; int n; int NI(int x){ if(x<=5) return -1; if(x<=8) return 0; return 1; } int main(){ ifstream f("nota.in"); ofstream g("nota.out"); f >> n; for(int i=1;i<=n;i++) f >> ocenka[i]; int c1=0, c0=0, c2=0; for(int i=1;i<=n;i++){ int k = NI(ocenka[i]); if(k==-1) c1++; else if(k==0) c0++; else c2++; } g << c1 << ' ' << c0 << ' ' << c2; return 0; }✓ Проверено:
2 5 3 (квалификаторы: 0,1,−1,0,1,0,−1,0,1,0 → два −1, пять 0, три +1)
*.in положи в папку cmake-build-debug (оттуда запускается программа). Пример уже лежит в programs/.