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) )
}
|