Αποστολέας Θέμα: Για i απο...  (Αναγνώστηκε 6425 φορές)

Laertis

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 1465
  • Δεν αντέχω την (συμ)-πίεσηηη .......
    • ΑΣΚΗΣΕΙΣ-ΘΕΜΑΤΑ ΑΕΠΠ
Απ: Για i απο...
« Απάντηση #15 στις: 17 Μάρ 2009, 10:24:50 μμ »
Αυτό με τη "χωροταξία" Νίκο είναι δική σου θεώρηση. Εγώ θεωρώ ότι αν δεν υπάρχει τέλος _αν εκτελείται μόνο η επόμενη εντολή μετά το τότε (είτε δεξιά είτε απο κάτω).
Τι σημαίνει "κενή εντολή"  μετά το τότε ; Το τίποτα ; Μετά το τότε η εντολή που υπάρχει είναι η εμφάνισε "Ναι". Δεν οριζεται "κενή εντολή" .


Άρα έτσι καμία Εμφάνισε δεν ανήκει στην Αν, άρα θα εμφανίζεται και το 'Ναι' και το 'Όχι' σε κάθε περίπτωση!

Εγώ λοιπόν πιστεύω ότι ο προηγούμενος τρόπος γραφής δεν πρέπει να χρησιμοποιείται...

Μα αν καμία εμφάνισε δεν ανήκει στην Αν τότε έχουμε συντακτικό λάθος και δεν εκτελείται τίποτα .Πως μπορούν να εμφανίζονται και τα δύο .....  :o

Δεν υποστηρίζω ότι πρέπει να χρησιμοποιείται , απλά απάντησα στο ερώτημα τι θα εμφανίσει, όχι αν είναι σωστό.
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3165
  • to Iterate is human to Recurse divine
Απ: Για i απο...
« Απάντηση #16 στις: 17 Μάρ 2009, 11:13:24 μμ »

   Η γενική ιδέα είναι πως όταν γράφουμε σε ψευδογλώσσα δεν είμαστε τόσο συντακτικά αυστηροί αλλά μας ενδιαφέρει πιο πολύ η λογική. Το λέω αυτό επειδή στη συγκεκριμένη περίπτωση το βιβλίο δε λέει πουθενά ότι πρέπει ντε και καλά η εντολή μετά το τότε να είναι στην ίδια γραμμή. Φυσικά θα μπορούσε κάποιος να θεωρήσει ότι εννοείται από το βιβλίο.
   Όμως δεν μπορώ να διανοηθώ ότι στην ψευδογλώσσα υπάρχει ένας τόσο αυστηρός συντακτικός κανόνας ο οποίος εξαρτάται από τη θέση του χαρακτήρα αλλαγής γραμμής. Μου φαίνεται πολύ τραβηγμένο. Στη ΓΛΩΣΣΑ μπορεί να το δεχόμουν αλλά στην ψευδογλώσσα θα έλεγα ότι αν δεν υπάρχει τέλος_αν και επίσης δεν υπάρχει εντολή δίπλα στο τότε θα πρέπει να θεωρήσουμε ότι η επόμενη εντολή είναι και αυτή που ταιριάζει με την τότε.
   Πιστεύω πως έτσι όπως το διατυπώνει το βιβλίο κανείς μας δεν είναι σίγουρα λάθος και για αυτό θα δεχόμουν από έναν μαθητή οποιονδήποτε και από τους 2 τρόπους.

Φυσικά εμείς λέμε στους μαθητές να βάζουν πάντα Τέλος_Αν και να λήγει η υπόθεση
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

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

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2784
  • Πύργος Ηλείας
    • ΚΕΠΛΗΝΕΤ Ηλείας
Απ: Για i απο...
« Απάντηση #17 στις: 17 Μάρ 2009, 11:57:15 μμ »
Αυτό με τη "χωροταξία" Νίκο είναι δική σου θεώρηση. Εγώ θεωρώ ότι αν δεν υπάρχει τέλος _αν εκτελείται μόνο η επόμενη εντολή μετά το τότε (είτε δεξιά είτε απο κάτω).

Ας δούμε ένα άλλο παράδειγμα. Αυτό πώς θα σας φαινόταν:

Αν α>5 τότε χ<-1 y<-2 όσο χ<10 επανάλαβε χ<-χ+1 y<-1 Τέλος_επανάληψης αλλιώς χ<χ+1 Τέλος_αν

Είναι εντάξει; Τι θα είναι αυτό που θα διαχωρίζει τις εντολές μεταξύ τους; Απλά ένας κενός χαρακτήρας ή ούτε καν αυτό; Δηλαδή να θεωρήσουμε ότι η αλγοριθμική γλώσσα είναι ελεύθερης γραφής;

Τότε όμως αυτό πώς θα σας φαινόταν:

