SlideShare ist ein Scribd-Unternehmen logo
1 von 15
Računarski praktikum 1
Predavanja
Goran Igaly
Sveučilište u Zagrebu
PMF, Matematički odsjek
3. predavanje
2
Poboljšanja:
 Primjena funkcija get i set za dohvaćanje i
postavljanje vrijednosti elemenata u polju
 Dodavanje podatka o iskorištenosti
alociranog prostora u strukturu
DinamickoPolje
 Definiranje dodatnih funkcija za rad sa
strukturom DinamickoPolje
3
struct DinamickoPolje
{
int *Podaci;
int BrojElem;
// stvarni broj elemenata u polju
int MaxBrojElemenata;
// maksimalno raspoloživi prostor
};
Proširenje strukture
DinamickoPolje
4
Funkcije potrebne za rad s
dinamičkim poljem
Inicijaliziraj
Izbrisi
PostaviNovuVelicinu
PostaviElement
DodajElementNaKraj
DohvatiElement
BrojElemenata
5
Prototipovi funkcija
int Inicijaliziraj (struct DinamickoPolje *Polje, int
MaxBrojElem);
void Izbrisi (struct DinamickoPolje *Polje);
int PostaviNovuVelicinu (
struct DinamickoPolje *Polje, int NoviBrojElem);
void PostaviElement (
struct DinamickoPolje *Polje, int Ind, int Vrijednost);
int DodajElementNaKraj (struct DinamickoPolje *Polje, int
Vrijednost);
int DohvatiElement (struct DinamickoPolje *Polje, int
Indeks);
int BrojElemenata (struct DinamickoPolje *Polje);
6
Problem dojave pogreške
 Funkciju DohvatiElement() smo deklarirali
kao
int DohvatiElement (struct
DinamickoPolje *Polje, int Indeks);
 A što ukoliko se zatraži vrijednost elementa
polja za nepostojeći indeks ?
 Potrebno je nekako naznačiti pogrešku !
7
Signaliziranje pogreške preko
povratnog argumenta funkcije
 Novi prototip:
int DohvatiElement2 (
struct DinamickoPolje *Polje,
int Indeks,
int *DohvacenaVrijednost);
 Preko povratnog parametra (return) signaliziramo pogrešku (ako
je bude)
 Preko call by reference vraćamo dohvaćenu vrijednost
 Alternativno: Izvesti naredbu exit() pa neka programer koji koristi
DinamickoPolje popravi pogrešku u svojem kodu
8
Primjer P02
 PRIMJER02 (preuzeti zip datoteku na Moodleu)
P02_DinamickoPolje_C_get_set
 PRIMJER01 (preuzeti zip datoteku – na Moodleu)
DinamickoPolje_C_osnovna_impl
 Podaci (ulazna datoteka)
9
Naše DinamickoPolje se može koristiti
samo za cjelobrojne podatke (int)
 Što ukoliko imamo datoteku u kojoj su zapisani float podaci ?
 Klasično C rješenje – korištenje typedef-a
typedef int TipDinamickogPolja;
struct DinamickoPolje
{
TipDinamickogPolja *Podaci;
int BrojElem;
// koliko stvarno ima elemenata u polju
int MaxBrojElemenata;
// koliki je maksimalni raspolozivi prostor
};
10
Rješenje za neki drugi tip
podatka u dinamičkom polju
 Bolje (i složenije) rješenje – koristimo void *
kao tip podataka u polju
 Programer kod iskorištavanja dinamičkog polja
mora koristiti cast operatore!
11
Primjer 03 (preuzeti s Moodlea):
P03_DinamickoPolje_C_typedef
 Napomena: u C++ se efikasno i programski “čisto”
rješava pomoću template-a (predložaka)
 template <class identifikator> deklaracija_funkcije;
template <class MojTip>
mojTip getMax (MojTip a, MojTip b) {
return (a>b?a:b);
}
.....
int x,y;
getMax <int> (x,y);
12
Nedostaci sa stajališta dizajna
programa (1/2)
 Svakoj funkciji moramo prenositi pokazivač na
