Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти самое короткое слово, помогите с алгоритмом 
:(
    Опции темы
Гость_Dmitriy
Дата 15.12.2005, 20:19 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Помогите пожалуйста с алгоритмом. Есть массив с количеством эл-тов, равным N. Элемент массива - строка (т.е. текст). Нужно:
1. Найти самое короткое слово в массиве (не в отдельной строке, а именно в массиве)
2. заменить этим словом последние слова всех строк (строка = элемент массива, т.е. последние слова всех элементов массива)
  Вверх
Zero
Дата 15.12.2005, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата
1. Найти самое короткое слово в массиве (не в отдельной строке, а именно в массиве)

Размер строки, определяется с помощью функции Length
Цитата
2. заменить этим словом последние слова всех строк (строка = элемент массива, т.е. последние слова всех элементов массива)

А тут, типа такого:
Код

a[Nmax] := a[m];

где Nmax ─ количество элементов в массиве;
m ─ элемент массива, с минимальным количеством букв.
PM MAIL ICQ   Вверх
Гость_Dmitriy
Дата 15.12.2005, 22:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
Размер строки, определяется с помощью функции Length

это понятно... Но как разбить эту же самую строку и поместить в массив слова, т.е. элемент массива - одно слово..? Дело в том, что между словами могут быть как пробелы, так и знаки препинания.
  Вверх
Zero
Дата 15.12.2005, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата
это понятно... Но как разбить эту же самую строку и поместить в массив слова, т.е. элемент массива - одно слово..? Дело в том, что между словами могут быть как пробелы, так и знаки препинания.

Эх, ладно..., проще показать:
Код

program pr;
Const
  N=5;
var
  a:array[1..N] of string;
  i,j:integer;
  S:string;
  Nmin:integer;
  Smin:string;
Begin
  for i:=1 to n do
    begin
      write('a[',i,'] >');
      readln(a[i]);
    end;

  Nmin := 255;
  for i:=1 to n do
    begin
      j:=0;
      repeat {цикл по элементам массива}

        {выбор слов из отдельного элемента массива}
        s:='';
        repeat
          j:=j+1;
          if a[i][j] in ['A'..'z'] then
            s := s + a[i][j]
        until (j=length(a[i])) or not(a[i][j] in ['A'..'z']);

      {определение минимального слова}
      if Nmin>length(s) then
        begin
          Nmin := length(s); {размер минимального слова}
          Smin := s; {текст минимального слова}
        end;
      until j=length(a[i]);

      {далее делай цикл по каждому элементу массива,
      находи в нём позицию последнего слова
      и вставляй туда Smin}
    end;
End.

Я думаю со второй частью ты сам справишся, там алгоритм чуть-чуть другой но принцип тот же... smile
PM MAIL ICQ   Вверх
Гость_Dmitriy
Дата 15.12.2005, 23:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











спасибо smile
  Вверх
Гость_Dmitriy
Дата 16.12.2005, 01:13 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я пошёл немного другим путём.
Создал процедуру, которой передаётся массив строк. В самом начале программы объявил множество SEMI, которое содержит знаки препинания (точка, двоеточие, точка с запятой, запятая, вопросительный знак, восклицательный знак).

Вот сама процедура:
Код

procedure WorkStrs(A:mm);
var sStr,eStr,lStr:integer; minStr,tempStr,tStr:string;
begin
clrscr;
minStr:='';
  for i:=1 to N do begin
    tempStr:=A[i];
    lStr:=Length(tempStr);
    sStr:=1;
    for j:=1 to lStr do begin
      if tempStr[j] in SEMI then begin
        tStr:='';
        for k:=sStr to (j-1) do begin
          tStr:=tStr+tempStr[k];
        end; {for}
        if (minStr='') then minStr:=tStr;
        if (tStr<minStr) then minStr:=tStr;
        sStr:=j+1;
      end; {if}
    end; {for}
  end; {for}
writeln('Самое короткое слово: ',minStr,'.');

writeln;textattr:=3;writeln('Нажмите любую клавишу...');
repeat until keypressed;
end; {WorkStrs}

  Вверх
Гость_Dmitriy
Дата 16.12.2005, 01:16 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Забыл добавить. Не работает! smile Ошибку никак не найду smile
  Вверх
Гость_Dmitriy
Дата 16.12.2005, 01:23 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Так. Работает. Это я просто забыл в множество пробел добавить. smile
но работает неправильно =(( буду искать ошибку.
  Вверх
Гость_Dmitriy
Дата 16.12.2005, 01:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Всё! разобрался! smile
  Вверх
Zero
Дата 17.12.2005, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата
Всё! разобрался!

Молодец.

PS: кстати в слудующий раз, если у тебя не работает что-либо, то пиши о конкретной ошибки, чтобы нам было понятно, о чём речь... smile Ведь мы же не телепаты. smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0495 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.