1 / 48

Podstawy informatyki 2013/2014

Podstawy informatyki 2013/2014. Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka. Prowadzący. dr Danuta Szeliga mgr inż. Łukasz Sztangret Budynek B4 pokój 207A szt@agh.edu.pl

hateya
Télécharger la présentation

Podstawy informatyki 2013/2014

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Podstawy informatyki2013/2014 Łukasz SztangretKatedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiałyDanuty Szeligi i Pawła Jerzego Matuszyka

  2. Prowadzący dr Danuta Szeliga mgr inż. Łukasz Sztangret Budynek B4 pokój 207A szt@agh.edu.pl home.agh.edu.pl/~szt Konsultacje: poniedziałek 13.15 – 13.45 piątek 13.00 – 14.00

  3. Zasady zaliczenia Wykład: • Wykłady są nieobowiązkowe. • Wykłady będą udostępniane na stronie na licencji CreativeCommons: Uznanie autorstwa, Na tych samych warunkach 3.0 Egzamin: • Do egzaminu może przystąpić wyłącznie osoba, która otrzymała zaliczenie z przedmiotu. • Student ma prawo do trzykrotnego przystąpienia do egzaminu w zaplanowanych terminach, w tym jeden raz w terminie podstawowym i dwa razy w terminie poprawkowym. Nieusprawiedliwiona nieobecność na egzaminie w danym terminie powoduje utratę tego terminu (brak zaliczenia nie jest usprawiedliwieniem nieobecności). • Usprawiedliwienie nieobecności na egzaminie jest możliwe tylko w terminie do dwóch tygodni od daty egzaminu, ale przed kolejnym terminem. • Termin zerowy – do ustalenia. Ocena końcowa: • Ocena końcowa jest średnią ważoną oceny z zaliczenia z wagą 0.4 i oceny z egzaminu z wagą 0.6, przy czym oceny niedostateczne z zaliczenia i egzaminu są uwzględniane z wagami odpowiednio 0.1 i 0.15.

  4. Literatura 1. Jerzy Grębosz Symfonia C++ standard Rozdziały: • Startujemy • Instrukcje sterujące • Typy • Operatory • Funkcje • Preprocesor • Tablice • Wskaźniki • Przeładowanie nazwy funkcji • Biblioteczna klasa std::string do operacji z tekstami • Struktury, unie, pola bitowe • Operacje wejścia/wyjścia (fragmenty)

  5. Literatura 2. Jerzy Grębosz Pasja C++ Rozdziały: • Szablony funkcji – wiadomości wstępne • Szablon funkcji – oglądany z zewnątrz • Zaglądamy do ciała szablonu - specjalizacja • Krótki, ale za to nudny rozdział kończący • Obsługa sytuacji wyjątkowych • Odwikłanie stosu • Gdy nikt nie złapie wyjątku • O wyjątkach uwagi ogólniejsza 3. Bruce EckelThinkingin C++ 4. BjarneStroustrupJęzyk C++ 5. Dawid HarelRzecz o istocie informatyki

  6. INFORMATYKA • Informatyka (ang. computer science, computing science, information technology, informatics) - ogół dyscyplin naukowych i technicznych zajmujących się informacją, a w szczególności jej komputerowym przetwarzaniem. • Obejmuje: • teorie informatyczne • budowanie systemów informacyjnych, w tym programowanie • budowanie i działanie sprzętu informatycznego • zastosowanie metod informatycznych w różnych dziedzinach działalności ludzkiej • Termin informatyka został zaproponowany przez Romualda Marczyńskiego (1968, Zakopane, ogólnopolska konferencja poświęconej maszynom matematycznym) na wzórfr. informatique i niem. informatik.

  7. ALGORYTM • Algorytm (intuicyjnie) jest to sposób postępowania, przepis, proces, metoda, technika, procedura. • Algorytm (precyzyjnie) jest to skończony zbiór reguł wskazujący kolejność operacji dla rozwiązania problemu danego typu. • Algorytmika – dział wiedzy zajmujący się badaniem algorytmów

  8. Istotne cechy algorytmu • Definicja zadania = co algorytm ma zrobić • Opis ciągu czynności, które po kolei mają być wykonane • Czynności te muszą być na tyle proste (i możliwe do wykonania), aby wykonawca algorytmu mógł je bez dodatkowego tłumaczenia, wykonać (operacje elementarne, odpowiednio dobrany poziom szczegółowości) • Skończona liczba operacji elementarnych (skończony czas działania) • Algorytm dostaje pewne informacje (dane wejściowe) i zwraca pewne (oczekiwane) wyniki — dane wyjściowe • Może istnieć kilka algorytmów, które dają w wyniku te same wyniki

  9. Sposoby zapisu algorytmu • słowami • za pomocą schematu blokowego • w pseudokodzie – połączenie opisu słownego z implementacją • w jednym z języków programowania

  10. Schemat blokowy Schemat blokowy(block diagram, flowchart) to diagram, na którym algorytm jest reprezentowany przez opisane figury geometryczne, połączone liniami zgodnie z kolejnością wykonywania czynności wynikających z przyjętego algorytmu rozwiązania zadania. Pozwala dostrzec istotne etapy algorytmu i logiczne zależności między nimi.

  11. Schemat blokowy • strzałka wskazuje kierunek przebiegu sterowania programem, łączy inne bloki • operand (prostokąt) — wszystkie operacje z wyjątkiem instrukcji wyboru • predykat (romb) — instrukcja wyboru • etykieta (owal) — początek lub koniec sekwencji schematu • wejście/wyjście (równoległobok) y=x+1 TAK x>5 NIE START Wprowadź x oraz y

  12. Algorytm Euklidesa • Algorytm Euklidesa — chronologicznie pierwszy nietrywialny algorytm • Problem: mając dane dwie liczby naturalne a i b znaleźć ich największy wspólny dzielnik • Pierwotnie problem ten sprowadzał się do czysto geometrycznego problemu znalezienia wspólnej miary dla dwóch odcinków • Zadanie algorytmiczne: Dane: a; b  N, Wynik: NWD(a,b).

  13. Algorytm Euklidesa • Opis słowny: • Dane są dwie liczby a i b. • Jeśli a jest równe b, to NWD jest równy a, w przeciwnym wypadku, jeśli a jest większe od b, weź a = a - b, a jeżeli a jest mniejsze od b weź b = b – a. • Zacznij od początku. • Schemat blokowy:

  14. Paradygmat programowania Paradygmat programowania jest to: • zbiór koncepcji reprezentujących podejście do implementacji algorytmów, • zbiór mechanizmów, jakich programista używa, pisząc program i o to, jak ów program jest następnie wykonywany przez komputer.

  15. Programowanie proceduralne • Programowanie proceduralne to paradygmat programowania zalecający dzielenie kodu na procedury (funkcje),czyli fragmenty wykonujące ściśle określone operacje. • Kładziony jest nacisk na: • modularność: wejścia procedur są opisywane syntaktycznie jako argumenty, a wyjścia jako wartości zwracane • ograniczanie kontekstu: procedury nie powinny korzystać ze zmiennych globalnych (w miarę możliwości), lecz wykorzystywać zmienne lokalne

  16. Jak powstaje program komputerowy? Gdybym miał problem, od którego zależało by moje życie i tylko jedną godzinę na jego rozwiązanie, spędziłbym 40 minut na jego analizie, 15 minut na ponownym badaniu i 5 minut na rozwiązaniu go. Albert Einstein Pisanie programu to nie tylko pisanie kodu źródłowego w komputerze! Cykl wytwarzania oprogramowania: • sformułowanie problemu – analiza (25%), • skonstruowanie algorytmu (25%), • „pisanie programu” (20%), • uruchamianie i testowanie programu (30%).

  17. Styl programowania • Programy mają być czytane przez ludzi. • Stosuj komentarze wstępne i wyjaśniające. • Komentarz – to nie parafraza instrukcji. • Stosuj odstępy do poprawienia czytelności. • Używaj dobrych nazw mnemonicznych (funkcje, typy, zmienne). • Pisz jedną instrukcję w wierszu. • Stosuj wcięcia do uwidocznienia struktury programu.

  18. Wcięcia w strukturze programu intmain() { int i; for(i=0; i<10; i=i+1) { cout<<i<<endl; } cout<<i<<endl; } intmain() { int i; for(i=0; i<10; i=i+1) { cout<<i<<endl; } cout<<i<<endl; } intmain(){inti;for(i=0;i<10;i=i+1){cout<<i<<endl;}cout<<i<<endl;}

  19. Komentarze // tylko jedna linia komentarza /* komentarz, który ma wiele linijek*/ Komentarze typu /*…*/ nie mogą się zagnieżdżać, czyli: /* jakiś tam komentarz /* i jeszcze jeden*/ */ - BŁĄD

  20. plik źródłowy *.cpp z napisanym w języku C++ kodem plik tekstowy kompilacja + linkowanie plik wynikowy *.exe skompilowany zrozumiały dla komputera Kompilacja programu • Kompilator – program tłumaczący instrukcje języka C++ na język maszyny. • Linker – program łączący skompilowane części programu z bibliotekami.

  21. Wypisywanie tekstu na ekranie #include<iostream> usingnamespacestd; intmain() { cout<<"AGH"<<endl; } "AGH" – stała tekstowa endl – manipulator oznaczający przejście do nowej linii << - operator przesunięcia bitowego cout – obiekt klasy ostream

  22. Zmienne Zmienne służą do przechowywania wartości, znaków, słów, … Deklaracja – informuje kompilator że dana nazwa reprezentuje obiekt jakiegoś typu, np.: externint a; Definicja – dodatkowo rezerwuje miejsce w pamięci, np.: int a; Inicjalizacja – definicja + przypisanie wartości, np.: int a = 5;

  23. Nazwy zmiennych Nazwa zmiennej może być dowolnie długim ciągiem liter, cyfr oraz znaków podkreślenia, przy czym: • nie może zaczynać się od cyfry, • rozróżniane są duże i małe litery, • nie może być słowem kluczowym.

  24. Słowa kluczowe

  25. cin #include<iostream> usingnamespacestd; intmain() { int a; cout<<"Podajliczbe"<<endl; cin>>a; cout<<"Podales liczbe "<<a<<endl; } cin – obiekt klasy istream, służy do wprowadzania informacji z klawiatury

  26. Stałe • Stałe będące liczbami całkowitymi • Zapis dziesiętny: 1 10 5 … • Zapis ósemkowy: 01 010 05 … 09 – BŁĄD • Zapis szesnastkowy: 0x1 0x10 0x5 0xf …

  27. Stałe • Stałe będące liczbami zmiennoprzecinkowymi: 1.2 10.5 5.1 … 2e4 3.2e-2 -5.2e2 …

  28. Stałe • Stałe znakowe: ‘a’ ‘x’ … Znaki specjalne \b cofacz \f nowa strona \n nowa linia \r powrót karetki \t tabulator poziomy \v tabulator pionowy \a sygnał dźwiękowy

  29. Stałe • Stałe tekstowe: ”Hello” ”Hi” … ‘a’ to nie to samo co ”a”

  30. Instrukcje sterujące • Instrukcje sterujące są to polecenia służące do sterowania przebiegiem programu. • W instrukcjach sterujących podejmowane są decyzje o wykonaniu tych czy innych instrukcji programu. • Decyzje te podejmowane są w zależności od spełnienia lub niespełnienia jakiegoś warunku (czyli od prawdziwości lub fałszywości jakiegoś wyrażenia).

  31. PRAWDA i FAŁSZ • C++ istnieje specjalny wbudowany typ danych określający zmienne logiczne (przyjmujące wartości prawda lub fałsz): bool • Zdefiniowane są dwie stałe: true i false • Wartość PRAWDA lub FAŁSZ ma każde, dowolnie skomplikowane wyrażenie. wartość zero = FAŁSZ każda inna = PRAWDA

  32. wyr Nie Tak wyr Nie Tak instr instr1 instr2 Instrukcja warunkowa if (1) if(wyr) instr; if(wyr) instr1; else instr2; • Wyrażenie to coś, co ma jakąś wartość: • obiekt lub • wyrażenie. • Zamiast jednej instrukcji może wystąpić blok instrukcji.

  33. Instrukcja if…else #include<iostream> using namespace std; intmain() { int a; cout << "Podajliczbe" << endl; cin >> a; if (a>0) cout << "Podalesliczbe dodatnia" << endl; else cout << „Podalesliczbe niedodatnia" << endl; } Wyrażenie

  34. Blok instrukcji • Często się zdarza, że chcemy wykonać warunkowo nie jedną, lecz kilka instrukcji. Stosujemy wówczas instrukcję składaną zwaną blokiem: { instr1; instr2; ... } • Po klamrze nie trzeba stawiać średnika! • Zróżnicowane wcięcia nie mają znaczenia dla kompilatora, ale ogromnie zwiększają czytelność kodu.

  35. Wybór wielowariantowy • Instrukcje warunkowe if...elsemożemy ze sobą łączyć – uzyskamy wtedy możliwość wyboru wielowariantowego. if (wyr1) instr1; elseif (wyr2) instr2; elseif (wyr3) instr3;

  36. Wybór wielowariantowy #include<iostream> using namespace std; intmain() { int a; cin>>a; if(a>0) cout<<"a jest dodatnie"<<endl; elseif(a==5) cout<<"a jest równe 5"<<endl; elseif(a<-2) cout<<"a jest mniejsze od -2"<<endl; }

  37. Nie Tak wyr instr Pętla while • Najpierw obliczana jest wartość wyrażenia wyr. • Jeśli wynik jest zerowy, wy-chodzimy z pętli. • Jeśli wartość wyrażenia jest niezerowa, wykonujemy instrukcję instr. • Instrukcję wykonujemy do-póki (while) wyrażenie ma wartość niezerową. • Uwaga: pętla może w ogóle nie wykonać się ani razu! while(wyr) instr; Wartość wyrażenia obliczana przed wykonaniem instrukcji!

  38. Pętla while #include<iostream> using namespace std; int main() { inti=0; while (i<10) { cout << i << endl; i=i+2; } } Wyrażenie Ciało pętli w nawiasach

  39. instr Tak Nie wyr Pętla do...while • Najpierw wykonywana jest instrukcja instr. • Następnie obliczana jest wartość wyrażenia wyr. • Jeżeli jest ono niezerowe, to zostanie powtórzone wy-konanie tej instrukcji. • Jeśli wynik jest zerowy, wy-chodzimy z pętli. • Uwaga: pętla wykona się co najmniej jeden raz! do instr; while(wyr); Wartość wyrażenia obliczana po wykonaniu instrukcji!

  40. Pętla do…while #include<iostream> using namespace std; int main() { inti=0; do { cout << i << endl; i=i+1; } while (i<10); } Początek pętli Wyrażenie Średnik!!!

  41. i_ini i_krok Tak wyr Nie tresc_petli Pętla for for(i_ini;wyr;i_krok) instr; • Na początku, jednorazowo, zawsze, wykonywana jest i_ini. • Następnie obliczana jest wartość wyrażenia wyr. • Jeśli wynik jest zerowy, wychodzimy z pętli. • Jeśli wartość wyrażenia jest nie-zerowa, wykonujemy instr, a potem i_krok. • Instrukcję wykonujemy dopóki wyrażenie wyr ma wartość niezerową. • Uwaga: pętla może w ogóle nie wykonać się ani razu, choć wykona się wtedy 1 raz i_ini. Wartość obliczana przed wykonaniem treści pętli!

  42. Pętla for • i_ini nie musi być jedną instrukcją – może być ich kilka, wtedy oddzielone są przecinkami. • Podobnie w wypadku i_krok. • W i_ini może pojawić się definicja obiektu. • i_ini, wyr lub i_krokmożna opuścić • Zapis: for ( ; ; ) { ... } oznacza pętlę nieskończoną.

  43. Pętla for #include<iostream> using namespace std; int main() { for (inti=0; i<10; i=i+1) cout << i << endl; } I II IV III

  44. Pętla for #include<iostream> using namespace std; int main() { for (int i=0; i<3; i=i+1) for (int j=0; j<2; j=j+1) cout << "i=" << i << "\t" << "j=" << j << endl; }

  45. Te same nazwy zmiennych intmain() { int a; … int a; } intmain() { int a; { int a; } } BŁĄD - redefinicja

  46. Te same nazwy liczników pętli intmain() { for(int i=0; i<3; i=i+1) for(int i=0; i<3; i=i+1) cout<<i<<endl; } 0 1 2 0 1 2 0 1 2

  47. Te same liczniki pętli i<5 intmain() { for(int i=0; i<3; i=i+1) for(i=0; i<3; i=i+1) cout<<i<<endl; } i<4 0 1 2 0 1 2 0 1 2 0 1 …

  48. Prezentacja udostępniona na licencji CreativeCommons: Uznanie autorstwa, Na tych samych warunkach 3.0. Pewne prawa zastrzeżone na rzecz autorów. Zezwala się na dowolne wykorzystywanie treści pod warunkiem wskazania autorów jako właścicieli praw do prezentacji oraz zachowania niniejszej informacji licencyjnej tak długo, jak tylko na utwory zależne będzie udzielana taka sama licencja. Tekst licencji dostępny jest na stronie: http://creativecommons.org/licenses/by-sa/3.0/deed.pl

More Related