Ошибка 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
Листинг программы
  1. program tsvp_lab3;
  2. uses crt;
  3. const max=20;
  4. inf=50000;
  5. var n:byte;
  6. C:array[0..max,0..max]of word;
  7. Procedure GetData;
  8. var i,j:byte;
  9. f:text;
  10. begin
  11. assign(f,'matr.txt');
  12. reset(f);
  13. n:=0;
  14. while not eof(f) do
  15. begin
  16. read(f,i);
  17. inc(n);
  18. end;
  19. n:=round(sqrt(n));
  20. dec(n);
  21. close(f);
  22. reset(f);
  23. for i:=0 to n do
  24. for j:=0 to n do
  25. begin
  26. read(f,C[i,j]);
  27. if (C[i,j]=0)and(i<>j) then C[i,j]:=inf;
  28. end;
  29. close(f);
  30. end;
  31. var i,j,
  32. act,
  33. pr,
  34. v:byte;
  35. D:array[0..1,0..max]of word;
  36. stab:boolean;
  37. begin
  38. GetData;
  39. repeat
  40. clrscr;
  41. write('Vvedite nomer vershiny ot 0 do ',n,': ');
  42. read(v);
  43. until (v>=0)and(v<=n);
  44. act:=0;
  45. pr:=1;
  46. for i:=0 to n do
  47. if i=v then D[act,i]:=0
  48. else D[act,i]:=inf;
  49. while not stab do
  50. begin
  51. act:=1-act;
  52. pr:=1-pr;
  53. stab:=true;
  54. for i:=0 to n do
  55. begin
  56. D[act,i]:=inf;
  57. for j:=0 to n do
  58. if D[act,i]>D[pr,j]+C[j,i] then D[act,i]:=D[pr,j]+C[j,i];
  59. if D[act,i]<>D[pr,i] then stab:=false;
  60. end;
  61. end;
  62. clrscr;
  63. writeln('Krotchaishee rasstoyanie ot vershyny ',v,' do vershyny:');
  64. for i:=0 to n do
  65. if i<>v then writeln(i,' - ',D[act,i]);
  66. write('Dlya vyhoda nazhmite lubuyu klavishu');
  67. readkey;
  68. end.

Решение задачи: «Ошибка 215. Арифметическое переполнение»

textual
Листинг программы
  1. const inf=50000;
  2. var
  3.   C: array ... of word;
  4.   D: array ... of word;
  5. ...
  6.   ... C[i,j]:=inf;
  7.   ... D[act,i]:=inf;
  8.  
  9.   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.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

10   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы