Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Podobne dokumenty
Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

DYNAMICZNE PRZYDZIELANIE PAMIECI

Podstawy programowania komputerów

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

ZASADY PROGRAMOWANIA KOMPUTERÓW

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Przesłanianie nazw, przestrzenie nazw

Tablice, funkcje - wprowadzenie

Wstęp do programowania

Wskaźniki w C. Anna Gogolińska

Operacje wejścia/wyjścia odsłona pierwsza

Zmienne, stałe i operatory

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Programowanie 2. Język C++. Wykład 3.

Programowanie w języku C++

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Pola i metody statyczne

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Język C++ Różnice między C a C++

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Deklaracja struktury w C++

Argumenty wywołania programu, operacje na plikach

Obsługa wyjątków. Język C++ WW12

Programowanie - wykład 4

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Tablice (jedno i wielowymiarowe), łańcuchy znaków

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1 Atrybuty i metody klasowe

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

Podstawy algorytmiki i programowania - wykład 5 C-struktury cd.

Część 4 życie programu

Wstęp do programowania

Wykład 4: Klasy i Metody

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Podstawy programowania. Wykład: 7. Funkcje Przekazywanie argumentów do funkcji. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Wprowadzenie do programowania w języku C

Bibliografia 1. B. Stroustrup. Jezyk C++. Wydawnictwo Naukowo-Techniczne, Warszawa,

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Podstawy programowania w języku C++

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

Wskaźniki. Informatyka

Wstęp do Programowania, laboratorium 02

Podstawy programowania skrót z wykładów:

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Nowe słowa kluczowe. Komentarze. Wskaźniki typu void. class, delete, new, friend,... /* Komentarz w C i C++ */ // Komentarz w C++ (do końca wiersza)

Funkcje. Piotr Zierhoffer. 7 października Institute of Computer Science Poznań University of Technology

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

Język C++ zajęcia nr 2

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Stałe, tablice dynamiczne i wielowymiarowe

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32

Języki i metody programowania I

Lab 9 Podstawy Programowania

Języki i paradygmaty programowania

Język ludzki kod maszynowy

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

Wykład 5: Klasy cz. 3

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty.

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Język C zajęcia nr 11. Funkcje

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Funkcja (podprogram) void

Alokacja pamięci dla tablicy dwuwymiarowej

ATD. Wykład 8. Programowanie (język C++) abstrakcyjny typ danych. Abstrakcyjne typy danych (ATD) Metody czysto wirtualne. Definicje i uwagi:

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Podział programu na moduły

Podstawy Programowania. Zmienne dynamiczne, struktury, moduły programowe

Techniki Programowania wskaźniki 2

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

2 Przygotował: mgr inż. Maciej Lasota

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

Przekazywanie argumentów wskaźniki

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

tablica: dane_liczbowe

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

C++ - [1-3] Debugowanie w Qt Creator

Funkcje. czyli jak programować proceduralne. Programowanie Proceduralne 1

FUNKCJE WZORCOWE. Wykład 10. Programowanie Obiektowe (język C++) Funkcje wzorcowe wprowadzenie (2) Funkcje wzorcowe wprowadzenie (1)

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Transkrypt:

Podstawy programowania (język C) Globalne / Lokalne Wykład 15. Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Zmienne globalne / lokalne (1) int A, *Q; // definicja zmiennych globalnych A i Q static int B; // definicja zmiennej B lokalnej w treści pliku extern int C; // deklaracja zmiennej globalnej C zdefiniowanej // być moŝe w innym pliku void fun ( int a ) // parametr a jest zmienną lokalną w treści funkcji int b, *p; // definicja zmiennych b, p lokalnych w treści funkcji static int c; // definicja zmiennej c lokalnej w treści funkcji extern int D; // deklaracja zmiennej globalnej D zdefiniowanej // być moŝe w innym pliku b = a; p = ( int* ) malloc ( sizeof ( int ) ); // utworzenie zmiennej kontrolowanej *p Q = ( int* ) calloc ( 1, sizeof ( int ) ); // utworzenie zmiennej kontrolowanej *Q *p = 5; *Q = 6; free(p); // zmienna *p "znika" return; // zmienne a, b, p "znikają", // zmienne c (lokalna), *Q (kontrolowana) zachowują swoje wartości Zmienne globalne / lokalne (2) Podział obiektów globalne / lokalne związany jest z miejscem ich tworzenia. globalne - tworzone na zewnątrz definicji funkcji i potencjalnie dostępne w treści kaŝdej funkcji, w której widoczna jest ich deklaracja, jeŝeli nie jest ona przesłonięta deklaracją lokalną; lokalne - tworzone wewnątrz definicji funkcji i dostępne tylko w treści tej funkcji, tam gdzie nie przesłaniają ich inne deklaracje lokalne.... kontrolowane - tworzone są wewnątrz definicji funkcji i w tym sensie mogły by być zaliczone do lokalnych; szczególnie wtedy, gdy są "kontrolowane" za pomocą wskaźnika lokalnego. JeŜeli jednak są one "kontrolowane" za pomocą wskaźnika globalnego, to bardziej przypominają obiekty globalne. UWAGA 1: W języku C definicja funkcji nie moŝe być zawarta w definicji innej funkcji. Zatem funkcje są obiektami globalnymi. UWAGA 2: Parametry funkcji uwaŝa się za zdefiniowane w jej treści. Zatem parametry funkcji są obiektami lokalnymi. Tomasz Marks - Wydział MiNI PW -3- Tomasz Marks - Wydział MiNI PW -4-

