αρνητικό βήμα στη ΓΙΑ

Ξεκίνησε από thanosgn, 31 Ιαν 2012, 09:02:40 ΜΜ

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

thanosgn

Καλησπέρα,
Έχω το εξής πρόβλημα: Αν σε μια δομή επανάληψης ΓΙΑ το βήμα είναι αρνητικό, ενώ η αρχική τιμή ειναι μικρότερη απο την τελική π.χ.                                 

                                                               Για i από 1 μέχρι 5 με_βήμα -1
                                                                           ...
                                                               Τέλος_επανάληψης 

Η επανάληψη αυτή εκτελείται άπειρες φορές ή καμια;

Ο καθηγητής του σχολείου υποστηρίζει πως δεν θα εκτελεστεί καμία φορα, αφού η συνθήκη καθορίζεται ανάλογα με το βήμα. Δηλ. στην περίπτωση αυτή που το βήμα είνα αρνητικό, η συνθήκη είναι: (i>=5)

Ο καθηγητής που έχω στο φροντηστήριο υποστηρίζει πως πρόκειται για ατέρμωνα βρόγχο επειδή (κατα εκείνον) η συνθήκη καθορίζεται από τη σχέση της αρχικής και της τελικής τιμής. Δηλ. εν προκειμένω η συνθήκη θα είναι: (i<=5) (επειδή 1<5)

Στο σχολικό βιβλίο δεν υπάρχει σαφής απάντηση. Αναφέρεται οτι στην περίπτωση που το βήμα είναι 0 η επανάληψη εκτελέιται άπειρες φορές, ομως δεν ξεκαθαρίζει αν είναι και η μοναδική περίπτωση που συμβάινει αυτο..

Απ'ότι έχω δει, διευκρίνηση δεν υπάρχει ούτε στα βιβλία του κ.Τσιωτάκη.

Τί συνβάινει τελικά;


Ευχαριστώ εκ των προτέρων..

evry

καμία φορά, ο καθηγητής που έχεις στο σχολείο έχει δίκιο
αν ψάξεις λίγο στο στέκι θα δεις ότι έχει ξαναγίνει αυτή η κουβέντα.
Για να το τεκμηριώσεις στον καθηγητή σου πες του να κοιτάξει στο βιβλίο του καθηγητή στην σελίδα 71. Το λέει ξεκάθαρα
Μπορείς να το κατεβάσεις από το παρακάτω link και να το δεις
http://www.pi-schools.gr/download/lessons/computers/lykeio/books/anap_bk/Kef2.zip
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

thanosgn

Παράθεση από: evry στις 31 Ιαν 2012, 09:30:35 ΜΜ
καμία φορά, ο καθηγητής που έχεις στο σχολείο έχει δίκιο
αν ψάξεις λίγο στο στέκι θα δεις ότι έχει ξαναγίνει αυτή η κουβέντα.
Για να το τεκμηριώσεις στον καθηγητή σου πες του να κοιτάξει στο βιβλίο του καθηγητή στην σελίδα 71. Το λέει ξεκάθαρα
Μπορείς να το κατεβάσεις από το παρακάτω link και να το δεις
http://www.pi-schools.gr/download/lessons/computers/lykeio/books/anap_bk/Kef2.zip


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

από<=μεχρι με βημα>0
απο>=μεχρι με βημα<0
βημα<>0

Δεν αναφέρεται ας πούμε τι συμβαίνει στην περίπτωση που ισχύει:
"απο<=μεχρι με βημα<0"

evry

Προφανώς υπονοεί ότι δεν υπάρχει τέτοια περίπτωση.

Παράθεση από: thanosgn στις 31 Ιαν 2012, 09:43:47 ΜΜ

Δεν αναφέρεται ας πούμε τι συμβαίνει στην περίπτωση που ισχύει:
"απο<=μεχρι με βημα<0"
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

thanosgn

Παράθεση από: evry στις 31 Ιαν 2012, 09:48:15 ΜΜ
Προφανώς υπονοεί ότι δεν υπάρχει τέτοια περίπτωση.


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

spantoulis

Ότι δεν ορίζεται δεν αγγίζεται. Οπότε μην ανησυχείς!
Μετά από τόσα χρόνια ζωής της ΑΕΠΠ δεν υπάρχει περίπτωση να βρεθείς μπροστά σε τέτοια διλήμματα (στις εξετάσεις εννοώ)
Η χρήση υπολογιστών ΔΕΝ είναι πληροφορική

Katsadouros_Dhm

Για τη λειτουργία της: "Για..." μπορούμε να πούμε ότι ισχύουν τα εξής:
Για i από α μέχρι ω με_βήμα β
...
Τέλος_επανάληψης

Το i παίρνει αρχικά την τιμή α.
Η συνθήκη που ελέγχεται εξαρτάται από το πρόσημο του βήματος β. Συγκεκριμένα:
1).Αν το βήμα είναι θετικό (β>0) τότε η συνθήκη είναι η i<=ω και εκτελείται η επανάληψη όσο η συνθήκη αυτή είναι αληθής.
2). Αν το βήμα είναι αρνητικό (β<0) τότε η συνθήκη είναι η i>=ω και εκτελείται η επανάληψη όσο η συνθήκη αυτή είναι αληθής.
(Στην ουσία και το βιβλίο του καθηγητή (σελ.71) τα ίδια λέει...)
Αν οι προηγούμενες συνθήκες είναι εξαρχής ψευδείς (δηλαδή π.χ. αν β<0 και δεν ισχύει την πρώτη φορά i>=ω τότε η επανάληψη δεν εκτελείται καμία φορά.

evry

Από τις πανελλήνιες εξετάσεις των ημερησίων το 2004

Δ. Δίνεται η παρακάτω εντολή:
Για i από τ1 μέχρι τ2 με_βήμα β
εντολή1
Τέλος_επανάληψης

Να γράψετε στο τετράδιό σας πόσες φορές εκτελείται η εντολή1 για κάθε έναν από τους παρακάτω συνδυασμούς των τιμών των μεταβλητών τ1, τ2 και β.

1.    τ1=5    τ2=0    β=–2
2.    τ1=5     τ2=1   β=2
3.    τ1=5     τ2=5    β=1
4.    τ1=5     τ2=6,5 β=0,5


Από τις πανελλήνιες εξετάσεις των εσπερινών το 2010

Θεμα Α
Α2. Δίνεται το παρακάτω τμήμα αλγορίθμου:

Για i από –3 μέχρι Α με_βήμα Β
Εμφάνισε i
Τέλος_επανάληψης

Να χαρακτηρίσετε καθεμία από τις προτάσεις που ακολουθούν και αναφέρονται στο παραπάνω τμήμα αλγορίθμου, γράφοντας στο τετράδιό σας, τον αριθμό κάθε πρότασης και δίπλα του το γράμμα Σ, αν αυτή είναι Σωστή, ή το γράμμα Λ, αν αυτή είναι Λανθασμένη.
1. Αν το Α είναι 0 και το Β είναι 1 δεν ικανοποιείται το κριτήριο της περατότητας. (μονάδες 2)
2. Αν το Α είναι –3 και το Β είναι 2 εμφανίζεται η τιμή –3. (μονάδες 2)
3. Αν το Α είναι μεγαλύτερο του 0 και το Β είναι μικρότερο του –4 ο βρόχος δεν εκτελείται καμία φορά. (μονάδες 2)
4. Αν το Α είναι 2 και το Β είναι 2 ο βρόχος εκτελείται ακριβώς 3 φορές. (μονάδες 2)
5. Αν το Α και το Β είναι θετικοί αριθμοί, ο βρόχος μπορεί να μετατραπεί με τη χρήση της εντολής Όσο...επανάλαβε. (μονάδες 2)

Οι απαντήσεις που δόθηκαν και στις 2 περιπτώσεις ήταν με το σκεπτικό ότι το
Για ι από Α μέχρι Μ με βήμα Β

δεν εκτελείται καμία φορά
όταν Β<0 και Α<Μ   ή
        Β>0  και Α>Μ
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

thanosgn

Κατάλαβα και ευχαριστώ πολυ!
Δεν είχα διαφορετική άποψη, αλλα καταλαβαίνετε τη σύγχηση κάποιου μαθητή της Γ' Λυκείου να ακούει 2 αντίθετες πόψεις απο τους καθηγητές του..

P.Tsiotakis

Θάνο, δεν υπάρχει ασάφεια στο συγκεκριμένο θέμα.
Στη δομή Για, άπειρες επαναλήψεις μπορεί να συμβούν μόνο αν το βήμα είναι 0 (άλλη συζήτηση).
Αν το βήμα έχει μη μηδενική τιμή, τότε θα πραγματοποιηθούν καμία, μία ή περισσότερες επαναλήψεις..

(πέρα από όσα εύστοχα κατέγραψαν ήδη οι συνάδελφοι) Όταν έκανα μάθημα, έλεγα στους μαθητές μου:

1. Στο
Για ι από 1 μέχρι 10 με_βήμα -2

πως θέλουμε να πάμε από το 1 στο 10 ... κατεβαίνοντας. ΔΕ ΓΙΝΕΤΑΙ
όμοια στο
Για ι από 11 μέχρι 1 με_βήμα 2
θέλουμε από το 11 να πάμε στο 1 ανεβαίνοντας


thanosgn

Το κατάλαβα.
Απλά πιστεύω πως η διατύπωση του σχολικού βιβλίου δεν είναι και τόσο ακριβής.
Το ξεκαθάρισα πλέον
Ευχαριστώ πολυ!

Συγχαρητήρια για τη δουλειά σας με το βιβλίο!  :)

