Mam problem z kalkulatorem tj.poniżej.
Po wybraniu żądanej operacji (np. dodawania), dane powinny być wprowadzane następująco: 2,3,4 . Kolejne liczby oddzielane są przecinkami, a operacją na nich wykonywaną w tym przypadku będzie dodawanie (2+3+4). Wynik ma się wyświetlać po zaakceptowaniu wprowadzonych liczb klawiszem enter.
Zwykły kalkulatro umiem zrobić.
Kto podpowie?
Stawiam, że dane wprowadzasz za pomocą string
a? W takim wypadku, po wprowadzeniu liczb musisz użyć funkcji Split()
i oddzielić liczby po przecinku. Później tylko wykonujesz konkretną operację arytmetyczną na danym ciągu.
Innym sposobem jest bezpośrednie wprowadzanie liczb i wykonywanie (w tym przypadku) sumy na bieżąco. Szybszy sposób i mniej skomplikowany.
Ja dopiero zaczynam przygodę z c#.Możecie mi podpowiedzieć gdzie wstawić funkcję split.kod poniżej.Ale mi chodzi też o to że gdy na formie stworzyłem sobie przyciski to po wybraniu z menu kalkulatora np.dodawania zaczynam dopiero wpisywać liczy po przecinku, a potem naciskam = i jest wynik.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Kalkulator
{
public partial class frmKalkulator : Form
{
const int PLUS = 1;
const int MINUS = 2;
const int RAZY = 3;
const int PODZIELIC = 4;
double a = 0;
double b = 0;
int dzialanie = 0;
int kropka = 0;
int ilepoprzecinku = 0;
int znak = PLUS;
bool czykasowacekran = false;
public void pokazznaki()
{
cmdSuma.Enabled = true;
cmdRoznica.Enabled = true;
cmdIloczyn.Enabled = true;
cmdIloraz.Enabled = true;
if (dzialanie != 0) cmdWynik.Enabled = true;
cmdZnak.Enabled = true;
cmdAnuluj.Enabled = true;
cmdKropka.Enabled = true;
}
public void ukryjznaki()
{
cmdSuma.Enabled = false;
cmdRoznica.Enabled = false;
cmdIloczyn.Enabled = false;
cmdIloraz.Enabled = false;
cmdWynik.Enabled = false;
cmdAnuluj.Enabled = false;
}
public void cyfry(int i)
{
pokazznaki();
if (dzialanie != 0)
{
}
else
{
}
if (czykasowacekran)
{
txtWynik.Text = "";
czykasowacekran = true;
znak = PLUS;
}
txtWynik.Text += i.ToString();
}
public double dzialaj(int dz, double x, double y)
{
pokazznaki();
double wynik = 0;
if (dzialanie != 0)
{
switch (dzialanie)
{
case PLUS: wynik = y + x; break;
case MINUS: wynik = y - x; break;
case RAZY: wynik = y * x; break;
case PODZIELIC: wynik = y / x; break;
}
txtWynik.Text = wynik.ToString();
a = 0;
}
else wynik = y;
dzialanie = dz;
czykasowacekran = true;
cmdKropka.Enabled = true;
ilepoprzecinku = 0;
return wynik;
}
public frmKalkulator()
{
InitializeComponent();
}
private void cmd1_Click(object sender, EventArgs e)
{
cyfry(1);
}
private void cmd2_Click(object sender, EventArgs e)
{
cyfry(2);
}
private void cmd3_Click(object sender, EventArgs e)
{
cyfry(3);
}
private void cmd4_Click(object sender, EventArgs e)
{
cyfry(4);
}
private void cmd5_Click(object sender, EventArgs e)
{
cyfry(5);
}
private void cmd6_Click(object sender, EventArgs e)
{
cyfry(6);
}
private void cmd7_Click(object sender, EventArgs e)
{
cyfry(7);
}
private void cmd8_Click(object sender, EventArgs e)
{
cyfry(8);
}
private void cmd9_Click(object sender, EventArgs e)
{
cyfry(9);
}
private void cmd0_Click(object sender, EventArgs e)
{
cyfry(0);
}
private void cmdKropka_Click(object sender, EventArgs e)
{
b = dzialaj(PLUS, a, b);
b = dzialaj(MINUS, a, b);
b = dzialaj(RAZY, a, b);
b = dzialaj(PODZIELIC, a, b);
}
private void cmdSuma_Click(object sender, EventArgs e)
{
}
private void cmdRoznica_Click(object sender, EventArgs e)
{
}
private void cmdIloczyn_Click(object sender, EventArgs e)
{
}
private void cmdIloraz_Click(object sender, EventArgs e)
{
}
private void cmdZnak_Click(object sender, EventArgs e)
{
if (znak == PLUS) znak = MINUS;
else znak = PLUS;
if (dzialanie != 0) { a = -a; txtWynik.Text = a.ToString(); }
else { b = -b; txtWynik.Text = b.ToString(); }
}
private void cmdWynik_Click(object sender, EventArgs e)
{
b = dzialaj(dzialanie, a, b);
txtWynik.Text = b.ToString();
cmdKropka.Enabled = true;
dzialanie = PLUS;
a = 0;
pokazznaki();
cmdWynik.Enabled = false;
cmdZnak.Enabled = false;
}
private void cmdAnuluj_Click(object sender, EventArgs e)
{
a = b = 0;
dzialanie = 0;
kropka = 0;
ilepoprzecinku = 0;
txtWynik.Text = "";
znak = PLUS;
czykasowacekran = false;
ukryjznaki();
}
private void txtWynik_TextChanged(object sender, EventArgs e)
{
}
private void frmKalkulator_Load(object sender, EventArgs e)
{
}
private void dodawanieToolStripMenuItem_Click(object sender, EventArgs e)
{
b = dzialaj(PLUS, a, b);
}
private void frmKalkulator_KeyPress(object sender, KeyPressEventArgs e)
{
switch (e.KeyChar)
{
case 'a': if (cmdSuma.Enabled) cmdSuma_Click(sender, e); return;
case 'b': if (cmdRoznica.Enabled) cmdRoznica_Click(sender, e); return;
case 'c': if (cmdIloczyn.Enabled) cmdIloczyn_Click(sender, e); return;
case 'd': if (cmdIloraz.Enabled) cmdIloraz_Click(sender, e); return;
case (char)13: if (cmdWynik.Enabled) cmdWynik_Click(sender, e); return; // enter
case (char)27: cmdAnuluj_Click(sender, e); return; // escape
case '.':
case ',': if (cmdKropka.Enabled) cmdKropka_Click(sender, e); return;
}
int n = (int)e.KeyChar;
if (n < 48 || n > 57) return; // jak nie nacisnelismy cyfry to wychodzimy z funkcji
n = int.Parse(e.KeyChar.ToString());
cyfry(n);
return;
}
private void wyjścieToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
}
private void odejmowanieToolStripMenuItem_Click(object sender, EventArgs e)
{
b = dzialaj(MINUS, a,b);
}
private void dzielenieToolStripMenuItem_Click(object sender, EventArgs e)
{
b = dzialaj(PODZIELIC, a, b);
}
private void mnożenieToolStripMenuItem_Click(object sender, EventArgs e)
{
b = dzialaj(RAZY, a, b);
}
private void wyjścieToolStripMenuItem1_Click(object sender, EventArgs e)
{
}
}
}
Moze mi ktoś podpowiedzieć jak wyjść z programu za pomocą przycisku klawiatury q.
Napisałam tak:
switch (e.KeyChar)
{
case 'a': if (dodawanieToolStripMenuItem.Enabled) dodawanieToolStripMenuItem_Click(sender, e); return;
case 'b': if (odejmowanieToolStripMenuItem.Enabled) odejmowanieToolStripMenuItem_Click(sender, e); return;
case 'c': if (mnożenieToolStripMenuItem.Enabled) mnożenieToolStripMenuItem_Click(sender, e); return;
case 'q': Application.exit();
}
ale nie działa
Powiem Ci, że nie wiem gdzie masz to wstawić bo nic nie widzę w tym kodzie...
Wyrzuć puste metody, sformatuj kod, wrzuć w tagach - wtedy pogadamy. Póki co nie ma sensu czytać tego bałaganu.
Według mnie niepotrzebnie mieszasz... Chcesz zrobić sumowanie wielu liczb na raz, to zrób to w konsoli, a w momencie kiedy zobaczysz i zrozumiesz jak to działa przenieś to do swojego bardziej skomplikowanego projektu. Poniżej masz przykład:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication4
{
class Program
{
static void Main( string[] args )
{
// Na przykład: wejscie == "1,7,3,-5"
string wejscie = Console.ReadLine();
string[] liczbyString = wejscie.Split(',');
int[] liczbyInt = new int[liczbyString.Length];
for(int i = 0; i < liczbyString.Length; i++)
liczbyInt[i] = int.Parse(liczbyString[i]);
int wynik = 0;
foreach(int liczba in liczbyInt)
wynik += liczba;
Console.WriteLine("Suma liczby wynosi {0}.", wynik);
Console.ReadLine();
}
}
}
Treść zadania w ogóle sugeruje, że tu chodzi o program konsolowy, a nie okienkowy.
zadanie ma być wykonane w windows forms,mam zrobione przyciski i textbox do wyswietlania wyniku,zaraz trochę pozmieniam kod i wyślę,dzieki za odpowiedzi.
ponizej poprawiony kod.
A jak zrobić wyjście z programu za pomocą jeszcze kawiatury np wciskam q z klawiatury i wychodzę,w programie moim mam jeszcze wyjscie za pomocą menu tam gdzie pisze wyjście.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Kalkulator
{
public partial class frmKalkulator : Form
{
const int PLUS = 1;
const int MINUS = 2;
const int RAZY = 3;
const int PODZIELIC = 4;
double a = 0;
double b = 0;
int dzialanie = 0;
bool kropka = false;
int ilepoprzecinku = 0;
int znak = PLUS;
bool czykasowacekran = false;
public void pokazznaki()
{
dodawanieToolStripMenuItem.Enabled = true;
odejmowanieToolStripMenuItem.Enabled = true;
mnożenieToolStripMenuItem.Enabled = true;
dzielenieToolStripMenuItem.Enabled = true;
if (dzialanie != 0) obliczWyrażenieToolStripMenuItem.Enabled = true;
cmdZnak.Enabled = true;
}
public void ukryjznaki()
{
dodawanieToolStripMenuItem.Enabled = false;
odejmowanieToolStripMenuItem.Enabled = false;
mnożenieToolStripMenuItem.Enabled = false;
dzielenieToolStripMenuItem.Enabled = false;
obliczWyrażenieToolStripMenuItem.Enabled = false;
cmdZnak.Enabled = false;
}
public void cyfry(int i)
{
pokazznaki();
if (dzialanie != 0)
{
if (!kropka) a = 10 * a + i;
else
{
if (i != 0) a = a + i / (Math.Pow(10, ilepoprzecinku++));
else ++ilepoprzecinku;
}
}
else
{
if (!kropka) b = 10 * b + i;
else
{
if (i != 0) b = b + i / (Math.Pow(10, ilepoprzecinku++));
else ++ilepoprzecinku;
}
}
if (czykasowacekran)
{
txtWynik.Text = "";
czykasowacekran = false;
znak = PLUS;
}
txtWynik.Text += i.ToString();
}
public double dzialaj(double x, double y, int dz)
{
ukryjznaki();
double wynik = 0;
if (dzialanie != 0)
{
switch (dzialanie)
{
case PLUS: wynik = y + x; break;
case MINUS: wynik = y - x; break;
case RAZY: wynik = y * x; break;
case PODZIELIC: wynik = y / x; break;
}
txtWynik.Text = wynik.ToString();
a = 0;
}
else wynik = y;
dzialanie = dz;
czykasowacekran = true;
cmdKropka.Enabled = true;
ilepoprzecinku = 0;
return wynik;
}
public frmKalkulator()
{
InitializeComponent();
}
private void cmd1_Click(object sender, EventArgs e)
{
cyfry(1);
}
private void cmd2_Click(object sender, EventArgs e)
{
cyfry(2);
}
private void cmd3_Click(object sender, EventArgs e)
{
cyfry(3);
}
private void cmd4_Click(object sender, EventArgs e)
{
cyfry(4);
}
private void cmd5_Click(object sender, EventArgs e)
{
cyfry(5);
}
private void cmd6_Click(object sender, EventArgs e)
{
cyfry(6);
}
private void cmd7_Click(object sender, EventArgs e)
{
cyfry(7);
}
private void cmd8_Click(object sender, EventArgs e)
{
cyfry(8);
}
private void cmd9_Click(object sender, EventArgs e)
{
cyfry(9);
}
private void cmd0_Click(object sender, EventArgs e)
{
cyfry(0);
}
private void cmdKropka_Click(object sender, EventArgs e)
{
if (czykasowacekran)
{
txtWynik.Text = "";
czykasowacekran = false;
znak = PLUS;
}
if (txtWynik.Text == "") txtWynik.Text = "0";
txtWynik.Text += ",";
cmdKropka.Enabled = false;
kropka = true;
ilepoprzecinku = 1;
}
private void cmdZnak_Click(object sender, EventArgs e)
{
if (znak == PLUS) znak = MINUS;
else znak = PLUS;
if (dzialanie != 0) { a = -a; txtWynik.Text = a.ToString(); }
else { b = -b; txtWynik.Text = b.ToString(); }
}
private void cmdAnuluj_Click(object sender, EventArgs e)
{
a = b = 0;
dzialanie = 0;
kropka = false;
ilepoprzecinku = 0;
txtWynik.Text = "";
znak = PLUS;
czykasowacekran = false;
ukryjznaki();
}
private void frmKalkulator_KeyPress(object sender, KeyPressEventArgs e)
{
switch (e.KeyChar)
{
case 'a': if (dodawanieToolStripMenuItem.Enabled) dodawanieToolStripMenuItem_Click(sender, e); return;
case 'b': if (odejmowanieToolStripMenuItem.Enabled) odejmowanieToolStripMenuItem_Click(sender, e); return;
case 'c': if (mnożenieToolStripMenuItem.Enabled) mnożenieToolStripMenuItem_Click(sender, e); return;
case 'd': if (dzielenieToolStripMenuItem.Enabled) dzielenieToolStripMenuItem_Click(sender, e); return;
case (char)13: if (obliczWyrażenieToolStripMenuItem.Enabled) obliczWyrażenieToolStripMenuItem_Click(sender, e); return; // enter
case (char)27: cmdAnuluj_Click(sender, e); return; // escape
case '.':
case ',': if (cmdKropka.Enabled) cmdKropka_Click(sender, e); return;
}
int n = (int)e.KeyChar;
if (n < 48 || n > 57) return;
n = int.Parse( e.KeyChar.ToString() );
cyfry(n);
return;
}
private void obliczWyrażenieToolStripMenuItem_Click(object sender, EventArgs e)
{
b = dzialaj(a, b, dzialanie);
txtWynik.Text = b.ToString();
cmdKropka.Enabled = true;
dzialanie = PLUS;
a = 0;
pokazznaki();
obliczWyrażenieToolStripMenuItem.Enabled = false;
cmdZnak.Enabled = false;
}
private void dodawanieToolStripMenuItem_Click(object sender, EventArgs e)
{
b = dzialaj(a, b, PLUS);
}
private void odejmowanieToolStripMenuItem_Click(object sender, EventArgs e)
{
b = dzialaj(a, b, MINUS);
}
private void mnożenieToolStripMenuItem_Click(object sender, EventArgs e)
{
b = dzialaj(a, b, RAZY);
}
private void dzielenieToolStripMenuItem_Click(object sender, EventArgs e)
{
b = dzialaj(a, b, PODZIELIC);
}
private void frmKalkulator_Load(object sender, EventArgs e)
{
}
private void wyjścieToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
No, ale gdzie masz implementację algorytmu podanego przez kolegę dwa posty wyżej? Jak na moje oko to nie wiem jakim cudem Ci to działa o ile w ogóle działa. Straszliwie mieszasz i piszesz herezję, których się czytać nie da, a co dopiero rozumieć o co chodzi.
Dam Ci radę - wywal ten program i zacznij od początku, jeszcze raz. Uważnie popatrz na algorytm, który masz wyżej bo w 100% spełnia Twoje oczekiwania. Następnie wsadź to po prostu w swój program okienkowy i wywołaj tą funkcję do działania. Tyle, żadnej filozofii i herezji nie będzie.
program działa bardzo dobrze.
Ale implementacja kolegi jest w trybie konsolowym a mi trzeba w okienkowym. Czy ktoś mi pomoze patrząć sie na mój kod?
wsadziałam ten kod kolegi w trybie konsolowym do mojego programu okienkowego i wyskakują błędy, jak może mi działać program jak w trybie okienkowym mam przyciski itd a w tym kolegi kodzie nie ma odwołania nawet do windows form.Niewiem czy dobrze rozumiem,ale dopiero zaczynam c#.Fajnie by było gdyby ktoś popatrzał na mój kod i podpowiedział mi trochę.
Bo musisz go przystosować. I Wygląda na to, że dłużej musisz posiedzieć nad podstawami w trybie konsoli.
A jak go przystosować.Mała podpowiedź-proszę
Dobra, to tak:
- bierzesz algorytm, który został podany i wrzucasz go do jakiejś osobnej metody.
- tworzysz formatki, textBox'y, przyciski itd.
- wybierasz przycisk, który ma za zadanie zsumować podane elementy w textBox'ie
- przekazujesz string z textBox'a do swojej metody i otrzymujesz wynik
- otrzymany wynik wyświetlasz w innym (bądź tym samym) textBox'ie
dobre a ja jestem dziewczyną piszę od brata hehe dobre niestety nie uda się wam:)
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.