tabele oz. polja
DESCRIPTION
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];. - PowerPoint PPT PresentationTRANSCRIPT
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;
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č...
const int NE = 100; float racun[NE];
Sintaksa
• tip ime [st_elementov];
• float tabela[6]; //deklaracija polja 6 realnih vrednosti z imenom tabela
Subscript Overflow
float tabela[10];
odgovornostprogramerja
polje je veljavnoče je index < 6
Deklaracija/Definicija
• int polje [5];
• int polje [5] = { 16, 2, 77, 40, 12071 };
const int N = 50; int i, count[N];
cin >> count[i];
INICIALIZACIJA!
Delna inicializacija
• int polje [5];
• polje [5] = {0};
• polje [5] = {16, 2, 77};
• int polje[] = {5, 6, 3};
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;
Primeri
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; }
Naloga
1. Napišite kodo tako, da bo vektor_B 2x vecji kot vektor_A float vektor_A[3]={1.0, 0.0, 3.0}, vektor_B[3];
Naloga
1. for (int i=0; i<3; i++)
vektor_B[i] = 2 * vektor_A[i];
RE
ŠIT
EV
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?
Naloga
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
RE
ŠIT
EV
Naloga
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 stevec od 0 do stevilo-1
if array[stevec] > 1.1*povprecje
povecaj nad10;
rezultat povprecje, stevilo in nad10.
RE
ŠIT
EV
Eno- in dvo-dimenzionalna polja
int polje [5];
int polje [3][5];
int polje [15];
Eno- in dvo-dimenzionalna polja
Polje kot parameter funkcije
• 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); }
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]; }
Polje kot parameter funkcijefloat 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
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]; }
float one[50], two[50], three[50]; . .dodaj(20, one, two, three);
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.
NalogaR
EŠ
ITE
V
#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;}
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”
Nizi znakov
• Razlika med zapisoma 'A' in “A”
• Prvi zapis pomeni znak A in drugi zapis stringa A
• Ker se stringi končajo z ničelnim znakom, "A" predstavlja dva znaka 'A' and '\0'
Nizi znakovchar s1[10]; • Spremenljivka s1 je lahko maksimalno
dolžine 9 (zadnji znak je ničelni znak)• Spremenljivka “string” je inicializirana kot
vsaka druga spremenljivkachar 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|?|?|?|
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 >>
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 >>
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);
Primeri
Naloge
1. Kakšen je zapis polja name v spominu za spodnje tri spremenljivke:
1. char name[11] = {'J', 'o', 'h', 'n', '\0'};
2. char name[8] = "John";
3. char name[] = "John";
2. Napišite kodo tako, da se bodo imena izpisala na zaslonchar osebe[3][16]={"Aleš", "Boris", "Tomaz"};
Naloga
1. Rezultati so narisani
2. for (int i=0; i<3; i++)
cout << i+1 << ". oseba je: " << osebe[i] << endl;
RE
ŠIT
EV
Uporaba vektorjev in polj
1. Iskanje določene vrednosti, znaka
2. razvrščanje
3. Vnos vrednosti v polje
4. Izbris vrednosti iz polja
Dinamični pomnilnik
Neja Zupan
Dinamični pomnilnik
int * kazalec; kazalec = new int [5];
kazalec = new (nothrow) int [5];
kazalec = new tipkazalec = new tip [elementi]
int * kazalec; kazalec = new (nothrow) int [5]; if (kazalec == 0) { // sporočilo uporabniku-napaka. };
delete pointer; delete [] pointer;
#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;}
Koliko števil želite vpisati? 5Vpiši 1. številko : 75Vpiši 2. številko : 436Vpiši 3. številko : 1067Vpiši 4. številko : 8Vpiši 5. številko r : 32Vpisal si številke: 75, 436, 1067, 8, 32,
Strukture in razredi
Neja Zupan
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)
Strukture (struct) - sintaksa
The general form (syntax) of a struct is: struct typeName{ dataType1 identifier1; dataType2 identifier2;
// podatkovni_tip ime_parametra dataTypen identifiern;};
Strukture (struct) - sintaksa
struct sadje
{
int teza;
float cena;
} jabolko, jagoda;
struct sadje
{
int teza;
float cena;
};
sadje grozdje;
sadje marelica;
Dostop do članov struct
Sintaksa:
structImeSpremenljivke.ImeClana
Pika je operator za dostop do člana strukture.
struct sadje
{
int teza;
float cena;
};
sadje grozdje;
sadje marelica;
grozdje.teza;
marelica.cena;
struct spremenljivke in funkcije
Spremenljivka tipa struct: v funkcijo posredovana kot vrednost ali preko reference
Funkcija lahko vrne vrednost tipa struct
Naloga
1. Definirajte strukturo za opis osebe
2. Deklarirajte polje 10 oseb
3. Napišite sintakso za izpis vseh 10 oseb na ekran
Naloga
struct Oseba
{
char ime[32];
char priimek[32];
char emso[14];
char spol;
};
RE
ŠIT
EV
Naloga
//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;
RE
ŠIT
EV
Naloga
//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;
...
}
RE
ŠIT
EV
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
Razredi - class
• class – tip strukture podatkov
• ADT
• naredi C++ objektno orientiran jezik
• Zbirka fiksnega števila komponent
• Komponente se imenujejo člani (members)
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;
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;
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;}