strukturu
 Ovo je primarno sintaktički “nedostatak”
 C (ali i Pascal, Fortran, Basic) programeri s takvom
paradigmom “žive” već 20-ak godina
 Pozivi funkcija iz biblioteke su isprepleteni s
pozivima drugih funkcija i sintaktički izgledaju
isto
 Smanjuje se preglednost i čitljivost programa
13
Nedostaci sa stajališta dizajna
programa (2/2)
 Nema izravne i na prvi pogled vidljive
povezanosti deklarirane strukture i funkcija
koje nad njom operiraju
 Sve ove funkcije dobivaju na mjestu prvog
argumenta pokazivač struct DinamickoPolje *,
ali će korisnici i sami definirati mnoge funkcije
koje dobivaju takav pokazivač
14
Problem mogućeg sukoba naziva
(engl. name clash)
 Što ukoliko je u nekoj drugoj biblioteci definirana
funkcija s istim imenom ?
 Ako koristimo hrvatske nazive za varijable i funkcije,
ovo nije toliki problem
 Kod korištenja engleskih termina (kod izrade
biblioteka funkcija bitan zahtjev ukoliko se želi
omogućiti međunarodno korištenje razvijene
biblioteke) je situacija znatno nepovoljnija
(Nazivi initialize, setSize, cleanup ili delete su
standardni nazivi)
15
Problem izravne promjene
vrijednosti u strukturi
 Što ukoliko netko izravno promijeni vrijednost
podatka u strukturi!
 Definirane funkcije se oslanjaju na činjenicu da
samo one izravno operiraju nad podacima u
strukturi !
 Situacija: korisnik izravno promijeni podatak BrojElem
 Podaci u polju se nisu promijenili ali će se funkcije drugačije
ponašati
 Čak i ukoliko u dokumentaciji eksplicitno piše da se to
ne smije raditi, prije ili kasnije će netko to i napraviti
(greškom, neznanjem, lijenošću – tako mu je “lakše”)

Weitere ähnliche Inhalte

Ähnlich wie RP1 - Funkcije za rad s dinamičkim poljem. Funkcije članice (10)

C# predavanja
C# predavanjaC# predavanja
C# predavanja
 
Asp audit01
Asp audit01Asp audit01
Asp audit01
 
C++ funkcije
C++ funkcijeC++ funkcije
C++ funkcije
 
Csharp08
Csharp08Csharp08
Csharp08
 
Programski jezik java
Programski jezik javaProgramski jezik java
Programski jezik java
 
Programski jezik java
Programski jezik javaProgramski jezik java
Programski jezik java
 
C++ radna skripta
C++ radna skriptaC++ radna skripta
C++ radna skripta
 
Oblikovni obrasci
Oblikovni obrasciOblikovni obrasci
Oblikovni obrasci
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 9.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 9. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 9.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 9.
 
3.
3.3.
3.
 

Mehr von Goran Igaly

Predavanja3. word 1
Predavanja3.   word 1Predavanja3.   word 1
Predavanja3. word 1Goran Igaly
 
Mogućnosti korištenja mikrokontrolera u obrazovanju i raniji slični projekti
Mogućnosti korištenja mikrokontrolera u obrazovanju i raniji slični projektiMogućnosti korištenja mikrokontrolera u obrazovanju i raniji slični projekti
Mogućnosti korištenja mikrokontrolera u obrazovanju i raniji slični projektiGoran Igaly
 
Nacionalni parkovi
Nacionalni parkoviNacionalni parkovi
Nacionalni parkoviGoran Igaly
 
Nova prezentacija
Nova prezentacijaNova prezentacija
Nova prezentacijaGoran Igaly
 
LaTeX - prvo predavanje
LaTeX - prvo predavanjeLaTeX - prvo predavanje
LaTeX - prvo predavanjeGoran Igaly
 
Predavanje 10 - Računarski praktikum 1 - Analiza i dizajn korištenjem UML-a
Predavanje 10 - Računarski praktikum 1 - Analiza i dizajn korištenjem UML-aPredavanje 10 - Računarski praktikum 1 - Analiza i dizajn korištenjem UML-a
Predavanje 10 - Računarski praktikum 1 - Analiza i dizajn korištenjem UML-aGoran Igaly
 
Računarski praktikum 1 - Razvoj softvera i dizajn
Računarski praktikum 1 - Razvoj softvera i dizajnRačunarski praktikum 1 - Razvoj softvera i dizajn
Računarski praktikum 1 - Razvoj softvera i dizajnGoran Igaly
 
Powerpoint za nastavnike 2016
Powerpoint za nastavnike 2016Powerpoint za nastavnike 2016
Powerpoint za nastavnike 2016Goran Igaly
 
Internet - korisnički dio
Internet - korisnički dioInternet - korisnički dio
Internet - korisnički dioGoran Igaly
 
Proračunske tablice - 3. dio
Proračunske tablice - 3. dioProračunske tablice - 3. dio
Proračunske tablice - 3. dioGoran Igaly
 
Predavanje9 - Excel 2. dio
Predavanje9 - Excel 2. dioPredavanje9 - Excel 2. dio
Predavanje9 - Excel 2. dioGoran Igaly
 
Računarski praktikum 1 - Excel 1
Računarski praktikum 1 - Excel 1Računarski praktikum 1 - Excel 1
Računarski praktikum 1 - Excel 1Goran Igaly
 
Obrada teksta - 2. dio
Obrada teksta - 2. dioObrada teksta - 2. dio
Obrada teksta - 2. dioGoran Igaly
 
Osnovni koncepti informatičke tehnologije
Osnovni koncepti informatičke tehnologijeOsnovni koncepti informatičke tehnologije
Osnovni koncepti informatičke tehnologijeGoran Igaly
 
Hrvatsko nazivlje u nastavi matematike
Hrvatsko nazivlje u nastavi matematikeHrvatsko nazivlje u nastavi matematike
Hrvatsko nazivlje u nastavi matematikeGoran Igaly
 
Hrvatsko nazivlje u matematici temeljni pojmovi - završno predavanje
Hrvatsko nazivlje u matematici   temeljni pojmovi - završno predavanjeHrvatsko nazivlje u matematici   temeljni pojmovi - završno predavanje
Hrvatsko nazivlje u matematici temeljni pojmovi - završno predavanjeGoran Igaly
 
Matematički postupci u automatskom prevođenju
Matematički postupci u automatskom prevođenjuMatematički postupci u automatskom prevođenju
Matematički postupci u automatskom prevođenjuGoran Igaly
 
Matematički postupci u automatskom prevođenju
Matematički postupci u automatskom prevođenjuMatematički postupci u automatskom prevođenju
Matematički postupci u automatskom prevođenjuGoran Igaly
 

Mehr von Goran Igaly (20)

Predavanja3. word 1
Predavanja3.   word 1Predavanja3.   word 1
Predavanja3. word 1
 
Mogućnosti korištenja mikrokontrolera u obrazovanju i raniji slični projekti
Mogućnosti korištenja mikrokontrolera u obrazovanju i raniji slični projektiMogućnosti korištenja mikrokontrolera u obrazovanju i raniji slični projekti
Mogućnosti korištenja mikrokontrolera u obrazovanju i raniji slični projekti
 
Nacionalni parkovi
Nacionalni parkoviNacionalni parkovi
Nacionalni parkovi
 
Nova prezentacija
Nova prezentacijaNova prezentacija
Nova prezentacija
 
LaTeX - prvo predavanje
LaTeX - prvo predavanjeLaTeX - prvo predavanje
LaTeX - prvo predavanje
 
Predavanja 11
Predavanja 11Predavanja 11
Predavanja 11
 
Predavanje 10 - Računarski praktikum 1 - Analiza i dizajn korištenjem UML-a
Predavanje 10 - Računarski praktikum 1 - Analiza i dizajn korištenjem UML-aPredavanje 10 - Računarski praktikum 1 - Analiza i dizajn korištenjem UML-a
Predavanje 10 - Računarski praktikum 1 - Analiza i dizajn korištenjem UML-a
 
