680 likes | 875 Views
Metodyka nauczania Informatyki. Wykład 6. Uczenie programowania. Część I. WSTĘP. 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
E N D
Metodyka nauczania Informatyki Wykład 6. Uczenie programowania
Część I WSTĘP
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
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
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.
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
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)
Rzeczywistość • Zintegrowane środowisko programistyczne • automatyczne 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
Ocenianie • Oceniamy • Skuteczność programowania • W 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
Szczegółowe rozważania • Na 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.
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
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).
Założenia metodologiczne • Uczniowie 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...)
Pomysły • Źródła pomysłów na programy • Standardowe – 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
Część II PASCAL
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
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.
Struktura programu c.d. • Wypisujemy: • dowcipne teksty • liczby • wyniki wyrażeń stałych • testujemy operacje arytmetyczne (+, –, *, /, mod) • poznajemy operacje znakowe (char, ord) • odkrywamy logikę (true, false, and, or) • badamy funkcje standardowe (sin, sqrt)
Stałe, zmienne, przypisania • Stałe, zmienne i przypisania • Definiowanie stałych (składnia, po co?) • Zmienne (nazwy odpowiadają przeznaczeniu) • Deklaracje • Proste typy danych: • integer, • real, • char • Podstawienia
Stałe, zmienne, przypisania c.d. • Przykład program liczby; const a=5; var n:integer; begin n:=a; writeln(a,n); n:=n+a; writeln(a,n); end. • 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; n:=n–a; writeln(n); end.
Styl kodu, komentarze • Styl programowania, komentarze • Jedna 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
Styl kodu, komentarze c.d. • Komentarze • 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ć
Instrukcje warunkowe • Instrukcje warunkowe • If 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
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.
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<y then writeln(x,’ mniejsze od ‘,y) else writeln(x,’ większe od ‘,y); end.
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
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.
Iteracje • Iteracje (pętle) • for, while, until • Rozróżnienie pętli • Stosowalność • Bezpieczeństwo (zapętlenie) • Zastępowalność (wszystko można zastąpić pętlą while)
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;
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.
Iteracje c.d. • Przykład złożony: suma cyfr danej liczby program 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.
Pobieranie danych • Funkcja wczytywania danych • Tak 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
Procedury i funkcje • Procedury i funkcje • Naturalna potrzeba funkcji i procedur • Wyraźne rozróżnienie między funkcją i procedurą • Użyteczność procedur • Parametry i sposoby wywoływania parametrów
Złożone typy danych • Złożone typy danych • Tablice • Wskaźniki • Definiowanie własnych typów użytkownika • Typy okrojone (?) • Rekordy (?) • Zbiory (?) • Typy wyliczeniowe (?)
Operacje na plikach • Operacje na plikach • Praca z plikami jako naturalna forma działania programu (większość aplikacji operuje na plikach) • Ciekawe efekty...
Część III C++
C++ vs. Pascal • Oba są językami wysokiego poziomu • C++ jest bardziej zwięzły • Pascal jest łatwiejszy • C++ jest obiektowy, ale tego raczej nie uczymy • …
Proste programy w C++ • Program void main() { int i; cin>>i; cout<<3*37*a<<endl; } • Program voidmain() { printf(”Czesc!\n”); }
Proste programy w C++ • Program voidmain() { for(int i=9;i<100000;i=10*i+9) cout<<i*i<<endl; } • Program voidmain() { for(int i=9;i<100;i+=9) cout<<i*12345679<<endl; } • Program voidmain() { for(int i=1;i<100000;i=10*i+1) cout<<pow(i,2)<<endl; }
Część III LOGO
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
Pierwszy krok programowania • Polecenia • 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
Pierwsze działanie • Podyktować rysunek (uzyskiwany za pomocą podanych dwóch poleceń rysowania) • uczniowiemuszą 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.
Przykład (dyktando) • rt 270 • fd 460 • rt 170 • fd 500 • rt 105 • fd 20 • rt 180 • fd 10 • rt 240 • fd 10 • rt 240 • fd 10 • rt 90 • fd 20 • rt 30 • fd 10 • rt 285 • fd 15 • rt 150 • fd 15 • rt 285 • fd 30 • rt 255 • fd 40
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.)
Przykład • fd 100 • rt 90 • fd 30 • rt 270 • fd 50
Ćwiczenia doskonalące • Uczniowie 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
Krok dalej • Dwie drogi • Klasyczna: • 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)