Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
UnFam0uS
4 / 4 / 0
Регистрация: 26.09.2009
Сообщений: 45
1

Получить 10 наиболее часто встречающихся слов

06.02.2010, 11:25. Просмотров 1500. Ответов 3
Метки нет (Все метки)

Дан символьный файл f, содержащий произвольный текст длиной более 50 слов. Слова в тексте разделены пробелами и знаками препинания. Получить 10 наиболее часто встречающихся слов
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2010, 11:25
Ответы с готовыми решениями:

Получить 100 наиболее часто встречающихся слов и число их появлений
Дан символьный файл f, содержащий произвольный текст длиной более 5000 слов....

Составить программу получения наиболее часто встречающихся ответов и их долей
Японская радиокомпания провела опрос N радиослушателей по вопросу: "Какое...

Найти частоту появления каждого из наиболее часто встречающихся элементов
Помогите решить задачу на Pascal: В целочисленном массиве K(n) много...

Дан символьный файл, содержащий произвольный текст длиной более 5000 слов. Слова разделены пробелами и знаками препинания. Получить 100 наиболее часто
НАРОД срочно нужно написать на паскале : Дан символьный файл, содержащий...

Найти наиболее часто встречающееся число
В массиве целых чисел с количеством элементов n найти наиболее часто...

3
Puporev
Модератор
54676 / 42098 / 29067
Регистрация: 18.05.2008
Сообщений: 99,339
08.02.2010, 12:44 2
Цитата Сообщение от UnFam0uS Посмотреть сообщение
текст длиной более 50 слов. Слова в тексте разделены пробелами и знаками препинания. Получить 10 наиболее часто встречающихся слов
И ты все еще думаешь, что кому-то хочется придумывать и вводить этот текст и искать в нем 10 слов?
0
UnFam0uS
4 / 4 / 0
Регистрация: 26.09.2009
Сообщений: 45
08.02.2010, 13:48  [ТС] 3
я так подумал...Вы, правы..
тагда, можно всё немножко урезать.
ввести хотяб 10 слов, и найти 2-3 часто встречающихся.
0
Mawrat
12827 / 5735 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
09.02.2010, 19:52 4
Предлагаю такое решение:
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
program Project1;
 
type
  (*Статистика по отдельному слову.*)
  TWord = record
    (*Само слово.*)
    StrWord : String;
    (*Количество вхождений данного слова в анализируемую строку.*)
    Count : Integer;
  end;
  (*Массив, содержащий статистику по словам.*)
  TArrWord = array[1..50] of TWord;
 
 
(*Эта процедура составляет список (т. е. массив) различающихся слов, найденных в строке aStr.
aAmount - количество слов, добавленных в массив aArr.
Каждый элемент массива aArr содержит само слово и сведения о количестве вхождений
этого слова в строку aStr.*)
procedure GetArrWord(const aStr : String; var aArr : TArrWord; var aAmount : Integer);
const
  (*Множество разделителей слов. Char(9) - это символ горизонтальной табуляции.*)
  Delims = [' ', '.', ',', ':', ';', '!', '?', '-', Char(9)];
var
  StrTmp : String;
  i, j, k : Integer;
  Pos1, Pos2 : Integer;
  IsFound : Boolean;
begin
  (*Обнуляем массив слов.*)
  for j := 1 to High(aArr) do begin
    aArr[j].StrWord := '';
    aArr[j].Count := 0;
  end;
  (*Выделяем из строки слова и помещаем их в массив.*)
  Pos2 := 0;
  j := 1; (*Т. е. j := Low(aArr);*)
  for i := 1 to Length(aStr) do begin
    (*Отслеживаем начало слова.*)
    if i = 1 then begin
      if not ( aStr[i] in Delims ) then begin
        Pos1 := i;
      end;
    end else begin
      if ( aStr[i - 1] in Delims ) and ( not ( aStr[i] in Delims ) ) then begin
        Pos1 := i;
      end;
    end;
    (*Отслеживаем конец слова.*)
    if i = Length(aStr) then begin
      if not ( aStr[i] in Delims ) then begin
        Pos2 := i;
      end;
    end else begin
      if ( not ( aStr[i] in Delims ) ) and ( aStr[i + 1] in Delims ) then begin
        Pos2 := i;
      end;
    end;
 
    (*Если конец слова обнаружен - обрабатываем это слово.*)
    if Pos2 > 0 then begin
      (*Найденное слово.*)
      StrTmp := Copy(aStr, Pos1, Pos2 - Pos1 + 1);
      (*Проверяем есть ли уже такое слово в массиве.
      Если есть - тогда увеличиваем счётчик этого слова на единицу.*)
      IsFound := False;
      for k := 1 to j - 1 do begin
        if aArr[k].StrWord = StrTmp then begin
          Inc(aArr[k].Count);
          IsFound := True;
          Break;
        end;
      end;
      (*Если слово не найдено в массиве, то добавляем его и устанавливаем
      для этого слова счётчик = 1.*)
      if not IsFound then begin
        aArr[j].StrWord := StrTmp;
        aArr[j].Count := 1; (*Либо: Inc(aArr[j].Count); Т. к. все счётчики вначале проинициализированы нулём.*)
        (*Индекс следующего элемента массива.*)
        Inc(j);
      end;
      (*Устанавливаем флаг - "конец слова не найден".*)
      Pos2 := 0;
    end;
  end;
  (*Количество слов, добавленных в массив.*)
  aAmount := j - 1;
end;
 
const
  (*Анализируемая строка.*)
  StrText = '1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 10, 9, 8';
var
  (*Массив, содержащий статистику по словам.*)
  ArrWord : TArrWord;
  (*Сведения об отдельном слове.*)
  WordTmp : TWord;
  (*Строка для промежуточных вычислений.*)
  StrTmp : String;
  (*Индекс, применяемый в циклах.*)
  i : Integer;
  (*Для промежуточных вычислений.*)
  IntTmp : Integer;
  (*Количество слов в массиве ArrWord.*)
  Amount : Integer;
  (*Флаг, применяемый в алгоритме сортировки.
  IsExchange = True - в текущем проходе была хотябы одна перестановка.
  Иначе - перестановок не было.*)
  IsExchange : Boolean;
begin
  repeat
    (*Пользователь может ввести строку для анализа.
    Если строка не введена - т. е. пользователь нажал ENTER без
    ввода строки - тогда в качестве анализируемой строки берётся строка StrText.*)
    Writeln('Gotoviy shablon - Enter. Vvesti noviy shablon - vvod stroki + ENTER.');
    Readln(StrTmp);
    if StrTmp = '' then begin
      StrTmp := StrText;
    end;
 
    (*Получаем по заданному тексту статистику употребления слов.*)
    GetArrWord(StrTmp, ArrWord, Amount);
 
    (*Сортируем массив ArrWord по убыванию значений в счётчиках слов.
    Т. е.  - по убыванию значений в ArrWord[i].Count.
    Метод сортировки - пузырьковая сортировка.*)
    repeat
      IsExchange := False;
      for i := 1 to Amount - 1 do begin
        if ArrWord[i].Count < ArrWord[i + 1].Count then begin
          WordTmp := ArrWord[i];
          ArrWord[i] := ArrWord[i + 1];
          ArrWord[i + 1] := WordTmp;
          IsExchange := True;
        end;
      end;
    until not IsExchange;
 
    (*Распечатка 10 наиболее употребительных слов.*)
    Writeln('10 naibolee upotrebitelnih slov:');
    IntTmp := 10;
    if Amount < 10 then begin
      IntTmp := Amount;
    end;
    for i := 1 to IntTmp do begin
      Writeln('Slovo: "', ArrWord[i].StrWord, '", Statistika: ', ArrWord[i].Count);
    end;
 
    Writeln('-----');
    Writeln('Vihod - luboi simvol + ENTER. Povtorit - ENTER.');
    Readln(StrTmp);
  until StrTmp <> '';
end.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2010, 19:52

найти наиболее часто встречающееся число в массиве
В массиве целых чисел с количеством элементов n найти наиболее часто...

Наиболее часто встречаемый элемент файла записей
Дан типизированный файл записей каждая запись - сведения о каком-нибудь...

Напечатайте цифру, наиболее часто встречающуюся в тексте
Пусть дан непустой текст из цифр, за которым следует точка. Напечатайте цифру,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru