Επαναληπτικές εξετάσεις Σεπτεμβρίου

Ξεκίνησε από Akis73, 11 Σεπ 2025, 05:46:22 ΜΜ

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

gpapargi

Παράθεση από: pgrontas στις 22 Σεπ 2025, 09:20:58 ΜΜΠρόσεξε Νίκο, γιατί οι απαντήσεις του 'ΑΙ' ειδικά εφόσον είναι στα ελληνικά μπορεί να είναι επηρεασμένες (το λέω κομψά) από  τις συζητήσεις στο στέκι και ακόμα χειρότερα από τα βιβλία πληροφορικής που διδάσκουμε >:D >:D  >:D
Σαν το ανέκδοτο με τους ινδιάνους και τον καιρό  :D
Γιώργος Παπαργύρης

alkisg

Γκουγκλάρω για: is symbol table syntactic or semantic

Το Gemini λέει: A symbol table is primarily a semantic data structure, though it's used and built in conjunction with other phases of a compiler. It records information about program symbols (like variables and functions) and is created during the semantic analysis phase because that's when enough meaning and context is known to describe a symbol.

evry

Εγώ στέκομαι στο εξής σκεπτικό.
Συντακτικό λάθος είναι αυτό που παραβιάζει τη σύνταξη , άρα αυτό που παραβιάζει την γραμματική.
Η απουσία δήλωσης μεταβλητής δεν είναι θέμα της γραμματικής αλλά της σημασιολογίας και ο έλεγχος γίνεται σε επόμενο επίπεδο.
Απλά υπάρχει σύγχυση μεταξύ των όρων syntax error και compile-time error, όχι στα βιβλία μας ή στην Ελλάδα αλλά γενικότερα.

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

ΠαράθεσηΟ συντακτικός κανόνας που ελέγχει αν μια μεταβλητή έχει δηλωθεί προηγουμένως δεν είναι απλώς ένας συντακτικός κανόνας (syntax), αλλά σχετίζεται με τον σημασιολογικό έλεγχο (semantic analysis) κατά τη φάση της μεταγλώττισης.
Πιο συγκεκριμένα:
  • Κατά τον σημασιολογικό έλεγχο, το compiler ελέγχει τον πίνακα συμβόλων (symbol table) που έχει δημιουργήσει από τις δηλώσεις μεταβλητών.
  • Όταν βρει μια χρήση μεταβλητής, ελέγχει αν αυτή υπάρχει στον πίνακα συμβόλων, δηλαδή αν έχει δηλωθεί ήδη.
  • Αν η μεταβλητή δεν υπάρχει στον πίνακα, τότε παράγεται σφάλμα δήλωσης (undeclared variable error).
  • Αυτός ο έλεγχος είναι απαραίτητος για την αποφυγή χρήσης μη δηλωμένων μεταβλητών, που θεωρείται λάθος στον προγραμματισμό.
Το BNF δεν εκφράζει συνήθως αυτόν τον έλεγχο, διότι ο BNF ορίζει μόνο τη σύνταξη (grammar) και όχι τη σημασιολογία (meaning). Ο εν λόγω κανόνας ανήκει στη σημασιολογική ανάλυση, η οποία ελέγχει τη συνέπεια και τη σωστή χρήση των δηλώσεων πέραν της σύνταξης.
Συνοπτικά:
  • Ο BNF θα περιέγραφε τη σύνταξη της δήλωσης ή της χρήσης μεταβλητής.
  • Ο σημασιολογικός έλεγχος (που δεν εκφράζεται με BNF) θα έλεγχε αν η μεταβλητή που χρησιμοποιείται έχει δηλωθεί πριν.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

alkisg

Εγώ θα συμφωνήσω με τον Akis73 παραπάνω:

Παράθεση από: Akis73 στις 22 Σεπ 2025, 02:12:01 ΜΜΚαταλαβαίνω τι λες, αλλά τι να λέγαμε σφάλμα μεταγλώττισης;

Ναι μια χαρά είναι το "σφάλμα μεταγλώττισης", δεν χρειάζεται να ζαλίζουμε τους μαθητές με τις υποκατηγορίες "λεκτικής / συντακτικής / σημασιολογικής ανάλυσης".

Σε μάθημα Πανεπιστημίου για compilers, ΟΚ, έχει νόημα, αλλά στη Β/θμια, όχι...

evry

What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

pgrontas

#35
Μόνο που δυστυχώς αυτή η διατύπωση δεν υπάρχει στα βιβλία των μαθητών (το κοντινότερο είναι λάθη κατά την υλοποίηση της 13.1)

Σε κάθε περίπτωση αυτή η συζήτηση ήταν αρκετά διαφωτιστική για μένα. Με μια μικρή αναζήτηση (όχι AI - παλιό καλό cs.stackexchange) βρήκα ότι τελικά ακόμα και τι ονομάζουμε σύνταξη και γραμματική είναι αρκετά συγκεχυμένο -  τις συζητήσεις που κάνουμε εδώ, τις έκαναν τη δεκαετία του 60 κατά τη δημιουργία των γλωσσών προγραμματισμού.
Δημιουργήθηκαν λοιπόν γραμματικές (π.χ.  Van Wijngaarden grammar για την ALGOL68) οι οποίες μπορούσαν να εκφράσουν εκτεταμένη πληροφορία που η BNF δεν θα μπορούσε να ελέγξει ως σημασιολογική (μεταξύ των οποίων και η δήλωση μεταβλητής ακόμα και ο έλεγχος τύπων). Αυτές δεν προχώρησαν μάλλον λόγω προβλημάτων απόδοσης (εικάζω).
Έτσι βγάζω το συμπέρασμα ότι τα όρια της σύνταξης δεν είναι τόσο αυστηρά καθορισμένα (όχι μόνο στην υλοποίηση αλλά και στον ορισμό).

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

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

Παράθεση από: evry στις 23 Σεπ 2025, 09:37:42 ΠΜΝίκο εδώ ισχύει το έφτασες στην πηγή και δεν ήπιες νερό.
Στο σημείο που έφτασες έπρεπε να ρωτήσεις ποιο λάθος στην σύνταξη παραβιάζει και να σου διατυπώσει τον κανόνα που παραβιάζεται αυστηρά σε Backus-Naur form, να δούμε τι θα κάνει.

Συνεχίζοντας την αρχική στιχομυθία με το GEMINI:

To λάθος της μη δήλωσης μιας μεταβλητής ποιον συντακτικό κανόνα παραβιάζει ?

Το λάθος της μη δήλωσης μιας μεταβλητής παραβιάζει τον συντακτικό κανόνα που απαιτεί τη δήλωση μιας μεταβλητής πριν από τη χρήση της.
Αυτός ο κανόνας είναι θεμελιώδης στις περισσότερες γλώσσες προγραμματισμού με στατική τυποποίηση (statically typed languages) όπως η C++, η Java και η C#. Ο σκοπός του είναι να ενημερώσει τον μεταγλωττιστή για:

  • Το όνομα της μεταβλητής: Με ποιο αναγνωριστικό θα την αναγνωρίζει ο κώδικας.
  • Τον τύπο δεδομένων της: Τι είδους τιμές θα αποθηκεύει (π.χ., ακέραιος, δεκαδικός, χαρακτήρας), κάτι που καθορίζει και το μέγεθος της μνήμης που θα δεσμευτεί.
Όταν παραλείπεται η δήλωση, ο μεταγλωττιστής συναντά ένα άγνωστο όνομα και δεν μπορεί να προχωρήσει, καθώς αγνοεί τον τύπο της μεταβλητής, το μέγεθός της, και τη θέση της στη μνήμη. Αυτή η παράβαση του κανόνα οδηγεί στο γνωστό σφάλμα χρόνου μεταγλώττισης (compile-time error).


Μπορούμε να διατυπώσουμε αυτόν τον κανόνα αυστηρά σε Backus-Naur form ?

Η Backus-Naur Form (BNF) είναι μια μετα-γλώσσα που χρησιμοποιείται για την περιγραφή της γραμματικής μιας γλώσσας. Δεν μπορεί να εκφράσει απευθείας σημασιολογικούς κανόνες, όπως το ότι μια μεταβλητή πρέπει να έχει δηλωθεί πριν χρησιμοποιηθεί.
Ο κανόνας της δήλωσης πριν από τη χρήση είναι ένας σημασιολογικός κανόνας, όχι ένας συντακτικός. Η BNF περιγράφει μόνο το "τι φαίνεται σωστό" συντακτικά.




Παράδειγμα

Ας δούμε γιατί αυτό είναι δύσκολο με ένα απλό παράδειγμα.
Αν είχαμε έναν κανόνα BNF για έναν όρο (

<expression>
) και μια δήλωση (

<declaration>
) που θα ήταν κάπως έτσι:

<program> ::= <statement>+
<statement> ::= <declaration> | <assignment>
<declaration> ::= "int" <identifier> ";"
<assignment> ::= <identifier> "=" <expression> ";"

Σύμφωνα με αυτή τη γραμματική, το παρακάτω κομμάτι κώδικα είναι συντακτικά σωστό:

x = 5;
int x;

Ο μεταγλωττιστής θα το αναγνώριζε ως έγκυρη ακολουθία δηλώσεων και αναθέσεων. Ωστόσο, λογικά (και άρα σημασιολογικά), είναι λάθος, καθώς η μεταβλητή

x
χρησιμοποιείται πριν δηλωθεί.
Η BNF δεν έχει τη δυνατότητα να "θυμάται" ποιες μεταβλητές έχουν δηλωθεί ή να ελέγξει αν μια μεταβλητή που χρησιμοποιείται σε μια ανάθεση (

<assignment>
) υπάρχει ήδη σε μια προηγούμενη δήλωση (

<declaration>
). Αυτό το επίπεδο ελέγχου γίνεται από τον μεταγλωττιστή στο στάδιο του σημασιολογικού ελέγχου, μετά την ανάλυση της σύνταξης.



Γιαννούλης Γιώργος

Παράθεση από: NIKOS_KALYVAS στις 12 Σεπ 2025, 01:47:39 ΠΜΑγαπητοί συνάδελφοι καλή σχολική χρονιά με υγεία και δημιουργικότητα.

Κάνω ανάρτηση τα θέματα και τις ενδεικτικές΄απαντήσεις.

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

ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΩΝ 2025

https://www.minedu.gov.gr/publications/docs2025/panelladikes_2025_septemvrios/%CE%91%CE%9D%CE%91%CE%A0%CE%A4%CE%A5%CE%9E%CE%97_%CE%95%CE%A6%CE%91%CE%A1%CE%9C%CE%9F%CE%93%CE%A9%CE%9D_%CE%95%CE%A0%CE%91%CE%9D%CE%91%CE%9B_2025.pdf


ΕΝΔΕΙΚΤΙΚΕΣ  ΑΠΑΝΤΗΣΕΙΣ

https://drive.google.com/file/d/1bn_KhlrL4hObON4ublta0th0q-Tm6kFw/view?usp=sharing





Στις ενδεικτικές απαντήσεις για το Γ θέμα αν έλειπε το παρακάτω κομμάτι θα κόβατε μονάδες;
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
     ΔΙΑΒΑΣΕ ΕΠ ! η επιλογή από το μενού
ΜΕΧΡΙΣ_ΟΤΟΥ ΕΠ>=1 ΚΑΙ ΕΠ<=3

Το ερώτημα μου είναι γιατί το θέμα ζητάει να κάνει έλεγχο εγκυρότητας. Οκ, αλλά γιατί να κάνεις επιπλέον επανάληψη για έλεγχο εγκυρότητας, αφού αν ο χρήστης δώσει κάτι διαφορετικό από 1,2,3 υπάρχει ήδη η επανάληψη που δεν θα μπει σε κανένα από τα ΑΝ και θα του ξαναδείξει και το μενού.
Οπότε κατά τη γνώμη μου το ερώτημα αυτό είναι ήδη λυμένο με τον υπόλοιπο κώδικα όπως έχει γραφτεί.
Θα ήθελα να ακούσω τις απόψεις σας.

petrosp13

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

pgrontas

Εγώ δεν θα έκοβα.

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

petrosp13

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

evry

επιτέλους ήρθε ή ώρα να πω τη φράση που με εκνευρίζει απίστευτα:

Κάθε επιστημονικά τεκμηριωμένη λύση είναι αποδεκτή

ότι και να σημαίνει αυτό  :D :D :D :D :D :D :D
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

ssimaiof

Παράθεση από: petrosp13 στις 25 Σεπ 2025, 03:02:29 ΜΜΑπλά ο μαθητής αγνόησε εντελώς κάτι που έλεγε ρητά η εκφώνηση και εκεί είναι η ένσταση μου
Νομίζω ότι δεν το πρόσεξε και όχι ότι πήρε την πρωτοβουλία να το αγνοήσει επειδή θα εμφανιστεί και πάλι το μενού
Κι επειδή βαθμολογούνται καλώς ή κακώς με βάση αυτά που ζητάει η εκφώνηση, ο έλεγχος εγκυρότητας δεν έγινε...
Από που φαίνεται ότι αγνόησε την εκφώνηση; Η λύση του δεν λειτουργεί σύμφωνα με την εκφώνηση; Επιτρέπονται μη έγκυρες τιμές;
Βαθμολογούμε μόνο αυτά που βλέπουμε στο γραπτό. Δεν γνωρίζουμε και δεν είναι ασφαλές να υποθέσουμε (πόσο μάλλον να βαθμολογήσουμε) το τι είχε ή δεν είχε στο μυαλό του ο μαθητής.
Φυσικά και δεν πρέπει να χάσει κανένα μόριο.
Σταύρος Σημαιοφορίδης