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

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

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

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

Programowanie - wykład 4

Podstawy Programowania Obiektowego

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

Technologie i usługi internetowe cz. 2

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

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

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

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

Mechanizm dziedziczenia

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

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

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

Wykład 5: Klasy cz. 3

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

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.

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

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

Część 4 życie programu

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

7. Pętle for. Przykłady

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

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

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

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

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

Laboratorium 1 - Programowanie proceduralne i obiektowe

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

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

lekcja 8a Gry komputerowe MasterMind

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

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

Zmienne i struktury dynamiczne

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

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

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

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

TEMAT : KLASY DZIEDZICZENIE

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

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

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

Programowanie i struktury danych

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.

C++ wprowadzanie zmiennych

Język C++ wykład VIII

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

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

Wstęp do programowania. Wykład 1

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

Projektowanie klas c.d. Projektowanie klas przykład

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

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

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

Pytania sprawdzające wiedzę z programowania C++

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

Wstęp do programowania

Mechanizm dziedziczenia

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Wstęp do Programowania 2

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

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

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

I - Microsoft Visual Studio C++

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

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

Podstawy Programowania

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

Wstęp do programowania

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

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

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

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

Programowanie komputerowe. Zajęcia 1

1 Podstawy c++ w pigułce.

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

Wstęp do programowania

Zadania z podstaw programowania obiektowego

Programowanie komputerowe. Zajęcia 7

Metody Metody, parametry, zwracanie wartości

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

Programowanie obiektowe W3

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

Podstawy Programowania Obiektowego

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

Podstawy Języka Java

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Pliki wykład 2. Dorota Pylak

Operatory na rzecz typu TString

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

Wstęp do informatyki- wykład 7

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

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

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

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

Do czego służą klasy?

Wstęp do programowania

Transkrypt:

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

Plan Dokończenie zadań z zajęć nr 2 Programowanie obiektowe cz. 1 Struktury i klasy Podział na jednostki kompilacji

Zadanie 3.a. Rzut kostką Napisz program realizujący rzut kostką n ścienną. a)wylosuj liczbę oczek. Skorzystaj z instrukcji preprocesora umożliwiającej generację liczb pseudolosowych (#include <stdlib.h> ). W funkcji głównej zdeklaruj dwie zmienne typu int sciany,rzut;, które będą przechowywać informacje o ilości ścian kostki i wyniku rzutu kością. Wywołaj funkcję srand(time(0)); Ustawia ona punkt początkowy generatora liczb pseudolosowych na wartości 0. Co więcej każda generacja będzie niepowtarzalna (na miarę generatora liczb pseudolosowych). Poproś użytkownika o podanie ilości ścian kostki i przypisz ją do zmiennej sciany (za pomocą komend cout i cin). Skorzystaj z pętli do while z warunkiem (koniec =='t'). W instrukcji pętli wylosuj liczbę oczek w kostce za pomocą komendy rand()% sciany + 1;. Wylosowaną wartość wypisz na ekran. Zapytaj się użytkownika, czy chce kontynuować (niech wybierze odpowiedz t/n) i pobierz odpowiedź. 4

Zadanie 3.b. Rzut kostką b)wylosuj liczbę oczek. Oblicz sumę z wszystkich losowań i wypisz ich liczbę. Przerób poprzedni program. Instrukcję losowania przenieś do funkcji zewnętrznej, która pobiera wartość int (ilość oczek) oraz zwraca wynik losowania w formie zmiennej typu int (return wartosc;). W funkcji main() w instrukcji pętli dopisz kilka linii. Po rzucie kostką dodaj wynik rzutu do nowej zmiennej int suma. Następnie zwiększ wartość nowej zmiennej int n o 1 (podczas definiowania zmiennej n nadaj jej wartość 0). Przed zakończeniem głównej funkcji main() wypisz na ekran informację o liczbie wykonanych rzutów, liczbie ścian kostki oraz sumę rzutów. 5

