Feladatok

  • Minden feladatot a feladatszámnak megfelelő számú megoldásnotebookban oldj meg. Azaz az első feladatot az 1_feladat.html notebookban.
  • A halálfejes (☠) feladatokhoz, hozz létre a kötelező feladatokhoz hasonlóan egy új notebookot a MEGOLDASOK könyvtárban.
  • Csak azok a feladatok kerülnek elbírálásra, amelyek a MEGOLDASOK mappában vannak!
  • A megoldás tartalmazza a megoldandó feladat szövegét a megoldásnotebook első markdown cellájában!
  • Kommentekkel, illetve markdown cellákkal magyarázd, hogy éppen mit csinál az adott kódrészlet!
    Magyarázat nélkül a beküldött feladatok csak fél feladatnak számítanak!
  • Az elkészített ábrák minden esetben rendelkezzenek ábrafeliratokkal (cím, tengelyfeliratok és $-$ amennyiben indokolt $-$ jelmagyarázat)! Amennyiben a beadott ábrákon nincsenek feliratok, az adott feladat automatikusan csak fél feladatnak számít!

1. Feladat

láthatóság

Írjuk meg a_fuggveny_ami_azt_mondja_ping() nevű függvényt, ami a meghívása esetén beleírja a végrehajtás pontos idejét az utolso_ping nevű globális változóba.

  • a_fuggveny_ami_azt_mondja_ping() függvénynek nem lehet argumentuma,
  • a pontos időhöz használjuk a datetime modul datetime.now() függvényét,
  • az utolso_ping típusa legyen karakterlánc.

2. Feladat

class

Írj egy osztályt, melynek elemei polinomok.

  • Az objektumok inicializálásakor megadott lista tartalmazza az adott polinom együtthatóit (tetszőlegesen sok együttható lehet!).
  • Az objektumok inicializálásakor a megadott együthatók számát tároljuk el a fok_szam attribútumban.
  • Legyen az osztálynak egy olyan metódusa, ami a $[-1,1]$ intervallumban 100 pontban kiértékeli és ábrázolja a polinomot piros 3 vonalszélességű egyenletes vonallal. Legyen a metódus neve mutasd_meg!
  • Egy mintapéldával demonstráld, hogy az osztályod jól működik!
In [ ]:
class polinom:
    '''Ez egy polinom osztály'''
    def __init__(self, .....  ):
        # ide jön az inicializáló függvény
    def mutasd_meg(self):
        # ide jön az ábrázoló függvény
        

3. Feladat

class

Írj egy osztályt, melynek elemei két dimenziós alakzatok!

  • Az objektumok inicializálása egy olyan lista alapján történjen, melynek elemei valós számpárok (kételemű listák). Ezek a számpárok az adott alakzat csúcsainak koordinátái.
  • Legyen az osztálynak egy olyan metódusa, mely kiszámítja az alakzatok súlypontját és felületét, és aminek a neve sulypont_szamolo! A metódus térjen vissza egy három számból álló listával, ezek közül az első kettő a súlypont koordinátája, a harmadik pedig a felület értéke.

4. Feladat

speciális method-ok

Egészítsük ki a mintapéldában definiált Robot osztályt egy __mul__ függvénnyel! Ez lehetővé teszi két Robot összeszorzását a "*" operátorral. A szorzat eredménye egy harmadik Robot legyen, melynek a neve a szorzatban résztvevő robotok neveinek egymás után fűzése.

5. Feladat

öröklés

A második feladatban definiált polinomosztályból származtassunk egy alosztályt, mely rendelkezik egy új metódussal.

Az új metódus

  • egy bemenő x_0 változóval rendelkezzen, mely egy valós szám,
  • a metódus ellenőrizze le, hogy x_0 gyöke-e a polinomnak,
  • a metódus térjen vissza True értékkel, ha x_0 gyöke a polinomnak,
  • ha x_0 nem gyök, akkor a metódus térjen vissza False értékkel, és írja ki a polinom értékét az x_0 helyen.
  • azt, hogy x_0 gyök vagy nem, azt egy tol tolerancia osztályváltozó alapján döntsük el, ami egy kicsi pozitív szám, azaz ha f(x_0)<tol, akkor fogadjuk el x_0-t gyöknek.

☠ 6. Feladat

láthatóság

Írjunk egy függvényt, ami megvicceli a felhasználót a következő módokon:

Ha meghívod a függvényt, csak fusson le visszatérési érték nélkül, és a felhasználó tudjon tovább dolgozni. Miután meghívtad, a következő furcsaságok érjék a felhasználót a továbbiakban:

  • a max függvény két érték maximuma helyett azok minimumumát adja meg,
  • a min függvény két érték minimuma helyett azok maximumát adja meg,
  • a print függveny minden alkalommal végezze el a dolgát, aztán írja ki, hogy "Self destruct in 10 seconds", majd számoljon vissza a "10 9 8 7 6 5 4 3 2 1" számok kiírásával masodpercenként.
In [ ]:
def meghivod_megviccel():
    """Muhhahah miert mondanam el, mit csinalok."""
    # ide jon a varazslat ...
    
# meghivod, meg semmi furcsa nincs
meghivod_megviccel()

# ez mar furcsa legyen
print('min:',min(1,3),'max:',max(1,3))

☠ 7. Feladat

Írjunk egy Rubik-kocka osztályt!

  • A turn tagfüggvénnyel tetszőleges módon lehessen rendesen forgatni,
  • 2 dimenzióba kiterítve és 3 dimenzióban is meg lehessen nézni az állapotát,
  • lehessen random állapotból indítani.

☢ Írjunk hozzá egy tagfüggvényt, ami megoldja a kockát, és kiírja a megoldáshoz szükséges lépéseket. ☢

☠ 8. Feladat

Kvaterniók

Írjunk egy osztályt, mely a kvaterniók matematikai tulajdonságait valósítja meg.

☠ 9. Feladat

implementációs feladat

Írjuk meg az alábbi hierarchiát megvalósító öröklődési osztálystruktúrát.

  • a hierarchia minden szintjén vezessünk be új metódusokat és új attribútumokat,
  • legyenek a bevezetett metódusok között speciális metódusok,
  • legyen olyan metódus ami a print függvényt használva valamit kiír,
  • legyen olyan metódus ami egy számmal tér vissza,
  • legyen olyan metódus ami ábrát készít.

☠ 10. Feladat

öröklés

Készítsük el a saját mátrix osztályunkat, aminek az exp() taggfüggvénye a mátrix exponciálisát adja vissza (tehát nem egyszerűen a mátrix elemeinek exponencializáltját). Az osztályunk minden más tekintetben ugyanúgy viselkedjen, mint a numpy mátrixosztálya. Kis segitség: https://docs.scipy.org/doc/numpy/user/basics.subclassing.html

In [1]:
import numpy as np
class M(...):
    #...
    def exp(self):
        """ Matrix exponencialis."""
        #...
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-1-57217a886aee> in <module>()
      1 import numpy as np
----> 2 class M(...):
      3     #...
      4     def exp(self):
      5         """ Matrix exponencialis."""

TypeError: EllipsisType takes no arguments