Не сохраняется значение переменной - 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
продолжается до тех пор, пока пользователь не введет данные для завершения программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д