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 --
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 --
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.
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");
}
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
}