Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ ЗАДАЧА ПРО ФУнкцию..

Автор: RAPON 12.05.2007 11:25

ТАКАЯ ЗАДАЧА:
Написать функцию, обеспечивающую ввод с клавиатуры положительного двухзначного числа. При нажатии пользователем какой-либо клавиши соответствующей ей символ должен появляться на экране только в том случае, если этот символ является цифрой. Функция должна позволять пользователю редактировать введенное число при помощи клавиши <BackSpace>. Если пользователь ввел хотя бы одну цифру, то при нажатии клавиши <Enter> функция должна завершать работу и возвращать введенное пользователем число вызвавшей ее процедуре.
ПОЖАЛУЙСТА ПОМОГИТЕ ,напишите программу...ИЛИ хотя бы обьясните суть задачи..А то я чето так и не понял всей сути задачи..ПОМОГИТЕ!!!

Автор: Ozzя 12.05.2007 11:43

http://forum.pascal.net.ru/index.php?showtopic=16601&hl=

Автор: AAAAAAA 12.05.2007 13:03

Помоги разработать программу а то мне надо курасач по этой задаче в ближ дни сдавать а времени на разбор задачи нет! sad.gif

Автор: Lapp 12.05.2007 13:40

Цитата(AAAAAAA @ 12.05.2007 10:03) *

времени на разбор задачи нет! sad.gif

Нет времени?.. А у нас всех его, конечно, навалом..
Помочь - поможем. Что конкретно не ясно? Говори, спрашивай.
Решать за тебя не будем

 ! 
Правила, п. 1.10: На Форуме запрещается регистрировать несколько профилей.
Профиль AAAAAAA удаляю.
Пользователь RAPON получает повышение уровня предупреждений.


Автор: RAPON 12.05.2007 13:53

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

Добавлено через 2 мин.
В суть задачи вникнуться не могу может кто обьяснит?

Автор: Lapp 12.05.2007 13:57

Цитата(RAPON @ 12.05.2007 10:53) *

если бы у вас форум не глючил при цитате сообщух , я бы не регал второго пользователя

Хорошо, объяснение принимается, вопрос закрыт. Я снимаю предупреждение.

По поводу глюков - пиши в раздел Книга Жалоб и Предложений.

Добавлено через 6 мин.
Цитата(RAPON @ 12.05.2007 10:53) *

В суть задачи вникнуться не могу может кто обьяснит?

Ты сам хоть что-то пытался начинать? пробовал? Если да, покажи, что есть.
Если нет - пробуй..

Автор: мисс_граффити 12.05.2007 15:05

Смысл такой:
1. Если пользователь нажал цифру - отображаем ее на экране.
2. Если пользователь нажал BackSpase, затираем последний символ.
3. Если пользователь нажал Enter, возвращаем введенное число.
4. Иначе ничего не делаем.

Автор: RAPON 13.05.2007 4:15

А как проверить пользователь цифру нажал ли символ?Затем на экране отобразить?

Автор: RAPON 13.05.2007 16:07

Может мне кто нибудь ответит?1

Автор: мисс_граффити 14.05.2007 5:26

может быть.

if ch in ['1'..'9'] then
{это значит, что он ввел цифру}

вообще лучше через case - вариантов-то у нас много.
как работать со спецсимволами (BackSpase, например) - поищи по форуму, было совсем недавно.

Автор: Lapp 14.05.2007 8:58

мисс_граффити, почто ноль не в фаворе? smile.gif
Да, лучше воспользоваться case. Типа так:

case c in
'0'..'9': begin
Write©;
s:=s+c;
end;
#8: if Length(s)>0 then begin
Write(#8,' ',#8);
Delete(s,Length(s),1)
end;
#13: if Length(s)>0 then begin
WriteLn;
Val(s,x,e)
end;

Автор: RAPON 14.05.2007 14:18

СПАСИБО,вечером попробую,че непонятно потом спрошу.

Автор: RAPON 15.05.2007 2:06

Цитата(Lapp @ 14.05.2007 5:58) *

мисс_граффити, почто ноль не в фаворе? smile.gif
Да, лучше воспользоваться case. Типа так:
case c in
'0'..'9': begin
Write©;
s:=s+c;
end;
#8: if Length(s)>0 then begin
Write(#8,' ',#8);
Delete(s,Length(s),1)
end;
#13: if Length(s)>0 then begin
WriteLn;
Val(s,x,e)
end;


Что делает эта часть программы ?можно узнать,точно?

Автор: мисс_граффити 15.05.2007 2:22

Цитата
мисс_граффити, почто ноль не в фаворе?

blink.gif не знаю. сказывается делание лабораторок по матстатистике.

Автор: Lapp 15.05.2007 2:27

Цитата(RAPON @ 14.05.2007 23:06) *

Что делает эта часть программы ?можно узнать,точно?

Да, конечно.
Это:
1. распознавание введенного символа (переменная c), а также
2. реакция на этот символ (если цфра - добавляем к вводимой строке, если энтер - переводим строку в число, если бакспейс - удаляем символ и переходим на одну позицию вперед, остальные символы игнорируем).

Это как бы центральная часть программы. Теперь нужно организовать цикл с опросом клавиатуры и вводом символа. Выход из цикла по признаку c=#13

Автор: RAPON 15.05.2007 3:52

Цитата(Lapp @ 14.05.2007 23:27) *

Да, конечно.
Это:
1. распознавание введенного символа (переменная c), а также
2. реакция на этот символ (если цфра - добавляем к вводимой строке, если энтер - переводим строку в число, если бакспейс - удаляем символ и переходим на одну позицию вперед, остальные символы игнорируем).

Это как бы центральная часть программы. Теперь нужно организовать цикл с опросом клавиатуры и вводом символа. Выход из цикла по признаку c=#13

А переменную C нужно описать CHAR?
а эта часть это и есть уже один опрос,да?

Автор: RAPON 15.05.2007 4:13

если CHAR могу заранее сказать что ,после "0".. у меня ошибку 41 пишет,а понять не могу че просит у меня буквы там непонятные..

Автор: RAPON 15.05.2007 4:59

а сase почему in стоит?вроде же только of может стоять..
а здесь readkey надо будет использовать?

Автор: Lapp 15.05.2007 6:14

Цитата(RAPON @ 15.05.2007 1:13) *

после "0".. у меня ошибку 41 пишет

Я извиняюсь, описка произошла: вместо "in" поставь "of". Глупейшая ошибка, извини..

Для того, чтоб понимать ошибки по номерам (и для многих других полезных целей), скачай вот это:
http://download.excode.ru/download277.html

И если будут вопросы - приводи текст программы.
Успехов!

Автор: RAPON 16.05.2007 2:33

М
Теги !


СПАСИБО БОЛЬШОЕ ЗА ПОМОЩЬ!!!Вот моя задача!

Uses crt;
Var c:char;
S:string;
X,e:integer;
Function far(l:byte):integer;
Label 1,2;
Begin
1:c:=readkey;
case c of
‘0’..’9’:begin
write©;
s:=s+c;
goto 1;
end;
#8:if length(s)>0 then begin
write(#8,’ ‘,#8);
delete(s,length(s),1);
goto 1;
end;
#13:begin
if length(s)>0 then begin
writekn;
val(s,x,e);
goto 2;
end;
goto 1;
end;
else goto 1
end;
2:far:=x;
end;
begin
far(1);
readln
end.