1. Opisz i omów język programowania Turbo Pascal.
Pierwszy opis języka Pascal opublikował w 1971 r. Niklaus Wirth. Pomyślany on był jako język służący do nauki programowania. Pascal stosowany początkowo do celów edukacyjnych stał się profesjonalnym narzędziem informatycznym. Od tego czasu pojawiło się wiele wersji tego języka, znacznie odbiegających od pierwowzoru, łamiących nawet strukturalizm języka. Międzynarodowa Organizacja Normalizacyjna ISO przedstawiła w 1980 roku celem ujednolicenia propozycję standardu Pascala. Produkt firmy Borland International Inc. - Turbo Pascal odbiega od niego znacznie.
Każdy program źródłowy składa się z:
Jednostek leksykalnych (ciągów symboli podstawowych, tj. małych i dużych liter alfabetu angielskiego wraz ze znakami podkreślenia, cyfr dziesiętnych i szesnastkowych, znaków specjalnych i dwuznaczników nie zawierających odstępu),
Odstępów (spacje, tabulacje, znaki zmiany wiersza i komentarze).
Turbo Pascal to znacznie więcej niż szybki i efektywny kompilator. Firma Borland oferuje użytkownikom zintegrowane środowisko IDE (Integrated Development Environment). Zapewnia ono środki do prowadzenia:
edycji tekstu programu,
jego kompilacji i linkowania,
uruchamiania programu i poszukiwania błędów.
Główny ekran Turbo Pascala składa się z trzech części:
linii głównego menu w górnym wierszu ekranu (zawiera podstawowe opcje systemu ) ,
pulpitu roboczego (desktop) wypełniającego większość ekranu,
linii statusu w dolnym wierszu ekranu, zawierającej informacje o operacjach wykonywanych po naciśnięciu pewnych klawiszy lub ich kombinacji (tzw. hotkey'e).
Aby uruchomić Turbo Pascala należy napisać:
tpx IDE w trybie procesora protected mode (min. i286),
turbo IDE w trybie procesora real mode.
Sposób w jaki jest uruchamiany system zależy od jego konfiguracji zapamiętanej w odpowiednim zbiorze.
Linia głównego menu
Aby uaktywnić główną linię menu należy nacisnąć <F10>. Wszystkie opcje menu posiadają kolejne menu (menu podrzędne, zstępujące, rozwijalne ang. pull down menu). Zmiana opcji (nawigacja po menu) następuje przez przesunięcie podświetlenia (inwersji) za pomocą klawiszy -> <-- na odpowiednie pole. Rozwinięcie opcji następuje przez:
naciśnięcie <Enter> po uprzednim wybraniu opcji,
naciśnięcie klawisza z wyróżnioną (rozjaśnioną) literą w nazwie opcji (jeżeli aktywne jest główne menu),
naciśnięcie kombinacji <Alt-Wyróżniona_Litera> (jeżeli jesteśmy w trybie edycji).
W obrębie menu podrzędnego uaktywnianie podopcji następuje przez:
podświetlenie odpowiedniej opcji( ) i naciśnięcie <Enter>,
naciśnięcie klawisza z wyróżnioną literą.
Po rozwinięciu menu podrzędnego możliwa jest nawigacja pozioma za pomocą <- i ->.
Powrót do trybu edycji następuje za pomocą <Esc>.
Menu główne zawiera 10 pozycji. Poszczególne opcje to:
File - komendy zarządzające zbiorami,
Edit - komendy edytora: przemieszczanie bloków, undo, redo,
Search - poszukiwanie i zamiana tekstów, poszukiwanie błędów,
Run - wykonanie programu (także krok po kroku),
Compile - kompilacja na dysk lub do pamięci,
Debug - środki uruchomieniowe: wyznaczanie wartości wyrażeń itp,
Tools komendy śledzenia i narzędzia zainstalowane przez użytkownika,
Options - ustawianie opcji edytora, kompilatora, myszy itp,
Windows otwieranie i ustalanie wyglądu okien,
Help - pomoc.
Etapy budowy programu
Pierwszy etap nie wymaga komputera. Co więcej komputer jest w jego realizacji szkodliwy. Obejmuje on:
sformułowanie zagadnienia, które mamy rozwiązać (np. rozwiązanie liniowego układu równań),
określenie danych i wyników (macierz układu równań, wektor prawych stron, wektor rozwiązań),
wybór algorytmu rozwiązania (eliminacja Gaussa, wzór wyznaczników),
podział zadania na bloki funkcjonalne (wprowadzanie danych, rozwiązanie, wydruk wyników),
zapis algorytmów w języku programowania,
"ręczne" przetestowanie algorytmów na małych zadaniach.
Drugi etap to po prostu edycja, czyli przepisanie tego co mamy na kartce. Do tego niezbędny już jest Turbo Pascal.
Etap trzeci to kompilacja, czyli sprawdzenie, czy napisany tekst jest w zgodzie z wymaganiami języka programowania. Najczęściej pojawia się tu tłum
błędów kompilacji, które trzeba pracowicie poprawiać. Kompilator "oszczędza" nas i za każdym razem sygnalizuje tylko jeden błąd.
Etap czwarty czyli wykonanie. Najczęściej pozornie poprawny program sygnalizuje różne błędy podczas wykonania, na przykład słusznie buntuje się przy próbie dzielenia przez zero. Gdy już uporamy się z błędami wykonania czeka nas najtrudniejsze zadanie.
Etap piąty polegający na testowaniu programu. Jeżeli program czasami daje poprawne wyniki a czasami błędne to trzeba niestety stwierdzić, że jest to zły program. Poszukiwanie źródła błędów bez odpowiednich narzędzi może przypominać poszukiwanie igły w stogu siana.
IDE "przeszkadzając" w pierwszym etapie jest idealnym narzędziem do realizacji czterech ostatnich, dając swojemu użytkownikowi komfort, czyli po prostu cztery w jednym:
profesjonalny edytor z podpowiadaczem Pascala,
kompilator pokazujący precyzyjnie miejsce i rodzaj błędu,
środki uruchomieniowe określające rodzaj i miejsce wystąpienia błędu wykonania,
narzędzia do testowania i śledzenia wykonania programu.
Wyrażenia
W Turbo Pascalu istnieją wyrażenia. Składają się one z zapisanych w logicznej kolejności :
operatorów,
operandów (argumentów operacji):
stałych,
zmiennych,
nazw funkcji ( nazewników) .
Wyrażenia to po prostu sekwencje operacji do wykonania, zapisane w języku programowania. Jest to zapis pewnego algorytmu (wzoru) obliczania określonej wartości. Nie stanowią one samoistnych instrukcji, ale podobnie jak w innych językach programowania ich część składową.
Podprogramy czyli procedury i funkcje
Odpowiedzmy sobie najpierw na pytanie jak umieszczony jest w pamięci komputera nasz program napisany w Pascalu. Pamięć możemy sobie wyobrazić
jako uporządkowany liniowo ciąg bajtów. Do każdego elementu pamięci jest możliwy dostęp przez podanie odpowiedniego adresu. Każdy adres składa się z dwóch części:
adresu segmentu (segment to ciągły obszar pamięci o długości do 64KB),
adresu względnego (przesunięcia, offsetu) określającego odległość danej komórki od początku segmentu.
Procedurą lub funkcją nazywamy wyodrębnioną część programu (można ją nazwać podprogramem), stanowiącą pewną całość, posiadającą jednoznaczną nazwę i ustalony sposób wymiany informacji z pozostałymi częściami programu. Procedury i funkcje stosowane są do:
wykonywania czynności, które wykorzystane mogą być w różnych programach,
wykonywania czynności wielokrotnie powtarzanych przez dany program.
W przypadku programów rozwiązujących obszerne problemy, w których wyróżnić można kilka podproblemów, zastosowanie procedur. i funkcji umożliwia opracowanie każdego z tych podproblemów oddzielnie. Wystarczy wówczas dla zbudowania programu zestawić procedury i funkcje oraz odpowiednio je połączyć. Stosowanie procedur i funkcji umożliwia także bardziej efektywne wykorzystanie pamięci (dynamiczny przydział pamięci), gdyż obiektom określonym wewnątrz procedury lub funkcji pamięć przydzielana jest dopiero z chwilą wywołania do przetwarzania danej procedury lub funkcji, a odbierana po wyjściu z niej. Podprogramy powinny być możliwie jak najsłabiej związane z danym programem (jest to miara ich uniwersalności). Realizację tego umożliwi nam odpowiednio skonstruowany interfejs do nich.
Opis funkcji i procedur
Opis funkcji lub procedury w programie następuje za pomocą definicji. W przypadku procedur zachodzi także niekiedy konieczność ich zadeklarowania.
W nagłówku definicji procedury lub funkcji podaje się identyfikator (przyporządkowany danemu algorytmowi) oraz ewentualnie parametry formalne, tj. pomocnicze nazwy parametryzujące algorytm. W przypadku funkcji w nagłówku określa się także typ wyniku. Po nagłówku podaje się także treść procedury lub funkcji. Treść ta składa się z części opisowej, w której definiuje i deklaruje się obiekty lokalne wewnątrz danej procedury lub funkcji oraz z części operacyjnej (mającej zawsze postać instrukcji złożonej), która zawiera sekwencję instrukcji powodującą wykonanie czynności przewidzianych przez dany algorytm. Czynności te mogą być wykonywane zarówno na obiektach lokalnych, jak i na obiektach nielokalnych (zdefiniowanych lub zadeklarowanych na zewnątrz procedury lub funkcji). Obiekty nielokalne występują w treści procedury lub funkcji explicite bądź są do niej przekazywane przez parametry.
Definicje procedury i funkcji mają zatem następujące postacie:
procedure nazwa_procedury ( lista_parametrów_formalnych); |
function nazwa_funkcji (lista_parametrów_formalnych). typ_wyniku; |
przy czym w obu przypadkach część opisowa i lista parametrów formalnych (ujęta w nawiasy) jest opcjonalna. Część opisowa procedury lub funkcji może
zawierać takie same elementy jak część opisowa programu, z wyjątkiem deklaracji modułów. Lista parametrów formalnych zawiera deklaracje parametrów formalnych, przy czym poszczególne deklaracje oddziela się średnikami. Określa ona także sposób, w jaki poszczególne parametry formalne
zostaną zastąpione parametrami aktualnymi (argumentami) podczas wywołania danej procedury lub funkcji. W przypadku funkcji w ciągu instrukcji musi
wystąpić co najmniej jedna instrukcja przypisana postaci:
nazwa_funkcji := wyrażenie |
powodująca przypisanie wartości pod nazwę funkcji, przy czym co najmniej jedna z tych instrukcji musi być wykonana po wywołaniu funkcji. Typ wyniku funkcji określony jest za pomocą identyfikatora typu lub słowa kluczowego string.
Wywołanie funkcji następuje za pomocą podania nazwy funkcji jako argumentu dowolnego wyrażenia. Jeśli funkcja zawiera parametry, to przy wywołaniu
bezpośrednio za nazwą funkcji podaje się w nawiasach listę argumentów, przy czym poszczególne argumenty oddziela się przecinkami. Liczba argumentów musi być przy tym zgodna z liczbą parametrów formalnych, a ponadto typ każdego argumentu musi być zgodny z typem odpowiadającego mu parametru formalnego. Argumenty odpowiadające parametrom formalnym przekazywanym przez zmienną muszą być zmiennymi, a argumenty odpowiadające parametrom formalnym przekazywanym przez wartość mogą być wyrażeniami.
Przykładem najprostszego podprogramu może być na przykład procedura wypisująca na ekranie określony tekst:
procedure Drukl;
begin
WriteLn(' Pierwsza procedura' ) { wypisanie linii tekstu }
end;
2. Wymień i krótko opisz języki pokrewne z Turbo Pacalem
Język programowania to usystematyzowany sposób przekazywania komputerowi poleceń do wykonania.
Język programowania pozwala programiście na precyzyjne przekazanie maszynie, jakie dane mają ulec obróbce i jakie czynności należy podjąć w określonych warunkach.
Języki programowania klasyfikuje się zależnie od tego, do jakiego paradygmatu lub paradygmatów programowania najlepiej się nadają:
imperatywne
obiektowe
funkcyjne
logiczne
i inne
Do najpopularniejszych języków programowania pokrewnych z Turbo Pascalem możemy zaliczyć:
Algol
Algorithmic Language, język programowania, który odegrał ważną rolę w historii informatyki. Od momentu powstania, przez około 20 lat język, lub jego dialekty, był standardem opisu algorytmów w publikacjach naukowych.
Prace nad Algolem rozpoczęto w drugiej połowie lat 50., formalną specyfikację języka opublikowano w raporcie Algol 58, następnie język rozwinięto w raportach Algol 60 i Algol 68. Te właśnie wersje zdobyły uznanie informatyków. O ile Algol 58 oparty był na Fortranie i brakowało w nim wielu niezbędnych dla programisty konstrukcji, Algol 60 stanowił przełom w dziedzinie języków programowania.
Algol 60 był pierwszym językiem zaprojektowanym we współpracy międzynarodowej - w pracach nad nim uczestniczyli między innymi Peter Naur i John Backus. Do opisu języka wykorzystano stworzoną przez Backusa podczas projektowania Fortranu notację BNF, zmodyfikowaną przez Naura. Raport o Algolu 60 opublikowano w maju 1960, poprawiono go w 1962. Na podstawie języka Algol 60 Niklaus Wirth stworzył Algol W, który posłużył mu następnie do zdefiniowania Pascala.
W Algolu 60 wprowadzono:
Algol 60 miał również wady, które zdecydowały o tym, że nie odniósł sukcesu przemysłowego. Nie określono w nim żadnych instrukcji wejścia/wyjścia, pozostawiając je konkretnym implementacjom, które na dodatek były utrudnione przez jego elastyczność i niezależność od sprzętu. Brak było przekazywania parametrów przez zmienną (lub referencję). Nie uzyskał też wsparcia firm komputerowych (głównie ze strony dominującego na rynku w latach 60. IBM, który zainteresowany był rozwojem Cobola i PL/I).
Algol 68 był rozwinięciem idei Algolu 60, wprowadzono w nim wreszcie operacje wejścia/wyjścia. Ścisłe określenie języka posunięto jednak do granic: opublikowany w styczniu 1969 roku raport języka był tak formalny, że wielu informatyków uznało go za całkowicie nieczytelny. Mimo to Algol 68 był pierwszym z niewielu języków zdefiniowanych w sposób formalny przed implementacją, które odniosły pewien sukces przemysłowy.
BASIC
(Beginner's All-purpose Symbolic Instruction Code) - język programowania wysokiego poziomu, opracowany w 1964 przez Johna George'a Kemeny'ego i Thomasa E. Kurtza w Dartmouth College w oparciu o Fortran i Algol-60. Jego pierwsza wersja znana była później pod nazwą Dartmouth BASIC.
Historia
Założenia projektantów BASIC-a uwzględniały łatwość użytkowania, wszechstronność zastosowań, interaktywność i dobrą komunikację z użytkownikiem poprzez jasne komunikaty błędów.
BASIC wybił się na czoło języków do zastosowań amatorskich i półprofesjonalnych po wprowadzeniu na rynek mikrokomputera Altair 8800. Twórcami dialektu BASIC-a dla tej maszyny byli Bill Gates i Paul Allen. BASIC szybko zaimplementowany został przy budowie serii komputerów Apple, a później (jako GW BASIC) w IBM PC (początkowo w ROM, a po pojawieniu się DOSa na dyskietce).
Następcą GW BASIC-a dla pecetów został QB, później rozprowadzany komercyjnie jako QuickBASIC, który w końcu wyewoluował w Visual Basic for Windows. Istnieją też alternatywne interpretery i kompilatory tego języka dla platformy win32 (Power BASIC, Dark BASIC itp.)
W Polsce najbardziej znane są dialekty BASIC-a napisane dla popularnych komputerów ośmiobitowych - Commodore, Amstrada CPC, Atari i Sinclair ZX Spectrum.
Semantyka
Programy w BASIC-u składają się z kolejno wykonywanych instrukcji, które zebrane są w wiersze. Wszystkie dialekty oprócz najprymitywniejszych dopuszczają kilka instrukcji w jednym wierszu, rozdzielonych zazwyczaj znakiem dwukropka. Starsze wersje wymagały numerowania wierszy (maksymalny numer wynosił zwykle 9999, 16384 albo 32767).
Zmienne mogą mieć dowolnie długie nazwy zaczynające się od litery. Nazwy zmiennych łańcuchowych zakończone są znakiem dolara, np. x$, zmienna$. Tablice mogą mieć dwa lub więcej wymiarów (w niektórych dialektach tablice znakowe służą do wskaźnikowego dostępu do łańcuchów, jak w C).
BASIC w sprowadzonej do wspólnego mianownika wersji posiada bardzo proste mechanizmy sterowania przebiegiem programu - instrukcję skoku bezwarunkowego GOTO, wywołania podprogramu GOSUB (kończonego instrukcją RETURN) oraz warunkową (IF..THEN (oraz ELSE w niektórych dialektach). Za pomocą instrukcji FOR..NEXT można powtarzać określone fragmenty programu (pętla iteracyjna).
Niektóre dialekty posiadają także instrukcje pętli warunkowej (DO LOOP..UNTIL, WHILE..WEND), skoku warunkowego (ON GOTO, ON GOSUB), oraz wyboru warunkowego (CASE..SELECT).
Inne typowe instrukcje:
RUN - uruchomienie programu
PRINT tekst - wyprowadzenie tekstu lub wartości zmiennej na urządzenie wyjściowe (najczęściej ekran).
INPUT zmienna - wczytanie wartości z klawiatury do zmiennej
DIM tablica - deklaracja tablicy
LET zmienna = wartość - deklaracja zmiennej (czasami LET można opuścić)
STOP - zatrzymanie programu
CONTINUE - wznowienie zatrzymanego programu
Ponadto w większości dialektów dostępne są funkcje matematyczne (INT, ABS, SGN) trygonometryczne (SIN, COS, TAN, czasami LOG, LN) i operacji na łańcuchach (szereg funkcji zakończonych znakiem $, np. LEFT$, UPPER$).
C
C jest językiem programowania stworzonym na początku lat siedemdziesiątych przez Dennisa Ritchiego do programowania systemów operacyjnych i innych zadań niskiego poziomu.
Historia
Poprzednikiem języka C był interpretowany język B który Ritchie rozwinął w język C. Pierwszy okres rozwoju języka to lata 1969-1973. W roku 1973 w języku C udało się zaimplementować jądro (kernel) systemu operacyjnego Unix. W 1978 roku Brian Kernighan i Dennis Ritchie opublikowali dokumentację języka p.t. C Programming Language (wydanie polskie: Język ANSI C).
C stał się popularny poza Laboratoriami Bella (gdzie powstał) po 1980 roku, i stał się dominującym językiem do programowania systemów operacyjnych i aplikacji. Na bazie języka C w latach osiemdziesiątych Bjarne Stroustrup stworzył język C++, który wprowadza możliwość programowania obiektowego.
Standardy
Standard języka C został zapisany w normie ISO 9899. Pierwsze wydanie tego dokumentu miało miejsce w 1990 roku (ISO 9899:1990) i było modyfikacją standardu ANSI: ANSI X3.159-1989 "Programming Language C". Język zgodny z tą wersją standardu określany jest nieformalnie jako C89. Od tego czasu powstało wiele uaktualnień tej normy. W 2001 roku ostatnia ma oznaczenie ISO 9899:1999 i została opublikowana w 1999 roku, język zgodny z tą normą określany jest nieformalnie jako C99. C99 nie jest kompatybilny z C++.
10