Ошибка 215. Арифметическое переполнение - Turbo Pascal (28976)
Формулировка задачи:
Подскажите в чем ошибка?
Матрица в файле txt
0 10 17 8 0 12 19
10 0 1 0 7 0 21
17 1 0 0 3 11 0
8 0 0 0 16 3 5
0 7 3 16 0 4 0
12 0 11 3 4 0 10
19 21 0 5 0 10 0
Листинг программы
- program tsvp_lab3;
- uses crt;
- const max=20;
- inf=50000;
- var n:byte;
- C:array[0..max,0..max]of word;
- Procedure GetData;
- var i,j:byte;
- f:text;
- begin
- assign(f,'matr.txt');
- reset(f);
- n:=0;
- while not eof(f) do
- begin
- read(f,i);
- inc(n);
- end;
- n:=round(sqrt(n));
- dec(n);
- close(f);
- reset(f);
- for i:=0 to n do
- for j:=0 to n do
- begin
- read(f,C[i,j]);
- if (C[i,j]=0)and(i<>j) then C[i,j]:=inf;
- end;
- close(f);
- end;
- var i,j,
- act,
- pr,
- v:byte;
- D:array[0..1,0..max]of word;
- stab:boolean;
- begin
- GetData;
- repeat
- clrscr;
- write('Vvedite nomer vershiny ot 0 do ',n,': ');
- read(v);
- until (v>=0)and(v<=n);
- act:=0;
- pr:=1;
- for i:=0 to n do
- if i=v then D[act,i]:=0
- else D[act,i]:=inf;
- while not stab do
- begin
- act:=1-act;
- pr:=1-pr;
- stab:=true;
- for i:=0 to n do
- begin
- D[act,i]:=inf;
- for j:=0 to n do
- if D[act,i]>D[pr,j]+C[j,i] then D[act,i]:=D[pr,j]+C[j,i];
- if D[act,i]<>D[pr,i] then stab:=false;
- end;
- end;
- clrscr;
- writeln('Krotchaishee rasstoyanie ot vershyny ',v,' do vershyny:');
- for i:=0 to n do
- if i<>v then writeln(i,' - ',D[act,i]);
- write('Dlya vyhoda nazhmite lubuyu klavishu');
- readkey;
- end.
Решение задачи: «Ошибка 215. Арифметическое переполнение»
textual
Листинг программы
- const inf=50000;
- var
- C: array ... of word;
- D: array ... of word;
- ...
- ... C[i,j]:=inf;
- ... D[act,i]:=inf;
- if D[act,i]>D[pr,j]+C[j,i] then D[act,i]:=D[pr,j]+C[j,i];
Объяснение кода листинга программы
В данном коде используется массив слов C
и массив слов D
. Переменная inf
имеет значение 50000.
В строке C[i,j]:=inf;
мы инициализируем каждый элемент массива C
значением inf
.
В строке D[act,i]:=inf;
мы инициализируем каждый элемент массива D
значением inf
.
В строке if D[act,i]>D[pr,j]+C[j,i] then D[act,i]:=D[pr,j]+C[j,i];
происходит проверка условия. Если значение D[act,i]
больше суммы D[pr,j]
и C[j,i]
, то значение D[act,i]
заменяется на сумму D[pr,j]
и C[j,i]
.
Таким образом, данный код выполняет проверку и обновление значения в массиве D
на основе значений массивов C
и D
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д