• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Арифметическое переполнение

Serjant0007

Новые
Регистрация
21 Июн 2010
Сообщения
31
Реакции
0
Баллы
0
Арифметическое переполнение

Как исправить эту ошибку: арифметическое переполнение
program zadacha;
Uses crt;
const
n = 4;
var
Matr: Array[1..n, 1..n] of longint;
Count: Integer;
i, j: Byte;
begin
Randomize;
writeln('Матрица*: ');
for i:=1 to n do
begin
for j:=1 to n do
begin
Matr[i, j]:=Random(20)-10;
write(Matr[i, j]:4);
if Matr[i, j] < 0 then
inc(Count);
end;
writeln;
end;
writeln('Замена отрицательных нулями: ');
for i:=1 to n do
begin
for j:=1 to n do
begin
if Matr[i, j] < 0 then
Matr[i, j]:=0;
write(Matr[i, j]:4);
end;
writeln;
end;
writeln('Кол-во: ', Count);
end.
 
Как исправить эту ошибку: арифметическое переполнение
Попробуйте заменить строку
Matr[i, j]:=Random(20)-10;
строкой
Matr[i, j]:=10-Random(20);
Дело в том, что некоторые реализации Паскаля "понимают" эту строку так, что выполнение операции Random(20) "навязывает" всему выражению, стоящему справа, целый беззнаковый тип (Word, Byte) и, соответственно, получая при генерации числа, меньшего 10, отрицательное значение, выбрасывают сообщение об ошибке. Перестановка слагаемых позволяет избежать этого глюка.
 
Попробуйте заменить строку
Matr[i, j]:=Random(20)-10;
строкой
Matr[i, j]:=10-Random(20);
Дело в том, что некоторые реализации Паскаля "понимают" эту строку так, что выполнение операции Random(20) "навязывает" всему выражению, стоящему справа, целый беззнаковый тип (Word, Byte) и, соответственно, получая при генерации числа, меньшего 10, отрицательное значение, выбрасывают сообщение об ошибке. Перестановка слагаемых позволяет избежать этого глюка.

неа все тоже самое))) ну ладно фиг с ним главное что решено верно)))
 
главное что решено верно)))
Ну да, верно - это я подтверждаю: запускал на своем Free Pascal, всё работает, и никаких ошибок. Так что уж и не знаю.
А у Вас не АВС, часом? Если так, то формат матрицы нужно поменять с Longint на Integer.
 
Ну да, верно - это я подтверждаю: запускал на своем Free Pascal, всё работает, и никаких ошибок. Так что уж и не знаю.
А у Вас не АВС, часом? Если так, то формат матрицы нужно поменять с Longint на Integer.

Scool Pak у меня
 
Это в смысле School Pack? Понятно. Продолжается, значит, изготовление всяких поделок полуграмотными умельцами. Естественно, "для нужд образования Российского". Мало нам пропихивания во все дырки глючного изделия N2 по имени АВС, так еще и это. Зла не хватает, честное слово. Не на Вас, естественно.
 
Назад
Сверху