Форум программистов, компьютерный форум CyberForum.ru

Гистограммы C++ - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Отрицательные частицы Не и Ни http://www.cyberforum.ru/cpp-beginners/thread126965.html
Помогите пожалуйста переписать задачу на язык С :) uses crt; const dividers=;{дописать нужные} var s,temp:string; i,c:integer; begin
C++ Подсчитать количество классов в файле Вопрос такого плана: Есть файл в котором определено некоторое кол-во классов, которое неизвестно и может быть любым. Подскажите каким образом можно узнать это кол-во? Самое простое и первое что мне приходит в голову, это открыть файл и до его конца делать подсчет слова 'class'. ))) ну и закрыть и вывести результат. http://www.cyberforum.ru/cpp-beginners/thread126956.html
C++ Массив структур: книги, хранящиеся в библиотеке
8. Для книг, хранящихся в библиотеке, задаются регистрационный номер книги, автор, название, год издания, издательство, количество страниц. Вывес-ти список книг с фамилиями авторов, изданных после заданного года.!!!!!!!!!!!!!!
ООП на С++ C++
Помогите пожалуйста!! Не понимаю как это сделать(( Создать программу с классом Student порождающий обьекты - данные об студентах желающих получить места в общежити Класс включает в себя следующие элементы - Ф.И.О. студента; - номер группы ( буква и четыре цифры); - средний балл; - доход на одного члена семьи; и следующие функции-члены класса:
C++ Занесите в массив простые множители числа http://www.cyberforum.ru/cpp-beginners/thread126924.html
1. Дано число N (задаётся пользователем). Занесите в массив простые множители данного числа. 2. Найти максимальный элемент среди минимальных элементов строк матрицы. Вывести номер строки и столбца для такого элемента. 3. Дана строка, содержащая целые числа, отделённые друг от друга произвольными символами, отличными от цифр. Найти сумму этих чисел. 4. Дан текстовый файл. Напишите программу,...
C++ Факториал Дано натуральное число n; найти n!. Использовать программу, включающую рекурсивную процедуру вычисления n! подробнее

Показать сообщение отдельно
Йа
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 22
09.05.2010, 15:14     Гистограммы C++
День добрый. Просьба помочь (желательно с пояснениями)
Задание.
Дан текст. Будем считать, что все слова в тексте состоят из латинских и кириллических букв (строчные и заглавные не различаются), все остальные символы - разделители. Вам необходимо для каждого слова посчитать, сколько раз оно встречается в этом тексте, и вывести гистограмму всех слов.
Входные данные
Входной файл содержит текст, который состоит из любых символов. Длина каждого слова в нем не превышает 100 символов, количество различных слов не превышает 10000, размер входного файла не превышает 5 мегабайт.
Выходные данные
Для каждого слова в выходной файл нужно вывести строчку символов '*', длина которой должна быть равна количеству вхождений данного слова в текст. Перед каждой строчкой необходимо вывести соответствующее слово. Слова выводить в нижнем регистре.
Пример
input.txt
This string is test string
output.txt

this *
is *
test *
string **

Добавлено через 21 час 42 минуты
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
153
154
155
156
program WordGG;
type
  TPointer=^TNode;{указатель на узел}
  TNode=record{описание узла}
    strWord:string;{слово}
    count:integer;{частота встречи в файле}
    next:TPointer;{указатель на следующий элемент}
  end;
procedure InitList(var List:TPointer);
{процедура инициализации списка}
begin
  List:=nil;
end;
procedure AddToList(var List:TPointer;strWord:string);
{процедура добавления элемента в список на нужное место}
var
  NewNode,TempList:TPointer;{NewNode - новый узел, TempNode - вспомогательный указатель}
begin
  TempList:=List;{указатель на начало списка}
  while(TempList<>nil) and (TempList^.strWord<>strWord) do{пока не конец списка и не нашли повторений}
    TempList:=TempList^.next;{переход к следующему элементу списка}
  if TempList<>nil then{если не дошли до конца, то значит есть повторение}
    inc(TempList^.count){увеличиваем счетчик}
  else
  begin
    {создаем новый элемент}
    NewNode:=new(TPointer);{выделяем память в куче}
    NewNode^.strWord:=strWord;{записываем слово}
    NewNode^.count:=1;{инициализируем счетчик}
    {поиск нужного места}
    TempList:=List;{указатель на начало списка}
    if TempList<>nil then{если список не пуст}
    begin
      if NewNode^.strWord<List^.strWord then{если строка нового элемента должна стоять раньше первого в списке}
      begin
        NewNode^.next:=List;{следующий после нового первый в списке}
        List:=NewNode;{меняем указатель на первый элемент списка}
      end
      else
      begin
        while(TempList^.next<>nil) and (TempList^.next^.strWord<strWord) do{находим место вставки}
          TempList:=TempList^.next;
        {вставляем элемент}
        NewNode^.next:=TempList^.next;
        TempList^.next:=NewNode;
      end;
    end
    else{список пуст}
    begin
      NewNode^.next:=nil;{больше элементов нет}
      List:=NewNode;{первый элемент - только что созданный}
    end;
  end;
end;
procedure DeleteList(var List:TPointer);
{процедура удаления списка}
var
  TempList:TPointer;{вспомогательный указатель}
begin
  while(List<>nil) do{пока список не пуст}
  begin
    TempList:=List;{вспомогательный указатель на первый в списке}
    List:=List^.next;{двигаем указатель в списке}
    dispose(TempList);{освобождаем память для запомненного элемента}
  end;
end;
procedure CreateWordGGFile(strInputFileName,strOutputFileName:string);
{процедура создания гистограммы слов}
const
  SSymbols=['a'..'z','A'..'Z'];{мн-во символов}
var
  List,TempList:TPointer;{указатели на список и вспомогательный элемент соот-но}
  f:text;{текстовый файл}
  strWord:string;{для хранения прочитанного из файла слова}
  ch:char;{для чтения символа из файла}
  iMaxCount,iMaxLength,strLen,iLength:integer;
begin
  iMaxLength:=0;{инициализация максимальной длины строки}
  iMaxCount:=0;{инициализация максимального счетчика для слова}
  InitList(List);{инициализация списка}
  assign(f,strInputFileName);{связывание файловой переменной с файлом}
  reset(f);{открытие для чтения}
  while not eof(f) do{пока не конец файла}
  begin
    strWord:='';{инициализация слова}
    read(f,ch);{читаем символ}
    while not(eof(f) or (ch in SSymbols))do{пока прочитанный символ не буква}
      read(f,ch);{читаем символ}
    while not eof(f) and (ch in SSymbols) do{пока прочитанный символ буква}
    begin
      strWord:=strWord+ch;{добавляем букву к слову}
      read(f,ch);{читаем символ}
    end;
    if strWord<>'' then{если прочитанное слово не пусто}
    begin
      strLen:=Length(strWord);{узнаем длину слова}
      if strLen>iMaxLength then{если длина слова больше максимальной}
        iMaxLength:=strLen;{запоминаем максимальную длину слова}
      AddToList(List,strWord);{добавляем слово в список}
    end;
  end;
  close(f);{закрываем файл}
  assign(f,strOutputFileName);{связывание файловой переменной с фвйлом}
  rewrite(f);{открываем для перезаписи}
  TempList:=List;{указатель на начало списка}
  {ищем частоту слова, которое встречается чаще всего}
  while(TempList<>nil) do{пока не конец списка}
  begin
    if TempList^.count>iMaxCount then{если частота текущего слова больше}
      iMaxCount:=TempList^.count;{запоминаем максимальную частоту}
    TempList:=TempList^.next;{переход к следующему элементу}
  end;
  while(iMaxCount<>0) do{пока максимальная частота не равна 0}
  begin
    TempList:=List;{указатель на начало списка}
    while(TempList<>nil) do{пока не конец списка}
    begin
      if TempList^.count>=iMaxCount then{если частота текущего слова >= максимальной}
        write(f,'#'){печатаем символ #}
      else
        write(f,' ');{печатаем пробел}
      TempList:=TempList^.next;{переход к следующему элементу}
    end;
    writeln(f);{переход на следующую строку файла}
    dec(iMaxCount);{уменьшаем максимальную частотность}
  end;
  iLength:=1;{инициализация вспомогательной переменной}
  while(iLength<=iMaxLength) do{пока длина <= максимальной длине слова}
  begin
    TempList:=List;{указатель на начало списка}
    while(TempList<>nil) do{пока не конец списка}
    begin
      strLen:=Length(TempList^.strWord);{узнаем длину слова}
      if strLen>=iLength then{если длина текущего слова >= текущей длине}
        write(f,TempList^.strWord[iLength]){печатаем iLength'ую букву слова}
      else
        write(f,' ');{печатаем пробел}
      TempList:=TempList^.next;{переход к следующему элементу}
    end;
    writeln(f);{переходим к следующей строке файла}
    inc(iLength);{увеличиваем текущую длину}
  end;
  close(f);{закрываем файл}
  DeleteList(List);{удаляем список}
end;
var
  strInputFileName,strOutputFileName:string;
begin
  writeln('Please enter an input file name:');
  readln(strInputFileName);{вводим имя исходного файла}
  writeln('Please enter an output file name:');
  readln(strOutputFileName);{вводим имя выходного файла}
  CreateWordGGFile(strInputFileName,strOutputFileName);
  writeln('ok');
  readln;{ждем ввода}
end.
Вот код программы на Паскале...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru