Администраторы группы

  • Аватар

Олимпиада по информатике. Готовимся побеждать!

Открытая группа активность: 1 дн., 3 ч. назад

Группа для тех, кто намеревается побеждать на районных и региональных олимпиадах по информатике.
Здесь можно будет найти олимпиадные задания, задачи повышенной сложности, обсудить оптимальные алгоритмы решений
Памятка для участников олимпиады

Сайт Информатикс – регистрирууемся, решаем, продвигаемся в рейтинге

Морской бой на Pascal (записей: 34)

← Форум группы   Все форумы
  • Аватар LukasTrickster - 1 мес. назад:

    Уххх сложно но думаю я справлюсь :mrgreen:

    uses crt;
    
    const
    
        Q=-128;
        E=128;
        P=6;
        F=3;
        G=2;
    
    var 
    
        x,y,cikl,kol,i,j,i1,j1,a:shortint;
        Z,U:array [Q..E,Q..E] of shortint;  
    
    procedure ArrayFilling;
    
    var 
    
        i,j:byte;    
    
    begin
    
      for i:=1 to P do
        for j:=1 to P do
          begin
            Z[1,j]:=j;
            Z[i,1]:=i;
            Z[i,j]:=0;
    
            U[1,j]:=j;
            U[i,1]:=i;
            U[i,j]:=0;
          end;
    
    end;
    
    procedure ArrayWriteln1;
    
    var
    
        i,j:byte;
    
    begin
    
      for i:=1 to P do
        for j:=1 to P do
          begin
            GOTOXY(i*F,j*G);
            writeln(Z[i,j]);
          end;
    
    end;
    
    procedure ArrayWriteln2;
    
    var 
    
        i,j:byte;
    
    begin
    
      for i:=1 to P do
        for j:=1 to P do
          begin
            GOTOXY(i*F,j*G);
            writeln(U[i,j]);
          end;
    
    end;
    
    BEGIN
    
      Writeln('     Морской бой');
    
      ArrayFilling;
      ArrayWriteln1;
      kol:=0;
    
      repeat
    
        writeln('Расстановка флота');
        writeln('Корабли в 1 клетку');
        writeln('Игрок №1');
    
        repeat   
    
          read(y,x);   
    
          repeat
    
            if Z[y,x]<>0
              then
                begin
                  Clrscr;
                  Writeln('     Морской бой');
                  ArrayWriteln1;
                  writeln('Расстановка флота');
                  writeln('Корабли в 1 клетку');
                  writeln('Игрок №1');
                  writeln('Поле уже занято!');
                  read(y,x);
                end;
    
          until Z[y,x]=0;
    
          Z[y,x]:=1;
          clrscr;
          Writeln('     Морской бой');
          ArrayWriteln1;
          writeln('Расстановка флота');
          writeln('Корабли в 1 клетку');
          writeln('Игрок №1');
          kol:=kol+1;
    
        until kol=4;
    
      kol:=0;
    
      clrscr;
      Writeln('     Морской бой');
      ArrayWriteln1;
    
      writeln('Готово!');
      writeln('Продолжить - 1');
      writeln('Изменить расстановку кораблей - 2');
      writeln('Выход - 3');
      read(a);
      if a=1 then;
      if a=2
        then
          begin
            repeat
    
              clrscr;
    
              Writeln('     Морской бой');          
    
              ArrayFilling;
              ArrayWriteln1;
    
              writeln('Расстановка флота');
              writeln('Корабли в 1 клетку');
              writeln('Игрок №1');
    
              repeat   
    
                read(y,x);   
    
                repeat
    
                  if Z[y,x]<>0
                    then
                      begin
                        Clrscr;
                        Writeln('     Морской бой');
                        ArrayWriteln1;
                        writeln('Расстановка флота');
                        writeln('Корабли в 1 клетку');
                        writeln('Игрок №1');
                        writeln('Поле уже занято!');
                        read(y,x);
                      end;
    
                until Z[y,x]=0;
    
                Z[y,x]:=1;
                clrscr;
                Writeln('     Морской бой');
                ArrayWriteln1;
                writeln('Расстановка флота');
                writeln('Корабли в 1 клетку');
                writeln('Игрок №1');
                kol:=kol+1;
    
              until kol=4;
    
            kol:=0;
    
            clrscr;
            Writeln('     Морской бой');
            ArrayWriteln1;
    
            writeln('Готово!');
            writeln('Продолжить - 1');
            writeln('Изменить расстановку кораблей - 2');
            writeln('Выход - 3');
            read(a);
            until (a=1) or (a=3);
          end;
      if a=3 then exit;
      cikl:=0;
    
      until cikl=0;
    
       clrscr;  
    
      Writeln('     Морской бой');
    
      ArrayWriteln2;
      kol:=0;
    
      repeat
    
        writeln('Расстановка флота');
        writeln('Корабли в 1 клетку');
        writeln('Игрок №2');
    
        repeat   
    
          read(y,x);   
    
          repeat
    
            if U[y,x]<>0
              then
                begin
                  Clrscr;
                  Writeln('     Морской бой');
                  ArrayWriteln2;
                  writeln('Расстановка флота');
                  writeln('Корабли в 1 клетку');
                  writeln('Игрок №2');
                  writeln('Поле уже занято!');
                  read(y,x);
                end;
    
          until U[y,x]=0;
    
          U[y,x]:=1;
          clrscr;
          Writeln('     Морской бой');
          ArrayWriteln2;
          writeln('Расстановка флота');
          writeln('Корабли в 1 клетку');
          writeln('Игрок №2');
          kol:=kol+1;
    
        until kol=4;
    
      kol:=0;
    
      clrscr;
      Writeln('     Морской бой');
      ArrayWriteln2;
    
      writeln('Готово!');
      writeln('Продолжить - 1');
      writeln('Изменить расстановку кораблей - 2');
      writeln('Выход - 3');
      read(a);
      if a=1 then;
      if a=2
        then
          begin
            repeat
    
              clrscr;
    
              Writeln('     Морской бой');          
    
              ArrayFilling;
              ArrayWriteln2;
    
              writeln('Расстановка флота');
              writeln('Корабли в 1 клетку');
              writeln('Игрок №2');
    
              repeat   
    
                read(y,x);   
    
                repeat
    
                  if U[y,x]<>0
                    then
                      begin
                        Clrscr;
                        Writeln('     Морской бой');
                        ArrayWriteln2;
                        writeln('Расстановка флота');
                        writeln('Корабли в 1 клетку');
                        writeln('Игрок №2');
                        writeln('Поле уже занято!');
                        read(y,x);
                      end;
    
                until U[y,x]=0;
    
                U[y,x]:=1;
                clrscr;
                Writeln('     Морской бой');
                ArrayWriteln2;
                writeln('Расстановка флота');
                writeln('Корабли в 1 клетку');
                writeln('Игрок №2');
                kol:=kol+1;
    
              until kol=4;
    
            kol:=0;
    
            clrscr;
            Writeln('     Морской бой');
            ArrayWriteln2;
    
            writeln('Готово!');
            writeln('Продолжить - 1');
            writeln('Изменить расстановку кораблей - 2');
            writeln('Выход - 3');
            read(a);
            until (a=1) or (a=3);
          end;
      if a=3 then exit;
      cikl:=1;
    
      until cikl=1;
    
      clrscr;
      writeln('Поле первое');
      ArrayWriteln1;
      read(a);
    
      clrscr;
      writeln('Поле второе');
      ArrayWriteln2;
      read(a);
    
    END.
    
  • Аватар prepod - 1 мес. назад:

    Необходимо больше подпрограмм
    ЗЫ. Это сделано всего за 4 часа? Впечатляет

  • Аватар LukasTrickster - 1 мес. назад:

    Плохое начало лучше все переделаю замечание очень к месту кстати

  • Аватар LukasTrickster - 1 мес. назад:

    Завтра на инфе доделаю :roll:

      USES CRT;
    
      CONST
          Q=-128;
          E=128;
          P=10;
          O=3;
          L=2;
    
      VAR
          x,y,a:shortint;
          Z,U:Array [Q..E,Q..E] of shortint;
    
      Procedure ArrayFilling; 
    
      Var
          i,j:shortint;
    
      Begin
    
        For i:=0 to P do
          For j:=0 to P do
            begin
              Z[i,j]:=0;
              Z[i,1]:=i;
              Z[1,j]:=j;
    
              U[i,j]:=0;
              U[i,1]:=i;
              U[1,j]:=j;
            end;
    
      End;
    
      Procedure ArrayWriteI;
    
      Var
          i,j:shortint;
    
      Begin
    
      clrscr;
    
      Writeln('Морской бой');
    
        For i:=1 to P do
          For j:=1 to P do
            begin
              Gotoxy(i*O,j*L+1);
              Writeln(Z[i,j]);
            end;
    
      End;
    
      Procedure ArrayWriteII;
    
      Var
          i,j:shortint;
    
      Begin
    
      clrscr;
    
      Writeln('Морской бой');
    
        For i:=1 to P do
          For j:=1 to P do
            begin
              Gotoxy(i*O,j*L+1);
              Writeln(U[i,j]);
            end;
    
      End;
    
      Procedure KReadI;
    
      Var
          Kol:shortint;
    
      Begin
    
        Clrscr;
    
        Kol:=4;
    
        ArrayFilling;
    
          Repeat
    
            ArrayWriteI;
            Writeln('Игрок №1');
            Writeln('Расстановка кораблей');
            Writeln('Одноклеточные корабли ',Kol,' шт');
            Writeln('Введите координаты');
            Read(y,x);
    
            If Z[y,x]<>0 //Я хотел запихнуть это в попрограмму но с количеством тогда не получислось бы (((((
    
              then
    
                begin
    
                  Repeat
    
                    Clrscr;
                    ArrayWriteI;
                    Writeln('Игрок №1');
                    Writeln('Расстановка кораблей');
                    Writeln('Одноклеточные корабли ',Kol,' шт');
                    Writeln('Ячейка занята!');
                    Writeln('Введите координаты заново');
                    Read(y,x);
    
                  Until z[y,x]=0;
    
                end;
    
            If (y<1) or (y>10) or(x<1) or (x>10) // И это тоже((((
    
              then
    
                begin
    
                  Repeat
    
                    Clrscr;
                    ArrayWriteI;
                    Writeln('Игрок №1');
                    Writeln('Расстановка кораблей');
                    Writeln('Одноклеточные корабли ',Kol,' шт');
                    Writeln('Координаты введены не точно!');
                    Writeln('Введите координаты заново');
                    Read(y,x);
    
                  Until (y>1) and (y<11) and (x>1) and (y<11);
    
                end;
    
            Z[y,x]:=1;
            Clrscr;
            Kol:=Kol-1;
    
          Until Kol=0;
    
      End;
    
      Procedure KReadII;
    
      Var
          Kol:shortint;
    
      Begin
    
        Randomize;
    
        Clrscr;
    
        Kol:=4;
    
          Repeat
    
            y:=random(2,10);
            x:=random(2,10);
    
            If Z[y,x]<>0 //Да бывает и молния бьёт в одно и тоже место дважды )
    
              then
    
                begin
    
                  Repeat
    
                    Clrscr;
                    y:=random(2,10);
                    x:=random(2,10);
    
                  Until z[y,x]=0;
    
                end;            
    
            U[y,x]:=1;
            Clrscr;
            Kol:=Kol-1;
            ArrayWriteII;
    
          Until Kol=0;
    
      End;
    
      Procedure AttackI;
    
      Begin
    
        Clrscr;
        ArrayWriteI;
        Writeln('Машины наступают!!! Атакуем!!! ');
        Writeln('Введите координаты места падения снаряда');
        Read(x,y);
    
        U[x,y]:=2;    
    
      End;
    
        Procedure AttackII;
    
      Begin
    
        randomize;
    
        Clrscr;
        x:=random(2,10);
        y:=random(2,10);
    
        Z[x,y]:=2;    
    
      End;
    
      Procedure PickI;
    
      Begin
    
        Clrscr;
        ArrayWriteI;
        Writeln('Готово!');
        Writeln('Идём дальше?');
        Writeln('Да давай! - 1');
        Writeln('Отстань я не хочу в это играть - 2');
        Writeln('Нет постой я хочу поменять месторасположение своих кораблей! - любое другое число');
        Read(a);
    
        If a=2
    
          then 
    
            begin
    
              exit;
    
            end;
    
      End;
    
      BEGIN
    
        Repeat
    
          KReadI;
          PickI;
    
        Until a=1; 
    
        KReadII;
    
        Repeat
    
          AttackI;
          AttackII;
    
        Until x=78;
    
      END.
    
  • Аватар prepod - 1 мес. назад:

    Верной дорогой идете, товарищь)

  • Аватар LukasTrickster - 1 мес. назад:
     USES CRT;
    
      CONST
          Q=-128;
          E=128;
          P=10;
          O=3;
          L=2;
    
      VAR
          x,y,a,b,kolI,kolII:shortint;
          Z,U:Array [Q..E,Q..E] of shortint;
    
      Procedure ArrayFilling; 
    
      Var
          i,j:shortint;
    
      Begin
    
        For i:=0 to P do
          For j:=0 to P do
            begin
              Z[i,j]:=0;
              Z[i,1]:=i;
              Z[1,j]:=j;
    
              U[i,j]:=0;
              U[i,1]:=i;
              U[1,j]:=j;
            end;
    
      End;
    
      Procedure ArrayWriteI;
    
      Var
          i,j:shortint;
    
      Begin
    
      clrscr;
    
      Writeln('Морской бой');
    
        For i:=1 to P do
          For j:=1 to P do
            begin
              Gotoxy(i*O,j*L+1);
              Writeln(Z[i,j]);
            end;
    
      End;
    
      Procedure ArrayWriteII;
    
      Var
          i,j:shortint;
    
      Begin
    
      clrscr;
    
      Writeln('Морской бой');
    
        For i:=1 to P do
          For j:=1 to P do
            begin
              Gotoxy(i*O+20,j*L+1);
              Writeln(U[i,j]);
            end;
    
      End;
    
      Procedure KReadI;
    
      Var
          Kol:shortint;
    
      Begin
    
        Clrscr;
    
        Kol:=4;
    
        ArrayFilling;
    
          Repeat
    
            ArrayWriteI;
            Writeln('Игрок №1');
            Writeln('Расстановка кораблей');
            Writeln('Одноклеточные корабли ',Kol,' шт');
            Writeln('Введите координаты');
            Read(y,x);
    
            If Z[y,x]<>0 //Я хотел запихнуть это в попрограмму но с количеством тогда не получислось бы (((((
    
              then
    
                begin
    
                  Repeat
    
                    Clrscr;
                    ArrayWriteI;
                    Writeln('Игрок №1');
                    Writeln('Расстановка кораблей');
                    Writeln('Одноклеточные корабли ',Kol,' шт');
                    Writeln('Ячейка занята!');
                    Writeln('Введите координаты заново');
                    Read(y,x);
    
                  Until z[y,x]=0;
    
                end;
    
            If (y<1) or (y>10) or(x<1) or (x>10) // И это тоже((((
    
              then
    
                begin
    
                  Repeat
    
                    Clrscr;
                    ArrayWriteI;
                    Writeln('Игрок №1');
                    Writeln('Расстановка кораблей');
                    Writeln('Одноклеточные корабли ',Kol,' шт');
                    Writeln('Координаты введены не точно!');
                    Writeln('Введите координаты заново');
                    Read(y,x);
    
                  Until (y>1) and (y<11) and (x>1) and (y<11);
    
                end;
    
            Z[y,x]:=1;
            Clrscr;
            Kol:=Kol-1;
    
          Until Kol=0;
    
      End;
    
      Procedure KReadII;
    
      Var
          Kol:shortint;
    
      Begin
    
        Randomize;
    
        Clrscr;
    
        Kol:=4;
    
          Repeat
    
            y:=random(2,10);
            x:=random(2,10);
    
            If Z[y,x]<>0 //Да бывает и молния бьёт в одно и тоже место дважды )
    
              then
    
                begin
    
                  Repeat
    
                    Clrscr;
                    y:=random(2,10);
                    x:=random(2,10);
    
                  Until z[y,x]=0;
    
                end;            
    
            U[y,x]:=1;
            Clrscr;
            Kol:=Kol-1;
            ArrayWriteII;
    
          Until Kol=0;
    
      End;
    
      Procedure AttackI;
    
      Begin
    
        Clrscr;
        ArrayWriteI;
        Writeln('Машины наступают!!! Атакуем!!! ');
        Writeln('Введите координаты места падения снаряда');
        Read(x,y);
    
        If z[x,y] = 1
    
          then
    
            begin
    
              kolI:=kolI-1;
    
            end;
    
        U[x,y]:=2;    
    
      End;
    
      Procedure AttackII;
    
      Begin
    
        randomize;
    
        Clrscr;
        x:=random(2,10);
        y:=random(2,10);
    
        If z[x,y] = 1
    
          then
    
            begin
    
              kolII:=kolII-1;
    
            end;
    
        Z[x,y]:=2;    
    
      End;
    
      Procedure PickI;
    
      Begin
    
        Clrscr;
        ArrayWriteI;
        Writeln('Готово!');
        Writeln('Идём дальше?');
        Writeln('Да давай! - 1');
        Writeln('Отстань я не хочу в это играть - 2');
        Writeln('Нет постой я хочу поменять месторасположение своих кораблей! - любое другое число');
        Read(a);
    
        If a=2
    
          then 
    
            begin
    
              exit;
    
            end;
    
      End;
    
      BEGIN
    
        Repeat
    
          KReadI;
          PickI;
    
        Until a=1; 
    
        Repeat
    
          KReadII;
          read(b);
    
        Until b=1;
    
           KolI:=4;
           KolII:=4;       
    
        Repeat
    
          AttackI;
          AttackII;
    
        Until (kolI=0) or (kolII=0);
    
      END.
    
  • Аватар root - 1 мес. назад:

    Эту бы энергию, да в мирных целях…

  • Аватар LukasTrickster - 1 мес. назад:

    А вы чем предлагаете заняться ?

  • Аватар root - 1 мес. назад:

    Есть такой полезный, но ныне, увы, не очень живой проект, как MyRuLib.
    На первом этапе — сделать совместимость с актуальными версиями используемых графических библиотек.
    На втором — добавить поддержку распределённой БД. Возможно — через DBI.

  • Аватар LukasTrickster - 1 мес. назад:

    Как закончу с этим обязательно гляну :eek:

  • Аватар LukasTrickster - 1 мес. назад:
    Uses crt;
    
    Const
        Q=-128;
        P=128;
        O=10;
    
    Var
        x,y,kolI,kolII:shortint;
        z,u:array [Q..P,Q..P] of shortint;
    
    Procedure ArrayFilling;
    
    var
        i,j:shortint;
    
    begin
    
      for i:=0 to O do
        for j:=0 to O do
          begin
    
            z[i,j]:=0;
            z[1,j]:=j;
            z[i,1]:=i;
    
            u[i,j]:=0;
            u[1,j]:=j;
            u[i,1]:=i;
    
          end;
    
    end;
    
    Procedure ArrayWriteI;
    
    var
        i,j:shortint;
    
    begin
    
      clrscr;
    
      writeln('Морской бой');
    
      for i:=1 to O do
        for j:=1 to O do
          begin
    
            gotoxy(i*3,j*2+1);
            writeln(z[i,j]);
    
          end;
    
    end;
    
    Procedure ArrayWriteII;
    
    var
        i,j:shortint;
    
    begin
    
      for i:=1 to O do
        for j:=1 to O do
          begin
    
            gotoxy(i*3+40,j*2+1);
            writeln(u[i,j]);
    
          end;
    
    end;
    
    Procedure KReadI;
    
    begin
    
      Writeln('Ввод координат');
      read(x,y);
    
      if z[x,y]<>0
        then
          begin
    
            repeat
    
              ArrayWriteI;
              ArrayWriteII;
              Writeln('Ввод координат');
              read(x,y);
    
            until z[x,y]=0;
    
          end;
    
      z[x,y]:=1;
      kolI:=kolI-1;
    
    end;
    
    Procedure KReadII;
    
    begin
    
      y:=random(2,O);
      x:=random(2,O);
    
      if u[x,y]<>0
        then
          begin
    
            repeat
    
              y:=random(2,O);
              x:=random(2,O);
    
            until u[x,y]=0;
    
          end;
    
      u[x,y]:=1;
      kolII:=kolII-1;
    
    end;
    
    Procedure AttackI;
    
    begin
    
      Writeln('Ввод координат (атака)');
      read(x,y);
    
      if u[x,y]=2
        then
          begin
    
            repeat
    
              ArrayWriteI;
              ArrayWriteII;
              Writeln('Ввод координат (атака)');
              read(x,y);
    
            until u[x,y]<>2;
    
          end;
    
    end;
    
    Procedure AttackII;
    
    begin
    
      y:=random(2,O);
      x:=random(2,O);
    
      if z[x,y]=2
        then
          begin
    
            repeat
    
              y:=random(2,O);
              x:=random(2,O);
    
            until z[x,y]<>2;
    
          end;
    
    end;
    
    Procedure winI;
    
    begin
    
      if u[x,y]=1
        then 
    
          begin
    
            kolI:=kolI-1;
    
          end;
    
      u[x,y]:=2;
    
    end;
    
    Procedure winII;
    
    begin
    
      if z[x,y]=1
        then 
    
          begin
    
            kolII:=kolII-1;
    
          end;
    
      z[x,y]:=2;
    
    end;
    
    Begin
    
      randomize;
    
      ArrayFilling;
    
      kolI:=4;
    
      repeat
    
        ArrayWriteI;
        ArrayWriteII;
        KreadI;
    
      until kolI=0;
    
      kolII:=4;
    
      repeat
    
        KReadII;
    
      until kolII=0;
    
      kolI:=4;
      kolII:=4;
    
      repeat
    
        ArrayWriteI;
        ArrayWriteII;
        AttackI;
        WinI;
        AttackII;
        WinII;
    
      until (kolI=0) or (kolII=0);
    
      Writeln('You win!!!');
    
    End.
    
  • Аватар LukasTrickster - 4 нед., 1 дн. назад:

    -Нужны функции !
    -А зачем ?
    -Не знаю, но они нужны !
    -??7
    Блин я уже реально задолбался

    Uses crt;
    
    Const
        Q=-128;
        P=128;
        O=10;
    
    Var
        x,y,kolI,kolII:shortint;
        z,u:array [Q..P,Q..P] of shortint;
    
    Procedure ArrayFilling;
    
    var
        i,j:shortint;
    
    begin
    
      for i:=0 to O do
        for j:=0 to O do
          begin
    
            z[i,j]:=0;
            z[1,j]:=j;
            z[i,1]:=i;
    
            u[i,j]:=0;
            u[1,j]:=j;
            u[i,1]:=i;
    
          end;
    
    end;
    
    Procedure ArrayWriteI;
    
    var
        i,j:shortint;
    
    begin
    
      clrscr;
    
      writeln('Морской бой');
    
      for i:=1 to O do
        for j:=1 to O do
          begin
    
            gotoxy(i*3,j*2+1);
            writeln(z[i,j]);
    
          end;
    
    end;
    
    Procedure ArrayWriteII;
    
    var
        i,j:shortint;
    
    begin
    
      for i:=1 to O do
        for j:=1 to O do
          begin
    
            gotoxy(i*3+40,j*2+1);
            writeln(u[i,j]);
    
          end;
    
    end;
    
    Procedure KReadI(x,y:byte);
    
    begin
    
      Writeln('Ввод координат');
    
      read(x,y);
    
      if z[x,y]<>0 
    
        then 
    
          begin
    
            repeat
    
              ArrayWriteI;
              ArrayWriteII;
              Writeln('Ячейка занята');
              Writeln('Ввод координат');
              read(x,y);
    
            until z[x,y]=0;
    
          end;
    
      if (y=2) and (x=2)
    
        then
    
          if (z[y+1,x]<>0) or (z[y+1,x+1]<>0) or (z[y,x+1]<>0) 
    
            then
    
              begin
    
                repeat
    
                  ArrayWriteI;
                  ArrayWriteII;
                  Writeln('Слишком близко');
                  Writeln('Ввод координат');
                  read(x,y);
    
                until (z[y+1,x]=0) and (z[y+1,x+1]=0) and (z[y,x+1]=0);
    
              end;
    
      if y=2
    
        then
    
          if (z[y,x-1]<>0) or (z[y+1,x-1]<>0) or (z[y+1,x]<>0) or (z[y+1,x+1]<>0) or (z[y,x+1]<>0) 
    
            then
    
              begin
    
                repeat
    
                  ArrayWriteI;
                  ArrayWriteII;
                  Writeln('Слишком близко');
                  Writeln('Ввод координат');
                  read(x,y);
    
                until (z[y,x-1]=0) and (z[y+1,x-1]=0) and (z[y+1,x]=0) and (z[y+1,x+1]=0) and (z[y,x+1]=0);
    
              end;
    
      if x=2
    
        then
    
          if (z[y-1,x]<>0) or (z[y+1,x]<>0) or (z[y-1,x+1]<>0) or (z[y,x+1]<>0) or (z[y+1,x+1]<>0) 
    
            then
    
              begin
    
                repeat
    
                  ArrayWriteI;
                  ArrayWriteII;
                  Writeln('Слишком близко');
                  Writeln('Ввод координат');
                  read(x,y);
    
                until (z[y-1,x]=0) and (z[y+1,x]=0) and (z[y-1,x+1]=0) and (z[y,x+1]=0) and (z[y+1,x+1]=0);
    
              end;
    
      if (z[y-1,x-1]<>0) or (z[y,x-1]<>0) or (z[y+1,x-1]<>0) or (z[y-1,x]<>0) or (z[y+1,x]<>0) or (z[y-1,x+1]<>0) or (z[y,x+1]<>0) or (z[y+1,x+1]<>0)
    
        then 
    
          begin
    
            repeat
    
              ArrayWriteI;
              ArrayWriteII;
              Writeln('Слишком близко');
              Writeln('Ввод координат');
              read(x,y);
    
            until (z[y-1,x-1]=0) and (z[y,x-1]=0) and (z[y+1,x-1]=0) and (z[y-1,x]=0) and (z[y+1,x]=0) and (z[y-1,x+1]=0) and (z[y,x+1]=0) and (z[y+1,x+1]=0);
    
          end;
    
      z[x,y]:=1;
      kolI:=kolI-1;
    
    end;
    
    Procedure KReadII;
    
    begin
    
      y:=random(2,O);
      x:=random(2,O);
    
      if u[x,y]<>0
        then
          begin
    
            repeat
    
              y:=random(2,O);
              x:=random(2,O);
    
            until u[x,y]=0;
    
          end;
    
      if (u[y-1,x-1]<>0) or (u[y,x-1]<>0) or (u[y+1,x-1]<>0) or (u[y-1,x]<>0) or (u[y+1,x]<>0) or (u[y-1,x+1]<>0) or (u[y,x+1]<>0) or (u[y+1,x+1]<>0)
    
        then 
    
          begin
    
            repeat
    
              y:=random(2,O);
              x:=random(2,O);
    
            until (u[y-1,x-1]=0) and (u[y,x-1]=0) and (u[y+1,x-1]=0) and (u[y-1,x]=0) and (u[y+1,x]=0) and (u[y-1,x+1]=0) and (u[y,x+1]=0) and (u[y+1,x+1]=0);
    
          end;
    
      u[x,y]:=1;
      kolII:=kolII-1;
    
    end;
    
    Procedure AttackI;
    
    begin
    
      Writeln('Ввод координат (атака)');
      read(x,y);
    
      if u[x,y]=2
        then
          begin
    
            repeat
    
              ArrayWriteI;
              ArrayWriteII;
              writeln('туда уже стреляли');
              Writeln('Ввод координат (атака)');
              read(x,y);
    
            until u[x,y]<>2;
    
          end;
    
    end;
    
    Procedure AttackII;
    
    begin
    
      y:=random(2,O);
      x:=random(2,O);
    
      if z[x,y]=2
        then
          begin
    
            repeat
    
              y:=random(2,O);
              x:=random(2,O);
    
            until z[x,y]<>2;
    
          end;
    
    end;
    
    Procedure winI;
    
    begin
    
      if u[x,y]=1
        then 
    
          begin
    
            kolI:=kolI-1;
    
          end;
    
      u[x,y]:=2;
    
    end;
    
    Procedure winII;
    
    begin
    
      if z[x,y]=1
        then 
    
          begin
    
            kolII:=kolII-1;
    
          end;
    
      z[x,y]:=2;
    
    end;
    
    Begin
    
      randomize;
    
      ArrayFilling;
    
      kolI:=4;
    
      repeat
    
        ArrayWriteI;
        ArrayWriteII;
        KreadI(x,y);
    
      until kolI=0;
    
      kolII:=4;
    
      repeat
    
        KReadII;
    
      until kolII=0;
    
      kolI:=4;
      kolII:=4;
    
      repeat
    
        ArrayWriteI;
        ArrayWriteII;
        AttackI;
        WinI;
        AttackII;
        WinII;
    
      until (kolI=0) or (kolII=0);
    
      clrscr;
      Writeln('You win!!!');
    
    End.
    
  • Аватар root - 4 нед., 1 дн. назад:

    Опять дают вывод в отрыве от опыта, на котором он основан?

    ЗЫ: Для читаемости ещё достаточно часто функции разносят по разным файлам.

  • Аватар root - 4 нед., 1 дн. назад:

    Да, предлагаемая мной задачка выгодно отличается от чисто учебных отсутствием необходимости отдельно заморачиваться вопросом наполнения базы.
    Данные уже есть. И их столько, что можно попутно вкусно поиграться с вопросами оптимизации производительности.

    Из лирических отступлений: когда свалили с bdb, то на типовой задаче загрузки дампа содержимого базы можно было наблюдать рост производительности порядка двух (!) десятичных порядков (!!).

  • Аватар prepod - 4 нед., 1 дн. назад:

    Насчет применения подпрограмм-функций.
    Да, это сложная концепция. Требуется время на ее осмысление и принятие.
    Понимание приходит с накоплением некоторого критического уровня опыта.Так что все нормально. Работайте, пишите код. Врубитесь в один светлый момент.
    Могу лишь повторить хорошие правила:
    1. глобальным переменным в теле подпрограмм не место
    2. подпрограмма без параметров – слабое, недоразвитое создание