[ [[高橋のページ:http://tortoise1.math.ryukoku.ac.jp/~takataka/index-j.html]] ]
[ [[プログラミングおよび実習II]] ]

*プログラミングおよび実習II 2005年11月10日

#contents

**今日の課題: ヒープソート

[[解答例>プログラミングおよび実習II/解答例#ex1110]]

***課題1110-A (締切:11月10日,延長不可)

11月9日の演習問題を提出しチェックを受けて下さい.

***課題1110-B (締切:11月17日)

整数のデータが与えられたときに,

+ それを配列に格納する
+ それらをヒープソートで並べかえる
+ できた配列の内容を表示する

というプログラムを作りましよう.名前は heapsort.c としてください.
これまでの selectionsort.c などと同様に,

- データの数は最大100個
- まずデータの数を入力し,次に各データを順番に入力する

こととします.ただし,以下のことに気をつけて作成して下さい.

- データの並べかえには,課題1110-Aで紙に書いた関数 HeapSort() と11月2日に書いた関数 DownHeap() を使う
- HeapSort() の中では,関数 DownHeap() を呼び出した直後に  PrintData2() を呼ぶようにして,並べかえの途中経過がわかるようにして下さい.こんな感じでいい感じ
 printf("ヒープ作ってます♪\n");
 for(...){
   DownHeap(...);
   PrintData2(...);
 }
 printf("\n");
 
 printf("ならべかえてます♪\n");
 for(...){
   交換
   DownHeap(...);
   PrintData2(...);
 }

***課題1110-C (締切:11月17日,1110-A,Bを11月10日に提出した人のみ対象のボーナス課題)

以下の二つのプログラムを作成し動作確認して下さい.

+ フィボナッチ数(Fibonacci number)を計算するプログラム fibonacci.c
--自然数nの値を入力するとフィボナッチ数F(n)を計算して表示する
--F(n)の計算には,「int型の引数を一つ渡すとフィボナッチ数F(n)をint型で返す関数 Fibonacci() 」を使う
--Fibonacci()は,再帰呼び出しを使って定義する
--F(n)の定義は,
---F(n) = F(n-1) + F(n-2)    nが3以上の自然数のとき
---F(2) = 1
---F(1) = 1
--ちなみに,F(10) = 55, F(20) = 6765
+ 二つの自然数の最大公約数(Greatest Common Divisor: GCD)を求めるプログラム gcd.c
--二つの自然数aとbを入力するとその最大公約数を計算して表示する
--最大公約数の計算には,「int型の引数を二つ渡すとそれらの最大公約数をint型で返す関数 GCD()」を使う
--GCD()は,ユークリッドの互除法に基づき再帰呼び出しを使って定義する

ユークリッドの互除法のアルゴリズムについては解説しません(検索エンジンで「互除法」「再帰」をキーワードに検索してみるとよいでせう)が,

GCD(a, b) = a             bが0のとき~
GCD(a, b) = GCD(b, aをbで割った余り)  上記以外のとき

です.

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS