|
学校の授業で情報源記号としての文字を入力して、さらにその発生確率を入力すれば、符号化の木と
各々の符号語が表示されるプログラムをつくるのが課題に出たのですが、行き詰まって
しまいました。このような表示の場合は、どのような方法で表示すればいいのか
アドバイスを願います。とりあえずは、文字以外の表示方法が、graphic関数と
curses関数しかしらないので、cursesで表示しようとしています。しかし
表示位置などを表すのが本人しかわからないぐらい見辛くなってしまいました。
そのプログラムは、
#include<stdio.h>
#include<stdlib.h>
#include<curses.h>
#define MAX_DATA (10)
#define SCREEN_HEIGHT (8)
#define SCREEN_WIDTH (90)
void sort(int i);
void curses(int num);
void indicate(int num);
/*とりあえずデータは入れる。*/
float proba[MAX_DATA]={0.3,0.4,0.25,0.1,0.7};
char chara[MAX_DATA]="abcdefg";
WINDOW * screen;
int main(){
int i,num;
/*取り込む文字数*/
num = 7;
printf("Input charactor number : \n");
scanf("%d",&num);
if(num != 1){
curses(num);
}
}
void curses(int num){
initscr();
cbreak();
noecho();
screen = newwin(num*4+5,SCREEN_WIDTH,0,0);
wtimeout(screen,30);
box(screen,'|','-');
indicate(num);
endwin();
}
void indicate(int num){
int i,j,k,l,m,n;
mvwaddstr(screen,1,SCREEN_WIDTH-5,"mark");
/* first */
/*下から順に二つの葉を繋げていく(こんな単純なパターンだけでは無理)*/
for(i = 0; i<num; i++){
mvwaddch(screen,i*4+2,SCREEN_WIDTH-18,'o');
mvwprintw(screen,i*4+3,SCREEN_WIDTH-20,"%c(%f)",chara[i],proba[i]);
}
i--;
for(j = 0; j<num-1; j++){
mvwaddstr(screen,i*4+2-j*2,SCREEN_WIDTH-21-4*j,"___");
for(k = 0; k<4+j*2; k++){
mvwaddch(screen,i*4+2-j*2-k,SCREEN_WIDTH-22-4*j,'|');
}
for(l = 0; l<3+j*4; l++){
mvwaddch(screen,i*4-2-j*4,SCREEN_WIDTH-19-l,'_');
}
mvwaddch(screen,i*4+1-j*2-k,SCREEN_WIDTH-22-4*j,'0');
mvwaddch(screen,i*4+8-k,SCREEN_WIDTH-22-4*j,'1');
}
for(m = 1; m<3; m++){
mvwaddch(screen,j+4,SCREEN_WIDTH-18-4*j-m,'_');
}
wmove(screen,0,0);
wrefresh(screen);
sleep(60);
}
|