PODSTAWY INFORMATYKI wykład 1. Adrian Horzyk Web: http://home.agh.edu.pl/~horzyk/ E-mail: horzyk@agh.edu.pl Google: Adrian Horzyk Gabinet: paw. D13 p. 325 Akademia Górniczo-Hutniacza w Krakowie WEAIiE, Katedra Automatyki http://www.agh.edu.pl Mickiewicza Av. 30, 30-059059 Cracow, Poland
Czym będziemy się zajmować? Pojęcia dotyczące informatyki i programowania Język programowania Pascal i styl programowania Systemy kodowania liczb i konwersje Błędy obliczeniowe, zaokrągleń i ich eliminacja Struktury danych zalety i wady, wykorzystanie i dobór Modelowanie świata i projektowanie rozwiązań Algorytmy operujące na różnych strukturach danych Sortowanie i wyszukiwanie danych Badanie i wyznaczanie złożoności algorytmów Efektywność i złożoność obliczeniowa i pamięciowa Kierunki rozwoju informatyki: Sztuczna inteligencja i biocybernetyka Lingwistyka komputerowa Bazy i hurtownie danych Szyfrowanie i kryptografia Sieci komputerowe i Internet Wykład 1. Strona 2.
Zasady zaliczenia przedmiotu 1. Obecność na wykładach i laboratoriach obowiązkowa 2. Kolokwium w 2. połowie semestru na laboratoriach 3. Projekty zaliczeniowe w Pascalu na laboratoriach 4. Egzamin pisemny na ostatnim wykładzie Punktacja, oceny i zwolnienia 10 pkt - kolokwium 10 pkt - projekty zaliczeniowe 2 pkt - wykonanie projektów zaliczeniowych w sposób wyjątkowy 21 22 pkt 6,0 (cel) zwolniony z egzaminu 19 20 pkt 5,0 (bdb) zwolniony z egzaminu 17 18 pkt 4,5 (+db) 15 16 pkt 4,0 (db) 13 14 pkt 3,5 (+dst) 11 12 pkt 3,0 (dst) 0 10 pkt 2.0 (ndst) Wykład 1. Strona 3.
Pojęcia podstawowe: informatyka i algorytm Informatyka to dziedzina nauki i techniki zajmująca się ogółem zagadnień automatyzacji przetwarzania informacji. Algorytm to pewien przepis (opis sposobu) wykonania określonego zadania lub rozwiązania problemu wyrażony za pomocą skończonego uporządkowanego ciągu jasno zdefiniowanych operacji, które wykonawca (np. komputer) rozumie i potrafi wykonać. Algorytm opisuje (krok po kroku) sposób przekształcania danych wejściowych w dane wyjściowe zgodnie z celem zadaniem. Algorytm opisuje obiekty, na których są wykonywane działania realizujące postulaty zadania, uwzględniając kolejność ich wykonywania. Działania algorytmu zapisane w pewnej określonej kolejności nazywamy krokami algorytmu. Wykład 1. Strona 4.
Przykład algorytmu Przykład: Obsługa automatycznego garażu wielopoziomowego: Dane wejściowe: c = ciężar samochodu Wynik: n = numer poziomu lub brak miejsca (n=0) Algorytm: (1) Zważ samochód na automatycznej wadze, ciężar c ; krok (2) (2) Jeśli c > 10 T to krok (6), inaczej krok (3) (3) Jeśli c > 5 T to krok (5), inaczej krok (4) (4) Jeśli jest miejsce na poziomie III to "WJEDŹ NA POZIOM III"; zmniejsz liczbę miejsc na poziomie III; STOP, inaczej krok (5) (5) Jeśli jest miejsce na poziomie II to "WJEDŹ NA POZIOM II"; zmniejsz liczbę miejsc na poziomie II; STOP, inaczej krok (6) (6) Jeśli jest miejsce na poziomie I to "WJEDŹ NA POZIOM I"; zmniejsz liczbę miejsc na poziomie I; STOP, inaczej krok (7) (7) "NIESTETY BRAK MIEJSCA" ; STOP Wykład 1. Strona 5.
Pojęcia podstawowe: program i programowanie Program opisuje proces przekształcania danych wejściowych w dane wyjściowe według pewnego algorytmu. Program zapisywany jest w języku programowania (np. PASCAL, C, JAVA, BASIC, FORTRAN, ASEMBLER) w postaci ciągu instrukcji ściśle według reguł i składni danego języka programowania. Dane wejściowe są dostarczane do programu przez użytkownika lub inny program czy też urządzenie wejściowe. Dane wyjściowe generowane są przez program i stanowią wyniki działania programu. Programowanie polega na zapisywaniu algorytmów w formie programów zrozumiałych dla komputera. Programowanie to proces projektowania, tworzenia, testowania, modyfikowania i utrzymania kodu źródłowego programów. Wykład 1. Strona 6.
Języki programowania Język programowania to zbiór zasad i reguł syntaktycznych i semantycznych, które opisują z wykorzystaniem specyficznych ciągów symboli, jak należy zbudować wyrażenia, żeby je komputer mógł poprawnie zinterpretować i wykonać. Program zapisany w języku programowania nazywamy kodem źródłowym w danym języku programowania. PASCAL jest to język strukturalny wyższego poziomu, który umożliwia zapis algorytmów i ich kompilację na postać zrozumiałą przez komputer, którą nazywany kodem maszynowym. Pascal powstał na bazie Algola, który ewoluował z Fortranu. Obecny język Delphi bazuje na Pascalu. Kod źródłowy w danym języku programowania podlega dalszej translacji do kodu maszynowego danego komputera lub do kodu języka pośredniego albo też może być na bieżąco interpretowany w trakcie jego wykonywania. Proces zamiany kodu źródłowego na kod maszynowy lub kod języka pośredniego nazywamy kompilacją dokonywaną przed uruchomieniem programu. Proces zamiany kodu źródłowego lub kodu języka pośredniego na kod maszynowy w trakcie wykonywania programu nazywamy interpretacją kodu. Wykład 1. Strona 7.
Język programowania PASCAL Rozróżniamy następujące instrukcje: procedury, funkcje, przypisania, puste, skoku, sekwencji, warunkowe, wyboru, iteracyjne, pętli, wiążące. Instrukcje procedury Nazwa_procedury; Nazwa_procedury ( <LISTA_PARAMETRÓW_AKTUALNYCH> ); Przykłady: Exit; Writeln ('Dzień dobry' ); Readln ( dzien, miesiac, rok ); Write ( 'liczba przykladow = ',n ); Assign ( plik, 'dane.txt' ); UWAGA! Liczba, kolejność i typy parametrów muszą być zgodne z definicją procedury. Wykład 1. Strona 8.
Instrukcje przypisania Nazwa_zmiennej := <WYRAŻENIE>; Nazwa_funkcji := <WYRAŻENIE>; Przykłady: srednia := (a+b)/2; dataur.miesiac := 5; wektor[1] := wektor_roboczy; nwd := c; klasa[1].uczen.nazwisko := 'Jan'+' '+'Nowak ; UWAGA! Typ wyrażenia musi być zgodny z typem zmiennej. Instrukcja pusta Przykłady:... IF <WARUNEK> THEN {*} ELSE <INSTRUKCJA>...... REPEAT {*} UNTIL...... BEGIN {*} ; {*} ; {*}... UWAGA! W miejscach oznaczonych {*} występuje instrukcja pusta. Wykład 1. Strona 9.
Instrukcja skoku GOTO <ETYKIETA> Przykład: LABEL 13; { deklaracja etykieta numer 13 }... { Deklaracja, skok i instrukcja } GOTO 13; { etykietowana muszą znajdować }... { się w tym samym bloku. } 13 : <INSTRUKCJA>; {etykieta miejsce skoku} UWAGA! Nie należy używać bez wyraźnej potrzeby! Zaburza dobry styl programowania! { komentarz } znaki komentarza w PASCALu Wykład 1. Strona 10.
Instrukcja sekwencji BEGIN <CIĄG_INSTRUKCJI> <CIĄG_INSTRUKCJI> <INSTRUKCJA> <CIĄG_INSTRUKCJI> <CIĄG_INSTRUKCJI>; <INSTRUKCJA> Przykład: BEGIN Write('podaj dwie liczby calkowite '); Readln(a,b); c:=a+b; Writeln(a,'+',b,'=',c) { brak średnika przed end! } Instrukcje w języku programowania PASCAL oddzielamy średnikiem poza pewnymi wyjątkami! Wykład 1. Strona 11.
Instrukcje warunkowe IF <WARUNEK> THEN <INSTRUKCJA> IF <WARUNEK> THEN <INSTRUKCJA> ELSE <INSTRUKCJA> Przykłady: IF x<0 THEN x:=-x; { to samo, co x:=abs(x) } IF c>d THEN c:=c-d ELSE d:=d-c; IF delta>0 THEN BEGIN x1 := (-b-sqrt(delta))/(2*a); {Sqrt oblicza pierwiastek} x2 := (-b+sqrt(delta))/(2*a) ELSE IF delta=0 THEN x1 := -b/2/a {Uwaga na zagnieżdżanie!} ELSE {nic nie rób} 1) x:=0; IF a>b THEN BEGIN IF c>a THEN x:=5 ELSE x:=2 ; 2) x:=0; IF a>b THEN BEGIN IF c>a THEN x:=5 ELSE x:=2; 3) x:=0; IF a>b THEN IF c>a THEN x:=5 ELSE x:=2 ; a b c 1) x 2) x 3) x 7 6 8 5 5 5 7 6 4 2 0 2 6 7 8 0 2 0 Wykład 1. Strona 12.
Instrukcja wyboru CASE <WYRAŻENIE> OF <SEKW.INSTR.WYB.> <SEKW.INSTR.WYB.> <INSTR.WYB.> <SEKW.INSTR.WYB.> <SEKW.INSTR.WYB.>; <INSTR.WYB.> <INSTR.WYB.> <ETYKIETY>: <INSTRUKCJA> <ETYKIETY> <ETYKIETA> <ETYKIETY> <ETYKIETY>, <ETYKIETA> <ETYKIETA> <STAŁA> <ETYKIETA> <STAŁA>.. <STAŁA> Przykłady: CASE numer_dnia_tygodnia OF 0 : Writeln ( 'niedziela ' ); 1 : Writeln ( 'poniedziałek' ); 2 : Writeln ( 'wtorek ' ); 3 : Writeln ( środa ' ); 4 : Writeln ( 'czwartek ' ); 5 : Writeln ( 'piątek ' ); 6 : Writeln ( 'sobota ' ); Wykład 1. Strona 13.
Instrukcja wyboru - przykłady CASE punkty OF 0.. 10 : ocena := 'niedostateczny ; 11.. 12 : ocena := dostateczny ; 13.. 14 : ocena := + dostateczny ; 15.. 16 : ocena := dobry ; 17.. 18 : ocena := + dobry ; 19.. 20 : ocena := bardzo dobry ; 21.. 22 : ocena := celujący ; ELSE ocena := 'nieklasyfikowany' CASE miesiac OF 4,7 : {instrukcja pusta! }; 1,10 : redukt := redukt + 1; 5 : redukt := redukt + 2; 8 : redukt := redukt + 3; 2,3,11 : redukt := redukt + 4; 6 : redukt := redukt + 5; 9,12 : redukt := redukt + 6; CASE miesiac OF 1,3,5,7,8,10,12 : liczba_dni := 31; 4,6,9,11 : liczba_dni := 30; 2 : IF (rok MOD 4)=0 THEN liczba_dni := 29 ELSE liczba_dni := 28 UWAGI: <WYRAŻENIE> musi być typu wyliczeniowego, <ETYKIETY> muszą być typu <WYRAŻENIE>, Zbiory etykiet muszą być rozłączne, <WYRAŻENIE> musi przyjmować wartość którejś <ETYKIETY> Wykład 1. Strona 14.
Instrukcje iteracji i pętli WHILE <WARUNEK> DO <INSTRUKCJA>; REPEAT <CIĄG_INSTRUKCJI> UNTIL <WARUNEK>; FOR <ZMIENNA> := <WP> TO <WK> DO <INSTRUKCJA>; FOR <ZMIENNA> := <WP> DOWNTO <WK> DO <INSTRUKCJA>; UWAGI: <WP - wyrażenie początkowe <WK> - wyrażenie końcowe <ZMIENNA>, <WP>, <WK> muszą być tego samego typu porządkowego <ZMIENNA> nie może być jawnie modyfikowana wewnątrz pętli, jeżeli " TO " to <WP> <= <WK> jeżeli "DOWNTO " to <WP> >= <WK> Przykłady: REPEAT UNTIL Keypressed; WHILE Keypressed DO z:=readkey; {najczęściej stosowane} {czyszczenie bufora} Wykład 1. Strona 15.
Instrukcje iteracji i pętli - przykłady Przykład 1.: { obliczanie y = x^(-n), tj. x do potęgi -n } { x<>0, n>=0 } { x<>0, n>0 } { x<>0, n>0 } y := 1; y := 1; y := 1; i := n; i := n; FOR i := n DOWNTO 1 DO WHILE i>0 DO BEGIN REPEAT y := y/x; y := y/x; y := y/x; i := i-1 i := i-1 UNTIL i=0 Przykład 2.: { czytanie ciągu n danych: d[1],d[2],...,d[n] } czytaj(n); czytaj(n); czytaj(n); i := 1; i := 1; WHILE i<=n DO REPEAT FOR i:=1 TO n DO BEGIN czytaj(d[i]); czytaj(d[i]); czytaj(d[i]); i := i+1 i:=i+1 UNTIL i>n Wykład 1. Strona 16.
Instrukcje iteracji i pętli - przykłady Przykład 3. { czytanie z pliku danych } { wprowadzanie kolejnych } { gdy nie znamy ich liczby } { danych przez użytkownika } Reset ( plik ); n := 0; n := 0; REPEAT WHILE NOT Eof(plik) DO n := n + 1; BEGIN wprowadz(d[n]); n := n + 1; Write( Koniec? [t/n] '); Read(plik,d[n]) Readln(z); UNTIL z='t'; Dla poniższych przykładów dane są typy: CONST mx = 1000; { stała } TYPE student = RECORD imie,nazwisko,uczelnia,wydzial,kierunek: STRING[12]; rok, nrind : Integer ; VAR ls : Integer; { liczba studentów } baza : ARRAY [1..mx] OF student; ster : Char; { znak sterujący } Wykład 1. Strona 17.
Instrukcje iteracji i pętli - przykłady WITH <ZMIENNA> DO <INSTRUKCJA> Przykład: Zamiast pisać tak: BEGIN baza[25].imie := 'Jan'; baza[25].nazwisko := 'Nowak'; baza[25].uczelnia := 'UJ'; baza[25].kierunek := 'informatyka'; baza[25].rok := 1 można napisać tak: WITH baza[25] DO BEGIN imie := 'Jan'; nazwisko := 'Nowak'; uczelnia := 'UJ'; kierunek := 'informatyka'; rok := 1 Wykład 1. Strona 18.
Literatura i bibliografia: L. Banachowski, K. Diks, W. Rytter: Algorytmy i struktury danych, WNT, Warszawa, 2001 Z. Fortuna, B. Macukow, J. Wąsowski, Metody numeryczne, WNT, Warszawa, 1993. K. Jakubczyk, Turbo Pascal i Borland C++, Wydanie II, Helion, 2006. J. i M. Jankowscy, Przegląd metod i algorytmów numerycznych, WNT, Warszawa, 1988. A. Kiełbasiński, H. Schwetlick, Numeryczna algebra liniowa, WNT, Warszawa 1992. A. Kierzkowski, Turbo Pascal. Ćwiczenia praktyczne., Helion 2006. K. Koleśnik, Wstęp do programowania z przykładami w Turbo Pascalu, Helion, M. Sysło: Elementy Informatyki. A. Szepietowski: Podstawy Informatyki. R. Tadeusiewicz, P. Moszner, A. Szydełko: Teoretyczne podstawy informatyki. W. M. Turski: Propedeutyka informatyki. N. Wirth: Wstęp do programowania systematycznego. N. Wirth: ALGORYTMY + STRUKTURY DANYCH = PROGRAMY. Wykład 1. Strona 19.