1 ANALITIKAI KÉMIAI SZAKMÉRNÖKI TANFOLYAM INFORMATIKA (SZÁMÍTÁSTECHNIKA) 2008/2009. őszi félév Tanár: Kollárné Dr. Hunek Klára, Szervetlen és Analitikai Kémia Tanszék, Ch. I/9 tárgy honlapja: másolat :
2 Két ZH átlagának kiszámítása n hallgató esetén. elől tesztelő ciklus hátul tesztelő ciklus megad: n k=1 megad: NEV, Z1, Z2 ZH=(Z1+Z2)/2 kiír: NEV, ZH k=k+1 k<=n ? vége start nem igen Melyiknél mi történik, ha n=0 ? Ciklusok start megad: n k=1 k<=n ? nem vége igen megad: NEV, Z1, Z2 ZH=(Z1+Z2)/2 kiír: NEV, ZH k=k+1
3 For To - Next ciklus elől tesztelő ciklus n=InputBox(“n=?”) FOR k=1 TO n NEV=InputBox(“NEV=?”) Z1=InputBox(“Z1=?”) Z2=InputBox(“Z2=?”): ZH=Z1/2+Z2/2 Cells(k,1)=NEV : Cells(k,2)=ZH NEXT k Visual Basic program részlet start megad: n k=1 k<=n ? nem vége igen megad: NEV, Z1, Z2 ZH=(Z1+Z2)/2 kiír: NEV, ZH k=k+1 Két ZH átlagának kiszámítása n hallgató esetén. Ciklusok
4 Do - Loop While ciklus hátul tesztelő ciklus megad: n k=1 megad: NEV, Z1, Z2 ZH=(Z1+Z2)/2 kiír: NEV, ZH k=k+1 k<=n ? vége start nem igen n=InputBox(“n=?”): k=1 Do NEV=InputBox(“NEV=?”) Z1=InputBox(“Z1=?”) Z2=InputBox(“Z2=?”) ZH=Z1/2+Z2/2 : Cells(k,1)=NEV Cells(k,2)=ZH : k=k+1 Loop While k<=n Visual Basic program részlet Két ZH átlagának kiszámítása n hallgató esetén. Ciklusok
5 Do While - Loop ciklus n=InputBox(“n=?”): k=1 Do While k<=n NEV=InputBox(“NEV=?”) Z1=InputBox(“Z1=?”) Z2=InputBox(“Z2=?”) ZH=Z1/2+Z2/2 : Cells(k,1)=NEV Cells(k,2)=ZH : k=k+1 Loop Visual Basic program részlet Két ZH átlagának kiszámítása n hallgató esetén. Ciklusok start megad: n k=1 k<=n ? nem vége igen megad: NEV, Z1, Z2 ZH=(Z1+Z2)/2 kiír: NEV, ZH k=k+1 elől tesztelő ciklus
6 Függvények használata – 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. 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 Ha nem használunk Function-t: A feladatot az alábbi két függvényre kell elvégezni:
7 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) = f(x) Cells(i, 3) = (f(x + h) - f(x - h)) / (2 * h) Next i End Sub Function f(x#) As Double f = x ^ * x + 8 * Cos(x + 1) - x / (x + 2) End Function Function g(x#) As Double If x < 20 Then g = Exp(x - 20) + 2 * Sin(2 * x - 40) Else g = 5.4 * x / (x + 5) End If End Function 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
8 Függvények használata Function f(x#) As Double f = x ^ * x + 8 * Cos(x + 1) - x / (x + 2) End Function A függvénynek típusa van: “ As Double ” Azonosítójának é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 Függvényhívást kifejezés helyére lehet írni
9 Egy Function-nak több paramétere is lehet… 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 Next j End Sub 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 Kandúrok és cicalányok napi egérfogyasztása testsúlyuk szerint…
10 Egy Function-nak lokális változói is lehetnek… Öt vektor mindegyikét szeretnénk megszorozni a hatodik vektorral… Sub sokvektor() Dim a#(5, 3), b#(3), c#(5), k%, j% Open "adat.txt" For Input As #1 ‘ Itt beolvassuk a és b elemeit Close #1 For j = 1 To 5 c(j) = skal(j, a, b, 3) Cells(j, 7) = c(j) Next j End Sub Function skal(sor%, x#(), y#(), n%) As Double Dim sum#, i% sum = 0 For i = 1 To n sum = sum + x(sor, i) * y(i) Next i skal = sum End Function
11 Macska-egér példa Függvénnyel 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 Next j End Sub 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 eger (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%, db% suly = 1.5 For j = 3 To 8 Cells(j, 1) = suly Call eger("kandur", suly, db): Cells(j, 2) =db Call eger("cica", suly, db): Cells(j, 3) =db suly = suly Next j End Sub és Eljárással
12 Ha a Solver-t nem látja az Eszközök között, kapcsolja be a Bővítménykezelő-ben!
13 b3= b2+(a3-a2)*4*cos(5*a3) c2= $f$1*sin($f$2*a2)/5 - “ 3. Minimalizáljuk Soverrel a D17 cella értékét, az F1 és F2 cellák értékét változtatva. Kérjünk Eredmény jelentést! 2. Az A,B,C oszlopok adataiból készítsük el az itt látható ábrát! Solver 1. Korábban beírtuk egy Excel munkalapba az itt látható táblázat oszlop-címeit, valamint a B2, E1, E2, F1, F2 cellák tartalmát. Ezután kitölttöttük az A oszlopot, majd a B és C oszlopokat a következő formulák „lehúzásával”: Elkészítettük a táblázat D oszlopát is, ahol a D17 cella a fölötte levő számok összegét tartalmazza.