Это последний простой урок, который вы изучите в рамках данной рубрики. Дальше пойдут уже более сложные моменты.
Скажите, не хотелось бы вам хоть что-то указать компилятору, чтобы он автоматически делал сам? Вспомните наш список сотрудников. Мы вручную вводили каждый раз операторы:
cout>a[1];
Двадцать сотрудников и двадцать таких строчек. Опять же, сотрудников может быть и десять тысяч, тогда можно просто сойти с ума, набивая эта строчки. К счастью, С++ позволяет нам автоматизировать подобные действия. Для этого нужно использовать циклы.
Цикл – это участок кода, который будет повторяться до достижения условия выхода из цикла. Кстати, вместе с темой циклов я введу и понятие блок-схема.
Блок-схема – эта графическое отображение алгоритма вашей программы. Имела место в процедурном программировании, с приходом ООП практически потеряла актуальность. Тем не менее, некоторые аспекты удобно отображать именно с помощью блок-схемы.
Эти мои каракули (чертежник из меня никудышный) обозначают цикл с предусловием. Поясню, как работает этот цикл.
Python с нуля. Урок 4 | Циклы (for, while)
Программа доходит до ключевого слова while, обозначающего цикл и проверяет условие, указываемое в скобках. Если оно несовпадает с нужным нам, программа проигнорирует цикл. В другом случае она будет выполнять цикл до достижения нужного условия выхода из цикла. Запомните, цикл с предусловием может не выполниться ни разу! Это его главная особенность.
Объявляется цикл с предусловием так:
while (условие)
Давайте теперь рассмотрим на примере, как он действует. Пусть нам нужно будет вывести список чисел, допустим до 20. Итак, наш цикл будет выглядеть таким образом:
intn=0; while(n>=20)
Итак, что мы сделали. Вначале инициализировали переменную n нулем. Я мог дать ей единицу, суть не в этом (кстати, попробуйте присвоить n любое другое значение, в том числе и больше 20). Теперь для вывода списка я использовал цикл с предусловием, в котором указал, что цикл
будет выполняться до тех пор, пока n меньше или равен 20. Если переменная достигает 21, то цикл заканчивает свою работу. Ну а в цикле я выводил на консоль значение n, а потом прибавлял ее значение инкрементом (++).
Использование циклов в программе КАЛЬКУЛЯТОР
Итак, пришло время практического применения знаний о циклах.
Продолжим усовершенствовать наш калькулятор. Попробуем разобраться, где здесь можно использовать циклы.
Но для начала переведём весь текст, который мы выводим пользователю, на русский язык. Как сделать так, чтобы русские буквы правильно отображались в консольном приложении, вы уже знаете.
А теперь посмотрим, где нам пригодятся циклы.
Первое, что напрашивается — это применение цикла при проверке деления на ноль. Реализовать это можно так:
while i MAX_ENTER then begin WriteLn(‘. Введите Y ещё раз. ‘); WriteLn(‘Осталось попыток: ‘, MAX_ENTER-i); Write(‘y = ‘); ReadLn(y); end; end else begin WriteLn(‘x div y = ‘, x div y); Break; end; Inc(i); end; if y = 0 then begin Write(‘. ОШИБКА: ‘); WriteLn(‘Превышено количество попыток ввода Y . ‘); end;
Я специально не буду разъяснять этот код. Считайте, что разобраться, как он работает — это домашнее задание.
Поясню лишь по поводу константы MAX_ENTER.
Здесь как раз тот случай, когда удобнее использовать константу вместо числа. Почему?
Давайте разберёмся. Мы даём пользователю три попытки ввести число Y. Но вдруг в следующей версии программы мы захотим увеличить или уменьшить количество попыток. Тогда, если бы мы использовали число, то нам бы пришлось изменять его в исходном коде в двух местах. Да ещё надо было бы найти эти места. А при использовании константы мы меняем её значение в одном месте.
И всё.
Ну да ладно. Идём дальше.
Как вы понимаете, программа позволяет выполнить одну из четырех математических операций с двумя числами и завершает работу. Но вдруг пользователю нужно выполнить операцию ещё с двумя числами? Что тогда? Снова запускать программу? Да, можно и так. Но согласитесь, что это не удобно.
Намного лучше будет гонять программу в цикле до тех пор, пока пользователь не захочет её закрыть.
Сделать это можно примерно так:
repeat //Код программы WriteLn(‘Выйти из программы? Y/N? ‘); ReadLn(Q); until (Q = ‘y’) or (Q = ‘Y’);
Итак, мы ввели переменную Q типа char. Тело программы мы заключили в цикл с постусловием. В конце программы мы спрашиваем у пользователя, хочет ли он выйти из программы и даём ему подсказку “Y/N” (Yes/No). Если пользователь вводит символ Y и нажимает ENTER, то программа завершается.
Иначе программа выполняется сначала.
Здесь мы использовали неизвестный для вас оператор or. Этот оператор выполняет логическую операцию ИЛИ. То есть в нашем случае условие выполняется, если
Сделано это потому, что мы не знаем, в каком регистре вводит символы пользователь. То есть он может ввести как большую, так и маленькую букву Y. А это в данном случае не одно и то же.
Ну и в заключение привожу полный исходный код программы. Это уже почти идеальная программа. Но идеальной она не является хотя бы потому, что она ещё позволяет пользователю сделать ошибку. Например, вместо числа ввести букву. И тогда программа завершится с ошибкой.
А это плохо, потому что не соответствует критериям качественного алгоритма.
Листинг 21.1. Почти готовый простой калькулятор.
program mycalc; uses cthreads, Classes < you can add units after this >; const MAX_ENTER = 3; var x, y, i : integer; op, Q : char; begin WriteLn(‘ПРОСТОЙ КАЛЬКУЛЯТОР’); WriteLn(‘Введите два числа и знак операции:’); WriteLn(‘+ сложение, — вычитание, * умножение, / целое деление’); WriteLn(‘*****************************************************’); repeat Write(‘x = ‘); ReadLn(x); Write(‘y = ‘); ReadLn(y); Write(‘Операция: ‘); ReadLn(op); i := 0; case op of ‘+’ : WriteLn(‘x + y = ‘, x + y); ‘-‘ : WriteLn(‘x — y = ‘, x — y); ‘*’ : WriteLn(‘x * y = ‘, x * y); ‘/’ : begin while i MAX_ENTER then begin WriteLn(‘. Введите Y ещё раз. ‘); WriteLn(‘Осталось попыток: ‘, MAX_ENTER-i); Write(‘y = ‘); ReadLn(y); end; end else begin WriteLn(‘x div y = ‘, x div y); Break; end; Inc(i); end; if y = 0 then begin Write(‘. ОШИБКА: ‘); WriteLn(‘Превышено количество попыток ввода Y . ‘); end; end; else WriteLn(‘. ОШИБКА: Неподдерживаемая операция . ‘); end; WriteLn(‘Выйти из программы? Y/N? ‘); ReadLn(Q); until (Q = ‘y’) or (Q = ‘Y’); end.
Источник: info-master.su