όσο χ<
10
επανάλαβε χ<-χ+1 y<-1 Τέλος_
επανάληψης

Δεν είμαι λοιπόν σίγουρος ότι αυτό με τη "χωροταξία" είναι δικιά μου θεώρηση...
Ας δούμε τώρα το βιβλίο. Στις σελ. 33 και 46 αναφέρεται η σύνταξη της Αν με μία μόνο εντολή. Την έχει δεξιά από το τότε. Κατά σύμπτωση; Υπάρχει κάποιο αντιπαράδειγμα που να δείχνει ότι η θεώρηση δεν ισχύει;

Ακόμα και στην αλγοριθμική γραφή κάποια πράγματα θα πρέπει να είναι τακτοποιημένα. Θεωρώ λοιπόν (ξανά) ότι κάθε εντολή πρέπει να μπαίνει σε ξεχωριστή γραμμή. Μια εντολή Αν είναι μία ξεχωριστή εντολή. Αν περιέχει πολλές άλλες εντολές τότε χρειάζεται Τέλος_αν για να δείχνει το τέλος της. Αν δεν θέλουμε να βάλουμε Τέλος_αν τότε θα πρέπει να μπουν όλα σε μία γραμμή για να φαίνεται το που τελειώνει.

Τι σημαίνει "κενή εντολή"  μετά το τότε ; Το τίποτα ; Μετά το τότε η εντολή που υπάρχει είναι η εμφάνισε "Ναι". Δεν οριζεται "κενή εντολή" .

Προφανώς το είπα αστειευόμενος (για αυτό έβαλα και το διαβολάκι!). Αν και δεν είναι και τόσο σίγουρο ότι δεν υπάρχει κενή εντολή!!!!

Δηλαδή αυτό θα ήταν λάθος;

Αν α>10 τότε

αλλιώς
  χ<-5
Τέλος_αν

Άρα αν θεωρήσουμε (ξανά) ότι η όποια εντολή στην Αν χωρίς Τέλος_αν πρέπει να μπαίνει στην ίδια γραμμή τότε ,ναι πράγματι  >:D, στο παράδειγμα

Αλγόριθμος Α1
Διάβασε Ι
Αν Ι<=5 τότε
Εμφάνισε 'Ναι'
Εμφάνισε 'Οχι'
Τέλος Α1

στην Αν δεν εκτελείται καμία εντολή και τα δύο εμφάνισε είναι εκτός της Αν  :o.

Για να το ξεκαθαρίσουμε όμως, κι εγώ δεν υποστηρίζω ότι πρέπει να χρησιμοποιείται, αλλά ίσως το αν είναι σωστό ή όχι, ή το τι θα εμφανίζει να μην είναι τόσο ξεκάθαρο και να είναι τελικά θέμα θεώρησης...  8)
[/quote]

Καρκαμάνης Γεώργιος

  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 1094
Απ: Για i απο...
« Απάντηση #18 στις: 18 Μάρ 2009, 12:20:47 πμ »
Sorry για το προηγούμενο, λάθος.

Αν και έχει περάσει καιρός, τι έχετε να πείτε για τη έλλειψη του Τέλος_Αν στο παράδειγμα στην αρχή της συζήτησης;
Δηλαδή το τμήμα:
 
  Αλγόριθμος Α1
  Διάβασε Ι
  Αν Ι<=5 τότε
      Εμφάνισε 'Ναι'
      Εμφάνισε 'Οχι'
  Τέλος Α1

είναι σωστό;
Αν είναι τι ακριβώς θα εμφανίσει; Τι λέτε;

Θεωρώ πως υπάρχει συντακτικό λάθος καθώς και εγώ είμαι της άποψης πως εάν υπάρχει μια μόνο εντολή προς εκτέλεση, τότε αυτή θα πρέπει να τοποθετείται δίπλα από την λέξη "τότε" στην ίδια γραμμή.

Laertis

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 1465
  • Δεν αντέχω την (συμ)-πίεσηηη .......
    • ΑΣΚΗΣΕΙΣ-ΘΕΜΑΤΑ ΑΕΠΠ
Απ: Για i απο...
« Απάντηση #19 στις: 18 Μάρ 2009, 12:33:10 πμ »

Δηλαδή αυτό θα ήταν λάθος;

Αν α>10 τότε

αλλιώς
  χ<-5
Τέλος_αν

Άρα αν θεωρήσουμε (ξανά) ότι η όποια εντολή στην Αν χωρίς Τέλος_αν πρέπει να μπαίνει στην ίδια γραμμή τότε ,ναι πράγματι  >:D, στο παράδειγμα

Αλγόριθμος Α1
Διάβασε Ι
Αν Ι<=5 τότε
Εμφάνισε 'Ναι'
Εμφάνισε 'Οχι'
Τέλος Α1

στην Αν δεν εκτελείται καμία εντολή και τα δύο εμφάνισε είναι εκτός της Αν  :o.


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

Το μόνο που θα συμφωνήσω μαζί σου Νίκο είναι ότι είναι τελικά θέμα θεώρησης ... ;)
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3165
  • to Iterate is human to Recurse divine
Απ: Για i απο...
« Απάντηση #20 στις: 18 Μάρ 2009, 01:01:34 πμ »
Ας δούμε ένα άλλο παράδειγμα. Αυτό πώς θα σας φαινόταν:

Αν α>5 τότε χ<-1 y<-2 όσο χ<10 επανάλαβε χ<-χ+1 y<-1 Τέλος_επανάληψης αλλιώς χ<χ+1 Τέλος_αν

Το παραπάνω ισοδυναμεί με αυτό

Κώδικας: Text
  1. Αν α>5 τότε
  2.    χ <- 1
  3.    y <-2
  4.    Όσο χ<10 επανάλαβε
  5.       χ<-χ+1
  6.       y<-1
  7.    Τέλος_επανάληψης
  8. αλλιώς
  9.    χ<χ+1
  10. Τέλος_αν
  11.  
Δε βλέπω να υπάρχει κάποιο πρόβλημα

Παράθεση
Τότε όμως αυτό πώς θα σας φαινόταν:
όσο χ<
10
επανάλαβε χ<-χ+1 y<-1 Τέλος_
επανάληψης
Αυτό είναι λάθος διότι ο μεταγλωττιστής δεν θα διαβάσει το λεκτικό Τέλος_επανάληψης αλλά 2 διαφορετικά λεκτικά Τέλος_  και  επανάληψης αφού μεταξύ των δύο λέξεων μεσολαβεί ο χαρακτήρας αλλαγής γραμμής.

Δε νομίζω ότι το θέμα είναι ουσιώδες εκτός αν προκύψουν σημαντικές αμφισημίες. Κακώς ίσως το βιβλίο έχει το παράδειγμα χωρίς Τέλος_Αν. Αν δεν υπήρχε αυτό τώρα δεν θα συζητάγαμε

Πάντως στο βιβλίο καθηγητή λέει ότι

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

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

Κώδικας: Text
  1. ΑΝ συνθήκη ΤΟΤΕ  Χ<-1; Π<-Χ+1; Εμφάνισε Π
  2.  

όπου ; είναι διαχωριστικό εντολών
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

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

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2784
  • Πύργος Ηλείας
    • ΚΕΠΛΗΝΕΤ Ηλείας
Απ: Για i απο...
« Απάντηση #21 στις: 18 Μάρ 2009, 08:34:59 πμ »
Το μόνο που μπορώ να δεχτώ (παραχώρηση κάνω  :) ) από όσα αναφέρεις, θεωρώντας ότι η εντολή μετά το τότε μπαίνει μόνο δεξιά απο το τότε, είναι ότι υπάρχει συντακτικό λάθος και δεν εκτελείται τίποτα.
...........

Το μόνο που θα συμφωνήσω μαζί σου Νίκο είναι ότι είναι τελικά θέμα θεώρησης ... ;)

Εντάξει, συμβιβαζόμαστε σε αυτό!!!  ;)

Άλλωστε, η αρχική μου άποψη ήταν:

Κανονικά δεν είναι σωστό... Ας πούμε ότι έχει συντακτικό λάθος...
« Τελευταία τροποποίηση: 18 Μάρ 2009, 09:01:35 πμ από Νίκος Αδαμόπουλος »

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

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2784
  • Πύργος Ηλείας
    • ΚΕΠΛΗΝΕΤ Ηλείας
Απ: Για i απο...
« Απάντηση #22 στις: 18 Μάρ 2009, 08:49:00 πμ »
Τότε όμως αυτό πώς θα σας φαινόταν:
όσο χ<
10
επανάλαβε χ<-χ+1 y<-1 Τέλος_
επανάληψης
Αυτό είναι λάθος διότι ο μεταγλωττιστής δεν θα διαβάσει το λεκτικό Τέλος_επανάληψης αλλά 2 διαφορετικά λεκτικά Τέλος_  και  επανάληψης αφού μεταξύ των δύο λέξεων μεσολαβεί ο χαρακτήρας αλλαγής γραμμής.

Προφανώς το παράδειγμα το έγραψα για το εξής:

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

Πάντως, δεν νομίζω ότι διαφωνούμε τελικά, αφού μάλλον όλοι δεν θα υιοθετούσαμε τη γραφή:

Αλγόριθμος Α1
Διάβασε Ι
Αν Ι<=5 τότε
Εμφάνισε 'Ναι'
Εμφάνισε 'Οχι'
Τέλος Α1

θεωρώντας ότι το Εμφάνισε 'Ναι' ανήκει στο "τότε"…

Αα, επίσης μάλλον είμαστε εκτός θέματος (Για i απο...)...  :)