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

Podobne dokumenty
Programowanie. Dariusz Wardecki, wyk. II. wtorek, 26 lutego 13

Wstęp do programowania, część I

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

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

Algorytm. a programowanie -

Algorytmy i struktury danych. Wykład 4

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

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. Wykład 1

Pracownia komputerowa. Dariusz Wardecki, wyk. V

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

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

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

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

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

Pracownia komputerowa

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 5. Karol Tarnowski A-1 p.

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

ALGORYTMY I STRUKTURY DANYCH

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!

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

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki

Funkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie.

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce.

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

Pytania sprawdzające wiedzę z programowania C++

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

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

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

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

Warunki i sposoby realizacji podstawy programowej kształcenia ogólnego w klasie IV i VII szkoły podstawowej z informatyki.

KARTA KURSU. Wstęp do programowania

KARTA PRZEDMIOTU. Egzamin / zaliczenie. Egzamin / zaliczenie. ocenę*

Największy wspólny dzielnik Algorytm Euklidesa (także rozszerzony) WZAiP1: Chińskie twierdzenie o resztach

EGZAMIN MATURALNY Z INFORMATYKI. 10 maja 2017 POZIOM ROZSZERZONY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Programowanie - wykład 4

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

4. Funkcje. Przykłady

Programowanie komputerowe. Zajęcia 1

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

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

( wykł. dr Marek Piasecki )

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

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

Podstawy Programowania

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

EGZAMIN MATURALNY 2011 INFORMATYKA

Podstawy Programowania

Proste programy w C++ zadania

WHILE (wyrażenie) instrukcja;

5. Rekurencja. Przykłady

Wstęp do informatyki- wykład 1

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Wstęp do programowania

WHILE (wyrażenie) instrukcja;

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

Zadanie 1. Test (6 pkt) Zaznacz znakiem X w odpowiedniej kolumnie P lub F, która odpowiedź jest prawdziwa, a która fałszywa.

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

Podstawowe algorytmy i ich implementacje w C. Wykład 9

1. Liczby wymierne. x dla x 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba)

Szczegółowy program kursów szkoły programowania Halpress

EGZAMIN MATURALNY Z INFORMATYKI

Funkcje i instrukcje języka JavaScript

Programowanie Proceduralne

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

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

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

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

Wstęp do programowania

Podstawy i języki programowania

3. Instrukcje warunkowe

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

Język C++ zajęcia nr 2

Podstawy Informatyki. Algorytmy i ich poprawność

Wstęp do informatyki- wykład 5 Instrukcja selekcji if-else Operatory arytmetyczne i logiczne

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

Wstęp do programowania

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

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

I - Microsoft Visual Studio C++

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

Wstęp do informatyki- wykład 1 Systemy liczbowe

Rekurencja (rekursja)

Jarosław Wróblewski Matematyka Elementarna, lato 2014/15

Wstęp do programowania, część II

Zadania do samodzielnego rozwiązania

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

Algorytmy, reprezentacja algorytmów.

Złożoność obliczeniowa zadania, zestaw 2

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

Sprzęt komputera - zespół układów wykonujących programy wprowadzone do pamięci komputera (ang. hardware) Oprogramowanie komputera - zespół programów

Jarosław Wróblewski Matematyka Elementarna, zima 2015/16

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

EGZAMIN MATURALNY Z INFORMATYKI 17 MAJA 2016 POZIOM PODSTAWOWY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I WYBRANE: Czas pracy: 75 minut

Transkrypt:

Wstęp do programowania Dariusz Wardecki, wyk. I

Kontakt dward@fuw.edu.pl http://www.fuw.edu.pl/~dward/wdp ul. Hoża 69, pok. 114 tel. 22 55 32 181

Zasady zaliczenia Wykład (2h/tydzień) Egzamin pisemny Test wyboru 15 pkt. Ćwiczenia (2h/tydzień) 3 kolokwia po 15 pkt. 3 zadania po 5 pkt. Łącznie można zdobyć max 60 pkt.

Materiał na ćwiczenia Algorytmy. Podstawy programowania w C++ Funkcja main(), nagłówek i treść funkcji Obsługa wej/wyj Wyrażenia i zmienne Pętle Programowanie prostych obliczeń Liczby pseudolosowe Formatowanie wydruków i drukowanie wzorów Tablice i sortowanie liczb Wskaźniki i referencje Wej/wyj z wykorzystaniem plików Złożone typy danych i ich zastosowanie

Plan wykładu Kod źródłowy w C++ i kompilator g++ Algorytmy Złożoność obliczeniowa algorytmów Składnia języka C++, elementy składowe programów Proste typy danych Operatory i wyrażenia, konwerscje typów danych Pętle, instrukcja warunkowa i instrukcje sterujące w C++ Wskaźniki i tablice, operacje na wskaźnikach, Referencje Dynamiczne rezerwowanie pamięci i zwalnianie pamięci Tablice wskaźników i argumenty programu Złożone typy danych i ich zastosowania

Dlaczego warto uczyć się programowania komputerów Żeby zobaczyć na czym to polega Jeżeli mamy nietypowe zadanie, to czasem szybciej jest napisać własny program, niż szukać gotowego Czasami musimy być pewni, że program działa w ściśle określony sposób Może to być interesujące Stanowiska pracy związane z programowaniem bywają dobrze płatne

Na czym polega programowanie? Określenie problemu (co chcemy osiągnąć). Wybranie algorytmu, czyli metody poszukiwania rozwiązania (jak będziemy to robić). Tworzenie kodu źródłowego (ang. source code), stanowiącego reprezentację wybranego algorytmu. Kompilowanie kodu źródłowego, czyli tworzenie kodu wykonywalnego (ang. executable code) gotowego do wykonania. Sprawdzanie i testowanie (ang. debugging) programu. Jeżeli znajdziemy błąd, wracamy do etapu tworzenia kodu źródłowego (lub nawet do etapu wyboru algorytmu)

Trochę historii język C - początek lat siedemdziesiątych, Dennis Ritchie język C++ - koniec lat osimdziesiątych, Bjarne Stroustrup

Kod źródłowy i kompilator #include<iostream> using namespace std; int main() { cout << Hello World!!! << endl; return 0; } g++ -o nazwa nazwa.cc./nazwa Kod źródłowy w pliku nazwa.cc Kompilator Program

Logowanie na Primusa ssh Dom primus.okwf.fuw.edu.pl putty ssh login@tempac.fuw.edu.pl ssh login@primus.okwf.fuw.edu.pl Kompilator: g++ Edytor: nano, pico

Kod źródłowy Polecenie preprocesora #include<iostream> using namespace std; Przestrzeń nazw Funkcja main int main() { cout << Hello World!!! << endl; return 0; } Instrukcje

Algorytm SkoÒczony zbiór dobrze zdefiniowanych instrukcji przeznaczony do wykonania okreúlonego zadania, który przy ustalonym stanie poczπtkowym pozwala na uzyskanie odpowiedniego, rozpoznawalnego stanu koòcowego w skoòczonym czasie. W uproszczeniu Metoda poszukiwania (lub tworzenia) rozwiπzania zadanego problemu. Nie dla kaødego problemu istnieje skuteczny algorytm pozwalajπcy znaleüê rozwiπzanie. Problemy nieobliczalne (algorytm nie istnieje, np. busy beaver). Problemy, dla których algorytmy sπ zbyt z oøone (wykonywanie programu trwa oby zbyt d ugo).

Stan poczπtkowy dla algorytmu Dane wejúciowe (ang. input data). Stan koòcowy dla algorytmu Wynik (ang. result). Definicja poprawnoúci algorytmu Algorytm jest poprawny (ang. correct), gdy dla kaødych dopuszczalnych danych wejúciowych jednoczeúnie spe nione sπ dwa nastípujπce warunki: 1 Wynik jest otrzymywany w skoòczonej liczbie kroków problem zatrzymania (stopu). 2 Wynik stanowi rozwiπzanie problemu, dla którego algorytm zosta stworzony.

Przykłady: Oblicznie reszty z dzielenia (operacja modulo) Algorytm Euklidesa Sito Eratostenesa Dodawanie liczb w systemie dwójkowym Uniwersalny algorytm mnożenia (russian peasant algorithm) Przeszukiwanie binarne (ang. binary search) lub bisekcja (ang. bisection)

Obliczanie reszty z dzielenia niech n i m będą liczbami naturalnymi, n > m 1.Niech k = n 2.Jeśli k < m, to k jest resztą z dzielenia, k = n%m 3.Niech k = k - m 4.Przejdź do kroku 2

Algorytm Euklidesa Algorytmy Niech n i m będą liczbami nauralnymi, n > m. Wyznaczamy największy wspólny dzielnik n i m, czyli NWD(n, m) Obserwacja Jeśli r jest resztą z dzielenia n przez m, to n = km + r (dla pewnego całkowitego k), więc NWD(n, m) = NWD(m, r)

Algorytm Euklidesa Algorytmy Niech a, b i r będą miejscami do przechowywania wyników 1.Niech a = n i b = m. 2.Niech r = a%b (resztę z dzielenia a/b zapisujemy w r). 3.Jeśli r = 0, to NWD(n, m) = b. 4.Niech a = b i b = r. 5.Przejdź do kroku 2.

Sito Eratostenesa - chcemy ustalić, które z liczb naturalnych nie większych od zadanego N są liczbami pierwszymi. A = {2,3,, N}, k i m - miejsca do przechowywania pośrednich wyników 1) Niech k = 2 2) Jeśli k² > N, zbiór A zawiera tylko liczby pierwsze 3) Usuwamy z A wszystkie wielokrotności k, począwszy od k² 4) W m zapisz najmniejszą liczbę ze zbioru A większą od k. 5) Niech k = m. 6) Przejdź do kroku 2).

