Podsumowanie: algorytmy, systemy liczbowe, Python, petle, funkcje, testowanie
📋 Podstawa programowa: I+IIAlgorytm to skonczony ciag precyzyjnie okreslonych krokow prowadzacych do rozwiazania problemu. Kazdy algorytm powinien miec: dane wejsciowe, dane wyjsciowe, skonczony czas dzialania i jednoznacznosc krokow.
Sposoby zapisu algorytmow:
Poznalismy cztery systemy liczbowe:
Kluczowe elementy jezyka Python, ktore poznalismy:
# Podsumowanie skladni Pythona
# Zmienne i typy
x = 10 # int
pi = 3.14 # float
imie = "Anna" # str
ok = True # bool
# Warunek
if x > 0:
print("Dodatnia")
elif x == 0:
print("Zero")
else:
print("Ujemna")
# Petla for
for i in range(1, 11):
print(i, end=" ")
# Funkcja
def silnia(n):
wynik = 1
for i in range(1, n + 1):
wynik *= i
return wynik
Poznane algorytmy:
Prawidlowe testowanie obejmuje: dane typowe, brzegowe (edge cases), niepoprawne i specjalne. Technika print debugging pomaga lokalizowac bledy.
a) Zamien liczbe 156(DEC) na system binarny (BIN).
b) Zamien liczbe 11010110(BIN) na system dziesietny (DEC).
c) Zamien liczbe 3F(HEX) na system dziesietny (DEC).
a) 156 / 2 = 78 r 0
78 / 2 = 39 r 0
39 / 2 = 19 r 1
19 / 2 = 9 r 1
9 / 2 = 4 r 1
4 / 2 = 2 r 0
2 / 2 = 1 r 0
1 / 2 = 0 r 1
Odczytujemy od dolu: 156(DEC) = 10011100(BIN)
b) 11010110(BIN) = 1*128 + 1*64 + 0*32 + 1*16 + 0*8 + 1*4 + 1*2 + 0*1
= 128 + 64 + 16 + 4 + 2 = 214(DEC)
c) 3F(HEX) = 3*16 + 15*1 = 48 + 15 = 63(DEC)
Przeanalizuj ponizszy kod i odpowiedz: a) Co robi ten program? b) Jaki wynik da dla n=5? c) Jaki wynik da dla n=0?
def tajemnicza(n):
wynik = 0
for i in range(1, n + 1):
if i % 2 == 0:
wynik += i
return wynik
a) Program oblicza sume liczb parzystych od 1 do n.
b) Dla n=5:
i=1: nieparzysta, pomijamy
i=2: parzysta, wynik = 0 + 2 = 2
i=3: nieparzysta, pomijamy
i=4: parzysta, wynik = 2 + 4 = 6
i=5: nieparzysta, pomijamy
Wynik: 6
c) Dla n=0: petla sie nie wykonuje (range(1,1) jest pusty)
Wynik: 0
Napisz w Pythonie funkcje suma_cyfr(n), ktora oblicza sume cyfr liczby naturalnej n. Przetestuj ja dla wartosci: 123, 9999, 0, 5.
def suma_cyfr(n):
suma = 0
while n > 0:
suma += n % 10 # ostatnia cyfra
n = n // 10 # usuwamy ostatnia cyfre
return suma
# Testy
print(suma_cyfr(123)) # 6 (1+2+3)
print(suma_cyfr(9999)) # 36 (9+9+9+9)
print(suma_cyfr(0)) # 0
print(suma_cyfr(5)) # 5
Napisz program, ktory wczytuje od uzytkownika ciag liczb (konczacy sie na 0) i wyswietla: a) ile bylo liczb, b) srednia, c) wartosc maksymalna, d) wartosc minimalna, e) ile bylo liczb pierwszych.
import math
def czy_pierwsza(n):
if n < 2:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
liczby = []
while True:
x = int(input("Podaj liczbe (0 = koniec): "))
if x == 0:
break
liczby.append(x)
if len(liczby) > 0:
print(f"a) Liczba elementow: {len(liczby)}")
print(f"b) Srednia: {sum(liczby)/len(liczby):.2f}")
print(f"c) Maksimum: {max(liczby)}")
print(f"d) Minimum: {min(liczby)}")
ile_pierwszych = sum(1 for x in liczby if czy_pierwsza(x))
print(f"e) Liczb pierwszych: {ile_pierwszych}")
else:
print("Nie podano zadnych liczb.")