Hei!
Työn alla on yksinkertainen ohjelma, jossa pitäisi saada laskettua keskiarvoja ja määriä. Tiedot ovat struktuurissa (char s, int 1, int 2) ja ne tallennetaan tiedostoon. Selville pitäisi saada siis keskiarvo tyyliin jos s=a niin vastausten keskiarvo=x ja jos s=b niin keskiarvo=y jne. Miten ihmeessä saan tuon onnistumaan.
En varmaan tajunnut kysymystäsi, mutta keskiarvo lasketaan kaavalla(jos sitä haet):
(arvo1 + arvo2 + arvo3) / arvojen_määrällä
lainaus:
jos s=a niin vastausten keskiarvo=x ja jos s=b niin keskiarvo=y jne
Tuosta taas voi kääntää suoraan(pseudoa):
if s = a then ka = x if s = b then ka = y //jne...
En tiedä oliko tuossa nyt mitään järkeä...
Selvennähän vähän, mitä kohtaa et osaa.
Hei,
Selitin kyllä tuon tosi huonosti:) Siis ongelma ei ole keskiarvon laskeminen sinänsä vaan.. Mulla on tietueita määrä x siinä struktuurissa ja ne tallennetaan tiedostoon. Elikkä siis: tiedostoa luetaan niin kauan kunnes päästään loppuun: while(!feof(fi))fread(...jnejne) ja tähän väliin sitten tulis(??) if(taulukko[x].s=='1' niin laske määrä & keskiarvo. Vai..? Ongelma tässä on se, että pitäis saada tämä tehtyä jotenkin yksinkertaisesti eli ei joka eri tapaukselle omaa muuttujaa. (Kokeilin kyllä sitäkin, enkä saanut juttua toimimaan siltikään...) En tainnut onnistua selittämään ongelmaa yhtään sen selvemmin..? Eli miten selitän ohjelmalle, että kun se lukee tiedoston tietueita läpi niin aina kun se törmää tunnukseen 1, se ottaa tämän tunnuksen muuttujan int x mukaan esim. summaan?
if (s == '1') summa += x;
Ei siihen mitään poppakonstia ole. Luet tietueen, katsot, mikä sen tunnus on, ja toimit sen mukaan.
Ongelmahan on just se että millä pirun koodilla mä saan sen ohjelman toimimaan niin?? Kun mikään ei ole toiminut; ts. kaikki mun "ehdotukset" on kaatuneet tai on olleet täynnä virheitä.. Eli struktuuriinhan mä kerään tietueita kuin esim. Accessiin ikään, tai Exceliin, sen puoleen... Miten näistä tietueista kerätään nämä joiden "tunnus" on vaikka "a" ja sitten selitetään koneelle että ne pitäis muistaa erikseen ja laskea a:sta määrä ja keskiarvo. Ja sitten taas erikseen muistaa ne joiden tunnus on "b" ja laskea määrä ja keskiarvo. Tyhmä kysymys ehkä, mutta olen tosi solmussa tämän kanssa..
En nyt ehkä ole ihan perillä siitä mitä yrität tehdä, mutta seuraava koodi käy läpi tiedoston kaikki structit ja tutkii onko s 'a' 'b' tai ei kumpikaan. Sekä tallentaa kaikki structit taulukkoon.
int summa = 0; int i = 0; struct tavara { char s; int i; int j; } tiedot[MAXINDEX]; fp = fopen(<tiedosto joka sisältää structeja>,<avaus mode>); while (!feof(fp)) { fread(&tiedot[i], sizeof(tiedot[i]), 1, fp); if(tiedot[i].s == 'a') /*tehdään jotain kun s on 'a'*/ else if(tiedot[i].s == 'b') /*tehdään jotain kun s on 'b'*/ else /*tehdään jotain kun s ei ole 'a' eikä 'b'*/ i++; }
lainaus:
Eli struktuuriinhan mä kerään tietueita kuin esim. Accessiin ikään,...
Tiedäthän, että yksi structi sisältää tavallaan ainostaan yhden "tietueen" tiedot, mikäli se ei sisällä esimerkiksi taulukkoa "tietueista". (eli voit ajatella yhden structin yhtenä tietokannan rivinä ja koko tiedoston yhtenä tauluna)
WinC; annoit hyvän vihjeen :) Eli ohjelma toimii. Kiitos!
Aihe on jo aika vanha, joten et voi enää vastata siihen.