Διαγωνίσματα για τη χρονιά 2013-2014

Ξεκίνησε από nikolasmer, 11 Σεπ 2013, 02:46:33 ΜΜ

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

bagelis

Ωραίο ανεβασμένο διαγώνισμα για καλούς - πολύ καλούς. Οι άλλοι καλό είναι να διαλέξουν κάτι πιο απλό... :):):)

Μία απορία: ΘΕΜΑ Α. Α1. γράφει: α > 0 = Ψευδής
έχω την εντύπωση ότι αυτό δεν υποστηρίζεται από τη γλώσσα. Τι λέτε;

apoldem

Δεν βλέπω γιατί να μην υποστηρίζεται. Κανονική λογική έκφραση είναι.
Αυτό που παρατηρώ είναι ότι στην ΓΛΩΣΣΑ δεν δουλεύει σωστά η μετατροπή από μαθηματική έκφραση σε λογική. Ή καλύτερα, δουλεύει, αλλά μόνο την πρώτη φορά ή όταν προηγείται το λογικό ΟΧΙ. Για παράδειγμα το
α ← 2 < 5 = ΑΛΗΘΗΣ = (1 < 2) = ΟΧΙ 2 < 1

περνάει κανονικά, ενώ το ίδιο χωρίς την δεύτερη παρένθεση
α ← 2 < 5 = ΑΛΗΘΗΣ = 1 < 2 = ΟΧΙ 2 < 1

δεν περνάει. Κολλάει στην σύγκριση ΑΛΗΘΗΣ = 1. Είναι θέμα του parser ή της σειράς των κανόνων. Κανονικά και η δεύτερη γραμμή είναι σωστή

itt

Παράθεση από: apoldem στις 13 Ιαν 2014, 01:01:40 ΜΜ
Δεν βλέπω γιατί να μην υποστηρίζεται. Κανονική λογική έκφραση είναι.
Αυτό που παρατηρώ είναι ότι στην ΓΛΩΣΣΑ δεν δουλεύει σωστά η μετατροπή από μαθηματική έκφραση σε λογική. Ή καλύτερα, δουλεύει, αλλά μόνο την πρώτη φορά ή όταν προηγείται το λογικό ΟΧΙ. Για παράδειγμα το
α ← 2 < 5 = ΑΛΗΘΗΣ = (1 < 2) = ΟΧΙ 2 < 1

περνάει κανονικά, ενώ το ίδιο χωρίς την δεύτερη παρένθεση
α ← 2 < 5 = ΑΛΗΘΗΣ = 1 < 2 = ΟΧΙ 2 < 1

δεν περνάει. Κολλάει στην σύγκριση ΑΛΗΘΗΣ = 1. Είναι θέμα του parser ή της σειράς των κανόνων. Κανονικά και η δεύτερη γραμμή είναι σωστή

Βασικά δεν καταλαβαίνω τι εννοείς "κανονικά". Εφόσον η γλώσσα ( ie , το βίβλιο του ΑΕΠΠ) δεν ορίζει πουθενά implicit conversion από αριθμητικό τύπο σε λογικό, "κανονικό" είναι  ότι μια έκφραση της μορφής ΑΛΗΘΗΣ = 1 δεν έχει νόημα στα πλαίσια του ΑΕΠΠ.

bagelis

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

apoldem

Σε καμιά περίπτωση το προηγούμενο σχόλιο μου δεν είχε σκοπό να μειώσει τον διερμηνευτή της ΓΛΩΣΣΑ. Το πρόγραμμα είναι εντυπωσιακά καλό και ξεπερνά κατά πολύ τον σκοπό για τον οποίο υπάρχει (της απλής εκμάθησης). Δεν είναι όμως κακό να βλέπουμε και τα όριά του. Ακόμη και τα μεγάλα ονόματα των compilers της java και της C, έχουν όρια (και μάλιστα παρόμοια με την ΓΛΩΣΣΑ).
Για την λογική έκφραση, το ΑΛΗΘΗΣ = 1 πράγματι δεν έχει νόημα στην ΑΕΠΠ. Εμείς όμως δεν ζητάμε αυτό αλλά το «ΑΛΗΘΗΣ = 1 < 2», το οποίο έχει νόημα. Η ΓΛΩΣΣΑ αν το γράψουμε ως
α <- 1 < 2 = ΑΛΗΘΗΣ

τότε το περνάει. Αν το γράψουμε ανάποδα
α <- ΑΛΗΘΗΣ = 1 < 2

τότε νομίζει ότι πάμε να συγκρίνουμε το ΑΛΗΘΗΣ με το 1. Αν υποχρεώσουμε τον parser να υπολογίσει πρώτα την παρένθεση, τότε το δέχεται κανονικά.
α <- ΑΛΗΘΗΣ = (1 < 2)
\
Επίσης το δέχεται χωρίς λάθος αν προηγείται το ΟΧΙ!!!
α <- ΑΛΗΘΗΣ = ΟΧΙ 1 > 2

Επαναλαμβάνω, δεν σημαίνει τίποτα για την αξιοπιστία της ΓΛΩΣΣΑ. Είναι για να 'χουμε να ασχολούμαστε κι εμείς οι πληροφορικοί. Φυσικά από θεωρητικής πλευράς οι εκφράσεις «ΑΛΗΘΗΣ = 1 < 2» και «1 < 2 = ΑΛΗΘΗΣ» είναι και οι δύο σωστές και ισοδύναμες, άσχετα με το τι κάνει η ΓΛΩΣΣΑ.
--
bagelis έχεις απόλυτο δίκιο. Οι εκφράσεις που έγραψα στο προηγούμενο post  δεν έχουν καμία σχέση με το πνεύμα των εξετάσεων ούτε και προσφέρουν τίποτα στον μαθητή. Κουβέντα να γίνεται...

alkisg

@apoldem: δεν είναι θέμα αδυναμίας του Διερμηνευτή, επίτηδες έχει υλοποιηθεί έτσι με βάση την προτεραιότητα των τελεστών.
Άλλο παράδειγμα:
Κώδικας: ΓΛΩΣΣΑ
ΠΡΟΓΡΑΜΜΑ Δοκιμή
ΑΡΧΗ
  ΓΡΑΨΕ 1 = 1 = ΑΛΗΘΗΣ  ! Αποδεκτό
  ΓΡΑΨΕ ΑΛΗΘΗΣ = 1 = 1  ! Συντακτικό λάθος
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


Διαβάζουμε από αριστερά προς τα δεξιά την πρώτη εντολή:
"Το 1 είναι ίσο με 1, αληθές. Και το αποτέλεσμα της σύγκρισης, ΑΛΗΘΗΣ, είναι ίσο με ΑΛΗΘΗΣ". Μια χαρά σωστή συντακτικά έκφραση.
Διαβάζουμε από αριστερά προς τα δεξιά την δεύτερη εντολή:
"Το ΑΛΗΘΗΣ είναι ίσο με 1... ωπ, δεν γίνεται, δεν υπάρχει σύγκριση".

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

Σχετική σελίδα της βοήθειας: https://alkisg.mysch.gr/ΓΛΩΣΣΑ/Τελεστές/

itt

ΠαράθεσηΓια την λογική έκφραση, το ΑΛΗΘΗΣ = 1 πράγματι δεν έχει νόημα στην ΑΕΠΠ. Εμείς όμως δεν ζητάμε αυτό αλλά το «ΑΛΗΘΗΣ = 1 < 2», το οποίο έχει νόημα.

Γιατί να έχει νόημα, αφού οι λογικοί τελεστές είναι left associative;

Το ΑΛΗΘΗΣ = 1 < 2 είναι σαν να έχεις γράψει  (AΛΗΘΗΣ = 1 ) < 2 το οποίο δεν έχει νόημα στην Γλώσσα.

ΠαράθεσηΦυσικά από θεωρητικής πλευράς οι εκφράσεις «ΑΛΗΘΗΣ = 1 < 2» και «1 < 2 = ΑΛΗΘΗΣ» είναι και οι δύο σωστές και ισοδύναμες, άσχετα με το τι κάνει η ΓΛΩΣΣΑ.

Δεν ξέρω τι εννοείς με το "από θεωρητικής πλευρἀς". Aπό θεωρητική (και από πρακτικής;) πλευράς, εξαρτάται. Εξάρταται όπως είδες από το κατα πόσον ορίζεται implicit conversion από ακέραιο σε λογικό τύπο και από το precedence των τελεστών.

Πρακτικά στην C++ ας πούμε, η έκφραση

auto expr = true == 1 < 2;


γίνεται compiled κανονικά (με -Wall καταφέρνεις να πάρεις ένα warning: suggest parentheses around comparison in operand of '==' [-Wparentheses] )

αλλά στην Haskell δεν γίνεται compiled.


apoldem

Ειλικρινά ζητώ συγνώμη για το αρχικό σχόλιο. Φάνηκε σαν να ήθελα να κατηγορήσω την ΓΛΩΣΣΑ, πράγμα πέρα για πέρα λάθος. Χρησιμοποιώ την ΓΛΩΣΣΑ και το Epoptes καθημερινά και είναι και τα δύο εξαιρετικά προγράμματα! Το σφάλμα είναι αποκλειστικά δικό μου.
Το θέμα ξεκίνησε σαν καλαμπούρι για τις λογικές εκφράσεις. Δεν έχει ούτε εκπαιδευτική ούτε καμία άλλη σημασία. Ούτε και ο τρόπος που γράφω τις λογικές εκφράσεις στα σχόλιά μου, υπονοεί ότι αυτός είναι ο προτεινόμενος τρόπος (χωρίς δηλαδή παρενθέσεις). Προσωπικά δεν θα διακινδύνευα να γράψω καμία τέτοια έκφραση χωρίς παρενθέσεις ακόμη και στον πιο έξυπνο compiler του κόσμου. Επαναλαμβάνω, ένα καλαμπούρι ήταν.
Νομίζω δίνεται στους διάφορους compilers μαγικές ικανότητες που δεν τις έχουν. Η σύγκριση «λογική_έκφραση=λογική_τιμή» είναι ίδια με το «λογική_τιμή=λογική_έκφραση», επειδή η ισότητα είναι αντιμεταθετική στα μαθηματικά και στην κοινή λογική. Το ότι η μία αναγνωρίζεται και η άλλη όχι δεν σημαίνει τίποτα. Είναι και οι δύο σωστές. Οι "μεγάλες" γλώσσες C και Java (και πιθανόν και άλλες), χτίζουν συντακτικό δέντρο για την λογική έκφραση και έτσι πιάνουν και κάποιες πιο ιδιαίτερες περιπτώσεις. Ακόμη και το συντακτικό δέντρο κάνει λάθη σε περιπτώσεις αμφισημίας (ανάλογα με τον τρόπο που χτίζεται). Γι' αυτό υπάρχουν οι παρενθέσεις.
Ζητώ και πάλι συγνώμη. Δεν ήθελα να θίξω κανέναν και ειδικά τον συγγραφέα της ΓΛΩΣΣΑ στον οποίο τρέφω απεριόριστη εκτίμηση.

alkisg

Μην ανησυχείς καθόλου δεν θίχτηκε κανείς, ενημερωτικά τα γράφω!
Και ο Διερμηνευτής χτίζει συντακτικό δέντρο και για τις εκφράσεις και για τις εντολές. Αναγκαστικά, για να υλοποιηθεί σωστά η ΓΛΩΣΣΑ, ορίστηκε πρώτα η γραμματική της και μετά υλοποιήθηκε κανονικά με λεκτικό και συντακτικό αναλυτή και εσωτερικές δεντρικές αναπαραστάσεις και όλα τα σχετικά.

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

itt

Παράθεση από: apoldem στις 14 Ιαν 2014, 03:37:32 ΜΜ
Νομίζω δίνεται στους διάφορους compilers μαγικές ικανότητες που δεν τις έχουν.

Σε ποιες αναφέρεσαι; Δεν βλέπω τι το μαγικό έχει ειπωθεί.

Παράθεση από: apoldem στις 14 Ιαν 2014, 03:37:32 ΜΜ
Η σύγκριση «λογική_έκφραση=λογική_τιμή» είναι ίδια με το «λογική_τιμή=λογική_έκφραση», επειδή η ισότητα είναι αντιμεταθετική στα μαθηματικά και στην κοινή λογική.

Σαφώς και είναι η ίδια,το 1 στο "ΑΛΗΘΗΣ = 1" όμως δεν είναι ούτε λογική έκφραση ούτε λογική τιμή.

Παράθεση από: apoldem στις 14 Ιαν 2014, 03:37:32 ΜΜ
Το ότι η μία αναγνωρίζεται και η άλλη όχι δεν σημαίνει τίποτα. Είναι και οι δύο σωστές. Οι "μεγάλες" γλώσσες C και Java (και πιθανόν και άλλες), χτίζουν συντακτικό δέντρο για την λογική έκφραση και έτσι πιάνουν και κάποιες πιο ιδιαίτερες περιπτώσεις. Ακόμη και το συντακτικό δέντρο κάνει λάθη σε περιπτώσεις αμφισημίας (ανάλογα με τον τρόπο που χτίζεται). Γι' αυτό υπάρχουν οι παρενθέσεις.

Σημαινεί ότι πολύ απλά η Haskell δεν επιτρέπει κανένα implicit conversion σε αντίθεση με  την C και την  Java. Αν και δεν είμαι σίγουρος αν αναφέρεσαι στο conversion του τύπου. Πάντως σαφώς και παίζει ρόλο σε αυτό που συζητάμε.

nikolasmer

#25
Παραθέτω αποσπασματικά μερικές από τις λύσεις σε ορισμένα θέματα του παραπάνω 3ου διαγωνίσματος.
Στο Α1 παραθέτω την λύση όπως την είχα στο μυαλό μου εξαρχής. Ορισμένοι μου έβγαλαν το Α1β με διαφορετικό τρόπο με μια εντολή εκχώρισης τιμής. Όλες οι λύσεις που παράγουν το ίδιο αποτάλεσμα φυσικά είναι αποδεκτές.
Στο Θέμα Γ παραθέτω μια δικιά μου λύση και πάλι όπως την είχα εγώ στο μυαλό μου όταν έβγαζα το θέμα. Αν υπάρχει κάποια ασάφεια ή λάθος στον κώδικα ας ειδιποιήσει κάποιος για να αλαχθεί ο κώδικας. Επίσης αν κάποιος έχει άλλη λύση θα είναι πολύ ωραίο να τη μοιραστεί.
Ο κώδικας είναι εξ΄ολοκλήρου γραμμένος στον Διερμηνευτή της ΓΛΩΣΣΑΣ.
Ευχαριστώ όλους για τις παρατηρήσεις. Στις επόμενες ημέρες και οι υπόλοιπες ΕΝΔΕΙΚΤΙΚΕΣ λύσεις.

p.s. Αυτό που με εντυπωσίασε στις λύσεις είναι του Α6 όπου και περίμενα μια λύση με 9-10 επαναλήψεις και η οποία είχα την εντύπωση οτι ήταν μοναδική και όντως δύσκολη, παρόμοια με ενα θέμα πανελληνίων των τελευταίων ετών. Αλλά με μια επανάληψη που θα γίνει 20 φορές πετυχαίνει κάποιος το ίδιο αποτέλεσμα "περνώντας" τον ίδιο πίνακα δυο φορές. Ούτε καν με πήγε εκεί το μυαλό. :D
 
