Γενικό Λύκειο > Τμηματικός προγραμματισμός

Σωστό-Λάθος που διχάζει

<< < (5/5)

Αθανάσιος Πέρδος:

--- Παράθεση από: noname στις 08 Μαΐ 2015, 11:33:25 μμ ---Για να διασκεδάσουμε και λίγο μέσα στην απογοήτευση του νέου συστήματος θέτω προτεινόμενο θέμα πανελληνίων:

Δίνεται η διαδικασία:


--- Κώδικας: ---ΔΙΑΔΙΚΑΣΙΑ Δ (Α, Β, Γ)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Α, Β, Γ, Κ, Λ
ΑΡΧΗ
  ΔΙΑΒΑΣΕ Κ, Λ
  ΑΝ Α>Β ΤΟΤΕ
    Γ <- Γ + Κ
  ΑΛΛΙΩΣ
    Γ <- Γ + Λ
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

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

1. Πόσες εισόδους έχει η παραπάνω διαδικασία;
2. Πόσες εξόδους έχει η παραπάνω διαδικασία;

 ::)


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

Έτσι όπως τίθεται η ερώτηση εγώ θα απαντούσα: Μία είσοδο και μία έξοδο όπως και όλα τα υποπρογράμματα.

Εκτός αν εννοείς πόσες εντολές εισόδου και εξόδου έχει η διαδικασία;

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

Sergio:
Καλό είναι οι λέξεις είσοδος / έξοδος να χρησιμοποιούνται με προσοχή γιατί όντως συχνά μπερδεύουν τους μαθητές.  Άλλο τιμή εισόδου (input) και άλλο σημείο εισόδου (entry point).  Αντίστοιχα, άλλο τιμή εξόδου (output) και άλλο σημείο εξόδου (exit point).  Δυστυχώς στο βιβλίο δε γίνεται εμφανώς αυτή η διάκριση και οι μαθητές μπερδεύονται.

bugman:
Σε παλιά BASIC μπορούσε να γράψει κανείς μια φορά το End Sub σαν να φαίνεται το τέλος της ρουτίνας, αλλά υπήρχε το Exit Sub για να μπορεί κανείς να βγαίνει από όπου ήθελε μέσα από την ρουτίνα. Πάντα όμως η ρουτίνα επέστρεφε στην αμέσως επόμενη εντολή από το σημείο που κλήθηκε.
Δείτε όμως τι μπορούσε να γίνει σε μια παλιά και διαδεδομένη γλώσσα όπως η Applesoft Basic:

Μπορείτε να βάλετε τον κώδικα εδώ και να δείτε τι κάνει!
http://www.calormen.com/jsbasic/

Με απλά λόγια: Καλούμε την ρουτίνα στη θέση 500 και μετά από έλεγχο μιας συνθήκης αποφασίζουμε να πετάξουμε με την Pop την διεύθυνση επιστροφής και με ένα GOTO επιστρέφουμε σε άλλο σημείο, και όχι σε αυτό που θα έπρεπε με την Return.

Έτσι όταν λέμε ότι έχουμε μια έξοδο στα υποπρογράμματα, το λέμε για να δείξουμε ότι κάτι τέτοιο όπως το παράδειγμα δεν ισχύει για τα υποπρογράμματα!

Γραμμένο σε Applesoft Basic:
10 PRINT "TEST"
20 GOSUB 500
30 PRINT "OK2"
40 PRINT "OK3"
50 END
500 PRINT "OK"
510 IF 10>3 THEN POP: GOTO 40
600 RETURN

thaaanos:
όλα αυτά αναφέρονται στον τμηματικό προγραμματισμό και την δομή του

τα παλιά τα χρόνια για να τρέξεις κάποιο υποπρόγραμμα έκανες ένα GOTO το οποίο σε πήγαινε κάπου στο τέλος όπου σεντονιου που υπήρχε ο κώδικας του υποπρογράμματος, και προφανώς με το goto μπορούσες να πάς οπουδήποτε πχ μπορούσες να προσπεράσεις ή όχι αρχικοποίηση μεταβλητών και άλλα ωραία. Δείτε για παράδειγμα το Duff's Device για κάτι ανάλογο σε βρόγχο.

Τώρα για την έξοδο από διαδικασία τα πράγματα είναι πιο θολά αφού πολλές γλώσσες υποστηρίζουν πρόωρη έξοδο (πχ return statement), όπως και στο βρόγχο με το break. Και ακόμα πιο θολό αν έχουμε exceptions στην γλώσσα.

σε κάθε περίπτωση σε ότι μας αφορά τα υποπρογράμματα μπαίνουν στο ΑΡΧΗ και βγαίνουν στο ΤΕΛΟΣ

Πλοήγηση

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

[*] Προηγούμενη σελίδα

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