background image

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/

background image

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

background image

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

background image

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? 

background image

Logika cyfrowa

background image

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

background image

Maskowanie bitowe 

o

Rejestr R

o

Jak sprawdzi

ć

co siedzi w R

?

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

background image

Maskowanie – odczyt bitu

o

Jak sprawdzi

ć

co siedzi w R

?

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

=

background image

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

?

?

?

=

background image

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

?

?

?

=

background image

Konwersja little-big endian

Jak wykona

ć

operacj

ę



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

background image

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

background image

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

background image

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

background image

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’

background image

Tworzenie tablic (2)

o

lista2 = [0]*5  

#tworzy tablic

ę

o 5 elementach równych 0 

SIZE = 1024

bufor = [0]*SIZE

background image

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

ę

1)

background image

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)

background image

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

background image

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

ść

background image

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

background image

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'])

background image

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

background image

Ła

ń

cuchy (string)

o

w prezentacji Marka

background image

25

Programing exercises

PROGRAMMING 
EXERCISE