1 Metodyka nauczania InformatykiWykład 6. Uczenie programowania
2 Część I WSTĘP
3 Wstęp „Programy powinny być pisane tak, żeby ludzie mogli je czytać, a tylko przy okazji tak, żeby maszyny mogły je wykonywać.” H.Abelson, G.Sussman, J.Sussman Struktura i interpretacja programów komputerowych
4 Wstęp „Język programowania jest językiem, w którym wymyśla się programy, a nie językiem zapisywania już wymyślonych programów.” P.Graham, Hakerzy i malarze
5 Uwagi ogólne Język programowania wysokiego poziomu jest trudny do uczenia bo jest skomplikowany. Zanim można coś pokazać co działa trzeba przejść długą drogę: struktura programu, pojęcia zmiennej, wywołania funkcji standardowych. Trzeba pokonać wszystkie działania mające na celu uruchomienie programu: tworzenie tekstu źródłowego, kompilacja, usuwanie błędów syntaktycznych, scalanie uruchomienie gotowego programu.
6 Błędy Błędy w programowaniu uczą więcej niż poprawnie napisane programy Wyszukiwanie błędów jest doskonałą nauką – zostawmy to uczniom Kompilator sygnalizuje i opisuje błędy – ale robi to w postaci zagadek Błąd nie musi wystąpić w linii, którą wskazuje kompilator
7 Marzenia nauczyciela (?)Najlepiej byłoby uczyć w systemie UNIX (Linux) – doskonałe rozłączenie tworzenia tekstu źródłowego od procesu kompilacji i linkowania oraz oddzielny obiekt: aplikacja w trybie znakowym (odpada klikanie myszką i skomplikowana grafika)
8 Rzeczywistość Zintegrowane środowisko programistyczneautomatyczne oznaczanie składni poleceń automatyczna kompilacja z linkowaniem, a nawet uruchomieniem aplikacji możliwość pracy krokowej debugger – podglądanie i zmiana wartości zmiennych w określonych punktach programu
9 Ocenianie Oceniamy Skuteczność programowania Jakość programowaniaW jakim stopniu program spełnia specyfikację Jakość programowania Użycie odpowiedniej techniki Podział na moduły Strukturalizacja programu Możliwość rozszerzenia Czytelność kodu Budowa kodu Nazwy zmiennych Komentarze
10 Szczegółowe rozważaniaNa każdym etapie zadania do realizacji powinny być proste, dostępne dla uczniów ale i atrakcyjne – takie które same zainteresują uczniów Przykład: przy przetwarzaniu plików zamiast liczyć słowa i litery (co może być bardzo pouczające) może lepiej szyfrować teksty szyfrem zastępującym.
11 Szczegółowe rozważania c.d.Zadania dotyczące danego elementu powinny być tak skonstruowane aby użycie danego elementu było wyraźnie widoczne Nowe elementy należy umieszczać w wyraźnie wyróżnionych miejscach programu Przykład: gdy mówimy o pętli już znając instrukcje warunkowe, niech pętla zaczyna się na początku programu. Umieszczenie pętli wewnątrz instrukcji warunkowej ukryje ją lub sprowadzi do mniej znaczącego elementu
12 Szczegółowe rozważania c.d.Gdy tematem nie jest interfejs użytkownika to programy powinny być bardzo ubogie lub nawet siermiężne w komunikacji z użytkownikiem Przyspieszy to proces programowania, zwróci uwagę na naprawdę istotne sprawy, przyspieszy uruchamianie i testowanie programów Przykład: program, który wymaga wprowadzenia liczby przez użytkownika może (dla celów edukacyjnych) zgłaszać tylko jeden komunikat (np. „Podaj dzielną:”) a nie musi się przedstawiać, określać jakie warunki ma spełniać podana liczba (o ile nie jest to szczególnie istotne).
13 Założenia metodologiczneUczniowie umieją posługiwać się komputerem Nie uczymy pojęć teoretycznych algorytmiki (pojęcia algorytmu, pojęcia rekurencji, własności algorytmów, itp.) Uczymy programowania, a nie tylko języka programowania Każdy nowy element jest niezbędny do rozwiązania określonego problemu lub znacznie ułatwiającym rozwiązanie Zagadnienia są małymi krokami do przodu Każde zagadnienie powinno mieć oddzielny problem, którego rozwiązanie tworzymy od podstaw Każde rozwiązanie tworzymy od początku razem z uczniami (nie ma gotowych rozwiązań z pliku...)
14 Pomysły Źródła pomysłów na programyStandardowe – zbiory zadań z programowania w określonym języku Matematyka – np. teoria liczb (własności liczb) algebra (rozwiązywanie równań) ... Potrzeby szkolne Realizacja projektów szkolnych, prac domowych, itp. Zabawa
15 Część II PASCAL
16 Ramowy plan uczenia Struktura programu i najprostsze operacje wyjścia (może i wejścia) Stałe, zmienne i przypisania Styl pisania kodu, komentarze Instrukcje warunkowe Iteracje Wczytywanie danych Procedury i funkcje użytkownika Złożone typy danych Operacje na plikach
17 Struktura programu Struktura programu i najprostsze operacje wejścia/wyjścia Konieczność oraz możliwość natychmiastowego utworzenia aplikacji Przykład: program halo; begin writeln(‘Witam!’); end.
18 Struktura programu c.d. Wypisujemy: dowcipne teksty liczbywyniki wyrażeń stałych testujemy operacje arytmetyczne (+, –, *, /, mod) poznajemy operacje znakowe (char, ord) odkrywamy logikę (true, false, and, or) badamy funkcje standardowe (sin, sqrt)
19 Stałe, zmienne, przypisaniaStałe, zmienne i przypisania Definiowanie stałych (składnia, po co?) Zmienne (nazwy odpowiadają przeznaczeniu) Deklaracje Proste typy danych: integer, real, char Podstawienia
20 Stałe, zmienne, przypisania c.d.Przykład program sztuczka; const a=8; var n:integer; begin n:=a; n:=n+7; n:=2*n; n:=n–a; n:=n–7; writeln(n); end. Przykład program liczby; const a=5; var n:integer; begin n:=a; writeln(a,n); n:=n+a; end.
21 Styl kodu, komentarze Styl programowania, komentarzeJedna instrukcja w jednej linii Odstępy oddzielające sensowne bloki w programie Każda instrukcja złożona (będzie o nich za chwilę) zaczyna wcięcie begin . . begin . . instrukcje . . end end
22 Styl kodu, komentarze c.d.Trzeba komentować ważne miejsca w programie (komentarz powinien być krótki ale trafny) Ważne miejsca: Początek i koniec jednego zagadnienia Każdy z sekwencyjnych warunków Każda z części rozbudowanej instrukcji CASE Koniec bardzo rozległych instrukcji warunkowych i pętli Każde nietypowe (oryginalne) rozwiązanie typowego problemu Nadanie zmiennym szczególnych wartości, które same się nie tłumaczą Miejsca, które programista czuje, że musi skomentować
23 Instrukcje warunkowe Instrukcje warunkoweIf than else – klasyczna instrukcja warunkowa tworząca rozgałęzienia w programie Tu już są potrzebne „nawiasy syntaktyczne”: begin end które można było wprowadzić wraz ze stylem pisania kodu źródłowego Budowa skomplikowanych (?) warunków
24 Instrukcje warunkowe c.d.Przykład program parzysta; const a=5; var x:integer; begin x:=a; if 2*(x div 2)=x then writeln(x,‘ parzyste’) else writeln(x,‘ nieparzyste’) end.
25 Instrukcje warunkowe c.d.Przykład program wieksza; var x,y:real; begin x:=1; y:=3*(1/3); if x=y then writeln(x,‘ równe ‘,y) else if x
26 Instrukcje warunkowe c.d.Instrukcja CASE Pokazywać jako jedną z instrukcji warunkowych Nie ukrywać, że taka jest Nie robić wokół niej szumu – powinna być naturalna w języku programowania
27 Instrukcje warunkowe c.d.Przykład program cyfra16; var a:char; begin a:=’A’; case a of ’A’: writeln(10); ’B’: writeln(11); ’C’: writeln(12); ’D’: writeln(13); ’E’: writeln(14); ’F’: writeln(15); ’0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’:writeln(a); end; end.
28 Iteracje Iteracje (pętle) Rozróżnienie pętli Stosowalnośćfor, while, until Rozróżnienie pętli Stosowalność Bezpieczeństwo (zapętlenie) Zastępowalność (wszystko można zastąpić pętlą while)
29 Iteracje c.d. Przykłady proste for a:=‘A’ to ‘Z’ do write(a);for n:=100 downto 0 do m:=m+n; while i>0 do i:=i–1; repeat i:=i+1 until i=100; {dane x i y} r:=x; q:=0; while y<=r do begin r:=r-y; q:=q+1 end;
30 Iteracje c.d. Przykład (nieco bardziej) złożony: hipoteza „3x+1”program test3x; constant a=255; var n:integer; begin n:=a; while n<>1 do if n mod 2 = 0 then n:=n div 2 else n:=3*n+1; end.
31 Iteracje c.d. Przykład złożony: suma cyfr danej liczbyprogram sumcyf; var n,suma:integer; begin n:=12345; suma:=0; repeat suma:=suma+n–10*(n div 10); n:=n div 10; until n=0; writeln(suma); end.
32 Pobieranie danych Funkcja wczytywania danychTak późno bo należy uczyć od razu oprogramowywania kontroli wprowadzanych danych Można podać ją wcześniej – na wyraźne życzenie uczniów z odpowiednimi zastrzeżeniami
33 Procedury i funkcje Procedury i funkcjeNaturalna potrzeba funkcji i procedur Wyraźne rozróżnienie między funkcją i procedurą Użyteczność procedur Parametry i sposoby wywoływania parametrów
34 Złożone typy danych Złożone typy danych Tablice WskaźnikiDefiniowanie własnych typów użytkownika Typy okrojone (?) Rekordy (?) Zbiory (?) Typy wyliczeniowe (?)
35 Operacje na plikach Operacje na plikachPraca z plikami jako naturalna forma działania programu (większość aplikacji operuje na plikach) Ciekawe efekty...
36 Część III C++
37 C++ vs. Pascal Oba są językami wysokiego poziomuC++ jest bardziej zwięzły Pascal jest łatwiejszy C++ jest obiektowy, ale tego raczej nie uczymy …
38 Proste programy w C++ Program void main() { int i; cin>>i;cout<<3*37*a<
39 Proste programy w C++ Program Program Program void main() {for(int i=9;i<100000;i=10*i+9) cout< } Program void main() { for(int i=9;i<100;i+=9) cout< } Program void main() { for(int i=1;i<100000;i=10*i+1) cout<
40 Część III LOGO
41 Początek Zacząć od wyjaśnienia sposobu podawania poleceńwpisywać w linii komend i naciskać ENTER na końcu, prawidłowa komenda to działanie żółwia i gotowość do przyjęcia nowego polecenia, nieprawidłowa komenda to komentarz. Zwrócić uwagę na konieczność czytania tego co pojawia się na ekranie komentarze LOGO są opisowe i dostosowane do ucznia
42 Pierwszy krok programowaniaPolecenia FD (NP) – z parametrem, którym jest krok żółwia (uczniowie powinni sami ustalić rozmiar tego kroku) RT (PR) – z parametrem, którym jest ... obrót żółwia (nie mówimy o kątach – uczniowie, którzy znają kąty sami do tego dojdą) CS – zmazanie rysunku, bardzo potrzebne ale wprowadzamy po pierwszym rysunku
43 Pierwsze działanie Podyktować rysunek (uzyskiwany za pomocą podanych dwóch poleceń rysowania) uczniowie muszą zobaczyć jak to działa powiedzenie "narysujcie sobie coś" raczej utrudni niż ułatwi dalszą naukę. Rysunek powinien być niezbyt skomplikowany powinien zawierać różne odległości i kąty oraz jakieś powtórzenia dowcipny ale dopiero na koniec – czyli rysunek niespodzianka, lub zagadka: „co to jest?” W trakcie rysowania zwracać uwagę na zmieniającą się pozycję żółwia, zmiany długości i kątów.
44 Przykład (dyktando) rt 270 fd 460 rt 170 fd 500 rt 105 fd 20 rt 180
45 Przykład (efekt)
46 Następna zabawa „Dokończ rysunek”nauczyciel dyktuje jakiś początek (2-3 komendy) uczniowie kończą w sposób dowcipny albo „zadany” (np. symetrycznie, zamknąć łamaną, itp.) Początek dyktowany przez nauczyciela zostaje na tablicy (aby uczniowie mogli wrócić, gdy coś nie wyjdzie) Zabawę poprzedzamy komendą CS – to jest dobry moment na tę komendę Najciekawsze, najdowcipniejsze dokończenia mogą być premiowane (cukierkiem, wpisem do księgi pamiątkowej, wydrukiem, etc.)
47 Przykład fd 100 rt 90 fd 30 rt 270 fd 50
48 Przykład dokończenia
49 Ćwiczenia doskonaląceUczniowie wykonują własne rysunki Każdy może narysować co chce nauczyciel ma jednak gotową bazę pomysłów by uczniowie nie tracili czasu na wymyślanie „co narysować” Każdy dostaje (np. losuje) przygotowany wcześniej rysunek i ma go skopiować za pomocą komend Uczniowie eksperymentują Celem jest ustalenie związku parametrów poleceń z rzeczywistością np. rozmiary ekranu w krokach żółwia, obrót do tyłu, itp. Mogą wykonywać rysunki dowolne – nawet (najczęściej tak będzie) niefiguratywne Wyniki „badań” powinny być omówione i zanotowane
50 Krok dalej Dwie drogi Klasyczna: Inna:kolejne „elementy programotwórcze” REPEAT IF procedury własne (jako odrębny element) Inna: procedury, rekurencja i listy inne procedury (jako ten sam typ elementu)
51 Droga „klasyczna” Eliminacja powtórzeń RozgałęzieniaZ obserwacji wynika, że często powtarzamy te same polecenia, a więc warto to zapisać w skrócie REPEAT – wprowadzenie syntaktyki Rysunki z powtarzaniem (wielokąty, dachówki, płotki, grzebienie, etc.) Rozgałęzienia Naturalna potrzeba mechanizmu decyzyjnego IF – wprowadzenie syntaktyki Rysunki losowe (z powtarzaniem)
52 Droga „klasyczna” - proceduryProcedury własne użytkownika Obserwacja: zamiast powtarzać od początku lepiej zawrzeć polecenia w jednej komendzie Konstrukcja: TO ... END Parametry procedur Rozszerzenie możliwości procedur o zmienne wartości parametrów
53 Droga „klasyczna” - dalejStruktury danych Operacje na liczbach (parametrach procedur) Listy i operacje na listach Rekurencja Wyjaśnienie rekurencji (jako dodatkowej możliwości procedur) Rysunki rekurencyjne Rekurencyjne działania na listach
54 Droga „klasyczna” - geometriaJeżeli uczniowie rozumieją układ współrzędnych, albo chcemy ich tego nauczyć Położenie bezwzględne żółwia POS, SETPOS, HEADING, SETHEADING Położenie bezwzględne obiektów DISTANCE, TOWARDS
55 Droga „klasyczna” - koniecUzupełnienie struktur danych Wyjaśnienia pojęcia słowa, operatory ” i : MAKE Badanie struktur: EMPTYP, ... Uzupełnienia procedur Polecenia STOP, OUTPUT LOCAL Uzupełnienia operacji na listach SENTENCE, LIST PRINT, SHOW Uzupełnienia listy procedur wbudowanych Predykaty Funkcje matematyczne
56 „Inna” droga Zobaczcie rysunek składa się z wykonywanych na zmianę przesunięć i obrotów żółwia. Zatem rysunek można zapisać jako listę liczb oznaczających co druga wielkość przesunięcia, a pozostałe (też co druga ale od następnej) obrót żółwia. Napiszemy polecenie, które pozwoli podać tylko tę listę i samo zrobi rysunek: musimy wziąć pierwszy element naszej listy i o tle przesunąć żółwia, następnie wziąć drugi element (lub znów pierwszy jeżeli tamto przesunięcie wykreśliliśmy) i obrócić żółwia. te czynności powtarzamy tak długo aż skończy się lista.
57 „Inna” droga - realizacjaProcedura przesunięcia: to przesun :lista if not emptyp :lista [ fd first :lista obrot bf :lista ] end Procedura obrotów (piszą sami uczniowie): to obrot :lista if not emptyp :lista [ rt first :lista przesun bf :lista ]
58 „Inna” droga - zyski Od razu mamy wszystko:definicje procedury warunki struktury danych: listy i parametry Rekurencja pojawia się w naturalny sposób do upraszczania zagadnień Naturalne konstrukcje procedur jako części języka
59 „Inna” droga - straty Iteracja przestaje być czymś naturalnymNp. kwadrat zamiast: to kwad :bok repeat 4 [ fd :bok rt 90 ] end Będzie rysowany procedurą: to kwadr :bok :ile if :ile > 0 [ fd :bok rt 90 kwadr :bok :ile – 1 ]
60 „Inna” droga - geometriaTak jak w drodze klasycznej
61 „Inna” droga - uzupełnieniaJest mniej do uzupełniania bo więcej było potrzebne w trakcie nauki Koniecznym elementem uzupełnienia jest iteracja (REPEAT)
62 CZĘŚĆ IV LOGO UWAGI OGÓLNE
63 Rysunki Podstawą uczenia są rysunki – im ciekawsze tym lepiejNie za długo nad rysunkami „z ręki” – bez programowania Budować rysunki z elementów ujętych w procedury i sparametryzowanych Rysunki rekurencyjne – cel uczenia rysowania
64 Listy Ćwiczyć listy jako naturalne struktury danych:Kolejki: FIFO, LIFO, stos, ... Listy jako wspomaganie rysunków Zapamiętywanie położenia Wierzchołki wielościanów lub łamanych Listy jako teksty Analiza teksów Wyszukiwanie i sortowanie Kryptografia
65 Liczby Uczyć nie tylko rysowania i operacji na listach ale także standardowych działań na liczbach Algorytm Euklidesa Badanie czy liczba jest pierwsza Sito Erastotenesa Kalkulator Procent składany Łączyć liczby z listami i rysunkami Dodawanie wektorów (w połączeniu z ilustracją graficzną)
66 Rekurencja Naturalne narzędzie rozwiązywania problemów Do rysowaniaZastępuje pętlę WHILE Zapamiętuje elementy w odpowiedniej kolejności Do rysowania Do obliczeń Do analizy list
67 Zalety LOGO Naturalne przejście z opisu w języku potocznym do zapisu w postaci procedur w LOGO Prostota poleceń i środowiska Nastawienie na obrazowość Naturalność programowania (niewiele umowności typowej dla imperatywnych języków programowania)
68 Wady LOGO Kiepska programowa komunikacja z użytkownikiem – stąd mało programów interakcyjnych Brak programu, a więc nie można stworzyć „prawdziwej” aplikacji Wrażenie delikatności typowej dla zabawek