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

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

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

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

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

Programowanie i struktury danych

Programowanie komputerowe. Zajęcia 1

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

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.

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

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 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

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

Zaawansowane programowanie w języku C++ Biblioteka standardowa

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

Język C++ wykład VIII

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

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

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Laboratorium nr 7 Sortowanie

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

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

PDF stworzony przez wersję demonstracyjną pdffactory Pro Program 15

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

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

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

Programowanie - wykład 4

Część 4 życie programu

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

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Mechanizm dziedziczenia

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

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

Szablony klas, zastosowanie szablonów w programach

Wstęp do programowania

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

INFORMATYKA SORTOWANIE DANYCH.

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:

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

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

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

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

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

Programowanie Proceduralne

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

#include "stdafx.h" #include <iostream> #include "windows.h" using namespace std;

Programowanie obiektowe

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

tablica: dane_liczbowe

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Programowanie w językach

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

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

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

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

Wstęp do programowania

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

Zadania z podstaw programowania obiektowego

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

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

Techniki Programowania wskaźniki 2

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

Szablon klasy std::vector

Lab 9 Podstawy Programowania

Jak Windows zarządza pamięcią?

Pliki wykład. Dorota Pylak

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

Pliki wykład 2. Dorota Pylak

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

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

Algorytmy. 1. Sortowanie 2. Statki i okręty. programowanie cz.7. poniedziałek, 2 marca 2009

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

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

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

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

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

Podstawy obiektowości

Plik klasy. h deklaracje klas

Listy powiązane zorientowane obiektowo

O podstawowych operacjach na tablicach. Mateusz Ziółkowski, MBiU II

Pliki wykład. Dorota Pylak

TEMAT : KLASY POLIMORFIZM

Programowanie obiektowe w C++ Wykład 12

Wejście wyjście strumieniowe

Rzutowanie i konwersje

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

Programowanie i struktury danych

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

Projektowanie klas c.d. Projektowanie klas przykład

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 1. Wprowadzenie, środowisko programistyczne, pierwsze programy

Programowanie proceduralne w języku C++ Pętle, tablice

I - Microsoft Visual Studio C++

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

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

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

Programowanie w języku C++

Tbli Tablice obiektów biktó są tworzone dokładnie d tak samo, jak i tablice, składające się z elementów innego typu

Transkrypt:

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

Plan Zapis i odczyt z plików tekstowych O tablicach ciąg dalszy Referencje i wskaźniki

Dobra rada ZAWSZE zaczynajcie pisanie swojego programu od NAJMNIEJSZEJ możliwej kompilującej się wersji.

Odczyt danych z pliku 10 175.5 168.4 154.8 181.1 168.3 156.2 174.3 173.7 169.6 175.3 Przykład pliku wzrost.txt Liczba danych w pliku (np. 10) Kolejne dane (wzrost 10 studentów)

Odczyt danych z pliku #include <iostream> #include <fstream> Używamy biblioteki <fstream> obsługuje strumienie zapisu/odczytu plików using namespace std; int main () Tworzymy obiekt ifstream dla odczytu pliku ifstream file; // mozna tez: ifstream file("wzrost.txt"); file.open("wzrost.txt"); int n = 0; file>>n; double a; for (int i = 0; i < n; i++) file>>a; cout<<"a = "<<a<<endl; } file.close(); return 0; } Otwieramy plik podając nazwę: "wzrost.txt" W tym przypadku wczytujemy liczbę znajdująca się na początku pliku Odczytujemy wzrost w pętli I wypisujemy na ekran Zamykamy plik

Zapis danych do pliku #include <iostream> #include <fstream> Używamy biblioteki <fstream> obsługuje strumienie zapisu/odczytu plików using namespace std; int main () Tworzymy obiekt ofstream dla zapisu pliku ofstream file; // można też: ofstream file("liczby.txt"); file.open("liczby.txt"); for (int i = 0; i < 10; ++i) file<<i<<endl; } Tworzymy nowy plik podając nazwę:"liczby.txt" Zapisujemy kolejne liczby 0..9 do pliku file.close(); return 0; } Zamykamy plik

Tablice (ciąg dalszy 1) #include <iostream> using namespace std; int main () int tab1[5]; Tablica statyczna 5-elementowa int *tab2 = new int[5]; tab1[0] = 1; tab2[0] = 2; cout<<tab1[0]<<endl; cout<<tab2[0]<<endl; Tablica alokowana dynamicznie 5-elementowa Tak samo odnosimy się do elementów obu tablic return 0; }

Tablice (ciąg dalszy 2) #include <iostream> using namespace std; int main () int tab1[5]; Rozmiaru tablicy statycznej nie da się zmienić int *tab2 = new int[5]; delete[] tab2; tab2 = new int[10]; return 0; } Usuwamy tablicę i tworzymy nową z innym rozmiarem

Referencje i wskaźniki #include <iostream> using namespace std; int main () int a = 5; int &b = a; b = 10; cout<<a<<endl; //10 cout<<b<<endl; //10 Referencje int aa = 5; int bb = 10; int *c; c = &aa cout<<(*c)<<endl; //5 c = &bb; cout<<(*c)<<endl; //10 return 0; } Wskaźnik

#include <iostream> Wskaźniki klasy 1 using namespace std; class Test int a; public: Test()a = 100;} ~Test()cout<< Destruktor! <<endl;} void Ustaw(int Aa)a = Aa;} void Wypisz()cout<<a<<endl;} }; int main () Test obiekt; obiekt.wypisz() //100 Test *wskaznik = new Test(); wskaznik->wypisz(); //100 delete wskaznik; //Destruktor! return 0; } Tworzenie obiektu Użycie konstruktora domyślnego Tworzenie obiektu przez wskaźnik Użycie konstruktora domyślnego Usunięcie obiektu z pamięci (użycie destruktora)

#include <iostream> Wskaźniki klasy 2 using namespace std; class Test int a; public: Test()a = 100;} ~Test()cout<< Destruktor <<endl;} void Ustaw(int Aa)a = Aa;} void Wypisz()cout<<a<<endl;} }; int main () Test obiekt1; Test obiekt2; obiekt2.ustaw(200); Test *wskaznik; wskaznik = &obiekt1; wskaznik->wypisz(); //100 Ustawiamy wskaźnik na obiekt1 wskaznik = &obiekt2; wskaznik->wypisz(); //200 Ustawiamy wskaźnik na obiekt2 return 0; }

Zajęcia nr 5 Algorytmy i wskaźniki Zadania

Zadanie 1: Statystyka Urząd statystyczny postanowił, w ramach okresowego badania populacji, zmierzyć wzrost pewnej reprezentatywnej grupy studentów. Do opracowania wyników badania niezbędne jest: policzenie średniego wzrostu studentów z badanej próbki, odchylenia standardowego wartości średniej, oraz posortowanie danych. Plik z danymi ma następujący format: liczba_studentów wzrost1 wzrost2 Zadania: Stworzyć (dynamicznie) tablicę liczb rzeczywistych (double) o rozmiarze danym liczbą zbadanych studentów i wczytać do niej z zewnętrznego pliku dane. Wypisać na ekran tablicę danych funkcja zewnętrzna: void wypisz(const float* tab, int n) Obliczyć i wypisać na ekran wartość średnią wczytanej próbki danych funkcja zewnętrzna: float srednia(const float* tab, int n) Zaimplementować funkcję sortującą dane za pomocą algorytmu sortowania przez wstawianie, tzw. Insert Sort (patrz Uwaga 1 następna strona) funkcja zewnętrzna: void sortuj(float* tab, int n) Program powinien działać w pętli while, a każda z powyższych opcji powinna być realizowana za pomocą odpowiedniej opcji używając switch-case. Plik z danymi należy ściągnąć z: http://www.if.pw.edu.pl/~lgraczyk/pp2015/lab05/wzrost.txt

Zadanie 1: Statystyka c.d. Uwaga 1: Schemat działania algorytmu sortowania przez wstawianie (za Wikipedia): https://pl.wikipedia.org/wiki/sortowanie_przez_wstawianie (zobacz animację!) 1. Utwórz zbiór elementów posortowanych i przenieś do niego dowolny element ze zbioru nieposortowanego. 2. Weź dowolny element ze zbioru nieposortowanego. 3. Wyciągnięty element porównuj z kolejnymi elementami zbioru posortowanego póki nie napotkasz elementu równego lub elementu większego (jeśli chcemy otrzymać ciąg niemalejący) lub nie znajdziemy się na początku/końcu zbioru uporządkowanego. 4. Wyciągnięty element wstaw w miejsce gdzie skończyłeś porównywać. 5. Jeśli zbiór elementów nieuporządkowanych jest niepusty wróć do punkt 2. https://www.youtube.com/watch?v=roalu379l3u https://www.youtube.com/watch?v=dfg-xuypyuq https://en.wikipedia.org/wiki/insertion_sort

Zadanie 1: Statystyka c.d. Piszemy klasę, która będzie zawierała w sobie tablicę, kontstruktor oraz metody do liczenia średniej oraz sortowania (zadanie projektowe).

Zadanie 2: Wektor Piszemy klasę do przechowywania nieskończonej ilości liczb typu double. Zauważmy, że zwykła tablica, statyczna bądź dynamiczna, zawsze ma ograniczoną ilość elementów. Jendym z rozwiązań pozwalających na obejście tego problemu jest tzw. wektor. Wektor jest strukturą danych zawierającą dynamicznie tworzoną tablicę, która działa w ten sposób, że w momencie gdy wstawiany jest ostatni element tablicy, jej rozmiar zwiększa się dwukrotnie. Przykład: 1) Tworzymy nowy obiekt typu wektor mamy tablicę jednoelementową: [0] 2) Dodajemy liczbę na jedno jedyne miejsce [0] tablica jest 2x rozsrzerzana: [0][1] 3) Dodajemy liczbę na miejsce [1] tablica jest 2x rozszerzana: [0][1][2][3] 4) Dodajemy liczbę na miejsce [2] nie ma potrzeby rozszerzania: [0][1][2][3] 5) Dodajemy liczbę na miejsce [3] znowu rozszerzamy 2x: [0][1][2][3][4][5][6][7] 6) Dodajemy liczbę na miejsce [4] nie ma potrzeby rozszerzania: [0][1][2][3][4][5][6][7] 7) Dodajemy liczbę na miejsce [6] nie ma potrzeby rozszerzania: [0][1][2][3][4][5][6][7] Itp.

Zadanie 3: Lista (dla zaawansowanych) Patrz zadanie: http://www.if.pw.edu.pl/~lgraczyk/jp2015/lab05/plus/zadanie5_10.11.2015.pdf