-
Notifications
You must be signed in to change notification settings - Fork 67
/
Copy pathex_1-14.c
77 lines (70 loc) · 1.38 KB
/
ex_1-14.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
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
#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;
}