פורסם 2007 בספטמבר 218 שנים מחבר אוקי הבנתי מה היו הבעיות.עכשיו זה מתקמפל אבל עם 4 אזהרות :c:\users\יעקובי אורן\documents\visual studio projects\dfdf\c44cc.c(19) : warning C4028: formal parameter 1 different from declarationc:\users\יעקובי אורן\documents\visual studio projects\dfdf\c44cc.c(19) : warning C4028: formal parameter 2 different from declarationc:\users\יעקובי אורן\documents\visual studio projects\dfdf\c44cc.c(48) : warning C4028: formal parameter 1 different from declarationc:\users\יעקובי אורן\documents\visual studio projects\dfdf\c44cc.c(48) : warning C4028: formal parameter 2 different from declaration
פורסם 2007 בספטמבר 218 שנים אני לא חושב שהן קריטיות, לא קראתי בדיוק למה הן קיימות. קראת מה שכתבתי בעריכה של ההודעה הקודמת שלי?
פורסם 2007 בספטמבר 218 שנים מחבר כן הבנתי את מה ששינתבכל אופן אני נלחם עכשיו לגלות למה האזהרות האלהכי אסור לי להגיש תרגיל עם אזהרות
פורסם 2007 בספטמבר 218 שנים בדקת קודם כל שזה עובד בכלל? כי כמו שכתבתי קודם, אני חושב שהחישוב של אורך המערך ב comp לא יעבוד.
פורסם 2007 בספטמבר 218 שנים מחבר הופה הופה תיקנתיאכן שם הייתה הבעיה, טעות קטנה בתחביר של הפרוטוטייפ.וזה גם עושה את מה שרציתילמען הסדר הטוב אצרף את התכנית הנכונה:#include <stdio.h>#include <stdlib.h>#define N 20unsigned count(const float [],int n); int comp(const void*,const void*);void sort(float [][N],int);void main(){ int i,j; float mat[][N]= {{7,2,3,5},{1,0,0,0},{2,0,0,1},{0,0,0,-2.99F},{0,1,-1,-5.123F},{0,0,0,0}};qsort(mat,sizeof(mat)/sizeof(mat[0]),sizeof(mat[0]),comp);}unsigned count(const float mat[], int n){ if( n == 1 ) { if( mat[n-1] == 0 ) { return 1; } else { return 0; } } else { if( mat[n-1] == 0 ) { return 1 + count(mat, n-1); } else { return count(mat, n-1); } }}int comp(const void* el1,const void* el2){unsigned x,y;x=count((float*)el1, N );y=count((float*)el2, N );if(x==y)return 0;if(x>y)return 1;return -1;}תודה לכ-ל מי שעזר במיוחד לשניצל.
פורסם 2007 בספטמבר 218 שנים בבקשה קובי - הסיבה שהוא ממיר ל-float** היא שהפונקציה צריכה לקבל מצביעים לטיפוסים בינם היא משווה (זו הדרישה של qsort). במקרה הספציפי הזה, הפונקציה צריכה להשוות בין שני מערכים, ולא בין שני floatים, כלומר היא צריכה לקבל מצביע למערך.
פורסם 2007 בספטמבר 218 שנים לא אמרתי (אולי לא הייתי כל כך ברור) שהוא צריך להמיר ל float אלא שבמקום לכתוב *(float**) הוא יכול לכתוב פשוט float* כשהוא ממיר למערך. פשוט קצר (וברור) יותר.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.