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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2011, 14:42   #1
Катакомба
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 25
По умолчанию Строка. Поиск и удаление минимального слова.

скажите пожалуйста,в чем ошибка?

Код:
  writeln('vvedite predlozenie ');
   readln(st);
   n:=length(st);
   st:=copy(st,1,n-1);
   repeat
     i:=pos(' ',st);
     delete(st,1,i);
     if(i-1)<min then min:=i-1
   until i=0;
   writeln('minimalnoe slovo= ',min);
   delete(st,pos('min',st),min);
   readln;
в задаче требуется удалив из строки слово мин длинны сформулировать новую строку.
Катакомба вне форума Ответить с цитированием
Старый 16.11.2011, 15:06   #2
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Код:
writeln('vvedite predlozenie ');
   readln(st);
   n:=length(st);  //присвоим дленну строки
   st:=copy(st,1,n-1);  //копируем строку без последнего символа
   repeat 
     i:=pos(' ',st);  //присваиваем   индекс первого пробела
     delete(st,1,i);  // удаляем первое слово
     if(i-1)<min then min:=i-1 // чему равно начальное значение min??  
   until i=0;
   writeln('minimalnoe slovo= ',min);
   delete(st,pos('min',st),min);
   readln;
что тут работать должно?
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 16.11.2011, 15:31   #3
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Тут много ошибок. Читается строка; из нее зачем-то удаляется последний символ; потом по очереди удаляются все слова, находится длина минимального слова (только в том случае, если переменную min где-то выше правильно инициализировали); выводится эта длина; предпоследняя строчка с delete вообще лишена смысла.

Да, и если скормить ей строку с двумя идущими подряд пробелами - случится epic fail.s
Son Of Pain вне форума Ответить с цитированием
Старый 16.11.2011, 15:31   #4
Катакомба
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 25
По умолчанию

выводиться минимальная длина слова
Катакомба вне форума Ответить с цитированием
Старый 16.11.2011, 15:32   #5
Катакомба
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 25
По умолчанию

последний символ это точка,её же убрать надо для дальнейшей работы
Катакомба вне форума Ответить с цитированием
Старый 16.11.2011, 15:36   #6
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от Катакомба Посмотреть сообщение
последний символ это точка,её же убрать надо для дальнейшей работы
зачем?
я код ваш откоментировал думайте что нужно зделать.
если цикл верно работает
вам нужно еше найти позицию начала минимального слова и строку нужно сохранить которую вы вводите
а иначе из чего вы будете удалять?
Терпение!Дежурный экстрасенс скоро свяжется с вами!

Последний раз редактировалось Dvoishnik; 16.11.2011 в 15:44.
Dvoishnik вне форума Ответить с цитированием
Старый 16.11.2011, 21:15   #7
Катакомба
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 25
По умолчанию

вот что получилось написать:
Код:
var
i,min,k,l:integer;
str1,str,z,minz:string;
begin
   writeln('vvedite stroky');
   readln(str);
   str1:=str;
   //
   z:=' ';
   min:=length(str);
   minz:=' ';

   min:=pos(' ',str)-1;
   str:=str+' ';
   while str<>' ' do
   begin
      k:=0;
       while pos(' ',str)<>0 do
     begin
       k:=pos(' ',str);
       z:=copy(str,1,k-1);
       delete(str,1,k);
       if min = k then
       minz:=minz+' '+z;
       if min > k then
       begin
        min:=k;
        minz:=z;
        z:=' ';
       end;
   end;
    delete(str1,pos(minz,str),min);
    writeln(str1);
    readln;
   end;
end.
подскажите что исправить чтобы работала программа
Катакомба вне форума Ответить с цитированием
Старый 16.11.2011, 23:56   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

лень разбираться в чужом коде.
проще свой написать.

так пойдёт?
Код:
var s,w, sNew : string;
  i,j : integer;
  MinLen, IndexMinLen : integer;
begin
  s := 'Мало просто любить Pascal на нём ещё и писать надо';
  
  IndexMinLen := -1;
  MinLen := 9999;

  s := s + ' ';
  w := '';
  for i:=1 to length(s) do begin
    if s[i]<>' ' then w := w+s[i]
    else {пробел нашли, значит это конец слова}
     begin
       if (w<>'') and (Length(w)<MinLen) then begin
         IndexMinLen := i-Length(w);
         MinLen := Length(w);
       end;
       w := '';
     end;
  end;

  sNew := s;
  if IndexMinLen>0 then {удалим самое короткое слово из строки}
    Delete(sNew, IndexMinLen, MinLen);

  {выведем полученную строку-результат}
  WriteLn('Новая строка:',sNew);
  readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.11.2011, 18:34   #9
Катакомба
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 25
По умолчанию

да,спасибо за помощь!!!
Катакомба вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
строка минимального значения в столбце peq Microsoft Office Excel 2 19.08.2011 11:24
Поиск слова в строке и редактирование этого слова Wasili4 Microsoft Office Excel 3 22.06.2011 21:06
Символьная строка содержит слова, разделенные пробелами. Найти все слова-палиндромы (Паскаль) sashunechka Помощь студентам 4 18.05.2011 21:45
строка и слова mansp Общие вопросы C/C++ 5 16.12.2010 00:13
Разбить текст на слова и произвести поиск каждого слова по текстовому массиву Burning_brook Microsoft Office Excel 2 22.05.2010 01:56