12 Przedmiot: Jednostka prowadząca kierunek Kierunek Specjalność Tryb studiów INFORMATYKA Akademia Morska w Szczecinie Wydział Nawigacyjny NAWIGACJA TRANSPORT MORSKI Niestacjonarne Nauczyciel odpowiedzialny za przedmiot – dr Piotr Borkowski I. Cele kształcenia Celem kształcenia jest poszerzenie praktycznych umiejętności w zakresie wykorzystania narzędzi informatycznych, w szczególności oprogramowania w róŜnych dziedzinach działalności człowieka z uwzględnieniem gospodarki morskiej. II. Wymagania wstępne Zakres szkoły średniej. III. Znać Podstawowe pojęcia, przedmiot i metody informatyki; klasyfikację środków technicznych, budowę sprzętu komputerowego; rodzaje, zadania i moŜliwości wykorzystania sieci komputerowych; rodzaje, zadania i moŜliwości wykorzystania sieci komputerowych; rodzaje usług sieciowych; podział oprogramowania, przykłady oprogramowania systemowego i uŜytkowego; podstawy programowania komputerów; metody algorytmizacji; zastosowania informatyki w gospodarce morskiej. IV. Umieć Obsługiwać komputer i urządzenia peryferyjne; obsługiwać terminal lokalnej sieci komputerowej; stosować polecenia systemu operacyjnego; korzystać z usług sieci komputerowych; stosować podstawowe techniki algorytmiczne do precyzowania zapisu algorytmu; dobierać struktury danych w zaleŜności od rodzaju wielkości występujących w algorytmach i wykonywanych na nich operacjach; poprawnie dobierać i stosować podstawowe instrukcje programowania; korzystać z podstawowych moŜliwości zintegrowanego systemu programowania; czytać, analizować uruchamiać i testować programy; obsługiwać edytor tekstów oraz redagować przy jego pomocy tekst; obsługiwać arkusz kalkulacyjny oraz wykonywać przy jego pomocy obliczenia i prezentować wyniki w postaci graficznej; obsługiwać zintegrowany system baz danych; definiować oraz wykonywać podstawowe operacje na bazie danych, formułować zapytania, tworzyć formularze oraz raporty; wykorzystać poznane oprogramowanie do rozwiązania problemów; analizować i dobierać metody rozwiązania problemu; ocenić poprawność rozwiązania problemu. GRUPA TEMATYCZNA: ALGORYTMIKA I PROGRAMOWANIE TEMAT: Tablice. Wstęp 1. TABLICE Tablica to lista elementów tego samego typu o wspólnej nazwie. Tablice deklaruje się jak zwykłe zmienne uŜywając Dim. Przy deklaracji określa się ilość elementów tablicy. Dim A(10) As Integer - 10-cio elementowy ciąg liczb całkowitych Dim B(10,5) As Double - tablica o 10-ciu wierszach i 5-ciu kolumnach liczb rzeczywistych Dim X(2 to5,2000 to2004) As String - tablica o 4 wierszach i 5-ciu kolumnach napisów Do zmiennych tablicowych odwołujemy się za pomocą indeksów. Np.: i=3 i=3 A(5)=4 B(2,3)=1 L=A(i) L=A(i+1) i=3 L=A(i-1) piąty element wektora A przyjmie wartość 4 element z 2 wiersza i 3 kolumny przyjmie wartość 4 zmienna L przyjmie wartość trzeciego elementu wektora A zmienna L przyjmie wartość czwartego elementu wektora A ( element następny) zmienna L przyjmie wartość drugiego elementu wektora A ( element poprzedni) MoŜliwe jest odwoływanie do indeksu o numerze 0. Uwaga. Wartości indeksów dla zmiennych indeksowych muszą mieścić się w zadeklarowanym zakresie. Tablice stosowane są do gromadzenia duŜych bloków danych. UŜycie zmiennych tablicowych znacznie zmniejsza kodu programu. 2. TABLICE DYNAMICZNE Tablicę dynamiczną deklarujemy podobnie jak tablicę o określonej liczbie elementów. RóŜnica polega na nieokreśleniu rozmiaru tablicy. W momencie gdy wiemy jaki wymiar nam dopowiada wykonujemy polecenie ReDim, które określa rozmiary tablicy. Dim tab() As Integer n=inputbox("Podaj rozmiar wektora") Redim tab((n)) For i = 1 To n tab(t) = i Next i W programie moŜna wielokrotnie zmieniać rozmiar tablicy w zaleŜności od potrzeb, jednak wiąŜe się to z kaŜdorazowym resetowaniem przechowywanych w tablicy danych. Aby dane te zachować, naleŜy uŜyć opcji Preserve. ReDim Preserve tab(10) Przykład 1. Przykład 2 Dany jest n-elementowy ciąg liczb. Obliczyć wszystkie iloczyny dwóch kolejnych liczb Dany jest n-elementowy ciąg liczb. Określić wartość maksymalną. For i=1 To n a(i)=cells(i,1) Next i For I=1 to n-1 il=a(i)*a(i+1) cells(i,2)=il Next i For i=1 To n a(i)=cells(i,1) Next i max=a(1) For i=2 To n If a(i)>max Then Max:=a(i) End If Next i Msgbox(max) Przykład 3. Przykład 4. Dana jest tablica A(10,5) liczb. Obliczyć sumę wszystkich elementów tablicy Dana jest tablica A(10,5) liczb. Obliczyć sumy elementów w kaŜdym wierszu For i=1 To 10 For j=1 To 5 a(i,j)=cells(i,j) Next j Next i s=0 For i=1 To 10 For j=1 To 5 s=s+a(i,j) Next j Next I Msgbox(s) For i=1 To 10 For j=1 To 5 a(i,j)=cells(i,j) Next j Next i For i=1 To 10 s=0 For j=1 To 5 s=s+a(i,j) Next j Cells(I,6)=s Next i Przykład 5. Dana jest tablica A(10,5) liczb. Obliczyć sumy elementów w kaŜdej kolumnie For i=1 To 10 For j=1 To 5 a(i,j)=cells(i,j) Next j Next i For j=1 To 5 s=0 For i=1 To 10 s=s+a(i,j) Next i Cells(11,j)=s Next j 3, ZADANIA Z ROZWIĄZANIEM WskaŜ w tablicy o n wierszach i m kolumnach liczby mniejsze od 5. Oblicz dla tablicy kwadratowej sumę elementów znajdujących się pod przekątna \. W zadaniach tych moŜna wykorzystać generator liczb losowych do tworzenia tablicy z danymi o określonej przez uŜytkownika wymiarach. MoŜna wykorzystać makra (zamalowanie komórek) do zaznaczenia komórek wybranych do obliczenia wyniku. Rozwiązanie Private Sub CommandButton1_Click() Cells.Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Selection.ClearContents Range("A1").Select n = Val(TextBox1.Text) m = Val(TextBox2.Text) For i = 1 To n For j = 1 To m Cells(i, j) = Int(10 * Rnd) Next j Next i End Sub Private Sub CommandButton2_Click() n = Val(TextBox1.Text) m = Val(TextBox2.Text) For i = 1 To n For j = 1 To m If Cells(i, j) < 5 Then Range(Cells(i, j), Cells(i, j)).Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0 End With End If Next j Next i End Sub Private Sub CommandButton3_Click() n = Val(TextBox1.Text) m = Val(TextBox2.Text) If n = m Then s=0 For i = 1 To n For j = 1 To m If i > j Then s = s + Cells(i, j) Range(Cells(i, j), Cells(i, j)).Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0 End With End If Next j Next i MsgBox ("suma=" & s) Else MsgBox ("Tablica nie jest kwadratowa") End If End Sub 4. ZADANIA DO SAMODZIELNEGO WYKONANIA. Dany jest n - elementowy ciąg liczb (max 10 elementów, zapamiętany w arkuszu kalkulacyjnym). Obliczyć: 1. Wszystkie sumy dwóch kolejnych liczb 2. Ile razy po sobie występują dwie liczby ujemne 3. Ile razy po sobie występują dwie liczby parzyste 4. Ile razy ciąg liczb maleje 5. Ile razy ciąg liczb zmienia znak Dla następujących danych – ciąg 6 elementowy 1) 5,3,4,-1,-8 2) jeden raz -6 -2 3) jeden raz 14 4) dwa razy 4 –1, 5 –6 5) trzy razy 4 –1, -1 5, 5 –6 1, 4, -1, 5, -6, -2 otrzymamy następujące wyniki: Dana jest tablica A(n,m) o maksymalnie 10 wierszach i 10 kolumnach Oblicz: 1. iloczyny wartości w kolumnach 2. sumę wartości znajdujących na przekątnej tablicy 3. sumę wartości znajdujących się na obwodzie tablicy 4. sumę wartości elementów pod/nad przekątną 5. wartość mim/max w wierszach/kolumnach Dla następujących danych – tablica (trzy wiersze, trzy kolumny) 132 112 235 otrzymamy następujące wyniki: 1) 2 9 20 2) \ 7, / 5 3) 19 4) / nad 5 pod 10 5) min w wierszach - 1,1,2 max w wierszach - 3,2,5 min w kolumnach - 1,1,2 max w kolumnach – 2,3,5 GRUPA TEMATYCZNA: ALGORYTMIKA I PROGRAMOWANIE TEMAT: Pliki. Wstęp 1. PLIKI Język VBA pozwala na zapisywanie oraz odczytywanie danych z plików dyskowych. W przypadku duŜej ilości danych stanowi to wygodne rozwiązanie podczas wielokrotnego przetwarzania tych samych danych. UŜytkownik nie musi wprowadzać wielokrotnie danych z klawiatury, co eliminuje częste błędy podczas ich wprowadzania. Minimalizowany jest takŜe czas wprowadzania danych wejściowych do programu. UŜytkownik moŜe do pliku zapisywać wiele danych, w zaleŜności od swoich potrzeb. Visual Basic pozwala na trzy typy dostępu do pliku: • Dostęp sekwencyjny(Input, Output, Append) jest stosowany do zapisu plików tekstowych; • Dostęp swobodny (Random) jest stosowany do odczytu i zapisu danych z pliku bez jego zamykania. Pliki o dostępie swobodnym organizują dane w rekordy. • Dostęp binarny (Binary) jest stosowany do odczytu i zapisu na dowolnego bajtu w pliku. 2. POLECENIA PLIKOWE Otwieranie i zamykanie plików sekwencyjnych Open nazwa [For mode] As [#] nrpliku Close [#] nrpliku Open "dane.txt" For Input As #1 Close #1 Dobrym zwyczajem jest zamykanie pliku po jego uŜyciu. Jeśli nie podamy dla instrukcji Close Ŝadnego argumentu, zamknięte zostaną wszystkie pliki, otwarte przy uŜyciu instrukcji Open. Po zamknięciu pliku skojarzenie pliku z jego numerem zostaje utracone. Funkcja FreeFile zwraca wartość typu Integer, określającą wartość kolejnego wolnego numeru pliku, dostępnego dla rozkazu Open. Składnia funkcji FreeFile: FreeFile(ZakresArgumentow) Opcjonalny argument ZakresArgumentow jest wyraŜeniem typu Variant określającym zakres uŜywanych numerów plików. Wartość 0 (domyślna) określa zakres numerów 1-255, wartość 1 określa zakres numerów 256-511. Funkcji FreeFile naleŜy uŜywać, aby pobrać nieuŜywany numer pliku. Zapisywanie plików sekwencyjnych Dane są zapisywane do plików sekwencyjnych za pomocą instrukcji Print oraz Write. Format instrukcji Print jest następujący: Print # nrpliku, listawyraŜeń [(;|,)] gdzie • • Nrpliku ListawyraŜeń – numer przypisany plikowi – lista wyraŜeń do zapisu oddzielonych przecinkami lub średnikami W przypadku polecenia Write wyraŜenia oddzielane są przecinkami, a ciągi znaków ujęte są w cudzysłów. Private Sub CommandButton1_Click() Open "wyn.txt" For Output As #1 n1 = val(TextBox1.Text) n2 = TextBox2.Text n3 = TextBox3.Text For k = 1 To 3 Print #1, n1, n2, n3 Next k For k = 1 To 3 Write #1, "Wyniki=",n1, n2, n3," ***" Next k Close #1 End Sub Wynik przecinek średnik 12 aa cc 12 aa cc 12 aa cc "Wyniki=",12,"aa","cc"," ***" "Wyniki=",12,"aa","cc"," ***" "Wyniki=",12,"aa","cc"," ***" 12 aacc 12 aacc 12 aacc "Wyniki=",12,"aa","cc"," ***" "Wyniki=",12,"aa","cc"," ***" "Wyniki=",12,"aa","cc"," ***" Czytanie plików sekwencyjnych Odczyt pliku sekwencyjnego jest moŜliwy za pomocą instrukcji Input oraz Line Input. Instrukcja Input czyta dane z pliku dyskowego do swoich argumentów Składnia instrukcji jest następująca: Input # nrpliku, listazmiennych gdzie • • nrpliku – numer przypisany plikowi listawyraŜeń – lista zmiennych, którym zostaną przypisane dane odczytane z pliku Dane plik wyn2.txt 12 34 56 11 abc 22.22 asd 12 "abc 22,33" Private Sub CommandButton1_Click() Open "wyn2.txt" For Input As #1 Input #1, w1, w2, w3 Input #1, w4 Input #1, n1 Input #1, w5, n2 Close #1 End Sub Instrukcja Line Input czyta jedną linię tekstu do zmiennej String, czyli łańcucha znaków. Składnia instrukcji jest następująca: Line Input # nrpliku, napis gdzie • • nrpliku napis – numer przypisany plikowi – zmienna typu String Private Sub CommandButton2_Click() Dim nap(4) As String Open "wyn2.txt" For Input As #1 For k = 1 To 4 Line Input #1, nap(k) Next k Close #1 End Sub Funkcja EOF() Funkcja EOF() jest funkcją pomocniczą w operacjach na plikach. Zwraca ona wartość TRUE po osiągnięciu końca pliku. Próba odczytu poza końcem pliku spowoduje wygenerowanie błędu. Parametrem funkcji jest numer pliku. Private Sub CommandButton3_Click() Dim nap(10) As String Open "wyn2.txt" For Input As #1 k=0 Do While Not EOF(1) k=k+1 Line Input #1, nap(k) Loop Close #1 End Sub Czytanie plików binarnych Instrukcja Get odczytuje dane z pliku dyskowego do zmiennej. Składnia rozkazu Get to: Get [#] rrpliku, [nrrekordu], nazwazmiennej gdzie • • • NrPliku NrRekordu numer przypisany plikowi. (parametr opcjonalny) wartość typu Long. Jest to numer rekordu (dla plików otwartych w trybie Random) lub numer bajtu (dla plików otwartych w trybie Binary) od którego zostanie rozpoczęte odczytywanie. NazwaZmiennej nazwa zmiennej do której mają zostać przekazane odczytane dane z pliku. 3. PRZYKŁADY Przykład 1 Wyświetl nagłówek plik PDF. Private Sub CommandButton1_Click() Dim t(10) As Byte Open "d:\kk.pdf" For Binary As #1 For k = 1 To 10 Get #1, k, t(k) TextBox1.Text = TextBox1.Text + Chr(t(k)) Next k Close #1 End Sub Zapisywanie plików binarnych Instrukcja Put zapisuje dane do pliku dyskowego ze zmiennej. Składnia instrukcji jest analogiczna do instrukcji Get. Put [#] rrpliku, [nrrekordu], nazwazmiennej Przykład 2 Stworzyć plik binarny zawierający napis podany przez uŜytkownika. Private Sub CommandButton1_Click() Dim nap As String nap = "NawigatorXXI" TextBox1.Text = nap dl = Len(nap) Open "d:\plik." For Binary As #1 For k = 1 To dl litera = Mid(nap, k, 1) w = Asc(litera) Put #1, , w TextBox2.Text = TextBox2.Text & w & " " Next k Close #1 End Sub Przykład 3 Napisz program tabelaryzujący funkcję y=x2 w przedziale od 0 do 5 Private Sub CommandButton1_Click() x = 0: dx = 0.5 Open "test.txt" For Output As #1 For i = 1 To 11 Y = f(x) Print #1, FormatNumber(x, 1); " "; Format(Y, "##,##0.00") x = x + dx Next i Close #1 End Sub Function f(x) As Double f=x^2 End Function 0,0 0,00 0,5 0,25 1,0 1,00 1,5 2,25 2,0 4,00 2,5 6,25 3,0 9,00 3,5 12,25 4,0 16,00 4,5 20,25 5,0 25,00 3, ZADANIA Z ROZWIĄZANIEM Napisz program zapisujący, odczytujący z pliku nazwy miast. Dodatkowo program powinien umoŜliwiać dopisywanie nowych nazw do pliku oraz usuwanie istniejących danych z pliku. Rozwiązanie Private Sub CommandButton3_Click() ComboBox1.Clear Open "test2.txt" For Input As #1 Do While Not EOF(1) Input #1, nazwa ComboBox1.AddItem nazwa Loop ' wielkość pliku TextBox2.Text = LOF(1) Close #1 ComboBox1.Text = nazwa End Sub Private Sub CommandButton4_Click() Open "test2.txt" For Append As #1 Print #1, TextBox1.Text Close #1 End Sub Private Sub CommandButton1_Click() ' usuń miasto z listy Open "test2.txt" For Input As #1 FileNumber = FreeFile Open "wyj.txt" For Output As #FileNumber Do While Not EOF(1) Input #1, nazwa If nazwa <> TextBox1.Text Then Write #FileNumber, nazwa End If Loop Close #1 Close #FileNumber Kill "test2.txt" FileCopy "wyj.txt", "test2.txt" End Sub Zadanie. Napisz program zapisze w pliku choinkę, utworzoną ze znaków dostępnych na klawiaturze. Zapisz do pliku własny, samodzielnie zaprojektowany wygląd choinki. Rozwiązanie Private Sub CommandButton5_Click() ' choinka Open "test4.txt" For Output As #1 For i = 1 To 5 Print #1, Tab(10 - i); For j = 1 To i Print #1, "/"; Next j For j = 1 To i Print #1, "\"; Next j Next i Print #1, Tab(9); "XX" Print #1, Tab(9); "XX" Print #1, Tab(7); "--XX--" Close #1 End Sub /\ //\\ ///\\\ ////\\\\ /////\\\\\ XX XX --XX-- 4. ZADANIA DO SAMODZIELNEGO WYKONANIA. 1) Napisz program, który zapisze w pliku tablicę znaków ASCII z wybranego przez uŜytkownika przedziału. 2) Napisz program, który tabelaryzuje do pliku zadaną funkcję w przedziale od A do B z krokiem DX. (uwaga DX musi mieć wartość większą od zera) 3) Napisz program, który odczyta dane liczbowe z pliku a następnie zapisze je uporządkowane rosnąco do innego pliku tekstowego. Odpowiedzi: Zadanie 1 Dla wartości kodów od 50 do 55 otrzymamy następujące wyniki: 50 2 51 3 52 4 53 5 54 6 55 7 a dla wartości od 40 do 43: 40 ( 41 ) 42 * 43 + Zadanie 2 Dla następujących danych A-0 B-2 DX- 0.3 funkcja y=x otrzymamy następujące wyniki: X Y 0 0 0.3 0.3 0.6 0.6 0.9 0.9 1.2 1.2 1.5 1.5 1.8 1.8 Zadanie 3 Dla następujących danych 5 1 3 22 1 23 otrzymamy następujące wyniki: 1 1 5 22 23