Panelinies - Texnologiki - Programatismos.. aporia..

Giorgos Keramidas keramida at ceid.upatras.gr
Tue May 30 18:36:42 EEST 2006


On 2006-05-30 16:45, Tasos Varoudis <varoudis at daemons.gr> wrote:
> Pedia mpori na ine mesimeri kai na exo kapsi kitara ston
> egefalo, alla mou fenete oti kati den pai kala sto thema 1 ,
> Gama...
>
> An kapios ide ta themata kai exi vgali kapio simperasma as me
> diafotisi...
>
> Stin diadikasia "Diad1" oi metavlites pou xrisimopiounte den
> epistrefonte pisto sto "main" (dld px den exi kapio idos
> return(...))
>
> Eno stin apantisi pou exoun dosoi kapioa frontistiria episima
> iponoite oti h metavlites girisan piso.. (afto to function sta
> dika mou panta matia exi tin litourgia tis aplis ektiposis ton
> metavliton afou kani kapes praksis)

Η εν λόγω συνάρτηση είναι από το θέμα Γ, των Πανελλαδικών
Εξετάσεων 2006, για το μάθημα "Ανάπτυξη Εφαρμογών σε
Προγραμματιστικό Περιβάλλον" της Τεχνολογικής Κατεύθυνσης.

Το κείμενο του θέματος είναι[1]:
[1] http://assets.in.gr/dGenesis/assets/Content200/Photo/30631_b.jpg

|   Γ. Δίνεται το παρακάτω πρόγραμμα και υποπρογράμματα:
|
|          ΠΡΟΓΡΑΜΜΑ Κύριο
|
|          ΜΕΤΑΒΛΗΤΕΣ
|              ΑΚΕΡΑΙΕΣ: Α, Β, Γ
|
|          ΑΡΧΗ
|              ΔΙΑΒΑΣΕ Α, Β, Γ
|              ΚΑΛΕΣΕ Διαδ1(Α, Β, Γ)
|              ΓΡΑΨΕ Α, Β, Γ
|          ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
|
|          ΔΙΑΔΙΚΑΣΙΑ Διαδ1(Β, Α, Γ)
|          ΜΕΤΑΒΛΗΤΕΣ
|              ΑΚΕΡΑΙΕΣ: Α, Β, Γ
|          ΑΡΧΗ
|              Α <- A + 2
|              Β <- Β - 3
|              Γ <- A + B
|              ΓΡΑΨΕ Α, Β, Γ
|          ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
|
|   Τι θα εμφανιστεί κατά την εκτέλεση του προγράμματος, αν ως
|   τιμές εισόδου δοθούν οι αριθμοί 5, 7, 10;

Το θέμα δεν καθορίζει αν τα ορίσματα μιας συνάρτησης περνούν στη
συνάρτηση "by value" ή "by reference", οπότε δεν υπάρχει 100%
σωστή απάντηση, εκτός κι αν κάποιος γράψει 2 απαντήσεις -- κατά
περίπτωση.

Περίπτωση 1.  Ορίσματα "by value"

Στην περίπτωση που τα ορίσματα μιας συνάρτησης περνούν στη
συνάρτηση "by value", όλη η προσοχή σου πρέπει να στραφεί προς
την παγίδα της αντιμετάθεσης των Α και Β στον ορισμό της
συνάρτησης:

        ΔΙΑΔΙΚΑΣΙΑ Διαδ1(Β, Α, Γ) ...

  (α) Αυτό σημαίνει πως στο σώμα της συνάρτησης οι τιμές αρχικά
      είναι:

        Β = 5, Α = 7, Γ = 10

  (β) Και οι πράξεις που ακολουθούν τις θέτουν σε αυτές που
      φαίνονται με '#' σχόλιο δεξιά από κάθε γραμμή:

        Α <- A + 2              # Α = 9, Β = 5, Γ = 10
        Β <- Β - 3              # Α = 9, Β = 2, Γ = 10
        Γ <- A + B              # Α = 9, Β = 2, Γ = 11

  (γ) Ετσι οι τιμές που τυπώνονται είναι:

        9, 2, 11                # Από την Διαδ1

  (δ) Ύστερα όμως η Διαδ1() επιστρέφει, το προσωρινό 'binding'
      των ονομάτων με τις τιμές χάνεται και τυπώνονται οι
      'εξωτερικές' τιμές του κυρίως προγράμματος:

        5, 7, 10                # Από το κυρίως πρόγραμμα

   Αρα σε αυτή την περίπτωση, ανακεφαλαιώνοντας, το πρόγραμμα θα
   τυπώσει συνολικά:

        9, 2, 11                # Από την Διαδ1
        5, 7, 10                # Από το κυρίως πρόγραμμα

Περίπτωση 2. Ορίσματα Συνάρτησης "by reference"

Αυτό δεν είναι συνηθισμένο σε Algol-like γλώσσες όπως ο
ψευδοκώδικας του προγράμματος, οπότε είναι το πιο απίθανο από τα
δύο, αλλά για χάρη πληρότητας πρέπει να πούμε ότι τα βήματα που
εκτελούνται είναι *ΑΚΡΙΒΩΣ* τα ίδια, με μόνη διαφορά ότι όταν
επιστρέφει η Διαδ1() μετά το βήμα (1.γ) έχει επηρεάσει τις
μεταβλητές του κυρίως προγράμματος και αυτές _ΚΡΑΤΟΥΝ_ τις τιμές
που έχουν στο τέλος της Διαδ1().  Οπότε το συνολικό πρόγραμμα
τυπώνει:

        9, 2, 11                # Από την Διαδ1
        9, 2, 11                # Από το κυρίως πρόγραμμα

Συμπέρασμα:

Δυστυχώς δεν αποσαφηνίζει το θέμα ποιά από τις δύο περιπτώσεις
ισχύει, αλλά είναι μάλλον αρκετά ασφαλές, δεδομένου του Algol-
και Pascal-like στυλ που είναι γραμμένος ο ψευδοκώδικας να
υποθέσουμε ότι αυτός που έγραψε τα θέματα θεώρησε αυτονόητο ότι
μόνο "by value" πέρνουν τιμές τα ορίσματα μιας συνάρτησης.

Μάλλον τα φροντιστήρια που πόνταραν σε "by reference" κάνουν
λάθος και οι λύσεις που παρουσιάζουν είναι εντελώς άχρηστες.
Δυστυχώς, η ασάφεια είναι μάλλον χαρακτηριστικό που δε θα
εξαλειφθεί ποτέ από τα θέματα των Πανελληνίων όμως :(

> PS: den dino eksetasis aplos epese to mati mou sta themata
> giati me rotise enas filos.

Και γιατί αγχώθηκες ακριβώς;

- Γιώργος




More information about the Linux-greek-users mailing list