| mendyeta משתמש מתחיל
 
  
 
 הצטרף / הצטרפה: 03 September 2010
 מדינה: Israel
 משתמש: מנותק/ת
 הודעות: 3
 | 
          שלום,
           | | נשלח בתאריך: 03 September 2010 בשעה 18:15 | | IP רשוּם | 
 |   |  
           | 
 |  נתקעתי בשלב מסוים בתוכנית שקיבלתי לכתוב
 מה שאני צריך לעשות זה פשוט לקלוט נתונים למטריצה אך
 באמצעות מצביעים אחרי שאני שולח אותה לפונקציה. מה שהבנתי
 שהפונקציה בעצם מקבלת מערך של מצביעים שכל מצביע כביכול
 מצביע לכתובת התחלה של תת מערך (כאילו כתובת של כל שורה
 בעצם) ואז בזיכרון המטריצה היא בעצם מערך אחד ארוך.
 
 שורות אלו בתוכנית הם אילוץ:
 
 typedef int pArr[COLS];
 
 void GetMatrix(pArr* ,int , int );
 
 M[ROWS][COLS];
 
 
 זה קוד התוכנית:
 
 #pragma warning ( disable: 4996 )
 #include <stdio.h>
 #include <string.h>
 #define ROWS 2
 #define COLS 3
 
 typedef int pArr[COLS];
 
 void MergeStrings(char* str1,char* str2,char* strRes);
 void StrReverse(char* strRes,char* strRev);
 void GetMatrix(pArr* M ,int rows , int cols);
 
 void main()
 {
 char str1[256],str2[256],strRes[256],strRev[256];
 int M[ROWS][COLS];
 
 printf("Please enter first string:\n");
 flushall();
 gets(str1);
 printf("\nPlease enter second string:\n");
 flushall();
 gets(str2);
 
 printf("\nMerge of: %s\n",str1);
 printf("with: %s\n",str2);
 
 MergeStrings(str1,str2,strRes);
 
 StrReverse(strRes,strRev);
 
 printf("is:\n");
 printf("==> %s\n",strRes);
 
 printf("\nthe reversed merged string is:\n");
 printf("==> %s\n\n",strRev);
 
 GetMatrix(M,ROWS,COLS);
 }
 
 void MergeStrings(char* str1,char* str2,char* strRes)
 {
 int i=0,j=0,a=0,flag=0,flag2=0;
 
 do
 {
 
 while( *(str1+i)==' ')
 i++;
 
 while( *(str2+j)==' ')
 j++;
 
 while( *(str1+i)!=' ' && *(str1+i)!='\0')
 {
 *(strRes+a)=*(str1+i);
 i++;
 a++;
 }
 
 if(flag!=1)
 {
 *(strRes+a)=' ';
 a++;
 }
 
 if(*(str1+i)=='\0')
 flag=1;
 
 while( *(str2+j)!=' ' && *(str2+j)!='\0')
 {
 *(strRes+a)=*(str2+j);
 j++;
 a++;
 }
 
 if(flag2!=1)
 {
 *(strRes+a)=' ';
 a++;
 }
 
 if(*(str2+j)=='\0')
 flag2=1;
 
 }while( (*(str1+i)!='\0') || (*(str2+j)!='\0') );
 
 *(strRes+a)='\0';
 
 }
 
 void StrReverse(char* strRes,char* strRev)
 {
 int size,i=0,j=0;
 size=strlen(strRes);
 
 for(i=size-2 ; i>=0 ;i--)
 {
 *(strRev+j)=*(strRes+i);
 j++;
 }
 
 *(strRev+size-1)='\0';
 
 }
 
 void GetMatrix(pArr* M ,int rows , int cols )
 {
 
 }
 
 
 
 הבנתי שהשימוש ב
 *((*mat+i)+j)
 שקול ל
 mat[j]
 
 רציתי גם להבין את השקילות הזאת
 
 ראיתי גם נוסחה אחרת באתר הבא
 http://stackoverflow.com/questions/1276520/matrix-
 pointer-and-function
 אבל עם כוכבית אחת
 שם זה יותר מובן אבל כאשר אני משתמש בפקודה לקליטה אני מקבל
 error
 
 ניסיתי להכניס את הקוד הבא לפונקציה
 int i,j;
 for(i=0; i<rows ; i++)
 {
 for(j=0; j<cols; j++)
 scanf("%d",*(M+cols*i+j) )
 
 }
 
 |