IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Как обозначить цифры?, Помогите плиз решить вопрос!
Lauri
сообщение 8.01.2006 10:55
Сообщение #1


Гость






Люди, помогите плиз, скажите - как обозначить формат вводимых данных? (мне надо сделать так, чтобы можно было ввести только цифры, а при введении букв выводилось сообщение об ошибке) может надо использовать a:string, а потом работать со строкой? или case? Вот моя программа (для перевода чисел из десятичной системы в троично-симметричную)...


Program perevod;
uses crt;
var a:integer;
d,i:byte;
mas:array [0..10] of shortint;
f,g:boolean;

Begin
clrscr;
writeln ('Vvedite chislo: Exit - press 0');
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.

 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Shura
сообщение 9.01.2006 16:52
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 136
Пол: Мужской
Реальное имя: Александр

Репутация: -  -2  +


А вот, если что, процедура, которая осуществляет ввод значения (от -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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lauri
сообщение 10.01.2006 20:38
Сообщение #3


Гость






Но как же совместить эту процедуру с моей программой?.. Мои попытки заканчивались тем, что введя цифры, получалась пустая строка, а далее - обычный ход программы...
А вариант, предложенный Volvo работает у меня некорректно, я грешу на то, что используется repeаt внутри repeat...
А вот если так, к примеру:

Код

writeln ('Введите число');
readln (a); readln (s);

или

writeln ('Введите число');
readln (a,s);


Так вообще можно делать? Первый вариант - получается что сначала считывается a, а потом только b, а мне надо так, чтобы ОДНО число проверялось и оно же считалось...

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

З.Ы. Тока не смейтесь плиззз, да, я ламер в этом деле... надеюсь что в скором будущем перестану им ытьsmile.gif
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 9.10.2025 7:44
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"