Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2012, 13:54   #21
CnpuHTep
Пользователь
 
Регистрация: 11.02.2012
Сообщений: 15
Хорошо

Цитата:
Сообщение от Blondy Посмотреть сообщение

#80 : Down;
#72 : Up;
#75 : Left;
#77 : Right;
#13 : Enter;
#27 Esc;

http://www.pascal.su/readkey/
Вот эти стрелки,Blondy, спасибо большое)))
Serge_Bliznykov, спасибо канечно, но я сам хочу программу написать, иначе не интересно, да и трудности со сдачей возникнут, из вашего примера тестового меню тоже кое-что подчерпнул, спасибо)))
Спасибо всем, теперь остался 1 вопрос - клавиша "Tab" =)
CnpuHTep вне форума Ответить с цитированием
Старый 12.02.2012, 14:03   #22
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а я вам говорю, зря Вы этой дрянью пользуетесь (я про Pascal ABC)...

поясню.
если Вы запустите вот эту программку:
Код:
uses CRT;
var c : char;
begin
  WriteLn('Нажимайте клавиши, чтобы получить их код (выход - нажатие Esc)');
  repeat
    c:=ReadKey();
    if c=#0 then begin Write('код #0 + ');
      c:=ReadKey();
    end;
    WriteLn(' код #',ord(c));
  until c=#27;
end.
то легко убедитесь, что функция ReadKey() в PascalABC НЕ ЛОВИТ нажатие клавиши TAB. Поэтому Вы и не можете её код найти.
(а в любой нормальном компиляторе эта клавиша имеет код #9, естественно).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.02.2012, 15:04   #23
CnpuHTep
Пользователь
 
Регистрация: 11.02.2012
Сообщений: 15
По умолчанию

ну так стрелочки же тоже найти не мог, а Blondy нашла же.
Значит с помощью вашей программки я докажу преподу что паскаль не воспринемает таб, и попрошу чтоб он дал мне др кнопку)
Спасибо Большое всем Вам ребят, очень помогли)
Я думаю тему можно закрывать =)
CnpuHTep вне форума Ответить с цитированием
Старый 12.02.2012, 16:17   #24
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Дорогой CnpuHTep, вот в той ссылке что я Вам дала как-то загадочно написано по поводу того, как Паскаль реагирует на служебные клавиши (стрелочки это тоже служебные клавиши - клавиши управления). Якобы при первом нажатии он их воспринимает как 0, при повторном нажатии выдает уже код клавиши..... Может, с Тав тоже такая история....
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 12.02.2012, 19:51   #25
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Blondy
Якобы при первом нажатии он их воспринимает как 0, при повторном нажатии выдает уже код клавиши.....
да никаких "ЯКОБЫ". Так и есть. (можете попробовать мой вышеприведённый код, чтобы в этом убедиться!)

Есть клавиши, которые возвращают обычный код (это все буквы, цифры и многие другие). А есть клавиши, которые возвращают РАСШИРЕННЫЙ КОД - это означает, что они генерят ДВА значения - первое нулевое (это признак того, что мы имеем дело с расширенным кодом), а второе значение уже уточняет, что же за клавиша нажата...

с табом, к сожалению, не так. Pascal ABC перехватывает нажатие этой клавиши (почему - не знаю) и не отдаёт код в пользовательскую программу... Да и вообще, повторю ещё раз - это недо-псевдо-компилятор почтиПаскаля..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.02.2012, 21:06   #26
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Сережа, спасибо большое за разъяснение - я не знала таких подробностей. Просто для юноши искала информацию, прочитала - и сама удивилась, подумала, может, это связано с особенностями Паскаля...мы его так в школе прошли, бегом....Я про коды управляющих клавиш из Дельфи узнала.
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 12.02.2012, 23:49   #27
CnpuHTep
Пользователь
 
Регистрация: 11.02.2012
Сообщений: 15
По умолчанию

