-
Notifications
You must be signed in to change notification settings - Fork 67
/
Copy pathex_1-14a.c
44 lines (38 loc) · 1.44 KB
/
ex_1-14a.c
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
#include <stdio.h>
#include <limits.h>
int main()
{
int c, i, j, maxnum;
int ndigit[CHAR_MAX] = {0};
maxnum = 0;
for(i = 0; i < 10; i++)
ndigit[i] = 0;
while ((c = getchar()) != EOF)
if(c > CHAR_MAX) { /* chars outside CHAR_MAX skipped */ } else { ++ndigit[c]; }
/* print out histogram */
for(i = 0; i <= CHAR_MAX; ++i) // find maximim count to determine graph height
{
if(ndigit[i] > maxnum) { maxnum = ndigit[i]; }
}
for(i = 0; i < maxnum; ++i) // one row for each instance of number
{
printf("\n");
printf("%d\t|", maxnum-i); // print sidebar
for(j = 0; j <= CHAR_MAX; ++j) // one column for each number
{
if(ndigit[j] > 0) // skip chars not represented in file
{
if(ndigit[j] >= maxnum-i) { putchar('*'); } else { putchar(' '); }
}
}
}
/* print vertically ascii value of char printed */
printf("\n\t ");
for (i = 0; i <= CHAR_MAX; ++i) { if(ndigit[i] > 0) { printf("%d", i/100); } }
printf("\n\t ");
for (i = 0; i <= CHAR_MAX; ++i) { if(ndigit[i] > 0) { printf("%d", (i-(100*(i/100)))/10); } }
printf("\n\t ");
for (i = 0; i <= CHAR_MAX; ++i) { if(ndigit[i] > 0) { printf("%d", i-(10*(i/10))); } }
printf("\n");
return 0;
}