Differences between revisions 10 and 11
Revision 10 as of 2010-03-03 17:18:01
Size: 3451
Editor: sarkoci
Comment:
Revision 11 as of 2010-03-03 18:31:36
Size: 4221
Editor: sarkoci
Comment:
Deletions are marked like this. Additions are marked like this.
Line 60: Line 60:
 1. Črty jazyka ktoré nepatria do ANSI C
   a. Ak deklarujete napríklad `int pole[n]` kde `n` je nejaká predtým inicializovaná premenná, devcpp, žial, nebude frflať. Lenže niečo podobné je z hladiska čistého ANSI C striktne zakázané. Keďže hodnota `n` nie je v čase kompilácie známa, to čo takouto deklaráciou vlastne hovoríte, je dynamická allokácia pamate. Lenže tá sa správne rieši cez funkciu `malloc` a jej príbuzné. Jediný dôvod prečo takýto riadok ide skompilovať je ten, že devcpp nie je dôsledný kompilátor a, aj bez toho aby o to bol požiadaný, do jazyka mieša črty neoficiálnych rozšírení a C++. Ja ale takéto tolerovať nebudem; skúste to skompilovať pod linuxom pomocou `gcc` a hneď pochopíte prečo.

Zadania

Všeobecné zásady:

  • Vypracované zadania zasielajte na sarkoci@math.sk, prikladajte ich k e-mailu skomprimované ako prílohu a subject nastavte na "seminar z programovania".

  • Zdrojový kód odsádzajte.
  • Program rozbíjajte na zmysluplné funkčné bloky ktoré sú realizované funkciami - čím viac, tým lepšie.
  • Ošetrujte chybové stavy.
  • Programujte tak, aby kompilátor nevyhlasoval ani jedno varovanie pri pedantnom móde kompilácie.

1

Naprogramujte funkciu ktorá zadané dynamicky allokované $n$-prvkové pole premenných typu int:

  • Inicializuje na hodnotu 0.
  • Inicializuje na aritmetickú postupnosť $\{a+i.b\}_{i\in \mathbf{Z}_{n}}$ so zadanými parametrami $a,b\in\mathbf{Z}$.

  • Inicializuje na postupnosť náhodne generovaných celých čísel.
  • Analyzuje a zisťuje pozíciu a dĺžku najdlhšej klesajúcej podpostupnosti bezprostredne po sebe nasledujúcich prvkov.
  • Sčituje a vracia hodnotu súčtu všetkých prvkov v poli.
  • Analyzuje a vracia aritmetický priemer prvkov v poli.
  • Analyzuje a vracia rozptyl prvkov v poli.

Design funkcií (čiže voľba návratových typov a argumentov) je na vás. Urobte to ale tak, aby funkcie referovali všetky možné chybové stavy aké pri ich vykonávaní môžu nastať.

2

Napíšte program ktorý od uživateľa z klávesnice načíta prirodzené číslo $n$ a následne, metódou Erastotenovho sita, zistí všetky prvočísla nie väčšie než $n$. Pamäť v ktorej Erastotenov algoritmus vykonáva Erastotenovské značkovanie allokujte dynamicky.

Priebežný stav

ID

1

2

3

4

41458

67640

67644

67654

<!>

<!>

67660

67667

67674

<!>

<!>

67678

67682

67687

67692

67698

<!>

<!>

67705

67708

67718

67720

67725

67728

67733

67737

<!>

67743

<!>

<!>

67746

69782

Časté chyby

  1. Chyby týkajúce sa designu funkcií
    1. Funkcia alebo procedúra má vykonávať jednu, čo možno najjednoduchšiu činnosť a túto činnosť má vykonávať dobre.

    2. Rozmeniac na drobné predchádzajúci bod: ak žiadam implementáciu funkcie ktorá vykonáva činnosť Č tak tým myslím, bez toho aby som to explicitne zdôraznoval, že funkcia žiadnu inú činnosť nevykonáva. Napríklad ak chcem, aby funkcia inicializovala pole premenných typu int na zadanú hodnotu $h$ tak, bez toho aby som to explicitne písal, očakávam, že funkcia nebude ani nič čítať z klávesnice, ani nič písať na obrazovku a vôbec, nebude robiť nič čo bezprostredne nesúvisí s inicializáciou pola.

  2. Črty jazyka ktoré nepatria do ANSI C
    1. Ak deklarujete napríklad int pole[n] kde n je nejaká predtým inicializovaná premenná, devcpp, žial, nebude frflať. Lenže niečo podobné je z hladiska čistého ANSI C striktne zakázané. Keďže hodnota n nie je v čase kompilácie známa, to čo takouto deklaráciou vlastne hovoríte, je dynamická allokácia pamate. Lenže tá sa správne rieši cez funkciu malloc a jej príbuzné. Jediný dôvod prečo takýto riadok ide skompilovať je ten, že devcpp nie je dôsledný kompilátor a, aj bez toho aby o to bol požiadaný, do jazyka mieša črty neoficiálnych rozšírení a C++. Ja ale takéto tolerovať nebudem; skúste to skompilovať pod linuxom pomocou gcc a hneď pochopíte prečo.

KMaDGWiki: KurzSeminarZProgramovania (last edited 2019-01-28 14:51:18 by sarkoci)