Γενικό Λύκειο > Τμηματικός προγραμματισμός

Άσκηση 9, σελ. 120, οδηγίες μελέτη μαθητή

(1/4) > >>

gergerman:
Στην άσκηση 9, σελ. 120, ερώτημα3, τι θέλει να πει ο ποιητής;  Να γίνουν αυτά που ζητάει για τις ημερομηνίες του πίνακα που βρίσκονται εντός των 2 ημερομηνιών που διαβάζονται;
Μήπως μπορεί κάποιος να ανεβάσει κάποια λύση;

ολγα:
Προφανώς. (συμπεριλαμβανομένων και αυτών των ημερομηνιών αν υπάρχουν). Λύνεται με Όσο για να εκμεταλλευτούμε και το γεγονός ότι οι πίνακες είναι ταξινομημένοι. Προχωράμε μέχρι να βρούμε στους πίνακες ημερομηνία >= από την 1η ημερομηνία. Στη συνέχεια  κάνουμε αυτά που ζητάει και προχωράμε μέχρι να βρούμε ημερομηνία > από τη 2η ημερομηνία ή όταν εξαντλήσουμε τον πίνακα, οπότε σταματάμε. Όταν μπορέσω  θα ανεβάσω τη λύση.

ολγα:
sum<-0
ΔΙΑΒΑΣΕ η1, μ1
ΔΙΑΒΑΣΕ η2, μ2
ΚΑΛΕΣΕ ΕΛΕΓΧΟΣ_ΗΜΕΡΟΜΗΝΙΑΣ (η1,μ1,η2,μ2)
flag <- ΨΕΥΔΗΣ
ι <- 1
ΟΣΟ flag = ΨΕΥΔΗΣ ΚΑΙ i <= 500 ΕΠΑΝΑΛΑΒΕ
    ΑΝ μ1 > Μήνα [ι] Η μ1 = Μήνα[ι]ΚΑΙ η1 > Ημέρα[ι] ΤΟΤΕ
          i <- i + 1
    ΑΛΛΙΩΣ
         ΑΝ μ2 > Μήνα[ι] Η μ2 = Μήνα[ι] ΚΑΙ η2 >= Ημέρα[ι] ΤΟΤΕ
              ΓΡΑΨΕ Περιγραφή[ι],Kόστος[ι]
              sum<sum+Kόστος[ι]
              ι <-ι + 1
         ΑΛΛΙΩΣ
              flag <- ΑΛΗΘΗΣ
        ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ sum

eleniletta:
Συνάδελφοι καλησπέρα,
τι γίνεται στην περίπτωση όπου ο μήνας αλλάζει και συνεπώς η 2η τιμή της ημέρας ενδέχεται να είναι μικρότερη της 1ης; Ή θεωρούμε ότι δεν υπάρχει τέτοια περίπτωση ως παραδοχή γιατί νομίζω ότι γίνεται ιδιαίτερα περίπλοκο μετά;

Ευχαριστώ

Επίσης έχει ασχοληθεί κάποιος με την επόμενη άσκηση ( σελ 121);

Ελένη

akalest0s:
Για την άσκηση 10/121 (οδηγίες μελέτης), εδώ μια δική μου λύση:

--- Κώδικας: Javascript ---ΠΡΟΓΡΑΜΜΑ οδμελ121_10ΣΤΑΘΕΡΕΣ  Μ = 500ΜΕΤΑΒΛΗΤΕΣ  ΑΚΕΡΑΙΕΣ: επιλογή, ν, θ  ΧΑΡΑΚΤΗΡΕΣ: ΤΚ[Μ, 3] ΑΡΧΗ  ν <- 0  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ    ΓΡΑΨΕ '1.Εισαγωγή νέου συνδρομητή'    ΓΡΑΨΕ '2.Διαγραφή συνδρομητή'    ΓΡΑΨΕ '3.Διόρθωση δεδομένων συνδρομητή'    ΓΡΑΨΕ '4.Αναζήτηση συνδρομητή'    ΓΡΑΨΕ '5.Εμφάνιση Τηλεφωνικού Καταλόγου'    ΓΡΑΨΕ '6.Έξοδος'    ΔΙΑΒΑΣΕ επιλογή    ΑΝ επιλογή = 1 ΤΟΤΕ      ΚΑΛΕΣΕ εισαγωγή(ΤΚ, ν)     ΑΛΛΙΩΣ_ΑΝ επιλογή = 2 ΤΟΤΕ      ΚΑΛΕΣΕ διαγραφή(ΤΚ, ν)     ΑΛΛΙΩΣ_ΑΝ επιλογή = 3 ΤΟΤΕ      ΚΑΛΕΣΕ διόρθωση(ΤΚ, ν)     ΑΛΛΙΩΣ_ΑΝ επιλογή = 4 ΤΟΤΕ      ΚΑΛΕΣΕ αναζήτηση(ΤΚ, ν, θ)     ΑΛΛΙΩΣ_ΑΝ επιλογή = 5 ΤΟΤΕ      ΚΑΛΕΣΕ εμφάνιση(ΤΚ, ν)     ΑΛΛΙΩΣ_ΑΝ επιλογή = 6 ΤΟΤΕ      ΓΡΑΨΕ 'τερματισμός προγράματος...'    ΤΕΛΟΣ_ΑΝ  ΜΕΧΡΙΣ_ΟΤΟΥ επιλογή = 6ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ!=================================================       1ΔΙΑΔΙΚΑΣΙΑ εισαγωγή(ΤΚ, ν) ΣΤΑΘΕΡΕΣ  Μ = 500ΜΕΤΑΒΛΗΤΕΣ  ΧΑΡΑΚΤΗΡΕΣ: ΤΚ[Μ, 3], α, β, γ  ΑΚΕΡΑΙΕΣ: ν, ι, ξΑΡΧΗ  ΑΝ ν < Μ ΤΟΤΕ    ΓΡΑΨΕ 'Δώσε όνομα, διεύθυνση, τηλέφωνο'    ΔΙΑΒΑΣΕ α, β, γ     ν <- ν + 1    ΤΚ[ν, 1] <- α    ΤΚ[ν, 2] <- β    ΤΚ[ν, 3] <- γ ! bubblesort    ΓΙΑ ι ΑΠΟ 2 ΜΕΧΡΙ ν      ΓΙΑ ξ ΑΠΟ ν ΜΕΧΡΙ ι ΜΕ_ΒΗΜΑ -1        ΑΝ ΤΚ[ξ, 1] < ΤΚ[ξ - 1, 1] ΤΟΤΕ          ΚΑΛΕΣΕ αντι(ΤΚ[ξ, 1], ΤΚ[ξ - 1, 1])           ΚΑΛΕΣΕ αντι(ΤΚ[ξ, 2], ΤΚ[ξ - 1, 2])           ΚΑΛΕΣΕ αντι(ΤΚ[ξ, 3], ΤΚ[ξ - 1, 3])         ΤΕΛΟΣ_ΑΝ      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ  ΑΛΛΙΩΣ    ΓΡΑΨΕ 'πίνακας ήδη γεμάτος'  ΤΕΛΟΣ_ΑΝΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ!=================================================       2ΔΙΑΔΙΚΑΣΙΑ διαγραφή (ΤΚ, ν) ΣΤΑΘΕΡΕΣ  Μ = 500ΜΕΤΑΒΛΗΤΕΣ  ΧΑΡΑΚΤΗΡΕΣ: ΤΚ[Μ, 3]   ΑΚΕΡΑΙΕΣ: ν, ι, θΑΡΧΗ   ΚΑΛΕΣΕ αναζήτηση(ΤΚ, ν, θ)   ΑΝ θ = 0 ΤΟΤΕ    ΓΡΑΨΕ 'δεν βρέθηκε ο συνδρομητής'  ΑΛΛΙΩΣ    ΤΚ[θ, 1] <- " "    ΤΚ[θ, 2] <- " "    ΤΚ[θ, 3] <- " "    ΓΙΑ ι ΑΠΟ θ ΜΕΧΡΙ ν - 1      ΚΑΛΕΣΕ αντι(ΤΚ[ι, 1], ΤΚ[ι + 1, 1])       ΚΑΛΕΣΕ αντι(ΤΚ[ι, 2], ΤΚ[ι + 1, 2])       ΚΑΛΕΣΕ αντι(ΤΚ[ι, 3], ΤΚ[ι + 1, 3])     ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ    ν <- ν - 1  ΤΕΛΟΣ_ΑΝΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ!=================================================       3ΔΙΑΔΙΚΑΣΙΑ διόρθωση (ΤΚ, ν) ΣΤΑΘΕΡΕΣ  Μ = 500ΜΕΤΑΒΛΗΤΕΣ  ΧΑΡΑΚΤΗΡΕΣ: ΤΚ[Μ, 3], α, β, γ  ΑΚΕΡΑΙΕΣ: ν, επιλογή, θΑΡΧΗ  ΓΡΑΨΕ 'Δώσε όνομα ή τηλέφωνο προς διόρθωση'  ΚΑΛΕΣΕ αναζήτηση(ΤΚ, ν, θ)   ΑΝ θ = 0 ΤΟΤΕ    ΓΡΑΨΕ 'δεν βρέθηκε ο συνδρομητής'  ΑΛΛΙΩΣ    ΓΡΑΨΕ 'δώσε τα νέα στοιχεία: όνομα, διεύθυνση, τηλέφωνο'    ΔΙΑΒΑΣΕ α, β, γ    ΤΚ[θ, 1] <- α    ΤΚ[θ, 2] <- β    ΤΚ[θ, 3] <- γ  ΤΕΛΟΣ_ΑΝΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ!=================================================       4ΔΙΑΔΙΚΑΣΙΑ αναζήτηση(ΤΚ, ν, θ) ΣΤΑΘΕΡΕΣ  Μ = 500ΜΕΤΑΒΛΗΤΕΣ  ΧΑΡΑΚΤΗΡΕΣ: ΤΚ[Μ, 3], κλειδί  ΑΚΕΡΑΙΕΣ: ν, επιλογή, αρχ, τελ, μέση, θ  ΛΟΓΙΚΕΣ: φλαγΑΡΧΗ  ΓΡΑΨΕ 'Τι θέλετε να δώσετε; 1 για όνομα, 3 για τηλέφωνο'  ΔΙΑΒΑΣΕ επιλογή  ΔΙΑΒΑΣΕ κλειδί   αρχ <- 1  τελ <- ν  φλαγ <- ΨΕΥΔΗΣ  θ <- 0  ΟΣΟ φλαγ = ΨΕΥΔΗΣ ΚΑΙ αρχ <= τελ ΕΠΑΝΑΛΑΒΕ    μέση <- (αρχ + τελ) div 2    ΑΝ ΤΚ[μέση, επιλογή] = κλειδί ΤΟΤΕ      φλαγ <- ΑΛΗΘΗΣ      θ <- μέση    ΑΛΛΙΩΣ_ΑΝ ΤΚ[μέση, επιλογή] < κλειδί ΤΟΤΕ      αρχ <- μέση + 1    ΑΛΛΙΩΣ      τελ <- μέση - 1    ΤΕΛΟΣ_ΑΝ  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ!=================================================       5ΔΙΑΔΙΚΑΣΙΑ εμφάνιση(ΤΚ, ν) ΣΤΑΘΕΡΕΣ  Μ = 500ΜΕΤΑΒΛΗΤΕΣ  ΧΑΡΑΚΤΗΡΕΣ: ΤΚ[Μ, 3]   ΑΚΕΡΑΙΕΣ: ν, ι, ξΑΡΧΗ  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ ν    ΓΙΑ ξ ΑΠΟ 1 ΜΕΧΡΙ 3      ΓΡΑΨΕ ΤΚ[ι, ξ]     ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ!=================================================       ΕΔΙΑΔΙΚΑΣΙΑ αντι(x, y) ΜΕΤΑΒΛΗΤΕΣ  ΧΑΡΑΚΤΗΡΕΣ: x, y, temp  ΑΚΕΡΑΙΕΣ: ωΑΡΧΗ  temp <- x  x <- y  y <- tempΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣΣημειωτέον ότι η λύση αυτή είναι μάλλον σε πειραγμένη/βελτιωμένη εκφώνηση, αν θυμάμαι καλά του Θ. Δρίβα:

--- Παράθεση --- Να γραφεί πρόγραμμα σε «ΓΛΩΣΣΑ» το οποίο να διαχειρίζεται πίνακα Τηλεφωνικού Καταλόγου 500 γραμμών, με 1η στήλη το Ονοματεπώνυμο, 2η στήλη την Διεύθυνση και 3η στήλη το Τηλέφωνο. Η διαχείριση γίνεται βάση του παρακάτω Μενού επιλογών:
1. Εισαγωγή νέου συνδρομητή  (αρχικά ο πίνακας είναι άδειος. Η εισαγωγή κάθε νέου συνδρομητή, γίνεται με διαδοχικές κλήσεις της συγκεκριμένης διαδικασίας. Η διαδικασία δέχεται και επιστρέφει τον πίνακα του καταλόγου και ένα δείκτη ν που δείχνει μέχρι ποια γραμμή έχει στοιχεία ο κατάλογος.)
2. Διαγραφή συνδρομητή  (Θα πρέπει η διαδικασία που καλείται, να διαβάζει ένα όνομα συνδρομητή ή το τηλέφωνό του, να γίνεται αναζήτηση, καλώντας την διαδικασία 4 και στη συνέχεια να διαγράφεται η συγκεκριμένη γραμμή συνδρομητή και να γεμίζει τα κενά που δημιουργούνται μετατοπίζοντας όλα τα επόμενα στοιχεία μια γραμμή πάνω στον πίνακα. Οι τιμές που περισσεύουν στο τέλος του πίνακα να γεμίζουν με κενά (πάλι δέχεται και επιστρέφει ΚΑΤ,ν))
3. Διόρθωση δεδομένων συνδρομητή (η διαδικασία θα διαβάζει όνομα ή τηλέφωνο και θα τα αναζητάει καλώντας την διαδικασία 4. Στη συνέχεια θα διαβάζει και τα 3 στοιχεία (όνομα, διεύθυνση, τηλέφωνο) και θα αντικαθιστά τα παλιά και θα επιστρέφει τον πίνακα.) (πάλι δέχεται και επιστρέφει ΚΑΤ,ν)
4. Αναζήτηση συνδρομητή (Με Όνομα ή Τηλέφωνο) (Η διαδικασία δέχεται τον πίνακα ΚΑΤ, τον δείκτη ν και διαβάζει όνομα ή τηλέφωνο μετά από ερώτηση: “Τι θέλετε να δώσετε; 1 για όνομα, 2 για τηλέφωνο” κάνει αναζήτηση και επιστρέφει τη θέση της γραμμής στην οποία υπάρχουν τα στοιχεία.)
5. Εμφάνιση Τηλεφωνικού Καταλόγου  (θα εμφανίζει απλά όλα τα στοιχεία του τηλεφωνικού καταλόγου)
6. Έξοδος
ΕΠΙΛΟΓΗ: ___
Η κάθε επιλογή αποτελεί ξεχωριστό υποπρόγραμμα.
Στην περίπτωση που έχει γεμίσει ο πίνακας να εμφανίζεται κατάλληλο μήνυμα
--- Τέλος παράθεσης ---

Εναλλακτικά, υπάρχουν διαθέσιμες και οι λύσεις του Παναγιώτη:
https://alkisg.mysch.gr/steki/index.php?topic=7987.msg88076#msg88076


--- Παράθεση από: eleniletta στις 24 Φεβ 2020, 10:03:58 μμ ---Συνάδελφοι καλησπέρα,
τι γίνεται στην περίπτωση όπου ο μήνας αλλάζει και συνεπώς η 2η τιμή της ημέρας ενδέχεται να είναι μικρότερη της 1ης; Ή θεωρούμε ότι δεν υπάρχει τέτοια περίπτωση ως παραδοχή γιατί νομίζω ότι γίνεται ιδιαίτερα περίπλοκο μετά;

--- Τέλος παράθεσης ---
Σε ποιο ακριβώς αναφέρεσαι, όταν λες ότι ο μήνας αλλάζει; Στο 2ο ή στο 3ο ερώτημα;

Αν σε βοηθάει, ρίξε μια ματιά και εδώ:
https://alkisg.mysch.gr/steki/index.php?topic=7010.msg88974#msg88974

Πλοήγηση

[0] Λίστα μηνυμάτων

[#] Επόμενη σελίδα

Μετάβαση στην πλήρη έκδοση