1 / 30

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

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.

overton
Download Presentation

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

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. Fakultet za poslovnu informatiku Uvod u programiranje II8 i 9C++ za programere poslovnih aplikacija C++ for Business Programmers John C. Molluzzo -  Pace University, New York Prentice Hall, August 02, 2005

  2. 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

  3. Pointeri i reference • 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

  4. Dem08-2 // 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.

  5. Zamena vrednosti promenljivih // 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; } Primer poziva po adresi Program Output Before swapping: i = 3, j = 5 After swapping: i = 5, j = 3

  6. Poziv po referenci • 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

  7. dem08 // 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; } // 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 i = -4 Program Output Before swapping: i = 3, j = 5 After swapping: i = 5, j = 3

  8. 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

  9. Nizovi i funkcije • 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.

  10. Prosleđivanje niza • 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

  11. // dem08-4.cpp // This program shows how to find the average of the elements // in an array. It finds the average by passing the arrayto 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() dem08 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 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()

  12. Sortiranje niza • 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.

  13. Stringovi i funkcije • Stringovi i funkcije • Kako je C-string ekvivalentan karakter pointeru, prosleđivanje stringa funkciji je ekvivalentno prosleđivanju pointera funkciji.

  14. Brojanje karaktera • Korišćenje funkcije za brojanje karaktera u stringu

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

  16. Funkcija koja vraća pointer

  17. cstring • Standardna biblioteka funkcija koje rade sa stringovima #include <cstring> • Dužina stringa – funkcija strlen() int length; char greeting[6] = "Hello"; length = strlen(greeting);

  18. strcpy() • 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.

  19. strcmp() Poređenje stringova – funkcija strcmp() strcmp(string1, string2)

  20. strcat() • Pasting Strings Together-The Function strcat() Funkcija dodaje-lepi source string na kraj target stringa char string1[27] = "abcdef"; char string2[27] = "ghij"; strcat(target-string, source-string)

  21. Klasifikacija funkcija • Klasifikacija funkcija i konverzija funkcija u odnosu na karakter-znak toupper(ch) tolower(ch) Oba prototipa funkcije se nalaze u cctype.

  22. Primer: palindrom

  23. Funkcije za numeričku konverziju 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);

  24. Dinamička alokacija memorije • Heap memorija • C++ operator new alocira heap memoriju, aoperator 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;

  25. 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: typedef char* CSTRING; CSTRING street_names [4] = {"Wall", "Spruce", "Cedar", "Pine"}; double value, amount; typedef double MONEY_AMOUNT; MONEY_AMOUNT value, amount;

  26. enum • 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};

  27. Strukture -Record-zapis, struktura -članovi strukture struct PART_STRUCT { char part_no[8]; int quantity_on_hand; double unit_price; }; part.quantity_on_hand = 62; str_ptr -> member je ekvivalentno (*str_ptr).member To declare a variable that is of the PART_STRUCT type, we can code the following. PART_STRUCT part; PART_STRUCT old_part = {"XY98765", 17, 99.99};

  28. Složene strukture

  29. Tabele • 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} };

  30. Strukture i funkcije, pointeri i reference • Strukture, funkcije i pointeri • Funkcije i strukture • Pointeri na strukture • Reference na strukture

More Related