Παρασκευή, 17 Αυγούστου 2018

Βάζοντας τα χρώματα στη σειρά

Βαθμός Δυσκολίας:
5/5
Εκφώνηση Ασκησης: 

Ο πατέρας Μιχαλάκης, φανοποιός στο επάγγελμα, χρειάζεται τη βοήθειά σας ώστε να μπορεί να διαχειριστεί καλύτερα τα χρώματα που έχει στο μαγαζί του. Χρειάζεται ένα πρόγραμμα, που θα του δώσει τη δυνατότητα να αρχειοθετεί τα χρώματα, ώστε να μπορεί να τα βρίσκει όταν τα χρειάζεται. Το μαγαζί διαθέτει 250 θέσεις στις οποίες μπαίνουν τα κουτάκια από κάθε χρώμα. Θεωρήστε ότι υπάρχει ένα κουτί από κάθε χρώμα. Το πρόγραμμα θα πρέπει να υλοποιεί τα εξής:

α) να αποθηκεύσει στον πίνακα ΧΡ[250] τον χαρακτήρα "0" σε κάθε κελί.

β) να καλεί μια διαδικασία με το όνομα ΜΕΝΟΥ με την οποία θα εμφανίζεται το εξής μενού

 

******************************

1. Εισαγωγή νέου Χρώματος

2. Διαγραφή/Ανακύκλωση Χρώματος

3. Αναζήτηση θέσης χρώματος

4. Έξοδος από το πρόγραμμα

******************************

 Δώσε την επιλογή σου:

 

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

γ) ανάλογα με την επιλογή να γίνεται και αντίστοιχη ενέργεια. Η κάθε ενέργεια για κάθε μια από τις επιλογές περιγράφετε πιο κάτω:

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

 2) να καλεί συνάρτηση ΔΙΑΓΡ η οποία θα δέχεται τη θέση που βρίσκεται ένα χρώμα και θα το διαγράφει (Διαγραφή χρώματος σημαίνει ότι στη συγκεκριμένη θέση τοποθετεί τη τιμή 0)

 3)  να γραφεί συνάρτηση ΑΝΑΖ η οποία θα δέχεται το όνομα ενός χρώματος και θα επιστρέφει τη θέση που βρίσκεται στον πίνακα το χρώμα αυτό. Αν το χρώμα δεν υπάρχει επιστρέφει τη τιμή -1. Θεωρήστε ότι κάθε χρώμα έχει μοναδικό όνομα. Στη συνέχεια, στο κυρίως πρόγραμμα, αν το χρώμα έχει βρεθεί εμφανίζει την θέση του, αλλιώς το μήνυμα "ΔΕΝ ΥΠΑΡΧΕΙ ΤΟ ΧΡΩΜΑ".

Επιμέλεια: mstamos.gr

 

Λύση Άσκησης: 

 

ΠΡΟΓΡΑΜΜΑ Πατέρας_Μιχαλάκης

ΜΕΤΑΒΛΗΤΕΣ
  ΧΑΡΑΚΤΗΡΕΣ: ΧΡ[250], χρώμα
  ΑΚΕΡΑΙΕΣ: επιλ, θεση_πρ_0, θέση_χρ, θέση_χρώματος, ι
 
ΑΡΧΗ
!Ερώτημα α
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 250
!Το μηδέν είναι χαρακτήρας γιατί μέσα στον ΧΡ αποθηκεύονται τα ονόματα των χρωμάτων
    ΧΡ[ι] <- "0"
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
 
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
 
!Ερώτημα β
    ΚΑΛΕΣΕ ΜΕΝΟΥ(επιλ) 
 
    ΑΝ επιλ = 1 ΤΟΤΕ
!Ερώτημα β1
!Θα χρησιμοποιήσω τη συνάρτηση ΑΝΑΖ για να μου επιστρέψει την θέση από το πρώτο "0" που υπάρχει στον πίνακα ώστε να αποθηκεύσω εκεί το χρώμα που θέλω. Σε περίπτωση που ο πίνακα είναι γεμάτος θα μου επιστρεψει την τιμή -1.
      θεση_πρ_0 <- ΑΝΑΖ(ΧΡ, "0") 
      ΑΝ θεση_πρ_0 = -1 ΤΟΤΕ
        ΓΡΑΨΕ "Δεν υπάρχουν κενές θέσεις για επιπλέον χρώματα"
      ΑΛΛΙΩΣ
 
        ΚΑΛΕΣΕ ΕΙΣ(ΧΡ, θεση_πρ_0) 
      ΤΕΛΟΣ_ΑΝ
    ΑΛΛΙΩΣ_ΑΝ επιλ = 2 ΤΟΤΕ
!Ερώτημα β2
      ΓΡΑΨΕ "Δώσε το όνομα του χρώματος που θέλεις να διαγράψεις"
      ΔΙΑΒΑΣΕ χρώμα
      θέση_χρ <- ΑΝΑΖ(ΧΡ, χρώμα) 
!Θα χρησιμοποιήσω τη συνάρτηση ΑΝΑΖ για να μου επιστρέψει την θέση του χρώματος που ψάχνω να διαγράψω. Αν το χρώμα δεν υπάρχει μου επιστρέφει την τιμή -1.
      ΑΝ θέση_χρ = -1 ΤΟΤΕ
        ΓΡΑΨΕ "Δεν υπάρχει το χρώμα που δώσατε"
      ΑΛΛΙΩΣ
        ΚΑΛΕΣΕ ΔΙΑΓΡ(ΧΡ, θέση_χρ) 
        ΓΡΑΨΕ "Το χρώμα ", χρώμα, " διαγράφηκε με επιτυχία!"
      ΤΕΛΟΣ_ΑΝ
    ΑΛΛΙΩΣ_ΑΝ επιλ = 3 ΤΟΤΕ
!Ερώτημα β3
      ΓΡΑΨΕ "Δώσε το όνομα του χρώματος που θέλεις να βρεις"
      ΔΙΑΒΑΣΕ χρώμα
      θέση_χρώματος <- ΑΝΑΖ(ΧΡ, χρώμα) 
      ΑΝ θέση_χρώματος = -1 ΤΟΤΕ
        ΓΡΑΨΕ "ΤΟ ΧΡΩΜΑ ΔΕΝ ΥΠΑΡΧΕΙ"
      ΑΛΛΙΩΣ
        ΓΡΑΨΕ "Το χρώμα βρίσκεται στη θέση ", θέση_χρώματος
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΑΝ
  ΜΕΧΡΙΣ_ΟΤΟΥ επιλ = 4
  ΓΡΑΨΕ "Bye bye!!!"
 
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
 
!Η διαδικασία του β ερωτήματος
ΔΙΑΔΙΚΑΣΙΑ ΜΕΝΟΥ(επιλ) 
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: επιλ
ΑΡΧΗ
 
  ΓΡΑΨΕ "******************************"
  ΓΡΑΨΕ "1. Εισαγωγή νέου Χρώματος"
  ΓΡΑΨΕ "2. Διαγραφή/Ανακύκλωση Χρώματος"
  ΓΡΑΨΕ "3. Αναζήτηση θέσης χρώματος"
  ΓΡΑΨΕ "4. Έξοδος από το πρόγραμμα"
  ΓΡΑΨΕ "******************************"
 
  ΓΡΑΨΕ "Δώσε την επιλογή σου"
  ΔΙΑΒΑΣΕ επιλ
                                                          !Έλεγχος τιμών εισόδου
  ΟΣΟ επιλ <> 1 ΚΑΙ επιλ <> 2 ΚΑΙ επιλ <> 3 ΚΑΙ επιλ <> 4 ΕΠΑΝΑΛΑΒΕ
    ΓΡΑΨΕ "Λάθος επιλογή. Ξαναδώσε"
    ΔΙΑΒΑΣΕ επιλ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
 
 
 
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
 
!Η διαδικασίας του β1 ερωτήματος
ΔΙΑΔΙΚΑΣΙΑ ΕΙΣ(ΧΡ, θεσ) 
ΜΕΤΑΒΛΗΤΕΣ
  ΧΑΡΑΚΤΗΡΕΣ: ΧΡ[250] 
  ΑΚΕΡΑΙΕΣ: θεσ
 
ΑΡΧΗ
 
  ΓΡΑΨΕ "Δώσε το όνομα του χρώματος"
  ΔΙΑΒΑΣΕ ΧΡ[θεσ] 
 
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
 
!Η συνάρτηση του β2 ερωτήματος
ΔΙΑΔΙΚΑΣΙΑ ΔΙΑΓΡ(ΧΡ, θ) 
ΜΕΤΑΒΛΗΤΕΣ
  ΧΑΡΑΚΤΗΡΕΣ: ΧΡ[250] 
  ΑΚΕΡΑΙΕΣ: θ
 
ΑΡΧΗ
 
  ΧΡ[θ] <- "0"
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
 
!Η συνάρτηση του β3 ερωτήματος
ΣΥΝΑΡΤΗΣΗ ΑΝΑΖ(ΧΡ, χρωμ): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΧΑΡΑΚΤΗΡΕΣ: ΧΡ[250], χρωμ
  ΑΚΕΡΑΙΕΣ: θέση, ι
ΑΡΧΗ
!Επειδή η εκφώνηση μας λέει ότι κάθε χρώμα είναι μοναδικό γι'αυτό το λόγο θα χρησιμοποιήσω τη σειριακή αναζήτηση πρώτης εμφάνισης. Εδώ θα βάλω αρχική τιμή στη θέση το -1 ώστε αμα δεν βρεθεί το χρώμα που ψάχνω να επιστρέψει αυτό στο κυρίως πρόγραμμα μας.
  θέση <- -1
  ι <- 1
  ΟΣΟ ι <= 250 ΚΑΙ θέση = -1 ΕΠΑΝΑΛΑΒΕ
    ΑΝ ΧΡ[ι] = χρωμ ΤΟΤΕ
      θέση <- ι
    ΤΕΛΟΣ_ΑΝ
    ι <- ι + 1
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΑΝΑΖ <- θέση
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