Τρίτο θέμα Πανελληνίων Ιουνίου 2018 στο μάθημα του Προγραμματισμού.

Χαρακτηριστικά :  σάρωση συμβολοσειράς και μέτρημα πλήθους εμφάνισης χαρακτήρων. Η κύρια δυσκολία είναι πως ενώ διατρέχουμε μια λίστα να έχουμε βρεί και τον δείκτη με τον οποίο θα ενημερώσουμε μια άλλη λίστα μετρητών στην κατάλληλη θέση.

# Αρχικοποίηση μεταβλητών και είσοδος δεδομένων

gram = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']

pgms  = 0    # plithos grammaton mhdenikhs syxnothtas

epiga = raw_input("Δώσε επιγραφή Α: ")
epigb  = raw_input("Δώσε επιγραφή Β: ")
epig = epiga + epigb

# Δημιουργία κενής λίστας SUMA

suma = []
for i in range(26) :
    suma.append(0)

# Υπολογισμός συχνότητας εμφάνισης κάθε γράμματος

for k in range(len(gram)) :
 for j in range(len(epig)) :
      if epig[j] == gram[k] :
           suma[k] = suma[k] + 1

# Εμφάνιση ποιών γραμμάτων πρέπει  να παραγγελθούν και σε ποιά ποσότητα
# και υπολογισμός του πλήθους γραμμάτων μηδενικής συχνότητας."

print "Πρέπει να παραγγελθούν τα παρακάτω γράμματα και στις ποσότητες που εμφανίζονται:"

for i in range(len(suma)):
    if suma[i] != 0 : 
        print "Το γράμμα :" , gram[i] , " πρέπει να παραγγελθεί " , suma[i], " φορές."
    else :      
        pgms =  pgms + 1

print " Το πλήθος γραμμάτων με μηδενική συχνότητα είναι : " , pgms

 

 

Εναλλακτικά για το τρίτο υποερώτημα

h=-1
 for g in gram : 
        h = h + 1 
        for c in epig : 
                    if g == c : 
                             suma[h] = suma[h] + 1

Το αρνητικό στην παραπάνω λύση είναι ότι το ιδίωμα με το οποίο διατρέχουμε μια λίστα (και μια συμβολοσειρά) δεν μας βοηθάει στο να έχουμε άμεσα και το δείκτη που θα χρειαστούμε για τη λίστα suma . Και κάνουμε και ένα μικρό μπάλωμα με το να αρχικοποιούμε το δείκτη σε -1 για να μην βγούμε εκτός ορίων.

Υπάρχει και τρίτη λύση για το τριτο υπερώτημα που είδα από φροντιστήριο χρησιμοποιεί ιδίωμα για το έξωτερικο βρόχο
και μετρητή για τον εσωτερικό. Λύση που ίσως χάνει σε απλότητα.

Ετικέτες:, , ,

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

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