soendus.c

Algoritm ise:

  • Eesmärk on lugeda unikaalsete numbrite esinemissagedust mingis kindlas vahemikus. Sisuliselt oleks igale numbrile vaja oma loendurit, kuid see on kohmakas ja ebamugav, kui vahemik peaks muutuma, mistõttu kasutame nende loenduseks massiivi. Iga massiivi liige on loenduriks ühele võimalikest variantidest mida kasutaja sisestab.
  • Kuna antud ülesanne ei nõua meilt sisestatud numbrite taasesitamist algses järjekorras, puudub vajadus numbreid salvestada. Piisab, kui loeme numbri ajutiselt sisse ja loendame üles. Pärast numbri töötlust, võime selle julgelt üle kirjutada järgmise sisestatava numbriga.
  • Loendamise vahemiku muutmiseks piisab UNIQUE_NUMBERS konstandi muutmisest.
  • Keskmine esinemissagedus leitakse jagades kõigi numbrite arv unikaasete numbrite arvuga. Arvude väärtused mõju ei avalda.
  • Arvestada tuleb, et antud ülesande lahendus pole universaalne, vaid toetub tugevalt algandmete piirangule, mistõttu saame kasutada lihtsamat lahendust.
Koodist huvitavamaid kohti:

  • Keskmine leitakse printf funktsiooni sees. Antud juhul kasutame välja omistustehte tagastust, milleks on tehte käigus arvutatud väärtus ning kuvame selle ekraanil.
  • Loendamise teostamiseks kasutame ära massiivi elementide inkrementeerimist, kusjuures indeksi määrab ära kasutaja öeldud number. St kui kasutaja ütleb 0, siis meie suurendame massiivis nullinda indeksiga mälupesas olevat numbrit, mis tähistas meil nullide arvu.
  • Keskmise kuvamiseks kasutame printf parameetrite sisse peidetud if tingimuslause lühivormi [kirjeldatud siin]. Kui tingimus osutub tõeseks, siis printf formaadis määratud %s asemele trükitakse teavitus üle keskmise sagedusega arvust. Kui tingimus on väär, siis asendatakse see tühja stringiga.