Помощь - Поиск - Пользователи - Календарь
Полная версия: Error 202
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
kent
Столкнулся вот с такой ошибкой (что то со стеком)...

Вот задача:
Дана строка, состоящая из русских слов, разделенных пробелами (одним или
несколькими). Определить длину самого короткого|длинного слова.

Вот код:

uses crt;
type
TWords = Array [1..100] of String;

{-----------------------------------------------------}
Procedure GetWords(S : String; var mas : TWords; var count : Integer);
var i,j : Integer;
begin
i := 0;
for j := 1 to Length(S) do begin
if (j = 1) and (S[j] <> ' ') then
inc(i)
else if (j < Length(S)) and (S[j] = ' ') and (S[j + 1] <> ' ') then
inc(i);
if (S[j] <> ' ') then
mas[i] := mas[i] + S[j];
end;
count := i;
end;
{-----------------------------------------------------}

{-----------------------------------------------------}
Function LengthShortestWord(S: String) : Integer;
var i,count : Integer;
min : Integer;
mas : TWords;
begin
min := Maxint;
GetWords(S,mas,count);
for i := 1 to count do
if (Length(mas[i]) < min) then
min := Length(mas[i]);
LengthShortestWord := min;
end;
{-----------------------------------------------------}


var S : String;
begin
Clrscr;
WriteLn('Input String:');
ReadLn(S);
WriteLn('Length Shortest Word:');
WriteLn(LengthShortestWord(S));
ReadKey;
end.


Почему она возникает?
klem4
Переполнение стека ... при какой строке у тебя выдает ошибку ?
Malice
Цитата(kent @ 15.08.05 12:01)
Столкнулся  вот с такой ошибкой (что то со стеком)...


Не знаю, что здесь со стеком, но массив "mas : TWords;" перед использованием лучше обнулить, там могут оказаться совсем не пустые строки. А стек прибавь, на всякий случай.
klem4
Еще я думаю массив mas лучше объявить глобально перед описанием подпрограмм
kent
Цитата(klem4 @ 15.08.05 13:15)
Еще я думаю массив mas лучше объявить глобально перед  описанием подпрограмм


Точно, после того как объявил глобально, все заработало без ошибок...
Спасибо!!!
volvo
Цитата(klem4 @ 15.08.05 12:15)
Еще я думаю массив mas лучше объявить глобально перед  описанием подпрограмм

Я бы, если честно, не рекомендовал "глобализовать" переменные, иногда это как раз НЕ нужно делать.
kent, увеличивай размер стека (третий параметр директивы {$M ...})

А еще лучше - вот так:

{-----------------------------------------------------}
Function LengthShortestWord(S: String) : Integer;
Var
mas : TWords;

Procedure GetWords(var count : Integer);
var i,j : Integer;
begin
i := 0;
for j := 1 to Length(S) do begin
if (j = 1) and (S[j] <> ' ') then
inc(i)
else if (j < Length(S)) and (S[j] = ' ') and (S[j + 1] <> ' ') then
inc(i);
if (S[j] <> ' ') then
mas[i] := mas[i] + S[j];
end;
count := i;
end;

var i,count : Integer;
min : Integer;
begin
min := Maxint;
GetWords(count);
for i := 1 to count do
if (Length(mas[i]) < min) then
min := Length(mas[i]);
LengthShortestWord := min;
end;
{-----------------------------------------------------}
kent
volvo, честно говоря не знал что можно процедуру в функцию вставлять, спасибо за совет... ;)
FreeMan
можно вставить процедуру даже в функцию, вставленную в процедуру, которая вставлена в функцию smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.