Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Podobne dokumenty
Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Programowanie w językach

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

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

Operacje wejścia/wyjścia (odsłona druga) - pliki

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.

Programowanie i struktury danych

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40

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

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

1 Pierwsze kroki w C++ cz.3 2 Obsługa plików

STL Standardt Template Library (wprowadzenie)

C++ - [3-5] Pliki i strumienie w C++

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

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Język C++ wykład VIII

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia

STL: Lekcja 1&2. Filozofia STL

Pliki wykład 2. Dorota Pylak

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

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

Kontenery i iteratory. Wykorzystanie kontenerów w praktyce.

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

1 Strumienie. 2 Pliki. 2.1 Zapis do pliku tekstowego. Programowanie w j zyku C - Adam Krechowicz, Daniel Kaczmarski

Podstawy Programowania

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

Wejście wyjście strumieniowe

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

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

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Operatory na rzecz typu TString

Pliki wykład 2. Dorota Pylak

Wykład 2 Operacje wejściawyjścia. Ewa Gajda

dr inż. Jarosław Forenc

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

Lab 9 Podstawy Programowania

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Jak Windows zarządza pamięcią?

Wprowadzenie do programowania i programowanie obiektowe

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

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

Programowanie i struktury danych

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

Programowanie Komponentowe Zarządzanie obiektami: kontenery

Pliki wykład. Dorota Pylak

Wstęp do programowania. Wykład 1

Pliki wykład. Dorota Pylak

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

Pliki. Informacje ogólne. Obsługa plików w języku C

Kompletna dokumentacja kontenera C++ vector w -

Podstawy Programowania

Programowanie obiektowe w C++ Wykład 1

Zasady programowania Dokumentacja

Algorytmy i Struktury Danych.

Spis treści OBSŁUGA PLIKÓW W JĘZYKU C++ Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF32

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania. Programowanie systemów informatycznych laboratorium. Ćw. 3: Akwizycja danych. RS 232 cd.

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

Część 4 życie programu

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Klasa iostream... 1 Klasy ofstream, ifstream Struktura FILE... 8

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

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

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

Wykład PASCAL - Pliki tekstowe

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

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

Programowanie Procedurale. Pliki w języku C++

Programowanie w języku C++

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Wykład 9 Kolekcje, pliki tekstowe, Przykład: Notatnik

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

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Pliki. Operacje na plikach w Pascalu

Algorytmy i Struktury Danych. Anna Paszyńska

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

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

W przypadku STL w specyfikacji nazwy pliku nagłówkowego brak rozszerzenia tj. <string> <string.h> zamiast

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

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 7. Karol Tarnowski A-1 p.

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

Informatyka 2. Informatyka 2. Wykład nr 1 ( ) Dane podstawowe. - Wydział Elektryczny. Politechnika Białostocka. Program wykładu (1/2)

Wykład 4. Tablice. Pliki

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Szablon klasy std::vector

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

Konstruktor destruktor Programowanie obiektowe

Pliki wykład 2 -przekazywanie strumieni do funkcji -funkcje get(char &) i getline(string)

Wykład 8: klasy cz. 4

Rok akademicki: 2016/2017 Kod: JFT s Punkty ECTS: 5. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Transkrypt:

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 5 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B

Plan prezentacji Przestrzenie nazw Standardowa biblioteka szablonów (Standard Template Library STL) Operacje plikowego wejścia/wyjścia Na podstawie: A. Allain, Przewodnik dla początkujących C++ S. Prata, Szkoła programowania C++

Przestrzenie nazw Nazwy w języku C++ mogą odnosić się do zmiennych, funkcji, struktur, wyliczeń, klas, składowych struktur i klas Dla rosnących projektów rośnie ryzyko kolizji tych nazw Dodatkowo ryzyko zwiększa się w projektach wykorzystujących biblioteki zewnętrzne. W celu uniknięcia konfliktów wprowadzono mechanizm przestrzeni nazw.

Przestrzenie nazw Polecenie using namespace nazwa_przestrzeni; udostępnia wszystkie nazwy z przestrzeni nazwa_przestrzeni Przykładowo using namespace std; udostępnia wszystkie nazwy z przestrzeni std.

