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

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

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

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

Q&A

解決済

2回答

1063閲覧

ポインタを使った関数が呼び出されない

Giovannaaa

総合スコア10

C++

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

0グッド

0クリップ

投稿2020/08/06 04:07

編集2020/08/06 04:33

点数を読みこんで、平均点と平均点から最も点差が離れた人を求めるプログラムなのですが、エラーで、score_diffの呼び出しに対応する関数がありませんと表示されます。なぜなのでしょうか?

#include <iostream> using namespace std; void average(int num, int sum, double* ave) { *ave = sum/num; } void score_diff(int num, double ave, int* diff, int *p) { for(int i=2; i<=num; i++){ // 2人目から if((p[*diff]-ave)*(p[*diff]-ave)<=(p[i]-ave)*(p[i]-ave)){ *diff = i; } } } int main() { int *p; p= new int[100]; int num; //人数 int sum; //合計点 double ave; //平均点 int diff=1; // 一番離れている人 cout << "人数を入力してください:" ; cin >> num; cout << num << "人の点数の平均点と平均から最も離れている人を求めます。\n"; for(int i=1; i<=num; i++){ cout << i << "番の点数:"; cin >> p[i]; sum += p[i]; } average(num,sum,&ave); score_diff(num,ave,&diff,&p); cout << "平均点は" << ave << "点です。\n"; int multi=0; // 複数いる場合は0 cout << "平均から最も点差が離れているのは"; for(int i=1; i<=num; i++){ if((p[diff]-ave)*(p[diff]-ave) == (p[i]-ave)*(p[i]-ave)){ if(multi){ cout << "と"; } cout << i << "番の人(" << p[i]-ave << "点)"; multi=1; } } cout << "です。\n"; return 0; }

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

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

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

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

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

y_waiwai

2020/08/06 04:12

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
Giovannaaa

2020/08/06 04:20

すみません。ちゃんとやっているのですが上手く表示されません。
guest

回答2

0

ベストアンサー

回答ではありません・・・コードが無茶苦茶です。
下記であっているならヘルプの"質問のテンプレート機能について知りたい"を参考にコードを貼り付けて下さい。

cpp

1using namespace std; 2 3void average(int num, int sum, double *ave) 4{ 5 *ave = sum / num; 6} 7 8void score_diff(int num, double ave, int *diff, int *p) 9{ 10 for(int i = 2; i <= num; i++) { // 2人目から 11 12 if((p[*diff] - ave) * (p[*diff] - ave) <= (p[i] - ave) * (p[i] - ave)) { 13 *diff = i; 14 } 15 } 16} 17int main( ) 18{ 19 int *p; 20 p = new int[100]; 21 int num; //人数 22 int sum; //合計点 23 double ave; //平均点 24 int diff = 1; // 一番離れている人 25 26 cout << "人数を入力してください:"; 27 cin >> num; 28 cout << num << "人の点数の平均点と平均から最も離れている人を求めます。\n"; 29 for(int i = 1; i <= num; i++) { 30 cout << i << "番の点数:"; 31 cin >> p[i]; 32 sum += p[i]; 33 } 34 35 average(num, sum, &ave); 36 37 score_diff(num, ave, &diff, &p); 38 39 cout << "平均点は" << ave << "点です。\n"; 40 41 int multi = 0; // 複数いる場合は0 42 cout << "平均から最も点差が離れているのは"; 43 for(int i = 1; i <= num; i++) { 44 if((p[diff] - ave) * (p[diff] - ave) == (p[i] - ave) * (p[i] - ave)) { 45 if(multi) { 46 cout << "と"; 47 } 48 cout << i << "番の人(" << p[i] - ave << "点)"; 49 multi = 1; 50 } 51 } 52 cout << "です。\n"; 53 54 return 0; 55}

[追記]
score_diff(num, ave, &diff, &p);→score_diff(num, ave, &diff, p);
と、sumの初期化漏れ。

投稿2020/08/06 04:24

編集2020/08/06 04:37
cateye

総合スコア6851

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

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

Giovannaaa

2020/08/06 04:34

ありがとうございます。できました。
cateye

2020/08/06 04:48 編集

あと、doubleの比較に==は使わないほうが・・・ if((p[diff] - ave) * (p[diff] - ave) == (p[i] - ave) * (p[i] - ave)) ・・・・処理内容については見ていませんので、問題があれば再度質問を更新して質問して下さい。
Giovannaaa

2020/08/06 04:53 編集

分かりました。ありがとうございます。
Giovannaaa

2020/08/06 04:55

doubleの比較に==は使わない方がいいのはなぜなのでしょうか?
cateye

2020/08/06 05:07 編集

*ave = sum / num; → *ave = double(sum) / num; ---->8----->8----- 人数を入力してください:3 3人の点数の平均点と平均から最も離れている人を求めます。 1番の点数:45 2番の点数:56 3番の点数:78 59.6667 平均点は59.6667点です。 平均から最も点差が離れているのは3番の人(18.3333点)です。
cateye

2020/08/06 05:11

比較の可否については→https://marycore.jp/prog/c-lang/compare-floating-point-number/
Giovannaaa

2020/08/06 05:13

ありがとうございます。
guest

0

score_diffを呼び出してるところが見当たりませんが、どうやって実行するんでしょうか

投稿2020/08/06 04:14

y_waiwai

総合スコア88042

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

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

Giovannaaa

2020/08/06 04:21

呼び出すとはどういう事でしょうか? よろしくお願いします。
y_waiwai

2020/08/06 04:24 編集

あなたは、ポインタを使った関数が呼び出されない、といってますが、 その提示のコードでは呼び出しているところが見当たりません
Giovannaaa

2020/08/06 04:34

呼び出すということはcoutを使って出力するということでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問