Program.pdf
(
137 KB
)
Pobierz
W programie są zdefiniowane następujące zmienne widziane w całej aplikacji:
Opis programu Kalkulator
W programie są zdefiniowane następujące zmienne widziane w całej aplikacji:
Private
Wpis
As
Stack
Private
WpisK
As
Queue
Private
PamiecS
As
Stack
Private
PamiecQ
As
Queue
Private
DaneQ
As
Queue
Private
BPusty
As
Boolean
=
True
Private
txtWpis
As
String
Private
SystemD
As
Boolean
Private
Operator
As
Byte
= 0
Private
PierwszyOperator
As
Boolean
Private
WynikChwilowy
As Double
Liczby są wprowadzane do kalkulatora poprzez naciskanie odpowiednich klawiszy na
formularzu. Do każdego klawisza jest przypisana odpowiednia procedura zdarzenia, np.
wciśnięcie przycisku „2”.
Private
Sub
btn2_Click(
ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
btn2.Click
Wpis.Push("2")
–
Wczytanie na stos
Wpis
liczby 2.
WpisK.Enqueue("2")
–
Wczytanie do kolejki
WpisK
liczby 2.
If
BPusty
Then
lblPoleWpis.Text = Wpis.Peek
BPusty =
False
– Sprawdzenie, czy etykieta lblPoleWpis jest pusta
jeżeli tak, to odczytywany jest pierwszy
element ze stosu (a dokładnie z jego wierzchołka) bez jego usunięcia (metoda
Peek
).
Else
lblPoleWpis.Text = lblPoleWpis.Text & Wpis.Peek
–
Gdy etykieta nie jest pusta, do znajdującego się tam łańcucha znaków jest dodawany
element z wierzchołka (odczyt bez usuwania – także metoda
Peek
).
End
If
End
Sub
Podobnie działają wszystkie klawisze numeryczne (oraz klawisz przecinka), które umożliwiają
wprowadzenie wartości liczbowej do kalkulatora.
Klawisze odpowiedzialne za wybór działania powinny:
- wybrać, jakie działanie ma być wykonane;
- wykonać poprzednie działanie, np. w kolejności wciskania:
3
*
3
+
-> Zwracany jest wynik 9, do którego będzie dodana następna wartość.
Każde z działań ma swój kod.
Private
Sub
btnOdejmij_Click(
ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
btnOdejmij.Click
WykonajDzialanie("-")
Wywoływana jest procedura
WykonajDzialanie
z parametrem „-„.
Operator = 2
Zapamiętany zostanie kod ostatniej operacji w zmiennej widzianej w całym programie (kod 2
oznacza odejmowanie).
End
Sub
Kluczem do obliczeń jest procedura
WykonajDzialanie
, która wygląda następująco:
Private
Sub
WykonajDzialanie(
ByVal
znak
As
String
)
Dim
DblLiczba
As
Double
Dim
strLiczba
As
String
= ""
Dim
dblWynik
As
Double
If
Not
BPusty
Then
BPusty =
True
Do
While
WpisK.Count <> 0
strLiczba = strLiczba & WpisK.Dequeue
Loop
Pobranie znaków z kolejki i utworzenie łańcucha znaków, który będzie konwertowany na
liczbę.
DblLiczba =
CDbl
(strLiczba)
PamiecS.Push(strLiczba)
PamiecQ.Enqueue(strLiczba)
PamiecS.Push(znak)
PamiecS
- pamięć oparta na stosie.
PamiecQ.Enqueue(znak)
PamiecQ
- pamięć oparta na kolejce.
DaneQ.Enqueue(DblLiczba)
Zapamiętanie wprowadzonej liczby i znaku w kolejce i na stosie (dzięki temu będzie można
odtwarzać wykonywane działania).
If
Operator <> 0
Then
If
Operator = 1
Then
dblWynik = DaneQ.Dequeue + DaneQ.Dequeue
End
If
If
Operator = 2
Then
dblWynik = DaneQ.Dequeue - DaneQ.Dequeue
End
If
If
Operator = 3
Then
dblWynik = DaneQ.Dequeue * DaneQ.Dequeue
End
If
If
Operator = 4
Then
dblWynik = DaneQ.Dequeue / DaneQ.Dequeue
End
If
If
Operator = 5
Then
Operator = 0
End
If
W przypadku gdy wciśniemy znak „=” wartość zmiennej
Operator
jest ustawiana na 0 (by
nie pamiętała żadnego działania)
W zależności od wartości zmiennej
Operator
wykonywane jest odpowiednie działanie
i zapamiętywany wynik.
lblPoleWpis.Text = dblWynik
DaneQ.Clear()
DaneQ.Enqueue(dblWynik)
PamiecS.Push(dblWynik)
PamiecQ.Enqueue(dblWynik)
Wynik jest wyświetlany w kontrolce i jednocześnie zapamiętywany w pamięci kolejki i stosu.
End
If
End
If
End
Sub
Wyświetlanie wykonywanych operacji jest możliwe dzięki zapamiętywaniu każdej wartości i
symbolu działania w kolejce i na stosie.
Private
Sub
btnDoTylu_Click(
ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
btnDoTylu.Click
lblPoleWpis.Text = ""
lblPoleWpis.Text = PamiecS.Pop
If
PamiecS.Count = 0
Then
MessageBox.Show("pamięć pusta")
End
If
End
Sub
Odtwarzanie do tyłu odbywa się dzięki odczytywaniu elementów ze stosu
PamiecS
. Trzeba
pamiętać, że pobranie elementu ze stosu powoduje jego usunięcie, czyli jest to operacja
wykonywana jednokrotnie. Podobnie wygląda procedura odczytywania działań od początku,
oparta na kolejce
PamiecQ
.
Private
Sub
btnDoPrzodu_Click(
ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
btnDoPrzodu.Click
lblPoleWpis.Text = ""
lblPoleWpis.Text = PamiecQ.Dequeue
If
PamiecQ.Count = 0
Then
MessageBox.Show("pamięć pusta")
End
If
End
Sub
Dzięki zmiennym
PamiecQ
i
PamiecS
nasz kalkulator otrzymał pamięć pozwalającą
odtworzyć wykonywane czynności (oczywiście jest to duże uproszczenie ponieważ w trakcie
przeglądania nasza pamięć jest czyszczona, tak więc odtworzenie jest możliwe tylko jeden
raz)
Ostatnie funkcje tego kalkulatora to konwersja pomiędzy systemem dziesiętny a binarnym
i odwrotnie.
Zamiana z systemu dziesiętny na binarny:
Private
Sub
btnDziesietnyNaBinarny_Click(
ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
btnDziesietnyNaBinarny.Click
Dim
intLiczba
As
Integer
Dim
intReszta
As
Integer
Dim
Binarna
As
Stack
If
SystemD
Then
Binarna =
New
Stack()
Zainicjowanie nowego stosu
Binarna
.
lblBinarny.Text = ""
intLiczba =
CInt
(lblPoleWpis.Text)
Do
While
intLiczba <> 0
Binarna.Push((intLiczba
Mod
2))
Reszta z dzielenia przez 2 jest wrzucana na stos
Binarna
.
intLiczba = intLiczba \ 2
Loop
Do
While
Binarna.Count <> 0
lblBinarny.Text = lblBinarny.Text & Binarna.Pop
Loop
Odczyt ze stosu umieszczonych na nim wartości i umieszczenie ich w etykiecie
lblBinary
End
If
End
Sub
W procedurze zamieniającej liczbę binarną na dziesiętną można wykorzystać dwa algorytmy –
klasyczny z kolejnymi potęgami liczby 2 lub z wykorzystaniem schematu Hornera.
Private
Sub
btnNaDziesietny_Click(
ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
btnNaDziesietny.Click
I algorytm
Zamiana liczby binarnej na dziesiętną, w której nie został użyty schemat Hornera z danymi
pobieranymi ze stosu
.
Dim
intLiczbaD
As
Integer
= 0
Dim
potega
As
Byte
= 0
If
Not
SystemD
Then
While
Wpis.Count <> 0
intLiczbaD = intLiczbaD + 2 ^ potega * Wpis.Pop
potega += 1
Plik z chomika:
mi-jen66
Inne pliki z tego folderu:
PrzykładZastosowaniaKolejki.pdf
(132 KB)
m26l1a.htm
(14 KB)
Program.pdf
(137 KB)
m26l5a.htm
(21 KB)
m26l0a.htm
(4 KB)
Inne foldery tego chomika:
algorytmy
graphics
interfejs
materialy
mod1
Zgłoś jeśli
naruszono regulamin