課題なんですが。
-
クリーム
課題なんですが。
課題なんですが、わからなくてアドバイスお願いします。
課題1
100点満点でじっしされたテストの点を入力するものとします。点数はたくさんあります。
(1)入力された点数が正しいかどうかをチェックするプログラムをつくりなさい。入力値が0以上100以下の場合は正しいので、そのまま得点を表示し、そ れ以外の場合は、エラーであることを表示しなさい。できれば、小さすぎる。 大きすぎるの区別をしなさい。
(2)正しいデータのみ足し算して、データの件数と合計点、および平均点を表 示しなさい。平均点は整数どうしの割り算で、結果も整数(切り捨て)でよい。
なんですが・・・。
(1)は
こんな感じでやってみました。たぶんこれでいいと思うのですが、(2)はどういう感じなのか想像もつかないのでアドバイスをおねがいします。
課題1
100点満点でじっしされたテストの点を入力するものとします。点数はたくさんあります。
(1)入力された点数が正しいかどうかをチェックするプログラムをつくりなさい。入力値が0以上100以下の場合は正しいので、そのまま得点を表示し、そ れ以外の場合は、エラーであることを表示しなさい。できれば、小さすぎる。 大きすぎるの区別をしなさい。
(2)正しいデータのみ足し算して、データの件数と合計点、および平均点を表 示しなさい。平均点は整数どうしの割り算で、結果も整数(切り捨て)でよい。
なんですが・・・。
(1)は
こんな感じでやってみました。たぶんこれでいいと思うのですが、(2)はどういう感じなのか想像もつかないのでアドバイスをおねがいします。
Re: 課題なんですが。
(2)のヒントは、
データの件数と合計点を記憶する変数を用意して、
数値が入力されるたびに数値を更新して、平均点を表示するというような手順で良いと思います。
あと、(1)はelseを使ってもう少し簡潔に書ける気がしますね。
追記:
ソースを投稿する時はcodeタグで囲って下さい。
データの件数と合計点を記憶する変数を用意して、
数値が入力されるたびに数値を更新して、平均点を表示するというような手順で良いと思います。
あと、(1)はelseを使ってもう少し簡潔に書ける気がしますね。
追記:
ソースを投稿する時はcodeタグで囲って下さい。
- bitter_fox
- 記事: 607
- 登録日時: 15年前
- 住所: 大阪府
Re: 課題なんですが。
データ件数の変数が取りうる値とはどういった値でしょうか??(簡略化のために正負は考慮しないようにしましょう)クリーム さんが書きました:データの件数と合計点を記憶する変数?
って具体的にどんな感じなんですか?
データ件数に少数の値が来ることは考えられるでしょうか??
そんな中途半端なデータは嫌ですねw(0.5のデータってないですよね?)
ということで、データ件数が取りうる値は整数になります。(厳密にいうと取りうる値は0を含む自然数ですね。)
では、整数の型はどういったものがありますでしょうか??
同様に、合計点や平均点の変数の型も論理的に考えてみましょう。
Re: 課題なんですが。
横から失礼します。クリーム さんが書きました:データの件数と合計点を記憶する変数?
って具体的にどんな感じなんですか?
すみません。。
まず正しいデータとは0以上100以下の整数ですね。
で、平均を出すためには合計点を件数で割る必要があります。
なので、
- データの件数
- 合計点
具体例を元にロジックを考えていきましょう。
例えば以下のような点数データがあるとしましょう。
60点 5点 150点 -5点 100点 0点
上記を見ると正しい点数は4件ということがわかりますが、プログラム上では実行時にその件数を数える必要があります。
(1)のコードにコメントをつける形でロジックを書いてみますので参考にしてください。
#include <iostream>
using namespace std;
int main ()
{
int tokuten;/*入力点数受け取り用の変数*/
/*合計点を保持しておく変数を用意します*/
/*正しいデータの件数を保持しておく変数を用意します*/
/*平均点を保持しておく変数を用意します*/
while(cin>>tokuten)
{
if(0 <= tokuten && tokuten <= 100)
{
cout<<"得点:"<<tokuten<< endl;
/*正しいデータなので入力データを合計点を保持する点数に足します*/
/*また、正しいデータの件数を1足します*/
}
else if(tokuten<0)
{
cout << "得点が小さすぎます" << endl;
}
else if(tokuten>100)
{
cout <<"得点が大きすぎます"<<endl;
}
}
/*合計点を正しいデータ件数で割ったものを平均として計算し、平均点を保持する変数に入れます*/
/*平均点を表示します*/
return 0;
}
ちなみに上記の例で計算すると、
入力データ:60点 5点 150点 -5点 100点 0点
正しいデータ件数:4件
正しいデータの合計点:165点
正しいデータの平均点:41.25点
参考になれば幸いです。
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ
-
クリーム
Re: 課題なんですが。
#include <iostream>
using namespace std;
int main ()
{
int tokuten,sum,kensuu,heikin;
sum = 0;
kensuu = 0;
heikin = 0;
while(cin>>tokuten)
{
if(0 <= tokuten && tokuten <= 100)
{
cout<<"得点:"<<tokuten<< endl;
sum = sum + tokuten;
kensuu = kensuu + 1;
}
else if(tokuten<0)
{
cout << "得点が小さすぎます" << endl;
}
else if(tokuten>100)
{
cout <<"得点が大きすぎます"<<endl;
}
}
cout << "合計"<<sum<<endl;
cout <<"データの件数"<<kensuu<<endl;
heikin = sum / kensuu;
cout <<"平均"<<heikin<<endl;
return 0;
}
みなさんアドバイスありがとうございます。
それからまた聞きたいんですが・・・。
問題 科目別の試験の点数が次のように順不順で入力されてくるとします。科目は英語が1、数学が2、国語が3であらわされています。
1 65
1 70
3 80
2 40
3 100
2 70
1 69
このように入力されてくるデータを読み込んで科目別のデータ件数、合計、平均を計算するプログラムを作りなさい。
データはなくなるまでよみなさい、科目コードが誤っている場合は読み捨てて、エラーデータの件数を数えて表示する。科目の点数については、入力された通とする。(0点未満、100点超のデータがあってもそのまま扱う。)点数の合計、データの個数とも整数として扱い、平均点も整数として(1点未満は切り捨て)計算すること
科目のデータが1件もない場合はどうなるか、どうするのが正しいか。
なんですが・・・。
とりあえず
#include <iostream>
using namespace std;
int main ()
{
int tokuten,sum,kensuu,heikin,x,era;
sum = 0;
kensuu = 0;
heikin = 0;
era =0;
cin>> x;
if(x == 1)
{
cout<< "英語"<< endl;
}
else if(x == 2)
{
cout<< "数学"<< endl;
}
else if(x == 3)
{
cout<< "国語"<< endl;
}
else
{
cout<< "わかりません"<< endl;
}
while(cin>>tokuten)
{
if(0 <= tokuten && tokuten <= 100)
{
cout<<"得点:"<<tokuten<< endl;
sum = sum + tokuten;
kensuu = kensuu + 1;
}
else if(tokuten<0)
{
cout << "得点が小さすぎます" << endl;
era = era + 1;
}
else if(tokuten>100)
{
cout <<"得点が大きすぎます"<<endl;
era = era + 1;
}
}
cout<<"エラー件数"<<era<<endl;
cout << "合計"<<sum<<endl;
cout <<"データの件数"<<kensuu<<endl;
heikin = sum / kensuu;
cout <<"平均"<<heikin<<endl;
return 0;
}
またアドバイスをお願いします。
Re: 課題なんですが。
上記のコードだと、科目の数字を1度しか読み込んでいません。
点数ごとに、科目の数字を読み取る必要があります。
また、
コマンドラインからの入力では何らかの終了コマンドを作らないと、データが終わったのかどうか判断しようがありません。
追記:
何度も言いますが、ソースを投稿する時はcodeタグで囲って下さい。
点数ごとに、科目の数字を読み取る必要があります。
また、
と書かれていますが、ファイルからの入力ならともかく、クリーム さんが書きました: データはなくなるまでよみなさい、科目コードが誤っている場合は読み捨てて、エラーデータの件数を数えて表示する。
コマンドラインからの入力では何らかの終了コマンドを作らないと、データが終わったのかどうか判断しようがありません。
追記:
何度も言いますが、ソースを投稿する時はcodeタグで囲って下さい。
Re: 課題なんですが。
すみません。クリーム さんが書きました:すみません。
ちょっとわかりずらいのでもう少しわかりやすくお願いします。
申し訳ありません。
何がわかりずらいのかわからないのでもう少しわかりやすくお願いします。
申し訳ありません。
#codeタグで囲むこととかの注意を受け入れないところを見ると、プログラムだけ流し読みしてるんですかねー。
#平均点は今のままだと小数部は無視されるような・・・
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 課題なんですが。
とりあえずコードをcodeタグで囲んでおきました。
クリームさん、もう少し具体的に質問と状況報告してもらって良いですか?
>としてみたんですが、これではちがうようなきがして・・・。
具体的にどう違うと思われたのでしょうか?
>ちょっとわかりずらいのでもう少しわかりやすくお願いします。
どこら辺が分かりづらいのでしょうか?
なぜこんな風に聞くかというと、プログラムというのは倫理的・具体的に出来ないことはプログラムに書く事はできません。
なので、論理的に書くクセというか思考をまとめるクセを付けてもらいたいからです。
あと何度もcodeタグを付けて欲しいとお願いされているのに付けない理由を伺って良いですか?
クリームさん、もう少し具体的に質問と状況報告してもらって良いですか?
>としてみたんですが、これではちがうようなきがして・・・。
具体的にどう違うと思われたのでしょうか?
>ちょっとわかりずらいのでもう少しわかりやすくお願いします。
どこら辺が分かりづらいのでしょうか?
なぜこんな風に聞くかというと、プログラムというのは倫理的・具体的に出来ないことはプログラムに書く事はできません。
なので、論理的に書くクセというか思考をまとめるクセを付けてもらいたいからです。
あと何度もcodeタグを付けて欲しいとお願いされているのに付けない理由を伺って良いですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 課題なんですが。
横やりすみません。
コマンドラインではなくてコンソールだと思いますが、ウインドウズならCtrl+Z(^Z)、LinuxならCtrl+D(^D)を入力するとプログラム側ではEOFを検出しますよ。h2so5 さんが書きました:コマンドラインからの入力では何らかの終了コマンドを作らないと、データが終わったのかどうか判断しようがありません。
Re: 課題なんですが。
試しに組んでみましたが、
クリームさんはこのような動作を期待していると考えてよいのでしょうか。
(-1を入力すると結果を表示するようになっています)
クリームさんの示されたコードでは、
このような動作をさせようとして組んでいるようには思われないのですが。
(0点未満、100点超のデータがあってもそのまま扱う。と書かれているのに、コード内で範囲の判定をしています)
追記:
ではその部分は無視してください、申し訳ありません。
クリームさんはこのような動作を期待していると考えてよいのでしょうか。
(-1を入力すると結果を表示するようになっています)
input:
1 65
1 70
0 70
3 80
2 40
3 100
4 100
2 70
1 69
-1
output:
◆英語
データ件数: 3
合計点数: 204
平均点数: 68
◆数学
データ件数: 2
合計点数: 110
平均点数: 55
◆国語
データ件数: 2
合計点数: 180
平均点数: 90
エラー件数: 2このような動作をさせようとして組んでいるようには思われないのですが。
(0点未満、100点超のデータがあってもそのまま扱う。と書かれているのに、コード内で範囲の判定をしています)
追記:
それは知りませんでした(-_-;)ISLe さんが書きました:横やりすみません。
コマンドラインではなくてコンソールだと思いますが、ウインドウズならCtrl+Z(^Z)、LinuxならCtrl+D(^D)を入力するとプログラム側ではEOFを検出しますよ。
ではその部分は無視してください、申し訳ありません。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 課題なんですが。
現状のコードは、最初の回答を理解されていないでその上に構築したのでワケが分からなくなっているんじゃないでしょうか?
なので、原点に戻って最初の問題を自分の答えを見ずにもう一度解いてみてください。
それで理解度が分かります。
なので、原点に戻って最初の問題を自分の答えを見ずにもう一度解いてみてください。
それで理解度が分かります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
クリーム
Re: 課題なんですが。
#codeタグっていうのがいまいちわかっていなかったので。つけてませんでした。もうしわけないです。
とりあえずアドバイスを参考にもういちど考えてみます。
とりあえずアドバイスを参考にもういちど考えてみます。