ΔΙΑΔΙΚΑΣΙΑ ΧΩΡΙΣ ΠΑΡΑΜΕΤΡΟΥΣ

Ξεκίνησε από Αλεξόπουλος Ανδρέας, 08 Απρ 2008, 12:01:00 ΠΜ

« προηγούμενο - επόμενο »

Αλεξόπουλος Ανδρέας

Καλησπέρα,
δεν ξέρω αν έχει συζητηθεί ποτέ κάτι παρόμοιο, αλλά με μια γρήγορη αναζήτηση δε βρήκα κάτι σχετικό. Η απορία λοιπόν είναι η εξής: μπορούμε να φτιάξουμε μια διαδικασία η οποία δεν έχει καμμία παράμετρο; Αν ναι, πώς την δηλώνουμε και πώς την καλούμε;
Ένα απλό παράδειγμα μιας τέτοιας διαδικασίας θα μπορούσε να είναι ένα υποπρόγραμμα το οποίο διαβάζει δυο μεταβλητές, τις προσθέτει και εμφανίζει το αποτέλεσμα. Επομένως στην συγκεκριμένη περίπτωση δεν χρειάζεται να περνάει κάποια τιμή από ή προς το πρόγραμμα.
Το ερώτημά μου είναι κυρίως στο πώς θα την δηλώσουμε, πχ θα ήταν σωστό το ακόλουθο;
ΔΙΑΔΙΚΑΣΙΑ πρόσθεση()
ΜΕΤΑΒΛΗΤΕΣ
........

και να την καλούσαμε με το ακόλουθο
ΚΑΛΕΣΕ πρόσθεση()


Δεν θυμάμαι να έχω δει κάποιο ανάλογο παράδειγμα στο βιβλίο.

Ευχαριστώ,
Ανδρέας

ΥΓ: δεν με ενδιαφέρει να σχολιάσουμε το γιατί να κάνουμε κάτι τέτοιο, απλώς αν μπορούμε να το κάνουμε.

petrosp13

Όλα όσα λες, όπως και τα συντακτικά που αναφέρεις είναι σωστά
Ένα υποπρόγραμμα οφείλει να είναι ανεξάρτητο από τα άλλα και κάποιες φορές δεν χρειάζεται καν να επικοινωνεί με αυτά ή το κύριο πρόγραμμα
Θα είναι ένα υποπρόγραμμα που κάνει ολοκληρωμένα μια αυτόνομη δουλειά
Όπως "Υποπρόγραμμα που διαβάζει αριθμούς μέχρι να δοθεί το μηδέν και εμφανίζει το άθροισμα τους".
Φυσικά, υλοποιείται μόνο με διαδικασία
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

alkisg

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

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

Αλεξόπουλος Ανδρέας

Οκ, ευχαριστώ για τις απαντήσεις. Ούτε κι εγώ πιστεύω ότι θα ζητηθεί κάτι τέτοιο, απλώς είχα απορία το τι γίνεται. Κι εμένα το βασικό μου πρόβλημα ήταν για το αν πρέπει ή όχι να μπουν παρενθέσεις. Καμμιά φορά μπορεί να ρωτήσει κανένας μαθητής, οπότε ήθελα να ξέρω αν υπήρχε κάποια "τεκμηριωμένη" σωστή απάντηση να δώσω.
Παρεπιπτώντως, εντολώς αστήριχτα κι εγώ, θα τους έλεγα να βάλουν παρενθέσεις στα δεξιά τόσο στην δήλωση όσο και στην κλήση!

alkisg

Με την ευκαιρία ξαναέριξα μια ματιά στο βιβλίο.

1) Τα προγράμματα δεν έχουν παρένθεση. Αυτό δεν είναι σοβαρό επιχείρημα, αλλά αν π.χ. λέγαμε ότι ισχύει το συντακτικό της C, τότε θα είχαμε int main(), δηλαδή ΠΡΟΓΡΑΜΜΑ Δοκιμή().

2) Σελίδα 220,
ΔΙΑΔΙΚΑΣΙΑ Πρώτη
...
ΔΙΑΔΙΚΑΣΙΑ Δεύτερη
...

Κι αυτά πάλι είναι απλά ένδειξη, αφού πρόκειται για παράδειγμα σκελετού του προγράμματος και όχι κανονικό πρόγραμμα.

3) Σελίδα 239, εκτός ύλης, ορισμός διαδικασίας - γεγονότος,
ΔΙΑΔΙΚΑΣΙΑ Αντικείμενο_Γεγονός
...
Εντολές κώδικα
...
ΤΕΛΟΣ ΔΙΑΔΙΚΑΣΙΑΣ

Μια από τα ίδια, απλές ενδείξεις, όχι επιχειρήματα.

Αλεξόπουλος Ανδρέας

Βέβαια Άλκη, μερικές σελίδες παρακάτω στο κεφάλαιο 11 (συγκεκριμένα σελ 246), για την δήλωση διαδικασίας, έχει το εξής
ΔΙΑΔΙΚΑΣΙΑ ΠλήτροΕντολήςΒήμα1_Κλικ()
    Ετικέτα1.Ορατό = Αληθής
    Ετικέτα2.Ορατό = Ψευδής 
    Ετικέτα3.Ορατό = Ψευδής 
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

δηλαδή, χρεισημοποιεί παρενθέσεις, ώστε κι αν δεν έχει ορίσματα.

Όχι ότι έχει ιδιαίτερη σημασία όπως λες κι εσύ, αλλά μιας και του έριξα κι εγώ τώρα μια ματία, είπα να το αναφέρω  ;)

andreas_p

Γεια σας.

Σε παλαιότερη συζήτηση είχαμε καταλήξει στο παρακάτω σχήμα :


στο Κύριο

....
ΑΡΧΗ
  ΚΑΛΕΣΕ   Δ1()

ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΔΙΑΔΙΚΑΣΙΑ  Δ1()
...
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Ανδρέας

alkisg

Παράθεση από: Αλεξόπουλος Ανδρέας στις 08 Απρ 2008, 11:15:50 ΠΜ
ΔΙΑΔΙΚΑΣΙΑ ΠλήτροΕντολήςΒήμα1_Κλικ()
    Ετικέτα1.Ορατό = Αληθής
    Ετικέτα2.Ορατό = Ψευδής 
    Ετικέτα3.Ορατό = Ψευδής 
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ


Σ' αυτό το σημείο είχα την εξής απορία: πώς θα καταφέρει να δει τη μεταβλητή Ετικέτα1 αφού δεν υπάρχουν καθολικές μεταβλητές;  :o
Και προτίμησα να το αγνοήσω και να πάρω σαν σωστό τον ορισμό που είχε πιο πριν.
...καλά που δεν είναι εντός ύλης!  ;D  ;D  ;D

meteo_xampos

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

ΠΡΟΓΡΑΜΜΑ ΤΑΔΕ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: α, β, γ
ΑΡΧΗ
  ΔΙΑΒΑΣΕ α, β
  γ <- ΥΠΟ(α, β)
  ΚΑΛΕΣΕ ΔΙΑΔ
  ΓΡΑΨΕ α, β, γ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΔΙΑΔΙΚΑΣΙΑ ΔΙΑΔ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: x, y, z
ΑΡΧΗ
  ΔΙΑΒΑΣΕ x, y
  z <- (x + y) DIV 2
  ΓΡΑΨΕ x, y, z
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

ΣΥΝΑΡΤΗΣΗ ΥΠΟ(m, n): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: m, n
ΑΡΧΗ
  ΥΠΟ <- (m + n)^2
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

EleniK

Μια διαδικασία που απλά εμφανίζει ένα μενού επιλογών, επίσης δεν έχει όρισμα. Το Διάβασε της επιλογής μπορεί να είνα μέσα στο πρόγραμμα καθώς και η τυχόν επανάληψη.
Ελένη Κοκκίνου
Καθηγήτρια Πληροφορικής, ΠΕ19

P.Tsiotakis

Εγώ βάζω κενές παρενθέσεις, θεωρώ πιο συνεπές προς τον μαθητή οπτικά να βλέπει:

ΔΙΑΔΙΚΑΣΙΑ Μενού()

και μόνο το κύριο πρόγραμμα να μην έχει παρενθέσεις (αφού δεν έχει και παραμέτρους)

andreas_p

Παράθεση από: meteo_xampos στις 04 Μαρ 2009, 09:47:33 ΠΜ

ΔΙΑΔΙΚΑΣΙΑ ΔΙΑΔ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: x, y, z
ΑΡΧΗ
  ΔΙΑΒΑΣΕ x, y
  z <- (x + y) DIV 2
  ΓΡΑΨΕ x, y, z
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

ΔΙΑΔΙΚΑΣΙΑ ΔΙΑΔ()
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: x, y, z
ΑΡΧΗ
  ΔΙΑΒΑΣΕ x, y
  z <- (x + y) DIV 2
  ΓΡΑΨΕ x, y, z
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ


meteo_xampos

Ανδρέα προσπάθησα να το τρέξω τη διαδικασία με (), αλλά η ΓΛΩΣΣΑ μου έβγαζε λάθος.
Μου έβγαζε μήνυμα ότι περίμενε όνομα παραμέτρου μέσα στις παρενθέσεις.

andreas_p

Στην επόμενη έκδοση του Διερμηνευτή της ΓΛΩΣΣΑΣ, ο Άλκης, μπορεί να το τροποποιήσει.

meteo_xampos

Πάντως και η PASCAL λειτουργεί έτσι όπως λειτουργεί η ΓΛΩΣΣΑ σε διαδικασίες
χωρίς παραμέτρους. Να ένα πρόγραμμα σε PASCAL το οποίο χρησιμοποιεί
διαδικασίες χωρίς παραμέτρους...

program tade;
var
a,b, apot:real;
sumbolo: char;

procedure eisodos;
begin
   writeln('dwse duo arithmous');
   readln(a,b);
end;

procedure menoy;
begin
writeln('1. dwse + gia pros8esh');
writeln('2. dwse - gia afairesh');
writeln('1. dwse * gia pollaplasiasmo');
writeln('1. dwse / gia diairesh');
end;

procedure eidos_pra3hs;
begin   
   repeat
      writeln('dwse to sumbolo ths pra3hs'); 
      readln(sumbolo);
   until ((sumbolo='+') OR (sumbolo='-') OR (sumbolo='/') OR (sumbolo='*'))
end;

procedure pra3h;
begin
   if sumbolo='+' then
      apot:=a+b
   else if sumbolo='-' then
      apot:=a-b
   else if sumbolo='/' then
    begin
      if b<>0 then
      apot:=a/b
     else
       writeln('den orizetai h pra3h')
     end
   else
      apot:=a*b;
   writeln( a:3,sumbolo:3, b:3, '=', apot:3);
end;

begin
eisodos;
menoy;
eidos_pra3hs;
pra3h;
end.