1
Podstawy Programowania
ZŁO
Ż
ONE TYPY DANYCH,
LOGIKA CYFROWA I MACIERZE
Michał Bujacz
bujaczm@p.lodz.pl
B9 „Lodex” 207
godziny przyj
ęć
:
ś
rody i
czwartki 10:00-11:00
http://www.eletel.p.lodz.pl/bujacz/
Pytania z ostatniego wykładu:
o
Instrukcja (Instruction)
o
Zmienna (Variable), nazwa (Identifier)
o
Słowo kluczowe (Keyword)
o
Wyra
ż
enie (Expression)
o
Operator (Operator)
o
Komentarz (Comment)
2
Pytania z ostatniego wykładu:
o
Integer / short / long
•
co to „two’s complement” ?
o
Floating point / double
•
co to mantysa i wykładnik?
o
Char
o
Boolean
Pytania z ostatniego wykładu:
o
Jaka jest najwi
ę
ksza liczba całkowita jak
ą
mo
ż
emy zapisa
ć
na 2 bajtach? Ze znakiem?
Bez znaku?
o
Zapisz liczb
ę
FF34 binarnie i dziesi
ę
tnie
o
Ile spacji powinno oddziela
ć
ka
ż
dy poziom
kodu w Pythonie?
Logika cyfrowa
Operatory cyfrowe
XOR
x ^ y
negacja bitowa
liczbowo to -x - 1
~ x
OR
x | y
AND
x & y
przesu
ń
bity o y w prawo
po lewej wchodz
ą
zera
to samo co dzielenie przez 2
y
x >> y
przesu
ń
bity o y w lewo
po prawej wchodz
ą
zera
to samo co mno
ż
enie przez 2
y
x << y
Maskowanie bitowe
o
Rejestr R
o
Jak sprawdzi
ć
co siedzi w R
4
?
o
Jak przestawi
ć
R
4
na 1?
o
Jak przestawi
ć
R
4
na 0?
?
?
?
?
?
?
?
?
R
0
R
1
R
2
R
3
R
4
R
5
R
6
R
7
Maskowanie – odczyt bitu
o
Jak sprawdzi
ć
co siedzi w R
4
?
10011101 10010101
AND 00001000 00001000
= 00001000 00000000
?
?
?
?
?
?
?
?
R
0
R
1
R
2
R
3
R
4
R
5
R
6
R
7
0
0
0
0
1
0
0
0
AND
0
0
0
0
?
0
0
0
=
Maskowanie – ustawianie bitu
Jak przestawi
ć
R
4
na 1?
10011101
10010101
OR 00001000
00001000
= 10011101
10011101
?
?
?
?
?
?
?
?
R
0
R
1
R
2
R
3
R
4
R
5
R
6
R
7
0
0
0
0
1
0
0
0
OR
?
?
?
?
1
?
?
?
=
Maskowanie – zerowanie bitu
Jak przestawi
ć
R
4
na 0?
10011101 10010101
AND 11110111 11110111
= 10010101 10010101
?
?
?
?
?
?
?
?
R
0
R
1
R
2
R
3
R
4
R
5
R
6
R
7
1
1
1
1
0
1
1
1
AND
?
?
?
?
0
?
?
?
=
Konwersja little-big endian
Jak wykona
ć
operacj
ę
x
y dla 4 bajtowych liczb?
x = 4F 52 17 01 y = 01 17 52 4F
y1 = x >> 24
# 00 00 00 4F
y2 = x & 00FF0000
# 00 52 00 00
y2 = y2 >> 8
# 00 00 52 00
y3 = x & 0000FF00
# 00 00 17 00
y3 = y3 << 8
# 00 17 00 00
y4 = x << 24
# 01 00 00 00
y = y1 | y2 | y3 | y4
# 01 17 52 4F
Zło
ż
one typy danych
Jedna zmienna mo
ż
e odnosi
ć
si
ę
do zbioru
danych jednego lub kilku ró
ż
nych typów
o
Tablice/Sekwencje (list, str, buffer, np.matrix)
o
Zbiory/słowniki (set,dict)
o
Struktury/Rekordy
o
Klasy/obiekty
12
Tablice/Sekwencje
o
zmienne indeksowane, uporz
ą
dkowane
o
indeksy zaczynaj
ą
si
ę
od 0 (wyj
ą
tki – Matlab,
Mathematica, Fortran, zaczynaj
ą
od 1)
o
indeks podawany w kwadratowych klamrach
o
zazwyczaj jeden typ danych
o
jedno lub wielowymiarowe
Tablice w Pytonie
o
Do
ść
nietypowe w porównaniu z wi
ę
kszo
ś
ci
ą
j
ę
zyków (np. Java czy C)
o
mog
ą
trzyma
ć
dowolne i ró
ż
ne typy danych
(heterogenous)
o
mog
ą
dynamicznie zmienia
ć
rozmiar i typ
danych (mutable)
o
indeksowane od 0
o
mo
ż
na u
ż
ywa
ć
ujemnych indeksów
Tworzenie tablic/list
o
lista = [1, 3.14, ‘a’, ‘b’, ‘c’]
o
lista
[1, 3.14, ‘a’, ‘b’, ‘c’]
o
lista[0]
1
o
lista[-1]
‘c’
Tworzenie tablic (2)
o
lista2 = [0]*5
#tworzy tablic
ę
o 5 elementach równych 0
SIZE = 1024
bufor = [0]*SIZE
Metody do u
ż
ycia na tablicach
<lista>.append(x)
dodaj warto
ść
x do ko
ń
ca listy (wydłu
ż
a tablic
ę
o 1)
<lista>.sort()
sortuj list
ę
(parametr decyduje o kolejno
ś
ci)
<lista>.reverse()
odwraca kolejno
ść
elementów w li
ś
cie
<lista>.index(x)
zwraca indeks kiedy warto
ść
x pojawia si
ę
pierwszy raz
<lista>.insert(i,
x)
wstawia warto
ść
x pod indeks i (wydłu
ż
a tablic
ę
o 1)
<lista>.count(x)
liczy ile razy warto
ść
x pojawia si
ę
w li
ś
cie
<lista>.remove(x)
usuwa pierwszy element równy x (skraca tablic
ę
o 1)
<lista>.pop(i)
usuwa element o indeksie i, zwraca jego warto
ść
(skraca tablic
ę
o
1)
Operatory na listach
<lista>
+
<lista>
scalenie (concatenation)
<lista>
*
<liczba>
powielenie
<lista>
[
i
]
warto
ść
pod indeksem i
len(
<lista>
)
długo
ść
listy
<lista>[
:
]
ci
ę
cie (slicing) – zwraca
now
ą
list
ę
od (włacznie) do
for
<zmienna>
in
<lista>
:
p
ę
tla „po li
ś
cie”
<x>
in
<lista>
sprawdza czy warto
ść
jest w
sekwencji (zwraca
prawd
ę
/fałsz)
U
ż
ywanie listy jako stosu
o
Stos to popularna struktura programistyczna typu
„Last-in, first-out”
o
Odkładamy na stos - powi
ę
kszamy list
ę
o element
o
Zdejmujemy ze stosu -> skracamy list
ę
>
stos = [10]
>
stos.append(20) # push
>
stos
[10, 20]
>
stos.pop() #kasuje i zwraca ostatni element
20
Zbiory, słowniki
Jak sekwencje, tylko nie indeksowane liczbowo
Zbiory (set) nie zawieraj
ą
powtarzaj
ą
cych si
ę
elementów
Słowniki (dict) zawieraj
ą
pary klucz:warto
ść
Zbiory, przykład
>>> koszyk = ['apple', 'orange', 'apple',
'pear', 'orange', 'banana'] #lista owocow
>>> owoce = set(basket) #zbior owocow
>>> owoce
set(['orange', 'pear', 'apple', 'banana'])
>>> 'orange' in owoce
#czy cos jest w zbiorze?
True
>>>
‘
pineapple' in owoce
False
Operacje na zbiorach
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a
# litery w a
set(['a', 'r', 'b', 'c', 'd'])
>>> a - b # litery w a, ale nie w b
set(['r', 'd', 'b'])
>>> a | b # litery w a lub w b
set(['a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'])
>>> a & b # litery w a i w b
set(['a', 'c'])
>>> a ^ b # (a | b) – (a & b)
set(['r', 'd', 'b', 'm', 'z', 'l'])
Przykład słownika
>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel
{'sape': 4139, 'guido': 4127, 'jack': 4098}
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv'] = 4127
>>> tel
{'guido': 4127, 'irv': 4127, 'jack': 4098}
>>> list(tel.keys())
['irv', 'guido', 'jack']
>>> sorted(tel.keys())
['guido', 'irv', 'jack']
>>> 'guido' in tel
True
>>> 'jack' not in tel
False
Ła
ń
cuchy (string)
o
w prezentacji Marka
25
Programing exercises
PROGRAMMING
EXERCISE