• 締切済み

データ構造とアルゴリズム

学校の課題なのですが、試験の得点順(降順)に学生番号と得点を表示することができるシステムを行っています。 仕様は下記の通りです。 外部仕様 1.試験の得点順(降順)に学生番号と得点を表示 2.機能メニュー(1:追加、2:削除、3:表示、1~3以外:終了)で操作できる 3.機能メニューの1:追加を選択すると、キーボードから学生番号と得点を入力することができる 4.機能メニューの2:削除を選択すると、キーボードから入力した学生番号のデータを削除することができる。 5.機能メニューの3:表示を選択すると、入力されているデータが、得点順に表示される 内部仕様 1. 使用言語はC言語とする 2. ダミーノードを使わない順方向リスト構造とする 3. リストのノードは構造体を使用する 4. リストのノードが常に得点の降順で並ぶように追加する 5. 入力データ型は、機能メニューを選択するための数字と得点は整数型、学生番号は文字列型とする 6. 先頭のノードのポインタを格納する変数名はheadとする 7. 全体の処理の流れは図1のとおりとし、【テンプレート・プログラム】の必要箇所に必要な機能を追加して完成させるものとする。テンプレート・プログラムで使用されている変数名は、そのまま使用すること。 8. 機能メニューは、関数名:menu()で表示する。menu()の仮引数は無し、戻り値は、キーボードから入力されたメニュー番号(整数)とする。 9. 機能メニューの1:追加では、関数名:insert()において先頭ノードから最後尾ノードに向けて順にキーボードから入力した得点と大小関係を比較し、得点の降順で並ぶように挿入位置を決めるためのアルゴリズムを考えて、新たなノードをリストに挿入する。関数名:insert()、仮引数:無し、戻り値:無し。なお、新しく追加するノードのポインタアドレスは変数pを使用する。追加する場所を探すために参照するノードのポインタアドレスは変数p2を使用する。 10. 機能メニューの2:削除では、関数名:del()においてキーボードから削除する学生番号を入力し、該当するノードを削除する。学生番号が見つからない場合は何もしない。関数名:del()、仮引数:無し、戻り値:無し。なお、文字列の比較には、strcmp()関数を使用する。 11. 機能メニューの3:表示では、関数名:disp()において先頭のノードから学生番号と得点を表示する。関数名:disp()、仮引数:無し、戻り値:無し。 この、追加機能のinsert、削除機能のdel、dispをどのように記述すればいいのかが分かりません。 分かる方宜しくお願いいたします。

みんなの回答

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>追加機能のinsert、削除機能のdel、dispをどのように記述すればいいのかが分かりません。 仕様を満たしていればどのように書いてもよいです。 # ま、なにもかも指定されているので「そのまま記述するだけ」ですが。

massulu
質問者

お礼

すいません。おっしゃる通りですね。 少しパニックになっていたので変な質問をしてしまいました。 今日自己解決しました。ご迷惑おかけしました。

