Δίνεται ο παρακάτω αλγόριθμος για τον υπολογισμό της μέγιστης και της ελάχιστης τιμής κάποιων αριθμών:
Αλγόριθμος Υπολογισμός_Ελάχιστης_Μέγιστης
Δεδομένα //Ν//
μιν <- 100
μαξ <- -100
Για ι από 1 μέχρι N
Διάβασε χ
Αν χ < μιν τοτε μιν <- χ
Αν χ > μαξ τοτε μαξ <- χ
Τέλος_επανάληψης
Αποτελέσματα //μιν, μαξ//
Τέλος Υπολογισμός_Ελάχιστης_Μέγιστης
α. Ποιά από τις δύο τιμές εξόδου θα υπολογιστεί λάθος εάν όλοι οι αριθμοί που θα δοθούν είναι μεγαλύτεροι του 500;
β. Να αιτιολογήσετε την απάντησή σας
ΠαράθεσηΔεδομένα //Ν//
???
Που κολάει αυτό ρε Στέργιο? Η λόγω γρίπης μου δεν καταλαβαίνω?...
Για την ακρίβεια: το 30 που κολλάει (αφού η εκφώνηση μιλάει για 'κάποιους' αριθμούς..)
Ο δαίμων Βασίλη μου, ο δαίμων.. το διόρθωσα. Καλά που το είδες ;)
Σ(τ)έργιος :)
Μήπως να μεταφέρουμε αυτό το θέμα στη Δομή Επανάληψης;
Παράθεση από: Νίκος Αδαμόπουλος στις 24 Ιαν 2011, 05:36:35 ΜΜ
Μήπως να μεταφέρουμε αυτό το θέμα στη Δομή Επανάληψης;
Ασφαλώς.. εκεί ανήκει :-[ Και μάλιστα στο χώρο της ΓΙΑ :angel:
προφανώς θα υπολογιστεί λάθος το min αφού κάθε φορά ο αλγόριθμος θα προσπερνά την εντολή: Αν x<min τότε min<---x
Ακριβώς !!
Να γιατί τελικά δεν είναι τόσο καλή πρακτική η αυθαίρετη αρχικοποίηση του min (ή του max).
Ασφαλής είναι ουσιαστικά μόνο όταν είναι γνωστό εκ των προτέρων το εύρος των τιμών οπότε θεωρείται αρκετό να γίνει η αρχικοποίηση του min με τη μέγιστη δυνατή τιμή (και αντίστοιχα του max με την ελάχιστη δυνατή τιμή)
Αυτό όμως δεν είναι γνωστό σε όλα τα προβλήματα επομένως αυτή η "τεχνική" δεν αρκεί.
Βέβαια σε προγραμματιστικό επίπεδο υπάρχει κάποιο όριο στη μέγιστη τιμή που μπορεί να αναπαρασταθεί για κάποιους τύπους αριθμητικών μεταβλητών (πχ MAXINT για ακεραίους στην Pascal) οπότε συνηθίζεται η υιοθέτηση τέτοιων πρακτικών με σχετική ασφάλεια (min <- MAXINT). Αυτό όμως δε μας αφορά ιδιαίτερα στο επίπεδο του μαθήματός μας οπότε, γενικά η αυθαίρετη αρχικοποίηση min / max καλό είναι να αποφεύγεται.
Η ασφαλέστερη οδός, είναι η απόλυτα λογική σκέψη να γίνεται η αρχικοποίηση του min (ή του max) με κάποια από τις τιμές που εξετάζουμε. Αυτή, στην περίπτωση που οι τιμές δεν αποθηκεύονται σε δομή δεδομένων, είναι η πρώτη που δίνεται.
Εάν οι τιμές είναι ήδη αποθηκευμένες σε κάποια δομή (πχ πίνακα) η αρχικοποίηση μπορεί να γίνει με οποιαδήποτε από τις τιμές του πίνακα. Συνηθίζεται όμως να γίνεται με την πρώτη (min <- Π[1]) ώστε στη συνέχεια να "γλυτώνουμε μία επανάληψη" (Για ι από 2 μέχρι Ν). Όμοια βέβαια θα μπορούσε να γίνει και με την τελευταία (min <- Π[Ν]) και στη συνέχεια .. (Για ι από 1 μέχρι Ν-1). Εννοείται ότι θα μπορούσε να γίνει και με οποιαδήποτε άλλη τιμή του πίνακα (min <- Π[2] ή min <- Π[3] ή min <- Π[4] ) όμως σε αυτή την περίπτωση, ο μόνος τρόπος να "εξαιρεθεί" αυτή η τιμή από την παρακάτω επεξεργασία είναι με τη χρήση επιλογής μέσα στο βρόχο (π.χ. αν ι <> 2 τότε ..) κάτι που όμως πιό πολύ κακό κάνει (καθυστερεί την εκτέλεση) παρά καλό..
Προσοχή όμως θέλει στους δισδιάστατους πίνακες !! Εκεί δεν υπάρχει εύκολος (συμφέρων) τρόπος να εξαιρεθεί η τιμή που χρησιμοποιήθηκε για την αρχικοποίηση οπότε.. ας ξαναελεγχθεί !! Εννοείται βέβαια πως αν η επεξεργασία αφορά μόνο σε μία γραμμή (ή στήλη) του δισδιάστατου, το σκεπτικό μπορεί να είναι ακριβώς το ίδιο με αυτό που ακολουθείται στο μονοδιάστατο.
Μπράβο ge0_ (πες μας και τ'όνομά σου να μη σε λέμε ge0_ !!)
Ορεξάτο σε βλέπω.. δε δοκιμάζεις και το τσαμπατζή (https://alkisg.mysch.gr/steki/index.php?topic=3687.0) ; 8) ;)
ΤΟ MAX ΘΑ ΕΙΧΕ ΕΠΙΣΗΣ ΠΡΟΒΛΗΜΑ , ΑΝ ΟΛΕΣ ΟΙ ΤΙΜΕΣ ΗΤΑΝ ΜΙΚΡΟΤΕΡΕΣ ΤΟΥ -100
ξερει κανεις να μου προτεινει ενα καλο βοηθημα για αεππ ;