12.07.2015 Views

Programski jezik C - Pmf

Programski jezik C - Pmf

Programski jezik C - Pmf

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

10.1. DEFINICIJA I INICIJALIZACIJA POLJA 159Dimenziju polja dobivamo naredbomdim=sizeof(x)/sizeof(float);Operator sizeof primijenjen na varijablu daje broj okteta potreban da zamemoriranje varijable. Ako je varijabla polje, onda sizeof daje broj oktetapotreban da se zapamti cijelo polje, pa smo stoga broj elemenata polja dobilidijeljenjem s brojem okteta koji zauzima jedna varijabla tipa float.Nažalost, ovakav način računanja broja elemenata polja nije moguće promijeniti naargument funkcije tipa polja, budući da se on automatski konvertira u pokazivač.Polje x je tipa float dok su varijable a i b u kojima se vrši sumacijatipa double. Stoga u naredbi a+=x[i] i b+=(x[i]-a)*(x[i]-a) imamokonverziju iz užeg tipa u širi tip podatka. Sumiranje u varijabli šireg tipakorisno je ako se sumira veliki broj članova jer se na taj način smanjujugreške zaokruživanja.Obrnuta konverzija, iz šireg u uži tip se dešava pri inicijalizaciji polja x jersu sve konstante tipa double, na što će nas prevoditelj eventualno upozoriti.Da bi smo izbjegli upozorenje mogli smo koristiti konstante tipa float:float x[]={1.3f, 2.4f, 5.6f, 6.7f, 7.8f};U računu srednjeg odstupanja koristimo funkciju sqrt (drugi korijen) izstandardne biblioteke. Kao i sve matematičke funkcije koje rade s realnimbrojevima i sqrt uzima argument tipa double i vraća vrijednost tipa double.Verzija funkcije sqrt koja uzima float i vraća float naziva se sqrtf. Nazividrugih float funkcija dobivaju se na isti način.Standard C99 omogućava parcijanu inicijalizaciju polja. Sintaksa je kao u sljedećemprimjerufloat x[5]={[3]=1.3f};Ovdje se treći element inicijalizira s 1.3. Neinicijalizirani elementi polja dobit će vrijednostnula, kao i kod obične inicijalizacije.Napomena. U definiciji polja dimenzije polja moraju biti konstantniizrazi. Zbog toga C ne dozvoljava deklaraciju polja unutar funkcije na sljedećinačin:void f(int n){double A[n][n];........}// pogresnoU funkciji f() smo pokušali deklarirati matricu čiji je red zadan argumentomn. Zbog gornjeg pravila, to je nemoguće. To ograničenje ANSI C-a (C90) uklonioje standard C99 uvodenjem polja varijabilne duljine (vidi sekciju 10.7).□

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!