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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 10.02.2013, 13:45   #1
Kot070
Форумчанин
 
Регистрация: 22.12.2012
Сообщений: 139
По умолчанию Исправте если не сложно

Помогите с решением.
Вводить символы с клавиатуры. Присвоить логической переменной L значение ‘true’, если выполняются указанные условия, и значение ‘false’ иначе:
значением L является символ '*';
значением L является символ 'а';
значением L является цифра..
Вводимые символы и значение L выводить на экран монитора. Ввод символов продолжать до нажатия клавиши ‘Del’ на дополнительной клавиатуре.
Код:
program pr1;
uses crt;
var L: char;
begin clrscr;
if l='*' and l='a' and l='0..9'
 then 
    readln('l=tue');
   else 
       readln('l=false');
begin l:= readkey;
        if l = #061  then begin
                break end
   end
end;
readkey
end.

Последний раз редактировалось Stilet; 10.02.2013 в 17:48.
Kot070 вне форума
Старый 10.02.2013, 15:17   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

[psychic mode on]
Код:
var
   ch : Char;
   l : Boolean;

begin
   ReadLn (ch);
   l := (ch = '*') or (ch = 'a') or (ch in [0..9]);
   WriteLn (l)
end.
[psychic mode off]
Poma][a вне форума
Старый 10.02.2013, 15:42   #3
Kot070
Форумчанин
 
Регистрация: 22.12.2012
Сообщений: 139
По умолчанию

а как же закрытие программы при нажатии клавиши del?
Kot070 вне форума
Старый 10.02.2013, 15:50   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Точняк! До меня дошло!!
Теперь осталось придумать красивый способ реализации без лишних переменных..
Poma][a вне форума
Старый 10.02.2013, 16:40   #5
Kot070
Форумчанин
 
Регистрация: 22.12.2012
Сообщений: 139
По умолчанию

а разве так можно? надо ведь еще одну переменную которая будет ловить код клавиши дел а именно 046 и по этому коду закрывать
Kot070 вне форума
Старый 10.02.2013, 17:34   #6
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
а разве так можно? надо ведь еще одну переменную которая будет ловить код клавиши дел а именно 046 и по этому коду закрывать
Это отдельная песня.. Я думаю как нам сделать проверку в цикле без лишних переменных и по-красивее..
В дельфи (а может и во free) есть Булевские типы данных (не просто Boolean), можно там попробовать.. А можно что-нить придумать с Byte..
Мне больше нравится химичить с байтом, НО опять же ради спортивного интереса хочется найти формулу, а не использовать case of \ if then..
Poma][a вне форума
Старый 10.02.2013, 17:50   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
var
   ch : Char;
begin
repeat
   ch:=readkey;
   WriteLn((ch in ['0'..'9','*','a','A']));
until ch=46;
end.
Подходит?

P.S. Чуть оптимизировал...
I'm learning to live...

Последний раз редактировалось Stilet; 10.02.2013 в 17:52.
Stilet вне форума
Старый 10.02.2013, 17:53   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Подходит?
Я дак думаю, что нет..
Код:
repeat
   ch:=readkey;
   if ch = '*' then
       Inc (a)
   else if ch = 'a' then
       Inc (b)
   else if ch in ['0'..'9'] then
       Inc (c);
until ch=46;

   l := (a>0) and (b>0) and (c>0);
   WriteLn (l)
Но хочется красоты..

Код:
begin
r := 0;
repeat
   ch:=readkey;
   r := (r<200)*(-100)+r + Ord(ch='*')*100 + Ord(ch='a')*10 + Ord(ch in ['0'..'9']);
until ch=46;
WriteLn (r>=111)
end.
Не проверял, но должно работать, и я доволен

Последний раз редактировалось Poma][a; 10.02.2013 в 18:03.
Poma][a вне форума
Старый 10.02.2013, 18:01   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Мдя... С каждым годом задачи все больше выходят за пределы мироздания...
Ладно. Пусть автор решает. Как ты вариантную запись не пришлось использовать для решения.
I'm learning to live...
Stilet вне форума
Старый 10.02.2013, 19:02   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, тогда я и свой вариант скину:
Код:
uses Crt;
var ch: char;
  l, isDelPressed: boolean;
begin
  isDelPressed := false;
  repeat
    ch := readkey;
    if ch = #0 then begin
      ch := readkey;
      if ch = #83 then isDelPressed := true;

    end
    else begin
      l := (ch = '*') or (ch = 'a') or (ch in ['0'..'9']);
      WriteLn('You press key:', ch, '  L = ', l);
    end
  until isDelPressed;
  WriteLn('Your press DEL. for quit press any key...');
  readkey;
end.
Serge_Bliznykov вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найдите ошибку если не сложно Alex0161 Общие вопросы C/C++ 4 19.12.2011 00:14
найдите ошибку если не сложно Ольга790 Общие вопросы C/C++ 3 18.12.2011 16:11
Если не сложно Vladimir Ryabov Паскаль, Turbo Pascal, PascalABC.NET 1 27.11.2011 15:07
Исправте у меня пожалуйста если не правильно......... karazmik Общие вопросы C/C++ 2 19.12.2009 23:25