jh, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, semestr V (moduł C), Podstawy sterowania logicznego semV, Podstawy Sterowania Logicznego


SL-02

Systemy liczbowe

3 EC

Monika Turowska

AGH

WEAIiE

KANiUP

2011/2012

Lab. Podstaw Sterowania Logicznego

Temat: Systemy pomiarowe

Obiekt: program komputerowy zrealizowany z wykorzystaniem języka Basic służący do przeliczania podanej liczby pomiędzy dwoma dowolnymi systemami liczbowymi

Narzędzia: Kompirator FreeBasic języka Basic

Cel ćwiczenia: napisanie programu służącego do przeliczania podanej liczby pomiędzy dwoma dowolnymi systemami liczbowymi.

Opracowanie ćwiczenia:

System pomiarowy - to odpowiednio zorganizowany zestaw elementów stanowiący całość organizacyjną i objęty wspólnym sterowaniem, przeznaczony do wydobycia informacji pomiarowej z obiektu badanego i przekazania jej obserwatorowi w użytecznej formie.

W celu realizacji ćwiczenia, aby zamienić liczbę program musi po pierwsze zamienić ją na system dziesiętny, następnie przeliczyć ją na system zadany.

Liczby są przeliczane pomiędzy naturalnymi pozycyjnymi systemami liczbowymi, dla których zachodzi równość:

0x01 graphic

gdzie:

0x01 graphic
 - jest wagą cyfry: n-1 potęgą podstawy systemu liczbowego p;

0x01 graphic
 - jest cyfrą na n-1 pozycji w liczbie, odpowiadającej n-1 potędze podstawy p.

Aby przeliczyć liczbę z dowolnego systemu liczbowego na system dziesiętny, należy każdą kolejną cyfrę przeliczanej liczby pomnożyć przez jej wagę, a następnie zsumować. W przypadku, gdy podstawa liczby przeliczanej jest większa od dziesięciu, program musi dokonać zamiany kodu ASCII odczytanego znaku na wartość liczby, której znak ten odpowiada.

Natomiast, aby przeliczyć liczbę z systemu dziesiętnego na inny, dowolny system liczbowy, wykonujemy dzielenie z resztą liczby przez podstawę systemu liczbowego, na który jest przeliczana. Iloraz tych liczb ponownie dzielimy przez podstawę systemu liczbowego, aż do wyniku 0. Reszty z dzielenia zapisujemy od końca.

Algorytm konwersji liczb:

Dane: liczba `LICZ' - prawidłowa liczba naturalna w systemie dziesiętnym oraz system liczbowy `Q', do którego będziemy dokonywać konwersji 
Wynik: liczba `WYN' powstała w wyniku zapisania liczby LICZ w systemie liczbowym Q

  1. Liczbie wynikowej `WYN' przypisujemy ciąg pusty, tak, że jej zawartość jest pusta

  2. Jeśli `Q'>10, to dla każdej z liczb od 10 do `Q'-1 (włącznie) wprowadzamy specjalne oznaczenie (zwyczajowo przyjmuje się 10=A, 11=B, 12=C, 13=D itd.)

  3. Dopóki liczba `LICZ' jest różna od 0:

  1. Odwracamy kolejność cyfr w liczbie `WYN' i kończymy algorytm. Liczba wynikowa to liczba `WYN'.

Kod programu:

1 Dim p As Integer

'deklaracja zmiennej p - podstawa wprowadzanej liczby, zmienna typu liczba całkowita'

2 Dim b As String

'zmienna b - podstawa liczby przeliczanej, zmienna typu łańcuch znaków(tekst)'

3 Dim przel As Integer

'zmienna przel - podstawa konwertowanej liczby'

4 Dim kod As Integer

'zmienna kod - zwraca wartość kodu ASCII podanego znaku przy pomocy funkcji Asc()'

5 Dim znak As String

'zmienna znak - zawiera zwrócony przy pomocy instrukcji Mid$() fragment tekstu (wprowadzonej liczby) '

6 Dim k As Integer

'zmienna k - podaje przy pomocy instrukcji Len() ilość znaków zadanego tekstu '

7 Dim i As Integer

'zmienna i - pozycja znaku w zamienianej na tekst liczbie, użyta w pętli for'

8 Dim cyfra As Integer

'zmienna cyfra - kod ASCII danej cyfry po rozróżnieniu znaków'

9 Dim liczb10poj As Integer

'zmienna liczb10poj -wartość dziesiętna pojedynczej cyfry w liczbie dziesiętnej'

10 Dim reszta As Integer

'zmienna reszta - zwraca resztę z dzielenia liczby dziesiętnej przez podstawę liczby konwertowanej (przy pomocy instrukcji Mod)'

11 Dim calkowita As Integer

'zmienna całkowita - zwraca wartość całkowitą z dzielenia liczby dziesiętnej przez podstawę liczby konwertowanej (przy pomocy instrukcji Fix()'

12 Dim As Integer wynik_dzies=0

'zmienna a - podaje przy pomocy instrukcji Len() ilość znaków zmiennej u zmienna wynik_dzies - ustawiona na wartość początkową równą zero, zawiera wartość liczby przeliczanej na system dziesiętny'

13 Dim u As String

'zmienna u - zawiera w postaci tekstu cyfry przekonwertowanej liczby'

14 Dim koncowy_wynik As String

'zmienna końcowy_wynik - ostateczny wynik konwersji liczb w postaci łańcucha znaków'

15 Dim znak_2 As String

'zmienna znak_2 - zawiera zwrócony przy pomocy instrukcji Chr$()znak tekstowy odpowiadający podanemu kodowi ASCII (dla 40 przekonwertowanej liczby)'

16 Input "Podaj podstawe liczby:",p

'wprowadzenie wartości zmiennej p'

17 Input "Podaj liczbe przeliczana:",b

'wprowadzenie wartości zmiennej b'

18 k=Len(b)

'wpisuje do zmiennej k ilość znaków wprowadzonej liczby'

19 For i=1 To k

'pętla for służąca do obliczania kodu ASCII pojedynczych znaków wprowadzonej liczby'

20 znak=Mid$(b,i,1)

'zwraca odpowiedni fragment wprowadzonej liczby'

21 kod=Asc(znak)

'zwraca wartość kodu ASCII zmiennej znak'

22 If kod>=Asc("0")And kod<=Asc("9") Then

'pętla if służąca do wyliczenia kodu ASCII z rozróżnieniem cyfr od 0 do 9 oraz liter od A do F dla systemów liczbowych o podstawie większej niż 10'

23 cyfra=kod-Asc("0")

'przyjmuje wartość dla cyfr od 0 do 9'

24 ElseIf kod<=Asc("F")And kod>=Asc("A") Then

25 cyfra=kod-Asc("A")+10

'przyjmuje wartość dla liter od A do F'

26 ElseIf kod<=Asc("f")And kod>=Asc("a") Then

27cyfra=kod-Asc("a")+10

'umożliwia wpisywanie również małych liter od a do f'

28 End If

'zakończenie pętli if'

29 If cyfra>=p Then

'porównuje zmienną cyfra ze zmienną p (podstawę wprowadzonej liczby) gdy wprowadzona liczba jest nieprawidłowa kończy program'

30 Print "Podana liczba jest nieprawidlowa

'wypisuje informację na ekranie'

31 End

'kończy program'

32 End If

'zakończenie pętli if'

33 liczb10poj=cyfra*(p^(k-i))

'oblicza wartość pojedynczej liczby dziesiętnej

k- ilość cyfr w liczbie i - numer pozycja danej cyfry'

34 wynik_dzies +=liczb10poj

'wprowadzona liczba przeliczona na system dziesiętny'

35 Next i

36 Print "Liczba dziesietnie wynosi:";wynik_dzies

'wypisuje na ekranie wynik dziesiętnie'

37 Input "Podaj podstawe konwertowanej liczby:",przel

