diszkrét matematika 1. eloadás - sapientia emtemgyongyi/diszkretmat/1_bevezeto.pdfdiszkrét...

25

Upload: others

Post on 02-Jan-2020

15 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Diszkrét matematika1. el®adás

MÁRTON Gyöngyvé[email protected]

Sapientia Egyetem,Matematika-Informatika TanszékMarosvásárhely, Románia

2019, ®szi félév

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 2: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Követelmények, osztályozás

Végs® jegy: (írásbeli jegy + laborjegy)/2, ahol mindkét jegy el kell érje a5 értéket.

Jelenlét: a laborgyakorlat kötelez®, hiányzás esetén kötelez® az órapótlása, ellenkez® esetben nem lehet részt venni az els® vizsgaalkalmon(egy tanévben 3 vizsgaalkalom van, kett® közvetlenül az oktatási id®szakután, a harmadik ®sszel van és ezért �zetni kell).

akinek a laborjegye legalább 7 az használhatja végs® jegyként ezt a jegyet

a félév során kétszer lesz laborfelmér®, ahol mindkét jegy el kell érje a 5-t;a két jegy átlaga képezi a laborjegyet.

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 3: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Követelmények

Az els® vizsga egy 9 pontos írásbeli tételsorból áll. Ez alkotja az írásbelijegyet. Ezen csak akkor lehet részt venni, ha a laborjegy legalább 5.

A második és harmadik vizsga szintén egy 9 pontos írásbeli tételsorból (ezalkotja az írásbeli jegyet, ha nem sikerül átmen® jegyet szerezni az els®alkalom során, vagy ha javítani szeretnénk), majd egy ezt követ®feladatsorból áll, amelyeket számítógépen kell leprogramozni (ez alkotja alaborjegyet).

A laborjegy, ha 5 felett van, akkor használható egész évben.

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 4: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Könyvészet

Bege A., Kása Z., Algoritmikus kombinatorika és számelmélet, Egyetemi Kiadó,Kolozsvár, 2006.

Freud R., Gyarmati E., Számelmélet, Nemzeti Tankönyvkiadó, Budapest, 2000.

Cormen T.H., Leiserson C.E., Rivest R.L., Algoritmusok, M¶szaki Könyvkiadó,Budapest, 2001.

Lovász L., Pelikán J., Vesztergombi K., Diszkrét matematika, Typotex,Budapest, 2006.

Rónyai L. Ivanyos G., Szabó R., Algoritmusok, Typotex, Budapest, 2004

Rosen K.H., Discrete Mathematics and its Applications, McGrawHill, New-York,2012.

Magnus Lie Hetland M.L., Beginning Python: From Novice to Professional, 2ndedition, Apress, 2008.

https://realpython.com/

http://nyelvek.inf.elte.hu/leirasok/Python/

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 5: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Áttekint®

Számok, számlálási problémák

számok, számtartományoksajátos számsorozatok: Fibonacci számokszámok ábrázolása, számrendszerek

Számelméleti alapfogalmak

prímszámok, prímtesztel® algoritmusoklegnagyobb közös osztó, legkisebb közös többszörös,az eukleidészi algoritmus és változataikongruenciák, kongruencia rendszerek, Kínai maradéktétel,egész számok faktorizációja,alkalmazás: az RSA klasszikus algoritmusa, Di�e-Helmannkulcscsere.

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 6: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Áttekint®

Kódolási technikák

az ASCII kód, a base64 kód

Álvéletlen-szám generátorok

Lineáris kongruencián alapuló generátorA közép-négyzet módszera Python álvéletlen számgenerátora

Kombinatorika

Lexicogra�kus sorrend, permutációk, kombinációk, variációk

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 7: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Bevezet®

diszkrét matematika → algoritmusok,

minden algoritmust, programot Python programozási nyelvben írunk,

verzió: Python 3.7.0, https://www.python.org/

a Python 1991-ben jelent meg, Guido van Rossum kezdte el fejleszteni,

Python, tulajdonságok:

magasszint¶ adatszerkezetek: listák, ennesek (tuple), stringek,halmazok, stb.,dinamikus típusosság,automatikus memóriakezelés,objektum orientáltság,rövid programok írása gyors és egyszer¶interpreter: a saját utasításait bemen® adatként kezeli, ezeketátalakítja a futtató gép utasításává, majd rögtön futtatja,ellentétben a fordító (kompilátor) típusú programozási nyelvekkela Python tulajdonképpen nem interpreter: byte kódot fordít ésfuttat

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 8: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Python, elemi kódsorok

a Python instalálása, majd indítása után megjelenik egy ablak egy kétsorosstandard szöveggel (Python verzió szám, stb.) és a prompt: �>

a prompt után kifejezések, utasítások írhatóak, amelyeket a Python interpretererögtön kiértékel:

Példák:

>>> print ("Hello vilag!")

Hello vilag!

>>> 251 + 965

1216

>>> 2 ** 100

1267650600228229401496703205376

