Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

nyac55

C# - Program Kalkulator w obiektowym z Odwróconą Notacją Polska?

Polecane posty

Mam jeszcze jedno pytanie: masz w ogóle pomysł na wykonywanie samych obliczeń?

Wykonanie obliczeń np.

Switch'em sprawdzać operatory i dla danego operatora wykonywać operacje.

Ewentualnie z użyciem stosu.

Metoda Add nie jest publiczna, stąd też z zewnątrz jest niedostępna.

Po drugie, wykonujesz parsowanie, ale wyniku nigdzie nie zapamiętujesz.

Może być ewentualnie funkcja typu double(lecz może lepiej void i zapamiętać pod zmienną) do zwracania typu:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ONPCalculator.Core
{
public class CalculatorCore
{
Stack<String> stos = new Stack<string>();
//stos.Add(textBox1.Text);
string init;
public double Add(string liczba)
{
if (liczba.Equals('+') || liczba.Equals('-') || liczba.Equals('*') || liczba.Equals('/'))
{
Char.Parse(liczba);
return Char.Parse(liczba);
}
else
{
Convert.ToDouble(liczba);
//Double.Parse(liczba);
return Double.Parse(liczba);
}
}

DLL


using ONPCalculator.Core;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//using CalculatorCore;
namespace ONPCalculator.UI
{
public partial class Form1 : Form
{
public string liczba;
CalculatorCore calculator = new CalculatorCore();
public Form1()
{
InitializeComponent();
}
// ...
private void Accept_button_Click(object sender, EventArgs e)
{
liczba = textBox1.Text;
calculator.Add(liczba);
}

GUI

Ciągle mam ten sam błąd.

_+_+_

Jeszcze jedno pytanie: Czy po przekazaniu wartości z textBoxa do metody w bibliotece mogę wrzucać od razu za pośrednictwem biblioteki wartości na stos ,a później zwrócić wynik. Czy muszę wartość z textBoxa przekazać bibliotece, ona wraca po parsowaniu do GUI, następnie poddajemy ją dalszej obróbce np. przekazujemy potem z GUI na stos itd.

Link do komentarza
Udostępnij na innych stronach

Hmm, zdecydowanie dziwne, że dostajesz taki błąd (tak dla pewności: on dotyczy linijki "calculator.Add(liczba);" ?). Próbowałeś przebudować solucję?

Jeżeli nadal problem będzie występował, to napisz, jakie metody podpowiada Ci InteliSense dla obiektu calculator?

Twoja dalsza rozbudowa kodu utwierdza mnie w przekonaniu, że nie bardzo wiesz, w jaki sposób użyć stosu. Spróbuj wymyślić jakieś nieco skomplikowane wyrażenie w ONP (np. 1 2 + 3 1 - * =), rozwiązać je na kartce, a następnie zastanowić się, w jaki sposób to rozwiązać, dostając za każdym razem jedną liczbę/operator.

Link do komentarza
Udostępnij na innych stronach

Twoja dalsza rozbudowa kodu utwierdza mnie w przekonaniu, że nie bardzo wiesz, w jaki sposób użyć stosu. Spróbuj wymyślić jakieś nieco skomplikowane wyrażenie w ONP (np. 1 2 + 3 1 - * =), rozwiązać je na kartce, a następnie zastanowić się, w jaki sposób to rozwiązać, dostając za każdym razem jedną liczbę/operator.

Nie koniecznie muszę robić bardziej skomplikowane przykłady. Mam 2 możliwości:

-Wystarczy, że zrobię 1 wartość do 1 zmiennej, 2 wartość do drugiej, znak operacji np. switchem i 3 wartość wynik.

-Ewentualnie na stos wrzucam 1 wartość, później 2 ,znak -> liczę na stosie pozostaje wynik itd.

Na początek chciałbym, żeby to działało i liczyło, a jak będzie fajnie liczyć, to może coś rozbuduję, ponieważ termin mnie "goni".

Jeżeli nadal problem będzie występował, to napisz, jakie metody podpowiada Ci InteliSense dla obiektu calculator?

Właśnie tylko: Equals, GetHashCode, GetType, ToString <- innych nie widzi...

Możliwe, że źle zrobiłem referencję.

Link do komentarza
Udostępnij na innych stronach

Nie koniecznie muszę robić bardziej skomplikowane przykłady. Mam 2 możliwości:

-Wystarczy, że zrobię 1 wartość do 1 zmiennej, 2 wartość do drugiej, znak operacji np. switchem i 3 wartość wynik.

-Ewentualnie na stos wrzucam 1 wartość, później 2 ,znak -> liczę na stosie pozostaje wynik itd.

Ta druga opcja to chyba najlepsze, co można zrobić, przy pierwszej byłby problem np. dla sekwencji "1 2 3 + - =".

Póki co mógłbyś spróbować olać dll'kę i całość napisać w jednym programie (oczywiście zachowując podział na klasy). I dopiero jak zacznie działać, podzielić na dwa osobne projekty.

Link do komentarza
Udostępnij na innych stronach

Niestety dll'ki nie mogę "olać". Natomiast czy to jest dobrze. To kod behind czy coś w ten deseń:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using Projekt1_biblioteka_dll;

namespace Projekt1_Windows_Forms
{
static public class Program
{
/// <summary>
/// Główny punkt wejścia dla aplikacji.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new ONPCalculator.UI.Form1()); //<- wcześniej tu wyrzucało błąd,kiedyś, bo było tylko new Form1() <-na samym początku przed dodaniem referencji

}
}
}

Link do komentarza
Udostępnij na innych stronach

Napoleon, czy Hitler też próbowali walczyć na wielu frontach i zbyt szczęśliwie się to dla nich nie skończyło...

Masz do rozwiązania dwa niezależne problemy: napisanie kalkulatora dla ONP i aplikacji korzystającej z DLL'ki.

Moim zdaniem póki co możesz z powodzeniem klasę CalculatorCore wrzucić do projektu z GUI i dopiero, kiedy będzie działać, zająć się przeniesieniem jej z powrotem do osobnego projektu.

Jeżeli koniecznie chcesz od razu rozdzielić program i DLL'kę, to może spróbuj od początku stworzyć solucję, stworzyć projekt z aplikacją GUI, następnie drugi z DLL'ką. Po dodaniu referencji z drugiego programu do pierwszego, stwórz w tym drugim jakąś prostą metodę i sprawdź, czy będzie widoczna (i będzie działała) w pierwszym projekcie.

Link do komentarza
Udostępnij na innych stronach


using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using Projekt1_biblioteka_dll;
namespace ONPCalculator.UI //zmieniłem na to
{
public class CalculatorCore // to też
{
/// <summary>
/// Główny punkt wejścia dla aplikacji.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new ONPCalculator.UI.Form1());
}
internal void Add(string liczba) // najeczhałem na add ,bo teraz po zmianie się wyświetlało pisało coś dodaj funkcję add "for stubb" coś podobnego i teraz się kompiluje bez błędu
{
throw new NotImplementedException(); //ale tu pojawia się breakpoint
}
}
}

Spróbuję zrobić to co napisałeś. Zobaczymy co z tego wyjdzie.

Link do komentarza
Udostępnij na innych stronach

Jest coś takiego:


using ONPCalculator.Core;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//using CalculatorCore;
namespace ONPCalculator.UI
{
public partial class Form1 : Form
{
public string liczba;
CalculatorCore calculator = new CalculatorCore();
string init;
double _liczba;
char znak;
public void Add(string liczba)
{
if (liczba.Equals('+') || liczba.Equals('-') || liczba.Equals('*') || liczba.Equals('/'))
{
znak = Char.Parse(liczba);
}
else
{
_liczba = Double.Parse(liczba);
}
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
textBox1.AppendText("1");
}
private void button2_Click(object sender, EventArgs e)
{
textBox1.AppendText("2");
}
private void button3_Click(object sender, EventArgs e)
{
textBox1.AppendText("3");
}
private void button4_Click(object sender, EventArgs e)
{
textBox1.AppendText("4");
}
private void button5_Click(object sender, EventArgs e)
{
textBox1.AppendText("5");
}
private void button6_Click(object sender, EventArgs e)
{
textBox1.AppendText("6");
}
private void button7_Click(object sender, EventArgs e)
{
textBox1.AppendText("7");
}
private void button8_Click(object sender, EventArgs e)
{
textBox1.AppendText("8");
}
private void button9_Click(object sender, EventArgs e)
{
textBox1.AppendText("9");
}
private void button0_Click(object sender, EventArgs e)
{
textBox1.AppendText("0");
}
private void button19_Click(object sender, EventArgs e)
{
textBox1.AppendText(",");
}
private void buttonC_Click(object sender, EventArgs e)
{
textBox1.Text = "";
}
private void buttonPlus_Click(object sender, EventArgs e)
{
textBox1.AppendText("+");
liczba = textBox1.Text;
}
private void buttonMinus_Click(object sender, EventArgs e)
{
textBox1.AppendText("-");
}
private void buttonMnozenie_Click(object sender, EventArgs e)
{
textBox1.AppendText("*");
}
private void buttonDzielenie_Click(object sender, EventArgs e)
{
textBox1.AppendText("/");
}
private void Backspace_button_Click(object sender, EventArgs e)
{
int textLength = textBox1.Text.Length;
if (textLength > 0)
textBox1.Text = textBox1.Text.Substring(0, textLength - 1);
}
private void Sign_button_Click(object sender, EventArgs e)
{
int textLength = textBox1.Text.Length;
if (textLength > 0)
if ((textBox1.Text[0]).Equals('-'))
textBox1.Text = textBox1.Text.Substring(1, textLength - 1);
else textBox1.Text = "-" + textBox1.Text;
else textBox1.Text = "-" + textBox1.Text;
}
public void Accept_button_Click(object sender, EventArgs e)
{
liczba = textBox1.Text;
calculator.Add(liczba);
}
private void Equal_button_Click(object sender, EventArgs e)
{

}
}
}

Dalej jest to nie widoczne.

-To co się wcześniej wyświetlało przy najechaniu i kliknięciu na Add to:

Generate method stub for 'Add' in 'ONPCalculator.UI.CalculatorCore'

Link do komentarza
Udostępnij na innych stronach

OK, to już mam i się kompiluje. Możesz mi teraz powiedzieć jak mogę zwrócić wartość do text Boxa. Jeżeli pobieram zmienną liczba w metodzie Add to jak zwrócić zmienną znak lub liczba w zależności od przypadku lub jak te wartości przekazać na stos i zwrócić później wynik.

Link do komentarza
Udostępnij na innych stronach

Trochę namieszałeś tymi przyciskami 0-9, bo nie bardzo rozumiem, czy pozwalasz na wprowadzenie jedynie liczb jednocyfrowych, czy chcesz je jakoś inaczej zbijać w całość.

Jeżeli założymy tą pierwszą opcję, to zamieniłbym typ obiektów na stosie na double. Metoda Add sprawdza, czy dostaje operator, jeżeli tak, to pobiera dwie wartości ze stosu, wykonuje odpowiednią operację i odkłada wynik na stosie. Przyjście "=" powinno oznaczać zwrócenie wartości, ale nie jestem pewien, czy jest sens przetwarzać to po stronie Core'a: może prościej dodać w nim metodę

double GetResult()

i w niej zwracać wartość pobraną ze stosu, a samo wybranie "=" obsłużyć już po stronie GUI, wywołując wspomnianą funkcję.

Link do komentarza
Udostępnij na innych stronach

To miało działać np. tak:

Wprowadzamy liczbę np. 123 do text Boxa. Potem przyciskiem zatwierdź pobieramy wartość z text Boxa i odkładamy na stos. Tak samo robimy dla 2 liczby. Tak samo robimy z operatorem. Jeśli nie jest znakiem typu "+ - * /" parsujemy na double -> czyli te liczby ,a jeśli jest znakiem na char. Później sprawdzamy jaki jest znak operacji. (Tutaj pytanie: Jak powinienem to zrobić?) Przycisk = zwraca wynik operacji. Czyli liczymy wartość i czekamy na klawisz =, aby podać wynik w text Boxie. (2 pytanie, co się stanie po wyświetleniu wyniku w text Boxie: Myślę ,że na stosie powinna zostać tylko wartość wyniku, wtedy do wartości wyniku możemy: wykonywać operację, gdzie 1 argument to wynik, 2 argument znowu wstawiamy i liczymy. Przycisk C dodatkowo czyści stos. Wtedy proces musi zaczynać się od nowa. |Myślę, że tak powinno to wyglądać.|

Link do komentarza
Udostępnij na innych stronach

Tutaj pytanie: Jak powinienem to zrobić?

Pobranie ze stosu dwóch wartości => zapisanie wyniku w osobnej zmiennej (tutaj switch/ify rozpoznające operator) => wrzucenie wyniku na stos.

(2 pytanie, co się stanie po wyświetleniu wyniku w text Boxie: Myślę ,że na stosie powinna zostać tylko wartość wyniku, wtedy do wartości wyniku możemy: wykonywać operację, gdzie 1 argument to wynik, 2 argument znowu wstawiamy i liczymy. Przycisk C dodatkowo czyści stos. Wtedy proces musi zaczynać się od nowa. |Myślę, że tak powinno to wyglądać.|

Jeżeli jest przycisk czyszczący stos, to rzeczywiście takie podejście jak najbardziej ma sens.

Link do komentarza
Udostępnij na innych stronach

Jeśli mam taki kod:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Projekt1_Core_dl
{
public class Calculator
{
Stack<String> stos = new Stack<string>();
//double _liczba;
//char znak;
public int count = 0, count_op = 0;
//string show1;
public string show()
{
string show1 = "Error!";
return show1;
}
public void Add(string liczba)
{
if (liczba.Equals('+') || liczba.Equals('-') || liczba.Equals('*') || liczba.Equals('/'))
{
//znak = Char.Parse(liczba);
stos.Push(liczba);
count_op++;
}
else
{
//_liczba = Double.Parse(liczba);
stos.Push(liczba);
count++;
}

if (count_op == 1)
show();
else if(count_op == 2)
show();
}

public void Clear()
{
stos.Clear();
}

}
}


Zakomentowałem parsowanie, bo pojawiają się błędy.

//GUI
public void Accept_button_Click(object sender, EventArgs e)
{
liczba = textBox1.Text;
calculator.Add(liczba);
calculator.show();
}

_+_+_

Show to miała być zmienna wyświetlająca tekst Error! w text Boxie jeśli znak jest wprowadzany na 1 lub 2 pozycji. BO jak wiemy pierwsze 2 wartości to miały być liczby, a na 3 pozycji znak. Czy da się bezpośrednio z biblioteki dll przesyłać wartości do tekst Boxa. Czy muszę w bibliotece stworzyć funkcję, która będzie zwracać tą wartość i wywołać ją w kodzie GUI, żeby tego dokonać?

_ _ _ _ _ _ _ _ +++

Czy na znaki operatorów, powinienem tworzyć osobny stos, gdyż istnieje problem z konwersją tekstu z text Boxa na znam typu char, gdy używam zapisu:


znak = Char.Parse(liczba);
stos.Push(znak);

Error 3 Argument 1: cannot convert from 'char' to 'string' C:\Users\Patryk\documents\visual studio 2012\Projects\Projekt1_GUI\Projekt1_Core_dl\Class1.cs 26 27 Projekt1_Core_dl

Error 2 The best overloaded method match for 'System.Collections.Generic.Stack<string>.Push(string)' has some invalid arguments C:\Users\Patryk\documents\visual studio 2012\Projects\Projekt1_GUI\Projekt1_Core_dl\Class1.cs 26 17 Projekt1_Core_dl

- - - - -

Warning 1 The field 'Projekt1_Core_dl.Calculator.show1' is assigned but its value is never used C:\Users\Patryk\documents\visual studio 2012\Projects\Projekt1_GUI\Projekt1_Core_dl\Class1.cs 15 16 Projekt1_Core_dl

Czy po prostu przyjmować na stos wartości w stringu, później ściągać argumenty ze stosu i dopiero konwertować w innej funkcji?

_+_+_

Link do komentarza
Udostępnij na innych stronach

Obecnie udało mi się uporać z paroma błędami. Pozostało mi już tylko odpowiednie wysłanie z text Boxa danych metodą Add, ściągnięcie ich ze stosu i obliczenie danej operacji. Sądzę, że można rozwiązać to tak, że metoda Add przyjmuje wartości typu string.

1 wartość to liczba, 2 to liczba, 3 to zank operacji. Gdy naciśniemy button = ściągamy ze stosu ostatnią wartość. Jeśli ta wartość to znak sprawdzamy w switchu jaka to operacja. Teraz dla danego typu operacji ściągamy wartość 1 liczby podstawiamy pod zmienną b, następnie ściągamy ze stosu wartość 2 liczby i podstawiamy pod zmienną a. 3 zmienna to będzie wynik z a "operacja" b. Wartość 3 zmiennej wrzucamy na stos. Następnie zwracamy. (Teraz pytanie, jak mam zwrócić wartość na stos. Jakiego zapisu użyć?) To co przedstawiłem to na razie sam pomysł. Mam tylko metodę Add, która w pełni jeszcze nie działa.

_+_+_

Obecnie próbowałem obsłużyć Core, czyli to jak ma odbywać się liczenie. Mój program zawiera wiele błędów. Pomyślałem, że można to zrobić na 2 sposoby; 1 wrzucać na stos, następnie ściągać i podstawiać pod zmienne wartości i znak na koniec wyliczyć wynik. ; 2 sposób od razu podstawiamy pod zmienne, sprawdzamy licznikiem(jeśli wprowadzamy 1 wartość to liczba i podstawiamy pod liczba_a, jeśli wprowadzamy 2 wartość to też liczba i podstawiamy pod liczba_b, jeśli 3 wartość to znak to podstawiamy pod znak. Poniżej zamieszczam wyniki mojej pracy. Proszę o pomoc z tym zagadnieniem.

https://www.dropbox.com/s/1e1wd7kofpxjfyt/Projekt1_GUI%20v.1.4%28z%20bledami%29.rar

Link do komentarza
Udostępnij na innych stronach

Witam. Od jakiegoś czasu próbuję napisać aplikację kalkulator z Odwrotną Notacją Polską oraz połączoną z biblioteką DLL. Obecnie mam problem w metodzie wynik, która miała zajmować się obliczeniami, jest tam kilka błędów, lecz nie wiem jak je wyeliminować. Czy mógłbym prosić o pomoc??

To co do tej pory udało mi się napisać:

https://www.dropbox....kt1_GUI_1.6.rar

_+_+_

Próbowałem, także innego zapisu:

liczba_b = Double.Parse(_stos.Pop());

liczba_a = Double.Parse(_stos.Pop());

Lecz pojawia się błąd funkcjonalny w działaniu programu i wyrzuca błąd wyjątku.

Link do komentarza
Udostępnij na innych stronach

Po pierwsze Class1:

- bardzo użyteczną praktyką jest nazywanie pliku zgodnie z nazwą klasy w nim umieszczonej

- póki co nie bardzo widzę sens CountOp i Count, bo tylko niepotrzebnie wprowadza zamieszanie, dodając niewymaganą funkcjonalność

- obecna konstrukcja funkcji (dodawanie całego wejścia i przetwarzanie go na końcu) znacznie utrudni samo liczenie - dużo lepiej wykonywać operacje na bieżąco i na stosie trzymać jedynie liczby (chyba właśnie przez to program wysypuje się na parsowaniu, co łatwo zauważyć na np. "2 3 + 5 *", gdzie będziesz próbować parsować "+" na double)

- przy wprowadzeniu powyższych zmian, funkcja Add wykonywałaby właściwe obliczenia (może zwracać bool informujący, czy na stosie została dokładnie jedna liczba), metoda wynik zwracała ostatnią wartość ze stosu, natomiast metoda Show nie istniałaby wcale

Co do Form1:

- nie bardzo rozumiem sens istnienia pola Liczba (skoro jest używane lokalnie w jednej metodzie, niech tam będzie zmienną, zresztą można się go pozbyć zupełnie i przekazywać do Add bezpośrednio textBox1.Text)

- jeżeli metoda Add z klasy Calculator nie jest widoczna, to napisz, które metody są widoczne

Link do komentarza
Udostępnij na innych stronach

Pomógłbyś mi przerobić mój kod, bo trochę mam mętlik oraz nie bardzo wiem jak to zapisać, żeby program robił to co chcę.

Zmienną liczba, chciałem przekazać, bo właśnie ona przekazuje wartość z text Boxa.

Chciałem zrobić takie sprawdzanie jeśli znak występuje na 3 pozycji to zapis jest poprawny, wtedy liczy. Jeśli nie generuje do text Boxa tekst "Error" z metody Show. Pomożesz mi to napisać, tak żeby było dobrze.

- - - - -

Natomiast metoda Add obecnie jest widoczna, metoda Show także.

_+_+_

Poniżej zamieszczam najnowszą wersję

https://www.dropbox.com/s/59xya2fphk3c0og/Projekt1_GUI%20v.1.8.rar:

Link do komentarza
Udostępnij na innych stronach

Nadal nie rozumiem, czemu ta liczba musi być polem w klasie, a nie zmienną w funkcji, jak ma to miejsce w przypadku "var textLength" (ta uwaga tyczy się właściwie również wszystkich innych pól z obu klas).

I nadal sądzę, że jeżeli nie bardzo się rozumiesz ze stosem, to dużo lepszym rozwiązaniem będzie zamiana jego typu z Stack<String> na Stack<Double> i wykonywanie obliczeń na bieżąco (w metodzie Add).

Co do metod, to jedna z Show/wynik powinna zniknąć, natomiast druga powinna zwracać Stringa (ew. Double'a, ale wtedy trzeba by też zająć się rzucaniem i obsługą jakiegoś wyjątku). Jej działanie powinno być następujące:

- jeżeli na stosie znajduje się dokładnie jedna liczba, zwraca ją (rzutowaną na Stringa)

- jeżeli na stosie znajduje się więcej niż jedna liczba, powinna zwrócić jakiś sensowny komunikat

- jeżeli na stosie znajdują się dwie lub więcej liczb, powinna zwrócić inny sensowny komunikat (albo na początek oba mogą mieć treść "Błąd")

Sama metoda Add powinna sprawdzić, co dostała. Jeżeli jest to operator, pobiera dwie liczby ze stosu, wykonuje na nich operację i wynik wrzuca na stos, a jeżeli na wejściu otrzyma liczbę, to tylko wrzuca ją na stos (najpierw oczywiście parsując). Dodatkowo powinna zwrócić bool z informacją, czy na stosie znajduje się dokładnie jedna liczba (może też zwrócić int'a z liczbą elementów na stosie).

Accept_button_Click wywołuje Add i sprawdza jej rezultat. Jeżeli rezultat będzie oznaczał, że na stosie znajduje się jeden element, wywołuje metodę Show/wynik i gdzieś wynik wypisuje.

Z Equal_button_Click możnaby wobec tego albo zupełnie zrezygnować, albo wywoływać Show/wynik, nie przejmując się, czy zwróci coś sensownego.

Link do komentarza
Udostępnij na innych stronach

Skoro metoda Show nie robi absolutnie niczego, wyrzuć ją i wszystkie jej wywołania.

Klasa Stack ma parę przydatnych metod, m.in. Peek, która zwraca ostatnio dodaną do stosu wartość (co pozwala na pozbycie się pola _wynik) i Count, która zwraca rozmiar kolekcji, czyli w tym przypadku ilość elementów na stosie (a to z kolei eliminuje pole ile).

Program wysypuje się przez pierwszego if'a w metodzie Add - zamiast '-' powinieneś użyć "-" (różnica mała, ale stringa powinieneś porównywać ze stringiem).

Na koniec jeszcze parę uwag:

- znacznie łatwiej będzie się wprowadzać dane, jeżeli po wciśnięciu "Zatwierdź" wyczyścisz TextBox'a

- warto pomyśleć nad pokazaniem wyniku użytkownikowi (funkcja wynik() zwraca stringa i może warto go wrzucić do TextBox'a ?)

- czemu w Calculator metoda pop jest publiczna (i czemu w ogóle istnieje?)

- skoro się nie zabezpieczasz przed wprowadzeniem niepoprawnych danych, to może dobrze by było ustawić właściwość TextBox'a ReadOnly na true ?

Link do komentarza
Udostępnij na innych stronach

Zrobiłem wszystko co mi doradzałeś oprócz tego:

"- warto pomyśleć nad pokazaniem wyniku użytkownikowi (funkcja wynik() zwraca stringa i może warto go wrzucić do TextBox'a ?)"

,gdyż nie wiem jak i gdzie powinienem się odwołać by zwrócić ten tekst. Obecnie mam jeszcze jakiś błąd w metodzie wynik przy słowie kluczowym return.

https://www.dropbox.com/s/68tsb13gy78r7ft/Projekt1_GUI%20v.2.0.rar

Link do komentarza
Udostępnij na innych stronach

,gdyż nie wiem jak i gdzie powinienem się odwołać by zwrócić ten tekst.

https://www.dropbox....1_GUI v.2.0.rar

Chyba najlepsze miejsce to przy wywołaniu metody wynik()

np.


textBox1.Text = _calculator.wynik();

Obecnie mam jeszcze jakiś błąd w metodzie wynik przy słowie kluczowym return.

Błędy są nawet dwa:

- zbędne słowo public przy deklaracji zmiennej

- brak return'a dla _stos.Count < 1 (póki co możesz chyba po prostu z tego drugiego if'a zrezygnować)

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.

×
×
  • Utwórz nowe...