19 / 19 / 16
Регистрация: 13.10.2013
Сообщений: 205
1

Написать процедуру для повторяющегося кода программы

26.11.2014, 13:16. Показов 1175. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте, нужно повторяющийся кусок программы запихать в процедуру т.е. на данный момент код 400 строк, если убрать в процедуру этот повторяющийся отрывок будет быстрей производится вычисление и экономней.
Повторяющийся код: (я его выделил комментарием, начинается с условия IF)

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 if nap = 5 then 
          begin
            sum := sum + shan;
            WriteLn('Вы выбрали шанежку. Желаете еще что-нибудь ?', #10, #13, 'Да(1)/Нет(0)');
            ReadLn(choose);
//**********************************************************************************************            
            if choose = 1 Then continue 
            Else begin
              WriteLn('Ваш заказ составил ', sum, ' руб');
              WriteLn('Введите вашу сумму денег: ');
              ReadLn(summamoney);
              if summamoney = sum Then WriteLn('Спасибо, приходите еще поесть в ПАТ !')
              Else WriteLn('Спасибо, ваша сдача ', summamoney - sum, ', руб');                          
            end;
           textcolor(6); 
           WriteLn('Version 1.2 Автор: Ануфриев Д.'); 
           ReadLn;
           exit; 
//**********************************************************************************************            
          end;
Сама программа:
Вложения
Тип файла: zip Столовая ПАТ1.zip (3.0 Кб, 4 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2014, 13:16
Ответы с готовыми решениями:

Написать алгоритм действий для готового кода программы
Здравствуйте! Помогите, пожалуйста, решить проблему. А проблема такая, что нам дали лабораторную...

Как избавиться от повторяющегося кода?
Есть некое условие: "if" и "else". При котором делается либо одно, либо другое. Но бывает так, что...

Слишком много повторяющегося кода в Редаксе
Представим, что у нас приложение средней крупности, в котором из UI (Реакта) через Редакс делаем...

БНФ - запись повторяющегося фрагмента кода
type IInterface ::= interface(IInterface1}]) end; Хочу определить формально синтаксис...

6
171 / 57 / 45
Регистрация: 21.06.2012
Сообщений: 263
26.11.2014, 13:59 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure MyProc (choose: здесь_укажите_тип_переменной; sum: здесь_укажите_тип_переменной);
begin
if choose = 1 Then continue 
            Else begin
              WriteLn('Ваш заказ составил ', sum, ' руб');
              WriteLn('Введите вашу сумму денег: ');
              ReadLn(summamoney);
              if summamoney = sum Then WriteLn('Спасибо, приходите еще поесть в ПАТ !')
              Else WriteLn('Спасибо, ваша сдача ', summamoney - sum, ', руб');                          
            end;
           textcolor(6); 
           WriteLn('Version 1.2 Автор: Ануфриев Д.'); 
           ReadLn;
           exit; 
end;
в сам файл с программой не лазил, не проверял
0
19 / 19 / 16
Регистрация: 13.10.2013
Сообщений: 205
26.11.2014, 15:40  [ТС] 3
Пишет ошибку, continue вне цикла.
Загляни в файл )
Написать процедуру для повторяющегося кода программы
0
171 / 57 / 45
Регистрация: 21.06.2012
Сообщений: 263
27.11.2014, 11:35 4
ну тогда предлагаю офоррмить в качестве процедуры чуть меньший, повторяющийся кусок кода, например
Pascal
1
2
3
4
5
6
7
begin
 WriteLn('Ваш заказ составил ', sum, ' руб');
 WriteLn('Введите вашу сумму денег: ');
 ReadLn(summamoney);
 if summamoney = sum Then WriteLn('Спасибо, приходите еще поесть в ПАТ !')
 Else WriteLn('Спасибо, ваша сдача ', summamoney - sum, ', руб');                          
