The topic in the ANCE tests: Циклические структуры
zzz
Тема II требует проследить, что выведет цикл, заменить for на while и написать программу с повторением. Здесь три оператора на двух языках, техника таблицы трассировки и баллы, которые дает барем.
У оператора for счетчик, начальное и конечное значения записаны в заголовке, а число повторений известно заранее: от a до b тело выполняется b−a+1 раз. while проверяет условие перед каждым повторением, поэтому может не выполниться ни разу. repeat проверяет в конце, поэтому его тело выполняется хотя бы один раз; учти, что until останавливает цикл, когда условие становится истинным, а while продолжает, пока оно истинно.
Тело цикла Если повторяешь больше одной инструкции, нужен begin ... end; в Паскале и фигурные скобки в C++. Без них повторяется только первая инструкция, а остальные выполняются один раз, после цикла.
Замена for на while Именно это требуют тесты, и барем оценивает замену по элементам:
1)присваивание начального значения счетчику, до цикла
2)условие в while, с той же границей, что была в for
3)составной оператор со всеми инструкциями тела
4)увеличение счетчика внутри тела
Без увеличения цикл не остановится, а без начального присваивания счетчик стартует с неопределенного значения.
for i := 1 to 5 do
begin
read(x);
s := s + x;
end;
i := 1;
while i <= 5 do
begin
read(x);
s := s + x;
i := i + 1;
end;
Таблица трассировки Когда спрашивают, что выведет программа, составь таблицу: по столбцу на каждую переменную и по строке на каждое повторение. Записывай и то, что выводится, по порядку. Это единственный способ не потерять итерацию.
Приемы, которые повторяются в тестах
сумма и подсчет: s := s + x, k := k + 1
цифры числа: n mod 10 дает последнюю цифру, n div 10 отбрасывает ее, цикл идет while n > 0; при n=0 цикл не выполняется ни разу, поэтому этот случай разбирают отдельно
последовательные степени: p := 1, затем p := p * a, пока p <= Q
продвижение с откатом (улитка в колодце): днем dist := dist + x, ночью, если не вышла, dist := dist - y
вывод по столбцам: write(i:5) выравнивает по пяти позициям, writeln переводит строку
Что именно выводится write оставляет курсор на той же строке, writeln переводит его на следующую. Если программа пишет write('s=', s), то в ответ входит и префикс s=, а не только значение: формат — часть ответа.
The rest of the lesson is in the subscription
The real ANCE items where the topic appears, the step-by-step solved example, the typical mistakes and the 7 check questions open with the subscription. “What you must know” stays free.
Source of the tests: the National Agency for Curriculum and Assessment, ance.gov.md. Nota10 is not affiliated with MEC or ANCE. Automatic grading is an estimate, not an official grade.