Fotini_S

Αν μετατρέψουμε την για σε Όσο όμως  δεν θα έχουμε ατέρμονο βρόγχο;

Fotini_S

εννοώ στην περίπτωση που έχουμε αρνητικό βήμα...

evry

όταν έχεις αρνητικό βήμα μετατρέπεις με >= και όχι με <=
για αυτό δε γίνεται ποτέ να έχεις ατέρμονα βρόχο με τη συγκεκριμένη Για.
Ρίξε μια ματιά στο βιβλίο καθηγητή
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

andreas_p

Στο σχολικό βιβλίο δεν υπάρχει σαφής απάντηση ....

Υπάρχει !!!!

Ψάξε ... λίγο ...

Και αν ... βαριέσαι , πήγαινε κατ' ευθείαν στη σελ. 178 !!!

... και εφόσον είναι μικρότερη (ή ίση)

ΑΠ

_sleeper

Κάποια σχόλια και από μένα όσον αφορά αυτό το θέμα, το οποίο θεωρώ ότι είναι αρκετά αμφιλεγόμενο. Κατ' αρχήν στο ούτε στο βιβλίο μαθητή, ούτε σε αυτό του καθηγητή αναφέρει ρητά ότι το βήμα είναι αυτό που καθορίζει τη συνθήκη ή το αντίστροφο. Βλέποντας το πράγμα καθαρά προγραμματιστικά, το Για i από 1 μέχρι 10 με_βήμα -1 θα δημιουργήσει ατέρμων βρόχο, αυτό είναι προφανές. Το πρόβλημα είναι ότι σε pascal, από την οποία παράχθηκε η "ΓΛΩΣΣΑ" έχει ελαφρώς διαφορετικό τρόπο στη διατύπωση της Για, αφού δεν υποστηρίζει βήμα, πέρα από το 1 ή το -1 κι αυτό με περίεργο τρόπο (to ή downto). Στην περίπτωση που κάνουμε for i:=1 downto 10 do, η pascal θεωρεί πως δε γίνεται να κατέβει και να καταλήξει από το 1 στο 10, οπότε δεν εκτελείται ποτέ. Παρόλα αυτά σε όλες τις άλλες γλώσσες προγραμματισμού η λογική λέει, ότι το βήμα δεν έχει να κάνει με τη συνθήκη (και πολύ σωστά κάνει, θα συμπληρώσω εγώ).

Εν πάση περιπτώσει, αν πάμε the pascal way θα έχουμε 0 επαναλήψεις. Αν το πάρουμε από κάθε άλλη άποψη θα έχουμε infinite loop.
what better place than here, what better time than now!

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

Παράθεση από: _sleeper στις 18 Φεβ 2013, 04:51:41 ΜΜ
Το πρόβλημα είναι ότι σε pascal, από την οποία παράχθηκε η "ΓΛΩΣΣΑ" έχει ελαφρώς διαφορετικό τρόπο στη διατύπωση της Για, αφού δεν υποστηρίζει βήμα, πέρα από το 1 ή το -1 κι αυτό με περίεργο τρόπο (to ή downto). Στην περίπτωση που κάνουμε for i:=1 downto 10 do, η pascal θεωρεί πως δε γίνεται να κατέβει και να καταλήξει από το 1 στο 10, οπότε δεν εκτελείται ποτέ. Παρόλα αυτά σε όλες τις άλλες γλώσσες προγραμματισμού η λογική λέει, ότι το βήμα δεν έχει να κάνει με τη συνθήκη (και πολύ σωστά κάνει, θα συμπληρώσω εγώ).

Εν πάση περιπτώσει, αν πάμε the pascal way θα έχουμε 0 επαναλήψεις. Αν το πάρουμε από κάθε άλλη άποψη θα έχουμε infinite loop.

