• Nie Znaleziono Wyników

Realizacja zadania 1

N/A
N/A
Protected

Academic year: 2021

Share "Realizacja zadania 1"

Copied!
32
0
0

Pełen tekst

(1)

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 JavaScript implementowany 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Ğ zadaniem tych materiaáów jest przedstawienie reguá programowania na praktycznych przykáadach zadaĔ rozwaĪanych 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

(2)

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

(3)

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ąü

(4)

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 czĊĞci procedury:

Sub zadanie_1() '

' Zadanie_1 Makro

' Makro utworzone 2004-08-17 przez Nikodem Miranowicz '

End Sub

(5)

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 zadaĔ na zawartoĞci dokumentów programu macierzystego -

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.

Sub zadanie1()

ActiveDocument.Content = _

"Program napisany w Visual Basic " & _

"dla Aplikacji pozostawia tekst w dokumencie"

End Sub

(6)

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

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.

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

(7)

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.

(8)

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..."

(9)

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

(10)

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

(11)

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

(12)

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.

(13)

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.

(14)

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 Function

(15)

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 programu uwzglĊdnia skrócenie poleceĔ przez przekazywanie przez procedurĊ nie nazwy dnia, lecz jego kolejnoĞci w tygodniu. MoĪliwe 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 Basic jest ona deklarowana niejawnie

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

Realizacja zadania 6

(16)

(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.

(17)

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".

(18)

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

(19)

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 równieĪ nową instrukcjĊ - ActiveDocument.Content.InsertParagraphAfter, która formą i 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.

(20)

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

(21)

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.

(22)

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

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 Ğü zmiennej "x" poddana dodatkowej operacji matematycznej: dodawania, 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

(23)

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

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.

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

(24)

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

Program powyĪszy realizuje obliczenia zamkniĊte w pĊtli 10 razy.

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

(25)

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

(26)

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

(27)

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

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.

Sub zadanie14()

'wypisywanie znaków z tablicy ActiveDocument.Content=""

For x = 97 To 122

ActiveDocument.Content.InsertAfter text:= Chr(x) Next x

End Sub

(28)
(29)

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)

1Banachowski 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

(30)

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

(31)

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

(32)

Znaki "&" pozwalają áączyü teksty w cudzysáowach ze zmiennymi.

Oto caáoĞü programu:

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.

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

Cytaty

Powiązane dokumenty

• Zadania z cz¦±ci drugiej równie» nale»y przygotowa¢ wcze±niej i b¦d¡ one rozwi¡zywane

5) Napisać skrypt kto.sh, którego zadaniem jest wczytanie podanej przez użytkownika litery i wyświetlenie listy tych użytkowników zalogowanych na serwerze, których loginy

PK_W08, PK_U04, PK_U10, PK_K03 Wyjaśnienie pojęć (kultura medialna, mass-media, nowe media); charakterystyka polskiego rynku medialnego; dziennikarstwo jako zawód,

Jeżeli dowolny ideał pierścienia przemiennego A, który nie zawiera się w nilradykale zawiera element idempotentny, to nilradykał tego pierścienia pokrywa się z radykałem

Do zdań warunkowych zaliczamy również zdania ze spójnikami: dum (byleby), dum modo (byle tylko) oraz modo (jeśli tylko).. Stanowią one osobną kategorię zdań

Kurs skierowany jest do osób, które zaczynają swoją pracę zawodową w działach księgowości i chcą uzyskać niezbędną wiedzę która umożliwi im pracę na stanowisku

Juljusz Claude nie mógł już więcej pokazywać się w Poveglia, lecz widząc codziennie o jednej go­!. dzinie udającego się tamże doktora, postanowił

Forma zajęć: wykład, ćwiczenia oraz zajęcia kliniczne Choroby nowotworowe - wiadomości ogólne, definicja, etapy tworzenia się nowotworów, rodzaje mutacji, mechanizmy