Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C / laskentaongelma

KeljuK [09.06.2005 14:18:47]

#

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.

Gaxx [09.06.2005 15:42:20]

#

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.

KeljuK [10.06.2005 17:06:06]

#

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?

Metabolix [10.06.2005 19:49:04]

#

if (s == '1') summa += x;
Ei siihen mitään poppakonstia ole. Luet tietueen, katsot, mikä sen tunnus on, ja toimit sen mukaan.

KeljuK [11.06.2005 01:31:31]

#

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..

WinC [11.06.2005 02:59:34]

#

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)

KeljuK [14.06.2005 13:05:56]

#

WinC; annoit hyvän vihjeen :) Eli ohjelma toimii. Kiitos!

Vastaus

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

Tietoa sivustosta