עבור לתוכן

שאלה ב C

Featured Replies

פורסם
  • מחבר

אוקי הבנתי מה היו הבעיות.

עכשיו זה מתקמפל אבל עם 4 אזהרות :

c:\users\יעקובי אורן\documents\visual studio projects\dfdf\c44cc.c(19) : warning C4028: formal parameter 1 different from declaration

c:\users\יעקובי אורן\documents\visual studio projects\dfdf\c44cc.c(19) : warning C4028: formal parameter 2 different from declaration

c:\users\יעקובי אורן\documents\visual studio projects\dfdf\c44cc.c(48) : warning C4028: formal parameter 1 different from declaration

c:\users\יעקובי אורן\documents\visual studio projects\dfdf\c44cc.c(48) : warning C4028: formal parameter 2 different from declaration

פורסם

אני לא חושב שהן קריטיות, לא קראתי בדיוק למה הן קיימות. קראת מה שכתבתי בעריכה של ההודעה הקודמת שלי?

פורסם
  • מחבר

כן הבנתי את מה ששינת

בכל אופן אני נלחם עכשיו לגלות למה האזהרות האלה

כי אסור לי להגיש תרגיל עם אזהרות

פורסם

בדקת קודם כל שזה עובד בכלל? כי כמו שכתבתי קודם, אני חושב שהחישוב של אורך המערך ב comp לא יעבוד.

פורסם
  • מחבר

הופה הופה תיקנתי

אכן שם הייתה הבעיה, טעות קטנה בתחביר של הפרוטוטייפ.

וזה גם עושה את מה שרציתי

למען הסדר הטוב אצרף את התכנית הנכונה:

#include <stdio.h>
#include <stdlib.h>
#define N 20
unsigned 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;
}

תודה לכ-ל מי שעזר

במיוחד לשניצל.

פורסם

בבקשה :)

קובי - הסיבה שהוא ממיר ל-float** היא שהפונקציה צריכה לקבל מצביעים לטיפוסים בינם היא משווה (זו הדרישה של qsort). במקרה הספציפי הזה, הפונקציה צריכה להשוות בין שני מערכים, ולא בין שני floatים, כלומר היא צריכה לקבל מצביע למערך.

פורסם

לא אמרתי (אולי לא הייתי כל כך ברור) שהוא צריך להמיר ל float אלא שבמקום לכתוב *(float**) הוא יכול לכתוב פשוט float* כשהוא ממיר למערך. פשוט קצר (וברור) יותר.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים