第6講 配列の学習
第6話 3次元配列利用による成績一覧表作成
成績一覧表
の解答例
#include<iostream>
#include<string>
using namespace std;
using namespace System;
void f1();
int main(){
   f1();
}
void f1(){
   int i,j,k,w,a[3][10][5];
   for(i=0;i<3;i++){
     cout<<i+1<<"学期成績一覧表"<<endl;
     cout<<"出席番号 国語 社会 数学 理科 英語 合計 合否判定 講評"<<endl;
     for(j=0;j<10;j++){
       if(j+1<10)cout<<"  0"<<j+1<<"    ";
       if(j+1==10)cout<<"  "<<j+1<<"   "; 
       w=0;
       for(k=0;k<5;k++){
         a[i][j][k]=rand()%101;
         w=w+a[i][j][k];
         if(a[i][j][k]<10)cout<<a[i][j][k]<<" ";
         if(a[i][j][k]>=10 && a[i][j][k]<100)cout<<a[i][j][k]<<" ";
         if(a[i][j][k]==100)cout<<a[i][j][k]<<" ";
       }
       if(w<100)cout<<" "<<w;
       if(w>=100)cout<<" "<<w;
       if(w<250)cout<<" 不合格";
       if(w>=250)cout<<" 合格";
       if(w>=320){
         cout<<" 大変優秀です。"<<endl;
       }
       else{
         if(w>=280){
           cout<<" 優秀です。"<<endl;
         }
         else{
           if(w>=220){
              cout<<" 普通です。"<<endl;
           }
           else{
             if(w>=190){
                cout<<" ちょっと厳しい。"<<endl;
             }
             else{
               cout<<" かなり厳しい。"<<endl;
             }
           }
         }
       }
     }
     cout<<" 合計   ";
     for(j=0;j<5;j++){
       w=0;
       for(k=0;k<10;k++){
       w=w+a[i][k][j];
     }
     cout<<w<<" ";
   }
   cout<<endl;
   cout<<endl;
}

}

}
解説
3次元配列、3次元ループとなりかなり複雑なコードです。
   for(i=0;i<3;i++){
          ・
    }
のiは学期に対応しております。
jは出席番号に対応して、kは教科番号(0:国語 1:社会 2:数学 3:理科 4:英語)です。
位置ずれに関しては、粘り強く試行錯誤を繰り返すしかありません。
尚、完全な位置合わせは諦めるしかありません。
半角スペースと半角数字が微妙に大きさが違うので無理なのです。
本当は出席番号は
 9
10
としたいのですが、無理なので
09
10
で妥協しています。これが
       if(j+1<10)cout<<"  0"<<j+1<<"    ";
       if(j+1==10)cout<<"  "<<j+1<<"   "; 
の2行の意味です。

皆さんは、年間成績を加えることに挑戦してみてください。
今回は、解答例を示しませんので粘り強く試行錯誤を繰り返しましょう。

さて、次講では2次元配列を利用して、4次魔方陣と6次魔方陣の作成に挑みます。

第5話へ 第7講第1話へ


戻る


VB講義へ
VB講義基礎へ

vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)