#A Python 3.7.0 tetszoleges nagy, egész számokkal is tud muveleteket vegezni

>>> import math

>>> math.sqrt(10)

3.1622776601683795

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 9: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Python, elemi kódsorok

Példák:

>>> x = 10 #enter-t kell nyomni!

>>> y = 13 #enter-t kell nyomni!

>>> if x > y: print (x,' nagyobb, mint ',y)

#enter-t kell nyomni!!

else: print (y, ' nagyobb vagy egyenlo, mint ', x)

#ketszer kell enter-t nyomni!!

13 nagyobb vagy egyenlo, mint 10

>>> for i in range(10):

print (i) #ugyeljunk a tordelesre!!

0

1

...

9

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 10: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Python, szintaxis

Megjegyzések, "kommentek" használata:

egysoros megjegyzés: #ez egy egysoros megjegyzés

többsoros megjegyzés:

"""ez egy

többsoros megjegyzés"""

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 11: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Python, elemi kódsorok

Példák:

>>> for i in range(10):

print (i, end = " ")

0 1 2 3 4 5 6 7 8 9

>>> for i in range(10):

print (i, end = "")

0123456789

>>> for i in range(10):

print (2 ** i, end = " ")

1 2 4 8 16 32 64 128 256 512

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 12: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A programírás lépései

az interpreterbe beírt kifejezések, utasítások elvesznek, ha kilépünk aPythonból,

IDLE (integrated development environment): a Python standard fejleszt®ikörnyezete, programszerkesztésre, mentésre, állomány megnyításra,futtatásra ad lehet®séget,

a kódszerkeszt®t a File/New File menüpontból lehet elindítani

a kódszerkeszt® menüpontjai:

File/New File -új állomány létrehozása;File/Save -állomány mentése,Run/Run Module vagy Ctrl + F5 -a program futtatása a Pythonshell-b®lstb.

Python program: scriptnek is mondják

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 13: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

A programírás lépései

mentsük el eload1.py néven azt az állományt, amelybe a következ® kódsorokattettük:

n = 20

for i in range(n):

print (i/2, end = ", ")

IDLE alól való futtatás: Ctrl + F5

az eredmény (2-vel való valós osztás):

0.0, 0.5, 1.0, 1.5, 2.0, ..., 9.0, 9.5,

parancssorból való futtatás:

Windows: be kell állítani a PATH környezetváltozót (environment variable),úgy hogy megadjuk a python.exe állomány elérési útvonalát(System/Advanced system settings)a parancssorban a CD rendszerparanccsal kiválasztjuk azt a mappát, aholaz eload1.py állomány vanfuttatás: C:\> python eload1.py

futtatás: kétszer klikkelve az eload1.py-on

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 14: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Python, szintaxis

A programozási nyelvek egyik alapfogalma a változó:

A változók értékek tárolását teszik lehet®vé, a pontos jelentésprogramozási nyelvekt®l függ®en változik.A változók értéke: értékadás, értékmodósító utasításokkalhatározzuk meg.A változók típusa: a típus alapján d®l el, hogy a milyen fajtaértékeket kezel/tárol.A változókkal végzett m¶veletsorok képezik a programírás alapjait.Python változó: nincs explicit változódeklarálás. Aváltozódeklarálás automatikus, pl. értékadás során.

más alapfogalomak: operátor, függvény:

Az értékadó operátor az egyenl®ség (=).A print függvény kiértékeli a zárójelben megadott kifejezést, és azeredményt kiírja a standard kimenetre.input - adatbeviteli függvény, a beviteli értéket át kell alakítani

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 15: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Alaptípusok/osztályok a Pythonban

Kezd® programozók számára az osztályok és típusok egy fogalmat jelölnek,jelzik hogy milyen fajta adattal dolgozunk. Egy adott érték típusa pont olyanfontos informatikai fogalom, mint az érték.

alaptípusok: int, �oat, str, bool

>>> type(103373189)

<class 'int'>

>>> type(106.909)

<class 'float'>

>>> type(True)

<class 'bool'>

>>> type('helo vilag')

<class 'str'>

>>> type("helo vilag")

<class 'str'>

Karakterláncok (str) jelölésére egyformán használhatjuk a ', illetve " szimbólumokat

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 16: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Típusok közötti átalakítások

Egész számmá alakítunk:

>>> int(23.11)

23

>>> int(23.0)

23

>>> int(-23.900)

-23

>>> int(10/3)

3

>>> int('23 szo')

Traceback (most recent call last):

File "<pyshell#25>", line 1, in <module>

int('23 szo')

ValueError: invalid literal for int() with base 10: '23 szo'

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 17: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Típusok közötti átalakítások

Valós számmá alakítunk:

>>> float(15)

15.0

>>> float('23.67')

23.67

Karakterlánc típussá alakítunk:

>>> str(12)

'12'

>>> str(12.67)

'12.67'

>>> str(True)

'True'

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 18: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Python, szintaxis

más alapfogalmak: utasítás, operátor, függvény:

kommenteljük ki az el®z® kódsorokat (használjunk # -t a sorokelején) és most írjuk a következ®ket az eload1.py állományba:

print ("n:", end = " ")

n = int(input())

for i in range(1, n + 1):

print ("az osztasi egészrész", i, "-el: ", end = "")

print (n // i)

az eredmény:

n: 6

az osztasi egeszresz 1 -el: 6

az osztasi egeszresz 2 -el: 3

az osztasi egeszresz 3 -el: 2

az osztasi egeszresz 4 -el: 1

az osztasi egeszresz 5 -el: 1

az osztasi egeszresz 6 -el: 1

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 19: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Algoritmusok Pythonban

1. feladat

Határozzuk meg a beolvasott számok legkisebbikét, függvényt alkalmazva.

Saját függvényeket is írhatunk, kommenteljük ki a korábban írt kódsorokat ésírjuk a következ®ket az eload1.py állományba:

def fugv1():

print ('n:', end = " ")

n = int (input())

print ('x:', end = " ")

x = int (input())

m = x

for i in range (0, n-1):

print ('x:', end = " ")

x = int (input())

if x < m: m = x

return m

IDLE alól való fordítás: Ctrl + F5

IDLE alól való fordítás után:>>> fugv1()

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 20: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Python, szintaxis

A függvények a bemeneti értéken/értékhalmazon elvégeznek egym¶veletsort meghatározva egy kimeneti értéket/értékhalmazt.

Python függvényde�niálás:

def <fvnév> ( <paramlista> ) :

<fügvtörzs>

Az utolsó sorban lev® return utasítás teszi lehet®vé, hogy a függvényértéket adjon vissza, az el®z® példánál a függvény visszatéríti a legkisebbértéket a beolvasott értékek közül

a Python esetében nem kötelez® a return használata.

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 21: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Python, szintaxis

a range függvény egy számsorozatot generál, a megadott határértékekkel

a for ciklusutasítás de�niálása:

for <elem> in <halmaz> :

<ciklustörzs>

A for a halmaz minden elem elemére végrehajtja a ciklustörzs részt.

az if elágazásutasítás de�niálása:

if <kif> : <elágazástörzs>

(elif < kif > : <elágazástörzs>)

[else : <elágazástörzs>]

ha igaz a megfelel® kif kifejezés, akkor a megfelel® elágazástörzs

hajtódik végre. Az elif, else ágak nem kötelez®ek.

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 22: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Algoritmusok Pythonban

2. feladat

Végezzünk alap aritmetikai m¶veleteket.

def muveletek (x, y):

return (x + y, x - y, x * y, x // y, x % y, x / y )

def fugv2():

print ('x:', end = " ")

x = int (input())

print ('y:', end = " ")

y = int (input())

e1, e2, e3, e4, e5, e6 = muveletek(x, y)

print ("osszeg: ", e1)

print ("kulonbseg: ", e2)

print ("szorzat: ", e3)

print ("osztasi egeszresz: ", e4)

print ("osztasi maradek: ", e5)

print ("valos osztas: ", e6)

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 23: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Algoritmusok Pythonban

Az eload1.py állományba írt függvények bármelyike, fordítás után meghívható,a Python shell-ben:

>>> muveletek (25, 3)

(28, 22, 75, 8, 1, 8.333333333333334)

>>> fugv2()

x: 91

y: 42

osszeg: 133

kulonbseg: 49

szorzat: 3822

osztasi egeszresz: 2

osztasi maradek: 7

valos osztas: 2.1666666666666665

Vegyük észre, hogy a fugv2 meghívja a muveletek függvényt. A fugv2-neknincs bemeneti paramétere, a muveletek-nek azonban két bemeneti paraméterértékét kell megadni.

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 24: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Alapm¶veletek karakterláncokkal: +, * operátorok

>>> str1 = "Diszkrét"

>>> str2 = " Matematika"

>>> str3 = " I. félév"

>>> strT = str1 + str2 + str3

>>> print (strT)

'Diszkrét Matematika I. félév'

>>> strT = 3 * 'Helo '

>>> strT

'Helo Helo Helo '

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 25: Diszkrét matematika 1. eloadás - Sapientia EMTEmgyongyi/DiszkretMat/1_Bevezeto.pdfDiszkrét matematika 1. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem,

Algoritmusok Pythonban

3. feladat

Készítsünk meghívót az Egyetem Napja alkalmából!

def meghivo():

diakok = ['Mari', 'Szabi', 'Kati', 'Feri']

for d in diakok:

meghivo1 = 'Kedves ' + d + '! \n\nTisztelettel meghívjuk az Egyetem'

meghivo2 = '\nNapja alkalmából tartott eloadássorozatra!\n\n'

print (meghivo1 + meghivo2)

>>> meghivo()

Kedves Mari!

Tisztelettel meghívjuk az Egyetem Napja

alkalmából tartott eloadássorozatra!

Kedves Szabi!

...

MÁRTON Gyöngyvér 2019, Diszkrét matematika