Не сохраняется значение переменной - 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.
Заранее спасибо.

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

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

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


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

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

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