Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal] Нахождение самого длинного слова  
:(
    Опции темы
THandle
Дата 23.6.2008, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Цитата(dimafeng @  22.6.2008,  11:53 Найти цитируемый пост)
THandle, 
разве не так должно быть 


Ни в коем случае... mlens - самое длинное слово в тексте.

В функцию мы передаём весь текст и ищем число вхождений в него строки находящейся в mlens.

Если мы передадим строку содержащую эту самое строку, то и число вхождений будет равно только единице. Так что в данном моменте в коде все правильно. В Делфи этот код выдает достоверный результат. В Паскале, из за строк может выдавать меньший. Сейчас просто чисто нет возможности поставить паскаль.  

Вся проблема в паскалевских строках. Надо читать каждый раз новую строку. Искать в ней самое длинное слово. Если его длина больше чем длина самого длинного слова в предыдущих строчках, то делать его более длинным. Можно два раза считывать с файла, но я сейчас напишу немного по другому. 

Программа будет выводить количество слов, самых длинных в файле, но не являющихся одинаковыми. Если надо будет переделать - переделаю.

Это сообщение отредактировал(а) THandle - 23.6.2008, 02:27
PM   Вверх
THandle
Дата 23.6.2008, 02:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Код

program Project1;

var
  F : text;
  s, sub, mlens : string;
  i : integer;
  count : integer;

begin
  write('Enter file name: ');
  readln(s);
  AssignFile(F, s);
  reset(F);
  mlens := '';
  count := 0;
  while not Eof(F) do
    begin
      readln(f, s);
      sub := '';
      s := s + ' ';
      for i := 1 to length(s) do
        if s[i] <> ' ' then
          sub := sub + s[i]
        else
          begin
            if Length(sub) > Length(mlens) then
              begin
                mlens := sub;
                count := 1;
              end
            else
              if Length(sub) = Length(mlens) then
                inc(count);
            sub := '';
          end;
    end;
  writeln('Count: ', count);
  readln;
end.


Примитивно, но должно работать...
PM   Вверх
deswars
Дата 26.6.2008, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 23.6.2008

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



Преодолеть ограничение можна. Надо считывать по словам и одновременно считать количество самого длинного слова на данный момент. 
PM MAIL   Вверх
THandle
Дата 27.6.2008, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



deswars, см мой пост выше. там сделано так. Считывается одна строка, если в ней нет слова длиннее текущего самого длинного то так и оставляем, если есть, то счетчик самого длинного ставим в 1, а самое длинное становится как раз слово из новой строки. Если есть слово по длине совподающее с текущим самым длинным то увеличиваем счетчик...  
PM   Вверх
deswars
Дата 4.7.2008, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 23.6.2008

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



Я предлага считывать по словам, а не по строчкам smile

Добавлено через 1 минуту и 40 секунд
А можна сделать array [{...}] of char smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

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


 




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


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

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