Αποτέλεσμα σύγκρισης λέξεων

Ξεκίνησε από turn_on, 03 Ιαν 2023, 02:16:01 ΜΜ

« προηγούμενο - επόμενο »

turn_on

Καλή χρονιά εύχομαι σε όλους και χρόνια σας πολλά!
Η ερώτησή μου είναι:
 
ΈΛΛΗ' > Έ'

Μπορεί κάποιος από εσάς να μου εξηγήσει αν είναι αληθής η ψευδής και γιατί;

Ευχαριστώ πολύ

pgrontas

Καλημέρα και καλή χρονιά!
Είναι αληθής γιατί το 'ΕΛΛΗ' βρίσκεται μετά από το 'Ε' στο λεξικό.

Όπως και στην 'ευθεία των αριθμών', μικρότερος είναι ο αριθμός που συναντάται νωρίτερα, έτσι και στα αλφαριθμητικά μικρότερο είναι αυτό που συναντάται νωρίτερα.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

alkisg

Συνάδελφοι οι συγκρίσεις αλφαριθμητικών έχουν πάρα πολλές ιδιαιτερότητες τις οποίες δεν πρέπει να εξετάζουμε.
Για παράδειγμα, στο https://en.wikipedia.org/wiki/Greek_and_Coptic φαίνεται ότι:
Ά < Ύ < Α < Υ < Ϋ

Αυτό υποθέτω ότι συνέβηκε επειδή τα μέλη της επιτροπή για το Unicode προσπάθησαν να τοποθετήσουν τα "απλά" πεζά/κεφαλαία γράμματα με τη σειρά, ενώ τα τονισμένα/με διαλυτικά κλπ τα έβαλαν αργότερα όπου βρήκαν κενή θέση.

Έτσι και ο Διερμηνευτής και οι υπόλοιπες γλώσσες όπως π.χ. η Python μας λένε ότι Ε > Έ:

Κώδικας: Python
$ python3 -c 'print("Ε" > "Έ")'
True

Αλλά ακόμα και η σειρά των γραμμάτων στο πρότυπο Unicode δεν επαρκεί για τη σύγκρισή τους. Κάθε locale ορίζει collation tables με βάση τα οποία γίνονται τελικά οι συγκρίσεις των αλφαριθμητικών (σόρρυ για τα τις Αγγλικές ορολογίες δεν έχω εύκαιρη τη μετάφρασή τους).
Έτσι ανάλογα το locale υπάρχει περίπτωση ανάμεσα από τα "αγγλικά" A - Z να βρίσκονται πεζά γράμματα!
https://unix.stackexchange.com/questions/227070/why-does-a-z-match-lowercase-letters-in-bash

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

pgrontas

Άλκη σε όσα λες έχεις δίκιο.
Το θέμα όμως είναι ότι ορίζονται οι συγκριτικοί τελεστές μεταξύ αλφαριθμητικών και μέσω της ταξινόμησης έχουν πέσει πολλές φορές στις πανελλήνιες.
Πρέπει λοιπόν να τους εξηγήσεις και για να το κάνεις αυτό αναφέρεις παραδείγματα και μοιραία πέφτεις σε ειδικές περιπτώσεις.
Πώς θα απαντούσες εκεί;
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

alkisg

Παναγιώτη σκεπτόμενος long term (βλ. νέο βιβλίο) και όχι short term (βλ. υπάρχον βιβλίο), θεωρώ ότι:

1) Εάν διαλέξουμε μια επαγγελματική γλώσσα προγραμματισμού όπως η Python θα έχουμε τα γνωστά πλεονεκτήματα, να μπορούμε να κάνουμε ρομποτική και deep learning κλπ κλπ. Όμως θα έχουμε αναγκαστικά και περιπτώσεις όπως αυτή με τα αλφαριθμητικά, όπου θα διαπράττουμε μεγάλο ατόπημα αν διδάξουμε κάτι λάθος (π.χ. αν ισχυριστούμε ότι σε Python `"Ε" < "Έ" == True`).
Οι επιλογές μας εκεί είναι μόνο "ή το διδάσκουμε σωστά ή το αποφεύγουμε".

