Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2018, 01:29   #1
hamaha
 
Регистрация: 26.11.2018
Сообщений: 3
Печаль Происходит переполнение стека при реализации функции, которая ищет количество слов в строке вне зависимости от количества пробелов между ними.

Не знаю почему происходит переполнение стека, помогите братья
Функция ищет количество слов в строке вне зависимости от количества пробелов между ними
var s:string;

Код:
function Count_word(s:string):byte;
var
i:byte;
k: byte;
begin
   i:=1;k:=0; 
   while i<>length(s) do begin
      if s[i]=' ' then 
       inc(i)  
      else begin
         while (s[i]<>' ') and (i<>length(s)) do
            inc(i);
         inc(k);
      end;
   end;
   k:=Count_word(s);                       
end;
 
begin
   write('Write s:');
   readln(s);
   write(Count_word(s));
end.
Пожалуйста, оформляйте Ваш код согласно правилам.

Последний раз редактировалось Вадим Мошев; 26.11.2018 в 11:59.
hamaha вне форума Ответить с цитированием
Старый 26.11.2018, 02:19   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Потому что вы бесконечно вызываете функцию.
p51x вне форума Ответить с цитированием
Старый 26.11.2018, 02:52   #3
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Да, рекурсивно - вот тут.
Цитата:
Сообщение от hamaha Посмотреть сообщение
k:=Count_word(s);
Наверное, надо наоборот :
Код:
Count_word:=k;
type_Oleg вне форума Ответить с цитированием
Старый 26.11.2018, 12:10   #4
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Функцию вычисления количества слов не смотрел, но могу предложить свой вариант:
Код:
function getWordsNumber(const s: string): integer;
var
  i:   integer;
  res: integer;
  lng: integer;
begin
  lng:=length(s);

  if s[lng] = ' ' then begin
    res:=0;
  end else begin
    res:=1;
  end;

  for i:=1 to lng - 1 do begin
    if (s[i] <> ' ') AND (s[i+1] = ' ') then begin
      inc(res)
    end;
  end;

  getWordsNumber:=res;
end;
Вадим Мошев вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
аписать подпрограмму, которая считает количество слов в строке и AVIM Lazarus, Free Pascal, CodeTyphon 3 03.12.2015 15:20
Требуется написать подпрограмму, которая считает количество слов в строке. Использовать в программе для обработки текстового файла AVIM Паскаль, Turbo Pascal, PascalABC.NET 0 06.11.2015 15:39
Переполнение стека при вращении PNG grominfo Мультимедиа в Delphi 0 05.02.2015 19:39
Переполнение стека при рекурсии (в бинарном дереве) LordJohn Помощь студентам 0 11.11.2012 18:28
переполнение стека при создании сообщений Miller-1981 Общие вопросы C/C++ 0 24.01.2011 10:49