Primitivní kalkulačka v C# :/ – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Primitivní kalkulačka v C# :/ – .NET – Fórum – Programujte.comPrimitivní kalkulačka v C# :/ – .NET – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
adam
~ Anonymní uživatel
157 příspěvků
9. 3. 2010   #1
-
0
-

Zdravím. Už nějakou dobu se babrám s primitivní kalkulačkou, která se skládá pouze ze 3 textBoxů (2 pro zadávaní čísel, jeden pro zobrazení výsledku) a přepínačů (+,-,*,/) umístěných v groupBoxu a samozřejmě buttonu na provedení výpočtu.

Tuším že jsem nyní některé z Vás pobavil :( , ale opravdu mám zmatek v tom, co má být řetězec, co celé číslo, jak zobrazím výsledek atp. Prosím o trpělivost.



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private string vyberOperace()
{
if (scitani.Checked)
return sectiCisla();
else if (odcitani.Checked)
return odectiCisla();
else if (nasobeni.Checked)
return vynasobCisla();
else if (deleni.Checked)
return vydelCisla();
}

public string sectiCisla()
{
return (prvniCislo + druheCislo);
}

public string odectiCisla()
{
return (prvniCislo - druheCislo);
}

public string vynasobCisla()
{
return (prvniCislo * druheCislo);
}

public string vydelitCisla()
{
return (prvniCislo / druheCislo);
}

private void vypocitejClick(object sender, EventArgs e)
{
vyberOperace();
}

// no a ještě bych nějak měl zobrazit výsledek.... :(
// že by měl textBox vlastnost Show?
// a co v ní? měla by volat nějakou metodu?:/
}

}

Nahlásit jako SPAM
IP: 83.208.228.–
Reklama
Reklama
liborb
~ Redaktor
+18
Guru
9. 3. 2010   #2
-
0
-

Pokud jsou prvniCislo a druheCislo TextBoxy, tak je potřeba se dostat k hodnotě (textu), kterou obsahují, tj.:



prvniCislo.Text


Vždy je to text, takže je dále ho potřeba převést na číslo (asi nejlepe s desetinnou čárkou), aby se dala provést početní operace:



Double prvni;
Double druhe;

prvni = Convert.ToDouble(prvniCislo.Text);
druhe = Convert.ToDouble(druheCislo.Text);



No a pak s těmi čísly provedeš žádanou operaci a zase zpátky zobrazíš:



Double vysledek;

vysledek = prvni + druhe;

vysledekTextBox.Text = vysledek.ToString();

// nebo s formatovanim na 2 desetinna mista
vysledekTextBox.Text = vysledek.ToString("F02");

Nahlásit jako SPAM
IP: 85.207.166.–
adam
~ Anonymní uživatel
157 příspěvků
9. 3. 2010   #3
-
0
-

OK.. Půjdu vyzkoušet, děkuji.
Ještě by mě zajímalo, jaké tam mám "do očí bijící" hrubky? Můžu například v té metodě vyberOperace používat v "return" volání metody? Asi blbost, že? A jaký byste zvolil návratový typ této metody? Je ten string správně?

Děkuji za ochotu.

Nahlásit jako SPAM
IP: 83.208.228.–
yterbium0
Stálý člen
9. 3. 2010   #4
-
0
-

adam napsal:
OK.. Půjdu vyzkoušet, děkuji.
Ještě by mě zajímalo, jaké tam mám "do očí bijící" hrubky? Můžu například v té metodě vyberOperace používat v "return" volání metody? Asi blbost, že? A jaký byste zvolil návratový typ této metody? Je ten string správně?

Děkuji za ochotu.



no nemôžeš "vracať" metodu.

Radšej si vytvor metodu void(nič nevraciaš), a vlastne volaj metodu, ktorá má spraviť danú vec v jednotlivých podmienkach(sčítanie napr.) nech to sčíta.

A potom vypíš výsledok

  private void vyberOperace()

{

if (scitani.Checked)
sectiCisla();

else if (odcitani.Checked)
odectiCisla();
}

Nahlásit jako SPAM
IP: 158.195.206.–
liborb
~ Redaktor
+18
Guru
10. 3. 2010   #5
-
0
-

To adam : Máš tam 3 chyby:
1. místo s čísly děláš početní operace s objekty (viz můj předchozí příspěvek)
2. při bližším pohledu je tam jednou vydelCisla a funkce se jmenuje vydelitCisla
3. a kosmetika ... ve vyberOperace není ošetřený stav, pokud by žádný z CheckBoxů nebyl zaškrtnut

Jinak tam žádné chyby nejsou. To volání metody "v return" je naprosto v pořádku. Můžeš udělat například i takovouto kulišárnu, ale spíše bych ti to nedoporučoval (hůře se to ladí):



public string sectiCisla()
{
return((Convert.ToDouble(prvniCislo.Text) + Convert.ToDouble(druheCislo.Text)).ToString());
}


A na návratové hodnotě té metody taky není nic špatného, pak můžeš například udělat přímo toto:


vysledekTextBox.Text = vyberOperace();

Nahlásit jako SPAM
IP: 85.207.166.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
10. 3. 2010   #6
-
0
-

To liborb : Super :) děkuji. Ta "kulišárna" mě "nadchla" ale sám bych se do ní určitě nepouštěl.. :) Zvolil sem tedy tu 'delší' variantu.
Nevím, jestli jsem to dobře pochopil, ale myslel jsem, že ty proměnné "vysledek, prvni, druhy" mají být datové složky. Pořád mi to ale hází chyby a proto sem dávám znovu zdroják. Omlouvám se, že takto 'primitivní' topic se tu tak roztahuje :)
P.S. tu výjimku v tom přepínači jsem si jen tipnul, doufám že by to fungovalo :)



namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void vyberOperace()
{
if (scitani.Checked)
sectiCisla();
else if (odcitani.Checked)
odectiCisla();
else if (nasobeni.Checked)
vynasobCisla();
else if (deleni.Checked)
vydelCisla();
else throw new Exception("Musíš zaškrtnout nějakou operaci!");
}

public double sectiCisla()
{
vysledek = prvni + druhe;
return vysledek;
}

public double odectiCisla()
{
vysledek = prvni - druhe;
return vysledek;
}

public double vynasobCisla()
{
vysledek = prvni * druhe;
return vysledek;
}

public double vydelCisla()
{
vysledek = prvni / druhe;
return vysledek;
}

private void vypocitejClick(object sender, EventArgs e)
{
vyberOperace();
}

private void zobrazitVysledek()
{
zobrazVysledek.Text = vysledek.ToString();
}

double prvni = Convert.ToDouble(prvniCislo.Text);
double druhe = Convert.ToDouble(druheCislo.Text);
double vysledek;



}

}



Nahlásit jako SPAM
IP: 83.208.228.–
yterbium0
Stálý člen
10. 3. 2010   #7
-
0
-

toto nechaj na úrovni form.

 double prvni ;

double druhe;
double vysledek;


Toto daj do "stačenia tlačítka" ešte pre "VyberOperaciu"
 prvni = Convert.ToDouble(prvniCislo.Text);

druhe = Convert.ToDouble(druheCislo.Text);



A ešte do tých if musíš dať kam chceš vrátiť hodnotu,

čiže:
if (scitani.Checked)


vysledek = sectiCisla();

else if (odcitani.Checked)

vysledek = odectiCisla();

else if (nasobeni.Checked)

vysledek = vynasobCisla();

else if (deleni.Checked)

vysledek = vydelCisla();

else throw new Exception("Musíš zaškrtnout nějakou operaci!");


Nasledne este do stlacenia tlacitka za VyberOperaci daj>

textBoxVysledok.Text = vysledok.ToString();

samozrejme so svojim menom textboxu vysledok

Nahlásit jako SPAM
IP: 158.195.250.–
liborb
~ Redaktor
+18
Guru
10. 3. 2010   #8
-
0
-

Jenom doplním, že když je ta proměnná vysledek členská, tak stačí toto:



private void sectiCisla()
{
vysledek = prvni + druhe;
}

Nahlásit jako SPAM
IP: 85.207.166.–
adam
~ Anonymní uživatel
157 příspěvků
10. 3. 2010   #9
-
0
-

To liborb :
Omlouvám se, asi jsem fakt levej. Ale už mi to nehází žádnou chybu, pro změnu to nehází ani výsledek.
Je pravda, že jsem neuposlechl rady "yterbia" o tom bloku s IF .. opravdu to nemůže fungovat tak jak to mám?

Díky, Adam.
Už snad poslední kód:



namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

public void vyberOperace()
{

if (scitani.Checked)
sectiCisla();
else if (odcitani.Checked)
odectiCisla();
else if (nasobeni.Checked)
vynasobCisla();
else if (deleni.Checked)
vydelCisla();
else throw new Exception("Musíš zaškrtnout nějakou operaci!");

}

public void sectiCisla()
{
vysledek = prvni + druhe;

}

public void odectiCisla()
{
vysledek = prvni - druhe;

}

public void vynasobCisla()
{
vysledek = prvni * druhe;

}

public void vydelCisla()
{
vysledek = prvni / druhe;

}

private void vypocitejClick(object sender, EventArgs e)
{
prvni = Convert.ToDouble(prvniCislo.Text);
druhe = Convert.ToDouble(druheCislo.Text);
vyberOperace();

}

public void zobrazitVysledek()
{
zobrazVysledek.Text = vysledek.ToString();
}

double prvni;
double druhe;
double vysledek;




}

}

Nahlásit jako SPAM
IP: 83.208.228.–
yterbium0
Stálý člen
10. 3. 2010   #10
-
0
-

private void vypocitejClick(object sender, EventArgs e)


{

prvni = Convert.ToDouble(prvniCislo.Text);

druhe = Convert.ToDouble(druheCislo.Text);

vyberOperace();

zobrazitVysledek()




}



Samozrejme, funguje to aj takto, len sa mi nechcelo prepisovať každú metodu na void :)

Je to ešte "efektívnejšie" písanie, kedže premenné sú globálne

Nahlásit jako SPAM
IP: 158.195.206.–
adam
~ Anonymní uživatel
157 příspěvků
11. 3. 2010   #11
-
0
-

To yterbium :

FUNGUJE!! :)) díky nastokrát pánové :)

Nahlásit jako SPAM
IP: 83.208.228.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 36 hostů

Podobná vlákna

Primitivní GUI — založil Braba

Primitivní textový editor — založil paul27

Kalkulačka — založil raddino

Kalkulačka — založil Anakin

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý