アルゴリズムとデータ構造Ⅰ:練習問題

2024/08/04

1. 単語暗記補助アプリ作成(目標時間:15分)

本科目のテスト後のG&W試験の単語対策で使える,単語暗記アプリを作ろう。以下の仕様に沿った,プログラムを作成せよ。
・WORD型を定義,中身は「spelling」「meaning」
・この定義したWORD型保存配列を動的確保する。【下2項目に注意】
・動的確保する際,読み込むデータ「DB.txt」の1行目をもとに,何個要素があれば良いのかを確認する。
・動的確保する際,main関数にあるDBポインタ(=ローカル変数≠グローバル変数)に先頭アドレスを代入する(グローバル変数にすれば圧倒的に楽になるが,練習として)。
・動的確保したWORD型保存配列(DB)の要素それぞれに,DB.txtからスペリングと意味を格納していく。
・一覧表示,およびテストモード(meaning check, spelling check)の3パターンを用意する。
・テストモードでは問題だけ表示,Enterが押されたら正答を表示する。
・終了する際には,メモリを解放するのを忘れない。

☆単語データが入った「DB.txt」を,こちらからダウンロードしてください。

DB.txtの仕様

データセット数(スペリングと単語の1セットが何個か)
スペリング1
意味1
スペリング2
意味2
...

☆プログラム雛形を,こちらからダウンロードしてください。
ダウンロードした雛形には,【1-1】〜【1-13】まで埋める箇所があるので,与えられた仕様を満たすようにプログラムを組んでください。
実行例と同じ動作をさせて正常に動けば,使う関数,変数名等は何を使っても良い。

実行例はこちら

◎解答例はこちら


2. 擬似チャットアプリ(目標時間:40分)

自分がメッセージを送信したら,会話が返ってくるようなチャットアプリを作ろう。以下の仕様に沿った,プログラムを作成せよ。
・機能は「送信・受信(自動)」「送信取り消し」「ID検索」の3つ。
・MESSAGE型を定義。中身は「要素数LENGTH_MESSAGEのchar型配列message」「int型ID」「int型me」「自己参照型構造体nextMessage」
・送信の場合は,キーボードから文字列を受け取り(スペースが入るとそこで区切られてしまうが今回は許容),使うべき構造体の「message」に代入。この際,改行コードが入ってしまっているので,removeLF()で取り除く。
 代入ができた後は,同じ構造体の「ID」にcreateID()の戻り値,「me」に1,「nextMessage」にNULLポインタを代入。
・送信処理が終了すると,必ず1回getMessage()が呼ばれ,他人からメッセージを受け取ったような挙動をする。
・getMessage()において,構造体に入れる「message」はグローバル配列のMessageTemplateからランダムに一つ,「ID」は0にする。
・キーボードからの数値入力は,必ずGetNum()を通すこと。
・送信取り消しの場合,まずは検索ID(数値)を入力させ,(MESSAGE型)headから順番にそれぞれのIDが一致するかを調べる。↓↓
 - IDが見つかり,かつ,そのメッセージは自分が送信したもの(me=1)なら,該当MESSAGEを削除,一つ前の「nextMessage」を修正する。関数として1を返す。
 - IDが見つかったが,自分の送信したものでなければ(me=0),「自分が送信したメッセージのみ削除可能です」というメッセージと共に,関数として0を返す。
 - IDが見つからなければ,「該当IDが見つかりませんでした」というメッセージと共に,関数として0を返す。
・削除したMESSAGEは,メモリを解放すること。
・ID検索の場合は,検索ID(数値)を入力させ,(MESSAGE型)headから順番にそれぞれのIDが一致するかを調べる。↓↓
 - IDが見つかれば,printMessages()を呼ぶ。引数にはIDを渡す。
 - IDが見つからなければ,「該当IDが見つかりませんでした」というメッセージと共に,関数を終了。
・今回,終了がユーザによって選択された場合のMESSAGEメモリ解放は,実装しなくても良い。
・その他,不明瞭な点は雛形から読み取れる部分は自分で読み取り,実装をすること。

☆プログラム雛形を,こちらからダウンロードしてください。
ダウンロードした雛形には,【2-1】〜【2-4】まで埋める箇所があるので,与えられた仕様を満たすようにプログラムを組んでください。
実行例と同じ動作をさせて正常に動けば,使う関数,変数名等は何を使っても良い。

実行例はこちら

◎解答例はこちら


※環境によっては,文字コードを変更しないと正しく表示されません。

※わからないところは,このサイトやネット検索で探そう。