1 / 32

Mehanizmi agregacije

Mehanizmi agregacije. *. Polja. *. Jednodimenzionalna polja: deklaracija. format tip_podatka identifikator [ broj ];. primjer float x[5];. prvi član ima indeks nula. float ------------ x[0]. float ------------ x[1]. float ------------ x[2]. float ------------ x[3]. float

noma
Download Presentation

Mehanizmi agregacije

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Mehanizmi agregacije *

  2. Polja *

  3. Jednodimenzionalna polja: deklaracija format tip_podatka identifikator [broj]; primjer float x[5]; prvi član ima indeks nula float ------------ x[0] float ------------ x[1] float ------------ x[2] float ------------ x[3] float ------------ x[4] float[5] ------------ x : 4 byte-a 20 byte-ova *

  4. Polja • Polje je niz varijabli istog tipa podataka definiranih zajedničkim imenom, koje se nalaze na uzastopnim memorijskim lokacijama. • Pojedinom elementu polja pristupa se preko imena polja i indeksa (rednog broja) elementa u polju. • Indeksi polja u programskom jeziku C++ su cijeli brojevi između 0 i duljine polja umanjenog za 1. *

  5. Jednodimenzionalna polja: definicija format tip_podatka identifikator [ ]={vrijednost_1, vrijednost_2, ..., vrijednost_n}; primjer float x[]={1342.5,4.7,23.4,12.,-72e12}; Nije potrebno navoditi broj elemenata float[5] ------------ x 1342.5 4.7 23.4 12. -72e12 : x[0] x[1] x[2] x[3] x[4] *

  6. Dvodimenzionalna polja: deklaracija i definicija primjer int A[3][5] = {{11,12,13,14,15}, {21,22,23,24,25}}; int [3] [5] -------------- A : 11 12 13 14 15 A[0][0]: A[0][1]: A[0][2]: A[0][3]: A[0][4]: 21 22 23 24 25 Nedefinirani elementi popunjavaju se nulama A[1][0]: A[1][1]: A[1][2]: A[1][3]: A[1][4]: 0 0 0 0 0 Da nebi!!! A[2][0]: A[2][1]: A[2][2]: A[2][3]: A[2][4]: *

  7. Izračunavanje dana: rješenje s poljima • #include<iostream>using namespace std; • int main() { • //inicijalizacija i deklaracija • int Dat[3]; • int Mjes[]={31,28,31,30,31,30,31,31,30,31,30}; • int j; • //ponavljanje • do { • //unosenje datuma • cout<<"Unosenje datuma (danmjesecgodina): "; • for(int i=0;i<=2;i++) • cin>>Dat[i]; • cout<<endl; • //prestupna godina? • if(((Dat[2]%100!=0) && (Dat[2]%4==0)) || • (Dat[2]%400==0)) • Mjes[1]=29; • else • Mjes[1]=28; *

  8. //inicijalizacija sume_dana • int Suma=Dat[0]; • //izracunavanje • for(i=0;i<Dat[1]-1;i++) • Suma+=Mjes[i]; • //ispis • cout<<"Od 01.01. do "<<Dat[0]<<"."<<Dat[1] • <<"."<<Dat[2]<<"."<<" proslo je " • <<Suma<<" dana."<<endl; • //indikacija kraja • cout<<"Za nastavak <1>, za prekid <0>: "; • cin>>j; • cout<<endl; • }while(j==1); • return0; • } *

  9. Znakovninizovi *

  10. Znakovni nizovi (engl. characterstrings, strings) (1) Znakovni nizovi su jednodimenzionalna znakovnapolja koja služe za pohranjivanje tekstova: char VarazdinskiSlikar[]=“Ivo Režek”; I v o R e ž e k \0 Na kraju niza automatski se postavlja nul-znak (engl. null-character). Nije ga potrebno eksplicitno navoditi, ali treba o njemu voditi računa. Ispis koji dokazuje postojanje nul-znaka: for(int i=0;i<=10;i++) cout <<VarazdinskiSlikar[i]<<“\t” <<(int)(unsigned char)VarazdinskiSlikar[i]<<endl; horizontalni tabulator ispisuje ASCII kôd *

  11. #include<iostream> #include<iomanip>using namespace std; int main(){ char VarazdinskiSlikar[]="Ivo Režek"; cout<<endl; //kombinacija ispisa //s tabulatorom (\t=popunjavanje s lijeva) //i setw (popunjavanje s desna) for(int i=0;i<=9;i++){ cout<<"\t"<<VarazdinskiSlikar[i]<<setw(10); cout<<(int)(unsigned char)VarazdinskiSlikar[i]<<endl; } cout<<endl; for(i=0;i<=9;i++){ cout<<setw(9)<<VarazdinskiSlikar[i]; cout<<"\t"<<(int)(unsigned char)VarazdinskiSlikar[i]; cout<<endl; } system(“pause”); return 0; } Dokaz: program P6_1.cpp *

  12. Znakovni nizovi: definicija i ispis (primjeri) Primjer definicije znakovnog niza: char Niz[]=“Melita Kozina”; Isti se niz može definirati i ovako: char Niz[]= {‘M’,’e’,’l’,’i’,’t’,’a’,’ ’, ‘K’,’o’,’z’,’i’,’n’,’a’,’\0’}; potrebno definirati Naredba za ispis cout<<Niz<<endl; Ispisuje sadržajznakovnog nizasve do znaka ‘\0’ daje isti rezultat kao for(int i=0;i<13;i++) cout<<Niz[i]; cout<<endl; Što odabrati (koju definiciju, kakav ispis)? Odgovor: vidjeti sljedeći slajd *

  13. Sljedeći slide #include<iostream>using namespace std; int main() { cout<<endl<<"DEFINIRANJE I ISPIS ZNAKOVNOG NIZA"<<endl; char PrviNiz[]="Melita Kozina"; char DrugiNiz[]= {'M','e','l','i','t','a',' ','K','o','z','i','n','a','\0'}; char Znak='\"';//navodnici cout<<endl<<"char PrviNiz[]="; cout<<Znak<<"Melita Kozina"<<Znak<<";"<<endl; cout<<endl<<"char DrugiNiz[]="; cout<<"{'M','e','l','i','t','a',' ','K','o','z','i','n','a',' '}” <<endl<<endl; cout<<"1. cout<<PrviNiz<<endl;"<<endl; cout<<" Ispis: "<<PrviNiz<<endl<<endl; cout<<"2. cout<<DrugiNiz<<endl;"<<endl; cout<<" Ispis: "<<DrugiNiz<<endl<<endl; cout<<"3. for(int i=0;(DrugiNiz[i] != NULL);i++) cout<<DrugiNiz[i];"<<endl; cout<<" Ispis: "; for(int i=0;(DrugiNiz[i] != NULL);i++) cout<<DrugiNiz[i]; cout<<endl; cout<<endl<<"Za kraj <1>: "; cin>>""; return 0; } definicije niza definicija konstante ispis definicija PrviNiz: ispis DrugiNiz: ispis (1) DrugiNiz: ispis (2) *

  14. Preporuka char Niz[]="Melita Kozina”; //definicija cout<<Niz<<endl; //ispis P1_5.exe *

  15. Znakovni nizovi: učitavanje Primjer 1. char tekst[80]; cin>>tekst; cout<<tekst; U čemu je problem? U prazninama. One predstavljaju graničnike koji prekidaju učitavanje podataka. Ispisuje samo do prve praznine, prekida izvođenje! Dokaz: P6_3.exePreporuka: prvo izvođenje - jedna riječdrugo izvođenje - dvije riječi Rješenje je u uporabi funkcijskih članova get( ) i getline( ) Ispisuje po jednu riječ u redu, ne prepoznaje kraj! Izvođenje se mora nasilno prekinuti!Dokaz: P6_4.exe Postoji još i Primjer 2. char tekst[80]; while (cin>>tekst) cout<<tekst<<endl; funkcijski član read( ) ali on radi sa znakom EOF, pa se uglavnom koristi za učitavanje datoteka. *

  16. get ( ) s argumentima: prva varijanta Programski primjer Način rada #include<iostream> #include<iomanip>using namespace std; int main() { char tekst[80]; int i=0; cout<<“Unesi tekst:”<<endl; while (cin.get(tekst[i])) if (tekst[i++]=='\n') break; tekst[i-1]='\0'; cout<<“Ispis: “<<endl<<tekst; cout<<endl<<endl<<"Za kraj<1>:"; cout << endl; system(“pause”); return 0; } Učitava znak po znak. Duljina unešenog teksta mora biti manja od duljine niza. Nakon učitavanja, nizu treba dodati nul-znak. Praktičniji je za učitavanje podataka iz datoteke. *

  17. get ( ) bez argumenata Programski primjer Način rada #include<iostream>using namespace std; int main() { cout<<endl<<"UCITAVANJE ZNAKOVNOG NIZA: "; cout<<"get() BEZ ARGUMENATA” <<endl; char tekst[80]; int i=0; cout<<endl<<"Unesi tekst (1-79 znakova):"<<endl; while((tekst[i]=cin.get())!= -1) if (tekst[i++]=='\n') break; tekst[i-1]='\0'; cout<<endl<<"Ispis:"<<endl <<tekst<<endl; cout<<endl; system(“pause”); return 0; } Učitava znak po znak. ‘get’ bez argumenata je funkcijski član tipa ‘int’, a vraća kôd znaka koji je učitao. Za učitani znak ‘\n’, ‘get’ bez argumenata vraćavrijednost-1. Nakon učitavanja, nizu treba dodati nul-znak. *

  18. get ( ) s argumentima: druga varijanta Programski primjer Način rada #include<iostream>using namespace std; int main() { cout<<endl <<"UCITAVANJE ZNAKOVNOG NIZA: OPTIMALNI get()” <<endl; char tekst[80]; cout<<endl<<"Unesi tekst (1-79 znakova):”<<endl; cin.get(tekst, sizeof(tekst)); cout<<endl<<"Ispis:"<<endl <<tekst<<endl; cout<<endl; system(“pause”); return 0; } Učitava znak po znak. Prekida učitavanje kad naiđe na ‘\n’ koji ostaje u nizu, pa se može učitati najviše (duljina-1) znakova. Zaključni nul-znak dodaje se automatski. Najpogodniji način za učitavanje znakovnih nizova. *

  19. getline ( ) Programski primjer Način rada Učitava znak po znak. Prekida učitavanje kad naiđe na ‘\n’. Automatski uklanja ‘\n’ i dodaje ‘\0’. Također vrlo pogodan način za učitavanje znakovnih nizova. #include<iostream>using namespace std; int main() { cout<<endl <<"UCITAVANJE ZNAKOVNOG NIZA: OPTIMALNI getline()"<<endl; char tekst[80]; cout<<endl<<"Unesi tekst (1-80 znakova):"<<endl; cin.getline(tekst,sizeof(tekst)); cout<<endl<<"Ispis:"<<endl<<tekst <<endl; cout<<endl; system(“pause”); return 0; } *

  20. getline ( ) Programski primjer #include<iostream>using namespace std; int main() { cout<<endl <<"UCITAVANJE ZNAKOVNOG NIZA: OPTIMALNI getline()"<<endl; int n; char tekst[80]; cout << "Unesi broj: "; cin >> n; cout<<endl<<"Unesi tekst (1-80 znakova):"<<endl; cin.getline(tekst,sizeof(tekst)); cout<<endl<<"Ispis:"<<endl<<tekst <<endl; cout<<endl; system("pause"); return 0; } Ovaj će cin.getline biti preskočen Zašto? *

  21. getline ( ) Programski primjer #include<iostream>using namespace std; int main() { cout<<endl <<"UCITAVANJE ZNAKOVNOG NIZA: OPTIMALNI getline()"<<endl; int n; char tekst[80]; cout << "Unesi broj: "; cin >> n; cout<<endl<<"Unesi tekst (1-80 znakova):"<<endl; cin.ignore(); cin.getline(tekst,sizeof(tekst)); cout<<endl<<"Ispis:"<<endl<<tekst <<endl; cout<<endl<<endl<<"Za kraj <1>: "; cin>>""; cout<<endl; return 0; } Ova naredba ignorira sadržaj spremnika unosa *

  22. Zapisi *

  23. Zapis: deklaracija format struct identifikator{ deklaracija_1; . . . deklaracija_n; } identifikator,...; primjer struct student { int sifra; char imeprez[30]; double prosocj;} stud; int ---------- sifra char[30] ----------------------- imeprez double -------------- PrOcj stud : 4 bajta * 30 bajta 8 bajta

  24. Zapisi • Zapis je skup podataka koji mogu biti međusobno različitih tipova • Svaka komponenta zapisa ima svoje ime preko kojeg joj se pristupa. *

  25. #include <iostream> using namespace std; int main () { int Ocj, B=0, S=0; struct student { int sifra; char imeprez[30]; double prosocj; } stud; cout << "Sifra: "; cin >> stud.sifra; cout << "Ime i prezime: "; cin.ignore(); cin.getline(stud.imeprez,sizeof(stud.imeprez)); char Jos='d'; Zapisi: primjeri *

  26. while (Jos=='d') { cout << "Ocjena: "; cin >> Ocj; B++; S+=Ocj; cout << "Jos? "; cin >> Jos; } stud.prosocj=(float)S/B; cout << "Student: " << stud.sifra << " " << stud.imeprez << " Prosjek: " << stud.prosocj << endl; system("pause"); return 0; } Zapisi: primjeri *

  27. Zapisi int main () {struct {int sifra;char imeprez[30];double prosocj;} stud; . . . } Zapisu kojem se odmah pridružuje varijabla i koji se ne koristi nigdje drugdje osim tamo gdje je deklariran nije potrebno definirati ime. Tako dobijamo tzv. neimenovani zapis *

  28. Zapisi struct student {int sifra;char imeprez[30];double prosocj;};int main () { student stud; . . . } Zapis se može deklarirati posebno i koristiti kasnije kod deklariranja varijabli *

  29. Unije *

  30. Unije: deklaracija format union identifikator{ deklaracija_1; . . . deklaracija_n; } identifikator,...; primjer union student { int sifra; char imeprez[30]; double prosocj;} stud; char[30] ------------------------------ imeprez double -------------- PrOcj int ---------- sifra stud : * 30 bajta

  31. Unije • Unija je memorijski prostor koji se može koristiti za pohranjivanje podataka različitih tipova. • Veličina unije jednaka je najvećem od podataka koji je u uniji definiran • U uniji istovremeno može biti upisana samo jedna komponenta unije. *

  32. Unije Programski primjer Unos: #include<iostream> using namespace std; union student { int sifra; char imeprez[30]; }; int main() { student stud; cout << "Maticni broj: "; cin >> stud.sifra; cin.ignore(); cout << "Ime i prezime: "; cin.getline(stud.imeprez,sizeof(stud.imeprez)); cout << stud.sifra << "\t" << stud.imeprez << endl; system("pause"); return 0; } 13 ivica Ispis: 1667855977 ivica Cjelobrojna vrijednost komponente matbr prebrisana komponentom koja sadrži vrijednost niza znakova. *

More Related