第7講 ポインタの学習
第9話 第6講第7話の成績一覧表ソフトのポインタによる改良

第6講 配列の学習
第8話 成績一覧表に各生徒合計・平均を加える

yy
をグローバル配列を用いないで実現するプログラム例
配列形式の場合
#include<iostream>
#include <stdlib.h>
#include <time.h>
#include <iomanip>
using namespace std;
void f1(); //1行目(ラベル)表示
void f2(int x[40][6]); //データ作成
void f3(int sg[40],float sh[40],int x[40][6]); //データ表示と各生徒合計・平均の表示
void f4(int x[40][6]); //各教科の合計と平均を算出して表示
void f5(int sg[40],float sh[40],int x[40][6]); //各生徒の合計と平均の算出
void main(){
   int x[40][6];
   int sg[40];
   float sh[40];
   f1(); //1行目(ラベル)表示
   f2(x); //データ作成
   f5(sg,sh,x); //各生徒の合計と平均の算出
   f3(sg,sh,x); //データ表示と各生徒合計・平均の表示
   f4(x); //各教科の合計と平均を算出して表示
}

//1行目(ラベル)表示
void f1(){
   cout<<"出席番号 国語 社会 数学 理科 英語 合計 平均"<<endl;
}

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

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

//データ表示と各生徒合計・平均の表示
void f3(int sg[40],float sh[40],int x[40][6]){
   int i,j;
   for(i=0;i<40;i++){
     for(j=0;j<6;j++){
        if(j==0)cout<<" ";
        if(j==1)cout<<" ";
        if(x[i][j]<10)cout<<"0"<<x[i][j]<<" ";
        if(x[i][j]>=10)cout<<x[i][j]<<" ";
     }
     if(sg[i]<100)cout<<"0"<<sg[i]<<" "<<setprecision(3)<<sh[i]<<" ";
     if(sg[i]>=100)cout<<sg[i]<<" "<<setprecision(3)<<sh[i]<<" ";
     cout<<endl;
   }
}

//各教科の合計と平均を算出して表示
void f4(int x[40][6]){
   int w[5]; //各教科の合計を入れる配列
   float h[5]; //各教科の平均を入れる配列
   int i,j;
   for(i=0;i<5;i++)w[i]=0;
   for(i=0;i<5;i++){
     for(j=0;j<40;j++){
        w[i]=w[i]+x[j][i+1];
      }
      h[i]=(float)w[i]/40;
   }
   cout<<"合計 ";
   for(i=0;i<5;i++)cout<<w[i]<<" ";
   cout<<endl;
   cout<<"平均 ";
   for(i=0;i<5;i++)cout<<setprecision(4)<<h[i]<<" ";
   cout<<endl;
}
参考ダウンロードファイル

ポインタの場合
#include<iostream>
#include <stdlib.h>
#include <time.h>
#include <iomanip>
using namespace std;
void f1(); //1行目(ラベル)表示
void f2(int **x); //データ作成
void f3(int *sg,float *sh,int **x); //データ表示と各生徒合計・平均の表示
void f4(int **x); //各教科の合計と平均を算出して表示
void f5(int *sg,float *sh,int **x); //各生徒の合計と平均の算出
void main(){
   int **x=(int **)malloc(sizeof(int
*)*40); //2016/12/27に間違いを訂正
   for(int i=0;i<40;i++)x[i]=(int *)malloc(sizeof(int)*6);
   int sg[40];
   float sh[40];
   f1(); //1行目(ラベル)表示
   f2(x); //データ作成
   f5(sg,sh,x); //各生徒の合計と平均の算出
   f3(sg,sh,x); //データ表示と各生徒合計・平均の表示
   f4(x); //各教科の合計と平均を算出して表示
}

//1行目(ラベル)表示
void f1(){
   cout<<"出席番号 国語 社会 数学 理科 英語 合計 平均"<<endl;
}

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

//各生徒の合計と平均の算出
void f3(int sg[40],float sh[40],int x[40][6]){
   int i,j;
   for(i=0;i<40;i++){
     for(j=0;j<6;j++){
        if(j==0)cout<<" ";
        if(j==1)cout<<" ";
        if(x[i][j]<10)cout<<"0"<<x[i][j]<<" ";
        if(x[i][j]>=10)cout<<x[i][j]<<" ";
     }
     if(sg[i]<100)cout<<"0"<<sg[i]<<" "<<setprecision(3)<<sh[i]<<" ";
     if(sg[i]>=100)cout<<sg[i]<<" "<<setprecision(3)<<sh[i]<<" ";
     cout<<endl;
   }
}
//データ表示と各生徒合計・平均の表示
void f3(int *sg,float *sh,int **x){
   int i,j;
   for(i=0;i<40;i++){
     for(j=0;j<6;j++){
        if(j==0)cout<<" ";
        if(x[i][j]<10)cout<<"0"<<x[i][j]<<" ";
        if(x[i][j]>=10)cout<<x[i][j]<<" ";
     }
     cout<<" "<<sg[i]<<" "<<setprecision(3)<<sh[i]<<" ";
     cout<<endl;
   }
}

//各教科の合計と平均を算出して表示
void f4(int **x){
   int w[5]; //各教科の合計を入れる配列
   float h[5]; //各教科の平均を入れる配列
   int i,j;
   for(i=0;i<5;i++)w[i]=0;
   for(i=0;i<5;i++){
     for(j=0;j<40;j++){
        w[i]=w[i]+x[j][i+1];
      }
      h[i]=(float)w[i]/40;
   }
   cout<<"合計 ";
   for(i=0;i<5;i++)cout<<w[i]<<" ";
   cout<<endl;
   cout<<"平均 ";
   for(i=0;i<5;i++)cout<<setprecision(4)<<h[i]<<" ";
   cout<<endl;
}


配列を引数にして関数に送るということをやりましたので、
今度は、逆に関数から配列をもらい利用するということをやってみます。
関数を
int **f();
のようにプロトタイプ宣言をして、
関数fで作った配列のアドレスを返してもらうことによって、
関数fで作った配列のデータをmainで
void main(){
   int i,j;
   int **y=(int **)malloc(sizeof(int
*)*10); //2016/12/27に間違いを訂正
   for(i=0;i<10;i++)y[i]=(int *)malloc(sizeof(int)*10);
   y=f();
   for(i=0;i<10;i++){
     for(j=0;j<10;j++){
        if(y[i][j]<10)cout<<"00"<<y[i][j]<<" ";
        if(y[i][j]<100 && y[i][j]>=10)cout<<"0"<<y[i][j]<<" ";
        if(y[i][j]>=100)cout<<y[i][j]<<" ";
     }
     cout<<endl;
   }
}
のように利用してみましょう。

g




第8話へ 第10話へ

a

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