Не сохраняется значение переменной - Pascal
Формулировка задачи:
- var
- wpn,wen:integer;
- dps,dmg,ats:real;
- function sword ( wpn:integer; var dmg,ats,dps:real):real;
- begin
- if wpn <> 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 then
- begin
- writeln('Выберите кинжал');
- writeln('');
- writeln('1-CopperShortsword');
- writeln('');
- writeln('2-TinShortsword');
- writeln('');
- writeln('3-IronShortsword');
- writeln('');
- writeln('4-LeadShortsword');
- writeln('');
- writeln('5-SilverShortsword');
- writeln('');
- writeln('6-TungsterShortsword');
- writeln('');
- writeln('7-GoldShortsword');
- writeln('');
- writeln('8-PlatinumShortsword');
- writeln('');
- readln(wpn);
- case wpn of
- 1:begin
- dmg:=5;
- ats:=13;
- dps:=(60/ats)*dmg;
- end;
- 2:begin
- dmg:=7;
- ats:=12;
- dps:=(60/ats)*dmg;
- end;
- 3:begin
- dmg:=8;
- ats:=12;
- dps:=(60/ats)*dmg;
- end;
- 4:begin
- dmg:=9;
- ats:=12;
- dps:=(60/ats)*dmg;
- end;
- 5:begin
- dmg:=9;
- ats:=12;
- dps:=(60/ats)*dmg;
- end;
- 6:begin
- dmg:=10;
- ats:=11;
- dps:=(60/ats)*dmg;
- end;
- 7:begin
- dmg:=11;
- ats:=11;
- dps:=(60/ats)*dmg;
- end;
- 8:begin
- dmg:=13;
- ats:=10;
- dps:=(60/ats)*dmg;
- end;
- end;
- end;
- end;
- function ench (wen:integer; var dmg,ats,dps:real):real;
- begin
- if wen <> 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 or 9 or 10 or 11 then
- begin
- writeln('Выберите зачарование оружия');
- writeln('');
- writeln('1-Quick');
- writeln('');
- writeln('2-Deadly');
- writeln('');
- writeln('3-Agile');
- writeln('');
- writeln('4-Nimble');
- writeln('');
- writeln('5-Murderous');
- writeln('');
- writeln('6-Slow');
- writeln('');
- writeln('7-Sluggish');
- writeln('');
- writeln('8-Lazy');
- writeln('');
- writeln('9-Annoying');
- writeln('');
- writeln('10-Nasty');
- writeln('');
- writeln('11-NONE');
- writeln('');
- readln(wpn);
- case wen of
- 1:begin
- dmg:=dmg;
- ats:=ats-((ats/100)*10);
- dps:=(60/ats)*dmg;
- writeln(ats);
- end;
- 2:begin
- dmg:=dmg+((dmg/100)*10);
- ats:=ats-((ats/100)*10);
- dps:=(60/ats)*dmg;
- end;
- 3:begin
- dmg:=dmg;
- ats:=ats-((ats/100)*10);
- dps:=(60/ats)*dmg;
- end;
- 4:begin
- dmg:=dmg;
- ats:=ats-((ats/100)*10);
- dps:=(60/ats)*dmg;
- end;
- 5:begin
- dmg:=dmg+((dmg/100)*7);
- ats:=ats-((ats/100)*6);
- dps:=(60/ats)*dmg;
- end;
- 6:begin
- dmg:=dmg;
- ats:=ats-((ats/100)*-15);
- dps:=(60/ats)*dmg;
- end;
- 7:begin
- dmg:=dmg;
- ats:=ats-((ats/100)*-20);
- dps:=(60/ats)*dmg;
- end;
- 8:begin
- dmg:=dmg;
- ats:=ats-((ats/100)*-8);
- dps:=(60/ats)*dmg;
- end;
- 9:begin
- dmg:=dmg+((dmg/100)*-20);
- ats:=ats-((ats/100)*-15);
- dps:=(60/ats)*dmg;
- end;
- 10:begin
- dmg:=dmg+((dmg/100)*5);
- ats:=ats-((ats/100)*10);
- dps:=(60/ats)*dmg;
- end;
- 11:begin
- dmg:=dmg;
- ats:=ats;
- dps:=(60/ats)*dmg;
- end;
- end;
- end;
- end;
- begin
- dps:=0;
- dmg:=0;
- ats:=0;
- wpn:=0;
- wen:=0;
- sword(wpn,dmg,ats,dps);
- writeln(dps,' ',dmg,' ',ats);
- ench(wen,dmg,ats,dps);
- writeln(dps,' ',dmg,' ',ats);
- writeln('Нажмите <Enter> для завершения программы');
- readln;
- end.
Решение задачи: «Не сохраняется значение переменной»
- var
- wpn,wen:integer;
- dps,dmg,ats:real;
- function sword ( wpn:integer; var dmg,ats,dps:real):real;
- begin
- if (wpn<1) or (wpn>8) then
- begin
- repeat
- writeln('Выберите кинжал');
- writeln('');
- writeln('1-CopperShortsword');
- writeln('');
- writeln('2-TinShortsword');
- writeln('');
- writeln('3-IronShortsword');
- writeln('');
- writeln('4-LeadShortsword');
- writeln('');
- writeln('5-SilverShortsword');
- writeln('');
- writeln('6-TungsterShortsword');
- writeln('');
- writeln('7-GoldShortsword');
- writeln('');
- writeln('8-PlatinumShortsword');
- writeln('');
- readln(wpn);
- until (wpn>=1) and (wpn<=8);
- end;
- case wpn of
- 1:begin
- dmg:=5;
- ats:=13;
- dps:=(60/ats)*dmg;
- end;
- 2:begin
- dmg:=7;
- ats:=12;
- dps:=(60/ats)*dmg;
- end;
- 3:begin
- dmg:=8;
- ats:=12;
- dps:=(60/ats)*dmg;
- end;
- 4:begin
- dmg:=9;
- ats:=12;
- dps:=(60/ats)*dmg;
- end;
- 5:begin
- dmg:=9;
- ats:=12;
- dps:=(60/ats)*dmg;
- end;
- 6:begin
- dmg:=10;
- ats:=11;
- dps:=(60/ats)*dmg;
- end;
- 7:begin
- dmg:=11;
- ats:=11;
- dps:=(60/ats)*dmg;
- end;
- 8:begin
- dmg:=13;
- ats:=10;
- dps:=(60/ats)*dmg;
- end;
- end;
- end;
- function ench (wen:integer; vardmg,ats,dps:real):real;
- begin
- if (wen<1) or (wen>11) then
- begin
- repeat
- writeln('Выберите зачарование');
- writeln('');
- writeln('1-Quick');
- writeln('');
- writeln('2-Deadly');
- writeln('');
- writeln('3-Agile');
- writeln('');
- writeln('4-Nimble');
- writeln('');
- writeln('5-Murderous');
- writeln('');
- writeln('6-Slow');
- writeln('');
- writeln('7-Sluggish');
- writeln('');
- writeln('8-Lazy');
- writeln('');
- writeln('9-Annoying');
- writeln('');
- writeln('10-Nasty');
- writeln('');
- writeln('11-NONE');
- writeln('');
- readln(wpn);
- until (wpn>=1) and (wpn<=11);
- end;
- case wen of
- 1:begin
- dmg:=dmg;
- ats:=ats-((ats/100)*10);
- dps:=(60/ats)*dmg;
- writeln(ats);
- end;
- 2:begin
- dmg:=dmg+((dmg/100)*10);
- ats:=ats-((ats/100)*10);
- dps:=(60/ats)*dmg;
- end;
- 3:begin
- dmg:=dmg;
- ats:=ats-((ats/100)*10);
- dps:=(60/ats)*dmg;
- end;
- 4:begin
- dmg:=dmg;
- ats:=ats-((ats/100)*10);
- dps:=(60/ats)*dmg;
- end;
- 5:begin
- dmg:=dmg+((dmg/100)*7);
- ats:=ats-((ats/100)*6);
- dps:=(60/ats)*dmg;
- end;
- 6:begin
- dmg:=dmg;
- ats:=ats-((ats/100)*-15);
- dps:=(60/ats)*dmg;
- end;
- 7:begin
- dmg:=dmg;
- ats:=ats-((ats/100)*-20);
- dps:=(60/ats)*dmg;
- end;
- 8:begin
- dmg:=dmg;
- ats:=ats-((ats/100)*-8);
- dps:=(60/ats)*dmg;
- end;
- 9:begin
- dmg:=dmg+((dmg/100)*-20);
- ats:=ats-((ats/100)*-15);
- dps:=(60/ats)*dmg;
- end;
- 10:begin
- dmg:=dmg+((dmg/100)*5);
- ats:=ats-((ats/100)*10);
- dps:=(60/ats)*dmg;
- end;
- 11:begin
- dmg:=dmg;
- ats:=ats;
- dps:=(60/ats)*dmg;
- end;
- end;
- end;
- begin
- dps:=0;
- dmg:=0;
- ats:=0;
- wpn:=0;
- wen:=0;
- sword(wpn,dmg,ats,dps);
- writeln(dps,' ',dmg,' ',ats);
- ench(wen,dmg,ats,dps);
- writeln(dps,' ',dmg,' ',ats);
- writeln(' <Enter>');
- readln;
- end.
Объяснение кода листинга программы
Этот код написан на языке Pascal и предназначен для выбора оружия и зачарования в зависимости от параметров.
Переменные wpn
и wen
используются для выбора типа оружия и зачарования соответственно. Переменные dmg
, ats
и dps
используются для хранения характеристик выбранного оружия и зачарования.
Функция sword
принимает на вход wpn
(тип оружия), dmg
(урон), ats
(скорость атаки) и dps
(скорость нанесения урона) и выводит информацию о выбранном оружии.
Функция ench
принимает на вход wen
(зачарование) и использует его для изменения характеристик оружия.
В цикле while
происходит повторное отображение меню выбора оружия и зачарования до тех пор, пока пользователь не выберет один из вариантов.
После выбора оружия и зачарования, функция sword
обновляет значения dmg
, ats
и dps
и выводит их на экран. Затем вызывается функция ench
, которая также обновляет значения dmg
, ats
и dps
и выводит их на экран.
Наконец, программа просит пользователя ввести данные, и цикл while
продолжается до тех пор, пока пользователь не введет данные для завершения программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д