Zakres i zasięg deklaracji Zakres : obszar programu, w którym identyfikator może być użyty

35
Zakres i zasięg deklaracji Zakres : obszar programu, w którym identyfikator może być użyty zakres globalny : cały program zakres lokalny : definicja pojedynczej funkcji

description

Zakres i zasięg deklaracji Zakres : obszar programu, w którym identyfikator może być użyty · zakres globalny : cały program · zakres lokalny : definicja pojedynczej funkcji. int i, j, k; float X, Y; int F1( int a, int b) { char c1, c2; float B; } - PowerPoint PPT Presentation

Transcript of Zakres i zasięg deklaracji Zakres : obszar programu, w którym identyfikator może być użyty

Page 1: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

Zakres i zasięg deklaracji

Zakres : obszar programu,

w którym identyfikator może być użyty

     zakres globalny : cały program

     zakres lokalny : definicja pojedynczej funkcji

Page 2: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

int i, j, k;

float X, Y;

int F1(int a, int b)

{ char c1, c2;

float B; }

int F2(float Z1, float Z2, char cp)

{ int A1[15];

long A2[15][15];

float B1, B2, B3; }

void main(void)

{ int m, n, p, q;

float V1, V2, V3;

long T1[15][15], T2[15][15];

Page 3: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

zakres globalny :

i, j, k, X, Y, F1, F2

zakres lokalny w funkcji F1 : a, b, c1, c2, B

zakres lokalny w funkcji F2 :

Z1, Z2, cp, A1, A2, B1, B2, B3

zakres lokalny w funkcji main :

m, n, p, q, V1, V2, V3, T1, T2

Page 4: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

Zasięg deklaracji : te fragmenty programu,

w których obowiązuje deklaracja

 

Identyfikator o zakresie globalnym :

dowolne miejsce programu ( zasięg globalny )

Identyfikator o zakresie lokalnym :

zasięg od miejsca wystąpienia deklaracji

do końca bloku, w którym deklaracja wystąpiła

Page 5: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

{ int i;

.....

{ ....

int j;

....

{ z.i

int n;

..... z.n z.j

}

for(int k=0;.. )

{ ... } z.k

}

}

Page 6: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

Przesłanianie identyfikatorów :

deklaracja lokalna przesłania deklarację globalną

int i = 5; // i == 5

int F1 (int n)

{ int i = 7; // i == 7

return i + n;

}

int F2 (int m)

{ return i + m; // i == 5

}

void main(void)

{ int k,z,i = 0; // i == 0

k = F1(0); // k == 7

z = F2(0); } // z == 5

Page 7: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

Redefinicja identyfikatora w tym samym zakresie : błąd

 float eps = 0.001;

...

double eps = 0.05; // błąd - redefinicja

// w zakresie globalnym

...

void main(void)

{

long k1;

...

int k1; // błąd - redefinicja

// w zakresie lokalnym

...

}

Page 8: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

Dostęp do obiektów globalnych

const int max = 15750; // zakres globalny

int MAX(int TAB[ ], int rozmiar)

{

int max = TAB[0]; // zakres lokalny

for (int i = 1 ; i < rozmiar ; ++i)

if (::max > TAB[i] && // zakres globalny

max < TAB[i]) // zakres lokalny

max = TAB[i]; // zakres lokalny

return max; // zakres lokalny

}

Page 9: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

Lokalizacja zmiennych

       zmienne statyczne

     zmienne dynamiczne

zmienne automatyczne

zmienne rejestrowe

 Zmienne statyczne (ustalona wartość początkowa) :

zmienne o zakresie globalnym

zmienne lokalne poprzedzone słowem static

 

Page 10: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

int Licznik(void)

{

static int ct = 0;

return ++ct;

}

int numer;

numer = Licznik(); // numer == 1

..................

numer = Licznik(); // numer == 2

..................

numer = Licznik(); // numer == 3

Page 11: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

Zmienne dynamiczne : na stosie programu

auto register

register int i, rozmiar;

for (i = 0; i < rozmiar; ++i) T[i] = i;

struct lista

{ int cecha;

lista *nastepny;

};

int Sprawdz(register lista *wsk, int wzor)

{ while (wsk != NULL)

{ if (wsk->cecha == wzor) return 1;

wsk = wsk->nastepny; }

return 0;

}

Page 12: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

Pliki dyskowe

Plik dyskowy : ciąg pozycji bajtowych

z jedną pozycją aktualną

Zapis lub odczyt danych : zawsze od pozycji aktualnej, przesunięcie tej pozycji w kierunku końca pliku

o liczbę przeczytanych lub zapisanych bajtów

Otwarcie pliku : wskaźnik pliku FILE*

Zamknięcie pliku

Page 13: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

pliki tekstowe i binarne

25 =>

- plik tekstowy

- plik binarny

32H 35H 20H

19H 0H 0H 0H

Page 14: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

#include <stdio.h>

3 grupy funkcji :

     fopen, fclose, fcloseall :

otwieranie i zamykanie plików

     ftell, fseek, rewind, feof:

ustalanie aktualnej pozycji pliku, wykrywanie końca pliku

     fread, fwrite, fgetc, fputc, fgets, fputs fscanf, fprintf :

odczyt i zapis danych

Page 15: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

fopen

D. FILE* fopen(const char* nazwa,

const char* tryb);

F. Otwarcie pliku ”nazwa”

tryb :

r : odczyt istniejącego pliku

w : utworzenie pliku do zapisu

a : zapis na końcu istniejącego pliku

r+ : zapis lub odczyt istniejącego pliku

w+ : utworzenie pliku do zapisu i odczytu

a+ : zapis lub odczyt na końcu istniejącego pliku

dodatkowo

t : plik tekstowy

b : plik binarny

Page 16: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

W. Wskaźnik pliku lub NULL

P.

#include <stdio.h>

void main(void)

{ ...

FILE *spis;

spis = fopen("SPIS.TXT","rt+"));

if (spis == NULL)

printf("\nNie można otworzyć pliku.");

...

}

