1.6.1. 실습 예제 2개
실습 전 이론
히스토그램 - 표로 되어 있는 도수 분포를 정보 그림으로 나타낸 것이다.
히스토그램에 대한 정의를 잘 몰라서 찾아봤다. 근데 어떤식으로 진행하면 될지에 대한 정보까지 봐버려서; 좀 아쉽네
실습 예제
1번 문제 입력된 단어의 길이에 대한 히스토그램을 작성하는 프로그램을 작성하라
#include <stdio.h>
#define IN 1
#define OUT 0
#define UPPER 10
int main(){
int c, i;
int ndigit[30];
int wordLength = 0;
int state;
/*배열 안에 요소들을 0으로 지정해주나봄; 이거 일일히 해야되는구나; */
for (i = 0; i < UPPER; ++i){
ndigit[i] = 0;
}
state = IN;
while ((c = getchar()) != EOF){
if (state = IN && c != '\n' && c != '\t' && c != ' '){
++wordLength;
}
else {
++ndigit[wordLength];
wordLength = 0;
state = OUT;
}
}
printf("단어의 길이가 1인 단어의 갯수는 %d\n", ndigit[1]);
}
한번에 만들기는 너무 복잡해서 일단 테스트용으로 만들었다. 1개 길이의 단어만 입력하고 출력을 테스트했다.
정상적으로 동작하는 것을 확인
#include <stdio.h>
#define IN 1
#define OUT 0
#define UPPER 10
int main(){
int c, i;
int ndigit[30];
int wordLength = 0;
int text;
int state;
int index;
/*배열 안에 요소들을 0으로 지정해주나봄; 이거 일일히 해야되는구나; */
for (i = 0; i < UPPER; ++i){
ndigit[i] = 0;
}
state = IN;
while ((c = getchar()) != EOF){
if (state = IN && c != '\n' && c != '\t' && c != ' '){
++wordLength;
}
else {
++ndigit[wordLength];
wordLength = 0;
state = OUT;
}
}
for (index = 0; index < UPPER; ++index){
printf("[%d]", index);
for (text = 0; text < ndigit[index]; ++text){
printf("=");
}
printf("\n");
}
}
위 테스트를 통해 길이 별 단어의 갯수를 파악해 = 문자를 반복하여 출력해서 그래프 모양으로 만들어줬다.
2번 문제 - 입력된 문자들의 사용빈도를 나타내는 히스토그램을 출력하는 프로그램을 작성하라
이건 ndigit[] 배열의 첨자를 미리 지정하지 않고 새로운 단어가 들어갈때마다 추가해줘야 될까?
그럼 입력 값이 이미 ndigit 배열 안에 들어가 있는지를 확인하는 코드 부터 짜봐야겠다.
실습 후 이론


