Арифметическое переполнение - Pascal
Формулировка задачи:
У меня проблема: все программы выдают арифметическое переполнение. В универе дали методичку перевести паскаль в асм, но проблема в том что те примеры на паскале - дают арифметическое переполнение. сборка: school pak. вот один из примеров.
в чем ошибка!???
program primer;
uses crt;
var n:word; i,k: array [1..1000] of word;
BEGIN
n:=34;
i[n]:=587;
k[n]:=19;
while i[n] > 199 do
if ((i[n] + k[n]) div 11) = 5
then i[n]:=i[n] - k[n]
else k[n]:=k[n]*k[n]+(i[n] div 2);
writeln('i[n]=',i[n], 'k[n]=',k[n]);
end.Решение задачи: «Арифметическое переполнение»
textual
Листинг программы
program variant2;
uses crt;
var i:integer; n:word; j,k: array [1..1000] of word;
BEGIN
n:=23;
j[n]:=2;
for i:=$AFA downto 9 do
if((k[n] div 4)=3) or (k[n] mod 100=0)
then j[n]:=j[n] * k[n] + k[n] * k[n]
else j[n]:=j[n]+k[n];
writeln('j[n]=',j[n]);
end.
Объяснение кода листинга программы
- В программе используется тип данных
word, который представляет собой 16-битное целое число. - Переменная
nинициализируется значением 23. - Создается массив
jразмером 1000, который будет использоваться для хранения результатов вычислений. - Задается начальное значение для
j[n], равное 2. - Используется цикл
for, который проходит по всем элементам массиваkот $AFA до 9. - Внутри цикла проверяется условие: если ((k[n] делить на 4 равно 3) или (k[n] остаток от деления на 100 равен 0))
- Если условие истинно, то выполняется вычисление: j[n] умножается на k[n], затем результат прибавляется к k[n] (дважды).
- Если условие ложно, то просто добавляется значение k[n] к j[n].
- После завершения цикла выводится значение j[n] с помощью функции
writeln. - Программа завершается.