Αποστολέας Θέμα: Χαρακτηριστικά υποπρογραμμάτων  (Αναγνώστηκε 3392 φορές)

EleniK

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 708
Χαρακτηριστικά υποπρογραμμάτων
« στις: 17 Μάρ 2006, 10:48:18 πμ »
Συνάδελφοι θα ήθελα τη γνώμη σας στο παρακάτω θέμα. Δεν ξέρω αν έχει ήδη γίνει συζήτηση παλαιότερα, οπότε απλά πείτε μου το link.

Στα βασικά χαρακτηριστικά των υποπρογραμμάτων λέει ότι 'κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο'.

Δεν μπορεί να γίνει συνάρτηση που να υπολογίζει το εμβαδόν τριγώνου;  Τότε έχουμε 2 εισόδους.
Δεν μπορεί να γίνει διαδικασία που να υπολογίζει το άθροισμα και το γινόμενο 2 αριθμών; 2 είσοδοι, 2 έξοδοι.

Έτσι όπως εξηγείται στο βιβλίο καταλαβαίνω το πώς ενεργοποιείται ή απενεργοποιείται ένα υποπρόγραμμα, αλλά μόνο μία είσοδο και μία έξοδο;
Τι λέτε;

Ευχαριστώ
 
Ελένη Κοκκίνου
Καθηγήτρια Πληροφορικής, ΠΕ19

P.Tsiotakis

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3302
  • agent romanoff you miss me?
    • P.Tsiotakis
Απ: Χαρακτηριστικά υποπρογραμμάτων
« Απάντηση #1 στις: 17 Μάρ 2006, 10:54:13 πμ »

Με τη φράση "μια είσοδος", εννοεί οτι η είσοδος πραγματοποείται σε ΕΝΑ σημείο, δηλαδή στο τμήμα παραμέτρων του υποπρογράμματος. Όμοια και για την έξοδο

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 5531
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Χαρακτηριστικά υποπρογραμμάτων
« Απάντηση #2 στις: 17 Μάρ 2006, 11:10:03 πμ »
Διαφωνώ, νομίζω ότι το "μία είσοδος" και "μία έξοδος" εννοούν το ΑΡΧΗ και το ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ή ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ ή ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ. Δηλαδή όχι είσοδος/έξοδος από το πληκτρολόγιο, την οθόνη ή τη λίστα παραμέτρων, είσοδος/έξοδος από τη ροή εκτέλεσης του προγράμματος.

Αυτό για να είναι πιο κατανοητός ο κώδικας (αντίστοιχα με την αποφυγή της GOTO) και να αποφεύγονται παραδείγματα του τύπου:
Κώδικας: [Επιλογή]
int search(int s, int A[])
{
  ...
  for (i = 0; i < 10; i++) {
    ...
    if (s == A[i])
      return i; //σε αυτό το σημείο προκαλείται έξοδος αλλά δεν είναι "σωστό", αντιστοιχεί με goto
    ...
  }
  ...
  return i; //αυτή είναι η κανονική έξοδος, δε θα έπρεπε να υπάρχει άλλη
}

P.Tsiotakis

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3302
  • agent romanoff you miss me?
    • P.Tsiotakis
Απ: Χαρακτηριστικά υποπρογραμμάτων
« Απάντηση #3 στις: 17 Μάρ 2006, 11:42:20 πμ »

Σε μια διαδικασία άλλωστε, είσοδος μπορεί να πραγματοποιηθεί και με την εντολή ΔΙΑΒΑΣΕ. Άλκη, έχεις δίκιο (θα πρόσθετα την έννοιας της εισόδου ως πολλά δεδομένα μαζί) ...

Πέτρος

  • Επισκέπτης
Απ: Χαρακτηριστικά υποπρογραμμάτων
« Απάντηση #4 στις: 23 Μάρ 2006, 03:47:55 μμ »
το "είσοδος" και  "εξοδος" έχει να κάνει με τη στοίβα χρόνου εκτέλεσης (execution time stack)  (σ219)

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 5531
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Χαρακτηριστικά υποπρογραμμάτων
« Απάντηση #5 στις: 23 Μάρ 2006, 04:03:09 μμ »
Πέτρο αυτό νομίζω δεν έχει νόημα, όπως και να καλέσεις ή να βγεις από μια διαδικασία το τι θα γίνει push ή pop από τη στοίβα θα είναι το ίδιο...

Π.χ. στο παραπάνω παράδειγμα που έδωσα, και η πρώτη και η δεύτερη return τα ίδια πράγματα θα κάνουν pop από τη στοίβα.

Αν κάποιος έκανε goto μέσα σε ή έξω από μια διαδικασία (παρακάμπτοντας έτσι το call stack) τότε στην επόμενη return ο instruction pointer θα πήγαινε σε απροσδιόριστη θέση και θα κολλούσε το πρόγραμμα.

Σωκράτης

  • Επισκέπτης
Απ: Χαρακτηριστικά υποπρογραμμάτων
« Απάντηση #6 στις: 01 Απρ 2006, 10:12:11 πμ »
Καλημέρα σε όλους,

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

soc_h

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 5531
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Χαρακτηριστικά υποπρογραμμάτων
« Απάντηση #7 στις: 01 Απρ 2006, 03:12:23 μμ »
Όχι. Το παράδειγμά σου είναι αντίστοιχο του "όταν καλώ μια διαδικασία από το κυρίως πρόγραμμα, τότε αυτό είναι σημείο εξόδου;"

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

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