Изучение принципов алгоритмического программирования на языке Pascal



         

Приложение 2. Пример текста программы на языке Pascal


В этом приложении приведён пример программы на языке Pascal, охватывающий основные возможности языка, описанные в настоящих методических указаниях. Программой реализуется игра «сапёр». В тексте программы размещены поясняющие комментарии.

Program Mines;

Uses CRT; {подключение библиотеки расширенного ввода-вывода}

Const

  NR=10; NC=20; {размер поля NR строк и NC столбцов}

  NM=10; {количество мин}

Type

  TMineMark=(mmClosed, mmOpened, mmMarked, mmSuspicious);

  TMineNumber=0..8; {количество мин}

 

  TFieldCell = Record

    Mine : Boolean; {наличие мины}

    Mark : TMineMark; {отметка}

    Around : TMineNumber; {количество мин вокруг ячейки}

  End;

 

  TMineField=Array[1..NR,1..NC] of TFieldCell;

Var

  Field:TMineField;

  X,Y,R:Integer;

  pc,sc:Char;

 

Procedure InitField(var F:TMineField); {очистка игрового поля}

Var i,j:Integer;

Begin

  For i:=1 to NR Do For j:=1 to NC Do Begin

    F[i,j].Mine:=False; F[i,j].Mark:=mmClosed;

    F[i,j].Around:=0;

  End;

End;

 

Procedure FillMines(var F:TMineField); {расстановка мин}

Var i,j,k,m:Integer;

Begin

  For k:=1 to NM do Begin

    m:=Random(NR*NC-k+1)+1; {оставшееся количество ячеек}

    For i:=1 to NR Do For j:=1 to NC Do

        If Not F[i,j].Mine Then Begin

          m:=m-1;

          If m=0 Then F[i,j].Mine:=True;

        End;

  End;

End;

 

Procedure CountAround(var F:TMineField);

{считать количество мин вокруг ячеек}

Var i,j,ii,jj:Integer;

Begin

  For i:=1 to NR Do For j:=1 to NC Do

    If not F[i,j].Mine Then

      For ii:=-1 to 1 Do For jj:=-1 to 1 Do

        {обойти соседние ячейки}

        If (i+ii>=1) And (i+ii<=NR) And

          (j+jj>=1) And (j+jj<=NC) Then

          {если ячейка пределах поля}

          If F[i+ii,j+jj].Mine Then

            F[i,j].Around:=F[i,j].Around+1;

End;

 

Procedure OpenField(var F:TMineField; R,C:Integer); {открыть}

Var i,j,ii,jj:Integer; Comp:Boolean;

Begin

  If F[R,C].Mark=mmClosed Then F[R,C].Mark:=mmOpened;




Содержание  Назад  Вперед