ΕΡΩΤΗΣΕΙΣ ΣΤΑ ΥΠΟΠΡΟΓΑΡΑΜΜΑΤΑ

Ξεκίνησε από landreou, 29 Ιουν 2013, 08:42:38 ΜΜ

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

landreou

Γεια σας φιλοι του ΣτΠ

Λέει μια άσκηση απλή :

Να γράψετε υπορπόγραμμα που να διαβάζει το πλήθος αλλα και τα στοιχεία ενός μονοδιάστατου πίνακα ( μέγιστο πλήθος στοιχείων 1000 ) με περιεχόμενο ακέραιους αριθμούς .

Σκέφτομαι εγώ

ΔΙΑΔΙΚΑΣΙΑ ΑΣΚΗΣΗ

ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : ΠΙΝΑΚΑΣ[1000] ,ΠΛΗΘΟΣ, Ι
ΑΡΧΗ
        ΔΙΑΒΑΣΕ ΠΛΗΘΟΣ

        ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ ΠΛΗΘΟΣ
                        ΔΙΑΒΑΣΕ ΠΙΝΑΚΑΣ[Ι]
        ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

ΟΙ ΕΡΩΤΗΣΕΙΣ :

[1] ΠΟΙΕΣ ΠΑΡΑΜΕΤΡΟΥΣ ΘΑ ΒΑΛΟΥΜΕ ΕΝΤΟΣ ΠΑΡΕΝΘΕΣΕΩΝ ;

Στην αρχή σκέφτηκα καμία ( απλά δηλαδή να εκτελείται αυτό το τμημα προγράμματος )

Μετά σκέφτηκα μία που θα είναι ο πίνακας που έχει δηλωθεί απο το κυρίως πρόγραμμα και έχει όνομα ας υποθέσουμε ΠΙΝΑΚΑΣ

[2] Η λύση μου δίνει σαν όρισμα και το πλήθος των στοιχείων δηλαδή κατι τέτοιο :
        ΔΙΑΔΙΚΑΣΙΑ ΑΣΚΗΣΗ (ΠΙΝΑΚΑΣ,ΠΛΗΘΟΣ) οπότε η ερώτηση είναι

    ΠΟΙΑ Η ΔΙΑΦΟΡΑ ΑΝ ΕΙΝΑΙ ΕΝΤΟΣ Η ΕΚΤΟΣ ΠΑΡΕΝΘΕΣΗΣ ΜΙΑ ΠΑΡΑΜΕΤΡΟΣ ;
     Αν δηλαδή δηλώναμε το ΠΛΗΘΟΣ εντός της διαδικασίας που χάναμε ;

[3]    Εγώ προσωπικά μπερδεύτηκα με την εκφώνηση που λέει "να διαβάζει το πλήθος αλλα και τα στοιχεία ενός μονοδιάστατου πίνακα" και δε
        λέει "να δέχεται "
        Πως τελικά καταλαβαίνουμε ποτε και τι βάζουμε εντος των υποπρογραμμάτων σαν ορίσματα;




ΕΧΩ ΚΑΝΕΙ ΚΑΙ ΕΡΩΤΗΜΑ ΣΤΗ ΕΝΟΤΗΤΑ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ - ΔΙΑΔΙΚΑΣΙΕΣ ΟΠΟΙΟΣ ΜΠΟΡΕΙ ΑΣ ΑΠΑΝΤΗΣΕΙ Η ΝΑ ΔΕΙ ΚΑΙ ΕΚΕΙ
Σας ευχαριστώ όλους εκ προοιμίου


Νίκος Αδαμόπουλος

Παράθεση από: landreou στις 29 Ιουν 2013, 08:42:38 ΜΜ
[1] ΠΟΙΕΣ ΠΑΡΑΜΕΤΡΟΥΣ ΘΑ ΒΑΛΟΥΜΕ ΕΝΤΟΣ ΠΑΡΕΝΘΕΣΕΩΝ ;


ΠΙΝΑΚΑΣ, ΠΛΗΘΟΣ

Παράθεση από: landreou στις 29 Ιουν 2013, 08:42:38 ΜΜ
[2] ΠΟΙΑ Η ΔΙΑΦΟΡΑ ΑΝ ΕΙΝΑΙ ΕΝΤΟΣ Η ΕΚΤΟΣ ΠΑΡΕΝΘΕΣΗΣ ΜΙΑ ΠΑΡΑΜΕΤΡΟΣ ;

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

Παράθεση από: landreou στις 29 Ιουν 2013, 08:42:38 ΜΜ
[3]           Πως τελικά καταλαβαίνουμε ποτε και τι βάζουμε εντος των υποπρογραμμάτων σαν ορίσματα;

Ανάλογα με τις τιμές που θέλουμε να περνάμε από και προς το υποπρόγραμμα...

landreou

Εχουμε το εξής τμήμα κώδικα :


ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 10

      ΑΘΡΟΙΣΜΑ[Ι] <- 0

      ΓΙΑ Κ ΑΠΟ 1 ΜΕΧΡΙ 30

            ΑΘΡΟΙΣΜΑ[Ι] <- ΑΘΡΟΙΣΜΑ[Ι] + ΠΙΝΑΚΑΣ[Ι,Κ]

      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Αν το παραπάνω τμήμα θέλουμε να το περάσουμε σε διαδίκασία ή συνάρτηση τότε ΠΟΤΕ:

[1] Περνάμε και τους δύο βρόχους ;

[2] Περνάμε μόνο τον εσωτερικό βρόχο ;

[3] Περνάμε μόνο τη γραμμή που γίνεται η άθροιση ;

μεταξύ Αρχή και Τέλος υποπρογράμματος ( εννοώ σαν εντολές )

ΓΙΑ ΔΙΑΔΙΚΑΣΙΑ ΤΟ ΦΤΙΑΧΝΩ ΩΣ ΕΞΗΣ :
ΔΙΑΔΙΚΑΣΙΑ ΔΙΑΔ(ΠΙΝΑΚΑΣ,ΑΘΡΟΙΣΜΑ)
ΜΕΤΑΒΛΗΤΕΣ
         ΠΡΑΓΜΑΤΙΚΕΣ : Ι,Κ,ΠΙΝΑΚΑΣ[10,30],ΑΘΡΟΙΣΜΑ[10]
ΑΡΧΗ
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 10

      ΑΘΡΟΙΣΜΑ[Ι] <- 0

      ΓΙΑ Κ ΑΠΟ 1 ΜΕΧΡΙ 30

            ΑΘΡΟΙΣΜΑ[Ι] <- ΑΘΡΟΙΣΜΑ[Ι] + ΠΙΝΑΚΑΣ[Ι,Κ]

      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
(Η ΠΑΡΑΠΑΝΩ ΔΙΑΔΙΚΑΣΙΑ ΣΕ ΠΟΙΕΣ ΠΕΡΙΠΤΩΣΕΙΣ ΘΑ ΕΙΧΕ ΜΟΝΟ ΤΟΝ ΕΣΩΤΕΡΙΚΟ ΒΡΟΧΟ Η ΜΟΝΟ ΤΗ ΓΡΑΜΜΗ ΑΘΡΟΙΣΗΣ ΣΑΝ ΚΥΡΙΟ ΣΩΜΑ ;)
(ΑΝ ΥΠΑΡΧΟΥΝ ΤΕΤΟΙΕΣ ΠΕΡΙΠΤΩΣΕΙΣ ΤΟΤΕ ΤΙ ΒΑΖΟΥΜΕ ΣΑΝ ΟΡΙΣΜΑΤΑ ΕΝΤΟΣ ΠΑΡΕΝΘΕΣΕΩΝ ; )

ΓΙΑ ΣΥΝΑΡΤΗΣΗ , επειδή υπολογίζει και επιστρεφει μία τιμή κάθε φορά , είδα μία λύση που είναι η εξής :

ΣΥΝΑΡΤΗΣΗ ΣΥΝ(Ι,ΠΙΝΑΚΑΣ):ΠΡΑΓΜΑΤΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ : Κ,ΠΙΝΑΚΑΣ[10,30],ΑΘΡΟΙΣΜΑ
ΑΡΧΗ

        ΑΘΡΟΙΣΜΑ[Ι] <- 0     

        ΓΙΑ Κ ΑΠΟ 1 ΜΕΧΡΙ 30

              ΑΘΡΟΙΣΜΑ[Ι] <- ΑΘΡΟΙΣΜΑ[Ι] + ΠΙΝΑΚΑΣ[Ι,Κ] ! ΕΜΒΟΛΙΜΗ ΕΡΩΤΗΣΗ : ΕΔΩ ΘΑ ΜΠΟΡΟΥΣΑΜΕ ΝΑ ΠΟΥΜΕ ΣΥΝ <- ΣΥΝ + ΠΙΝΑΚΑΣ[Ι,Κ] ;

        ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

       ΣΥΝ <- ΑΘΡΟΙΣΜΑ[Ι]

ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Εντος του κυριου προγράμματος η παραπάνω συνάρτηση καλείται ως εξής :

ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 10

        ΑΘ <- ΣΥΝ(Ι,Π)

ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Αποστολάτος Άκης

1. Και τους δυο βροχους τους περνάς στο υποπρόγραμμα όταν θέλεις αυτό να επιστρέφει το άθροισμα κάθε γραμμής του αρχικού πίνακα. Η κλήση σου από το πρόγραμμα
    θα'ναι:
   
        ........
        ΚΑΛΕΣΕ ΑΘΡ(αρχ_πιν, τελ_πιν)
        .......

2. Μόνο τον εσωτερικό βρόχο τον περνάς όταν  θέλεις να επιστρέψεις το άθροισμα συγκεκριμενης γραμμής του αρχικού πίνακα. Τότε ο αρ.γραμμής θα πρέπει να μπει σαν     
    παράμετρος στην κλήση του υποπρογράμματος.
        Για γρ απο 1 μεχρι 10
           καλεσε αθρ(αρχ_πιν, γρ, Σ)
           .....
        τελος_επανάληψης

- Γενικά και η 1η και η 2η περίπτωση είναι σωστές σαν λύσεις όταν ζητηθεί να φτιάξεις διαδικασια σε δισδιάστατο. Το ποια επιλέγεις εξαρτάται από το πως τίθεται η εκφώνηση.
- Πιο χρηστική είναι η 2η περίπτωση καθώς το υποπρόγραμμα μπορεί να χρησιμοποιηθεί και για μεμονωμένη γραμμή ή για υποσύνολο του πίνακα....

3. Αν κατάλαβα καλά τι εννοείς, λες:

   διαδικασια αθρ(πιν_αρχ, γρ,στ,Σ)
   μεταβλητες
      ....
   αρχη
      Σ <-- Σ + πιν_αρχ[γρ,στ]
   τελος_διαδικασιας
   (Δε βρισκω λογικη στο να το κάνεις έτσι...)




Νίκος Αδαμόπουλος

Παράθεση από: landreou στις 01 Ιουλ 2013, 08:18:13 ΠΜ
Εχουμε το εξής τμήμα κώδικα :

Αν το παραπάνω τμήμα θέλουμε να το περάσουμε σε διαδίκασία ή συνάρτηση τότε ΠΟΤΕ:

[1] Περνάμε και τους δύο βρόχους ;

[2] Περνάμε μόνο τον εσωτερικό βρόχο ;

[3] Περνάμε μόνο τη γραμμή που γίνεται η άθροιση ;

Μια γενική απάντηση είναι: ανάλογα τι θέλεις να κάνει το υποπρόγραμμα και πόσες φορές θα το καλέσεις...

Αν θεωρήσουμε ότι το αποτέλεσμα του παραπάνω τμήματος προγράμματος είναι ο πίνακας ΑΘΡΟΙΣΜΑ που θα περιέχει τα αθροίσματα ανά γραμμή του δισδιάστατου πίνακα, τότε στο [1] δεν μπορείς να χρησιμοποιήσεις συνάρτηση αφού αυτή δεν μπορεί να σου επιστρέψει πίνακα ως αποτέλεσμα.

Επίσης, στο συγκεκριμένο παράδειγμά σου ποια θα ήταν η σκοπιμότητα να χρησιμοποιήσεις υποπρόγραμμα για το [3]. Ποιος δηλαδή θα ήταν τότε ο ρόλος του υποπρογράμματος;

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

landreou

Όταν μας λένε για διαδικασία " Να δημιουργήσετε διαδικασία που ΝΑ ΔΙΑΒΑΖΕΙ ή (ΝΑ ΕΜΦΑΝΙΖΕΙ) " τι σημαίνει αυτή η έκφραση ;
(Εχω παρατηρησει πως όταν λέει η εκφώνηση ΝΑ ΔΕΧΕΤΑΙ εννοεί τις παραμέτρους που βάζουμε εντός παρενθέσεων.)

petrosp13

Στα υποπρογράμματα, η λέξη "δέχεται" αναφέρεται σε παραμέτρους
Η λέξη "Διαβάζει" αναφέρεται σε είσοδο από το πληκτρολόγιο και υλοποιείται μόνο με διαδικασία
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

landreou

Αυτό το "ΝΑ ΔΙΑΒΑΖΕΙ" δηλαδή εννοεί και ότι θα διαβάζει ΕΝΤΟΣ της διαδικασίας χρησιμοποιώντας τοπικές μεταβλητές ;

[b]Επίσης άλλη ερώτηση για τις διαδικασίες[/b] :

Αν έχω μια διαδικασία πχ ΥΠΟΛΟΓΙΣΜΟΣ(μετ1,μετ2,μετ3) μπορεί να είναι εξόδου μεταβλητή η μετ1 ας πούμε; Παίζει ρόλο η σειρά που τις βάζουμε δηλαδή από αριστερά οι εισόδου και κάποια στιγμή καθώς έχουμε μπαραμέτρους απο αριστερά προς τα δεξιά να είναι εξόδου ;
( για παράδειγμα δηλαδή οι μετ1και μετ2 είναι εισόδου και η μετ3 εξόδου ή η μετ1 εισόδου και οι μετ2 , μετ3 εξόδου ΟΧΙ όμως πχ η μετ1 εξόδου η μετ2 εισόδου και η μετ3 εισόδου - Η ΔΙΑΤΑΞΗ ΓΡΑΦΗΣ ΤΩΝ ΟΡΙΣΜΑΤΩΝ ΔΗΛΑΔΗ) .

petrosp13

Δεν παίζει κανένα ρόλο η σειρά
Όπως ορίσεις το υποπρόγραμμα σου, με την ίδια σειρά θα το καλέσεις
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής