Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Αλγοριθμική και Προγραμματισμός => Διερμηνευτής της ΓΛΩΣΣΑΣ => Μήνυμα ξεκίνησε από: otinanai στις 14 Νοέ 2008, 09:47:07 πμ

Τίτλος: ΔΙΑΒΑΣΕ σε λογικες μεταβλητες
Αποστολή από: otinanai στις 14 Νοέ 2008, 09:47:07 πμ
Γειά σας,

Ήθελα να ρωτήσω γιατί δεν επιτρέπεται το διάβασμα λογικής μεταβλητής στον διερμηνευτή. Απο που αντλείται αυτή η πληροφορία;
Το λέει κάπου στο βιβλίο;

Ευχαριστώ.
Τίτλος: Απ: ΔΙΑΒΑΣΕ σε λογικες μεταβλητες
Αποστολή από: Παναγιώτης Τσιωτάκης στις 14 Νοέ 2008, 12:08:28 μμ
Δεν το λέει κάπου το βιβλίο απ΄όσο θυμάμαι).
Πάντως και γω το αποφεύγω μιας και δεν χρησιμοποιούνται για είσοδο δεδομένων οι μεταβλητές αυτές, αλλά σε ελέγχους.

Μπορεί να υπάρχει μια λογική μεταβλητή στην εντολή εισόδου Δεδομένα (αλλά όχι στον διερμηνευτή)
Τίτλος: Απ: ΔΙΑΒΑΣΕ σε λογικες μεταβλητες
Αποστολή από: alkisg στις 14 Νοέ 2008, 03:16:32 μμ
Η εντολή Δεδομένα αντιστοιχεί με παράμετρους εισόδου σε υποπρογράμματα.
Και στις δύο αυτές περιπτώσεις επιτρέπεται να χρησιμοποιηθούν λογικές μεταβλητές. Καλά ως εδώ, πιστεύω ότι θα συμφωνούμε όλοι.

Στη Διάβασε, είτε σε ψευδογλώσσα είτε σε ΓΛΩΣΣΑ (αλλά και σε πολλές γλώσσες προγραμματισμού), προσωπική μου γνώμη είναι ότι δεν επιτρέπεται. Ο λόγος γι' αυτό είναι ο εξής:

Τι θα πρέπει να γράψει ο χρήστης για να θεωρηθεί ότι έδωσε "ΑΛΗΘΗΣ";

Ας πούμε ότι ο χρήστης θα πρέπει να δώσει "ΑΛΗΘΗΣ" ή "ΨΕΥΔΗΣ" αντίστοιχα.
=> πρώτη αυθαιρεσία.

Έστω ότι το δεχόμαστε αυτό. Αν όμως ο χρήστης δώσει "Αληθής" ή "Αλήθεια" ή "Α" ή "1" ή "ΝΑΙ" ή "ΟΚ"; Τι θα θεωρηθεί τότε ότι έδωσε;
=> ότι και να απαντήσουμε, δεύτερη αυθαιρεσία.

Η αλήθεια είναι ότι πέρασε πολύς καιρός από τότε που έψαχνα το βιβλίο για το συγκεκριμένο θέμα, και δεν θυμάμαι αν είχα βρει κάποιο σχετικό σχόλιο, ή κάποιο παράδειγμα όπου απέφευγε να διαβάσει λογική μεταβλητή και χρησιμοποιούσε προσωρινούς ακέραιους ή χαρακτήρες (https://alkisg.mysch.gr/ΓΛΩΣΣΑ/ΔΙΑΒΑΣΕ/) για να τη διαβάσει, αν ρώτησα κάποιον από τους συγγραφείς, ή αν δεν βρήκα τίποτα απολύτως οπότε ακολούθησα την πεπατημένη των γλωσσών προγραμματισμού.
Πιστεύω όμως ότι δεν ενδείκνυται η χρήση του εκτός κι αν βρεθεί παράγραφος του βιβλίου που να το υποστηρίζει καθώς και να ξεδιαλύνει όλα τα σχετικά προβλήματα. :)
Τίτλος: Απ: ΔΙΑΒΑΣΕ σε λογικες μεταβλητες
Αποστολή από: evry στις 14 Νοέ 2008, 10:10:16 μμ

 Νομίζω ότι σε ψευδογλώσσα το λογικό θα ήταν να δεχτούμε ότι ο χρήστης μπορεί να δώσει Αληθής ή ΑΛΗΘΗΣ για λογική μεταβλητή από τη στιγμή που στο βιβλίο ορίζεται ξεκάθαρα ότι μια λογική μεταβλητή παίρνει αυτές τις 2 τιμές. Φυσικά σε τεχνικό επίπεδο τα πράγματα μπερδεύονται.   Τώρα αν ο χρήστης δώσει '1' ή 'α' ή οτιδήποτε άλλο από αληθής ή ψευδής σε μια λογική μεταβλητή αυτό ισοδυναμεί με το να δώσει ένα χαρακτήρα σε μια ακέραια μεταβλητή που είναι λάθος κατά την είσοδο των δεδομένων.
   Σίγουρα πάντως δεν έχει νόημα να διαβάζει κάποιος μια λογική μεταβλητή.
   
