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

Слични документи
Računarski praktikum I - Vježbe 09 - this, static

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

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

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

Računarski praktikum I - Vježbe 06 - Standard Template Library (2)

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

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

Uvod u računarstvo 2+2

Uvod u računarstvo 2+2

070-ALIP2-udzbenik.indb

Tutoring System for Distance Learning of Java Programming Language

Uvod u računarstvo 2+2

Uvod u računarstvo 2+2

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

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

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

Microsoft Word - Zadaci za samostalno vjezbanje 4.doc

Funkcije predavač: Nadežda Jakšić

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

Strukture predavač: Nadežda Jakšić

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

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]

Microsoft Word - 11 Pokazivaci

Tutoring System for Distance Learning of Java Programming Language

Funkcije predavač: Nadežda Jakšić

Microsoft PowerPoint - 07-DinamickeStrukturePodataka

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

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

PHP kod

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

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

Sveucilište u Zagrebu

Slide 1

PowerPoint Presentation

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

Microsoft PowerPoint - OOPpredavanja05 [Compatibility Mode]

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

Sveučilište u Zagrebu PMF Matematički odsjek Mreže računala Vježbe 10 Zvonimir Bujanović Luka Grubišić Vinko Petričević

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

Microsoft PowerPoint - Datoteke [Compatibility Mode]

Programiranje za UNIX Okruženje unix procesa

Programiranje 1 drugi kolokvij, 2. veljače Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanje,

PROGRAMIRANJE Program je niz naredbi razumljivih računalu koje rješavaju neki problem. Algoritam je postupak raščlanjivanja problema na jednostavnije

Tutoring System for Distance Learning of Java Programming Language

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

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

Programiranje 1

PowerPoint Presentation

Programski jezik C

Zadatak 011 Razmotrite sljedeći primjer. package hr.fer.oopj.primjeri.p011; public class Main { } public static void main(string[] args) { obrada(2.71

Datoteke predavač: Nadežda Jakšić

PROCES KUPNJE ULAZNICE NA PORTALU ULAZNICE.HR Početak kupovine... 2 Plaćanje Mastercard karticom... 5 Plaćanje Maestro karticom... 8 Plaćanje American

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

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

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

PASCAL UVOD 2 II razred gimnazije

Objektno orjentirano programiranje

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

Programski jezik C

2015_k2_z12.dvi

studirko.com predstavlja: Večernja škola C# za FPZ ( ) v 4.0 Za studirko.com napisao: Slaven Špigl

МОДЕЛ КОНТРОЛНЕ ВЕЖБЕ Информатика и рачунарство за шести разред разред Наставна тема: Редни број часа: 8. РАЧУНАРСТВО Циљ часа: Теститарање постигнућа

OOP1 - domaci 2 (2004/05)

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

PowerPoint Presentation

JMBAG Ime i Prezime Mreže računala Završni ispit 16. veljače Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i službeni šalabahter.

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

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

PowerPoint Presentation

Zadaća 4. Ova zadaća nosi ukupno 4 poena, pri čemu prva dva zadatka nose po 1 poen, treći zadatak 1,5 poen i četvrti zadatak 0.5 poena. Svi zadaci se

MergedFile

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

PDO

Uvod u takmičarsko programiranje

Информатичка одељења Математика Република Србија Министарство просвете, науке и технолошког развоја Завод за вредновање квалитета образовања и васпита

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

Upute - JOPPD kreiranje obrasca

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvrsnog_Programa [Compatibility Mode]

CIJELI BROJEVI 1.) Kako još nazivamo pozitivne cijele brojeve? 1.) Za što je oznaka? 2.) Ispiši skup prirodnih brojeva! 3.) Kako označavamo skup priro

PowerPoint Presentation

PowerPoint Presentation

Matrice. Algebarske operacije s matricama. - Predavanje I

Microsoft Word - 15ms261

07_PJISP_II_Predavanja

Slide 1

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

Primenjeno programiranje - Vežbe

Uvod u PHP

Programski jezici i strukture podataka

Ekonomski fakultet u Osijeku Kolegij: Elektroničko i mobilno poslovanje Nositelj: prof. dr. sc. Branimir Dukić Zadaci za vježbe 7. JavaScript - zadaci

P11.3 Analiza zivotnog veka, Graf smetnji

SELECT statement basic form

Упутство за пријављивање испита путем интернета Да би студент могао да пријави испит путем интернета мора прво да се пријави. Пријављивање се врши у п

Орт колоквијум

Microsoft Word - zadaci_21.doc

HRVATSKA UDRUGA ZA ZAŠTITU POTROŠAČA Trg kralja Petra Krešimira IV br ZAGREB telefon/telefaks: Zagr

