0890 - Nr Vocale

From Bitnami MediaWiki
Revision as of 18:58, 2 May 2023 by Hotico Iulia Denisa (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința

Se dă o propoziție formată din litere mari și mici ale alfabetului englez, cifre, spații și semne de punctuație, în care literele mari și mici se consideră identice. Determinați vocala din șir cu număr maxim de apariții.

Date de intrare

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

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: " Datele de intrare corespund restrictiilor impuse", apoi pe un rand nou va afișa vocala determinată, literă mare. În caz contrar, se va afișa mesajul:" Datele de intrare nu corespund restrictiilor impuse".

Restricții și precizări

șirul citit va avea cel mult 255 caractere
dacă în șir există mai multe vocale cu număr maxim de apariții, se va afișa prima în ordine alfabetică
vocalele sunt AEIOUaeiou

Exemplu 1

Intrare
Ana are 5 mere si trei nuci
Ieșire
Datele introduse corespund restricțiilor impuse.
E


Exemplu 2

Intrare
$$$$$$$$$$$
Ieșire
Datele de intrare nu corespund restricțiilor impuse.


Rezolvare

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

  1. 0890 NrVocale

def validare(propozitie): # functia de validare a datelor de intrare

   if len(propozitie) > 255:
       raise ValueError
   # daca dsatele de intrare nu corespund, ridicam eroarea ValueError
   print("Datele de intrare corespund restrictiilor impuse")
   return True


def vocala(litera): # functia de verificare daca e vocala (include si majuscule)

   lista_vocale = "aeiouAEIOU"
   if litera in lista_vocale:
       return True
   else:
       return False


def nrvocale(propozitie): # functia de rezolvare

   frecventa_litere = []           # ne creem un vector de frecventa pentru litere
   for i in range(128):            # pana la 128 se afla ultimul cod ascii pentru litere
       frecventa_litere.append(0)
   for litera in propozitie:
       if vocala(litera):          # daca e vocala crestem frecventa
           if litera >= 'a':
               frecventa_litere[ord(litera) - 32] += 1
               # daca e vocala mica, crestem frecventa la exhivalentul ei in majuscule
               # deoarece in problema nu se tine cont daca e litera mare sau mica si le numaram pe toate la majuscule
           else:
               frecventa_litere[ord(litera)] += 1
   aparitii_max = max(frecventa_litere)    # gasim numarul cel mai mare de aparitii de vocale
   for i in range(len(frecventa_litere)):      # parcurgem iar vectorul de frecventa
       if frecventa_litere[i] == aparitii_max:     # daca am gasit vocala cu nr maxim de aparitii o afisam
           print(chr(i))
           return                                  # si incheiem programul


if __name__ == '__main__':

   # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam
   try:
       sir = input(f"Introduceti textul ")     # citirea textului
       validare(sir)                           # apelul functiei de validare
       nrvocale(sir)                           # apelul functiei de rezolvare
   except ValueError:
       print("Datele de intrare nu corespund restrictiilor impuse")
   except IndexError:
       print("Datele de intrare nu corespund restrictiilor impuse")
       

</syntaxhighlight>