Kleanthis Δημοσ. 12 Απριλίου 2009 Δημοσ. 12 Απριλίου 2009 Το NUMBERS ειναι!=0,#defined. Στο δεύτερο θέλω την τιμή της total όχι της max.
bxenos Δημοσ. 12 Απριλίου 2009 Δημοσ. 12 Απριλίου 2009 Το NUMBERS ειναι!=0,#defined.Στο δεύτερο θέλω την τιμή της total όχι της max. έίναι άλλα προγράμματα που κάνουν άλλη λειτουργία, γιατι περίμενες να είναι ισοδύναμα; Το πρώτο υπολογίζει μέγιστο. Το δεύτερο απλά τυπώνει το τελευταίο νούμερο στον πίνακα που είναι μεγαλύτερο ή ίσο με το πρώτο.
Kleanthis Δημοσ. 12 Απριλίου 2009 Δημοσ. 12 Απριλίου 2009 Σ'ευχαριστώ για το χρόνο σου. Απλά προσπαθώ να κάνω τη δουλειά του πρώτου, απλού προγράμματος με τους τελεστές ?:και κατ' αναλογία με την έκφραση a>b?a:b που βρίσκει μέγιστο δύο αριθμών ήθελα να το συμπτύξω για πολλούς.Αν έχεις κάποια συμπλήρωση θα μου ήταν χρήσιμη. Ευχαριστώ και πάλι.
bxenos Δημοσ. 12 Απριλίου 2009 Δημοσ. 12 Απριλίου 2009 > max=ar[0]; for(j=1;j<NUMBERS;j++) max = ar[j]>max ? ar[j] : max; πάντως ο τρόπος αυτός έχει j συγκρίσεις και j αποδόσεις τιμής, είναι λιγότερο αποτελεσματικός απο ένα απλό if στην συγκεκριμένη περίπτωση. Το total τι ήθελες να κάνει;
Kleanthis Δημοσ. 12 Απριλίου 2009 Δημοσ. 12 Απριλίου 2009 Βασικά, θέλω ν'αποφεύγω σε τέτοιες, απλές αριθμητικές συγκρίσεις τα if και να τα συμπτύσω όλα με τους τελεστές.Το total το έβαλα σαν ενδιάμεση μεταβλητή,αλλά έτσι όπως το παρέθεσες είναι οκ. Σ'ευχαριστώ.
bxenos Δημοσ. 12 Απριλίου 2009 Δημοσ. 12 Απριλίου 2009 > size_t total = 1;//ποσους μεγιστους έχουμε; max=ar[0]; for(j=1;j<NUMBERS;j++) max = ar[j]>max ? (total=1,ar[j]) : (total++,max);
Kleanthis Δημοσ. 12 Απριλίου 2009 Δημοσ. 12 Απριλίου 2009 Αρκετά σύνθετη η έκφραση αυτή για μένα που είμαι αρχάριος.Απλά,θα τη βάλω για να δοκιμάσω τι κάνει ακριβώς. Συμπλήρωση:Μήπως είναι max = ar[j]>max ? (total++,ar[j]) : (total=1,max); :) Ευχαριστώ για τις απαντήσεις σου.Είσαι διαφωτιστικός.
bxenos Δημοσ. 12 Απριλίου 2009 Δημοσ. 12 Απριλίου 2009 Το (total=1,ar[j]) κομάτι εκτελείται όταν ar[j]>max, δηλαδή όταν βρήκαμε έναν καινουργιο μέγιστο. Αρα ο αριθμος των στοιχειων του πινακα που τον βρηκαμε μεχρι τωρα ειναι 1 (πρωτη φορα τον βρήκαμε). Τι κάνει η έκφραση (total=1,ar[j]); Βάζει 1 στο total και επιστρέφει ar[j] (το τελευταιο κομάτι της λίστας με κομα). Το (total++,max) κομάτι εκτελείται όταν ar[j]<=max, δηλαδή όταν βρήκαμε άλλον έναν ΙΔΙΟ αριθμο με τον μέγιστο. Αρα ο αριθμος των στοιχειων του πινακα που τον βρηκαμε μεχρι τωρα ιδια με τον max είναι total++. Τι κάνει η έκφραση (total++,max); Αυξάνει το total κατα 1 και επιστρέφει max (το τελευταιο κομάτι της λίστας με κομα). Τα coma separated lists είναι ορισμένα απο την πρώτη κιόλας έκδοση της C παρ'ολα αυτά κάποιοι (ακόμα και "εμπειροι") τα χρησιμοποιουν μόνο κατα λάθος χωρις να το καταλαβαίνουν π.χ. > for(i=0,j=11;i<j;i++) ....
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.