1 / 49

Tabele oz. polja

Tabele oz. polja. Neja Zupan. Polje???. sum = 0.0; for (i = 0; i < 6; i++) { cin >> x; sum += x; }. sum = 0; cin >> a; sum += a; cin >> b; sum += b; cin >> c; sum += c; cin >> d; sum += d; cin >> e; sum += e; cin >> f; sum += f;. const int NE = 100; float racun[NE];.

samira
Download Presentation

Tabele oz. polja

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. Tabele oz. polja Neja Zupan

  2. Polje??? sum = 0.0; for (i = 0; i < 6; i++) { cin >> x; sum += x; } sum = 0; cin >> a; sum += a; cin >> b; sum += b; cin >> c; sum += c; cin >> d; sum += d; cin >> e; sum += e; cin >> f; sum += f;

  3. const int NE = 100; float racun[NE]; Kaj je polje? • Polje je struktura pomnilniških celic istega podatkovnega tipa, ki ima določeno ime. • Do posameznih elementov polja (celic) pridemo preko indeksa elementa (celice). • Indeks je celoštevilčna vrednost in prvi element v polju ima indeks 0, naslednji za ena več...

  4. Sintaksa • tipime [st_elementov]; • float tabela[6]; //deklaracija polja 6 realnih vrednosti z imenom tabela polje je veljavno če je index < 6 Subscript Overflow float tabela[10]; odgovornost programerja

  5. Deklaracija/Definicija const int N = 50; int i, count[N]; cin >> count[i]; • int polje [5]; • int polje [5] = { 16, 2, 77, 40, 12071 }; INICIALIZACIJA!

  6. Delna inicializacija • int polje [5]; • polje [5] = {0}; • polje [5] = {16, 2, 77}; • int polje[] = {5,6,3};

  7. Aritmetika polj • y = x; //napačno • y[j] = x[j]; //pravilno for(j = 0; j < 25; j++) y[j] = x[j]; polje[0] = a; polje[a] = 75; b = polje [a+2]; polje[i] = polje[i] + 5; (count[i] += 5;) polje[polje[a]] = polje[2] + 5;

  8. Primeri

  9. Kaj vrne program? // primer polje #include <iostream> int polje [] = {1, 2, 7, 4, 12}; int n, result=0; int main () { for ( n=0 ; n<5 ; n++) { result += polje[n]; } cout << result; return 0; }

  10. Naloga • Napišite kodo tako, da bo vektor_B 2x vecji kot vektor_Afloat vektor_A[3]={1.0, 0.0, 3.0}, vektor_B[3];

  11. Naloga REŠITEV • for (int i=0; i<3; i++) vektor_B[i] = 2 * vektor_A[i];

  12. Naloga Imamo maksimalno 200 pozitivnih celih števil za katere želimo izračunati povprečje in izračunati število polj, ki vsebujejo večje vrednosti od vrednosti 10% nad povprečjem. Kako se lotiti priprave kode?

  13. Naloga REŠITEV Najprej napišite psevdokodo: deklaracija spremenljivk vnos elementov v polje izračun vsote, povprečja in 10% nad najdi vse vrednosti iz polja zapiši rezultat

  14. Naloga REŠITEV Natančnejša psevdo koda: vsota je 0. stevilo je 0. nad10 je 0. vnesi prvo vrednost. while ce je pozitivno { vstavi vrednost v polje z indeksim stevilo. pristej stevilo vsoti. povecaj stevilo. vnesi novo vrednost. } izracunaj povprecje. for stevecod 0 do stevilo-1 if array[stevec] > 1.1*povprecje povecaj nad10; rezultatpovprecje, steviloinnad10.

  15. Eno- in dvo-dimenzionalna polja int polje [5]; int polje [3][5]; int polje [15];

  16. Eno- in dvo-dimenzionalna polja

  17. Vrednosti polj se prensšajo izključno preko kazalcev (referenčni operator) Znak & se NE uporablja Z [] se le označi spremenljivko polja Uporaba besede “const” prepreči spreminjanje parametra polja float povprecje(int n, float A[]) { float sum = 0.0; int i; for (i = 0; i < n; i++) sum += A[i]; return (sum/n); } Polje kot parameter funkcije void addarray(int size, const float A[], const float B[], float C[]) { int i; for (i = 0; i < size; i++) C[i] = A[i] + B[i]; }

  18. float povprecje(int n, float A[]) { float sum = 0.0; int i; for (i = 0; i < n; i++) sum += A[i]; return (sum/n); } const int NE = 100; float average, data[NE]; int i, m; cout << “Vnesi število manjše od " << NE << "): "; cin >> m; for (i = 0; i < m; i++) cin >> data[i]; average = povprecje(m, data); Polje kot parameter funkcije

  19. float one[50], two[50], three[50]; . . dodaj(20, one, two, three); Polje kot parameter funkcije void dodaj(int size, const float A[], const float B[], float C[]) { int i; for (i = 0; i < size; i++) C[i] = A[i] + B[i]; }

  20. Naloga Napišite program, ki ustvari dve polji celih števil polje1 = {5, 10, 15} polje2 = {2, 4, 6, 8, 10} Program kliče funkcijo, ki ne vrne rezultata in na ekran izpiše 3 števila iz prvega polja in 4 števila iz drugega polja.

  21. Naloga REŠITEV #include <iostream.h> void izpisi_polje (int arg[], int length) { for (int n=0; n<length; n++) cout << arg[n] << " "; cout << "\n"; } int main () { int polje1[] = {5, 10, 15}; int polje2[] = {2, 4, 6, 8, 10}; izpisi_polje (polje1,3); izpisi_polje (polje2,4); return 0; }

  22. Nizi znakov • Znakovni niz je predstavljen s poljem znakov. • Za razliko od polja števil predstavlja niz znakov zaporedje znakov, ki se končajo z ničelnim znakom '\0' in ta označuje konec niza. • V C++ je zaporedje znakov shranjeno v“array of characters”

  23. Nizi znakov • Razlika med zapisoma 'A' in “A” • Prvi zapis pomeni znak A in drugi zapis stringa A • Ker se stringi končajo zničelnim znakom, "A" predstavlja dva znaka 'A' and '\0'

  24. Nizi znakov char s1[10]; • Spremenljivka s1 je lahko maksimalno dolžine 9 (zadnji znak je ničelni znak) • Spremenljivka “string” je inicializirana kot vsaka druga spremenljivka char polje_znakov1 [] = “primer"; char polje_znakov2 [10] = “primer" • Shranjeno sledeče: • polje_znakov1 |p|r|i|m|e|r|\0| • polje_znakov2 |p|r|i|m|e|r|\0|?|?|?|

  25. Klic stringa #include <iostream.h> int main () { char vpras[] = “Vnesite svoje ime: "; char pozdrav[] = “Živjo, "; char ime [80]; cout << vpras; cin >> ime; cout << pozdrav << ime << "!"; return 0; } polje Stringe, ki vsebujejo predledek, ne moremo brati z operatorjem >>

  26. Branje in klic stringa #include <iostream.h> int main () { char vpras[] = “Vnesite svoje ime: "; char pozdrav[] = “Živjo, "; char ime [80]; cout << vpras; cin >> ime; cout << pozdrav << ime << "!"; return 0; } polje Stringe, ki vsebujejo predledek, ne moremo brati z operatorjem >>

  27. Branje stringa s presledki • Stavek m znakov shrani v str • \n označuje konec stringa (besede, stavka...) m • \n ni shranjen v str cin.get(str,m+1);

  28. Primeri

  29. Naloge • Kakšen je zapis polja name v spominu za spodnje tri spremenljivke: • char name[11] = {'J', 'o', 'h', 'n', '\0'}; • char name[8] = "John"; • char name[] = "John"; • Napišite kodo tako, da se bodo imena izpisala na zaslonchar osebe[3][16]={"Aleš", "Boris", "Tomaz"};

  30. Naloga REŠITEV • Rezultati so narisani • for (int i=0; i<3; i++) cout << i+1 << ". oseba je: " << osebe[i] << endl;

  31. Uporaba vektorjev in polj • Iskanje določene vrednosti, znaka • razvrščanje • Vnos vrednosti v polje • Izbris vrednosti iz polja

  32. Dinamični pomnilnik Neja Zupan

  33. Dinamični pomnilnik int * kazalec; kazalec = new int [5]; kazalec = new tipkazalec = new tip [elementi] kazalec = new (nothrow) int [5]; delete pointer; delete [] pointer; int * kazalec; kazalec = new (nothrow) int [5]; if (kazalec == 0) { // sporočilo uporabniku-napaka. };

  34. Koliko števil želite vpisati? 5 Vpiši 1. številko : 75 Vpiši 2. številko : 436 Vpiši 3. številko : 1067 Vpiši 4. številko : 8 Vpiši 5. številko r : 32 Vpisal si številke: 75, 436, 1067, 8, 32, #include <iostream.h> int main () { int i,n; int * p; cout << “Koliko števil želiš vpisati? "; cin >> i; p= new (nothrow) int[i]; if (p == 0) cout << “Napaka: pomnilnik zaseden"; else { for (n=0; n<i; n++) { cout << “Vpiši” << n << “. številko: “; cin >> p[n]; } cout << “Vpisal si številke: "; for (n=0; n<i; n++) cout << p[n] << ", "; delete[] p; } return 0; }

  35. Strukture in razredi Neja Zupan

  36. Strukture (struct) • Struktura omogoča združitev različnih podatkovnih tipov v enega • Struct – zbirka fiksnega števila komponent • Komponente so dostopnje preko njihovega imena • Komponente so lahko različnega tipa • Komponente strukture (struct) imenujemo člani (members) • Struktura je definicija in ne deklaracija (ni dodeljeno pomnilniški prostor)

  37. Strukture (struct) - sintaksa The general form (syntax) of a struct is: struct typeName { dataType1 identifier1; dataType2 identifier2; // podatkovni_tip ime_parametra dataTypen identifiern; };

  38. Strukture (struct) - sintaksa struct sadje { int teza; float cena; } jabolko, jagoda; struct sadje { int teza; float cena; }; sadje grozdje; sadje marelica;

  39. Dostop do članov struct struct sadje { int teza; float cena; }; sadje grozdje; sadje marelica; Sintaksa: structImeSpremenljivke.ImeClana Pika je operator za dostop do člana strukture. grozdje.teza; marelica.cena;

  40. struct spremenljivke in funkcije Spremenljivka tipa struct: v funkcijo posredovana kot vrednost ali preko reference Funkcija lahko vrne vrednost tipa struct

  41. Naloga • Definirajte strukturo za opis osebe • Deklarirajte polje 10 oseb • Napišite sintakso za izpis vseh 10 oseb na ekran

  42. Naloga REŠITEV struct Oseba { char ime[32]; char priimek[32]; char emso[14]; char spol; };

  43. Naloga REŠITEV //Deklaracija polja sestavljenih spremenljivk Oseba ljudje[10]; //dekl. polja ljudje z 10 elementi cout << "Vpisite ime osebe:"; cin >> ljudje[1].ime; cout << "Vpisite priimek osebe:"; cin >> ljudje[1].priimek; cout << "Vpisite EMSO osebe:"; cin >> ljudje[1].emso; cout << "Vpisite spol osebe:"; cin >> ljudje[1].spol;

  44. Naloga REŠITEV //zgled za polje for (int i=0; i<10; i++) { cout << "Vpisite ime " << i+1 << ". osebe: "; cin >> ljudje[i].ime; cout << "Vpisite priimek " << i+1 << ". osebe: "; cin >> ljudje[i].priimek; ... }

  45. Drugi podatkovni tipi • typedef – sinonim za obstoječe podatkovne tipe • union – posamezni del pomnilnika uporablja več spremenljivk različnega podatkovnega tipa • anonimni union – razlika le v klicu članov podatkovnega tipa union • enum – spremenljivka lahko zavzame le eno vrednost izmed konstant

  46. Razredi - class • class – tip strukture podatkov • ADT • naredi C++ objektno orientiran jezik • Zbirka fiksnega števila komponent • Komponente se imenujejo člani (members)

  47. Sintaksa class classIdentifier { classMemberList }; Član je lahko spremenljivka ali funkcija class CRectangle { int x, y; public: void set_values (int,int); int area (void); } rect;

  48. Sintaksa • private members: člani razreda so dosegljivi samo članom istega razreda ali “prijateljskim” razredom. • protected members:so dosegljivi članom istega razreda, izpeljanim in prijateljskim razredom. • public members:dosegljivi povsod, kjer je viden razred. class CRectangle { int x, y; public: void set_values (int,int); int area (void); } rect;

  49. Primer // primer class #include <iostream> using namespace std; class CRectangle { int x, y; public: void set_values (int,int); int area () {return (x*y);} }; void CRectangle::set_values (int a, int b) { x = a; y = b; } int main () { CRectangle rect; rect.set_values (3,4); cout << "area: " << rect.area(); return 0; }

More Related