Konspekt z przedmiotu Programowanie strukturalne
Temat: Pętla FOR.
Prowadzący: inż. Marek Pudełko
Klasa I SP, specjalność technik Informatyk
Lekcja odbyła się 21.10.2004
Czas zajęć: 2 x 45 minut.
Cele dydaktyczne:
Nauczenie się konstruowania poprawnej pętli FOR w języku Pascal.
Cele operacyjne:
Po zajęciach słuchacze powinni umieć:
Konstruować poprawną pętlę FOR w języku Pascal
Modyfikować odpowiednio pętlę FOR, by osiągnąć zamierzony efekt.
Środki dydaktyczne: komputer, tablica, karteczki z przykładowym programem.
Metody: pogadanka, praca z komputerem, praca samodzielna, dyskusja.
Formy: praca z zespołem klasowym, praca indywidualna słuchacza
Przebieg lekcji:
1) Część wstępna:
powitanie
sprawdzenie listy obecności
2) Lekcja właściwa:
Przypomnienie wiadomości. Co to jest pętla?
Pętla to struktura języka programowania, która pozwala na cykliczne wykonanie wiele razy tej samej (lub podobnej) operacji.
Pętla operuje na takich samych operacjach, danych, strukturach, obiektach czy procedurach.
Przykład. Unaocznienie potrzeby zastosowania pętli.
Mamy wykonać np. 1000 razy operację przypisania wartości do jakiejś zmiennej. Używając języków niestrukturalnych np. asemblera, musielibyśmy taką instrukcję napisać 1000 razy (ułatwimy sobie wprawdzie pracę używając polecenia kopiuj - wklej, ale to nie rozwiązuje problemu).
Mov AX,BX - przekopiuj zawartość rejestru BX do rejestru AX.
Korzystając z pętli upraszczamy sprawę:
for i:=1 to 1000 do
AX:=BX;
Takie instrukcje nazywamy INSTRUKCJAMI ITERACYJNYMI. Służą do ograniczenia cykli programowych, tj. wielokrotnego wykonywania pewnych sekwencji instrukcji.
Informacja. Ogólna zasada działania pętli. Schemat blokowy i opis słowny.
PĘTLA FOR
Start -uruchomienie programu
inicjalizacja wstępna zmiennych - licznik:=1, n:=10
wczytaj n - program wczytuje n
Iicznik ≤ n - postawienie warunku
Nie - niespełnienie warunku (licznik ≤ n) zatrzymanie programu
Tak - spełnienie warunku (licznik >n) dalsza praca programu
Wykonanie przewidzianej operacji
Operacja zwiększania licznika o 1 (INKREMENTACJA) - w pętli FOR domyślna
Powrót do sprawdzenia warunku, dwie możliwości
NIE - zakończenie pracy programu
TAK - kontynuowanie procesu, aż do niespełnienia warunku
Prezentacja. Przedstawienie schematu programu pętla FOR.
program petla_for;
var i,j,k:integer;
begin
j:=1;
k:=10;
writeln('Program wypisuje liczby przy pomocy pętli');
for i:=1 to 10 do
begin
writeln (i);
end;
readln;
end.
Ćwiczenie. Pisanie programu przez uczniów.
Praca z nauczycielem. Poprawa błędów powstałych przy kompilacji. Zaznaczenie pewnych fragmentów kodu przy pomocy klamer komentujących {,}.
Praca z tablicą. Wypisanie podstawowych kroków i fragmentów kodu tworzonych przez uczniów.
Praca samodzielna ucznia. Zmiana programu - wpisanie innych danych.
for i:=j to k do
begin
writeln (i);
end;
Uczniowie zmieniają wartości j i k. Obserwują jak się zmienia efekt działania programu. Instrukcja jest wykonywana tyle razy ile wynosi różnica pomiędzy wyrażeniem j a wyrażeniem k.
Liczb dodatnie, ujemne, zmiana znaku liczby,
Ćwiczenie. Korzystając z funkcji Char(i) napisać program wypisujący tablicę kodową znaków ASCII. Ma zawierać znaki o kodach od 0 do 255.
program tablica_ASCII;
var i,j:integer;
begin
i:=1;
writeln('Program wypisuje na ekranie zawartosc tablicy ASCII');
for i:=0 to 255 do
write (char(i),',');
readln;
end.
Ćwiczenie. Jak zrobić pętlę liczącą w dół? Jak wyświetlić liczby od największej do najmniejszej? Uczniowie próbują znaleźć rozwiązanie korzystając z poprzednich ćwiczeń.
Wskazówka: W jaki sposób wyświetlają się liczby ujemne? A w jaki te ze zmienionym znakiem?
Informacja. Pętla licząca w dół.
W języka Paskal istnieje możliwość zaimplementowania pętli liczącej w dół (dekrementacyjnej). Konstrukcja taka ma postać:
for i:=10 downto 1 do
writeln (i);
Praca samodzielna ucznia. Zmiana programu - wpisanie pętli dekrementacyjnej do programu.
Ćwiczenie. Modyfikacja programu, tak by odpowiadał schematowi blokowemu.
Program ma wczytywać wielkość n z zewnątrz i wypisywać liczby od 1 do n oraz od n do 1.
Informacja. Istnieje możliwość umieszczenia jednej pętli w drugiej. Wtedy operacje zawarte w środku wykonywane są tyle razy ile wynosi iloczyn poszczególnych pętli.
for i:=1 do 10 do
for j:=1 do 10 do
writeln (i + j);
Ćwiczenie. Napisanie programu, który wypisuje na ekranie zawartość tabliczki mnożenia w zakresie od 1 do 100.
program tabliczka_mnozenia;
var i,j:integer;
begin
i:=1;
j:=1;
writeln('Program wypisuje na ekranie tabliczke mnozenia');
for i:=1 to 10 do
begin
for j:=1 to 10 do
begin
write (i*j:3,',');
end;
writeln;
end;
readln;
end.
Rysunek 1 - Efekt działania programu Tabliczka_mnozenia
Praca samodzielna uczniów. Narysowanie schematu blokowego programu tabliczka mnożenia.
Dyskusja. Porównanie efektów działania programów.
Zadanie domowe. Narysowanie schematu blokowego programu z dekrementacyjną pętlą.
3) Zajęcia końcowe:
powtórzenie materiału z lekcji:
Podstawowe problemy napotkane przy pisaniu programu.
Definicja pętli FOR w języku Pascal.
Interesujące rozwiązania.
ocena pracy słuchaczy.
program petla_for;
var i,j,k:integer;
begin
j:=1;
k:=10;
writeln('Program wypisuje liczby przy pomocy petli');
for i:=1 to 10 do
begin
writeln (i);
end;
readln;
end.
program petla_for;
var i,j,k:integer;
begin
j:=1;
k:=10;
writeln('Program wypisuje liczby przy pomocy petli');
for i:=1 to 10 do
begin
writeln (i);
end;
readln;
end.
program petla_for;
var i,j,k:integer;
begin
j:=1;
k:=10;
writeln('Program wypisuje liczby przy pomocy petli');
for i:=1 to 10 do
begin
writeln (i);
end;
readln;
end.
program petla_for;
var i,j,k:integer;
begin
j:=1;
k:=10;
writeln('Program wypisuje liczby przy pomocy petli');
for i:=1 to 10 do
begin
writeln (i);
end;
readln;
end.
program tabliczka_mnozenia;
var i,j:integer;
begin
i:=1;
j:=1;
writeln('Program wypisuje na ekranie tabliczke mnozenia');
for i:=1 to 10 do
begin
for j:=1 to 10 do
begin
write (i*j:3,',');
end;
writeln;
end;
readln;
end.
program tabliczka_mnozenia;
var i,j:integer;
begin
i:=1;
j:=1;
writeln('Program wypisuje na ekranie tabliczke mnozenia');
for i:=1 to 10 do
begin
for j:=1 to 10 do
begin
write (i*j:3,',');
end;
writeln;
end;
readln;
end.
program tabliczka_mnozenia;
var i,j:integer;
begin
i:=1;
j:=1;
writeln('Program wypisuje na ekranie tabliczke mnozenia');
for i:=1 to 10 do
begin
for j:=1 to 10 do
begin
write (i*j:3,',');
end;
writeln;
end;
readln;
end.
program tablica_ASCII;
var i,j:integer;
begin
i:=1;
writeln('Program wypisuje na ekranie zawartosc tablicy ASCII');
for i:=0 to 255 do
write (char(i),',');
readln;
end.
program tablica_ASCII;
var i,j:integer;
begin
i:=1;
writeln('Program wypisuje na ekranie zawartosc tablicy ASCII');
for i:=0 to 255 do
write (char(i),',');
readln;
end.
program tablica_ASCII;
var i,j:integer;
begin
i:=1;
writeln('Program wypisuje na ekranie zawartosc tablicy ASCII');
for i:=0 to 255 do
write (char(i),',');
readln;
end.
program tablica_ASCII;
var i,j:integer;
begin
i:=1;
writeln('Program wypisuje na ekranie zawartosc tablicy ASCII');
for i:=0 to 255 do
write (char(i),',');
readln;
end.
program tablica_ASCII;
var i,j:integer;
begin
i:=1;
writeln('Program wypisuje na ekranie zawartosc tablicy ASCII');
for i:=0 to 255 do
write (char(i),',');
readln;
end.
Program przekatna_ekranu;
Uses DOS,CRT;
Var
t:word;
Begin
ClrScr;
FOR t:=1 to 4 do
Begin
GotoXY(t*4,t*4);
Write(t);
End;
readln;
End.
Program przekatna_ekranu;
Uses DOS,CRT;
Var
t:word;
Begin
ClrScr;
FOR t:=1 to 4 do
Begin
GotoXY(t*4,t*4);
Write(t);
End;
readln;
End.
Program przekatna_ekranu;
Uses DOS,CRT;
Var
t:word;
Begin
ClrScr;
FOR t:=1 to 4 do
Begin
GotoXY(t*4,t*4);
Write(t);
End;
readln;
End.
Program przekatna_ekranu;
Uses DOS,CRT;
Var
t:word;
Begin
ClrScr;
FOR t:=1 to 4 do
Begin
GotoXY(t*4,t*4);
Write(t);
End;
readln;
End.
Program przekatna_ekranu;
Uses DOS,CRT;
Var
t:word;
Begin
ClrScr;
FOR t:=1 to 4 do
Begin
GotoXY(t*4,t*4);
Write(t);
End;
readln;
End.
Program przekatna_ekranu;
Uses DOS,CRT;
Var
t:word;
Begin
ClrScr;
FOR t:=1 to 4 do
Begin
GotoXY(t*4,t*4);
Write(t);
End;
readln;
End.
Program przekatna_ekranu;
Uses DOS,CRT;
Var
t:word;
Begin
ClrScr;
FOR t:=1 to 4 do
Begin
GotoXY(t*4,t*4);
Write(t);
End;
readln;
End.
Program przekatna_ekranu;
Uses DOS,CRT;
Var
t:word;
Begin
ClrScr;
FOR t:=1 to 4 do
Begin
GotoXY(t*4,t*4);
Write(t);
End;
readln;
End.
Program tablica_na_ekranie;
Uses DOS,CRT;
Var
t,n:word;
Begin
ClrScr;
FOR n:=1 to 4 do
FOR t:=1 to 4 do
Begin
GotoXY(t*4,n);
Write(t*n);
End;
readln;
End.
Program tablica_na_ekranie;
Uses DOS,CRT;
Var
t,n:word;
Begin
ClrScr;
FOR n:=1 to 4 do
FOR t:=1 to 4 do
Begin
GotoXY(t*4,n);
Write(t*n);
End;
readln;
End.
Program tablica_na_ekranie;
Uses DOS,CRT;
Var
t,n:word;
Begin
ClrScr;
FOR n:=1 to 4 do
FOR t:=1 to 4 do
Begin
GotoXY(t*4,n);
Write(t*n);
End;
readln;
End.
Program tablica_na_ekranie;
Uses DOS,CRT;
Var
t,n:word;
Begin
ClrScr;
FOR n:=1 to 4 do
FOR t:=1 to 4 do
Begin
GotoXY(t*4,n);
Write(t*n);
End;
readln;
End.
Program tablica_na_ekranie;
Uses DOS,CRT;
Var
t,n:word;
Begin
ClrScr;
FOR n:=1 to 4 do
FOR t:=1 to 4 do
Begin
GotoXY(t*4,n);
Write(t*n);
End;
readln;
End.
Program tablica_na_ekranie;
Uses DOS,CRT;
Var
t,n:word;
Begin
ClrScr;
FOR n:=1 to 4 do
FOR t:=1 to 4 do
Begin
GotoXY(t*4,n);
Write(t*n);
End;
readln;
End.
Program tablica_na_ekranie;
Uses DOS,CRT;
Var
t,n:word;
Begin
ClrScr;
FOR n:=1 to 4 do
FOR t:=1 to 4 do
Begin
GotoXY(t*4,n);
Write(t*n);
End;
readln;
End.
Program tablica_na_ekranie;
Uses DOS,CRT;
Var
t,n:word;
Begin
ClrScr;
FOR n:=1 to 4 do
FOR t:=1 to 4 do
Begin
GotoXY(t*4,n);
Write(t*n);
End;
readln;
End.
3
START
licznik := 1
n := 10
licznik := licznik +1
Wczytaj n
Wykonanie określonej operacji
STOP
licznik ≤n
NIE
TAK