2) Αν διαλέξουμε μια εκπαιδευτική γλώσσα προγραμματισμού όπως η ΓΛΩΣΣΑ, τότε μπορούμε άνετα να κλειστούμε στη γυάλα μας και να την ορίσουμε και να την διδάξουμε όπως θέλουμε.
Μια νέα ΓΛΩΣΣΑ θα μπορούσε να μην έχει καμία γνωστή ασάφεια, να είναι minimal ώστε να είναι πιο εύκολη η πλήρης εκμάθησή της, και να ορίζει με εκπαιδευτικό και όχι επαγγελματικό τρόπο όλα αυτά τα περίεργα σημεία.
Και εάν υλοποιηθεί εντός browser, θα μπορούσε να έχει και πρόσβαση σε όλο το DOM (ιστοσελίδες, πολυμέσα κλπ) εάν θέλουμε να την επαναχρησιμοποιήσουμε και σε μαθήματα εκτός πανελλαδικών.

Επιστρέφοντας στο short term, θα προτιμούσα όταν υπάρχει "ιστορικό" κακών θεμάτων/ύλης/αποφάσεων κλπ, που έγιναν από άγνοια και όχι από αιτιολογημένο εκπαιδευτικό σχεδιασμό, να τα επισημαίνουμε σθεναρά και αρνητικά ώστε να μην ξαναμπούν ποτέ σε πανελλαδικές εξετάσεις. Να μην ενισχύουμε το "αφού υπάρχει προηγούμενο, τότε ισχύει και μπορεί να ξαναμπεί".



pgrontas

Αλκη ξαναλέω ότι δεν διαφωνώ.

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

Νομίζω ότι στην παρούσα κατάσταση η εξηγηση με το λεξικό είναι ένας καλός συμβιβασμός. Τα πράγματα θα ήταν καλύτερα αν υπήρχε κάπου διευκρίνηση ότι δεν πρόκειται να ζητηθούν ποτέ τόνοι (στην ερώτηση του παρόντος θέματος δεν υπήρχαν), αλλά ούτε αυτό έχουμε καταφέρει. Εκτός αν έχει υπάρξει και μου διαφεύγει.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

alkisg

Αν κάποιος ρωτάει "δεχόμαστε εύρεση μεγίστου με ταξινόμηση;",
συνήθως συμβουλεύουμε "δεν θα κοπούν μονάδες, αλλά μην φτάσετε να το διδάσκετε έτσι".
Με τέτοιες παρατηρήσεις βοηθάμε στη βελτίωση και της διδασκαλίας και της εξέτασης του μαθήματος.
Θεωρώ ότι και στις περίεργες συγκρίσεις αλφαριθμητικών θα πρέπει να χτυπάμε ένα alarm, ώστε πιθανώς να βοηθήσουμε να μην εμφανιστούν σε πανελλαδικές εξετάσεις.

pgrontas

Ξέρεις ποια είναι η διαφορά;
Ότι στην περίπτωση με το μέγιστο και την ταξινόμηση ο μαθητής δεν θα χάσει μονάδες με καμία λύση, απλά θα τον κατευθύνουμε σε ένα πιο σωστό μονοπάτι.
Στην περίπτωση με τα αλφαριθμητικά όμως αν δεν εξηγηθεί σωστά υπάρχει περίπτωση να χαθούν μονάδες.

Anyway, καλά έκανες και το επισήμανες στη συζήτηση στο στέκι. Σε μια συζήτηση όμως στην τάξη θα ηταν πιο επιτακτικο να δοθεί απάντηση.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

Foto