Zadanie 3.c. Rzut kostką c)wylosuj liczbę oczek. Oblicz sumę z wszystkich losowań i wypisz ich liczbę. Zapamiętaj informację o wynikach w tablicy. Przerób poprzedni program. W głównej funkcji main() stwórz jednowymiarową tablicę rzut[] typu int o dużym rozmiarze np. 100. Pamiętaj o nadaniu początkowych wartości wszystkim elementom 0. Wyniki losowań wpisuj do kolejnych elementów tablicy (skorzystaj ze zmiennej n). Na końcu, przed instrukcją return 0; wypisz wszystkie zapisane wyniki na ekran. Skorzystaj z pętli for, nowego iteratora int i oraz zmiennej n. 6

Zadanie 3.a. Rzut kostką #include <iostream> #include <stdlib.h> using namespace std; Instrukcja preprocesora umożliwiająca wykorzystanie generatora liczb pseudolosowych rnd() int main() int sciany; // Zmienna przechowujaca informacje o ilosci scian kostki int rzut; //Zmienna przechowujaca wynik rzutu kostka char koniec; //Zmienna przechowujaca wartosc odpowiedzi na pytanie t/n srand (time(0)); cout << "Podaj ile scian ma kostka." << endl; cin >> sciany; Ustawienie punktu początkowego generatora liczb pseudolosowych. Jeśli time(n), to n=null lub n=0. Losowanie liczby całkowitej z przedziału <1, sciany> do rzut = rand ()% sciany + 1; cout << "Wynik rzutu:" << rzut << endl; cout << "Czy chcesz rzucic jeszcze raz? Odp t/n" << endl; cin >> koniec; //Pobranie do zmiennej wybor odpowiedzi na powyzsze pytanie } while (koniec == 't'); return 0; } Pętla do-while (pętla będzie wykonywana dopóki wartość wyrażenia () jest true 7

#include <iostream> #include <stdlib.h> Zadanie 3.b. Rzut kostką using namespace std; int losowanie(int max) return rand ()% max + 1; } max zmienna zapisująca ilość ścian kostki int main() int sciany; int rzut, suma = 0, n = 0; char koniec; Losujemy wynik rzutu kostką. srand (time(0)); cout << "Podaj ile scian ma kostka." << endl; cin >> sciany; do Dodajemy wynik nowego rzutu do wartości sumy. Powiększamy wartość zmiennej n o 1, rzut = losowanie(sciany); suma = suma + rzut; po wykonaniu rzutu i dodaniu jego wyniku do n = n + 1; cout << "Wynik rzutu:" << rzut << endl; cout << "Czy chcesz rzucic jeszcze raz? Odp t/n" << endl; cin >> koniec; sumy. } while (koniec == 't'); cout<<"rzucales "<<n<<" razy kostka o ilosci scian = "<<sciany<<". Suma rzutow = "<<suma<<endl; return 0;} 8

#include <iostream> #include <stdlib.h> using namespace std; Zadanie 3.c. Rzut kostką int losowanie(int max) return rand ()% max + 1; } Tworzymy dużą tablicę o wartościach początkowych =0. int main() int sciany; int rzut[100] = }, suma = 0, n = 0; char koniec; srand (time(0)); cout << "Podaj ile scian ma kostka." << endl; cin >> sciany; do Losujemy wynik rzutu kostką. Zapisanie wyniku w pierwszym wolnym elemencie tablicy. Dodajemy wynik nowego rzut[n] = losowanie(sciany); suma = suma + rzut[n]; cout << "Wynik rzutu:" << rzut[n] << endl; n = n + 1; cout << "Czy chcesz rzucic jeszcze raz? Odp t/n" << endl; cin >> koniec; rzutu do wartości sumy. } while (koniec == 't'); cout<<"rzucales "<<n<<" razy kostka o ilosci scian = "<<sciany<<". Suma rzutow = "<<suma<<endl; cout<<"wylosowane liczby to:"<<endl; for(int i=0 ; i < n ; i++) Wypisujemy wszystkie wyniku rzutu kostką. cout<<rzut[i]<<endl; 9 } return 0;}

Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) paradygmat programowania, w którym programy definiuje się za pomocą obiektów elementów łączących stan (czyli dane, nazywane najczęściej polami) i zachowanie (czyli procedury, tu: metody). Obiektowy program komputerowy wyrażony jest jako zbiór takich obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań. Podejście to różni się od tradycyjnego programowania proceduralnego, gdzie dane i procedury nie są ze sobą bezpośrednio związane. Programowanie obiektowe ma ułatwić pisanie, konserwację i wielokrotne użycie programów lub ich fragmentów. Żródło: https://pl.wikipedia.org/wiki/programowanie_obiektowe

