Арифметическое переполнение - 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.

Объяснение кода листинга программы

  1. В программе используется тип данных word, который представляет собой 16-битное целое число.
  2. Переменная n инициализируется значением 23.
  3. Создается массив j размером 1000, который будет использоваться для хранения результатов вычислений.
  4. Задается начальное значение для j[n], равное 2.
  5. Используется цикл for, который проходит по всем элементам массива k от $AFA до 9.
  6. Внутри цикла проверяется условие: если ((k[n] делить на 4 равно 3) или (k[n] остаток от деления на 100 равен 0))
  7. Если условие истинно, то выполняется вычисление: j[n] умножается на k[n], затем результат прибавляется к k[n] (дважды).
  8. Если условие ложно, то просто добавляется значение k[n] к j[n].
  9. После завершения цикла выводится значение j[n] с помощью функции writeln.
  10. Программа завершается.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

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

15   голосов , оценка 3.933 из 5
Похожие ответы