שאלה ב C

שאלה ב C

לאחר שיפרוים שבצעתי אני לא מצליח להכפיל את המטריצות למה? במה טעיתי?
#include <stdio.h> #include<stdlib.h> #include<conio.h> #define dick 100 void sum (int a[][dick],int b[][dick],int Size); void CreateArry(int Size) ; void main() { int a,i=0; system("cls"); printf("for start to programm press any key" ); puts(""); while('e'!=getch()) { system("cls"); printf("Enter Size:"); scanf("%d",&a); if(a>100) { printf("out of range" ); main(); } CreateArry(a); } } void CreateArry(int Size) { int i,j; int a[dick][dick]; int b[dick][dick]; puts("Arry A"); for(i=0;i<Size;i++) { for(j=0;j<Size;j++) { a[j]=rand()%3; } } for(i=0;i<Size;i++) { for(j=0;j<Size;j++) { printf("%4d",a[j]); } puts(""); } puts(""); puts("*"); puts(""); puts("Arry B"); for(i=0;i<Size;i++) { for(j=0;j<Size;j++) { b[j]=rand()%3; } } for(i=0;i<Size;i++) { for(j=0;j<Size;j++) { printf("%4d",b[j]); } puts(""); } sum(a,b,Size); } void sum(int a[][dick],int b[][dick],int Size) { int i,j; int c[dick][dick]={0}; puts(""); puts("="); puts("Arry C"); for(i=0;i<Size;i++) { for(j=0;j<Size;j++) { // c[j]=a[j]+b[j]; c[j]=c[j]+(a[j]*b[j]); } } for(i=0;i<Size;i++) { for(j=0;j<Size;j++) { printf("%4d",c[j]); } puts(""); } }
 

zagzagzag

New member
כמה הערות

קודם כל, האלגוריתם הבסיסי להכפלת מטריצות הוא זה-
int c[N][N]={0} int i,j,k; for (i=0; i<N; i++) for (j=0; j<N; j++) for (k=0; k<N; k++) c[j] += a[k] * b[k] [j]

כש-N הוא גודל המטריצה. אם לא הבנת, כדאי שתקרא איזשהו ספר בנושא (מומלץ: אלגברה לינארית I , האוניברסיטה הפתוחה, כרכים 2-3). ועכשיו הערות לגבי הקוד: 1. הקוד לא ממש קריא. כדאי מאד שתפריד בין הפונקציות שעוסקות בקלט / פלט (למשל קריאה לתוך מטריצות, או הדפסת מטריצה), לבין הפונקציות החישוביות (למשל, הכפלת מטריצות). היה לי קצת קשה לעקוב אחרי הקוד, והוא לא ממש ארוך (כך שאין הצדקה). 2. יש לך ב-main קריאה רקוריסיבית ל-main במקרי שגיאה. אתה בטוח שאתה צריך אותה?
 
למעלה