Τύποι Δεδομένων (Αριθμητικά vs Αλφαριθμητικά)

Ξεκίνησε από nekis, 16 Δεκ 2005, 09:40:36 ΠΜ

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

nekis

Αγαπητοί συναγωνιστές καλημέρα
Στο 7 κεφάλαιο υπάρχει η θεωρητική ερώτηση για τον τύπο μιας μεταβλητής η οποία θα αποθηκεύσει το τηλέφωνο ενός μαθητή. Έχω δει απαντήσεις ότι ο τύπος θα πρέπει να είναι ακέραιος. Τα τηλέφωνα είναι 10ψήφια. Αν, για παράδειγμα πάρουμε τη java οι integer έχουν range -2147483648 έως 2147483647, άρα θα χρειαζόμασταν long integer για να μην πάρω μήνυμα λάθους, σωστά??
Αλλά long integer δεν διδάσκουμε , άρα ???
Αλλά και γενικοτέρα νομίζω ότι μια τέτιοα τιμή θα έπρεπε (με τη λογική των βάσεων δεδομένων) να αποθηκεύεται σε πεδίο χαρακτήρων, γιατί δεν θα κάνω ποτέ πράξεις με τα τηλέφωνα των μαθητών μιας τάξης, ενώ μπορώ να ορίσω και μάσκες για να έχω valid δεδομένα....
Παρακαλώ για τις απόψεις σας
ΝΚυριακου

[size=0]Χωρίς να γίνει καμμία τροποποίηση στο μήνυμα του συναδέλφου, άλλαξα το θέμα από το αρχικό "ερώτηση θεωρίας 7ου κεφ" σε "Τύποι Δεδομένων (Αριθμητικά vs Αλφαριθμητικά)"με βάση την εξέλιξη της συζήτησης - Σέργιος[/size]

P.Tsiotakis


Όποιος αριθμός δεν έχει δεκαδικά ψηφία, είναι ακέραιος (ακόμη κι αν έχει 100 ψηφία)

Πώς θα πούμε στους μαθητές οτι ο αριθμός τηλεφώνου είναι χαρακτήρας ;

Sergio

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

Οι αριθμητικοί τύποι δεδομένων που ορίζονται για τις μεταβλητές στο κεφάλαιο 7 είναι δύο:
-      ακέραιες
-      πραγματικές
με στόχο να διαφοροποιήσουν τα αριθμητικά δεδομένα σε:
-      εκείνα που παριστάνουν ολόκληρες ποσότητες (χωρίς δεκαδικά) και
-      εκείνα που δεν έχουν αυτή την «ιδιότητα» οπότε μπορεί να έχουν και δεκαδικά ψηφία.

Πόσα bytes καταλαμβάνει στη μνήμη του Η/Υ ένας ακέραιος ή πώς υλοποιείται το mantissa / exponent μοντέλο των πραγματικών αριθμών δεν αφορά τους στόχους του μαθήματος.

Όμως στο θέμα με το τηλέφωνο, πρέπει νομίζω να προβληματιστούμε περισσότερο...  Το όνομα ενός δεδομένου δεν είναι ασφαλές κριτήριο πάντα για να αποφασίσουμε τον τύπο του.  Ο αριθμός κυκλοφορίας «ΡΙΒ7207» δε θα πρέπει να θεωρηθεί αριθμός και ας ... το λέει το όνομά του!  Αντίστοιχα και ο αριθμός πλαισίου ΑΚ234-500067-Q

Τα αριθμητικά δεδομένα είναι τα στοιχεία εκείνα που εκφράζουν αριθμητικές ποσότητες, στοιχεία που «απαντούν στην ερώτηση πόσο», στοιχεία με τα οποία γίνονται πράξεις.

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

Το όνομα ΑΛΦΑΡΙΘΜΗΤΙΚΑ δηλώνει ότι «δικαιούται» να περιλαμβάνει αλφαβητικούς χαρακτήρες, αριθμητικούς χαρακτήρες ή συνδυασμούς τους.

Με αυτή την έννοια ο αριθμός τηλεφώνου πιστεύω ότι θα μπορούσε να θεωρηθεί χαρακτήρας.  Αντίστοιχα χαρακτήρας μπορεί να θεωρηθεί και ο Ταχυδρομικός κώδικας και όλες οι άλλες πληροφοριακές ποσότητες που δεν «απαντούν» στην ερώτηση ...πόσο.  Λέμε:
-      πόσο ύψος έχεις
-      πόσο βάρος έχεις
δε λέμε:
-      πόσο τηλέφωνο έχεις

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

Βέβαια κάπου εδώ θα μπορούσε κανείς να ισχυριστεί ότι ... διακιούται κανείς να ζητήσει τον ... προηγούμενο αριθμό τηλεφώνου (τηλέφωνο - 1) όμως εξακολουθώ να είμαι λίγο δύσπιστος...  Θα ζητούσε κανείς το μέσο όρο τηλεφώνων των μαθητών ενός σχολείου;

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

Βέβαια, εάν ζητηθεί να ...αποφασίσει κανείς σε ποιά ...περιοχή ανήκει ένα τηλέφωνο εξετάζοντας το πρώτο του ψηφίο, εκεί απαραίτητα ο αριθμός τηλεφώνου θα πρέπει να έχει δηλωθεί ακέραιος ώστε με «αριθμός div 10^9» να εξασφαλίσουμε το πρώτο του ψηφίο.

Ως αντίλογος, όμως, αν ένας τηλεφωνικός αριθμός εξωτερικού 0016082877432 θεωρηθεί ακέραιος, αυτόματα «χάνει» τα αρχικά του μηδενικά (!!) κάτι που ως χαρακτήρας δε συμβαίνει, ενώ μπορούν να καλυφθούν και περιπτώσεις στις οποίες ο αριθμός τηλεφώνου θα γραφτεί:
+302410552166
ή:
0030(241)0552166

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

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

Πάντως σίγουρα χρειάζεται σκέψη.

Γνώμες;
Απ τη μια η θητεία μου σε σχολικές αίθουσες: να φλυαρώ - να ελπίζω πως κατι κατάλαβαν - να εξερευνώ - να μαθαίνω. Απ την άλλη, σχεδόν συνομήλικη, η Διδακτική της Πληροφορικής: ερευνά διαδικασίες μάθησης - φλερτάρει με την Ψυχολογία - με καλεί να αφήσω το βλέμμα του Πληροφορικού και να δω με τα μάτια του δασκάλου. Τέκνα των 2, οι απόψεις μου.. (προσαρμοσμένο από τον πρόλογο του βιβλίου "Το μακρόν Φυσική προ του βραχέως διδάσκω" του Ανδρέα Κασσέτα)

EleniK

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

Νομίζω πάντως ότι δεν χρειάζεται να μπλέκουμε στοιχεία από άλλες γλώσσες όπως οι long integers, κλπ.

Ελένη
Ελένη Κοκκίνου
Καθηγήτρια Πληροφορικής, ΠΕ19

gpapargi

Προσωπικά θα χρησιμοποιούσα αλφαριθμητικά.

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

Επίσης θα πρέπει να μπορώ να αποθηκεύσω τηλέφωνα που ξεκινούν απο μηδενικά ή το "+".

Με τα τηλέφωνα δεν κάνουμε κλασσικές αριθμητικές πράξεις.

alkisg

Κι εγώ αλφαριθμητικά, και για τηλέφωνα και για ΑΦΜ, ώστε να αποθηκεύεται το "00"  ή "+" μπροστά από τα τηλέφωνα εξωτερικού και το "0" μπροστά από κάποια ΑΦΜ... Ακολουθώ κι εγώ τη συνταγή του Σέργιου, δηλαδή αν σε κάτι δεν έχουμε σκοπό να κάνουμε πράξεις δεν το δηλώνουμε σαν αριθμό...

Πάντως συναρτήσεις χειρισμού αλφαριθμητικών στη ΓΛΩΣΣΑ δεν υπάρχουν, οπότε δύσκολο να σταθεί άσκηση χειρισμού αριθμού τηλεφώνου με αλφαριθμητικά...

gpapargi

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

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

Το θέμα των τηλεφώνων μπορεί να το δει κανείς και σε ένα πίνακα excel που χρησιμοποιείται και από μη προγραμματιστές για καταχώρηση απλών στοιχείων. Θα πρέπει και εκεί να αποφασίουμε τι τύπου θα είναι το πεδίο τηλεφώνου. Το ίδιο σκεπτικό ισχύει και εκεί.

Μια που κουβεντιάζουμε, θα μπορούσαμε να υποστηρίξουμε σε ΓΛΩΣΣΑ επεξεργασία τηλεφώνων με τη χρήση πινάκων (ένα ψηφίο σε κάθε θέση και υλοποίηση υποπρογραμμάτων χειρισμού). Αλλά πάει μακρυά η βαλίτσα.

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

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

bagelis

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

sgsfak

ΠαράθεσηΜια που κουβεντιάζουμε, θα μπορούσαμε να υποστηρίξουμε σε ΓΛΩΣΣΑ επεξεργασία τηλεφώνων με τη χρήση πινάκων (ένα ψηφίο σε κάθε θέση και υλοποίηση υποπρογραμμάτων χειρισμού). Αλλά πάει μακρυά η βαλίτσα.
Αυτή ήταν και η δική μου σκέψη διαβάζοντας αυτή τη συζήτηση αλλά ξαφνικά διαπίστωσα ότι στη ΓΛΩΣΣΑ δεν διαχωρίζεται ο απλός χαρακτήρας (char) από το αλφαριθμητικό (string) (σελ. 149: "Ο τύπος αυτός αναφέρεται τόσο σε ένα χαρακτήρα όσο και μια σειρά χαρακτήρων") . Δηλαδή αν πω:
[glossa]
ΠΡΟΓΡΑΜΜΑ Τεστ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Ι
  ΧΑΡΑΚΤΗΡΕΣ: Λ[10]
ΑΡΧΗ
  ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 10
     ΔΙΑΒΑΣΕ Λ[Ι]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ 'ΟΚ'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
[/glossa]
θα διαβάσω 10 χαρακτήρες ή 10 λέξεις; Οι ...δεινόσαυροι τι λένε;

Στελιος

Στέλλα

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

gpapargi

Θα βάλεις έλεγχο εισόδου και θα αποδέχεσαι μόνο τα αλφαριθμητικά που αποτελούται μόνο από ένα νόμιμο ψηφίο τηλεφωνικού αριθμού (τα 10 ψηφία, και το +). Δηλ το '12' κοβεται ενώ τα '1' και '2' είναι αποδεκτά.

sgsfak

ΠαράθεσηΘα βάλεις έλεγχο εισόδου και θα αποδέχεσαι μόνο τα αλφαριθμητικά που αποτελούται μόνο από ένα νόμιμο ψηφίο τηλεφωνικού αριθμού (τα 10 ψηφία, και το +). Δηλ το '12' κοβεται ενώ τα '1' και '2' είναι αποδεκτά.
Σωστά! Άρα πάντα διαβάζεις λέξεις και αν θέλεις έναν έναν τους χαρακτήρες θα πρέπει να δέχεσαι μόνο τις λέξεις που περιέχουν μόνο ένα χαρακτήρα. Thanks!

Στέλιος