![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Lauri |
![]()
Сообщение
#1
|
Гость ![]() |
Люди, помогите плиз, скажите - как обозначить формат вводимых данных? (мне надо сделать так, чтобы можно было ввести только цифры, а при введении букв выводилось сообщение об ошибке) может надо использовать a:string, а потом работать со строкой? или case? Вот моя программа (для перевода чисел из десятичной системы в троично-симметричную)...
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата (мне надо сделать так, чтобы можно было ввести только цифры, а при введении букв выводилось сообщение об ошибке) Цифры или числа?Для чисел уже выкладывалось... Цикл Repeat, поиском пользуйся... |
Lauri |
![]()
Сообщение
#3
|
Гость ![]() |
В этом примере рассматриваются только числовые значения от 0 до 365, а мне надо как-то обозначить английский алфавит от A до Z и сделать так, чтобы когда вводишь "456FR3" или "FGHFGH" выводилось сообщ. об ошибке, а обычные числа ( от -999999999 до 999999999) проходили процедуру дальнейшей обработки... причём я пытался использовать repeat, но там и так есть repeat и совместное использование двух операторов негативно сказывается на работе программы... (она ничего не пересчитывает).. вообще не знаю что делать...((
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата а мне надо как-то обозначить английский алфавит от A до Z и сделать так, чтобы когда вводишь "456FR3" или "FGHFGH" выводилось сообщ. об ошибке, а обычные числа ( от -999999999 до 999999999) проходили процедуру дальнейшей обработки... ![]() varСамому нельзя было догадаться |
Shura |
![]()
Сообщение
#5
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 136 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
А вот, если что, процедура, которая осуществляет ввод значения (от -999999999 до 999999999) в глобальную переменную, и не дает пользователю даже ввести некорректные данные. Требует модуль Crt (используется функция ReadKey).
Код Program Vvod; Uses Crt; Var a: LongInt; Procedure GetNumber(var a: LongInt); var s: String; ch: Char; error: Integer; begin s:=''; repeat ch:=ReadKey; case ord(ch) of 45: if s = '' then begin s:='-'; Write('-') end; 48..57: if (length(s) - Pos('-',s) < 9) then begin s:=s+ch; Write(ch) end; 8: begin GotoXY(WhereX-1,WhereY); Write(' '); GotoXY(WhereX-1,WhereY); Delete(s,length(s),1) end end {case} until (ch = #13); Val(s,a,error) end; {****************************************************************************} Begin ClrScr; GetNumber(a); WriteLn; WriteLn('Vvedeno chislo: ', a); ReadLn End. -------------------- Старайтесь восполнять пробелы в области незнания! ;-D
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
GotoXY(WhereX-1,WhereY); ![]() Write(#8#32#8); |
Shura |
![]()
Сообщение
#7
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 136 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
![]() -------------------- Старайтесь восполнять пробелы в области незнания! ;-D
|
Lauri |
![]() ![]()
Сообщение
#8
|
Гость ![]() |
Но как же совместить эту процедуру с моей программой?.. Мои попытки заканчивались тем, что введя цифры, получалась пустая строка, а далее - обычный ход программы...
А вариант, предложенный Volvo работает у меня некорректно, я грешу на то, что используется repeаt внутри repeat... А вот если так, к примеру: Код writeln ('Введите число'); readln (a); readln (s); или writeln ('Введите число'); readln (a,s); Так вообще можно делать? Первый вариант - получается что сначала считывается a, а потом только b, а мне надо так, чтобы ОДНО число проверялось и оно же считалось... Помоги, пожалуйста, для меня это очень важно, вопрос буквально жизни и смерти! З.Ы. Тока не смейтесь плиззз, да, я ламер в этом деле... надеюсь что в скором будущем перестану им ыть ![]() |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Цитата А вариант, предложенный Volvo работает у меня некорректно Полностью ВСЮ свою программу приведи (не кусками, а всю)... И заодно, те данные которые ты вводишь, и ЧТО ТЫ ХОЧЕШЬ ПОЛУЧИТЬ... Сказать "не получается" или "некорректно" очень просто, ты ДОКАЖИ, что это действительно некорректно... |
Lauri |
![]()
Сообщение
#10
|
Гость ![]() |
Код Program perevod; uses crt; var a,err:integer; d,i:byte; mas:array [0..10] of shortint; ok,f,g:boolean; s:string; k:longint; Begin clrscr; repeat writeln ('Vvedite chislo: Exit - press 0'); readln (s); ok:=(ioresult=0); val (s,k,err); ok:= ok and (err=0) and (length(s)<11) and ((k>=-99999999) and (k<=9999999)); if not ok then writeln ('error!!!'); until ok; repeat readln(a); if (a<0) then g:=false else g:=true; d:=0; if (a=0) then halt; repeat i:=0; dec(a); repeat f:=true; inc(mas[i]); if (mas[i]=2) then begin mas[i]:=-1; inc(i); if (d<i) then d:=i; f:=false; end; until f; until (a=0); for i:=d downto 0 do begin if g then write(mas[i]) else write(-mas[i]); mas[i]:=0; end; writeln; until (1<>1); end. Вот так, как я понял... но первый цикл кончается и начинается следующий, который уже выполняет дальнейшие действия (readln(a) - считывается уже другое число, а не то, которое проверялось)... Ввожу "45" - пустая строка, ввожу 45 - 1-1-100 ... ![]() |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Нет, не так... Вот так я имел в виду вводить числа:
Program perevod;Вот ... Проверь. |
Гость |
![]()
Сообщение
#12
|
Гость ![]() |
Спасибо ОГРОМНОЕ, теперь всё работает как надо! ))
Как хорошо что есть ещё добрые люди! Не знаю как отблагодарить! =) |
![]() ![]() |
![]() |
Текстовая версия | 12.08.2025 13:06 |