Písemka

Naprogramujte funkci, která dostane posloupnost znaků ASCII a určí četnost jednotlivých písmen anglické abecedy, nezávisle na jejich velikosti (case-insensitive).

Ukázkové řešení - Python

  def spocitej(retezec):
    pocty = dict() 
    for pismeno in "abcdefghijklmnopqrstuvwxyz":
      pocty[pismeno] = 0 # vytvorime pole poctu vsech malych pismen s vychozi hodnotou 0
    for znak in retezec.lower(): # retezec prevedeme na mala pismena a projdeme znak po znaku
      if znak in pocty: # pokud je znak klicem v nasem poli, je to male pismeno
        pocty[znak] += 1 # ...a tedy tomuto pismenu pricteme jeden vyskyt
    for pismeno, pocet in pocty.items(): # projdeme vsechny zaznamy v nasem poli poctu
      if pocet > 0: # pokud se toto pismeno vyskytlo aspon jednou
        print (pismeno, ":", pocet) # ...vypiseme pocet jeho vyskytu

Ukázkové řešení - C (včetně načtení vstupu)

  #include <stdio.h>
  void spocitej(char *retezec){
    int pocet[26]; // pole počtů
    int i; // pomocná proměnná
    // nastavíme všem znakům počet na nulu
    for (i=0; i<26; i++){
      pocet[i] = 0;
    }
    // projdeme celý řetězec znak po znaku
    for (i=0; retezec[i] != 0; i++){
      // právě zpracovávaný znak (přejmenujeme pro pohodlnější přístup)
      char znak = retezec[i];
      // pokud je to velké písmeno
      if (znak >= 'A' && znak <= 'Z'){
        // správně ho posuneme a zvýšíme příslušný počet o 1
        pocet[znak - 'A'] += 1;
      }
      // pokud je to malé písmeno
      else if (znak >= 'a' && znak <= 'z'){
        // správně ho posuneme a zvýšíme příslušný počet o 1
        pocet[znak - 'a'] += 1;
      }
    }
    // projdeme všechna písmena abecedy
    for (i=0; i<26; i++){
      if (pocet[i] > 0) {
        // a pokud se to aktuální v textu vyskytlo, vypíšeme jeho počet
        printf("%c: %i\n", i+'a', pocet[i]);
      }
    }
  }
  void main(){
    char retezec[1000]; // pro načtení vstupu
    gets(retezec); // pokud je vstup delší než 1000 znaků, program sletí
    spocitej(retezec);
  }