1 / 68

Metodyka nauczania Informatyki

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

juana
Download Presentation

Metodyka nauczania Informatyki

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. Metodyka nauczania Informatyki Wykł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 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

  9. 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

  10. 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.

  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 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...)

  14. 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

  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 • 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)

  19. 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

  20. 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.

  21. 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

  22. 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ć

  23. 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

  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<y then writeln(x,’ mniejsze od ‘,y) else writeln(x,’ większe od ‘,y); end.

  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) • 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 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.

  32. 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

  33. 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

  34. 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 (?)

  35. Operacje na plikach • Operacje na plikach • Praca 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 poziomu • C++ 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<<endl; } • Program voidmain() { printf(”Czesc!\n”); }

  39. 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; }

  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 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

  43. 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.

  44. 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

  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ą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

  50. 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)

More Related