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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2011, 14:30   #1
JigSaw
 
Регистрация: 27.03.2011
Сообщений: 3
По умолчанию TurboPascal (Строки)

Здравствуйте, помогите пожалуйста решить эту задачу:
Задано предложение, состоящее из слов, разделённых пробелами. Определить самое длинное слово и написать кол-во букв в нём.

Вот то, что я написал, если ввожу более 3 слов - не получается.
Код:
Program zadacha4;
Uses crt;
Var a,s,slovo:string;i,z,max:integer;
Begin
ClrScr;
Writeln('vvedute text');
Readln(a);
For i:=1 to length(a) do begin
                         If a[i]=' ' then begin
                                          s:=copy(a,1,i-z);
                                          delete(a,1,i-z);
                                          z:=length(s)-1;
                                          end;
                         If z>max then begin
                                       max:=z;
                                       slovo:=s;
                                       end;
                         end;
Z:=length(slovo)-1;
Writeln('V texte ',z,' bykv');
Writeln('Camoe dlinnoe slovo - ',slovo);
readln;
end.
Понимаю, что ошибка в строках
s:=copy(a,1,i-z);
delete(a,1,i-z);
но на что заменить, догадаться не могу.

Последний раз редактировалось JigSaw; 27.03.2011 в 14:53.
JigSaw вне форума Ответить с цитированием
Старый 27.03.2011, 22:52   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

главная ошибка - это то, что Вы удаляете символы из строки, по которой у Вас идёт цикл FOR
так нельзя! (либо нужен цикл с условием и ручками изменять i, либо цикл от конца строки к началу..)

а может проще? Сделать примерно так?
Код:
var s,w,MaxWord : string;
  i : integer;
begin
  s := 'Мало просто изучать Pascal на нём ещё и писать надо';

  s := s + ' ';
  MaxWord := '';
  w := '';
  WriteLn;
  for i:=1 to length(s) do begin
    if s[i]<>' ' then w := w+s[i]
    else {пробел нашли, значит это конец слова}
     begin
       if Length(w)>Length(MaxWord) then MaxWord := w;
       w := ''; {обнулили текущее слово - готовы накапливать новое слово}
     end;
  end;
  if Length(MaxWord)=0 then WriteLn('Вообще не нашли слов!')
  else 
     WriteLn('Слово с максимальной длиной (',
         Length(MaxWord),' букв): ', MaxWord);
  readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.03.2011, 18:23   #3
JigSaw
 
Регистрация: 27.03.2011
Сообщений: 3
По умолчанию

Serge_Bliznykov, большое спасибо, понял ошибки. =)
Не могли бы привести пример с "цикл от конца строки к началу"? Любопытно)

Последний раз редактировалось JigSaw; 29.03.2011 в 18:32.
JigSaw вне форума Ответить с цитированием
Старый 29.03.2011, 21:55   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

for i := length(s) downto 1 do ...
прямо чистый английский язык )
phomm вне форума Ответить с цитированием
Старый 30.03.2011, 14:00   #5
JigSaw
 
Регистрация: 27.03.2011
Сообщений: 3
По умолчанию

phomm, я знаю как выглядит этот цикл. Имел в виду именно что идёт после do, но уже сам разобрался)
JigSaw вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строки в TurboPascal 7.0 Сержuk Помощь студентам 10 09.03.2011 13:38
Програма на TurboPascal bignick Паскаль, Turbo Pascal, PascalABC.NET 5 25.09.2010 12:30
TurboPascal - help! Lexone Помощь студентам 5 29.03.2009 15:38