Wszystkie treści na stronie ir.migra.pl chronione są prawami autorskimi. Więcej informacji znajdziesz tutaj.
Zapisy podstawy programowej 2024 realizowane w temacie:
I. Rozumienie, analizowanie i rozwiązywanie problemów
Zakres rozszerzony. Uczeń spełnia wymagania określone dla zakresu podstawowego, a ponadto:
- w zależności od problemu rozwiązuje go, stosując metodę wstępującą lub zstępującą;
- do realizacji rozwiązania problemu dobiera odpowiednią metodę lub technikę algorytmiczną i struktury danych;
II. Programowanie i rozwiązywanie problemów z wykorzystaniem komputera i innych urządzeń cyfrowych.
Zakres rozszerzony. Uczeń spełnia wymagania określone dla zakresu podstawowego, a ponadto:
- projektuje i tworzy rozbudowane programy w procesie rozwiązywania problemów, wykorzystuje w programach dobrane do algorytmów struktury danych, […]
- sprawnie posługuje się zintegrowanym środowiskiem programistycznym przy pisaniu, uruchamianiu i testowaniu programów;
I + II. Zakres rozszerzony. Uczeń spełnia wymagania określone dla zakresu podstawowego, a ponadto:
- zapisuje za pomocą listy kroków lub pseudokodu, i implementuje w wybranym języku programowania, algorytmy poznane na wcześniejszych etapach oraz algorytmy […]
Spis treści
- Zmienne globalne i lokalne
- Przesłanianie zmiennych
- Przesłanianie zmiennych globalnych
- Przesłanianie parametrów funkcji
1. Zmienne globalne i lokalne
Zmienna globalna istnieje przez cały czas działania programu i możemy jej używać w wielu miejscach w programie i w funkcjach.
Zmienna lokalna jest dostępna wyłącznie wewnątrz funkcji lub innego bloku programu. Zmienne lokalne można stosować niezależnie od zmiennych globalnych.
Szczegółowe zasady stosowania zmiennych globalnych i lokalnych różnią się w zależności od wykorzystywanego języka programowania.
W języku C++ zmienne globalne deklarujemy poza funkcjami. Zmienne te są widoczne od miejsca deklaracji zmiennej do końca pliku – również w funkcjach. Zmienne a i b w przykładzie 3. zostały zadeklarowane jako globalne. Nie trzeba ich więc deklarować wewnątrz funkcji wartosci(), bowiem zasięg zmiennej obejmuje także tę funkcję.
W języku C++ zmienne lokalne są widoczne od miejsca deklaracji do końca funkcji (do nawiasu klamrowego zamykającego definicję funkcji). W języku C++ zmienne lokalne mogą być również tworzone w obrębie bloku instrukcji { }.
W funkcji usmiechy() (przykład 1.) zmienna i jest lokalna, jej zasięg jest ograniczony tylko do pętli for. Próba użycia zmiennej lokalnej, zadeklarowanej wewnątrz funkcji, w programie głównym spowoduje pojawienie się podczas kompilacji błędu niezadeklarowanej zmiennej.
W języku Python zmienne globalne są widoczne w dowolnym miejscu programu (w programie głównym i funkcjach).
Zmienne lokalne użyte w danej funkcji są widoczne w całej tej funkcji.
Próba użycia zmiennej lokalnej w programie głównym spowoduje pojawienie się błędu interpretera niezdefiniowanej nazwy danej zmiennej.
Przykład 1. Stosowanie zmiennej lokalnej
W funkcji uśmiechy() z przykładu 1. (temat C4) zadeklarujemy zmienną lokalną k, której wartość (wprowadzana z klawiatury) decyduje o wyprowadzanym wyniku.
Ćwiczenie 1. Stosujemy zmienna lokalną
- Otwórz plik TC5_c1.cpp lub TC5_c1.py. Zmodyfikuj funkcję, zgodnie z przykładem 1. Zapisz plik pod tą samą nazwą.
- Wykonaj program kilkukrotnie dla różnych danych.
- Umieść w programie głównym instrukcję sprawdzającą,
czy k jest równe zero; jeśli tak, powinien się wyświetlić znak
zapytania.
Czy program został skompilowany? Uzasadnij odpowiedź. Odczytaj komunikat kompilatora.
Dlaczego program nie został uruchomiony? Uzasadnij odpowiedź. Odczytaj komunikat kompilatora.
2. Przesłanianie zmiennych
Zmienne mogą zostać przesłonięte. W szczególności zadeklarowanie wewnątrz funkcji zmiennej lokalnej o takiej samej nazwie, jak zmienna globalna, spowoduje przesłonięcie zmiennej globalnej, co oznacza, że wewnątrz funkcji używana będzie zmienna lokalna, a nie globalna.
2.1. Przesłanianie zmiennych globalnych
Przykład 2. Przesłanianie zmiennej globalnej w języku C++
W funkcji licznik() zadeklarowano zmienną x. Zmienna o nazwie x została również zadeklarowana (jako zmienna globalna) poza funkcją licznik(). Oznacza to, że wewnątrz funkcji zostaną wykonane działania na zmiennej lokalnej x, a wartość zmiennej globalnej x pozostanie niezmieniona.
W funkcji licznik() zadeklarowano zmienną x. Zmienna o nazwie x została również zainicjowana (jako zmienna globalna) poza funkcją licznik(). Oznacza to, że wewnątrz funkcji zostaną wykonane działania na zmiennej lokalnej x, a wartość zmiennej globalnej x pozostanie niezmieniona.
Ćwiczenie 2. Sprawdzamy, na czym polega przesłanianie zmiennej globalnej
- Otwórz plik TC5_c2.cpp lub TC5_c2.py. Zmodyfikuj wybrany program, zgodnie z przykładem 2. Wyjaśnij, co się dzieje w poszczególnych wierszach programu.
- Zapisz plik pod tą samą nazwą. Uruchom program.
- Dlaczego w wyniku działania programu wartość zmiennej x wynosi 10, a wyświetla się siedem liczb (od 1 do 7)? Odpowiedź uzasadnij
Dzięki mechanizmowi przesłaniania, nie musimy się martwić o nazywanie zmiennych wewnątrz funkcji. Jeśli nawet wybierzemy nazwę zmiennej lokalnej (tu: x) taką samą jak nazwa zmiennej globalnej (również x), to wartość zmiennej globalnej nie zostanie naruszona dzięki istnieniu zmiennej lokalnej o tej samej nazwie.
2.2. Przesłanianie parametrów funkcji
Parametry formalne danej funkcji w jej treści mogą być traktowane jak zmienne lokalne i ewentualne operacje wykonywane na tych parametrach wewnątrz funkcji nie będą powodowały zmian wartości odpowiadających im parametrów aktualnych (argumentów). Tak się dzieje w przypadku parametrów przekazywanych przez wartość.
Uwaga: Zależnie od języka programowania i używanych typów zmiennych parametry mogą być przekazywane funkcji na różne sposoby, m.in.: przez wartość, referencję, wskaźnik. Jednak to zagadnienie, jako bardziej skomplikowane, omówimy w dalszych tematach.
Przykład 3. Przesłanianie parametrów funkcji
Funkcja wartosci() została zdefiniowana z dwoma parametrami: x i y. Wywołanie funkcji w programie głównym z parametrami aktualnym a i b przekazywanymi przez wartość powoduje, że wewnątrz funkcji parametry x i y przyjmują odpowiednio wartości zmiennych a i b.
Uwaga: Zmienna x i odpowiadająca jej zmienna a (podobnie zmienne y i b) zajmują w pamięci komputera dwa różne miejsca (o różnym adresie), dlatego wykonanie działań na zmiennych x i y nie ma wpływu na wynik wywołania procedury z parametrami aktualnymi (argumentami) a i b (przykład w tabeli 1.).
Ćwiczenie 3. Sprawdzamy, na czym polega przesłanianie parametrów funkcji
Otwórz plik TC5_c3.cpp lub TC5_c3.py. Wykonaj program dla kilku par parametrów.
Sprawdź dodatkowo, jakie otrzymasz wyniki:
- wywołując funkcję z konkretnymi wartościami, np. wartosci(12, 20);
- wprowadzając dane wewnątrz funkcji (zamiast w programie głównym lub na zewnątrz funkcji); rozważ w każdym z języków dwa przypadki:
Przypadek 1.cin >> x;
cin >> y;Przypadek 2.
cin >> a;
cin >> b;
Przypadek 1.a = int(input("Wprowadź pierwszą liczbę: "))
b = int(input("Wprowadź drugą liczbę: "))Przypadek 2.
x = int(input("Wprowadź pierwszą liczbę: "))
y = int(input("Wprowadź drugą liczbę: "))Objaśnij w każdym z przypadków otrzymane wyniki.
Zadania
- Otwórz plik TC5_z1.cpp lub TC5_z1.py. Dodaj do programu funkcję wyprowadzającą na ekran 20 znaków „@”. Zmodyfikuj program tak, aby dla k równego zero na ekran były wyprowadzane znaki „@”, a dla k różnego od zera – zestaw znaków „:-)”.
- Otwórz plik TC5_z2.cpp lub TC5_z2.py. Zmodyfikuj funkcję usmiechy(), aby wyświetlać w n wierszach po 20 „uśmiechów”. Rozpatrz przypadek, gdy zmienna n została zadeklarowana w funkcji usmiechy() jako zmienna lokalna i równocześnie, gdy zmienna n została zadeklarowana poza funkcją usmiechy() jako zmienna globalna. Zapisz plik pod tą samą nazwą. Uruchom program. Wyjaśnij otrzymane wyniki.