Programiranje II Beleške sa vežbi Smer Informatika Matematički fakultet, Beograd Sana Stojanović 1

Слични документи
Uvod u računarstvo 2+2

Uvod u računarstvo 2+2

Računarski praktikum I - Vježbe 03 - Implementacija strukture string

Uvod u računarstvo 2+2

Programiranje 2 0. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 0. predavanje p. 1/4

Microsoft PowerPoint - 13-Funkcije_2.ppt [Compatibility Mode]

Programiranje 1 Beleške sa vežbi Školska 2007/2008 godina Matematički fakultet, Beograd Jelena Tomašević December 5, 2007

Uvod u računarstvo 2+2

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvrsnog_Programa [Compatibility Mode]

Računarski praktikum I - Vježbe 01 - Uvod

070-ALIP2-udzbenik.indb

Microsoft PowerPoint - MR - Vjezbe - 03.ppt [Compatibility Mode]

Strukture predavač: Nadežda Jakšić

Računarski praktikum I - Vježbe 07 - Podstrukture, const, reference

Funkcije predavač: Nadežda Jakšić

Microsoft PowerPoint - Datoteke [Compatibility Mode]

Programski jezik C

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]

Programiranje 2 7. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 7. predavanje p. 1/7

Funkcije predavač: Nadežda Jakšić

Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić

Konstrukcija i analiza algoritama vežbe 10 Nina Radojičić 15. decembar Algoritamske strategije - podeli pa vladaj (divide and conquer) Ova stra

Tutoring System for Distance Learning of Java Programming Language

Programiranje 2 Beleške sa vežbi Školska 2007/2008 godina Matematički fakultet, Beograd Jelena Tomašević February 23, 2008

Microsoft Word - 11 Pokazivaci

Grananje u programu predavač: Nadežda Jakšić

Uvod u takmičarsko programiranje

Datoteke predavač: Nadežda Jakšić

Programiranje 1 9. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 9. predavanje p. 1/6

Programiranje 2 1. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 1. predavanje p. 1/7

Programiranje 2 popravni kolokvij, 15. lipnja Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanj

Univerzitet u Novom Sadu Tehnički fakultet Mihajlo Pupin Zrenjanin Seminarski rad Predmet: Konkuretno programiranje doc. dr Dejan Lacmanovic Zorica Br

Programski jezici i strukture podataka 2018/2019. Programski jezici i strukture podataka Računarske vežbe vežba 10 Zimski semestar 2018/2019. Studijsk

Tutoring System for Distance Learning of Java Programming Language

PowerPoint Presentation

ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, Ispit iz Programiranja 2 Ispit traje 135 minuta Napomene: a) Pažljivo proučite U

1 jmbag ime i prezime Programiranje 2 prvi kolokvij, Rezultati i uvidi u kolokvije: Rezultati u petak, 3.5., navečer na webu, a uvidi u p

Microsoft PowerPoint - Bitovi [Compatibility Mode]

Microsoft PowerPoint - C-4-1

Microsoft PowerPoint - 07-DinamickeStrukturePodataka

Konverzije, operatori, matematičke funkcije predavač: Nadežda Jakšić

Microsoft PowerPoint - 10-Jednodimenzionalni nizovi.ppt [Compatibility Mode]

Programiranje predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2016, 10. predavanje p. 1

Programski jezik C

PowerPoint Presentation

Tutoring System for Distance Learning of Java Programming Language

Programiranje za UNIX Okruženje unix procesa

The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; premature opti

Računarski praktikum I - Vježbe 11 - Funktori

07_PJISP_II_Predavanja

Programski jezici i strukture podataka

MergedFile

Microsoft PowerPoint - 11.Programski_Jezik_C_ulaz-izlaz [Compatibility Mode]

1. OPĆE INFORMACIJE 1.1. Naziv kolegija Programiranje 1.6. Semestar Nositelj kolegija dr.sc. Bruno Trstenjak, v. pred Bodovna vrijednost

P11.3 Analiza zivotnog veka, Graf smetnji

Programiranje u C-u ili C++-u Pseudo-slučajni brojevi; Dinamička alokacija memorije 1 ZADACI SA ČASA Zadatak 1 Napraviti funkciju koja generišlučajan

PRIRODNO MATEMATIČKI FAKULTET U NIŠU DEPARTMAN ZA RAČUNARSKE NAUKE Utorak, godine PRIJEMNI ISPIT IZ INFORMATIKE 1. Koja od navedenih ekste

VEŽBA 5: KLASE I OBJEKTI U C# Cilj ove vežbe je upoznavanje sa osnovama rada sa klasama i objektima u programskom jeziku C#. Pored toga, bide demonstr

