Προβλήματα στους Πίνακες

Άσκηση 1
Όταν το πρωτάθλημα ποδοσφαίρου τελειώσει, βραβεύεται ο ποδοσφαιριστής που έχει σημειώσει τα περισσότερα τέρματα. Ωστόσο, αν υπάρχουν παραπάνω από ένας ποδοσφαιριστές με τον ίδιο αριθμό τερμάτων, νικητής βγαίνει αυτός που έχει τα λιγότερα λεπτά συμμετοχής.
Να γίνει αλγόριθμος, που με δεδομένα τα ονόματα, τον αριθμό των τερμάτων και τα λεπτά συμμετοχής (στους πίνακες ΟΝ, ΓΚΟΛ και ΛΣ αντίστοιχα) των 400 ποδοσφαιριστών που συμμετέχουν στο πρωτάθλημα, να εντοπίζει και να εμφανίζει το όνομα του πρώτου σκόρερ.

Αλγόριθμος ποδόσφαιρο
   Δεδομένα //ΟΝ, ΓΚΟΛ, ΛΣ//
   ! Έστω, ότι καλύτερος είναι ο πρώτος ...
   max <- 1
   Για i από 2 μέχρι 400
      ! Αν ο i-στός παίκτης, έχει περισότερα γκολ από τον max ή αν έχει τα ίδια
      ! αλλά λιγότερο λεπτά συμμετοχής ...
      Αν ΓΚΟΛ[i] > ΓΚΟΛ[max] Η (ΓΚΟΛ[i] = ΓΚΟΛ[max] ΚΑΙ ΛΣ[i] < ΛΣ[max]) τότε
         max <- i
      Τέλος_αν
   Τέλος_επανάληψης
   Εμφάνισε ΟΝ[max] 
Τέλος ποδόσφαιρο

Άσκηση 2
Μια εταιρεία ταχυμεταφορών χρεώνει τους πελάτες της ανάλογα με τον προορισμό της επιστολής και του βάρους της. Η βασική τιμή εξαρτάται από τον προορισμό ο οποίος καθορίζεται ανάλογα με τον ταχυδρομικό κωδικό που αναγράφεται στην διεύθυνση της επιστολής. Η εταιρεία διατηρεί σε έναν πίνακα με όνομα ΤΚ[1000], 1000 ταχυδρομικούς κωδικούς και σε έναν δεύτερο ΧΡ[1000] την χρέωση (σε ευρώ) για κάθε έναν από τους 1000 ταχυδρομικούς κωδικούς. Αν μια επιστολή προορίζεται για έναν ταχυδρομικό κωδικό που βρίσκεται εκτός λίστας τότε η βασική τιμή είναι 5 ευρώ. Επίσης ανάλογα με το βάρος της επιστολής η χρέωση ορίζεται σύμφωνα με τον επόμενο πίνακα:

Βάρος επιστολήςΧρέωση
έως και 1000 γρ.+0% επί της βασικής τιμής
από 1001 έως και 5000 γρ.+25% επί της βασικης τιμής
από 5001 γρ. και πάνω+35% επί της βασικης τιμής

Να γίνει αλγόριθμος που:

  • Θα διαβάζει τον ταχυδρομικό κωδικό και το βάρος της επιστολής (σε γραμμάρια). Ο ταχυδρομικός κωδικός πρέπει να είναι θετικός πενταψήφιος αριθμός αλλιώς θα πρέπει να ζητείται εκ νέου η καταχώρησή του.
  • Να υπολογίζει και εμφανίζει την χρέωση που προκύπτει σύμφωνα με τον προορισμό και το βάρος της επιστολής

Σημείωση: Θεωρήστε πως οι πίνακες ΤΚ και ΧΡ είναι δεδομένοι

Αλγόριθμος Ταχυμεταφορά
   Δεδομένα //ΤΚ, ΧΡ//
   ! διάβασε τον ταχυδρομικό κωδικό της επιστολής και έλεγξε αν είναι 5ψήφιος
   Αρχή_επανάληψης
      Διάβασε ταχ_κωδ
   Μέχρις_ότου ταχ_κωδ > 10000 ΚΑΙ ταχ_κωδ < 99999
 
   ! διάβασε το βάρος της επιστολής
   Διάβασε βάρος
 
   ! αναζήτησε τον πίνακα ΤΚ τον κωδικό ταχ_κωδ
   βρέθηκε <- ΨΕΥΔΗΣ
   ι <- 1
   Όσο (ι <= 1000 KΑΙ βρέθηκε = ΨΕΥΔΗΣ) επανάλαβε
      Αν ΤΚ[ι] = ταχ_κωδ τότε
         θέση <- ι
         βρέθηκε <- ΑΛΗΘΗΣ
      Τέλος_αν
      ι <- ι + 1
   Τέλος_επανάληψης
 
   ! Αν ο ταχυδρομικός κωδικός βρέθηκε τότε
   ! καταχώρισε στην μεταβλητή χρέωση το κόστος μεταφοράς
   ! αλλιώς θεώρησε πως το κόστος είναι 5 ευρώ
   Αν βρέθηκε = ΑΛΗΘΗΣ τότε
      χρέωση <- ΧΡ[θέση]
   Αλλιώς
      χρέωση <- 5
   Τέλος_αν
 
   ! αφού υπολόγισες την βασική τιμή, βρες το επιπρόσθετο κόστος λόγω βάρους
   Αν βάρος > 1000 και βάρος <= 5000 τότε
      χρέωση <- χρέωση + 25/100 * χρέωση
   Αλλιώς_αν χρέωση > 5000 τότε
      χρέωση <- χρέωση + 35/100 * χρέωση
   Αλλιώς
      χρέωση <- χρέωση + 0
   Τέλος_αν
 
   Εμφάνισε "Η χρέωση για την μεταφορά της επιστολής ανέρχεται σε ", χρέωση, " ευρώ"
Τέλος Ταχυμεταφορά

Άσκηση 3
Να γίνει αλγόριθμος ο οποίος θα εμφανίζει στον χρήστη 4 ερωτήσεις. Ο χρήστης θα πρέπει να απαντήσει σε όλες τις ερωτήσεις. Για κάθε ερώτηση θα έχει τρεις ευκαιρίες. Δηλαδή για κάθε ερώτηση θα μπορεί να δώσει μέχρι και τρεις απαντήσεις. Ο αλγόριθμος θα εμφανίζει την επόμενη ερώτηση όταν ο χρήστης απαντά σωστά ή όταν ξεπεράσει τις τρεις προσπάθειες. Για κάθε ερώτηση που ο χρήστης απαντά με την πρώτη ευκαιρία κερδίζει 6 πόντους. Με την δεύτερη ευκαιρία κερδίζει 4 και με την τρίτη ευκαιρία 2 πόντους. Να γίνει αλγόριθμος που θα εμφανίζει τις ακόλουθες ερωτήσεις και ανάλογα με τις απαντήσεις του παίκτη, στο τέλος να εμφανίζει το σκορ του.
Ερώτηση 1: Ποιο είναι το αποτέλεσμα της πράξης 12 + 24;
Ερώτηση 2: Ποιο είναι το αποτέλεσμα της πράξης 122 – 67;
Ερώτηση 3: Ποιο είναι το αποτέλεσμα της πράξης 6 * 12;
Ερώτηση 4: Ποιο είναι το αποτέλεσμα της πράξης 81 / 3;

 Αλγόριθμος Quiz
   ! Οργάνωσε τα δεδομένα μέσα σε πίνακες.
   ! Αυτό θα μας βοηθήσει κατά την επανάληψη.
   Ερωτήσεις[1] <- "Ποιο είναι το αποτέλεσμα της πράξης 12 + 24;"
   Ερωτήσεις[2] <- "Ποιο είναι το αποτέλεσμα της πράξης 122 - 67;"
   Ερωτήσεις[3] <- "Ποιο είναι το αποτέλεσμα της πράξης 6 * 12;"
   Ερωτήσεις[4] <- "Ποιο είναι το αποτέλεσμα της πράξης 81 / 3;"
 
   Απαντήσεις[1] <- 36
   Απαντήσεις[2] <- 55
   Απαντήσεις[3] <- 72
   Απαντήσεις[4] <- 27
 
   Σ_πόντοι <- 0
   Για i από 1 μέχρι 4
      Εμφάνισε Ερωτήσεις[i]
      Διάβασε απάντηση_χρήστη
      ! Αυτή είναι η πρώτη προσπάθεια.
      προσπάθεια <- 1      
 
      ! Αν η απάντηση δεν είναι σωστή, ζήτα νέα απάντηση, αρκεί οι
      ! προσπάθειες που έχεις κάνει να μην είναι τρεις. 
      ! Αν είναι τρεις σταμάτα την επανάληψη
      Όσο απάντηση_χρήστη <> Απαντήσεις[i] ΚΑΙ προσπάθεια < 3 επανάλαβε
         προσπάθεια <- προσπάθεια + 1
         Εμφάνισε "Κάνατε λάθος, προσπαθήστε ξανά:"
         Διάβασε απάντηση_χρήστη
      Τέλος_επανάληψης
 
      ! Εφόσον η απάντηση του χρήστη είναι σωστή, υπολόγισε τους πόντους που του αναλογουν
      Αν απάντηση_χρήστη = Απαντήσεις[i] τότε
         ! Ανάλογα με τον αριθμό των προσπαθειών, οι πόντοι μειώνονται κατά δύο.
         πόντοι_ερώτησης <- 6 - (προσπάθεια - 1) * 2
         Σ_πόντοι <- Σ_πόντοι + πόντοι_ερώτησης
      Τέλος_αν
   Τέλος_επανάληψης
 
   Εμφάνισε "Οι συνολικοί πόντοι που συγκέντρωσες είναι: ", Σ_πόντοι
