georginos1989 Δημοσ. 21 Οκτωβρίου 2010 Μέλος Δημοσ. 21 Οκτωβρίου 2010 Thanks φιλε Από τα αποτελέσματα που εχεις αυτό ήθελα... Owlman ξέρω τι κανει το προγραμμα... Βρίσκει τα μερικα αθροισματα ενος πίνακα με 2 διαφορετικους τροπους .. Ο ενας τροπος ειναι η sum1... Τον αλλο τροπο θα τον διορθωσω τωρα... ---------- Προσθήκη στις 16:39 ---------- Προηγούμενο μήνυμα στις 16:35 ---------- Ρε συ το λαθος ηταν ότι με την malloc δεν μηδενίζονταν οι πινακες οπότε μετά έπρεπε να τους μηδενίσω?
Directx Δημοσ. 21 Οκτωβρίου 2010 Δημοσ. 21 Οκτωβρίου 2010 Thanks φιλε Από τα αποτελέσματα που εχεις αυτό ήθελα...[..]Ρε συ το λαθος ηταν ότι με την malloc δεν μηδενίζονταν οι πινακες οπότε μετά έπρεπε να τους μηδενίσω? Το ουσιαστικό σφάλμα ήταν καταρχήν στα ορίσματα που περνούσε η main στην sum1 (p, s => s, p) και στο γεγονός ότι το "int sum;" εντός της sum1 έμενε uninitialized (αντί για "int sum = 0;") οπότε είχε κάποια τυχαία τιμή. Όσον αφορά τα malloc, προσωπικά (συνήθεια) όταν δεσμεύω πίνακες (αν και δεν γράφω πια πολύ C) προτιμώ την calloc διότι παράλληλα μηδενίζει τις τιμές τους (αντί των malloc & memset). Τέλος, το ίδιο συμβαίνει και με τα δυο τελικά free - ουσιαστικά δεν χρειάζονται καθώς τα σύγχρονα λειτουργικά αποδεσμεύουν με την έξοδο του process όλη την δεσμευμένη μνήμη αλλά επειδή έρχομαι από παλαιότερα Λ.Σ. (που δεν κάνανε τέτοια πράματα ) είναι μια (ακόμη) συνήθεια να αποδεσμεύω στην έξοδο ότι δεσμεύω.
Directx Δημοσ. 21 Οκτωβρίου 2010 Δημοσ. 21 Οκτωβρίου 2010 Thanks φιλε Από τα αποτελέσματα που εχεις αυτό ήθελα...[..]Ρε συ το λαθος ηταν ότι με την malloc δεν μηδενίζονταν οι πινακες οπότε μετά έπρεπε να τους μηδενίσω? Το ουσιαστικό σφάλμα ήταν καταρχήν στα ορίσματα που περνούσε η main στην sum1 (p, s => s, p) και στο γεγονός ότι το "int sum;" εντός της sum1 έμενε uninitialized (αντί για "int sum = 0;") οπότε είχε κάποια τυχαία τιμή. Όσον αφορά τα malloc, προσωπικά (συνήθεια) όταν δεσμεύω πίνακες (αν και δεν γράφω πια πολύ C) προτιμώ την calloc διότι παράλληλα μηδενίζει τις τιμές τους (αντί των malloc & memset). Τέλος, το ίδιο συμβαίνει και με τα δυο τελικά free - ουσιαστικά δεν χρειάζονται καθώς τα σύγχρονα λειτουργικά αποδεσμεύουν με την έξοδο του process όλη την δεσμευμένη μνήμη αλλά επειδή έρχομαι από παλαιότερα Λ.Σ. (που δεν κάνανε τέτοια πράματα ) είναι μια (ακόμη) συνήθεια να αποδεσμεύω στην έξοδο ότι δεσμεύω.
georginos1989 Δημοσ. 21 Οκτωβρίου 2010 Μέλος Δημοσ. 21 Οκτωβρίου 2010 Ναι καλά λες.. Ποοο τι βλακεια εκανα παλι... χαχαχαχαχα Υπάρχει καποιος τροπος να μετράω τον αριθμο των πραξεων που γίνονται? Ή να βάλω εναν μετρητη να μετράει?
georginos1989 Δημοσ. 21 Οκτωβρίου 2010 Μέλος Δημοσ. 21 Οκτωβρίου 2010 Ναι καλά λες.. Ποοο τι βλακεια εκανα παλι... χαχαχαχαχα Υπάρχει καποιος τροπος να μετράω τον αριθμο των πραξεων που γίνονται? Ή να βάλω εναν μετρητη να μετράει?
Directx Δημοσ. 21 Οκτωβρίου 2010 Δημοσ. 21 Οκτωβρίου 2010 Ναι καλά λες.. Ποοο τι βλακεια εκανα παλι... χαχαχαχαχα Υπάρχει καποιος τροπος να μετράω τον αριθμο των πραξεων που γίνονται? Ή να βάλω εναν μετρητη να μετράει? Αν κατάλαβα τι θες, μπορείς να προβάλεις το size καθώς ουσιαστικά κάνεις τόσες size προσθέσεις στο sum1 for.
Directx Δημοσ. 21 Οκτωβρίου 2010 Δημοσ. 21 Οκτωβρίου 2010 Ναι καλά λες.. Ποοο τι βλακεια εκανα παλι... χαχαχαχαχα Υπάρχει καποιος τροπος να μετράω τον αριθμο των πραξεων που γίνονται? Ή να βάλω εναν μετρητη να μετράει? Αν κατάλαβα τι θες, μπορείς να προβάλεις το size καθώς ουσιαστικά κάνεις τόσες size προσθέσεις στο sum1 for.
georginos1989 Δημοσ. 21 Οκτωβρίου 2010 Μέλος Δημοσ. 21 Οκτωβρίου 2010 Ναι σωστό αυτό αλλά λογικά θα το θέλει με κάποιο τροπο....
georginos1989 Δημοσ. 21 Οκτωβρίου 2010 Μέλος Δημοσ. 21 Οκτωβρίου 2010 Ναι σωστό αυτό αλλά λογικά θα το θέλει με κάποιο τροπο....
Directx Δημοσ. 21 Οκτωβρίου 2010 Δημοσ. 21 Οκτωβρίου 2010 Ναι σωστό αυτό αλλά λογικά θα το θέλει με κάποιο τροπο.... Μπορείς να το κάνεις με πολλούς τρόπους, ο πιο απλός είναι να επιστρέφει η ρουτίνα το size (αφού πρέπει να επιστρέφει τον αριθμό των πράξεων η ίδια..) ως: > int sum1 (int *p1, int *s1, int size) { int sum = 0; /* Init. sum to zero */ for(int i=0;i<size;i++) { sum=sum+p1[i]; *(s1+i)=sum; } for (int i=0;i<size;i++) printf("%d \n", s1[i]); return size; } ή αν σώνει και καλά πρέπει να μετράς τις πράξεις με κάποιον ξεχωριστό counter (πχ. calcnt) ως: > int sum1 (int *p1, int *s1, int size) { int sum = 0, calcnt = 0; /* Init. sum to zero */ for(int i=0;i<size;i++) { sum=sum+p1[i]; *(s1+i)=sum; calcnt++; } for (int i=0;i<size;i++) printf("%d \n", s1[i]); return calcnt; }
Directx Δημοσ. 21 Οκτωβρίου 2010 Δημοσ. 21 Οκτωβρίου 2010 Ναι σωστό αυτό αλλά λογικά θα το θέλει με κάποιο τροπο.... Μπορείς να το κάνεις με πολλούς τρόπους, ο πιο απλός είναι να επιστρέφει η ρουτίνα το size (αφού πρέπει να επιστρέφει τον αριθμό των πράξεων η ίδια..) ως: > int sum1 (int *p1, int *s1, int size) { int sum = 0; /* Init. sum to zero */ for(int i=0;i<size;i++) { sum=sum+p1[i]; *(s1+i)=sum; } for (int i=0;i<size;i++) printf("%d \n", s1[i]); return size; } ή αν σώνει και καλά πρέπει να μετράς τις πράξεις με κάποιον ξεχωριστό counter (πχ. calcnt) ως: > int sum1 (int *p1, int *s1, int size) { int sum = 0, calcnt = 0; /* Init. sum to zero */ for(int i=0;i<size;i++) { sum=sum+p1[i]; *(s1+i)=sum; calcnt++; } for (int i=0;i<size;i++) printf("%d \n", s1[i]); return calcnt; }
georginos1989 Δημοσ. 21 Οκτωβρίου 2010 Μέλος Δημοσ. 21 Οκτωβρίου 2010 Ναι καταλαβα... και ενα τελευταιο.. δεν μπορω να βρω τον χρονο εκτελεσης... χρησιμοποιω την time() αλλά βγάζει 0 συνεχεια.. Πχ στον παρακατω κωδικα Δεν ξερω τι κανω λαθος
georginos1989 Δημοσ. 21 Οκτωβρίου 2010 Μέλος Δημοσ. 21 Οκτωβρίου 2010 Ναι καταλαβα... και ενα τελευταιο.. δεν μπορω να βρω τον χρονο εκτελεσης... χρησιμοποιω την time() αλλά βγάζει 0 συνεχεια.. Πχ στον παρακατω κωδικα Δεν ξερω τι κανω λαθος code.txt
Evgenios1 Δημοσ. 21 Οκτωβρίου 2010 Δημοσ. 21 Οκτωβρίου 2010 Ειναι παρα πολυ μικρος ο χρονος εκτελεσης Δοκιμασε αυτη εδω τη κλαση που εκανα παλια >#include <time.h> #define CDFUNC __fastcall #define MAX_EXCCOUNT 0xffffffff #define MID_EXCCOUNT 0x00ffffff #define LOW_EXCCOUNT 0x0000ffff class CodeTimer { clock_t start, end; long ms; float sec; void _calc() { ms = (end-start); sec= ms/1000; } public: CodeTimer(void) { } ~CodeTimer(void){} void Start(void (CDFUNC *pFunc)(void),unsigned int exccount) { Start(); for(unsigned int i=0; i<exccount;i++) pFunc(); Stop(); } void Start(void) { start =clock(); } void Stop(void) { end = clock(); _calc(); } void Release(void) { end=0; start=0; ms=0; sec=0; } long GetMilliSeconds(void) { return ms; } float GetSeconds(void) { return sec; } };
Evgenios1 Δημοσ. 21 Οκτωβρίου 2010 Δημοσ. 21 Οκτωβρίου 2010 Ειναι παρα πολυ μικρος ο χρονος εκτελεσης Δοκιμασε αυτη εδω τη κλαση που εκανα παλια >#include <time.h> #define CDFUNC __fastcall #define MAX_EXCCOUNT 0xffffffff #define MID_EXCCOUNT 0x00ffffff #define LOW_EXCCOUNT 0x0000ffff class CodeTimer { clock_t start, end; long ms; float sec; void _calc() { ms = (end-start); sec= ms/1000; } public: CodeTimer(void) { } ~CodeTimer(void){} void Start(void (CDFUNC *pFunc)(void),unsigned int exccount) { Start(); for(unsigned int i=0; i<exccount;i++) pFunc(); Stop(); } void Start(void) { start =clock(); } void Stop(void) { end = clock(); _calc(); } void Release(void) { end=0; start=0; ms=0; sec=0; } long GetMilliSeconds(void) { return ms; } float GetSeconds(void) { return sec; } };
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.