Si_5_dostupnost Promenljivih I Funkcije

  • Uploaded by: MIT - Mašinski fakultet
  • 0
  • 0
  • April 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Si_5_dostupnost Promenljivih I Funkcije as PDF for free.

More details

  • Words: 1,318
  • Pages: 24
Dostupnost

Funkcije

Dostupnost promenjivih i funkcije Softwersko Inˇzenjerstvo

dr Zlatko Petrovi´c, red. prof.

April 7, 2008

dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Dostupnost

Funkcije

Dostupnost – 1/13 Sve promenjive imaju dve karakteristike: Dostupnost (vidljivost) Klasu (promenjiva je ili stalna ili privremena)

Do sada smo se sretali sa: Globalnim promenjivim deklarisanim odmah ispod #include direktive Lokalnim promenjivim deklarisanim u okviru funkcije main() ili bilo koje druge funkcije

Globalna dostupnost znaˇci da je promenjiva vidljiva iz svake funkcije datoteke ako nije maskirana sa istim imenom sa lokalnom promenjivom Lokalna promenjiva je vidljiva samo u bloku u kome je definisana – deo koda ome¯ den sa { } dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Dostupnost

Dostupnost – 2/13 int global; /* vidi se odasvud u datoteci*/ main() { int lokal; global = 1; lokal = 2; { int vrlo lokalna; /* postoji do prve } */ vrlo lokalna = global+lokal; } /* vrlo lokalna viˇ se ne postoji! */ } /* global se i dalje vidi ako slede funkcije! */ dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Funkcije

Dostupnost

Funkcije

Dostupnost – 3/13

Globalna promenjiva i lokalna mogu imati isto ime. U okviru bloka gde je lokalna promenjiva definisana globalna je maskirana Lokalna promenjiva je privremena osim ako deklaraciju tipa ne prethodi atribut static Slede´ci fragment koda ilustruje proces maskiranja globalne promenjive lokalnom

dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Dostupnost

Dostupnost – 4/13 int brojac; /* Globalne promenjive su sme¯ de boje */ int alfa; /* Lokalne promenjive su plave */ main() { brojac = 5; /* globalni brojac=5 */ { int brojac; /* lokalni brojac */ brojac = 2; alfa = 2 + brojac; /* alfa = 4 */ } alfa += brojac /* alfa je jednako 9 */ return 0; } dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Funkcije

Dostupnost

Funkcije

Dostupnost – 5/13

C dozvoljava da se za sloˇzenije projekte moduli programa piˇsu u posebnim datotekama i da se odvojeno prevode. Nakon prevodjenja svih datoteka one se povezuju u jedinstven program. Modul je skup funkcija koje obavljaju odredjenu vrstu zadatka. Efikasan naˇcin rada na projektu je da se problem podeli po modulima, a da se svaki modul poveri zasebnom programeru. Moduli se mogu razvrstati u javne i privatne (public and private).

dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Dostupnost

Funkcije

Dostupnost – 6/13 Javni (public) moduli Javne (public) module ˇcine heder datoteke u kojima se ˇcuvaju deklaracije struktura i protoripovi funkcija koji se koriste u ostalim modulima. (Deklaracije i prototipske deklaracije se ukljuˇcuju sa #include direktivom.) Svi moduli koji trebaju gore reˇceno moraju ukljuˇciti heder datoteku. Sve ˇsto vezano sa unutraˇsnjim funkcionisanjem modula je privatno (nevidljivo za ostale module). Modifikator extern ukazuje na to da je definicija promenjive ili funkcije obavljena van teku´ce datoteke. Primer za to sledi na slede´cim slajdovima dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Dostupnost

Funkcije

Dostupnost – 7/13 #include <stdio.h> /* datoteka: extern.c */ #include <stdlib.h> extern int brojac; extern void povecaj_brojac(void); int main() { int i; for(i=0; i<10; i++) povecaj_brojac(); printf("\nSada je brojac: %d\n", brojac); system("PAUSE"); return 0; } dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Dostupnost

Dostupnost – 8/13

/* datoteka: povecaj.c */

int brojac=0; void povecaj_brojac(void) { ++brojac; }

dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Funkcije

Dostupnost

Dostupnost – 9/13

dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Funkcije

Dostupnost

Dostupnost – 10/13

dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Funkcije

Dostupnost

Funkcije

Dostupnost – 11/13 static Ima dvostruko znaˇcenje pri definiciji promenjivih u zavisnosti gde se nalazi Ukoliko se modifikator nalazi u okviru funkcije to znaˇci da promenjivoj treba obezbediti stalni prostor u memoriji, kako bi se prilikom slede´ceg poziva funkcije mogla upotrebiti informacija smeˇstena u toj memoriji. Ukoliko je modifikator static uz globalnu promenjivu on tada oznaˇcava da je ta promenjiva privatna za datoteku u kojoj je deklaracija izvrˇsena. Bez modifikatora static sve lokalne promenjive u funkcijama su automatic ˇsto znaˇci da se ˇcuvaju u steku koji se prazni nakon kraja funkcije (njihov sadrˇzaj nestaje). dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Dostupnost

Funkcije

Dostupnost – 12/13 #include <stdio.h> #include <stdlib.h> int main() { int i; for(i=0; i<4; ++i) { int privr=1; static int stalno=1; printf("\nPrivremeno : %d, privr++; stalno++; } system("PAUSE"); return 0; } dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Stalno: %d\n", privr, stalno);

Dostupnost

Dostupnost – 13/13

dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Funkcije

Dostupnost

Funkcije

Funkcije – 1/10

Omogu´cuju grupisanje koda koji se ˇcesto izvrˇsava u kompaktnu celinu. Do sada smo se sre´cali sa funkcijama ali najˇceˇs´ce sa funkcijom main(). Funkcija main() kontroliˇse rad programa jer direktno ili indirektno poziva sve ostale funkcije. Funkcija main() je prisutna u svakom C programu

dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Dostupnost

Funkcije

Funkcije – 2/10

Primer Napisati funkciju koja ´ce izraˇcunavati povrˇsinu proizvoljne konture ome¯ dene pravolinijskim segmentima, ako je kontura zadata koordinatama krajeva pravolinijskih segmenata. Uoˇcimo da se povrˇsina moˇze dobiti kao zbir i razlika trapeznih oblasti koje ˇcini x-osa i jedan pravolinijski segment. Ako se ˇcvorovi konture numeriˇsu u smeru kretanja kazaljke na satu sraˇcunata povrˇsina ´ce biti pozitivna, dok ´ce u suprotnom biti negativna. To saznanje nam omogu´cuje da izraˇcunavamo povrˇsinu kontore sa otvorima!

dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Dostupnost

Funkcije – 3/10

dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Funkcije

Dostupnost

Funkcije

Funkcije – 4/10 #include <stdio.h> // Sracunava povrsinu konture zadate #include <stdlib.h> // koordinatama cvornih tacaka float povrsina(float x[], float y[], int N); int main() { float x[5]={4, 7, 3, 1, 4}, y[5]={5, 3, 2, 4, 5}; float pov; int N=5; pov = povrsina(x, y, N); printf("\nPovrsina konture je: %f\n\n",pov); system("PAUSE"); return 0; } dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Dostupnost

Funkcije – 5/10 // Izracunava povrsinu konture zadatu // u n tacaka koordinatama x[i] i y[i]. // Prva i poslednja tacka se poklapaju! float povrsina(float x[], float y[], int n) { float pov=0.0; int i; for(i=0; i
Funkcije

Dostupnost

Funkcije

Funkcije – 6/10 C ne zahteva eksplicitno definisanje tipa funkcije, ali tada podrazumeva da je int. Prototipska deklaracija nije neophodna ako su sve funkcije u jednoj datoteci, a main() na dnu datoteke. Svaka funkcija je deklarisana interno sa extern ukoliko se deklariˇse sa static tada je vidljiva samo u okviru datoteke gde je kodirana. U okviru projekta (viˇse datoteka) samo jedna funkcija moˇze biti deklarisana kao extern, a viˇse njih sa istim imenom kao static Ukoliko funkcija ne vra´ca vrednost deklariˇse se sa void dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Dostupnost

Funkcije

Funkcije – 7/10

Za potpuno razumevanje prenosa argumenata u funkcije potrebno je znanje o pointerima. Primitivne promenjive (int, float, ...) kao argumenti funkcija se kopiraju u lokalnu memoriju (stek), nakon zavrˇsetka rada funkcije memorijski prostor zauzet sa argumentima se osloba¯ da! Bilo kakva promena argumenta u okviru funkcije nije vidljiva van funkcije! Ilustrova´cemo ovo primerom!

dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Dostupnost

Funkcije – 8/10

#include <stdio.h> #include <stdlib.h> char linija[80]; zbir(int x, int y) { int sum; sum = ++x + ++y; printf("\nLokalno a: %d i lokalno b: %d\n\n",x,y); return sum; }

dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Funkcije

Dostupnost

Funkcije

Funkcije – 9/10 int main() { int a, b; printf("Unesi dva cela broja: "); fgets(linija, sizeof(linija), stdin); sscanf(linija,"%d,%d",&a,&b); printf("\nZbir brojeva a i b: %d\n\n",zbir(a,b)); printf("a i b su i dalje a: %d, system("PAUSE"); return 0; } dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

b: %d\n\n",a,b);

Dostupnost

Funkcije – 10/10

dr Zlatko Petrovi´ c, red. prof. Dostupnost promenjivih i funkcije

Funkcije

Related Documents


More Documents from ""