Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Podobne dokumenty
1 Wskaźniki. 1.1 Główne zastosowania wskaźników

Techniki Programowania wskaźniki

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

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

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

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

Laboratorium nr 9. Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium:

Wstęp do wskaźników w języku ANSI C

Lab 9 Podstawy Programowania

KURS C/C++ WYKŁAD 6. Wskaźniki

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

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:

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

W dowolnym momencie można zmienić typ wskaźnika.

ZASADY PROGRAMOWANIA KOMPUTERÓW

tablica: dane_liczbowe

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

DYNAMICZNE PRZYDZIELANIE PAMIECI

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

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

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

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

IX. Wskaźniki.(3 godz.)

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

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

Część 4 życie programu

Wskaźniki. Informatyka

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wykład 1: Wskaźniki i zmienne dynamiczne

1,3,4,2,3,4,0,1,4,5,0. Wówczas największa suma trzech kolejnych liczb (zaznaczone na czerwono) wynosi:

Struktury, unie, formatowanie, wskaźniki

Wstęp do informatyki- wykład 7

Programowanie komputerowe. Zajęcia 4

Podstawy Programowania

TEMAT : KLASY DZIEDZICZENIE

Techniki Programowania wskaźniki 2

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

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

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

Programowanie - wykład 4

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

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

Algorytmy i język C++

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

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Program 14. #include <iostream> #include <ctime> using namespace std;

C++ wprowadzanie zmiennych

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Programowanie i struktury danych

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

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

Wstęp do informatyki- wykład 11 Funkcje

STL: Lekcja 1&2. Filozofia STL

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

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

C-struktury wykład. Dorota Pylak

Podstawy programowania w języku C++

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Podstawy Programowania Podstawowa składnia języka C++

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

#include <iostream> using namespace std; void ela(int); int main( ); { Funkcja 3. return 0; }

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Pytania sprawdzające wiedzę z programowania C++

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Programowanie komputerowe. Zajęcia 1

XV. Wskaźniki Odczytywanie adresu pamięci istniejących zmiennych Wskaźniki pierwsze spojrzenie.

Struktury Struktura polami struct struct struct struct

3. Instrukcje warunkowe

void Pobierz(Student &a); void Wypisz(Student a); void Ustaw_zaliczenia(Student t[],int r); void Wypisz_najlepszych(Student t[],int r, float prog);

Języki i metodyka programowania. Wskaźniki i tablice.

Programowanie komputerowe. Zajęcia 3

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

PDF stworzony przez wersję demonstracyjną pdffactory Pro Program 15

1 Podstawy c++ w pigułce.

Wstęp do programowania

Funkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie.

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

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

Języki i techniki programowania Ćwiczenia 2

Wstęp do informatyki- wykład 9 Funkcje

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

Wstęp do programowania obiektowego, wykład 7

Języki programowania obiektowego Nieobiektowe elementy języka C++

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

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

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

Pytanie 1. Pytanie 2. Pytanie 3 WOJEWÓDZKI KONKURS INFORMATYCZNY. Treść pytania

Wykład 2 Składnia języka C# (cz. 1)

C-struktury wykład. Dorota Pylak

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

// deklaracja zmiennej typu int oraz wskaźnika na zmienne tego typu int zmienna = 10;

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

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

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

Transkrypt:

Podstawy informatyki Elektrotechnika I rok Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia Katedra Energoelektroniki i Automatyki Systemów Przetwarzania Energii AGH Kraków 2017

