(ψηφοφορία) Τιμές πίνακα χαρακτήρων και εισαγωγικά

Ξεκίνησε από gbougioukas, 19 Ιαν 2019, 07:38:08 ΜΜ

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

Πως θα βαθμολογούσατε τις δύο απαντήσεις της άσκησης;

Άριστα σε καμία
0 (0%)
Άριστα μόνο στην 1η
0 (0%)
Άριστα μόνο στην 2η
0 (0%)
Άριστα και στις δύο
8 (100%)

Σύνολο ψηφοφόρων: 8

pgrontas

Παράθεση από: gbougioukas στις 22 Ιαν 2019, 01:04:44 ΠΜ
Αδυνατώ να καταλάβω πως είναι δυνατόν να συγχέεται μια άσκηση της μεταγλώσσας με το αποτέλεσμα στην οθόνη της εντολής εξόδου της γλώσσας. Ποτέ δεν είδα debugger να το κάνει αυτό.  Π.χ του pycharm
Δεν υπάρχει καμία σύγχυση. Το αποτέλεσμα της ΓΡΑΨΕ είναι ακριβώς ό,τι υπάρχει στη μνήμη (όχι τα ακριβή bytes αλλά ό,τι αντιλαμβάνεται ο μαθητής πως μπαίνει στο κουτάκι). Εφόσον λοιπόν στην άσκηση σου μας ζητάς τα περιεχόμενα του κουτιού, αυτά θα είναι ό,τι εμφανίσει η ΓΡΑΨΕ.
Δηλαδή ΓΡΑΨΕ και περιεχόμενα έχουν σχέση 1 προς 1. Αυτό είναι, κατά τη γνώμη μου, η ασφαλέστερη και απλούστερη ερμηνεία στο συγκεκριμένο θέμα εφόσον δεν υπάρχει τυπικός ορισμός. Οτιδήποτε άλλο έχει μεγάλο κίνδυνο να μπερδέψει.
Προσωπικά θεωρώ ότι αυτό ήταν το κίνητρο του Άλκη (και του Στάθη) ώστε να επιλέξουν στους διερμηνευτές τους να αναπαραστήσουν χωρίς εισαγωγικά τα περιεχόμενα των αλφαριθμητικών τιμών στον πίνακα μεταβλητών. Αλλά ας μην προτρέχω - αφού έχουμε τον Άλκη και συμμετέχει στη συζήτηση ας μας απαντήσει ο ίδιος.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

gbougioukas

Παράθεση από: pgrontas στις 22 Ιαν 2019, 02:13:32 ΜΜ
Αυτό είναι, κατά τη γνώμη μου, η ασφαλέστερη και απλούστερη ερμηνεία στο συγκεκριμένο θέμα εφόσον δεν υπάρχει τυπικός ορισμός. Οτιδήποτε άλλο έχει μεγάλο κίνδυνο να μπερδέψει.

Εφόσον δεν υπάρχει τυπικός ορισμός και θεωρείς την θέση σου ερμηνεία (όπως άλλωστε θεωρώ κι εγώ τη δική μου), επιμένεις ότι είναι σωστό να κόψεις βαθμούς (έστω και τους ελάχιστους) από την απάντηση 2;
Γιώργος Μπουγιούκας
Computer Science (BSc), Bioinformatics & Neuroinformatics (MSc)
https://gbougioukas.wordpress.com/
https://apothesis.eap.gr/handle/repo/54953

gbougioukas

@Λάμπρος Παπαδόπουλος

String str = "MAPIA";
System.out.println(String.valueOf(str));

Βάλε breakpoint στην δεύτερη γραμμή, επίλεξε το String.valueOf(str) και δες τι θα σου πει ο debugger: "ΜΑΡΙΑ"
Γιώργος Μπουγιούκας
Computer Science (BSc), Bioinformatics & Neuroinformatics (MSc)
https://gbougioukas.wordpress.com/
https://apothesis.eap.gr/handle/repo/54953

pgrontas

Παράθεση από: gbougioukas στις 22 Ιαν 2019, 02:51:44 ΜΜ
Εφόσον δεν υπάρχει τυπικός ορισμός και θεωρείς την θέση σου ερμηνεία (όπως άλλωστε θεωρώ κι εγώ τη δική μου), επιμένεις ότι είναι σωστό να κόψεις βαθμούς (έστω και τους ελάχιστους) από την απάντηση 2;
Επίτρεψε μου όμως οτι παρόλο που και οι δύο είναι ερμηνείες, θεωρώ τη δική μου πιο χρήσιμη (λόγω απλότητας) και πιο κοντά στο βιβλίο (λόγω της αντιστοιχίας με τη ΓΡΑΨΕ).
Οπότε εμμένω στην άποψη μου, ότι (ελλείψει άλλων δεδομένων) ο μαθητής που συμπληρώνει τα κουτάκι με εισαγωγικά μάλλον θα τα βάλει και στην ΓΡΑΨΕ ή δεν έχει καταλάβει γιατί τα βάζουμε στον πηγαίο κώδικα. Η απάντηση είναι υποθετική αλλά και η άσκηση (όπως δόθηκε) είναι υποθετική όπως έγραψες παραπάνω.
ΥΓ:
Μου κάνει εντύπωση πάντως που κοιτάς όλους τους Διερμηνευτές εκτός από τον επίσημο.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

alkisg

#19
Παράθεση από: pgrontas στις 22 Ιαν 2019, 02:13:32 ΜΜ
Προσωπικά θεωρώ ότι αυτό ήταν το κίνητρο του Άλκη (και του Στάθη) ώστε να επιλέξουν στους διερμηνευτές τους να αναπαραστήσουν χωρίς εισαγωγικά τα περιεχόμενα των αλφαριθμητικών τιμών στον πίνακα μεταβλητών. Αλλά ας μην προτρέχω - αφού έχουμε τον Άλκη και συμμετέχει στη συζήτηση ας μας απαντήσει ο ίδιος.

Ισχύει. Με βάση τις τρέχουσες εμπειρίες μου από τα τότε IDE, μου φάνηκε συνηθέστερο και προτιμότερο το να εμφανίζεται η τιμή όπως και στη ΓΡΑΨΕ.
Αλλά ξαναλέω ότι δεν υπάρχει κάποιο standard σε αυτό. Αν γκουγκλάρετε για "debugger inspect variable" και πατήσετε "Εικόνες", θα δείτε είτε σαν τη ΓΡΑΨΕ, είτε σε μορφή πηγαίου κώδικα "object.toSource() ή toString() ή str()", είτε ακόμα και με ξεχωριστή στήλη όπου αναφέρεται ρητά ο τύπος δεδομένων κάθε μεταβλητής.

Έχει νόημα να υιοθετήσουμε εμείς ένα αυθαίρετο πρότυπο και να βαθμολογούμε με βάση αυτό, όταν δεν έχει γίνει ούτε στο βιβλίο ούτε καθολικά από τα IDEs; Δε νομίζω.

pgrontas

Παράθεση από: alkisg στις 27 Νοε 1974, 10:33:40 ΜΜ
Έχει νόημα να υιοθετήσουμε εμείς ένα αυθαίρετο πρότυπο και να βαθμολογούμε με βάση αυτό, όταν δεν έχει γίνει ούτε στο βιβλίο ούτε καθολικά από τα IDEs; Δε νομίζω.
Επιχειρηματολόγησα πριν αλλά και παρακάτω γιατί δεν θεωρώ το συγκεκριμένο πρότυπο αυθαίρετο, αλλά (παρά το ότι δεν αναφέρεται ρητά) συνέπεια της λειτουργίας της ΓΡΑΨΕ.

Στο συγκεκριμένο παράδειγμα λοιπόν προτιμώ να κατευθύνω τους μαθητές μου στο να γράφουν τα αλφαριθμητικά χωρίς εισαγωγικά μέσα στα κουτάκια (είτε προβλέποντας, είτε διορθώνοντας), γιατί αυτό:
   1. Προκύπτει από την ΓΡΑΨΕ
   2. Είναι απλούστερο.
   3. Ακολουθείται από το επίσημο λογισμικό του υπουργείου.
   4. Προκύπτει από παραδείγματα του βιβλίου που είναι εκτός ύλης (σελ. 81) και παλιότερα θέματα πανελληνίων (πχ. Επαναληπτικές 2012).

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

Λάμπρος Παπαδόπουλος

@gbougioukas

Έχεις δίκιο που ζητάς να δω τον debugger αφού αμφισβητείς το αποτέλεσμα της εντολής εξόδου.
Το έκανα λοιπόν και ο debugger του NetBeans όντως εμφανίζει στη στήλη value "ΜΑΡΙΑ". Έχει όμως
ένα κουμπί ακριβώς δίπλα το οποίο ανοίγει ένα παράθυρο με τίτλο value και το ΜΑΡΙΑ (χωρίς εισαγωγικά)

Το παρακάτω απόσπασμα νομίζω ότι είναι σαφές. 

A string literal or anonymous string is a type of literal in programming for the representation of a string value within the source code of a computer program. Most often in modern languages this is a quoted sequence of characters (formally "bracketed delimiters"), as in x = "foo", where "foo" is a string literal with value foo – the quotes are not part of the value, and one must use a method such as escape sequences to avoid the problem of delimiter collision and allow the delimiters themselves to be embedded in a string.

https://en.wikipedia.org/wiki/String_literal#Bracketed_delimiters

alkisg

Δεν είναι μόνο τα αλφαριθμητικά. Αν δηλαδή ζητήσουμε "ποια είναι η τιμή του πίνακα Α", τι θέλουμε να μας γράψει ο μαθητής, Α=[1,2,3,4] όπως θα το έγραφε σε πηγαίο κώδικα ΑΝ η ΓΛΩΣΣΑ υποστήριζε τέτοια αρχικοποίηση, ή θέλουμε να μας σχεδιάσει ένα όμορφο πινακάκι με κουτάκια (που δεν μπορώ να το ζωγραφίσω καλά εδώ), π.χ. [1|2|3|4];

Εκεί τι θα κάνουμε, θα πούμε "όλα δεκτά", και μονάδες θα κόβουμε μόνο στα αλφαριθμητικά;
Ή θα το ζητήσουμε σε μορφή πηγαίου κώδικα κι ας μην το υποστηρίζει η ΓΛΩΣΣΑ;

taxata

Python 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:30:26) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> a=[]
>>> a.append('Tasos')
>>> a[0]
'Tasos'
>>> print a[0]
Tasos
>>>
Τάσος_Χατζηπαπαδόπουλος
Κύριε δεν έχω internet
http://users.sch.gr/chatzipap/

alkisg

Εννοούσα αν ζητηθεί ολόκληρος ο πίνακας, όχι ένα στοιχείο του.
Κώδικας: python
$ python
Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> x=['a','b','c']
>>> x
['a', 'b', 'c']
>>> print x
['a', 'b', 'c']
>>> print x[0]
a


Π.χ. η print x εμφανίζει εισαγωγικά, ενώ η print x[0] όχι. Ενώ στη ΓΛΩΣΣΑ δεν έχουμε καν σύνταξη για "πηγαίο κώδικα τιμών πινάκων".
Εγώ θεωρώ ότι οποιαδήποτε "τυποποίηση" κι αν γίνει, θα είναι αυθαίρετη...

pgrontas

Ερωτήσεις γιατί έχω σκουριάσει σε χρήση IDE και δεν είμαι γνώστης της Python σε βάθος:
1. Μήπως οι debuggers εμφανίζουν τα εισαγωγικά επειδή επιτρέπουν και την on the fly αποτίμηση εκφράσεων με μορφή κώδικα ενώ κάνεις debugging; Δηλαδή εκεί που βλέπεις την τιμή 'ΜΑΡΙΑ' να αποτιμήσεις το 'ΜΑΡΙΑ'+my_variable; Στο Visual Studio που γνωρίζω μπορούσες να κάνεις κάτι τέτοιο. Αν συμβαίνει αυτό νομίζω ότι ακυρώνεται το επιχείρημα.
2. Μήπως στην εμφάνιση πινάκων (λιστών) της python χρησιμοποιούνται τα εισαγωγικά, επειδή στην λίστα μπορούν να υπάρχουν πολλοί τύποι δεδομένων, οπότε θέλει να δείξει πχ. ότι το '1' είναι χαρακτήρας και το 1 αριθμός.
3. Μήπως όταν κάνεις αποτίμηση μιας τιμής η Python σου βάζει το εισαγωγικά ως ένδειξη του τύπου (επειδή δεν έχει στατικούς τύπους);

