Άθροισμα κατά γραμμές και κατά στήλες σε πίνακα με Συναρτηση

Ξεκίνησε από nikolasmer, 15 Απρ 2019, 08:21:00 ΜΜ

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

nikolasmer

Σπάω το κεφάλι εδώ και πολύ ώρα για να μπορέσω να βρω μια καλή λύση για τον υπολογισμό του αθροίσματος κατά γραμμές και κατά στήλες σε δισδιάστατο πίνακα καλώντας την ίδια Συνάρτηση.
ΣΥΝΑΡΤΗΣΗ ΑΘΡ(Π, I): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: I, J, S, Π[4, 4] 
ΑΡΧΗ
  S <- 0
  ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 4
    S <- S + Π[I, J] 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΑΘΡ <- S
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
 

Στον κώδικα υπάρχει ένας πίνακας Π[4,4] και θα ήθελα με διαφορετική κλήση να υπολογίσω το άθροισμα κατά γραμμές και το άθροισμα κατά στήλες. Ή η λύση είναι μπροστά στα μάτια μου ή ....
Παίζει κάτι με καμία αντιμετάθεση παραμέτρων ή κάτι παρόμοιο στη ΓΛΩΣΣΑ; ???
Μερεντίτης Νικόλαος
Πληροφορικός

petrosp13

Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

nikolasmer

Παράθεση από: petrosp13 στις 15 Απρ 2019, 10:34:14 ΜΜ
Αν βάλεις ανάποδα τους δείκτες μέσα στην αγκύλη;
Δεν είναι αυτό που ήθελα.  Η ΙΔΙΑ συνάρτηση (ή διαδικασία ) , διαφορετική όμως κλήση
Μερεντίτης Νικόλαος
Πληροφορικός

Λαμπράκης Μανώλης

Νίκο καλησπέρα

Αν προσθέσεις μια παράμετρο στην συνάρτηση;;
Συνάρτηση Φ( Α, κ, λ) :ακεραια
......
Αρχη
  Αθρ<--0
  Αν λ=1 τότε
     Για μ από 1 μέχρι 4
         Αθρ<-- Αθρ+ Α[κ, μ]
     Τελος_Επαναληψης
  Αλλιώς
    Για μ από 1 μέχρι 4
       Αθρ<--Αθρ+Α[μ, κ]
     Τελος_Επαναληψης
   Τέλος_αν
   Φ<-- Αθρ
Τελος_Συναρτησης
     

nikolasmer

Παράθεση από: Λαμπράκης Μανώλης στις 15 Απρ 2019, 11:28:07 ΜΜ
Νίκο καλησπέρα

Αν προσθέσεις μια παράμετρο στην συνάρτηση;;
Συνάρτηση Φ( Α, κ, λ) :ακεραια
......
Αρχη
  Αθρ<--0
  Αν λ=1 τότε
     Για μ από 1 μέχρι 4
         Αθρ<-- Αθρ+ Α[κ, μ]
     Τελος_Επαναληψης
  Αλλιώς
    Για μ από 1 μέχρι 4
       Αθρ<--Αθρ+Α[μ, κ]
     Τελος_Επαναληψης
   Τέλος_αν
   Φ<-- Αθρ
Τελος_Συναρτησης
     
Μανώλη ευχαριστώ για την απάντηση.
Ξέρω γίνομαι εκνευριστικος. Αλλά στο μυαλό μου είχα την παραπάνω συνάρτηση (στο πρώτο μου post) αλλά με διαφορετική κλήση . Μια για τις γραμμές και μια για τις στήλες. Με μια επανάληψη μέσα στο σώμα της.
Σε κάποια φάση σκέφτηκα καμιά αντιμετάθεση τιμών παραμέτρων αλλά αυτή δεν θα ήταν πάρα μόνο αυτό ...μια αντιμετάθεση τιμών . Όχι μεταβλητών. Χαχα.
Τέλος πάντων .  Μάλλον δε γίνεται στη ΓΛΩΣΣΑ .
Μερεντίτης Νικόλαος
Πληροφορικός

Λαμπράκης Μανώλης

Νίκο έτσι που το σκέφτομαι, νομίζω πως επειδή η παράμετρος Ι είναι παντα στις γραμμές του πίνακα, δεν μπορεί να αλλάξει και να γίνει κάπως στήλες.. Πχ αν έχουμε μια συνάρτηση που υπολογίζει το Max, εσύ ζητάς πχ να αλλάξεις τον τελεστή από > σε < και να υπολογίζει το min... Αν δεν κάνω κάποιο λάθος ολα αυτά... Οπότε μάλλον πρέπει κάτι να αλλάξεις

alkisg

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

ΣΥΝΑΡΤΗΣΗ ΑΘΡ(Π, I, Γ): ΑΚΕΡΑΙΑ
! Γ=0 => στήλες, Γ=1 => γραμμές
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: I, J, S, Π[4, 4], Γ
ΑΡΧΗ
  S <- 0
  ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 4
    S <- S + Π[I*Γ + J*(1 - Γ), J*Γ + I*(1 - Γ)]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΑΘΡ <- S
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ



bugman