Tematyka i cel ćwiczenia Język C++. Operacje na danych - wskaźniki Celem ćwiczenia jest zapoznanie się z pojęciem wskaźnika, wykonanie prostych zadań mających ułatwić zrozumienie definiowanie i prace ze wskaźnikami. Omówione są także zastosowania wskaźników oraz ich wykorzystanie podczas wykonywania operacji na danych w języku C++. Wprowadzenie Program komputerowy składa się z algorytmów odpowiednio operujących na danych. Dane - zbiór jakiś wartości, np. liczb, tekstów, znaków, - to drugi filar programowania komputerów. Wszystkie dane muszą być zadeklarowane, powinny też być zainicjowane, natomiast rolą programisty jest wybór najodpowiedniejszego typu danych, mając na uwadze takie kryteria, jak zajętość pamięci, pojemność numeryczną, szybkość operowania, czytelność programu. Jednym z zespołów danych oprócz ostatnio poznanych są wskaźniki. Wskaźnik (ang. pointer) typ zmiennej odpowiedzialnej za przechowywanie adresu do innej zmiennej (innego miejsca w pamięci) w obrębie naszej aplikacji. Przykłady definicji wskaźnika: int *wsk; Pokazano definicję wskaźnika mogącego pokazywać na obiekt typu int. Definicję taką można odczytać: wsk jest wskaźnikiem do pokazywania na obiekty typu int. W tym wskaźniku wsk można przechowywać adres jakiegoś obiektu typu int. Zawartość wskaźnika informuje o tym gdzie wskazywany obiekt się znajduje, a nie co w tamtym obiekcie się znajduje. Znak * w definicji informuje, że używany będzie wskaźnik. Użyty w przykładzie wskaźnik nazywa się wsk bez gwiazdki *. Wskaźnik pokazuje na obiekty. Referencja nie jest obiektem, dlatego nie może być do niej wskaźnika. Ze wskaźnikami i adresami związane są dwa operatory: 1. operator referencji & zwracający adres zmiennej (zmiennej, tablicy, struktury itp.) podanej po prawej stronie tego operatora. 2. operator dereferencji (wyłuskania) identyfikujący obszar wskazywany przez wskaźnik podany po prawej stronie tego operatora. Przykład programu: int liczba ; int wsk ; wsk = &liczba; // przypisanie zmiennej wsk // adresu zmiennej liczba wsk = 10; // przypisanie 10 zawartości zmiennej // wskazywanej przez wskaźnik // tutaj równoważne liczba = 10 cout << *wsk << endl; // wyświetlenie wyłuskanej wartości wskaźnika (10) cout << wsk << endl; // wyświetlenie adresu zmiennej liczba cout << &wsk << endl; // wyświetlenie adresu wskaźnika cout << &liczba << endl; // wyświetlenie adresu zmiennej liczba W jednym programie można używać wskaźników różnych typów oraz więcej niż jednego wskaźnika danego typu. Dodatkowo wskaźnik nie pokazuje raz na zawsze na ten sam obiekt, można go łatwo przestawić i wskazywać nim inny obiekt. Wskaźnik służący do pokazywania na obiekt jednego typu nie nadaje się do pokazywania na obiekt innego typu, aby to umożliwić należy zastosować operator rzutowania reinterpreter_cast. Operator reinterpreter_cast służy do Katedra Energoelektroniki i Automatyki Systemów Przetwarzania Energii AGH, Kraków 2017 1

konwersji między typami, między którymi konwersja nie może zajść niejawnie. Najczęściej takie zamiany nie mają sensu. Wskaźniki typu void - zwykłe wskaźniki używane są aby wskazywać na dany obiekt określonego typu, np. zmienna tekstowa, zmienna liczbowa czy struktura. Wskaźniki typu void dają możliwość wskazywania na określony obszar pamięci aplikacji bez ustalania jakiego typu obiekt pokazuje się. Używanie takiego wskaźnika jest potrzebne w miejscach gdzie potrzebny jest tylko adres jakiegoś obiektu w pamięci. Wskaźnik każdego (niestałego) typu można przypisać wskaźnikowi typu void, natomiast nie można wykonać odwrotnej operacji. Aby tego dokonać należy posłużyć się operatorem rzutowania. Przykładowy program wykorzystujący wskaźniki: #include <iostream> using namespace std ; int obiekt_pierwszy = 2 ; int obiekt_drugi = 5000 ; int *wskaznik ; // wskaznik na obiekty typu int wskaznik = &obiekt_pierwszy ; // prosty wypis na ekran ; cout << "obiekt_pierwszy = " << obiekt_pierwszy << "\n Wskaznik natomiast odczytal nastepujaca wartosc = " << *wskaznik << endl ; obiekt_pierwszy = 20 ; // następuje zmiana wartości obiektu pierwszego cout << "obiekt_pierwszy = "<< obiekt_pierwszy << "\n Wskaznik natomiast odczytal nastepujaca wartosc = " << *wskaznik << endl ; *wskaznik = 55 ; // do tego na co pokazuje wskaznik wpisz 55 cout << "obiekt_pierwszy = " << obiekt_pierwszy << "\n Wskaznik natomiast odczytal nastepujaca wartosc = " << *wskaznik << endl ; wskaznik = &obiekt_drugi ; //przestawienie wskaznika na obiekt drugi cout << "obiekt_pierwszy = "<< obiekt_pierwszy << "\n Wskaznik natomiast odczytal nastepujaca wartosc = " << *wskaznik << endl ; Obszary zastosowania wskaźników: ulepszenie pracy z tablicami, funkcje mogące zmieniać wartość przysłanych do nich argumentów, dostęp do specjalnych komórek pamięci, rezerwacja obszarów pamięci. Jeśli mamy następujące definicje: int *wsk; int tab[10]; to instrukcja: wsk = &tab[n]; powoduje, że wskaźnik ustawi się na element tablicy o indeksie n. Natomiast instrukcja: wsk = &tab[0]; jest równoznaczny z: wsk = tab; Ponieważ nazwa tablicy jest równocześnie adresem jej początku. 2 Katedra Energoelektroniki i Automatyki Systemów Przetwarzania Energii AGH, Kraków 2017

Dodanie do wskaźnika jakiejś liczby całkowitej powoduje, że pokazuje on tyleż elementów tablicy dalej. Niezależnie od tego, jakie są to elementy. Ponadto możliwe jest wykonanie operacji odejmowania wskaźników od siebie. Odjęcie od siebie dwóch wskaźników pokazujących na różne elementy tej samej tablicy w rezultacie poinformuje o liczbie dzielących je elementów tablicy liczba ta może być dodatnia lub ujemna. Możliwe jest również porównywanie wskaźników, w tym zwykłego wskaźnika ze wskaźnikiem typu void. Przykład fragmentu programu: double x[5]; double *p; p = x; // tak jak p = &(x[0]); *p = 12; p++; // teraz p wskazuje na x[1] *p = 13; // tutaj x[0]=12, x[1]=13 Katedra Energoelektroniki i Automatyki Systemów Przetwarzania Energii AGH, Kraków 2017 3

Program ćwiczenia Przeanalizować kody zamieszczonych programów, następnie wykonać zadanie nr 1 i 2. Program 1: using namespace std; int *wsk,j,x; wsk=new int[10]; x=1; for(j=0;j<10;j++) *wsk=x; cout<<"tab["<<j<<"] jest w pamieci pod adresem:"<<wsk<< "\t i ma wartosc:"<< *wsk <<endl; wsk++; x++; delete [] wsk; błąd //w tym momencie użycie zapisanej tablicy komputer odczytałby jako Program 2: using namespace std; double *wsk; double zmienna; wsk=&zmienna; cout<<"podaj zmienna do spierwiastkowania!\n"; cin>>zmienna; *wsk=sqrt(zmienna); cout<<"zmienna="<<*wsk<<"\ni jest pod adresem:"<<wsk<<endl; 4 Katedra Energoelektroniki i Automatyki Systemów Przetwarzania Energii AGH, Kraków 2017

Program 3: using namespace std; int rozmiar; int i; cout<<"ile elementow ma miec tablica?\n"; cin>>rozmiar; int *wsk=new int[rozmiar]; for(i=0;i<rozmiar;i++) *wsk=i; cout<<"tab["<<i<<"]="<<*wsk<<"\tpod adresem:"<<wsk<<endl; wsk++; delete [] wsk; Katedra Energoelektroniki i Automatyki Systemów Przetwarzania Energii AGH, Kraków 2017 5

Program 4: int funkcja(); using namespace std; int (*wskfunkcji)(); wskfunkcji=funkcja; (*wskfunkcji)(); int funkcja() cout<< "Wyswietlam funkcje!"<<endl; 6 Katedra Energoelektroniki i Automatyki Systemów Przetwarzania Energii AGH, Kraków 2017

Zad 1: Należy napisać program wykorzystujący dwa wskaźniki: mały i duży. Na 10 elementowej tablicy należy ustawić wskaźnik mały w ustalonej pozycji (np. na 5 elemencie). Następnie program ma poprosić o ustawienie wskaźnika dużego (na dowolnym elemencie tablicy, czyli od 0-9). W kolejnym kroku następuje porównanie ustawień wskaźnika dużego względem małego. Należy sprawdzić czy: 1. Wskaźnik duży pokazuje na element bliżej początku tablicy. 2. Wskaźnik duży pokazuje element o wyższym indeksie. 3. Wskaźniki pokazują ten sam element. Po dokonaniu porównania należy wyświetlić komunikat informujący o zaistniałym przypadku. Np. Po ustawieniu wskaźnika małego na 5 element tablicy, a dużego na 3, powinien wyświetlić się komunikat nr. 1. Zad 2: Należy napisać program, który będzie używał wskaźników w pracy z tablicami. Należy zdefiniować dwie tablice, jedna dla typu int, a drugą dla typu double. Następnie ustawić wskaźnik na początkowym elemencie tablicy double. Zapełnić ją wartościami początkowymi (przy użyciu instrukcji for). Wypisać na ekran otrzymane wartości. W kolejnym kroku należy zmienić ustawienie wskaźników: jeden wskaźnik ustawić na piątym elemencie tablicy typu int, drugi wskaźnik ustawić na trzecim elemencie tablicy double. W nowym ustawieniu wskaźników należy zamienić wybrane dotychczasowe wartości w tablicy na nowe wartości. Następnie należy wypisać treść tablic po zastosowaniu zmian. Katedra Energoelektroniki i Automatyki Systemów Przetwarzania Energii AGH, Kraków 2017 7