Όποιες και αν είναι οι απαντήσεις, δεν θεωρώ ότι αποτελούν απόδειξη για το τι πρέπει να γίνεται αποδεκτό, ως περιεχόμενο κουτιού (γιατί από εκεί ξεκινήσαμε).
Ούτε έχει νόημα να εξετάζουμε τι κάνει ο κάθε debugger/γλώσσα προγραμματισμού γιατί έχει πιθανότατα διαφορετική στόχευση.

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

bugman

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

gbougioukas

Παράθεση από: bugman στις 23 Ιαν 2019, 09:31:49 ΜΜ
Tα εισαγωγικά δεν καταχωρούνται στα αλφαριθμητικά.

Τι σημαίνει "καταχωρούνται", στην μνήμη μήπως; Που το ξέρεις, που καθορίζεται στην Γλώσσα πως καταχωρούνται στην μνήμη οι χαρακτήρες; Στην C, ο χαρακτήρας null ('\0') μετά το τελος της συμβολοσειράς στην μνήμη τι είναι;
Γιώργος Μπουγιούκας
Computer Science (BSc), Bioinformatics & Neuroinformatics (MSc)
https://gbougioukas.wordpress.com/
https://apothesis.eap.gr/handle/repo/54953

bugman

Τρεις τρόποι υπάρχουν για καταχώρηση στη μνήμη. Ο ένας είναι με καταχώρηση μήκους χωριστά, ο δεύτερος είναι με το χαρακτήρα με αριθμό 0, και ο τρίτος είναι συνδυασμός αυτών, και υπάρχει για να μπορούν τα αλφαριθμητικά να περάσουν σε εξωτερικές συνάρτησεις φτιαγμένες με C.
Επιπλέον τα αλφαριθμητικά χωρίζονται σε σταθερού  μήκους, και μη σταθερού. Τα σταθερού μήκους έχουν  καθορισμένο μέγιστο μήκος, και σε αυτά έχουμε το 0  ως χαρακτήρας τέλους.  Τα μη σταθερού μήκους είναι ταυτόχρονα και σταθερά, δηλαδή όταν αλλάζουμε την τιμή  τους δεν γράφουμε πάνω στην προηγούμενη τιμή, αλλά απλά γράφουμε σε νέα μνήμη, και δίνουμε το νέο δείκτη στη μνήμη στη θέση του παλιού.  Το παλιό αλφαριθμητικό θα ανακυκλωθεί, η μνήμη θα γυρίσει στο σύστημα. Για το λόγο αυτό αν προσθέτουμε ένα χαρακτήρα για ας πούμε 1000 φορές,  θα απαιτηθεί πολύς χρόνος αφού κάθε φορά θα γίνεται δημιουργία νέου, αντιγραφή του παλιού,  προσθήκη του χαρακτήρα και τέλος λίγη εργασία για την αντιγραφή του δείκτη και την απελευθέρωση τη προηγούμενης τιμής του αλφαριθμητικού. Φαντάσου λοιπόν να έπρεπε να κρατάμε καί δυό θέσεις για τα εισαγωγικά!

Λάμπρος Παπαδόπουλος

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

Όσο για τα εισαγωγικά στους debuggers έχω την εντύπωση οτι σημαντικότερος λόγος ύπαρξής τους
είναι οι χαρακτήρες διαφυγής.
Αν δω "te\ηst" ξέρω τι σημαίνει. Αν δω όμως te\nst μήπως είναι και αυτό "te\\nst" ;