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

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

Programowanie w językach

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

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

Programowanie i struktury danych

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

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

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

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

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

Wejście wyjście strumieniowe

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

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

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

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

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

Pliki wykład 2. Dorota Pylak

Język C++ wykład VIII

Programowanie w języku C++

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

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

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

Pliki wykład. Dorota Pylak

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

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

Programowanie i struktury danych

Operacje na plikach (niskiego poziomu) < IO.H >

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

Pliki wykład. Dorota Pylak

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

Programowanie Procedurale. Pliki w języku C++

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

Funkcje zawarte w bibliotece < io.h >

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

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

Funkcje zawarte w bibliotece < io.h >

Wskaźniki. Informatyka

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.

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

Wstęp do programowania. Dariusz Wardecki, wyk. X

Pliki wykład 2. Dorota Pylak

Część 4 życie programu

DYNAMICZNE PRZYDZIELANIE PAMIECI

Wykład :37 PP2_W9

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

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

Wprowadzenie do programowania i programowanie obiektowe

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

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

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

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

tablica: dane_liczbowe

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

Zaawansowane programowanie w języku C++ Biblioteka standardowa

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

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

Biblioteka standardowa - operacje wejścia/wyjścia

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

Programowanie komputerowe. Zajęcia 4

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 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

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

Wstęp do Programowania 2

Podstawy programowania w języku C++

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Programowanie obiektowe

Program 22. #include <iostream> using namespace std; struct Osoba { string Imie; string Nazwisko; char Plec; int RokUr; };

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

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

Wstęp do Informatyki

Wstęp do programowania

Wzorce funkcji (szablony)

Dziedziczenie & W slajdach są materiały zapożyczone z

Podstawy programowania w języku C++

Wstęp do programowania obiektowego

ZASADY PROGRAMOWANIA KOMPUTERÓW

Pytania sprawdzające wiedzę z programowania C++

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Microsoft IT Academy kurs programowania

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

Podstawy programowania w języku C++

Programowanie komputerowe. Zajęcia 1

I - Microsoft Visual Studio C++

Wstęp do programowania

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

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

Wykład 9 Pliki cz.3 (getline(string)) Typ wyliczeniowy enum

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016

Wstęp do Programowania 2

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

Programowanie Procedurale

Tablice. int rozmiar; cout << Jaki ma być rozmiar tabeli? ; cin >> rozmiar; { int tablica[rozmiar]; /* TU JEST ŹLE */... }

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

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

Podstawy programowania w języku C++

Podstawy programowania

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

Wprowadzenie do języka Java

obiekty funkcyjne - funktory

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

Transkrypt:

Wykład II - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik

Operacje dyskowe - zapis do pliku #include <iostream> #include <fstream> using namespace std; int main() ofstream plik( "test.txt" ); if( plik.is_open() ) plik << "Napis\n" << "inny" << endl; plik << 12; plik.close(); else cout << "Nieudane otwarcie pliku." << endl; return 0;

Opcje zapisu ofstream plik( "test.txt" ); //tryb tekstowy z nadpisywaniem istniejącego pliku ofstream plik( "test.txt", ios::app ); //dopisywanie na końcu ofstream plik( "test.bin", ios::binary ); //tryb binarny ofstream plik( "test.bin", ios::app ios::binary ); //dopisywanie w trybie binarnym

Odczyt z pliku ofstream plik( "test.txt" ); plik << "Taki napis\n inny" ; plik.close(); string s; ifstream plik( "test.txt" ); while( true ) plik >> s; if( plik.eof() ) break; cout << s << endl; plik.close(); Zwróci: Taki napis inny

Odczyt z pliku po linii ofstream plik( "test.txt" ); plik << "Taki napis\n inny" ; plik.close(); string linia; ifstream plik( "test.txt "); if( plik.is_open() ) while( true ) getline( plik, linia ); if( plik.eof() ) break; cout << linia << endl; plik.close();

Odczyt z pliku Tryb binarny: ifstream plik( "test.bin", ios::binary ); Ustawienie odczytu na końcu pliku: ifstream plik( "test.bin", ios::binary ios::ate ); Odczyt i zapis po bajcie: char bajt; plik.get( bajt ); // lub bajt = plik.get(); plik.put( bajt );

Przykład ifstream plik( "test.bin", ios::binary ); char bajt; while( true ) plik.get( bajt ); if( plik.eof() ) break; cout << bajt << endl; // wypisze znaki //cout << (int) (unsigned char) bajt << endl; //wypisałoby kody 0-255

Pozycja w pliku Ustawianie odpowiedniej pozycji w pliku dla odczytu: plik.seekg( 3, ios::beg ); //3 znak od początku plik.seekg( 2, ios::cur ); //2 znaki dalej od bieżącej plik.seekg( 0, ios::end ); //ostatni znak Zwrócenie aktualnej pozycji w pliku dla odczytu: plik.tellg(); Analogicznie dla zapisu mamy: seekp(... ), tellp()

Przykład Ustalenie rozmiaru pliku wejściowego. ifstream plik("test.txt", ios::binary ); plik.seekg( 0, ios::end ); cout << plik.tellg() << endl; albo ifstream plik("test.txt", ios::binary ios::ate ); cout << plik.tellg() << endl;

Metody read i write plik.read( wskaźnik, rozmiar ); plik.write( wskaźnik, rozmiar ); char z; plik1.read( &z, sizeof(z) ); //odczyt bajta plik2.write( "Tekst", sizeof( "Tekst" ) ); int t[] = 1, 2, 3, 4; plik3.write( (char *) t, sizeof( t ) );

Operatory new i delete Operator new przyporządkowuje dynamicznie pamięć, a operator delete ją zwalnia. Operator te wymagają stosowania wskaźników. typ danych *p = new typ danych; Powstaje obiekt typu typ danych wskazywany przez p. delete p; Zwolnienie pamięci wskazywanej przez p. Pamięć ta musi być zarządzana jawnie przez programistę. Jeżeli p jest pusty, to oznacza, że przydzielenie pamięci się nie powiodło. Operator delete może być stosowany jedynie do wskaźnika przekazanego przez new lub zerowego.

Przykład int *p; p = new int;... delete p; int *t; t = new int[20];... delete [] t; Nie musimy sprawdzać, czy p jest różne od zera: if( p!= 0 ) //niepotrzebne - sprawdzane automatycznie delete p;

Zapis tablicy do pliku int rozmiar; cin >> rozmiar; int *t = new int[ rozmiar ]; for( int i=0; i<rozmiar; i++ ) cin >> t[i]; ofstream plik( "tab.bin", ios::binary ); plik.write( (char *) t, rozmiar*sizeof( int ) ); plik.close(); delete [] t;

Odczyt tablicy z pliku ifstream plik( "tab.bin", ios::binary ios::ate ); int n = plik.tellg(); plik.seekg( 0, ios::beg ); char *tmp = new char[ n ]; plik.read( tmp, n ); plik.close(); int *u = ( int* ) tmp; for( int i = 0; i < n/sizeof(int); i++ ) cout << u[i] << endl; delete [] tmp;

XML - reprezentacja danych Zapis danych do pliku w formie tekstowej wymaga ustalenia sposobu rozmieszczenia tych danych. Możemy skorzystać z istniejących rozwiązań: XML - uniwersalny i niezależny od platformy sposób organizowania danych w plikach. Wiele programów potrafi eksportować i importować dane z formatu XML.

XML - reprezentacja danych Dane w pliku XML są reprezentowane w strukturalizowany sposób. Język ten jest językiem znaczników. Każdy otwarty znacznik musi zostać zamknięty. <znacznik> dane </znacznik> W przypadku pustej zawartości pomiędzy otwarciem znacznika i jego zamknięciem dopuszcza się skrót: <znacznik /> Dokument rozpoczyna się instrukcją sterującą, która zawiera informacje o wersji standardu XML, z jakim jest zgodny, oraz o sposobie kodowania znaków. Można stosować komentarze w formie: <!-- komentarz -->

XML - przykład <?xml version="1.0" encoding="windows-1250"?> <spis-osob> <!-- komentarz --> <osoba typ="pracownik"> <imie>adam</imie> <nazwisko>nowak</nazwisko> <telefon>123-456-789</telefon> </osoba> <osoba typ="klient"> <imie>alina</imie> <nazwisko>kowalska</nazwisko> <telefon/> </osoba> </spis-osob>

XML - przykład Plik otwarty w przeglądarce Firefox:

Strumienie łańcuchowe Strumieniami danych są obiekty cin i cout, oraz obiekty klas ifstream i ofstream. #include <sstream> string s = "12.3"; double x; //uzyskanie wartości w x na podstawie s istringstream o1( s ); o1 >> x; string t = "Dzisiejsza temperatura to "; double y = 23.4; //wstawienie wartości y do tekstu w t ostringstream o2; o2 << y << " stopni."; t += o2.str();

Synchronizacja strumienia wejściowego sync - usuwa zbuforowane znaki ze strumienia wejściowego char first, second; cout << "Podaj imie: "; first = cin.get(); cin.sync(); cout << "Podaj nazwisko: "; second = cin.get(); cout << "Pierwsza litera imienia " << first << endl; cout << "Pierwsza litera nazwiska " << second << endl;

Wzorzec funkcji Zapotrzebowanie: void dzialaj( int *t, int n ); void dzialaj( int *t, int n ) int m = 5; for( int i=0; i<n; i++ ) // przetwarzamy t[i], np.: t[i] += m;

Wzorzec funkcji Zapotrzebowanie: void dzialaj( int *t, int n ); void dzialaj( int *t, int n ) int m = 5; for( int i=0; i<n; i++ ) // przetwarzamy t[i], np.: t[i] += m; void dzialaj( int *t, int n ); void dzialaj( float *t, int n ); void dzialaj( double *t, int n ); void dzialaj( char *t, int n );

Wzorzec funkcji Wzorzec funkcji (function template) - posiada informacje o typach określonych w liście argumentów. template <typename nasztyp> void dzialaj( nasztyp *t, int n ) nasztyp m = 5; for( int i=0; i<n; i++ ) // przetwarzamy t[i], np.: t[i] += m;

Kilka typów template <typename jedentyp, typename drugityp> void dodaj( jedentyp a, drugityp b ) jedentyp a; drugityp b; //...

Koniec