glaza Δημοσ. 15 Μαΐου 2011 Δημοσ. 15 Μαΐου 2011 Καλησπέρα παιδιά, έχω Ν αντικείμενα και τις συντεταγμένες τους και θέλω να βρω ποιό ζεύγος αντικειμένων θα αντικατασταθεί από ένα αντικείμενο βρίσκοντας την μικρότερη απόσταση των 2 αντικείμενων και ύστερα αφαιρόντας τα 2 αντικείμενα που υπολογίστηκαν. Καλώντας την join(),η οποία, μέσα από αναδρομή, καλώντας τη συνάρτηση find_pair(),θέλω να εκτυπώνει τις συντεταγμένες των ζευγών των αντικειμένων που θα συγχωνευτούν σε ένα. Στη find_pair() βάζω μέσα από τα ορίσματα, τις συντεταγμένες των αντικειμένων που θέλω να βρω την έλαχιστη απόσταση μεταξύ τους κτλ αλλά κολλάω στο πώς να κάνω την αναδρομή και την join()..Εχω σκαλώσει κανά 2ωρο δεν ξέρω τι να κάνω. #include <stdio.h> #include <stdlib.h> #include <math.h> void find_pair(int i, int N, float *x, float *y, float *minD, int *r1, int *r2); void join(?????); int main () { int i,N, r1, r2 ; float *x,*y, minD ; printf("Δώστε τον αριθμό των ραδιοφάρων\n"); scanf("%d", &N); x=(float*)malloc(N*sizeof(float)); if(x==NULL) { printf("Δεν υπάρχει αρκετή μνήμη\n"); exit(1); } y=(float*)malloc(N*sizeof(float)); if(y==NULL) { printf("Δεν υπάρχει αρκετή μνήμη\n"); exit(2); } for(i=0; i<N; i++){ printf("Δώσε τις συντεταγμένες του %dού ραδιοφάρου\n", i+1); scanf("%f %f", &x, &y); } minD=sqrt(pow(x[0]-x[1],2) + pow(y[0]-y[1], 2)); for(i=0; i<N; i++){ join(????); } } void join(????) { ????? } void find_pair(int i,int N,float *x, float *y,float *minD, int *r1, int *r2 ) { //kapos etsi tha tin douleva an den xreiazotane na valo tin join() katholou int j ; float d ; for(j=0; j<N; j++) { if(i!=j){ d=sqrt(pow(x-x[j],2) + pow(y-y[j], 2)); if(d<(*minD)){ *minD=d; *r1=i; *r2=j; } } } }
migf1 Δημοσ. 18 Μαΐου 2011 Δημοσ. 18 Μαΐου 2011 Καλησπέρα, αν σου πω ότι έχω καταλάβει κάτι από την ερώτησή σου, ψέμματα θα πω (ούτε από την εκφώνηση κατάλαβα, ούτε από τον κώδικα) Οκ, σοβαρά τώρα, κατάλαβα ότι διαβάζεις N φάρους και τις συντεταγμένες τους και χρησιμοποιείς malloc() για να δεσμεύσεις τη μνήμη που θα αποθηκευτούν. Καλά μέχρι εδώ. Μετά αρχίζει το... χάος! Δεν καταλαβαίνω γρι! Και δεν με βοηθάει καθόλου να καταλάβω ούτε η ερώτησή σου ούτε ο κώδικάς σου. Μήπως μπορείς να μας δώσεις την εκφώνηση της άσκησης; Την αναδρομή ποτέ μου δεν τη συμπάθησα, έως και τη σνομπάρω τελείως μπορώ να σου πω, αλλά άμα καταλάβω τι ακριβώς θες να κάνεις μπορώ να κάνω μια προσπάθεια να σε βοηθήσω. Προς το παρόν, ξανάγραψα τον κώδικα της main() σου με δομές και ονόματα μεταβλητών, με τρόπο που εμένα τουλάχιστον θα με βοηθήσει πολύ καλύτερα στη συνέχεια να καταλαβαίνω τι θα κάνω (ελπίζω να μην έχεις περιορισμούς τύπου "μη χρησιμοποιήσετε struct"). > #include <stdio.h> #include <stdlib.h> #include <math.h> void find_pair(int i, int N, float *x, float *y, float *minD, int *r1, int *r2); void join(void); // ------------------------------------------------------------------------------ int main () { typedef struct Faros { float x; float y; }Faros; Faros *faros; int nfaroi; register int i; float mindistance; // Είσοδος πλήθους ραδιοφάρων printf("Poio einai to plhthos twn radiofarwn? "); fflush(stdin); scanf("%d", &nfaroi); // δεσμευση μνήμης για τις συντεταγμένες των 'nfaroi' ραδιοφάρων faros = (Faros *) malloc( nfaroi * sizeof(Faros) ); if ( !faros ) { printf("Aneprakhs mnhnh, pathse ENTER gia termatismo..."); fflush(stdin); getchar(); exit(1); } // Είσοδος συντεταγμένων για τον κάθε ραδιοφάρο for (i=0; i < nfaroi; i++) { printf("Syntetagmenes %doy radiofaroy (x y): ", i+1); fflush(stdin); scanf("%f %f", &faros[i].x, &faros[i].y); } // ΤΙ ΑΚΡΙΒΩΣ ΣΗΜΑΙΝΕΙ "ΕΛΑΧΙΣΤΗ ΑΠΟΣΤΑΣΗ ΜΕΤΑΞΥ 2 ΦΑΡΩΝ"; ΜΙΑ ΔΕΝ ΕΙΝΑΙ Η ΑΠΟΣΤΑΣΗ ΜΕΤΑΞΥ 2 ΦΑΡΩΝ; // mindistance = sqrt( pow(faros[0].x - faros[1].x, 2) + pow(faros[0].y - faros[1].y, 2 ) ); printf("pathste ENTER gia termatismo...."); fflush(stdin); getchar(); free( faros ); exit(0); /*** ΑΥΘΕΝΤΙΚΟΣ ΚΩΔΙΚΑΣ ΑΠΕΝΕΡΓΟΠΟΙΗΜΕΝΟΣ int i,N, r1, r2 ; float *x,*y, minD; x = (float *) malloc( N * sizeof(float) ); if( x == NULL { printf("Δεν υπάρχει αρκετή μνήμη\n"); exit(1); } y = (float *) malloc( N * sizeof(float) ); if ( y == NULL ) { printf("Δεν υπάρχει αρκετή μνήμη\n"); exit(2); } for (i=0; i<N; i++) { printf("Δώσε τις συντεταγμένες του %dού ραδιοφάρου\n", i+1); scanf("%f %f", &x[i], &y[i]); } minD = sqrt( pow( x[0] - x[1], 2 ) + pow( y[0] - y[1], 2 ) ); for (i=0; i<N; i++){ join(????); } ***/ } // ------------------------------------------------------------------------------ void join(void) { return; } // ------------------------------------------------------------------------------ void find_pair(int i, int N, float *x, float *y, float *minD, int *r1, int *r2 ) { //kapos etsi tha tin douleva an den xreiazotane na valo tin join() katholou /*** ΑΥΘΕΝΤΙΚΟΣ ΚΩΔΙΚΑΣ ΑΠΕΝΕΡΓΟΠΟΙΗΜΕΝΟΣ int j ; float d ; for(j=0; j<N; j++) { if ( i != j ) { d = sqrt( pow( x[i] - x[j], 2 ) + pow( y[i] - y[j], 2 ) ); if ( d < *minD ) { *minD=d; *r1=i; *r2=j; } } } ***/ }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.