Programiranje 1 Beleške sa vežbi Školska 2007/2008 godina Matematički fakultet, Beograd Jelena Tomašević January 23, 2008

I grupa 1. Napisati program koji izračunava i ispisuje zbir 4 najveća od pet brojeva unetih sa standardnog ulaza. ulaz izlaz Analiza: 1.

UVOD - OD JAVE DO C# ELEMENTARNE RAZLIKE Veliki broj Java/C# razlika su uglavnom preimenovane ključne reči i razlike u konvencijama imenovanja. Neke o

Programiranje predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 12. predavanje p. 1

Osnovi programiranja Beleške sa vežbi Smer Računarstvo i informatika Matematički fakultet, Beograd Jelena Tomašević i Sana Stojanović November 7, 2005

Microsoft PowerPoint - 12-Funkcije_1.ppt [Compatibility Mode]

1. Vremensko ograničenje Memorijsko ograničenje ulaz izlaz 0,1 s 64 MB standardni ulaz standardni izlaz Banka želi da upozori kupce na sumnjive aktivn

PROMENLJIVE, TIPOVI PROMENLJIVIH

Veeeeeliki brojevi

PowerPoint Presentation

Microsoft Word - AIDA2kolokvijumRsmerResenja.doc

PowerPoint Presentation

Државно такмичење године 5. и 6. разред 1. [pločice] Правоугаону терасу димензија d s центиметара квадратних треба поплочати коришћењем плочица

Microsoft Word - 6. RAZRED INFORMATIKA.doc

Računarske mreže Čas 2 Ivana Tanasijević Matematički fakultet, Beograd 1

Sveucilište u Zagrebu

Microsoft Word - Zadaci za samostalno vjezbanje 4.doc

3.Kontrlne (upravlja~ke) strukture u Javi

Programiranje 1 3. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2017, 3. predavanje p. 1/1

Računarski praktikum I - Vježbe 09 - this, static

Osnovni programiranja I

Programiranje 1

Школа Ј. Ј. Змај Свилајнац МЕСЕЧНИ ПЛАН РАДА ЗА СЕПТЕМБАР Школска 2018 /2019. Назив предмета: Информатика и рачунарство Разред: 5. Недељни број часова

Primenjeno programiranje - vezbe GUI i baze podataka

PowerPoint Presentation

Programiranje 1 5. predavanje dodatak Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 5. predavanj

Algoritmi SŠ P1

Microsoft Word - 1. REALNI BROJEVI- formulice

Konstrukcija i analiza algoritama Nina Radojičić februar Analiza algoritama, rekurentne relacije 1 Definicija: Neka su f i g dve pozitivne fun

Microsoft PowerPoint - OOPpredavanja05 [Compatibility Mode]

RACUNARSKA ELEKTRONIKA – VEŽBE 3

Skripte2013

Класе комбинација презентације (Хортона) и к о бајаги скрипте (Ово је прича коју врло радо причам) нови тип података: дефинишу могуће вредности подата

03 SUBP

Microsoft PowerPoint - 03-Slozenost [Compatibility Mode]

PowerPoint Presentation

P11.2 Izbor instrukcija, IBURG

ZADACI ZA VEŽBU 1. Realizovati konzolnu aplikaciju koja će računati površinu kvadrata, pravougaonika ili trougla. 2. Preko konzole se unosi ocena od 1

Алгебарски изрази 1. Запиши пет произвољних бројевних израза. 2. Израчунај вредност израза: а) : ; б) : (

Državna matura iz informatike

Oblikovanje i analiza algoritama 5. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb OAA 2017, 5. pr

Kombinatorno testiranje

Транскрипт:

Programiranje II Beleške sa vežbi Smer Informatika Matematički fakultet, Beograd Sana Stojanović 1

Sadržaj 1 Pokazivači - ponavljanje 3 2 Pokazivači - veza sa nizovima 5 2

1 Pokazivači - ponavljanje 1. /* Pokazivaci - osnovni pojam */ #include <stdio.h> main() int x = 3; /* Adresu promenjive x zapamticemo u novoj promeljivoj. Nova promenljiva je tipa pokazivaca na int (int*) */ int* px; printf("adresa promenljive x je : %p\n", &x); printf("vrednost promenljive x je : %d\n", x); px = &x; printf("vrednost promenljive px je (tj. px) : %p\n", px); printf("vrednost promenljive na koju ukazuje px (tj. *px) je : %d\n", *px); /* Menjamo vrednost promenljive na koju ukazuje px */ *px = 6; printf("vrednost promenljive na koju ukazuje px (tj. *px) je : %d\n", *px); /* Posto px sadrzi adresu promenljive x, ona ukazuje na x tako da je posredno promenjena i vrednost promenljive x */ printf("vrednost promenljive x je : %d\n", x); 2. (DOMAĆI) Popuniti sledeću tabelu: A B C P1 P2 Init 1 2 3 &A &C *P1 = (*P2)++ P1 = P2 P1 = &B *P1 = *P1 - *P2 3. /* swap : Demonstracija prenosa argumenata preko pokazivaca */ #include <stdio.h> /* Pogresna verzija funkcije swap. Zbog prenosa po vrednosti, funkcija razmenjuje kopije promenljivih iz main-a, a ne samih promenljivih */ void swap_wrong(int x, int y) 3

int tmp; printf("swap_wrong: "); printf("funkcija menja vrednosti promenljivim na adresama : \n"); printf("x : %p\n", &x); printf("y : %p\n", &y); tmp = x; x = y; y = tmp; /* Resenje je prenos argumenata preko pokazivaca */ void swap(int* px, int* py) int tmp; printf("swap : Funkcija menja vrednosti promenljivim na adresama : \n"); printf("px = %p\n", px); printf("py = %p\n", py); tmp = *px; *px = *py; *py = tmp; main() int x = 3, y = 5; printf("adresa promenljive x je %p\n", &x); printf("vrednost promenljive x je %d\n", x); printf("adresa promenljive y je %p\n", &y); printf("vrednost promenljive y je %d\n", y); /* Pokusavamo zamenu koristeci pogresnu verziju funkcije */ swap_wrong(x, y); printf("posle swap_wrong:\n"); printf("vrednost promenljive x je %d\n", x); printf("vrednost promenljive y je %d\n", y); /* Vrsimo ispravnu zamenu. Funkciji swap saljemo adrese promenljvih x i y, a ne njihove vrednosti */ swap(&x, &y); 4

printf("posle swap:\n"); printf("vrednost promenljive x je %d\n", x); printf("vrednost promenljive y je %d\n", y); 2 Pokazivači - veza sa nizovima 1. /* Pokazivacka aritmetika */ #include <stdio.h> main() char s[] = "abcde"; int t[] = 1, 2, 3, 4, 5; /* Inicijalizujmo pokazivace ps i pt na pocetke nizova s i t */ char* ps = &s[0]; int* pt = &t[0]; /* Pokazivace je moguce sabirati sa celim brojevima i od njih je moguce oduzimati cele brojeve*/ /* Ispisimo vrednosti pokazivaca */ printf("ps = %p\n", ps); printf("ps+1 = %p\n", ps+1); printf("ps+2 = %p\n", ps+2); printf("ps-1 = %p\n", ps-1); printf("ps-2 = %p\n", ps-2); /* Prilikom sabiranja pokazivaca i celih brojeva, dodaje se velicina odgovarajuceg tipa. */ printf("pt = %p\n", pt); printf("pt+1 = %p\n", pt+1); printf("pt+2 = %p\n", pt+2); printf("pt-1 = %p\n", pt-1); printf("pt-2 = %p\n", pt-2); /* Na pokazivace je moguce primenjivati i operatore ++ i -- */ for (ps = s; *ps; ps++) putchar(*ps); putchar( \n ); 5

/* Slicno, dva pokazivaca istog tipa se mogu oduzimati. Prilikom sracunavanja rezultata, uzima se u obzir velicina tipa. */ ps = &s[3]; printf("s = %p\n", s); printf("ps = %p\n", ps); printf("ps - s = %d\n", ps - s); pt = &t[3]; printf("t = %p\n", t); printf("pt = %p\n", pt); printf("pt - t = %d\n", pt - t); 2. /* Veza izmedju pokazivaca i nizova */ #include <stdio.h> void print_array(int* pa, int n); main() int a[] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10; int num_of_elements = sizeof(a)/sizeof(int); int* pa; /* Niz je isto sto i adresa prvog elementa */ printf("niz a : %p\n", a); printf("adresa prvog elementa niza a (&a[0]) : %p\n", &a[0]); /* Moguce je dodeliti niz pokazivacu odgovarajuceg tipa */ pa = a; printf("pokazivac pa ukazuje na adresu : %p\n", pa); /* Nizu nije moguce dodeliti pokazivacku promenljivu (nizove mozemo smatrati KONSTANTNIM pokazivacima na prvi element) */ /* a = pa; */ /* Niz je moguce koristiti kao pokazivac tj. vaze pravila pokazivacke aritmetike printf("a + 3 = %p\n", a + 3); /* Vazi da je a + i = odnosno &a[i] 6

*(a + i) = a[i] */ printf("&a[3] = %p\n", &a[3]); /* Identiteti a + i = &a[i] odnosno *(a + i) = a[i] vazi i za pokazivace i za nizove */ /* Pokazivace je na osnovu prethodnog moguce indeksirati kao nizove */ printf("pa[5] = %d\n", pa[5]); printf("*(pa + 5) = %d\n", *(pa+5)); /* Medjutim, sizeof(pa) je samo velicina pokazivaca, a ne niza */ printf("sizeof(a) = %d\n", sizeof(a)); printf("sizeof(pa) = %d\n", sizeof(pa)); /* Pozivamo funkciju za stampanje niza i saljemo joj niz */ print_array(a, num_of_elements); /* Pozivamo funkciju za stampanje niza i saljemo joj pokazivac na pocetak niza * print_array(pa, num_of_elements); /* Proslednjivanje niza u funkciju void print_array(int pa[], int n); je ekvivalentno prosledjivanju pokazivaca u funkciju void print_array(int* pa, int n); Izmedju ovih konstrukcija nema nikakve razlike. */ void print_array(int* pa, int n) int i; for (i = 0; i<n; i++) printf("%d ", pa[i]); putchar( \n ); 3. /* strlen, strcpy, strcat, strcmp, strchr, strstr,... - verzije sa pokazivacima */ /* Vezbe radi, implementirane su funkcije biblioteke string.h */ #include <stdio.h> #include <stdlib.h> /* Zbog NULL */ 7

/* Izracunava duzinu stringa */ int string_length(char *s) char* t; for (t = s; *t; t++) ; return t - s; /* Kopira string src u string dest. Pretpostavlja da u dest ima dovoljno prostora. * void string_copy(char *dest, char *src) /* Kopira karakter po karakter, sve dok nije iskopiran karakter \0 */ while(*dest++ = *src++) ; /* Nadovezuje string t na kraj stringa s. Pretpostavlja da u s ima dovoljno prostora void string_concatenate(char *s, char *t) /* Pronalazimo kraj stringa s */ while (*s) s++; /* Vrsi se kopiranje, slicno funkciji string_copy */ while (*s++ = *t++) ; /* Vrsi leksikografsko poredjenje dva stringa. Vraca : 0 - ukoliko su stringovi jednaki <0 - ukoliko je s leksikografski ispred t >0 - ukoliko je s leksikografski iza t */ int string_compare(char *s, char *t) /* Petlja tece sve dok ne naidjemo na prvi razliciti karakter */ for (; *s == *t; s++, t++) if (*s == \0 ) /* Naisli smo na kraj oba stringa, a nismo nasli razliku */ return 0; /* *s i *t su prvi karakteri u kojima se niske razlikuju. 8

Na osnovu njihovog odnosa, odredjuje se odnos stringova */ return *s - *t; /* Pronalazi prvu poziciju karaktera c u stringu s, i vraca pokazivac na nju, odnosno NULL ukoliko s ne sadrzi c */ char* string_char(char *s, char c) for (; *s; s++) if (*s == c) return s; /* Nije nadjeno */ return NULL; /* Pronalazi poslednju poziciju karaktera c u stringu s, i vraca pokazivac na nju, odnosno NULL ukoliko s ne sadrzi c */ char* string_last_char(char *s, char c) char *t = s; /* Pronalazimo kraj stringa s */ while (*t++) ; /* Krecemo od kraja i trazimo c unazad */ for (t--; t >= s; t--) if (*t == c) return t; /* Nije nadjeno */ return NULL; /* Proverava da li string str sadrzi string sub. Vraca poziciju na kojoj sub pocinje, odnosno -1 ukoliko ga nema */ char* string_string(char *str, char *sub) char *s, *t; /* Proveravamo da li sub pocinje na svakoj poziciji i */ for (; *str; str++) /* Poredimo sub sa str pocevsi od poziciji i sve dok ne naidjemo na razliku for (s = str, t = sub; *s == *t; s++, t++) /* Nismo naisli na razliku a ispitali smo sve karaktere niske sub */ 9

if (*(t+1) == \0 ) return str; /* Nije nadjeno */ return NULL; main() char s[100]; char t[] = "Zdravo"; char u[] = " svima"; char r[] = "racunari"; string_copy(s, t); printf("%s\n", s); string_concatenate(s, u); printf("%s\n", s); printf("%d\n",string_char(r, n ) - r); printf("%d\n",string_last_char(r, a ) - r); printf("%d\n",string_string(r, "rac") - r); printf("%d\n",string_string(r, "ari") - r); printf("%d\n",string_string(r, "cun") - r); printf("%p\n",string_string(r, "cna")); 10