View
15
Download
0
Category
Preview:
Citation preview
Diszkrét matematika1. el®adás
MÁRTON Gyöngyvérmgyongyi@ms.sapientia.ro
Sapientia Egyetem,Matematika-Informatika TanszékMarosvásárhely, Románia
2019, ®szi félév
MÁRTON Gyöngyvér 2019, Diszkrét matematika
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
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
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
Á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
Á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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Recommended