BME VEGYÉSZMÉRNÖKI ÉS BIOMÉRNÖKI KAR Műszeres Analitikai Kémia Szakirányú Továbbképzési Szak INFORMATIKA (GYAKORLATI SZÁMÍTÁSTECHNIKA) 2016. tavaszi félév Tanár: Kollárné Dr. Hunek Klára, (kollarne@mail.bme.hu) Szervetlen és Analitikai Kémia Tanszék, Ch. I/9 tárgy honlapja: http://goliat.eik.bme.hu/~kollarne/szakmern
1.HF 1. Készítsen Hurok1 nevű VBA programot az itt megadott blokkdiagram alapján. A programban használt összes változót deklarálja, a beolvasások InputBox-szal történjenek, a „hurok” leírásához If-Then és GoTo utasításokat használjon. A programban az „m=0” karakterlánc kiírása a MsgBox(”m=0”) utasítással, a többi kiiratás az alábbi táblázatok szerint, egy-egy munkalap celláiba történjék. Az alábbi táblázatban látható kiírások a hiba és az x input adatok 0,000001 ill. -2 értékeinek felelnek meg. A fenti táblázatban látható kiírások a hiba és az x input adatok 0,000001 ill. -1 értékeinek felelnek meg. 2. Készítsen másolatot a Hurok1 programról, nevezze át Hurok2-re, majd írja át úgy, hogy a „hurok” leírásához Do – Loop While utasítást használjon. A programot egészítse ki a Cells(1,3)= ”Hurok2” utasítással, valamint a saját nevének a D1 cellába való kiiratásával. A megoldás SajatNev.xlsm fájlként legkésőbb máj 16-án küldendő el a kollarne@mail.bme.hu címre.
For k=0 To m Step 2 … Next k utasítást használjuk. For To – Next ciklus Programot írunk az m0 egész szám beolvasására, az első (m+1) páratlan szám reciprokának, és ezen számsorozatból az alábbi összegnek a kiszámítására: A programban a For k=0 To m … Next k ciklust használjuk, a kiiratás m=10 esetén a jobbra látható táblázatnak fog megfeleni. A For k=0 To m … Next k ciklus a k ciklusváltozó 0,1,2,…,m értékeivel való számításokat jelenti a ciklus törzsében. Ha k értékét „lépésenként” nem 1-gyel, hanem pl. 2-vel akarjuk növelni, azaz a ciklus törzsében k ciklusváltozó 0,2,4,… értékeivel akarunk számolni, a For k=0 To m Step 2 … Next k utasítást használjuk.
Egyindexes tömbök, fájlból olvasás 3 Első: 1, -2, 2 Második: 3, 0, 4 A feladat a KetVektor.txt fájl adatainak (2 db 3 dimenziós vektornak) a beolvastatása, majd a vektorok skalárszorzatának kiszámítása és kiiratása az alábbiak szerint: Tömbök „dimenzionálása” Sub Vektorok() Dim a#(3), b#(3), cim$(2), Skal#, n%, k% Open "KetVektor.txt" For Input As #1 Input #1, n, cim(1) Cells(1, 1) = cim(1): Skal = 0 For k = 1 To n Input #1, a(k): Cells(1, k + 1) = a(k) Next k Input #1, cim(2): Cells(2, 1) = cim(2) Input #1, b(k): Cells(2, k + 1) = b(k) Skal = Skal + a(k) * b(k) Close #1 Cells(4, 1) = "skalárszorzat=": Cells(4, 2) = Skal End Sub Fájl megnyitása Adatok beolvasása fájlból Fájl bezárása
Függvények használata Példa: A [0;50] intervallumot n=100 részre osztva h=0,5 lépéssel minden x (belső) osztóponthoz kiszámítandó f(x) és A feladatot az alábbi két függvényre kell elvégezni: Ha nem használunk Function-t: az első függvénynél a formulát háromszor be kell írni, rendre az x, x+h, x-h argumentumokkal, a második függvénynél az új (feltételes utasítást is tartalmazó) formulát ismét mindhárom helyen be kell írnunk.
Függvények használata Sub szelo() Dim n%, h#, x#, i% n = 100: h = 0.5 x = 0 For i = 2 To 100 x = x + h Cells(i, 1) = x Cells(i, 2) = g(x) Cells(i, 3) = (g(x + h) - g(x - h)) / (2 * h) Next i End Sub Sub szelo() Dim n%, h#, x#, i% n = 100: h = 0.5 x = 0 For i = 2 To 100 x = x + h Cells(i, 1) = x Cells(i, 2) = f(x) Cells(i, 3) = (f(x + h) - f(x - h)) / (2 * h) Next i End Sub Function g(x#) As Double If x < 20 Then g = Exp(x - 20) + 2 * Sin(2 * x - 40) Else g = 5.4 * x + 250 / (x + 5) - 117 End If End Function Function f(x#) As Double f = x ^ 2 + 2.3 * x + 8 * Cos(x + 1) - x / (x + 2) End Function
Függvények használata A függvény neve: f formális paramétere: x A függvénynek típusa van, itt: “As Double” Function f(x#) As Double f = x ^ 2 + 2.3 * x + 8 * Cos(x + 1) - x / (x + 2) End Function Nevének értéket kell adni: “ f = … ” Sub szelo() Dim n%, h#, x#, i% n = 100: h = 0.5 x = 0 For i = 2 To 100 x = x + h Cells(i, 1) = x Cells(i, 2) = f(x) Cells(i, 3) = (f(x + h) - f(x - h)) / (2 * h) Next i End Sub A függvényhívást a megfelelő típusú kifejezésbe lehet írni
Function és paraméteres Sub Kandúrok és cicalányok napi egérfogyasztása testsúlyuk szerint…(Function) Function eger(macska$, kg#) As Integer If macska = "kandur" Then eger = CInt(kg * 3.6) Else eger = CInt(kg * 2.4) End If End Function Sub tobbvaltozo() Dim suly#, j% suly = 1.5 For j = 3 To 8 Cells(j, 1) = suly Cells(j, 2) = eger("kandur", suly) Cells(j, 3) = eger("cica", suly) suly = suly + 0.3 Next j End Sub
Macska-egér példa Függvénnyel és Eljárással Function eger(macska$, kg#) As Integer If macska = "kandur" Then eger = CInt(kg * 3.6) Else eger = CInt(kg * 2.4) End If End Function output paraméter Sub eger2 (macska$, kg#, n%) If macska = "kandur" Then n = CInt(kg * 3.6) Else n = CInt(kg * 2.4) End If End Sub Sub tobbvaltozo() Dim suly#, j% suly = 1.5 For j = 3 To 8 Cells(j, 1) = suly Cells(j, 2) = eger("kandur", suly) Cells(j, 3) = eger("cica", suly) suly = suly + 0.3 Next j End Sub Sub tobbvaltozo() Dim suly#, j%, db% suly = 1.5 For j = 3 To 8 Cells(j, 1) = suly Call eger2("kandur", suly, db): Cells(j, 2) =db Call eger2("cica", suly, db): Cells(j, 3) =db suly = suly + 0.3 Next j End Sub
2.HF Az itt (balra) látható energia12.txt fájl a villany szöveg után a villany Ft/kWh árát, a gáz szöveg után a gáz Ft/m3 árát tartalmazza, majd az ezt követő 12 hónapnév és számpár egy család kWh-ban ill. m3–ben mért adott havi villany- ill. gáz-fogyasztását adja meg. Írjon programot a fájl adatainak beolvasására. Az egyes hónapok nevét, és az adott hónapra vonatkozó villany- ill. gázfogyasztási értékeket egy-egy tömb elemeiként olvastassa be (a hónapok nevéhez a honap$(12) tömböt, a havi villany- ill. gázfogyasztási értékeknek vill#(12) ill gaz#(12) tömböket deklaráljon). A program a beolvastatás után számítsa ki és írja ki a család havi összes (villany + gáz) energiaköltségeit, valamint a 6 „hideg” ill. 6 „meleg” hónap össz-energia költségét a jobbra látható ábrának megfelelően! A beolvastatási résznek megfelelő hurkot For-Next ciklussal programozza. A kiiratásnak megfelelő sor számát a hónap számából (k) az alábbiak szerint számíthatja: „meleg” hónapok esetén: sor=k-2 (pl. május az 5-2 = 3. sorba kerül) „hideg” hónapok esetén: if k<4 then sor=k+1 else sor=k-5 (pl. január az 1+1=2. sorba kerül és november a 11-5=6. sorba) Elküldendő 2016. máj. 29. (vasárnap) déli 12-ig: <Sajatnev>.xlsm fájl a kollarne@mail.bme.hu címre