Uvod u programiranje II 8 i 9 C++ za program ere poslovnih aplikacija

30
1/30 Uvod u programiranje II 8 i 9 C++ za programere poslovnih aplikacija C++ for Business Programmers John C. Molluzzo - Pace University, New York Prentice Hall, August 02, 2005 Fakultet za poslovnu informatiku

description

Fakultet za poslovnu informatiku. Uvod u programiranje II 8 i 9 C++ za program ere poslovnih aplikacija. C++ for Business Programmers John C. Molluzzo -  Pace University, New York Prentice Hall , August 02, 2005. Poglavlje 8. Pointeri, ni zovi i funkcije. - PowerPoint PPT Presentation

Transcript of Uvod u programiranje II 8 i 9 C++ za program ere poslovnih aplikacija

Page 1: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

1/30

Uvod u programiranje II8 i 9

C++ za programere poslovnih aplikacija

C++ for Business Programmers

John C. Molluzzo -  Pace University, New York

Prentice Hall, August 02, 2005

Fakultet za poslovnu informatiku

Page 2: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

2/30

Poglavlje 8. Pointeri, nizovi i funkcije

• Pointeri, reference i funkcije• Nizovi i funkcije• Stringovi i funkcije• Standardna biblioteka string funkcija• Klasifikacija funkcija funkcije konverzije u odnosu na karakter-znak• Dimnamička alokacija memorije

Page 3: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

3/30

• Pointeri, reference na promenljive i funkcije – Poziv po adresi – pointeri kao argumenti funkcije

• Argumenti u C++ funkcijama se prosleđuju po vrednosti. Ovo znači da se vrednost argumenta, ne sam argument, prosleđuje funkciji.

// dem08-1.cpp

// This program demonstrates passing an argument by value.

#include <iostream>

using namespace std;

int Neg_By_Value(int);

int main()

{

int i = 4;

i = Neg_By_Value(i);

cout << "i = " << i << endl;

return 0;

}

int Neg_By_Value(int a)

{

return -a;

}

Program Output

i = -4

Pointeri i reference

Page 4: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

4/30

// dem08-2.cpp

// This program demonstrates passing an argument by address.

#include <iostream>

using namespace std;

void Neg_By_Address(int*);

int main()

{

int i = 4;

Neg_By_Address(&i);

cout << "i = " << i << endl;

return 0;

}

void Neg_By_Address(int* a_ptr)

{

*a_ptr = -(*a_ptr);

}

Program Output

i = -4

Prosleđivanje adrese promenljive funkciji se označava kao poziv (prenos) po adresi - call by address.

Dem08-2

Page 5: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

5/30

Primer poziva po adresi

// dem08-3.cpp

#include <iostream>

using namespace std;

void Swap_Int(int*, int*);

int main()

{

int i = 3,

j = 5;

cout << "Before swapping: i = " << i<< " j = " << j << endl;

Swap_Int(&i, &j);

cout << "After swapping: i = " << i<< " j = " << j << endl;

return 0;

}

void Swap_Int(int* a_ptr, int* b_ptr)

{

int temp;

temp = *a_ptr;

*a_ptr = *b_ptr;

*b_ptr = temp;

}

Program Output

Before swapping: i = 3, j = 5

After swapping: i = 5, j = 3

Zamena vrednosti promenljivih

Page 6: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

6/30

– Reference na promenljive i poziv po referenci - Call by Reference

Reference na promenljive i argumente su alternativa pointerima. Referenca je drugo ime za postojeću promenljivu. Pretpostavimo da imamo sledeće deklaracije.

int i = 7;

double d = 1.2;

Možemo da deklarišemo reference na varijable i i d

int& r = i;

double& s = d;

Procitati & u ovoj deklaraciji kao "referenca“.

Ako o imenu promenljive razmišljamo kao o oznaci pridruženoj lokaciji promenljive u memoriji, onda je referenca druga oznaka pridružena toj memorijskoj lokaciji.

double & s = d; //Legal reference declaration

int &r = i; //Legal reference declaration

Poziv po referenci

Page 7: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

7/30

// dem08-2R.cpp

// This program demonstrates passing an argument by reference

#include <iostream>

using namespace std;

void Neg_By_Reference(int&);

int main()

{

int i = 4;

Neg_By_Reference(i);

cout << "i = " << i << endl;

return 0;

}

void Neg_By_Reference(int& a)

{

a = -a;

}

Program Output

i = -4

// dem08-3R.cpp

