Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 13.02.2011, 08:03   #11 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

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

Старый 13.02.2011, 08:03
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Не проходите мимо похожих тем, они помогут вам в решении проблемы

Помогите выбрать ноутбук из двух вариантов
Турбо Паскаль или Фри Паскаль. Задание по теме Типизированный файл
Проверить правильность решения – Паскаль.
Обсуждение пиратских ОС

Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 03:02.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.