'wprowadzenie wartości zmiennej przel'

38 Do

'pętla do - przeliczanie liczby z systemu dziesiętnego na dowolny od 2 do 16'

39 reszta=wynik_dzies Mod przel

'zwraca resztę z dzielenia'

40calkowita=Fix(wynik_dzies/przel

'zwraca liczbę całkowitą z dzielenia'

41 If reszta >= 0 And reszta <= 9 Then

'pętla if do wyznaczenia zmiennej znak_2 '

42znak_2=Chr$(reszta+Asc("0"))

'gdy cyfra w liczbie zawiera się od 0 do 9'

43 ElseIf reszta >= 10 And reszta <= 15 Then

44 znak_2=Chr$(reszta+Asc("A")-10)

'gdy cyfra w liczbie zawiera się od 10 do 15'

45 End If

46 Print"";wynik_dzies;"/";przel;"=";calkowita;" r";reszta

'pokazuje na ekranie algorytm konwersji liczby

z systemu dziesiętnego na dwójkowy'

47 u=u+Str(znak_2)

48 wynik_dzies=calkowita

'kolejna dzielona liczba jest równa zwróconej liczbie całkowitej z poprzedniego dzielenia'

49 Loop Until calkowita=0

'wykonuje w pętli do momentu, gdy zmienna calkowita=0'

50 a=Len(u)

'wpisuje do zmiennej a ilość znaków zmiennej tekstowej u'

51 Do

52 If a=0 Then

'pętla do służąca do wyświetlenia na ekranie końcowego wyniku'

53 Print " ";b;"(";p;" )";"=";koncowy_wynik;"(";przel;" )"

'wyświetla na ekranie końcowy wynik konwersji'

54 Exit Do

'kończy pętlę do'

55 Else

56koncowy_wynik=koncowy_wynik+Mid$ (u,a,1)

'zmienna tekstowa tworząca wynik w postaci łańcucha znaków'

57 a=a-1

'odejmuje od zmiennej a do momentu, gdy a=0'

58 End If

59 Loop

60 Print "Nacisnij dowolny klawisz aby wyjsc z programu..."

'program zatrzymuje się przed zakończeniem i czeka na naciśnięcie dowolnego klawisza'

61 Do While Len(inkey)=0

62 Sleep 50

63 Loop

Wnioski: W ćwiczeniu uzyskaliśmy w program służący do przeliczania liczby pomiędzy dwoma dowolnymi systemami liczbowymi.

Program zawiera podstawowe wymagania, takie jak:

Do realizacji wykorzystaliśmy podstawowe instrukcje arytmetyczne: MOD, FIX, pętle, warunki, itp. bez wykorzystania gotowych funkcji bibliotecznych wykonujących przeliczenia pomiędzy systemami liczbowymi.

Podsumowując uzyskaliśmy prosty program konwertujący liczby, na podstawie którego zostały poznane podstawy języka Basic.



Wyszukiwarka

Podobne podstrony:
A-03 Komparator, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, semestr V (moduł C), Pod
2Filtry analogowe, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, semestr V (moduł C), T
sumator szeregowy projekt, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, semestr V (mod
EA5, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, semestr V (moduł C), Elektromaszynow
kolokwium2-ts, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, Teoria i Przetwarzanie Syg
sprawko kompensacja, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, semestr V (moduł C),
Licznniki, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, semestr V (moduł C), Podstawy
FiltryAdaptacyjne sprawozdanie, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, Teoria i
substraktor jakis ale spoko, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, semestr V (m
Liczniki1, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, semestr V (moduł C), Podstawy
filtracja adaptacyjna, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, Teoria i Przetwarz
3-fazowe silniki indukcyjne, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, semestr V (m
FIRy, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, Teoria i Przetwarzanie Sygnałów, Ko
projekty-2011-2012, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, semestr V (moduł C),
TC-S-04 Rejestry, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, semestr V (moduł C), Po
Sprawko PSL, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, semestr V (moduł C), Podstaw

więcej podobnych podstron