Учебник по программированию.

Первые шаги. Язык программирования PascalABC.

Предыдущий параграф Назад в содержание Следующий параграф


§19. Клавиатурный тренажёр. Игра «Гонки».

Клавиатурный тренажёр.

Думаю, что каждому, кто дочитал эту книгу до этого места, не терпится написать настоящую программу. Предлагаю написать клавиатурный тренажёр, т.к. если вы собираетесь стать программистом, то вам просто необходимо научиться набирать текст, не глядя в клавиатуру. С помощью такой программы вы сможете этому тренироваться.

Вначале разберём, каким должен быть наш клавиатурный тренажёр, затем можно будет писать код программы.

Клавиатурный тренажёр должен предлагать нажать какую либо клавишу и ждать её нажатия. Если клавиша нажата верно, то он должен предложить нажать следующую, если не верно, то это должно считаться ошибкой, а тренажёр должен ждать нажатия верной клавиши. Количество ошибок должно считаться.

Вначале, в первом уровне, должны предлагаться для нажатия клавиши «J» и «F», т.к. в любой компьютерной клавиатуре на этих клавишах  есть небольшие бугорки. Эти бугорки являются ориентиром, относительно которых можно найти все другие клавиши. При наборе текста не глядя в клавиатуру, эти бугорки находятся на ощупь, затем на них устанавливаются указательные пальцы обеих рук. Соответственно эти клавиши «J» и «F» нажимаются указательными пальцами правой и левой рук.

Затем, во втором уровне, необходимо добавить ещё две клавиши, например «D» и «K», т.к. они находятся радом с предыдущими.

Далее, в третьем уровне, должны добавиться ещё две клавиши. В четвёртом  ещё две. И так далее, пока не начнут предлагаться все клавиши.

Клавиши должны каждый раз предлагаться в различных последовательностях.

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

Так же  необходимо вывести палец, которым рекомендуется нажимать данную клавишу. Названия пальцев можно обозначить следующим образом:


Далее в таблице приведены клавиши и соответствующие им пальцы:


QЛ5

WЛ4

EЛ3

RЛ2

TЛ2

YП2

UП2

IП3

OП4

PП5


AЛ5

SЛ4

DЛ3

FЛ2

GЛ2

HП2

JП2

KП3

LП4

;П5

‘–П5

ZЛ5

XЛ4

CЛ3

VЛ2

BЛ1

NП2

MП2

,П3

.П4






Пробел П1





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

Теперь перейдём непосредственно к программированию.

Клавиатуру можно нарисовать с помощью символов следующим образом:


--- --- --- --- --- --- --- --- --- ---

| Q | W | E | R | T | Y | U | I | O | P |

--- --- --- --- --- --- --- --- --- ---

  --- --- --- --- --- --- --- --- --- --- ---

| A | S | D | F | G | H | J | K | L | ; | ' |

  --- --- --- --- --- --- --- --- --- --- ---

   --- --- --- --- --- --- --- --- ---

  | Z | X | C | V | B | N | M | , | . |

   --- --- --- --- --- --- --- --- ---


Разную последовательность предлагаемых клавиш можно реализовать с помощью функции Random. Для этого можно создать массив клавиш, в котором первые две клавиши «J» и «F» будут иметь индексы 1 и 2, вторые две клавиши «D» и «K» 3 и 4, и т.д. Для получения случайной клавиши из первых двух, вызовем функцию Random(1,2). Для получения клавиши из четырёх Random(1,4). Так же в этом же массиве мы можем сохранить координаты X и Y этих клавиш на экранной клавиатуре для того, что бы подсвечивать их, а так же палец, которым нужно их нажимать. Реализовать это можно с помощью типа запись. Т.е. у нас получится массив данных типа запись.

У меня получился следующий код такого клавиатурного тренажёра:


Unit MKlavTren;


uses CRT;


type symbols = record//Тип для хранения клавиш в массиве

       number:byte;//Порядковый номер символа клавиши

            x:byte;//Координата Х на экранной клавиатуре

            y:byte;//Координата У на экранной клавиатуре

            p:string[2]//Палец, которым нужно нажимать клавишу

            end;

           

Var LatMassiv: array [1..30] of symbols;//Массив для хранения клавиш

    Oshibki:integer;//Счётчик ошибок


//Процедура выводит экранную клавиатуру

