Αποστολέας Θέμα: Αφού είναι ακέραιος άρτιος γιατί δεν "τρέχει"  (Αναγνώστηκε 3058 φορές)

nikolasmer

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 571
  • There can be only one...may it be AEPP.
Γράφω το παρακάτω

Αρχή_επανάληψης
  Διάβασε x
Μέχρις_ότου x = Α_Μ(x) και x ≥ 0
Όσο x ≠ 1 επανάλαβε
  Αν x mod 2 = 0 τότε
    x ← x/ 2
  αλλιώς
    x ← 3*x + 1
  Τέλος_αν
  Εμφάνισε x
Τέλος_επανάληψης

Γιατί δεν τρέχει στο διερμηνευτή!!;;  :-\
Μερεντίτης Νικόλαος
Πληροφορικός

Νίκος Αδαμόπουλος

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2843
  • Πύργος Ηλείας
Απ: Αφού είναι ακέραιος άρτιος γιατί δεν "τρέχει"
« Απάντηση #1 στις: 21 Ιαν 2013, 09:40:07 μμ »
Πιστεύεις ότι ο διερμηνευτής έχει θεωρήσει το x σαν ακέραιου τύπου;

Η συνθήκη  x = Α_Μ(x)  ελέγχει αν το x περιέχει αριθμό με ή χωρίς σημαντικά δεκαδικά ψηφία. Υποψιάζομαι ότι επειδή κάτι τέτοιο δεν έχει νόημα να γίνεται σε μεταβλητές ακέραιου τύπου, και επειδή στον διερμηνευτή δεν δηλώνουμε εμείς τον τύπο τους, ίσως αυτός θεωρεί πλέον την x ως πραγματικού τύπου. Επομένως, στη συνέχεια δεν θα μπορεί να εκτελεστεί το  x mod 2.

Ποιον διερμηνευτή έχεις και τι ακριβώς σου εμφανίζει;

nikolasmer

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 571
  • There can be only one...may it be AEPP.
Απ: Αφού είναι ακέραιος άρτιος γιατί δεν "τρέχει"
« Απάντηση #2 στις: 21 Ιαν 2013, 09:49:51 μμ »
Του Άλκη το Διερμηνευτή.

Έβαλα div και τρέχει μια χαρά


  Αν x mod 2 = 0 τότε
    x ← x div 2
  αλλιώς
    x ← 3*x + 1
  Τέλος_αν

Νίκο τι εννοείς παραπάνω;
Μερεντίτης Νικόλαος
Πληροφορικός

gthal

  • Ομάδα διαγωνισμάτων 2017
  • *
  • Μηνύματα: 948
Απ: Αφού είναι ακέραιος άρτιος γιατί δεν "τρέχει"
« Απάντηση #3 στις: 21 Ιαν 2013, 09:54:18 μμ »
πιθανότατα γιατί το x/2 είναι πραγματικού τύπου και επιχειρείς να το εκχωρήσεις στον x πού ο διερμηνευτής έχει θεωρήσει (μάλλονα) ως ακέραιο για να συμμετέχει στις div mod
γιαυτό και το x div 2 το δέχεται
Φιλικά,
Γιώργος Θαλασσινός

nikolasmer

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 571
  • There can be only one...may it be AEPP.
Απ: Αφού είναι ακέραιος άρτιος γιατί δεν "τρέχει"
« Απάντηση #4 στις: 21 Ιαν 2013, 09:56:28 μμ »
Μα όταν θα φτάσει στο σημείο της διαίρεσης ο έλεγχος , το χ θα είναι άρτιος και ακέραιος.
Μερεντίτης Νικόλαος
Πληροφορικός

nikolasmer

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 571
  • There can be only one...may it be AEPP.
Απ: Αφού είναι ακέραιος άρτιος γιατί δεν "τρέχει"
« Απάντηση #5 στις: 21 Ιαν 2013, 09:58:17 μμ »
Και έτσι παίζει

Αν x mod 2 = 0 τότε
    x ← Α_Μ (x/ 2)
  αλλιώς
    x ← 3*x + 1
Τέλος_αν
Μερεντίτης Νικόλαος
Πληροφορικός

Νίκος Αδαμόπουλος

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2843
  • Πύργος Ηλείας
Απ: Αφού είναι ακέραιος άρτιος γιατί δεν "τρέχει"
« Απάντηση #6 στις: 21 Ιαν 2013, 09:59:39 μμ »
Θέλω να πω πως στον διερμηνευτή ο τύπος μιας μεταβλητής αποφασίζεται αυτόματα και (ενδέχεται να) κλειδώνει στη συνέχεια.
Έτσι αν έχεις

χ<-12.0

ο διερμηνευτής θεωρεί ότι η χ είναι πραγματικού τύπου, οπότε στη συνέχεια το

τ <- χ mod 2

δεν μπορεί να εκτελεστεί.

Βέβαια όλα αυτά εξαρτώνται από την κατασκευή του διερμηνευτή, όπου εκεί μπορεί να έχουν προβλεφθεί διάφορες περιπτώσεις και "κόλπα"... Οπότε στη συγκεκριμένη περίπτωση, ο πιο αρμόδιος να απαντήσει θα ήταν ο Άλκης;)

Επίσης, ενδιαφέρον θα είχε να δούμε την αντίστοιχη συμπεριφορά του διερμηνευτή του Στάθη...

nikolasmer

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 571
  • There can be only one...may it be AEPP.
Απ: Αφού είναι ακέραιος άρτιος γιατί δεν "τρέχει"
« Απάντηση #7 στις: 21 Ιαν 2013, 10:04:28 μμ »
Τόσο καιρό που το έλεγα και το ξανάλεγα με τον αρχικό τρόπο που παραθέτω είναι λάθος ή πρέπει να επισημάνω τη διαφορά μόνο για τα προγράμματα και όχι για τους αλγορίθμους που η κατάσταση είναι λίγο πιο φλού;
Μερεντίτης Νικόλαος
Πληροφορικός

nikolasmer

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 571
  • There can be only one...may it be AEPP.
Απ: Αφού είναι ακέραιος άρτιος γιατί δεν "τρέχει"
« Απάντηση #8 στις: 21 Ιαν 2013, 10:07:31 μμ »
Συγνώμη που ήμουν άτροπος παραπάνω. :-[
Του κυρίου Άλκη Γεωργόπουλου τον Διερμηνευτή χρησιμοποιώ.
Μερεντίτης Νικόλαος
Πληροφορικός

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 6103
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Αφού είναι ακέραιος άρτιος γιατί δεν "τρέχει"
« Απάντηση #9 στις: 22 Ιαν 2013, 07:20:02 πμ »
Όπως τα λένε παραπάνω οι συνάδελφοι είναι. Δηλαδή, μόλις ο Διερμηνευτής δει κάποια εντολή από την οποία μπορεί να συμπεράνει τον τύπο μιας μεταβλητής, στη συνέχεια αρνείται να δεχτεί εντολές που θεωρούν ότι είναι διαφορετικός τύπος:

Κώδικας: Ψευδογλώσσα
  1. Αλγόριθμος ΤύποιΔεδομένων
  2. x 4
  3. x x/2
  4. x x mod 2
  5. Τέλος ΤύποιΔεδομένων

Αυτό λοιπόν βγάζει το παρακάτω μήνυμα λάθους στη γραμμή x ← x mod 2:
Παράθεση
Δεν είναι δυνατή η πράξη «mod» με τα δοθέντα ορίσματα.
«x»: πραγματική μεταβλητή
«2»: ακέραια σταθερά

Το x/2 ο Διερμηνευτής το θεωρεί πραγματική έκφραση, ανεξαρτήτως από το αν το x τύχει κατά την εκτέλεση να είναι ζυγός ή όχι,
οπότε και το x είναι πραγματική μεταβλητή,
αλλά στη συνέχεια το x mod 2 υπαγορεύει ότι το x έπρεπε να είναι ακέραιο, εξ ου και το μήνυμα λάθους.

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

Κατά τη γνώμη μου ναι λάθος είναι, αλλά είναι στις γκρι περιοχές όπου τα λάθη είναι ...σχετικά. Για παράδειγμα, το pseudoglossa.gr του Στάθη το τρέχει χωρίς πρόβλημα. Όμως, το pseudoglossa το παρακάτω το θεωρεί προβληματικό μόνο κατά τη δεύτερη επανάληψη:

Κώδικας: Ψευδογλώσσα
  1. Αλγόριθμος ΤύποιΔεδομένων
  2. Για ι από 4 μέχρι 5
  3.   Εμφάνισε ι
  4.   x ι/2
  5.   x x mod 2
  6. Τέλος_επανάληψης
  7. Τέλος ΤύποιΔεδομένων

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

Οπότε εγώ θα πρότεινα να αποφύγεις τέτοια παραδείγματα ώστε να μη χρειαστεί να μπεις σε λεπτομέρειες για τους τύπους δεδομένων πριν ακόμα φτάσεις στη ΓΛΩΣΣΑ.

nikolasmer

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 571
  • There can be only one...may it be AEPP.
Απ: Αφού είναι ακέραιος άρτιος γιατί δεν "τρέχει"
« Απάντηση #10 στις: 22 Ιαν 2013, 11:54:03 πμ »
Προβληματισμός τέλος.
Ευχαριστώ πολύ.
Μερεντίτης Νικόλαος
Πληροφορικός