Zmienne statyczne / dynamiczne (1) int A, *Q; // A - statyczna (wartość 0), Q statyczna (wartość NULL) static int B; // statyczna (wartość 0) extern int C; // statyczna (wartość nieznana) Statyczne / Dynamiczne void fun ( int a ) // dynamiczna (automatyczna) (wartość okr. argumentem) int b, *p; // dynamiczne (automatyczne) (wartości nieokreślone) static int c; // statyczna (wartość 0 przy pierwszym wywołaniu) extern int D; // statyczna (wartość nieznana) b = a; p = ( int* ) malloc ( sizeof ( int ) ); // dynam. (kontrolowana) (wartość nieokreślona) Q = ( int* ) calloc ( 1, sizeof ( int ) ); // dynam. (kontrolowana) (wartość 0) *p = 5; *Q = 6; free(p); // zmienna kontrolowana *p "znika" return; // zmienne automatyczne a, b, p "znikają", // zmienne c (statyczna), *Q (kontrolowana) zachowują swoje wartości Tomasz Marks - Wydział MiNI PW -5- Tomasz Marks - Wydział MiNI PW -6- Zmienne statyczne / dynamiczne (2) Podział obiektów statyczne / dynamiczne związany jest z czasem ich istnienia. statyczne - istnieją od momentu ich utworzenia (wydzielenia dla nich pamięci) do zakończenia działania programu. Zaliczamy do nich: wszystkie obiekty globalne, obiekty lokalne zadeklarowane z atrybutem static. dynamiczne - mogą się pojawiać (gdy zostanie dla nich wydzielona pamięć) i znikać (gdy wydzielona dla nich pamięć zostanie zwolniona) w takcie działania programu. Zaliczamy do nich: obiekty automatyczne (lokalne zadeklarowane bez atrybutu static), obiekty kontrolowane Zmienne statyczne / dynamiczne (3) statyczne obiekty globalne - tworzone na początku działania programu; istnieją aŝ do zakończenia jego działania. obiekty lokalne zadeklarowane z atrybutem static - tworzone najpóźniej w chwili pierwszego uruchomienia funkcji, w której są zdefiniowane; istnieją aŝ do zakończenia działania programu. dynamiczne obiekty automatyczne - tworzone przy kaŝdym wykonaniu bloku programowego, w którym są zdefiniowane; istnieją tylko do zakończenia wykonania tego bloku. obiekty kontrolowane - tworzenie (wydzielanie pamięci) i usuwanie (zwalnianie pamięci) jest całkowicie kontrolowane przez program (programistę). Tomasz Marks - Wydział MiNI PW -7- Tomasz Marks - Wydział MiNI PW -8-

Zadanie na koniec C vs C++ Chcemy napisać program, który umoŝliwi wykonywanie prostych obliczeń na liczbach zespolonych. Zadanie zrealizujemy najpierw w języku C. Następnie zobaczymy, jak moŝe to wyglądać w języku C++. Tomasz Marks - Wydział MiNI PW -9- Tomasz Marks - Wydział MiNI PW -10- #include <stdio.h> #include <math.h> Przykład #1 ( C ) w języku C void main ( void ) // zespolone x, y z double xre, xim, yre, yim, zre, zim; double result; scanf ( %lf%lf, &xre, &xim ); // odczyt x scanf ( %lf%lf, &yre, &yim ); // odczyt y zre = xre + yre; // z = x + y zim = xim + yim; // z = x + y result = sqrt ( zre*zre + zim * zim ); // result = Abs( z ) printf( \nresult=%f\n, result ); Tomasz Marks - Wydział MiNI PW -11- Tomasz Marks - Wydział MiNI PW -12-

// progc.c #include <stdio.h> #include <math.h> Przykład #2 ( C ) typedef struct _CMPLX CMPLX; void ReadZ ( CMPLX *a ) scanf ( %lf, &a->re ); scanf ( %lf,&a->im ); double AbsZ ( CMPLX a ) return sqrt ( a.re * a.re + a.im * a.im ); CMPLX AddZ ( CMPLX a, CMPLX b ) void main ( void ) CMPLX x,y,z; double result; w języku C++ ReadZ ( &x ); ReadZ ( &y ); z = AddZ ( x, y ); result = AbsZ ( z ); printf( \nresult=%f\n, result ); Tomasz Marks - Wydział MiNI PW -13- Tomasz Marks - Wydział MiNI PW -14- #include <iostream> Przykład #2 ( C++ ) #include <iostream> Przykład #2a ( C++ ) struct CMPLX double Abs ( ) return sqrt ( Re * Re + Im * Im ); void Read ( ) cin >> Re; cin >> Im; ; CMPLX Add ( CMPLX a, CMPLX b ) int main ( ) struct CMPLX double Abs ( ) const return sqrt ( Re * Re + Im * Im ); void Read ( ) cin >> Re; cin >> Im; ; CMPLX Add ( CMPLX a, CMPLX b ) int main ( ) z = Add ( x, y ); z = Add ( x, y ); Tomasz Marks - Wydział MiNI PW -15- Tomasz Marks - Wydział MiNI PW -16-

#include <iostream> Przykład #2a ( C++ ) struct CMPLX double Abs ( ) const return sqrt ( Re * Re + Im * Im ); void Read ( ) cin >> Re >> Im; ; CMPLX Add ( CMPLX a, CMPLX b ) int main ( ) z = Add ( x, y ); Tomasz Marks - Wydział MiNI PW -17- // progcpp.cpp #include <iostream> Przykład #2b ( C++ ) struct CMPLX double Abs ( ) const return sqrt ( Re * Re + Im * Im ); void Read ( ) cin >> Re >> Im; ; CMPLX operator+ ( CMPLX a, CMPLX b ) int main ( ) z = x + y; // równowaŝne: z = operator+ ( x, y ); Tomasz Marks - Wydział MiNI PW -18- Plik nagłówkowy (definicja klasy CMPLX) // cmplx.h struct CMPLX ; double Abs ( ) const; void Read ( ); CMPLX operator+ ( CMPLX, CMPLX ); // cmplx.cpp Plik implementacyjny klasy CMPLX #include < cmath > double CMPLX :: Abs ( ) const return sqrt ( Re * Re + Im * Im ); void CMPLX :: Read ( ) cin >> Re >> Im; CMPLX operator+ ( CMPLX a, CMPLX b ) Tomasz Marks - Wydział MiNI PW -19- Tomasz Marks - Wydział MiNI PW -20-

// myprog.cpp Główny plik aplikacji UWAGA: int main ( ) x.read (); y.read (); z = x + y; W języku C++, w obrębie bloku deklaracje mogą się przeplatać z instrukcjami. Ale... (1) deklaracja zmiennej musi poprzedzać jej uŝycie ( tak jak w języku C ), (2) deklaracja nie moŝe być "przeskakiwana". Tomasz Marks - Wydział MiNI PW -21- Tomasz Marks - Wydział MiNI PW -22- Główny plik aplikacji Główny plik aplikacji // myprog.cpp int main ( ) CMPLX x, y; x.read (); y.read (); // myprog.cpp int main ( ) CMPLX x, y; x.read (); y.read (); CMPLX z; z = x + y; double result = z.abs( ); cout << \nresult= << result << endl; CMPLX z = x + y; double result = z.abs( ); cout << \nresult= << result << endl; Tomasz Marks - Wydział MiNI PW -23- Tomasz Marks - Wydział MiNI PW -24-

Koniec wykładu 15. Tomasz Marks - Wydział MiNI PW -25-