//This program illustrates passing arguments by reference.

#include <iostream>

using namespace std;

void Swap_Int(int&, int&);

int main()

{

int i = 3,

j = 5;

cout << "Before swapping: i = " << i<< " j = " << j << endl;

Swap_Int(i, j);

cout << "After swapping: i = " << i<< " j = " << j << endl;

return 0;

}

void Swap_Int(int& a, int& b)

{

int temp;

temp = a;

a = b;

b = temp;

}

Program Output

Before swapping: i = 3, j = 5

After swapping: i = 5, j = 3

dem08

Page 8: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

8/30

Pokazivači i reference na objekte

• Sličnosti– pristup do objekta i preko pokazivača i preko reference je posredan

– mnoga pravila, a naročito pravila konverzije, važe i za pokazivače i za reference

• Razlike– pokazivač se može preusmeriti tako da ukazuje na drugi objekat, dok je

referenca od trenutka svog nastanka, tj. od inicijalizacije, trajno vezana za isti objekat

– pokazivač može da pokazuje ni na šta (vrednost 0), dok referenca uvek, od početka do kraja svog životnog veka, upućuje na jedan (isti) objekat

– pristup do objekta preko pokazivača vrši se preko operatora *, dok je pristup do objekta preko reference neposredan – upotreba reference u izrazu odnosi se na referencirani objekat

• Ne postoje nizovi refrenci, pokazivači na reference, ni reference na reference

Page 9: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

9/30

• Nizovi i funkcije– C-string je karakter pointer, pa je prosleđivanje niza ili C-stringa

funkciji ekvivalentno prosleđivanju pointera.– Ime niza je pointer na prvi član niza, sledi ime niza se može

iskoristiti na isti način kao što se koristi pointer kao argument funkcije, vodeći računa da je broj elemenata niza fiksan.

Nizovi i funkcije

Page 10: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

10/30

• Prosleđivanje niza funkciji – Kada se niz prosleđuje funkciji, takođe se prosleđuje i veličina

niza funkciji.

• double Avg(int [], int); // prototip funkcije• double Avg(int arr[], int size) // heder definicije funkcije

Prosleđivanje niza

Page 11: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

11/30

// dem08-4.cpp

// This program shows how to find the average of the elements

// in an array. It finds the average by passing the array to a function that computes the average.

#include <iostream>

#include <iomanip>

using namespace std;

double Avg(int [], int);

int main()

{

const int NUM_QUIZZES = 10;

int grade[NUM_QUIZZES]; // The array to store the quiz grades

int quiz; // The array subscript

double grade_avg;

cout << setiosflags(ios::fixed)

<< setiosflags(ios::showpoint)

<< setprecision(1);

cout << "Please enter " << NUM_QUIZZES << " integer quiz grades."

<< endl << endl;

for (quiz = 0; quiz < NUM_QUIZZES; ++quiz)

{

cout << "\nEnter grade for quiz " << quiz + 1 << ": ";

cin >> grade[quiz];

}

grade_avg = Avg(grade, NUM_QUIZZES);

cout << endl;

cout << "The average quiz grade is " << grade_avg << endl;

return 0;

} // End of main() double Avg(int arr[], int size)

{

int i, // The array subscript

sum = 0; // The accumulator

double avg; // The array average

for (i = 0; i < size; ++i)

sum += arr[i];

avg = double(sum) / size;

return avg;

} // End of Avg()

Program Output

Please enter 10 integer quiz grades.

Enter grade for quiz 1: 67

Enter grade for quiz 2: 55

Enter grade for quiz 3: 83

Enter grade for quiz 4: 75

Enter grade for quiz 5: 57

Enter grade for quiz 6: 86

Enter grade for quiz 7: 58

Enter grade for quiz 8: 100

Enter grade for quiz 9: 86

Enter grade for quiz 10: 96

The average quiz grade is 76.3

dem08

Page 12: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

12/30

• Sortiranje niza– Prosleđivanjem niza funkciji koristeći ime niza kao argument,

prosleđuje se adresa niza funkciji. Zbog toga, bilo koja promena koju načini funkcija na parametrima niza menja niz u pozivajućoj funkciji.

Sortiranje niza

Page 13: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

13/30

– Stringovi i funkcije • Kako je C-string ekvivalentan karakter pointeru, prosleđivanje stringa

funkciji je ekvivalentno prosleđivanju pointera funkciji.

Stringovi i funkcije

Page 14: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