end;
заменить на
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
procedure MyProc (summamoney, sum: здесь_укажите_тип_переменной);
begin
              WriteLn('Ваш заказ составил ', sum, ' руб');
              WriteLn('Введите вашу сумму денег: ');
              ReadLn(summamoney);
              if summamoney = sum Then WriteLn('Спасибо, приходите еще поесть в ПАТ !')
              Else WriteLn('Спасибо, ваша сдача ', summamoney - sum, ', руб');                          
           textcolor(6); 
           WriteLn('Version 1.2 Автор: Ануфриев Д.'); 
           ReadLn;
           halt; 
end;
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32628 / 21095 / 8139
Регистрация: 22.10.2011
Сообщений: 36,358
Записей в блоге: 8
27.11.2014, 11:47 5
Лучший ответ Сообщение было отмечено Joker456 как решение

Решение

Joker456, подпрограмма может быть не только процедурой, но и функцией:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function func(addsum : integer; s : string) : boolean;
var 
  choose : byte;
  summamoney : Integer;
begin
  sum := sum + addsum;
  WriteLn('Вы выбрали ' + s +'. Желаете еще что-нибудь ?', #10, #13, 'Да(1)/Нет(0)');
  ReadLn(choose);
  if choose = 1 Then func := true 
  Else begin
    WriteLn('Ваш заказ составил ', sum, ' руб');
    WriteLn('Введите вашу сумму денег: ');
    ReadLn(summamoney);
    if summamoney = sum Then WriteLn('Спасибо, приходите еще поесть в ПАТ !')
    Else WriteLn('Спасибо, ваша сдача ', summamoney - sum, ', руб');
    
    textcolor(6); 
    WriteLn('Version 1.2 Автор: Ануфриев Д.'); 
    ReadLn;
    func := false;
  end;
end;
, и все однотипные куски кода меняешь вот по такому шаблону:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
          if nap = 1 then 
          begin
            if func(tealis, 'чай лисма') then continue else exit;
            (*
            sum := sum + tealis;
            WriteLn('Вы выбрали чай лисма. Желаете еще что-нибудь ?', #10, #13, 'Да(1)/Нет(0)');
            ReadLn(choose);
            if choose = 1 Then continue 
            Else begin
              WriteLn('Ваш заказ составил ', sum, ' руб');
              WriteLn('Введите вашу сумму денег: ');
              ReadLn(summamoney);
              if summamoney = sum Then WriteLn('Спасибо, приходите еще поесть в ПАТ !')
              Else WriteLn('Спасибо, ваша сдача ', summamoney - sum, ', руб'); 
            end;
           textcolor(6); 
           WriteLn('Version 1.2 Автор: Ануфриев Д.'); 
           ReadLn;
           exit; 
           *)
          end;
, было 15 строк - осталась одна. Очень сильно сократит код...
1
19 / 19 / 16
Регистрация: 13.10.2013
Сообщений: 205
29.11.2014, 20:08  [ТС] 6
Не правильно считает сумму заказавшего товара т.е. суммирует последний товар, а не общую сумму всех товаров.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
program stolovaPAT;
uses
  crt;
const
  tealis = 5; cofekpk = 10; watergaz = 4; supovo = 30; seledpod = 30;
  waterl = 20; teagreen = 9; borsh = 30; solanka = 35; mimoza = 30;
  gorbush = 40; filekur = 45; kotleta = 24; kor = 20; waterfrukt = 25;
  makaronuska = 20; grechka = 15; ris = 10; tort = 22; rucb = 30;
  makaronu = 10;fish = 45; salatkap = 20; kuriza = 35; vinegret = 20;
  zim = 27; sous = 5; krug = 1; bread = 3; djem = 18; pirfish = 16; shan = 16;
 
function func(sum : integer; s : string) : boolean;
var 
  choose : byte;
  summamoney,addsum : Integer;
begin
  sum := sum + addsum;
  WriteLn('Вы выбрали ' + s +'. Желаете еще что-нибудь ?', #10, #13, 'Да(1)/Нет(0)');
  ReadLn(choose);
  if choose = 1 Then func := true 
  Else begin
    WriteLn('Ваш заказ составил ', sum, ' руб');
    WriteLn('Введите вашу сумму денег: ');
    ReadLn(summamoney);
    if summamoney = sum Then WriteLn('Спасибо, приходите еще поесть в ПАТ !')
    Else WriteLn('Спасибо, ваша сдача ', summamoney - sum, ', руб');
    
    textcolor(6); 
    WriteLn('Version 1.2 Автор: Ануфриев Д.'); 
    ReadLn;
    func := false;
  end;
end;
 
var
  menu: 1..4; 
  sum: Integer;
  choose,nap: byte;
 
begin
  textcolor(10);
  ClrScr;
  sum := 0;
  WriteLn('Столовая ПАТ'); 
  repeat
   textcolor(11);
    WriteLn('Меню: ', #10, #13, '1. Напитки', #10, #13, '2. Первые блюда', #10, #13, '3. Вторые блюда', #10, #13, '4. Салат', #10, #13, '5. Гарниры', #10, #13, '6. Другое', #10, #13, '7. Пироженки, пироги', #10, #13, '8. Выход');
    ReadLn(menu);
    case menu of
      1: 
        begin
          textcolor(7);       
          WriteLn('Вы выбрали раздел напитки ', #10, #13, '1. Чай лисма [', tealis, ' руб]', #10, #13, '2. Чай гринфилд [', teagreen, ' руб]', #10, #13, '3. Кофе черный/мягкий/карамелька [', cofekpk, ' руб]', #10, #13, '4. Вода газированная 0,2 л [', watergaz, ' руб]', #10, #13, '5. Вода в ассортименте 0,5 л [', waterl, ' руб]', #10, #13, '6. Вода  фруктовая[',waterfrukt, ' руб]');
          ReadLn(nap);
          if func(tealis, 'Чай лисма') then continue else exit;
          if func(teagreen, 'Чай гринфилд') then continue else exit;
          if func(cofekpk, 'Кофе черный/мягкий/карамелька') then continue else exit;
          if func(watergaz, 'Вода газированная') then continue else exit;
          if func(waterl, 'Вода в ассортиментеая') then continue else exit;
          if func(waterfrukt, 'Вода  фруктовая') then continue else exit;
        end;
      2: 
        begin
         textcolor(7);
          WriteLn('Вы выбрали раздел первые блюда ', #10, #13, '1. Борщ с курицей[', borsh, ' руб]', #10, #13, '2. Солянка домашняя [', solanka, ' руб]', #10, #13, '3. Суп овощной [', supovo, ' руб]');
          ReadLn(nap);
          if func(borsh, 'Борщ с курицей') then continue else exit;
          if func(solanka, 'Солянка домашняя') then continue else exit;
          if func(supovo, 'Суп овощной') then continue else exit;
        end;
      3: 
        begin
         textcolor(7);
          WriteLn('Вы выбрали раздел вторые блюда ', #10, #13, '1. Горбуша запеченная [', gorbush, ' руб]', #10, #13, '2. Филе куриное [', filekur, ' руб]', #10, #13, '3. Котлета рубленная [', kotleta, ' руб]', #10, #13, '4. Сосиски отварные [', makaronuska, ' руб]');
          ReadLn(nap);
          if func(gorbush, 'Горбуша запеченная') then continue else exit;
          if func(filekur, 'Филе куриное') then continue else exit;
          if func(kotleta, 'Котлета рубленная') then continue else exit;
          if func(makaronuska, 'Сосиски отварные') then continue else exit;
        end;
        4: 
        begin
         textcolor(7);
          WriteLn('Вы выбрали раздел салаты ', #10, #13, '1. Салат "Зимний" [', zim, ' руб]', #10, #13, '2. Салат с курицей [', kuriza, ' руб]', #10, #13, '3. Салат с капустой [', salatkap, ' руб]', #10, #13, '4. Винегрет овощной [', vinegret, ' руб]', #10, #13, '5. Салат "Русь" [',rucb, ' руб]', #10, #13, '6. Салат "Мимоза" [',mimoza, ' руб]', #10, #13, '7. Сельдь под шубой [', seledpod, ' руб]');
          if func(zim, 'Салат "Зимний"') then continue else exit;
          if func(kuriza, 'Салат с курицей') then continue else exit;
          if func(salatkap, 'Салат с капустой') then continue else exit;
          if func(vinegret, 'Винегрет овощной') then continue else exit;
          if func(rucb, 'Салат "Русь"') then continue else exit;
          if func(mimoza, 'Салат "Мимоза"') then continue else exit;
          if func(seledpod, 'Сельдь под шубой') then continue else exit;
        end;
        5: 
        begin
          WriteLn('Вы выбрали раздел гарниры ', #10, #13, '1. Гречка [', grechka, ' руб]', #10, #13, '2. Рис  [', ris, ' руб]', #10, #13, '3. Макароны [', makaronu, ' руб]');
          ReadLn(nap);
          if func(grechka, 'Гречка') then continue else exit;
          if func(ris, 'Рис') then continue else exit;
         if func(makaronu, 'Макароны') then continue else exit; 
        end;
       6: 
        begin
         textcolor(7);
          WriteLn('Вы выбрали раздел другое ', #10, #13, '1. Соус [', sous, ' руб]', #10, #13, '2. Кружка [', krug, ' руб]', #10, #13, '3. Хлеб [', bread, ' руб]');
          ReadLn(nap);
          if func(sous, 'Соус') then continue else exit; 
          if func(krug, 'Кружка') then continue else exit; 
          if func(bread, 'Хлеб') then continue else exit; 
        end; 
        7: 
        begin
          textcolor(7);       
          WriteLn('Вы выбрали раздел кондитерские изделия ', #10, #13, '1. Корзинка [Пироженка] [', kor, ' руб]', #10, #13, '2. Кусок торта [', tort, ' руб]', #10, #13, '3. Булочка с джемом [', djem, ' руб]', #10, #13, '4. Пирог с мясом [', pirfish, ' руб]', #10, #13, '5. Шаньга [', shan, ' руб]');
          ReadLn(nap);
          if func(kor, 'Корзинка [Пироженка]') then continue else exit;
          if func(tort, 'Кусок торта') then continue else exit;
          if func(djem, 'Булочка с джемом') then continue else exit;
          if func(pirfish, 'Пирог с мясом') then continue else exit;
          if func(shan, 'Шаньга') then continue else exit;
        end;
    end;{Case}
  until menu = 8; 
end.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32628 / 21095 / 8139
Регистрация: 22.10.2011
Сообщений: 36,358
Записей в блоге: 8
29.11.2014, 21:11 7
То, что предложил я не имеет ничего общего с тем кодом, который наляпан тобой. Сам извратил мою идею, сам и расхлебывай. У меня sum-глобальная переменная, у тебя - параметр, чего ты, собственно, ждал от своего кода? У тебя вообще мусор считается, ибо используются неинциализированные локальные переменные...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2014, 21:11
Помогаю со студенческими работами здесь

Избавляемся от повторяющегося кода. Типовые решения
Здравствуйте, господа. Собственно, мне нужен совет. Есть куча подобного кода: IAddress _address;...

Использование повторяющегося участка кода в программе несколько раз
В программе одинаковый учаток кода повторяется в нескольких местах. Скажите наиболее удобный...

Поиск повторяющегося html кода и замена повторов на другой
Здравствуйте уважаемые знатоки! Сегодня я к вам присоединился и не успев еще влиться в коллектив,...

Написать процедуру, на которую можно потом ссылаться в разных частях кода
Доброго времени суток! Вот и дошел до того момента когда код нужно использовать в нескольких...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru