13.02.2011, 08:03 | #11 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Хотя, с другой стороны, всё-таки занялся, и считаю, что это очень полезное сообщение. И всем начинающим программистам советую внимательно предложенный код изучить. Потому что перед нами - ярчайший пример того, как НЕ СЛЕДУЕТ писать программы. Что касается самого автора, то объяснять и доказывать что-либо ему я уже не берусь - реакция последует привычная: соплячье самоутверждение и деланье нарочито поперёк, дескать, вот я какой! Ну да не о нем речь. Прежде всего, сформулируем задачу (чего MrПрограМист, естественно, сделать не сподобился): Код:
Написать программу, имитирующую работу банкомата: проверку пинкода, блокировку карточки при трехкратном неверном вводе, запрос требуемой суммы и раскладку выдачи по количеству и номиналам купюр. 1. Как неоднократно указывалось тому же Mr.ПрограМисту, один из признаков хорошего стиля программирования - неиспользование оператора goto, т.е. переходов по меткам. В предложенном же варианте этих меток понатыкано немерено, отсюда программа - лапша лапшой. 2. Наличие "мертвых" условных переходов с заведомо невыполнимым условием, ведущим к ветви, содержащей какую-то неудопонятную ахинею. Ну в самом деле, если мы присваиваем переменной k5000 значение 10000, то как результат целочисленного деления некоей величины на 5000 может оказаться большим k5000, т.е. 10000? Об этом знает только один MrПрограМист, равно как и вообще о смысле всех тих переменных k5000, k1000 и т.д. Я как-то смысла в них, равно как и в последовательности действий типа k1000:=k1000+(c-k5000); не уловил абсолютно. По-моему, галиматья полная. Приведу с моей точки зрения нормальный код, решающий эту задачу: Код:
Program bankomat; Const Pincod=1973; Nom:Array[1..5] of Word=(5000,1000,500,100,50); Var pc,c,d,ex,i,j:Word; BEGIN i:=1; Repeat Writeln('Введите пинкод'); Readln(pc); If pc=Pincod then Writeln('Пинкод введен верно') else Writeln('Вы ошиблись'); Inc(i); Until (pc=Pincod) or (i=4); If i=4 then begin Writeln('Карточка заблокирована!'); Readln; end else Repeat Writeln('Введите сумму (не более 65500 руб.), которую вы хотите получить:'); Readln(d); For j:=1 to 5 do begin c:=d div Nom[j]; d:=d mod Nom[j]; for i:=1 to c do Writeln(Nom[j]:4,' руб;'); end; Writeln('Удержано ',d,' руб;'); Write('Введите 1 чтобы повторить, 2 чтобы выйти: '); Readln(ex); Until ex=2; END. |
13.02.2011, 08:03 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Не проходите мимо похожих тем, они помогут вам в решении проблемы Помогите выбрать ноутбук из двух вариантов Турбо Паскаль или Фри Паскаль. Задание по теме Типизированный файл Проверить правильность решения – Паскаль. Обсуждение пиратских ОС |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|