Page 17: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

fclose

D. int fclose ( FILE *plik ) ;

F. Zamknięcie pliku

W. 0 lub EOF

P.

#include <stdio.h>

void main(void)

{ ...

FILE *personel =

fopen ( "PER.TXT", "rt" );

...

fclose ( personel );

...

}

Page 18: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

fcloseall

 

D. int fcloseall ( void ) ;

F. Zamkniecie wszystkich otwartych plików dyskowych

W. Liczba zamkniętych plików lub EOF

Page 19: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

fseek

D. int fseek (FILE *plik, long pozycja, int cel);

F. Ustalenie aktualnej pozycji pliku

cel :

SEEK_SET - początek pliku,

SEEK_CUR - aktualna pozycja pliku

SEEK_END - koniec pliku

pozycja : +/- , od 0, można poza koniec pliku

W. 0 : poprawnie, !0 : błąd

Page 20: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

P.

#include <stdio.h>

void main(void)

{ ...

long pp;

FILE *opis = fopen("OP1.DOC","rt+");

fseek(opis, 0L, SEEK_END);

... // zapis na końcu pliku

fseek(opis, 0L, SEEK_SET);

... // zapis na początku pliku

pp = 15453l;

fseek(opis, pp, SEEK_CUR);

... // odczyt z pliku

... }

Page 21: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

rewind

D. void rewind ( FILE *plik );

F. Ustalenie aktualnej pozycji na początku pliku

P.

#include <stdio.h>

void main(void)

{ ...

FILE *roboczy = fopen("R1.DAT","rt+");

fseek(roboczy, 0L, SEEK_END);

... // zapis na końcu pliku

rewind(roboczy); // początek pliku

...

}

Page 22: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

feof

D. int feof ( FILE *plik );

F. Odczyt stanu znacznika końca pliku

W. !0 : napotkano EOF, przeciwnie 0

P.

#include <stdio.h>

void main(void)

{ ...

FILE *plik1 = fopen("P1.MAN","rt");

... // odczyt z pliku

if (feof(plik1)!= 0)

printf("\nKoniec pliku.");

... }

Page 23: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

fgetc

D. int fgetc ( FILE *plik );

F. Odczyt kolejnego znaku

