Помощь - Поиск - Пользователи - Календарь
Полная версия: 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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.