14/30

• Korišćenje funkcije za brojanje karaktera u stringu

Brojanje karaktera

Page 15: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

15/30

• Korišćenje funkcije za Reverse a String in Place

Primer

Page 16: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

16/30

Funkcija koja vraća pointer

Page 17: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

17/30

• Standardna biblioteka funkcija koje rade sa stringovima#include <cstring>

– Dužina stringa – funkcija strlen()

int length;

char greeting[6] = "Hello";

length = strlen(greeting);

cstring

Page 18: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

18/30

• String Assignment – funkcija strcpy()

strcpy(target-string-name, source-string-name)

Target string mora da bude dovoljno velik, da ne bi došlo do prepisivanja preko varijabli.

strcpy()

Page 19: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

19/30

Poređenje stringova – funkcija strcmp()

strcmp(string1, string2)

strcmp()

Page 20: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

20/30

• Pasting Strings Together - The Function strcat()

char string1[27] = "abcdef";

char string2[27] = "ghij";

strcat(target-string, source-string)

Funkcija dodaje-lepi source string na kraj target stringa

strcat()

Page 21: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

21/30

• Klasifikacija funkcija i konverzija funkcija u odnosu na karakter-znak

toupper(ch)

tolower(ch)

Oba prototipa funkcije se nalaze u cctype.

Klasifikacija funkcija

Page 22: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

22/30

Primer: palindrom

Page 23: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

23/30

atoi() konvertuje numerički string u integer.

atol() konvertuje numerički string u long.

atof() konvertuje numerički string u double.

char char_int[] = "123";

char char_long[] = "50000";

char char_double[] = "67.89";

int i;

long long_i;

double db;

i = atoi(char_int);

long_i = atol(char_long);

db = atof(char_double);

Funkcije za numeričku konverziju

Page 24: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

24/30

• Heap memorija– C++ operator new alocira heap memoriju, a operator delete dealocira heap

memoriju Program Output

Enter 5 names.

Name: Maria Ann

Name: Charles Anthony Thomas

Name: John Charles

Name: Amanda

Name: Jaqueline

Following are the names you entered.

Maria Ann

Charles Anthony Thomas

John Charles

Amanda

Jaquiline

int* arr_ptr;

arr_ptr = new int [20];

.....

delete [] arr_ptr;

Dinamička alokacija memorije

Page 25: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

25/30

Poglavlje 9 – Korisnički definisani tipovi podataka i tabele

- typedef naredba- dozvoljava definisanje sinonima za postojeći tip podatka, tj. typedef ne definiše novi tip

podatka već drugi naziv za postojeći tip.

- typedef old_type new_type;

- Primeri:

double value,

amount;

typedef double MONEY_AMOUNT;

MONEY_AMOUNT value,

amount;

typedef char* CSTRING;

CSTRING street_names [4] = {"Wall", "Spruce", "Cedar", "Pine"};

Page 26: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

26/30

• enum naredba– enumerated type – predstavljena službenom reči enum, definiše skup

integer konstanti predstavljenih identifikatorima.

• enum enumerated-type-name {identifier list} • Primeri:

enum RESPONSE {cancel, ok};

enum COLOR {red = 3, green, blue, white = 8, black};

enum

Page 27: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

27/30

-Record-zapis, struktura

-članovi strukture

struct PART_STRUCT

{

char part_no[8];

int quantity_on_hand;

double unit_price;

};

To declare a variable that is of the PART_STRUCT type, we can code the following.

PART_STRUCT part;

part.quantity_on_hand = 62;

PART_STRUCT old_part = {"XY98765", 17, 99.99};

str_ptr -> member je ekvivalentno (*str_ptr).member

Strukture

Page 28: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

28/30

Složene strukture

Page 29: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

29/30

• Nizovi struktura: Tabele– Tabele su podaci organizovani u redove i kolone– ključ tabele– ključ pretraživanja

• sekvencijalno pretraživanje• binarno pretraživanje (>50 redova)

– sortiranje

PART_STRUCT partial_part_table[4] = { {"A123456", 123, 12.99},

{"A987654", 53, 52.95},

{"D001234", 93, 22.95},

{"B109897", 44, 13.95}

};

Tabele

Page 30: Uvod u programiranje II 8 i 9 C++  za program ere poslovnih aplikacija

30/30

• Strukture, funkcije i pointeri– Funkcije i strukture– Pointeri na strukture– Reference na strukture

Strukture i funkcije, pointeri i reference