0 / 0 / 1
Регистрация: 07.10.2013
Сообщений: 24
1

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

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

Задан текст длиной не более 1000 символов. Напечатать буквы, на которые начинаются слова в тексте, в порядке убывания частоты их употребления.
Как поняла,нужно создать дополнительный массив типа byte. Но не представляю как реализовать. Помогите пожалуйста!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2014, 19:48
Ответы с готовыми решениями:

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

Работа со строками (sting.h) (печатать первые буквы слов в порядке убывания частоты их употребления)
Составить программу, которая позволяет ввести текст, а потом печатает первые буквы слов в порядке...

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

Расположить буквы в порядке уменьшения частоты их употребления
Нужен код или хотя бы алгоритм. Буквы заданы в вещ-м массиве, который уже создан

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32230 / 20869 / 8085
Регистрация: 22.10.2011
Сообщений: 36,105
Записей в блоге: 7
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
0 / 0 / 1
Регистрация: 07.10.2013
Сообщений: 24
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2014, 09:04
Помогаю со студенческими работами здесь

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

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

Строка: Как расположить буквы в первом массиве, который типа char, в порядке убывания или возрастания частоты появления букв в тексте?
Имеется два массива. Один типа char из 26 букв алфавита в алфавитном порядке, другой -- типа int из...

В заданном тексте найти и напечатать все слова, которые начинаются на буквосоединение: (не)
В заданом тексте найти и напечатать все слова которые начинаются на буквосоединение: (не). Каждое...

В заданном тексте найти и напечатать все слова, которые начинаются с буквосочетания НЕ
в заданном тексте найти и напечатать все слова, которые начинаются с буквосочетание 'НЕ' каждое...

Все слова строки, которые начинаются с данной буквы, отсортировать в алфавитном порядке
Задана строка, состоящая из символов. Символы объединяются в слова. Слова друг от друга отделяются...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru