1 / 34

Programiranje 1 programski jezik c

Programiranje 1 programski jezik c. Staša Vujičić Čas 10. Funkcije. Globalne promenljive. Broja č karaktera Program č ita tekst sa ulaza i broji velika i mala slova, c ifre, beline i redove. Program demonstrira kori šć enje globalnih podataka. #include <stdio.h>

ria-rose
Télécharger la présentation

Programiranje 1 programski jezik c

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. Programiranje 1 programski jezik c Staša Vujičić Čas 10

  2. Funkcije. Globalne promenljive. • Brojač karaktera Program čita tekst sa ulaza i broji velika i mala slova, cifre, beline i redove. Program demonstrira korišćenjeglobalnih podataka.

  3. #include <stdio.h> /* Deklaracija funkcije prebroj */ void prebroj(); /* Globalni brojaci. Podrazumevano su inicijalizovani nulom. */ int br_malih, br_velikih, br_cifara, br_belina, br_redova;

  4. /* main funkcija */ int main() { /* Pozivamo funkciju za prebrojavanje */ prebroj(); /* Prikazujemo vrednosti globalnih brojaca, koje je funkcija prebroj() izmenila */ printf("Broj malih slova: %d\n", br_malih); printf("Broj velikih slova: %d\n", br_velikih); printf("Broj cifara: %d\n", br_cifara); printf("Broj belina: %d\n", br_belina); printf("Broj redova: %d\n", br_redova); }

  5. /* Definicija funkcije prebroj */ void prebroj() { int c; while((c = getchar()) != EOF) { if(c >= 'a' && c <= 'z')br_malih++; else if(c >= 'A' && c <= 'Z')br_velikih++; else if(c >= '0' && c <= '9')br_cifara++; else if(c == '\n' || c == '\t' || c == ' ') { br_belina++; if(c == '\n') br_redova++; } } }

  6. pokazivači • Pokazivač je promenljiva koja sadrži adresu neke druge promenljive. • int x=1, y=1; 1 x 1 y

  7. pokazivači • int *ip; /* ip je pokazivac na int, odnosno *ip je tipa int */ ip = &x; /* ip sada pokazuje na x */ 1 x ip 1 y

  8. pokazivači • y=*ip; /* y je sada 1 */ *ip = 0; /* x je sada 0 */ 0 x ip 1 y

  9. pokazivači • *ip+=10; /* x je sada 10*/ 10 x ip 1 y

  10. pokazivači • ++*ip; /* x je sada 11*/ 11 x ip 1 y

  11. pokazivači (*ip)++; /* x je sada 12, zagrada neophodna zbog prioritetaoperatora*/ 12 x ip 1 y

  12. Pokazivači- primer 1 - • Program demonstrira jednostavnu upotrebu pokazivača. #include <stdio.h> /* main funkcija */ int main() { int a = 2;

  13. int *pi; /* Prikaz vrednosti a pre izmene */ printf("Vrednost promenljive a: %d\n", a); /* Vrednost promenljive a: 2*/ /* Promena vrednosti promenljive a preko pokazivaca */ pi = &a; izraz &a se može čitati kao: "adresa od a". Uopšte, ako je data deklaracija T a; gde je T proizvoljan tip, tada je • Tip izraza &a tip (T *) (pokazivač na tip T). • Vrednost izraza &aje adresa bajta u memorijiod koga počinje zapis podatka a.

  14. *pi = *pi + 2; • Izraz *pi se može čitati kao: "ono na šta pokazuje pi". Ovaj izraz se može koristiti i kao leva i kao desna vrednost. • Ako je definisan pokazivačT *p; gde je T proizvoljan tip, tada je • tip izraza *pupravo tip T • vrednost izraza *pjevrednost podatka na adresi na kojupokazuje p, tumačen kao podatak tipa T. • Ako se izraz *p koristi kao leva vrednost, tada se vrednost na desnoj strani operatora dodele upisuje u memorijsku lokaciju na koju pokazuje p, prethodno konvertovana po potrebi u tip T.

  15. /* Prikaz vrednosti promenljive a nakon izmene */ printf("Vrednost promenljive a: %d\n", a); } /* Vrednost promenljive a: 4*/

  16. Pokazivači- primer 2 - #include <stdio.h> main() { int x = 3; /* Adresu promenjive x zapamticemo u novoj promenljivoj.Nova promenljiva je tipa pokazivaca na int (int*) */ int* px;

  17. printf("Adresa promenljive x je : %p\n", &x); printf("Vrednost promenljive x je : %d\n", x); /* Adresa promenljive x je : 0012FF88 Vrednost promenljive x je : 3 */ px = &x; printf("Vrednost promenljive px je (tj. px) : %p\n", px); printf("Vrednost promenljive na koju ukazuje px (tj. *px) je : %d\n", *px); /*Vrednost promenljive px je (tj. px) : 0012FF88 Vrednost promenljive na koju ukazuje px (tj. *px) je : 3*/

  18. /* Menjamo vrednost promenljive na koju ukazuje px */ *px = 6; printf("Vrednost promenljive na koju ukazuje px (tj. *px) je : %d\n", *px); /*Vrednost promenljive na koju ukazuje px (tj. *px) je : 6 /* Posto px sadrzi adresu promenljive x, ona ukazuje na x tako da jeposredno promenjena i vrednost promenljive x */ printf("Vrednost promenljive x je : %d\n", x); } /* Vrednost promenljive x je : 6*/

  19. Pokazivači – primer 3 - #include <stdio.h> /* main funkcija */ int main() { double x = 2.1, *px = &x; /*px pokazuje na adresu od x*/ double y = 0.1, *py = &y; /*py pokazuje na adresu od y*/

  20. /* Prikazujemo vrednosti pokazivaca. %p specifikator u printf()-u ispisuje vrednost pokazivaca u heksadekadnoj notaciji. */ printf("Vrednost pokazivaca px je %p\n", px); printf("Vrednost pokazivaca py je %p\n", py); /* Vrednost pokazivaca px je 0xbfe7caa0 Vrednost pokazivaca py je 0xbfe7ca98*/ /* Ispisujemo vrednosti na koje pokazuju pokazivaci */ printf("px pokazuje na vrednost: %f\n", *px); printf("py pokazuje na vrednost: %f\n", *py); /* px pokazuje na vrednost: 2.100000 py pokazuje na vrednost: 0.100000 */

  21. /* Ispitujemo da li su pokazivaci jednaki, tj. da lipokazuju na isti objekat u memoriji */ if(px == py) printf("Pokazivaci px i py pokazuju na isti objekat\n"); else printf("Pokazivaci px i py ne pokazuju na isti objekat\n"); /* Pokazivaci px i py ne pokazuju na isti objekat */ py = px;

  22. /* Prikazujemo vrednosti pokazivaca. %p specifikator u printf()-u ispisuje vrednost pokazivaca u heksadekadnoj notaciji. */ printf("Vrednost pokazivaca px je %p\n", px); printf("Vrednost pokazivaca py je %p\n", py); /* Vrednost pokazivaca px je 0xbfe7caa0 Vrednost pokazivaca py je 0xbfe7caa0 */ /* Ispisujemo vrednosti na koje pokazuju pokazivaci */ printf("px pokazuje na vrednost: %f\n", *px); printf("py pokazuje na vrednost: %f\n", *py); /* px pokazuje na vrednost: 2.100000 py pokazuje na vrednost: 2.100000 */

  23. /* Ispitujemo da li su pokazivaci jednaki, tj. da li pokazuju na isti objekat u memoriji */ if(px == py) printf("Pokazivaci px i py pokazuju na isti objekat\n"); else printf("Pokazivaci px i py ne pokazuju na isti objekat\n"); /* Pokazivaci px i py pokazuju na isti objekat*/ px = &y;

  24. /* Prikazujemo vrednosti pokazivaca. %p specifikator u printf()-u ispisuje vrednost pokazivaca u heksadekadnoj notaciji. */ printf("Vrednost pokazivaca px je %p\n", px); printf("Vrednost pokazivaca py je %p\n", py); /* Vrednost pokazivaca px je 0xbfe7ca98 Vrednost pokazivaca py je 0xbfe7caa0 */ /* Ispisujemo vrednosti na koje pokazuju pokazivaci */ printf("px pokazuje na vrednost: %f\n", *px); printf("py pokazuje na vrednost: %f\n", *py); /* px pokazuje na vrednost: 0.100000 py pokazuje na vrednost: 2.100000 */

  25. /* Ispitujemo da li su pokazivaci jednaki, tj. da li pokazuju na isti objekat u memoriji */ if(px == py) printf("Pokazivaci px i py pokazuju na isti objekat\n"); else printf("Pokazivaci px i py ne pokazuju na isti objekat\n"); } /* Pokazivaci px i py ne pokazuju na isti objekat */

  26. Pokazvači- primer 4 - • Zamena promenljivih Program unosi vrednosti dve promenljive i zatim uposebnoj funkciji zamenjuje njihove vrednosti. Program demonstrira neispravnu i ispravnu verzijuove funkcije (primenom pokazivača).

  27. #include <stdio.h> /* Ova funkcija zamenjuje vrednosti lokalnih podataka a i b, sto nije ono sto zelimo da uradimo */ void swap1(int a, int b) { int t; t = a; a = b; b = t; }

  28. /* Ova funkcija zamenjuje vrednosti promenljivih na koje pokazuju lokalne pokazivacke promenljive a i b. Ovo je upravo ono sto zelimo */ void swap2(int *a, int *b) { int t; t = *a; *a = *b; *b = t; }

  29. /* main funkcija */ int main() { int x, y; printf("Uneti X i Y: "); scanf("%d%d", &x, &y); printf("X: %d\nY: %d\n", x, y); /* X: 2 Y: 4 */ swap1(x,y); /* NE RADI */ printf("Nakon poziva swap1(x,y):\n"); printf("X: %d\nY: %d\n", x, y);

  30. /* Nakon poziva swap1(x,y): X: 2 Y: 4 */ swap2(&x,&y); /* RADI */ printf("Nakon poziva swap2(x,y):\n"); printf("X: %d\nY: %d\n", x, y); } /* Nakon poziva swap2(x,y): X: 4 Y: 2 */

  31. Pokazivači- primer 5 - • Brojanje karaktera Program učitava tekst sa ulaza i broji mala i velika slova, cifre, beline i redove. Program demonstrira prenos parametara po adresi, primenompokazivača.

  32. #include <stdio.h> /* Deklaracija funkcije prebroj */ void prebroj(int * br_malih, int * br_velikih, int * br_cifara, int * br_belina, int * br_redova); /* main funkcija */ int main() { int br_malih = 0, br_velikih = 0, br_cifara = 0, br_belina = 0, br_redova = 0;

  33. /* Pozivamo funkciju za prebrojavanje */ prebroj(&br_malih, &br_velikih, &br_cifara, &br_belina, &br_redova); /* Prikazujemo vrednosti globalnih brojaca, koje je funkcija prebroj() izmenila */ printf("Broj malih slova: %d\n", br_malih); printf("Broj velikih slova: %d\n", br_velikih); printf("Broj cifara: %d\n", br_cifara); printf("Broj belina: %d\n", br_belina); printf("Broj redova: %d\n", br_redova); }

  34. /* Definicija funkcije prebroj */ void prebroj(int * br_malih, int * br_velikih, int * br_cifara, int * br_belina, int * br_redova) { int c; while((c = getchar()) != EOF) { if(c >= 'a' && c <= 'z‘) (*br_malih)++; else if(c >= 'A' && c <= 'Z‘) (*br_velikih)++; else if(c >= '0' && c <= '9‘) (*br_cifara)++; else if(c == '\n' || c == '\t' || c == ' ') { (*br_belina)++; if(c == '\n') (*br_redova)++; } } }

More Related