Не сохраняется значение переменной - Pascal

Узнай цену своей работы

Формулировка задачи:

Нужна помощь. Не сохраняет данные переменных после функции,попробовал многое(от замены переменных,до добавления новых) ,но по ходу у меня руки из жопы еще не все что можно. Проблема в описании функции,да?
Листинг программы
  1. var
  2. wpn,wen:integer;
  3. dps,dmg,ats:real;
  4. function sword ( wpn:integer; var dmg,ats,dps:real):real;
  5. begin
  6. if wpn <> 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 then
  7. begin
  8. writeln('Выберите кинжал');
  9. writeln('');
  10. writeln('1-CopperShortsword');
  11. writeln('');
  12. writeln('2-TinShortsword');
  13. writeln('');
  14. writeln('3-IronShortsword');
  15. writeln('');
  16. writeln('4-LeadShortsword');
  17. writeln('');
  18. writeln('5-SilverShortsword');
  19. writeln('');
  20. writeln('6-TungsterShortsword');
  21. writeln('');
  22. writeln('7-GoldShortsword');
  23. writeln('');
  24. writeln('8-PlatinumShortsword');
  25. writeln('');
  26. readln(wpn);
  27. case wpn of
  28. 1:begin
  29. dmg:=5;
  30. ats:=13;
  31. dps:=(60/ats)*dmg;
  32. end;
  33. 2:begin
  34. dmg:=7;
  35. ats:=12;
  36. dps:=(60/ats)*dmg;
  37. end;
  38. 3:begin
  39. dmg:=8;
  40. ats:=12;
  41. dps:=(60/ats)*dmg;
  42. end;
  43. 4:begin
  44. dmg:=9;
  45. ats:=12;
  46. dps:=(60/ats)*dmg;
  47. end;
  48. 5:begin
  49. dmg:=9;
  50. ats:=12;
  51. dps:=(60/ats)*dmg;
  52. end;
  53. 6:begin
  54. dmg:=10;
  55. ats:=11;
  56. dps:=(60/ats)*dmg;
  57. end;
  58. 7:begin
  59. dmg:=11;
  60. ats:=11;
  61. dps:=(60/ats)*dmg;
  62. end;
  63. 8:begin
  64. dmg:=13;
  65. ats:=10;
  66. dps:=(60/ats)*dmg;
  67. end;
  68. end;
  69. end;
  70. end;
  71. function ench (wen:integer; var dmg,ats,dps:real):real;
  72. begin
  73. if wen <> 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 or 9 or 10 or 11 then
  74. begin
  75. writeln('Выберите зачарование оружия');
  76. writeln('');
  77. writeln('1-Quick');
  78. writeln('');
  79. writeln('2-Deadly');
  80. writeln('');
  81. writeln('3-Agile');
  82. writeln('');
  83. writeln('4-Nimble');
  84. writeln('');
  85. writeln('5-Murderous');
  86. writeln('');
  87. writeln('6-Slow');
  88. writeln('');
  89. writeln('7-Sluggish');
  90. writeln('');
  91. writeln('8-Lazy');
  92. writeln('');
  93. writeln('9-Annoying');
  94. writeln('');
  95. writeln('10-Nasty');
  96. writeln('');
  97. writeln('11-NONE');
  98. writeln('');
  99. readln(wpn);
  100. case wen of
  101. 1:begin
  102. dmg:=dmg;
  103. ats:=ats-((ats/100)*10);
  104. dps:=(60/ats)*dmg;
  105. writeln(ats);
  106. end;
  107. 2:begin
  108. dmg:=dmg+((dmg/100)*10);
  109. ats:=ats-((ats/100)*10);
  110. dps:=(60/ats)*dmg;
  111. end;
  112. 3:begin
  113. dmg:=dmg;
  114. ats:=ats-((ats/100)*10);
  115. dps:=(60/ats)*dmg;
  116. end;
  117. 4:begin
  118. dmg:=dmg;
  119. ats:=ats-((ats/100)*10);
  120. dps:=(60/ats)*dmg;
  121. end;
  122. 5:begin
  123. dmg:=dmg+((dmg/100)*7);
  124. ats:=ats-((ats/100)*6);
  125. dps:=(60/ats)*dmg;
  126. end;
  127. 6:begin
  128. dmg:=dmg;
  129. ats:=ats-((ats/100)*-15);
  130. dps:=(60/ats)*dmg;
  131. end;
  132. 7:begin
  133. dmg:=dmg;
  134. ats:=ats-((ats/100)*-20);
  135. dps:=(60/ats)*dmg;
  136. end;
  137. 8:begin
  138. dmg:=dmg;
  139. ats:=ats-((ats/100)*-8);
  140. dps:=(60/ats)*dmg;
  141. end;
  142. 9:begin
  143. dmg:=dmg+((dmg/100)*-20);
  144. ats:=ats-((ats/100)*-15);
  145. dps:=(60/ats)*dmg;
  146. end;
  147. 10:begin
  148. dmg:=dmg+((dmg/100)*5);
  149. ats:=ats-((ats/100)*10);
  150. dps:=(60/ats)*dmg;
  151. end;
  152. 11:begin
  153. dmg:=dmg;
  154. ats:=ats;
  155. dps:=(60/ats)*dmg;
  156. end;
  157. end;
  158. end;
  159. end;
  160. begin
  161. dps:=0;
  162. dmg:=0;
  163. ats:=0;
  164. wpn:=0;
  165. wen:=0;
  166. sword(wpn,dmg,ats,dps);
  167. writeln(dps,' ',dmg,' ',ats);
  168. ench(wen,dmg,ats,dps);
  169. writeln(dps,' ',dmg,' ',ats);
  170. writeln('Нажмите <Enter> для завершения программы');
  171. readln;
  172. end.
