OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

以下のプログラムについて教えてください

  • すぐに回答を!
  • 質問No.138127
  • 閲覧数43
  • ありがとう数7
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 60% (108/179)

#include<iostream.h>
int main()
{ int i;
int ninzu=0;
int tensu[6];
int rakudai[6];
cout<<"6人の点数を入力!\n";
for(i=0; i<6;i++)
{ cout<<i+1<<"番:";
cin>>tensu[i];
if(tensu[i]<60)
{ rakudai[ninzu]=i;
ninzu++;}
}
cout<<"60点未満は"<<ninzu<<"人です。\n";
for(i=0; i<ninzu; i++)
cout<<rakudai[i]+1<<"番:"<<tensu[rakudai[i]]<<"点\n";
return(0);
}

というテストの点数が60点未満の学生の一覧表を出力するというプログラムなんですが、12行目からの rakudai[ninzu]...以降が
よくわかりません。配列の数を指定するところに数字以外のものが来るというのはいったいどういうことなのでしょう?どなたか教えてください。
通報する
  • 回答数6
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.6
レベル13

ベストアンサー率 37% (419/1115)

>rakudai[ninzu]=iの、=iっていうのがピンときません。

iは何番目の人かを表します。
え~と、まず落第者が1人目(48点)と6人目(54点)だったとしましょうか。(点数の格納処理は省略して説明します)
この場合落第者は2名なのでrakudai配列は2コマ使われるわけですが、この2コマにi、つまり何番目の人だったかを記録します。
1人目の処理はiが0から始まりますので「0番目の人」として処理されます。
そしてninzuも0から始まる為、rakudai[0]に「0番目の人」として記録されます。
そしてninzuは1加算され次の落第者の格納に備えます。
引き続いて1番目、2番目・・・4番目と処理されますが、何れも落第点ではないのでrakudai配列には格納されません。
次に5番目の人(実際には6人目)ですが落第点ですのでrakudai配列に格納されます。
先程ninzuが1になっていたことを思い出してください。
つまりここではrakudai[1]にi、つまり5が格納されたのです。
で、再びninzuがインクリメントされ、2になります。
そして引き続き6番目以降の人の処理が行われますが、落第者は以上でしたね。
結果を見てみましょう。

rakudai[0] → 0が入っている

rakudai[1] → 5が入っている

ninzu    → 2になっている

これを結果表示するときは、

cout<<"60点未満は"<<ninzu<<"人です。\n";



cout<<rakudai[i]+1<<"番:"<<tensu[rakudai[i]]<<"点\n";

ですから

60点未満は2人です。
1番:48点
6番:54点

となります。