W. Liczba całkowita 000 | kod_znaku

P.

#include <stdio.h>

void main(void)

{ ...

char cc;

FILE *info = fopen("INF.DOC","rt");

cc = fgetc(info);

...

}

Page 24: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

fputc 

D. int fputc ( int znak, FILE *plik ) ;

F. Zapis kolejnego znaku (liczba całkowita : 000 | kod)

W. znak lub EOF

P.

#include <stdio.h>

void main(void)

{ ...

char cc = 'K';

FILE *dane = open("DANE.DOC","rt+");

...

fputc(cc, dane);

...

}

Page 25: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

fgets

D. char* fgets ( char *napis, int liczba, FILE *plik) ;

F. Odczyt ciąg znaków, maksymalnie liczba-1 znaków

W. napis lub NULL

P.

#include <stdio.h>

void main(void)

{ ...

char nazwisko[16];

FILE *teczka = fopen("TECZ.DOC","rt");

fgets(nazwisko, 16, teczka);

...

}

Page 26: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

fputs 

D. int fputs ( char *napis, FILE *plik );

F. Zapis ciągu znaków

W. Ostatni zapisany znak lub EOF

P.

#include <stdio.h>

void main(void)

{ ...

char *spis = "Spis treści";

FILE *dok = fopen("DOK1.DOC","rt+");

fputs(spis, dok);

...

}

Page 27: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

fscanf

D. int fscanf(FILE *plik, const char *format, wskaźnik, wskaźnik, ...);

F. Odczyt ciągów znaków i konwersji na wartości binarne (podobnie jak scanf)

W. Liczba wczytanych ciągów znaków lub EOF

Page 28: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

P.

#include <stdio.h>

void main(void)

{ ...

int sztuki;

float cena;

FILE *towar =

fopen("SPIS_TOW.DOC","rt");

...

fscanf(towar, "%d%f", &sztuki, &cena);

...

}

Page 29: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

fprintf

 

D. int fprintf ( FILE *plik, const char *format, wyrażenie, wyrażenie, ...);

F. Zapis ciągów znaków zadanych za pomocą wyrażeń (podobnie jak printf)

W. Liczba zapisanych bajtów lub EOF

Page 30: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

P.

#include <stdio.h>

void main(void)

{ ...

int kod_waluty = 15;

float kurs_biezacy = 0.23547;

FILE *tabela_kursow =

fopen("KURSY.TAB","wt");

...

fprintf(tabela_kursow, "\n%3d\t%8.3f",

kod_waluty, kurs_biezacy);

...

}

Page 31: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

fread

 

D. int fread (wskaźnik, int rozmiar, int liczba, FILE *plik);

F. Odczytanie zadanej liczby struktur danych, każda o długości rozmiar

W. Liczba odczytanych struktur lub 0

Page 32: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

P.

  #include <stdio.h>

void main(void)

{ ...

struct ksiazka

{

char autor[25];

char tytul[50];

} ksiazki[100];

...

FILE *magazyn = fopen("MAG.DOC","rt");

fread(ksiazki, sizeof(ksiazka),

100, magazyn);

... }

Page 33: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

void main(void)

{

int liczba_odczytow;

struct pozycja

{

double wspolrzedne[2];

double wysokosc;

} marszruta[1000];

...

FILE *wycieczka = fopen("W1.DAT","rb");

fread(&liczba_odczytow, sizeof(int),

1, wycieczka);

fread(marszruta, sizeof(pozycja),

liczba_odczytow, wycieczka);

... }

Page 34: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

fwrite

D. int fwrite ( wskaźnik, int rozmiar, int liczba, FILE *plik );

F. Zapis wskazanej liczby struktur danych

o długości rozmiar

W. Liczba zapisanych struktur lub 0

Page 35: Zakres i zasięg deklaracji Zakres : obszar programu,  w którym identyfikator może być użyty

P.

#include <stdio.h>

void main(void)

{ ...

long double pomiary[wie][kol];

...

FILE *archiwum = fopen("ARCH.TAB","wb");

fwrite(pomiary, sizeof(pomiary), 1, archiwum);

...

} PaNiePa, Split, BookCode, BitMap