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

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

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

> Рекурсия, Не могу понять ошибку?!?!?!?
сообщение
Сообщение #1





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

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


ЛЮди!!!!!
Помогите пожалуйста разобраться:
Надо было написать программу, которая при помощи рекурсивной функции
digits определить количество цифр в заданном текстовом файле.
(Заранее надо создать в папке с прогой файл Text.txt)
Не могу понять, где ошибка(выдает результат около 42000)


program recursiya;
uses crt;
const max=10000;
type txt=text;
chr=char;
mas=array[1..max] of chr;
zn =0..max;
col=1..16;
var in_text:txt;
m_char :mas;
i,s,k :zn;
n_char:zn;
set_dig:set of '0'..'9';

procedure C(color:col);
begin
TextColor(color);
end;

function Digits(s:zn):zn;
begin
if n_char>1 then
begin
n_char:=n_char-1;
if m_char[n_char] in set_dig then
begin
Digits:=1+Digits(n_char);
end
else
begin
Digits:=Digits(n_char);
end;
end;
end;

begin
ClrScr;
set_dig:=['1'..'9'];
Assign(in_text,'Text.txt');
Reset (in_text);
i:=1;
While not EOF(in_text) do
begin
Read(in_text,m_char[i]);
C(12);
Inc(i,1);
n_char:=i;
end;
WriteLn(Digits(n_char));
readkey;
end.



Когда max например равно 10, значение функции уменьшается.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






TR@N,
разве так пишется рекурсия? blink.gif
Смысл тогда от нее какой?

Вообще-то это вот так делается:
program recursiya;
uses crt;
type txt=text;
var in_text:txt;

function Digits(var f: text): integer;
var ch: char;
begin
if eof(f) then digits := 0
else begin
read(f, ch);
Digits := byte(ch in ['0' .. '9']) + Digits(f)
end;
end;

begin
ClrScr;
Assign(in_text,'Text.txt');
Reset (in_text);

writeln(digits(in_text));

close(in_text);
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





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

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


Большое спасибо! Очень благодарен, просто впервые с ней столкнулся и плохо разобрался
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

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

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


Volvo,
нихорошо нерабочий код писать.

Если я правильно понял задачу то:
вообще-то это вот так делается:


Program recursiya;
Uses Crt;
Var F:Text;

Function Digits:Integer;
Var c:Char;
Begin
Digits:=0;
While Not EOF(F) Do
Begin
Read(F,c);
If c in ['0'..'9'] Then Digits:=Digits+1;
End;
End;

Begin
ClrScr;
Assign(F,'text.txt');
Reset(F);
WriteLn(Digits);
Close(F);
ReadKey;
End.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 





- Текстовая версия 7.09.2025 8:47
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name