Wstep do Informatyki

Transkrypt

Wstep do Informatyki
Wstep
˛ do Informatyki
dr hab. Bożena Woźna-Szcześniak, prof. AJD
[email protected]
Jan Długosz University, Poland
Wykład 8
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
1 / 32
Instrukcje iteracyjne (z powtórzeniami)
Spotykamy sie˛ cz˛esto z takim sytuacjami, w których musimy
wykonywać pewna˛ czynność aż do momentu, gdy odniesiemy
sukces, np.
zrób dziesieć
˛ pompek;
bedziesz
˛
tak długo czytać wiersz, aż nauczysz sie˛ go na pamieć;
˛
dopóki bedziesz
˛
siedzieć cicho, nie zapytam cie.
˛
Z tego wynika, że możemy spotkać sie˛ z dwoma sytuacjami: gdy
musimy wykonać czynność badź
˛ zadana˛ ilość razy, badź
˛ do
momentu spełnienia warunku. Zatem powtarzanie różnych działań
ma dwojaka˛ postać:
liczba powtórzeń jest z góry określona (przed rozpocz˛eciem cyklu).
liczba powtórzeń jest nieznana (zależy od spełnienia pewnego
warunku).
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
2 / 32
Schemat blokowy - druk liczb z zakresu 1 . . . 9.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
3 / 32
Pseudokod - druk liczb z zakresu 1 . . . 9
begin
write("Liczby z zakresu 1..9");
i:= 1;
while (i <= 9) do
begin
write(i);
i := i+1;
end;
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
4 / 32
Python - druk liczb z zakresu 1 . . . 9
#!/usr/bin/env python3
print("Liczby z zakresu 1..9")
i = 1
while i<=9:
print(i)
i=i+1
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
5 / 32
Python - druk liczb z zakresu 1 . . . 9
#!/usr/bin/env python3
def zakres ():
print("Liczby z zakresu 1..9")
i = 1
while i<=9:
print(i)
i=i+1
def main():
zakres()
main()
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
6 / 32
Schemat blokowy - druk liczb z zakresu 1 . . . n.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
7 / 32
Pseudokod - druk liczb z zakresu 1 . . . n.
begin
write("Liczby z zakresu 1..n");
write("Podaj liczbe n = ");
read (n);
i:= 1;
while (i <= n) do
begin
write(i);
i := i+1;
end;
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
8 / 32
Python - druk liczb z zakresu 1 . . . n
#!/usr/bin/env python3
n = int(input("Podaj liczb˛
e całkowita:
˛ "))
print("Liczby z zakresu 1..",n)
i = 1
while i<=n:
print(i)
i=i+1
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
9 / 32
Python - druk liczb z zakresu 1 . . . n
#!/usr/bin/env python3
def zakres (n):
i = 1
while i<=n:
print(i)
i=i+1
def main():
n = int(input("Podaj liczb˛
e całkowita:
˛ "))
print("Liczby z zakresu 1..",n)
zakres(n)
main()
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
10 / 32
Lista kroków - algorytm Euklidesa
Algorytm Euklidesa:
Algorytm ten jest najstarszym algorytmem (ma ponad 2000 lat) i
przeznaczony jest do znajdowania najwiekszego
˛
wspólnego dzielnika
(NWD) dla dwóch liczb naturalnych, tj. NWD(5,25) = 5, NWD(15,25) =
5, NWD(22,24) = 2.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
11 / 32
Lista kroków - algorytm Euklidesa
Algorytm Euklidesa:
Algorytm ten jest najstarszym algorytmem (ma ponad 2000 lat) i
przeznaczony jest do znajdowania najwiekszego
˛
wspólnego dzielnika
(NWD) dla dwóch liczb naturalnych, tj. NWD(5,25) = 5, NWD(15,25) =
5, NWD(22,24) = 2.
Dane: dowolne dwie liczby naturalne a i b.
Wynik: NWD(a, b)
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
11 / 32
Lista kroków - algorytm Euklidesa
Algorytm Euklidesa:
Algorytm ten jest najstarszym algorytmem (ma ponad 2000 lat) i
przeznaczony jest do znajdowania najwiekszego
˛
wspólnego dzielnika
(NWD) dla dwóch liczb naturalnych, tj. NWD(5,25) = 5, NWD(15,25) =
5, NWD(22,24) = 2.
Dane: dowolne dwie liczby naturalne a i b.
Wynik: NWD(a, b)
Krok 0: Rozpocznij algorytm.
Krok 1: Wprowadź wartości dla liczb a i b.
Krok 2: Oblicz c jako reszte˛ z dzielenia a przez b.
Krok 3: Zastap
˛ a przez b, zaś b przez c.
Krok 4: Jeżeli b = 0, to szukane NWD(a, b) wynosi a, w
przeciwnym wypadku przejdź do 2.
Krok 5: Wyprowadź wynik: NWD(a, b).
Krok 4: Zakończ algorytm.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
11 / 32
Lista kroków - algorytm Euklidesa
Dane: dowolne dwie liczby naturalne a i b.
Wynik: NWD(a, b)
Krok 0: Rozpocznij algorytm.
Krok 1: Wprowadź wartości dla liczb a i b.
Krok 2: Oblicz c jako reszte˛ z dzielenia a przez b.
Krok 3: Zastap
˛ a przez b, zaś b przez c.
Krok 4: Jeżeli b = 0, to szukane NWD(a, b) wynosi a, w
przeciwnym wypadku przejdź do 2.
Krok 5: Wyprowadź wynik: NWD(a, b).
Krok 4: Zakończ algorytm.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
12 / 32
Lista kroków - algorytm Euklidesa
Dane: dowolne dwie liczby naturalne a i b.
Wynik: NWD(a, b)
Krok 0: Rozpocznij algorytm.
Krok 1: Wprowadź wartości dla liczb a i b.
Krok 2: Oblicz c jako reszte˛ z dzielenia a przez b.
Krok 3: Zastap
˛ a przez b, zaś b przez c.
Krok 4: Jeżeli b = 0, to szukane NWD(a, b) wynosi a, w
przeciwnym wypadku przejdź do 2.
Krok 5: Wyprowadź wynik: NWD(a, b).
Krok 4: Zakończ algorytm.
Przykład obliczenia NWD(1000, 32):
1
a = 1000, b = 32, c = 1000 mod 32 = 8
2
a = 32, b = 8, c= 32 mod 8 = 0
3
a = 8, b = 0 =⇒ NWD(1000, 32) = 8
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
12 / 32
Schemat blokowy - algorytm Euklidesa
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
13 / 32
Pseudokod - algorytm Euklidesa
Dane: dowolne dwie liczby naturalne a i b.
Wynik: NWD(a, b)
begin
write("Podaj dwie liczby naturalne");
read(a,b);
while (b != 0) do
begin
{reszta z dzielenia a przez b }
c := a mod b;
a := b;
b := c
end
NWD := a
write(NWD);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
14 / 32
Python - algorytm Euklidesa
#!/usr/bin/env python3
a = int(input("Podaj liczb˛
e całkowita:
˛ "))
b = int(input("Podaj liczb˛
e całkowita:
˛ "))
print("NWD(",a,",",b,") = ")
while b!=0:
c = a % b
a = b
b = c
print(a)
Przykładowe wykonanie:
Podaj liczb˛
e całkowita:
˛ 1000
Podaj liczb˛
e całkowita:
˛ 32
NWD( 1000 , 32 ) =
8
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
15 / 32
Pseudokod - algorytm Euklidesa
Dane: dowolne dwie liczby naturalne a i b.
Wynik: NWD(a, b)
begin
write("Podaj dwie liczby naturalne");
read(a,b);
while (a != b) do
begin
if (a < b) b:=b-a;
else a:=a-b;
end
NWD := a
write(NWD);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
16 / 32
Python - algorytm Euklidesa
#!/usr/bin/env python3
a = int(input("Podaj liczb˛
e całkowita:
˛ "))
b = int(input("Podaj liczb˛
e całkowita:
˛ "))
print("NWD(",a,",",b,") = ")
while a!=b:
if (a < b):
b = b - a
else:
a = a - b
print(a)
Przykładowe wykonanie:
Podaj liczb˛
e całkowita:
˛ 1000
Podaj liczb˛
e całkowita:
˛ 32
NWD( 1000 , 32 ) =
8
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
17 / 32
Python - algorytm Euklidesa
#!/usr/bin/env python3
def main():
a = int(input("Podaj liczb˛
e całkowita:
˛ "))
b = int(input("Podaj liczb˛
e całkowita:
˛ "))
print("NWD(",a,",",b,") = ")
while a!=b:
if (a < b):
b = b - a
else:
a = a - b
print(a)
main()
Przykładowe wykonanie:
Podaj liczb˛
e całkowita:
˛ 1000
Podaj liczb˛
e całkowita:
˛ 32
NWD( 1000 , 32 ) = 8
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
18 / 32
Python - algorytm Euklidesa
#!/usr/bin/env python3
def nwd (a,b):
while a!=b:
if (a < b):
b = b - a
else:
a = a - b
return a
def main():
a = int(input("Podaj liczb˛
e całkowita:
˛ "))
b = int(input("Podaj liczb˛
e całkowita:
˛ "))
c = nwd(a,b)
print("NWD(",a,",",b,") = ",c)
main()
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
19 / 32
Liczby trójkatne
˛
Nazwa “liczby trójkatne”
˛
pochodzi stad,
˛ że każda taka liczba o
numerze n jest liczba˛ np. kół jednakowej wielkości, z których
można ułożyć trójkat
˛ równoboczny o boku zbudowanym z n kół.
Liczby trójkatne
˛
to liczby postaci:
tn =
n ∗ (n + 1)
= 1 + 2 + 3 + ... + n
2
gdzie n jest liczba˛ naturalna.
˛
Przykłady liczb trójkatnych:
˛
t1 = 1, t2 = 3, t3 = 6, t4 = 10.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
20 / 32
Schemat blokowy - obliczanie sumy suma =
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Pn
i=1 i.
Wykład 8
21 / 32
Pseudokod - obliczanie sumy suma =
Pn
i=1 i.
begin
write("Podaj liczbe n = ");
read (n);
i:= 1;
suma := 0;
while (i <= n) do
begin
suma := suma + i;
i := i+1;
end;
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
22 / 32
Python - obliczanie sumy suma =
Pn
i=1 i.
#!/usr/bin/env python3
def suma (n):
i = 1
suma = 0
while i<=n:
suma = suma + i
i = i + 1
return suma
def main():
n = int(input("Podaj liczb˛
e całkowita:
˛ "))
c = suma(n)
print("Suma od 1 do ",n," = ",c)
main()
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
23 / 32
Python - obliczanie sumy suma =
Pn
i=1 i.
#!/usr/bin/env python3
def suma (n):
i = 1
suma = 0
while i<=n:
suma += i
i = i+1
return suma
def main():
n = int(input("Podaj liczb˛
e całkowita:
˛ "))
print("Suma od 1 do ",n," = ",suma(n))
main()
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
24 / 32
Schemat blokowy - funkcja silnia n! = 1 · 2 · . . . · n
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
25 / 32
Pseudokod - funkcja silnia n! = 1 · 2 · . . . · n.
begin
write("Podaj liczbe n = ");
read (n);
i:= 1;
silnia := 1;
while (i <= n) do
begin
silnia := silnia * i;
i := i+1;
end;
write(silnia);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
26 / 32
Suma n liczb wprowadzonych z klawiatury
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
27 / 32
Suma n liczb wprowadzonych z klawiatury
begin
write("Podaj liczbe n = ");
read (n);
i:= 1;
suma := 0;
while (i <= n) do
begin
write("Podaj liczbe: ");
read (a);
suma := suma + a;
i := i+1;
end;
write(suma);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
28 / 32
Suma ciagu
˛ liczb wprowadzonego z klawiatury i
zakończonego zerem
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
29 / 32
Suma ciagu
˛ liczb wprowadzonego z klawiatury i
zakończonego zerem
begin
write("Podaj liczbe: ");
read (a);
suma := 0;
while (a != 0) do
begin
suma := suma + a;
write("Podaj liczbe: ");
read (a);
end;
write(suma);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
30 / 32
Suma ciagu
˛ liczb parzystych wprowadzonego z
klawiatury i zakończonego zerem
begin
write("Podaj liczbe: ");
read (a);
suma := 0;
while (a != 0) do
begin
if (a mod 2 = 0) then suma := suma + a;
write("Podaj liczbe: ");
read (a);
end;
write(suma);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
31 / 32
Suma ciagu
˛ liczb podzielnych przez 5,
wprowadzonego z klawiatury i zakończonego zerem
begin
write("Podaj liczbe: ");
read (a);
suma := 0;
while (a != 0) do
begin
if (a mod 5 = 0) then suma := suma + a;
write("Podaj liczbe: ");
read (a);
end;
write(suma);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
32 / 32
Iloczyn ciagu
˛ liczb nieujemnych, wprowadzonego z
klawiatury i zakończonego zerem
begin
write("Podaj liczbe: ");
read (a);
iloczyn := 1;
while (a != 0) do
begin
if (a > 0) then iloczyn := iloczyn * a;
write("Podaj liczbe: ");
read (a);
end;
write(iloczyn);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
33 / 32
Iloczyn ciagu
˛ liczb nieujemnych, parzystych,
wprowadzonego z klawiatury i zakończonego zerem
begin
write("Podaj liczbe: ");
read (a);
iloczyn := 1;
while (a != 0) do
begin
if ((a > 0) and (a mod 2 = 0)) then
iloczyn := iloczyn * a;
write("Podaj liczbe: ");
read (a);
end;
write(iloczyn);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
34 / 32
Wybór algorytmu
Reguła˛ jest, że należy implementować najprostsze algorytmy, które
wykonuja˛ określone zadanie. Prosty algorytm to:
łatwiejsza implementacja,
czytelniejszy kod,
łatwość testowania
łatwość pisania dokumentacji,...
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
35 / 32
Zadania
Skonstruuj schemat blokowy do nastepuj
˛ acego
˛
zadania:
1
Wprowadź dwie liczby a i b. Skonstruuj algorytm porównania tych
liczb i wyprowadzania na wyjściu wiekszej
˛
z nich. W przypadku
liczb równych wyprowadź napis “liczby równe”.
2
Sprawdzić czy dana liczba dzieli sie˛ przez 3.
3
Sprawdzić czy suma dwóch liczb podanych przez użytkownika jest
parzysta.
4
Zamienić dana˛ liczne w systemie o podstawie n, na liczbe˛ w
systemie o podstawie m;
5
Dane sa˛ liczby dwa pojemniki A i B. W pojemniku A znajduje sie˛
ser, a w pojemniku B mak. Zaprojektuj algorytm, który przeniesie
ser do pojemnika B, a mak do pojemnika A. Pamietaj
˛ jednak o
tym, ze nigdy nie może być tak, że ser i mak znajda˛ sie˛ w tym
samym pojemniku.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 8
36 / 32