Title: ΕΡΓΑΣΙΑ vol E Post by: !!DUO!!(Αγγίζοντας την τελειότητα..) on May 14, 2006, 14:49:22 pm Στην C για να βρούμε την απόλυτη τιμή ενός αριθμού int χρησιμοποιούμε τη συνάρτηση abs()
Για την απόλυτη τιμή ενός float όμως ποιά χρησιμοποιούμε? Το έψαξα δεν βρήκα κάτι.. Αν ξέρει κάποιος ας μ πει.. :) Title: Re: ΕΡΓΑΣΙΑ vol E Post by: poly1 on May 14, 2006, 15:44:47 pm fabsf
Title: Απ: ΕΡΓΑΣΙΑ vol E Post by: !!DUO!!(Αγγίζοντας την τελειότητα..) on May 14, 2006, 15:50:00 pm Ναι δίκιο έχεις...Μάλλον εννοείς fabs()
Thanx Ninjάκι Title: Re: ΕΡΓΑΣΙΑ vol E Post by: poly1 on May 14, 2006, 15:52:01 pm same think with fabsf ;)
Title: Re: ΕΡΓΑΣΙΑ vol E Post by: dim on May 14, 2006, 15:59:54 pm Για την απόλυτη τιμή ο Κορτέσης μας έλεγε ότι είναι πιο απλό να γίνει χειροκίνητα, με τον τελεστή ?:
Δε θυμάμαι ακριβώς τη σύνταξη, μπορεί να γράψω κάνα λάθος.. y=x>0?x:-x; Aν το χ είναι θετικό, τότε y=x, αλλιώς y=-x Title: Απ: ΕΡΓΑΣΙΑ vol E Post by: apostolos1986 on May 14, 2006, 16:02:12 pm Για την απόλυτη τιμή ο Κορτέσης μας έλεγε ότι είναι πιο απλό να γίνει χειροκίνητα, με τον τελεστή ?: Δε θυμάμαι ακριβώς τη σύνταξη, μπορεί να γράψω κάνα λάθος.. y=x>0?x:-x; Aν το χ είναι θετικό, τότε y=x, αλλιώς y=-x ναι ναι το θυμάμαι κι εγώ που το έλεγε ο Κορτέσης αυτό.... Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Verminoz on May 14, 2006, 16:04:01 pm Σχεδόν σωστά την έγραψες. Για την ακρίβεια:
y = (x>0) ? x:-x; Αν και δεν είμαι σίγουρος αν η παρένθεση είναι απολύτως απαραίτητη. Τεσπα, έτσι είναι σίγουρα πιο ευανάγνωστη. Πιστεύω είναι αρκετά σοφιστικέ λύση!! :) Title: Re: ΕΡΓΑΣΙΑ vol E Post by: dim on May 14, 2006, 16:30:11 pm Πιστεύω είναι αρκετά σοφιστικέ λύση!! :) Ε όχι και σοφιστικέ!Είναι πολύ απλή στη σκέψη, είναι σύντομη (1 γραμμή), και στην τελική το προ/μα τρέχει γρηγορότερα (γλιτώνεις την κλήση συνάρτησης, την επιστροφή στη main, κτλ) (όχι ότι η διαφορά στην ταχύτητα θα γίνει αισθητή σ'αυτήν την περίπτωση..) Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Verminoz on May 14, 2006, 17:38:45 pm Ε όχι και σοφιστικέ! Είναι πολύ απλή στη σκέψη, είναι σύντομη (1 γραμμή), και στην τελική το προ/μα τρέχει γρηγορότερα (γλιτώνεις την κλήση συνάρτησης, την επιστροφή στη main, κτλ) (όχι ότι η διαφορά στην ταχύτητα θα γίνει αισθητή σ'αυτήν την περίπτωση..) Το είπες κι εσύ, είναι απλή στην σκέψη, σύντομη, δεν χρειάζεται να κάνεις κλήση από βιβλιοθήκη οπότε είναι έστω και τυπικά γρηγορότερη. Τι άλλο θες εσύ για να την πεις σοφιστικέ??? Πως το ορίζεις? Title: Re: ΕΡΓΑΣΙΑ vol E Post by: dim on May 14, 2006, 17:40:44 pm ^poke^ (Πιο δύσκολο είναι να ψάξεις στο help για την κατάλληλη συνάρτηση βιβλιοθήκης, παρά να γράψεις μια μισή γραμμούλα) Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Verminoz on May 14, 2006, 17:42:11 pm Καλά δεν θα σε πετύχω αύριο μεθαύριο στην σχολή! Θα τις φας κι εσύ τις φάπες σου :P
Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Turambar on May 14, 2006, 20:25:36 pm Η διαφορά ανάμεσα τους είναι η φιλοσοφία. Η έτοιμη εντολή σημαίνει ότι ξέρεις να χειρίζεσαι την γλώσσα. Η σειρούλα που το κάνει το ίδιο σημαίνει ότι λύνεις τα προβλήματα σου αλγοριθμικά.
Ο πρώτος τρόπος είναι σαφώς πιο γκλάμουρ. Title: Re: ΕΡΓΑΣΙΑ vol E Post by: papachris on May 14, 2006, 22:13:35 pm Παιδιά,
πώς δεσμεύουμε δυναμικά μνήμη για τον πίνακα [Ν]x[Ν] τύπου float; Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Verminoz on May 15, 2006, 11:33:38 am float **a;
if ( (a = (float**)malloc(N*sizeof(float*)))==NULL) { printf("\nDen yparxei arketh mnhmh gia katanomh.\n"); exit(1); } for (i=0;i<N;i++) { if ((a = (float*)malloc(N*sizeof(float)))==NULL) { printf("\nDen yparxei arketh mnhmh gia katanomh.\n"); exit(1); } } Αγαπητέ Τουράμπαρ, τον πρώτο δεν τον βρίσκω πιο γκλάμουρ αλλά πιο...πως να το πω...εύκολη λύση. Η όλη φιλοσοφία της C και της JAVA όπως πολύ καλά θα γνωρίζεις κι εσύ ο ίδιος είναι να σου παρέχει τον πυρήνα που έχει τα πιο βασικά και στοιχειώδη της γλώσσας και από κει και πέρα οι λειτουργίες ανώτερου επιπέδου υλοποιούνται με βάση τον πυρήνα. Εφ'όσον μπορείς να υλοποιήσεις κάτι μόνο με τον πυρήνα γιατί να ψάχνεις τις βιβλιοθήκες? Είναι σαν να πηγαίνεις Θεσσαλονίκη-Αθήνα μέσω Πρέβεζας :P :P Title: Re: ΕΡΓΑΣΙΑ vol E Post by: lynx on May 15, 2006, 13:52:54 pm Είναι σαν να πηγαίνεις Θεσσαλονίκη-Αθήνα μέσω Πρέβεζας :P :P Επειδή όμως στις μέρες μας η διαφορά στην ταχύτητα της μιας εντολής από την άλλη είναι της τάξεως τον μsec.. ίσως λιγότερο, ο Τουραμπ διαλέγει να πάει στην Αθήνα μέσω Πρέβεζας γιατί του αρέσει περισσότερο η διαδρομή και ας αργήσει και κανένα μsec... :P Περί ορέξεως... Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Verminoz on May 15, 2006, 14:18:35 pm Α ρε καταραμενη νέα γενιά, δεν ξέρετε να εκτιμάτε την δύναμη που έχετε στα χέρια σας και δεν την σέβεστε. Δεν ξέρετε πως ήταν όταν οι υπολογιστές είχαν 4ΜΒ RAM. Κάντε ότι θέλετε, δεν ασχολούμαι άλλο :P
Title: Re: ΕΡΓΑΣΙΑ vol E Post by: echidna; on May 15, 2006, 14:32:11 pm Μπορεί, όμως για την εποχή εκείνη ήταν όπως είναι τώρα τα 2GB RAM++, έτσι είναι αυτά.
Πάντως χρησιμοποιούμε malloc() για δυναμική κατανομή μνήμης, εε;; :-X Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Verminoz on May 15, 2006, 14:35:27 pm Δεν θα το έλεγα echidna; αλλά τεσπα. Ναι η malloc() είναι όπως βλέπεις η κατάλληλη συνάρτηση...
Title: Re: ΕΡΓΑΣΙΑ vol E Post by: echidna; on May 15, 2006, 14:40:23 pm Έτσι φαίνεται τουλάχιστον!!
Title: Απ: ΕΡΓΑΣΙΑ vol E Post by: Fuzzee on May 15, 2006, 22:00:32 pm float **a; if ( (a = (float**)malloc(N*sizeof(float*)))==NULL) { printf("\nDen yparxei arketh mnhmh gia katanomh.\n"); exit(1); } for (i=0;i<N;i++) { if ((a = (float*)malloc(N*sizeof(float)))==NULL) { printf("\nDen yparxei arketh mnhmh gia katanomh.\n"); exit(1); } } Τί κάνει το i ???????? ΟΟΟΟΟΕΕΕΕΟΟΟΟ????? Φίλε Verminoz αν μπορείς να το εξηγήσεις κιόλας??????? Νομίζω καταλαβαίνω τι θες να κάνεις ..το θέμα είναι πώς το κάνεις???? Title: Απ: ΕΡΓΑΣΙΑ vol E Post by: Fuzzee on May 15, 2006, 22:03:21 pm Υπόψιν και στο 'α=' σε χάνω λίγο...
Και τις 2 φορές βάζεις το ίδιο.. Title: Απ: ΕΡΓΑΣΙΑ vol E Post by: Fuzzee on May 15, 2006, 23:02:39 pm if ((a = (float*)malloc(N*sizeof(float)))==NULL)
δηλαδή : Error 2 error C2440: '=' : cannot convert from 'float *' to 'float **' Title: Re: ΕΡΓΑΣΙΑ vol E Post by: lynx on May 15, 2006, 23:17:31 pm Υπόψιν και στο 'α=' σε χάνω λίγο... Ε προφανώς το δεύτερο a είναι a[ i ] Και τις 2 φορές βάζεις το ίδιο.. Ουσιαστικά δεσμεύεις δυναμικά μνήμη στην αρχή για ένα πίνακα ο οποίος περιέχει Ν pointers σε τύπο float*, "if ( (a = (float**)malloc(N*sizeof(float*)))==NULL) { printf("\nDen yparxei arketh mnhmh gia katanomh.\n"); exit(1); } " και μετά δεσμεύεις μνήμη για Ν θέσεις για καθένα από τους παραπάνω πίνακες που θα περιέχουν στοιχεία τύπου float. "for (i=0;i<N;i++) { if ((a [ i ] = (float*)malloc(N*sizeof(float)))==NULL) { printf("\nDen yparxei arketh mnhmh gia katanomh.\n"); exit(1); } " Για αυτό χρειάζεσαι στην αρχή έναν pointer τύπου float**, δηλ. έναν pointer που δείχνει σε pointer ( στους N πίνακες τύπου float*) που δείχνoυν σε float. Title: Απ: ΕΡΓΑΣΙΑ vol E Post by: Fuzzee on May 15, 2006, 23:23:19 pm thnks τώρα βγάζει κάπως νόημα !!!!
άντε να δούμε τί θα δούμε..... Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Verminoz on May 16, 2006, 00:35:34 am Με συγχωρείτε παιδιά, ξέχασα όντως αυτό που πολύ σωστά παρατήρησε ο lynx. Ελπίζω τώρα να δούλεψε...
Title: Re: ΕΡΓΑΣΙΑ vol E Post by: onar on May 16, 2006, 11:17:32 am fabsf Για την συναρτησση fabsf πρεπει να κανουμε #include ποιο header file?Εγώ εβαλα το math.h.Την συναρτηση την αναγνωρισε ο compiler αλλα μου εκτυπώνει ο,τι να ναι....... Δωσε μερικες διευκρινυσεις..TNX Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Verminoz on May 16, 2006, 16:56:05 pm Το math.h, αν είχες βάλλει λάθος πολύ απλά θα σου έβγαζε error ο compiler. Σου εκτυπώνει ότι να ναι? Δηλαδή? Μπορείς να γίνεις πιο συγκεκριμένος? Πιθανόν να έχεις κάνει κάτι λάθος με τα ορίσματα της...
Title: Re: ΕΡΓΑΣΙΑ vol E Post by: faliakman on May 16, 2006, 18:43:03 pm ρε παιδια εχω γραψει σωστα τον κωδικα για την malloc αλλα οταν κανω run γραφει πως δεν εχει αρκετη μνημη και μου κανει exit.γιατι?
Title: Re: ΕΡΓΑΣΙΑ vol E Post by: onar on May 16, 2006, 20:58:29 pm ρε παιδια εχω γραψει σωστα τον κωδικα για την malloc αλλα οταν κανω run γραφει πως δεν εχει αρκετη μνημη και μου κανει exit.γιατι? LOLTitle: Re: ΕΡΓΑΣΙΑ vol E Post by: 4Dcube on May 16, 2006, 21:57:59 pm ρε παιδια εχω γραψει σωστα τον κωδικα για την malloc αλλα οταν κανω run γραφει πως δεν εχει αρκετη μνημη και μου κανει exit.γιατι? Είτε δεν επαρκεί η μνήμη του υπολογιστή σου ή κάτι δεν έγραψες καλά στο πρόγραμμα. Πάντως, ΑΝ ΘΕΛΕΤΕ ΝΑ ΒΟΗΘΗΘΕΙΤΕ ΣΕ ΣΥΓΚΕΚΡΙΜΕΝΑ ΠΡΟΒΛΗΜΑΤΑ, ΔΗΜΟΣΙΕΨΤΕ ΤΟΝ ΚΩΔΙΚΑ ΠΟΥ ΓΡΑΨΑΤΕ! ΑΛΛΙΩΣ ΜΗ ΖΗΤΑΤΕ ΒΟΗΘΕΙΑ ΣΤΑ ΤΟΠΙΚ ΚΑΙ ΚΑΘΙΣΤΕ 5 ΩΡΕΣ ΝΑ ΕΝΤΟΠΙΣΕΤΕ ΤΟ ΣΦΑΛΜΑ ΟΠΩΣ ΚΑΝΑΜΕ ΟΛΟΙ!! Δε θα αναφερθώ στο θέμα του ανοιχτού λογισμικού, εκτενώς. Απλά να πω ότι αξίζει να ανοίγουμε τη δουλειά μας και σε άλλους. Εξάλλου, στο πανεπιστήμιο ο σκοπός έχει πληρωθεί, η συμμετοχή στη διαδικασία της μάθησης. Και μη νομίζετε ότι κάνατε κάτι διαφορετικό, τα έχουμε κάνει αυτά όλοι όσοι ασχοληθήκαμε με το μάθημα. Περάστε μια βόλτα από την κατηγορία Downloads οτυ φόρουμ και θα δείτε έτοιμες λυμένες τις περσινές ασκήσεις - πανομοιότυπες με τις καινούριες. Αν τώρα νομίζετε ότι δικαιούστε πατέντα για τον κώδικα... ο θεός να μας φυλάει. Συγγνώμη για τον εκνευρισμό, αλλά τα έχω ψιλοπάρει με αυτούς που ζητούν βοήθεια με pm, ασχολείσαι με κάθε ένα από αυτούς και δε σου λένε ούτε ένα ευχαριστώ μετά... λες και σου έκαναν χάρη δείχνοντας τον κώδικα... Title: Re: ΕΡΓΑΣΙΑ vol E Post by: poly1 on May 16, 2006, 22:29:43 pm fabsf Για την συναρτησση fabsf πρεπει να κανουμε #include ποιο header file?Εγώ εβαλα το math.h.Την συναρτηση την αναγνωρισε ο compiler αλλα μου εκτυπώνει ο,τι να ναι....... Δωσε μερικες διευκρινυσεις..TNX ναι τυπικα στο math.h αλλα οντως δε δουλευει... αλλα τι σε νοιαζει αφου υπαρχει η fabs σκετο? κανει την ιδια δουλεια Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Verminoz on May 17, 2006, 11:10:02 am Συμπέρασμα: OpenSource rules ^notworthy^ ^notworthy^ ^notworthy^
:P Title: Re: ΕΡΓΑΣΙΑ vol E Post by: elisabeth on May 17, 2006, 18:36:37 pm να ρωτήσω και εγώ κάτι:
1)αν μία απο τις ελάχιστες διαφορές είναι 0 και η άλλη αρνητική?τότε ο πίνακας είναι διαδωνίως υπερτερών ή οχι? 2)if((a=(float *)(malloc(size_a)))==NULL){ printf("den iparxei arketi mnimi gia katanomi"); exit(1); } όταν βάλω Ν=10000000000000000000000000000000000000000000000000000 κανονικά θα πρέπει να γραφει "den iparxei arketi mnimi gia katanomi" και να κάνει exit αλλά μου εκτυπώνει κατι ΄πού έχω στο μέσο του προγράμματος(πηδάει ένα τμημα κώδικα και πάει προς το τέλος). κατα τα άλλα δουλεύει κανονικά. καμια ιδέα γιατι το κάνει αυτό? Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Verminoz on May 17, 2006, 18:40:22 pm Πως συμπέρανες ότι πηδάει ένα τμήμα του κώδικα και ποιο είναι αυτό??
Title: Re: ΕΡΓΑΣΙΑ vol E Post by: elisabeth on May 17, 2006, 18:45:01 pm void main()
{ int N,i,j,size_a; float *a,row_min,column_min; printf("dose ti diastasi N tou pinaka"); scanf("%d",&N); size_a=(int)(pow(N,2))*sizeof(float); if((a=(float *)(malloc(size_a)))==NULL){ printf("den iparxei arketi mnimi gia katanomi"); exit(1); } for(i=0;i<N;i++){ for(j=0;j<N;j++){ printf("dose to stoixeio %d,%d tou pinaka",i+1,j+1); scanf("%f",a+i*N+j); } } d_matrix(a,N,&row_min,&column_min); if(row_min>0||column_min>0) printf("o pinakas einai diagwniws yperterwn"); else printf("o pinakas den einai diagwniws yperterwn"); free((void *)a); system("PAUSE"); } δε μου ζητάει να είσαγω δεδομένα οπότε προφανώς πηδάει τουλάχιστον τη scanf και μετά μου εκτυπώνει: o pinakas einai diagwniws yperterwn Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Verminoz on May 17, 2006, 19:00:41 pm Προφανώς τρώει κόλλημα αλλά όχι αρκετό για να κρασάρει το πρόγραμμα. Δεν νομίζω ότι συντρέχει σοβαρός λόγος να κάνεις κάτι γι αυτό. Ούτως ή άλλως τέτοιου αριθμοί είναι εκτός τόπου και χρόνου... ;)
Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Nosferatu on May 18, 2006, 00:52:34 am θελω να στειλω πινακα 2 διαστασεων(τον matrix ΝxN) σε συναρτηση void και να τον επεξεργαζετε αυτη και αντιμετωπιζω προβλημα,παραθετω μερος του κωδικα για να καταλαβετε
void d_matrix( float **matrix,*N........) { (εστω θελω να προσθεσω το 1 σε ολα τα στοιχεια του) for(i = 0; i < *N; i++) { for(j = 0; j < *N; j++) { **matrix[j]= (**matrix[j])+1; } } } void main() { ........................ d_matrix(&matrix..........); ............. } και μου βγαζει τo warning στη σειρα της main που καλω την d_matrix ---warning C4047: 'function' : 'float ** ' differs in levels of indirection from 'float *** '-- Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Nosferatu on May 18, 2006, 00:56:51 am για οποιν ασχοληθει,εννοειται οτι στο post που εκανα ηθελα να γραψω matrix[j] και οχι matrix[j],sorry μου ξεφυγε
Title: Re: ΕΡΓΑΣΙΑ vol E Post by: elmaya on May 18, 2006, 01:41:12 am void main() { int N,i,j,size_a; float *a,row_min,column_min; printf("dose ti diastasi N tou pinaka"); scanf("%d",&N); size_a=(int)(pow(N,2))*sizeof(float); if((a=(float *)(malloc(size_a)))==NULL){ printf("den iparxei arketi mnimi gia katanomi"); exit(1); } for(i=0;i<N;i++){ for(j=0;j<N;j++){ printf("dose to stoixeio %d,%d tou pinaka",i+1,j+1); scanf("%f",a+i*N+j); } } d_matrix(a,N,&row_min,&column_min); if(row_min>0||column_min>0) printf("o pinakas einai diagwniws yperterwn"); else printf("o pinakas den einai diagwniws yperterwn"); free((void *)a); system("PAUSE"); } δε μου ζητάει να είσαγω δεδομένα οπότε προφανώς πηδάει τουλάχιστον τη scanf και μετά μου εκτυπώνει: o pinakas einai diagwniws yperterwn elisabeth σου παραθέτω τις διορθώσεις: #include <stdio.h> #include <stdlib.h> void main() { unsigned int N,i,j; //int i,j,size_a; float *a,row_min,column_min; printf("dose ti diastasi N tou pinaka\n"); printf("N: %u\n",N); printf("4294967296\n"); scanf("%u",&N); printf("N: %u\n",N); //int: 4294967295 kai unsigned int: 2147483647 register void *mem = (malloc (pow (N, 2)*sizeof (float))); if (mem == NULL) { printf("oops!"); system("PAUSE"); exit (1); } /* size_a=(int)(pow(N,2))*sizeof(float); printf("N = %d",N); if ((a = (float *)malloc(size_a) ) == NULL) { printf("den iparxei arketi mnimi gia katanomi"); exit(1); } */ for(i=0;i<N;i++){ for(j=0;j<N;j++){ printf("dose to stoixeio %d,%d tou pinaka",i+1,j+1); scanf("%f",a+i*N+j); } } //d_matrix(a,N,&row_min,&column_min); if(row_min>0||column_min>0) printf("o pinakas einai diagwniws yperterwn"); else printf("o pinakas den einai diagwniws yperterwn"); free((void *)a); system("PAUSE"); } Λοιπόν, το ζήτημα που θέτεις έχει να κάνει με την αριθμητική που καταλαβαίνει ο υπολογιστής. Στους σύγχρονους compilers o int είναι 4 bytes οπότε και η μέγιστη τιμή που μπορεί να πάρει είναι 2^31-1. Αντίστοιχα η μέγιστη τιμή ενός unsigned int είναι 2^32-1. Συνεπώς κάπου εκεί το χάνει το προγραμματάκι σου. Όταν του βάλεις 4294967296 θα καταλάβει μηδέν γιατί έτσι γίνεται για το δυαδικό σύστημα με συμπλήρωμα του 2. Οπότε αρχικοποιεί μηδενική μνήμη και όλα πάνε κατ' ευχήν και χωρίς λάθη για τον compiler, αλλά με φυτεμένα bugs από τη μεριά σου. Το ίδιο συμβαίνει και αν ξεπεράσεις αυτόν τον αριθμό. Το πρόγραμμα θα αρχίσει να συμπεριφέρεται περίεργα... Επίσης όταν βάζεις έναν μεγάλο αριθμό που τελειώνει με πολλά μηδενικά υποψιάζομαι ότι ο buffer εισόδου κρατάει τα τελευταία 32 bits που τον ενδιαφέρουν. Για την τελευταία πρόταση δεν είμαι απόλυτα σίγουρος. Ψάξτο ή ρώτα για να το επιβεβαιώσεις. Τέλος, σου σημείωσα πώς θα έκανα memory allocation πιο γρήγορα και πιο κατανοητά όσον αφορά τη συγγραφή του κώδικα. Καλό είναι να μάθετε να γράφεται με ένα συγκεκριμένο τρόπο αφού ψάξετε για το θέμα αυτό στο δίκτυο. Δεν είναι τυχαίο ότι υπάρχουν διάφορα standards για το θέμα αυτό. Παραθέτω: http://www.gnu.org/prep/standards/ (http://www.gnu.org/prep/standards/) http://en.wikipedia.org/wiki/Programming_style (http://en.wikipedia.org/wiki/Programming_style) Ελπίζω να βοήθησα. Title: Re: ΕΡΓΑΣΙΑ vol E Post by: CyberCaesar on May 18, 2006, 02:45:31 am Γεια σας παιδια!
Μπορει κανεις να μου πει πως βρισκεις το αθροισμα των στηλων?Εχω κολλησει.... Title: Re: ΕΡΓΑΣΙΑ vol E Post by: elisabeth on May 18, 2006, 17:14:04 pm Ελπίζω να βοήθησα. Ήσουν πολύ κατατοπιστικός.Ευχαριστώ. θελω να στειλω πινακα 2 διαστασεων(τον matrix ΝxN) σε συναρτηση void και να τον επεξεργαζετε αυτη και αντιμετωπιζω προβλημα,παραθετω μερος του κωδικα για να καταλαβετε void d_matrix( float **matrix,*N........) { (εστω θελω να προσθεσω το 1 σε ολα τα στοιχεια του) for(i = 0; i < *N; i++) { for(j = 0; j < *N; j++) { **matrix[j]= (**matrix[j])+1; } } } void main() { ........................ d_matrix(&matrix..........); ............. } και μου βγαζει τo warning στη σειρα της main που καλω την d_matrix ---warning C4047: 'function' : 'float ** ' differs in levels of indirection from 'float *** '-- έτσι όπως το βλέπω μάλλον πρέπει αντι για: void main() { ........................ d_matrix(&matrix..........); ............. } να βάλεις: void main() { ........................ d_matrix(matrix..........); ............. } η μεταβλητή matrix είναι pointer σε pointer(**). βάζοντας το & είναι σαν να λες οτι η matrix θα πάρει ως είσοδο ένανα pointer σε pointer σε pointer(***). οπότε δεν υπάρχει συμφωνία στον τύπο των ορισμάτων που δέχεται η d_matrix. (περιμένει ** και την καλείς δίνοντας αντί αυτού ***. Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Nosferatu on May 18, 2006, 17:22:11 pm εχεις δικιο το δοκιμασα και τρεχει,thanx elisabeth!!!!
Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Tonia on May 18, 2006, 18:22:04 pm Γεια σας και από μένα, μπορεί κανείς να με βοηθήσει στο εξής;
για τον υπολογισμό των διαφορών και κατόπιν των ελαχίστων διαφορών θα χρειαστούμε πάλι πίνακες ή αλλιώς pointers(διορθώστε με αν κάνω λάθος). Άρα δε θα πρέπει μέσα στην d_matrix να κάνουμε πάλι δυναμική κατανομή μνήμης 1ον για τη διαφορά των γραμμών και 2ον για τη διαφορά των στηλών? Εγώ κάτι τέτοιο έχω κάνει, αλλά κάπου κολλάει.Αν αυτό που λέω δεν είναι τελείως βλακεία και ενδιαφέρεται κάποιος να με βοηθήσει στέλνω τον κώδικα.ΤΗΑΝΚΣ Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Tonia on May 18, 2006, 18:31:24 pm Γεια σας παιδια! Μπορει κανεις να μου πει πως βρισκεις το αθροισμα των στηλων?Εχω κολλησει.... CyberCaesar: εγώ το βρήκα ως εξής(βέβαια δεν εχω καταφέρει να το τρέξω ακόμα για να δω αν είναι σωστό γιατί κολλάει αλλού το πρόγραμμα μου): θεωρώντας διαφορα1 και διαφορα2 τις Di-Gi και Dj-Sj αντίστοιχα: float *diafora1,*diafora2; float d_g,d_s,sum_g=0,sum_s=0,diaforamin1,diaforamin2; for(i=0;i<N;i++){ for(j=0;j<N;j++){ if(i!=j) sum_g+=*(*(a+i)+j); else d_g=fabs(*(s+i)+j); *(diafora1+i)=d_g-sum_g; } } for(i=0;i<N;i++){ for(j=0;j<N;j++){ if(i!=j) sum_s+=*(*(a+i)+j); else d_s=fabs(*(s+i)+j); *(diafora2+i)=d_s-sum_s; } } Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Faidon on May 18, 2006, 22:51:39 pm για οποιν ασχοληθει,εννοειται οτι στο post που εκανα ηθελα να γραψω matrix[j] και οχι matrix[j],sorry μου ξεφυγε Επειδή το βλέπω να συμβαίνει όλη την ώρα. Εσύ καλά το έγραψες. Όταν όμως βάζεις το i ανάμεσα σε [] το πρόγραμμα του forum νομίζει ότι θες να χρησιμοποιήσεις italics. Και έτσι το [ i ] δεν εμφανίζεται και το κείμενο στη συνέχεια γίνεται italics. Για να μη γίνεται αυτό όταν θέλετε να γράψετε κάτι τέτοιο κάντε το όπως μόλις τώρα το έκανα. Δηλαδή αφήστε δύο κενά ανάμεσα στα []: [(κενό)i(κενό)]=[ i ] Τέλεια!! Title: Re: ΕΡΓΑΣΙΑ vol E Post by: dictator23 on September 23, 2006, 03:02:09 am Αν θελει καποιος ας ανεβασει τον κωδικα του για την εργασια Ε,εφοσον ειναι βεβαιος/η οτι δουλευει.
Title: Re: ΕΡΓΑΣΙΑ vol E Post by: meltemi on September 23, 2006, 04:01:50 am Όποιος την κοιτάξει παρακαλείται να ελέγξει την ορθότητα της και να κάνει τυχόν επισημάνσεις
Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Mendoza on May 17, 2007, 18:23:31 pm float **a; Βασικά μπορούμε να δεσμεύσουμε Ν*Ν θέσεις και με άπλό δεικτη:if ( (a = (float**)malloc(N*sizeof(float*)))==NULL) { printf("\nDen yparxei arketh mnhmh gia katanomh.\n"); exit(1); } for (i=0;i<N;i++) { if ((a = (float*)malloc(N*sizeof(float)))==NULL) { printf("\nDen yparxei arketh mnhmh gia katanomh.\n"); exit(1); } } float*p; int k; k=N*N*sizeof(float); p=(float*)malloc(k); if(!p){ printf("Den exo mnimi"); exit(1); } kαι επειτα δινουμε τιμές.. Ετσι εχουμε π.χ σε πινακα α[2][2] το *p=a[0][0] *(p+1)=a[0][1] *(p+2)=a[1][0] *(p+3)=a[1][1] Title: Re: ΕΡΓΑΣΙΑ vol E Post by: kstpap on May 17, 2007, 22:25:20 pm Γεια σας παιδια.Δεν εχω καταλαβει για ποια εργασια μιλατε;Εχει δωσει ο καθηγητης απο το μαθημα εργασια να κανουμε;
Αν ναι,μπορειτε να μας τη κοινοποιησετε; και μεχρι ποτε πρεπει να τη δωσουμε; Ευχαριστω, Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Issle on May 17, 2007, 23:02:49 pm Quote Quote from: Kenny on May 15, 2006, 11:33:38 AM Quote Posted by: Bo@rD-RiDeR // Posted on: Today at 18:23:31 ::) Δt = T(f) - T( i ) = 12 mounths Kstpap όχι, είναι απάντηση σε post που έγινε 1 χρονο πρίν. Title: Re: ΕΡΓΑΣΙΑ vol E Post by: Mendoza on May 17, 2007, 23:08:19 pm LOL!
Title: Re: ΕΡΓΑΣΙΑ vol E Post by: kstpap on May 17, 2007, 23:38:26 pm ok,thanks..
|