<HTML> | |||
---|---|---|---|
<HEAD> GŁOWA DOKUMENTU – w tej części wpisujemy informacje o dokumencie </HEAD> |
|||
<BODY> CIAŁO DOKUMENTU – zasadnicza część dokumentu. Wpisywane są tu elementy do wyświetlenia na stronie www </BODY> |
|||
</HTML> |
Przykładowe elementy wpisywane w części HEAD:
<meta http-equiv = content- type content = text/html; charset = iso-8859-2> - zapewnia wyświetlanie polskich liter
<title> Tytuł strony </title> - pozwala dodać tytuł strony (wyświetlany na pasku)
<meta name = description content = opis strony WWW> - pozwala dodać opis strony
<meta name = keywords content = słowa kluczowe> - pozwala dodać słowa kluczowe
<metanami = author content = autor dokumentu> - pozwala dodać autora strony
Znaczniki html umieszczane są w nawiasach ostrych (np. <znacznik>). Większość znaczników posiada otwarcie i zamknięcie. W przypadku tych znaczników elementy których dotyczyć mają znaczniki wpisujemy pomiędzy nie (np. <znacznik> tekst, którego się tyczy znacznik </znacznik>).
Przykładowe znaczniki bez zamknięcia:
<!—komentarz --> - komentarz (tekst będzie widoczny tylko w pliku źródłowym)
<BR> - podział/łamanie wiersza (potoczny enter)
<HR> - linia pozioma
Przykładowe znaczniki z zamknięciem:
<B> tekst </B> - pogrubienie tekstu pomiędzy znacznikami
<U> tekst </U> - podkreślenie tekstu pomiędzy znacznikami
<I> tekst </I> - kursywa
<H1> tekst </H1>, ... , <H6> tekst </H6> - nagłówki (użycie domyślnego stylu nagłówków)
<P> tekst </P> - akapit
Do niektórych znaczników można zastosować parametry np. wyśrodkowanie, kolor. Parametry zawsze wpisuje się w znaczniku otwierającym.
Przykłady znaczników z parametrami:
<P align=styl> tekst </P> - pozwala na wyrównanie tekstu. styl={left,right,center,justify}
<HR color=blue> - pozwala nadać kolor linii
<HR size=4> - pozwala nadać grubość linii
<HR width=300> - pozwala nadać długość linii w pikselach
<HR noshade> - zrezygnowanie z cieniowania linii
Do formatowania czcionki służy znacznik FONT. Formatowany tekst umieszczany jest między znacznik otwierający a zamykający (np. <font> tekst </font>)
Przykładowe parametry dla znacznika font:
<font size=r> tekst </font> - rozmiar czcionki (r={1,2,…,7}). Domyślny rozmiar 3
<font size=±2> tekst </font> - zmiana rozmiaru w stosunku do wcześniejszego fragmentu
<font color=red> tekst </font> - zmiana koloru czcionki
<font color=#FFFFFF> tekst </font> - zmiana koloru czionki
<HTML> <HEAD> <META HTTP-EQUIV="content-type" CONTENT="text/html; charset=iso-8859-2"> <TITLE> PRZYKŁAD </TITLE> </HEAD> <BODY> <P align=center> <B>TO JEST PRZYKŁAD POGRUBIENIA</B> </P> <HR width=400, color=blue> <P align=center> <font color=red> A to przykład formatowania czcionki </font><br> <font size=-2> -2 i czcionka zmniejszona </font> </P> </BODY> </HTML> |
---|
Znaczniki tworzenia tabel:
<TABLE> </TABLE> - granica tabeli
<TR> </TR> - wiersz tabeli
<TD> </TD> - komórka w wierszu
<TH> </TH> - nagłówek wiersza i kolumny
Przykładowe parametry znaczników tabeli:
<TABLE border=X > – nadaje grubość obramowania (domyślna grubość to 0)
<TABLE bordercolor=X> – nadaje kolor obramowania
<TABLE gcoloro=X> - nadaje kolor tła tabeli
<TABLE width=X> - szerokość tabeli
<TR height=X> - wysokość wiersza
<TD width=X> - szerokość kolumny
Żeby zdefiniować tabelę należy najpierw utworzyć tabelę poprzez znacznik TABLE. Potem zdefiniować wiersz tabeli przez znacznik TR a następnie w każdym wierszu zdefiniować komórki. Zawartość tabeli wpisujemy w poszczególne komórki (między znaczniki komórek). Przykład:
<HTML> <HEAD> <TITLE> PRZYKŁAD </TITLE> </HEAD> <BODY> <TABLE border=2, bordercolor=#1475729, width=150> <TR> <TD> Jeden </TD> <TD> Dwa </TD> </TR> <TR> <TD> Trzy </TD> <TD> Cztery </TD> </TR> </TABLE> </BODY> </HTML> |
---|
Wyrównywanie tekstu w tabeli/komórce:
align=styl – parametr wyrównania w poziomie (styl={left, center, right, justify})
valign=vstyl – parametr wyrównania w pionie (vstyl={top, middle, bottom})
Scalanie komórek tabeli:
colspan=X – parametr scalania w poziomie (X – liczba scalanych komórek)
rowspan=X – parametr scalania w pionie (X – liczba scalanych komórek)
Parametry te umieszczamy w znaczniku komórki (TD)
Należy pamiętać że w kodzie html definiujemy jedynie pierwszą ze scalonych komórek
<HTML> <HEAD> <META HTTP-EQUIV="content-type" CONTENT="text/html; charset=iso-8859-2"> <TITLE> SZABLON HTML </TITLE> </HEAD> <BODY> <TABLE border=2 width=800> <TR><TD align=left>Wyrównanie do lewej</TD><TD align=center>Wyśrodkowanie</TD><TD align=right>Wyrównanie do prawej</TD></TR> <TR height=50><TD colspan=3 align=center valign=middle>Scalone i wyśrodkowane (w pionie i poziomie) komórki</TD> </TR> <TR><TD rowspan=2 align=right valign=top>scalone w pionie</TD><TD>tekst</TD><TD rowspan=2 align=left valign=bottom>scalone w pionie</TD></TR> <TR><TD>przykładowy tekst</TD></TR> </TABLE> </BODY> </HTML> |
---|
Do wstawiania grafiki służy znacznik <IMG SCR= „adres pliku”>
Adres pliku można podać na różne sposoby:
nazwa.gif – gdy plik znajduje się w tym samym folderze co plik źródłowy strony
…/foto/album/nazwa.jpg – gdy plik znajduje się w innym folderze (… oznaczają wejście o folder wyżej)
http://www.wp.pl/logo.png - gdy plik znajduje się w Internecie
W HTML-u możemy zdefiniować wykaz numerowany i wypunktowany (nieuporządkowany)
Wykaz numerowany <OL> <LI> tekst pierwszego punktu </LI> <LI> tekst drugiego punktu </LI> … </OL> <OL start=20> - rozpoczęcie numerowania od liczby 20 |
Wykaz wypunktowany <UL> <LI> tekst pierwszego punktu </LI> <LI> tekst drugiego punktu </LI> … </UL> |
---|
Odsyłacze (linki, odnośniki, łącza) są bardzo istotnymi elementami dokumentu HTML, dzięki którym możliwe jest powiązanie między sobą dokumentów w sieci WWW.
<A HREF = ”adres strony”> tekst/obraz po którego kliknięciu uruchamia się strona </A>
Adres strony można definiować na kilka sposobów:
…/katalog/strona.html – gdy strona znajduje się w innym folderze
strona.html – gdy strona znajduje się w aktualnym folderze
http://adresstronywww.pl – gdy odnosi się do jakiejś witryny WWW
mailto: kto@jego.adres –gdy chcemy by uruchomiła się poczta z wpisanym już adresem email
Na różne sposoby można też definiować „przycisk” odnośnika:
Tekst – gdy po kliknięciu w dany tekst ma się otworzyć strona
<IMG SCR=”przycisk.jpg”> - gdy po kliknięciu w dany obrazek ma się otworzyć strona
Użycie parametru target=”_blank” w znacziku <A HREF> spowoduje otwarcie strony w nowym oknie
Język HTML – definiowanie struktury tworzonej witryny internetowej oraz poszczególnych dokumentów
Język CSS – definiowanie formy prezentacji (wyświetlania) stron WWW
Najważniejsze zalety CSS:
Większe możliwości formatowania niż za pomocą znaczników i ich atrybutów
Oddzielenie struktury stron od ich prezentacji
Łatwość ujednolicenia i modyfikowania wyglądu grupy dokumentów
CSS podstawowe pojęcia:
Selektor – znacznik np. P, LI, TD
Cecha – własność danego znacznika np. wielkość, styl czcionki
Wartość –konkretna wartość cechy np. bold lub 12pt
Zapis: SELEKTOR{CECHA:WARTOŚĆ;}
Przykłady:
p{font-family:Helvetica; font-size:12pt;}
UL{font-weight:bold; color:#FF0000;}
H1,H2,H3{font-family:Helvetica; color:black;}
Rodzaje stylów CSS:
Style wewnętrzne
Styl lokalny
<p style=”font-size: 12pt; color:blue;”>
Styl zagnieżdżony
<head>
<style type=”text/css”>
<!--
body{margin-left:1cm; margin-right:1cm;}
p{font-size:10pt; font-family: Arial, Helvetica;}
-->
</style>
</head>
obecnie formuł tych nie pisze się w znaczniku komentarza
Style zewnętrzne
Styl dołączany
<head>
…
<link href=”plikcss” type=”text/css” rel=”style sheet”}
…
</head>
Styl importowany
Im styl jest zdefiniowany bliżej miejsca użycia w dokumencie tym jest ważniejszy w hierarchii formatowania. Z tego wynika, że styl lokalny ma pierwszeństwo przed zagnieżdżonym, a ten z kolei przed stylami zewnętrznymi
Informatyka – dziedzina wiedzy i działalności zajmująca się gromadzeniem, przetwarzaniem i udostępnianiem informacji (czyli różnego rodzaju danych o otaczającej nas rzeczywistości).
W informatyce istotna jest metoda – algorytm
Algorytmika – kluczowa dziedzina zajmująca się tworzeniem nowych algorytmów i ocenianiem ich poprawności
Przetwarzanie informacji odbywa się najczęściej za pomocą komputerów
Algorytm jest przepisem rozwiązania podstawowego zadania będącego dokładnie określonym układem elementarnych
Algorytm powinien pozwalać rozwiązać problem, dla którego został opracowany w sposób automatyczny („bezmyślny”) przez inne osoby.
Algorytm bywa utożsamiany ze znaczeniami słów: metoda, sposób, recepta, przepis, program.
Formy zapisu algorytmu:
Opis słowny – np. podyktowanie przez telefon przepisu na wypiek sernika na zimno
Schemat blokowy – graficzna prezentacja za pomocą bloków (figur geometrycznych) łączonych ze sobą strzałkami
Implementacja (program/podprogram) – algorytm zapisany za pomocną języka programowania
Schemat blokowy jest to sieć działań czyli graficzna prezentacja algorytmu (procedury lub programu) sporządzona w celu przedstawienia algorytmu do zapisania w języku programowania. Częściami składowymi schematu blokowego są podstawowe figury geometryczne (np. prostokąt, romb, koło). W figurach tych umieszczane są proste instrukcje oraz warunki przy czym:
Można stosować notację bardziej symboliczną, lub
mogą być one związane z konkretnym językiem programowania
Elementy schematu blokowego:
Blok START
Blok START wskazuje początek algorytmu. Z bloku wychodzi tylko jedna droga (strzałka).
Blok STOP
Blok STOP wskazuje koniec algorytmu. Do bloku wchodzi tylko jedno połączenie.
Blok PROCES
W jego obrębie umieszczamy wszelkie instrukcje (obliczenia). Proces ma dokładnie jedną strzałkę wchodzącą i dokładnie jedną strzałkę wychodzącą
Blok WEJŚCIA
W bloku umieszcza się wprowadzane dane (odczyt danych). Do/z bloku wchodzi/wychodzi tylko jedno połączenie.
Blok WYJŚCIA
W bloku umieszcza się wyprowadzane wyniki (zapis danych). Do/z bloku wchodzi/wychodzi tylko jedno połączenie.
Blok DECYZYJNY
W bloku umieszcza się warunek, który decyduje o wyborze dalszej drogi postępowania. Blok ma dokładnie jedną strzałkę wchodzącą a wychodzą dwa połączenia.
Z dwóch wybranych wierzchołków rombu wyprowadza się dwie możliwe drogi:
- gdy warunek jest spełniony (etykieta "Tak") oraz
- gdy warunek nie jest spełniony (etykieta "Nie").
Blok PROCES UPRZEDNIO ZDEFINIOWANY
Symbolizuje proces, który został już wcześniej zdefiniowany (opisany).
Odpowiednik procedury, którą definiuje się raz, by następnie móc ją wielokrotnie wywołać. Podobnie jak w przypadku bloku proces i ten blok ma jedno wejście i jedno wyjście
Blok ŁĄCZNIK STRONICOWY
Umożliwia łączenie dwóch miejsc by uniknąć krzyżowania strzałek - „teleportacja”.
Łączniki występują w parach (takie same etykiety).
Blok ŁĄCZNIK MIENDZYSTRONICOWY
Znaczenie podobnie jak łącznik stronicowy, lecz w obrębie co najmniej dwóch stron.
Uwaga: jeśli w schemacie stosujemy oba typy łączników, to
- najlepiej jest stosować liczby do identyfikowania jednych i litery do drugich
- lub podwójną numerację „strona / nr. łącznika” np. „3/5”
W każdym algorytmie musi się znaleźć dokładnie jeden blok START i STOP.
Przykład:
Sprawdzić, czy klient banku przekroczył dopuszczalny limit debetu na swoim koncie bankowym.
Zapis słowny algorytmu:
(Założenie: dopuszczalny limit debetu na koncie bankowym wynosi 500)
1. Początek algorytmu
2. Wprowadż stan konta i przypisz wartość za zmienną S.
3. Dodaj do stanu konta S wartość 500.
4. Sprawdzić czy wartość zmiennej S jest mniejsza od zera.
5.1. Jeżeli TAK, to wypisz komunikat „Debet..." i przejdź do 6.
5.2. W przeciwnym przypadku przejdź do 6.
6. KONIEC algorytmu
Język algorytmiczny – język opisu algorytmów i komunikacji między użytkownikami komputerów. Przedstawiciel klasy języków sztucznych. Większość ze stosowanych języków programowania spełnia wymagania języków algorytmicznych
Język strukturalny – umożliwia budowanie programów podzielonych na bloki, części – procedury bądź funkcje. Programowanie strukturalne ułatwia projektowanie, testowanie a także „utrzymanie” kodu programu
Etapy tworzenia programu:
Elementy programu źródłowego:
Jednostki leksykalne
Słowa kluczowe
Identyfikatory (np. zmienne, stałe)
Liczby
Napisy
Literały logiczne
Komentarze
Separatorów – spacja, średnik, kropki, tabulacja, przecinek, znak zmiany wiersza i komórki
Identyfikatory:
Służą do oznaczania : programów, stałych typów danych, zmiennych, pól w rekordach, procedur, funkcji, parametrów formalnych
Są to spójne ciągi liter i znaków rozpoczynające się od litery, nie będące słowem kluczowym
Znak podkreślenie (_) uznawany jest za literę
Nie wolno stosować polskich liter
Nie są rozróżniane duże i małe litery
Liczba znaków identyfikatora może wynosić 126, ale tylko pierwsze 63 są rozróżniane
Struktura programu:
Nagłówek programu
Deklaracja modułów
Blok definicji i deklaracji
Blok podprogramów
Blok główny
W każdym programie muszą wystąpić nagłówek programu i blok główny. Istotna jest kolejność umieszczania bloków w programie
Nagłówek programu składa się ze słowa kluczowego PROGRAM, po którym umieszcza się nazwę programu (identyfikator) oraz ewentualnie ujętą w nawiasy okrągłe listę parametrów (kolejne elementy tej listy oddzielamy przecinkami). Lista parametrów może być pomijana. Nagłówek programu zakończony jest średnikiem
Blok główny programu rozpoczyna się od słowa BEGIN a zakończeniem bloku jest słowo END. (obowiązkowo z kropką). Pomiędzy tymi słowami wpisuje się instrukcje programu oraz wywołania podprogramów. Instrukcje umieszczone w programie są oddzielane od siebie średnikami
Rodzaje instrukcji:
Instrukcje proste np. przypisania
Instrukcje strukturalne
Instrukcja złożona
Instrukcje warunkowe
Instrukcje literacyjne
Instrukcja wiążąca
Instrukcja przypisania to symbol dwuznakowy := i służy do przypisania zmiennej wartości i ma następującą postać:
zmienna := stała lub wyrażenie
Operatory:
Arytmetyczne
+ - * / div mod
Relacyjne
= < > <> <= >=
Logiczne
and Or not
Operator div oznacza dzielenie całkowite a operator mod resztę z dzielenia całkowitego
Zmienne wykorzystywane w programach muszą być wcześniej zdeklarowane (należy określić dziedzinę dopuszczalnych wartości)
Deklaracje zmiennych rozpoczynają się od słowa kluczowego VAR, po którym następuje wykaz deklaracji zmiennych
VAR
…
|
---|
Lista identyfikatorów to oddzielona przecinkami lista nazw zmiennych, a nazwa typu zawiera określenie typu zmiennej.
Typy danych:
Zbiór liczb całkowitych
Byte 0 … 255
Word 0 … 65 535
Shortlnt -128 … + 127
Integer -32 768 … +32 767
Longint -2 147 483 648 … +2 147 483 647
Zbiór liczb rzeczywistych
Real 2.9e-39 … 1.7e38
Zbiór wartości logicznych
Boolean wartości logiczne: true, false
Napisy
String do 255 znaków
Zbiór znaków
Char znak ASCII np. ‘A’, ‘z’, ‘5’, ‘@’,’+’
Typy danych proste/porządkowe – są to typy, w których dla dowolnego elementu (oprócz pierwszego i ostatniego) można wskazać jego poprzednika i następcę. Do tych typów zaliczamy: zbiór liczb całkowitych, zbiór znaków i zbiór wartości logicznych
Przykład: Deklaracja zmiennych
Program nazwa_programu;
VAR
BEGIN
END. |
---|
Przykłady źle zdeklarowanych zmiennych:
błędna deklaracja: liczba; - nie można używać polski znaków, nie stawia się spacji
5 : byte; - Identyfikatory muszą zaczynać się od litery
2005rok: word; - Identyfikatory muszą zaczynać się od litery
Projektując program należy:
precyzyjnie sformułować algorytm, zgodnie z którym wykonanie programu przekształca dane do pożądanych wyników
opracować szczegółowo powyższy schemat komunikacji programu z użytkownikiem
Instrukcja przypisania to symbol dwuznakowy := i służy do przypisania zmiennej wartości i ma następującą postać:
zmienna := stała lub wyrażenie
Przykłady:
DOBRZE ŹLE
x:=1; 1:=x;
znak := ‘A’; znak := ‘A’+’z’; ponieważ zmienna znak jest jednoznakowa
napis :=’Pelagia’; napis :=Pelagia ponieważ napisy umieszczamy w apostofach
Każda zmienna użyta w programie musi być w nim zadeklarowana
Składnia:
read (lista_parametrów) ;
lub
readln (lista_parametrów);
Interpretacja:
Wprowadzenie do komputera wartości z klawiatury i podstawienie wczytanej wartości pod wskazaną zmienną
Przykłady:
DOBRZE:
read (x) ;
readln (liczba 1, liczba 2);
readln (zm1,zm2,…,zmN);
ŹLE :
read (‘napis’, zm) – wolno tylko wczytać wartość i podstawić za zmienną
readln (zm+1); - nie wolno pisać wyrażeń
Składnia:
write (lista_parametrów) ; - po wyświetleniu kursor zostaje za ostatnią informacją
lub
writeln (lista_parametrów); - wyświetla i tworzy nową linię
Interpretacja:
Wyświetlenie informacji na ekranie monitora (np. tekstu, wartości zmiennej)
Przykłady:
DOBRZE:
write (zmienna) ;
writeln (‘napis’);
writeln (‘srednia=’ , suma/(n-10));
Przykład zastosowania instrukcji prostych:
Program obliczający sumę dwóch liczb wprowadzanych przez użytkownika
Program suma_2_liczb; Var
Begin
End. |
---|
Instrukcja warunkowa warunkuje wykonanie innej instrukcji pod warunkiem, że warunek będzie prawdziwy.
IF wyr_log then instrukcja_PRAWDA
|
IF wyr_log then instrukcja_PRAWDA; |
---|
Przykłady zastosowania instrukcji warunkowej:
Program obliczający pole koła: Program pole_kola; Var
Begin
End. |
Program obliczającą wartość bezwzględną liczby: Program wartość-bezwzgledna; Var
Begin
End. |
---|
Ciąg kilku instrukcji można zgrupować w jedną instrukcję tzw. złożoną, jeżeli poprzedzi się je słowem kluczowym „BEGIN” a zakończy słowem „END”
Przykład:
Program obliczający pole koła:
Program pole_kola;
Var
promien :real;
pole:Real;
Begin
write(‘Wprowadź promień koła:’); readln(promien);
IF (promien>0) then
Begin
pole := 3,14*promien*promien;
writeln(‘Pole koła=’,pole)
end
ELSE
Writeln(‘Brak rozwiązania! promien<0);
End.
Stałe definiuje się dla:
Zwiększenia czytelności programu
Uproszczenia implementacji
Ułatwienia późniejszych jej modyfikacji
Definiowanie stałych rozpoczyna się słowem kluczowym CONST, po którym następuje wykaz identyfikatorów i wartości stałych
CONST
|
---|
Blok definicji stałych umieszcza się po nagłówku programu a przed blokiem głównym
Przykłady:
DOBRZE: Pi=3.14159; b_dobry50=5.0; marzec=3; X=12; Y=X; |
ŹLE: Nasze miasto=’Wrocław’; - bo spacja X=Y=12; |
---|
Instrukcje literacyjne pozwalają na powtarzanie wykonywania instrukcji bez konieczności powtarzania jej w implementacji programu (pętle)
Składnia:
REPEAT
UNTIL wyrażenie_logiczne |
---|
Opis:
Powtarzaj wykonywanie instrukcji aż wartość wyrażenia logicznego będzie prawdą. Literacja typu „powtarzaj” zapewnia wykonanie instrukcji znajdującej się między repeat i until przynajmniej raz
Przykład:
Zapewnić kontrolę wprowadzanego PINU: Program Dostep_PIN; Const kodPIN=2905; Var pin_we: word; Begin Repeat Write (‘Wprowadź kod PIN:’); Readln (pin_we); Until pin_we = kodPIN; Writeln (‘Wprowadzono poprawny PIN’); {… dalsza część program} End. |
Zapewnić kontrolę PINU (max 3 próby): Program Dostep_PIN_x3; Const kodPIN=2905; max_prob = 3; Var pin_we: word; proba: byte; Begin proba := 0; Repeat Write (‘Wprowadź kod PIN:’); Readln (pin_we); Proba := proba+1; Until (pin_we = kodPIN) Or (proba = max_prob); If (pin_we <> kodPIN) Then begin Writeln (‘Błędny PIN’); {…} End Else Begin Writeln (‘Wprowadzono poprawny PIN’); {… } end End. |
---|
Składnia:
WHILE wyrażenie_logiczne DO Instrukcja |
---|
Opis:
Dopóki wartość wyrażenia logicznego jest prawdą wykonywana jest instrukcja po słowie DO
W szczególnym przypadku instrukcja nie zostanie wykonana nawet raz
Przykład:
Obliczyć sumę kolejnych liczb całkowitych od liczby P do liczby K podawanych przez użytkownika Program Suma_N_liczb;’ Var liczbaP, liczbaK: integer; liczba_i: integer; suma: longint; Begin Write (‘Podaj pierwszą liczbę’); Readln (LiczbaP); Write (‘Podaj drugą liczbę’); Readln (LiczbaK); Suma:=0; Liczba_i:=liczbaP; While (liczba_i <=liczbaK) do Begin Suma := suma+liczba_i; Liczba_i := liczba_i + 1; End Writeln (‘Suma =’, suma); End. |
---|
Przykład:
Napisać program do wspomagania obsługi wypłaty kredytu studenckiego. Założenia: - łączna kwota przeznaczona w danym dniu na wypłaty nie może być większa niż 75000zł (trzos) - liczba studentów, którym przyznano kredyt to 340 (liczbaStd) - maksymalna kwota pojedynczego kredytu to 650zł (max_kwota) Program Kredyt_Std; Const trzos = 75000; liczbaStd = 340; max_kwota = 650; Var nrStd: Word; kwota_kred: Real; pozyczono: Real; Begin Writeln(‘KREDYT…’); pozyczono := 0; nrStd := 1; While (pozyczono < trzos) and (nrStd <=liczbaStd) do Begin Writeln (‘Kredyt dla studenta nr=’), nrStd); Write (‘Wprowadź kwotę kredytu’); Readln (kwota_kred); If (kwota_kred) <= max_kwota) and ((kwota_kred + pozyczono) <= trzos) then Begin Pozyczono := pozyczono+kwota_kred; nrStd := nrStd+1; end Else Writeln(‘Błąd: za duża kwota!!!); Writeln (‘Pozostało:’, trzos-pozyczono:0:2); End End. |
---|
Instrukcja for .. to oraz instrukcja for … downto są prawie identyczne dlatego omawiane są razem na zasadzie porównania. Instrukcje te są tak jakby szczególnym przypadkiem wcześniej omówionych instrukcji literacyjnych dlatego nie każdą instrukcje repet czy while można zastąpić instrukcją for jednak na odwrót jest to zawsze możliwe. Instrukcję for można stosować jedynie dla zmiennych typu porządkowego (tzn. liczb całkowitych oraz znaków)
For … To … Do | For … Downto … Do | |
---|---|---|
Składnia | FOR zmster := wp TO wk DO Instrukcja; |
FOR zmster := wp DOWNTO wk DO Instrukcja; |
Opis |
|
|
Schemat blokowy |
Przykład:
Program obliczający sumę elementów tabliczki mnożenia o N wierszach i kolumnach
Program Suma_elementow; Var N,w,k : byte; element : word; suma : longint; Begin Repet Write (‘Wprowadź N:’); readln (N); Until N>0; suma := 0; FOR w := 1 to N do FOR k:= 1 to N do Begin element := w*k; suma := suma + element; end; writeln (‘Suma elementów =’ suma); End. |
---|
Przykład:
Przykład zastosowania obu instrukcji for oraz ten sam przykład wykonany wcześniej poznanymi instrukcjami literacyjnymi.
Polecenie: Oblicz sumę liczb od -30 do 105
Wykonanie instrukcją FOR … TO … DO Program for_to; Var Liczba_i : byte; Suma: longint; Begin Suma := 0; FOR liczba_i := -30 TO 105 DO Suma := suma + Liczba_i; Writeln (‘Suma = ‘,suma); End. |
Wykonanie instrukcją FOR … DOWNTO … DO Program for_downto; Var Liczba_i : byte ; Suma: longint; Begin Suma := 0; FOR liczba_i := 105 TO -30 DO Suma := suma + Liczba_i; Writeln (‘Suma = ‘,suma); End. |
---|---|
Wykonanie instrukcją WHILE Program while_do; Var Liczba_i : byte; Suma: longint; Begin Suma := 0; Liczba_i := 30; WHILE liczba_i <= 105 DO Begin Suma := suma + Liczba_i; Liczba_i := Liczba_i + 1 End; Writeln (‘Suma = ‘,suma); End. |
Wykonanie instrukcją REPEAT Program repeat_until; Var Liczba_i : byte; Suma: longint; Begin Suma := 0; Liczba_i := 30; REPEAT Suma := suma + Liczba_i; Liczba_i := Liczba_i + 1 UNTIL Liczba_i > 105; Writeln (‘Suma = ‘,suma); End. |
Składnia: Case wyr of Lw1 : instrukcja1 ; Lw2 : instrukcja 2; … LwN : instrukcjaN; Else instrukcja_else; End Gdzie: Wyr – wyrażenie typu prostego, porządkowego Lwi – lista wartości tego samego typu co wyr Instrukcjai – instrukcja prosta lub strukturalna |
Interpretacja:
|
---|
Przykład:
Wyświetlić zapis słowny oceny {5,4,3,2}
Program ocena_slownie; Var ocena : byte; Begin Write (‘Wprowadź ocene:’); Readln (ocena); CASE ocena OF 5 : writeln (‘bardzo dobry’); 4: writeln (‘dobry’); 3 : writeln (‘dostateczny’); 2: writeln (‘niedostateczny’); ELSE writeln (‘Co to za ocena’, ocena?); END End. |
---|
Przykład:
Na podstawie wprowadzonego nr. miesiąca wyświetlić nr. kwartału
Program Kwartały; Var Nr_miesiaca : byte; Begin REPEAT Write (‘Wprowadź numer miesiąca: ‘); Readln (nr_miesiaca); UNTIL (nr_miesiaca >=1) and (nr_miesiaca <= 12); Write (‘Miesiąc należy do ‘); CASE nr_miesiaca OF 1 : writeln (‘ 1 kwartału’); 2,3 : writeln (‘1 kwartału’); 4,5,6 : writeln (‘ 2 kwartału’); 7..9 : writeln (‘ 3 kwartału’); 10, 11..12 : writeln (‘ 4 kwartału’); ELSE writeln (‘Błąd!’); END; End. |
---|
Tablice umożliwiają przechowywanie więcej niż jednej zmiennej. Tablica jest to złożona struktura danych o ustalonej liczbie składowych (elementów) tego samego typu (np. wszystkie składowe są zmiennymi typu Word). Składowe są identyfikowane za pomocą indeksu (liczba, znak, …)
Zastosowanie tablic:
Zadanie A Napisać program, który wyliczy średnią arytmetyczną z N liczb wprowadzanych przez użytkownika |
Zadanie B Użytkownik wprowadza N liczb. Program oblicza średnią arytmetyczną tych liczb oraz wyświetla na ekranie różnicę między każdą z liczb a ich średnią arytmetyczną |
---|---|
Zadanie A jest trywialne i wystarczą do niego podstawowe instrukcje. W zadaniu B natomiast program musi dwa razy wykorzystać podawane zmienne (najpierw będzie obliczał średnią dla całego roku a potem odejmował tą średnią od poszczególnych liczb). Żeby to zrealizować musielibyśmy podawać programowi drugi raz te same liczby. Żeby tego uniknąć należy zastosować tablice, które umożliwiają zapamiętanie więcej niż jednej zmiennej |
Tablica jednowymiarowa | Przyznać nagrodę każdemu studentowi, którego średnia jest większa od średniej dla całego roku |
---|---|
Tablica dwuwymiarowa | Przyznać nagrodę każdemu studentowi, którego średnia ocen jest większa od średniej wszystkich studentów na wydziale |
Tablica trójwymiarowa | Przyznać nagrodę każdemu studentowi, którego średnia ocen jest większa od średniej wszystkich studentów na uczelni |
Zadanie: Przydzielić nagrodę każdemu studentowi, którego średnia ocen jest większa od średniej całego roku
Tablica średnich ocen (srednie_oceny)
4.32 | 3.98 | 4.89 | 3.02 | 2.98 | … | 4.10 | 4.33 |
---|---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | … | 299 | 300 |
Jak przypisujemy wartości poszczególnym komórkom tablicy? :
srednie_oceny 1 := 4.32;
srednie_oceny 5 := 2.98;
Deklaracja tablicy jednowymiarowej:
Var Identyfikator: array [ idp .. idk ] of typ; |
---|
Gdzie:
Identyfikator – nazwa zmiennej tablicowej
idp – indeks pierwszego elementu
idk – indeks ostatniego elementu
typ – nazwa typu wartości przechowywanych w tablic
Przykłady deklaracji tablic jednowymiarowych:
DOBRZE | ŹLE |
---|---|
liczba_ocen : array [2 .. 5] of byte; temperature : array [-50 .. 50] of word; licznik_liter : array [‘A’ .. ‘Z’] od word; litera1_slowa : array [1 .. 100] of char; zaliczono : array [false .. true] of word; t_log : array [boolean] of real; t_byte : array [byte] of char; t_char : array [longint] of byte; |
t_zle1 : array [10 .. 1 ] of integer; Bo idk < idp t_zle2 : array [2.0 .. 5.0 ] of real ; Bo identyfikatory muszą być typu porządkowego t_zle3 : array [1 .. 20000 ] of real ; Za dużo zmiennych typu real (ograniczenie pamięci) t_zle4 : array [ longint ] of byte ; za dużo wykorzystanej pamięci |
Przykłady przypisywania wartości elementom tablicy :
Zdefiniowane tablice, do których przypisujemy zmienne:
|
---|
DOBRZE |
liczba_ocen [5] := 112; licznik_liter [‘E’] := 55; litera1_slowa [17] := ‘k’; zaliczono [false] := ‘c’; t_byte [15] := ‘@’; t_char [‘$’] := 1178; |
Przykład:
Wypełnić tablicę TAB (-10 .. 500) wartościami 0
Program Tablica1; Var Tab : array [-10 .. 500] of word; i : integer; Begin {- Pierwszy sposób-} Tab [-10] := 0; Tab [-9] :=0; … Tab [499] :=0; Tab[500] :=0; {-Drugi sposób-} For i := -10 to 500 do Tab[i] := 0; End. |
---|
Przykład:
Przydzielić nagrodę każdemu studentowi, którego średnia ocen jest większa od zadanej np. 4.50
Program Nagroda; Const max_studentow = 300; Var sr_std : array [1 .. max_studentow] of real; Sr_min : real; nr : word; Begin For nr := 1 to max_studentow do Begin Write(‘ Wprowadź średnią studenta’, nr); Readln (sr_std[nr]); End; Write(‘Wprowadź średnią’); Readln(sr_min); For nr := 1 to max_studentow do If sr_std [nr] > sr_min then Writeln (‘Dla studenta nr’,nr,’nagroda’); End. |
---|
Przykład
Przyznać nagrodę każdemu studentowi, którego średnia ocen jest większa od średniej ocen obliczonej dla całego roku
Program Nagroda; Const max_studentow = 360; Var sr_std : array [1 .. max_studentow] of real; Sr_min : real; nr : word; suma : real; Begin For nr := 1 to max_studentow do Begin Write(‘ Wprowadź średnią studenta’, nr); Readln (sr_std[nr]); End; suma :=0; For nr := 1 to max_studentow do suma:=suma + sr_std[nr]; sr_min := suma/max_studentow; For nr := 1 to max_studentow do If sr_std [nr] > sr_min then Writeln (‘Dla studenta nr’,nr,’nagroda’); End. |
---|
Deklaracja tablicy dwu- I wielo wymiarowej:
Tablice wielowymiarowe można deklarować na dwa sposóby
Tablica dwuwymiarowa | Tablica n-wymiarowa |
---|---|
Var T2: array [ idp1 .. idk1 ] of array [ idp2 .. idk2 ] of typ; |
Var T2: array [ idp1 .. idk1 ] of … array [ idpn .. idkn ] of typ; |
Var Identyfikator: array [idp1 .. idk1, idp2 .. idk2] of typ; |
Var Identyfikator: array [idp1 .. idk1 ,…, idpn .. idkn] of typ; |
Przykłady deklaracji tablic wielowymiarowych:
Rok_oceny1 : array [1..5] of array [2..5] of Word; Rok_oceny 2 : array [1..5,2..5] of word; Tablica : array [‘0’..’9’, -5..12] of char; T4 : array [1..10, Boolean, ‘A’..’Z’] of real; |
---|
Przykład przypisania zmiennych tablicowych:
Zdefiniowane tablice, do których przypisujemy zmienne:
|
---|
DOBRZE |
Rok_oceny1 [1][5] := 112; Rok_oceny2 [1,5] := 112; Tablica [ ‘6’, -3] := ‘#’; T4 [3, true, ‘M’] := 1.65; |
Przykład:
Wypełnić tablicę TAB(-5..3, 1..30) wartościami 0
Program tablica_2; Var Tab: array[-5..3, 1..30] of real; Begin {-Sposób pierwszy-} Tab [-5,1] := 0; Tab [-5, 2]:=0; … Tab[3,29] :=0; Tab[3,30] :=0; {-Sposób drugi-} For w:=-5 to 3 do For k := 1 to 30 do Tab [w,k] :=0; End. |
---|
W programie można zdefiniować własny typ danych typu:
tablicowego
wyliczeniowego
okrojonego
Na zajęciach zajmujemy się tylko typem tablicowym
Definiowanie typu tablicowego
Type Identyfikator_typu1: array [ idp .. idk ] of typ; Identyfikator_typu2: array [ id1p .. id1k , … , idNp .. idNk] of typ; |
---|
Przykłady:
Type tablica: array [ 1 .. 10, ’A’..’Z’] of real; str20: string [20] ; nazwisko: string [25] ; Var Tab : tablica; Napis : str20; |
---|
Blok definicji typów danych umieszczamy w nagłówku programu, między definicją stałych a zmiennych.
Podział programu na tzw. podprogramy umożliwia:
Zwiększenie czytelności redagowanego tekstu programu źródłowego
Skrócenie implementacji programu
Łatwiejszą modyfikację implementacji programu
Mniejsze ryzyko „wprowadzenia” błędów w programie
Dostępne są dwa rodzaje podprogramów:
Procedury
Funkcje
Podprogram do komunikacji z blokiem głównym programu lub innymi podprogramami wykorzystuje tzw. parametry
Definiowanie procedury i funkcji:
Procedure identyfikator (lista_parametrow_formalnych); Begin … End; |
Function identyfikator (lista_p_f): typ_wartości; Begin … Identyfikator := wyrażenie; End; |
---|---|
Gdzie: Identyfikator –nazwa podprogramu lista_parametrow_formalnych – oddzielone średnikami deklaracje parametrów podprogramu |
|
Przykład: Procedure Obliczenia (tab:tablica; var max:real); |
Przykład: Function Srednia (suma:Word; n:byte):real; |
Blok definicji podprogramów umieszczamy w nagłówku programu pod blokiem definicji i deklaracji (const, type, var)
Parametrem podprogramu (procedury lub funkcji) może być wartość typu:
Prostego – np. byte, char, boolean, real, tydzien, weekend.
Złożonego (np. tablicowy, napisowy, rekordowy) – np. stan_konta, string, str20.
Zakładamy, że typy koloru niebieskie zostały wcześniej zdefiniowane w programie
Przykłady listy parametrów formalnych:
Zakładamy, że type tablica = array[1..100] of integer;
w1,w2,w3 : integer; var max: integer;
t: tablica; n:word ; var suma : longint; var srednia: real;
Wartość funkcji może być typu:
prostego – np. byte, char, boolean, real, dzien_tyg, weekend.
napisowego – np. string, str45.
Zakładamy, że typy koloru niebieskie zostały wcześniej zdefiniowane w programie
Przykłady (tylko nagłówki definicji funkcji):
Function Srednia (t:tablica; n:word): real;
Function Najcieplejszy_dzien (t: Ttemp) : byte;
Funtion Najkrotsze_nazwisko (t: Tnazwiska): str45;
Gdzie:
type tablica = array[1..100] of integer;
{typy tablicowe: Ttemp, Tnazwiska}
str45 = string[45]
Przykład:
Napisać program, który dla danych X I N obliczy wartość XN.
Program Podprogramy_1; Var x,n,i : byte; pom, wynik : longint; Procedure Wprowadz_dane; Begin Write(‘Wprowadz X=’); Readln(X); Write(‘Wprowadz N=’); Readln(N); End; Begin pom := 1; for I := 1 to p do pom := pom*a; Obliczenia := pom End; Begin Wprowadz_dane; wynik := Oblicznia (X,N); writeln (‘Wynik =’,wynik); - wyświetli się wynik zależny od wprowadzonych liczb X,N writeln (‘Wynik =’, Obliczenia(4,3)); - wyświetli się wynik dla X=4 i N=3 czyli 43=64 End. |
---|
Parametry formalne i aktualne:
Parametrem formalnym nazywa się parametr wpisany w nagłówku definicji podprogramu
Przykład:
procedure Nazwa_PROC (p1: byte ; var p2 : word);
function Nazwa_FUN (p1,p2: byte ; p3: word);
Parametrem aktualnym nazywa się parametr wpisany jako argument w wywołaniu podprogramu. Parametrem aktualnym może być: stała, zmienna, wyrażenie, funkcja.
Przykład:
Nazwa_PROC (liczba, kwadrat_liczby);
x:=Nazwa_FUN (12, ZM, X+Y+1);
Należy pamiętać, że parametry formalne rozdzielamy średnikami a aktualne przecinkami
Parametry możemy przekazywać na dwa sposoby:
Przez wartość
Przez zmienną
Przekazywanie parametrów przez wartość (p.wejściowy) – Jeżeli parametrem aktualnym jest zmienna, której w treści podprogramu zostanie przypisana nowa wartość, to po opuszczeniu podprogramu wartość zmiennej nie ulegnie zmianie (będzie taka sama jak przed wywołaniem programu)
Przekazywanie parametrów przez zmienną (p. wyjściowy lub wejściowo-wyjściowy) – Jeżeli parametr aktualny jest poprzedzony słowem VAR, to parametrem aktualnym musi być zmienna. W tym przypadku po zakończeniu podprogramu parametr aktualny będzie miał taką wartość jak odpowiadający mu parametr formalny w momencie zakończenia podprogramu
Przykład:
Procedure PROC (par: byte); Begin par := 25; End; {Wywołanie procedury w programie} zm:=10; PROC (zm); |
Procedure PROC ( var par: byte); Begin par := 25; End; {Wywołanie procedury w programie} zm:=10; PROC (zm); |
---|
Zmienna ma na początku wartość 10 a podprogram przypisuje jej wartość 25. W przypadku przekazania parametru przez wartość (po lewej) zmienna po zakończeniu podprogramu będzie miała wartość 10. W przypadku drugim (po prawej) zmienna będzie miała wartość 25 |
---|
Przykład: Napisać program, który:
umożliwi wprowadzenie danych do dwóch tablic tego samego typu
wyliczy sumy w tablicach (dane1, dane2)
wyświetli na ekranie monitora wprowadzone wartości oraz wyświetli wyniki obliczeń
Program Podprogramy_3; Const maxID = 100; Type tablica = array [1..maxID] of integer; Var dane1, dane2 : tablica; ile1, ile2 : integer; wynik : longint Procedure Wczytaj_Dane (n:integer; var t: tablica); Var i : integer; Begin For i:=1 to n do begin write(‘Wprowadz dane:’); readln (t[i]); end; End; Function Suma_Danych (t:tablica; n:integer) : longint; Var i:integer; suma:longint; Begin suma:=0; for i:=1 to n do suma:=suma+t[i]; Suma_Danych:=suma; End; Procedure Wyswietl_Dane (t: tablica; n:integer); Var i:integer; Begin Writeln(‘Liczba danych: ‘. n); For I :=1 to n do writeln (‘D[‘, I, ’]=’, t[i]); End; Begin Write(‘Wprowadz Ile1:’); Readln (ile1); Wczytaj_Dane (ile1, Dane1); Write(‘Wprowadz Ile2:’); Readln (ile2); Wczytaj_Dane (ile2, Dane1); Writeln (‘==Zestaw 1==’); Wyswietl_Dane (Dane1, ile1); Writeln(‘Suma danych 1= ‘, Suma_Danych(Dane1, ile1)); Writeln (‘==Zestaw 2==’); Wyswietl_Dane (Dane2, ile2); Writeln(‘Suma danych 2= ‘, Suma_Danych(Dane2, ile2)); End. |
---|
Identyfikatory globalne – zdefiniowane w bloku programu. Można je wykorzystać w całym tekście programu (z wyjątkami wynikającymi z lokalności) Program PROG; {-identyfikatory globalne-} Begin … End; |
Identyfikatory lokalne –zdefiniowane w blokach stanowiących część podprogramów oraz parametry formalne. Wykorzystanie ich ograniczone jest do podprogramu, w którym zostały zdefiniowane lub zadeklarowane Program PROC (…); {-identyfikatory lokalne-} Begin … End; |
---|
Przykład:
Program Podprogramy; $\left. \ \begin{matrix} Const\ \ \ \ (\ldots) \\ Type\ \ \ \ \ (\ldots) \\ Var\ \ \ \ \ \ \ \ (\ldots) \\ \end{matrix} \right\}$ definicje i deklaracje globalne Procedure Wczytaj_Dane (n:zakresID; var t: tablica); {-Definicje i deklaracje lokalne-} Begin End; Function Suma_Danych (t:tablica; n:zakresID): longint; {…} Procedure Wyswietl_Dane (t: tablica; n:zakresID); {…} Begin {-blok główny-} … End. |
---|
Obszar działania (zasięg widoczności) identyfikatora to blok programu, w którym identyfikator jest zdefiniowany oraz wszystkie bloki wewnętrzne z wyjątkiem tych bloków wewnętrznych, w których ta sama nazwa została powtórnie zdefiniowana
Przykład:
Program PROG; Var x: integer; y: boolean;
Begin … end. {np. x:=-3; y:=true;} |
---|
Przykład:
Program A
|
---|
Identyfikator zdefiniowany w | Obszar działania identyfikatora |
---|---|
Program A | A B C D E F |
Podprogram B | B D |
Podprogram C | C E F |
Podprogram D | D |
Podprogram E | E |
Podprogram F | F |
Reguły związane z obszarami działania identyfikatora:
Każdy identyfikator można użyć tylko w jego obszarze działania
Dowolny identyfikator może być zdefiniowany co najwyżej jeden raz w swoim obszarze działania
String – typ tablicowy, każdy element typu char. Wartością zmiennej napisowej może być ciąg dowolnych znaków – maksymalnie 255 elementów.
Deklaracja zmiennej napisowej:
Var Identyfikator: string; |
---|
Przykłady:
Napis pusty: ‘ ‘
znak: ‘F’, ‘f’, ‘5’, ‘$’
ciąg znaków: ‘uczelnia’, ‘Politechnika Wrocławska’, ‘>=’
Ograniczenie długości napisów – zmienną typu napisowego możemy ograniczyć co do ilości znaków:
Var
s1: string [25]; napis do 25 znaków
s2: string [135]; napis do 135 znaków
Wprowadzanie i wyprowadzanie wartości zmiennej - wartość zmiennej napisowej można wprowadzać za pomocą read i readln a wyprowadzać za pomocą write i writeln.
s | Length(s) |
---|---|
‘ ‘ ‘@’ ‘ZIM’ ‘Rok 1’ |
0 1 3 5 |
Łączenie napisów (stałych, zmiennych): operator dwuargumentowy+ lub CONCAT (arg1, arg2,…)
Funkcja LENGTH (arg) – funkcja zwracająca długość napisu; liczba znaków w ciągu stanowiącym bieżąca wartość argumentu.
Przykład: Wprowadzenie i wyświetlenie wartości napisu
Program Wyswietlanko_1; Var s: string; i: byte; Begin Write (‘Wprowadź napis’); radln(s); {-wersja 1-} Writeln(‘1. Wprowadzona wartość to: ‘s); {-wersja 2-} Write(‘2.Wprowadzona wartość to: ‘); For i:=1 to length(s) do Write(s[i]); End. |
---|
x: char | UpCase(x) |
---|---|
‘a’ ‘F’ ‘3’ ‘$’ ‘ ‘ |
‘A’ ‘F’ ‘3’ ‘$’ ‘ ‘ |
Funkcja UpCase(arg) – zmienia znaki na wielkie
Przykład: Wprowadzony napis wyświetlić wielkimi literami
Program Wyswietlanko_2; Var s: string; i: byte; Begin Write (‘Wprowadź napis’); radln(s); For i:=1 to length(s) do Write(UpCase ( s[i] )); End. |
---|
Przykład: Wyznaczanie wartości maksymalnej
Program Maksymalna_wartosc; Const max_w=12; max_k=16; Var tab:array [1..max_w, 1..max_k] of integer; max:integer w, k:byte; Begin {-wprowadzanie danych …. -} max:=tab[1,1]; for w:=1 to max_w do for k:=1 to max_k do if max<tab[w,k] then max:=tab[w,k]; {-dalsza część programu-} End. |
---|
Przykład: Ile elementów jest większych od 0
Program Liczba_elementów_dodatnich; Const max_w=12; max_k=16; Var tab:array [1..max_w, 1..max_k] of integer; Ile_dodatnich:integer w, k:byte; Begin {-wprowadzanie danych …. -} Ile_dodatnich:=0; for w:=1 to max_w do for k:=1 to max_k do if tab[w,k]>0 then ile_dodatnich:=ile_dodatnich+1; {-dalsza część programu-} End. |
---|
Przykład: Obliczyć sumę elementów macierzy
Program Suma_elementów; Const max_w=12; max_k=16; Var tab:array [1..max_w, 1..max_k] of integer; suma:integer w, k:byte; Begin {-wprowadzanie danych …. -} suma:=0; for w:=1 to max_w do for k:=1 to max_k do suma:= suma+ tab[w,k] {-dalsza część programu-} End. |
---|
Przykład: Obliczyć sumę elementów dodatnich macierzy
Program Suma_elementów_dodatnich; Const max_w=12; max_k=16; Var tab:array [1..max_w, 1..max_k] of integer; suma:integer w, k:byte; Begin {-wprowadzanie danych …. -} suma:=0; for w:=1 to max_w do for k:=1 to max_k do if tab[w,k]>0 then suma:= suma+ tab[w,k] {-dalsza część programu-} End. |
---|
Visual Basic for Applications (VBA) to język programowania dołączony do wielu aplikacji pracujących pod kontrolą systemu Microsoft Windows. Zalicza się do nich:
pakiet Microsoft Office (tzn. Word, Excel, Access, PowerPoint, Outlook, Project, Binder)
oraz inne program np. AutoCAD, CorelDraw, Corel PhotoPaint, Intellicad I Visio
Prawie identyczny jest interfejs języka, składnia, takie same słowa kluczowe i instrukcje. Różnice sprowadzają się do różnych obiektów (ich metod, właściwości) związanych z aplikacją macierzystą.
Makro – akcja lub zestaw akcji (instrukcji), które można użyć do automatyzacji zadań
VBA pozwala na tworzenie nowych funkcji, nie będących częścią Excela bądź na zapisanie tych funkcji w czytelniejszy sposób. Porównamy więc czytelność funkcji a formuły w VBA na przykładzie zagnieżdżonej instrukcji warunkowej.
Przykład:
Przyznanie pracownikowi premii w zależności od zajmowanego stanowiska
Stanowisko | Premia (procent pensji) |
---|---|
1 | 10% |
2 | 9% |
3 | 7% |
Pozostali | 0% |
Funkcja w Excelu: = jeżeli(stanowisko=1;pensja*0,1; jeżeli (stanowisko=2;pensja*0,09; jeżeli (stanowisko=3;pensja*0,07;0))) |
---|
Formuła w VBA: Function Premia (stanowisko, pensja) If stanowisko = 1 Then Premia = pensja*0,1 Elseif stanowisko = 2 Then Premia = pensja*0,09 Elseif stanowisko = 3 Then Premia = pensja*0,07 Else Premia = 0 End If End Function |
Deklaracja stałych:
Const stała = wartość |
---|
Przykłady:
Const Str1 = „Napis” Const liczba1 = 5 Const Str2 = „Napis”, Liczba2 = 3,4567 |
---|
Typy danych:
PASCAL | VBA | Rozmiar |
---|---|---|
Boolean | Boolean | 1 byte |
String | String | Więcej niż 256 bytes |
Byte | Byte | 1 byte |
Integer | Integer | 2 bytes |
Longint | Long | 4 bytes |
Real Single Double |
Single (single-precision floating-point) |
4 bytes |
Double (double-precision floating-point) |
8 bytes |
Deklaracja zmiennych:
Dim zmienna As typ_danych |
---|
Przykłady:
Dim liczba As Integer Dim x,y As Boolean, z As long - zmienna z traktowana jest jako zmienna nieokreślonego typu Dim Liczba2, inna_wartosc - obie zmienne traktowane są jako zmienne nieokreślonego typu Dim str30 As String*30 |
---|
Przykłady deklaracji tablicy:
Dim Tablica(50) - 51 elementów, pierwszy o indeksie 0 Dim Szachy(8,8) As Integer Dim Macierz3(1 to 5, 4 to 9, 3 to 5) As Byte Dim InnaMacierz() |
---|
W Pascalu instrukcje wejścia I wyjścia to write lub writeln oraz read i readln
W VBA instrukcje te nieco się różnią:
InputBox (Pytanie [,Tytuł][,Domyślny tekst] [,XPos] [, YPos] [,PlikHelp, idxHelp]) |
---|
MsgBox (Komunikat [,Przyciski] [,Tytuł] [,PlikHelp, idxHelp]) |
Elementy w nawiasach kwadratowych nie są wymagane. Są to elementy dodatkowe. Pytanie – tekst wyświetlany w oknie dialogowym Przyciski – przyciski określone za pomocą tekstu bądź numeru Tytuł – tytuł okna wyświetlany w belce tytułowej PlikHelp – plik pomocy wyświetlany, gdy użytkownik naciśnie IdxHelp w oknie dialogowym |
Przykłady:
napis =InputBox( „Wprowadź liczbę”, „Okno wprowadzania”, „1”, 100, 100, „DEMO.HLP”, 10)
klawisz = MsgBox(„Czy chcesz kontynuować?” , vbYesNo + vbCritical + vbDefaultButton2, „Pytanie”, „DEMO.HLP”, 10)
W Pascalu poznaliśmy dwie instrukcje warunkowe: If oraz Case. W VBA jest podobnie:
If warunek Then Instrukcja ElseIf warunek Then Instrukcja … Else Instrukcja End If |
Select Case wyrażenie Case lista_wartości1 Instrukcje… … Case lista_wartościN Instrukcje… Case Else Instrukcje_else … End Select |
---|
W VBA tak jak i w Pascalu mamy instrukcje While, Repeat i for z drobnymi różnicami:
While warunek Instrukcje Wend |
For zm = wp To wk [Step krok] Instrukcje Next [zm] |
---|---|
Do (While|Until) warunek Instrukcje Loop |
Do Instrukcje Loop (While | Until) warunek |
W VBA odpowiednikiem procedury jest Sub a odpowiednik funkcji jest taki sam (function)
Procedura: Sub identyfikator (parametry) … End Sub |
Funkcja: Function identyfikator (paramtetry) As typ_wartości … End Function |
---|
Rodzaje deklarowania parametrów formalnych w podprogramach
przekazywanie parametru przez wartość
ByVal zmienna As typ_danych
przekazywanie parametru przez zmienną
ByRef zmienna AS typ_danych
zmienna As typ_danych bo automatycznie jest przez zmienną
Przykład:
Sub Proc(arg1 as byte, ByVal arg2 as Integer, ByRef arg3 as string)
Wywołanie procedury
Call identyfikator_procedury (parametry)
Cells(2,3).Value = wartość
Range(„C2”).Value = wartość
zm=Workbooks(„Plik”).Sheets(„Arkusz1”).Range(„A1:D5”).Value
Range (“A1”) | Komórka A1 |
---|---|
Range (“A1:B5”) | Komórki od A1 do B5 |
Range (“C5:D9, G9:H16”) | Wybór kilku obszarów |
Range (“A:A”) | Kolumna A |
Range (“1:1”) | Wiersz 1 |
Range (“A:C”) | Kolumny od A do C |
Range (“1:5”) | Wiersze od 1 do 5 |
Range (“1:1, 3:3, 8:8”) | Wiersze 1, 3 i 8 |
Range (“A:A, C:C, F:F”) | Kolumny a, c i f |
” ” | Wartość napisowa |
---|---|
‘ | Rozpoczęcie komentarza w wierszu |
_ | Łącznik wiersza podzielonego na kilka lini |
& | Łącznik tekstu i wartości numerycznej |
Option Explicit
Const stała = wartość ‘ lokalna stała (bo domyślnie jest Private)
Public Const stała = wartość
Private Const stała = wartość
Dim zmienna As typ danych ‘ lokalna zmienna (bo domyślnie jest Private)
Public zmienna As typ danych
Private zmienna As typ danych
[Public/Private] Sub identyfikator (parametry)
….
End Sub
[Public/Private] Function identyfikator (parametry) As typ_danych
….
End Function
Len (s As String) As Long
długość napisu s; liczba znaków w ciągu stanowiącym bieżącą wartość argumentu.
Left (s As String, ile As Byte) As String
Pierwsze ile znaków licząc od początku ciągu tekstowego s.
Mid (s As String, od_znaku As Byte, ile_znaków As Byte) As String
Napis składający się z określonej liczby znaków (ile_znaków) napisu s począwszy od wskazanego przez od_znaku.
Right (s As String, ile_znaków As Byte) As String
Napis składający się z określonej liczby znaków napisu s licząc od końca tego napisu.
UCase (s As String) As String
napis s po dokonaniu w nim konwersji wszystkich małych liter na wielkie.
LCase (s As String) As String
napis s po dokonaniu w nim konwersji wszystkich wielkich liter na małe.