kat
Μηχανικών Πληροφορικής ΤΕ
Μηνύματα: 108
Θετικοί ψήφοι: +9
Αποσυνδεδεμένος
|
19 Νοεμβρίου 2012, 12:47
|
0
|
Που έχω λάθος; Δεν μου βγάζει τα αποτελέσματα στο file1.txt που τα θέλω. #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<time.h> # define N 8 int getUniqueNumber(int p[N], int i); void straight_select_int(int p[], int n); void straight_insert_int(int p[], int n); void bubblesort_int(int p[], int n); void quicksort_int(int left, int right, int p[]); main() { int p[N],arr[N]; int i,x; long t0, t1, dt; FILE *f1; randomize(); for(i=0; i<N; i++) arr =getUniqueNumber(arr,i); for(i=0; i<N; i++) p = arr; time(&t0); bubblesort_int(p,N); time(&t1); dt=t1-t0; f1=fopen("File1.txt","w"); for(i=0;i<N;i++) fprintf(f1," %d",dt); fclose(f1); for(i=0; i<N; i++) p = arr; time(&t0); quicksort_int(0,N-1,p); time(&t1); dt=t1-t0; f1=fopen("File1.txt","w"); for(i=0;i<N;i++) fprintf(f1," %d",dt); fclose(f1); for(i=0; i<N; i++) p = arr; time(&t0); straight_insert_int(p,N); time(&t1); dt=t1-t0; f1=fopen("File1.txt","w"); for(i=0;i<N;i++) fprintf(f1," %d",dt); fclose(f1); for(i=0; i<N; i++) p = arr; time(&t0); straight_select_int(p,N); time(&t1); dt=t1-t0; f1=fopen("File1.txt","w"); for(i=0;i<N;i++) fprintf(f1," %d",dt); fclose(f1);
getch(); return 0; } ...
|
|
|
Καταγράφηκε
|
|
|
|
|
genesis91
Μηχανικών Πληροφορικής ΤΕ
Μηνύματα: 113
Θετικοί ψήφοι: +19
Αποσυνδεδεμένος
|
Είσαι σίγουρη ότι το λάθος σου είναι στην main() ; Γιατί δεν μας δίνεις και τους ορισμούς των συναρτήσεων..
|
|
|
Καταγράφηκε
|
|
|
|
kat
Μηχανικών Πληροφορικής ΤΕ
Μηνύματα: 108
Θετικοί ψήφοι: +9
Αποσυνδεδεμένος
|
ναι εδω εχω λαθος. ειναι σωστός ο τρόπος για να μου εμφανιζει τα αποτελεσματα στο txt; να και οι συναρτησεις μου αλλα νομιζω το λαθος ειναι στη main. δοκιμασε να το τρεξεις.
int getUniqueNumber(int p[N], int i) { int x,j, found;
do { x = random(30000); found = 0; j = 0; while (j<=i && found == 0) { if (p[j] == x) found = 1; else j++; } }while (found == 1); return x; }
void bubblesort_int(int p[], int n) { int i,j,temp;
for (i=1; i<N; i++) for (j=N-1; j>=i; j--) if (p[j-1] > p[j]) { temp = p[j-1]; p[j-1] = p[j] ; p[j] = temp ; } }
void quicksort_int(int left, int right, int p[]) { int i,j,mid,x,temp;
if (left < right) { i = left; j = right; mid = (left+right)/2; x = p[mid]; while (i < j) { while (p < x) i++; while (p[j] > x) j--; if (i < j) { if (p == p[j]) { if (i<mid) i++; if (j>mid) j--; } else { temp = p; p = p[j]; p[j] = temp; } } } quicksort_int(left,j-1,p); quicksort_int(j+1,right,p); } }
void straight_insert_int(int p[], int n) { int i,x,j;
for(i=1;i<N;i++) { x=p; j=i-1; while ((x<p[j])&&(j>=0)) { p[j+1]=p[j]; j=j-1; } p[j+1]=x; } }
void straight_select_int(int p[], int n) { int i,min,k,j;
for(i=0; i<N-1; i++) { k = i; min = p; for (j = i+1; j<N; j++) { if (p[j] < min) { k = j; min = p[j]; } } p[k] = p; p = min; } }
|
|
|
Καταγράφηκε
|
|
|
|
nabz0r
Μηχανικών Πληροφορικής ΤΕ
Μηνύματα: 624
Θετικοί ψήφοι: +75
Αποσυνδεδεμένος
(•‿•)
|
Το πρόγραμμα αυτό σου τρέχει αλλά δεν σου βγάζει αποτελέσματα στο txt? Γιατί απ'ότι βλέπω (σύμφωνα με αυτά που μας έχεις δώσει) έχεις αρκετά λάθη. πχ
arr=getUniqueNumber(arr,i); Η getUniqueNumber επιστρέφει int όμως το σώζεις σε έναν δείκτη (το όνομα ενός πίνακα είναι ένας δείκτης για το 1ο στοιχείο του) Μάλλον ήθελες να γράψεις
arr[i]=getUniqueNumber(arr,i); γιατί το έχεις σε ένα loop
Επίσης έχει κάποια λάθη λογικής. Πχ αυτό που κάνεις παρακάτω
p=arr; δεν κάνει "backup" του πίνακα. Ότι αλλαγές θα κάνεις στον arr θα γίνονται και στον p μιας και δείχνουν στα ίδια στοιχεία. Υποθέτω οτι αυτό που θες είναι να κρατήσεις τον αρχικό πίνακα για να τον χρησιμοποιήσεις και στις άλλε συναρτήσεις ταξινόμησης. Αυτό που πρέπει να κάνεις είναι να φτιάξεις μια συνάρτηση που αποθηκεύει ένα-ένα όλα τα στοιχεία του πίνακα σε κάποιον άλλον και μετά τα επαναφέρει (δεν είναι δύσκολο, 2 γραμμές κώδικα είναι και οι 2 συναρτήσεις)
Γενικά έχεις αρκετά λάθη με δείκτες (όπως συγκρίσεις μεταξύ δεικτών κλπ). Τι compiler χρησιμοποιείς; Έπρεπε να σου τα βγάζει όλα αυτά.
Τέσπα αν το μόνο σου πρόβλημα είναι η αποθήκευση σε αρχείο, μπορείς αντί για fprintf να χρησιμοποιήσεις μια απλή printf και στο terminal να γράψεις
out.exe > file1.txt
|
|
Τελευταία τροποποίηση: 19 Νοεμβρίου 2012, 14:02 από nabz0r
|
Καταγράφηκε
|
♫ You're older than you've ever been, and now you're even older ...and now you're even older...and now you're even older... ♪
|
|
|
kat
Μηχανικών Πληροφορικής ΤΕ
Μηνύματα: 108
Θετικοί ψήφοι: +9
Αποσυνδεδεμένος
|
δεν ξερω γιατι βγηκαν ετσι λαθος εδω περα με την αντιγραφη.δεν τα εχω ετσι . δες
|
|
|
Καταγράφηκε
|
|
|
|
nabz0r
Μηχανικών Πληροφορικής ΤΕ
Μηνύματα: 624
Θετικοί ψήφοι: +75
Αποσυνδεδεμένος
(•‿•)
|
Στον builder το έκανες ε; Σε μένα έτσι όπως είναι τρέχει αλλά όλα τα αποτελέσματα που βγάζει είναι 0 κάτι που είναι λογικό μιας και η time() επιστρέφει τον χρόνο σε δευτερόλεπτα ενώ όλες οι συναρτήσεις σου μαζί κάνουν λιγότερο απο 1s. Αν θες να δεις σωστά αποτελέσματα ή βάλε ΠΟΛΛΕΣ παραπάνω τιμές ή βρες κάποια συνάρτησει που επιστρέφει τον χρόνο σε τάξεις μικρότερες του second (πχ milliseconds)
|
|
|
Καταγράφηκε
|
♫ You're older than you've ever been, and now you're even older ...and now you're even older...and now you're even older... ♪
|
|
|
kat
Μηχανικών Πληροφορικής ΤΕ
Μηνύματα: 108
Θετικοί ψήφοι: +9
Αποσυνδεδεμένος
|
[C++ Warning] conio.h(181): W8058 Cannot create pre-compiled header: code in header Αυτό το μήνυμα βγάζει όταν τρέχει.
|
|
|
Καταγράφηκε
|
|
|
|
nabz0r
Μηχανικών Πληροφορικής ΤΕ
Μηνύματα: 624
Θετικοί ψήφοι: +75
Αποσυνδεδεμένος
(•‿•)
|
[C++ Warning] conio.h(181): W8058 Cannot create pre-compiled header: code in header
Αυτό το μήνυμα βγάζει όταν τρέχει.
μη του δίνεις σημασία... το πρόγραμμά σου έχει τρέξει σωστά. αποθήκευσε το project σου σε έναν φάκελο και ξανα-τρέξ' το απο εκεί για να δεις το αρχείο που δημιουργείται...
|
|
|
Καταγράφηκε
|
♫ You're older than you've ever been, and now you're even older ...and now you're even older...and now you're even older... ♪
|
|
|
kat
Μηχανικών Πληροφορικής ΤΕ
Μηνύματα: 108
Θετικοί ψήφοι: +9
Αποσυνδεδεμένος
|
χμμμμ ίσως έτσι?? to = return(360000*t.ti_hour+6000*t.ti_min+100*t.ti_sec+t.ti_hund);
|
|
|
Καταγράφηκε
|
|
|
|
nabz0r
Μηχανικών Πληροφορικής ΤΕ
Μηνύματα: 624
Θετικοί ψήφοι: +75
Αποσυνδεδεμένος
(•‿•)
|
χμμμμ ίσως έτσι?? to = return(360000*t.ti_hour+6000*t.ti_min+100*t.ti_sec+t.ti_hund);
δεν ξέρω. δοκίμασέ το (λογικά θα χρειαστεί να βάλεις κενό ανάμεσα στο return και την παρένθεση γιατί αλλιώς θα το πάρει ως συνάρτηση. και για να μην σου βγάζει αυτό το error, βάλε αυτό πριν την δήλωση των headers #pragma hdrstop
|
|
|
Καταγράφηκε
|
♫ You're older than you've ever been, and now you're even older ...and now you're even older...and now you're even older... ♪
|
|
|
|