ΔΙΟΡΘΩΣΗ: Και φυσικά υπήρχε λάθος στην αρχική έκδοση της λύσης του θέματος Γ. Οπότε ανέβασα μια καινούρια.
Μερεντίτης Νικόλαος
Πληροφορικός

nikolasmer

Οι υπόλοιπες λύσεις του παραπάνω 3ου διαγωνίσματος.
Στο Α4 εχω την εντύπωση πως και η δεύτερη λύση που παραθέτω στον κώδικα, είναι σωστή.
Στο Α6 το οποίο θεωρούσα δύσκολο, παραθέτω 3 λύσεις στον κώδικα. Η πρώτη είναι αυτή που είχα εγώ στο μυαλό μου και οι άλλες 2 είναι από μαθητές. Πολύ όμορφες και οι δυο.
Τέλος υπάρχει μια ενδεικτική λύση του Θέματος Δ.
Ελπίζω να μην έχω κάνει καμία πατάτα και πάλι.

Θα ακολουθήσουν όλες οι ενδεικτικές λύσεις του διαγωνίσματος σε ενα αρχείο word.
Μερεντίτης Νικόλαος
Πληροφορικός

nikolasmer

#27
Καλησπέρα σε όλους.
Πιο κάτω επισυνάπτεται το έγγραφο που έχει συγκεντρωμένες όλες τις απαντήσεις του 3ου διαγωνίσματος.
Επιπλέον σε ορισμένους μαθητές μου άλλαξα το Θέμα Γ και Δ με κάτι πιο εύκολο όπως επίσης και στη θέση του ερωτήματος Α6 μπήκε ενα δεύτερο ερώτημα θεωρίας Α5 β) για να ελαφρυνθεί λίγο η όλη κατάσταση. Τα υπόλοιπα παρέμειναν ίδια.
Ολόκληρο το (πιο εύκολο) θέμα (με τις αλλαγές που ανέφερα) επισυνάπτεται και αυτό παρακάτω όπως επίσης και οι λύσεις του μαζί με τον κώδικα του θέματος Δ στο Διερμηνευτή.
Αν και πάλι υπάρχουν προβλήματα και αβλεψίες στον κώδικα θα ήθελα τις παρατηρήσεις σας.
Ευχαριστώ όλους.

@edit:(6-3-2014)
Κοιτώντας τις λύσεις που ανέβασα είδα μια πατάτα από τις πολλές που κάνω. Στο ερώτημα Α1. α) ανέβασα σαν λύση, την εκφώνηση της άσκησης. :-[
Οπότε η απάντησή της είναι ο εξής κώδικας:
Διάβασε α
Αν α > 0 τότε
  κ ← Ψευδής
αλλιώς
  κ ← Αληθής
Τέλος_αν
Εμφάνισε κ


Συγνώμη για το παραπάνω.

AEPP ALIVE FOREVER 
Μερεντίτης Νικόλαος
Πληροφορικός

nikolasmer

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

Μεγάλο μέρος του κώδικα του Α5 ερωτήματος παρθηκε από τις συζητήσεις
https://alkisg.mysch.gr/steki/index.php?topic=2685.0
και
https://alkisg.mysch.gr/steki/index.php?topic=239.msg64049#msg64049

Λύσεις στο προσεχές διάστημα.
Ευχαριστώ και καλό κουράγιο σε όλους.


AEPP ALIVE FOREVER

Μερεντίτης Νικόλαος
Πληροφορικός

twisted

Ευχαριστούμε για άλλο ένα πολύ ωραίο διαγώνισμα!!!!  1 παρατήρηση και 1 ερώτηση έχω.

Η παρατήρηση αφορά την ερώτηση θεωρίας μιας και νομίζω ότι για αυτά που ζητάς είναι λίγες οι 6 μονάδες.
Η ερώτηση τώρα. Δεν είναι λίγο μεγάλη η εκφώνηση του θέματος Γ; Μόνο εμένα γκρινιάζουν που τα θέματα που τους δίνω είναι 6 και 7 σελίδες;;;;  :-\