Αν ο πίνακας είναι μονοδιάστατος από 0 έως 15 τότε με δυο τύπους μπορεί κανείς να τον διαβάζει ως δισδιάστατο, όπου ο ένας τύπος είναι I+J*4 (ας τον λέμε οριζόντιο) και ο άλλος ο I*4+j (ας τον λέμε κάθετο). Δηλαδή δεν χρειάζεται να περιστρέψουμε το πίνακα, αλλά αλλάζουμε το τρόπο που διαβάζουμε από αυτόν. Αν θέλει κανείς να διαβάζει από δεξιά προς αριστερά, σε οριζόντια διάταξη χρησιμοποιούμε το 3-I+J*4 (γιατί για Ι=0 δίνει 3, για 1 δίνει 2, για 2 δίνει 1 και για 3 δίνει 0) και το  για κάθετη διάταξη το τύπο (3-i)*4+J.

Για τους δυο τύπους δείτε πως δουλεύει:
Έστω ότι από 0 έως 3 έχουμε τα 1,2,3,4 και όλα τα άλλα είναι 0. Ο πρώτος τύπος δίνει για J=0, μετράμε από I=0  μέχρι 3 και το αποτέλεσμα είναι 1+2+3+4. Με το δεύτερο τύπο για j=0 θα πάρουμε τους δείκτες 0*4, 1*4, 2*4, 3*4 ή 0, 4, 8, 12, και τα νούμερα 1+0+0+0. Με J=1 θα πάρουμε τους δείκτες 1,5,9,13 και τιμές τα 2, 0, 0, 0 κ.ο.κ.

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

Ένα άλλο ζήτημα που λύνεται με μονοδιάστατο πίνακα, με προσπέλαση με τύπο για δισδιάστατο πίνακα, είναι η προσθήκη γραμμών ή στηλών. Ορίζουμε παραπάνω στοιχεία στο πίνακα μέχρι ένα μέγιστο αριθμό στηλών ή γραμμών. Δυσκολεύει λίγο επειδή στους τύπους πρέπει να ορίζουμε το τρέχον μέγεθος σαν ορίσματα στις συναρτήσεις μετατροπής από δυο διαστάσεις σε μια. Εδώ η οριζόντια διάταξη χρησιμεύει για να προσθέτουμε γραμμές ενώ η κάθετη διάταξη για να προσθέτουμε στήλες. Δεν μπορούμε να τα έχουμε και τα δύο. Ο μονοδιάστατος πίνακας έχει συνεχόμενα στοιχεία που κάνουν γραμμές ή στήλες, δεν μπορεί να έχει και τα δύο. Όπως και να έχει όμως ο τρόπος να τα διαβάσουμε κατά στήλες ή κατά γραμμές γίνεται όπως περιγράφτηκε στην αρχή.
Στη πραγματικότητα δεν υπάρχουν πολυδιάστατοι πίνακες στην μνήμη του υπολογιστή. Η μνήμη είναι μονοδιάστατη, και ο διερμηνευτής εκτελεί έναν από τους δυο τύπους διάταξης. Εφόσον η ΓΛΩΣΣΑ δεν δίνει τρόπο να αλλάξουμε μέγεθος στο πίνακα, δεν έχει σημασία ποια διάταξη χρησιμοποιεί! Αν όμως επιλέξουμε έναν μονοδιάστατο πίνακα για να τον προσπελάσουμε με δικό μας τρόπο, τότε θα πρέπει να επιλέξουμε μια διάταξη πχ το I+J*4 ή το I*4+J. Αν θέλαμε τριών διαστάσεων πίνακα τότε θα πρέπει να προσθέσουμε έναν όρο πχ I+J*4+K*4*4  για πίνακα [4,4,4] ή 4*4*4 ή 64 στοιχείων. Αν θέλαμε έναν πίνακα  2*3*4 στοιχεία θα είχαμε το I+J*2+K*2*3 σαν τύπος για ένα μονοδιάστατο 24 στοιχείων, από 0 έως 23, όπου το μέγιστο θα το παίρναμε με 1+2*2+3*2*3 ή 1+4+18=23.



epsilonXi

δεν είμαι σίγουρος αν τελικά Νίκος δέχτηκε την απάντηση του Μανώλη,
η οποία βρίσκω ότι τον καλύπτει...
αλλά αν για κάποιο λόγο επιμένεις Νίκο η συνάρτηση να έχει μόνο ένα ΓΙΑ, έχω μία πρόταση


Κώδικας: bash
Συνάρτηση αθροισμα(Π,Ι,χ): πραγματική
...
αρχή
!η παράμετρος χ θα είναι είτε 1 για άθροισμα της γραμμής Ι είτε 0 για άθροισμα της στήλης Ι
!αντίστοιχα το ψ θα είναι είτε 0 για άθροισμα της γραμμής Ι είτε 1 για άθροισμα της στήλης Ι

  αν χ <> 0 τότε 
    χ <-- 1
  τέλος_αν
  ψ = 1-χ

  Σ <-- 0
  για κ από 1 μέχρι 4
    Σ <-- Σ + χ*Π[Ι,κ] + ψ*Π[κ,Ι]
  τέλος_επανάληψης
  άθροισμα <-- Σ
τέλος_συνάρτησης




nikolasmer

Παράθεση από: epsilonXi στις 16 Απρ 2019, 09:26:09 ΠΜ
δεν είμαι σίγουρος αν τελικά Νίκος δέχτηκε την απάντηση του Μανώλη,
η οποία βρίσκω ότι τον καλύπτει...
αλλά αν για κάποιο λόγο επιμένεις Νίκο η συνάρτηση να έχει μόνο ένα ΓΙΑ, έχω μία πρόταση


Κώδικας: bash
Συνάρτηση αθροισμα(Π,Ι,χ): πραγματική
...
αρχή
!η παράμετρος χ θα είναι είτε 1 για άθροισμα της γραμμής Ι είτε 0 για άθροισμα της στήλης Ι
!αντίστοιχα το ψ θα είναι είτε 0 για άθροισμα της γραμμής Ι είτε 1 για άθροισμα της στήλης Ι

  αν χ <> 0 τότε 
    χ <-- 1
  τέλος_αν
  ψ = 1-χ

  Σ <-- 0
  για κ από 1 μέχρι 4
    Σ <-- Σ + χ*Π[Ι,κ] + ψ*Π[κ,Ι]
  τέλος_επανάληψης
  άθροισμα <-- Σ
τέλος_συνάρτησης





Αυτό είναι υπέροχο. Κάτι τέτοιο ήθελα. Ίσως με ένα διακόπτη (true false ) σαν τρίτη παράμετρο. Τέλειο πραγματικά. Ευχαριστώ για μια ακόμη φορά.

Κάτι ακόμα. Υπάρχει η δυνατότητα σε κάποια γλώσσα προγραμματισμού να μπορεί να γίνει αλλαγή στις μεταβλητές αλλά όχι στις τιμές τους; Παράδειγμα έτσι όπως το σκέφτομαι να γίνει τίποτα με pointers η τίποτα σχετικό με casting. Ειλικρινά μπορεί να λέω και χαζαμαρες.
Μερεντίτης Νικόλαος
Πληροφορικός

bugman

Στο πέρασμα με αναφορά δίνουμε νέο όνομα για ίδιο περιεχόμενο. Οι αναφορές γενικά δεν μπορούν να αλλάξουν. Αν το Χ είναι αναφορά του Ζ δεν μπορεί να αλλάξει για να δείχνει το Υ. Ο λόγος που γίνεται αυτό είναι λειτουργικός, δηλαδή θέλουμε το πέρασμα με αναφορά να διατηρεί την αναφορά, ώστε να πάρουμε επιστροφή τιμής.

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

Το ενδιαφέρον είναι ότι μια αναφορά σε τιμή μπορούμε να την περάσουμε σε κλήση με τιμή ή με αναφορά, ανάλογα με το πώς έχουμε σχεδιάσει το πρόγραμμα! Όταν την περάσουμε με τιμή, αυτό που αντιγράφεται είναι ο δείκτης. Έτσι έχουμε μια  νέα αναφορά σε τιμή που δείχνει την ίδια τιμή, τον ίδιο χώρο της, ώστε κάθε αλλαγή να φανεί και πίσω, εκτός από μία περίπτωση. Μια αναφορά σε τιμή μπορεί να αλλάξει αναφορά. Αν λοιπόν γίνει αλλαγή αναφοράς τότε αυτό που περάσαμε με τιμή χάνει την αναφορά του! Στο πέρασμα με αναφορά, μιας αναφοράς σε τιμή, έχουμε όλο το πακέτο, δηλαδή και να αλλάξουμε το περιεχόμενο, την τιμή, και την αναφορά σε άλλη τιμή και αυτά θα φανούν στην επιστροφή από τη κλήση σε αυτό που περάσαμε.

Η ΓΛΩΣΣΑ του Λυκείου δεν έχει μεταβλητές που κρατάνε αναφορές σε τιμές. Όλες οι μεταβλητές είναι τιμές. Στις συναρτήσεις έχουμε πάντα πέρασμα με τιμή, ενώ στις διαδικασίες με αναφορά (δεν ισχύει αν περάσουμε έκφραση και όχι μεταβλητή για παράμετρο). Αν χρησιμοποιήσουμε το (Α) αντί για Α στη κλήση διαδικασίας περνάμε την Α με τιμή, γιατί έχουμε έκφραση (παράσταση όχι σκέτο όνομα).

Αν μπορούσαμε στη ΓΛΩΣΣΑ να βάζουμε σε πίνακες αναφορές σε τιμές (δείκτες), τότε θα μπορούσαμε να είχαμε δύο πίνακες 4Χ4 με 16+16 δείκτες, αλλά μόνο 16 τιμές. Με μια συνάρτηση που θα έπαιρνε με τιμή τον πίνακα , σε νέο πίνακα με αντιγραφή αναφορών, και επιλογή μιας γραμμής θα παίρναμε το άθροισμά της. Μια τέτοια συνάρτηση θα έπαιρνε τον πίνακα και τον αριθμό γραμμής. Η αλλαγή σε στήλη ουσιαστικά γίνεται με την επιλογή του άλλου πίνακα που περιέχειαναφορές σε ίδιες τιμές με το πρώτο.

Αν θέλει κάποιος να απλοποιήσει το παραπάνω, θα μπορούσε να κρατάει δύο διαφορετικούς πίνακες,  και σε κάθε έναν θα έχει τις τιμές ώστε να ισχύει Α[I,J]=B[J, I]. Άρα για πίνακα 4Χ4 κάνουμε δυο, τους γεμίζουμε με το δεύτερο να έχει αντίστροφα τους δείκτες, και με μια συνάρτηση όπως αναφέρθηκε πριν και χρήση του πίνακα για γραμμές ή στήλες παίρνουμε το άθροισμα συγκεκριμένης γραμμής ή στήλης.

nikolasmer

Παράθεση από: bugman στις 16 Απρ 2019, 12:43:59 ΜΜ
Στο πέρασμα με αναφορά δίνουμε νέο όνομα για ίδιο περιεχόμενο. Οι αναφορές γενικά δεν μπορούν να αλλάξουν. Αν το Χ είναι αναφορά του Ζ δεν μπορεί να αλλάξει για να δείχνει το Υ. Ο λόγος που γίνεται αυτό είναι λειτουργικός, δηλαδή θέλουμε το πέρασμα με αναφορά να διατηρεί την αναφορά, ώστε να πάρουμε επιστροφή τιμής.

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

Το ενδιαφέρον είναι ότι μια αναφορά σε τιμή μπορούμε να την περάσουμε σε κλήση με τιμή ή με αναφορά, ανάλογα με το πώς έχουμε σχεδιάσει το πρόγραμμα! Όταν την περάσουμε με τιμή, αυτό που αντιγράφεται είναι ο δείκτης. Έτσι έχουμε μια  νέα αναφορά σε τιμή που δείχνει την ίδια τιμή, τον ίδιο χώρο της, ώστε κάθε αλλαγή να φανεί και πίσω, εκτός από μία περίπτωση. Μια αναφορά σε τιμή μπορεί να αλλάξει αναφορά. Αν λοιπόν γίνει αλλαγή αναφοράς τότε αυτό που περάσαμε με τιμή χάνει την αναφορά του! Στο πέρασμα με αναφορά, μιας αναφοράς σε τιμή, έχουμε όλο το πακέτο, δηλαδή και να αλλάξουμε το περιεχόμενο, την τιμή, και την αναφορά σε άλλη τιμή και αυτά θα φανούν στην επιστροφή από τη κλήση σε αυτό που περάσαμε.

Η ΓΛΩΣΣΑ του Λυκείου δεν έχει μεταβλητές που κρατάνε αναφορές σε τιμές. Όλες οι μεταβλητές είναι τιμές. Στις συναρτήσεις έχουμε πάντα πέρασμα με τιμή, ενώ στις διαδικασίες με αναφορά (δεν ισχύει αν περάσουμε έκφραση και όχι μεταβλητή για παράμετρο). Αν χρησιμοποιήσουμε το (Α) αντί για Α στη κλήση διαδικασίας περνάμε την Α με τιμή, γιατί έχουμε έκφραση (παράσταση όχι σκέτο όνομα).

Αν μπορούσαμε στη ΓΛΩΣΣΑ να βάζουμε σε πίνακες αναφορές σε τιμές (δείκτες), τότε θα μπορούσαμε να είχαμε δύο πίνακες 4Χ4 με 16+16 δείκτες, αλλά μόνο 16 τιμές. Με μια συνάρτηση που θα έπαιρνε με τιμή τον πίνακα , σε νέο πίνακα με αντιγραφή αναφορών, και επιλογή μιας γραμμής θα παίρναμε το άθροισμά της. Μια τέτοια συνάρτηση θα έπαιρνε τον πίνακα και τον αριθμό γραμμής. Η αλλαγή σε στήλη ουσιαστικά γίνεται με την επιλογή του άλλου πίνακα που περιέχειαναφορές σε ίδιες τιμές με το πρώτο.

Αν θέλει κάποιος να απλοποιήσει το παραπάνω, θα μπορούσε να κρατάει δύο διαφορετικούς πίνακες,  και σε κάθε έναν θα έχει τις τιμές ώστε να ισχύει Α[I,J]=B[J, I]. Άρα για πίνακα 4Χ4 κάνουμε δυο, τους γεμίζουμε με το δεύτερο να έχει αντίστροφα τους δείκτες, και με μια συνάρτηση όπως αναφέρθηκε πριν και χρήση του πίνακα για γραμμές ή στήλες παίρνουμε το άθροισμα συγκεκριμένης γραμμής ή στήλης.
+1
Μερεντίτης Νικόλαος
Πληροφορικός

nikolasmer

Είμαι κοντά αλλά και πάλι πολύ μακριά από αυτό που θα ήταν το ιδανικό.
Μετά από τις ιδέες των συναδέλφων κατέληξα στον εξής κώδικα:
ΠΡΟΓΡΑΜΜΑ ΑΣΚ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: I, J, Π[4, 4], Σ[8] 
ΑΡΧΗ
  ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ 4
    ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 4
      ΔΙΑΒΑΣΕ Π[I, J] 
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ 8
    Σ[I] <- ΑΘΡ(Π, I) 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ 8
    ΓΡΑΨΕ Σ[I] 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΣΥΝΑΡΤΗΣΗ ΑΘΡ(Π, I): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: I, J, S, Π[4, 4] 
ΑΡΧΗ
  S <- 0
  ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 4
    S <- S + (I <=4)*Π[I, J] + (I>4)*Π[J, I mod 4]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΑΘΡ <- S
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ


Δεν υπάρχει casting στη ΓΛΩΣΣΑ οπότε πως θα μπορούσα να το υλοποιήσω. :-\
Μερεντίτης Νικόλαος
Πληροφορικός

ssimaiof

ΣΥΝΑΡΤΗΣΗ ΑΘΡ(Π, I): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: I, J, K, S, Π[4, 4] 
ΑΡΧΗ
  K <- ((I - 1) div 4 + 1) mod 2
  S <- 0
  ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 4
    S <- S + K* Π[(I - 1) mod 4 + 1, J] + (1 - K)* Π[J, (I - 1) mod 4 + 1] 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΑΘΡ <- S
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
Σταύρος Σημαιοφορίδης

bugman

Χρησιμοποιείς μια μεταβλητή για δυο στοιχεία, το I.  Γίνεται, αλλά δεν είναι σωστό από θέμα καλής πρακτικής.
Αν θες κάτι πολύ μικρό, μπορείς να εξαιρέσεις και την συνάρτηση, και τον 4Χ4 πίνακα.
Ξεκινάς ορίζοντας 9μεταβλητές, Γ1,Γ,2, Γ3, Γ4, Σ1, Σ2, Σ3, Σ4 και μια Ι
Βάζεις στα Σ1 έως Σ4 τιμή 0.
Για τέσσερις φορές (με τη I, δεν θα την χρησιμοποιήσουμε αλλού),
Διαβάζουμε τέσσερις τιμές, και τυπώνουμε το άθροισμά τους Γ1+Γ2+Γ3+Γ4.
Αυξάνουμε τα Σ1 έως Σ4 κατά Γ1 έως Γ4.
Μετά την επανάληψη τυπώνουμε τα Σ1 έως Σ4.
Διαπίστωση. Το πρόγραμμα δουλεύει, αλλά αν θέλουμε να αλλάξουμε μέγεθος πρέπει να μειώσουμε ή να αυξήσουμε μεταβλητές.
Φυσικά και στα προηγούμενα προγράμματα με χρήση πίνακα και συνάρτησης, υποχρεωτικά δίνουμε μέγεθος πίνακα, τόσο στην αρχή του προγράμματος, όσο και του υποπρογράμματος (εδώ συνάρτηση). Το απαιτεί η ΓΛΩΣΣΑ, είναι περιορισμός της.
Όμως μπορεί κάποιος να φτιάξει έναν πίνακα 10×10 και μια μεταβλητή που θα δείχνει το μέγιστο, Μ, όπου με Μ=3 θα έχουμε από 0 μέχρι Μ ή αλλιώς 4 επαναλήψεις, και ομοίως για  μια φωλιασμένη επανάληψη.
Επειδή σε συναρτήσεις δεν βάζουμε εντολές εισόδου και εξόδου (πάλι περιορισμό της ΓΛΩΣΣΑΣ), θα πρέπει να χρησιμοποιήσουμε διαδικασία, όπου σε αυτήν θα διαβάζουμε μια γραμμή και θα εμφανίζουμε το άθροισμά. Ουσιαστικά δεν θέλουμε το 10×10 πίνακα, αλλά μόνο ένα Σ[10] όπου το Σ είναι ο αθροιστής στήλης.
Στη διαδικασία θα δώσουμε το πίνακα και τον αριθμό στηλών, που θα έχουμε πάρει μια φορά με έλεγχο ακέραιου από 1 έως 10 και διόρθωση -1, λόγω βάσης πίνακα που είναι το μηδέν.

Εντός της διαδικασίας σε μια ΣΟΥΜΑ θα προσθέτουμε το κάθε νέο Γ, και το Σ θα το αυξάνουμε κατά Γ. Πριν επιστρέψει η ροή εκτέλεσης από το υποπρόγραμμα θα εμφανίζει την ΣΟΎΜΑ ως άθροισμά γραμμής. Μόλις τελειώσει η επανάληψη που καλεί την διαδικασία,  θα έχουν γίνει οι εισαγωγές του πίνακα θα έχουν εξαχθεί οι σούμες ανά γραμμή, θα έχουν ολοκληρωθεί οι σούμες στο πίνακα. Αρκεί μια επανάληψη για να εμφανίσουμε τις σούμες ανά στήλη.
Διαπίστωση. Ενώ το πρόγραμμα ζητάει αθροίσματα στηλών και γραμμών, και υποθέτει έναν πίνακα τιμών, δεν είναι απαραίτητος, στον αλγόριθμο που περιέγραψα, κρατάμε πίνακα με σούμες (αθροίσματα) στηλών, ενώ βγάζουμε άμεσα τα αθροίσματα γραμμών.
Δεν έδωσα τα προγράμματα, το αφήνω για άσκηση, μεταγραφής αλγόριθμου σε πρόγραμμα στη ΓΛΩΣΣΑ.

Κωστας τζιαννης

Παράθεση από: nikolasmer στις 15 Απρ 2019, 08:21:00 ΜΜ
Σπάω το κεφάλι εδώ και πολύ ώρα για να μπορέσω να βρω μια καλή λύση για τον υπολογισμό του αθροίσματος κατά γραμμές και κατά στήλες σε δισδιάστατο πίνακα καλώντας την ίδια Συνάρτηση.
ΣΥΝΑΡΤΗΣΗ ΑΘΡ(Π, I): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: I, J, S, Π[4, 4] 
ΑΡΧΗ
  S <- 0
  ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 4
    S <- S + Π[I, J] 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΑΘΡ <- S
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
 

Στον κώδικα υπάρχει ένας πίνακας Π[4,4] και θα ήθελα με διαφορετική κλήση να υπολογίσω το άθροισμα κατά γραμμές και το άθροισμα κατά στήλες. Ή η λύση είναι μπροστά στα μάτια μου ή ....
Παίζει κάτι με καμία αντιμετάθεση παραμέτρων ή κάτι παρόμοιο στη ΓΛΩΣΣΑ; ???

νικο για δες αυτη τη λογικη.οταν θες αθροισμα γραμμης πχ της γραμμης 2 δινεις 2.5 ενω αν θες τη στηλη 2 δινεις 2.

ΠΡΟΓΡΑΜΜΑ αθροισμαγρστ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: ι, ξ, πιν[4, 4]
  ΠΡΑΓΜΑΤΙΚΕΣ: γραμμη, σαμ
ΑΡΧΗ
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 4
    ΓΙΑ ξ ΑΠΟ 1 ΜΕΧΡΙ 4
      ΔΙΑΒΑΣΕ πιν[ι, ξ]
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

                                                !θα βρω το αθροισμα καθε γραμμης
  ΓΡΑΨΕ "αθροισμα καθε γραμμης"
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 4
    γραμμη <- ι + 0.5
    σαμ <- ΑΘΡ(πιν, γραμμη)
    ΓΡΑΨΕ σαμ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
                                                 !θα βρω το αθροισμα καθε στηλης
  ΓΡΑΨΕ "αθροισμα καθε στηλης"
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 4
    γραμμη <- ι
    σαμ <- ΑΘΡ(πιν, γραμμη)
    ΓΡΑΨΕ σαμ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

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


ΣΥΝΑΡΤΗΣΗ ΑΘΡ(Π, χ): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: κ, σ, Π[4, 4], θεση
  ΠΡΑΓΜΑΤΙΚΕΣ: χ
ΑΡΧΗ
  σ <- 0
  θεση <- Α_Μ(χ)
  ΓΙΑ κ ΑΠΟ 1 ΜΕΧΡΙ 4
    σ <- σ + Π[(1 - Α_Μ(θεση/χ))*θεση + κ*Α_Μ(θεση/χ), Α_Μ(θεση/χ)*θεση + κ*(1 - Α_Μ(θεση/χ))]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΑΘΡ <- σ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ


nikolasmer

Παράθεση από: ssimaiof στις 18 Απρ 2019, 11:44:43 ΠΜ
ΣΥΝΑΡΤΗΣΗ ΑΘΡ(Π, I): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: I, J, K, S, Π[4, 4] 
ΑΡΧΗ
  K <- ((I - 1) div 4 + 1) mod 2
  S <- 0
  ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 4
    S <- S + K* Π[(I - 1) mod 4 + 1, J] + (1 - K)* Π[J, (I - 1) mod 4 + 1] 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΑΘΡ <- S
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Ναι αυτό είναι. Ευχαριστώ.
Ευχαριστώ για τις απαντήσεις όλους.
Μερεντίτης Νικόλαος
Πληροφορικός

thaaanos

ΣΥΝΑΡΤΗΣΗ ΑΘΡ_ΠΙΝ(A, k): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: i, k, A[4, 4], sum
ΑΡΧΗ
  sum <- 0
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4 ΜΕ ΒΗΜΑ k div Α_Τ(k) 
    sum <- sum + A[ i, k] 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4 ΜΕ ΒΗΜΑ -k div Α_Τ(k) 
    sum <- sum + A[-k, i] 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΑΘΡ_ΠΙΝ <- sum
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ


use as  ΑΘΡ_ΠΙΝ(A, k) ή  ΑΘΡ_ΠΙΝ(A, -k) για άθροισμα γραμμών

ΥΓ εντάξει άργησα αλλα τώρα το είδα να μην δώσω και εγώ μια απάντηση;

batikiotis

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

petrosp13

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

Λαμπράκης Μανώλης

Καλησπέρα σε όλους

είχα και εγώ μάι παρόμοια απορία .. όσες φορές θέλουμε υποθέτω μπορούμε σίγουρα αν έχουμε πχ

ΣΥΝΑΡΤΗΣΗ Φ(Α): ΧΑΡΑΚΤΗΡΑΣ
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ:Α
ΑΡΧΗ
   ΑΝ Α<0 ΤΟΤΕ
      Φ<--'ΑΡΝΗΤΙΚΟΣ'
   ΑΛΛΙΩΣ_ΑΝ Α=0 ΤΟΤΕ
      Φ<--'ΜΗΔΕΝ'
   ΑΛΛΙΩΣ
      Φ<--'ΘΕΤΙΚΟΣ'
   ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

θα μπορούμε όμως να έχουμε κάτι σαν το παρακάτω ??

ΣΥΝΑΡΤΗΣΗ Φ(Α): ΧΑΡΑΚΤΗΡΑΣ
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ:Α
ΑΡΧΗ
   ΑΝ Α<0 ΤΟΤΕ
      Φ<--'ΑΡΝΗΤΙΚΟΣ'
   ΑΛΛΙΩΣ_ΑΝ Α=0 ΤΟΤΕ
      Φ<--'ΜΗΔΕΝ'
   ΑΛΛΙΩΣ
      Φ<--'ΘΕΤΙΚΟΣ'
   ΤΕΛΟΣ_ΑΝ
   φ<--'ΑΚΥΡΟ'
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Δηλαδή να πάρει τιμή και μετά να πάρει διαφορετική τιμή ?? δεν έχω δει κάπου τέτοιο παράδειγμα και νόμιζα πως δε γίνεται , αλλά δεν υπάρχει και κάπου

petrosp13

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

Λαμπράκης Μανώλης

απόλυτα λογικό μου ακούγεται, απλά μου έκανε εντύπωση πως δεν εχω δει  κάτι παρόμοιο σαν παράδειγμα

pgrontas

Παράθεση από: petrosp13 στις 16 Απρ 2021, 05:48:59 ΜΜ
Μπορεί να εμφανίζεται όσες φορές θέλουμε, αρκεί να μην υπάρχει δεξιά από το βελάκι γιατί προκαλεί αναδρομή

Το λέει κάπου αυτό στο βιβλίο; Αναδρομή θα προκαλούσε αν υπήρχε κλήση της συνάρτησης με παρενθέσεις, παραμέτρους και όχι απλή χρήση του ονόματος.
Προσωπικά θα δεχόμουν χρήση του ονόματος της συνάρτησης οπουδήποτε θα μπορούσε να μπει μεταβλητή.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

alkisg

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

Κάποιες ενδείξεις από το βιβλίο αναφέρω εδώ:
https://alkisg.mysch.gr/steki/index.php?topic=1284.msg8650#msg8650

Εν ολίγοις, στη C έχουμε δήλωση int main() και κλήση main().
Στην Pascal έχουμε δήλωση Program main και κλήση main.
Στην ΓΛΩΣΣΑ έχουμε δήλωση ΠΡΟΓΡΑΜΜΑ main, θα ήταν παράταιρο να υποθέσουμε ότι το καλούμε ως main().
Μου φαίνεται ότι στην κλήση υποπρογραμμάτων η ΓΛΩΣΣΑ ταιριάζει αρκετά με την Pascal, δεν νομίζω ότι πρέπει να ανακατέψουμε τους συμβολισμούς και από άλλες γλώσσες.

pgrontas

Άλκη το γνωρίζω για τον Διερμηνευτή και είναι μια διαφωνία που έχω σε αυτό το σημείο.

Η οπτική μου δεν έχει σχέση με ανακάτεμα συμβολισμών από γλώσσες προγραμματισμού. Μάλλον το αντίθετο.
Δεν βλέπω κανένα λόγο το όνομα της συνάρτησης να μην μπορεί να είναι μία ειδική μεταβλητή μέσα σε αυτή, την οποία να μπορείς να κάνεις ό,τι θέλεις και να την έχεις είτε δεξιά είτε αριστερά από την εκχώρηση. Είναι εύκολο να το εξηγήσεις και δεν χαλάει τίποτα. Βέβαια δεν υπάρχει σχετική ρητή πρόβλεψη στο βιβλίο, αλλά ούτε και σχετική απαγόρευση.
Οπότε αν απαγορεύσεις να μπει στα δεξιά, τότε εισάγεις έναν αδικαιολόγητο για μένα περιορισμό μόνο και μόνο για να μοιάσεις στην Pascal (δεν βλέπω άλλο λόγο). Θεωρώ επίσης ότι αυτό το σημείο, δεν είναι και από τα καλύτερα της Pascal (οπότε γιατί να πρέπει να της μοιάσουμε;), αφού το όνομα του υποπρογράμματος είναι διαφορετική έννοια από την κλήση του και κατά συνέπεια πρέπει να συμβολίζονται διαφορετικά.
Αν κάποιτε μπει αναδρομή στην ύλη, τότε η υποχρεωτική παρένθεση στην κλήση θα σε βοηθήσει να τα ξεχωρίζεις.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

alkisg

> Το όνομα του υποπρογράμματος είναι διαφορετική έννοια από την κλήση του και κατά συνέπεια πρέπει να συμβολίζονται διαφορετικά.

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

> μόνο και μόνο για να μοιάσεις στην Pascal

Όντως εγώ είχα το σκεπτικό "τι να εννοούσαν άραγε οι συγγραφείς". Αν ήταν να μπούμε στη διαδικασία του "τι θα ήταν καλύτερο", τότε εγώ θα προτιμούσα αυτό που κάνουν οι μοντέρνες γλώσσες, όπου το όνομα της συνάρτησης είναι pointer, οπότε `x = function1; x = function2;` και μετά `x()` καλεί την function2.

> Δεν βλέπω κανένα λόγο το όνομα της συνάρτησης να μην μπορεί να είναι μία ειδική μεταβλητή

