Μεταβλητή ελέγχου στη For

Ξεκίνησε από iliasthes, 11 Φεβ 2010, 07:21:06 ΜΜ

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

iliasthes

Καλησπέρα συνάδελφοι. Είχα την εντύπωση οτι στην εντολή επανάληψης η μεταβλητή ελέγχου στην εντολή for μπορεί να είναι είτε ακέραιου τύπου είτε τύπου χαρακτήρα, αλλά δεν μπορεί να είναι πραγματικού τύπου ή αλφαριθμητικού.

Το βιβλίο δεν αναφέρει τίποτα, αλλά σε ένα βιβλίο έλεγε οτι μπορεί να είναι οποιουδήποτε τύπου εκτός από πραγματικού. Δηλαδή αν βάλεις for i:='kalimera' to 'kalinixta' πως θα βρει τα βήματα; Υποθέτω πως το βιβλίο είναι λάθος, αλλά μια δεύτερη γνώμη θα με βοηθούσε.

Ιωάννης Γκίνης

Η μεταβλητή ελέγχου πρέπει να είναι τακτικού (ordinal) τύπου που σημαίνει:

  • Ακεραίου τύπου (Integer)
  • Τύπου χαρακτήρα (Character)
  • Λογικού τύπου (Boolean)
  • Τύπου υποπεριοχής (Subrange)
  • Απαριθμητού τύπου (Enumerate)
οτιδήποτε άλλο είναι λανθασμένο.

Το βιβλίο βέβαια για ακόμη μια φορά δε μας τα λέει και τόσο καλά:
ΠαράθεσηΗ αρχική και η τελική τιμή του κύκλου for μπορεί να είναι μια έκφραση οποιουδήποτε διατεταγμένου τύπου. Έτσι, εκτός από ακέραιες τιμές μπορούμε να χρησιμοποιήσουμε μεταβλητές με τιμές τύπου χαρακτήρα char ή λογικού τύπου (boolean).
...και σ' αυτό το σημείο «παθαίνω τη συνήθη κρίση μου» από τις παραλείψεις / ασάφειες που έχει αυτή η παράγραφος.

iliasthes

Ευχαριστώ για τη βοήθεια Τελικά και το πανεπιστημιακό βιβλίο που είχα λάθος τα έλεγε  :D. Εντάξει θέλει να βάλεις και τη λογική σου, ποιο θα είναι το επόμενο βήμα σε ένα αλφαριθμητικό και σε έναν πραγματικό αριθμό, αλλά καλό είναι να ορίζονται με σαφήνεια.

Ιωάννης Γκίνης

Άσχετο με το θέμα αλλά... η ιστορία με τους πραγματικούς και τη For με πάει λίγο πίσω. Ήταν μόλις το πρώτο μου μήνυμα στο forum και είχα νιώσει πολύ άσχημα  :-[

Τα υπόλοιπα εδώ: https://alkisg.mysch.gr/steki/index.php?topic=181.msg1120#msg1120

iliasthes

Συνάδελφε, οι απορίες που πολλές φορές έχουμε είναι αστείες και έχουν να κάνουν με το γεγονός οτι πρόκειται για ένα πανελλαδικώς εξαταζόμενο μάθημα και ένα βιβλίο με αρκετά λάθη και παραλαείψεις. Για μένα το να διαπιστώσω αυτό που ρώτησα δεν ήθελε τίπτα παραπάνω παρά να ετοιμάσω από ένα παράδειγμα για κάθε περίπτωση τύπου δεδομένων της μεταβλητής ελέχγου και να διαπιστώσω ποιες είναι αποδεκτές (πάλι βέβαια κάποια χαρακτηριστικά της γλώσσας εξαρτώνται από την έκδοση του μεταγλωττιστή που έχεις, πχ θυμάμαι στο περιβάλλον TP 7 αν δεν αρχικοποιούσες μια μεταβλητή της έδινε μια τυχαία τιμή μέσα στα αποδεκτά όρια του τύπου της ενώ στον free-pascal compiler που χρησιμοποιώ δίνει αρχική τιμή το 0 αν δεν αρχικοποιήσεις τη μεταβλητή).

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

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

Παράθεση από: iliasthes στις 11 Φεβ 2010, 07:21:06 ΜΜ
Το βιβλίο δεν αναφέρει τίποτα, αλλά σε ένα βιβλίο έλεγε οτι μπορεί να είναι οποιουδήποτε τύπου εκτός από πραγματικού. Δηλαδή αν βάλεις for i:='kalimera' to 'kalinixta' πως θα βρει τα βήματα; Υποθέτω πως το βιβλίο είναι λάθος, αλλά μια δεύτερη γνώμη θα με βοηθούσε.
Ισως σκόπιμα το βιβλίο δεν εμβαθύνει καθώς οι μαθητές πρέπει να μάθουν τα βασικά στον προγραμματισμά προς το παρον.