解りにくいかな?(^_^;
お礼コメント
yabuchanchan

お礼率 60% (108/179)

なるほど!!非常によくわかりました。やっぱり、具体的に言って頂くと、ものすごく良く分かります。それにしてもやっぱりプログラムってややこしいですね。
でも、分かるとカイカンです。みなさん、いろいろありがとうございました!!!
これからも、勉強つづけて、わかんなくなったらまたここに来たいとおもいます。
投稿日時 - 2001-09-20 21:38:47
-PR-
-PR-

その他の回答 (全5件)

  • 回答No.1
レベル13

ベストアンサー率 40% (404/988)

こんにちは。 rakudai[ninzu]=i; の部分ですか? ninzuは、先に宣言されている変数ですね。 int ninzu=0; 配列部分には、変数を指定する事が可能です。 そのあとで、その変数(60点以下の人数)がカウントされていますね。 疑問点は、このあたりでよろしいでしょうか。 何かありましたら、補足ください。 でわ ...続きを読む
こんにちは。

rakudai[ninzu]=i;
の部分ですか? ninzuは、先に宣言されている変数ですね。
int ninzu=0;

配列部分には、変数を指定する事が可能です。
そのあとで、その変数(60点以下の人数)がカウントされていますね。

疑問点は、このあたりでよろしいでしょうか。
何かありましたら、補足ください。
でわ
お礼コメント
yabuchanchan

お礼率 60% (108/179)

配列部分に変数が来るということは、たとえば、a[n]とした時、nには任意の数字を
代入することが出来るということですね。なんとなく分かりました。
投稿日時 - 2001-09-20 17:17:37


  • 回答No.2
レベル12

ベストアンサー率 45% (210/459)

こんにちは。itohhといいます。 >for(i=0; i<6;i++) >{ cout<<i+1<<"番:"; >cin>>tensu[i]; >if(tensu[i]<60) ここのiについては、おわかりですか? > rakudai[ninzu]=i; だけが、わからないというのもヘンですよ! 例を出して解 ...続きを読む
こんにちは。itohhといいます。

>for(i=0; i<6;i++)
>{ cout<<i+1<<"番:";
>cin>>tensu[i];
>if(tensu[i]<60)
ここのiについては、おわかりですか?

> rakudai[ninzu]=i;
だけが、わからないというのもヘンですよ!

例を出して解説すると。

rakudaiというタンスが有ったとします。
タンスの抽斗は6個です。
iというカードを見てカードに書かれている数字が60未満だったら、
ninzuというカウンタ(手のひらの中に入れてカチカチすると数字があがる器械)
の数字と同じ番号の抽斗にiというカードをしまいます。
そして、ninzuというカウンタをカウントアップ(カチカチとする)します。

ちょっと下手くそな、こんな説明で解りますかねぇ!!
お礼コメント
yabuchanchan

お礼率 60% (108/179)

お返事ありがとうございます。rakudai[ninzu]=1の部分なんですが、rakudaiという配列の数は、ninzuの数に依存するということなんですよね?つまり、最初は0なんですよね?でも、まだいまいち分からないのは、=iの部分なんです。iというカードをみるっていうところがいまいち分からないんですが・・・・・。
投稿日時 - 2001-09-20 17:27:09
  • 回答No.3
レベル8

ベストアンサー率 70% (21/30)

こんにちは。 Haizyさんが書かれたように、配列の要素の指定には 変数を使うことが出来ます。 これができないと、例えば int a[100]; という配列の全ての要素に1を入れたい時に a[0] = 1; a[1] = 1; ... a[99] = 1; とすべて書かなくてはならなくなります。 for(int i = 0; i < 100; i++ ...続きを読む
こんにちは。

Haizyさんが書かれたように、配列の要素の指定には
変数を使うことが出来ます。
これができないと、例えば

int a[100];

という配列の全ての要素に1を入れたい時に

a[0] = 1;
a[1] = 1;
...
a[99] = 1;

とすべて書かなくてはならなくなります。

for(int i = 0; i < 100; i++)
a[i] = 1;

なら簡単です。
お礼コメント
yabuchanchan

お礼率 60% (108/179)

そうですね。配列の要素に変数使うと、便利ですね。そこまで、本に書いてなかった(というか、まだそこまで進んでなくて)混乱してしまいました。
ありがとうございました。
投稿日時 - 2001-09-20 17:28:58
  • 回答No.4
レベル13

ベストアンサー率 37% (419/1115)

更に補足させて頂きます。 >if(tensu[i]<60) >{ rakudai[ninzu]=i; >ninzu++;} >} 特にこの部分だと思いますのでここを重点的に。 まずif文の条件としては「i番目の人の点数は60点未満?」としていますよね。 次にその条件を満たした場合の処理なのですが、rakudaiという配列にはボーダーラインを割った人が誰であるか(つまり何 ...続きを読む
更に補足させて頂きます。

>if(tensu[i]<60)
>{ rakudai[ninzu]=i;
>ninzu++;}
>}

特にこの部分だと思いますのでここを重点的に。
まずif文の条件としては「i番目の人の点数は60点未満?」としていますよね。
次にその条件を満たした場合の処理なのですが、rakudaiという配列にはボーダーラインを割った人が誰であるか(つまり何番目の人か:但しここでは0番目からの通番)を記録していきます。
最初の落第者はrakudaiの0番目に記録されるのですが、これはninzuが0で初期化されていますので問題ないですよね?
次の行ではninzuをインクリメントしています。
これはrakudaiの次の落第者を格納する位置に移動する為であると同時に、この変数の名前が示すように落第者の人数そのものを数える役目にもなっています。
こんな感じですが・・・、混乱してしまうようなら無視して下さいね。(^_^;
お礼コメント
yabuchanchan

お礼率 60% (108/179)

お返事ありがとうござます。
説明して頂いた内容はわかったんですが、rakudai[ninzu]=iの、=iっていうのが
ピンときません。これの意味を教えていただければ嬉しいです。
投稿日時 - 2001-09-20 17:31:27
  • 回答No.5
レベル13

ベストアンサー率 40% (404/988)

再びです。 >rakudai[ninzu]=iの、=iっていうのがピンときません ということなので、補足いたします。 08 for(i=0; i<6;i++) 09 { cout<<i+1<<"番:"; 10 cin>>tensu[i]; 11 if(tensu[i]<60) 12 { rakudai[nin ...続きを読む
再びです。

>rakudai[ninzu]=iの、=iっていうのがピンときません
ということなので、補足いたします。

08 for(i=0; i<6;i++)
09 { cout<<i+1<<"番:";
10 cin>>tensu[i];
11 if(tensu[i]<60)
12 { rakudai[ninzu]=i;
13 ninzu++;}
14 }
※わかり易いように行数つけました。

で、rakudai[ninzu]=i;の i ですが、8行目で、for文のカウンタになっています。
For文は14行目まで続き、繰り返しています。
9行目は、画面表示です。10行目の、入力を促しています。
11行目で、入力された、点数を比較しています。60店以下、残念ながら落第さんの処理に入ります。
12行目で、rakudai配列 ninzu人目(落第の人数だけ)に、i(何番目に入力された受験者か)を代入します。
13行目で、ninzuを+1します。(落第の人数が増えましたから。)

なので、iは、受験番号、ninzuは、落第した人間の数 といった感じです。

この辺で、理解できますでしょうか?
わからなかったら、補足ください。
でわ
お礼コメント
yabuchanchan

お礼率 60% (108/179)

早速のご回答ありがとうございます。iはforのカウンタですか・・・。やっとわかりました。しかし、まだひとつ疑問点があるのですが、なぜ、iをrakudai配列にiを代入するんでしょう?いまいちピンときません。しつこいようですが、ご回答頂けたら嬉しいです。
投稿日時 - 2001-09-20 18:39:12
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