Idea obiektu - przykład Żródło wszystkich obrazków w tej prezentacji: http://openclipart.org

Struktury Deklaracja struktury: struct nazwa_struktury typ1 skladowa1; typ2 skladowa2; WAŻNY //... }; ŚREDNIK! ALBO typedef struct typ1 skladowa1; typ2 skladowa2; //... } nazwa_struktury; WAŻNY ŚREDNIK! WARTO WIEDZIEĆ - Rozmiar obiektu struktury jest nie mniejszy niż suma rozmiarów elementów składowych struktury. - Wszystkie elementy składowe struktury zajmują własne miejsce w pamięci. - Stąd w każdej chwili mamy dostęp do wartości wszystkich elementów składowych. - Definicja struktury jest definicją nowego typu (użytkownika), a nie konkretnego obiektu. - Struktura może zawierać funkcje, które są dodatkowymi składowymi danej struktury.

Inicjacja struktury Sposób 1: struct nazwa_struktury nazwa_obiektu = wartość1, wartość2, }; Sposób 2 (elementy niewymienione na liście inicjalizacyjnej nie zostaną zainicjalizowane): struct nazwa_struktury nazwa_obiektu =.element1 = wartość1,.element3 = wartość2}; Sposób 3 kopiowanie innego obiektu: struct nazwa_struktury nazwa_obiektu = inny_obiekt_tej_samej_struktury;

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

Idea obiektu - przykład Żródło wszystkich obrazków w tej prezentacji: http://openclipart.org

Minimalistyczny kod (struktura) #include <iostream> #include <string> struct Silnik double pojemnosc; double moc; }; WAŻNY ŚREDNIK! using namespace std; int main() struct Silnik testowy_silnik; //Tworzymy silnik testowy_silnik.moc = 100.0; //Ustawiamy moc silnika na 100 [KM] cout << "Moc silnika: " << testowy_silnik.moc << " KM!" << endl; return 0; } Napisaliśmy kod w wersji minimalistycznej, a teraz kompilujemy go i poprawiamy ewentualne błędy (nie powinno ich być dużo i powinny być łatwe do namierzenia).

Operator. obiekt.skladnik referencja.skladnik Operator. - operator odniesienia się do składnika obiektu który znamy z nazwy lub referencji. Przykład: testowy_silnik.moc = 100.0; testowy_silnik.pojemnosc = 4;

#include <iostream> #include <string> Rozbudowujemy kod struct Silnik double pojemnosc; double moc; }; struct Kolo unsigned int srednica; std::string typ_bieznika; }; typedef struct std::string kolor; std::string material; } Karoseria; using namespace std; int main() struct Silnik testowy_silnik; //Tworzymy silnik testowy_silnik.moc = 100.0; //Ustawiamy moc silnika na 100 [KM] cout << "Moc silnika: " << testowy_silnik.moc << " KM!" << endl; return 0; } Kompilujemy i poprawiamy ewentualne błędy... WAŻNY ŚREDNIK! WAŻNY ŚREDNIK! Definicja struktury z użyciem typedef WAŻNY ŚREDNIK!

Kod dla naszego przykładu (obiekty) #include <iostream> #include <string> struct Silnik double pojemnosc; double moc; }; struct Kolo unsigned int srednica; std::string typ_bieznika; }; typedef struct std::string kolor; std::string material; } Karoseria; struct Samochod struct Silnik silnik; struct Kolo kolo[4]; Karoseria karoseria; };

Kod dla naszego przykładu (main) using namespace std; int main() struct Silnik testowy_silnik; //Tworzymy silnik testowy_silnik.moc = 100.0; //Ustawiamy moc silnika na 100 [KM] struct Samochod samochod; //Tworzymy samochod samochod.silnik = testowy_silnik; //Montujemy nasz testowy silnik w samochodzie cout << "Moc silnika wynosi az: " << (samochod.silnik).moc << " KM!" << endl; (samochod.silnik).moc *= 2; //Podwajamy moc silnika cout << "Moc silnika wynosi teraz: " << samochod.silnik.moc << " KM!" << endl; //Pora na zmiane karoserii Karoseria karoseria; karoseria.kolor = "czerwony"; samochod.karoseria = karoseria; cout << "Kolor karoserii to: " << samochod.karoseria.kolor << endl; return 0; } W ten sposób doszliśmy do kodu opisującego samochód z naszego przykładu.

Idea obiektu - przykład Żródło wszystkich obrazków w tej prezentacji: http://openclipart.org

Podział na jednostki kompilacji samochod.hpp #include <iostream> #include <string> struct Silnik double pojemnosc; double moc; }; struct Kolo unsigned int srednica; std::string typ_bieznika; }; typedef struct std::string kolor; std::string material; } Karoseria; struct Samochod struct Silnik silnik; struct Kolo kolo[4]; Karoseria karoseria; }; main.cpp #include "samochod.hpp" using namespace std; int main() struct Silnik testowy_silnik; testowy_silnik.moc = 100.0; struct Samochod samochod; samochod.silnik = testowy_silnik; cout << "Moc silnika wynosi az: " << (samochod.silnik).moc << " KM!" << endl; (samochod.silnik).moc *= 2; cout << "Moc silnika wynosi teraz: " << samochod.silnik.moc << " KM!" << endl; Karoseria karoseria; karoseria.kolor = "czerwony"; samochod.karoseria = karoseria; cout << "Kolor karoserii to: " << samochod.karoseria.kolor << endl; return 0; }

Klasy Deklaracja klasy: class nazwa_klasy public: //konstruktory //destruktory //inne funkcje (metody) private: typ1 skladowa1; typ2 skladowa2; //... }; WARTO WIEDZIEĆ Klasa jest niemal identyczna ze strukturą, jednak domyślnie jej składowe i metody są prywatne. Oznacza to, że tylko metody tej klasy mogą mieć do nich dostęp są ukryte przed bezpośrednią ingerencją użytkowników. WAŻNY ŚREDNIK!

Prywatność Jeśli chcemy wywołać poza klasą jej prywatne składowe, to musisz stworzyć specjalne funkcje, które będą publiczne np. class silnik int pojemnosc, moc; }; Jeśli chcesz wypisać zawartość obiektów silnik.pojemność lub silnik.moc, to stwórz następujące funkcje: class silnik int pojemnosc, moc; public: int getpojemnosc()return pojemnosc;} int getmoc()return moc;} }; Jeśli chcesz zmienić wartość obiektów silnik.pojemność lub silnik.moc, to stwórz następujące funkcje publiczne: void setpojemnosc(int pobrana_pojemnosc) oraz void setmoc(int pobrana_moc)moc = pobrana_moc;}. Wtedy cała klasa: class silnik int pojemnosc, moc; public: int getpojemnosc()return pojemnosc;} int getmoc()return moc;} void setpojemnosc(int pobrana_pojemnosc)pojemnosc = pobrana_pojemnosc;} void setmoc(int pobrana_moc)moc = pobrana_moc;} };

Zaprzyjaźnianie funkcji Jeśli klasa ma obiekty albo funkcje prywatne, to nie mogą być one wywołane poza klasą czyli żadna funkcja spoza klasy nie może się do nich dostać. Jest możliwość, aby konkretna funkcja dostała upoważnienie dostępu do prywatnych składowych należy ją zaprzyjaźnić z klasą. class silnik private: int pojemnosc, moc;... friend void funkcja(int); }; void funkcja(int zmienna) cout<<silnik.moc<<endl; } int main() return 0; } Zmienne prywatne Zaprzyjaźnienie funkcji funkcja zaprzyjaźniona Po zaprzyjaźnieniu możemy teraz wywołać zmienne pojemnosc i moc korzystając z operatora '.'

Kompilacja wielu plików Każdą z tych linijek trzeba wpisać/skopiować po kolei do terminala: g++ -c samochod.cpp -o samochod.o g++ -c main.cpp -o main.o g++ samochod.o main.o -o samochod

Program złożony z wielu plików samochod.hpp PREPROCESING samochod.cpp main.cpp KOMPILACJA samochod.o main.o LINKOWANIE / KONSOLIDACJA Zewnętrzne biblioteki PLIK WYKONYWALNY

Makefile Makefile all: g++ -c samochod.cpp -o samochod.o g++ -c main.cpp -o main.o g++ samochod.o main.o -o samochod clean: rm *.o I teraz wystarczy wpisać w konsoli (w katalogu z kodem i Makefilem): make aby wszystkie pliki się skompilowały!

Zajęcia nr 3 Programowanie obiektowe cz. 1 Zadania

Zadanie 1: Policz piłki Stwórz strukturę pilka zawierającą char kolor;//'r','g','b' oraz int masa; Napisz kod ze zmiennymi globalnymi - ponad funkcją main(): int n=0; // zmienne globalne są dostępne globalnie Pilka tab[5]; // czyli dla wszystkich funkcji w całym programie int main() } Napisz funkcję void dodaj(char kol,int m), która ustawia kolor i masę n-tej piłki tab[n].kolor=kol; oraz masę, a także zwiększy licznik n. Napisz pętlę for, w której wczytywać będziemy kolor piłki 'R','G','B' i masę dla 5 piłek. Na koniec policzmy oddzielnie masę piłek zielonych, czerwonych i niebieskich. Trzeba będzie sprawdzić kolor piłki tab[n].kolor=='r'; Wszystko piszemy w jednym pliku!

Zadanie 2. Wielomian Tworzymy strukturę wielomian. a) Składowe struktury: double a, b oraz string nazwa. b) W funkcji main() tworzymy obiekty typu wielomianii ustawiamy mu wszystkie składniki, po czym wypisujemy je na ekran c) Zmieniamy słowo kluczowe struct na class co się dzieje? (Dodać public: wewnątrz klasy przed polami d) Tworzymy funkcję wewnątrz klasy void Ustaw(double wsp_a, double wsp_b, string name). e) Tworzymy zewnętrzną funkcję void wypisz(wielomian), która za pomocą komendy cout wypisuje na ekran nazwę wielomianu (nazwa) i równanie liniowe ax + b (na ekranie widzimy np.: wielomian first: 2.5x + 5.0). Funkcja ma być zaprzyjaźniona (friend) z klasą wielomian.

Zadanie 3a: Napisz program, który pobierał będzie z pliku tekstowego dane osobowe, wyświetlał je na ekranie i pozwalał na manipulowanie (zmianę, usuwanie) nimi. Reprezentacją osoby w programie ma być odpowiednio zaprojektowana klasa. Osoby mogą być przechowywane w tablicy (wektorze lub liście).

Zadanie 3b: Prosty sposób na pobranie danych z pliku zawierającego dane w formie dwóch kolumn liczb zmiennoprzecinkowych: dane.txt #include <cstdlib> #include <fstream> //... double col_one, col_two; //zmienne na dane z kolumn ifstream input("dane.txt"); //strumien wejsciowy input.ignore(1000, '\n'); //ignoruj pierwsza linie while (!input.eof()) input >> col_one >> col_two; cout << col_one << '\t' << col_two << endl; } //...

Zadanie 4a: Prosta gra RPG Napiszmy prymitywną grę. W głównej funkcji stworzymy dwie postaci (bohatera i potworka). W grze postaci te będą walczyć. Będziemy również monitorować stan obu postac, oraz nadawać nowe parametry istniejącym postaciom. Do wszystkiego wykorzystamy klasę z odpowiednimi metodami.

Zadanie 4b: Tworzenie postaci Tworzymy klasę postac. a) Składowe private: int zycie, obrazenia, l_ciosow oraz string imie. b) Metody public: UstawPostac(int życie, int obrazenia, int l_ciosow, string imię); UsunPostac() d) Stwórz zewnętrzną funkcję zaprzyjaźnioną void Walcz(postac &a, postac &b). Będzie ona odpowiedzialna za rozstrzygnięcie potyczki. Korzystając z referencji działamy bezpośrednio na naszych postaciach! Działanie funkcji Walcz: życie postaci a ma być równe różnicy jej życia oraz obrażeń zadanych przez postać b pomnożonych przez liczbę ciosów postaci b. życie postaci b ma być równe różnicy jej życia oraz obrażeń zadanych przez postać a pomnożonych przez liczbę ciosów postaci a. wstawiamy warunek if(a.zycie <= 0) to ustawiamy wartość życia tej postaci na 0 i wypisujemy na ekran, że postać a poległa (z wykorzystaniem komendy cout). wstawiamy warunek if(b.zycie <= 0) to ustawiamy wartość życia tej postaci na 0 i wypisujemy na ekran, że postać b poległa (z wykorzystaniem komendy cout).

Zadanie 4c: Interakcja z graczem a) Tworzymy funkcję void WypiszPostac() Działanie funkcji: Na ekran wypisujemy imie postaci a. Wypisujemy, ile zostało jej życia. Wypisujemy jakie zadanie obrażenia i ile zadaje ciosów, oraz łączną wartość obrażeń na turę. b) Przeciążamy funkcję UstawPostac: tworzymy nową funkcję void UstawPostac(), która nie przyjmuje żadnych argumentów Działanie funkcji: Na ekranie wypisujemy polecenie dla użytkownika, aby podał parametry postaci. Niech poda imie postaci. (cin >> a.imie;) Niech poda początkową wartość życia. Niech poda jakie zadaje obrażenia i ile zadaje ciosów na turę.

Zadanie 4d: Fragment maina int main() postac bohater; bohater.ustawpostac(100,30,2,"zenon Waleczny"); //tworzymy bohatera postac mobek; mobek.ustawpostac(50,5,1,"bazyliszek"); //tworzymy potwora Walcz(bohater,mobek); //tu rozgrywa sie bitwa //czesc dla zadnia 4c ---------> bohater.wypiszpostac(); // wypisujemy na ekran parametry bohatera mobek.wypiszpostac(); // wypisujemy na ekran parametry potwora Mobek.UstawPostac(); // nadajemy nowe parametry potworka Walcz(bohater,mobek); bohater.wypiszpostac(); mobek.wypiszpostac(); //czesc dla zadania 4c <---------return 0; }

Zadanie 4e: Rozbudowa programu Puść wodze fantazji! a) Stwórz kolejne funkcje / metody klasy i nadaj nowe opcje grze np. leczenie bohatera, zdobywanie poziomu postaci (dodatkowy parametr w klasie odpowiadający za doświadczenie??) i wiele innych! b) Wprowadź więcej tur podczas walki, np. aby walka rozgrywała się do momentu spadku życia postaci do poziomu <=0. Możesz to zrealizować wstawiając do operatorpętlę do-while. c) Wstaw całą grę w pętlę while(koniec), gdzie bool koniec = true. Jeśli w czasie gry chcesz ją zakończyć, to zmień wartość koniec na false. d) Stwórz w pętli interfejs użytkownika korzystając z switch! e) Dla bardziej wtajemniczonych: Temat może zostać rozwinięty o tematykę dziedziczenia. Można stworzyć nowe klasy dziedziczące po klasie postać. Sugerowane nowe klasy: bohater i potwor. Co więcej po klasie bohater mogą dziedziczyć nowe klasy np. wojownik, mag, druid, kaplan. NIECH PRZYGODA TRWA!!