Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB: Trigonometriaa

Juhko [23.01.2007 20:58:49]

#

Tämä vinkki sisältää useita funktioita, jotka käsittelevät trigonometriaa. Mukana on mm. QBasicista puuttuvat trigonometriset funktiot, kosinilause, Pythagoraan lause, ym. Voit kopioida funktiot suoraan omaan ohjelmaan, eikä tekijää tarvitse mainita. :)

Kaikki trigonometriset funktiot
QBasicista puuttuu monia trigonometrisia funktioita. Kotangentti, sekantti, kosekantti, versaalisini, ekssekantti, sekä arkusfunktiot. Mutta kun lisäät nämä funktiot koodiisi, voit käyttää niitä. Funktioilla on QB:ssä samat nimet, kuin matematiikassa niiden lyhenteet. Funktioiden laskuohjeet on sovellettu Wikipedian artikkelista, joten älkäähän minulta kyselkö niiden toiminnasta. :)

Pythagoraan lause ja kosinilause
Näiden funktioiden avulla voidaan laskea kolmion sivujen pituuksia. Pythagoraan lauseessa voidaan päättää, mitkä sivut tiedetään. Funktiot ovat PYTC (tiedetään a ja b), PYTA (b ja c) ja PYTB (a ja c). Kosinilauseessa kerrotaan b-sivu, c-sivu ja gamma-kulma.

p.s: Mukana tulee myös kertoman laskufunktio, koska jotkut funktiot tarvitsevat sitä, mutta tokihan voit käyttää sitä omiin tarkoituksiisikin. Funktion nimi on KERTOMA.

' Loput trigonometriset funktiot

FUNCTION COT(LUKU) 'kotangentti
  COT = 1 / TAN(LUKU)
END FUNCTION

FUNCTION SEC(LUKU) 'sekantti
  SEC = 1 / COS(LUKU)
END FUNCTION

FUNCTION CSC(LUKU) 'kosekantti
  CSC = 1 / COS(LUKU)
END FUNCTION

FUNCTION VERSIN(LUKU) 'versaalisini
  VERSIN = 1 - COS(LUKU)
END FUNCTION

FUNCTION EXSEC(LUKU) 'ekssekantti
  EXSEC = SEC(LUKU) - 1
END FUNCTION

FUNCTION ARCSIN(LUKU) 'arkussini
  EIVALMIS = 0
  FOR n = 0 TO 20
    JOKU1 = KERTOMA(2 * n)
    JOKU2 = 2 ^ (2 * n) * (KERTOMA(n)) ^ 2
    JOKU3 = LUKU ^ (2 * n + 1)
    JOKU4 = 2 * n + 1
    PLUS = (JOKU1 / JOKU2) * (JOKU3 / JOKU4)
    EIVALMIS = EIVALMIS + PLUS
  NEXT SUMMA
  ARCSIN = EIVALMIS
END FUNCTION

FUNCTION ARCCOS(LUKU) 'arkuskosini
  ARCCOS = (3.141593 / 2) - ARCSIN(LUKU)
END FUNCTION

FUNCTION ARCTAN(LUKU) 'arkustangentti
  EIVALMIS = 0
  FOR n = 0 TO 20
    JOKU1 = (-1) ^ n * z ^ (2 * n + 1)
    JOKU2 = 2 * + 1
    PLUS = JOKU1 / JOKU2
    EIVALMIS = EIVALMIS + PLUS
  NEXT n
  ARCTAN = EIVALMIS
END FUNCTION

FUNCTION ARCCSC(LUKU) 'arkuskosekantti
  ARCCSC = ARCSIN(LUKU ^ -1)
END FUNCTION

FUNCTION ARCSEC(LUKU) 'arkussekantti
  ARCSEC = ARCCOS(LUKU ^ -1)
END FUNCTION

FUNCTION ARCCOT(LUKU) 'arkuskotangentti
  ARCCOT = (3.141593 / 2) - ARCTAN(LUKU)
END FUNCTION
' Pythagoraan lause ja kosinilause

FUNCTION PYTC(A, B)
  C = SQR((A ^ 2) + (B ^ 2))
END FUNCTION

FUNCTION PYTA(B, C)
  A = SQR((C ^ 2) - (B ^ 2))
END FUNCTION

FUNCTION PYTA(A, C)
  B = SQR((C ^ 2) - (A ^ 2))
END FUNCTION
' Apufunktiot

FUNCTION KERTOMA(LUKU) 'kertoma
  EIVALMIS = 0
  FOR k = 1 to LUKU
    EIVALMIS = EIVALMIS * k
  NEXT k
  KERTOMA = EIVALMIS
END FUNCTION

tsuriga [25.01.2007 00:18:21]

#

"eikä tekijää tarvitse mainita" tästä plussa
ja "Kommentteja.." tästä miinus.

arkustangentissa taitaa olla turha EIVALMIS = 0, ja muuttujanimet ovat ylipäätään erikoisen mitäänsanomattomia. Turhaa koodia esim arkussinin laskennassa.

Juhko [25.01.2007 20:47:41]

#

No niin, poistin tuon ekan turhan kommentin, joka minulla on tapana laittaa.. :) ja sitten poistin turhaa koodia, jonka on oikeastaan tarkoitus vain "koristaa" koodia. Ja tuon EIVALMIS = 0 -rivin laitan vain ihan varmuuden vuoksi.. Ja muuttujien nimet ovat todellakin typeriä. Ja korjasin samalla virheitä.

p.s. Tein tuon sitten aika kiireessä..

tgunner [27.01.2007 00:49:49]

#

Ehkä jopa hieman turhaa nipotusta, mutta "tein tuon kiireessä..."-koodeja ehkä ei putkaan tarvitsisi lähetellä. Kyllä nopeat koodit ovat jees, mutta jos kesken ohjelmointituokiota tulee mieleen: "Voisinpas tehdä nopeasti tässä esimerkin ohjelmointiputkaan trigonometrisistä funktioista!" ei jälki voi aina olla hyvää. :(
Todellakin muuttujat ovat aika kädettömillä nimityksillä varustettuja sekä hieman turhaa koodia havaittavissa.
(Sitten aivan pienenä hassutuksena: voisit laskea nuo mahdolliset neliöjuuret sekä käyttämiesi trigonometristen funktioiden arvot valmiiseen taulukkoon, jotta koodi sujuisi mallikkaammin. ^^)

Juhko [27.01.2007 11:00:12]

#

Niin, siis tein tuon aluksi aika kiireessä ja palasin sitten korjaamaan kun oli enemmän aikaa... Ja miksi neliö juuri pitäisi laskea erikseen, kun QB:ssä on valmiina sen laskufunktio? Ja mitä meinaat tuolla funktioiden arvojen laittamisella taulukkoon?

tgunner [28.01.2007 14:35:42]

#

Neliöjuuren laskeminen on hitaampaa, kuin suoran taulukkoarvon käyttäminen. :>

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta