Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 13.02.2014
Сообщений: 14

Дополнить программу по поиску самого длинного слова в строке

25.03.2014, 09:49. Показов 1130. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно сделать так, чтобы если в строке больше одного слова максимальной длины вывести все такие слова, а не только одно. Например: если в строке "abs, abs, ab" то должно вывести "abs, abs" т.к. они и являются самыми длинными. У меня она находит только одно слово, т.е. самое длинное в строке, а если есть ещё одно такое, то программа его игнорирует. Помогите, пожалуйста.

сам код:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Const mn=[' ','.',',','!','?'];//разделители слов
Var f,g:text; 
    s,s1,smax,name,s2:string;
    i:byte;
Begin
    writeln('Введите путь к текстовому файлу: ');
    read(name);
    Assign(f,name);Reset(f);//открываем файл для чтения
    Assign(g,'out.txt');Rewrite(g);//открываем файл для записи
    While not Eof(f) do //пока не конец файла делаем
    Begin
      readln(f,s);//считываем строку из файла
      s:=s+' ';s1:='';smax:='';//добавляем пробел к S, остальные строки делаем пустыми
      For i:=1 to Length(s) do //от 1 до конца строки
       //если очердной символ не входит в мн-во разделителей то добавляем его к строке
       if not(s[i] in mn) then s1:=s1+s[i] 
       //иначе
       else
       Begin
         //проверяем очередное слово и если оно больше max делаем это слово Max
         if Length(s1)>Length(smax) then smax:=s1;         
         s1:='';//обнуляем строку s1 для формирования нового слова
         end;
       End;
      writeln(g,smax);//записываем в файл g max строку
    writeln('Результат работы записан в файл "out.txt"');
    Close(f);Close(g);//закрываем файлы
End.
Добавлено через 6 часов 46 минут
ап, помогите, это вроде очень просто

Добавлено через 15 часов 13 минут
вверх
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.03.2014, 09:49
Ответы с готовыми решениями:

Определить длину самого длинного слова в строке
С клавиатуры вводится строка символов. Определить длину самого длинного слова в строке. Добавлено через 13 минут Ребята, ненадо...

Процедура определения самого длинного слова в строке
процедура определения самого длинного слова в строке Паскаль

Найти длину самого короткого слова и самого длинного слова
Дана строка, содержащая текст. Найти длину самого короткого слова и самого длинного слова. Как решить данную задачу?

6
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
25.03.2014, 09:53
Для этого нужно в первый проход по файлу найти длину самого длинного слова, а при втором проходе вывести все слова, длина которых=макс
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
25.03.2014, 11:13
И, если объединить проход по файлу в одной процедуре, можно получить что-то вроде:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const
  mn=[' ','.',',','!','?'];
var
  f, g: text; 
procedure ScanFile(WriteRes: Boolean; var max: byte);
var
  s,s1:string;
  i:byte;
begin
  while not EOF(f) do begin
    readln(f,s);
    s:=s+' '; s1:='';
    for i:=1 to Length(s) do
      if not(s[i] in mn) then s1:=s1+s[i] 
      else begin
        if WriteRes then
          if Length(s1)=max then WriteLn(g,s1) else
        else
          if Length(s1)>max then max:=Length(s1);
        s1:='';
      end;
  end;
end;
 
var
  name:string;
  max:byte;
begin
  WriteLn('Введите путь к текстовому файлу: '); ReadLn(name);
  Assign(f,name); Reset(f);
  Assign(g,'out.txt'); Rewrite(g);
  max:=0; ScanFile(false, max);
  Close(f); Reset(f); ScanFile(true, max);
  Close(f); Close(g);
  WriteLn('Результат работы записан в файл "out.txt".');
end.
0
0 / 0 / 0
Регистрация: 13.02.2014
Сообщений: 14
25.03.2014, 16:20  [ТС]
ну, да, только нужно каждой строчки, у тебя он всего текста в целом ищет слова, а нужно что бы он проверял каждую строку и выводил слова каждой строчки, включая повторные длинные.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
25.03.2014, 16:33
Ну так вместо двух проходов по файлу делай 2 прохода по строке.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
25.03.2014, 22:08
Если нужно в каждой строке оставить только слова максимальной длины, то все ещё проще:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
const
  mn=[' ','.',',','!','?'];
var
  f, g: text; 
  s, s1, sw, name: string;
  i, max: byte;
  WriteRes: boolean;
begin
  WriteLn('Введите путь к текстовому файлу: '); ReadLn(name);
  Assign(f,name); Reset(f);
  Assign(g,'out.txt'); Rewrite(g);
  while not EOF(f) do begin
    ReadLn(f,s);
    s:=s+' '; s1:=''; sw:=''; max:=0;
    for WriteRes:=false to true do
      for i:=1 to Length(s) do
        if not(s[i] in mn) then s1:=s1+s[i]
        else begin
          if WriteRes then
            if Length(s1)=max then sw:=sw+s1+' ' else
          else
            if Length(s1)>max then max:=Length(s1);
          s1:='';
        end;
    if Length(sw)>1 then WriteLn(g, copy(sw,1,Length(sw)-1));
  end;
  Close(f); Close(g);
  WriteLn('Результат работы записан в файл "out.txt".');
end.
Добавлено через 6 минут
Если в файл g должны попадать и пустые строки из f, то в 25 строке убрать "if Length(sw)>1 then ".
1
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
26.03.2014, 13:48
Способ с одним проходом строки. За основу взят код, написанный bormant.
Добавлено отсечение "пустых" слов в случае, когда подряд друг за другом следуют несколько разделителей. И добавлен механизм точного учёта переноса строки в конце файла.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
program Project1;
 
const
  mn=[' ','.',',','!','?'];
var
  f, g: text;
  s, s1, sw, fname: string;
  i, max: byte;
begin
  WriteLn('Введите путь к текстовому файлу: ');
  ReadLn(fname);
  Assign(f,fname);
  Reset(f);
  Assign(g,'out.txt');
  Rewrite(g);
  while not EOF(f) do
  begin
    Read(f,s);
    s:=s+' ';
    s1:='';
    sw:='';
    max:=0;
    for i:=1 to Length(s) do
      if not(s[i] in mn) then
        s1:=s1+s[i]
      else if s1 <> '' then
      begin
        {Если длина текущего слова равна текущей наибольшей длине, то добавляем
        слово в выборку.}
        if Length(s1)=max then
          sw:=sw+s1+' '
        {Если длина текущего слова больше, чем текущая наибольшая длина, то
        начинаем составлять выборку заново. Т. е., обнуляем выборку и добавляем
        в неё текущее слово.}
        else if Length(s1)>max then
        begin
          max:=Length(s1);
          sw:=s1+' ';
        end;
        s1:='';
      end;
    Write(g, sw);
    {Точный учёт переноса строки в конце файла.}
    if Eoln(f) and not Eof(f) then
    begin
      Readln(f);
      Writeln(g);
    end;
  end;
  Close(f);
  Close(g);
  WriteLn('Результат работы записан в файл "out.txt".');
  Readln;
end.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.03.2014, 13:48
Помогаю со студенческими работами здесь

Найти длину самого короткого слова и самого длинного слова
Помогите пожалуйста решить. Дана символьная строка, содержащая текст, который заканчивается точ¬кой. Найти длину самого короткого слова и...

Найти длину самого длинного и самого короткого слова
Помогите,пожалуйста,решить задачу!!! Дана символьная строка,которая заканчивается точкой.Найти длину самого длинного и самого...

Найти длину самого короткого и самого длинного слова
пожалуйста помогите решать эту программу мне надо блок схема и программа. Дана строка, содержащая текст. найти длину самого короткого слова...

Поиск самого длинного слова
Задание дали создать файл с текстом , среди этого текста найти самое длинное слово, и показать сколько раз оно повторилось в тексте , код...

Найти длину самого длинного слова.
У меня задача: дана строка состоящая из русских слов, разделенных пробелами(одним или несколькими). Найти длинну самого длинного слова. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru