Γέμισμα πίνακα απο υποπρόγραμμα

Ξεκίνησε από Vangelis, 05 Απρ 2006, 12:17:56 ΜΜ

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

Vangelis

Στο site του καλού  συναδέλφου Παναγιώτη απο το οποίο έδωσα ασκήσεις στους μαθητές μου (αναναφέροντας βεβαίως απο που προέρχονται)  είδα μια άσκηση στα υποπρογράμματα που με προβλημάτισε και σας την μεταφέρω

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

Λύση
ΔΙΑΔΙΚΑΣΙΑ Εισαγωγή_Μον_Πίνακα (Πλήθος_γραμμών, Πίνακας)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ : Πλήθος_γραμμών, Πίνακας[1000], i
ΑΡΧΗ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Πλήθος_γραμμών
    ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
      ΓΡΑΨΕ 'Δώσε το ', i, ' στοιχείο'
      ΔΙΑΒΑΣΕ Πίνακας
    ΜΕΧΡΙΣ_ΟΤΟΥ (Πίνακας > 0)
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Η πρώτη παρατήρηση είναι ότι γίνεται έλεγχος έτσι ώστε οι αριθμοί που θα εισαχθούν στον πίνακα να είναι θετικοί πράγμα που δεν αναφέρεται στην εκφώνηση.
Το δεύτερο (και εδώ θέλω τις απόψεις σας) είναι αν έχει κάποιο σκοπό το γέμισμα του πίνακα να γίνεται σε διαδικασία.  Δηλαδή οι τιμές που θα εισάγει η παραπάνω διαδικασία στον πίνακα θα είναι διαθέσιμες στο κύριο πρόγραμμα που θα την καλέσει;
Τη δική μου άποψη είναι οτι δεν θα είναι διαθέσιμες παρα μόνο αν επιστραφεί ο πίνακας.

Βαγγέλης 

dozb

#1
Με την πρώτη σου παρατήρηση συμφωνώ.
Όσο για το δεύτερο:
Έχουμε πει ότι το διάβασμα τιμών σε μεταβλητές δεν πρέπει να γίνεται σε συνάρτηση, οπότε μάλλον εννοείς να μπει άλλη μια τυπική παράμετρος στη λίστα ορισμάτων η οποία να επιστρέφει τον γεμάτο πίνακα στο κυρίως....!!!!!!!!!!

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

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


(Επίσης, αν θες, ρίξε μια ματιά στο θέμα "τοπικές μεταβλητές" να μου πεις τη γνώμη σου...Ευχαριστώ)

novulus

Προφανώς ο έλεγχος αν εισάγεται θετικός αριθμός δεν πρέπει να υπάρχει. Από την άλλη ο Πίνακας επιστρέφεται στο κυρίως πρόγραμμα αφού είναι τυπική παράμετρος. Οσον σφορά την δήλωσή του, αφού οι πίνακες είναι στατικές δομές δεδομένων το μέγεθός τους πρέπει να δηλώνεται με αριθμό ή σταθερά και όχι με μεταβλητή όπως είναι το Πλήθος_γραμμών.
Thus spake the master programmer:
"When you have learned to snatch the error code from the trap frame, it will be time for you to leave."

dozb

Δυστυχώς ούτε σα σταθερά το δέχεται (το μέγεθος του πίνακα)|, τουλάχιστον η γλωσσομάθεια

Επισκέπτης



Δεν επιστρέφεται ο πίνακας;

Στη δήλωση του πίνακα στις μεταβλητές της διαδικασίας, πρέπει να δηλωθεί νούμερο (1000) ή σταθερά που να έχει οριστεί στη διαδικασία

filippos

Παράθεση από: Vangelis στις 05 Απρ 2006, 12:17:56 ΜΜ
Το δεύτερο (και εδώ θέλω τις απόψεις σας) είναι αν έχει κάποιο σκοπό το γέμισμα του πίνακα να γίνεται σε διαδικασία. Δηλαδή οι τιμές που θα εισάγει η παραπάνω διαδικασία στον πίνακα θα είναι διαθέσιμες στο κύριο πρόγραμμα που θα την καλέσει;
Τη δική μου άποψη είναι οτι δεν θα είναι διαθέσιμες παρα μόνο αν επιστραφεί ο πίνακας.

Δε μπορώ να καταλάβω τι σε προβληματίζει Βαγγέλη..

Ασφαλώς και θα είναι διαθέσιμες οι τιμές του πίνακα στο πρόγραμμα που έχει καλέσει τη διαδικασία. 

Η μεταβίβαση των τιμών των παραμέτρων από - προς τις διαδικασίες γίνεται με copy-in-copy-out, όπως περιγράφεται και στο βιβλίο.  Επομένως οι τιμές που θα διαβαστούν στον πίνακα της διαδικασίας (τυπική παράμετρος) θα αντιγραφούν στον αντίστοιχο πίνακα (πραγματική παράμετρος) του πρόγραμμα που έκανε την κλήση.
Ο μόνος περιορισμός είναι ότοι οι δύο πίνακες (πραγματικός - τυπικός) θα πρέπει να είναι του ίδιου τύπου και μεγέθους

Vangelis

Σωστά Φίλιπε επιστρέφουν όλες οι τιμές άρα δεν  υπάρχει προβλημα.

Βαγγέλης