Računarski praktikum 1 - Razvoj softvera i dizajn
Računarski praktikum 1 - Razvoj softvera i dizajnRačunarski praktikum 1 - Razvoj softvera i dizajn
Računarski praktikum 1 - Razvoj softvera i dizajn
 
Powerpoint za nastavnike 2016
Powerpoint za nastavnike 2016Powerpoint za nastavnike 2016
Powerpoint za nastavnike 2016
 
Internet - korisnički dio
Internet - korisnički dioInternet - korisnički dio
Internet - korisnički dio
 
Proračunske tablice - 3. dio
Proračunske tablice - 3. dioProračunske tablice - 3. dio
Proračunske tablice - 3. dio
 
Predavanje9 - Excel 2. dio
Predavanje9 - Excel 2. dioPredavanje9 - Excel 2. dio
Predavanje9 - Excel 2. dio
 
Računarski praktikum 1 - Excel 1
Računarski praktikum 1 - Excel 1Računarski praktikum 1 - Excel 1
Računarski praktikum 1 - Excel 1
 
Obrada teksta - 2. dio
Obrada teksta - 2. dioObrada teksta - 2. dio
Obrada teksta - 2. dio
 
Osnovni koncepti informatičke tehnologije
Osnovni koncepti informatičke tehnologijeOsnovni koncepti informatičke tehnologije
Osnovni koncepti informatičke tehnologije
 
Zadaća 2 1
Zadaća 2 1Zadaća 2 1
Zadaća 2 1
 
Hrvatsko nazivlje u nastavi matematike
Hrvatsko nazivlje u nastavi matematikeHrvatsko nazivlje u nastavi matematike
Hrvatsko nazivlje u nastavi matematike
 
Hrvatsko nazivlje u matematici temeljni pojmovi - završno predavanje
Hrvatsko nazivlje u matematici   temeljni pojmovi - završno predavanjeHrvatsko nazivlje u matematici   temeljni pojmovi - završno predavanje
Hrvatsko nazivlje u matematici temeljni pojmovi - završno predavanje
 
Matematički postupci u automatskom prevođenju
Matematički postupci u automatskom prevođenjuMatematički postupci u automatskom prevođenju
Matematički postupci u automatskom prevođenju
 
Matematički postupci u automatskom prevođenju
Matematički postupci u automatskom prevođenjuMatematički postupci u automatskom prevođenju
Matematički postupci u automatskom prevođenju
 