Τέλος Quiz

11 σχόλια για το άρθρο “Προβλήματα στους Πίνακες

  • 30/11/2010 at 22:06
    Permalink

    Μήπως έχει γίνει ένα μικρό λάθος και στον βρόχο:

    Όσο (ι <= 1000 KΑΙ βρέθηκε = ΨΕΥΔΗΣ επανάλαβε
    Αν ΤΚ[ι] = ταχ_κωδ τότε
    θέση <- ι
    βρέθηκε <- ΨΕΥΔΗΣ
    Τέλος_αν
    ι <- ι + 1
    Τέλος_επανάληψης

    αντί για ΨΕΥΔΗΣ θα έπρεπε να εκχωρείται η τιμή ΑΛΗΘΗΣ στο βρέθηκε;

  • 30/11/2010 at 23:47
    Permalink

    Σωστά!
    Το διόρθωσα 🙂

  • 20/01/2012 at 09:42
    Permalink

    Στην Άσκηση 2 χρειάζονται οι εξής διορθώσεις (γίνεται και με άλλο τρόπο, αλλά έτσι θα κάνεις τις λιγότερες διορθώσεις στον κώδικα):

    α) αλλάζεις τη γραμμή

    πόντοι_ερώτησης <- 6 + (προσπάθεια – 1) * 2

    με

    πόντοι_ερώτησης <- 6 – (προσπάθεια – 1) * 2

    και

    β) αλλάζεις το τμήμα κώδικα

    Όσο απάντηση_χρήστη Απαντήσεις[i] ΚΑΙ προσπάθεια < 3 επανάλαβε
    προσπάθεια <- προσπάθεια + 1
    Εμφάνισε "Κάνατε λάθος, προσπαθήστε ξανά:"
    Διάβασε απάντηση_χρήστη
    Τέλος_επανάληψης

    με

    Όσο απάντηση_χρήστη Απαντήσεις[i] ΚΑΙ προσπάθεια < 4 επανάλαβε
    προσπάθεια ← προσπάθεια + 1
    Αν προσπάθεια < 4 τότε
    Εμφάνισε "Κάνατε λάθος, προσπαθήστε ξανά:"
    Διάβασε απάντηση_χρήστη
    Τέλος_αν
    Τέλος_επανάληψης

  • 21/01/2012 at 18:16
    Permalink

    Γεια σου Σταύρο,

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

    Ως προς το δεύτερο σκέλος, προτίμησα μια διαφορετική διόρθωση, ίσως πιο κατανοητή (κατ’ εμέ), στους μαθητές που βλέπουν την άσκηση

  • 21/01/2012 at 20:51
    Permalink

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

    Άσε που δεν βγήκε τυχαία, και εδώ είναι ένα ενδιαφέρον σημείο: είναι η διόρθωση στην οποία καταλήξαμε με τους μαθητές μου στο σχολείο! 😉

    Γενικότερα τώρα: συγχαρητήρια για τον δικτυακό σου τόπο! Εύχομαι να τον εμπλουτίσεις σύντομα με περισσότερες ασκήσεις. Συνέχισε την πολύ καλή προσπάθεια!

    Φιλικά και συναδελφικά,

    Σταύρος

  • 04/02/2012 at 11:15
    Permalink

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

  • 15/02/2014 at 09:43
    Permalink

    Πολύ όμορφες ασκήσεις, απαιτούν κάποια
    Σκέψη! Έχω ακόμη μια διόρθωση να προτείνω. Όσο αφορα το προτελευταίο μήνυμα του Σταυρου.
    Η συνθήκη στην αν που εεμφανίζει το προσπαθήστε ξανά να ειναι:
    Αν προσπάθεια <=2 τότε
    .
    .
    Και αυτό το λέω διότι με το υπάρχον ( <4)

    Την τρίτη φορα που θα πατήσει λάθος απάντηση ο χρήστης θα του εμφανιστεί μήνυμα ξαναπροσπαθησε, ενώ δεν έχει αυτό το δικαίωμα.
    Φιλικότητα!

  • 23/05/2014 at 17:23
    Permalink

    sigxaritiria gia thn selida sas! tygxanw noob ston aepp kai exw voh8h8ei polu apo to uliko sas ! h erwthsh pou 8a h8ela na kanw einai an h askhsh me tis 4 erwthseis ws pros ton xrhsth 8a mporouse na lh8ei kai xwris thn xrhsh pinakwn ??

  • 23/05/2014 at 17:42
    Permalink

    @ναγια Δύσκολα η συγκεκριμένη άσκηση θα μπορούσε να γίνει χωρίς πίνακες. Επειδή οι ερωτήσεις είναι μόνο 4 θα μπορούσες με Αν…Αλλιώς_αν να δείχνεις κάθε φορά την σωστή ερώτηση και απάντηση … αλλά αν οι ερωτήσεις ήταν 104 τι θα έκανες;

  • 17/12/2015 at 18:12
    Permalink

    Για την πρώτη άσκηση νομίζω ότι ένας πίνακας με 4 στήλες είναι καλύτερος από 3εις στήλες με μία.
    Αλγόριθμος ΠΟΔΟΣΦΑΙΡΟ
    ΔΕΔΟΜΕΝΑ // ΟΓΛ[400,3] //
    ! Οι στήλες είναι με την εξής σειρά
    ! ΟΝΟΜΑ ΓΚΟΛ ΛΕΠΤΑ ΣΥΜΜΕΤΟΧΗΣ
    max ΟΓΛ[max,2] Η (ΟΓΛ[i,2] = ΟΓΛ[max,2] ΚΑΙ ΟΓΛ[i,3] > ΟΓΛ[max,3]) τότε
    max <- i
    Τέλος_αν
    Τέλος επανάληψης
    Εμφάνισε ΟΓΛ[max,1]
    Τέλος ΠΟΔΟΣΦΑΙΡΟ

Αφήστε μια απάντηση

Η ηλ. διεύθυνσή σας δεν δημοσιεύεται. Τα υποχρεωτικά πεδία σημειώνονται με *