Chistov9721209
?>

с программой в 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;

Информатика

Ответы

serg1976g

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

if e mod 1=0 then e:=e

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

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

baumanec199613

1. 32

a = 26

b = 6

b = a / b + b = 26 / 6 + 6 = (4*6+2) / 6 + 6 = 4 + 6 = 10

c = a % b + a = 26 % 10 + 26 = (2 * 10 + 6) % 10 + 26 = 6 + 26 = 32

2. 9

a = 24

b = 5

c = a % b + b = 24 % 5 + 5 = (4 * 5 + 4) % 5 + 5 = 4 + 5 = 9

3. 32

a = 28

b = 7

c = a / b + a = 28 / 7 + 28 = 4 + 28 = 32

4. 6

a = 24

b = 5

b = a / b = 24 / 5 = (4 * 5 + 4) / 5 = 4

c = a / b = 24 / 4 = 6

5. 5

a = 22

b = 4

b = a % b + 4 = 22 % 4 + 4 = (5 * 4 + 2) % 4 + 4 = 2 + 4 = 6

C = a % b + 1 = 22 % 6 + 1 = (3 * 6 + 4 ) + 1 = 4 + 1 = 5

6. 3

a = 28

b = 7

b = a / b = 28 / 7 = 4

c = a % (b + 1) = 28 % (4 + 1)  = 28 % 5 = (5*5 + 3) % 5 = 3

7. 7

a = 26

b = 6

b = a % b = 26 % 6 = (4 * 6 + 2) % 6 = 2

c = a / (b + 1) = 26 / (2 + 1) = 26 / 3 = (7*3 + 5) / 3 = 7

kronid12

1. При вводе числа 15 программа выведет число 4.

2. Наименьшие значения A, при которых программа выведет верный ответ, равны 2 и 3.

3. В программе допущена типичная для начинающих программистов ошибка «смещения кадра»: значение переменной K, необходимое при первом выполнении цикла, присваивается до начала цикла, а значение для следующего оборота цикла вычисляется в конце предыдущего оборота. В результате, при завершении цикла K имеет значение больше, чем нужно. Вторая ошибка – неверный шаг изменения K. «Идеальная» программа решения этой задачи должна выглядеть так (приведён пример на языке Бейсик):

DIM A,S,K AS INTEGER

INPUT A

S = 0

K = −1

WHILE S <= A

K = K + 2

S = S + K*(K+1)

WEND

PRINT K

END

Но по условиям задания менять местами строки нельзя, их можно только исправлять. Поэтому, кроме исправления шага, приходится корректировать значение K при выводе. Пример исправления для языка Паскаль:

Первая ошибка:

k := k+1;

Исправленная строка:

k := k+2

Вторая ошибка:

writeln(k)

Исправленная строка:

writeln(k-2)

В программах на других языках ошибочные строки и их исправления аналогичны.

Незначительной опиской, не влияющей на оценку, следует считать отсутствие знаков и служебных слов после содержательной части исправления.

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

с программой в 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;
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

dmtr77
alexandrxzx09
nastyakrokhina87
maxkuskov2485
tkmandarin8376
k-serga1
gusinica23
ekaterinkat
stsnab
laplena1982750
Alisa1639
OlgaVasilevna
YaroslavSerganYS5
milleniumwood633
xeniagolovitinskaya4546