Αρχική ΑΕΠΠ - Δομές Δεδομένων Λειτουργικά Συστήματα Δίκτυα Υπολογιστών ΙΙ Βάσεις Δεδομένων Παιδαγωγικά - Διδακτική

Βασικές Έννοιες

Μεταβλητή - Έκφραση Δομή Ακολουθίας Δομή Επιλογής Δομή Επανάληψης

Αναπαράσταση Αλγορίθμων

Διάγραμμα Ροής

Πίνακας Τιμών

Πίνακες

Μονοδιάστατοι Δισδιάστατοι Πολυδιάστατοι Αναζήτηση Ταξινόμηση Στοίβα Ουρά

Υποπρογράμματα

Συναρτήσεις Διαδικασίες Σχετικά με τις παράμετρους

Δυναμικές Δομές

Λίστες Δέντρα Γράφοι

 Ιστορικό Πρόσφατες αλλαγές Εκτύπωση Αναζήτηση

Ιστορικό: DataStructures.Parameters-Theory

Απόκρυψη μικρών αλλαγών - Αλλαγές περιεχομένου

13-02-2008 (18:54) από Aris -
Πρόσθεση σειρών 1-105:
! Πραγματικές και Τυπικές Παράμετροι

Οι μεταβλητές που υπάρχουν στη λίστα των παραμέτρων σε μία εντολή κλήσης διαδικασίας ή συνάρτησης ονομάζονται '''πραγματικές''' παράμετροι.

(:source lang=glossa linenum -getcode highlight='6, 8, 12, 23':) [@
ΠΡΟΓΡΑΜΜΑ ΠΑΡΑΔΕΙΓΜΑ
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ: Α, Β, Γ, ΜΙΚΡΗ, ΜΕΓΑΛΗ
ΑΡΧΗ
ΔΙΑΒΑΣΕ Α, Β, Γ
ΜΙΚΡΗ <- ΕΛΑΧΙΣΤΟ(Α, Β)
ΓΡΑΨΕ "ΜΙΚΡΟΤΕΡΗ ΜΕΤΑΞΥ ΤΩΝ ", Α, Β, " ΕΙΝΑΙ Η ΤΙΜΗ ", ΜΙΚΡΗ
ΚΑΛΕΣΕ ΜΙΝ_ΜΑΧ(Α, Β, Γ, ΜΙΚΡΗ, ΜΕΓΑΛΗ)
ΓΡΑΨΕ "ΜΕΤΑΞΥ ΤΩΝ ΤΙΜΩΝ ", Α, Β, Γ, " Η ΜΙΚΡΟΤΕΡΗ ΕΙΝΑΙ Η ", ΜΙΚΡΗ, " ΚΑΙ Η ΜΕΓΑΛΥΤΕΡΗ ", ΜΕΓΑΛΗ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΣΥΝΑΡΤΗΣΗ ΕΛΑΧΙΣΤΟ(Χ, Υ): ΠΡΑΓΜΑΤΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ: Χ, Υ
ΑΡΧΗ
ΑΝ Χ < Υ ΤΟΤΕ
ΕΛΑΧΙΣΤΟ <- Χ
ΑΛΛΙΩΣ
ΕΛΑΧΙΣΤΟ <- Υ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

ΔΙΑΔΙΚΑΣΙΑ ΜΙΝ_ΜΑΧ(Χ, Υ, Ζ, ΜΙΝ, ΜΑΧ)
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ: Χ, Υ, Ζ, ΜΙΝ, ΜΑΧ
ΑΡΧΗ
ΜΙΝ <- Χ
ΜΑΧ <- Υ
ΑΝ Υ < ΜΙΝ ΤΟΤΕ
ΜΙΝ <- Υ
ΤΕΛΟΣ_ΑΝ
ΑΝ Ζ < ΜΙΝ ΤΟΤΕ
ΜΙΝ <- Ζ
ΤΕΛΟΣ_ΑΝ
ΑΝ Υ > ΜΑΧ ΤΟΤΕ
ΜΑΧ <- Υ
ΤΕΛΟΣ_ΑΝ
ΑΝ Ζ > ΜΙΝ ΤΟΤΕ
ΜΑΧ <- Ζ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
@]

Στο παραπάνω παράδειγμα '''πραγματικές''' είναι οι μεταβλητές @@Α, Β, Γ, ΜΙΚΡΗ@@ και @@ΜΕΓΑΛΗ@@ που δίνονται ως παράμετροι στη συνάρτηση (γραμμή 6) και στη διαδικασία (γραμμή 8).

Οι μεταβλητές που βρίσκονται στη λίστα παραμέτρων της δήλωσης μίας συνάρτησης ή μιας διαδικασίας, ονομάζονται '''τυπικές''' παράμετροι. Στη γραμμή 12 βλέπουμε τις τυπικές παράμετρους @@Χ, Υ@@ της συνάρτησης και στη γραμμή 23 της διαδικασίας.

Προσέξτε εδώ ότι οι μεταβλητές @@Χ, Υ@@ υπάρχουν και στη συνάρτηση και στη διαδικασία. Δεν έχουν όμως καμία σχέση μεταξύ τους. Αυτές οι μεταβλητές είναι γνωστές μόνο στο πρόγραμμα ή το υποπρόγραμμα στο οποίο δηλώνονται. Οι μεταβλητές αυτές ονομάζονται '''τοπικές'''. Στη ΓΛΩΣΣΑ, όπως περιγράφεται στο βιβλίο της ΑΕΠΠ της Γ' Γενικού Λυκείου συναντάμε μόνο τοπικές μεταβλητές. Σε άλλες γλώσσες προγραμματισμού υπάρχουν και οι ''καθολικές'' μεταβλητές.

! Κλήση κατ' Αναφορά

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

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

%example%Παράδειγμα: Η διαδικασία [[DataStructures.Procedure-Theory#MIN_MAX | ΜΙΝ_ΜΑΧ]]

(:source lang=glossa linenum tabwidth=2 :) [@
ΔΙΑΔΙΚΑΣΙΑ ΜΙΝ_ΜΑΧ(Χ, Υ, Ζ, ΜΙΝ, ΜΑΧ)
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ: Χ, Υ, Ζ, ΜΙΝ, ΜΑΧ
ΑΡΧΗ
ΜΙΝ <- Χ
ΜΑΧ <- Υ
ΑΝ Υ < ΜΙΝ ΤΟΤΕ
ΜΙΝ <- Υ
ΤΕΛΟΣ_ΑΝ
ΑΝ Ζ < ΜΙΝ ΤΟΤΕ
ΜΙΝ <- Ζ
ΤΕΛΟΣ_ΑΝ
ΑΝ Υ > ΜΑΧ ΤΟΤΕ
ΜΑΧ <- Υ
ΤΕΛΟΣ_ΑΝ
ΑΝ Ζ > ΜΙΝ ΤΟΤΕ
ΜΑΧ <- Ζ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
@]

Η κλήση της διαδικασίας είναι:
->@@ΚΑΛΕΣΕ ΜΙΝ_ΜΑΧ(Α, Β, Γ, ΜΙΚΡΗ, ΜΕΓΑΛΗ)@@

Οι μεταβλητές @@Χ, Υ, Ζ, ΜΙΝ@@ και @@MAX@@ θα έχουν αντίγραφο των τιμών των μεταβλητών @@Α, Β, Γ, ΜΙΚΡΗ@@ και @@ΜΕΓΑΛΗ@@, αντίστοιχα, κατά τη στιγμή της κλήσης. Οποιαδήποτε αλλαγη γίνει στις μεταβλητές αυτές, όπως στις γραμμές 5, 6, 8, 14 και 17 δε θα έχουν επίδραση στις τιμές των μεταβλητών @@Α, Β, Γ, ΜΙΚΡΗ@@ και @@ΜΕΓΑΛΗ@@. Άρα, μετά την κλήση, οι μεταβλητές @@ΜΙΚΡΗ@@ και @@ΜΕΓΑΛΗ@@ θα έχουν την τιμή που είχαν και πριν την κλήση.

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

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

! Κλήση κατ' Αναφορά

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

Αυτή είναι η περίπτωση που συναντάμε στη ΓΛΩΣΣΑ.

! Παρατηρήσεις

* Στις συναρτήσεις και στις διαδασίες πολλές φορές χρησιμοποιείται ο όρος ''παράμετρος'' αντί της μεταβλητής για τις μεταβλητές οι οποίες είναι στη λίστα παραμέτρων και στην εντολή κλήσης του υποπρογράμματος.
* Στο βιβλίο της ΑΕΠΠ δε γίνεται λόγος για το πέρασμα των παραμέτρων σύμφωνα με τις διευκρινήσεις που έγιναν παραπάνω. Ο τρόπος, όμως, με τον οποίο διαχειρίζεται τις τυπικές παραμέτρους στα παραδείγματα, δηλαδή, η μεταταβολή των τυπικών περνάει στις πραγματικές, η κλήση των διαδικασιών γίνεται κατ' αναφορά.
* Επίσης, στο βιβλίο δεν γίνεται λόγος για την κλήση στις συναρτήσεις. Δηλαδή, αν γίνει μεταβολή σε τυπική παράμετρο της συνάρτησης αν αυτή θα περάσει στην αντίστοιχη πραγματική παράμετρο.
* Επειδή όλα τα παραδείγματα και οι λύσεις των ασκήσεων δίνονται σε ΓΛΩΣΣΑ, όπου έχουμε υποπρόγραμμα το πέρασμα των παραμέτρων θεωρούμε ότι γίνεται κατ' αναφορά.

Τελευταία ενημέρωση: 13-02-2008 (18:54)

Copyright 2008 - Άρης Φεργάδης