RP1 - Funkcije za rad s dinamičkim poljem. Funkcije članice

  • 1. Računarski praktikum 1 Predavanja Goran Igaly Sveučilište u Zagrebu PMF, Matematički odsjek 3. predavanje
  • 2. 2 Poboljšanja:  Primjena funkcija get i set za dohvaćanje i postavljanje vrijednosti elemenata u polju  Dodavanje podatka o iskorištenosti alociranog prostora u strukturu DinamickoPolje  Definiranje dodatnih funkcija za rad sa strukturom DinamickoPolje
  • 3. 3 struct DinamickoPolje { int *Podaci; int BrojElem; // stvarni broj elemenata u polju int MaxBrojElemenata; // maksimalno raspoloživi prostor }; Proširenje strukture DinamickoPolje
  • 4. 4 Funkcije potrebne za rad s dinamičkim poljem Inicijaliziraj Izbrisi PostaviNovuVelicinu PostaviElement DodajElementNaKraj DohvatiElement BrojElemenata
  • 5. 5 Prototipovi funkcija int Inicijaliziraj (struct DinamickoPolje *Polje, int MaxBrojElem); void Izbrisi (struct DinamickoPolje *Polje); int PostaviNovuVelicinu ( struct DinamickoPolje *Polje, int NoviBrojElem); void PostaviElement ( struct DinamickoPolje *Polje, int Ind, int Vrijednost); int DodajElementNaKraj (struct DinamickoPolje *Polje, int Vrijednost); int DohvatiElement (struct DinamickoPolje *Polje, int Indeks); int BrojElemenata (struct DinamickoPolje *Polje);
  • 6. 6 Problem dojave pogreške  Funkciju DohvatiElement() smo deklarirali kao int DohvatiElement (struct DinamickoPolje *Polje, int Indeks);  A što ukoliko se zatraži vrijednost elementa polja za nepostojeći indeks ?  Potrebno je nekako naznačiti pogrešku !
  • 7. 7 Signaliziranje pogreške preko povratnog argumenta funkcije  Novi prototip: int DohvatiElement2 ( struct DinamickoPolje *Polje, int Indeks, int *DohvacenaVrijednost);  Preko povratnog parametra (return) signaliziramo pogrešku (ako je bude)  Preko call by reference vraćamo dohvaćenu vrijednost  Alternativno: Izvesti naredbu exit() pa neka programer koji koristi DinamickoPolje popravi pogrešku u svojem kodu
  • 8. 8 Primjer P02  PRIMJER02 (preuzeti zip datoteku na Moodleu) P02_DinamickoPolje_C_get_set  PRIMJER01 (preuzeti zip datoteku – na Moodleu) DinamickoPolje_C_osnovna_impl  Podaci (ulazna datoteka)
  • 9. 9 Naše DinamickoPolje se može koristiti samo za cjelobrojne podatke (int)  Što ukoliko imamo datoteku u kojoj su zapisani float podaci ?  Klasično C rješenje – korištenje typedef-a typedef int TipDinamickogPolja; struct DinamickoPolje { TipDinamickogPolja *Podaci; int BrojElem; // koliko stvarno ima elemenata u polju int MaxBrojElemenata; // koliki je maksimalni raspolozivi prostor };
  • 10. 10 Rješenje za neki drugi tip podatka u dinamičkom polju  Bolje (i složenije) rješenje – koristimo void * kao tip podataka u polju  Programer kod iskorištavanja dinamičkog polja mora koristiti cast operatore!
  • 11. 11 Primjer 03 (preuzeti s Moodlea): P03_DinamickoPolje_C_typedef  Napomena: u C++ se efikasno i programski “čisto” rješava pomoću template-a (predložaka)  template <class identifikator> deklaracija_funkcije; template <class MojTip> mojTip getMax (MojTip a, MojTip b) { return (a>b?a:b); } ..... int x,y; getMax <int> (x,y);
  • 12. 12 Nedostaci sa stajališta dizajna programa (1/2)  Svakoj funkciji moramo prenositi pokazivač na strukturu  Ovo je primarno sintaktički “nedostatak”  C (ali i Pascal, Fortran, Basic) programeri s takvom paradigmom “žive” već 20-ak godina  Pozivi funkcija iz biblioteke su isprepleteni s pozivima drugih funkcija i sintaktički izgledaju isto  Smanjuje se preglednost i čitljivost programa
  • 13. 13 Nedostaci sa stajališta dizajna programa (2/2)  Nema izravne i na prvi pogled vidljive povezanosti deklarirane strukture i funkcija koje nad njom operiraju  Sve ove funkcije dobivaju na mjestu prvog argumenta pokazivač struct DinamickoPolje *, ali će korisnici i sami definirati mnoge funkcije koje dobivaju takav pokazivač
  • 14. 14 Problem mogućeg sukoba naziva (engl. name clash)  Što ukoliko je u nekoj drugoj biblioteci definirana funkcija s istim imenom ?  Ako koristimo hrvatske nazive za varijable i funkcije, ovo nije toliki problem  Kod korištenja engleskih termina (kod izrade biblioteka funkcija bitan zahtjev ukoliko se želi omogućiti međunarodno korištenje razvijene biblioteke) je situacija znatno nepovoljnija (Nazivi initialize, setSize, cleanup ili delete su standardni nazivi)
  • 15. 15 Problem izravne promjene vrijednosti u strukturi  Što ukoliko netko izravno promijeni vrijednost podatka u strukturi!  Definirane funkcije se oslanjaju na činjenicu da samo one izravno operiraju nad podacima u strukturi !  Situacija: korisnik izravno promijeni podatak BrojElem  Podaci u polju se nisu promijenili ali će se funkcije drugačije ponašati  Čak i ukoliko u dokumentaciji eksplicitno piše da se to ne smije raditi, prije ili kasnije će netko to i napraviti (greškom, neznanjem, lijenošću – tako mu je “lakše”)