Если вам интересно, я тогда готовую прогу выложу сюда, если заинтересуетесь)
Она поидее на 3 недели расчитана, но мне кажется у меня она готова будет гораздо раньше)
CnpuHTep вне форума Ответить с цитированием
Старый 13.02.2012, 08:13   #28
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от CnpuHTep
Если вам интересно, я тогда готовую прогу выложу сюда, если заинтересуетесь)
Выкладывайте, конечно.
Во-первых, если там есть глюки/ошибки - Вам, скорее всего, тут на них укажут.
Во-вторых, форум весьма любим и посещаем студентами - возможно, кому-то ваш исходник окажется полезным.


да и вообще, имхо, готовый правильный(работающий) исходник в конце темы - это логичный и красивый финал любой темы!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.05.2012, 23:19   #29
CnpuHTep
Пользователь
 
Регистрация: 11.02.2012
Сообщений: 15
Стрелка Ну вот собственно и итог)

Код:
Program Start;
Uses CRT;
const z=20;
type mas=array[0..z,0..z,0..z] of string;
{--------------------------------procedure---------------рисует ячейкu второго меню------------------------------------------------------------------}
procedure Pm(q{координата х},w{координата у}: integer);

procedure ppn;
var x: integer;
begin
 For x:=1 to 20 do Write(#6);
end;

Begin
 gotoxy(q,w);
 ppn;
 gotoxy(q,(w+2));
 ppn;
 gotoxy((q-1),w);
 Write(#1);
 gotoxy((q-1),(w+1));
 Write(#5);
 gotoxy((q-1),(w+2));
 Write(#3);
 gotoxy((q+20),(w+1));
 Write(#5);
 gotoxy((q+20),(w+2));
 Write(#4);
 gotoxy((q+20),w);
 Write(#2);
end;
{--------------------------------procedure---------------Ячейка "Линии метро"------------------------------------------------------------------}
procedure line(s{название линии}:string);
Begin
 Pm(18,7);
 gotoxy(18,8);
 Write (s);
 gotoxy(80,25);
 end;

{--------------------------------procedure---------------Ячейка "Станции"------------------------------------------------------------------}
procedure stop(var l:mas{массив};i{счетчик линий},j{счетчик станций}: integer);
{"Станции" красивенько}
procedure op(var l:mas{массив};i{счетчик линий},j{счетчик станций}: integer);
begin
 gotoxy(43,8);
 writeln (l[i,j,0]);
end;

Begin
 Pm(43,7);
 op(l,i,j);
 gotoxy(80,25);
end;
{--------------------------------procedure---------------Ячейка "Информация про станцию"------------------------------------------------------------------}
procedure info;

   procedure m(q{координата х},w{координата у}: integer);
  var x: integer;
  begin
   gotoxy(q,w);
   For x:=1 to 35 do Write(#6);
  end;

   procedure p(q{координата х}: integer);
  var x: integer;
  begin
   For x:=1 to 5 do
    Begin
     gotoxy(q,x+12);
     Write(#5);
    end;
  end;

Begin
 m(23,12);
 m(23,18);
 gotoxy(22,12);
 Write(#1);
 p(22);
 gotoxy(22,18);
 Write(#3);
 p(57);
 gotoxy(57,18);
 Write(#4);
 gotoxy(57,12);
 Write(#2);
 gotoxy(80,25);
 end;
{----------------------------------procedure-------------Удаление слов------------------------------------------------------------------}
procedure del1;{Удаление слова в ячейке "Станция"}
begin
 gotoxy(43,8);
 WriteLn('                    ');
end;

procedure del;{Удаление слова в ячейке "Линия"}
begin
 gotoxy(18,8);
 WriteLn('                   ');
end;

procedure del2;{Удаление текста в ячейке "Информация"}
begin
 gotoxy(34,14);
 Writeln ('              ');
 gotoxy(28,15);
 Write ('                        ');
 gotoxy(25,13);
 Writeln ('                                ');
 gotoxy(24,15);
 Writeln ('                       ');
 gotoxy(26,16);
 Writeln ('                               ');
 gotoxy(26,17);
 Writeln ('                               ');
end;
{-----------------------------------procedure------------Ячейки "Маршрут" и "Выход"------------------------------------------------------------------}
procedure OKHA(b{координата у для "Pm"},c{координата у для "d"}: integer; d{слово в центре ячейки}: string);
 begin
  Pm(30,b);
  gotoxy(30,c);
  Write (d);
  gotoxy(80,25);
  end;
{-----------------------------------procedure------------Ячейка "Маршрут"------------------------------------------------------------------}
procedure OKHO1;
Begin
 OKHA(9,10,'      Маршрут       ');
end;
{-------------------------------------procedure----------Ячейка "Выход"------------------------------------------------------------------}
procedure OKHO2;
Begin
 OKHA(14,15,'       Выход        ');
 end;
{---------------------------------procedure-----------Общая рамка----------------------------------------------------------}
procedure g;
 var x: integer;
  begin
   For x:=1 to 49 do Write(#6);
  end;

procedure t(q{координата х}: integer);
 var x: integer;
  begin
   For x:=1 to 14 do
    Begin
     gotoxy(q,x+5);
     Write(#5);
    end;
  end;

procedure PAMKA;
var q: integer;
Begin
 clrscr;
 gotoxy (16,5);
 g;
 gotoxy (16,20);
 g;
 t(65);
 t(15);
 gotoxy(15,5);
 Write(#1);
 gotoxy(65,20);
 Write(#4);
 gotoxy(15,20);
 Write(#3);
 gotoxy(65,5);
 Write(#2);
 end;
{-----------------------------procedure------------------Заполнение окна информации------------------------------------------------------------------}

Последний раз редактировалось CnpuHTep; 15.05.2012 в 23:21.
CnpuHTep вне форума Ответить с цитированием
Старый 15.05.2012, 23:20   #30
CnpuHTep
Пользователь
 
Регистрация: 11.02.2012
Сообщений: 15
Стрелка 2-ая часть)

Код:
procedure infa(l{массив}:mas; i{номер линии},j{номер станции}: integer);
    begin
     del2;
     If i>3 then
   begin
    l[i,1,3]:='Маршрутка: 666м';
    l[i,1,4]:='Троллейбус: Б(черный)';
   end;
   gotoxy(24,15);
     Writeln ('Рядом останавливаются: ');
     gotoxy(25,13);
     Writeln (l[i,j,2]);
     gotoxy(26,16);
     Writeln (l[i,j,3]);
     gotoxy(26,17);
     Writeln (l[i,j,4]);
     gotoxy(80,25);
    end;
 {------------------------------------procedure--------Выделение----------------------------------------------------------}
procedure v1;{окошко "маршрут"}
 begin
  textbackground(green);
  OKHO1;
  textbackground(white);
  OKHO2;
 end;

procedure v2(var l:mas{массив};i{счетчик линии},j{счетчик станций}: integer);{окошко "станция"}
 begin
  textbackground(green);
  stop(l,i,j);
  textbackground(white);
  line(l[i,0,0]);
  infa(l,i,j);
 end;

 procedure v3(var l:mas{массив}; i{счетчик линий},j{счетчик станций}: integer);{окошко "линия"}
 begin
  textbackground(green);
  line(l[i,0,0]);
  textbackground(white);
  stop(l,i,j);
 end;
 {----------------------------procedure-------------------Перемещение между станциями ------------------------------------------------------------------}
procedure opana(var l:mas{массив};var j{счетчик станций},a{номер ячейки(1 - "линии",2 - "станции"},i{счетчик линий}: integer; k:char{считывает кнопку});
begin
 if (k=#72) and (a=2) and (i=1) or (i=2) and (k=#72) and (a=2) then{кольцевой и каховской линий}
  begin
   j:=j+1;
   if j>3 then j:=1;
   v2(l,i,j);
  end;
 if (k=#80) and (a=2) and (i=1) or (i=2) and (k=#80) and (a=2) then{кольцевой и каховской линий}
  begin
   j:=j-1;
   if j<1 then j:=3;
   v2(l,i,j);
  end;
 if (k=#72) and (a=2) and (i=3) then{филёвской линии}
  begin
   j:=j+1;
   if j>4 then j:=1;
   v2(l,i,j);
  end;
 if (k=#80) and (a=2) and (i=3) then{филёвской линии}
  begin
   j:=j-1;
   if j<1 then j:=4;
   v2(l,i,j);
  end;
end;
{------------------------------------procedure--------Mеню----------------------------------------------------------}
 procedure menu(var k:char{считывает кнопку}; var a1:integer{номер ячейки(1 - "маршрут", 2 - "выход"});
 begin
  PAMKA;
  v1;
 a1:=1;
{-----------------------------------------------Перемещение между ячейками------------------------------------------------------------------}
  repeat
   k:=readkey;
  if k=#72 then
   begin
    a1:=1;
    v1;
   end;
  if (k=#80) then
   begin
    a1:=2;
    textbackground(green);
    OKHO2;
    textbackground(white);
    OKHO1;
   end;
   until k=#13{Enter};
   end;
 {-------------------------------procedure-------------Menu2----------------------------------------------------------}
 procedure menu2(var l:mas{массив};var k:char{считывает кнопку});
   var i{счетчик линий},j{счетчик станций},a: integer;
 begin
  Begin
       i:=1;{номер линий}
       j:=1;{номер станции}
       a:=1;{номер ячейки(1-маршрут,2-выход}
       PAMKA;{Основная рамка}
       textbackground(green);
       line(l[i,0,0]);{Ячейка - Линии} {Каховская - Кольцевая - Филёвская}
       textbackground(white);
       stop(l,i,j);{Ячейка - Станции} {Каховская - Варшавская- Каширская; Таганская-Киевская-Курская; Фили-Арбатская-Смоленская-Пионерская}
       info;{Информация рамка}
       infa(l,i,j);
        gotoxy(17,23);
        write('Для выхода в главное меню - нажмите "Backspace"');
        gotoxy(25,6);
        WriteLn('Линия');
        gotoxy(49,6);
        WriteLn('Станция');
    {-----------------------------------------------Перемещение между ячейками------------------------------------------------------------------}
       repeat
        k:=readkey;
        if k=#77 then
         begin
          a:=1;
          v3(l,i,j);
         end;
         if (k=#75) then
          begin
           a:=2;
           v2(l,i,j);
           end;
         {-----------------------------------------------Перемещение между линиями------------------------------------------------------------------}
          if (k=#72) and (a=1) then
            begin
             del2;
             j:=1;
             i:=i+1;
             if i>10 then i:=1;
             v3(l,i,j);
             infa(l,i,j);
             gotoxy(80,25);
            end;
           if (k=#80) and (a=1) then
              begin
             del2;
             j:=1;
             i:=i-1;
             if i<1 then i:=10;
             v3(l,i,j);
             infa(l,i,j);
             gotoxy(80,25);
            end;
              opana(l,j,a,i,k);
              until k=#8;
            end;
 end;
CnpuHTep вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно исправить ошибки!Pascal ABC Очень надо! Metanoia Помощь студентам 1 13.07.2011 13:36
Получить строку символов из строки их кодов Baaandit Общие вопросы Delphi 3 10.11.2009 15:43
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) Farridjan Помощь студентам 1 03.07.2009 12:24
Очень сложная задача на Pascal ABC! d00ker Помощь студентам 8 11.02.2009 22:02
Очень нужна помощь в переводе символов в ASCII и обратно !!!~VivO~!!! Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 05.05.2008 10:47