Hei,
olen tehnyt käyrän sovitus ohjelman. Nyt ongelmana on se, että saadut tulokset ovat erilaisia eri suorituskerroilla. Lähtötiedot (mm. alkuarvaukset) ovat aina samat. Mistähän tämä voisi johtua?
Kyllä sen vian on löydyttävä omasta koodista. Olet varmaankin jo tarkistanut, ettet käytä mitään satunnaislukuja tai esimerkiksi ajastimia?
en käytä satunnaislukuja enkä ajastimia.
Yksi mieleen tuleva vaihtoehto ovat vielä muuttujat, joille ei aseteta lainkaan alkuarvoa. (Vai alustaako VB6 ne automaattisesti?) Tarkista varmuuden vuoksi, ettei mitään muuttujaa käytetä, ennen kuin siihen on sijoitettu jotain (vaikka nolla).
Jos tämäkään ei auta, rupea tulostelemaan muuttujien arvoja eri kohdissa koodia ja etsi tällä tavalla sitä kohtaa, jossa erot ilmestyvät ensimmäisen kerran.
minä luulen, että alkuarvottomat muuttujat alustetaan automaattisesti arvoon nolla ,false jne. Ihan varma tästä en ole, olen nyt etsinyt koodista näitä alkuarvottomia, muttei niitä löydy.
Eikös ainakin VB:n vanhemmissa versioissa (sisältäen VB6) muuttujat määritellä seuraavan näköisellä rakenteella:
Dim nimi As Tyyppi
Tällöin voisi ajatella, ettei niihin tarvitsisi erikseen enään alkuarvoa antaa...
Edit. Ainakaan VB4 manuskasta ei osunut silmään mitään muuttujien alkuarvojen antamisesta.
Muuttujat voi useissa Basic-kielissä (en tiedä juuri VB6:sta) alustaa seuraavasti:
Dim luku As Integer = 123
Jos asiassa on mitään epäselvää, voisi olla viisainta käyrän sovituksen alussa sijoittaa jokaiseen muuttujaan vielä se nolla, ettei vain käy niin, että niissä on jostain syystä odottamattomia lukuja. Jos käytät globaaleja muuttujia ja "peräkkäiset ajokerrat" eivät tarkoita ohjelman eri käynnistyskertoja vaan samalla käynnistyksellä peräkkäin tehtyjä laskuja, muuttujiin jäävät vanhat arvot.
Ainakaan VB6:ssa niitä ei voi itse alustaa määrittelyn yhteydessä, mutta toisaalta ne alustetaan aina 0:ksi, tyhjäksi merkkijonoksi tms, riippuen muuttujan tyypistä.
VB.Netissä ne voi alustaa Metabolixin ilmoittamalla tavalla, joskin siinäkin esim. Integer saa arvon 0, jos sitä ei itse alusta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.