Встречено '.', а ожидалось ';' - PascalABC.NET (25440)
Формулировка задачи:
На 169 строке возникает ошибка "Встречено '.', а ожидалось ';'". Помогите, пожалуйста, решить ее.
Решение задачи: «Встречено '.', а ожидалось ';'»
textual
Листинг программы
Program Maximum_potok;
Uses Crt,GraphABC;
Label Home;
Const
M = 19;
R = 200;
Type
Met = Record
S: Char;
U: 0..M;
D: Integer;
End;
Metka = Array[1..M] Of Met;
Dmas = Array[1..M,1..M] Of Integer;
Mas = Array[1..M] Of Integer;
Var
Ch: Char;
P: Metka;
N,
I,J,
Nac,
Kon: Integer;
F,C: Dmas;
S,Q: Mas;
Procedure Dlina;
Begin
GotoXY(7,7);
Write('Введите число вершин графа: ');
Readln(N);
If N>M Then Halt;
Clrscr;
Begin
For I:=1 To N Do
For J:=1 To N Do
Begin
Write('Введите вес дуги [',I,',',J,']:= ');
Readln(C[I,J])
End
End;
Clrscr;
Writeln('Матрица пропускных способностей дуг');
Writeln;
Write(' ');
TextColor(Green);
For I:=1 To N Do
Write(' ',Chr(64+I),' ');
Writeln;
For I:=1 To N Do
Begin
TextColor(Green);
Write(' ',Chr(64+I),' ');
TextColor(White);
For J:=1 To N Do
Write(C[I,J]:3,' ');
Writeln
End;
Readln;
Clrscr;
Writeln;
Write('Введите номер вершины, являющейся истоком данной сети: ');
Readln(Nac);
Writeln;
Write('Введите номер вершины, являющейся стоком данной сети: ');
Readln(Kon);
Readln
End;
Procedure Potok;
Label M;
Var
A,X,D: Integer;
Begin
For I:=1 To N Do
For J:=1 To N Do
F[I,J] := 0;
M: For J:=1 To N Do
Begin
S[J] := 0;
Q[J] := 0;
P[J].S := '.';
P[J].U := 0;
P[J].D := 0;
End;
S[Nac] := 1;
P[Nac].S := '+';
P[Nac].U := Nac;
P[Nac].D := 100;
Repeat
A := 0;
For J:=1 To N Do
Begin
If (S[J]=1) And (Q[J]=0) Then
Begin
For I:=1 To N Do
If (C[J,I]>0) And (C[J,I]<100) Then
Begin
If (S[I]=0) And (F[J,I]<C[J,I]) Then
Begin
S[I] := 1;
P[I].S := '+';
P[I].U := J;
If P[J].D<C[J,I]-F[J,I] Then P[I].D := P[J].D
Else P[I].D := C[J,I]-F[J,I];
A := 1
End
End
Else
If (C[I,J]>0) And (C[I,J]<100) Then
Begin
If (S[I]=0) And (F[I,J]>0) Then
Begin
S[I] := 1;
P[I].S := '-';
P[I].U := J;
If P[J].D<F[I,J] Then P[I].D := P[J].D
Else P[I].D := F[I,J];
A := 1
End;
End;
Q[J] := 1
End
End;
If S[Kon]=1 Then
Begin
X := Kon;
D := P[Kon].D;
While X<>Nac Do
Begin
If P[X].S='+' Then F[P[X].U,X] := F[P[X].U,X]+D
Else
If P[X].S='-' Then F[X,P[X].U] := F[X,P[X].U]-D;
X := P[X].U
End;
Goto M;
End
Until A=0;
Readln;
Clrscr;
Writeln;
Writeln('Матрица максимального потока');
Writeln;
Write(' ');
TextColor(Green);
For I:=1 To N Do
Write(' ',Chr(64+I),' ');
Writeln;
For I:=1 To N Do
Begin
TextColor(Green);
Write(' ',Chr(64+I),' ');
TextColor(White);
For J:=1 To N Do
Write(F[I,J]:3,' ');
Writeln
End;
Readln;
Begin
Home:
ClrScr;
TextBackGround(Black);
TextColor(White);
Dlina;
Potok;
Clrscr;
GotoXY(12,14);
Writeln('Выйти из программы поиска максимального потока в графе');
GotoXY(15,16);
Writeln('Если "Да", то нажмите "Esc", иначе нажмите "Enter"');
Ch := Readkey;
If Ch=#27 Then Halt
Else Goto Home
End.
Объяснение кода листинга программы
В данном коде реализована задача поиска максимального потока в графе.
- В начале программы объявляются переменные и типы данных:
Met- тип записи, содержащий информацию о вершине графа (символ, количество вершин и пропускная способность дуги).Metka- массив экземпляров типаMet, представляющий вершины графа.Dmas- двумерный массив, содержащий матрицу пропускных способностей дуг графа.Mas- одномерный массив, используемый для хранения промежуточных значений при вычислении максимального потока.Ch- переменная для чтения символа из пользовательского ввода.P- указатель на вершину графа.N, I, J, Nac, Kon- целочисленные переменные для хранения номеров вершин и других параметров.C, F, S, Q- массивы для хранения промежуточных значений при вычислении максимального потока.
- Далее следуют процедуры
DlinaиPotok.Dlinaзапрашивает у пользователя ввод количества вершин графа и сохраняет это значение в переменнойN. Если количество вершин превышает максимально допустимое значение, программа выдает сообщение об ошибке и завершается.Potok- основная процедура, реализующая алгоритм поиска максимального потока в графе. Она использует алгоритм Форда-Фалкерсона. Процедура состоит из цикла, который продолжается до тех пор, пока в графе есть вершины, из которых можно сделать поток. В начале каждой итерации выбирается вершина, из которой можно сделать максимальный поток, и этот поток добавляется к общему потоку. Затем ищется следующая вершина, из которой можно сделать поток, и так далее.
- В основной части программы после вывода сообщения о вводе данных пользователю вызываются процедуры
DlinaиPotok. После завершения работы программы выводится сообщение с предложением нажатьEscдля выхода из программы.