0138 - Frecventa: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
Line 18: Line 18:
<br>
<br>
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line="1">
# 0138 Frecventa
# 0138 Frecventa
def verificare(sir_chr):
def verificare(sir_chr):           # functia de validare a datelor de intrare
     for caracter in sir_chr:
     for caracter in sir_chr:
         if 122 < ord(caracter) < 97:
         if 122 < ord(caracter) < 97:
             if ord(caracter) != ord(" "):
             if ord(caracter) != ord(" "):   # caracterul trebuie sa fie litera sau spatiu
                print(caracter + '**************')
                 return False
                 return False


Line 31: Line 30:


def frecventa(sir):
def frecventa(sir):
     nr_alfabet = []
     nr_alfabet = []     # vectorul de frecventa in care numaram fiecare litera din alfabet
 
     for i in range(123):
     for i in range(123):
         nr_alfabet.append(0)
         nr_alfabet.append(0)


     for caracter in sir:
     for caracter in sir:                   # numaram fiecare litera din sir in vectorul de frecventa
         nr_alfabet[ord(caracter)] += 1
         nr_alfabet[ord(caracter)] += 1


     max_aparitii = max(nr_alfabet[97:])
     max_aparitii = max(nr_alfabet[97:])     # aflam numarul maxim de aparitii


     for i in range(len(nr_alfabet)):
     for i in range(len(nr_alfabet)):
         if nr_alfabet[i] == max_aparitii and i >= 97:
         if nr_alfabet[i] == max_aparitii and i >= 97:  
            # parcurgem sirul, daca gasim caracterul cu numar maxim de aparitii si e o litera il afisam
             print(chr(i))
             print(chr(i))
             return
             return
Line 48: Line 47:


if __name__ == '__main__':
if __name__ == '__main__':
     sir_caractere = input("Introduceti sirul de caractere: ")
     sir_caractere = input("Introduceti sirul de caractere: ")       # citirea sirului


     if verificare(sir_caractere):
     if verificare(sir_caractere):   # verificarea datelor de intrare
         print("Datele introduse corespund restricțiilor impuse.")
         print("Datele introduse corespund restricțiilor impuse.")
         frecventa(sir_caractere)
         frecventa(sir_caractere)       # apelul functiei de rezolvare
     else:
     else:
         print("Datele introduse nu corespund restricțiilor impuse.")
         print("Datele introduse nu corespund restricțiilor impuse.")
       
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 13:19, 4 May 2023

Cerința[edit | edit source]

Să se scrie un program care citește un șir de caractere și afișează litera mică cel mai des întâlnită în șir.

Date de intrare[edit | edit source]

Programul citește de la tastatură un șir de cel mult 255 caractere.

Date de ieșire[edit | edit source]

Programul afișează pe ecran litera mică cel mai des întâlnită în șir.

Restricții și precizări[edit | edit source]

- șirul conține litere mari și mici ale alfabetului englez, cifre și spații
- dacă șirul conține mai multe litere cu număr maxim de apariții, se va fișa prima în ordine alfabetică

Exemplu 1[edit | edit source]

Intrare
In 12 mergem la munte
Ieșire
e


Explicație[edit | edit source]

Litera e apare în șir de 3 ori. Tot de 3 ori apare și litera m, dar e este prima în ordine alfabetică.


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1">

  1. 0138 Frecventa

def verificare(sir_chr): # functia de validare a datelor de intrare

   for caracter in sir_chr:
       if 122 < ord(caracter) < 97:
           if ord(caracter) != ord(" "):   # caracterul trebuie sa fie litera sau spatiu
               return False
   return True


def frecventa(sir):

   nr_alfabet = []     # vectorul de frecventa in care numaram fiecare litera din alfabet
   for i in range(123):
       nr_alfabet.append(0)
   for caracter in sir:                    # numaram fiecare litera din sir in vectorul de frecventa
       nr_alfabet[ord(caracter)] += 1
   max_aparitii = max(nr_alfabet[97:])     # aflam numarul maxim de aparitii
   for i in range(len(nr_alfabet)):
       if nr_alfabet[i] == max_aparitii and i >= 97:   
           # parcurgem sirul, daca gasim caracterul cu numar maxim de aparitii si e o litera il afisam
           print(chr(i))
           return


if __name__ == '__main__':

   sir_caractere = input("Introduceti sirul de caractere: ")       # citirea sirului
   if verificare(sir_caractere):   # verificarea datelor de intrare
       print("Datele introduse corespund restricțiilor impuse.")
       frecventa(sir_caractere)        # apelul functiei de rezolvare
   else:
       print("Datele introduse nu corespund restricțiilor impuse.")
       

</syntaxhighlight>