Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 23.11.2011
Сообщений: 4
1

Столбиковая гистограмма: количество слов, заканчивающихся на буквы введённого алфавита

23.11.2011, 12:57. Показов 1141. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Суть задачи в следующем:

Пользователь вводит алфавит и строку.
Нужно нарисовать столбиковую гистограмму, которая будет отображать какое количество слов заканчивается на буквы введённого алфавита. К примеру пользователь вводит:
a b c d
dfga dfghb dfgb yuc eryc eryc

Тогда а-1, b-2, с-3. И соответственно построить 3 линии в процентном соотношении.

Вот что я написал без вывода гистограммы:


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
program z1;
uses crt;
var
        alf,s:string;  mas:array [1..100] of char;
        ms:array[1..100,1..100] of char;  x:array [1..100] of integer;
        i,j,n:integer; m:set of char;
begin
clrscr;
 
n:=1;
m:=[];
readln(alf);
 
 
readln(s);
 
for i:=1 to length(alf) do begin
ms[1,i]:=alf[i];
x[i]:=0;
end;
 
for i:=1 to length(alf) do begin
m:=m+[alf[i]];
end;
if s[length(s)] in m then mas[length(s)]:=s[length(s)];
 
for i:=1 to length(s) do begin
if s[i]=' ' then
if s[i-1] in m then  mas[n]:=s[i-1]; n:=n+1;
 
end;
 
for i:=1 to n do begin
if mas[i] in m then
for j:=1 to length(alf) do begin
if mas[i]=ms[1,j] then x[j]:=x[j]+1;
end;
end;
 
 
for j:=1 to length(s) do begin
write (ms[1,j]);
end;
 
for j:=1 to length(alf) do begin
if x[j]<>0 then
write (' ',x[j]);
end;
readln;
end.
Вот как теперь построить эти столбики?((.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2011, 12:57
Ответы с готовыми решениями:

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

Определить количество слов, чтобы задействовать все буквы русского алфавита
Вводится последовательность слов. Определите, какое количество слов потребуется, чтобы ...

Найти количество слов содержащих только символы латинского алфавита, а среди них количество слов с гл. и согл
Найти количество слов содержащих только символы латинского алфавита, а среди них количество слов с...

Выдать буквы с указанием количества слов, начинающихся и заканчивающихся на них
Разработать программу &lt;&lt;подсчет слов&gt;&gt;. Дан файл,содержащий текст на русском языке. Подсчитать...

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,432
Записей в блоге: 8
23.11.2011, 13:47 2
Как-то вот так (если используются только строчные латинские буквы) :
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
program z1;
uses
   crt;
 
const
   full = 15; // <--- Самый высокий столбик гистограммы будет высотой в 15 символов
 
var
   alf, s : string;
   count : array['a' .. 'z'] of integer;
   ch : char;
 
   i, j : integer;
   m : set of char;
   max, col, colcount, row : integer;
 
begin
   clrscr;
   m := [];
   readln(alf);
   alf := 'a b c d';
   for i := 1 to length(alf) do
   begin
      if alf[i] <> ' ' then m := m + [alf[i]];
   end;
 
   readln(s);
   // s := 'dfga dfghb dfgb yud eryd eryd eee dec ded dea dea dea dea dea';
 
   if s[length(s)] in m then count[s[length(s)]] := 1;
   for i := 1 to length(s) do
   begin
      if (s[i] = ' ') and (i > 1) and (s[i - 1] in m) then
         inc(count[s[i - 1]]);
   end;
 
   max := 0; colcount := 0;
   for ch := 'a' to 'z' do
   begin
      if count[ch] > 0 then
      begin
         write(ch:3, count[ch]:2);
         if count[ch] > max then max := count[ch];
         inc(colcount);
      end;
   end;
 
   ch := 'a';
   for col := 1 to colcount do
   begin
      gotoxy(2 * col, full + 5);
      while count[ch] = 0 do ch := succ(ch);
      write(ch);
      for row := 1 to trunc(count[ch] * full / max) do
      begin
         gotoxy(2 * col, full + 4 - row);
         write('*'); // <--- Символ можешь изменить
      end;
      ch := succ(ch);
   end;
   readln;
end.
1
0 / 0 / 0
Регистрация: 23.11.2011
Сообщений: 4
25.11.2011, 08:47  [ТС] 3
спасибо большое!
0
25.11.2011, 08:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.11.2011, 08:47
Помогаю со студенческими работами здесь

Объявить два диапазонных типа: один буквы русского алфавита, второй буквы английского алфавита
Объявить два диапазонных типа: один буквы русского алфавита, второй буквы английского алфавита....

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

Посчитать в строке количество слов, заканчивающихся на «ка»
Посчитать в строке количество слов, заканчивающихся на «ка». P.S.Прошу сделать программу как...

Подсчитать количество слов, заканчивающихся буквой И
Дан текст произвольной длины, оканчивающиеся точкой. Текст состоит из слов, разделенных...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru