Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C# vzorec

Dobrý den mohli by jste mi poradit na formuláři mam
txt1-výhra
txt2-remíza
txt3-prohra
txt4-uspesnost
potřebuju aby mi do txt4-uspesnost vypsali jestli je mužstvo uspěšné pokud má víc než 80 % , je vynikající. Pokud získalo od 50 do 80 % je dobré, v ostatních případech je neúspěšné

v postate potrebuju zsapsat vzorec

txt1-výhra*3 + txt2-remíza*1
-------------------------------- * 100= pocet procent
txt1-výhra*3 + txt2-remíza*3 + txt3-prohra*3

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
((txt1-výhra*3)+(txt2-remíza*100))/((txt1-výhra*3) + (txt2-remíza*3)+(txt3-prohra*3))
Flash_Gordon 20.03.2010 22:15
Flash_Gordon
a jak to amm přesně zapsat? int vyhra = Convert.ToInt32(txt1); int remiza = Convert.ToInt32(txt2);…
silver 20.03.2010 22:18
silver
Zkus: int vyhra = Convert.ToInt32(txt1.Text); int remiza = Convert.ToInt32(txt2.Text); int prohra =…
Flash_Gordon 20.03.2010 22:25
Flash_Gordon
Vo výpočte výsledku chýbajú zátvorky pri násobení číslom 100. Tiež nie je potrebné ukladať výsledok…
los 21.03.2010 00:29
los
když to spustim tk mi to napíše že došlo k neošetřené chybe a ze vstupni retezec nema spravny format
silver 21.03.2010 10:14
silver
To bude zrejme spôsobené tým, že vstupný reťazec nemá správny formát. Vôbec nikde tam neošetruješ ne…
los 21.03.2010 10:57
los
jak bys to ted anapsal pls? cely?
silver 21.03.2010 16:27
silver
A čo to má teda spraviť, keď niekto namiesto čísla napíše niečo iné?
los 21.03.2010 19:34
los
asi vyskocit messagebox ze sprácou zadal jsi špatne hodnoty nbo podobne ale delal jsem podoubnou vec…
silver 21.03.2010 19:46
silver
Keď tak teraz nad tým rozmýšľam, tak by som namiesto tých textboxov použil NumericUpDown, do ktorého…
los 21.03.2010 20:13
los
už jsem to vyřešil chyba byla v tom že to vychazelo občas na desetiná místa proto jsem tam místo int… poslední
silver 24.03.2010 11:36
silver

a jak to amm přesně zapsat?

int vyhra = Convert.ToInt32(txt1);
int remiza = Convert.ToInt32(txt2);
int prohra = Convert.ToInt32(txt3);
a pak ja? mam si ete dat jednu třeba int mezisoucet a vypocitat to jako ze mezisoucet a potom to udelat přez if? kdyžtak poradte přesneji

Zkus:

int vyhra = Convert.ToInt32(txt1.Text);
int remiza = Convert.ToInt32(txt2.Text);
int prohra = Convert.ToInt32(txt3.Text);

float vysledekProcent = ((vyhra*3)+remiza*100)/((vyhra*3)+(remiza*3)+(prohra*3));


txt4.Text = "Neúspěšné";
if( vysledekProcent > 50)
txt4.Text = "Dobré";
if( vysledekProcent > 80)
txt4.Text = "Vynikajicí";

Vo výpočte výsledku chýbajú zátvorky pri násobení číslom 100. Tiež nie je potrebné ukladať výsledok ako float, keď je výsledkom výrazu celé číslo.

int uspesnost = (vyhra*3 + remiza) * 100 / (vyhra*3 + remiza*3 + prohra*3);

txt4.Text =
  (uspesnost >= 80 ? "Vynikajicí" :
  (uspesnost >= 50 ? "Dobré" :
  "Neúspěšné"));

To bude zrejme spôsobené tým, že vstupný reťazec nemá správny formát. Vôbec nikde tam neošetruješ nesprávny vstup od používateľa, takže to jednoducho spadne. Keďže si nepísal, že čo to má robiť v prípade, ak niekto napíše do niektorého poľa číslo v nesprávnom formáte, tak nikto ani nenapísal kód, ktorý by to nejako ošetroval.

Keď budeš ošetrovať vstup používateľa, tak zrejme využiješ metódu int.TryParse namiesto konverzie pomocou Convert.ToInt32 a následného odchytávania výnimky FormatException.

Keď tak teraz nad tým rozmýšľam, tak by som namiesto tých textboxov použil NumericUpDown, do ktorého môže používateľ napísať len číslo a nastavil to tak, aby tam mohol zadávať iba celé čísla z nejakého rozumného intervalu.

Ak tam chceš mať textboxy, tak s ošetrením používateľského vstupu by to mohlo vyzerať napríklad takto:

int vyhra;
if (!int.TryParse(txt1.Text, out vyhra))
{
  MessageBox.Show("Vyhra musi byt cele cislo.");
  return;
}

int remiza;
if (!int.TryParse(txt2.Text, out remiza))
{
  MessageBox.Show("Remiza musi byt cele cislo.");
  return;
}

int prohra;
if (!int.TryParse(txt3.Text, out prohra))
{
  MessageBox.Show("Prohra musi byt cele cislo.");
  return;
}

int uspesnost = (vyhra*3 + remiza) * 100 / (vyhra*3 + remiza*3 + prohra*3);
txt4.Text =
  (uspesnost >= 80 ? "Vynikajicí" :
  (uspesnost >= 50 ? "Dobré" :
  "Neúspěšné"));

Zpět do poradny Odpovědět na původní otázku Nahoru