Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 25.03.2012, 17:37   #1 (permalink)
Serjant0007
Member
 
Регистрация: 21.06.2010
Сообщений: 31
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Арифметическое переполнение

Как исправить эту ошибку: арифметическое переполнение
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.
Serjant0007 вне форума   Ответить с цитированием

Старый 25.03.2012, 17:37
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Наверняка вы сможете найти решение своей проблемы в похожих обсуждениях

Резкое переполнение памяти
Переполнение системного диска
Переполнение памяти на Eee PC 901

Старый 25.03.2012, 18:20   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Serjant0007 Посмотреть сообщение
Как исправить эту ошибку: арифметическое переполнение
Попробуйте заменить строку
Matr[i, j]:=Random(20)-10;
строкой
Matr[i, j]:=10-Random(20);
Дело в том, что некоторые реализации Паскаля "понимают" эту строку так, что выполнение операции Random(20) "навязывает" всему выражению, стоящему справа, целый беззнаковый тип (Word, Byte) и, соответственно, получая при генерации числа, меньшего 10, отрицательное значение, выбрасывают сообщение об ошибке. Перестановка слагаемых позволяет избежать этого глюка.
Vladimir_S вне форума   Ответить с цитированием
Старый 25.03.2012, 18:44   #3 (permalink)
Serjant0007
Member
 
Регистрация: 21.06.2010
Сообщений: 31
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Попробуйте заменить строку
Matr[i, j]:=Random(20)-10;
строкой
Matr[i, j]:=10-Random(20);
Дело в том, что некоторые реализации Паскаля "понимают" эту строку так, что выполнение операции Random(20) "навязывает" всему выражению, стоящему справа, целый беззнаковый тип (Word, Byte) и, соответственно, получая при генерации числа, меньшего 10, отрицательное значение, выбрасывают сообщение об ошибке. Перестановка слагаемых позволяет избежать этого глюка.
неа все тоже самое))) ну ладно фиг с ним главное что решено верно)))
Serjant0007 вне форума   Ответить с цитированием
Старый 25.03.2012, 19:59   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Serjant0007 Посмотреть сообщение
главное что решено верно)))
Ну да, верно - это я подтверждаю: запускал на своем Free Pascal, всё работает, и никаких ошибок. Так что уж и не знаю.
А у Вас не АВС, часом? Если так, то формат матрицы нужно поменять с Longint на Integer.
Vladimir_S вне форума   Ответить с цитированием
Старый 25.03.2012, 21:39   #5 (permalink)
Serjant0007
Member
 
Регистрация: 21.06.2010
Сообщений: 31
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

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

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 25.03.2012, 21:48   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

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

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 12:47.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.