1 Bevezető... 2 1.1 Szakdolgozat témája... 2 1.2 A Program célja... 2 1.3 Fejlesztői környezet... 2 1.4 A használt technológiák ismertetése... 2 2 A program megtervezése... 4 2.1 Az ablak kinézetének megtervezése:... 5 2.2 A program működésének megtervezése:... 5 3 Programterv... 5 3.1 Egyedi osztályok leírása... 6 3.1.1... 6 3.1.2 Abszolut... 8 3.1.3 Cos... 8 3.1.4 Exp... 8 3.1.5 Gyok... 8 3.1.6 Linearis... 8 3.1.7 Log... 9 3.1.8 Masodfoku... 9 3.1.9 Sin... 9 3.1.10 Szignum... 9 3.1.11 Koordinata_rendszer... 9
Bevezető 1.1 Szakdolgozat témája Szakdolgozatom témájának egy függvényrajzoló és elemző szoftver készítése mellett döntöttem. Bár a szoftverpiacon a felhasználó találhat magának ilyen jellegű szoftvert (Office, Mathlab), mégis úgy éreztem, hogy a függvény kirajzolása nem minden esetben elegendő. Sok esetben szükségünk lehet egy függvény valamely tulajdonságára, értékére illetve képére, melyeket az előbb említett programok nem szolgáltatnak. Ezért választottam ezt a témát, illetve mindig érdekelt a matematika és nem utolsó sorban kihívásnak éreztem a program megírását, mivel ezelőtt sosem írtam ehhez hasonló programot. 1.2 A Program célja A program célja különböző függvények elemzése és ábrázolása. A program megírásakor nagy hangsúlyt fektettem a következő dolgokra: könnyű kezelhetőség felhasználóbarát kezelőfelület részletes testreszabhatóság felesleges dolgok kiszűrése diákok tanulásának segítése, könnyítése 1.3 Fejlesztői környezet hardver: o Processzor: AMD Phenom II X2 550-3,1ghz o Memória: 2GB DDRII 800mhz o Videokártya: Gigabyte HD4670 512MB o Merevlemez: -Samsung 1TB,WD 500MB, Samsung 250MB szoftver: o OS: Windows 7 Professional 32bit o Fejlesztői környezet: Microsoft Visual Studio 2008 C# o UML készítő: Altova UModell2010 1.4 A használt technológiák ismertetése
A C# (kiejtése: szí-sárp) a Microsoft által a.net keretrendszer részeként kifejlesztett objektumorientált programozási nyelv. A nyelv alapjául a C++ és a Java szolgált. A C#- ot úgy tervezték, hogy meglegyen az egyensúly a fejlesztő nyelvi szabadsága és a gyors alkalmazásfejlesztés lehetősége között. A nyelv fejlesztését Anders Hejlsberg vezette, aki a Turbo Pascal tervezője volt. Bár a Mono Project szinte tökéletes C# fordítót állított elő (amely a nyelv legújabb 3.0 verzióját is támogatja), a C# Windows operációs rendszereken kívüli használata kevéssé elterjedt, mivel az osztálykönyvtárakat szolgáltató.net Framework portolása más rendszerek alá még kezdetleges stádiumban van A C# az a programozási nyelv, ami a legközvetlenebb módon tükrözi az alatta működő, minden.net programot futtató.net keretrendszert, valamint erősen függ is attól: nincsen nem menedzselt, natív módban futó C# program. A primitív adattípusai objektumok, a.net típusok megfelelői. Szemétgyűjtést használ, valamint az absztrakcióinak többsége (osztályok, interfészek, delegáltak, kivételek ) a.net futtatórendszert használja közvetlen módon. A C vagy C++ nyelvhez hasonlítva a C# több korlátozást és továbbfejlesztést is tartalmaz. A lehetőségei közül néhány: 1. A mutatók és a nem ellenőrzött aritmetika csak egy speciális, nem biztonságos módban (unsafe mode) használható. A legtöbb objektum-hozzáférés csak biztonságos hivatkozásokon keresztül tehető meg, és az aritmetikai műveletek debug módban túlcsordulás szempontjából ellenőrzöttek. 2. Az objektumok nem szabadíthatók fel közvetlen módon, ehelyett a szemétgyűjtő szabadítja fel őket, mikor már nincs rájuk hivatkozás. Ez a módszer kizárja a nem létező objektumokra való hivatkozás lehetőségét. 3. A destruktorok nem elérhetőek. A legközelebbi megfelelőjük az IDisposable interfész, ami a using blokkal együtt kikényszerítheti az azonnali felszabadítást. A finalizerek szintén rendelkezésre állnak, de nem váltanak ki azonnali felszabadítást. 4. A nyelv csak egyszeres öröklődést támogat, de egy osztály több interfészt is megvalósíthat. 5. A C# sokkal típusbiztosabb, mint a C++. Az egyetlen implicit konverzió a biztonságos konverzió, úgy mint az egészek tágabb intervallumba konvertálása
vagy a leszármazott osztályok alaposztályba konvertálása. Nincs implicit konverzió az egészek és a logikai típus (boolean) között, a felsorolás tagok és az egészek között. Nincsenek void mutatók (bár az Object osztályra mutató mutatók hasonlóak), valamint bármely, a felhasználó által definiált implicit konverziót explicit módon meg kell jelölni. 6. A felsorolás adattagjai a saját névterükben helyezkednek el. 7. A C# 1.x nem rendelkezik template-ekkel, de a C# 2.0 már rendelkezik genericsekkel. 8. Tulajdonságok (Properties) használhatók, amelyek úgy tesznek lehetővé kódfuttatást mezők beállításakor és olvasásakor, hogy közben az adattagok szintaxisát használja. 9. Teljes reflexió elérhető. A Visual Studio a Microsoft több programozási nyelvet tartalmazó programozási termékcsomagja, amely az évek során egyre több új programnyelvvel bővült. Jelenleg a J# (ejtsd: Dzséj sharp), C++, C# (ejtsd: Szí sharp) és Visual Basic programozási nyelveket, valamint az XML-t támogatja. A csomag része még (jól elrejtve) a MASM (Microsoft Macro Assembler) is, ami részleges assembly támogatást biztosít. A piacon ez az egyik legjobb (és legdrágább) fejlesztői csomag Windows-ra. 2007 végén jelent meg Visual Studio legutolsó, 2008-as verzióra (a kódneve Orcas). A kiadás egyik nagy újdonsága a multi-targeting, azaz szakítva az eddigi hagyományokkal - egy adott Visual Studio verzióval egy adott Framework verzióra lehetett szoftvert fejleszteni - a 2008-cal a.net Framework 2.0-s, 3.0-s, illetve a fejlesztőkörnyzettel egy időben bétából véglegessé váló 3.5-ös verziójára is készíthetünk programokat. Verziószám: 9.0 2 A program megtervezése
Mivel ez volt az első nem parancssoros programom, így a téma kiválasztása után azonnal elkezdtem ismerkedni a Windows Formokkal. Nagyon sokat kipróbáltam, majd összegyűjtöttem a számomra hasznosakat. 2.1 Az ablak kinézetének megtervezése: Az felhasználói felület megtervezésénél fontos szempont volt az egyszerűség, az átláthatóság és a könnyű kezelhetőség. Mindemellett nagyon sok információt szolgáltató mezőnek kellett szerepelnie az ablakban, illetve egy nagy, szintén mezőnek, amiben a függvényt fogja a program ábrázolni. Első körben egy több ablakból álló programot kezdtem el írni, majd később egy tabcontrol segítségével az ablakokat összevontam egy ablakká, így végül a program megkapta a végső kinézetét. Színek terén próbáltam kellemes, a szemet nem bántó színeket összeállítani. 2.2 A program működésének megtervezése: A program működéséből és bonyolultságából kifolyólag nagyon sok hiba jött számításba, ezért a program megírásakor próbáltam minden hibát elhárítani, illetve ha a felhasználó valamilyen hibát generál egy változó beírásakor, akkor a program azt azonnal jelzi. Paraméterek módosításakor a függvény ábrája azonnal újra lesz rajzolva, a programba ezen felül belekerült pár extra funkció is, mint például a függvény képének mentése különböző képtípusba, illetve lehetőség van a függvény minden tulajdonságának és értékének kimentésére txt fájlba. A tervezés során törekedtem a szimmetriára, minden paraméternek ugyanaz lett a maximális és a minimális beírható értéke, előjeltől és tizedesvesszőtől függetlenül. 3 Programterv
3.1 Egyedi osztályok leírása A programban számos osztályt hoztam létre, megkönnyítve a programozást, illetve a függvények egyszerű tárolását. 3.1.1 A függvényeket megtestesítő absztrakt ősosztály. object dinamikus Változók tomb a b c ert_tart ert_kesz ert_tart_kezd ert_tart_veg ert_kesz_min ert_kesz_max lepeskoz integralt int_kezdo int_veg alt_alak par_alak der_alak int_alak szig_mon_no szig_mon_csok min Változók max Típus Típus ArrayList ArrayList ArrayList string string string string string string ArrayList ArrayList Leírás a függvény X és Y értékét tárolja a függvény a paraméterét tárolja a függvény b paraméterét tárolja a függvény c paraméterét tárolja maximális értelmezési tartomány maximális értékkészlet a fgv generálásának kezdőértéke a fgv generálásának végértéke a generált fgv legkisebb értéke a generált fgv legnagyobb értéke két fgv érték közti különbség határozott integrál értékét tárolja határozott integrál kezdőértéke határozott integrál végértéke fgv általános alakja fgv paramtéerezett alakja fgv deriváltjának alakja fgv integráltjának alakja növekvő monotonitást tárolja csökkenő monotonitást tárolja a függvény minimumát tárolja Leírás a függvény maximumát tárolja
zerushely ArrayList a függvény zérushelyeit tárolja Metódusok Visszatérési érték Leírás () Konstruktor, kezdőértékkel látja el a paramétereket Ertekparok() Void Kiszámítja az X és Y értékeket Feltoltes() Void Legenerálja a függvényt Par_Alak_Beallit() void Beállítja a paraméterezett alakot Der_Alak_Beallit() Void Beállítja a derivált alakot Zerushely_Beallit() Void Kiszámítja a függvény zérus helyeit Szelsoertek() Void Kiszámítja a függvény minimumát és maximumát Ert_Tartomany() Void Beállítja a függvény maximális értelmezési tartományát Ert_Keszlet() Void Beállítja a függvény minimális értelmezési tartományát Monotonitas() Void Beállítja a függvény monotonitását Integral_Beallit() Void Beállítja a függvény integrált alakját,kiszámítja a határozott integráltját Torte Egy tört számot a legegyszerűbb Decimal[] ( szam,int oszto) alakra hozza Int_Seged ( szam, int oszto) Void Integrálást segíti Ertek_Mentes (string utvonal) Void Lementi a függvény adatait fileba
3.1.2 Abszolut Az abszolút-érték függvényt leíró osztály. 3.1.3 Cos A koszinusz függvényt leíró osztály. 3.1.4 Exp Az exponenciális függvényt leíró osztály. 3.1.5 Gyok A négyzetgyök függvényt leíró osztály. 3.1.6 Linearis A lineáris függvényt leíró osztály.
3.1.7 Log A logaritmus függvényt leíró osztály. 3.1.8 Masodfoku A másodfokú függvényt leíró osztály. 3.1.9 Sin A szinusz függvényt leíró osztály. 3.1.10 Szignum A szignum függvényt leíró osztály. 3.1.11 Koordinata_rendszer A koordináta-rendszer generálásáért és kirajzolásáért felelős osztály. Object Statikus
Változók Típus Leírás szelesseg short Kirajzolandó kép szélességét tárolja magassag short Kirajzolandó kép magasságát tárolja x_tengely short Az x tengely y koordinátáját tárolja y_tengely short Az y tengely x koordinátáját tárolja dx Két pont x tengelyen vett távolsága dy Két pont y tengelyen vett távolsága x_nagyleptek_kezd decimal X tengely léptékének kezdőértéke x_nagyleptek_veg decimal X tengely léptékének végértéke x_nagyleptek mertek decimal X tengely léptékeinek különbsége x_nagyleptek_db int X tengely léptékeinek darabszáma x_nagyleptek Leptek[] X tengely léptékeinek koordinátái y_nagyleptek_kezd decimal Y tengely léptékének kezdőértéke y_nagyleptek_veg decimal Y tengely léptékének végértéke y_nagyleptek mertek decimal Y tengely léptékeinek különbsége y_nagyleptek_db int Y tengely léptékeinek darabszáma y_nagyleptek Leptek[] Y tengely léptékeinek koordinátái pontok PointF[] A függvény koordinátarendszerbeli pontjait tárolja fgv_kezdo Függvény kezdőértéke fgv_veg Függvény végértéke fgv_db int Függvény pontjainak darabszáma
Változók Típus Leírás lepeskoz Függvény pontjainak különbség kep Bitmap A felület, ahova a program rajzol g Graphics A rajzolásáért felelős változó hatter1 Color A kép külső háttérszínét tárolja hatter2 Color A kép belső háttérszínét tárolja tengely Color A tengelyek színét tárolja fuggveny Color A függvény színét tárolja integralt Color A határozott integrált jelölő színét tárolja picbox PictureBox A kép megjelenítését végzi ket_pont bool Olyan logikai érték, mely azt tárolja, hogy két pontot kell e megjeleníteni szignum bool Tárolja, hogy a függvény típusa Szignum függvény-e
Metódusok Vissz. érték Leírás Kepmeret(PictureBox picbox) void Beállítja a kirajzolandó felület méretét a bemeneti PictureBoxhoz igazítva Keptorol() void Törli a kirajzolt képet General( fgv, void A bemeneti paraméterektől bool x_tengely_auto, függően legenerálja a bool y_tengely_auto, koordináta-rendszert. A logikai decimal x_tengely_lep, értékekkel állítható,hogy az decimal y_tengely_lep) aktuális tengely léptékeit a program vagy a program állítsa be,a két decimal paraméterrel manuálisan adható meg a lépték. NagyLeptek( szam1, void Beállítja a nagylépték kezdő szam2, és végértékét,a nagylépték ref int tengely_leptek_db, ref decimal darabszámát,a léptékek közti különbséget. Beállítható, hogy tengely_leptek_kezd, a léptéket automatikusan ref decimal tengely_leptek_veg, számolja-e a program. byte leptek_v1, byte leptek_v2, bool auto, ref decimal leptek) Kirajzol( void Kirajzolja a legenerált bool x_nagy_leptek, értékekből a függvény ábráját. bool y_nagy_leptek, Paraméterben megadható, bool integral, int_start, int_end) hogy ábrázolja-e az x vagy y tengelyen a léptéket, határozott integrált, igaz érték esetén a további két paraméterekkel megadható az integrál kezdőés végértéke
Az osztályban található egy általam létrehozott struktúra, mely a következőképpen néz ki: 3.1.11.1 Leptek A tengelyek léptékeinek kezdő- és végkoordinátáit tárolja. Változó Típus Leírás kezdo PointF A lépték kezdőkoordinátát tárolja veg PointF A lépték végkoordinátáit tárolja