INFORMATYKA Jednostka prowadząca kierunek Akademia Morska

advertisement
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
Download