JMBAG IME I PREZIME BROJ BODOVA MJERA I INTEGRAL završni ispit 6. srpnja (Knjige, bilježnice, dodatni papiri i kalkulatori nisu dozvoljeni!) 1.

Analiticka geometrija

Bojenje karti iliti poučak o četiri boje Petar Mladinić, Zagreb Moj djed volio je igrati šah. Uvijek mi je znao zadati neki zanimljiv zadatak povezan

Транскрипт:

Prirodoslovno-matematički fakultet Matematički odsjek Sveučilište u Zagrebu RAČUNARSKI PRAKTIKUM I Vježbe 07 - Podstrukture, const, reference v2018/2019. Sastavio: Zvonimir Bujanović

Podstrukture Član neke strukture može biti i druga struktura. struct stogstringova... struct Automobil string registracija; stogstringova vlasnici; int godinaproizvodnje; 2

Podstrukture: inicijalizacija Podstruktura koja je član neke strukture se inicijalizira prije ulaska u konstruktor te strukture. Automatski se poziva defaultni konstruktor za podstrukturu. Ako želimo pozvati neki drugi konstruktor, to radimo ovako: struct stogstringova stogstringova( int velicina )... } struct Automobil int brojvlasnika; stogstringova vlasnici; Automobil() : vlasnici( 1 ), brojvlasnika( 1 )... } Automobil( int brvl ) : vlasnici( brvl ), brojvlasnika( brvl )... } 3

Podstrukture: inicijalizacija C++11 Podstruktura se može inicijalizirati i ovako: struct stogstringova stogstringova( int velicina )... } struct Automobil int brojvlasnika = 1; stogstringova vlasnici = stogstringova( 1 ); Automobil()... } // dogodi se gornja inicijaliz. Automobil( int brvl ) // ne dogodi se gornja inicijaliz. : vlasnici( brvl ), brojvlasnika( brvl )... } Ova inicijalizacija se dogodi ako ne navedemo popis konstruktora za podstrukture prije ulaska u konstruktor nadstrukture. 4

Ugniježđene strukture Unutar strukture možemo deklarirati drugu, ugniježđenu strukturu. struct Automobil struct Motor int snaga; double obujam; Motor( int s, double o ) snaga = s; obujam = o; } Motor m; int brojvrata; Automobil() : m( 90, 1.4 )... } Automobil( int s, double o ) : m( s, o )... } Ovo je korisno kada ugniježđena struktura ima smisla samo unutar nadstrukture. 5

Ugniježđene strukture Izvan strukture Automobil moguće je deklarirati varijable tipa Automobil::Motor. Automobil yugo( 45, 1.2 ); Motor tdi( 120, 1.9 ); //!!! krivo, compile error!!! Automobil::Motor turbodiesel( 120, 1.9 ); // OK yugo.m = turbodiesel; cout << yugo.m.snaga; cout << yugo.brojvrata; 6

Zadatak 1 Napravite implementaciju atp-a list pomoću polja; lista treba moći čuvati max. 100 elemenata proizvoljnog tipa. Unutar liste treba postojati ugniježđena struktura iterator tako da se može raditi sljedeće: list<int> L; L.push_back( 5 ); L.push_back( 7 ); list<int>::iterator li = L.begin(); while(!li.isequal( L.end() ) ) cout << li.data() << " "; li = li.next(); } Uputa: neka iterator sadrži pokazivač na tip iz template-a. 7

const Varijable označene kao const prilikom deklaracije kasnije nije moguće mijenjati. Takve varijable moramo inicijalizirati. const int a; //!!! compile error!!! const int b = 5; // OK U const varijable se ne može pisati, ali ih se može čitati. const int a = 5; int b = 3; a = b; //!!! compile error: pokusaj pisanja u const!!! b = a; // OK 8

Pokazivači na const Pokazivač na konstantne podatke tipa Type deklariramo ovako: const Type *ptr; Ovdje su konstantni podaci na koje pokazuje ptr, a ne i sam ptr! Zato nije potrebno inicijalizirati ptr. char nesto[] = "rp1"; char *s1 = nesto; // inicijaliziramo obicni pokazivac const char *s2 = nesto; // inicijaliziramo pokazivac na const s1[1] = 'A'; // OK s2[1] = 'A'; // greska, mijenjam podatke na koje pokazuje s2 s1 = s2; // greska, preko s1 se mogu mijenjati podaci u s2! s2 = s1; // OK (s2 nije konstantan, nego samo podaci) 9

Pokazivači na const Ponekad funkcije (poput c_str()) vraćaju pokazivače na const. void ispis1( char *s )... } void ispis2( const char *s )... } string s = "rp1"; char *s1; const char *s2; s1 = s.c_str(); // greska, c_str() vraca const char * s2 = s.c_str(); // OK ispis1( s.c_str() ); // greska ispis2( s.c_str() ); // OK 10

