ΟΥΡΕΣ (2024)

Ξεκίνησε από Dimitris365, 16 Ιαν 2024, 12:37:32 ΠΜ

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

Dimitris365

Έχω παρακολουθήσει τα παλαιότερα νήματα για το θέμα της ΟΥΡΑΣ και θέλω καταρχάς να πω οτι καταλαβαίνω απόλυτα τη συνάδελφο που έγραψε οτι το συμπληρωματικό διδακτικό πρέπει να διδαχθεί ως έχει -διαφορετικά είναι επικίνδυνο για τον μαθητή στις εξετάσεις κλπ.

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

Η δική μου απορία είναι, γιατί έγιναν οι συγκεκριμένες επιλογές για το σχολικό βιβλίο; Τα παρακάτω τμήματα κώδικα για τις λειτουργίες της ουράς δεν θα ήταν ικανοποιητικά για να διδάξουμε μια δομή FIFO;

πίσω <- 1
μπρος <- 1

! ΕΙΣΑΓΩΓΗ
ΑΝ πίσω > Ν ΤΟΤΕ
  ΓΡΑΨΕ 'Γεμάτη ουρά'
ΑΛΛΙΩΣ
  ΔΙΑΒΑΣΕ Α[πίσω]
  πίσω <- πίσω + 1
ΤΕΛΟΣ_ΑΝ

! ΕΞΑΓΩΓΗ
ΑΝ μπρος = πίσω ΤΟΤΕ
  ΓΡΑΨΕ 'Άδεια ουρά'
  πίσω <- 1
  μπρος <- 1
ΑΛΛΙΩΣ
  ΓΡΑΨΕ Α[μπρος]
  μπρος <- μπρος + 1
ΤΕΛΟΣ_ΑΝ





ikariofil

! ΕΙΣΑΓΩΓΗ
ΑΝ πίσω = Ν ΤΟΤΕ
  ΓΡΑΨΕ 'Γεμάτη ουρά'
ΑΛΛΙΩΣ
  πίσω <- πίσω + 1
Διάβασε Α[πίσω]
ΤΕΛΟΣ_ΑΝ

έχεις κάποια λάθη στον κώδικα, όπως επίσης κατά την εξαγωγή:

μπρος = πίσω δεν σημαίνει άδεια ουρά αλλά ότι η ουρά έχει ένα στοιχείο

Dimitris365

Παράθεση από: ikariofil στις 16 Ιαν 2024, 09:33:48 ΠΜέχεις κάποια λάθη στον κώδικα, όπως επίσης κατά την εξαγωγή:

μπρος = πίσω δεν σημαίνει άδεια ουρά αλλά ότι η ουρά έχει ένα στοιχείο
Όχι, είναι σωστό.

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

Οπότε αν οι δείκτες ισούνται, η ουρά είναι άδεια.

ikariofil

οταν μπρος = 0 και πισω = 0 η ουρά είναι άδεια

Dimitris365

Στην υλοποίηση που έδειξα, η ουρά είναι άδεια όταν ισχύει: μπρος=πίσω.

Η υλοποίηση αυτή είναι μια από τις μυριάδες που μπορεί κάποιος να βρει ή να σκεφτεί. Διαφέρει σε ορισμένα σημεία από αυτή του σχολικού βιβλίου:
  • οι δυο δείκτες έχουν αρχική τιμή 1,
  • κατά την λειτουργία εισαγωγής, πρώτα εισάγεται το στοιχείο στην ουρά και μετά ο δείκτης αυξάνει κατά 1. Άρα ο δείκτης "πίσω" δείχνει πάντα στην επόμενη ελεύθερη θέση της ουράς.
  • ο δείκτης "μπρος" πάντα "κυνηγάει" τον "πίσω" και βρίσκεται μια θέση πίσω του. Όταν οι δυο δείκτες ισούνται τότε η ουρά είναι άδεια (άρα και αρχικά είναι άδεια αφού 1=1) και μπορεί να εμφανιστεί κατάλληλο μήνυμα ή/και οι δείκτες να επανέλθουν στις αρχικές τους τιμές ώστε να χρησιμοποιηθεί εκ νέου η ουρά.

Η υλοποίηση αυτή λειτουργεί (μπορείτε να την δοκιμάσετε π.χ. στην Γλώσσα) αλλά το θέμα δεν είναι να δείξω οτι είναι καλύτερη από κάποια άλλη. Πιθανότατα δεν είναι. Είναι όμως απλούστερη από του σχολικού βιβλίου και η ερώτησή μου είναι: γιατι δεν επιλέχθηκε μια τέτοια πιο απλή λύση; Δεν θα κάλυπτε το διδακτικό στόχο; Δεν θα ήταν αρκετή για τις ερωτήσεις/ασκήσεις των εξετάσεων;