Встречено '.', а ожидалось ';' - 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.

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

В данном коде реализована задача поиска максимального потока в графе.

  1. В начале программы объявляются переменные и типы данных:
    • Met - тип записи, содержащий информацию о вершине графа (символ, количество вершин и пропускная способность дуги).
    • Metka - массив экземпляров типа Met, представляющий вершины графа.
    • Dmas - двумерный массив, содержащий матрицу пропускных способностей дуг графа.
    • Mas - одномерный массив, используемый для хранения промежуточных значений при вычислении максимального потока.
    • Ch - переменная для чтения символа из пользовательского ввода.
    • P - указатель на вершину графа.
    • N, I, J, Nac, Kon - целочисленные переменные для хранения номеров вершин и других параметров.
    • C, F, S, Q - массивы для хранения промежуточных значений при вычислении максимального потока.
  2. Далее следуют процедуры Dlina и Potok.
    • Dlina запрашивает у пользователя ввод количества вершин графа и сохраняет это значение в переменной N. Если количество вершин превышает максимально допустимое значение, программа выдает сообщение об ошибке и завершается.
    • Potok - основная процедура, реализующая алгоритм поиска максимального потока в графе. Она использует алгоритм Форда-Фалкерсона. Процедура состоит из цикла, который продолжается до тех пор, пока в графе есть вершины, из которых можно сделать поток. В начале каждой итерации выбирается вершина, из которой можно сделать максимальный поток, и этот поток добавляется к общему потоку. Затем ищется следующая вершина, из которой можно сделать поток, и так далее.
  3. В основной части программы после вывода сообщения о вводе данных пользователю вызываются процедуры Dlina и Potok. После завершения работы программы выводится сообщение с предложением нажать Esc для выхода из программы.

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


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

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

9   голосов , оценка 3.667 из 5
Похожие ответы