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

Γενικό Λύκειο => Γ΄ Λυκείου => Τμηματικός προγραμματισμός => Μήνυμα ξεκίνησε από: EleniK στις 17 Μαρ 2006, 10:48:18 ΠΜ

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

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

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

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

Ευχαριστώ
Τίτλος: Απ: Χαρακτηριστικά υποπρογραμμάτων
Αποστολή από: P.Tsiotakis στις 17 Μαρ 2006, 10:54:13 ΠΜ

Με τη φράση "μια είσοδος", εννοεί οτι η είσοδος πραγματοποείται σε ΕΝΑ σημείο, δηλαδή στο τμήμα παραμέτρων του υποπρογράμματος. Όμοια και για την έξοδο
Τίτλος: Απ: Χαρακτηριστικά υποπρογραμμάτων
Αποστολή από: alkisg στις 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 στις 17 Μαρ 2006, 11:42:20 ΠΜ

Σε μια διαδικασία άλλωστε, είσοδος μπορεί να πραγματοποιηθεί και με την εντολή ΔΙΑΒΑΣΕ. Άλκη, έχεις δίκιο (θα πρόσθετα την έννοιας της εισόδου ως πολλά δεδομένα μαζί) ...
Τίτλος: Απ: Χαρακτηριστικά υποπρογραμμάτων
Αποστολή από: Πέτρος στις 23 Μαρ 2006, 03:47:55 ΜΜ
το "είσοδος" και  "εξοδος" έχει να κάνει με τη στοίβα χρόνου εκτέλεσης (execution time stack)  (σ219)
Τίτλος: Απ: Χαρακτηριστικά υποπρογραμμάτων
Αποστολή από: alkisg στις 23 Μαρ 2006, 04:03:09 ΜΜ
Πέτρο αυτό νομίζω δεν έχει νόημα, όπως και να καλέσεις ή να βγεις από μια διαδικασία το τι θα γίνει push ή pop από τη στοίβα θα είναι το ίδιο...

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

Αν κάποιος έκανε goto μέσα σε ή έξω από μια διαδικασία (παρακάμπτοντας έτσι το call stack) τότε στην επόμενη return ο instruction pointer θα πήγαινε σε απροσδιόριστη θέση και θα κολλούσε το πρόγραμμα.
Τίτλος: Απ: Χαρακτηριστικά υποπρογραμμάτων
Αποστολή από: Σωκράτης στις 01 Απρ 2006, 10:12:11 ΠΜ
Καλημέρα σε όλους,

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

soc_h
Τίτλος: Απ: Χαρακτηριστικά υποπρογραμμάτων
Αποστολή από: alkisg στις 01 Απρ 2006, 03:12:23 ΜΜ
Όχι. Το παράδειγμά σου είναι αντίστοιχο του "όταν καλώ μια διαδικασία από το κυρίως πρόγραμμα, τότε αυτό είναι σημείο εξόδου;"

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

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