1
2
3
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
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
Programterv .............................................................................................................. 5 3.1
Egyedi osztályok leírása ................................................................................... 6
3.1.1
Fuggveny .................................................................................................. 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 Fuggveny A függvényeket megtestesítő absztrakt ősosztály. Alaposztály
object
Perzisztencia
dinamikus
Változók
Leírás
Típus
tomb
ArrayList
a függvény X és Y értékét tárolja
a
float
a függvény „a” paraméterét tárolja
b
float
a függvény „b” paraméterét tárolja
c
float
a függvény „c” paraméterét tárolja
ert_tart
ArrayList
maximális értelmezési tartomány
ert_kesz
ArrayList
maximális értékkészlet
ert_tart_kezd
float
a fgv generálásának kezdőértéke
ert_tart_veg
float
a fgv generálásának végértéke
ert_kesz_min
float
a generált fgv legkisebb értéke
ert_kesz_max
float
a generált fgv legnagyobb értéke
lepeskoz
float
két fgv érték közti különbség
integralt
float
határozott integrál értékét tárolja
int_kezdo
float
határozott integrál kezdőértéke
int_veg
float
határozott integrál végértéke
alt_alak
string
fgv általános alakja
par_alak
string
fgv paramtéerezett alakja
der_alak
string
fgv deriváltjának alakja
int_alak
string
fgv integráltjának alakja
szig_mon_no
string
növekvő monotonitást tárolja
szig_mon_csok
string
csökkenő monotonitást tárolja
min
ArrayList
a függvény minimumát tárolja
Változók max
Típus
Leírás ArrayList
a függvény maximumát tárolja
zerushely Metódusok
ArrayList Visszatérési érték
a függvény zérushelyeit tárolja Leírás Konstruktor, kezdőértékkel látja
Fuggveny()
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
Szelsoertek()
Void
Ert_Tartomany()
Void
Ert_Keszlet()
Void
Monotonitas()
Void
Kiszámítja a függvény zérus helyeit Kiszámítja a függvény minimumát és maximumát Beállítja a függvény maximális értelmezési tartományát Beállítja a függvény minimális értelmezési tartományát Beállítja a függvény monotonitását Beállítja a függvény integrált
Integral_Beallit()
Void
alakját,kiszámítja a határozott integráltját
Torte (float szam,int oszto) Int_Seged (float szam, int oszto) Ertek_Mentes (string utvonal)
Decimal[]
Egy tört számot a legegyszerűbb alakra hozza
Void
Integrálást segíti
Void
Lementi a függvény adatait fileba
3.1.2 Abszolut Az abszolút-érték függvényt leíró osztály. Alaposztály
Fuggveny
Perzisztencia
Dinamikus
3.1.3 Cos A koszinusz függvényt leíró osztály. Alaposztály
Fuggveny
Perzisztencia
Dinamikus
3.1.4 Exp Az exponenciális függvényt leíró osztály. Alaposztály
Fuggveny
Perzisztencia
Dinamikus
3.1.5 Gyok A négyzetgyök függvényt leíró osztály. Alaposztály
Fuggveny
Perzisztencia
Dinamikus
3.1.6 Linearis A lineáris függvényt leíró osztály. Alaposztály
Fuggveny
Perzisztencia
Dinamikus
3.1.7 Log A logaritmus függvényt leíró osztály. Alaposztály
Fuggveny
Perzisztencia
Dinamikus
3.1.8 Masodfoku A másodfokú függvényt leíró osztály. Alaposztály
Fuggveny
Perzisztencia
Dinamikus
3.1.9 Sin A szinusz függvényt leíró osztály. Alaposztály
Fuggveny
Perzisztencia
Dinamikus
3.1.10 Szignum A szignum függvényt leíró osztály. Alaposztály
Fuggveny
Perzisztencia
Dinamikus
3.1.11 Koordinata_rendszer A koordináta-rendszer generálásáért és kirajzolásáért felelős osztály. Alaposztály
Object
Perzisztencia
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
float
Két pont x tengelyen vett távolsága
dy
float
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áta-
rendszerbeli pontjait tárolja fgv_kezdo
float
Függvény kezdőértéke
fgv_veg
float
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
float
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 Kepmeret(PictureBox picBox)
Vissz. érték void
Leírás Beállítja a kirajzolandó felület méretét
a
bemeneti
PictureBoxhoz igazítva Keptorol()
void
Törli a kirajzolt képet
General(Fuggveny fgv,
void
A
bemeneti
paraméterektől
bool x_tengely_auto,
függően
legenerálja
bool y_tengely_auto,
koordináta-rendszert. A logikai
decimal x_tengely_lep,
értékekkel
decimal y_tengely_lep)
aktuális tengely léptékeit a
állítható,hogy
a
az
program vagy a program állítsa be,a két decimal paraméterrel manuálisan
adható
meg
a
lépték. NagyLeptek(float szam1,
void
Beállítja a nagylépték kezdő-
float szam2,
és
ref int tengely_leptek_db,
darabszámát,a léptékek közti
ref decimal
különbséget. Beállítható, hogy
tengely_leptek_kezd,
a
ref decimal tengely_leptek_veg,
számolja-e a program.
végértékét,a
léptéket
nagylépték
automatikusan
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
bool integral,
hogy ábrázolja-e az x vagy y
float int_start,
tengelyen a léptéket, határozott
float int_end)
integrált, igaz érték esetén a további
két
megadható,
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