Αποστολέας Θέμα: ΔΙΑΒΑΣΕ σε λογικες μεταβλητες  (Αναγνώστηκε 4275 φορές)

otinanai

  • Νέος
  • *
  • Μηνύματα: 1
ΔΙΑΒΑΣΕ σε λογικες μεταβλητες
« στις: 14 Νοέ 2008, 09:47:07 πμ »
Γειά σας,

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

Ευχαριστώ.

P.Tsiotakis

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3079
  • Dracarys
    • Panagiotis Tsiotakis
Απ: ΔΙΑΒΑΣΕ σε λογικες μεταβλητες
« Απάντηση #1 στις: 14 Νοέ 2008, 12:08:28 μμ »
Δεν το λέει κάπου το βιβλίο απ΄όσο θυμάμαι).
Πάντως και γω το αποφεύγω μιας και δεν χρησιμοποιούνται για είσοδο δεδομένων οι μεταβλητές αυτές, αλλά σε ελέγχους.

Μπορεί να υπάρχει μια λογική μεταβλητή στην εντολή εισόδου Δεδομένα (αλλά όχι στον διερμηνευτή)

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 4289
    • alkisg@im.sch.gr
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: ΔΙΑΒΑΣΕ σε λογικες μεταβλητες
« Απάντηση #2 στις: 14 Νοέ 2008, 03:16:32 μμ »
Η εντολή Δεδομένα αντιστοιχεί με παράμετρους εισόδου σε υποπρογράμματα.
Και στις δύο αυτές περιπτώσεις επιτρέπεται να χρησιμοποιηθούν λογικές μεταβλητές. Καλά ως εδώ, πιστεύω ότι θα συμφωνούμε όλοι.

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

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

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

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

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

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2910
  • to Iterate is human to Recurse divine
Απ: ΔΙΑΒΑΣΕ σε λογικες μεταβλητες
« Απάντηση #3 στις: 14 Νοέ 2008, 10:10:16 μμ »

 Νομίζω ότι σε ψευδογλώσσα το λογικό θα ήταν να δεχτούμε ότι ο χρήστης μπορεί να δώσει Αληθής ή ΑΛΗΘΗΣ για λογική μεταβλητή από τη στιγμή που στο βιβλίο ορίζεται ξεκάθαρα ότι μια λογική μεταβλητή παίρνει αυτές τις 2 τιμές. Φυσικά σε τεχνικό επίπεδο τα πράγματα μπερδεύονται.   Τώρα αν ο χρήστης δώσει '1' ή 'α' ή οτιδήποτε άλλο από αληθής ή ψευδής σε μια λογική μεταβλητή αυτό ισοδυναμεί με το να δώσει ένα χαρακτήρα σε μια ακέραια μεταβλητή που είναι λάθος κατά την είσοδο των δεδομένων.
   Σίγουρα πάντως δεν έχει νόημα να διαβάζει κάποιος μια λογική μεταβλητή.
   
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

nikolasmer

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 476
  • There can be only one...may it be AEPP.
Απ: ΔΙΑΒΑΣΕ σε λογικες μεταβλητες
« Απάντηση #4 στις: 01 Μάρ 2014, 07:35:42 μμ »
...δεν βρήκα τίποτα απολύτως οπότε ακολούθησα την πεπατημένη των γλωσσών προγραμματισμού.
Πιστεύω όμως ότι δεν ενδείκνυται η χρήση του εκτός κι αν βρεθεί παράγραφος του βιβλίου που να το υποστηρίζει καθώς και να ξεδιαλύνει όλα τα σχετικά προβλήματα. :)

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

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

Οπότε ο μοναδικός τύπος στη ΓΛΩΣΣΑ στον οποίο δεν μπορώ να κάνω έλεγχο εγκυρότητας είναι ο Λογικός;
Απ' τα τσακάλια δεν γλυτώνεις μ'ευχές ή παρακάλια
(Κ. Βάρναλης)

Μερεντίτης Νικόλαος
Καθηγητής Πληροφορικής - Φροντιστής

apoldem

  • Βετεράνος
  • ****
  • Μηνύματα: 86
Απ: ΔΙΑΒΑΣΕ σε λογικες μεταβλητες
« Απάντηση #5 στις: 02 Μάρ 2014, 02:07:07 πμ »
Η είσοδος δεδομένων από το πληκτρολόγιο είναι πάντα αλφαριθμητικό. Είναι δουλειά του προγράμματος να το μετατρέψει στον κατάλληλο τύπο. Δεν θυμάμαι αν πολύ παλιά οι γλώσσες επέτρεπαν εισαγωγή ακεραίου ή πραγματικού, αλλά ακόμα και να το επέτρεπαν απλώς κάνανε την μετατροπή εσωτερικά για ευκολία προς τον προγραμματιστή. Πάντως, λογική μεταβλητή απευθείας από το πληκτρολόγιο δεν θυμάμαι να ίσχυε ποτέ (εξασθενεί και η μνήμη βέβαια από τα γεράματα). :)

itt

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 412
  • Real stupidity beats ΑΙ any time
Απ: ΔΙΑΒΑΣΕ σε λογικες μεταβλητες
« Απάντηση #6 στις: 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 αυτή τη στιγμή.
« Τελευταία τροποποίηση: 02 Μάρ 2014, 07:44:15 μμ από itt »