Przestrzenie nazw Polecenie using namespace std; udostępnia wszystkie nazwy z przestrzeni std. Dzięki temu możemy korzystać bezpośrednio z obiektów cout, cin. Nie musimy odwoływać się do pełnych nazw: std::cout, std::cin.

Przestrzenie nazw Definiowanie przestrzeni nazw Przykład namespace cprogramming{ int x; }//brak średnika Dostęp do zmiennej x można uzyskać pisząc cprogramming::x, dołączając całą przestrzeń nazw using namespace cprogramming; lub dołączając tylko wybraną nazwę z przestrzeni using cprogramming::x;

Przestrzenie nazw Zagnieżdżanie przestrzeni nazw Przykład namespace com{ namespace cprogramming { }} int x;

Przestrzenie nazw Przykład do istniejącej przestrzeni nazw namespace com{ } int x; można dodać nowy element... namespace com{ } double y;

Przestrzenie nazw Kiedy stosować instrukcję using namespace Zazwyczaj nie należy umieszczać deklaracji using w plikach nagłówkowych, a tylko w plikach źródłowych. Zalecenie: w plikach nagłówkowych stosuj pełne nazwy, w plikach źródłowych można wykorzystywać deklarację using.

Standardowa biblioteka szablonów Standardowa biblioteka szablonów udostępnia zestaw szablonów reprezentujących kontenery, iteratory, obiekty funkcyjne oraz algorytmy. Kontener to jednostka, która pozwala przechowywać grupę wartości ustalonego typu podobnie jak tablica.

Standardowa biblioteka szablonów Wykorzystanie standardowej biblioteki szablonów może wykluczyć potrzebę tworzenia niestandardowych struktur danych. Aby korzystać z biblioteki STL należy poznać interfejsy szablonów.

Wektor Wektor dostępny w bibliotece STL przypomina tablicę z dynamicznym zarządzaniem pamięcią.

Wektor Deklaracja wektora

Wektor W wektorze można przechowywać dane dowolnego typu. Deklarując wektor należy określić typ danych. vector<typ> Wektor znajduje się w przestrzeni nazw std.

Wektor Szablon wektora udostępnia wiele różnych metod, np.: at zwraca wartość na podanej pozycji, insert wstawia podaną wartość na podanej pozycji, push_back dopisuje podaną wartość na końcu wektora, pop_back usuwa ostatni element wektora, shrink_to_fit - dostosowuje zaalokowaną pamięć do wypełnienia wektora, clear usuwa wszystkie elementy wektora, size zwraca liczbę elementów w wektorze, capacity zwraca liczbę elementów, które można przechowywać w wektorze bez realokacji pamięci

Wektor Dla wektorów przeciążono także operator[], dzięki czemu do elementów wektora można się odwoływać jak do elementów tablicy

Mapa Struktura danych mapa z biblioteki STL pozwala przechowywać wartości w układzie: klucz/wartość. Klucz i wartość mogą być dowolnych typów. Mapa znajduje się w przestrzeni nazw std. Deklaracja mapy: map<typ_klucza, typ_wartosci> mapa;

Mapa Przykładowa deklaracja mapy:

Mapa Dodanie wartości do mapy: Dostęp do elementu w mapie:

Mapa Szablon mapy udostępnia wiele różnych metod, np.: at zwraca wartość dla podanego klucza, erase usuwa wartość o podanym kluczu, clear usuwa wszystkie elementy mapy, size zwraca liczbę elementów w mapie, empty zwraca informację, czy mapa jest pusta.

Iteratory Do przejścia po wszystkich elementach mapy można wykorzystać iterator. Deklaracja iteratora dla mapy z przykładu: map<string, string>::iterator itr;

Iteratory Również szablon wektor udostępnia iterator. Wykorzystując metody begin() oraz end() możemy iteracyjnie przejść przez wszystkie elementy wektora

Iteratory O iteratorze można myśleć jako o ulepszonym wskaźniku. Dla iteratorów zaimplementowano operatory inkrementacji ++ oraz dereferencji *.

Iteratory Zmodyfikowana pętla z poprzedniego przykładu dzięki zapamiętaniu iteratora dla końca wektora (koniec) nie trzeba wywoływać metody end(), przy sprawdzaniu warunku kontynuacji pętli.

Iteratory Podobnie można wyświetlić zawartość mapy:

Iteratory Dostęp do klucza i wartości uzyskuje się przez pola first i second

Iteratory Wykorzystanie metody find() do wyszukania w mapie elementu o podanym kluczu

Iteratory Poprawiona funkcja wyswieltmape() pobiera mapę jako referencję zadeklarowaną jako const W funkcji wykorzystywany jest iterator const_iterator

Dostęp do plików Odczyt i zapis plików przypomina korzystanie z obiektów cin oraz cout. Dwie klasy ifstream oraz ofstream pozwalają obsługiwać strumienie wejściowy oraz wyjściowy.

Otwieranie pliku do odczytu Konstruktor klasy ifstream pobiera jako argument nazwę pliku. Nazwa pliku może być podana z pełną ścieżką dostępu. Jeżeli nie będzie ścieżki dostępu to plik będzie poszukiwany w katalogu roboczym.

Otwieranie pliku do odczytu Przykładowe wywołanie konstruktora:

Otwieranie pliku do odczytu Pracując z plikami należy sprawdzać, czy przebieg programu jest zgodny z oczekiwaniami. Do sprawdzenia, czy plik jest prawidłowo otwarty służy metoda is_open().

Otwieranie pliku do odczytu

Odczyt pliku Jeżeli plik jest otwarty to z obiektu klasy ifstream można korzystać jak z obiektu cin.

Odczyt pliku

Odczyt pliku Pracując z plikami należy sprawdzać, czy przebieg programu jest zgodny z oczekiwaniami. Wartość zwracana przez operator >> można wykorzystać do sprawdzenia, czy dane są prawidłowo wczytane.

Odczyt pliku

Odczyt pliku Przykład odczytu pliku czytany plik zawiera 10-elementową listę z wynikami

Odczyt pliku koniec pliku Przykład odczytu pliku przerywamy jeśli nie udało się wczytać kolejnej liczby

Odczyt pliku Do sprawdzenia, czy w trakcie odczytu wystąpił błąd można wykorzystać metodę fail(). Do sprawdzenia, czy w trakcie odczytu osiągnięto koniec pliku można wykorzystać metodę eof(). Po osięgnięciu końca pliku należy użyć metody clear(), aby przeprowadzać inne operacje plikowe.

Zapis pliku Do zapisu pliku służy klasa ofstream. Obiektu klasy ofstream używamy jak obiektu cout.

Zapis pliku

Zapis pliku Konstruktor klasy ofstream przyjmuje jako drugi argument określający sposób obsługi pliku ios::app ios::ate ios::trunc ios::out ios::binary dołączanie do pliku ustawienie bieżącej pozycji na końcu usunięcie całej zawartości pliku umożliwia zapis umożliwia operacje binarne Przykładowo: ofstream file("nazwa", ios::app ios::binary )

Pozycja w pliku Do odczytania pozycji w pliku służą funkcje tellg oraz tellp. Do ustawienia pozycji w pliku służą funkcje seekg oraz seekp.

Pozycja w pliku Trzy opcje dotyczące zmiany pozycji w pliku: ios_base::beg ios_base::cur ios_base::end początek pozycja bieżąca koniec

Pozycja w pliku Przykładowy program ilustrujący odczyt i ustawienie pozycji w pliku. Odczyt i zapis następuje do jednego pliku, zatem korzystamy z klasy fstream.

Pozycja w pliku

Pozycja w pliku

Pozycja w pliku

Pozycja w pliku

Pliki binarne Wykorzystanie plików binarnych pozwala znacząco zmniejszyć ich objętość (względem plików tekstowych).

Pliki binarne Otwarcie pliku w trybie binarnym: ofstream file( "data.bin", ios::binary ); Rzutowanie na typ char* umożliwia zapis bajt po bajcie Metoda write zapisuje dane (traktowane jako tablica char) o podanym rozmiarze (w bajtach)

Pliki binarne

Pliki binarne

Pliki binarne

Pliki binarne

Podsumowanie Przestrzenie nazw Standardowa biblioteka szablonów (Standard Template Library STL) Operacje zapisu/odczytu plików