Akademia Techniczno-Rolnicza w Bydgoszczy
Wydział Mechaniczny
Katedra Sterowania i Konstrukcji
Systemy mikrokomputerowe
WSTĘP DO PROGRAMOWANIA
W JĘZYKU VISUAL BASIC
Instrukcja nr 6
Opis działania programu Systemy
Program Systemy pokazuje wprowadzanie danych z klawiatury oraz wykonuje konwersje liczb pomiędzy systemem dziesiętnym, ósemkowym oraz szesnastkowym.
Implementacja wizualna programu Systemy.
Otwórz nowy projekt, zachowaj jego formę w pliku Systemy.frm, a projekt pod nazwą Systemy.mak.
Na podstawie tabeli zbuduj formę tak jak na rysunku 1.
Obiekt |
Własność |
Ustawienie |
Form |
Name Caption Height Left Top Width |
frmLiczby Systemy liczbowe 3795 2100 1605 4635 |
Command Button |
Name Caption Height Left Top Width |
cmdKoniec &Koniec 495 2900 1920 1215 |
Option Button |
Name Caption Height Left Top Value Width |
optOsiem System ósemkowy 495 600 1332 False 1850 |
Option Button |
Name Caption Height Left Top Value Width |
optDziesiec System dziesiętny 495 600 1920 True 1850 |
Option Button |
Name Caption Height Left Top Value Width |
optSzesnascie System szesnastkowy 495 600 2520 False 1850 |
Text Box |
Name Height Left Top Width Text |
txtLiczby 285 600 600 3375 (skasować zawartość) |
Label |
Name Caption Height Left Top Width |
lblLiczby Wprowadź liczbę: 255 600 600 3375 |
Rys.1 Program Systemy
Wprowadzanie kodu programu Systemy
Wpisz następujący kod do części ogólnych deklaracji frmLiczby:
`Wszystkie zmienne muszą być zadeklarowane
Option Explicit
Dim Liczba As Variant
Instrukcja |
Deklaracja Variant oznacz, że zmienna Liczba może zawierać dowolny typ danych (liczbowych lub tekstowych), włączając w to łańcuchy znakowe o zmiennej długości oraz typy danych definiowane przez użytkownika. |
Do procedury optOsiem_Click() formy frmLiczby wpisz następujący kod:
Sub optOsiem_Click()
txtLiczby.Text = Oct(Liczba)
End Sub
Instrukcja |
Funkcja Oct zwraca łańcuch znaków reprezentujący wartość argumentu funkcji (zmienna Liczba) w systemie ósemkowym. Jeżeli wprowadzana wartość nie jest liczbą całkowitą, jest ona zaokrąglana do najbliższej liczby całkowitej przed zmianą systemu liczbowego. Maksymalna długość liczby w formacie ósemkowym nie może przekraczać 11 znaków. |
Do procedury optSzesnascie_Click() formy frmLiczby wpisz następujący kod:
Sub optSzesnascie_Click()
txtLiczby.Text = Hex(Liczba)
End Sub
Instrukcja |
Funkcja Hex zwraca łańcuch znaków reprezentujący wartość argumentu funkcji (zmienna Liczba) w systemie szesnastkowym. Jeżeli wprowadzana wartość nie jest liczbą całkowitą, jest ona zaokrąglana do najbliższej liczby całkowitej przed zmianą systemu liczbowego. Maksymalna długość liczby w formacie szesnastkowym nie może przekraczać 8 znaków. |
Do procedury optDziesiec_Click() formy frmLiczby wpisz następujący kod:
Sub optDziesiec_Click()
txtLiczby.Text = Str(Liczba)
End Sub
Instrukcja |
Funkcja Str zwraca łańcuch znaków reprezentujący wartość argumentu funkcji (zmienna Liczba) w formacie dziesiętnym. |
Do procedury cmdKoniec_Click() formy frmLiczba wpisz następujący kod:
Sub cmdKoniec_Click()
End
End Sub
Do procedury txtLiczby_Change() formy frmLiczby wpisz następujący kod:
Sub txtLiczby_Change()
If optOsiem.Value = True Then
Liczba = Val("&O" + LTrim(txtLiczby.Text) + "&")
End If
If optDziesiec.Value = True Then
Liczba = Val(LTrim(txtLiczby.Text) + "&")
End If
If optSzesnascie.Value = True Then
Liczba = Val("&H" + LTrim(txtLiczby.Text) + "&")
End If
End Sub
Instrukcja |
Procedura txtLiczby_Change() wykonywana jest zawsze, gdy zmieni się zawartość cechy Text obiektu txtLiczby. Zmiana taka następuje w wyniku naciśnięcia klawisza Enter przez użytkownika lub na skutek działania innej procedury. W opisywanym ćwiczeniu procedura ta dokonuje zmiany ciągu znaków wprowadzanych przez użytkownika na wartość liczbową w odpowiednim systemie.
Warunki If...Then...End If sprawdzają, który system liczbowy jest wybrany przez użytkownika:
If optOsiem.Value = True Then
Liczba = Val("&O" + LTrim(txtLiczby.Text) + "&")
End If
Jeżeli zaznaczony jest opcja „System ósemkowy” funkcja Val dokonuje zamiany ciągu znaków wprowadzonego przez użytkownika na liczbę. Do ciągu znaków dodawana jest fraza „&O”, a na końcu znak „&”, co sygnalizuje funkcji Val, że wynik przekształcenia ma być liczbą ósemkową. Funkcja LTrim usuwa znaki spacji znajdujące się z lewej strony ciągu znaków.
If optSzesnascie.Value = True Then
Liczba = Val("&H" + LTrim(txtLiczby.Text) + "&")
End If
Jeżeli zaznaczony jest opcja „System szesnastkowy” funkcja Val dokonuje zamiany ciągu znaków wprowadzonego przez użytkownika na liczbę. Do ciągu znaków dodawana jest fraza „&H” a na końcu znak „&”, co sygnalizuje funkcji Val, że wynik przekształcenia ma być liczbą szesnastkową. Funkcja LTrim usuwa znaki spacji znajdujące się z lewej strony ciągu znaków.
If optSzesnascie.Value = True Then
Liczba = Val("&H" + LTrim(txtLiczby.Text) + "&")
End If
Jeżeli zaznaczony jest opcja „System dziesiętny” funkcja Val dokonuje zamiany ciągu znaków wprowadzonego przez użytkownika na liczbę dziesiętną. Do ciągu znaków dodawany jest na końcu znak „&”, co sygnalizuje funkcji Val, że wynik przekształcenia ma być liczbą dziesiętną. Funkcja LTrim usuwa znaki spacji znajdujące się z lewej strony ciągu znaków.
Do procedury txtLiczby_KeyPress() formy frmLiczby wpisz następujący kod:
Sub txtLiczby_KeyPress(KeyAscii As Integer)
If KeyAscii < 48 Then
KeyAscii = 0
End If
If optOsiem.Value And KeyAscii > 55 Then
KeyAscii = 0
End If
If optDziesiec.Value And KeyAscii > 57 Then
KeyAscii = 0
End If
`Poniższe trzy wiersze stanowią pojedynczą linie kodu
If optSzesnascie.Value And (KeyAscii > 57 And (KeyAscii < 65 Or KeyAscii > 70) And (KeyAscii < 97 Or KeyAscii > 102)) Then
KeyAscii = 0
End If
End Sub
Instrukcja |
Procedura KeyPress wykonywana jest zawsze wtedy, gdy użytkownik naciśnie jakikolwiek klawisz. Jako wartość wejściową procedura otrzymuje kod ASCII wciśniętego klawisza (zmienna KeyAscii). Kod umieszczony w procedurze ma za zadanie nie pozwalać na wprowadzenie do okienka tekstowego znaków nie występujących w danym systemie liczbowym. Użytkownik nie ma więc wprowadzać znaków o kodach niższych od 48 (poniżej tego kodu ASCII znajdują się znaki sterujące i niektóre znaki specjalne !, %). Również znak minus „-”, i przecinek, co nie pozwala na wprowadzanie liczb ujemnych oraz ułamkowych. Tą czynność realizują poniższe linie kodu:
If KeyAscii < 48 Then
KeyAscii = 0
End If
Przypisanie KeyAscii = 0 anuluje wciśnięcie klawisza przez użytkownika jeżeli jego kod ASCII jest niższy niż 48.
Kolejne trzy komendy If..Then..End If kontrolują wprowadzanie danych dla kolejnych systemów liczbowych:
If optOsiem.Value And KeyAscii > 55 Then
KeyAscii = 0
End If
Jeżeli wybierzemy wprowadzanie danych w systemie ósemkowym (zaznaczony jest przycisk optOsiem), procedura pozwala na wprowadzanie znaków, których kody mają wartość od 48 (z poprzedniego warunku) do 55 (KeyAscii > 55), co odpowiada kodom cyfr od 0 do 7 (system ósemkowy).
If optDziesiec.Value And KeyAscii > 57 Then
KeyAscii = 0
End If
Jeżeli wybierzemy wprowadzanie danych w systemie dziesiętnym (zaznaczony jest przycisk optDziesiec), procedura pozwala na wprowadzanie znaków, których kody mają wartość od 48 (z pierwszego warunku) do 57 (KeyAscii > 57), co odpowiada kodom cyfr od 0 do 9 (system dziesiętny).
`Poniższe dwa wiersze stanowią pojedynczą linie kodu
If optSzesnascie.Value And (KeyAscii > 57 And (KeyAscii < 65 Or KeyAscii > 70) And (KeyAscii < 97 Or KeyAscii > 102)) Then
KeyAscii = 0
End If
Jeżeli wybierzemy wprowadzanie danych w systemie szesnastkowym (zaznaczony jest przycisk optDziesiec), procedura pozwala na wprowadzanie znaków, których kody mają wartość od 48 (z pierwszego warunku) do 57 (KeyAscii > 57), co odpowiada kodom cyfr od 0 do 9, literom od a do f (kody ASCII od 97 do 102) oraz wielkim literom od A do F (kody ASCII od 65 do 70).
W przypadku kiedy kod wciśniętego klawisza będzie inny niż podane powyżej, fakt przyciśnięcia klawisza jest przez procedurę anulowany poprzez przypisanie:
KeyAscii = 0.
Uruchomienie programu Systemy
Uruchom program Systemy
Kliknij na pole tekstowe, wprowadź dowolną wartość.
Klikając na opcje System ósemkowy, System dziesiętny, System szesnastkowy, zmień format wprowadzonej liczby.
Skasuj zawartość pola tekstowego, kliknij na opcje Systemy szesnastkowe, wprowadź wartość FF, a następnie przelicz ją na system dziesiętny.
Kliknij Koniec, aby zakończyć działanie programu.
Tworzenie pliku wykonywalnego (Systemy.exe)
Wybierz z menu File opcję Make EXE File.
Zapamiętaj plik pod nazwą Systemy.exe.
Zakończ działanie Visual Basic wybierając z menu File opcję Exit.
Ćwiczenie końcowe
Zmień program Systemy, tak aby wykonywał konwersje jednostek siły (niuton - N, kilogram siły kG, dyna - dyn,)
Informacja |
Pomiędzy poszczególnymi jednostkami występują następujące zależności: 1N = 0.10197 kG 1N = 105 dyn |
5
7