LECTURE 講義・技術関連情報|谷口忠大Home Page(たにちゅー・どっと・こむ)

HOME > LECTURE > 担当講義 > 2009年度 プログラミング演習2  鬼門 課題8-4を解く

担当講義

2009年度 プログラミング演習2  鬼門 課題8-4を解く

2010-01-07 (thu)|カテゴリー:

以下の三段階で解けばいいでしょう.

決して一気に解こうとせずに,各段階で出来ているか確認して下さい.

(1) データ構造として 構造体の配列を用意する.

(2) ファイルから文字を数え上げる.

(3) 配列の二つの要素を入れ替える関数を作る.

(4) ヒープソートを作成する.

 

(1) データ構造として 構造体の配列を用意する.

標準的には

 

#define MAX_CHAR 1000

typedef struct _chdata {
    int        count;
    char    name;
} CHDATA;

CHDATA chdata[MAX_CHAR]; //構造体の配列で作る場合。

int     n_char;    /* 文字の種類 */
int     total_char;    /* 総文字数 */

 

のように確保すればよいでしょう.

 

 

(2) ファイルから文字を数え上げる.

新しい文字が出てくる旅に,使っていない配列の要素 chdata[n_char] のnameに

新しい文字を割り当て,count を1にします.

その後,同じ文字が出てくる度に count を1増やして行きましょう.

 

この時,大文字を小文字に替えることや 改行(\n),tab(\t)などをスペースに

替えるコトなどをわすれずに

 

(3) 配列の二つの要素を入れ替える関数を作る.

 

chdata[i] と chdata[k] を入れ替える swap関数を作りましょう.

 

(4) ヒープソートを作成する.

データ構造とアルゴリズムでのヒープの復習をした上で,

ヒープの一次元配列による表現 を理解しましょう (教科書p.136など)

その上でヒープソートの動きを理解し (こちらのページも参照

 

その上で,教科書 p.137 のソースコードをホボ写しましょう.

 

このソースコードを一生懸命読解する!! ←ここ山場!!

 

これが何をやっているか理解出来れば,

それを今回のプログラムに合うように,修正してあげれば,

8-4が達成されます.

 

 

追記:

プログラムを進めるうえで, 配列の状況を常にチェックするようにした方が良いので

現在のデータを出力する関数

void print_all_data(){
    for(i=0;i<n_char;i++){
        printf(”%c  %d\n”,chdata[i].name,chdata[i].count);
    }
}

のようなものを先に作っておくとよいでしょう.

COMMENTS コメント

コメントの投稿




*


下記のタグが使用できます。
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt=""> <pre lang="" line="" escaped="">

インフォメーション



tanichuの著作

copyright © Tadahiro Taniguchi All Right Reserved.