ヒント 4.1

ヒント 4.1

【1】考える手順
(1)1人分の表示方法を明確にします。その際、具体例を2つほど考えてからから一般例を考えます。
    具体例で、一人分23点を表示することを考えます。
    同様に具体例で一人分で42点を表示することを考えます。
(2)点数を一般化してnの場合を考えます。
(3)forループで配列からnを取り出す骨組みを作り、(2)で考えたnの時の作業を組み込みます。

【2】考え方を具体化する手順
(1)一人分を表示することを考えます
(1.1)一人分23点を表示することを考えます
「*」または「|」を合計で23個描いて改行します。

 for (i=0; i<23; i++) {
   「*」または「|」を描く
 }
 改行する

「*」または「|」のどちらを描くかというと,
i=4,9,14,19の時は「|」,そうでなければ「*」を描きます。

4,9,14,19,...に共通する性質は5で割ったあまりが4です。
つまり、次のようにすればよい子となります。

 (i%5==4)なら「-」を描き
 そうでないなら「*」を描きます。

合成すると

 for (i=0; i<23; i++) {
   (i%5==4)なら「-」を描き
   そうでないなら「*」を描きます。
 }
 改行する

となります。

(1.2)一人分42点を表示することを考えます
「*」または「|」を合計で42個描いて改行します。

 for (i=0; i<42; i++) {
   「*」または「|」を描く
 }
 改行する

「*」または「|」のどちらを描くかというと,
i=4,9,14,19の時は「|」,そうでなければ「*」を描きます。

4,9,14,19,...に共通する性質は5で割ったあまりが4です。
つまり、次のようにすればよい子となります。

 (i%5==4)なら「-」を描き
 そうでないなら「*」を描きます。

合成すると

 for (i=0; i<42; i++) {
   (i%5==4)なら「-」を描き
   そうでないなら「*」を描きます。
 }
 改行する

となります。

(2)点数を一般化してnの場合を考えます。

「*」または「|」を合計でn個描いて改行します。
 for (i=0; i<n; i++) {
   「*」または「|」を描く
 }
 改行する

「*」または「|」のどちらを描くかというと,
i=4,9,14,19の時は「|」,そうでなければ「*」を描きます。

4,9,14,19,...に共通する性質は5で割ったあまりが4です。
つまり、次のようにすればよい子となります。
 (i%5==4)なら「-」を描き
 そうでないなら「*」を描きます。

合成すると

 for (i=0; i<n; i++) {
   (i%5==4)なら「-」を描き
   そうでないなら「*」を描きます。
 }
 改行する

となります。

(3)forループで配列からnを取り出す骨組みを作り、(2)で考えたnの時の作業を組み込みます。
(3.1)forループで配列からnを取り出す骨組み
nは
int score[10]={15,8,12,18,20,20,9,16,20,17};
から1回に1つずつ取り出します。

for (k=0; k<10; k++) {
  n=score[i];
  ここで点数nの時の作業をします。
}

(3.2)(2)で考えたnの時の作業を組み込みます。

for (k=0; k<10; k++) {
  n=score[i];
  //点数nの時の作業(始まり)
  for (i=0; i<n; i++) {
    (i%5==4)なら「-」を描き
    そうでないなら「*」を描きます。
  }
  改行する
  //点数nの時の作業(終わり)
}