Wstęp

Transkrypt

Wstęp
WstĊp
Jednym z istotnych elementów kursu Technologii Informacyjnej są zagadnienia
związane z nauką podstaw algorytmiki. WyróĪnionym zadaniem jest teĪ „zapisywanie
algorytmów w postaci procedur, które moĪe wykonaü komputer - podstawowe
struktury jĊzyków opisu algorytmów”.
Rozpatrując ogólnie dostĊpne metody programowania, które moĪna wykorzystaü
miĊdzy innymi w kursie algorytmiki zwrócono uwagĊ na obecnoĞü wielu z nich
w systemach operacyjnych i popularnych aplikacjach. WyróĪniają siĊ wĞród nich
AppleScript w systemach MacOS, Visual Basic dla Aplikacji w aplikacjach pakietu
Microsoft
Office
(Windows
i MacOS)
oraz
implementowany
JavaScript
w przeglądarkach internetowych.
W rezultacie opracowano materiaáy metodyczne dostĊpne takĪe w formie serwisu
Internetowego (HTTP://ZDCH.AMU.EDU.PL/ALGORYTMY/) przeznaczone dla osób, które
na praktycznych przykáadach chcą nauczyü siĊ implementacji podstawowych
algorytmów oraz podstaw wizualizacji w systemie Visual Basic dla Aplikacji.
Zasadniczym
zaĞ
programowania
na
zadaniem
tych
praktycznych
materiaáów
przykáadach
jest
zadaĔ
przedstawienie
rozwaĪanych
reguá
w kursie
Technologii Informacyjnej.
Opracowany skrypt omawia przede wszystkim zasady implementacji algorytmów
w postaci programów w wybranym jĊzyku programowania oraz odpowiednie gotowe
ich przykáady. Istotna czĊĞü materiaáu omawia ogólne zagadnienia algorytmiki.
PoniewaĪ na rynku wydawniczym jest obecnych wiele podrĊczników w szerszym lub
wĊĪszym
ujĊciu
opisujących
algorytmikĊ,
postanowiono
w
tym
skrypcie
zaprezentowaü rozwiązania, które bĊdą siĊ skupiaáy bardziej na implementacji
algorytmów, czyli reprezentowaniu w danym jĊzyku programowania zaáoĪeĔ
matematycznych danego algorytmu i skutecznym skompilowaniu tak uzyskanego
1
kodu.
Zagadnienia
szczegóáowe
dotyczące
samego
algorytmu
opisane
są
w odpowiednio okrojonej wersji, ale niezbĊdnej dla poprawnego programowania.
Microsoft Visual Basic dla Aplikacji (VBA) jest jĊzykiem programowania
stosowanym do rozbudowy i sterowania pakietowymi aplikacjami biurowymi Microsoft
i ich integracji z dostĊpnymi danymi i systemami. VBA udostĊpnia szeroki zestaw
narzĊdzi programistycznych opartych na aplikacji Microsoft Visual Basic. Istota
stosowalnoĞci VBA opiera siĊ na zaáoĪeniu, Īe program ten umoĪliwia rozbudowĊ
dostĊpnych aplikacji za jego pomocą i Īe daje on wiĊksze moĪliwoĞci tworzenia
bardziej efektywnych aplikacji niĪ budowa narzĊdzi od podstaw.
W VBA zawarte są elementy zintegrowanego Ğrodowiska programistycznego
(IDE – ang. Integrated Development Environment) wykorzystujące skáadniki
analogiczne do tych z systemu Microsoft Visual Basic - Project Window,
Properties Window, Debugging, jak równieĪ Microsoft Forms umoĪliwiające áatwe
tworzenie interfejsu uĪytkownika. Zintegrowanie tych narzĊdzi w nadrzĊdnej aplikacji
znacznie
usprawnia
i przyspiesza
proces
tworzenie
programów
sterujących
aplikacjami.
KsiąĪka niniejsza przeznaczona jest do wspomagania zajĊü z Technologii
Informacyjnej i Informatyki w szkolnictwie wyĪszym ze szczególnym wyróĪnieniem
studiów chemicznych. Zawiera zbiór zadaĔ z podstawowym ich omówieniem.
Zakáada siĊ, Īe prowadzący zajĊcia przedstawiaü bĊdzie uzupeániające materiaáy
i informacje niezbĊdne do wáaĞciwego zrozumienia prezentowanych zagadnieĔ.
Czytelnicy, którzy poznawaü bĊdą zadania z tej ksiąĪki samodzielnie powinni
systematycznie uzupeániaü z innych Ĩródeá swą wiedzĊ teoretyczną dotyczącą
zwáaszcza
programowania
strukturalnego
i
zorientowanego
obiektowo,
programowania w Visual Basic oraz zastosowaĔ Visual Basic dla Aplikacji.
KsiąĪka ta stanowi praktyczny wstĊp do programowania w jednym z prostszych
jĊzyków programowania i zastosowania go w podstawowej wizualizacji chemicznej.
Autorzy
2
I. Przygotowanie systemu
Visual Basic dla Aplikacji
PrzystĊpując do realizacji zadaĔ w niniejszym zbiorze tworzyü bĊdziemy projekty
w programie Microsoft Word (lub Microsoft Excel). Moduá Macro tego programu
umoĪliwi nam wprowadzenie kodu programu, zweryfikowanie jego poprawnoĞci,
skompilowanie go i uruchomienie.
Zadania programistyczne opisane w skrypcie zostaáy przygotowane do realizacji
na komputerach wyposaĪonych w program Microsoft Word, Microsoft Excel lub
Microsoft PowerPoint (czyli komputerach PC (tzw. Wintel) z systemem Windows
lub komputerach Macintosh z systemem Mac OS 9 lub Mac OS X). Wykonywanie
üwiczeĔ wymaga zainstalowania moduáu VBA.
Przy uĪyciu instalacji standardowej pakietu Microsoft Office instalowany jest
moduá „Visual Basic dla Aplikacji“ (Microsoft stosuje nazwĊ Visual Basic dla
Aplikacji nawet w polskiej wersji swego pakietu i odpowiednich materiaáach
informacyjnych, wielu autorów stosuje jednak spolszczoną nieznacznie wersjĊ tej
nazwy Visual Basic dla Aplikacji i taką teĪ przyjĊliĞmy do stosowania w niniejszej
ksiąĪce). Do grupy funkcji instalowanych domyĞlnie przy pierwszym uĪyciu z zakresu
przydatnego w naszym kontekĞcie naleĪy „Pomoc dla jĊzyka Visual Basic dla
Aplikacji“, jednak jest to pomoc wyáącznie w jĊzyku angielskim, stąd jej zastosowanie
moĪe byü dla wielu czytelników ograniczone.
Gdyby konieczne byáo zainstalowanie funkcji „Pomoc dla jĊzyka Visual Basic dla
Aplikacji“ naleĪy w panelu sterowania kliknij dwukrotnie ikonĊ Dodaj/UsuĔ
programy, a nastĊpnie na karcie Instalowanie/Odinstalowanie kliknąü pozycjĊ
Microsoft Office, a nastĊpnie kliknąü przycisk Dodaj/UsuĔ lub ZmieĔ. W kolejnym
naleĪy kliknąü Dodaj lub usuĔ funkcje, kliknąü przycisk Dalej, a nastĊpnie rozwinąü
na liĞcie funkcji pozycjĊ WspóáuĪytkowane funkcji pakietu Office. Rozwinąü
3
pozycjĊ Visual Basic dla Aplikacji, a nastĊpnie kliknąü ikonĊ obok pozycji Pomoc
programu Visual Basic, aby wyĞwietliü opcje instalacyjne. Na koniec kliknąü naleĪy
polecenie Uruchom z mojego komputera lub Uruchom z sieci, a nastĊponie
kliknąü przycisk Aktualizuj.
Uruchommy program Microsoft Word. Po uruchomieniu program przedstawia na
ekranie okno dokumentu. W tym dokumencie prezentowane bĊdą wyniki dziaáania
programów lecz sam program wpisaü bĊdzie trzeba w oknie edytora Makro. NaleĪy
wybraü opcjĊ NarzĊdzia/Makro/Makra... (Tools/Macro/Macros...) .
Przedstawione zostanie okno wyboru
lub definicji pliku makroinstrukcji. Wpisaü
naleĪy nazwĊ procedury (np. "Zadanie_1" uwaga, nie naleĪy uĪywaü spacji w nazwie
zamiast tego zaĞ kreskĊ dolną). Uwaga.
WaĪne jest, aby tworzone w ramach tych
üwiczeĔ makra nie zapisywaü w szablonie
globalnym, który jest opcją domyĞlną, a
pliku dokumentu. Dlatego teĪ naleĪy wybraü opcjĊ Makra w: Dokument1
(dokument). Aby utworzyü makro z tymi cechami naleĪy wybraü przycisk [Utwórz]
([Create]).
Macro Editor wpisze
tylko
zasadnicze
procedury:
4
czĊĞci
Sub zadanie_1()
'
' Zadanie_1 Makro
' Makro utworzone 2004-08-17 przez Nikodem Miranowicz
'
End Sub
Zadanie 1. Program wypisujący na ekranie pojedyncze
zdanie.
Wypisywanie treĞci na ekranie jest kluczowym sposobem komunikacji komputera
z uĪytkownikiem. Zanim nauczymy siĊ wykorzystywaü moc obliczeniową komputera
naleĪy siĊ zapoznaü z podstawowymi metodami operowania tekstem.
Realizacja zadania 1
Moduá Visual Basic dla
Aplikacji przeznaczony jest do
realizowania
zawartoĞci
programu
zadaĔ
na
dokumentów
macierzystego
Sub zadanie1()
ActiveDocument.Content = _
"Program napisany w Visual Basic " & _
"dla Aplikacji pozostawia tekst w dokumencie"
End Sub
-
w naszym przypadku programu Word. Polecenie ActiveDocument.Content ma na
celu okreĞlenie zawartoĞci (Content) aktywnego dokumentu (ActiveDocument)
i w rezultacie spowoduje, Īe aktualny dokument programu Word zostanie wymazany
a w nim zostanie przedstawiona okreĞlona treĞü.
Uwaga. W przedstawionym przykáadzie zastosowano tzw. znak kontynuacji
(skáadający siĊ ze znaku spacji i znaku podkreĞlenia), który pozwala dáugie polecenia
pisaü w kilku wierszach.
Projekt zostanie skompilowany i uruchomiony po wybraniu opcji menu Run.
PoniewaĪ wynikiem dziaáania programu jest zmiana zawartoĞci dokumentu Word,
wiĊc aby zobaczyü ten wynik naleĪy przejĞü do podglądu tego dokumentu.
5
Zadanie 2. Program wypisujący na ekranie trzy kolejne
zdania.
Na program ten skáada siĊ kilka instrukcji wyprowadzania znaków. Instrukcje tych
programów wykonywane są sekwencyjnie tzn. kaĪda instrukcja jest realizowana
zgodnie z kolejnoĞcią wystĊpowania w programie (od strony lewej do prawej i z góry
w dóá).
Realizacja zadania 2
Sub zadanie2()
ActiveDocument.Content = ""
ActiveDocument.Content.InsertAfter Text:= _
"Jest taki dzieĔ w tygodniu ... Poniedziaáek" & vbLf
ActiveDocument.Content.InsertAfter Text:= _
"Jest taki dzieĔ w tygodniu ... Wtorek" & vbLf
ActiveDocument.Content.InsertAfter Text:= _
"Jest taki dzieĔ w tygodniu ... ĝroda" & vbLf
End Sub
Jak to juĪ wyĪej zaznaczono polecenie "ActiveDocument.Content =" okreĞla
zawartoĞü caáego dokumentu zmazuje wiĊc przy tym wszystko, co w nim byáo
dotychczas okreĞlone. Aby dodaü do dokumentu nowe treĞci, naleĪy wiĊc wybraü
polecenie "ActiveDocument.Content.InsertAfter Text:=" umieszczające tekst (Text)
przez wstawienie go na koĔcu (InsertAfter) aktualnej zawartoĞci (Content) aktywnego
dokumentu (ActiveDocument). Dodatkowo zaĞ naleĪy zastosowaü specjalny
okreĞlnik zakoĔczenia linii (LineFeed) - znacznik nowej linii w Visual Basic
przyjmujący postaü vbLf.
6
W
przykáadzie
tym
wyjaĞnienia
wymaga
stosowanie
znaków
równoĞci.
W pierwszej linii kodu zastosowano znak równoĞci jako operator przypisania
zawartoĞci aktywnego dokumentu przypisuje siĊ (lub podstawia siĊ pod niego)
okreĞlony za znakiem równoĞci tekst umieszczony w cudzysáowie. W kolejnej linii
wobec tego samego obiektu ActiveDocument.Content stosowana jest metoda
InsertAfter stosująca siĊ do jednego wybranego argumentu – Text. Konstrukcja
„Text:=“ jest tzw. nazywanym argumentem (ang. named argument) i uáatwia wybranie
argumentu dla metody InsertAfter.
7
Zadanie 3. Program wypisujący na ekranie siedem
kolejnych zdaĔ odnoszących siĊ do kolejnych dni tygodnia
z wydzieleniem pierwszej czĊĞci zdaĔ w postaci zmiennej
tekstowej.
Podstawowym sposobem optymalizacji programu jest wydzielanie z materiaáu
opisywanego przez program wartoĞci staáych i zmiennych.
Zmienną jest nazwane miejsce magazynowania danych mogące zawieraü dane,
które mogą byü modyfikowane podczas wykonywania programu. KaĪda zmienna ma
nazwĊ, która jednoznacznie identyfikuje zmienną w jej zakresie.
Staáą moĪna
zdefiniowaü podobnie z tą jednak zasadniczą róĪnicą, Īe staáe, zgodnie zresztą z ich
nazwą nie mogą byü modyfikowane podczas wykonywania programu.
W
przykáadzie
bĊdącym
rozwiniĊciem
zadaĔ
poprzednich
wydzielamy
z wypisywanych tekstów powtarzający siĊ element i wáączamy go do poleceĔ
wypisywania treĞci na ekranie w postaci symbolicznej. Symbolem tego fragmentu
tekstu bĊdzie "s1", lecz nazewnictwo zmiennych pozwala nam na wiĊkszą
kreatywnoĞü. Symbol – zmienną naleĪy wczeĞniej odpowiednio zadeklarowaü
i przypisaü jej wartoĞü tekstową, potem zaĞ w odpowiedni sposób dodaü do
wypisywania tekstów.
Przypisanie wartoĞci zmiennej dokonuje siĊ przez instrukcjĊ zawierającą nazwĊ
zmiennej, znak równoĞci, wartoĞü zmiennej:
s1 = "Jest taki dzieĔ w tygodniu..."
8
Realizacja zadania 3a
Sub zadanie3()
s1 = "Jest taki dzieĔ w tygodniu... "
ActiveDocument.Content = ""
ActiveDocument.Content.InsertAfter Text:=s1 & "Poniedziaáek" & vbLf
ActiveDocument.Content.InsertAfter Text:=s1 & "Wtorek" & vbLf
ActiveDocument.Content.InsertAfter Text:=s1 & "ĝroda" & vbLf
ActiveDocument.Content.InsertAfter Text:=s1 & "Czwartek" & vbLf
ActiveDocument.Content.InsertAfter Text:=s1 & "Piątek" & vbLf
ActiveDocument.Content.InsertAfter Text:=s1 & "Sobota" & vbLf
ActiveDocument.Content.InsertAfter Text:=s1 & "Niedziela" & vbLf
End Sub
9
Zadanie 3b. Program wypisujący na ekranie siedem
kolejnych zdaĔ odnoszących siĊ do kolejnych dni tygodnia
z wydzieleniem pierwszej czĊĞci zdaĔ w postaci zmiennej
tekstowej oraz alternatywną zmienną.
Realizacja zadania 3b
Sub zadanie3()
s1 = "Jest taki dzieĔ w tygodniu... "
s2 = "Mój ulubiony dzieĔ w tygodniu to ... "
ActiveDocument.Content = ""
ActiveDocument.Content.InsertAfter Text:=s1 & "Poniedziaáek" & vbLf
ActiveDocument.Content.InsertAfter Text:=s1 & "Wtorek" & vbLf
ActiveDocument.Content.InsertAfter Text:=s2 & "ĝroda" & vbLf
ActiveDocument.Content.InsertAfter Text:=s1 & "Czwartek" & vbLf
ActiveDocument.Content.InsertAfter Text:=s1 & "Piątek" & vbLf
ActiveDocument.Content.InsertAfter Text:=s1 & "Sobota" & vbLf
ActiveDocument.Content.InsertAfter Text:=s1 & "Niedziela" & vbLf
End Sub
10
Zadanie 4. Program wypisujący na ekranie po trzy zdania
odnoszące siĊ do kolejnych dni tygodnia z wydzieleniem
pierwszej czĊĞci zdaĔ w postaci zmiennej tekstowej oraz
wydzieleniem czĊĞci kodu dotyczącego wypisywania
w postaci procedury.
Fragment
kodu,
który
miaáby
siĊ
powtarzaü
wielokrotnie
w ukáadzie
sekwencyjnym, moĪna wydzieliü do osobnej grupy poleceĔ mającej postaü procedury
lub funkcji i odwoáywaü siĊ do niej w wybranych momentach. Funkcja róĪni siĊ od
procedury tym, Īe wyniki dziaáaĔ wykonanych przez funkcjĊ mogą byü zwracane do
bloku je wywoáującego przez nazwĊ funkcji zaĞ w procedurze przez parametry
procedury. W naszym przypadku nie potrzebujemy aby wyodrĊbniona w funkcji czy
procedurze czĊĞü programu zwracaáa jakiekolwiek dane dlatego zastosujemy
konstrukcjĊ procedury wywoáywanej poleceniem Call.
Realizacja zadania 4
Sub zadanie4()
ActiveDocument.Content = ""
Call Tydzien ("Poniedziaáek")
Call Tydzien ("Wtorek")
Call Tydzien ("ĝroda")
Call Tydzien ("Czwartek")
Call Tydzien ("Piątek")
Call Tydzien ("Sobota")
Call Tydzien ("Niedziela")
End Sub
Sub Tydzien(s)
s1 = "Jest taki dzieĔ w tygodniu... "
s3 = "Pierwsza litera nazwy tego dnia tygodnia to: "
ActiveDocument.Content.InsertAfter Text:=s1
ActiveDocument.Content.InsertAfter Text:=s & vbLf
ActiveDocument.Content.InsertAfter Text:=s3 & Mid(s, 1, 1) & vbLf
End Sub
11
Dodatkowym, nowym elementem w programie jest specyficzna konstrukcja
ostatniej linii programu. Zadaniem tej linii jest wypisanie, oprócz tekstu opisu,
pierwszej litery cytowanego sáowa. Sáowo to zawarte w zmiennej "s" jest traktowane
przez program jako áaĔcuch znaków. Przy takim traktowaniu tekstów przez jĊzyk
programowania áatwe jest wydzielanie fragmentów tekstu. Wyspecjalizowana funkcja
Visual Basic Mid(t,x,y) pozwala z áaĔcucha t wydzieliü y znaków zaczynając od znaku
x.
W tym miejscu warto wspomnieü o innych funkcjach tekstowych: Left(t,y)
i Right(t,y), które podobnie jak Mid wydzielają okreĞloną liczbĊ znaków odpowiednio
od lewej lub prawej strony danego áaĔcucha (w omawianym zadaniu proponowaną
funkcjĊ Mid(s,1,1) moĪna z tym samym rezultatem zastąpiü funkcją Left(s,1)); Trim(t),
LTrim(t) i RTrim(t) usuwających spacje wiodące odpowiednio z obu stron, lewej
strony lub prawej strony áaĔcucha znaków; String(t,x) i Space(x) tworzące áaĔcuch
skáadający siĊ ze wskazanej liczby okreĞlonych znaków lub spacji; UCase(t) i
LCase(t) zmieniający áaĔcuch znaków w majuskuáĊ lub minuskuáĊ; InStr(x,t1,t2,v)
wyszukujący okreĞlony áaĔcuch znaków w innym áaĔcuchu znaków; StrComp(t1,t2,v)
porównujący dwa áaĔcuchy znaków; Len(t) podający dáugoĞü áaĔcucha znaków.
12
Zadanie 5. Program wypisujący teksty przez procedurĊ
tydzien() zgodnie z ogólnym opisem jak w zadaniu 4, lecz
wypisujący w tej samej procedurze ocenĊ tylko jednego
dnia.
Istotnym elementem programów komputerowych jest warunkowoĞü okreĞlonych
dziaáaĔ. WarunkowoĞü ta okreĞla, Īe pewne instrukcje wykonywane są tylko
w odpowiednio przewidzianych sytuacjach. Potocznie warunek okreĞla sáowo "jeĞli",
które przeniesione na instrukcje jĊzyków programowania przybiera formĊ "if".
Instrukcje warunkowe umoĪliwiają - zgodnie z nazwą - warunkowe wykonywanie
instrukcji - w zaleĪnoĞci od skutecznoĞci wypeánienia zadanego warunku. Na
przykáad warunkiem moĪe byü "JeĞli [omawiany dzieĔ] jest Ğrodą to..." . Warunek taki
wyraĪony w programie brzmi: if s="ĝroda". Po instrukcji warunkowej umieszczona
powinna byü instrukcja, która bĊdzie wykonywana w przypadku speánienia zadanego
warunku.
13
Realizacja zadania 5
Sub zadanie5()
ActiveDocument.Content = ""
Call Tydzien ("Poniedziaáek")
Call Tydzien ("Wtorek")
Call Tydzien ("ĝroda")
Call Tydzien ("Czwartek")
Call Tydzien ("Piątek")
Call Tydzien ("Sobota")
Call Tydzien ("Niedziela")
End Sub
Sub Tydzien(s)
s1 = "Jest taki dzieĔ w tygodniu... "
s2 = "To mój ulubiony dzieĔ w tygodniu "
s3 = "Pierwsza litera nazwy tego dnia tygodnia to: "
ActiveDocument.Content.InsertAfter Text:=s1
ActiveDocument.Content.InsertAfter Text:=s & vbLf
ActiveDocument.Content.InsertAfter Text:=s3 & Mid(s, 1, 1) & vbLf
If s = "ĝroda" Then
ActiveDocument.Content.InsertAfter Text:=s2 & vbLf
End If
End Sub
14
Zadanie 6. Program zgodny z ogólnym opisem jak
w zadaniu 5 wypisujący teksty przez procedurĊ tydzien()
przekazując do niej zmienną liczbową.
Kolejna
modyfikacja
uwzglĊdnia
skrócenie
przekazywanie
przez
nazwy
lecz
dnia,
w tygodniu.
MoĪliwe
programu
poleceĔ
przez
procedurĊ
nie
jego
kolejnoĞci
jest
to
przez
zastosowanie tablicy zmiennych, w której
kolejne wartoĞci zmiennej zapisane są
w kolejnych pozycjach tablicy.
Definicja
tablicy
zmiennych
jest
rozwiniĊciem definicji zmiennej prostej.
Sáowo kluczowe Dim okreĞla powstanie
zmiennej
tablicowej
(konieczne
jest
okreĞlenie rozmiarów tablicy). Deklaracja
tablicy zmiennych uzupeániona jest przez
deklaracjĊ typu zmiennych stosowanych
w
tablicy.
Sformuáowanie
As
String
deklaruje stosowanie w tablicy zmiennych
typu tekstowego. Typ danych w Visual
Basic moĪe, ale nie musi byü okreĞlony.
JeĞli zostanie uĪyta zmienna, która nie
byáa zadeklarowana w sposób jawny (tak
jak w tym zadaniu), w jĊzyku Visual
Realizacja zadania 6
Sub zadanie6()
ActiveDocument.Content = ""
Call Tydzien (1)
Call Tydzien (2)
Call Tydzien (3)
Call Tydzien (4)
Call Tydzien (5)
Call Tydzien (6)
Call Tydzien (7)
End Sub
Sub Tydzien(m)
Dim st(7) As String
st(1) = "Poniedziaáek"
st(2) = "Wtorek"
st(3) = "ĝroda"
st(4) = "Czwartek"
st(5) = "Piątek"
st(6) = "Sobota"
st(7) = "Niedziela"
s1 = "Jest taki dzieĔ w tygodniu..."
s2 = "To mój ulubiony dzieĔ w tygodniu"
s3 = "Pierwsza litera nazwy tego dnia
tygodnia to:"
ActiveDocument.Content.InsertAfter Text:= _
s1
ActiveDocument.Content.InsertAfter Text:= _
st(m) & vbLf
ActiveDocument.Content.InsertAfter Text:= _
s3 & Mid(st(m), 1, 1) & vbLf
If m = 3 Then
ActiveDocument.Content.InsertAfter Text:= _
s2 & vbLf
End If
End Sub
Basic jest ona deklarowana niejawnie
15
(tak jak w zadaniach poprzednich) jako zmienna typu Variant, co nie zawsze jest
korzystne.
Warto pamiĊtaü, Īe moĪliwe jest deklarowanie zmiennych liczbowych o róĪnym
zakresie i dokáadnoĞci (Integer, Long Integer, Single, Double, Decimal, Byte)
zmiennych tekstowych (Fixed String, Variable String) i innych zmiennych
specyficznych (Currency, Date, Object, Variant).
Odwoáywanie siĊ do zmiennych zawartych w tablicy wymaga podania pozycji
danej zmiennej w tablicy.
Odwoáywanie siĊ do procedury Tydzien() przez parametr liczbowy wymaga
zmiany deklaracji procedury. W konsekwencji teĪ musi ulec zmianie ukáad instrukcji
warunkowej.
16
Zadanie 7. Program wypisujący w pĊtli odpowiednie teksty
odnoszące siĊ do kolejnych dni tygodnia.
Zestaw poleceĔ z gáównej czĊĞci programu przekazujący do procedury Tydzien()
kolejne wartoĞci liczbowe moĪe byü áatwo zoptymalizowany przez umieszczenie
instrukcji wywoáywania procedury w pĊtli, gdzie zmieniana bĊdzie tylko wartoĞü
liczbowa parametru procedury.
Struktura pĊtli umoĪliwia wykonywanie ciągu instrukcji, aĪ do momentu zajĞcia
warunku zakoĔczenia pĊtli. W konstrukcji programistycznej przyjmuje ona formĊ
For n = 1 To 7 ... Next, którą potocznie moĪna opisaü nastĊpująco: "dla wartoĞci n
zmieniającej siĊ od jeden do siedem wykonaj ... nastĊpna wartoĞü n".
17
Realizacja zadania 7
Sub zadanie7()
ActiveDocument.Content = ""
For n = 1 To 7
Call Tydzien (n)
Next
End Sub
Sub Tydzien(m)
Dim st(7) As String
st(1) = "Poniedziaáek"
st(2) = "Wtorek"
st(3) = "ĝroda"
st(4) = "Czwartek"
st(5) = "Piątek"
st(6) = "Sobota"
st(7) = "Niedziela"
s1 = "Jest taki dzieĔ w tygodniu..."
s2 = "To mój ulubiony dzieĔ w tygodniu"
s3 = "Pierwsza litera nazwy tego dnia tygodnia to:"
ActiveDocument.Content.InsertAfter Text:=s1
ActiveDocument.Content.InsertAfter Text:=st(m) & vbLf
ActiveDocument.Content.InsertAfter Text:=s3 & Mid(st(m), 1, 1) & vbLf
If m = 3 Then
ActiveDocument.Content.InsertAfter Text:=s2 & vbLf
End If
End Sub
18
Zadanie 8. Program wypisujący w pĊtli odpowiednie teksty
odnoszące siĊ do kolejnych dni tygodnia i warunkowo
dodający dla kaĪdego inny komentarz.
Inną formą potocznego okreĞlania warunku jest "zaleĪnie od przypadku...".
Ta warunkowa konstrukcja o innej charakterystyce niĪ warunek "jeĞli", daje
moĪliwoĞü uwzglĊdnienia wiĊkszej róĪnorodnoĞci sytuacji warunkowych w prostszej
konstrukcji programistycznej.
Realizacja zadania 8
Instrukcja warunkowa zastosowana w tym zadaniu ma ogólną postaü „Select
case (zmienna)”, po czym nastĊpuje "case wartoĞü pierwszego przypadku:”, dla
którego - jeĞli speániony - instrukcje opisane są dalej, aĪ do wystąpienia kolejnej
instrukcji "case", lub instrukcji "end select", koĔczącej instrukcjĊ warunkową dla
danego przypadku. Dalej moĪe nastąpiü opisu kolejnego przypadku, na koĔcu zaĞ
opisywania wszystkich przypadków podaü naleĪy instrukcjĊ "end select".
W
zadaniu
tym
zastosowano
ActiveDocument.Content.InsertParagraphAfter,
równieĪ
która
nową
formą
i
instrukcjĊ
-
funkcjonalnoĞcią
przypomina stosowaną juĪ instrukcjĊ ActiveDocument.Content.InsertAfter i jak
moĪna siĊ domyĞliü jest zastĊpnikiem instrukcji ActiveDocument.Content.InsertAfter
Text:= vbLf.
19
Sub zadanie8()
ActiveDocument.Content = ""
For n = 1 To 7
Call Tydzien (n)
Next
End Sub
Sub Tydzien(m)
Dim st(7) As String
st(1) = "Poniedziaáek"
st(2) = "Wtorek"
st(3) = "ĝroda"
st(4) = "Czwartek"
st(5) = "Piątek"
st(6) = "Sobota"
st(7) = "Niedziela"
s1 = "Jest taki dzieĔ w tygodniu..."
s2 = "To mój ulubiony dzieĔ w tygodniu"
s3 = "Pierwsza litera nazwy tego dnia tygodnia to:"
ActiveDocument.Content.InsertAfter Text:=s1
ActiveDocument.Content.InsertAfter Text:=st(m) & vbLf
ActiveDocument.Content.InsertAfter Text:=s3 & Mid(st(m), 1, 1) & vbLf
If m = 3 Then
ActiveDocument.Content.InsertAfter Text:=s2 & vbLf
End If
Select Case m
Case 1:
ActiveDocument.Content.InsertAfter Text:= _
("- Czy naprawdĊ nikt nie lubi Poniedziaáków?")
Case 2:
ActiveDocument.Content.InsertAfter Text:=("- Wtorek jest wtórny do Poniedziaáku.")
Case 3:
ActiveDocument.Content.InsertAfter Text:=("-ĝroda jest ĝrod...kiem tygodnia.")
Case 4:
ActiveDocument.Content.InsertAfter Text:=("- Czwartek jest czwarty.")
Case 5:
ActiveDocument.Content.InsertAfter Text:=("- No i oczywiĞcie Piątek piąty.")
Case 6:
ActiveDocument.Content.InsertAfter Text:=("- W SobotĊ zaczyna siĊ swoboda.")
Case 7:
ActiveDocument.Content.InsertAfter Text:= _
("- Niedziela to zapowiedĨ nowego tygodnia.")
End Select
ActiveDocument.Content.InsertParagraphAfter
End Sub
20
Zadanie uzupeániające 8a:
Na podobieĔstwo zadania 8 napisz program przedstawiający za pomocą tekstów
na ekranie kolejne planety ukáadu sáonecznego - ich nazwy, kolejnoĞü i wybrane
cechy charakterystyczne. Informacje zbierz z Internetu, np.:
x
HTTP://PORTALWIEDZY.ONET.PL/
x
lub HTTP://ENCYKLOPEDIA.WP.PL/
Zadanie uzupeániające 8b:
Na podobieĔstwo zadania 8 napisz program przedstawiający na ekranie, za
pomocą tekstów, kolejne miesiące roku - ich nazwy, kolejnoĞü i przysáowia na ich
temat.
21
Zadanie 9. Program wykonujący podstawowe operacje
matematyczne.
To
zadanie
i
zadania
dalsze
opisują
zasady
wykorzystanie
operacji
matematycznych.
Omawiane jĊzyki programowania potrafią realizowaü podstawowe dziaáania
matematyczne, co przedstawiono w zadaniu 9.
Realizacja zadania 9
Sub zadanie9()
x=3
s = "Wynik dziaáania (dla x=3): "
ActiveDocument.Content = ""
y=x+2
ActiveDocument.Content.InsertAfter Text:=s & " y=x+2 to " & y & vbLf
y=x-2
ActiveDocument.Content.InsertAfter Text:=s & " y=x-2 to " & y & vbLf
y=x*2
ActiveDocument.Content.InsertAfter Text:=s & " y=x*2 to " & y & vbLf
y=x/2
ActiveDocument.Content.InsertAfter Text:=s & " y=x/2 to " & y & vbLf
End Sub
Obliczenia matematyczne wykonywane mogą byü bezpoĞrednio na liczbach, lecz
takĪe i na zmiennych.
W powyĪszych przypadkach pod zdefiniowaną zmienną "y" podstawiana jest
wartoĞü zmiennej "x" poddana dodatkowej operacji matematycznej: dodawania,
odejmowania, mnoĪenia lub dzielenia.
22
Zadanie 10. Program wykonujący obliczenia matematyczne
z funkcjami.
Cenna jest teĪ moĪliwoĞü realizacji bardziej záoĪonych obliczeĔ matematycznych.
Instrukcje potĊgowania, pierwiastkowania, funkcje trygonometryczne są dostĊpne
w kaĪdym jĊzyku programowania.
Realizacja zadania 10
Wykorzystanie pĊtli programistycznej
Sub zadanie10()
x=3
s = "Wynik dziaáania (dla x=3): "
ActiveDocument.Content = ""
y = x^2
ActiveDocument.Content.InsertAfter Text:=s & " y=x^2 to " & y & vbLf
y = x^3
ActiveDocument.Content.InsertAfter Text:=s & " y=x^3 to " & y & vbLf
y = Sqr(x)
ActiveDocument.Content.InsertAfter Text:=s & " y=Sqr(x) to " & y & vbLf
y = x^0.5
ActiveDocument.Content.InsertAfter Text:=s & " y=x^0.5 to " & y & vbLf
y = Sin(x)
ActiveDocument.Content.InsertAfter Text:=s & " y=Sin(x) to " & y & vbLf
y = Cos(x)
ActiveDocument.Content.InsertAfter Text:=s & " y=Cos(x) to " & y & vbLf
End Sub
Konstrukcja pĊtli programistycznej omówiona przy okazji zadania 7. jest
szczególnie
uĪyteczna
przy
realizacji
obliczeĔ
matematycznych.
PoniĪej
przedstawione są dwie ogólne formy pĊtli: pĊtla typu "for" i pĊtla typu "do ... while".
KaĪdą z nich moĪna jednak konstruowaü na wiele sposobów.
23
Zadanie 11. Program obliczania silni z 10 w pĊtli "for"
z kresem ze wzglĊdu na zmienną x.
Zadanie obliczania silni jest dobrym przykáadem dla zastosowania pĊtli. Zmienna
stosowana do sterowania pĊtlą moĪe stanowiü wartoĞü skáadową obliczeĔ.
Realizacja zadania 11
Sub zadanie11()
'obliczanie silni z liczb w pĊtli for
y=1
ActiveDocument.Content = ""
For x = 1 To 10
y=y*x
ActiveDocument.Content.InsertAfter Text:="silnia z " & x & " = " & y & vbLf
Next x
End Sub
Program powyĪszy realizuje obliczenia zamkniĊte w pĊtli 10 razy.
24
Zadanie 12. Program obliczania silni w pĊtli "while ...
wend".
Inna forma pĊtli to pĊtla "while... wend" realizująca warunek opisany w sposób
potoczny nastĊpująco: "tak dáugo jak (speániany jest warunek) wykonuj".
Realizacja zadania 12
Sub zadanie12()
'obliczanie silni z liczb w pĊtli while
x=0
y=1
While x < 10
x=x+1
y=y*x
Wend
ActiveDocument.Content = "Wynik obliczeĔ silni z " & x & " = " & y
End Sub
25
Zadanie 13. Losowanie "rzut kostką"
Losowanie przez rzut kostką daje wynik pomiĊdzy 1 a 6. Realizacja takiego
losowania powinna siĊ opieraü na „czynniku losowym”. Czynnik taki symuluje funkcja
Rnd. Generuje ona wartoĞci rzeczywiste od 0 do 1 w sposób pseudolosowy
(uruchomienie tej funkcji daje przypadkowe wartoĞci lecz porównanie ich z takimi
samymi wartoĞciami losowymi na innym komputerze wykazuje „zadziwiające
podobieĔstwo” – aby zerwaü ten „przypadkowy” związek naleĪy uruchomiü
jednokrotnie funkcjĊ Randomize).
Wygenerowane wartoĞci (od 0 do 1) naleĪy
sprowadziü do oczekiwanych wartoĞci (od 1 to 6) poprzez przemnoĪenie wyniku
przez 6 i zwiĊkszenie go o 1. W ten sposób wygenerowane bĊdą wartoĞci
rzeczywiste od 1 do 6. Konieczne jest jeszcze sprowadzenie wygenerowanych
wartoĞci rzeczywistych do wartoĞci caákowitych – dokonaü tego moĪna za pomocą
funkcji INT ucinającej czĊĞü rzeczywistą i pozostawiającej wartoĞü caákowitą.
Realizacja zadania 13
Sub zadanie13()
' losowanie "rzut kostką"
ActiveDocument.Content = ""
Randomize
For x = 1 To 10
y = Int(Rnd * 6 + 1)
If y = 6 Then ActiveDocument.Content.InsertAfter Text:="Brawo! "
ActiveDocument.Content.InsertAfter Text:=y & vbLf
Next x
End Sub
26
Zadanie 14. Wypisywanie znaków z tablicy znaków
Zamiany wartoĞci liczbowych generowanych np. w pĊtli na znaki tekstu moĪna
dokonywaü przez konstrukcje warunkowa If lub Case. Jednak w okreĞlonych
sytuacjach moĪna skorzystaü z tablicy znaków, która uporządkowuje wszystkie znaki
alfanumeryczne wáaĞnie w konstrukcjĊ tablicy znaków przyporządkowując im kolejne
liczby. Przez funkcjĊ Chr moĪna przywoáaü odpowiedni znak podając jego pozycjĊ.
Znaki alfabetu w minuskule znajdują siĊ na pozycjach od 97 do 122 a w majuskule
od 65 do 90.
Realizacja zadania 14
Sub zadanie14()
'wypisywanie znaków z tablicy
ActiveDocument.Content=""
For x = 97 To 122
ActiveDocument.Content.InsertAfter text:= Chr(x)
Next x
End Sub
Zadania powyĪsze, oczywiĞcie nie wyczerpują opisu moĪliwoĞci jĊzyka
programowania Visual Basic, a stanowią tylko wprowadzenie do jego skáadni.
EfektywnoĞü programów w najwyĪszej mierze zaleĪy od wáaĞciwego algorytmu
dziaáaĔ stosowanego przez programistĊ. Stąd teĪ dalszym etapem poznawania
wybranego jĊzyka programowania powinno byü poznanie podstaw algorytmiki
w odpowiednich
przykáadach.
Aby
natomiast
tworzyü
uĪyteczne
programy
w Ğrodowisku Windows czy Mac OS X (jak i innych wspóáczesnych systemach
komputerowych), konieczne jest dokonanie waĪnego kroku w poznawaniu zasad
programowania i wkroczenie na terytorium programowania obiektowego.
27
28
II. Algorytmy - znajdowanie elementów
Znajdowanie w danym zbiorze elementów o okreĞlonych wáaĞciwoĞciach polega
na lokalizowaniu miejsca danego elementu w zbiorze (czyli inaczej stwierdzeniu,
w jakim miejscu zbioru znajduje siĊ okreĞlony element np. litera "A", liczba "12",
najwiĊksza liczba w tym zbiorze itp). WáaĞciwoĞci poszukiwanych elementów dotyczą
wartoĞci znaku traktowanej indywidualnie, jak i w odniesieniu do innych elementów
(jak na przykáad w kontekĞcie "mniejszy", "wiĊkszy" itp.). Omawiane w tym dziale
bĊdą iteracyjne i rekurencyjne algorytmy "wyszukiwania liniowego" lub inaczej
"wyszukiwania sekwencyjnego".
O iteracji i rekurencji nie bĊdziemy tu wiele pisaü. Proponujemy odwoáaü siĊ do
odpowiednich pozycji literaturowych1. Jedyne, co przypomnimy to odpowiednie
definicje:
x
"Iteracja, metoda matematyczna polegająca na wielokrotnym kolejnym zastosowaniu
tego samego algorytmu postĊpowania, przy czym wynik i-tej operacji stanowi dane
wejĞciowe dla kolejnej, (i+1)-szej operacji." (Sáownik jĊzyka polskiego PWN)
x
"Rekurencja, rekursja (angielskie recursion), cecha algorytmu, polegająca na tym, Īe
w którymĞ kroku algorytmu nastĊpuje odwoáanie do caáego algorytmu." (Sáownik jĊzyka
polskiego PWN)
x
Wyszukiwanie liniowe - "Prosty (...) algorytm wyszukiwania, operujący poprzez
sekwencyjne badanie kaĪdego elementu w liĞcie, dopóki element docelowy nie zostanie
znaleziony, lub ostatni element zostanie caákowicie przeanalizowany ." (Sáownik
komputerowy, Microsoft Press, PLJ, Warszawa 2000)
1
Banachowski L., Diks K., Rytter W., Algorytmy i struktury danych, WNT, Warszawa 2003; Sysáo M.,
Algorytmy, WSiP, Warszawa 1997; Wirth N., Algorytmy + struktury danych = programy, WNT ,
Warszawa 2002; Wróblewski P., Algorytmy, struktury danych i techniki programowania, Helion,
Warszawa 2001; i inne
29
Zadanie 15. Znajdowanie okreĞlonego znaku w áaĔcuchu
Jako pierwsze üwiczenie z tego dziaáu wybierzmy proste zadanie, które pozwoli
nam w áatwy sposób przejĞü do zadaĔ dotyczących algorytmów. W zasadzie zadanie
niniejsze wymaga uáoĪenia pewnego algorytmu, lecz jest to algorytm prosty, a
w wiĊkszoĞci wspóáczesnych jĊzyków programowania znaleĨü moĪemy kilka innych,
bardziej bezpoĞrednich rozwiązaĔ tego zadania. Oto zadanie: "Przygotowaü program
w wybranym jĊzyku programowania realizujący w sposób algorytmiczny znajdowanie
danego znaku w danym áaĔcuchu znaków". (PoniewaĪ w dalszej czĊĞci materiaáu
üwiczenia bĊdą zawsze dotyczyáy "przygotowania odpowiedniego programu
w wybranym jĊzyku programowania realizujących w sposób algorytmiczny okreĞlone
zadania", skrócimy umownie treĞü zadania do postaci: "ZnaleĨü dany znak w danym
áaĔcuchu znaków".)
Innymi sáowy nasze zadanie to znaleĨü literĊ w sáowie, bądĨ w zestawie sáów.
Zadanie wydaje siĊ proste i takim jest rzeczywiĞcie, choü nie uchroni nas to od
uáoĪenia odpowiedniego algorytmu dziaáaĔ. PoniewaĪ nie moĪna oczekiwaü, iĪ "dany
áaĔcuch znaków" bĊdzie w okreĞlony sposób uporządkowany, dlatego realizacja
zadania bĊdzie wymagaáa spojrzenia na kaĪdy kolejny znak w áaĔcuchu i porównania
go ze wzorcem - "danym znakiem".
x
Algorytm"1. algorytm m IV, D. -u, Ms. ~mie; lm M. –y 1. inform. - dokáadny przepis
wykonania w okreĞlonym porządku skoĔczonej liczby operacji, pozwalający na
rozwiązanie kaĪdego zadania danego typu 2. mat. reguáa przeksztaácania wyraĪeĔ
matematycznych przez powtarzanie tych samych dziaáaĔ na kolejno otrzymywanych
wynikach dziaáaĔ poprzednich (Sáownik JĊzyka Polskiego PWN); Ğrdwác. z ar.". sáowo
"algorytm" wywodzi siĊ od nazwiska matematyka arabskiego z IX w., Al-Chuwarizmiego.
x
àaĔcuch, "struktura danych skáadająca siĊ z sekwencji znaków zwykle reprezentujących
czytelny dla czáowieka tekst." (Sáownik komputerowy, Microsoft Press, PLJ, Warszawa
2000)
30
Realizacja zadania 15
Po uruchomieniu moduáu Makro programu Word i utworzeniu odpowiedniego
projektu zadania moĪna wpisywaü treĞü programu. Konieczne jest zachowanie linii
definiujących procedurĊ i ją zamykających:
Sub zadanie15()
End Sub
PomiĊdzy powyĪszymi oznaczeniami wprowadzimy zasadniczą czĊĞü kodu
reprezentującego algorytm.
Zmienne "s1", "s2" (niezbĊdne w naszym programie bowiem reprezentujące
odpowiednio dany znak do znalezienia dany áaĔcuch znaków, wĞród których
bĊdziemy poszukiwaü) naleĪy odpowiednio w programie zdefiniowaü. Stąd na
początku naszego kodu znaleĨü siĊ powinny dwie nastĊpujące linie:
s1="s"
s2="abecadáo z pieca spadáo"
Zasadnicza czĊĞü programu oparta jest na pĊtli. PĊtla ta jest niezbĊdna, aby móc
wybieraü kolejne znaki z áaĔcucha i poddawaü je porównaniu. PĊtla ta powinna wiĊc
obejmowaü pozycje áaĔcucha od pierwszej do ostatniej. Pierwsza pozycja áaĔcucha
jest oznaczona wartoĞcią "1", ostatnia zaĞ moĪe byü okreĞlona przez polecenie
"Len(s2)", które podaje dáugoĞü áaĔcucha znaków "s2". PĊtla tego programu powinna
mieü wiĊc postaü: For x = 1 To Len(s2) ... Next x
Teraz, gdy potrafimy juĪ przejrzeü caáoĞü áaĔcucha znaków spróbujmy
weryfikowaü zgodnoĞü znalezionego tam znaku ze znakiem poszukiwanym. Znak
z danej pozycji "x" bĊdzie przedstawiany przez funkcjĊ: Mid(s2, x, 1), zaĞ
porównanie, bĊdzie dokonane przez funkcjĊ: If Mid(s2, x, 1) = s1 Then.
Wynik wyszukiwaĔ kryjący siĊ pod zmienną "x" moĪna wypisaü w dokumencie
Word przez polecenie: ActiveDocument.Content = x
Znacznie
lepiej
bĊdzie
taka
odpowiedĨ
wyglądaáa
jeĞli
obudujemy
ją
odpowiednimi sáowami np. "znak 's' znaleziono na pozycji 18", co moĪe byü uzyskane
przez polecenie: ActiveDocument.Content ="znak '" & s1 & "' znaleziono na pozycji "
&x
31
Znaki "&" pozwalają áączyü teksty w cudzysáowach ze zmiennymi.
Oto caáoĞü programu:
Sub zadanie15()
s1 = "s"
'dany znak do znalezienia
s2 = "abecadáo z pieca spadáo"
'dany áaĔcuch
For x = 1 To Len(s2)
If Mid(s2, x, 1) = s1 Then ActiveDocument.Content = _
" znak '" & s1 & "' znaleziono na pozycji " & x
Next x
End Sub
Program
po
wpisaniu
jest
gotowy
do
uruchomienia.
Projekt
zostanie
skompilowany i uruchomiony po wybraniu opcji Run/RunSub/UserForm lub jej
odpowiednika w postaci odpowiedniej ikony. Wynik dziaáania programu widoczny
bĊdzie w dokumencie programu Word. Aby go zobaczyü przeáącz siĊ do oglądu
dokumentu Word.
32

Podobne dokumenty