Напишите программу, печатающую гистограммы частот встречаемости вводимых символов.
int main(void)
{
int ascii[128]; /* коды ASCII таблицы от 0 до 127 */
int c = 0;
int i, j;
for (i = 0; i < 128; ++i) /* заполняем массив нолями */
ascii[i] = 0;
while ((c = getchar()) != EOF)
{
if (c < 128) /* только стандартная таблица ASCII */
++ascii[c]; /* прирост гистрограммы */
}
/* Печать гистрограммы частот встречаемости вводимых символов */
/* Учитывать будем только символы, которые можно ввести
* с клавиатуры, кроме BS (backspace - клавиша <Enter>)
* TAB (horizontal tab) и т.д.,
* тоесть, символы которые имеют коды в диапазоне [32; 127]*/
for (i = 32; i < 127; ++i)
{
if (ascii[i] > 0) /* был ли символ введен хоть раз*/
{
printf("\"");
putchar(i); /* вывод символов - параметров гистрограммы */
printf("\": ");
/* печать гистрограммы */
for (j = 1; j <= ascii[i]; ++j)
printf("*");
printf("\n");
}
}
return 0;
}
<Ctrl>+<D>
" ": *********
"$": ***
"%": *
"&": *
"(": *
")": *
"*": *
"+": *
"0": **
"1": ***
"2": ***
"3": *
"4": *
"5": *
"7": *
"8": *
"9": *
"=": ***
"@": ***
"A": ****
"B": *
"G": *
"K": *
"L": *
"M": *
"N": *
"P": *
"R": **
"S": **
"T": ****
"Y": *
"\": **
"_": *
"d": **
"e": *
"f": *
"h": *****
"l": *
"t": *
"w": *
"|": **
"~": ***
int main(void)
{
int ascii[128];
int c = 0;
int i, j;
int max = 0; /* "вершина" гистрограммы */
for (i = 0; i < 128; ++i)
ascii[i] = 0;
while ((c = getchar()) != EOF)
{
if (c < 128)
++ascii[c];
if (ascii[c] > max)
max = ascii[c];
}
for (i = max; i >= 1; --i)
{
for(j = 32; j <= 127; ++j)
{
if (i > ascii[j])
printf(" ");
else
printf("*");
}
printf("\n");
}
for (i = 32; i < 128; ++i)
putchar(i);
printf("\n");
return 0;
}
*
*
*
*
* *
* * * *
* * ** * ** * * *
* * *** * ** *** * * * * *
* *** **** ****** *** * *** * **** * *** * * * *** * * * * * *
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}
$ vim ex_1_14.c#include <stdio.h>
int main(void)
{
int ascii[128]; /* коды ASCII таблицы от 0 до 127 */
int c = 0;
int i, j;
for (i = 0; i < 128; ++i) /* заполняем массив нолями */
ascii[i] = 0;
while ((c = getchar()) != EOF)
{
if (c < 128) /* только стандартная таблица ASCII */
++ascii[c]; /* прирост гистрограммы */
}
/* Печать гистрограммы частот встречаемости вводимых символов */
/* Учитывать будем только символы, которые можно ввести
* с клавиатуры, кроме BS (backspace - клавиша <Enter>)
* TAB (horizontal tab) и т.д.,
* тоесть, символы которые имеют коды в диапазоне [32; 127]*/
for (i = 32; i < 127; ++i)
{
if (ascii[i] > 0) /* был ли символ введен хоть раз*/
{
printf("\"");
putchar(i); /* вывод символов - параметров гистрограммы */
printf("\": ");
/* печать гистрограммы */
for (j = 1; j <= ascii[i]; ++j)
printf("*");
printf("\n");
}
}
return 0;
}
$ cc -g -O0 -Wall -o a.out ex_1_14.c
$ ./a.outGtflYT$%089712@@AAAhhhhhKLM NATR BSd P@$$w0Rd TeST 12345&*()_+=== 12~~~||\\
<Ctrl>+<D>
" ": *********
"$": ***
"%": *
"&": *
"(": *
")": *
"*": *
"+": *
"0": **
"1": ***
"2": ***
"3": *
"4": *
"5": *
"7": *
"8": *
"9": *
"=": ***
"@": ***
"A": ****
"B": *
"G": *
"K": *
"L": *
"M": *
"N": *
"P": *
"R": **
"S": **
"T": ****
"Y": *
"\": **
"_": *
"d": **
"e": *
"f": *
"h": *****
"l": *
"t": *
"w": *
"|": **
"~": ***
Вертикальные полосы.
$ vim ex_1_14_3.c#include <stdio.h>
int main(void)
{
int ascii[128];
int c = 0;
int i, j;
int max = 0; /* "вершина" гистрограммы */
for (i = 0; i < 128; ++i)
ascii[i] = 0;
while ((c = getchar()) != EOF)
{
if (c < 128)
++ascii[c];
if (ascii[c] > max)
max = ascii[c];
}
for (i = max; i >= 1; --i)
{
for(j = 32; j <= 127; ++j)
{
if (i > ascii[j])
printf(" ");
else
printf("*");
}
printf("\n");
}
for (i = 32; i < 128; ++i)
putchar(i);
printf("\n");
return 0;
}
$ cc -g -O0 -Wall -o a.out ex_1_14_3.c
$ ./a.outGtflYT$%089712@@AAAhhhhhKLM NATR BSd P@$$w0Rd TeST 12345&*()_+=== 12~~~||\\
*
*
*
*
* *
* * * *
* * ** * ** * * *
* * *** * ** *** * * * * *
* *** **** ****** *** * *** * **** * *** * * * *** * * * * * *
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}
Примечание!
1. В программе печати вертикальной гистрограммы частот печатаются все символы из таблицы ASCII. А надо, чтобы выводились только те, которые вводились (ascii[i] > 0);
2. В основе гистрограммы (в ее параметрах) не печатается символ '~' (тильда).
попробовал убрать лишние пробелы, для начала неплохо вышло)
ОтветитьУдалитьmain()
{
int ascii[128];
int c = 0;
int i, j;
int max = 0;
for(i=0;i<128;++i)
ascii[i]=0;
while((c=getchar()) !=EOF)
{
if (c<128)
++ascii[c];
if (ascii[c]>max)
max=ascii[c];
}
for (i=max;i>=1;--i)
{
for (j=32;j<127;++j)
{
if (ascii[j]<1)
printf("");
else
if(i>ascii[j])
printf(" ");
else
printf("*");
}
printf("\n");
}
for(i=32;i<128;++i)
{
if (ascii[i]>=1)
putchar(i);
else
putchar(0);
}
printf("\n");
}