Αρκετά πράγματα στις γλώσσες προγραμματισμού έχουν υλοποιηθεί έτσι για λόγους βελτιστοποιήσεων, κι ας μας φαίνονται άβολα στην εκπαίδευση. Π.χ. σε κάποιες γλώσσες η ΕΠΙΛΕΞΕ δεν αντιστοιχεί με πολλαπλές ΑΝ για να μπορεί να γίνει μια φορά αποτίμηση της αρχικής έκφρασης. Σε άλλες, η ΓΙΑ δεν αντιστοιχεί με ΟΣΟ για να μπορεί να αποτιμηθεί μια φορά η τελική τιμή και το βήμα.
Αντίστοιχα νομίζω ότι στην Pascal πάρθηκε αυτή η απόφαση για να μην χρειάζεται να σπαταληθεί χώρος για τοπική μεταβλητή. Π.χ. στην Pascal είναι δυνατή η επιστροφή ενός πίνακα με χιλιάδες στοιχεία, το να δημιουργηθεί αυτόματα μια τέτοια μεταβλητή χωρίς να είναι σίγουρο ότι χρειάζεται, κοστίζει. Ενώ στις γλώσσες που χρησιμοποιούν την εντολή `return value`, δεν υπάρχει τέτοιο ζήτημα. Και βέβαια ούτε και στη ΓΛΩΣΣΑ αφού δεν επιτρέπεται συνάρτηση να επιστρέφει πίνακα...

pgrontas

Παράθεση από: alkisg στις 17 Απρ 2021, 04:17:23 ΜΜ
> Το όνομα του υποπρογράμματος είναι διαφορετική έννοια από την κλήση του και κατά συνέπεια πρέπει να συμβολίζονται διαφορετικά.

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

Καταλαβαίνω τι λες για τις βελτιστοποιήσεις. Αρκεί να μην σου χαλάνε το mental model, το οποίο στην εκπαίδευση είναι πιο σημαντικό.

Τέλος πάντων το νόημα της παρέμβασής μου είχε να κάνει με το ό,τι δεν βλέπω λόγο να εισάγουμε εναν περιορισμό - απαγόρευση που δεν αναφέρεται κάπου ρητά, ειδικά μάλιστα όταν αυτός μπορεί να περιπλέξει τα πράγματα (το όνομα της συνάρτησης είναι σαν μεταβλητή αλλά δεν είναι κιολας), δεν συγκρούεται με άλλη έννοια και δεν εξυπηρετεί κανέναν σκοπό τελικά.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

alkisg

Απλά όταν μπαίνουμε σε διαδικασία "πώς να ορίσουμε καλύτερα κάποιες λεπτομέρειες μιας γλώσσας" χωρίς να γράψουμε BNF κλπ... τότε ως αποτέλεσμα έχουμε 20+ χρόνια ασαφειών.
Ενώ αν οι συγγραφείς είχαν δηλώσει εξαρχής ότι "είναι εξελληνισμένη Pascal, τέλος", τότε μπορεί κάποια σημεία όπως αυτό που λες να ήταν ελαφρώς χειρότερα, άλλα όπως η αποφυγή του άθλιου μηχανισμού κλήσεων copy/restore να ήταν πολύ καλύτερα,
...όμως σίγουρα θα είχαμε γλυτώσει χιλιάδες ώρες να διυλίζουμε τον κώνωπα! Σημαντικότατο πλεονέκτημα!

dpa2006

Παράθεση από: alkisg στις 17 Απρ 2021, 04:42:14 ΜΜ
Απλά όταν μπαίνουμε σε διαδικασία "πώς να ορίσουμε καλύτερα κάποιες λεπτομέρειες μιας γλώσσας" χωρίς να γράψουμε BNF κλπ... τότε ως αποτέλεσμα έχουμε 20+ χρόνια ασαφειών.
Ενώ αν οι συγγραφείς είχαν δηλώσει εξαρχής ότι "είναι εξελληνισμένη Pascal, τέλος", τότε μπορεί κάποια σημεία όπως αυτό που λες να ήταν ελαφρώς χειρότερα, άλλα όπως η αποφυγή του άθλιου μηχανισμού κλήσεων copy/restore να ήταν πολύ καλύτερα,
...όμως σίγουρα θα είχαμε γλυτώσει χιλιάδες ώρες να διυλίζουμε τον κώνωπα! Σημαντικότατο πλεονέκτημα!

Με μια μικρή διαφωνία ως προς την Εξελληνισμένη Pascal...
Η Pascal δήλωνε τα Υποπρογράμματα πριν το Begin (αν θυμάμαι καλά...πέρασαν 30 χρόνια...) η C όμως δηλώνει υποπρογράμματα μετά το Τέλο Προγράμματος, και εδώ θα ήθελα ενιαία αντιμετώπιση σε Γλώσσα και Ψευδογλώσσα...
τέλος πάντων...
:)
Computer science (abbreviated CS or CompSci) is the scientific and practical approach to computation and its applications. It is the systematic study of the feasibility, structure, expression, and mechanization of the methodical processes (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information, whether such information is encoded in bits and bytes in a computer memory or transcribed engines and protein structures in a human cell.source:http://en.wikipedia.org/wiki/Computer_science