Λάθη στις εκφωνήσεις και λύσεις των ασκήσεων στην ουρά και στην στοίβα

Ξεκίνησε από geprgia, 18 Φεβ 2021, 11:25:00 ΠΜ

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

geprgia

ΠΑΡΑΔΕΙΓΜΑ 4 ΣΕΛ17 στο συμπληρωματικό Εκπαιδ. Υλικό

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

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

petrosp13

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

geprgia

Παράθεση από: petrosp13 στις 18 Φεβ 2021, 03:21:29 ΜΜ
Η διαδρομή είναι μια, απλά επιβιβάζονται πολλά αυτοκίνητα και αυτό μετράει το πλήθος
Το μενού είναι για να επιλέξει ο χρήστης αν θα γίνει επιβίβαση ή αποβίβαση
Αν επιλέξει επιβίβαση, τότε υπάρχουν 2 περιπτώσεις για να ολοκληρωθεί
-Να μην υπάρχει άλλο αυτοκίνητο (γι'αυτό και η εμφωλευμένη ερώτηση)
-Να γεμίσει το πλοίο

Από που εξάγεις το συμπέρασμα ότι η διαδρομή είναι μια ;Γιατί η εκφώνηση δεν λέει κάτι τέτοιο...

Το ότι αρχικοποιει το πλ1 εκτός της  αρχικής επανάληψης , δείχνει ότι δεν αφορά την συγκεκριμένη  επιβίβαση πολλών αυτοκίνητων στον Πειραιά γι αυτο και δεν αρχικοποιει εντός της επιλογής 1, αλλά όλων όσων επιβιβάστηκαν σε όλες τις διαδρομές από τον πειραια...

Μάλλον δεν κατάλαβες την παρατήρηση μου...

geprgia

Στην άσκηση Ε7 του βιβλίου των Λύσεων:

Στην εκφώνηση αναφέρει: "Η επαναληπτική διαδικασία ολοκληρώνεται, όταν εκτυπωθούν όλα τα αρχεία που έχουν τοποθετηθεί στην ουρά".

Λογικά η διαδικασία θα τελείωνε όταν εμπρός=0 και πίσω =0  ( ή εναλλακτικά ανάλογα με την υλοποίηση όταν εμπρός> πίσω)

Ωστόσο η λύση εισάγει δυνατότητα τερματισμού από τον χρήστη με την επιλογή 'Τ' (Τέλος, για έξοδο από το πρόγραμμα)!!!...

Έτσι μπορεί κάποιος να τερματίσει πριν εκτυπωθουν ολα τα αρχεία με την επιλογη Ἐ', αν πριν την επιλογη 'Ε' πατήσει 'Τ'

geprgia

Στην άσκηση Ε7 του βιβλίου των Λύσεων:
μηδενίζει τους δείκτες εμπρός και πίσω έξω από τη Αν. Αυτό είναι πλεονασμός διότι στην πρωτη περίπτωση της Αν όταν η ουρα είναι άδεια, οι δείκτες είναι ήδη μηδέν, και στη δεύτερη όπου το στοιχείο είναι ένα, μετά την εξαγωγή του μηδενίζονται .

ΑΝ επ = 'Ε' ΤΟΤΕ
αθρ <- 0
ΑΝ (αρχ = 0 ΚΑΙ τελος = 0) ΤΟΤΕ
ΓΡΑΨΕ ' Δεν υπάρχει αρχείο για εκτύπωση...'
ΑΛΛΙΩΣ_ΑΝ αρχ = τελος ΤΟΤΕ
ΓΡΑΨΕ 'Εκτύπωση ', πίνακας_αρχειων[αρχ]
  πίνακας_αρχειων[αρχ] <- "" !για παρακ/θηση των τιμών του πίνακα
τελος <- 0
αρχ <- 0
    αθρ <- αθρ + 1
  ΑΛΛΙΩΣ
    ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
     ΓΡΑΨΕ 'Εκτύπωση ', πίνακας_αρχειων[αρχ]
      πίνακας_αρχειων[αρχ] <- "" !για παρακ/θηση των τιμών του πίνακα
       αρχ <- αρχ + 1
        αθρ <- αθρ + 1
      ΜΕΧΡΙΣ_ΟΤΟΥ (αρχ > τελος)
    ΤΕΛΟΣ_ΑΝ
    ΓΡΑΨΕ 'Εκτυπώθηκαν συνολικά ', αθρ, ' αρχεία'
τελος <- 0
αρχ <- 0
ΤΕΛΟΣ_ΑΝ

Οπότε ο μηδενισμός των δεικτών θα έπρεπε να μπει αμέσως μετά την επανάληψης και εντος την τρίτης περίπτωσης της αν.

ΑΝ επ = 'Ε' ΤΟΤΕ
αθρ <- 0
ΑΝ (αρχ = 0 ΚΑΙ τελος = 0) ΤΟΤΕ
ΓΡΑΨΕ ' Δεν υπάρχει αρχείο για εκτύπωση...'
ΑΛΛΙΩΣ_ΑΝ αρχ = τελος ΤΟΤΕ
ΓΡΑΨΕ 'Εκτύπωση ', πίνακας_αρχειων[αρχ]
  πίνακας_αρχειων[αρχ] <- "" !για παρακ/θηση των τιμών του πίνακα
τελος <- 0
αρχ <- 0
    αθρ <- αθρ + 1
  ΑΛΛΙΩΣ
    ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
     ΓΡΑΨΕ 'Εκτύπωση ', πίνακας_αρχειων[αρχ]
      πίνακας_αρχειων[αρχ] <- "" !για παρακ/θηση των τιμών του πίνακα
       αρχ <- αρχ + 1
        αθρ <- αθρ + 1
      ΜΕΧΡΙΣ_ΟΤΟΥ (αρχ > τελος)
     τελος <- 0
     αρχ <- 0
    ΤΕΛΟΣ_ΑΝ
    ΓΡΑΨΕ 'Εκτυπώθηκαν συνολικά ', αθρ, ' αρχεία'

ΤΕΛΟΣ_ΑΝ

geprgia

Στην άσκηση Ε5 του βιβλίου των Λύσεων:

Επαναλαμβάνεται 4 φορές το ίδιο κομμάτι κώδικα για καθένα από το 4 ταμεία.  Ωστόσο η εξυπηρέτηση του πελάτη δεν διαφοροποιείται από το ποιος τον εξυπηρέτησε ο 1ή ο 2 κτλ.  Περίπου 40 γραμμές κώδικα τσάμπα...


Η επιλεξε για την αύξηση των αντίστοιχων τιμών του πίνακα μετρητων έπρεπε να γίνει ως εξης:


ΑΝ αρχ <> 0 ΚΑΙ τελος <> 0 ΤΟΤΕ
     ΑΝ αρχ = τελος ΤΟΤΕ
         ΓΡΑΨΕ 'Καλείται ο πελάτης με το νούμερο:', πελατες[αρχ]
         πελατες[αρχ] <- 0
        αρχ <- 0
        τελος <- 0
     ΑΛΛΙΩΣ
         ΓΡΑΨΕ 'Καλείται ο πελάτης με το νούμερο:', πελατες[αρχ]
         πελατες[αρχ] <- 0
        αρχ <- αρχ + 1
    ΤΕΛΟΣ_ΑΝ
        ΕΠΙΛΕΞΕ τ
          ΠΕΡΙΠΤΩΣΗ 1
                ταμεια[1] <- ταμεια[1] + 1
          ΠΕΡΙΠΤΩΣΗ 2
                 ταμεια[2] <- ταμεια[2] + 1
             .....
           ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ

ΑΛΛΙΩΣ
ΓΡΑΨΕ ' Δεν υπάρχει πελάτης να εξυπηρετηθεί...'
ΤΕΛΟΣ_ΑΝ


geprgia

Σε πολλές ασκήσεις που υλοποιούνται με ουρά και ζητείται πλήθος στοιχείων που εξάγονται-εξυπηρετούνται μέχρι να αδειάσει η ουρα, χρησιμοποιεί μετρητή ενώ θα μπορούσε καλύτερα να χρησιμοποιήσει τους δείκτες front και rear:

ΓΡΑΨΕ REAR-FRONT+1

Ομοίως και στις ασκήσεις με στοίβα  να τυπώσει απλά την τιμή της μεταβλητής top και όχι να βάζει μετρητη....

bugman

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

Λόγω κακού σχεδιασμού της ΓΛΩΣΣΑΣ δεν υπάρχουν αντικείμενα τα οποία θα κρατούσαν τα rear και front ως ιδιωτικές μεταβλητές. Οπότε από εκεί προκύπτουν και οι λάθος "πονηρές" ιδέες.

geprgia

Κατά την αποψη μου είναι μεγάλο λάθος να δίνεται ένας υποδειγματικος αλγόριθμος στο βιβλίο 2 και στις λύσεις να μην χρησιμοποιείται σχεδόν ποτέ!

Για την έξοδο στοιχείου από την ουρά το βιβλίο 2 ελέγχεται αν η ουρά είναι άδεια με την συνθήκη εμπρός=0 ΚΑΙ πίσω =0 .


Στις λύσεις όμως όταν ζητείται έξοδος όλων των στοιχείων ενω θα μπορούσε να ακολουθήσει την ίδια λογική, αλλάζει την συνθήκη τερματισμού με την εμπρός > πίσω βἀζοντας την επανάληψη εντός της ΑΝ όταν τα στοιχεία είναι πάνω από ένα. Σε αυτήν την παραλλαγή , οι δείκτες front και rear δεν μηδενίζονται μετα την εξαγωγή του τελευταιου στοιχείου όταν τα στοιχεία που εξάγονται είναι πάνω από 1, και έτσι  δεν μπορεί να χρησιμοποιήσει  για τερματισμό την συνθήκη  εμπρός=0 ΚΑΙ πίσω =0 .

Για να συμβάδιζε με το βιβλίο 2 , στο οποίο λογικά πρέπει να επικεντρωθουν οι μαθητές, θα μπορουσε απλά να έβαζε ένα loop με την συνθηκη του βιβλιου 2:

ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
AN εμπρός=0 ΚΑΙ πίσω =0 ΤΟΤΕ
   ΓΡΑΨΕ 'Άδεια ουρά'
ΑΛΛΙΩΣ
    ΓΡΑΨΕ ΟΥΡΑ[εμπρός]
     ΑΝ εμπρός=πίσω ΤΟΤΕ
         !υπάρχει μόνο ένα στοιχείο
         εμπρός<- 0
          πίσω<-0
    ΑΛΛΙΩΣ
        εμπρός<-εμπρός +1
   ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ

ΜΕΧΡΙΣ_ΟΤΟΥ (εμπρός=0 ΚΑΙ πίσω=0)

geprgia

Παράθεση από: petrosp13 στις 18 Φεβ 2021, 03:21:29 ΜΜ
Η διαδρομή είναι μια, απλά επιβιβάζονται πολλά αυτοκίνητα και αυτό μετράει το πλήθος
Το μενού είναι για να επιλέξει ο χρήστης αν θα γίνει επιβίβαση ή αποβίβαση
Αν επιλέξει επιβίβαση, τότε υπάρχουν 2 περιπτώσεις για να ολοκληρωθεί
-Να μην υπάρχει άλλο αυτοκίνητο (γι'αυτό και η εμφωλευμένη ερώτηση)
-Να γεμίσει το πλοίο
Αν ηταν μια διαρδομή γιατι βάζει επαναληπτική δομή και όχι απλά μια επίλεξε ή μια πολλαπλή αν για να ελέγξει τις 2 περιπτώσεις;Δηλ θα μπουν τα αυτοκινητα στον πειραια , άρα  θα πατησει 1 , μετα Αίγινα προορισμος, έξοδος για όλα  θα πατήσει 2 και μετά 3 για έξοδο απ το πρόγραμμα. δηλ ακριβως μια φορά την καθε επιλογη με συγκεκριμενη σειρά 1>2>3. Αυτό δεν δικαιολογει την επανάληψη.

Η επανάληψη διακαιολογειται μονο όταν το δρομολόγιο εκτελείται πολλές φορές ...

ApoAntonis

Κοίτα τώρα ποιό είναι το αστείο...
η διαδρομή είναι μία, αλλά το δρομολόγιο όχι. Καλό;


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

parsenopoulou

Συνάδελφοι καλησπέρα!
Στην άσκηση Ε7 του συμπληρωματικού υλικού με τον εκτυπωτή, αναφέρει: <<Όταν ο χρήστης δώσει το γράμμα "Ε", εξετάζει αν υπάρχουν αρχεία προς εκτύπωση και στην περίπτωση αυτή εξάγεται το κατάλληλο αρχείο εμφανίζοντας τη λέξη «Εκτύπωση» ακολουθούμενη από το όνομα του αρχείου που τυπώνεται. >>
Στη σχετική ενδεικτική λύση, γίνεται επαναληπτικά εξαγωγή στοιχείων αν επιλεγεί το ''Ε''. Προσπαθώ να καταλάβω αν και που φαίνεται κάτι τέτοιο στην εκφώνηση.  Είμαι της άποψης ότι πρέπει μέσα στην τάξη να λύσω με τους μαθητές όσες περισσότερες ασκήσεις μπορώ από το συμπληρωματικό υλικό, αλλά φοβάμαι ότι δημιουργώ στα παιδιά ανασφάλεια επειδή οι δικές μου λύσεις με τις λύσεις που προτείνονται από το ΙΕΠ σε κάποιες περιπτώσεις δε συμπίπτουν καθόλου.
Θα εκτιμούσα μια απάντηση. Ευχαριστώ για το χρόνο σας.

Laertis

Συναδέλφισσα parsenopoulou καλησπέρα,

Οι ασκήσεις ουράς του συμπληρωματικού υλικού Ε4 έως και Ε7 είναι όλες προβληματικές ως προς την εκφώνηση και την αντίστοιχη λύση. Αυτό που έκανα εγώ ήταν να δείξω τις προτεινόμενες λύσεις των ασκήσεων του υλικού, υποδεικνύοντας τα σφάλματα σύμφωνα με τις εκφωνήσεις (ή/και διορθώνοντας την αντίστοιχη εκφώνηση), και στη συνέχεια να δώσω τη λύση με βάση την εκφώνηση και χωρίς τις ευρεσιτεχνίες τερματισμού από την επανάληψη ή επαναληπτικής εξαγωγής από την ουρά ή την καταναγκαστική επανάληψη των ίδιων εντολών σε 4 διαφορετικές περιπτώσεις κ .α.
Όταν τεκμηριώνεις κάτι σωστά και μεθοδικά τα παιδιά αντιλαμβάνονται ποιον να εμπιστεύονται και πότε να νιώθουν ανασφάλεια.
Καλή δύναμη!
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola


Γιάννης Αναγνωστάκης

Καλησπέρα συνάδελφοι

Στις θεωρητικές ασκήσεις με στοίβα/ουρά, όταν κάνετε απώθηση/εξαγωγή αφαιρείτε (σβήνετε) τα στοιχεία που βγαίνουν ;

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

Δεν πρέπει εδώ να δοθεί μια διευκρίνιση;

parsenopoulou

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

pgrontas

Νομίζω ότι το θέμα των πανελληνίων 2020 είναι από μόνο του διευκρίνηση.

Προσωπικά από πέρσι δεν έσβηνα τα στοιχεία. Θεωρώ ότι στις εικόνες του βιβλίου υπάρχει αυτή η απλοποίηση για ευκολότερη κατανόηση, αλλά έχεις δίκιο ότι μπορεί να μπερδέψει. Ίσως θα ήταν καλύτερα τα στοιχεία να υπάρχουν στον πίνακα, ίσως γραμμοσκιασμένα (όπως εκ των υστέρων είδα ότι λέει και η @parsenopoulou).

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

andreas_p

Βιβλίο #2  Ε6 (ΕΛΤΑ)
Εκφώνηση ελλιπής.
++
6. Να διαβάζει τον αριθμό ωρών (θετικός ακέραιος) λειτουργίας του ταχυδρομικού καταστήματος.
7. Σε περίπτωση διαπίστωσης κενών (μη αξιοποιήσιμων) θέσεων στην αρχή της ουράς να πραγματοποιείται ολίσθηση (shift).
Αναμένουμε διόρθωση στην έκδοση 2021 ...

axi

Καλησπερα, θα ήθελα να ρωτήσω κι εγώ τα εξής
α. Στην άσκηση Ε5 του συμπληρωματικού υλικού με την λίστα αναμονής, στις ενδεικτικές λύσεις,
δεν γίνεται χρήση της τεχνικής της ολίσθησης της ουράς.
Ενώ στην επόμενη άσκηση Ε6 με το ταχυδρομείο κάνει χρήση της ολίσθησης.
Υπάρχει κάποιος λόγος?
β. Στην άσκηση Ε4 με την τράπεζα χρησιμοποιεί την δείκτη <<τέλος>> για να μετράει
τα άτομα που μπαίνουν στην ουρά. Αν όμως η ουρά αδειάσει η μεταβλητή αυτή αρχικοποιείται
ξανά από το μηδέν με αποτέλεσμα η τράπεζα να εξυπηρετήσει περισσότερα από 1000 άτομα
χωρίς η ουρά να γεμίσει. Δε θα έπρεπε να υπάρχει ξεχωριστός μετρητής για το πλήθος
των ατόμων που εισέρχονται στην ουρα?
γ. Επίσης στην άσκηση με την Τράπεζα θα μπορούσε μετά το διάβασμα του δείκτη <<τ>> των ταμείων
να γράψει : ταμεια[τ]<-ταμεια[τ]+1

thaaanos

Παράθεση από: geprgia στις 22 Φεβ 2021, 12:19:05 ΜΜ
Σε πολλές ασκήσεις που υλοποιούνται με ουρά και ζητείται πλήθος στοιχείων που εξάγονται-εξυπηρετούνται μέχρι να αδειάσει η ουρα, χρησιμοποιεί μετρητή ενώ θα μπορούσε καλύτερα να χρησιμοποιήσει τους δείκτες front και rear:

ΓΡΑΨΕ REAR-FRONT+1

Ομοίως και στις ασκήσεις με στοίβα  να τυπώσει απλά την τιμή της μεταβλητής top και όχι να βάζει μετρητη....

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