Procedure WriteLatKlav;

begin

  gotoxy(18,16);

  writeln(' --- --- --- --- --- --- --- --- --- --- ');

  gotoxy(18,17);

  writeln('| Q | W | E | R | T | Y | U | I | O | P |');

  gotoxy(18,18);

  writeln(' --- --- --- --- --- --- --- --- --- --- ');

  gotoxy(19,19);

  writeln(' --- --- --- --- --- --- --- --- --- --- --- ');

  gotoxy(19,20);

  writeln('| A | S | D | F | G | H | J | K | L | ; | '' |');

  gotoxy(19,21);

  writeln(' --- --- --- --- --- --- --- --- --- --- --- ');

  gotoxy(20,22);

  writeln(' --- --- --- --- --- --- --- --- --- ');

  gotoxy(20,23);

  writeln('| Z | X | C | V | B | N | M | , | . |');

  gotoxy(20,24);

  writeln(' --- --- --- --- --- --- --- --- --- ');

end;


//Процедура заполняет массив латинских клавиш

Procedure ZapolnenieLatMassiv;

begin

//Для примера заполнено только 4 клавиши

  with LatMassiv[1] do begin number:=106; x:=45; y:=20; p:='П2'; end;//j

  with LatMassiv[2] do begin number:=102; x:=33; y:=20; p:='Л1'; end;//f

  with LatMassiv[3] do begin number:=107; x:=49; y:=20; p:='П3'; end;//k

  with LatMassiv[4] do begin number:=100; x:=29; y:=20; p:='Л3'; end;//d

end;


//Непосредственно сам уровень тренировки набора латинских клавиш

//Параметр slojnost - количество клавиш

Procedure LatLevel(slojnost:byte);

var f:boolean;//Если клавиши правильная, то false и выходим из цикла

    c:char;//Для хранения нажатой клавиши

    n:byte;//Индекс клавиши в массиве

begin

//Каждый уровень предлагет 10 клавиш для нажатия

for var i:=1 to 10 do

  begin

//Выводим предлагаемую клавишу и рекомендуемый палец

    gotoxy(40,9);

    n:=random(1,slojnost);

    write(chr(LatMassiv[n].number));

    GotoXY(39,14);

    write(LatMassiv[n].p);

//Подсвечиваем клавишу на экранной клавиатуре   

    gotoxy(LatMassiv[n].x-1,latmassiv[n].y);

    TextBackground(red);

    Textcolor(15);

    write(' ',chr(LatMassiv[n].number-32),' ');

    Textcolor(black);

    TextBackground(7);

//Входим в цикл считывания нажатой клавиши

    f:=true;

    while f do

      begin

        if keypressed then

          begin

            c:=readkey;

            if ord(c)=LatMassiv[n].number then

               f:=false//Если клавиша нажате верно

             else

               begin   //Если не верно, то считаем и выводим ошибку

                 inc(Oshibki);

                 Gotoxy(1,2);

                 Write('Ошибки - ',Oshibki);

               end;

          end;

      end;

//Стираем предлагаемую клавишу, палец и убираем подсветку с экранной клавиатуры     

    gotoxy(LatMassiv[n].x-1,LatMassiv[n].y);

    write(' ',chr(LatMassiv[n].number-32),' ');

    gotoxy(40,9);

    ClearLine;

    GotoXY(1,14);

    ClearLine;

    sleep(200);//Делаем небольшуюу паузу

  end;

end;


begin

//Инициализация программы

  CRT.SetWindowTitle('Клавиатурный тренажёр');

  HideCursor;

  ZapolnenieLatMassiv;

  Oshibki:=0;

  TextBackground(7);

  clrscr;

  TextColor(black);

end.

=========================================================================

Program KlavTren;


Uses CRT,MKlavTren;


begin

//Для примера два уровня

  for var i:=1 to 2 do

    begin

      clrScr;

      gotoxy(35,12);

      write('Уровень ',i,'.');

      sleep(2000);

      clrScr;

      Gotoxy(1,2);

      Write('Ошибки - ',Oshibki);

      WriteLatKlav;

      gotoxy(36,1);

      write('Уровень ',i);

      TextBackground(7);

      LatLevel(i*2);

    end;

  ClrScr;

  GoToXY(33,11);

  Write('Поздравляем!!!');

  GoToXY(15,13);

  Write('Вы прошли клавиатурный тренажёр, совершив ',Oshibki,' ошибок.');

  readln;

