Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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


Ответ
 
Опции темы
Старый 05.03.2008, 19:27   #1
jenja
Пользователь
 
Регистрация: 27.02.2008
Сообщений: 22
По умолчанию Напечатать строку с наибольшим количеством слов.

Пусть дан текстовый файл. Напечатайте строку с наибольшим количеством слов. Если таких строк несколько, напечатайте первую.
jenja вне форума Ответить с цитированием
Старый 05.03.2008, 19:46   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,261
По умолчанию

Вот вам подсказка:
Cтрока с наибольшим количеством слов - это строка с наибольшим колличеством пробелов.
Sibedir вне форума Ответить с цитированием
Старый 05.03.2008, 19:47   #3
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Ну, и в чем проблема?
readln(F,S); - читает строку
L:=length(S); - определяет длину
осталось сделать цикл для чтения строк
eof(F)=true - если достигнут конец файла
_Dmitry вне форума Ответить с цитированием
Старый 05.03.2008, 22:08   #4
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,261
По умолчанию

Цитата:
Сообщение от jenja, но почему в личку
Но ведь здесь не дано точного условия, поэтому нужно рассматривать все условия. Между словами можно поставить сколько угодно пробелов.
Действительно, ошибся. Точнее - оговорился. Но эт хорошо, что вы "врубились". Жаль что дальше сами не доделали. Jenja, все на самом деле очень просто:
Код:
function WordCount (AStr: String): Integer;
var
  Word: Boolean;
  i: Integer;
begin
  Result := 0;
  Word := False; // С начала перебора считаем, что мы вне слова
  for i := 1 to Length (AStr) do begin
    if AStr[i] = ' ' then begin
      if Word then Word := False; // Если символ пробел, а мы внутри слова, то выходим из слова
    end
    else begin
      if not Word then begin // Если символ не пробел, а мы вне слова, то попадаем внутрь слова, а кол-во увеличиваем на 1.
        Word := True;
        Inc (Result);
      end;
    end;
  end;
end;
Это наверное не единственный вариант, но зато простой и наглядный.
Sibedir вне форума Ответить с цитированием
Старый 06.03.2008, 18:18   #5
Ruslan_developer
Новичок
Джуниор
 
Регистрация: 20.10.2007
Сообщений: 1
По умолчанию

Код:

function GetCountWordInStr(str : String) : Word;       //Считает число слов в строке.

 var
    cur_pos,                //Number for C U R R E N C Y   P O S I T I O N  char from string, whose research.
    count_word                //Count word in data string.
     : Word;

begin
   count_word := 0;                //Clean variable.
   cur_pos := 1;                //Choose first single for begin work with data string.

                    //Make this circle while not get end of string.
   While cur_pos < Length(str) do begin

                       //Search begin of next word in string.
      While ( cur_pos < Length(str) )                //If currency position is not last.
             And
            ( str[cur_pos] = ' ' )                //If this single space.
      do
       Inc(cur_pos);                //Go to next char for he verify.


                       //Search end for currency word.
      While ( cur_pos < Length(str) )                //Next position is not void.
             And
            ( str[cur_pos+1] <> ' ')                //Not break for currency word.
      do
       Inc(cur_pos);                //Go to next char.

      If str[cur_pos] <> ' ' then
       Inc(count_word);                //Compute count word.

      Inc(cur_pos);                //Go to next position - space or exit from string.
   end;

   GetCountWordInStr := count_word;                //Return result to out from the function.
end;                //fn. GetCountWordInStr.



function GetMax(name : String) : String;                   //В заданом файле находит строку с наибольшим количеством слов в ней.

 var
    fv                //File variable.
       : Text;                //Open file for work as text.

    str_new,
    str_max
       : String;

    count_new,
    count_max
       : Word;

begin
   AssignFile(fv,name);

   {$I-}                //Off automatic verify about I/O error.
   ReSet(fv);
   {$I+}                //Recovery routine control I/O.

                    //Or appear error I/O.
   If IOResult <> 0 then begin
      GetMax := '';                //Return to out void the expression.
      exit;                //Complete function now.
   end;

   count_max := 0;                //Clean variable forward he first using.
   str_max := '';

                    //While not found tag of end this file - read next string.
   While Not( Eof(fv) ) do begin

      Readln(fv,str_new);                //Reading next string from file-source
      count_new := GetCountWordInStr(str_new);                //Compute count word in currency string.

                       //If found string with big count word in shi, then remember this string.
      If count_new > count_max then begin
         count_max := count_new;
         str_max := str_new;
      end;

   end;                //End "While".

   CloseFile(fv);                //Destroy associate between file variable "fv" and fisical
                                 //file fron disk with caption getting from variable parametr "name".

   GetMax := str_max;                //Return result to call function.
end;
Ruslan_developer вне форума Ответить с цитированием
Старый 06.03.2008, 20:15   #6
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,261
По умолчанию

Тоже вариант. Колличество слов в строке равно кол-ву не пробелов, после которых идкт пробел. Только уж больно код у вас неудобочитаемый.
Sibedir вне форума Ответить с цитированием
Старый 06.03.2008, 20:28   #7
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
Тоже вариант. Колличество слов в строке равно кол-ву не пробелов, после которых идкт пробел. Только уж больно код у вас неудобочитаемый.
Колличество слов в строке равно кол-ву пробелов, после которых идёт не-пробел + 1

ааааа бббббб ввввввв ггггггг.
B_N вне форума Ответить с цитированием
Старый 06.03.2008, 21:01   #8
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Надо ставить флаг как только обнаруживаем букву.
Как только символ строки буквой неявляется делаем +1 и сбрасываем флаг, который потом снова поставим если встретим букву.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 07.03.2008, 05:20   #9
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,261
По умолчанию

Цитата:
Сообщение от B_N
Колличество слов в строке равно кол-ву пробелов, после которых идёт не-пробел + 1
Не факт. Если строка начинается с пробелов, этот критерий не подойдет.

Цитата:
Сообщение от Карась
Надо ставить флаг как только обнаруживаем букву.
Как только символ строки буквой неявляется делаем +1 и сбрасываем флаг, который потом снова поставим если встретим букву.
Собственно вот так я и сделал.

Последний раз редактировалось Sibedir; 07.03.2008 в 05:23.
Sibedir вне форума Ответить с цитированием
Старый 07.03.2008, 05:28   #10
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,261
По умолчанию

Короче, вариантов тьма. И тот вариант, что предложил B_N, тоже годится, если всего одну дополнительную проверку поставить. Это что-то из раздела алимпиадных задач, когда нужно найти как можно больше различных вариантов решения одной задачи.
Как вариант, можно на основе таких задачь в разделе свободного общения новую игру затеять.
Sibedir вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме от 7000 рублей в месяц



Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана строка, состоящая из нескольких слов. Найти количество слов, которые содержат хотя бы одну букву "А" Mashaa Помощь студентам 13 09.12.2009 13:28
напечатать текст из Memo Sanek777 Общие вопросы Delphi 1 30.08.2008 20:25
ГСЧ с большим количеством нулей Frog25 Общие вопросы C/C++ 6 26.06.2008 17:22
НАпечатать наибольшую последовательность состоящую gred Помощь студентам 6 23.03.2008 16:12
Напечатать все числа Пифагора меньше N Санячос Помощь студентам 5 18.01.2008 18:21


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Скидки на курсы GeekBrains 40%, выбирайте программу для себя