Στα αλφαριθμητικά υπάρχουν δύο ειδών συγκρίσεις. Η binary και η text. Στη πρώτη η σειρά βασίζεται στη τιμή κωδικού κάθε γράμματος. Στη δεύτερη βασίζεται στην καθορισμένη από τη γλώσσα (εδώ Ελληνική) σειρά ταξινόμησης. Αυτή η γλωσσική ταξινόμηση (ως όρος αποδίδει καλύτερα το νόημα) είναι η καλύτερη, αλλά πιο αργή από την δυαδική.
Για τους τόνους υπάρχουν δύο τρόποι γραφής. Ο ένας έχει χαρακτήρες με τόνους και ο άλλος ξεχωρίζει τα γράμματα από τους τόνους. Όλα αυτά τα υποστηρίζει το πρότυπο Unicode.

alkisg

Οι binary συγκρίσεις δεν έχουν γνώση του τύπου δεδομένων ούτε του προτύπου Unicode, οπότε συγκρίνουν bytes, όχι χαρακτήρες. Οι χαρακτήρες μπορεί να είναι από 1 μέχρι 4 bytes, πιθανώς και μεταβλητού μεγέθους, ανάλογα την κωδικοποίηση.
Για παράδειγμα, στην επικρατέστερη UTF-8 κωδικοποίηση που χρησιμοποιείται στο Linux και στο Internet, το a είναι ένα byte (0x61) και το α είναι 2 bytes (0xce, 0xb1). Στο παρακάτω παράδειγμα, αν χρησιμοποιούσαμε binary comparison αντί για string comparison, θα συγκρίναμε 3 bytes, όχι 2 χαρακτήρες:

Κώδικας: Bash
$ printf aα | hexdump -C
61 ce b1        |a..|

Foto

Στα Windows, η μετατροπή γίνεται σε ένα πιο απλό σύστημα με δυο bytes o κάθε χαρακτήρας (εκτός μερικών που το σύστημα UTF16LE για κωδικούς πάνω από το 65535 χρησιμοποιεί τέσσερα bytes, λέγονται Surrogates, δηλαδή είναι τέσσερα bytes που παίρνουν 20 bit  αριθμό με καταναμεμήνα bits σε κάθε μια από τις συνεχόμενες δυάδες).
πχ το 1𐐷2 έχει το 1 και 2 που έχουν κωδικό κάτω από το 65535 και το  𐐷 που έχει το 66615.
Όταν γίνεται σύγκριση χαρακτήρων κατά Text τρόπο το σύστημα κάνει συγκρίσεις εφόσον αναπαράγει τον αριθμό κάθε χαρακτήρα, και αναγνωρίσει σε ποια κλάση ταξινόμησης δουλεύει. Έτσι συγκρίνει δυο χαρακτήρες. Στα αλφαριθμητικά με το που βρεθούν δυο χαρακτήρες διαφορετικοί αρκεί για το σύστημα να γνωρίζει ποια από τις δυο συγκρινόμενες σειρές είναι η μικρότερη (έρχεται πρώτη στην σειρά ταξινόμησης). Η διαφορετικότητα δεν έχει να κάνει μόνο με το νούμερο αλλά και ένα βαθμό που αποδίδεται ως τιμή βάρους. Συνεπώς υπάρχουν διαφορετικοί χαρακτήρες που έχουν όμως το ίδιο βάρος, ή ακόμα και σειρά δυο χαρακτήρων με ίδιο βάρος με μονό χαρακτήρα. Για όλα αυτά υπάρχουν ειδικές ρουτίνες του λειτουργικού που κάνουν αυτόματα τη δουλειά, δεν χρειάζεται ο προγραμματιστής να τις ξαναγράψει.
Στις γλώσσες προγραμματισμού έχουμε μεγάλες διαφορές, γιατί κάποιες όπως η C δεν έχουν ειδικό τύπο για αλφαριθμητικά (έχουν κάτι που δεν έχει σχέση με τα σημερινά αλφαριθμητικά), ενώ άλλες έχουν "δανειζόμενο" τύπο, από κάποια βιβλιοθήκη, που μπορεί να έχει γραφτεί σε άλλη γλώσσα.
Στη Γλώσσα του σχολείου, δεν γίνεται αναφορά στο πώς καταχωρούνται τα γράμματα και δεν υπάρχει τρόπος να πάρουμε ένα υποσύνολο χαρακτήρων από μια μεταβλητή χαρακτήρων. Δεν υπάρχει ακόμα και η πρόσθεση αλφαριθμητικών, εκτός από την φυσική που γίνεται στη κονσόλα, στην εξαγωγή. Η Γράψε δεν είχε οριστεί για να μην αλλάζει γραμμή με κάποιο τρόπο, και το κόλπο με το διάστημα στο τέλος λειτουργεί μεν αλλά δεν καθορίζεται στη Γλώσσα. Οπότε αν το δούμε από σχεδιασμό, το μόνο που θα απασχολήσει τους μαθητές είναι οι συγκρίσεις αλφαριθμητικών, που έχουν περαστεί στο πρόγραμμα ως σταθερές "τιμές" και μπορούν να μεταφέρονται από και πρός μεταβλητές χαρακτήρων και φυσικά πίνακες χαρακτήρων. Οι συγκρίσεις λοιπόν γίνονται ανά "χαρακτήρα", όπου το α και το ά διαφέρουν. Δεν θυμάμαι να υπάρχει πίνακας με τη σειρά χαρακτήρων στη Γλώσσα (άλλη μια έλλειψη). Αν κάνω λάθος να με διορθώσει όποιος ξέρει κάτι άλλο. Χωρίς πίνακα με τη σειρά χαρακτήρων, για τη Γλώσσα, μόνο υποθέσεις κάνουμε. Ίσως να μην χρειάζεται αν όλα τα γράμματα που υποτίθεται χειρίζεται η Γλώσσα είναι κεφαλαία χωρίς τόνους!


