سلام ...به این کدی که نوشتم دقت کنید

یه برنامه ای که تعداد ستون ها و سطر های ماتریس اول و تعداد ستون های ماتریس

دوم را میگیره (تعداد سطر های ماتریس دوم همان تعداد ستون های ماتریس اول میشه)

و حالا سه تا ارایه-1-ماتریس اول2-ماتریس دوم-3-ماتریسی برای نگهداری ضرب ماتریس

1 در ماتریس 2

سه تا تابع هم برای گرفتن اعداد -ضرب دو ماتریس و چاپ نتایج ضرب دو ماتریس(ماتریس سوم) نوشتم.

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void clrscr(void)
{
system("cls");
printf("****************************************** \n");
}
void mget(int mat[][],int,int mat1[][],int);
void mul(int mat[][],int,int mat1[][],int,int mat2[][],int);
void mout(int mat2[][],int);
int main(void){
int e,f,g,h;
printf("Enter szie of mat:x,y:");
scanf("%d%d",&e,&f);
printf("\nEnter size of mat1:y");
scanf("%d",&g);
int mat[e][f];
int mat1[f][g];
int mat2[e][g];
mget(mat,e,mat1,f);
mul(mat,f,mat1,g,mat2,g);
mout(mat2,e);
getch();
return 0;
}
//*************start mget function****************
void mget(int mat[][f],int e,int mat1[][g],int f){
int i=0;
printf("\n Please instert mat elements:\n");
printf("first insert one's row with space between them:\n");
for(i=0;i<e;i++)
if(i>0)printf("\n now insert %d's row with space between them:\n",i);
for(register int j=0;j<f;j++)
scanf("%d",&mat[i][j]);
clrscr();
printf("now insert mat1 elemets:\n");
printf("first insert one's row with space between them:\n");
for(i=0;i<f;i++)
if(i>0)printf("\n now insert %d's row with space between them:\n",i);
for(register int j=0;j<g;j++)
scanf("%d",&mat1[i][j]);
clrscr();
printf("mget function has been ti end with successfully\n");
}//***************end of mget function****************
//****************start mul function******************
void mul(int mat[][f],int e,int mat1[][g],int f,int mat2[][g],int e){
int temp=0;
for(int i=0;i<e;i++)
for(register int j=0;j<g;j++){
for(int z=0;z<f;z++)
temp+=mat[i][f]*mat1[f][j];
mat2[i][j]=temp;
temp=0;
}
clrscr();
}//************end of mul function***************
//*************start mout function***************
void mout(int mat2[][g],int e){
for(int i=0;i<e;i++){
printf("\n");
for(register int j=0;j<g;j++)
printf("mat2[i][j]=%d\t",mat2[i][j]);
}//end of external for
clrscr();
}//*************end of mout function**************
//end of program's codes
}


به الگوی توابع در اول برنامه توجه کنید:

void mget(int mat[][],int,int mat1[][],int);
void mul(int mat[][],int,int mat1[][],int,int mat2[][],int);
void mout(int mat2[][],int);


میگم نوشتن تعداد بعد دوم ارایه در الگوی تابع ضروری هست؟

اگر سه بعدی یا بیشتر باشه ,نوشتن بعد اخر ضروری هست؟

میدونم در تابع اصلی اجازه تعریف ارایه رو در حین اجرای برنامه ندارم که کامپایلر

بهم گیر میده:
int main(void){
int e,f,g,h;
printf("Enter szie of mat:x,y:");
scanf("%d%d",&e,&f);
printf("\nEnter size of mat1:y");
scanf("%d",&g);
int mat[e][f];
int mat1[f][g];
int mat2[e][g];
mget(mat,e,mat1,f);
mul(mat,f,mat1,g,mat2,g);
mout(mat2,e);
getch();
return 0;
}


ایا به غیر از حافظه پویا ,راهی برای حل این مشکل هست؟؟یعنی اول تعداد رو از کاربر بگیرم

بعد ارایه رو تعریف کنم ...

دیدید که چند متغیر عمومی تعریف کردم و بعد اونا رو در برنامه اصلی در فراخوانی توابع

به توابع فرستادم,در پارامتر های متناظر با همین ارگومان ها متغیر هایی هم نام با

متعیر های اصلی تعریف شدند ,حالا در این تابع دیگه متغیر های عمومی اعتبار نداره درسته؟؟

پس بهتر نیست اصلا تعداد بعد اول ارایه رو به عنوان پارامتر نفرستیم؟؟؟

این کار اجباریه؟؟


دیگه این که مشکلات حاد برنامه چیه که من رعایت نکردم؟