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

Download Report

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

Metodyka nauczania
Wykład 6. Informatyki
Uczenie programowania
1
Część I
WSTĘP
2
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
3
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
4
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.
5
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
6
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)
7
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
8
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
9
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.
10
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
11
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).
12
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...)
13
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
14
Część II
PASCAL
15
Ramowy plan uczenia
1.
2.
3.
4.
5.
6.
7.
8.
9.
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
16
Struktura programu
1. Struktura programu i najprostsze operacje
wejścia/wyjścia
–
–
Konieczność oraz możliwość natychmiastowego
utworzenia aplikacji
Przykład:
program halo;
begin
writeln(‘Witam!’);
end.
17
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)
18
Stałe, zmienne, przypisania
2. Stałe, zmienne i przypisania
– Definiowanie stałych (składnia, po co?)
– Zmienne (nazwy odpowiadają przeznaczeniu)
•
•
Deklaracje
Proste typy danych:
– integer,
– real,
– char
•
Podstawienia
19
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.
20
Styl kodu, komentarze
3. 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
21
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ć
22
Instrukcje warunkowe
4. 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
23
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.
24
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.
25
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
26
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.
27
Iteracje
5. 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)
28
Iteracje c.d.
•
Przykłady proste
1.
2.
3.
4.
5.
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;
29
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.
30
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.
31
Pobieranie danych
6. 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
32
Procedury i funkcje
7. 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
33
Złożone typy danych
8. Złożone typy danych
–
–
–
–
–
–
–
Tablice
Wskaźniki
Definiowanie własnych typów użytkownika
Typy okrojone (?)
Rekordy (?)
Zbiory (?)
Typy wyliczeniowe (?)
34
Operacje na plikach
9. Operacje na plikach
– Praca z plikami jako naturalna forma działania
programu (większość aplikacji operuje na
plikach)
– Ciekawe efekty...
35
Część III
C++
36
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
…
37
Proste programy w C++
• Program
void main()
{
int i;
cin>>i;
cout<<3*37*a<<endl;
}
• Program
void main()
{
printf(”Czesc!\n”);
}
38
Proste programy w C++
• Program
void main()
{
for(int i=9;i<100000;i=10*i+9)
cout<<i*i<<endl;
}
• Program
• Program
void main()
{
for(int i=9;i<100;i+=9)
cout<<i*12345679<<endl;
}
void main()
{
for(int i=1;i<100000;i=10*i+1)
cout<<pow(i,2)<<endl;
}
39
Część III
LOGO
40
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
41
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
42
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.
43
Przykład (dyktando)
•
•
•
•
•
•
•
•
•
•
•
•
rt
fd
rt
fd
rt
fd
rt
fd
rt
fd
rt
fd
270
460
170
500
105
20
180
10
240
10
240
10
•
•
•
•
•
•
•
•
•
•
•
•
rt
fd
rt
fd
rt
fd
rt
fd
rt
fd
rt
fd
90
20
30
10
285
15
150
15
285
30
255
40
44
Przykład (efekt)
45
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.)
46
Przykład
• fd
100
• rt 90
• fd 30
• rt
270
• fd 50
47
Przykład dokończenia
48
Ć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
49
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)
50
Droga „klasyczna”
• Eliminacja powtórzeń
– Z 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)
51
Droga „klasyczna” - procedury
• Procedury 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
52
Droga „klasyczna” - dalej
• Struktury 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
53
Droga „klasyczna” - geometria
• Jeż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
54
Droga „klasyczna” - koniec
• Uzupeł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
55
„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.
56
„Inna” droga - realizacja
• Procedura 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 ]
end
57
„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
58
„Inna” droga - straty
• Iteracja przestaje być czymś naturalnym
– Np. 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
]
end
59
„Inna” droga - geometria
• Tak jak w drodze klasycznej
60
„Inna” droga - uzupełnienia
• Jest mniej do uzupełniania bo więcej było
potrzebne w trakcie nauki
• Koniecznym elementem uzupełnienia jest
iteracja (REPEAT)
61
CZĘŚĆ IV
LOGO UWAGI OGÓLNE
62
Rysunki
• Podstawą uczenia są rysunki – im ciekawsze tym
lepiej
• Nie 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
63
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
64
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ą)
65
Rekurencja
• Naturalne narzędzie rozwiązywania problemów
– Zastępuje pętlę WHILE
– Zapamiętuje elementy w odpowiedniej kolejności
• Do rysowania
• Do obliczeń
• Do analizy list
66
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)
67
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
68