Γενικό Λύκειο > Ψευδογλώσσα

Τύποι δεδομένων στο pseudoglossa.gr

(1/4) > >>

alkisg:
Στάθη, δοκίμασα το παρακάτω:


--- Κώδικας: Ψευδογλώσσα ---Αλγόριθμος Συγκρίσειςα ← 'Κείμενο'Διάβασε αΔιάβασε βΕμφάνισε α > βΤέλος Συγκρίσεις
Και η οθόνη εισόδου/εξόδου πήγε ως εξής:

--- Κώδικας: ---10
9
Αληθής

--- Τέλος κώδικα ---

Γιατί το 10 είναι μεγαλύτερο από το 9; Δεν θα έπρεπε να θεωρηθούν ως αλφαριθμητικά και τα δύο;

sstergou:
Το θέμα αυτό με είχε προβληματίσει πάρα πολύ.

Τότε είχα αποφασίσει ότι κατά την σύγκριση δύο τιμών πρέπει να γίνεται πρώτα έλεγχος για το αν αυτές οι τιμές ανάγονται σωστά σε αριθμούς. Αν ναι τότε γίνεται αριθμητική σύγκριση. Μου φάνηκε ότι με αυτό τον τρόπο εξασφάλιζα καλύτερη συμπεριφορά στην πλειοψηφία των προβλημάτων του ΑΕΠΠ αλλά γενικά είναι κάτι που πάνω στο οποίο θα ήθελα να ακούσω και άλλες γνώμες..

Τώρα βέβαια που βλέπω το παράδειγμά σου μάλλον θα βάλω έναν έξτρα έλεγχο όπου αν υπάρχει σαφής ανάθεση αλφαριθμητικού τύπου τότε να γίνεται και αλφαριθμητική σύγκριση.

Λάμπρος Μπουκουβάλας:
χαίρε (ξανά) Ευστάθιε τιτανομεγιστοτεράστιε!

Gnirut:

--- Παράθεση από: sstergou στις 26 Ιουν 2011, 04:57:29 μμ ---Το θέμα αυτό με είχε προβληματίσει πάρα πολύ.

Τότε είχα αποφασίσει ότι κατά την σύγκριση δύο τιμών πρέπει να γίνεται πρώτα έλεγχος για το αν αυτές οι τιμές ανάγονται σωστά σε αριθμούς. Αν ναι τότε γίνεται αριθμητική σύγκριση. Μου φάνηκε ότι με αυτό τον τρόπο εξασφάλιζα καλύτερη συμπεριφορά στην πλειοψηφία των προβλημάτων του ΑΕΠΠ αλλά γενικά είναι κάτι που πάνω στο οποίο θα ήθελα να ακούσω και άλλες γνώμες..

Τώρα βέβαια που βλέπω το παράδειγμά σου μάλλον θα βάλω έναν έξτρα έλεγχο όπου αν υπάρχει σαφής ανάθεση αλφαριθμητικού τύπου τότε να γίνεται και αλφαριθμητική σύγκριση.

--- Τέλος παράθεσης ---

Προσωπική μου άποψη είναι ότι θα ήταν ορθότερο να βγάζει runtime error αν κάποιος προσπαθήσει να εκτελέσει σύγκριση ανάμεσα σε τιμές μεταβλητών με ανόμοιους (ή μη "παρόμοιους") τύπους παρά να μπλέξει το πράγμα με ελέγχους τύπων πριν την χρήση της σύγκρισης. Π.χ. τι θα έπρεπε να γίνεται εδώ:


--- Κώδικας: ---...
(κάπου) Διάβασε a (← 'qwerty')
...
(κάπου αλλού) Διαβασε a (← 10)
...
b ← 9
Εμφάνισε a>b
--- Τέλος κώδικα ---

Παρατήρηση: εαν γράψεις τέτοιου είδους κώδικα άλλες φορές το παιρνει, άλλες φορές χτυπάει λάθος στο δεύτερο Διάβασε, άλλες φορές χτυπάει και στο πρώτο εαν έχεις εκτελέσει ξανά το πρόγραμμα. Γενικά εμφανίζει διαφορετική εκτέλεση σε διαδοχικά Run. Δεν ξέρω αν φταίει κάτι στον browser μου ή αγνοώ κάτι εγώ.

alkisg:
@Gnirut, σ' αυτήν την περίπτωση ο συντακτικός έλεγχος θα έπρεπε να είχε "αποφασίσει" ότι η μεταβλητή a είναι αριθμητική λόγω της σύγκρισης a > b. Έτσι, στην "Διάβασε a (← 'qwerty')" θα έπρεπε να χτυπήσει λάθος εκτέλεσης, ότι δεν μπορεί να ανατεθεί η τιμή 'qwerty' στην αριθμητική μεταβλητή a.

Για τη διαφορετική συμπεριφορά σε διαδοχικές εκτελέσεις, μάλλον ο Στάθης "θυμάται" τους περιορισμούς στους τύπους δεδομένων από τις προηγούμενες εκτελέσεις - αυτοί μάλλον θα ήταν καλύτερα να γίνονται reset στην αρχή κάθε εκτέλεσης (μόνο οι περιορισμοί που προκύπτουν κατά το runtime, όχι κατά το συντακτικό έλεγχο).

Πλοήγηση

[0] Λίστα μηνυμάτων

[#] Επόμενη σελίδα

Μετάβαση στην πλήρη έκδοση