Заранее спасибо.

Решение задачи: «Не сохраняется значение переменной»

textual
Листинг программы
  1.  var
  2.   wpn,wen:integer;
  3.   dps,dmg,ats:real;
  4.   function sword ( wpn:integer; var dmg,ats,dps:real):real;
  5.   begin
  6.    if (wpn<1) or (wpn>8) then
  7.      begin
  8.        repeat
  9.         writeln('Выберите кинжал');
  10.         writeln('');
  11.         writeln('1-CopperShortsword');
  12.         writeln('');
  13.         writeln('2-TinShortsword');
  14.         writeln('');
  15.         writeln('3-IronShortsword');
  16.         writeln('');
  17.         writeln('4-LeadShortsword');
  18.         writeln('');
  19.         writeln('5-SilverShortsword');
  20.         writeln('');
  21.         writeln('6-TungsterShortsword');
  22.         writeln('');
  23.         writeln('7-GoldShortsword');
  24.         writeln('');
  25.         writeln('8-PlatinumShortsword');
  26.         writeln('');
  27.         readln(wpn);
  28.         until (wpn>=1) and (wpn<=8);
  29.         end;
  30.     case wpn of
  31.      1:begin
  32.        dmg:=5;
  33.        ats:=13;
  34.        dps:=(60/ats)*dmg;
  35.        end;
  36.      2:begin
  37.        dmg:=7;
  38.        ats:=12;
  39.        dps:=(60/ats)*dmg;
  40.        end;
  41.      3:begin
  42.        dmg:=8;
  43.        ats:=12;
  44.        dps:=(60/ats)*dmg;
  45.        end;
  46.      4:begin
  47.        dmg:=9;
  48.        ats:=12;
  49.        dps:=(60/ats)*dmg;
  50.        end;
  51.      5:begin
  52.        dmg:=9;
  53.        ats:=12;
  54.        dps:=(60/ats)*dmg;
  55.        end;
  56.      6:begin
  57.        dmg:=10;
  58.        ats:=11;
  59.        dps:=(60/ats)*dmg;
  60.        end;
  61.      7:begin
  62.        dmg:=11;
  63.        ats:=11;
  64.        dps:=(60/ats)*dmg;
  65.        end;
  66.      8:begin
  67.        dmg:=13;
  68.        ats:=10;
  69.        dps:=(60/ats)*dmg;
  70.        end;
  71.       end;
  72.    end;
  73.    function ench (wen:integer; vardmg,ats,dps:real):real;
  74.    begin
  75.    if (wen<1) or (wen>11)  then
  76.     begin
  77.     repeat
  78.     writeln('Выберите зачарование');
  79.     writeln('');
  80.     writeln('1-Quick');
  81.     writeln('');
  82.     writeln('2-Deadly');
  83.     writeln('');
  84.     writeln('3-Agile');
  85.     writeln('');
  86.     writeln('4-Nimble');
  87.     writeln('');
  88.     writeln('5-Murderous');
  89.     writeln('');
  90.     writeln('6-Slow');
  91.     writeln('');
  92.     writeln('7-Sluggish');
  93.     writeln('');
  94.     writeln('8-Lazy');
  95.     writeln('');
  96.     writeln('9-Annoying');
  97.     writeln('');
  98.     writeln('10-Nasty');
  99.     writeln('');
  100.     writeln('11-NONE');
  101.     writeln('');
  102.     readln(wpn);
  103.     until (wpn>=1) and (wpn<=11);
  104.     end;
  105.     case wen of
  106.      1:begin
  107.        dmg:=dmg;
  108.        ats:=ats-((ats/100)*10);
  109.        dps:=(60/ats)*dmg;
  110.        writeln(ats);
  111.        end;
  112.      2:begin
  113.        dmg:=dmg+((dmg/100)*10);
  114.        ats:=ats-((ats/100)*10);
  115.        dps:=(60/ats)*dmg;
  116.        end;
  117.      3:begin
  118.        dmg:=dmg;
  119.        ats:=ats-((ats/100)*10);
  120.        dps:=(60/ats)*dmg;
  121.        end;
  122.      4:begin
  123.        dmg:=dmg;
  124.        ats:=ats-((ats/100)*10);
  125.        dps:=(60/ats)*dmg;
  126.        end;
  127.      5:begin
  128.        dmg:=dmg+((dmg/100)*7);
  129.        ats:=ats-((ats/100)*6);
  130.        dps:=(60/ats)*dmg;
  131.        end;
  132.      6:begin
  133.        dmg:=dmg;
  134.        ats:=ats-((ats/100)*-15);
  135.        dps:=(60/ats)*dmg;
  136.        end;
  137.      7:begin
  138.        dmg:=dmg;
  139.        ats:=ats-((ats/100)*-20);
  140.        dps:=(60/ats)*dmg;
  141.        end;
  142.      8:begin
  143.        dmg:=dmg;
  144.        ats:=ats-((ats/100)*-8);
  145.        dps:=(60/ats)*dmg;
  146.        end;
  147.      9:begin
  148.        dmg:=dmg+((dmg/100)*-20);
  149.        ats:=ats-((ats/100)*-15);
  150.        dps:=(60/ats)*dmg;
  151.        end;
  152.      10:begin
  153.        dmg:=dmg+((dmg/100)*5);
  154.        ats:=ats-((ats/100)*10);
  155.        dps:=(60/ats)*dmg;
  156.        end;
  157.      11:begin
  158.        dmg:=dmg;
  159.        ats:=ats;
  160.        dps:=(60/ats)*dmg;
  161.       end;
  162.     end;
  163.    end;
  164.  
  165.    begin
  166.        dps:=0;
  167.        dmg:=0;
  168.        ats:=0;
  169.        wpn:=0;
  170.        wen:=0;
  171.      sword(wpn,dmg,ats,dps);
  172.      writeln(dps,'  ',dmg,'  ',ats);
  173.      ench(wen,dmg,ats,dps);
  174.      writeln(dps,'   ',dmg,'   ',ats);
  175.      writeln(' <Enter>');
  176.      readln;
  177.      end.

Объяснение кода листинга программы

Этот код написан на языке Pascal и предназначен для выбора оружия и зачарования в зависимости от параметров. Переменные wpn и wen используются для выбора типа оружия и зачарования соответственно. Переменные dmg, ats и dps используются для хранения характеристик выбранного оружия и зачарования. Функция sword принимает на вход wpn (тип оружия), dmg (урон), ats (скорость атаки) и dps (скорость нанесения урона) и выводит информацию о выбранном оружии. Функция ench принимает на вход wen (зачарование) и использует его для изменения характеристик оружия. В цикле while происходит повторное отображение меню выбора оружия и зачарования до тех пор, пока пользователь не выберет один из вариантов. После выбора оружия и зачарования, функция sword обновляет значения dmg, ats и dps и выводит их на экран. Затем вызывается функция ench, которая также обновляет значения dmg, ats и dps и выводит их на экран. Наконец, программа просит пользователя ввести данные, и цикл while продолжается до тех пор, пока пользователь не введет данные для завершения программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут