Форум программистов, компьютерный форум, киберфорум
Наши страницы
Free Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Olik1
0 / 0 / 1
Регистрация: 07.10.2013
Сообщений: 16
1

Напечатать буквы, на которые начинаются слова в тексте, в порядке убывания частоты их употребления

30.03.2014, 19:48. Просмотров 887. Ответов 2
Метки нет (Все метки)

Задан текст длиной не более 1000 символов. Напечатать буквы, на которые начинаются слова в тексте, в порядке убывания частоты их употребления.
Как поняла,нужно создать дополнительный массив типа byte. Но не представляю как реализовать. Помогите пожалуйста!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2014, 19:48
Ответы с готовыми решениями:

В строках из файла определить буквы, на которые начинаются слова, в порядке убывания частоты их употребления
подскажите пожалуйста как определить буквы, на которые начинаются слова?!!! ...

Обработка строковых данных. В заданном тексте найти все слова, которые начинаются с заданной буквы
УСЛОВИЕ ЗАДАЧИ: В заданном тексте найти все слова, которые начинаются с...

Напечатать буквы в порядке увеличения частоты их встречаемости. Исправить ошибку
Помогите исправить ошибку.... На вход программы подаются строчные английские...

Напечатать в алфавитном порядке все согласные буквы, которые входят во все слова
Помогите плиз Дан текст на русском языке. Напечатать в алфавитном порядке все...

Дано n слов. Напечатать те из них, которые начинаются с буквы 'а'
Дано n слова Напечатать те из них, которые начинаются с буквы 'а'

2
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26366 / 17691 / 7004
Регистрация: 22.10.2011
Сообщений: 31,134
Записей в блоге: 6
31.03.2014, 11:22 2
Лучший ответ Сообщение было отмечено Olik1 как решение

Решение

Что-то вот в таком духе:
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
var
  s : AnsiString;
  k, prev : integer;
  i, j, T : char;
  index : array[char] of char;
  arr : array[char] of integer;
begin
  s := 'there are many options for generating and controlling' +
  ' output from the compiler. often these are not sufficiently' +
  ' well known since they are buried in complex documentation';
 
 
  s := s + ' ';
  prev := 0;
  k := 1;
  FillChar(arr, sizeof(arr), 0);
  for i in char do index[i] := i;
 
  while k <= length(s) do
  begin
    if s[k] = ' ' then
    begin
      if k - prev > 1 then
        inc(arr[s[prev + 1]]);
      prev := k;
    end;
    inc(k);
  end;
 
  for i := low(char) to pred(high(char)) do
    for j := high(char) downto succ(i) do
      if arr[index[pred(j)]] < arr[index[j]] then
      begin
        T := index[pred(j)]; index[pred(j)] := index[j]; index[j] := T;
      end;
  for i := low(char) to high(char) do
    if arr[index[i]] > 0 then writeln(index[i], ' ', arr[index[i]]);
  writeln;
end.
. Выводит:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Running "d:\test\letters.exe"
a 4
t 4
c 3
o 3
f 2
s 2
b 1
d 1
g 1
i 1
k 1
m 1
n 1
w 1
При желании можно добавить еще AnsiUpperCase, тогда не будет разницы между строчными и прописными буквами.
0
Olik1
0 / 0 / 1
Регистрация: 07.10.2013
Сообщений: 16
03.04.2014, 09:04  [ТС] 3
У меня было вот такая прога. Но преподаватель сказал сделать еще проще, т.е. просчитывать вот это
Pascal
1
2
3
4
rezk:=per+rezk;  
    for i:=1 to length(rezk) do
    inc(mass[ord(rezk[i])]); 
    writeln;
в цикле
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
per:=copy(txt,1,1);
      
     repeat
     f:=0;
    rez:=copy(txt,1,pos(' ',txt)+1);
    delete(rez,1,pos(' ',txt));
      delete(txt,1,pos(' ',txt));
      txt:=txt+' ';
      rezk:=rezk+rez;
      for i:=1 to length(txt) do
       if txt[i]<>' ' then inc(f);
      
         until f=0;
А вот сама прога
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
 uses crt;
  var txt,rez,rezk,per:string;
      i,f,j:integer;
      mass:array[0..255]of integer;
        max:array[0..255]of integer;
      begin
     clrscr;
      write('Vvedite text:'); readln(txt);
        per:=copy(txt,1,1);
      
     repeat
     f:=0;
    rez:=copy(txt,1,pos(' ',txt)+1);
    delete(rez,1,pos(' ',txt));
      delete(txt,1,pos(' ',txt));
      txt:=txt+' ';
      rezk:=rezk+rez;
      for i:=1 to length(txt) do
       if txt[i]<>' ' then inc(f);
      
         until f=0;
        rezk:=per+rezk;  
    for i:=1 to length(rezk) do
    inc(mass[ord(rezk[i])]); 
    writeln;
    
    for j:=1000 downto 1 do
    for i:=0 to 255 do
  if (mass[i]=j) and (char(i)<>' ') then writeln('"', char(i), '" ', mass[i]);    
      
     end.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2014, 09:04

Для заданного текста получить две группы слов: к первой отнести слова, которые начинаются с гласной буквы, а ко второй – с согласной буквы
Для заданного текста получить две группы слов: к первой отнести слова, которые...

Используя данные из этого файла, напечатать фамилии тех студентов, которые начинаются с гласной буквы
Используя данные из этого файла, напечатать фамилии тех студентов, которые...

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


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

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

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