#include <stdio.h>
void mat_add(const int a[2][4][3], int c[1][4][3]){
int i, j, k;
for (i = 0; i < 4; i++){
for (j = 0; j < 3; j++){
for (k = 0; k < 2; k++){
c[0][i][j] += a[k][i][j];
}
}
}
}
void mat_print(const int m[2][4][3], int n){
int i, j;
for (i = 0; i < 4; i++){
for (j = 0; j < 3; j++){
printf("%4d", m[n][i][j]);
}
printf("\n");
}
}
int main(){
int tensu[2][4][3] = { { { 91, 63, 78 }, { 67, 72, 46 }, { 89, 34, 53 }, { 32, 54, 34 } },
{ { 97, 67, 82 }, { 73, 43, 46 }, { 97, 56, 21 }, { 85, 46, 35 } } };
int sum[1][4][3] = { 0 };
mat_add(tensu, sum);
puts("1回目の点数"); mat_print(tensu, 0);
puts("2回目の点数"); mat_print(tensu, 1);
puts("合計点"); mat_print(sum, 0);
return 0;
}
合計までを含めた3次元配列ではできないのでしょうか。
返信削除以下のようにしてみたのですが、上手くいきませんでした。
#include
void mat_add(const int a[3][4][3]){
int i, j;
for(i = 0 ; i < 4 ; i++)
for(j = 0 ; j < 3 ; j++)
a[2][i][j] = a[0][i][j] + a[1][i][j];
}
void mat_print(const int a[3][4][3], int b){
int i, j;
for(i = 0 ; i < 4 ; i++){
for(j = 0 ; j < 3 ; j++)
printf("%4d", a[b][i][j]);
printf("\n");
}
}
int main(void){
int tensu[3][4][3]= {{{91, 63, 78},
{67, 72, 46},
{89, 34, 53},
{32, 54, 34}},
{{97, 67, 82},
{73, 43, 46},
{97, 56, 21},
{85, 46, 35}}};
mat_add(tensu);
puts("1回目の点数"); mat_print(tensu, 0);
puts("2回目の点数"); mat_print(tensu, 1);
puts("合計点"); mat_print(tensu, 2);
return 0;
}
mat_addのconstを外したところエラーは減りましたが、mat_printのconstも外すことでようやく上手くいきました。なぜmat_printの方でもconstを付けてはいけないのでしょうか?
返信削除少しいじったりしたので行数はずれている部分もありますが、以下のようなエラーメッセージが出ました。
返信削除rensyu.c:12:26: エラー: expected ‘;’, ‘,’ or ‘)’ before ‘&’ token
void mat_print(const int &a[3][4][3], int b){
^
rensyu.c: 関数 ‘main’ 内:
rensyu.c:37:3: 警告: 関数 ‘mat_print’ の暗黙的な宣言です [-Wimplicit-function-declaration]
puts("1回目の点数"); mat_print(tensu, 0);
^
main以外の関数内で引数の配列を変化させないときはconstを付けておいた方が良いと思っていましたが、そのことによるエラーが増えてしまうため、constが本当に必要な時にだけつけるようにした方がよさそうですね。。。