Informacje podstawowe: MATERIAŁY POMOCNICZE NR 1 DO PRACOWNI Z PRZEMIOTU INFORMATYKA 1 INFORMATYKA 1 - Pracownia specjalistyczna 30h Kod przedmiotu: ES1A200 009, ECTS: 4 pkt. Kierunek: Elektrotechnika, studia stacjonarne I stopnia Semestr: II, rok akademicki: 2011/2012 Grupy: PS2, Wtorek, godz. 12:15-13:45, sala: WE-110 PS3, Wtorek, godz. 15:15-16:45, sala: WE-110 PS4, Środa, godz. 14:15-15:45, sala: WE-110 Prowadzący zajęcia: dr inż. Jarosław Forenc WE-204, tel. (0-85) 746-93-97 e-mail: j.forenc@pb.edu.pl WWW: http://we.pb.edu.pl/~jforenc (Dydaktyka) Konsultacje: Wtorek, godz. 16:45-17:45, WE-204 Piątek, godz. 11:00-13:00, WE-204 Program szczegółowy: 1. Zajęcia organizacyjne. Algorytmy, sposoby opisu. Przykłady algorytmów. 2. Obsługa środowiska MS Visual C++ przeznaczonego do tworzenia, analizy i uruchamiania programów w języku C/C++. Etapy tworzenia programu. Kompilacja i konsolidacja. 3. Ogólna struktura programu w języku C/C++. Zmienne, deklaracje, typy i nazwy zmiennych. Operacje wejścia-wyjścia w języku C. Komentarze. 4. Stałe liczbowe. Operatory i wyrażenia arytmetyczne, priorytet operatorów. 5. Operatory relacyjne (porównania) i logiczne. Wyrażenia logiczne. Instrukcja warunkowa if. Zagnieżdżanie if-else. Operator warunkowy? :. 6. Instrukcja wyboru wielowariantowego switch. Operatory bitowe. 7. Instrukcja iteracyjna for. Zagnieżdżanie pętli for. Instrukcje break, goto i continue. 8. Instrukcje iteracyjne while i do while. 9. Tablice, deklaracja tablicy jednowymiarowej, inicjalizacja elementów tablicy. 10. Tablice dwuwymiarowe. Operacje na tablicach. 11. Łańcuchy znaków. Inicjalizacja łańcucha znaków. Stała znakowa. Plik nagłówkowy string.h. 12. Funkcje, ogólna struktura funkcji. Umieszczanie definicji funkcji w programie. Zmienne lokalne i globalne. Zasięg i widzialność identyfikatorów. Informatyka 1 - Pracownia Strona 1 z 14 2012 Jarosław Forenc 13. Przekazywanie argumentów do funkcji przez wartość i referencję. 14. Struktury, odwołania do pól struktury. Inicjalizacja zmiennej strukturalnej. 15. Rekurencyjne wywołanie funkcji. Argumenty funkcji main. Zaliczenie zajęć. Literatura: 1. B.W. Kernighan, D.M. Ritchie: Język ANSI C. Programowanie. Wydanie II. Helion, Gliwice, 2010. 2. S. Prata: Język C. Szkoła programowania. Wydanie V. Helion, Gliwice, 2006. 3. K.N. King: Język C. Nowoczesne programowanie. Wydanie II. Helion, Gliwice, 2011. 4. S. Summit: Programowanie w języku C. FAQ. Helion, Gliwice, 2003. 5. R. Wileczek: Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows. Helion, Gliwice, 2009. 6. J. Grębosz: Symfonia C++ standard: programowanie w języku C++ orientowane obiektowo. Tom 1 i 2. Wydawnictwo Edition 2000, Kraków, 2008. 7. A. Sopek: Wgłąb języka C. Helion, Gliwice, 1993. (http://helion.pl/online/wglab/wglab.zip) 8. A. Zalewski: Programowanie w językach C i C++ z wykorzystaniem pakietu Borland C++. Wydawnictwo Nakom, Poznań, 2000. 9. S. Oualline: Język C. Programowanie. Helion, Gliwice, 2003. 10. S.G. Kochan: Język C. Wprowadzenie do programowania. Helion, Gliwice, 2005. 11. W. Malina, M. Szwoch: Metodologia i techniki programowania. PWN, Warszawa, 2008. 12. Materiały na stronie: http://we.pb.edu.pl/~jforenc/dydaktyka.html Zaliczenie przedmiotu: 1. Zaliczenie przedmiotu odbywa się na podstawie następujących zasad: - obecność studenta na planowych zajęciach, ( Student, którego nieobecność na obowiązkowych zajęciach wyniosła więcej niż 1/5 liczby godzin zajęć i nie została usprawiedliwiona, nie uzyskuje zaliczenia przedmiotu. Regulamin studiów PB, 11, pkt. 4), - realizacja zadań sformułowanych przez prowadzącego (na zajęciach, prace domowe), - oceny uzyskane z dwóch sprawdzianów praktycznych. 2. Sprawdziany odbędą się na zajęciach nr 7 i 14. Poprawa sprawdzianów odbędzie się poza zajęciami. Oba sprawdziany muszą być zaliczone na ocenę pozytywną. 3. Na sprawdzianach można korzystać z książek i własnych notatek, nie można natomiast korzystać z Internetu. 4. Za aktywność na zajęciach średnia arytmetycznej ocen może być podwyższona o 0,25. 5. Trzykrotny brak pracy domowej obniża końcową średnią arytmetyczną ocen o 0,25. Informatyka 1 - Pracownia Strona 2 z 14 2012 Jarosław Forenc
6. Ocena końcowa wyznaczana jest na podstawie średniej arytmetycznej ocen ze sprawdzianów praktycznych oraz dodatkowych bonusów : ocena punkty średnia ocena końcowa 5 5,0 4,75-5,00 5 5-4,8 4,25-4,74 4+ 4+ 4,5 3,75-4,24 4 4 4,0 3,25-3,74 3+ 4-3,8 2,80-3,24 3 3+ 3,5 < 2,80 2 3 3,0 3-2,8 2+ 2,5 2 2,0 7. Nie przewiduje się poprawiania ocen na wyższe na koniec semestru. 8. Semestr składa się z 15 tygodni. Zaliczenie przedmiotu następuje na ostatnich zajęciach. 9. Student, który nie zgłosi się po wpis do końca semestru (przed sesją egzaminacyjną) otrzymuje ocenę niedostateczną. Regulamin pracowni informatycznej KETIM: 1. Wstęp do laboratorium w czasie trwania ćwiczenia jest dozwolony tylko dla osób uczestniczących w zajęciach. 2. Ćwiczenia studenckie odbywają się w zespołach 1-2 osobowych. Opuszczanie stanowiska laboratoryjnego, nawet chwilowe, jest dopuszczalne tylko za zgodą prowadzącego zajęcia. 3. Zabronione jest wnoszenie do laboratorium wszelkich napojów i posiłków. 4. Zabronione jest dokonywanie jakichkolwiek zmian w połączeniach i konfiguracji sprzętu. 5. Niedopuszczalna jest jakakolwiek manipulacja przy okablowaniu oraz urządzeniach lokalnej sieci komputerowej. 6. Komputery mogą być włączone dopiero po uzyskaniu zezwolenia od prowadzącego zajęcia. 7. Niedopuszczalne jest wgrywanie własnych zbiorów, modyfikacja plików konfiguracyjnych i kasowanie programów, oprócz własnych zbiorów i plików roboczych. 8. Zabrania się wykorzystywania sprzętu znajdującego się w laboratorium do celów nie związanych z ćwiczeniami. 9. Dwukrotne nieusprawiedliwione opuszczenie ćwiczeń powoduje skreślenie z listy i przekazanie tej informacji do Dziekanatu WE PB. W wyjątkowych usprawiedliwionych przypadkach (np. choroby), ćwiczenie może być odrobione w terminie dodatkowym. 10. Warunkiem dopuszczenia do wykonywania ćwiczenia jest znajomość podstawowych zagadnień teoretycznych dotyczących danego ćwiczenia. Sprawdzenie wiadomości odbywa się przed rozpoczęciem ćwiczenia lub w trakcie jego wykonywania. 11. Zaliczenie ćwiczenia następuje na podstawie: - wykazania się podstawowymi wiadomościami, - wykonanie niezbędnych zagadnień problemowych związanych z danym ćwiczeniem, - złożenie w wyznaczonym terminie sprawozdania. 12. Sprawozdanie powinno być wykonane starannie i przejrzyście, z podaniem zasadniczych wyników obliczeń, wniosków i uwag. 13. W razie nieszczęśliwego wypadku należy natychmiast wyłączyć napięcie zasilające, a następnie wezwać pogotowie ratunkowe (tel. 999 lub tel. kom. 112) i udzielić pierwszej pomocy. 14. W razie pożaru wyłączyć napięcie zasilające i gasić urządzenia gaśnicami oraz kocami gaśniczymi znajdującymi się w laboratorium lub na korytarzu, a w koniecznym przypadku wezwać straż pożarną (tel. 998 lub tel.kom.112). 15. Przed wyłączeniem komputera, należy dokonać prawidłowego zamknięcia systemu operacyjnego. 16. Po zakończeniu ćwiczeń należy zgłosić fakt ukończenia ćwiczenia prowadzącemu oraz na jego polecenie: - skasować własne pliki robocze, - wyłączyć urządzenia, - uporządkować stanowisko laboratoryjne. 17. Pomieszczenie laboratorium można opuścić tylko po uzyskaniu zgody od prowadzącego ćwiczenia. 18. Uszkodzenie sprzętu w wyniku jego celowego niewłaściwego wykorzystania, będzie karane nie zaliczeniem laboratorium. 19. W przypadku celowego uszkodzenia lub na skutek niewłaściwego użytkowania sprzętu, osoby winne będą obciążone kosztami naprawy. Informatyka 1 - Pracownia Strona 3 z 14 2012 Jarosław Forenc Informatyka 1 - Pracownia Strona 4 z 14 2012 Jarosław Forenc
Program komputerowy: Program komputerowy można rozumieć jako: o kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, o plik wykonywalny - program, który można uruchomić. Etapy tworzenia programu: tak START Edycja kodu źródłowego Kompilacja Czy są błędy? nie Kod źródłowy programu w języku C jest to plik tekstowy z rozszerzeniem.c, który może być przygotowany w dowolnym edytorze zapisującym niesformatowane pliki tekstowe. Kompilacja polega na przetłumaczeniu kodu źródłowego na tzw. kod wynikowy, maszynowy (pliki z rozszerzeniem.o lub.obj). Podczas kompilacji programu mogą wystąpić błędy. Poprawienie tego rodzaju błędów wymaga ponownej edycji kodu źródłowego. Uruchomienie programu: Skompilowany program (plik wykonywalny.exe) przechowywany jest na nośniku danych (np. dysk twardy, dyskietka, płyta CD/DVD, PenDrive). Uruchomienie programu wymaga jego odczytania z nośnika i załadowania do pamięci operacyjnej komputera (RAM). Za taką operację odpowiedzialny jest system operacyjny. Uruchomiony program nazywany jest procesem. Proces w pamięci komputera ma określoną strukturę, przedstawioną na poniższym rysunku. Blok kontrolny procesu jest strukturą danych tworzoną i zarządzaną przez system operacyjny, a opisującą właściwości procesu. Blok kontrolny procesu zawiera m.in. identyfikator (numer), stan procesu, priorytet, licznik programu, wskaźniki pamięci, informacje na temat żądań we-wy. Program jest to kod wykonywanego programu (instrukcje programu). Dane są to dane potrzebne programowi podczas wykonywania. Stos jest specjalnym miejscem, w którym przechowywane są tzw. zmienne lokalne oraz kody powrotu z funkcji. Łączenie Łączenie (konsolidacja) polega na połączeniu kodu wynikowego (.o lub.obj) z odpowiednimi bibliotekami. Programy komputerowe działają zazwyczaj zgodnie z pewnym algorytmem. tak tak Czy są błędy? nie Uruchomienie pliku wykonywalnego Czy są błędy? nie STOP Podczas łączenia mogą wystąpić błędy spowodowane brakiem odpowiedniej biblioteki. Uruchomienie pliku wykonywalnego.exe. Po uruchomieniu programu mogą wystąpić błędy. Błędy takie mogą być spowodowany wykonaniem przez program niedozwolonej operacji, np. odwołaniem do zabronionego obszaru pamięci. Innego rodzaju błędem może być zwrócenie przez program niepoprawnego wyniku. W obu przypadkach poprawienie błędu wymaga ponownej edycji kodu źródłowego. Definicje algorytmu: W literaturze można spotkać wiele definicji algorytmu. Poniżej przedstawionych jest kilka z nich. algorytm - skończony, uporządkowany ciąg jasno zdefiniowanych czynności, koniecznych do wykonania pewnego zadania. algorytm - metoda rozwiązania zadania. algorytm - ściśle określona procedura obliczeniowa, która dla właściwych danych wejściowych zwraca żądane dane wyjściowe zwane wynikiem działania algorytmu. algorytm - skończony zbiór reguł, wskazujący kolejność operacji przy rozwiązywaniu problemu pewnego typu. Informatyka 1 - Pracownia Strona 5 z 14 2012 Jarosław Forenc Informatyka 1 - Pracownia Strona 6 z 14 2012 Jarosław Forenc
Podstawowe cechy algorytmu: Algorytm powinien posiadać dane wejściowe (w ilości większej lub równej zeru) pochodzące z dobrze zdefiniowanego zbioru. Algorytm powinien zwracać pewien wynik: o działanie algorytmu niezwracającego wyniku pozbawione jest sensu. Algorytm powinien być precyzyjnie zdefiniowany: o każdy krok algorytmu musi być jednoznacznie określony. Algorytm powinien być zawsze poprawny: o ale dla każdego z założonego dopuszczalnego zestawu danych wejściowych, o w algorytmie mogą (ale nie muszą) być zaimplementowane mechanizmy reakcji na błędne dane wejściowe. Algorytm powinien zawsze kończyć się po skończonej liczbie kroków: o w algorytmie powinna istnieć poprawnie działająca reguła stopu. Algorytm powinien być efektywny: o jak najkrótszy czas wykonania, o jak najmniejsze zapotrzebowanie na pamięć. Algorytm może zostać zaimplementowany w postaci programu komputerowego lub dla innego urządzenia. Ten sam algorytm może być zaimplementowany w różny sposób przy użyciu różnych języków programowania. Metody opisu algorytmów: Opis w punktach, w języku naturalnym o może występować w postaci opisu słownego (pełne zdania) lub też listy kroków algorytmu Schemat blokowy o przedstawienie algorytmu za pomocą odpowiednich znaków graficznych reprezentujących fragmenty algorytmu Pseudokod (język publikacyjny) o niezbyt formalna odmiana języka programowania Konkretny język programowania, np. Pascal, C, C++, Matlab Opis słowny algorytmu: Opis słowny przypomina przepis kulinarny z książki kucharskiej Przykład nr 1.1 Algorytm: Tortilla (*) (opis algorytmu w punktach) Dane wejściowe: Dane wyjściowe: 0,5 kg ziemniaków, 100 g kiełbasy Chorizo, 8 jajek gotowa Tortilla Kolejne kroki: 1. Ziemniaki obrać i pokroić w plasterki. 2. Kiełbasę pokroić w plasterki. 3. Ziemniaki wrzucić na gorącą oliwę na patelni i przyrumienić z obu stron. 4. Kiełbasę wrzucić na gorącą oliwę na patelni i przyrumienić z obu stron. 5. Ubić jajka i dodać do połączonych ziemniaków i kiełbasy. 6. Dodać sól i pieprz. 7. Usmażyć z obu stron wielki omlet nadziewany chipsami ziemniaczanymi z kiełbaską. (*) na podstawie Podróży kulinarnych R. Makłowicza Schemat blokowy: Schematy blokowe nie mają jednej, ściśle określonej postaci. Najczęściej na schematach blokowych występują cztery podstawowe elementy (początek algorytmu, koniec algorytmu, blok funkcyjny, blok decyzyjny) oraz strzałki określające kolejność wykonywania operacji. Elementy występujące na schematach blokowych algorytmów: Początek algorytmu Może występować tylko jeden raz Elementarna instrukcja Blok funkcyjny Operacje obliczeniowe lub organizacyjne Blok decyzyjny Operacje warunkowe Testy Zakończenie algorytmu Musi występować przynajmniej jeden raz Informatyka 1 - Pracownia Strona 7 z 14 2012 Jarosław Forenc Informatyka 1 - Pracownia Strona 8 z 14 2012 Jarosław Forenc
Czasami wprowadzanie i wyprowadzanie danych oznacza się dodatkowym blokiem wejścia-wyjścia. Przykład nr 1.3 Narysuj schemat blokowy algorytmu Euklidesa. Blok wejścia-wyjścia Wczytanie (wprowadzenie) danych Wyświetlenie (wyprowadzenie) wyników Algorytm Euklidesa: Rozważmy sposób zapisu jednego z najbardziej znanych algorytmów - algorytmu Euklidesa znajdowania największego wspólnego dzielnika dwóch liczb - NWD(a,b) Przykład nr 1.2 Algorytm: Euklidesa (opis algorytmu w punktach) Dane wejściowe: Dane wyjściowe: niezerowe liczby naturalne a i b NWD(a,b) Kolejne kroki: 1. Czytaj liczby a i b. 2. Dopóki a i b są większe od zera, powtarzaj krok 3, a następnie przejdź do kroku 4. 3. Jeśli a jest większe od b, to weź za a resztę z dzielenia a przez b, w przeciwnym razie weź za b resztę z dzielenia b przez a. 4. Przyjmij jako największy wspólny dzielnik tę z liczb a i b, która pozostała większa od zera. 5. Drukuj NWD(a,b). Działanie powyższego algorytmu sprawdźmy na przykładzie: o szukamy: NWD(1675,3752), czyli a 1675, b 3752 o dzielimy większą liczbę przez mniejszą: b/a 3752/1675 2 reszta 402; za b podstawiamy resztę z dzielenia, czyli teraz: a 1675, b 402 o dzielimy większą liczbę przez mniejszą: a/b 1675/402 4 reszta 67; za a podstawiamy resztę z dzielenia, czyli teraz: a 67, b 402 o dzielimy większą liczbę przez mniejszą: b/a 402/67 6 reszta 0; za b podstawiamy resztę z dzielenia, czyli teraz: a 67, b 0 o za NWD przyjmujemy tę z liczb a i b, która jest większa od zera, czyli: NWD(1675,3752) 67 Przykład nr 1.4 Zapis algorytmu Euklidesa w pseudokodzie. NWD(a,b) while a>0 i b>0 do if a>b then a a mod b else b b mod a if a>0 then return a else return b Przykład nr 1.5 Zapis algorytmu Euklidesa jako funkcja w języku C. int NWD(int a, int b) { while (a>0 && b>0) if (a>b) a a % b; else b b % a; if (a>0) return a; else return b; } Informatyka 1 - Pracownia Strona 9 z 14 2012 Jarosław Forenc Informatyka 1 - Pracownia Strona 10 z 14 2012 Jarosław Forenc
Przykład nr 1.6 Narysuj schemat blokowy algorytmu wyznaczającego wartość bezwzględną (moduł) liczby. Przykład nr 1.7 Narysuj schemat blokowy algorytmu sprawdzającego parzystość liczby całkowitej. Wartość bezwzględna liczby określana jest następującym wzorem: x dla x 0 x x dla x < 0 Narysujemy schemat blokowy w dwu postaciach. lub Wczytaj(x) można rozumieć jako podanie przez użytkownika wartości x (wczytanie z klawiatury) lub też przekazanie argumentu do funkcji, która wyznacza wartość bezwzględną liczby. Drukuj(x) można rozumieć jako wyświetlenie na ekranie wyniku lub też zwrócenie go przez funkcję. Przedstawione powyżej algorytmy różnią się tylko liczbą bloków STOP. W algorytmie po lewej stronie, algorytm może zakończyć się w dwu miejscach, natomiast algorytm po prawej stronie - tylko w jednym miejscu. W językach programowania do obliczenia wartości bezwzględnej liczby stosowane są funkcje (x jest argumentem przekazywanym do funkcji): o C, C++ - abs(x), fabs(x), o Fortran - abs(x). Zasada działania powyższego algorytmu jest następująca: o wczytujemy liczbę x, o jeśli liczba x jest ujemna, to zamieniamy ją na dodatnią: x -x, o jeśli liczba x jest większa od 1, to odejmujemy od niej wartość 2 - operację tę powtarzamy do momentu, aż x będzie mniejsze lub równe 1, o jeśli x jest równe 0, to liczba była parzysta, w przeciwnym wypadku (czyli, gdy x jest równe 1) - liczba była nieparzysta Parzystość liczby całkowitej można sprawdzić w prostszy sposób, wykorzystując dzielenie modulo. Dzielenie modulo zwraca resztę z dzielenia. Jeżeli liczbę całkowitą podzielimy modulo 2 to w wyniku możemy otrzymać: o 0 - jeśli liczba jest parzysta, o 1 lub -1 - jeśli liczba jest nieparzysta. Schemat blokowy algorytmu sprawdzającego parzystość liczby przy wykorzystaniu dzielenia modulo 2 przedstawiony jest na poniższym rysunku. Informatyka 1 - Pracownia Strona 11 z 14 2012 Jarosław Forenc Informatyka 1 - Pracownia Strona 12 z 14 2012 Jarosław Forenc
Przykład nr 1.8 Schemat blokowy algorytmu sprawdzającego parzystość liczby całkowitej. Przykład nr 1.10 Narysuj schemat blokowy algorytmu rozwiązującego równanie kwadratowe. Do rozwiązania równania kwadratowego: ax 2 + bx + c 0 należy w pierwszej kolejności obliczyć wyróżnik równania kwadratowego ( deltę ): b 2 4ac o jeżeli > 0, to równanie ma dwa różne pierwiastki rzeczywiste x 1, x 2 : o o b b +, x 2 jeżeli 0, to równanie ma jeden podwójny pierwiastek rzeczywisty: b x 2 jeżeli < 0, to równanie nie ma rozwiązań rzeczywistych. Przykład nr 1.9 Narysuj schemat blokowy algorytmu obliczającego silnię liczby n. Silnią liczby naturalnej n (w notacji matematycznej n!) nazywamy iloczyn wszystkich liczb naturalnych nie większych niż n. n! 1 2 3... n przy czym 0! 1, 1! 1, 2! 1 2, 3! 1 2 3,... b b + x2 b x2 Informatyka 1 - Pracownia Strona 13 z 14 2012 Jarosław Forenc Informatyka 1 - Pracownia Strona 14 z 14 2012 Jarosław Forenc