質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1631閲覧

C++を用いた成績の並べ替えと平均を求める

yaaaaa2000

総合スコア1

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/07/14 08:34

前提・実現したいこと

10人の3つの教科の点数をランダムで生成し、合計得点で並べ替え 各教科ごとに平均を表示したい

発生している問題・エラーメッセージ

ソースコードを実行したところ以下のエラーが出ました
コード

report1.cpp:91:4: error: expected unqualified-id before '{' token 91 | { | ^ report1.cpp:122:23: error: cannot define member function 'Calculation::Print::print' within 'Calculation' 122 | void Print::print()//print() | ^ report1.cpp:152:5: error: expected '}' at end of input 152 | } | ^ report1.cpp:81:20: note: to match this '{' 81 | class Calculation{// ^ report1.cpp:152:5: error: expected unqualified-id at end of input 152 | }

該当のソースコード

c++

#include<iostream> #include<iomanip> #include<math.h> #include<random> using namespace std; class Student{ int i; public: char student[5][10]; int eng[10]; int math[10]; int jan[10]; int total[10]; Student(); }; Student::Student() { random_device rnd; mt19937 mt(rnd()); uniform_int_distribution<> rand101(0,100); for(i=0;i<10;i++){ eng[i]=rand101(mt); math[i]=rand101(mt); jan[i]=rand101(mt); } for(i=0;i<10;i++){ total[i]=eng[i]+math[i]+jan[i]; } } class sorting{ //ソーティングクラス宣言 /****************************************/ /*int 型変数の説明(private) */ /*key : 合計のデータのソートに使用する格納箱 */ /*key_sub : 実際の合計値のソートをもとに、 添え字のソートを行うための格納箱*/ /****************************************/ private: int key,key_sub; /****************************************/ /*int 型変数の説明(public) */ /*sub[10] : 生徒 10 人の合計の添字を格納する配列*/ /****************************************/ public: int sub[10]; sorting(); //データのソートを行うコンストラクタ関数 }; sorting::sorting() //sorting()の定義 { Student stu; //Student クラスの呼び出し int array[10]; for(int i=0; i<10; i++){ //予め sub[]に添え字を格納 sub[i] = i; } for(int i=0; i<10; i++){ //総当りを用いた単純ソート for(int j=0; j<10; j++){ if(stu.total[i] > stu.total[j]){ //以下、合計値のソートと並列して添字のソートも行っている key = stu.total[j]; stu.total[j] = stu.total[i]; stu.total[i] = key; key_sub = sub[j]; sub[j] = sub[i]; sub[i] = key_sub; } } } } class Calculation{//計算用クラスの宣言 /*******************************************************/ /*double 型変数の説明(private) */ /*a_ave[4] : 各3科目、合計の平均を[0]~[3]順に格納する配列 */ private: int a_add; double a_ave[4]; public: double ave();//各 3 科目、合計の平均を計算する関数 { Student stu; //Student クラスの呼び出し //各 3 科目、合計の 10 人分の合計を格納する変数にそれぞれ 0 を初期値設定 int sum_eng = 0, sum_math = 0, sum_jan = 0, sum_total = 0; for(int i=0; i<10; i++){//繰り返し処理でそれぞれ加算していく sum_eng += stu.eng[i]; sum_math += stu.math[i]; sum_jan += stu.jan[i]; sum_total += stu.total[i]; } //それぞれの合計を母数で割り、平均を出す a_ave[0] = sum_eng / 10.0; a_ave[1] = sum_math / 10.0; a_ave[2] = sum_jan / 10.0; a_ave[3] = sum_total / 10.0; //結果を表示する cout << fixed << setprecision(1) << " Avg" << " " << a_ave[0] << " " << a_ave[1] << " " << a_ave[2] << " " << a_ave[3] << " " << endl; return 0; } class Print{//表示用クラス public: void print();//ソート済みの生徒の成績を表示する関数 }; void Print::print()//print()の定義 { Student stu;//Student クラスの呼び出し sorting sorted;//soting クラスの呼び出し //一行目のラベルの表示 cout << "ID_No " << " Eng " << "Math " << "jan " << "Total" << endl; //ソート済みの成績を表示() for(int i=0; i<10; i++){ if(sorted.sub[i]<9){ cout << "t900" << sorted.sub[i]+1 << " " << stu.eng[sorted.sub[i]] << " " << stu.math[sorted.sub[i]] << " " << stu.jan[sorted.sub[i]] << " " << stu.total[sorted.sub[i]] << endl; }else{ cout << "t90" << sorted.sub[i]+1 << " " << stu.eng[sorted.sub[i]] << " " << stu.math[sorted.sub[i]] << " " << stu.jan[sorted.sub[i]] << " " << stu.total[sorted.sub[i]] << endl; } } } int main() //main()を宣言 { Student stu; //Student クラスの呼び出し Calculation cal; //Calculation クラスの呼び出し Print show; //Print クラスの呼び出し sorting Sort; //sorting クラスの呼び出し show.print(); //ソート済みの成績データを表示 cout << "***************************" << endl; cal.ave(); //平均を、計算、表示 return 0; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2021/07/14 09:07

...ダメダメですね。コンパイルに成功したとしても、期待する結果は得られないでしょう。 教本読み直すことをお勧めします。
guest

回答2

0

まず,ぐちゃぐちゃのインデントをまともな形にして,
{} の対応がまともに取れてるんですかね? という根本的な事柄を確認することから始めれば良いんじゃないでしょうか.
(こういう場所に質問する前に)

投稿2021/07/14 08:43

fana

総合スコア11654

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Calculationクラスが閉じていません。
Calculationクラスのメンバ関数 ave の宣言頭部がありません。

diff

1 public: 2 double ave();//各 3 科目、合計の平均を計算する関数 3+}; 4+ 5+double Calculation::ave() 6 { 7 Student stu; //Student クラスの呼び出し

投稿2021/07/14 10:40

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuma-s

2021/07/14 11:32 編集

コンパイルエラーをなくすだけの回答です。 表示される結果は、合計値でソートされていないし、 平均値は嘘の値です。 なぜだか、分かりますか?
yaaaaa2000

2021/07/14 11:31

実行することできました! C++初心者で拙いコードだと思うのですが、回答してくださりありがとうございました。助かりました!
yaaaaa2000

2021/07/14 11:38

実行結果が ID_No Eng Math jan Total t9003 88 52 96 236 t9009 17 93 97 207 t9004 98 17 66 181 t9001 56 73 35 164 t9005 32 53 70 155 t9002 92 0 60 152 t9010 1 66 78 145 t9007 58 33 34 125 t9006 79 25 7 111 t9008 58 24 3 85 *************************** Avg 57.9 43.6 54.6 156.1
yaaaaa2000

2021/07/14 11:39

と毎回なりました。 ランダム生成の数字のところがうまくいってないからということなんでしょうか
episteme

2021/07/14 11:43

毎回 Student stu; してるからです。 そのたびにコンストラクタが動き、デタラメに初期化されています。
yaaaaa2000

2021/07/14 12:10

ソート、計算、表示のクラスにあるStudent stu;を消すということでしょうか
episteme

2021/07/14 12:22

やってみたらええやん。なんでヒトの頭と手間に頼るん?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問