• Предмет: Информатика
  • Автор: zzzzzz4zzzzzz4
  • Вопрос задан 11 месяцев назад

Помогите с программой в Pascal ABC, нельзя преобразовать real в integer.

Программа:
Var
a,b,c,d,e,f:real;
n:integer;
Begin
a:=0; b:=0; c:=0; d:=0; e:=0; f:=0; n:=0;
Write('Введите ваш уровень - ');
Readln(a);
Write('Введите желаемый уровень - ');
Readln(b);
Write('Введите уровень спавнера - ');
Readln(n);
If b>a then begin;
if a<16 then c:=17*a;
if (a>15)and(a<31) then c:=1.5*a*a-29.5*a+360;
if a>30 then c:=3.5*a*a-151.5*a+2220;
if b<16 then d:=17*b-c;
if (b>15)and(b<31) then d:=1.5*b*b-29.5*b+360-c;
if b>30 then d:=3.5*b*b-151.5*b+2220-c;
end
else Writeln('Желаемый уровень должен быть больше вашего');
e:=d/n/5; e:=int(e);
if e mod 1=0 then e:=e
else e:=trunc(e)+1;
f:=d/n/10;f:=int(f);
if f mod 1=0 then f:=f
else f:=trunc(f)+1;
Writeln('Вам потребуется ',d,' опыта, для чего потребуется убить ',e,' скелетов/зомби/криперов или ',f,' ифритов');
end.

Ошибка здесь
e:=d/n/5; e:=int(e);
if e mod 1=0 then e:=e
else e:=trunc(e)+1;
f:=d/n/10;f:=int(f);
if f mod 1=0 then f:=f
else f:=trunc(f)+1;

Ответы

Ответ дал: Helper211
0

Ответ:

Переменная e объявлена как real, после чего Вы используете над ней операцию mod вот здесь:

if e mod 1=0 then e:=e

Что недопустимо, поскольку mod используется только с целыми числами. Заменив эту строку на следующую, ошибка исчезнет:

if trunc(e) mod 1=0 then e:=e


Helper211: Так как смысла в некорректной строке не прослеживается. Что значит, например, остаток от деления 12,57 на единицу? Если Вы имели в виду дробную часть (то есть 0,57), то для такого есть специальная функция - frac. При вызове frac(12.57) она вернет 0,57
zzzzzz4zzzzzz4: должно быть так, если надо 51 опыта, то нужно 5опыта*3спавнера*4 скелета=60 опыта
3 спавнера (3 уровень)
zzzzzz4zzzzzz4: Что значит, например, остаток от деления 12,57 на единицу?

мне надо округлить вверх, например, 5,3 --> 6; 7,7 --> 8; 1 -->1
zzzzzz4zzzzzz4: это как в жизни
zzzzzz4zzzzzz4: надо покрасить стену площадь 17м2; 1 банки краски хватит на 16 м2
вывод -- купим 2 банки
Helper211: Округление вверх можно осуществить с помощью следующей конструкции:
if (frac(e)>0) then e:=Floor(e)+1
else e:=Floor(e);
zzzzzz4zzzzzz4: не верный ответ
zzzzzz4zzzzzz4: Вам потребуется 51 опыта, для чего потребуется убить 3 скелетов/зомби/криперов или 1 ифритов
zzzzzz4zzzzzz4: 4 скелета, 2 ифрита (на листке посчитал)
zzzzzz4zzzzzz4: вот так нада было

e:=d/n/5;
if e=round(e) then e:=e
else e:=trunc(e)+1;
Вас заинтересует