שאלה

שאלה

הי לכולם, אשמח לעזרה ב- C: הגדרתי ב- typedef מערך חד מימדי מגודל 2 של double בשם p. אח"כ הגדרתי ב- typedef מערך חד מימדי מגודל 4 של המערך הראשון בשם q. כך שלמעשה q הוא מטריצה 4X2 כשכל שורה בו היא מערך p. כשאני קוראת ערכים לתוך המטריצה הזאת, יש לי 4 איטרציות כשבכל איטרציה אני מקבלת שני ערכים למערך p ואח"כ אני מציבה את המערך p שהתקבל לתוך השורה הרלוונטית ב- q. אני כותבת כך: q=p אני מקבלת הןדעת קומפילציה ש- lvalue required. ניסיתי לכתוב כך: q=*p אך אז אני מקבלת הודעת קומפילציה: illegal use of floating point. מישהו יכול לעזור? תודה!
 

HaRmosh

New member
הבעיה

את מנסה לעשות:
p​

כש-p הוא שם של טיפוס, זה כמו שתנסי לכתוב משהו כמו int = 4, זה לא נכון תחבירית. במקום זה, תיצרי משתנה מטיפוס q, למשל כך:
q mat; mat[0][0] = 7;​
וזה יהיה בסדר.
 
אהה לא

זה בסדר, לא כתבתי נכון את השאלה: המערך החד מימדי מגודל 2 מוגדר ב- typedef כטיפוס po. המערך ה- 4 מימדי של po מוגדר כטיפוס qo. אח"כ ב- main הגדרתי: po p ו- qo q. ואח"כ אני עושה את הקריאה וההצבה. אז מה הבעיה עכשיו? תודה
 
טוב...

typedef double point[DIM]; /* The type "point" is an array of double of size DIM */ typedef point quad[4]; /* The type "quad" is an array of 4 "points" (4*DIM matrix) */ int main(void) { point p; quad q; int i, j; for(i=0; i<4; i++) { printf("Please enter the X and Y coordinates of the %d point of the quad: ", i); for(j=0; j<DIM; j++) { scanf("%lf", &p[j]); } q = p; } return 0; } הכיוונים קצת התהפכו לי בהעתקה, מקווה שזה מובן.. DIM הוא מגודל 2 (מודגר ב- #define, חסכתי את ההעתקה) תודה
 

HaRmosh

New member
אז ככה...

שני דברים: 1. את יכולה לישר את קוד לשמאל ע"י לחיצה על 'התחל קוד', העתקת הקוד ואח"כ 'סיום קוד'. 2. מה שאת מנסה לעשות בשורה:
q = p;

הוא להעתיק מערך לתוך מערך, וזאת לא הצורה לעשות זאת. הפתרון הוא שתעתיקי קואודינטות, למשל כך:
q[0] = p[0]; q[1] = p[1];
 
סבבה תודה! ועוד שאלה:

אני קוראת לפונקציה שמחשבת את המרחק בין שתי נקודות. כל פעם אני מעבירה לפונקציה שני איברים של q (שזה בעצם להעביר שתי נקודות לפונקציה, כשכל נקודה כוללת בתוכה את קואורדינטות ה- X וה- Y שלה). הפונקציה מקבלת שתי נקודות מטיפוס point: (point p_1, point p_2) הפונקציה שמחשבת את המרחק היא שורש של סכום ריבועי ההפרש של קואורדינטות ה- X וה- Y: distance = sqrt((pow(p_2[0]-p_1[0]), 2)+pow(p_2[1]-p_1[1], 2)) הפונקציה מחזירה משתנה מטיפוס double: distance. משום מה אני מקבלת שתי שגיאות קומפילציה: illegal use of floating point imcompatible type conversion בנוסף אני מקבלת אזהרה ש- p_1 ו- p_2 הם משתנים שלא משתמשים בהם אף פעם. מה הבעיה? תודה..
 

selalerer

New member
הטיפוס שהפונקציה מחכה לו זה point ו

את שולחת לו po או איך שלא הגדרת את האיברים של q.
 
למעלה