Dodawanie liczb w systemie dwójkowym a b c 0 0 0 1 0 1 0 1 1 1 1 10 1 1 0 1 1 0 1 0 1 1 1 0 1 1 0 1 1

Mamy dwie liczby N-cyfrowe w zapisie dwójkowym: a = N 1 X a j 2 j b = N 1 X b j 2 j j=0 j=0 gdzie a j,b j 2 {0, 1} są cyframi. Chcemy wyznaczyć współczynniki (cyfry) w j 2 {0, 1} w rozwinięciu ich sumy. a + b = w = NX j=0 w j 2 j dla danych oraz. a j b j

Dodawanie liczb w systemie dwójkowym Wprowadzamy funkcje: PAR(x, y, z) =(x + y + z) %2 MAJ(x, y, z) =(x + y + z)/2 gdzie x, y, z œ {0, 1}, aznak/ oznacza dzielenie z pominiíciem reszty. Definiujemy ciπg c 0 = 0, c j = MAJ(a j 1, b j 1, c j 1 ) dla j = 1, 2,...,N. Wtedy c j jest przeniesieniem (ang. carry) z pozycji (j 1) na pozycjí j podczas dodawania, wiíc mamyw N = c N oraz w j = PAR(a j, b j, c j ) dla j = 0, 1,...,N 1.

Algorytm dodawania Niech C bídzie miejscem s uøπcym do przechowywania poúrednich wartoúci, natomiast k bídzie licznikiem. 1 Niech C = 0, k = 0. 2 Niech w k = PAR(a k, b k, C). 3 Niech C = MAJ(a k, b k, C). 4 Niech k = k + 1. 5 Jeúli k < N, przejdü do kroku 2. 6 Niech w N = C. 7 Ciπg cyfrw 0, w 1, w 2,...,w N stanowi wynik.

Uniwersalny algorytm mnożenia Russian peasant algorithm Obliczamy wynik mnoøenia dwóch nieujemnych liczb ca kowitych a i b: 1 Niech a 0 = a, b 0 = b i k = 0. 2 Niech k = k + 1. 3 Niech a k = a k 1 /2 (dzielenie bez reszty) i b k = 2b k 1. 4 Jeúli a k > 1, to przejdü do kroku 2. 5 Wynik mnoøenia jest sumπ wszystkich b k (k = 0, 1, 2,...), dla których odpowiadajπce im a k sπ nieparzyste.

Uniwersalny algorytm mnożenia Obliczamy iloczyn 156 18 1 Wyznaczamy ciπgi a k i b k : k a k b k 0 156 18 1 78 36 2 39 72 3 19 144 4 9 288 5 4 576 6 2 1152 7 1 2304 2 156 18 = 2304 + 288 + 144 + 72 = 2808

Uniwersalny algorytm mnożenia Obliczamy iloczyn 156 18 1 Moøna sumowaê na bieøπco k a k b k s k 0 156 18 0 1 78 36 0 2 39 72 72 3 19 144 216 4 9 288 504 5 4 576 504 6 2 1152 504 7 1 2304 2808 2 156 18 = s 7 = 2808

Uniwersalny algorytm mnożenia Obliczamy iloczyn dwóch nieujemnych liczb ca kowitych a i b Niech A, B i S bídπ miejscami s uøπcymi do przechowywania poúrednich wyników. 1 Niech A = a, B = b i S = 0. 2 Jeúli A % 2 = 1 (wartoúê w A jest nieparzysta), to S = S + B. 3 Jeúli A = 1, przejdü do kroku 6. 4 Niech A = A/2 (dzielenie bez reszty) i B = 2B. 5 Przejdü do kroku 2. 6 Wynik mnoøenia jest zapisany w S.

Przeszukiwanie binarne (bisekcja) Poszukiwanie elementu r w skoòczonym i uporzπdkowanym zbiorze B 1 Niech B 0 = B i k = 0. 2 Jeúli wszystkie elementy zbioru B k sπ jednakowe lub B k jest zbiorem pustym, przejdü do kroku 6. 3 Niech m k oznacza medianí zbioru B k. 4 Jeúli r m k,toniechb k+1 = {b œ B k : b m k },awprzeciwnym wypadku niech B k+1 = {b œ B k : b > m k }. 5 Niech k = k + 1 i przejdü do kroku 2. 6 Jeúli r œ B k,tor œ B.

Przeszukiwanie binarne (bisekcja) - przykład Weümy B = {3, 7, 21, 48, 56, 122, 141, 218, 225, 248} i r = 225 k B k m k 0 {3, 7, 21, 48, 56, 122, 141, 218, 225, 248} 56 1 {122, 141, 218, 225, 248} 218 2 {225, 248} 225 3 {225} 225