- ベストアンサー
C++の課題が分かりません。
作りたいプログラムがあるのですが,どのように書けばいいのか分かりません. 分かる方がいれば是非教えてください.作りたい内容というのは以下の通りになります. 1.名前と点数を入力. 2.平均を算出するか人の追加をするか人の削除をするかを選択. 3.人の追加を選択すると,別の名前と点数を入力. 人の削除を選択すると,今まで入力した名前と点数の中からどれか一つを選んで削除する. この1~3の流れを延々と続けるプログラムです. ちなみに条件として ・クラスを用いて書く. ・メモリの動的確保を行い,解放もきちんと行う. また,メンバ変数として 人数,名前,点数,平均点 メンバ関数として 人の追加,人の削除,平均点の算出,平均点の表示を用いる. という条件のもとでプログラムを作成したいです.
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
設定があいまい。 - 追加時に同名のデータが登録済みどうするか? - 削除時に同名/同点のデータが登録されていたらどうするか? - 「今まで入力した名前と点数の中からどれか一つを選」ぶのはユーザかプログラムか? - 人の追加を選択時に最初に入力した名前/点数が無駄になるが構わないか? ざっくり書くと #include <vector> #include <string> #include <utility> #include <algorithm> using namespace std; class ScoreBook { vector<pair<string,double>> records; public: void add(string name, double score) { records.push_back(pair<string,int>(name,score)); } void remove(string name) { records.erase(remove_if(records.begin(),records.end(),[](pair<string,double> x) { return x.first == name;}),records.end());} doubel avarage() const { double sum = 0.0; for_each(records.begin(),records.end(),[&](pair<string,double>& x) { sum += x.second;}); return sum / records.size(); } }; int main() { // ユーザ・インタフェースはお好きに }
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
「方針などは何となく分かるのですが、実際にソースを書くのに困ってます。」ってのは, 具体的にはどこをどう困っている?
補足
メモリの動的確保のやり方がよく分からず、 人の追加と削除を行うプログラムの書き方に困っています。
- Tacosan
- ベストアンサー率23% (3656/15482)
まず「追加」の方のうち「名前と点数を入力」は問題ないはず (ここで引っかかる前に 1 で引っかかる). 「別の」が問題だというなら, 「それまでに入力されたすべての名前と 1つずつ地道に比べる」だけで「別の」名前かどうかは判断できる. 別の名前でなかった (つまり既に入力された名前と同じ名前だった) 場合にどうするかは知らん. 問題に書いてないところだから勝手に考えてくれ. 削除の方はいろいろなやり方があるところだと思う. とことん手を抜くなら「入力されたものをすべて表示し, その中から削除したいものを番号で入力させる」という方針もありだろう. でも, 平均点をメンバ変数に持つのは不自然な感じがする.
お礼
方針などは何となく分かるのですが、実際にソースを書くのに困ってます。 ですがもう少し考えてみます。 アドバイスありがとうございます。
- Tacosan
- ベストアンサー率23% (3656/15482)
「課題」というなら出した人に聞けばいいのではなかろうか. さておき, これだと「どこが (あるいは何が) わからないのか」がさっぱり読み取れないんだよね. あなたは何をどう考えたの? あと, たとえば「いくつかの数字を入力し, 最後にそれらの数字と平均を表示する」プログラムは作れますか?
補足
工程3の 人の追加を選択すると,別の名前と点数を入力. 人の削除を選択すると,今まで入力した名前と点数の中からどれか一つを選んで削除する. というところがどう書けばよいのか分からなくて困ってます。
補足
ご指摘ありがとうございます。確かにあいまいですね。 ‐別の名前と点数を入力というのは、追加入力したいという程度なので、同名のデータが登録済みでも別に構いません。 - 削除時に同名/同点のデータが登録されていても、選択した一つのみを削除できるようにしたいです。 - 「今まで入力した名前と点数の中からどれか一つを選」ぶのはユーザかプログラムか?ユーザが選びます。 - 人の追加を選択時に最初に入力した名前/点数が無駄になるが構わないか?なぜ無駄になるのかよく分かってないですが、それはあまり望ましくないです。