Выдает ошибку :Переменная цикла for должна описываться в том же блоке, что и цикл for - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. program Ford_Bellman;
  2. uses crt;
  3. const
  4. inf=100000;
  5. Vmax=1000;
  6. Emax=Vmax*(Vmax-1) div 2;
  7. type Edges=record
  8. u, v, w: integer;
  9. end;
  10. Var
  11. i, j, e, n, w, start: integer;
  12. edge: array[1..Emax] of Edges;
  13. d: array[1..Vmax] of integer;
  14. {алгоритм Беллмана-Форда}
  15. procedure FB(n, s: integer);
  16. begin
  17. for i:=1 to n do d[i]:=inf;//ошибка здесь!!!
  18. d[s]:=0;
  19. for i:=1 to n-1 do
  20. for j:=1 to e-1 do
  21. if d[edge[j].v]+edge[j].w<d[edge[j].u] then
  22. d[edge[j].u]:=d[edge[j].v]+edge[j].w;
  23. for i:=1 to n do if d[i]=inf then
  24. writeln(start, '->', i, '=', 'Not')
  25. else writeln(start, '->', i, '=', d[i]);
  26. end;
  27. {основной блок программы}
  28. begin
  29. clrscr;
  30. write('Количество вершин > '); read(n);
  31. e:=1;
  32. for i:=1 to n do
  33. for j:=1 to n do
  34. begin
  35. write('Вес ', i, '->', j, ' > '); read(w);
  36. if w<>0 then
  37. begin
  38. edge[e].v:=i;
  39. edge[e].u:=j;
  40. edge[e].w:=w;
  41. e:=e+1;
  42. end;
  43. end;
  44. write('Стартовая вершина > '); read(start);
  45. writeln('Список кратчайших путей:');
  46. FB(n, start);
  47. end.

Решение задачи: «Выдает ошибку :Переменная цикла for должна описываться в том же блоке, что и цикл for»

textual
Листинг программы
  1. program Ford_Bellman;
  2. uses crt;
  3. const
  4. inf=100000;
  5. Vmax=1000;
  6. Emax=Vmax*(Vmax-1) div 2;
  7. type Edges=record
  8. u, v, w: integer;
  9. end;
  10. Var
  11. e, n, w, start: integer;
  12. edge: array[1..Emax] of Edges;
  13. d: array[1..Vmax] of integer;
  14. {алгоритм Беллмана-Форда}
  15. procedure FB(n, s: integer);
  16. var i,j:integer;
  17. begin
  18. for i:=1 to n do
  19. d[i]:=inf;
  20. d[s]:=0;
  21.  
  22. for i:=1 to n-1 do
  23. for j:=1 to e-1 do
  24. if d[edge[j].v]+edge[j].w<d[edge[j].u] then
  25. d[edge[j].u]:=d[edge[j].v]+edge[j].w;
  26.  
  27. for i:=1 to n do if d[i]=inf then
  28. writeln(start, '->', i, '=', 'Not')
  29. else writeln(start, '->', i, '=', d[i]);
  30. end;
  31. {основной блок программы}
  32. var i,j:integer;
  33. begin
  34. clrscr;
  35. write('Количество вершин > '); read(n);
  36. e:=1;
  37.  
  38. for i:=1 to n do
  39. for j:=1 to n do
  40. begin
  41. write('Вес ', i, '->', j, ' > '); read(w);
  42. if w<>0 then
  43. begin
  44. edge[e].v:=i;
  45. edge[e].u:=j;
  46. edge[e].w:=w;
  47. e:=e+1;
  48. end;
  49. end;
  50.  
  51. write('Стартовая вершина > '); read(start);
  52. writeln('Список кратчайших путей:');
  53. FB(n, start);
  54. end.

Объяснение кода листинга программы

  1. Программа Ford_Bellman.
  2. Используется для решения задачи о кратчайшем пути во взвешенном графе.
  3. Задается количество вершин графа (n), стартовая вершина (start) и веса ребер (w) между вершинами.
  4. В основной блок программы записывается количество вершин (n), затем в цикле с помощью функции read() с клавиатуры читаются веса ребер (w) между вершинами.
  5. В цикле формируется массив edge[] из ребер графа.
  6. Затем вызывается процедура FB(n, start), которая находит кратчайшие пути от стартовой вершины до всех остальных вершин графа.
  7. В процедуре FB(n, start) в цикле считаются расстояния от стартовой вершины до всех остальных вершин графа с помощью алгоритма Беллмана-Форда.
  8. Если расстояние до какой-либо вершины равно бесконечности (inf), то это означает, что до этой вершины нет пути из стартовой вершины.
  9. В конце процедуры FB(n, start) выводятся на экран все найденные кратчайшие пути.
  10. В конце программы выводится на экран список кратчайших путей.

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


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

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

12   голосов , оценка 4.083 из 5

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

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

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