06/07/22 1 Sortiranje nizova preko pokazivaca • Opet program kojim se korišćenjem odgovarajuće funkcije učitani niz sortira u monotono neopadajući poredak • Example No 21 • main() • { • int • float a[50]; • void citaj(); • void pisi(); • void sort1(); • printf(“\nUneti broj elemenata niza:”); • scanf(“%d”,&n); printf(“\nUnesi elemente niza:\n”); citaj(a,n); sortl(a,n); printf(“Niz posle sortiranja je:\n”); pisi(a,n); }
Sam programski jezik je uređen konačan skup znakova za formulisanje programa. Njegova definicija data u ISO standardu glasi: programski jezik je veštački jezik koji se koristi za predstavljanje programa. Sam program predstavlja sistem oznaka za opis algoritama i struktura podataka pomoću kojih ljudi komuniciraju sa računarom. Jednostavnije korišćenje mašinskog jezika dobija se uvođenjem simboličkih imena za naredbe i adreseme morijskih lokacija, a to omogućava asemblerski ili simbolički mašinski jezik. Asemblerski jezik je niskog nivoa, zbog toga što je korespodencija između asemblerskog i mašinskog jezika jedan prema jedan. Programer koristi naredbe računara na kome radi, pa stoga program nije prenosiv - ne može se izvršiti na drugom računaru bez reprogramiranja.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
04/10/23 1
Sortiranje nizova preko pokazivaca
• Opet program kojim se korišćenjem odgovarajuće funkcije učitani niz sortira u monotono neopadajući poredak
• Example No 21• main()• {• int• float a[50];• void citaj();• void pisi();• void sort1();• printf(“\nUneti broj elemenata niza:”);• scanf(“%d”,&n);
printf(“\nUnesi elemente niza:\n”); citaj(a,n); sortl(a,n); printf(“Niz posle sortiranja je:\n”); pisi(a,n); }
• Dvodimenzionalni nizovi se se u memoriji registruju po vrstama zauzimajući susedne memorijske lokacije.ako se dvodimezionalni niz deklariše na sledeći način:
• int a[3][2] ; njegovi elementi će biti raspoređeni na sledeći način: a [0][0] a [0][1] a [1][0] a [1][1] a [2][0] a [2][1]
• Imajući ovo u vidu, ako definišemo pokazivač na int tip• int * poki, dodelom• poki = a;• definiše pokazivačka promenljiva na element u nultoj vrsti i
koloni jer važi jednakost• a =& a [0][0]
04/10/23 6
• Prema navedenoj deklaraciji važi:
• poki =& a [0][0]
• Poki+1 =& a [0][1]
• Poki+2 =& a [1][0]
• Poki+3 =& a [1][1]
• Poki+4 =& a [2][0]
• Poki+5 =& a [2][1]
• U ovom primeru a je ime dvodimenzionalnog niza a, a [0], a [1], a [2]
• su imena jednodimenzionalnih nizova koje predstavljaju vrste matrice.
• Ime niza je pokazivač na taj niz jer pokazuje na njegov prvi element, tako da važi:
• a [0] =& a [0][0]
• a [1] =& a [1][0]
• a [2] =& a [2][0]
• Ova osobina nam koristi da funkciju namenjenu za obradu jednodimenzionalnog niza koristimo pri obradi vrsta dvodimenzionalnog niza.
04/10/23 7
Example No 22• main()• {• static float a[3][4]={• {1.0,2.0,3.0,4.0}, • {11.5,22.4,33.3,44.2},• {10.1,20.2,30.3,40.4}• };• int I;• float sredina();• for (I=0;I 3;I++)• printf(“srednja vrednost vrste %d je %f\n”,I,sredina(a[I],4));• /*a[I] je jednodimenzionalni niz od Četirielementa*/• }• float sredina(float x[],int n)• {• int I;• float suma;• for (I=0,suma= 0;I n;I++)• suma+=x[I]• return suma/n• }
04/10/23 8
Sortiranje dvodimenzionalnog niza
• main()• {• int I,n;• int x[10][10]• void citaj();• void pisi();• void sort1();• printf(“\nUneti broj vrsta matrice:”);• scanf(“%d”,&n);
printf(“\nUnesi elemente matrice po vrstama :\n); citaj(x,n); sortl(x[I],n); printf(“matrica posle sortiranja je:\n”); pisi(x,n); }
04/10/23 9
/*funkcija koja ucitava elemente matrice*/ void citaj(int x[][10],int n) {
• Jezik C nema ugrađen znakovni niz podataka . • Umesto toga, jezik C sledove znakova koji se završavaju nultim
znakom (NULL) tretira kao znakovne nizove. • Znakovni nizovi mogu se napraviti deklarisanjem niza znakova i
dodeljivanjem vrednosti njegovim elementima . • Završni znak mora biti nulti znak, koji se prikazuje kao znakovna
konstanta sa vrednošću ‘\0‘. Bez ovog znaka imate običan niz znakova.
04/10/23 12
( Malo podsećanja)
• main()• {• char c = ‘A‘;• printf(“/ %c / %d / %o / %x \n”,c,c.c,c);• }• Izvrsavanjem programa dobija se:• /A/65//101/41• 65- ASCII dekadna vrednost• 101- ASCII oktalna vrednost • 41- ASCII heksadekadna vrednost
04/10/23 13
A sad da sumiramo malo
• Znači izraz ‘A‘ je znakovna konstanta
• a, ”A” je prikriven, skraćeni, prikaz konstantnog znakovnog niza sastavljenog iz dve znakovne konstante ‘A‘ i ‘\0‘ .
04/10/23 14
Inicijalizacija znakovnih nizova
• Rekli smo već da je nizovima je u C jeziku moguće dodeljivati početne vrednosti. Ako se inicijalizacija ne zadaje eksplicitno niz se inicijalizuje nulom, Međutim ako je potrebno da se niz inicijalizuje vrednostima različitim od nule potrebno je da se pri deklaraciji niza izmedju vitičastih zagrada navedu željene vrednosti razdvijene zarezom
04/10/23 15
Inicijalizacija znakovnih nizova
• Nizovi se mogu inicijalizovati korišćenjem string konstanti. Na promer, operator
• static char tekst [ ]={• ’F’,’e’,’s’,’t’,’i’,’n’,’a’,’t’,’a’,’m’, ’s’.’e’,’m’,’e’,’n’,’t’,’e’,’m’,’
• }; • inicijalizuje statički niz tekst datom string konstantom
ili skraćeni oblik inicijalizacije izgleda ovako:
• static char tekst [ ]={• “Festinatam sementem saepe decipere, serotinam
semper” • };
04/10/23 16
Nizovi karaktera i pokazivači
Pošto je ime niza ekvivalentno adresi njegovog nultog elementa ( predstavlja pokazivač na nulti element) tako je i string konstanta pokazivač na nulti element niza u kome je registrovan string.
• Operator
• Static char s[ ] = “ IBM PC” ; inicijlizije statički niz s datom string konstantom On predstavlja skraćeni oblik inicijalizacije
• pokazivač pok je inicijalizovan adresom nultog znaka stringa • Ekvivalentna inicijalizacija se može realizovati sledećim operatorima • Char *pok;• pok = “Festinatam sementem saepe decipere, serotinam semper” ;• Za razne operacije nad ovim stringom dovoljno je da znamo adresu
njegovog nultog znaka
04/10/23 18
Example N0 .... koji ispisuje string u direktnom i inverznom poretku.
serotinam semper” };• char *pok;• pok = s;• while (*pok) /*ili while (*pok!= ’\0’ ) */ • putchar (*pok++);• while (--pok >=s)• putchar (*pok);• putchar (’\n’ );• }
04/10/23 19
Inicijalizacija stringova
• Opisom stringa pomoću niza u statičkoj memoriji se kreira niz. Svaki element niza se inicijalizuje odgovarajućim znakom a ime niza postaje sinonim adrese nultog elementa. Ime niza je konstanta pokazivačkog tipa koja se ne može menjati.
• Opisom stringa pomoću pokazivača takođe se u statičkoj memoriji kreira niz ali i rezerviše memorijski prostor za pokazivačku promenljivu koja pokazuje na početak stringa. Njena vrednost se može menjati na primer sa ++ pok da bi se definisao pokazivač na sledeći znak stringa.
04/10/23 20
Pokazivači na stringove
• Primer funkcije kojom se na osnovu parametara koji je
• POKAZIVAČ NA STRING • ispituje da li je dati string palindrom
04/10/23 21
Funkcija palindrom
int palindrom (char * strpok) { char *strpok1 = strpok; while (*strpok1) ++strpok; --strpok1; /* povratak unazad za jedan znak */ While (strpok<strpok1) if(*strpok++!=*strpok1--) /* poredjenje simetricnih znakova*/ return 0; return 1; }
04/10/23 22
Nizovi pokazivača na stringove
• Koristeći niz stringova Stringu se može pristupiti preko indexa. Deklaracijom:
• Static char *jezici [4] = {“PASCAL”,”MODULA’’,”C++”, “ADA”};• Definisan je niz pokazivača jezici na stringove • Nulti pokazivač jezici [0] pokazuje na nulti string, prvi pokazivač
jezici [1] pokazuje na prvi string , tako da važi :• *jezici [0]=‘P’, *jezici [1]=‘M’, *jezici [2]=‘C’, *jezici [3]=‘A’.