teodkats Δημοσ. 14 Μαΐου 2008 Μέλος Δημοσ. 14 Μαΐου 2008 > void taksinomisi_epilogi (int C[N], int D[N]) { int i, j, max, temp; for (i = 0; i < N; i++) { max=i; for (j = i + 1; j <=N; j++) { if (C[j] > C[max]) max = j; } if (i != max) { temp = C[i]; C[i] = C[max]; C[max] = temp; temp = D[i]; D[i] = D[max]; D[max] = temp; } } } ΥΠΟΕΡΓΑΣΙΑ 1. α4 ο πρώτος πίνακας ταξινομείται σε φθίνουσα διάταξη (με τον αλγόριθμο ταξινόμησης με επιλογή) και να διατηρείται η αρχική αντιστοιχία των στοιχείων των δύο πινάκων (π.χ. αν στον πρώτο πίνακα το 1ο στοιχείο έχει μεταφερθεί στην 4η θέση, τότε και στον δεύτερο πίνακα το 1ο στοιχείο θα μεταφερθεί στην 4η θέση). ΥΠΟΕΡΓΑΣΙΑ 1. β7 Εκτυπώστε μια συγκεντρωτική κατάσταση των φοιτητών, όπου θα φαίνονται οι Αριθμοί Μητρώου των φοιτητών κατά φθίνουσα σειρά και οι τελικοί βαθμοί τους στη Θ.Ε. Να χρησιμοποιήσετε τη συνάρτηση taksinomisi_epilogi() Συγνώμη δεν κατάλαβα πως γίνεται: Στον πρώτο πίνακα να γίνεται ταξινόμηση ενώ στο δεύτερο πίνακα όχι. Μετά όμως την ταξινόμηση με τη συνάρτηση taksinomisi_epilogi() π.χ. ο Αριθμός Μητρώου 85 που πηρέ βαθμό 5 και ο Αριθμός Μητρώου 14 που πηρέ βαθμό 10 να μην μπερδεύονται οι βαθμοί τους μετά την ταξινόμηση μονό του Αριθμού Μητρώου.
ippo00 Δημοσ. 14 Μαΐου 2008 Δημοσ. 14 Μαΐου 2008 Αν δεις την υπορουτίνα όπως την έχω παραπάνω ταξινομεί το δεύτερο όρισμα σε αντιστοιχία με το πρώτο, αυτό άλλωστε ήταν το ζητούμενο, κοινώς μια γραμμή του στύλ taksinomish_epilogh(AΜ,ΒΑΘΜΟΙ); είναι η απάντηση. Κοινώς ο δεύτερος πίνακας δεν ταξηνομείται, απλά ακολουθεί την ταξηνόμηση του πρώτου. Ίσως βοηθά το > temp = C[i]; C[i] = C[max]; C[max] = temp; temp = D[i]; D[i] = D[max]; D[max] = temp; Να γραφεί > temp = C[i]; temp2 = D[i]; C[i] = C[max]; D[i] = D[max]; C[max] = temp; D[max] = temp2;
teodkats Δημοσ. 14 Μαΐου 2008 Μέλος Δημοσ. 14 Μαΐου 2008 Αν δεις την υπορουτίνα όπως την έχω παραπάνω ταξινομεί το δεύτερο όρισμα σε αντιστοιχία με το πρώτο, αυτό άλλωστε ήταν το ζητούμενο, κοινώς μια γραμμή του στύλ taksinomish_epilogh(AΜ,ΒΑΘΜΟΙ); είναι η απάντηση Ευχαριστώ για την άμεση απάντηση. Θέλω πολύ διάβασμα, γιατί δεν την κατάλαβα καλά ακόμη.
teodkats Δημοσ. 14 Μαΐου 2008 Μέλος Δημοσ. 14 Μαΐου 2008 β1. Δηλώστε τέσσερις μονοδιάστατους πίνακες 4 στοιχείων, τους ακόλουθους: ΑΜ (Αριθμός Μητρώου), Α (Βαθμός 1ης Εξέτασης), Β (Βαθμός 2ης Εξέτασης) και ΤΕ (Βαθμός Τελικής Εξέτασης). β2. Διαβάστε τα στοιχεία των πινάκων. Εφαρμόστε αμυντικό προγραμματισμό, λαμβάνοντας υπʼ όψη ότι τα στοιχεία των πινάκων μπορούν να λαμβάνουν τις παρακάτω τιμές: a. ΑΜ: Αριθμοί Μητρώου - Διψήφιοι φυσικοί αριθμοί. Ο ΑΜ που εισάγεται κάθε φορά να είναι μοναδικός. Για να ελέγχω αν το ΑΜ είναι διψήφιο και κάθε φορά που εισάγεται μοναδικό έγραψα τον μπακαλίστικο πιο κάτω κώδικα και φυσικά κολλάει?? Καμία ιδέα;; Ευχαριστώ. > do { printf("Dose ton Arithmo Mitroou tou %d ou foititi :",i+1); scanf("%d",&AM[i]); }while(AM[i]<10||AM[i]>99||AM[0]==AM[1]||AM[2]==AM[3]||AM[0]==AM[2]||AM[0]==AM[3]);
ippo00 Δημοσ. 14 Μαΐου 2008 Δημοσ. 14 Μαΐου 2008 > for(i=0; i<4; i++ ) { printf("Enter AM %d ->",i+1); L1: scanf("%d", &AM[i]); if((AM[i]<10)||(AM[i]>99)) { printf("Renter AM %d ->",i+1); goto L1; } /* end if */ for(j=i-1; j>=0; j--) { if(AM[i]==AM[j]) { printf("Reenter AM %d ->",i+1); goto L1; } /* end if */ } /* end for j */ } /* end for i */ Παίζει να έχει λάθη γιατί δεν το κοίταξα καλα. Α και κάτι άλλο, το goto δεν διδάσκεται πια οπότε απεφυγέ το.
teodkats Δημοσ. 14 Μαΐου 2008 Μέλος Δημοσ. 14 Μαΐου 2008 Η Υποεγρασία1 εκτός από το προβληματάκι με το ΑΜ που πρέπει να είναι μοναδικός είναι έτοιμη. > for(i=0; i<4; i++ ) { printf("Enter AM %d ->",i+1); L1: scanf("%d", &AM[i]); if((AM[i]<10)||(AM[i]>99)) { printf("Renter AM %d ->",i+1); goto L1; } /* end if */ for(j=i-1; j>=0; j--) { if(AM[i]==AM[j]) { printf("Reenter AM %d ->",i+1); goto L1; } /* end if */ } /* end for j */ } /* end for i */ Παίζει να έχει λάθη γιατί δεν το κοίταξα καλα. Α και κάτι άλλο, το goto δεν διδάσκεται πια οπότε απεφυγέ το. Θα το κοιτάξω αύριο γιατί είμαι πτώμα έκλεισα 10 ώρες μπροστά στην οθόνη. Σε ευχαριστώ η βοήθεια σου ήταν πολύ μεγάλη.
d-l-sama Δημοσ. 15 Μαΐου 2008 Δημοσ. 15 Μαΐου 2008 Μια ερώτηση για να μπορέσω να βοηθήσω και εγώ με την σειρά μου!Επειδή ξέρω κάποιους τρόπους ταξινόμησης πολλοί από αυτούς είναι και αποδοτικοί!Σαν έχουν δώσει κάποια φόρμα για το πώς θα είναι αυτή η ταξινόμηση επιλογής?Επειδή στο internet που έψαξα βρήκα αρκετούς αλγόριθμους αρκετά διαφοροποιημένους ο ένας με τον άλλον!Και επίσης στα ορίσματα(τουλάχιστον σε μένα όταν έχω εργασίες-εργαστήρια)δεν μας καθορίζουν ποια συγκεκριμένα ορίσματα να βάλουμε!Μας λένε ποια αλλά άμα εμείς κρίνουμε σκόπιμο μπορούμε να βάλουμε και άλλα!
d-l-sama Δημοσ. 15 Μαΐου 2008 Δημοσ. 15 Μαΐου 2008 Αν και δεν είναι και πολύ αποδοτικός αλλά δεν θα ασχοληθώ και πολύ μ'αυτό!Επιμένω λίγο με τα ορίσματα γιατί αυτός ο αλγόριθμος που βρίσκω περνάει και έναν ακέραιο!Το μέγεθος του πίνακα!Αν κάνω κάποιο λάθος please postαρετε τον αλγόριθμο για να μπω στο νόημα και να μην γράφω βλακείες!
d-l-sama Δημοσ. 15 Μαΐου 2008 Δημοσ. 15 Μαΐου 2008 Για να ελέγχω αν το ΑΜ είναι διψήφιο και κάθε φορά που εισάγεται μοναδικό έγραψα τον μπακαλίστικο πιο κάτω κώδικα και φυσικά κολλάει?? Καμία ιδέα;;Ευχαριστώ. > do { printf("Dose ton Arithmo Mitroou tou %d ou foititi :",i+1); scanf("%d",&AM[i]); }while(AM[i]<10||AM[i]>99||AM[0]==AM[1]||AM[2]==AM[3]||AM[0]==AM[2]||AM[0]==AM[3]); Γιατί να χρησιμοποιήσεις το || ανάμεσα στις επιλογές σου και να μην χρησιμοποιήσεις το &&; A και εννοείται πως θα κολλήσει όταν θα προσπαθήσει να δώσε κάποια τιμή στο ΑΜ[1] όταν το τρέχεις για πρώτη φορά,στο ΑΜ[2] την δεύτερη κτλ!προσπάθησε να βγάλεις το ΑΜ[0] έξω από το loop!Με έλεγχο βέβαια!Θα σε διευκολύνει πολύ περισσότερο!
ippo00 Δημοσ. 15 Μαΐου 2008 Δημοσ. 15 Μαΐου 2008 Γιατί να χρησιμοποιήσεις το || ανάμεσα στις επιλογές σου και να μην χρησιμοποιήσεις το &&; Γιατί για να αποτύχει πρέπει ένα από αυτά να ισχύουν.. οπότε or όχι and..
teodkats Δημοσ. 15 Μαΐου 2008 Μέλος Δημοσ. 15 Μαΐου 2008 Καλησπέρα Βρήκα γιατί κολλάει Κάνω αρχικοποίηση των πινάκων int AM[4]={0,0,0,0},A[4]={0,0,0,0},B[4]={0,0,0,0},TE[4]={0,0,0,0}; και στο πρώτο έλεγχο είναι AM[0]!=AM[1] αλλά AM[2]==AM[3]=0 και δεν βγαίνει από το loop. Να μην κάνω αρχικοποίηση;;
ippo00 Δημοσ. 15 Μαΐου 2008 Δημοσ. 15 Μαΐου 2008 ΚαλησπέραΒρήκα γιατί κολλάει Κάνω αρχικοποίηση των πινάκων και στο πρώτο έλεγχο είναι AM[0]!=AM[1] αλλά AM[2]==AM[3]=0 και δεν βγαίνει από το loop. Να μην κάνω αρχικοποίηση;; Να ρωτήσω κάτι, άν ήταν πίνακας 2000 θέσεων θα κάναμε δήλωση του στύλ while(AM[0]!=AM[1] || AM[2]!=AM[1] || AM[2]!=AM[3] ... AM[1999]!=AM[2000]) ; δεν νομίζω..
teodkats Δημοσ. 15 Μαΐου 2008 Μέλος Δημοσ. 15 Μαΐου 2008 Να ρωτήσω κάτι, άν ήταν πίνακας 2000 θέσεων θα κάναμε δήλωση του στύλ while(AM[0]!=AM[1] || AM[2]!=AM[1] || AM[2]!=AM[3] ... AM[1999]!=AM[2000]) ; δεν νομίζω.. Έχεις δίκιο δεν είναι αποδοτικός ο έλεγχος Με διαφορετική αρχικοποίηση που δοκίμασα όμως δουλεύει το πρόγραμμα, δεν είναι και το καλύτερο αλλά είναι μια θετική εξέλιξη. Το δουλεύω ακόμα για να το βελτιώσω αν και έχω και άλλες υποεργασίες να κάνω και δεν έχω και πολύ χρόνο την Τρίτη παραδίδω την εργασία.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.