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

Podobne dokumenty
Język C++ wykład VIII

Pliki wykład 2. Dorota Pylak

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

Pliki wykład 2. Dorota Pylak

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

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

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

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

Programowanie w językach

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

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

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

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

Część 4 życie programu

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

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

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

jest mocny, skoro da się w nim wyrazić nowe pojęcia; łatwiej przenieść go na nową platformę jest mniejszy.

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

Podstawy Informatyki. Kompilacja. Historia. Metalurgia, I rok. Kompilatory C++ Pierwszy program. Dyrektywy preprocesora. Darmowe:

Programowanie i struktury danych

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

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

Podstawy Informatyki. Metalurgia, I rok. Wykład 6 Krótki kurs C++

Zasady programowania Dokumentacja

Programowanie - wykład 4

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

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

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

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

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

1 Wielokrotne powtarzanie tych samych operacji

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

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

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

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.

Pliki wykład. Dorota Pylak

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

Programowanie komputerowe. Zajęcia 1

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

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

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

Wykład :37 PP2_W9

Podstawy Programowania C++

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Biblioteka standardowa - operacje wejścia/wyjścia

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

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

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

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

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

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

Pliki wykład. Dorota Pylak

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Język ludzki kod maszynowy

Programowanie Obiektowe i C++

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

I - Microsoft Visual Studio C++

Konstrukcje warunkowe Pętle

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Programowanie w językach wysokiego poziomu

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Funkcje zawarte w bibliotece < io.h >

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

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

Podstawy programowania w języku C++

Funkcje zawarte w bibliotece < io.h >

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

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

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

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

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

Lab 9 Podstawy Programowania

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

I znowu można jak w C, za pomocą starych struktur i metod:

Programowanie komputerowe. Zajęcia 3

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

Podstawy Programowania

Podstawy programowania obiektowego

Języki programowania

Instrukcje sterujące

Wstęp do informatyki- wykład 11 Funkcje

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

Warunek wielokrotnego wyboru switch... case

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Pytania sprawdzające wiedzę z programowania C++

Argumenty wywołania programu, operacje na plikach

Wstęp do informatyki- wykład 9 Funkcje

Podstawy programowania w języku C i C++

1 Podstawy c++ w pigułce.

Wstęp do Informatyki dla bioinformatyków

Programowanie obiektowe

lekcja 8a Gry komputerowe MasterMind

Informatyka I. Wykład 3. Sterowanie wykonaniem programu. Instrukcje warunkowe Instrukcje pętli. Dr inż. Andrzej Czerepicki

Ćwiczenie nr 3. Temat: Definicje i wykorzystanie funkcji, parametry funkcji

Język C, instrukcje sterujące (laboratorium)

Podstawy i języki programowania

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

Wstęp do programowania

Transkrypt:

Lista 7 Zad. 1 Pierwsza wersja programu 1. Przygotuj plik do w: plik tekstowy z pojedynczą liczbą. Umieść go w tym samym folderze, co projekt (*.cpp). 2. Nazwa pliku name nazwa zmiennej może być dowolna (nazwę pliku użytkownik powinien podać z rozszerzeniem, np. zad.txt) 3. Otwieranie pliku do biblioteka + utworzenie zmiennej typu strumień wejściowy dla pliku ifstream - to typ zmiennej, tak jak int, double, vector<int>, string, char, itp ist nazwa zamiennej może być dowolna //otwieranie pliku do pliku o nazwie name; otwiera plik o nazwie name do 4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku //otwieranie pliku do 1

if (!ist) throw runtime_error("nie można otworzyć pliku 5. Wczytaj liczbę z pliku i ją wyświetl to już znamy: ist to jak nasze wcześniejsze cin //otwieranie pliku do if (!ist) throw runtime_error("nie można otworzyć pliku ist>>a; cout<<a<<endl; Druga wersja programu czytaj kilka liczb i przechowuj w wektorze 1. Dodajemy bibliotekę vecotr, i wczytujemy serię liczb w pętli while analogicznie jak robiliśmy to przy użyciu cin oraz wyświetlamy wektor //otwieranie pliku do if (!ist) throw runtime_error("nie można otworzyć pliku 2

while(ist>>a) for (int i=0; i<liczby.size(); i++) cout<<liczby[i]<<endl; Trzecia wersja programu pogrupujmy w funkcje 1. Ustalmy, co może być osobną funkcją: czytanie liczb z pliku do wektora, wyświetlanie wektora; Pamiętaj, że wywołując funkcje argument musi być tego samego typu, ale nie musi mieć tej samej nazwy, co w nagłówku funkcji. void wyswietl(vector<double> &liczby){ for (int i=0; i<liczby.size(); i++) cout<<liczby[i]<<endl; //otwieranie pliku do if (!ist) throw runtime_error("nie można otworzyć pliku wyswietl(pomiary); 2. Chcemy, aby nasza funkcja do wyświetlania była bardziej uniwersalna, tzn. pozwalała nam wyświetlać wynik na konsoli, ale także np. zapisywać do pliku, powinna zatem móc korzystać z różnych strumieni wyjścia ostream (zmieniamy nazwę nie trzeba żeby nie mylić użytkownika 3

na wypisz). Parametry wywoływania takiej funkcji to wektor liczb oraz typ strumienia wyjścia tutaj cout, ponieważ chcemy wyświetlić wynik na konsoli. //otwieranie pliku do if (!ist) throw runtime_error("nie można otworzyć pliku Czwarta wersja użytkownik może przeczytać i może dopisać liczby na końcu pliku 1. Użytkownik ma wybór, czy chce przeczytać czy dopisać coś na końcu linii. A może warto pozwolić mu na obie te operacje dopóki nie zechce opuścić programu? Jasne, że warto. W tym celu możemy zastosować np. blok switch case w pętli while z warunkiem wyjścia. 4

//otwieranie pliku do char dzialanie; cout<<"co chcesz zrobic z plikiem: o - otworzyc, n - nadpisac, q - zakonczyc prace?\n"; while(cin>>dzialanie && dzialanie!='q'){ switch(dzialanie){ case 'o':{ ifstream ist(name.c_str());//zmienna ost typu strumień wejściowy dla if (!ist) throw runtime_error("nie można otworzyć pliku case 'n':{ //nadpisz case 'q':{ //zakoncz default: throw string("niepoprawne dzialanie"); catch(string &er){ cerr<<er<<endl; 2. Wprowadzamy dane do dopisania do pliku. Przy wczytywaniu liczb z pliku mogły wystąpić różne rodzaje błędów zakończenie pętli while: - fail() zakończenie poprzez podanie znaku kończącego lub błąd formatu (np. podano double zamiast int) - eof() zakończenie poprzez znak końca pliku - bad() poważny problem 5

Musimy zając się tymi błędami i wyczyścić strumień. W tym celu napiszmy dodatkową funkcję: wyczyść_strumien. Argumentami tej funkcji będą strumień wejścia (typ istream oraz znak końcowy terminator - typ char, np.: \n ) void wyczysc_strumien(istream &in, char terminator){ if (in.bad()) throw runtime_error("poważny problem ze standardowym wejsciem!"); else if (in.fail() in.eof()) { in.clear(); // czyscimy stan strumienia, bez tego nie mozemy z niego korzystac in.ignore(numeric_limits<streamsize>::max(),terminator); // pomijamy wszystkie znaki az do \n lub konca pliku (eof) char dzialanie; cout<<"co chcesz zrobic z plikiem: o - otworzyc, n - nadpisac, q - zakonczyc prace?\n"; while(cin>>dzialanie && dzialanie!='q'){ switch(dzialanie){ case 'o':{ ifstream ist(name.c_str());//zmienna ost typu strumień wejściowy dla if (!ist) throw runtime_error("nie można otworzyć pliku case 'n':{ cout<<"podaj dane do w do pliku\n"; vector<double>dodatkowe_dane=czytaj(cin); wyczysc_strumien(cin,'\n'); case 'q':{ //zakoncz 6

default: throw string("niepoprawne dzialanie"); catch(string &er){ cerr<<er<<endl; 3. Otwieramy plik do nadpisania ofstream analogicznie jak ifstream i używając funkcji wypisz zapisujemy do tego strumienia wyjścia void wyczysc_strumien(istream &in, char terminator){ if (in.bad()) throw runtime_error("poważny problem ze standardowym wejsciem!"); else if (in.fail() in.eof()) { in.clear(); // czyscimy stan strumienia, bez tego nie mozemy z niego korzystac in.ignore(numeric_limits<streamsize>::max(),terminator); // pomijamy wszystkie znaki az do \n lub konca pliku (eof) char dzialanie; cout<<"co chcesz zrobic z plikiem: o - otworzyc, n - nadpisac, q - zakonczyc prace?\n"; while(cin>>dzialanie && dzialanie!='q'){ switch(dzialanie){ case 'o':{ ifstream ist(name.c_str());//zmienna ost typu strumień wejściowy dla if (!ist) throw runtime_error("nie można otworzyć pliku 7

case 'n':{ cout<<"podaj dane do w do pliku\n"; vector<double>dodatkowe_dane=czytaj(cin); wyczysc_strumien(cin,'\n'); ofstream ost(name.c_str());//otwieramy plik do nadpisania if (!ost) throw runtime_error("nie można otworzyć pliku wypisz(dodatkowe_dane,ost); case 'q':{ //zakoncz default: throw string("niepoprawne dzialanie"); catch(string &er){ cerr<<er<<endl; Wersja piąta dodajmy jeszcze opcje dopisania na końcu linii 1. Dodatkowa opcja w switch case; podobnie jak w przypadku nadpisania, tylko teraz użyjmy parametru iso_base::app (więcej Tryby otwierania plików na wykładzie) void wyczysc_strumien(istream &in, char terminator){ if (in.bad()) throw runtime_error("poważny problem ze standardowym wejsciem!"); else if (in.fail() in.eof()) { in.clear(); // czyscimy stan strumienia, bez tego nie mozemy z niego korzystac in.ignore(numeric_limits<streamsize>::max(),terminator); // pomijamy wszystkie znaki az do \n lub konca pliku (eof) 8

char dzialanie; cout<<"co chcesz zrobic z plikiem: o - otworzyc, n - nadpisac, d - dopisz na końcu pliku, q - zakonczyc prace?\n"; while(cin>>dzialanie && dzialanie!='q'){ switch(dzialanie){ case 'o':{ ifstream ist(name.c_str());//zmienna ost typu strumień wejściowy dla if (!ist) throw runtime_error("nie można otworzyć pliku case 'n':{ cout<<"podaj dane do w do pliku\n"; vector<double>dodatkowe_dane=czytaj(cin); wyczysc_strumien(cin,'\n'); ofstream ost(name.c_str());//otwieramy plik do nadpisania if (!ost) throw runtime_error("nie można otworzyć pliku wypisz(dodatkowe_dane,ost); case 'd':{ cout<<"podaj dane do w do pliku\n"; vector<double>dodatkowe_dane=czytaj(cin); wyczysc_strumien(cin,'\n'); ofstream ost(name.c_str(),ios_base::app);//otwieramy plik do dopisania na końcu linii if (!ost) throw runtime_error("nie można otworzyć pliku wypisz(dodatkowe_dane,ost); case 'q':{ //zakoncz default: throw string("niepoprawne dzialanie"); catch(string &er){ cerr<<er<<endl; 9