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