alkisg

Στο βιβλίο μαθητή, σελίδα 266 αναφέρεται η κωδικοσελίδα 737 του DOS:
https://en.wikipedia.org/wiki/Code_page_737

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

Καρκαμάνης Γεώργιος

Παράθεση από: turn_on στις 03 Ιαν 2023, 02:16:01 ΜΜΚαλή χρονιά εύχομαι σε όλους και χρόνια σας πολλά!
Η ερώτησή μου είναι:
 
ΈΛΛΗ' > Έ'

Μπορεί κάποιος από εσάς να μου εξηγήσει αν είναι αληθής η ψευδής και γιατί;

Ευχαριστώ πολύ
Σύμφωνα με τη σελίδα 139 του σχολικού βιβλίου  Ανάπτυξη Εφαρμογών: 
"Η σύγκριση αλφαριθμητικών δεδομένων βασίζεται στη σύγκριση χαρακτήρα προς χαρακτήρα σε κάθε θέση μέχρις ότου βρεθεί κάποια διαφορά, για παράδειγμα η λέξη 'κακός' θεωρείται μικρότερη από τη λέξη 'καλός' αφού το γράμμα κ προηγείται του γράμματος λ."
Στην  σύγκριση ΈΛΛΗ' > Έ' αρχικά γίνεται η σύγκριση του Ε με το Ε και επειδή είναι ίσα γίνεται η σύγκριση του Λ με το τίποτα και επειδή το Λ είναι μεγαλύτερο από το τίποτα η συγκεκριμένη σύγκριση παράγει αποτέλεσμα Αληθής.

alkisg

Γιώργο καλά τα λες, εγώ δεν είδα καλά την αρχική ερώτηση και νόμισα ότι σύγκρινε το Έλλη με το Ε, το ένα με τόνο και το άλλο χωρίς. Όλες οι απαντήσεις μου ήταν σχετικά με τους τόνους.

Ή για να το κάνουμε πιο ευανάγνωστο, αν αλλάξουμε την ερώτηση σε:
"συγκρίνετε τις λέξεις καλός και κάλος",
εκεί υπάρχει δυσκολία στο να απαντήσουμε ποια είναι μεγαλύτερη.