Выдает ошибку :Переменная цикла for должна описываться в том же блоке, что и цикл for - PascalABC.NET
Формулировка задачи:
Листинг программы
- program Ford_Bellman;
- uses crt;
- const
- inf=100000;
- Vmax=1000;
- Emax=Vmax*(Vmax-1) div 2;
- type Edges=record
- u, v, w: integer;
- end;
- Var
- i, j, e, n, w, start: integer;
- edge: array[1..Emax] of Edges;
- d: array[1..Vmax] of integer;
- {алгоритм Беллмана-Форда}
- procedure FB(n, s: integer);
- begin
- for i:=1 to n do d[i]:=inf;//ошибка здесь!!!
- d[s]:=0;
- for i:=1 to n-1 do
- for j:=1 to e-1 do
- if d[edge[j].v]+edge[j].w<d[edge[j].u] then
- d[edge[j].u]:=d[edge[j].v]+edge[j].w;
- for i:=1 to n do if d[i]=inf then
- writeln(start, '->', i, '=', 'Not')
- else writeln(start, '->', i, '=', d[i]);
- end;
- {основной блок программы}
- begin
- clrscr;
- write('Количество вершин > '); read(n);
- e:=1;
- for i:=1 to n do
- for j:=1 to n do
- begin
- write('Вес ', i, '->', j, ' > '); read(w);
- if w<>0 then
- begin
- edge[e].v:=i;
- edge[e].u:=j;
- edge[e].w:=w;
- e:=e+1;
- end;
- end;
- write('Стартовая вершина > '); read(start);
- writeln('Список кратчайших путей:');
- FB(n, start);
- end.
Решение задачи: «Выдает ошибку :Переменная цикла for должна описываться в том же блоке, что и цикл for»
textual
Листинг программы
- program Ford_Bellman;
- uses crt;
- const
- inf=100000;
- Vmax=1000;
- Emax=Vmax*(Vmax-1) div 2;
- type Edges=record
- u, v, w: integer;
- end;
- Var
- e, n, w, start: integer;
- edge: array[1..Emax] of Edges;
- d: array[1..Vmax] of integer;
- {алгоритм Беллмана-Форда}
- procedure FB(n, s: integer);
- var i,j:integer;
- begin
- for i:=1 to n do
- d[i]:=inf;
- d[s]:=0;
- for i:=1 to n-1 do
- for j:=1 to e-1 do
- if d[edge[j].v]+edge[j].w<d[edge[j].u] then
- d[edge[j].u]:=d[edge[j].v]+edge[j].w;
- for i:=1 to n do if d[i]=inf then
- writeln(start, '->', i, '=', 'Not')
- else writeln(start, '->', i, '=', d[i]);
- end;
- {основной блок программы}
- var i,j:integer;
- begin
- clrscr;
- write('Количество вершин > '); read(n);
- e:=1;
- for i:=1 to n do
- for j:=1 to n do
- begin
- write('Вес ', i, '->', j, ' > '); read(w);
- if w<>0 then
- begin
- edge[e].v:=i;
- edge[e].u:=j;
- edge[e].w:=w;
- e:=e+1;
- end;
- end;
- write('Стартовая вершина > '); read(start);
- writeln('Список кратчайших путей:');
- FB(n, start);
- end.
Объяснение кода листинга программы
- Программа Ford_Bellman.
- Используется для решения задачи о кратчайшем пути во взвешенном графе.
- Задается количество вершин графа (n), стартовая вершина (start) и веса ребер (w) между вершинами.
- В основной блок программы записывается количество вершин (n), затем в цикле с помощью функции read() с клавиатуры читаются веса ребер (w) между вершинами.
- В цикле формируется массив edge[] из ребер графа.
- Затем вызывается процедура FB(n, start), которая находит кратчайшие пути от стартовой вершины до всех остальных вершин графа.
- В процедуре FB(n, start) в цикле считаются расстояния от стартовой вершины до всех остальных вершин графа с помощью алгоритма Беллмана-Форда.
- Если расстояние до какой-либо вершины равно бесконечности (inf), то это означает, что до этой вершины нет пути из стартовой вершины.
- В конце процедуры FB(n, start) выводятся на экран все найденные кратчайшие пути.
- В конце программы выводится на экран список кратчайших путей.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д