Τίτλος: Απ: ΔΙΑΒΑΣΕ σε λογικες μεταβλητες
Αποστολή από: nikolasmer στις 01 Μάρ 2014, 07:35:42 μμ
...δεν βρήκα τίποτα απολύτως οπότε ακολούθησα την πεπατημένη των γλωσσών προγραμματισμού.
Πιστεύω όμως ότι δεν ενδείκνυται η χρήση του εκτός κι αν βρεθεί παράγραφος του βιβλίου που να το υποστηρίζει καθώς και να ξεδιαλύνει όλα τα σχετικά προβλήματα. :)

Τί ισχύει στις άλλες γλώσσες προγραμματισμού;

Και μια μεγάλη χαζαμάρα...
Να υποθέσω πως και το παρακάτω πρόγραμμα δεν κάνει έλεγχο εγκυρότητας της τιμής εισόδου. Ή (γενικότερα) δεν μπορούμε να κάνουμε ποτέ τέτοιο έλεγχο διότι πάντα η συνθήκη είναι Αληθής...
Κώδικας: [Επιλογή]
ΠΡΟΓΡΑΜΜΑ τεστ
ΜΕΤΑΒΛΗΤΕΣ
  ΛΟΓΙΚΕΣ: χ
ΑΡΧΗ
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΔΙΑΒΑΣΕ χ
  ΜΕΧΡΙΣ_ΟΤΟΥ χ Η ΟΧΙ χ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

Οπότε ο μοναδικός τύπος στη ΓΛΩΣΣΑ στον οποίο δεν μπορώ να κάνω έλεγχο εγκυρότητας είναι ο Λογικός;
Τίτλος: Απ: ΔΙΑΒΑΣΕ σε λογικες μεταβλητες
Αποστολή από: apoldem στις 02 Μάρ 2014, 02:07:07 πμ
Η είσοδος δεδομένων από το πληκτρολόγιο είναι πάντα αλφαριθμητικό. Είναι δουλειά του προγράμματος να το μετατρέψει στον κατάλληλο τύπο. Δεν θυμάμαι αν πολύ παλιά οι γλώσσες επέτρεπαν εισαγωγή ακεραίου ή πραγματικού, αλλά ακόμα και να το επέτρεπαν απλώς κάνανε την μετατροπή εσωτερικά για ευκολία προς τον προγραμματιστή. Πάντως, λογική μεταβλητή απευθείας από το πληκτρολόγιο δεν θυμάμαι να ίσχυε ποτέ (εξασθενεί και η μνήμη βέβαια από τα γεράματα). :)
Τίτλος: Απ: ΔΙΑΒΑΣΕ σε λογικες μεταβλητες
Αποστολή από: itt στις 02 Μάρ 2014, 02:28:42 πμ
Τί ισχύει στις άλλες γλώσσες προγραμματισμού;

Στην C++ ας πούμε, μπορείς να κάνεις τον έλεγχο εγκυρότητας που θες. Ο τελεστής << για τύπο bool διαβάζει είτε 0 ή 1 οπότε μπορείς να ελέγχεις το state του stream μετά την είσοδο. Κάτι του στυλ:

Κώδικας: [Επιλογή]
bool in;
while(true) {
        if(!(std::cin >> in)) {
            std::cerr << "Wrong format\n";
            std::cin.clear(); //Καθαρίζει τα error flags
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n'); //Ξεφορτώνεται τους bad χαρακτήρες
        } else {
           /* do stuff */
          /* or break maybe */
        }
 

Αν και δεν μπορώ να σκεφτώ κάποιο use case αυτή τη στιγμή.