Вот моя задача чтобы раскачать тему. Разбирайте.
Ага, спасибо. А то нам как раз заняться нечем.
Хотя, с другой стороны, всё-таки занялся, и считаю, что это очень полезное сообщение. И всем начинающим программистам советую внимательно предложенный код изучить. Потому что перед нами - ярчайший пример того, как НЕ СЛЕДУЕТ писать программы.
Что касается самого автора, то объяснять и доказывать что-либо ему я уже не берусь - реакция последует привычная: соплячье самоутверждение и деланье нарочито поперёк, дескать, вот я какой! Ну да не о нем речь.
Прежде всего, сформулируем задачу (чего 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.
Как говорится - "Почувствуйте разницу!".