...И создал Бог программиста, и поселил его в своем вычислительном центре, чтобы работал в нем...
Читать дальше...
Использование подпрограмм в программе КАЛЬКУЛЯТОР
Lazarus IDE: Основы программирования в Windows
Несмотря на то, что всё потихоньку уходит в сеть, программирование для настольных компьютеров остаётся востребованным. И будет таковым ещё долго. Ну а самая распространённая операционная система для настольных компьютеров – это по-прежнему Windows. Поэтому любой программист, даже если он собирается стать веб-разработчиком, должен знать хотя бы основы создания программ для Windows. Подробнее... |
Итак, вооружившись новыми знаниями, попробуем доработать наш калькулятор. Прежде всего, посмотрите видео, в котором я подробно всё объяснил.
Сначала надо определить участки кода, которые можно выделить по каким-либо признакам и которые имеет смысл создать в виде подпрограмм. Обычно подпрограммы создаются в тех случаях, если
- Участок кода слишком громоздкий и мешает воспринимать программу в целом
- Участок кода выполняет инициализацию большого количества переменных
- Участок кода используется в программе несколько раз
- Участок кода может использоваться в других программах или модулях
Именно такие участки кода мы выделили в нашей программе. Не вижу смысла подробно описывать то, что я рассказал в видео, поэтому дальше приведу только полный текст программы, которая у меня в итоге получилась.
Листинг 22.1. Использование подпрограмм.
{************************************************************************ Использование подпрограмм в программе КАЛЬКУЛЯТОР Приложение к обучающему курсу ОСНОВЫ ПРОГРАММИРОВАНИЯ Автор: Поляков Андрей Валерьевич Сайт: https://info-master.su/programming/kurs/bp-base.php ***********************************************************************} program mycalc; {$mode objfpc}{$H+} uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Classes { you can add units after this }; const MAX_ENTER = 3; //Максимальное количество //попыток ввода второго операнда ERROR_NO = 0; //Нет ошибок ERROR_OPER = 1; //Операция не поддерживается ERROR_ZERO = 2; //Деление на ноль //(неправильный ввод второго операнда) var Err : byte; x, y, i : integer; op, Q : char; { ********************************************************************** Приветствие и подсказки **********************************************************************} procedure Welcome; begin WriteLn('ПРОСТОЙ КАЛЬКУЛЯТОР'); WriteLn('Введите два числа и знак операции:'); WriteLn('+ сложение, - вычитание, * умножение, / целое деление'); WriteLn('*****************************************************'); end; { ********************************************************************** Ввод данных в глобальные переменные **********************************************************************} procedure GetData; var i : integer; begin Write('x = '); ReadLn(x); Write('y = '); ReadLn(y); Write('Операция: '); ReadLn(op); end; { ********************************************************************** Проверка входных данных ВХОД: глобальные переменные x, y, op ВЫХОД: 0 - данные правильные, 1 - не поддерживаемая операция 2 - при операции деления второй операнд равен 0 и превышено количество попыток ввода **********************************************************************} function CheckData : byte; var Res : byte; begin Res := ERROR_NO; i := 0; case op of '+' : Res := ERROR_NO; '-' : Res := ERROR_NO; '*' : Res := ERROR_NO; '/' : begin while i <= MAX_ENTER do begin if y = 0 then begin WriteLn('!!! ОШИБКА: Y не должен быть равен 0 !!!'); if i <> MAX_ENTER then begin WriteLn('!!! Введите Y ещё раз!!!'); WriteLn('Осталось попыток: ', MAX_ENTER-i); Write('y = '); ReadLn(y); end; end else begin Res := ERROR_NO; Break; end; Inc(i); end; if y = 0 then Res := ERROR_ZERO; end; else Res := ERROR_OPER; end; CheckData := Res; end; { ********************************************************************* ОСНОВНАЯ ПРОГРАММА **********************************************************************} begin Welcome; //Приветствие repeat GetData; //Ввод данных Err := CheckData; //Проверка данных if Err <> ERROR_NO then //Если обнаружена ошибка begin case Err of //Вывести сообщение ERROR_OPER : WriteLn('!!! ОШИБКА: неподдерживаемая операция !!!'); ERROR_ZERO : WriteLn('!!! Превышено кол-во попыток ввода Y !!!'); end; Continue; //и начать заново end; case op of //Если ошибок не обнаружено '+' : WriteLn(x, ' + ', y, ' = ', x + y); //Сложение '-' : WriteLn(x, ' - ', y, ' = ', x - y); //Вычитание '*' : WriteLn(x, ' * ', y, ' = ', x * y); //Умножение '/' : WriteLn(x, ' div ', y, ' = ', x div y); //Целое деление end; WriteLn('Выйти из программы? Y/N? '); //Запрос на выход ReadLn(Q); until (Q = 'y') or (Q = 'Y'); end.