第15講 フリーストア配列
第10話 3次元フリーストア配列による年間成績一覧表の完成
では、皆さん成績一覧表
a
      ~
b
      ~
c

       ~
a
        ~
b

を実現するプログラム例
#include<iostream>
#include <iomanip>
#include <time.h>
using namespace std;
void f1(float*** x); //データ作成
void f2(float*** x); //データ表示と各生徒合計・平均の表示
void f3(float*** x); //データ表示と各生徒合計・平均および各教科等の合計・平均の算出・表示
void f4(float*** x); //年間成績一覧表の作成
void main(){
   int i,j;
   float*** x=new float**[4];
   for(i=0;i<4;i++)x[i]=new float*[44];
   for(i=0;i<4;i++)
     for(j=0;j<44;j++)
        x[i][j]=new float[10]; //生徒40人の各教科点数等のデータ収納配列
   f1(x); //データ作成
   f2(x); //各生徒の合計と平均の算出
   f3(x); //データ表示と各生徒合計・平均および各教科等の合計・平均の算出・表示
   f4(x); //年間成績一覧表の作成
   delete[] x;
   cout<<"プロジェクト終了"<<endl;
}

//データ作成
void f1(float ***x){
   srand(time(NULL));
   int i,j,k;
   for(i=0;i<4;i++)
     for(j=0;j<40;j++)
        x[i][j][0]=j+1;
   for(i=0;i<3;i++){
     for(j=0;j<40;j++)
        for(k=1;k<6;k++)
           x[i][j][k]=rand()%100;
   }
}

//各生徒の合計と平均の算出
void f2(float ***x){
   int i,j,k;
   for(i=0;i<3;i++)
   for(j=0;j<40;j++)
     x[i][j][6]=0; //各生徒合計の初期化
   for(i=0;i<3;i++)
     for(j=0;j<40;j++){
        for(k=1;k<6;k++)
          x[i][j][6]+=x[i][j][k];
        x[i][j][7]=x[i][j][k]/5;
     }
}

//データ表示と各生徒合計・平均および各教科等の合計・平均の算出・表示
void f3(float ***x){
   int i,j,k;
   for(i=0;i<3;i++){
     cout<<i+1<<"学期成績一覧表"<<endl;
     cout<<"出席番号 国語 社会 数学 理科 英語 合計 平均"<<endl;
     for(j=0;j<40;j++){
        for(k=0;k<6;k++){
          if(k==0)cout<<" ";
          if(x[i][j][k]<10)cout<<"0"<<x[i][j][k]<<" ";
          if(x[i][j][k]>=10)cout<<x[i][j][k]<<" ";
        }
        cout<<" "<<x[i][j][6]<<" "<<setprecision(3)<<x[i][j][7]<<" ";
        cout<<endl;
     }
     for(j=1;j<8;j++)x[i][41][j]=0;
     cout<<" 合計 ";
     for(j=1;j<8;j++){
        for(k=0;k<40;k++)
          x[i][41][j]+=x[i][k][j];
        if(j==6)cout<<" ";
        cout<<setprecision(5)<<x[i][41][j]<<" ";
     }
     cout<<endl<<endl;
   }
}

//年間成績一覧表の作成
void f4(float ***x){
   int i,j,k;
   for(i=0;i<40;i++)
     for(j=1;j<6;j++)
        x[3][i][j]=0; //初期化
   for(i=0;i<40;i++)
     for(j=1;j<6;j++){
        for(k=0;k<3;k++)
          x[3][i][j]+=x[k][i][j];
          x[3][i][j]/=3;
     }
   for(i=0;i<40;i++)
     x[3][i][6]=0; //各生徒合計の初期化
   for(i=0;i<40;i++){
     for(j=1;j<6;j++)
        x[3][i][6]+=x[3][i][j];
     x[3][i][7]=x[3][i][j]/5;
   }
   cout<<"年間成績一覧表"<<endl;
   cout<<"出席番号 国語 社会 数学 理科 英語 合計 平均"<<endl;
   for(i=0;i<40;i++){
     for(j=0;j<6;j++){
        if(j==0)cout<<" ";
        if(j==0){
          if(x[3][i][j]<10)cout<<fixed<<"0"<<setprecision(0)<<x[3][i][j]<<" ";
          if(x[3][i][j]>=10)cout<<fixed<<setprecision(0)<<x[3][i][j]<<" ";
        }
        else{
          if(x[3][i][j]<10)cout<<"0"<<fixed<<setprecision(1)<<x[3][i][j]<<" ";
          if(x[3][i][j]>=10)cout<<fixed<<setprecision(1)<<x[3][i][j]<<" ";
        }
     }
     cout<<" "<<fixed <<setprecision(1)<<x[3][i][6]<<" "<<fixed <<setprecision(1)<<x[3][i][7]<<" ";
     cout<<endl;
   }
   for(i=1;i<8;i++)x[3][41][i]=0;
   cout<<" 合計 ";
   for(i=1;i<8;i++){
     for(j=0;j<40;j++)
        x[3][41][i]+=x[3][j][i];
     if(i==6)cout<<" ";
     cout<<fixed <<setprecision(1)<<x[3][41][i]<<" ";
   }
   cout<<endl<<endl;
}

参考ダウンロード添付ファイル

これで本講は終了とします。
次講では、素数探索に挑戦します。

第9話へ
 第16講第1話へ

a

eclipse c++ 入門講義第1部へ

魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