関連するQ&A

  • C言語の問題なのですが、分からないので教えて下さい

    以下のようなメニューを表示し,各項目の機能を実現して結果を表示するプログラムを作成せよ。 リストは1つとし,初期値は「15 4 32 1」である。 ・データの追加,削除を行う関数を作成する。 ・データの追加に関して,そのデータはリストの最後に挿入されるものとする。 ・データのソート(降順)を行う関数を作成する。 ・リストの平均値を計算し出力する関数を作成する。 ------表示例------- 1.データの追加 2.データの削除 3.データのソート(降順) 4.リストの平均値 5.終了 何を実行しますか: ------------------- ------実行例------- 1.データの追加 2.データの削除 3.データのソート(降順) 4.リストの平均値 5.終了 何を実行しますか:1 追加するデータを入力してください:10 リスト: 15 4 32 1 10 1.データの追加 2.データの削除 3.データのソート(降順) 4.リストの平均値 5.終了 何を実行しますか:4 リストの平均値:12.4 リスト: 15 4 32 1 10 1.データの追加 2.データの削除 3.データのソート(降順) 4.リストの平均値 5.終了 何を実行しますか:3 リスト: 32 15 10 4 1

  • 電話番号の探索アルゴリズム

    どうぞよろしくお願いします。 電話番号検索を行うjavaプログラムを作ろうとしているのですがどう書けばいいか分からず、ぜひご教授願いたいと思いました。 ・最初に顧客番号(2桁の数字)・顧客名(Yamadaなど姓のみ)・電話番号(09012345678、ハイフンなし)という顧客データを10人以上プログラム中でセットし、顧客番号または姓をもとに電話番号を調べるアルゴリズムを作成する。 ・顧客番号と顧客名の入力データ、電話番号データを両方表示させる機能をつけなければならない。 ・(もし可能なら)データリストへの顧客データの追加or削除機能を盛り込みたい 調べたところによると、線形リスト?というものが適しているという情報しか得られず、悪戦苦闘しております。 具体的にコードをどう書けばいいのか、もしくは参考になるURLがありましたらぜひ教えて頂けたら幸いです。 よろしくお願い致します!

  • C言語 構造体でつまずいています

    以下、番号と点数を入力して構造体配列に入力し、番号に0が入力されたら、入力処理をやめ、平均点を表示するプログラムです。  今のコードでは、最初から番号に0を入力すると、0除算になりエラーになります。どうすれば良いのでしょうか? #include <stdio.h> #define MAX 50 //配列の要素数を定義 int count=0; //グローバル変数 struct data { //構造体の定義 int num; //メンバの宣言 int ten; }; void nyuryoku(struct data *); //プロトタイプ宣言 float heikin(struct data *); //プロトタイプ宣言 void main() { struct data score[MAX]; //構造体の宣言 printf("**学生番号/点数入力**\n"); printf("\n"); nyuryoku(score); //nyuryoku関数呼び出し printf("\n**以上%d名の平均点:%0.1f点**\n",count,heikin(score)); //heikin関数の戻り値表示 } //nyuryoku関数 //機能:構造体配列にデータを入力する void nyuryoku(struct data *pd) //仮引数pdに構造体ポインタが渡る { int i; for(i=0;i<MAX;i++){ printf("学生番号>>"); scanf("%d",&pd->num); if(pd->num==0){ //学生番号に0を入力するとループを抜ける break; } printf("点  数>>"); scanf("%d",&pd->ten); count++; //人数のカウント pd++; //構造体配列を一つずらす } } //heikin関数 //機能:構造体配列の点数の平均を計算、戻り値として返す float heikin(struct data *pd) //仮引数pdに構造体ポインタが渡る { int i; int sum=0; float ave=0; for(i=0;i<MAX;i++){ if(pd->num==0){ break; } else{ sum+=pd->ten; //点数を加算 pd++; } } ave=(float)sum/count; //平均値を求める return(ave); //平均値を戻り値として返す }

  • Java問題 できればソースコードを教えて下さい。

    <フィールド> ・private int id :識別用の番号(受験番号や学籍番号のようなもの) ・private int point :得点 <コンストラクタ> ・引数が2個(番号, 得点)のコンストラクタのみを作成する. <メソッド> ・public void show() : フィールドの内容を1行で表示する. 形式は,「番号:○○○○,氏名:○○○○」とする. 引数と戻り値は無し. ・public int getID() :idのゲッター(引数は無し,戻り値は id) ・public int getPoint() :pointのゲッター(引数は無し,戻り値は point) 何人分のデータを保存するのかをユーザーに質問して回答を得る. (2) 指定された人数分の Student クラスの配列を準備する. (3) 指定された人数分のデータを入力する. (4) すべてのデータをループとshow()を利用して出力する. (5) 最高得点,最低得点,平均点も算出して表示する. ※平均点の計算は,割り算を行う前に double 型にキャストすることを忘れずに お願いします

  • SQL文のGROUPとORDERの順番

    こんににちは、 得点表(学生番号、科目コード、得点)があります。 得点表から各学生の合計得点を求めて降順に整列する場合の正解は、 SELECT 学生番号,SUM(得点) FROM 得点表 GROUP BY 学生番号 ORDER BY 2 DESC だったのですが、この2はSUM(得点)のことでしょうか? また、 SELECT 学生番号,SUM(得点) FROM 得点表 ORDER BY 2 DESC GROUP BY 学生番号 のようにGROUP と ORDER をひっくり返した場合、間違いになるのでしょうか? お分かりの方がいましたら教えてください。 よろしくお願いします。

  • javaプログラミングで標準APIを用いたリストを作成したいのですが・・・

    タイトルの通り、リストで簡単な個人情報を管理するプログラムを作成しています。 「こんな機能を使うといいよ」とか、「こういう風にプログラムを組んだほうがいいよ」などのアドバイスがあれば書いて頂けると助かります。 プログラムの仕様は下記の通りです。 ・mainメソッドをもつクラスのファイル名はPersonalDataList.javaとする。 ・個人情報の管理はリストを使う。 ・登録できるデータ件数の制限はなしとする ・実装する機能 - 個人情報の追加…キーボードで入力された個人情報をリストに追加する - 個人情報の一覧表示…登録済みの個人情報を一覧表示する - 個人情報の削除…指定された番号の個人情報をリストから削除する - 個人情報をソート…登録済みの個人情報を、指定されたフィールド・順序(昇順・降順)にソートする - 個人情報の検索…登録済みのデータの中から、キーボードで入力された文字列を一致する名前の個人情報を全て表示する 取り扱う個人情報個人情報は以下の通りです。 [フィールド名]  [意味]   [データ型]    name 名前 String address 住所 String age 年齢 int telephone 電話番号 String また、これらの個人情報を扱うクラスとして"Person"というクラス名のクラスを用意します。 使用する標準APIに特に制限はありません。 現在私が考えているのは、以下の通りです。 ・リストはArrayListを使う ・キーボードからの入力する文字列はBufferReaderを用いる ・キーボードから入力した文字列を数値に変換するのに、Integer parseInt()を用いる プログラムを起動すると以下のようなメニューが表示される 1.個人情報の追加 2.個人情報の削除 3.個人情報の一覧表示 4.個人情報のソート 5.個人情報の検索 コマンドを入力して下さい>※←ここに各メニュー項目の番号を入力 1.個人情報の追加を選んだ場合、以下のメッセージを表示 個人情報を入力して下さい。 名前>※←ここに名前を入力してEnterキーを押すと下に進む。以下同様 住所>※ 年齢>※ 電話番号>※ 入力が完了したら、メニュー画面に戻る。 それぞれ正しく入力されなかった場合、エラーメッセージを表示しメニュー画面に戻る 2.個人情報の削除を選んだ場合、以下のメッセージを表示 削除したい個人情報の番号を入力して下さい >※←ここに番号を入力し、Enterキーを押すと指定した番号の個人情報が削除される 登録されている番号以外、または数値以外のものが入力された場合、エラーメッセージを表示してメニューに戻る 3.個人情報の一覧表示を選んだ場合、登録されている個人情報を全て一覧表示し、メニュー画面に戻る 4.個人情報のソートを選択した場合、以下のメッセージを表示 フィールドを選択して下さい。 1.名前 2.住所 3.年齢 4.電話番号 >※←ここに各メニュー項目に対応した数値を入力する 上記以外の数値、または数値以外が入力された場合はエラーメッセージを表示し、メニュー画面に戻る。 数値を入力し、Enterキーを押すと、以下のようにソートする順序を選択するメッセージが表示される ソート順序を入力して下さい 1.昇順 2.降順 >※←ここに数値を入力する 数値を入力し、Enterキーを入力するとメニュー画面に戻る。 上記以外の数値、または数値以外が入力された場合はエラーメッセージを表示し、メニュー画面に戻る。 5.個人情報の検索を選択した場合、以下のメッセージが表示される。 検索したい名前を入力してください。 >※←ここに名前を入力する 名前を入力し、Enterキーを押すと、入力した名前とリストに登録されている名前が一致した個人情報を全て一覧表示し、メニュー画面に戻る。 一致する名前が登録されていない場合、エラーメッセージを表示してメニュー画面に戻る。 以上が現在私が思い描いているものです。まだプログラムは組んでいません。 どうかご協力よろしくお願い致します。

    • ベストアンサー
    • Java
  • Excel昇順関数について

    データの昇順・降順方法として、メニューから「データ」→「並べ替え」とする方法がありますが、関数で同じことを実現できるものはあるのでしょうか?(例)A列に上から、「5、3、1、4、2」と並んでいるときに、(関数を入力した)B列上から「1、2、3、4、5」と表示する。

  • 構造体の問題で・・・

    どなたか以下のC言語-構造体の問題を教えていただけないでしょうか? 問題 構造体 data_t に年齢[int型]の一つのメンバをもつ構造体 info_t を追加し、以下の関数を使用して、平均年齢を出力するプログラムを作成。 [条件] ・年齢は、input関数を使用し、標準入力で設定するものとする。 ・年齢は1~99までの範囲とし、範囲外の年齢が入力された場合はエラー出力しプログラムを終了する。 ・平均年齢の小数点以下は切り捨てる。 [出力例] 社員番号を入力して下さい-> ★15を入力 氏名を入力して下さい->    ★suzukiを入力 年齢を入力して下さい->    ★28を入力 社員番号を入力して下さい-> ★20を入力 氏名を入力して下さい->    ★satouを入力 年齢を入力して下さい->    ★52を入力 社員番号を入力して下さい-> ★25を入力 氏名を入力して下さい->    ★tanakaを入力 年齢を入力して下さい->    ★17を入力 社員番号   氏名    年齢 15      suzuki    28 20       satou    52 25       tanaka     17 [関数] int avetage(struct data _t*);   意味 : 3人分の平均年齢を計算する関数   引数 : data_t配列ポインタ   戻り値: 平均年齢を返却 void output(struct data_t*,int);   意味 : data_t配列に設定された年齢を含むデータ及び、平均年齢を出力する関数。   引数 : data_t配列ポインタ、平均年齢。 ----------------------------- 問題は以上なのですが、どなたか教えていただけないでしょうか? できれば解説が少しでもあれば助かるのですが(><) よろしくお願いします。

  • 戻り値でも入力規則を生かせる方法はありますか?

    こんにちは。エクセル関数初心者です。 エクセルで関数の戻り値を表示するセルに入力規則が設定されているのですが、それが生かされません。 そのセルに直接その値を入力すればエラーメッセージが出ます。 戻り値でもエラーであれば、メッセージ、あるいは何らかの表示(セルの色が変わるとか・・・)が出るようにはできないものでしょうか? アドバイスをいただけると嬉しいです。 よろしくお願いいたします。

  • 関数 構造体 ポインタ

    番号、名前、年齢を一組とした構造体の変数をmain関数で宣言し、そのアドレスを副関数に引き渡す。副関数で従業員番号、氏名、年齢を入力し、main関数に戻る。main関数で構造体の内容を表示する。 困ってます、ポインタがどうにも理解できません。