c++ laskukaavaongelmaa

Pitäisi saada alla olevat laskusysteemit kirjoitettua jotenkin "siististi" c :lla. Kun tarkoituksena on laskea sama laskukaava useammalla eri luvuilla(3 lukua) ja tulostaa jokainen tulos omaan tekstikenttään (3 kohtaa). Sain paketin toimimaan edes jotenkin while:llä sekä switchcase:lla, mutta jälki on todella rumaa.

Pitäisi saada hieman siistimmin ko. koodirimpsu, viisaammat auttakaa. Tyyliin, 4 dummies -kiitos.

-- clip --

case 0:
arvoYksi = 134;
toinenArvo = 71.6;
foo = 72;
Tulos = arvoYksi / toinenArvo - foo;
LineEditYksi->setText( QString::number( Tulos ) );

case 1:
arvoYksi = 128;
toinenArvo = 45.78;
foo = 72;
Tulos = arvoYksi / toinenArvo - foo;
LineEditKaksi->setText( QString::number( Tulos ) );

case 2:
arvoYksi = 113;
toinenArvo = 16.7;
foo = 72;
Tulos = arvoYksi / toinenArvo - foo;
LineEditKolme->setText( QString::number( Tulos ) );

-- clip --
4469
Äänestä

Muut lukivat myös

Vastaukset 4

Vanhimmat

Tee joku funktio joka laskee noi arvot tyyliin:
float laske(double a, double b, double c)
{
return a/b - c;
}

..sitten käytät tuota funktiota arvojen laskemiseen.

Mistäs noi arvot tulevat? tuo case lauseke ei vaikuta kovin järkevältä. Tietysti se noin "toimii" mutta yhtähyvin voisi suoraan asettaa vastauksen kenttään koska luvut ovat täysin staattisia (muuttumattomia).

Voit tehä esim niin että ne luvut kysytään käyttäjältä, jonka jälkeen lasket tuloksen saaduilla arvoilla.

Äänestä
  • Kiitos neuvosta.

    Eli ohjelma menee näin:
    On yksi comboBox jossa on useita (tällä hetkellä 3) vaihtoehtoja. Siitä eri vaihtoehtoja valitsemalla saadaan muuttujat arvoYksi ja toinenArvo, foo on aina vakio. Näillä arvoilla suoritetaan muutama toinen toistaan ihmeellisempi laskukaava (jotka nyt sain funktiolla toimimaan hienosti) ja palautettavat arvot sitten tulostetaan neljään eri tekstikenttään.

    Muuten homma toimii ihan ok, koodi näyttää melkein hyvältä, mutta tuo tekstikenttiin tulostus. Saako jollain tavalla helposti muutettua funktion sisällä tuota tulostuksen kohdetta (LineEditYksi, LineEditKaksi ...)?

    Äänestä

  • tuperus kirjoitti:

    Kiitos neuvosta.

    Eli ohjelma menee näin:
    On yksi comboBox jossa on useita (tällä hetkellä 3) vaihtoehtoja. Siitä eri vaihtoehtoja valitsemalla saadaan muuttujat arvoYksi ja toinenArvo, foo on aina vakio. Näillä arvoilla suoritetaan muutama toinen toistaan ihmeellisempi laskukaava (jotka nyt sain funktiolla toimimaan hienosti) ja palautettavat arvot sitten tulostetaan neljään eri tekstikenttään.

    Muuten homma toimii ihan ok, koodi näyttää melkein hyvältä, mutta tuo tekstikenttiin tulostus. Saako jollain tavalla helposti muutettua funktion sisällä tuota tulostuksen kohdetta (LineEditYksi, LineEditKaksi ...)?

    Vie LineEdit tyyppinen osoitin (tai referenssi) funktioon sisään, ja kutsu sille setText:iä

    esim foo(LineEdit* bar)
    {
    bar->setText("baz");
    }

    Äänestä

esim taulukolla:

typedef struct _luvut
{
double arvoYksi;
double toinenArvo;
double foo;
} luvut;


luvut taulu[] =
{
{134, 71.6, 72} // case 0
jne...
};

Tulos = taulu[indeksi].arvoYksi / taulu[indeksi].toinenArvo - taulu[indeksi].foo;

LineEditYksi->setText( QString::number( Tulos ) );



tuo toimii jos arvot ovat yhden välein 0 .. N. toinen mahdollisuus on HashMap (esim stl::map ) jos luvut eivät ole tasavälein.

http://cis.stvincent.edu/swd/stl/maps/maps.html

jotenkin näin

map taulu;

// tiedon syöttö
luvut u;
u.foo = 72
...
taulu.insert(0, u ); // case 0

map::iterator p;

p = taulu.find(indeksi);


if (p != taulu.end()) // löytyi
{
luvut = p->second;
.... laske
}

Äänestä

Kommentoi aloitusta


tuperus kirjoitti:

Pitäisi saada alla olevat laskusysteemit kirjoitettua jotenkin "siististi" c :lla. Kun tarkoituksena on laskea sama laskukaava useammalla eri luvuilla(3 lukua) ja tulostaa jokainen tulos omaan tekstikenttään (3 kohtaa). Sain paketin toimimaan edes jotenkin while:llä sekä switchcase:lla, mutta jälki on todella rumaa.

Pitäisi saada hieman siistimmin ko. koodirimpsu, viisaammat auttakaa. Tyyliin, 4 dummies -kiitos.

-- clip --

case 0:
arvoYksi = 134;
toinenArvo = 71.6;
foo = 72;
Tulos = arvoYksi / toinenArvo - foo;
LineEditYksi->setText( QString::number( Tulos ) );

case 1:
arvoYksi = 128;
toinenArvo = 45.78;
foo = 72;
Tulos = arvoYksi / toinenArvo - foo;
LineEditKaksi->setText( QString::number( Tulos ) );

case 2:
arvoYksi = 113;
toinenArvo = 16.7;
foo = 72;
Tulos = arvoYksi / toinenArvo - foo;
LineEditKolme->setText( QString::number( Tulos ) );

-- clip --

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu