В группе из N студентов каждый получил оценку за экзамен (от 2 до 5). Нужно найти средний балл группы и определить, сколько человек сдали экзамен успешно (получили 4 или 5).
Прочитать условие и сказать своими словами
На этом этапе мы не думаем ни о языке, ни о синтаксисе. Мы просто объясняем задачу самому себе — как будто рассказываем другу.
Если вы не можете объяснить задачу своими словами — вы её ещё не поняли. Читайте условие снова, разбирайте непонятные слова, придумывайте примеры.
Определить вход, выход и ограничения
Теперь нужно превратить словесное описание в точное. Отвечаем на три вопроса: что на входе, что на выходе, что считать «правильным ответом».
- N — количество студентов, целое положительное
- N оценок — целые числа от 2 до 5
- avg — средний балл, вещественное число
- good — количество оценок ≥ 4, целое
- sum — сумма всех оценок
- i — счётчик текущей оценки
Пройти по конкретному примеру и записать шаги
Прежде чем писать программу, решаем задачу вручную на маленьком примере. Это помогает увидеть алгоритм, спрятанный за формулировкой.
Пример: оценки 5, 3, 4, 5, 2 (N = 5).
- Смотрим на первую оценку: 5. Сумма пока = 5.
- Прибавляем 3. Сумма = 8.
- Прибавляем 4. Сумма = 12.
- Прибавляем 5. Сумма = 17.
- Прибавляем 2. Сумма = 19.
- Делим 19 на 5 → средний балл 3.8.
- Считаем оценки ≥ 4: их 3 (5, 4, 5).
- Оценки обрабатываются по одной, слева направо.
- Каждую оценку нужно прибавить к сумме.
- И одновременно проверить, не ≥ 4 ли она.
- Значит, действия повторяются для каждой оценки → это цикл.
Разбить большую задачу на маленькие шаги
Декомпозиция — главный инструмент программиста. Большая задача разбивается на подзадачи, каждая подзадача — снова на подзадачи, пока не останутся совсем простые шаги, которые понятно, как выполнить.
- Ввести оценки
- Обработать их и получить sum и good
- Вывести avg и good
- Ввести N
- Обнулить sum и good
- Для каждой из N оценок:
- прочитать очередную оценку в переменную x;
- sum += x;
- если x ≥ 4 — увеличить good на 1.
- avg = sum / N
- Вывести avg и good
Заметьте: на верхнем уровне мы сказали «обработать» — это ещё не инструкция, а цель. На нижнем уровне цель превратилась в конкретные действия. Именно так задача становится алгоритмом.
Наглядно нарисовать поток управления
Блок-схема полезна, когда алгоритм становится чуть сложнее, чем «сделай раз, сделай два». Вот как выглядит наш алгоритм в виде схемы:
Не пугайтесь сложности — схема читается слева направо и сверху вниз. Ромб — это вопрос, у которого два ответа: «да» и «нет». Тело цикла (ввод оценки, sum += x, проверка x ≥ 4) будет выполнено N раз.
Записать алгоритм почти на языке — но без синтаксиса
Псевдокод — это «программа на человеческом языке». Здесь можно писать свободно, главное — чтобы был виден порядок действий.
ВВЕСТИ N
sum ← 0
good ← 0
ДЛЯ i ОТ 1 ДО N:
ВВЕСТИ x
sum ← sum + x
ЕСЛИ x ≥ 4:
good ← good + 1
avg ← sum / N
ВЫВЕСТИ avg
ВЫВЕСТИ good
ДЛЯ и ЕСЛИ.
Это и есть программирование: одна и та же мысль в разных обозначениях.
Перевести псевдокод в синтаксис языка
Только теперь мы открываем редактор. Каждая строка кода соответствует одной строке псевдокода — никаких сюрпризов.
#include <iostream>
using namespace std;
int main() {
int N;
cout << "N = ";
cin >> N;
int sum = 0; // сумма всех оценок
int good = 0; // количество оценок ≥ 4
for (int i = 1; i <= N; i++) {
int x;
cout << "Оценка " << i << ": ";
cin >> x;
sum = sum + x;
if (x >= 4) good++;
}
double avg = (double)sum / N;
cout << "Средний балл: " << avg << endl;
cout << "Успешно сдали: " << good << " чел." << endl;
return 0;
}
(double)sum / N.
Если написать просто sum / N, оба числа — целые, и деление произойдёт
целочисленно (без дробной части). Это одна из самых частых ошибок новичков.
Приведение типа к double заставляет деление стать вещественным.
Что мы сейчас сделали
Порядок действий
- Прочитали условие и пересказали своими словами.
- Разделили данные на вход, выход и промежуточные.
- Прошли пример вручную и заметили повторяющиеся действия.
- Разложили задачу на простые шаги (сверху вниз).
- Нарисовали блок-схему.
- Записали псевдокод.
- Перевели псевдокод в C++.
Что это дало
- Мы ни разу не «застряли». Каждый шаг был очевиден.
- Не пришлось держать всё в голове — всё записано.
- Если в коде ошибка — её легко найти: она на одном из семи этапов.
- Тот же приём работает для любой задачи, а не только для этой.
Практика
Прорешайте одну из задач тем же способом — все семь этапов, ничего не пропуская.
- Найти сумму отрицательных чисел в списке.
- Определить, является ли число простым.
- Найти самое длинное слово в строке (для строки из слов, разделённых пробелами).
- Проверить, все ли элементы массива упорядочены по возрастанию.