Το ζήτημα με το αρνητικό βήμα έχει συζητηθεί αρκετές φορές στο Στέκι και αλλού και θεωρείται λήξαν...

Από πού όμως προκύπτει ότι η ΓΛΩΣΣΑ έχει δημιουργηθεί από την pascal; Το συμπέρασμά σου είναι κάπως... αυθαίρετο! Όπως έχω ξαναγράψει, εμένα πιο πολύ  μου μοιάζει με VB. Πάντως η ΓΙΑ της ΑΕΠΠ ταιριάζει απόλυτα με το for loop της γλώσσας αυτής ( http://msdn.microsoft.com/en-us/library/vstudio/5z06z1kb.aspx ).

For counter [ As datatype ] = start To end [ Step step ]
    [ statements ]
Next [ counter ]


Μάλιστα αντιγράφω και υπογραμμίζω μερικά αποσπάσματα που σχετίζονται με τα προαναφερόμενα σε αυτή τη συζήτηση:

When a For...Next loop starts, Visual Basic evaluates start, end, and step. Visual Basic evaluates these values only at this time and then assigns start to counter. Before the statement block runs, Visual Basic compares counter to end. If counter is already larger than the end value (or smaller if step is negative), the For loop ends and control passes to the statement that follows the Next statement. Otherwise, the statement block runs.

Each time Visual Basic encounters the Next statement, it increments counter by step and returns to the For statement. Again it compares counter to end, and again it either runs the block or exits the loop, depending on the result. This process continues until counter passes end or an Exit For statement is encountered.

The loop doesn't stop until counter has passed end. If counter is equal to end, the loop continues. The comparison that determines whether to run the block is counter <= end if step is positive and counter >= end if step is negative.

If you change the value of counter while inside a loop, your code might be more difficult to read and debug. Changing the value of start, end, or step doesn't affect the iteration values that were determined when the loop was first entered.


_sleeper

Παράθεση από: Νίκος Αδαμόπουλος στις 18 Φεβ 2013, 07:07:46 ΜΜ
Το ζήτημα με το αρνητικό βήμα έχει συζητηθεί αρκετές φορές στο Στέκι και αλλού και θεωρείται λήξαν...

Από πού όμως προκύπτει ότι η ΓΛΩΣΣΑ έχει δημιουργηθεί από την pascal; Το συμπέρασμά σου είναι κάπως... αυθαίρετο! Όπως έχω ξαναγράψει, εμένα πιο πολύ  μου μοιάζει με VB. Πάντως η ΓΙΑ της ΑΕΠΠ ταιριάζει απόλυτα με το for loop της γλώσσας αυτής ( http://msdn.microsoft.com/en-us/library/vstudio/5z06z1kb.aspx ).


Το συμπέρασμα μου δεν είναι καθόλου αυθαίρετο, προκύπτει από την σχεδόν ολόιδια προσέγγιση στη δομή των προγραμμάτων, όπως επίσης και των υποπρογραμμάτων (π.χ. διαχωρισμός ΔΙΑΔΙΚΑΣΙΑΣ-ΣΥΝΑΡΤΗΣΗΣ) και την πανομοιότυπη δομή τους. Οι ομοιότητες ΓΛΩΣΣΑΣ - PASCAL είναι τόσες, που μια απλή μετάφραση από τα αγγλικά στα ελληνικά ενός προγράμματος pascal, μπορεί να γίνει σχεδόν χωρίς καμία αλλαγή πρόγραμμα σε ΓΛΩΣΣΑ. Και ούτε καν θα υπεισέλθω στο ότι η VB είναι γλώσσα για GUIs, που καμία σχέση δεν έχει με τον "κλασικό" προγραμματισμό που μαθαίνουν τα παιδιά. Θα δεχτώ ότι η Για ταιριάζει περισσότερο με τη λογική που έχει η for της VB, αλλά το ότι η ΓΛΩΣΣΑ εμπνεύστηκε από την VB δεν έχει καμία βάση.
what better place than here, what better time than now!

evry

Τα υποπρογράμματα ΓΛΩΣΣΑΣ - PASCAL δεν έχουν καμία σχέση μεταξύ τους. Το ότι έχουν το ίδιο όνομα δε σημαίνει ότι είναι ίδια. Δεν υπάρχουν παράμετροι εισόδου εξόδου (by value, by reference με το var αν τα θυμάμαι καλά)
και το σημαντικότερο από όλα ο μηχανισμός μεταβίβασης παραμέτρων δεν έχει καμία σχέση με αυτόν της pascal.
Άσε που αν δεν κάνω λάθος στην pascal επιτρέπεται να διαβάζεις μέσα σε συνάρτηση, ενώ στη δική μας ΓΛΩΣΣΑ όχι.

Όσο για τη δομή των προγραμμάτων στην οποία αναφέρεσαι νομίζω ότι συναντιέται και σε πολλές άλλες διαδικασιακές γλώσσες προγραμματισμού, δεν είναι αποκλειστικό προνόμιο της pascal

Παράθεση από: _sleeper στις 18 Φεβ 2013, 11:37:34 ΜΜ
Το συμπέρασμα μου δεν είναι καθόλου αυθαίρετο, προκύπτει από την σχεδόν ολόιδια προσέγγιση στη δομή των προγραμμάτων, όπως επίσης και των υποπρογραμμάτων (π.χ. διαχωρισμός ΔΙΑΔΙΚΑΣΙΑΣ-ΣΥΝΑΡΤΗΣΗΣ) και την πανομοιότυπη δομή τους.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

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

Παράθεση από: _sleeper στις 18 Φεβ 2013, 11:37:34 ΜΜ
Το συμπέρασμα μου δεν είναι καθόλου αυθαίρετο, προκύπτει από την σχεδόν ολόιδια προσέγγιση στη δομή των προγραμμάτων...

Δεν με πείθεις... Στην vb έχουμε οριοθέτηση του τέλους των εντολών με λέξεις όπως EndIf, EndSelect, ... ανάλογα με τις Τέλος_αν, Τέλος_επιλογών, ... Στην pascal τα block εντολών οριοθετούνται με begin - end, που είναι τελείως διαφορετικό. Με την pascal ταιριάζει η ψευδογλώσσα του σχετικού μαθήματος των ΕΠΑΛ. Μάλιστα οι συνάδελφοι που ξεκίνησαν να τη διδάσκουν, και που είχαν υπόψη τους την ψευδογλώσσα της ΑΕΠΠ, έπαθαν μεγάλη ήττα μέχρι να συνειδητοποιήσουν τη διαφορετική σύνταξη των εντολών... Δες τις σχετικές συζητήσεις στο Στέκι.


Παράθεση από: _sleeper στις 18 Φεβ 2013, 11:37:34 ΜΜ
Θα δεχτώ ότι η Για ταιριάζει περισσότερο με τη λογική που έχει η for της VB, αλλά το ότι η ΓΛΩΣΣΑ εμπνεύστηκε από την VB δεν έχει καμία βάση.

Δεν ταιριάζει απλώς περισσότερο, είναι ολόιδια.

Ας αφήσουμε την ΓΙΑ. Πες μου για την εντολή ΑΝ με τις διάφορες παραλλαγές της. Δες την αντίστοιχη εντολή στην VB: ολόιδια, σε όλες τις παραλλαγές της. Υπάρχει πολλαπλή Αν στην pascal;

If condition [ Then ]
    [ statements ]
[ ElseIf elseifcondition [ Then ]
    [ elseifstatements ] ]
[ Else
    [ elsestatements ] ]
End If
-or-
If condition Then [ statements ] [ Else [ elsestatements ] ]

Gnirut

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

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

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

_sleeper

Παραθέτω ένα ενδεικτικό πρόγραμμα σε PASCAL, αναφορικά με τις διαφορές/ομοιότητες στη δομή προγραμμάτων σε PASCAL και σε ΓΛΩΣΣΑ, στο οποίο, επίσης, γίνεται προφανές πως μπορεί να χρησιμοποιηθεί η if σε πολλαπλή επιλογή :

program epixeirisi;
var
	i,ogos_dedomenon:integer;
	onoma:string[20];
	xreosi,syn_xreosi,m_o,athrisma:real;
begin
	athrisma:=0;
	for i:=1 to 50 do
		begin
			writeln('dose onoma');
			readln(onoma);
			writeln('dose ogo dedomenon');
			readln(ogos_dedomenon);
			if (ogos_dedomenon<=2) then
				xreosi:=ogos_dedomenon*10
			else if (ogos_dedomenon>=3) and (ogos_dedomenon<=6) then
				xreosi:=(ogos_dedomenon-2)*2.5+20
			else if(ogos_dedomenon>=7) then
				xreosi:=(ogos_dedomenon-6)*1.5+30;
			syn_xreosi:=xreosi+3;
			writeln(onoma);
			writeln(syn_xreosi:4:2);
			athrisma:= athrisma+syn_xreosi;
		end;
	m_o:=athrisma/50;
	writeln(m_o:4:2);
end.


Τα υποπρογράμματα σε PASCAL και σε ΓΛΩΣΣΑ έχουν πάρα πολλά κοινά επαναλαμβάνω, για να μην πω ότι είναι πανομοιότυπα. Το πέρασμα παραμέτρων σε όλες τις γλώσσες προγραμματισμού είναι ίδιος, κι εξαρτάται από το αν έχουμε passing by value, by reference ή by pointer. Στις συναρτήσεις σε PASCAL δεν έχουμε πέρασμα by reference, by default, παρά μόνο by value, όπως ισχύει και στη ΓΛΩΣΣΑ. Από την άλλη στις ΔΙΑΔΙΚΑΣΙΕΣ ισχύει σχεδόν ό,τι ισχύει και στην PASCAL, έχουμε δηλαδή μια απλοποιημένη μορφή τους, κατά την οποία όλες οι παράμετροι είναι by reference. Απορώ πως βγαίνει το συμπέρασμα ότι είναι δύο εντελώς διαφορετικά πράγματα.
what better place than here, what better time than now!

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

Παράθεση από: _sleeper στις 28 Φεβ 2013, 04:39:13 ΜΜ
Παραθέτω ένα ενδεικτικό πρόγραμμα σε PASCAL, αναφορικά με τις διαφορές/ομοιότητες στη δομή προγραμμάτων σε PASCAL και σε ΓΛΩΣΣΑ, στο οποίο, επίσης, γίνεται προφανές πως μπορεί να χρησιμοποιηθεί η if σε πολλαπλή επιλογή :

Πάντως η if που παραθέτεις είναι εμφωλευμένη και όχι πολλαπλή... Απλά στην pascal οι πολλαπλές επιλογές δημιουργούνται μέσω εμφωλευμένων if... Αν και είναι τεχνικό το ζήτημα, παρόλα αυτά αν θέλουμε να ακριβολογούμε δεν γίνεται να ταιριάξει απόλυτα η if της pascal με την Αν της ΑΕΠΠ. Αν θέλεις μπορείς να δεις μέσα στο Στέκι στις σχετικές συζητήσεις του μαθήματος του Δομημένου Προγραμματισμού των ΕΠΑΛ, όπου εκεί η ψευδογλώσσα είναι πράγματι pascal-like και η κανονική γλώσσα είναι η ίδια η pascal.

evry

Παράθεση από: _sleeper στις 28 Φεβ 2013, 04:39:13 ΜΜ
Στις συναρτήσεις σε PASCAL δεν έχουμε πέρασμα by reference, by default, παρά μόνο by value, όπως ισχύει και στη ΓΛΩΣΣΑ. Από την άλλη στις ΔΙΑΔΙΚΑΣΙΕΣ ισχύει σχεδόν ό,τι ισχύει και στην PASCAL, έχουμε δηλαδή μια απλοποιημένη μορφή τους, κατά την οποία όλες οι παράμετροι είναι by reference. Απορώ πως βγαίνει το συμπέρασμα ότι είναι δύο εντελώς διαφορετικά πράγματα.

Αυτό που λες παραπάνω είναι λάθος. Το πέρασμα παραμέτρων στη ΓΛΩΣΣΑ δεν είναι ούτε by reference ούτε by value, είναι ένας σπάνιος τρόπος μεταβίβασης παραμέτρων γνωστός ως
Call-by-copy-restore ή call-by-value-result ή call-by-value-return.
Αν διαβάσεις προσεκτικά το σχετικό παράδειγμα του βιβλίου θα το δεις.
Σχετική συζήτηση έχει ξαναγίνει και στο παρακάτω thread, όπου μπορείς να βρεις και κάποιες παραπομπές, για να μην τα ξαναγράφω
https://alkisg.mysch.gr/steki/index.php?topic=2622.msg22700#msg22700

ΥΓ. Επίσης δε νομίζω ότι υπάρχει πέρασμα by pointer, αυτό είναι γνωστό στη βιβλιογραφία από κάποιους συγγραφείς σαν simulated by reference αν τα θυμάμαι καλά, δηλαδή και αυτό θεωρείται by reference, μια και οι αναφορές ουσιαστικά είναι pointers (βλέπε το null pointer exception που πέταγε η Java ενώ δεν έχει pointers, (δεν ξέρω αν το κάνει ακόμα))
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr