Αποστολέας Θέμα: Γέμισμα πίνακα απο υποπρόγραμμα  (Αναγνώστηκε 3675 φορές)

Vangelis

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 786
  • Για ακούτε και κανένα μεγαλύτερο!!!
Γέμισμα πίνακα απο υποπρόγραμμα
« στις: 05 Απρ 2006, 12:17:56 μμ »
Στο site του καλού  συναδέλφου Παναγιώτη απο το οποίο έδωσα ασκήσεις στους μαθητές μου (αναναφέροντας βεβαίως απο που προέρχονται)  είδα μια άσκηση στα υποπρογράμματα που με προβλημάτισε και σας την μεταφέρω

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

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

Βαγγέλης 

dozb

  • Θαμώνας
  • ***
  • Μηνύματα: 45
Απ: Γέμισμα πίνακα απο υποπρόγραμμα
« Απάντηση #1 στις: 05 Απρ 2006, 12:50:23 μμ »
Με την πρώτη σου παρατήρηση συμφωνώ.
Όσο για το δεύτερο:
Έχουμε πει ότι το διάβασμα τιμών σε μεταβλητές δεν πρέπει να γίνεται σε συνάρτηση, οπότε μάλλον εννοείς να μπει άλλη μια τυπική παράμετρος στη λίστα ορισμάτων η οποία να επιστρέφει τον γεμάτο πίνακα στο κυρίως....!!!!!!!!!!

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

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


(Επίσης, αν θες, ρίξε μια ματιά στο θέμα "τοπικές μεταβλητές" να μου πεις τη γνώμη σου...Ευχαριστώ)
« Τελευταία τροποποίηση: 05 Απρ 2006, 12:52:42 μμ από dozb »

novulus

  • Θαμώνας
  • ***
  • Μηνύματα: 25
Απ: Γέμισμα πίνακα απο υποπρόγραμμα
« Απάντηση #2 στις: 05 Απρ 2006, 03:33:19 μμ »
Προφανώς ο έλεγχος αν εισάγεται θετικός αριθμός δεν πρέπει να υπάρχει. Από την άλλη ο Πίνακας επιστρέφεται στο κυρίως πρόγραμμα αφού είναι τυπική παράμετρος. Οσον σφορά την δήλωσή του, αφού οι πίνακες είναι στατικές δομές δεδομένων το μέγεθός τους πρέπει να δηλώνεται με αριθμό ή σταθερά και όχι με μεταβλητή όπως είναι το Πλήθος_γραμμών.
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

  • Θαμώνας
  • ***
  • Μηνύματα: 45
Απ: Γέμισμα πίνακα απο υποπρόγραμμα
« Απάντηση #3 στις: 05 Απρ 2006, 04:21:00 μμ »
Δυστυχώς ούτε σα σταθερά το δέχεται (το μέγεθος του πίνακα)|, τουλάχιστον η γλωσσομάθεια

Επισκέπτης

  • Επισκέπτης
Απ: Γέμισμα πίνακα απο υποπρόγραμμα
« Απάντηση #4 στις: 06 Απρ 2006, 04:27:11 μμ »


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

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

filippos

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 139
Απ: Γέμισμα πίνακα απο υποπρόγραμμα
« Απάντηση #5 στις: 06 Απρ 2006, 10:01:20 μμ »
Το δεύτερο (και εδώ θέλω τις απόψεις σας) είναι αν έχει κάποιο σκοπό το γέμισμα του πίνακα να γίνεται σε διαδικασία. Δηλαδή οι τιμές που θα εισάγει η παραπάνω διαδικασία στον πίνακα θα είναι διαθέσιμες στο κύριο πρόγραμμα που θα την καλέσει;
Τη δική μου άποψη είναι οτι δεν θα είναι διαθέσιμες παρα μόνο αν επιστραφεί ο πίνακας.

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

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

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

Vangelis

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 786
  • Για ακούτε και κανένα μεγαλύτερο!!!
Απ: Γέμισμα πίνακα απο υποπρόγραμμα
« Απάντηση #6 στις: 06 Απρ 2006, 10:54:15 μμ »
Σωστά Φίλιπε επιστρέφουν όλες οι τιμές άρα δεν  υπάρχει προβλημα.

Βαγγέλης