Ogólne wiadomości o językach programowania dr inż. Zbigniew Rudnicki 1 Działanie komputera to realizacja programów wykonywalnych (*.exe, *.com) w postaci binarnej (w kodzie procesora) Komputer działa wykonując programy, które są ciągami rozkazów zapisanych w cyfrowym kodzie procesora bardzo nieczytelnym dla człowieka 2 1
Języki i narzędzia programowania Język niskiego poziomu - ASSEMBLER - pozwala zapisywać rozkazy dla procesora tylko trochę wygodniej - przy użyciu mnemonicznych skrótów słów angielskich. Języki wysokiego poziomu (Np.: Basic, Fortran, C, Pascal, Java i in) są wygodne dla programistów lecz wymagają translacji - tłumaczenia poleceń na kod procesora czyli postać wykonywalną (executable). Pakiety RAD - (Rapid Application Development - szybkie tworzenie aplikacji ) - umożliwiają programowanie wizualne i obiektowe (np.: Delphi, C++Builder, JavaBuilder, Visual Basic i in.) Pakiety CASE - Computer Aided Software Engineering - komputerowe wspomaganie programowania już od fazy koncepcji 3 Translacja Translacja to komputerowe tłumaczenie programów zapisanych w językach wysokiego poziomu na kod binarny procesora (postać wykonywalną) 4 2
Translatory Translator to program wykonujący takie tłumaczenia Translatory dzielą się na: interpretatory i kompilatory Interpretator (interpreter) tłumaczy i wykonuje na bieżąco wpisywane instrukcje Kompilator tłumaczy całość programu po czym następuje dołączanie procedur bibliotecznych w procesie konsolidacji (linkowania) i wytwarzanie postaci binarnej (pliku typu.exe lub.com) 5 Języki programowania Istnieją setki różnych języków programowania, różnią się obszarem zastosowań oraz poziomem - im wyższy poziom języka tym jest on dogodniejszy dla człowieka. Wszystkie one są językami formalnymi to znaczy mają ściśle określone: elementy (czyli alfabet języka), reguły gramatyczne tworzenia z nich poprawnych wyrażeń (składnia - syntaktyka) oraz ściśle określone znaczenie tych wyrażeń (semantykę - ang.: semantics) czyli sposób ich interpretowania i realizowania przez komputer. 6 3
Elementy języków Języki programowania różnią się między sobą, zazwyczaj mają jednak zdefiniowane takie elementy jak: zbiór znaków dopuszczalnych reguły tworzenia nazw zmiennych i in.struktur danych typy i postać danych (stałych i zmiennych) i zasady ich deklarowania zbiór tzw. słów kluczowych (nazw zastrzeżonych) operatory działań arytmetycznych, logicznych i in. reguły budowy wyrażeń postać poszczególnych instrukcji (prostych i złożonych) reguły tworzenia bloków funkcyjnych i procedur strukturę całości programu 7 Struktury danych. Stałe. STAŁE - czyli literały - literalnie (dosłownie) przedstawiają konkretne wartości danych różnych typów, na przykład: -652.74 (liczba) "Kowalski" (tekst) [3.5, 12.0, -4.2, 8.1] (wektor) Kowalski 1964-12-08 ul. Sienkiewicza 30 30-031 Kraków (rekord) 8 4
Komputer to nie kalkulator Każdy program powinien być tak napisany aby mógł działać wielokrotnie, dla różnych zestawów danych W tym celu unikamy umieszczania liczb w programie a zamiast nich używamy nazw zmiennych (czyli symbolicznej reprezentacji danych) Konkretne wartości tych zmiennych mogą być pobierane z urządzeń zewnętrznych (np z klawiatury) lub z plików dyskowych albo otrzymywane w wyniku działania programu 9 Zmienne Należą do podstawowych elementów każdego programu i pozwalają wielokrotnie powtarzać operacje dla różnych wartości danych Każda zmienna ma: nazwę typ (określający rodzaj i zakres wartości oraz strukturę danych) wartość - konkretną w danym momencie lecz mogącą ulec zmianie wskutek działań programu 10 5
Symboliczna reprezentacja struktur danych ZMIENNE - stanowią symboliczne przedstawienie przez NAZWY różnych struktur danych, na przykład: DELTA - nazwa zmiennej liczbowej reprezentującej wyróżnik równania kwadratowego NAZWISKO - nazwa zmiennej tekstowej WSP - nazwa wektora WSP(1), WSP(2), WSP(3),... nazwy pól rekordu (zmiennej rekordowej): Nazwisko Dat_ur Adres Kod Miasto 11 Deklaracje zmiennych Większość języków programowania wymaga umieszczenia na początku programu DEKLARACJI ZMIENNYCH czyli wykazu nazw zmiennych jakie będą używane i podania jakich typów mają być te zmienne Jest to potrzebne aby komputer zarezerwował dla każdej zmiennej programu odpowiednie miejsce w pamięci - zgodnie z strukturą danych jaką ta zmienna reprezentuje 12 6
Domyślne ( defaultowe ) ustalenia W wielu językach (np. Basic, Fortran) - dla wygody użytkownik może pomijać definiowanie np. typów zmiennych co jest równoznaczne ze zgodą na zastosowanie domyślnych, najczęściej używanych ustaleń 13 Struktura dużych programów Duże programy zawierają przeważnie: nagłówek nazwy dołączanych bibliotek podprogramów deklaracje typów zmiennych, a czasem i definicje tych typów podprogramy typu funkcyjnego (funkcje) podprogramy typu proceduralnego (procedury) segment główny programu linię kończącą program 14 7
Potrzeba podejścia obiektowego Programy graficzne w Ms Windows wykorzystują standardowe graficzne obiekty interfejsu, które dzięki obiektowemu stylowi programowania mogą być wykorzystywane w różnych programach (reusable) Obiektowy styl programowania sprzyja porządkowi w dużych programach i zapobiega kolizjom Programista przypisując obiektowi cechy i funkcje (t zw. metody) nie musi w sposób algorytmiczny opisywać wszelkich możliwych zdarzeń i interakcji między obiektami Projektowanie i programowanie różni się jednak znacznie od podejścia proceduralnego i może być trudne 15 Programowanie obiektowo-zdarzeniowe OOP - Object-Oriented Programming Dane opisujące cechy obiektów są zgrupowane w postaci struktur (rekordów) Oprócz CECH, obiekty mają przypisane tzw. METODY - czyli funkcje i procedury do wykonywania operacji na obiektach i ich cechach Cechy obiektów mogą być powiązane RELACJAMI (jak w bazach danych) Metody mogą być uaktywniane przez ZDARZENIA lub KOMUNIKATY przesyłane od innych obiektów Konkretne obiekty są reprezentantami KLAS obiektów Klasy tworzą hierarchie - dziedzicząc pewne cechy 16 8
PODSTAWY PROGRAMOWANIA w języku BASIC dr inż. Zbigniew Rudnicki 17 Basic BASIC (Beginner's All-purposeSymbolic Instruction Code) opracowano w roku 1964 na uniwersytecie w Dartsmouth jako język do nauki programowania Współcześnie ponad 100 różnych wersji, m.in.: QB64 - wersja QBASIC dla Ms Windows (32-bit i 64-bit) do programowania wizualnego i obiektowego dla środowiska Ms Windows: Ms Visual Basic w pakiecie Visual Studio dodatek do innych programów jak Autocad (2000), Ms Office (z VBA czyli Visual Basic for Applications) i in. 18 9
Ms QBASIC Ms QBASIC to wersja języka BASIC niegdyś dodawana standardowo do systemu DOS (od wersji 5.0). Pozwala programować strukturalnie, definiować własne funkcje i procedury, stosować instrukcje złożone zawierające bloki instrukcji prostych a także m.in: generować rysunki, dźwięki i melodie, wykorzystywać okienka i zdarzenia; obsługiwać interfejs szeregowy i t d. 19 Zbiór znaków języka Qbasic: litery alfabetu angielskiego (A-Z, a-z) cyfry dziesętne: (0-9) cyfry szesnastkowe: (A-F, a-f) znaki działań arytmetycznych: +, -, * (mnożenie), / (dzielenie), \ (dzielenie całkowite), ^ (potegowanie) kropka dziesietna przed częścią ułamkową. nawiasy - tylko okrągłe: ( ) operatory relacji: >, <, >=, <=, =, <> początek komentarza: ' (apostrof) znaki sterujące postacią wydruku:, (przecinek), ; (średnik) znak oddzielający instrukcje w jednej linii: : (dwukropek) znaki na końcu nazw, sygnalizujące typ zmiennej:!(single), #(double), $(string), %(integer), &(long) 20 10
Nazwy zmiennych Mogą zawierać tylko litery angielskie, cyfry oraz znak podkreślnika a na końcu jeden z symboli sygnalizujących typ zmiennej:!(single), #(double), $(string), %(integer), &(long) Pierwszym znakiem nazwy musi być litera angielska BASIC nie rozróżnia dużych i małych liter Słowa kluczowe powinny być pisane małymi literami a jeśli są poprawne to zostaną automatyczne przetworzone na duże litery Zamiast słowa PRINT można wpisywać pytajnik [?] 21 8 podstawowych typów poleceń: 1) Wprowadzanie (wczytywanie) danych = wartości danych pobierane z urządzenia wejściowego lub z pliku mają być przesłane do odpowiednich zmiennych 2) Podstawianie (przypisywanie) = wartość podanego wyrażenia ma być wyznaczona i przesłana do zmiennej (przypisana zmiennej) 3) Wyprowadzanie wyników i objaśnień na ekran lub drukarkę lub do pliku,... 4) Instrukcja warunkowa Jeżeli... to - zależnie od spełnienia lub nie spełnienia określonego warunku - nastąpi wybranie jednego z dwu wariantów Dwa typy PĘTLI dla powtarzania czynności: 5) pętla typu Dla... 6) pętla typu Podczas... Wczytaj A, B A=A+2*B Drukuj A, B Tak A>100 Nie 7) Definiowanie własnych podprogramów i funkcji 8) Wywoływanie podprogramów (funkcji i procedur) 22 11
QBASIC Podstawowe słowa kluczowe REM (od remark) lub apostrof [ ] rozpoczyna linię komentarza CLS - (CLear Screen) - czyści ekran INPUT - wprowadza (z zewnątrz) wartości zmiennych LET - (niech) przypisuje zmiennym wartości wyrażeń PRINT - wyświetla teksty i wartości wyrażeń IF... THEN... ELSE... ENDIF - instrukcja warunkowa FOR... NEXT... - pętla powtarzająca operacje określoną liczbę razy WHILE... WEND - pętla powtarzająca operacje tak długo jak spełniony jest pewien warunek FUNCTION... ENDFUNCTION - definicja funkcji SUB... ENDSUB - definicja procedury 23 Przykład algorytmu: -Rozwiązywanie równania kwadratowego Część 1 - wykaz potrzebnych zmiennych: A, B, C - dla przechowywania liczb rzeczywistych - współczynników równania, DELTA - dla wartości wyróżnika, X1, X2 - dla wartości wyliczonych rozwiązań 24 12
ALGORYTM ROZWIĄZYWANIA RÓWNANIA KWADRATOWEGO Część 2 - opis operacji: 1) wyczyść ekran 4) Wyświetl napis "Rozwiazywanie rownania kwadratowego:" 5) wyświetl napis "A=" i czekaj na wartość dla A 6) wyświetl napis "B=" i czekaj na wartość dla B 7) wyświetl napis "C=" i czekaj na wartość dla C 8) oblicz B * B - 4 * A * C i wstaw do zmiennej DELTA 9) JEŚLI Delta < 0 TO wyświetl "Brak pierwiastkow rzeczywistych" W PRZECIWNYM PRZYPADKU wykonuj to poniżej x1 = (-B - SQR(Delta)) / (2 * A) x2 = (-B + SQR(Delta)) / (2 * A) wyświetl "x1="; wartość zmiennej x1, " x2="; wartość zmiennej x2 KONIEC instrukcji "JEŚLI" 25 ALGORYTM ROZWIĄZYWANIA RÓWNANIA KWADRATOWEGO - Schemat blokowy 26 13
27 Qbasic - proste typy zmiennych 28 14
Qbasic - Deklarowanie typu zmiennych a) w najprostszych przypadkach można - pomijać deklaracje zmiennych liczbowych - wtedy domyślnie stosowany jest typ SINGLE 29 30 15
31 Operatory i wyrażenia logiczne Wszystkie wyrażenia posiadające wartości liczbowe są traktowane jak wyrażenia logiczne a wartości: FAŁSZ gdy wyrażenie = 0 PRAWDA gdy wyrażenie 0 Operatory relacji: <, >, >=, <=, =, <> Operatory logiczne: NOT - nie AND - i OR - lub 32 16
Podstawowe instrukcje języka QBASIC REM to jest linia komentarza - objaśnień programu to też jest linia komentarza (rozpoczęta apostrofem) CLS - czyści ekran PRINT - wyświetla teksty i wartości wyrażeń INPUT - wprowadza (z zewnątrz) wartości zmiennych LET - przypisuje zmiennym wartości wyrażeń IF... THEN... ELSE... ENDIF - instrukcja warunkowa FOR... NEXT... - pętla powtarzająca operacje określoną liczbę razy WHILE... WEND - pętla powtarzająca operacje tak długo jak spełniony jest pewien warunek 33 CLS - czyszczenie ekranu Większość programów dobrze jest zacząć od tej komendy aby oczyścić ekran. INPUT - wprowadzanie danych Instrukcja ta ma postać: INPUT "tekst żądania danych"; zmienna np.: INPUT "podaj wartość siły:"; sila lub INPUT "siła="; sila Tekst zawarty w cudzysłowach będzie wyświetlony aby użytkownik wiedział, że ma wpisać odpowiednią wartość. Wpisana wartość zostanie wstawiona do zmiennej, której nazwę podano w tej instrukcji. 34 17
Instrukcja PRINT - wyprowadzanie informacji na ekran PRINT wyrażenie, ; ;, element występujący po średniku będzie na ekranie doklejony bez odstępu do swego poprzednika, element występujący po przecinku będzie na ekranie wyświetlany od początku kolejnej 14-to znakowej strefy czyli z większym odstępem. jeśli na końcu instrukcji PRINT jest średnik lub przecinek to następna instrukcja PRINT będzie w tej samej linii wydruku wyprowadzać dalszy ciąg a jeśli nie ma to od nowej linii. 35 Instrukcja PRINT c.d. Przykłady: Pamiętaj, że w instrukcji PRINT: to co w cudzysłowach - będzie dokładnie przekopiowane na ekran jako tekst to co bez cudzysłowów - będzie potraktowane jako wyrażenie algebraiczne, którego wartość ma być obliczona i wyświetlona zamiast wpisywać słowo PRINT wystarczy wpisać pytajnik:? od przecinków i średników zależą odstępy między wyświetlanymi elementami 36 (jak opisano wyżej) 18
LPRINT drukowanie Aby wyprowadzać wyniki na drukarkę (zamiast na ekran) wystarczy zastąpić słowo PRINT słowem LPRINT. Po za tym budowa instrukcji LPRINT jest identyczna jak PRINT 37 Wyprowadzanie informacji według zadanego formatu PRINT USING szablon formatu"; lista na przykład: x = 5: y = SQR(x) PRINT x, y PRINT USING "#####.####"; x, y PRINT USING "#####.####"; x; y --------------------- 5 2.236068 5.0000 2.2361 5.0000 2.2361 - w tym przypadku przecinek i średnik na liście działają tak samo 38 19
LET - obliczenia i nadawanie wartości zmiennym Instrukcja LET zwana instrukcją przypisania lub instrukcją podstawiania może mieć dwie postacie: LET zmienna = wyrażenie słowo LET można pomijać więc krótsza jest postać: zmienna = wyrażenie Po polsku: "Niech zmienna otrzyma wartość wyrażenia". przykłady: X = 5 K = K+1 ZETA = (SQR(a^2-INT(a))+.56) / (SIN(a-b)+2*(a^2-LOG(b))^2) Najpierw obliczana jest wartość wyrażenia (zapisanego po prawej) a potem podstawiana do zmiennej (po lewej). 39 IF... THEN... ELSE... ENDIF - rozgałęzienie warunkowe ma kilka postaci: a) --------------------------------------- IF wyrażenie THEN instrukcje1 b) ---------------------------------------------------------- IF wyrażenie THEN instrukcje1 ELSE instrukcje2 c) ---------------------------------------------------------- IF wyrażenie THEN instrukcje1... ELSE instrukcje2... ENDIF gdzie: wyrażenie to dowolne wyrażenie o wartości liczbowej Po polsku: "Jeśli wyrażenie jest różne od zera to wykonaj instrukcje1 w przeciwnym razie wykonaj instrukcje2" 40 20
FOR...NEXT - pętla z licznikiem FOR zm = w1 TO w2 STEP w3 instrukcje NEXT zm gdzie: zm - zmienna, w1, w2, w3 - wyrażenia Przykład obliczania kwadratów liczb: 2, 2.5, 3, 3.5, 4, 4.5: CLS PRINT "Obliczanie kwadratów liczb" PRINT "liczba","kwadrat" FOR y=2 TO 4.5 STEP 0.5 PRINT y, y^2 NEXT y Znaczenie instrukcji FOR.. NEXT jest w tym przypadku następujące: " Dla Y zmieniającego się od 2 do 5.5 z krokiem co 0.5 powtarzaj wykonywanie instrukcji zapisanych poniżej aż do NEXT Y czyli w tym przypadku wyświetlaj Y i Y2 " 41 Pętla typu dopóki : WHILE warunek... WEND - działa tak długo dopóki warunek jest spełniony (prawdziwy) 42 21
Pętla typu wykonuj... aż do... : DO... LOOP UNTIL warunek - kończy działanie gdy warunek (stopu) stanie się prawdziwy 43 Odczyt z pliku i zapis do pliku Zarówno tworzenie pliku z wynikami, jak i wykorzystanie istniejącego pliku z danymi wymaga rozpoczęcia od instrukcji OPEN, która tworzy nowy lub otwiera istniejący plik i przypisuje mu identyfikator: OPEN nazwa_pliku FOR rodzaj_operacji AS identyfikator nazwa_pliku - może zawierać ścieżkę z nazwą dysku i folderów, rodzaj_operacji - słowo: INPUT lub OUTPUT lub APPEND identyfikator - #1, lub #2, itd Po otwarciu pliku instrukcje wprowadzania lub wyprowadzania muszą wykorzystywać nadany plikowi identyfikator np: INPUT identyfikator ; zmienna np.: INPUT #1; x PRINT identyfikator ; wyrażenia np.: PRINT #2; y, y^2 a na koniec plik musi być zamknięty poleceniem CLOSE identyfikator 44 22
Pętla, instrukcja warunkowa, drukowanie do pliku dyskowego z formatowaniem CLS PRINT "Drukowanie wartości x, y do pliku WYNIKI.TXT" PRINT "Funkcja: sinusoida z obciętą częścią ujemną" 'Najpierw otwarcie pliku dla wyprowadzania jako kanału 1 OPEN "A:\WYNIKI.TXT" FOR OUTPUT AS #1 'Pętla:"Dla x od 0 do 20 co 0.1 powtarzaj aż do NEXT" FOR x = 0 TO 20 STEP 0.1 a = sin(x) '=== instrukcja JEŚLI...TO...INACZEJ... KONIEC IF a<0 THEN y=0 ELSE y=a ENDIF PRINT #1, USING "######.####"; x; y NEXT y 45 CLOSE #1 Operowanie na dwu plikach Przykład programu, który wczytuje liczby z jednego pliku i zapisuje liczby oraz ich kwadraty do drugiego pliku. 46 23
Podprogramy 47 Definiowanie podprogramów 1) Definiowanie funkcji: FUNCTION nazwa (parametry)..... END FUNCTION 2) Definiowanie procedury: SUB nazwa (parametry).... END SUB 48 24
Definiowanie i wywołanie własnej funkcji 49 Definiowanie i wywoływanie własnej procedury 50 25