Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Общие вопросы разработки программ _ Ребят! Помогите пожалуйста!

Автор: denisz200 10.01.2017 11:52

Написан код


const
MAXSIZE = 100;
var
a: Array[0..MAXSIZE - 1, 0..MAXSIZE - 1] Of ShortInt;
i, j: 0..MAXSIZE - 1;
sum, n, m: Integer;
begin
Randomize;
repeat
Write('Введите количество строк (1..', MAXSIZE, '): ');
ReadLn(n);
until ((n > 0) And (n <= MAXSIZE));
repeat
Write('Введите количество столбцов (1..', MAXSIZE, '): ');
ReadLn(m);
until ((m > 0) And (m <= MAXSIZE));
WriteLn('Оригинальная матрица:');
sum := 0;
for i := 0 to n - 1 do
begin
for j := 0 to m - 1 do
begin
a[i, j] := Random(199) - 99;
Write(a[i, j]:4);
if (i in [0, n - 1])
then
Inc(sum, a[i, j]);
end;
WriteLn;
end;
WriteLn('Сложение первой и последней строки:', sum);
end.

Выдает ошибку *Арифметическое переполнение 215*
Что делать? Как быть? Сам паскаль указываеть что ошибка в рандоме
( a[i, j] := Random(199) - 99;
Write(a[i, j]:4);)

Автор: Федосеев Павел 10.01.2017 12:19

Это особенности приведения типов. Random(199) это беззнаковый Word, после вычитания 99 становится отрицательным - и это приводит к ошибке.
Поменяйте местами операторы

a[i, j] := -99 + Random(199);

Автор: denisz200 10.01.2017 12:31

Цитата(Федосеев Павел @ 10.01.2017 12:19) *

Это особенности приведения типов. Random(199) это беззнаковый Word, после вычитания 99 становится отрицательным - и это приводит к ошибке.
Поменяйте местами операторы
a[i, j] := -99 + Random(199);


Огромное спасибо