
Вопрос задан 12.07.2023 в 21:13.
Предмет Информатика.
Спрашивает Кушнир Катя.
Помогите с программой в 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;

Ответы на вопрос

Отвечает Балакирева Алина.
Ответ:
Переменная e объявлена как real, после чего Вы используете над ней операцию mod вот здесь:
if e mod 1=0 then e:=e
Что недопустимо, поскольку mod используется только с целыми числами. Заменив эту строку на следующую, ошибка исчезнет:
if trunc(e) mod 1=0 then e:=e



Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
В Pascal ABC, чтобы избежать преобразования типов real в integer, можно воспользоваться функцией Round. Она позволяет округлить вещественное число до ближайшего целого. Вот исправленный вариант программы:
pascalVar 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 else if (a >= 16) and (a < 31) then c := 1.5 * a * a - 29.5 * a + 360 else if a >= 31 then c := 3.5 * a * a - 151.5 * a + 2220; if b < 16 then d := 17 * b - c else if (b >= 16) and (b < 31) then d := 1.5 * b * b - 29.5 * b + 360 - c else if b >= 31 then d := 3.5 * b * b - 151.5 * b + 2220 - c; end else Writeln('Желаемый уровень должен быть больше вашего'); e := d / n / 5; e := Round(e); // Округляем e до ближайшего целого f := d / n / 10; f := Round(f); // Округляем f до ближайшего целого Writeln('Вам потребуется ', d:0:0, ' опыта, для чего потребуется убить ', e, ' скелетов/зомби/криперов или ', f, ' ифритов'); End.
Теперь программа должна правильно выполняться без ошибок. Обратите внимание, что я добавил форматирование вывода для переменной d, чтобы она выводилась без дробной части.


Похожие вопросы
Топ вопросов за вчера в категории Информатика

Информатика 573

Информатика 1114

Информатика 10

Информатика 32

Информатика 16

Информатика 578

Информатика 21
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili