Важная информация
Показано с 1 по 3 из 3

Тема: вывод на экран с нажатием Enter и Esc

  1. #1 вывод на экран с нажатием Enter и Esc 
    Новичок
    Регистрация
    13.04.2011
    Сообщений
    7
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Пожалуйста, может кто нибудь подскажет..
    По заданию нужно вывести на экран перестановки шахматных фигур. Задача решена, проблема возникла с выводом комбинаций на экран. Нужно сделать так, чтобы каждая последующая комбинация выводилась на экран при нажатии клавиши Enter. Но при нажатии на Esc все комбинации должны автоматически выводится на экран, не дожиlаясь нажатия клавиши Enter..

    Вот код программы. Выводятся комбинации на экран в процедуре GenerComb
    Код pascal:
    Program Lab_3;
         Uses CRT;
         const TypeF=5;      {количество различных фигур}
               AllFigures=8; {общее количество фигур в последовательности}
               Figure:string[5]='HSLFK';
         type arr=array [1..TypeF] of byte;
              ch=array [1..AllFigures] of char;
         {-----------------------------------------------------}
         Procedure FormNumPos(var NumPos_:arr);
         var i:integer;
         begin
            for i:=1 to TypeF-2 do
                NumPos_[i]:=2;
         
            for i:=4 to TypeF do
                NumPos_[i]:=1;
         end;
         {-----------------------------------------------------}
         Procedure GenerComb(var NumPos_:arr; var SeqOfFigure_:ch; k:byte);
         var i,j:integer;                  {переменные счетчика цикла}
         begin
            for i:=1 to TypeF do
            begin
               if NumPos_[i]>0 then        {есть эл-ты,доступные для позиции}
               begin
                  SeqOfFigure_[k]:=Figure[i];  {k-тому эл-ту := значение}
                  NumPos_[i]:=NumPos_[i]-1;     {уменьшаем кол-во доступных 
                                                                      эл-тов}
                  if k<>AllFigures then        {N позиции <> кол-ву эл-тов}
                    GenerComb(NumPos_,SeqOfFigure_,k+1)
                  else
                  begin
                     for j:=1 to AllFigures do
                     write(SeqOfFigure_[j]);writeln; {вывод на экран 
                                                                комбинации}
                  end;
                  NumPos_[i]:=NumPos_[i]+1;
               end;
            end;
         end;
         {-----------------------------------------------------}
         
         var NumPos:arr;   {кол-во эл-тов каждого вида,доступных для позиции}
             k:byte;               {номер позиции в последовательности}
             SeqOfFigure:ch;       {массив последовательности фигур}
         begin
            clrscr;
            write('Программа выводит на экран все комбинации фигур ');
            writeln('c первой линии шахматной доски.');
            writeln('Обозначения фигур: ');
            writeln('H - Конь');
            writeln('S - Слон');
            writeln('L - Ладья');
            writeln('F - Ферзь');
            writeln('К - Король');
            writeln('Вывод каждой последующей комбинации осуществляется ');
            writeln('нажатием клавиши Enter. ');
            writeln('Клавиша Esc - завершение работы.');
            FormNumPos(NumPos);
            GenerComb(NumPos,SeqOfFigure,1);
            readkey;
         end.
    Последний раз редактировалось Kakos_nonos; 13.04.2011 в 23:23.
    Ответить с цитированием  
     

  2. #2  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,531
    Сказал(а) спасибо
    126
    Поблагодарили 428 раз(а) в 291 сообщениях
    Записей в блоге
    6
    Вообщем, вот:
    Код pascal:
    Program Lab_3;
         Uses CRT;
         const TypeF=5;      {количество различных фигур}
               AllFigures=8; {общее количество фигур в последовательности}
               Figure:string[5]='HSLFK';
         type arr=array [1..TypeF] of byte;
              ch=array [1..AllFigures] of char;
              var c:char;
         {-----------------------------------------------------}
         Procedure FormNumPos(var NumPos_:arr);
         var i:integer;
         begin
            for i:=1 to TypeF-2 do
                NumPos_[i]:=2;
     
            for i:=4 to TypeF do
                NumPos_[i]:=1;
         end;
         {-----------------------------------------------------}
         Procedure GenerComb(var NumPos_:arr; var SeqOfFigure_:ch; k:byte);
         var i,j:integer;                  {переменные счетчика цикла}
         begin
            for i:=1 to TypeF do
            begin
               if NumPos_[i]>0 then        {есть эл-ты,доступные для позиции}
               begin
                  SeqOfFigure_[k]:=Figure[i];  {k-тому эл-ту := значение}
                  NumPos_[i]:=NumPos_[i]-1;     {уменьшаем кол-во доступных
                                                                      эл-тов}
                  if k<>AllFigures then        {N позиции <> кол-ву эл-тов}
                    GenerComb(NumPos_,SeqOfFigure_,k+1)
                  else
                  begin
                     for j:=1 to AllFigures do
                     write(SeqOfFigure_[j]);writeln; {вывод на экран
                                                                комбинации}
                  end;
                  NumPos_[i]:=NumPos_[i]+1;
               end;
            end;
         end;
         {-----------------------------------------------------}
     
         var NumPos:arr;   {кол-во эл-тов каждого вида,доступных для позиции}
             k:byte;               {номер позиции в последовательности}
             SeqOfFigure:ch;       {массив последовательности фигур}
         begin
            clrscr;
            write('Программа выводит на экран все комбинации фигур ');
            writeln('c первой линии шахматной доски.');
            writeln('Обозначения фигур: ');
            writeln('H - Конь');
            writeln('S - Слон');
            writeln('L - Ладья');
            writeln('F - Ферзь');
            writeln('К - Король');
            writeln('Вывод каждой последующей комбинации осуществляется ');
            writeln('нажатием клавиши Enter. ');
            writeln('Клавиша Esc - завершение работы.');
            repeat
            c:=readkey;
     
            {Вот тут пишите команду вывода одной комбинации}
            FormNumPos(NumPos);
     
            until c=#27;
            GenerComb(NumPos,SeqOfFigure,1);
            readkey;
         end.
    Только там, где написано, впишите команду вывода одной комбинации, а то я не разобрался как её выводить.
    Вообщем, должно работать.
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  3. #3  
    Новичок
    Регистрация
    13.04.2011
    Сообщений
    7
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    спасибо, я уже придумала решение ))

    вот, может, кому-то когда-нибудь поможет:

    Код pascal:
    Program Lab_3;
    Uses CRT;
    const TypeF=5;      {количество различных фигур}
          AllFigures=8; {общее количество фигур в последовательности}
          Figure:string[5]='HSLFK';
    type arr=array [1..TypeF] of byte;
         ch=array [1..AllFigures] of char;
    {-----------------------------------------------------}
    Procedure FormNumPos(var NumPos_:arr);
    var i:integer;
    begin
       for i:=1 to TypeF-2 do
           NumPos_[i]:=2;
     
       for i:=4 to TypeF do
           NumPos_[i]:=1;
    end;
    {-----------------------------------------------------}
    Procedure GenerComb(var NumPos_:arr; var SeqOfFigure_:ch; k:byte;var fl:boolean);
    var i,j:integer;                  {переменные счетчика цикла}
        turn:char;
    begin
       for i:=1 to TypeF do
       begin
          if NumPos_[i]>0 then            {есть эл-ты,доступные для позиции}
          begin
             SeqOfFigure_[k]:=Figure[i];  {k-тому эл-ту := значение}
             NumPos_[i]:=NumPos_[i]-1;    {уменьшаем кол-во доступных эл-тов}
             if k<>AllFigures then        {N позиции <> кол-ву эл-тов}
               GenerComb(NumPos_,SeqOfFigure_,k+1,fl)
             else
             begin
                for j:=1 to AllFigures do
                     write(SeqOfFigure_[j]);
                writeln;
                if fl then
                repeat
                   turn:=readkey;
                   if (turn=#13) then fl:=true
                   else
                   if (turn=#27) then fl:=false;
                until ((turn=#13) or (turn=#27));
             end;
             NumPos_[i]:=NumPos_[i]+1;
          end;
       end;
    end;
    {-----------------------------------------------------}
     
    var NumPos:arr;     {кол-во эл-тов каждого вида,доступных для позиции}
        k:byte;               {номер позиции в последовательности}
        SeqOfFigure:ch;       {массив последовательности фигур}
        fl:boolean;
    begin
       clrscr;
       write('Программа выводит на экран все комбинации фигур ');
       writeln('c первой линии шахматной доски.');
       writeln('Обозначения фигур: ');
       writeln('H - Конь');
       writeln('S - Слон');
       writeln('L - Ладья');
       writeln('F - Ферзь');
       writeln('К - Король');
       writeln('Вывод каждой последующей комбинации осуществляется ');
       writeln('нажатием клавиши Enter. Клавиша Esc - завершение работы.');
       FormNumPos(NumPos);
       fl:=true;
       GenerComb(NumPos,SeqOfFigure,1,fl);
       readkey;
    end.
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Вывод числа
    от NoodLez в разделе C/C++
    Ответов: 2
    Последнее сообщение: 16.09.2012, 01:58
  2. Вывод div в зависимости от дня недели
    от FINESTGOL в разделе JavaScript
    Ответов: 4
    Последнее сообщение: 07.08.2012, 15:33
  3. Ответов: 3
    Последнее сообщение: 29.12.2011, 05:14
  4. Ответов: 11
    Последнее сообщение: 17.11.2011, 12:14
  5. Ввод-вывод
    от Dispetcher14 в разделе QBasic
    Ответов: 5
    Последнее сообщение: 20.05.2011, 17:58
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •