Programowanie obiektowe i C++ dla matematyków

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

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

1 Podstawy c++ w pigułce.

Programowanie - wykład 4

1 Podstawy c++ w pigułce.

Programowanie w języku C++ Grażyna Koba

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

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

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

Programowanie Obiektowe i C++

1. Wypisywanie danych

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

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

Wstęp do programowania. Wykład 1

Programowanie komputerowe. Zajęcia 1

Wstęp do programowania

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

Programowanie proceduralne w języku C++ Pojęcia podstawowe - kod źródłowy

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

Część 4 życie programu

1. Wprowadzenie do C/C++

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

Podstawy Programowania.

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

Struktura pliku projektu Console Application

Podstawy Programowania

Programowanie I C / C++ laboratorium 01 Organizacja zajęć

ALGORYTMY I STRUKTURY DANYCH

1. Wprowadzenie do C/C++

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

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

3. Instrukcje warunkowe

Rekurencja. Przygotowała: Agnieszka Reiter

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

Podstawy Programowania

I - Microsoft Visual Studio C++

Podstawy Programowania. Wykład 1

Wstęp do informatyki- wykład 7

Programowanie obiektowe i C++ dla matematyków

Pytania sprawdzające wiedzę z programowania C++

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

Wstęp do programowania

Programowanie w języku Python. Grażyna Koba

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Utworzenie pliku. Dowiesz się:

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

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

Python jest interpreterem poleceń. Mamy dwie możliwości wydawania owych poleceń:

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

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

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

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

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

Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p.

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Część XV C++ Ćwiczenie 1

C++ - [1-3] Debugowanie w Qt Creator

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

LibreOffice Calc VBA

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Wstęp do informatyki- wykład 3 Pierwszy program w C++ Wyprowadzanie danych Deklaracja zmiennych

for (inicjacja_warunkow_poczatkowych; wyrazenie_warunkowe; wyrazenie_zwiekszajace) { blok instrukcji; }

for (inicjacja_warunkow_poczatkowych(końcowych); wyrazenie_warunkowe; wyrazenie_zwiekszajace(zmniejszające)) { blok instrukcji; }

Praktyka Programowania

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

1 Przygotował: mgr inż. Maciej Lasota

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

Programowanie obiektowe i C++ dla matematyków

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

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

PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW

Cw.12 JAVAScript w dokumentach HTML

Wstęp do Programowania 2

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Język C++ wykład VIII

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

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

#include <iostream> using namespace std; void ela(int); int main( ); { Funkcja 3. return 0; }

C++ wprowadzanie zmiennych

Wstęp do informatyki- wykład 9 Funkcje

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

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

Wstęp do programowania

Języki i metodyka programowania. Wprowadzenie do języka C

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Zadanie 2: Arytmetyka symboli

Programowanie proceduralne w języku C++ Podstawy

Wstęp do programowania

Wstęp do programowania

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

Podstawy programowania - 1

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

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

Wstęp do Programowania, laboratorium 02

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

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Wstęp. Opis programu :

Transkrypt:

Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 04 X 2011 Wszelkie uwagi, poprawki, braki czy sugestie najlepiej wysyłać na maila. 1. wprowadzenie do Linuksa: kompilacja i uruchamianie programów, korzystanie z dokumentacji; 2. pokazanie składni języka, prostego wczytywania i wypisywania za pomocą iostream; 3. przedstawienie paralel i różnic pomiędzy Pascalem i C/C++: możliwości deklarowania zmiennych w różnych miejscach, a niekoniecznie zaraz na początku bloku jak w Pascalu; konieczne nawiasy w warunkach oraz && i jako analogie do pascalowych and i or logicznych; wygląd pętli for i while; deklarowanie i używanie funkcji; o przestrzeniach nazw i pomocniczym stosowaniu using namespace std; w krótkich programach; o kilku dobrych manierach dotyczących programowania znaczące nazwy zmiennych, wcięcia w kodzie źródłowym, nieprogramowanie metodą kopiuj-wklej; 4. przykłady z silnią i liczbami Fibonnacciego: implementacje pętlowe (for i while w przypadku silni); implementacje rekurencyjne i związane z tym problemy (warunek stopu, wykładniczy czas działania w liczbach Fibonnacciego); Przydatne linki: http://mst.mimuw.edu.pl/lecture.php?lecture=poc http://www.cplusplus.com/ http://www.kernel.org/doc/documentation/codingstyle całkiem sensowny styl programowania w C 1

1 Powłoka systemowa i kompilacje Poleceniem g++ w terminalu kompilujemy program, np: $ g++ mojprogram.cpp Jeśli nie będzie błędów, spowoduje to wygenerowanie pliku wykonywalnego a.out. Uruchamiamy go w następujący sposób: $./a.out Można też powiedzieć kompilatorowi, żeby wygenerował plik wykonywalny o nazwie innej niż domyślna: $ g++ -o uruchom_mnie mojprogram.cpp Teraz mamy plik wykonywalny uruchom_mnie, który odpalamy $./uruchom_mnie 1.1 Edytory Fajnym edytorem jest kate, zwłaszcza jak się włączy w nim kolorowanie składni (Tools Highlighting Sources C++) i automatyczne wcinanie kodu (Tools Indentation C Style). Te opcje można też bardziej permanentnie ustawić po zanurkowaniu w konfigurację. Edytor kate ma też wbudowany terminal konsole, z poziomu którego można od razu kompilować i uruchamiać programy. Wkrótce będziemy też korzystać z jakiegoś większego zintegrowanego środowiska programistycznego: NetBeans, KDevelop (polecany dla użytkowników kate), Eclipse... 2 Wczytywanie i wypisywanie Prosty program wypisujący napis na standardowe wyjście: 003 int main() { 005 std::cout << "hello"; 006 return 0; 007 } Program robiący to samo, ale zapisujący po drodze napis do zmiennej typu string: #include <string> 003 int main() 005 { 006 std::string napis = "hello"; 007 std::cout << napis; 2

008 return 0; 009 } Program wczytujący jedną liczbę ze standardowego wejścia i wypisujący ją: 003 int main() { 005 int x; 006 std::cin >> x; 007 std::cout << x; 008 return 0; 009 } Co się stanie, jeśli podana zostanie nie liczba, a jakiś śmieć? 2.1 Technikalia cout to Console OUTput, cin to Console INput. Elementy biblioteki standardowej C++ znajdują się w tzw. przestrzeni nazw (ang. namespace) nazwanej std, stąd konieczność pisania std:: przed każdym użyciem typów i funkcji biblioteki standardowej. Trochę to uciążliwe w małych, ćwiczebnych programach, więc uprościmy sobie życie włączając całą przestrzeń nazw std: 007 int x; 008 cin >> x; 009 cout << x; 010 return 0; 011 } W poważnych projektach to nie jest dobra praktyka i nie należy pochopnie tego robić (do zastanowienia dlaczego?). Wypisywanie specjalnych znaków, takich jak przejście do nowego wiersza, uzyskuje się za pomocą mechanizmu znaku ucieczki (ang. escape symbol), którym w C i C++ jest backslash: przejście do nowego wiersza (newline): \n znak tabulacji: \t wypisanie backslasha: \\ Komentarze w kodzie można wstawiać na dwa sposoby: podwójnym znakiem slasha // uzyskujemy komentarz działający do końca wiersza, 3

komentarz rozpinający dowolnie długi blok tekstu można umieścić w bloku /*... */. Takich komentarzy nie należy zagnieżdżać. 3 Obliczenia arytmetyczne Poniższy program wczytuje dwie liczby całkowite i wykonuje na nich różne obliczenia, wypisując wynik na standardowe wyjście. 007 int a, b; 008 009 cin >> a >> b; 010 cout << a << " + " << b << " = " << a + b << "\n"; 011 cout << a << " - " << b << " = " << a - b << "\n"; 012 //dzielenie całkowitoliczbowe - odpowiednik pascalowego div 013 cout << a << " / " << b << " = " << a / b << "\n"; 014 //reszta z dzielenia - odpowiednik pascalowego mod 015 cout << a << " % " << b << " = " << a % b << "\n"; 016 017 return 0; 018 } 3.1 Silnia Ustalmy, że silnia z liczby naturalnej n zdefiniowana jest następująco: { 1 dla n = 0 n! = n (n 1)! dla n > 0 Program obliczający silnię wprost z definicji (rekurencyjnie) mógłby wyglądać tak: 005 int silnia(int arg) 007 if (arg == 0) 008 return 1; 009 else 010 return arg * silnia(arg - 1); 4

011 } 012 013 int main() 014 { 015 int n; 016 cin >> n; 017 cout << silnia(n) << "\n"; 018 return 0; 019 } natomiast implementacja iteracyjna może wyglądać tak (pętla for): 007 int n, silnia = 1; 008 cin >> n; 009 for (int i = 2; i <= n; ++i) 010 silnia = silnia * i; 011 cout << silnia << "\n"; 012 return 0; 013 } albo tak (pętla while): 007 int n, silnia = 1; 008 cin >> n; 009 010 int i = 2; 011 while (i <= n) { 012 silnia = silnia * i; 013 i = i + 1; 014 } 015 cout << silnia << "\n"; 016 017 return 0; 018 } 5

Co się stanie, jeśli podamy na wejściu jakiegoś śmiecia albo liczbę ujemną? Czy program zakończy swoje działanie kiedyś? Jeśli tak, to kiedy i od czego to zależy? Czy wyniki dla n 13 są poprawne i dlaczego nie? Uwaga! W językach z rodziny C przypisanie wykonuje się pojedynczym znakiem równości, zaś porównanie podwójnym! Widać to w przykładzie rekurencyjnego obliczania silni. 3.2 Liczby Fibonacciego Definiujemy F ib 0 = 0, F ib 1 = 1 i F ib n = F ib n 1 + F ib n 2 dla n > 1. Implementacja rekurencyjna: 005 int fibonacci(int n) 007 if (n == 0) 008 return 0; 009 if (n == 1) 010 return 1; 011 return fibonacci(n - 1) + fibonacci(n - 2); 012 } 013 014 int main() 015 { 016 int n; 017 cin >> n; 018 cout << fibonacci(n) << "\n"; 019 return 0; 020 } i iteracyjna: 005 int fibonacci(int n) 007 if (n == 0) 008 return 0; 009 if (n == 1) 010 return 1; 011 012 int a = 0, b = 1, c; 013 for (int i = 2; i <= n; ++i) { 6

014 c = a + b; 015 a = b; 016 b = c; 017 } 018 return c; 019 } 020 021 int main() 022 { 023 int n; 024 cin >> n; 025 cout << fibonacci(n) << "\n"; 026 return 0; 027 } Porównaj czas działania obu programów dla n = 40, 41, 42,... Dlaczego wersja rekurencyjna jest dużo wolniejsza? 7