end.

_________________________________________________________________________


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

В конце параграфа в задачах будет предложено дописать этот клавиатурный тренажёр с учётом некоторых аспектов, которые так же будут приведены. Настоятельно рекомендую сделать это, и с помощью данного тренажёра научиться набирать текст не глядя в клавиатуру. Так же можете использовать и другой тренажёр. Думаю, их немало можно найти в просторах Интернета.

По началу будет не привычно не смотреть в клавиатуру, тем не менее, постепенно вы привыкните и потом вам будет не непривычно уже смотреть в неё. Уверяю вас, помимо того, что не глядя набирать быстрее это ещё и гораздо менее утомительно.


Игра «Гонки».

Плюс к тому, что мы написали клавиатурный тренажёр. Предлагаю написать игру под названием «Гонки». Это даст нам хороший опыт по программированию. Разберём весь процесс работы над такой программой поэтапно.

Для игры нам понадобятся следующие элементы:

  • трасса, которая должна двигаться относительно экрана;
  • машина, которая должна оставаться на месте относительно экрана и перемещаться влево, вправо относительно трассы;
  • препятствия, которые должны двигаться вместе с трассой, и которые необходимо будет объезжать.

Движущаяся трасса. Трассу обозначим с помощью левой и правой границы. Границы будут состоять из символов «|», примерно следующим образом:


   |         |

 

   |         |

   

   |         |

     

   |         |

       

   |         |


Эффект движения трассы создадим за счёт движения символов вниз. Для того, что бы было ощущение реального движения, сделаем на одну строчку с символами две пустых строчки. Через определённый промежуток времени будем стирать весь экран и перерисовывать трассу, при этом символы должны опуститься на одну строчку вниз.

Так как размер консольного окна при разворачивании на весь экран имеет размеры 80х50 символов, то зададим изначальный размер окна с помощью процедуры:


  SetWindowSize(80,50);


Так как символы будут находиться в каждой четвёртой строчке, то координату у для прорисовки нужно увеличивать каждый раз на 3. Когда координата станет больше 50, то из неё необходимо будет вычесть 50. Для того, что бы каждый раз начинать прорисовку не с первой строчки, а со второй или с третьей необходима переменная, которая будет хранить позицию, с которой начиналась прорисовка в предыдущий раз. Назовём  её yTrassa. Тогда в первом случае yTrassa будет равна 0. Во втором случае yTrassa=1, в третьем yTrassa=2.

Всего у нас получилось 3 повторяющиеся строчки. Следовательно, для прорисовки всей трассы необходимо проходов. При этом если y станет больше 50, то проход необходимо пропустить.

После всего вышесказанного можно написать следующий код:


program Trassa;

uses CRT;


var yTrassa:byte;


procedure DrowTrassa;

var y:byte;

begin

  y:=1+yTrassa;

  for var i:=1 to 17 do

    begin

      GotoXY(20,y);

      write('|');

      GotoXY(60,y);

      write('|');

      y:=y+3;

      if y>50 then break;

    end;

end;


begin

  SetWindowSize(80,50);

  yTrassa:=0;

  while true do

    begin

      if yTrassa=3 then yTrassa:=0;

      DrowTrassa;

      Sleep(600);

      ClrScr;

      Inc(yTrassa);

    end;

end.

___________________________________________



Препятствие. Препятствие может состоять из строчки 10 дефисов: «----------». Препятствие должно появляться между границами трассы в разных местах случайным образом. Для этого создадим переменную xTr, значение которой будем получать с помощью процедуры random(20,40). Двадцать и сорок числа не случайные. 20 позиция левого края трассы. 40 правая позиция трассы за вычетом 10 символов препятствия.

Для движения препятствия вместе с трассой создадим переменную yTr. Когда данная переменная станет больше 50, делаем её равной единице и присваиваем новое значение переменной xTr. Для прорисовки трассы напишем следующую процедуру:


procedure DrowPr;//Рисуем препятствие

begin

  if yPr>50 then

    begin

     yPr:=1;

     xPr:=Random(20,40);

    end;

  GotoXY(xPr,yPr);

  write('--------------------');

  Inc(yPr);

end;


Машина. С помощью символов Машину можем нарисовать следующим образом:


  ___

0|___|0

 |   |

 |___|

0|___|0


Она должна находиться внизу трассы и перемещаться влево и вправо относительно трассы, не выходя за её пределы. Для прорисовки машины создадим процедуру DrowCar и глобальную переменную xCar, которая будет хранить позицию, в которой находится машина.

Код процедуры DrowCar будет выглядеть следующим образом:


procedure DrowCar;

begin

  GotoXY(xCar,45);  write('  ___  ');

  GotoXY(xCar,46);  write(' |___| ');

  GotoXY(xCar,47);  write('0|   |0');

  GotoXY(xCar,48);  write(' |___| ');

  GotoXY(xCar,49);  write('0|___|0');

end;


Перемещение машины. Для перемещения машины нам необходима процедура, которая будет менять координату xCar в зависимости от того, какую клавишу нажал пользователь. Назовём эту процедуру Smena_xCar. Так как машина не должна выезжать за пределы трассы, то в конце процедуры необходимо проверить координату xCar, и если она выходит за границы трассы, то изменить её значение. Получим следующий код:


procedure Smena_xCar;

var cTemp:char;

begin

  if KeyPressed then

    begin

      cTemp:=ReadKey;

      if Ord(cTemp)=0 then

        begin

          cTemp:=ReadKey;

          case Ord(cTemp) of

            37: dec(xCar);

            39: inc(xCar);

          end;

        end;

      if xCar<=21 then xCar:=21;

      if xCar>=53 then xCar:=53;

    end;

end;


Суть игры. Используя все приведённые выше процедуры, мы уже можем написать игру, где будет двигаться трасса, появляться препятствия и где можно с помощью клавиатуры перемещать машину относительно трассы.

Осталось сделать игру интересной и захватывающей. Для этого необходимо при объезде каждого препятствия считать очки. Трасса должна двигаться с каждым разом всё быстрее и быстрее. Для этого создадим две переменные Ochki, для счёта очков и SleepTime, для ускорения движения трассы. А так же процедуру DrowOchki для вывода количества очков. Изменение этих переменных, а так же вызов этой процедуры необходимо произвести тогда, когда препятствие исчезает из вида, т.е. в первых строчках процедуры DrowPr, где проверяется переменная yPr, не стала ли она больше 50. С учётом вышесказанного процедуры DrowOchki и DrowPr будут выглядеть следующим образом:


procedure DrowOchki;

begin

  GotoXY(1,1);

  Write('Счёт ',Ochki);

end;


procedure DrowPr;//Рисуем препятствие

begin

  if yPr>50 then

    begin

     if SleepTime > 20 then SleepTime:=SleepTime-10;

     Inc(Ochki);

     yPr:=1;

     xPr:=Random(20,40);

    end;

  GotoXY(xPr,yPr);

  write('--------------------');

  Inc(yPr);

end;


Так же необходимо прописать остановку игры в том случае если машина наезжает на препятствие. Это событие может наступить тогда, когда переменная yPr будет равна 46, 47, 48 и 49, т.к. именно в этих координатах по y и находится машина. Хотя на самом деле машина начинается с координаты y=45, но визуально столкновение будет выглядеть реальнее если мы будем считать, что машина начинается с 46 координаты. Если машину воспринимать, как прямоугольник 7х4 символов, то условие наезда машины на препятствие будет выглядеть так:


(yPr>=46) and (yPr<=49) and ((xCar>(xPr-7)) and (xCar<=(xPr+19)))


Код основной программы. Далее необходимо написать код основной программы. Здесь необходимо произвести инициализацию всех переменных, затем войти в цикл, в котором будет происходить прорисовка всех элементов игры и изменение переменных. Для выхода из цикла необходимо проверять условие наезда машины на препятствие. При выходе из цикла необходимо вывести сообщение о том, что игра окончена. Для нашей игры код программы будет выглядеть следующим образом:


program Game_Gonka;

uses CRT;


var yTrassa,xCar,yPr,xPr:byte;

    SleepTime,Ochki:integer;


................................


begin

  SetWindowCaption('Игра гонки');

  SetWindowSize(80,50);

  yTrassa:=0;

  xCar:=36;

  yPr:=1;

  xPr:=Random(21,39);

  SleepTime:=200;

  Ochki:=0;

  while true do

    begin

      DrowTrassa;

      DrowCar;

      DrowPr;

      DrowOchki;

      if (yPr>=46) and (yPr<=49) and ((xCar>(xPr-7)) and (xCar<=(xPr+19))) then

        break;

      Sleep(SleepTime);

      Smena_xCar;

      Inc(yTrassa);

      if yTrassa=3 then yTrassa:=0;

      ClrScr;

    end;

   GotoXY(30,24);

   Write('Конец игры.');

   readln;

end.


На месте строки с точками должны находиться процедуры, код которых был уже приведён.


В данном мы на аписали клавиатурный тренажёр и игру «Гонки». Тем самым мы научились применять все полученные ранее знания для написания полноценных программ.


Задачи.

1. Дописать клавиатурный тренажёр, учитывая следующие аспекты:

  • дописать массив латинских клавиш, причём необходимо ввести заглавные буквы;
  • ввести в экранную клавиатуру левую клавишу «Shift», которая должна подсвечиваться вместе с нужной клавишей, в случае если предлагается ввести заглавную букву. Левый «Shift» нажимается пятым пальцем левой руки, при этом те клавиши, которые нужно было нажимать пятым пальцем левой руки необходимо нажимать четвёртым пальцем левой руки. Можете поэкспериментировать и определить для себя оптимальное сочетание клавиш для нажатия заглавных букв;
  • перед началом тренировки необходимо предложить выбрать латинскую или русскую клавиатуру, соответственно написать процедуру RusLevel, процедуру рисования русской клавиатуры, и процедуру заполнения массива русских клавиш. В русской клавиатуре добавить клавишу с буквой «Ё», она нажимается пятым пальцем левой руки;
  • в случае если количество ошибок станет более 30% от количества предложенных клавиш, то вывести сообщение и начать тренировку с первого уровня.


2. Рассмотренный нами клавиатурный тренажёр предназначен для изучения расположения клавиш на клавиатуре и для того, что бы приучить пальцы нажимать нужные клавиши. Для того, что бы тренироваться набирать уже тексты, а не отдельные символы, можно написать клавиатурный тренажёр другого типа. Экран разделён на две половины верхнюю и нижнюю. В верхней части находится какой либо текст. В нижней части этот текст необходимо ввести. При этом в верхнем тексте необходимо подсвечивать символ, который должен в данный момент ввести пользователь. Так же необходимо считать ошибки.

3. Наберите код игры «Гонки» из данного параграфа. Детально его изучите. Допишите комментарии так, что бы можно было понять код, не читая текст данного параграфа.

4. Усовершенствуйте игру «Гонки», исходя из следующих тезисов:

  • необходимо создать стартовую страницу, которая будет показана после запуска программы. На этой странице необходимо вывести название игры, правила и предложить игроку ввести своё имя.
  • при наезжании машины на препятствии вывести сообщение о том, что игра закончена, и вывести список игроков с их результатами. Список должен быть отсортирован по результату. Имя игрока, который только, что играл должен быть выделен другим цветом. На этой же странице предложить играть снова или закрыть программу.
  • Игра должна быть закончена так же при наезде машины на край трассы.
  • При нажатии игроком клавиши «Esc» игра должна входить в режим паузы. При этом должно быть предложено выйти из игры вообще или продолжить игру. Реализовать это можно с помощью специальной процедуры, которая может быть вызвана в том месте кода, где идёт считывание нажатой клавиши, т.е. в процедуре Smena_xCar.
  • Изменить цвета у элементов игры: у фона, трассы, машины и препятствия.
  • Придумать и реализовать свои усовершенствования.

5.Придумайте и напишите свою игру.




Решение.

1. Решение третьей задачи оставляю на вашу самостоятельную работу, т.к. костяк программы уже есть, необходимо только её дописать.


2.

unit MklavTren_2;

uses CRT;


const ks=9;//Количество строк выводимого текста


var fText:Text;//Файловая переменная

    sFile:string;//Текстовый файл

    mText:array [1..ks] of string[80];//Массив строк

                                      //содержит текст для вывода

    sTek:string;//Текущая строка

    final:=0;//Считает строки после окончания текстового файла


//Читаем строку из файла, если файл закончен,то строка равна ''

function chteniestroki:string[80];

var sTemp:string;

    cTemp:char;

begin

  if not Eof(fText) then

    begin

      for var i:=1 to 80 do

        begin

          if not Eoln(fText) then

              begin

                read(fText,cTemp);

                sTemp:=sTemp+cTemp;

              end

            else

              begin

                if not Eof(fText) then readln(fText,cTemp);

                break;

              end

        end;

      chteniestroki:=sTemp;

    end

   else

    begin

      chteniestroki:='';

      Inc(final);

    end

end;


//"Прокручиваем" текст вверх в массиве mText

procedure SmenaChlenov;

begin

  for var i:=1 to (ks-1) do mText[i]:=mText[i+1];

  mText[ks]:=chteniestroki;

end;


//Вывод текста на экран

procedure VivodTexta;

begin

  gotoxy(1,1);

  for var i:=1 to ks do

   begin

    writeln(mText[i]);

    if Length(mText[i])=80 then GotoXY(1,WhereY-1);

   end;

end;


procedure ObnovlenieTexta;

begin

  SmenaChlenov;

  VivodTexta;

end;


//Подсвечивание нужного символа в тексте

procedure PodsvechSimvola(simvol:byte);

var x,y:byte;

begin

  x:=WhereX;

  y:=WhereY;

  TextBackground(Red);

  GotoXY(simvol,5);

  Write(sTek[simvol]);

  TextBackground(Black);

  GotoXY(x,y);

end;


//Убирание подсветки с симолоа в тексте

procedure UbiraniePodsvetki(simvol:byte);

var x,y:byte;

begin

  x:=WhereX;

  y:=WhereY;

  TextBackground(Black);

  GotoXY(simvol,5);

  Write(sTek[simvol]);

  GotoXY(x,y);

end;


procedure VivodOshibok(o:integer);

var x,y:byte;

begin

  x:=WhereX;

  y:=WhereY;

  GotoXY(35,12);

  write('             ');

  Sleep(200);

  GotoXY(35,12);

  Write('Ошибок - ',o);

  GotoXY(x,y);

end;


function ReadSimvol:char;//Читаем нажатый символ

begin

  while not KeyPressed do;

  ReadSimvol:=ReadKey;

end;

end.

=========================================================================

Program KlavTren_2;

Uses CRT,MKlavTren_2;


var c:char;//Для чтения нажатого символа

    simvol,//порядковый номер текущего символа в строке

    oshibki:byte;//Для счёта ошибок

   

procedure VvodSrtoki;

var b:boolean;//нужна для выхода из цикла

              //Равна false, когда строка введена

begin

  sTek:=mText[5];

  GotoXY(1,15);

  b:=true;

  simvol:=1;

  while b do

    begin

     PodsvechSimvola(simvol);

     c:=readSimvol;

     if c=sTek[simvol] then

       begin

        UbiraniePodsvetki(simvol);

        Inc(simvol);

        write(c);

       end

      else

       begin

        Inc(oshibki);

        VivodOshibok(oshibki);

       end;

     if simvol>Length(sTek) then b:=false;

    end;

end;   

   

begin

  SetWindowCaption('Клавиатурный тренажёр 2');

//Предлагаем пользователю выбрать какой-либо вариант текста

  while true do

   begin

    Writeln('Вы открыли клавиатурный тренажёр!');

    Writeln('Выберите текст для набора:');

    Writeln('1 - "Операционная система MS DOS"');

    Writeln('2 - "Команды MS DOS"');

    read(c);

    case c of

      '1':sFile:='MS DOS.txt';

      '2':sFile:='Команды DOS.txt' ;

     end;

    if (c='1') or (c='2') then break;

    ClrScr;

   end;

//Собственно сама программа

  Assign(fText,sFile);

  Reset(fText);

//Заполняем первые строки текста

  for var i:=6 to ks do mText[i]:=chteniestroki;

//Входим в цикл набора текста

  while final<5 do

    begin

      ClrScr;

      ObnovlenieTexta;

      VivodOshibok(oshibki);     

      GotoXY(1,17);

      if mText[5]='' then continue;

      VvodSrtoki;

    end;

  Close(fText);

  writeln; 

  writeln('Конец');

  readln;

end.

_________________________________________________________________________


3.4.5. Эти задания сделайте самостоятельно.


Предыдущий параграф Назад в содержание Следующий параграф