const funkcije članice Funkcije članice strukture koje ne modificiraju objekt moguće je označiti sa const prilikom deklaracije. Takve funkcije možemo pozivati i na const objektima. struct MyString int size; char *data; MyString() size = 0; data = nullptr; } int length() const return size; } const char *c_str() const return data; } void append( const char *s )... } const MyString s; // OK, inicijalizaciju radi konstruktor int i = s.length(); // OK, length je const funkcija s.append( "abc" ); //!!! compile error!!! append nije const 11

const funkcije članice Dozvoljeno je imati dvije varijante iste funkcije: jednu koja radi s const objektima, a drugu koja radi s ne-const objektima. struct MyStruct string f() const return "ja sam const"; } string f() return "ja nisam const"; } const MyStruct s1; MyStruct s2; cout << s1.f(); // "ja sam const" cout << s2.f(); // "ja nisam const" Ako funkcija ima istu implementaciju i za const i za ne-const objekte: dovoljno je napisati samo const-varijantu; tada će ona biti pozivana u oba slučaja. 12

"Varijabilni" parametri funkcija U C-u, parametri funkcijama se šalju po vrijednosti, tj. funkcija ne može promijeniti varijablu koju joj šaljemo kao parametar. To zaobilazimo slanjem pokazivača na varijablu. void f( int *p ) *p = 3; } int main() int x = 5; f( &x ); cout << x; // ispisuje 3 } return 0; 13

Reference Uz obične varijable i pokazivače, C++ uvodi reference. Referenca na varijablu x drugo ime za varijablu x. Referenca se uvijek mora inicijalizirati. Nakon inicijalizacije, referenca ostaje zauvijek zavezana za istu varijablu. Koristiti referencu je potpuno isto kao koristiti originalnu varijablu, u svim mogućim situacijama. Dakle, referenca dijeli istu adresu s varijablom. int a = 5, b = 3; int &r = a; // OK, r je referenca (drugo ime) za a int &t = 5; //!!! compile error, nema varijable!!! int &s; //!!! compile error, nema varijable!!! cout << r; // ispisuje 5 (tj. vrijednost od a) r = b; // u r (tj. u a) spremi vrijednost od b cout << r << " " << a; // ispisuje 3 3 a = 8; cout << r << " " << a; // ispisuje 8 8 14

Reference kao parametri funkcijama Ako je parametar funkcije referenca, onda promjena vrijednosti te reference unutar funkcije zapravo mijenja varijablu s kojom je funkcija pozvana. void f( int &a ) // a je referenca na varijablu iz main-a a = 7; } int main() int x = 5; f( x ); // kao da pise: int &a = x; cout << x; // ispisuje 7 f( 5 ); //!!! compile error, nema varijable!!! } return 0; 15

Reference na const Pomoću reference na const ne možemo mijenjati vrijednost referirane varijable. int a = 5; const int &r = a; cout << r; // ispisuje 5 r = 7; //!!! compile error, r je referenca na const!!! a = 7; // OK, a nije const varijabla cout << r; // ispisuje 7 Funkcije često imaju parametre koji su reference na const. Ako funkcija prima referencu, onda se ne događa kopiranje cijelog objekta. Zato je poziv funkcije brz i za velike objekte. Ako ne želimo da funkcija može mijenjati referiranu varijablu, označit ćemo referencu sa const. 16

Referenca kao povratna vrijednost funkcije Funkcija može vraćati referencu. int &prvielementvektora( vector<int> &X ) return X[0]; } int main() vector<int> V( 10 ); cout << V[0]; // ispise 0 prvielementvektora( V ) = 5; //!!! OK!!! cout << V[0]; // ispise 5 } return 0; Što bi se dogodilo da funkcija nije primila referencu, nego običnu varijablu? 17

Referenca kao povratna vrijednost funkcije Oprez: ne smijemo vraćati referencu na lokalnu varijablu u funkciji! int &proba( int *a ) int temp = 5; *a = 5; // Iduca linija bi srusila program prilikom izvrsavanja. // return temp; // krivo (warning), temp je lokalna! } return *a; // OK, *a zivi i izvan funkcije. int main() int x = 3; int y = proba( &x ); // OK, y = 5; int &t = proba( &x ); // OK ++t; cout << x; // ispise 6 } return 0; 18

Reference: bonus pitanja 1 Zbog čega copy-konstruktor prima referencu, a ne običnu varijablu i zašto je to referenca na const? 2 Neka su li i si iteratori u listi i set-u, redom. Prilikom izvršavanja *li i *si se zapravo poziva neka funkcija (označena dolje sa retrieve). Objasnite zašto ta funkcija treba vraćati referencu u slučaju liste, a referencu na const u slučaju set-a. cout << *li; cout << retrieve(li); 19