Форум программистов, компьютерный форум, киберфорум
Наши страницы
Free Pascal
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.71/14: Рейтинг темы: голосов - 14, средняя оценка - 4.71
SorryItsGg
0 / 0 / 0
Регистрация: 30.08.2009
Сообщений: 11
1

Рекурсия, определение правильности ввода числа.

30.08.2009, 23:04. Просмотров 2513. Ответов 22
Метки нет (Все метки)

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

вот мои наброски...

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
uses crt;
var s:string;
code:integer;
w:real;
begin
writeln('Vvedite 4islo');
readln(s);
while pos('',s)<>0 do delete (s,pos('',s),1);
Val(s,w,code);
If code=0 then writeln('TRUE: ',s) else writeln('FALSE: ',s);
writeln('stroka');
readln(s);
end.
помогите пожалуйсто сделать рекурсивную функцию.....
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2009, 23:04
Ответы с готовыми решениями:

Функция проверки правильности ввода
мне нужна функция проверяющая правильность ввода данных с клавиатуры...

Программа проверки правильности ввода даты
Здравствуйте! Помогите составить программу Программа проверки правильности...

Программа проверки правильности ввода автомобильного номера
Опять взываю к высшим.Прошу помочь.Задача звучит так:Автомобильные номера...

Рекурсия - определение сопротивления между клеммами

Рекурсия: определение максимума из двух чисел
Добрый день или вечер! Помогите разобраться в задаче на рекурсию. Не пойму,...

22
TAVulator
Эксперт Pascal/Delphi
3985 / 1133 / 174
Регистрация: 27.07.2009
Сообщений: 3,533
01.09.2009, 08:47 21
Цитата Сообщение от Puporev Посмотреть сообщение
Просто код написанный для Турбо, компилируется в Фрее, наоборот-нет.
хмм... во Free Pascal у меня постоянно проблема с динамическими массивами. Они там как-то не хотят работать, а в Турбо работают )))

Добавлено через 50 секунд
под динамическим массивом имею ввиду указатель на массив array[1..1] of ...
0
Puporev
Модератор
55401 / 42537 / 29390
Регистрация: 18.05.2008
Сообщений: 100,603
01.09.2009, 08:57 22
Вот здесь есть вещи, несовместимые в Турбо и Фрее, но про такие массивы что-то там не нашел.
http://freepascal.ru/wiki/index.php?...7_Turbo_Pascal
Вообще, по-моему, это единственное боле-менее приличное руководство по Фрее.
http://freepascal.ru/wiki/index.php?...BE%D0%B4%D1%8B
0
Puporev
Модератор
55401 / 42537 / 29390
Регистрация: 18.05.2008
Сообщений: 100,603
01.09.2009, 16:36 23
Поборол свою природную лень и написал эту программу. Не нашел четкого ответа про ведущие ноли, оставил как правильное, тем более Турбо Паскаль их воспринимает нормально, выражения типа 0002*0003 считает.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
uses crt;
function Prav_C(st:string;k:byte):boolean;{определение правильного целого числа - рекурсия}
begin
if st='' then Prav_C:=false
else
 begin
  if not (st[k] in ['0'..'9'])then Prav_C:=false{ведущие ноли считаем правильно}
  else if k<length(st) then Prav_C:=Prav_C(st,k+1);
 end;
end;
 
function Prav_FT(st:string):boolean;{определение правильного вещественного с фиксированной точкой}
var s1,s2:string;
begin
s1:=copy(st,1,pos('.',st)-1);{до точки - целое}
s2:=copy(st,pos('.',st)+1,255);{после точки - целое}
if Prav_C(s1,1)and Prav_C(s2,1) then Prav_FT:=true
else Prav_FT:=false;
end;
 
function Prav_PT(st:string):boolean;{проверка вещественного с плавающей точкой}
var s1,s2:string;
begin
 if (pos('E',st)<pos('.',st)){если точка дальше Е}
  or not (st[pos('E',st)+1] in ['+','-']){или после Е нет знака + или -}
   then Prav_PT:=false
 else
  begin
   s1:=copy(st,1,pos('E',st)-1);{число до Е}
   s2:=copy(st,pos('E',st)+2,255);{число после знака + или -}
   if Prav_FT(s1)and Prav_C(s2,1) then Prav_PT:=true{первое вещественное с фикс. точкой, второе-целое}
   else Prav_PT:=false;
  end;
end;
function Prav_CH(st:string):boolean;{основная функция проверки числа}
begin
if (pos('E',st)=0)and(pos('.',st)=0)then {не вещественное, проверяем на целое}
 if Prav_C(st,1) then Prav_CH:=true
 else Prav_CH:=false
else if (pos('E',st)=0)and(pos('.',st)>0)then{может быть вещественным с фиксированной точкой}
 if Prav_FT(st)then Prav_CH:=true
 else Prav_CH:=false
else if(pos('E',st)>0)and(pos('.',st)>0) then{с плавающей точкой}
 if Prav_PT(st)then Prav_CH:=true
 else Prav_CH:=false;
end;
 
var c:char;
    s:string;
begin
clrscr;
writeln('Vvedite chislo, окончание ввода Enther:');
s:='';{пустая строка}
repeat
c:=readkey;{читаем символ}
write(c);
s:=s+c;{добавляем в строку}
until c=#13;{Enter, конец}
delete(s,length(s),1);{удалим символ #13}
writeln;
if s[1] in ['-'] then delete(s,1,1);{если первый символ минус, все нормально, удалим его}
if Prav_CH(s)then write('Это число!')
else write('Это не число!');
readln
end.
Добавлено через 1 минуту
Кстати забыл, надо в начале программы пробежаться по строке и заменить маленькие символы е на большие.
1
01.09.2009, 16:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2009, 16:36

Рекурсия: определение максимального элемента вектора
Помогите решить задачи на тему рекурсия Без использования циклов 1.const...

Определение минимального и максимального значений во время ввода данных
Известны расстояния от Москвы до нескольких городов. Найти расстояние от...

Рекурсия - числа Фибоначчи
Вычисление n -го чмсла фибоначчи, исходя из реккурентного определения этих...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru