Turbo Pascal 7.0 str 1
WSTP
Program nauczania wymaga od Ciebie nauczenia siÄ™ podstaw programowania.
Dlaczego akurat Turbo Pascal ? Istnieje przecież mnóstwo innych języków
programowania w tej chwili bardziej popularnych, o których dużo się pisze. Kto dzisiaj
pisze prawdziwe programy w Turbo Pascalu?... SÅ‚uszne pytanie. Odpowiedz brzmi: nikt.
Uważam jednak, że Pascal jest najlepszym sposobem opisu rozwiązywania problemów
informatycznych (czyli prezentacji algorytmów). Jego trzon powstał właśnie w tym celu i
ciÄ…gle - moim zdaniem do nauki podstaw programowania jest niezastÄ…piony.
Nauka tego języka programowania jest środkiem do nauki myślenia programistycznego, a
nie jako cel sam w sobie. Znając ten język, nauka innych nie będzie dla Ciebie dużym
problemem, a metody rozwiązywania postawionych zadań będą podobne.
Język programowania Pascal opracował Niklaus Wirth w latach siedemdziesiątych
dwudziestego wieku
W nauczaniu i samodzielnym uczeniu się programowania komputerów język Pascal jest zalecany
jako pierwszy język programowania. Zalecenie to jest uzasadnione jego prostotą oraz następującymi
cechami szczególnymi:
" Pascal jest językiem wysokiego poziomu; oznacza to, że użytkownik piszący program w języku
Pascal nie musi znać szczegółów wewnętrznej budowy komputera, który ma wykonywać ten
program.
" Język Pascal ma wbudowane precyzyjne mechanizmy kontroli struktur i reguł gramatycznych;
dzięki temu łatwa jest identyfikacja i poprawianie popełnionych w programie błędów.
" Pascal jest językiem algorytmicznym, pomyślanym tak, aby łatwo można było w nim zapisywać
algorytmy, tj. koncepcje i szczegóły rozwiązania zadania opracowane przez użytkownika.
" Pascal jest językiem strukturalnym; oznacza to, że poszczególne fragmenty algorytmu można
zapisać w postaci wyraznie wyodrębnionych, a przez to łatwo czytelnych struktur językowych.
" Pascal jest językiem modularnym. Cecha ta pozwala składać program pascalowy z oddzielnych
cegiełek modułów, które w razie potrzeby można wymieniać czy też zmieniać bez naruszania
pozostałej części programu.
" Pascal jest językiem publikacyjnym; dla użytkownika oznacza to potencjalną możliwość
opublikowania oryginalnego, interesującego algorytmu w notacji języka Pascal. [2]
Jako podręczniki polecam pozycje:
1. Praktyczny kurs Turbo Pascala, wyd. III T.M.Sadowski, Helion 1996
2. Wstęp do programowania z przykładami w Turbo Pascalu, K.Koleśnik, Helion 1999
3. Turbo Pascal ćwiczenia praktyczne, A.Kierzkowski, Helion 2000, www.helion.com.pl/przyklady
autor kompendium: irena Werner
Uwaga:
Intencją autora kompendium jest przygotowanie skrótu (ściągi) w zakresie podstaw języka
programowania w Pascalu dla studentów pierwszego roku kierunku Elektrotechnika w
PWSZ Piła. Stanowi integralną część laboratorium z Informatyki. Jest to pierwsze wydanie
- wszelkie uwagi proszę kierować do autora na adres i_werner@o2.pl .
Turbo Pascal 7.0 str 2
TEMAT 1: STRUKTURA PROGRAMÓW SYSTEMU TURBO PASCAL.
OPERACJE WEJÅšCIA / WYJÅšCIA.
1. Operacje na plikach menu FILE
FILE / CHANGE DIR... zmiana katalogu ( np.na Moje dokumenty )
FILE / NEW otwarcie nowego okna do edycji programu
FILE / OPEN wczytanie zbioru z dysku [F3]
FILE / SAVE zapisanie zbioru na dysku [F2]
2. Kompilacja programu przetłumaczenie programu na język komputera(postać binarną) [ALT+F9].
3. Uruchomienie programu (kompilacja i wykonanie ): [CTRL+F9]
4. Zapisanie programu w postaci wykonywalnej tzn. z rozszerzeniem EXE ( wówczas program taki
można uruchomić z dowolnego miejsca na dysku bez konieczności wcześniejszego uruchomienia
Turbo Pascala)
COMPILE / DESTINATION / DISK óð COMPILE / COMPILE
5. Struktura programu. (tekstu zródłowego z rozszerzeniem .pas)
1) Nagłówek programu.
2) Część opisowa deklaracje: modułów, etykiet, stałych, typów, zmiennych, funkcji i procedur.
3) Część wykonawcza ciąg instrukcji zawartych między słowami kluczowymi : begin i end.
6. Operacje wejścia / wyjścia.
READ, READLN- instrukcje służące do wprowadzania danych (np. z klawiatury).
WRITE, WRITELN- instrukcje służące do wypisywania wyników (na ekranie wynikowym).
Końcówka LN oznacza przejście do nowej linii zaraz po wykonaniu operacji
wprowadzenia/wypisania danych.
PRZYKAAD 1_1
PROGRAM prz1_1; - nagłówek programu (nazwa programu jednoczłonowa)
Uses Crt; część opisowa (blok deklaracji w tym wypadku modułu Crt)
BEGIN
clrscr;
write( Jest to mój pierwszy program ); część wykonawcza (blok instrukcji)
repeat until keypressed; instrukcje oddzielone średnikami
END.
Ważne:
Pewne podprogramy są dostępne w języku Turbo Pascal jako tzw. podprogramy wbudowane lub podprogramy
standardowe. Dla podprogramów wbudowanych nie musi się zapowiadać potrzeby ich użycia w programie.
Natomiast podprogramy standardowe zawarte są w bibliotekach, zwanych modułami.
Przykłady modułów standardowych:
Crt moduł ułatwiający obsługę ekranu, klawiatury, dzwięku (tylko wbudowanego głośnika), kolorów, okien;
Dos moduł z procedurami systemowymi;
Graph moduł do obsługi grafiki w Turbo Pascalu;
Printer moduł do obsługi drukarki;
Użycie modułu należy w programie zapowiedzieć umieszczając bezpośrednio za nagłówkiem programu
dyrektywę USES Nazwa_Modułu; np. Uses Crt;
Uses Crt - deklaracja użycia modułu Crt, dzięki któremu jest możliwe m.in. wykonanie takich
poleceń jak:
ClrScr procedura czyszczenia ekranu (clear screen)
Delay(MS:Word) Procedura przerywa działanie programu na MS milisekund
GoToXY(X,Y:Byte) Procedura przenosi kursor do znaku o współrzędnych X i Y, nie naruszając
zawartości ekranu
KeyPressed:Boolean Funkcja zwraca wartość True, gdy w buforze klawiatury (klawisze wciśnięte na
klawiaturze sÄ… bowiem buforowane)
NoSound Procedura powodująca zakończenie wydawania dzwięku przez głośnik
komputera (aby uzyskać dzwięk, skorzystaj z procedury Sound)
ReadKey Funkcja, zwracajÄ…ca kod pierwszego klawisza z bufora klawiatury (brak echa)
Sound(Hz:Word) Procedura rozpoczynająca emitowanie przez głośnik komputera dzwięku
o częstotliwości Hz herców. Aby zakończyć należy wywołać funkcję NoSound
TextBackground(Color:Byte) Procedura ustalająca kolor tła dla wypisywanego tekstu
TextColor(Color:Byte) Procedura, ustalająca kolor znakówdla wypisywanego tekstu
Turbo Pascal 7.0 str 3
Kolory zdefiniowane w module Crt jako stałe, np. Blue(1); Green (2); Red(4)
W implementacji Turbo Pascal istnieje pewien użyteczny idiom o postaci:
REPEAT UNTIL KeyPressed: gdzie KeyPressed jest wywołaniem funkcji, zwracającej wartość True po
naciśnięciu dowolnego klawisza z klawiatury. Idiom ten służy zwykle do utrzymania w polu widzenia ekranu
użytkownika, zamiast powrotu do tekstu programu po jego wykonaniu. W tym samym celu możesz posłużyć się
instrukcjÄ… ReadKey (znajdujÄ… siÄ™ w pakiecie Crt).
Ważne:
1. W dowolnym miejscu programu można wstawić komentarz - tekst ograniczony
{ nawiasami klamrowymi } lub (*nawiasem zwykłym i znakiem mnożenia*),
2. nie wolno używać polskich znaków w nazwie programu, nazwach zmiennych, stałych
3. nazwy zmiennych, stałych, programów jednoczłonowe, każdy taki identyfikator musi być ciągiem liter i
cyfr, przy czym pierwszy znak musi być literą
Zapamiętaj: F8 wykonanie programu krokowe; F10 menu pracy; Alt+Litera otwiera menu;
F3 otwórz z dysku; F2 zachowaj; ALT+F3 usuń okno z ekranu; ALT+F5 ekran wynikowy; ALT+F9
kompilacja programu; CTRL+F9 wykonanie programu; F6 przejście do okna następnego,
ALT+X koniec pracy
ĆWICZENIE 1_1
Program powitanie;
{program wypisuje powitanie osoby, jej imieniem}
begin
write ( Witaj Irena ! );
end.
1) Przepisz go dokładnie i bez błędów każda pomyłka może spowodować kłopoty z uruchomieniem.
Jedynie możesz zmienić imię na własne.
2) Nadszedł moment uruchomienia - wciśnij klawisze Ctrl+F9. A gdzie powitanie? Powitanie jest tyle, że
ukryte. Turbo Pascal wyniki działania programów ukazuje na specjalnym, do tego celu przeznaczonym
ekranie (ang. user screen), do którego można powrócić naciskając klawisze Ctrl+F5
3) Uruchom program parÄ™ razy zaobserwuj co siÄ™ dzieje!.
4) Zmodyfikuj program i dopisz LN do procedury write, uruchom parÄ™ razy zaobserwuj zmianÄ™,
zapamiętaj!
ĆWICZENIE 1_2
Zmodyfikuj program powitanie:
- wpisz procedurę readln (bez parametrów) przed zakończeniem programu co spowoduje
zatrzymanie ekranu wynikowego
- użyj procedury writeln (bez parametrów) co daje pusty wiersz, następnie wypisz szlaczek z
gwiazdek
Program powitanie;
{program wypisuje powitanie osoby, jej imieniem}
begin
writeln ( Witaj Irena ! );
writeln;
write( ***************** );
readln;
end.
ĆWICZENIE 1_3
Zmodyfikuj program powitanie:
- do zatrzymania ekranu wynikowego programu użyj idiom - repeat until keypressed
- użyj procedury czyszczenia programu - clrscr
Pamiętaj o zadeklarowaniu modułu crt zawierającego powyższe instrukcje.
---------------------------------------------------------------------------------
Sprawdz, które spacje (") mają znaczenie przy wypisaniu powitania na ekranie wynikowym:
W riteln ( " " " " " "W itaj Irena! );
W riteln (" " " " " " W itaj Irena! );
Dokonaj analizy i zapamiętaj.
______________________________________________________
Turbo Pascal 7.0 str 4
Instrukcja GoToXY( współrzędna_x_ekranu , współrzędna_y_ekranu ) powoduje ustawienie
kursora w punkcie o podanych współrzędnych x i y ekranu.
( 1 , 1 ) ( 80 , 1 )
x
y
( 80 , 50 )
( 1 , 50 )
PRZYKAAD 1_2
Program wyświetla na środku pierwszego wiersza ekranu napis:HELLO.
Program prz1_2;
uses Crt;
BEGIN
clrscr;
gotoxy(35 , 2); write( HELLO );
repeat until keypressed;
END.
ĆWICZENIE 1_4
Napisz program, który w lewym górnym rogu wyświetla literę A, natomiast w prawym dolnym rogu
literÄ™ B.
PRZYKAAD 1_3
Program wyświetla na ekranie napis 1...TURBO PASCAL, a po naciśnięciu dowolnego klawisza
wyświetla linię niżej drugi napis 2...TURBO PASCAL.
program prz1_3;
uses Crt;
BEGIN
clrscr;
readkey oczekiwanie na wciśnięcie przez
writeln ('1...TURBO PASCAL');
użytkownika dowolnego klawisza
readkey;
writeln ('2...TURBO PASCAL');
repeat until keypressed;
END.
ĆWICZENIE 1_5
Napisać program, który wyświetla: na środku pierwszego wiersza napis: 1...TURBO PASCAL, po
naciśnięciu dowolnego klawisza (10 wierszy niżej) wyświetla kolejny napis: 2...TURBO PASCAL, po
naciśnięciu dowolnego klawisza (10 wierszy niżej) wyświetla kolejny napis: 3...TURBO PASCAL, po
naciśnięciu dowolnego klawisza (10 wierszy niżej) wyświetla kolejny napis: 4...TURBO PASCAL.
Użyj instrukcji gotoxy
ĆWICZENIE 1_6
Zmodyfikować powyższy program tak, aby przed wyświetleniem kolejnego napisu usunięty był
poprzedni (pomoże Tobie instrukcja czyszczenia ekranu).
---------------------------------------------------------------------------------------
Ważne
Tłumaczenie programu zródłowego na program wynikowy jest nazywane kompilacją. W przypadku tłumaczenia
programu zawierającego błędy synaktyczne, kompilacja jest przerywana przy wykryciu pierwszego błędu, po czym
następuje wyprowadzenie informacji diagnostycznej, tj. odpowiedniego komunikatu objaśniającego rodzaj błędu.
Błąd synaktyczny wynika z naruszenia reguł opisujących składnię języka, czyli ze złego skonstruowania instrukcji
Przkładowe błędy to: > pominięcie średnika; użycie nie zadeklarowanej zmiennej; > pominięcie słowa
END; > zniekształcenie słowa kluczowego lub identyfikatora;> pominięcie słowa kluczowego w
instrukcji; > użycie znaku przypisania w wyrażeniu logicznym; > użycie znaku równości zamiast
operatora przypisania
WYKAZ WYBRANYCH BADÓW wykrywanych przez systemy Turbo Pascal 7.0
Nr. błędu Komunikat wyprowadz. przez TP Objaśnienie błędu
2 Identifier expected Brak identyfikatora (ciÄ…g liter lub cyfr zaczynajÄ…cy siÄ™ od litery)
3 Unknown identifier Nie zadeklarowany identyfikator
4 Duplicate identifier Podwójnie zadeklarowany identyfikator
5 Syntax Eerror BÅ‚Ä…d synaktyczny
8 String constant exceeds line Brak znaku , stała napisowa nie kończy się w wierszu
20 Variable identifier expected Brak identyfikatora zmiennej
26 Type mismatch Niezgodność typów
Turbo Pascal 7.0 str 5
FORMATOWANIE LICZB
Napisz i uruchom program, który wypisze wynik dzielenia liczby 10 przez 2.
Nie wyliczaj wyniku i nie wpisuj gotowego rozwiązania. Pozwól policzyć wynik komputerowi
Program format;
{program wyświetla wynik dzielenia 10 przez 2}
Uses Crt;
kropka dziesiętna
Begin
Clrscr;
writeln (10/2);
readkey;
end.
Uwaga: wynik został wypisany w mało przejrzysty sposób. Oznacza on 5.0000000000*100, czyli 5
Taki format liczb jest nazywany notacjÄ… naukowÄ…. Operacja dzielenia daje zawsze wynik
zmiennopozycyjny (wynik dzielenia jest zawsze typu real)
Istnieje jednak możliwość sformatowania liczby według własnych życzeń. W tym celu należy
podać po liczbie po dwukropkach dwie cyfry:
pierwsza będzie informowała, ile znaków ma zajmować cała liczba (łącznie z kropką),
druga ile miejsc po przecinku powinno zostać wyświetlonych.
Np. dlugosc :13 : 2 .
pensja:13: 2 4358.34
pole_trojkota : 13 : 2 4.67
Tekst i liczbę całkowitą formatujemy jedną cyfrą po dwukropku
PRZYKAAD 1_4
formatowanie
Program rozne_liczby;
tekstu, liczby
Uses crt;
Begin do prawego
Clrscr;
Writeln ( wynik dzielenia liczby 10 przez 2 -> : 40 , 10/2 : 13 : 2);
Writeln ( wynik dzielenia 10 przez 3 -> : 40 , 10/3 : 13 : 2);
Writeln ( wynik mnożenia 2*5 -> : 40 , 2*5 : 4);
Writeln ( wynik 2*5 -> : 40, 2*5 : 4);
Writeln ( 2*5 : 40, 2*5 :4);
Repeat until keypressed;
End.
ĆWICZENIE 1_7
Wypisz w pierwszym wierszu swoje imię, a w drugim nazwisko, formatując je zgodnie z długością
dłuższego wyrazu.
ĆWICZENIE 1_8
Napisz program, który czyści zawartość ekranu spacjami " . Użyj instrukcji write oraz
formatu znaku spacji
-----------------------------------------------------------------------------
TEMAT 2: STAAE I ZMIENNE. PODSTAWOWE TYPY DANYCH.
1. Stała jest nazwą pewnej wartości, która w całym programie nie ulega zmianie. Stałe definiuje się
(deklaruje) w bloku deklaracji. Służy do tego sekcja const. Po tym słowie kluczowym definiuje się
stałe, posługując się postacią nazwa_stalej = wartość_stałej. Kolejne deklaracje należy oddzielać
średnikami.
Program przykład;
Const
A = 10 ;
imie = Irena ; {tekst (ciąg znaków) wstawiamy w apostrofy}
&
2. Zmienne mogą przyjmować różne wartości. (można je sobie wyobrazić jako pojemniki,
przechowujÄ…ce dane w trakcie wykonywania programu. Zmienne deklaruje siÄ™ w bloku deklaracji w
sekcji var. Po tym słowie kluczowym można je definiować, posługując się postacią
nazwa_zmiennej : typ_zmiennej. Kolejne deklaracje typów zmiennych należy oddzielać
średnikami.
Turbo Pascal 7.0 str 6
Zbiór wartości, jakie można przypisywać zmiennej jest ograniczony i z góry zadeklarowany. Zbiór
wartości zmiennej nazywamy typem danych.
3. Podstawowe typy danych
Integer liczby całkowite z przedziału: [ - 32.768 , 32.767 ]
LongInt liczby całkowite z przedziału: [-2 147 483 648 , 2 147 483 647]
Real- liczby rzeczywiste z przedziału [ -1,7 * 1038 , 1,7 * 1038 ]
String łańcuch znaków (czyli tekst), nie dłuższy niż 255 znaków
Boolean wartość logiczna (True lub False prawda lub fałsz)
Char pojedynczy znak ASCII
Byte liczby całkowite z zakresu [0..25]
Word liczby całkowite z zakresu [0..65535]
Program przykład
Var
A, iwa : integer; {dwie zmienne tego samego typu}
Tytul_ksiazki : string; {nazwa zmiennej jednoczłonowa, może być: tytulksiazki}
Imie, Nazwisko : string [30]; {zmienne tego samego typu mogą być wymienione w jednej deklaracji, oddzielamy je wówczas przecinkiem
& zakończonym znakiem dwukropka, po którym następuje nazwa typu zmiennych}
Ważne: W systemie Turbo Pascal 7.0 automatycznie ustalana jest wartość początkowa, czego nie
było w starszych wersja systemu. Dla zmiennych typu liczbowego: zero
ĆWICZENIE 2_1
Napisz program, który wypisze powitanie Twojej osoby: Witaj Irena ! .Wpisz własne imię, które
zadeklarujesz jako wartość stałej o nazwie osoba w sekcji const. Użyj instrukcji write, imię wypisz
na ekranie za pośrednictwem zadeklarowanej stałej.
---------------------------------------------------------------------------------------------------
Instrukcja przypisania nadanie określonej wartości zmiennej
Nazwa_zmiennej := Wartość; gdzie wyrażenie := nazywamy operatorem przypisania np.
Pole:=1;
a:=3; zmienna a przyjmuje wartość 3, kolejny zapis w programie jak niżej
a:=a+2.5; wówczas zmienna a przyjmuje nową wartość 5.5
ważne: 2.5 zamiast przecinka jest kropka - oznacza miejsca dziesiętne w liczbie
---------------------------------------------------------------------------------------------
Instrukcja Readln. Przykład deklaracji i zastosowania zmiennych / stałych:
Program obliczający sumę i średnią arytmetyczną dwóch liczb całkowitych a i b, a także pole
i obwód koła o podanym promieniu r.
PROGRAM liczby;
Uses Crt;
Deklaracja stałej pi
CONST
Zmienna a przyjmie wartość
Pi=3.14;
liczbowÄ… wprowadzonÄ… z
VAR
klawiatury przez użytkownika
a, b, s, r: Integer;
sr, p, ob: Real;
BEGIN
Writeln( Program oblicza średnią i sumę dwóch liczb );
Write( Podaj pierwszą liczbę całkowitą: ); readln(a);
Write( Podaj drugą liczbę całkowitą: ); readln(b);
Wypisanie na ekranie
s := a + b ;
konkretnej liczby kryjÄ…cej siÄ™
sr := s / 2 ;
pod zmiennÄ… s
writeln( Suma dwóch liczb to: , s );
writeln( Średnia dwóch liczb to: , sr : 7 : 2);
write( Podaj długość promienia r ); readln(r );
p := pi * r * r ;
Sformatowanie liczby
ob := 2 * pi * r ;
rzeczywistej zaokrÄ…glenie do 2
writeln( Pole koła to: , p : 7 : 2 ) ;
miejsc po przecinku
writeln( Obwód koła to: , ob : 7 : 2 ) ;
repeat until keypressed;
END.
Turbo Pascal 7.0 str 7
Ważne: w instrukcjach wieloparametrowych np. writeln (jak wyżej), poszczególne parametry
(tekst, zmienne, stałe i inne) odseparowywane są przecinkiem.
ĆWICZENIE 2_2
Napisz program, który oblicza prędkość pojazdu, gdzie droga i czas podane są przez użytkownika z
klawiatury
ĆWICZENIE 2_3
Na książeczkę PKO wpłacono pewną sumę pieniędzy. Co roku kwota ta wzrastała o pewien procent.
Program oblicza wysokość kwoty na książeczce po 2 latach.
{np.}
Podaj początkową wartość kwoty a = ............ {2000
Podaj wysokość rocznego oprocentowania p = ............ {10}
*********
Wysokość kwoty po 2 latach wynosi: ............... zł {2420}
ĆWICZENIE 2_4
Napisz program, który wczytuje imię i nazwisko osoby i jej wiek (rocznikowo), oblicza i wypisuje rok
urodzenia. Bieżący rok zadeklaruj jako stałą.
Ważne! praca z nauczycielem
w celu zamiany wartości w zmiennych x i y, należy wykorzystać dodatkową zmienną
zamiany wartości w zmiennych
pomocniczą na przykład pom i wykonać trzy instrukcje przypisania:
pom := x; pom := y;
x := y; lub y := x;
y := pom x := pom
ĆWICZENIE 2_5
Zmiennej Z przypisz kolor zielony a zmiennej B biały.
Program zamienia wartości w zmiennych Z i B.
PYTANIA TESTOWE
1. Czym różnią się dwa następujące zapisy: 2008 i 2008 ?
2. Sprawdz, czy poniższe napisy są liczbami, a jeżeli tak, to jakiego typu:
+276 -0.04E3 .35E+5 1E1
3. Ustal które z następujących definicji stałych są poprawne:
a) CONST maxliczba = 0,2; b) CONST pierwszyznak : a ;
c) CONST max = 250; min = 150.7; d) CONST zakres = 250..500;
e) CONST Const1, Const2 = 256; f) CONST C1 = 2,5; C2 = 3.7; C1 = 2.5;
4. Które z następujących deklaracji zmiennych są poprawne:
a) VAR 1a, 2a, 3a: Char; b) VAR a: Integer; b:integer; abc: Real;
c) VAR a1, a2, a3: Char; b1: Real; a3: Integer; c) VAR wynika, wynikb:Real; c1: Char; x,y:Real;
5. Sprawdz poprawność synaktyczną programu:
PROGRAM ConVar ;
CONST A = 7 ;
VAR B : Real ;
BEGIN
B := A ;
A := B
END.
7. Określ wartości zmiennych a, R, b typu Integer po wykonaniu sekwencji instrukcji:
a := 7 ;
b := 34 ;
R := a ;
a := b ;
b := R ;
Turbo Pascal 7.0 str 8
TEMAT 3: WYRAŻENIA .
Wyrażenie pascalowe jest konstrukcją językową, która służy do wyznaczenia wartości
określonego typu. Wartość wyrażenia, uzyskaną w wyniku jego wartościowania, przypisuje się
zwykle zmiennej za pomocÄ… instrukcji przypisania o postaci
zmienna:=wyrażenie
Wyrażenia arytmetyczne
np. jeżeli I jest zmienna typu integer, to wykonanie instrukcji przypisania: I:=38 + 125
spowoduje przypisanie zmiennej I wartości 163, gdzie 38 i 125 są argumentami, + jest
arytmetycznym operatorem dodawania
Operatory arytmetyczne
+ dodawanie DIV dzielenie całkowite a div b
- odejmowanie np. 5 div 2 = 2
* mnożenie MOD reszta z dzielenia a mod b
/ dzielenie (wynik typ Real) np. 25 mod 7 = 4; 5 mod 5 = 0
Integer - typ argumentu i wyniku dla div, mod
Diagramy wartościowania wyrażeń arytmetycznych
Poziom priorytetu Operatory
Niski + -
Wysoki * DIV / MOD
Wartościowanie wyrażenia arytmetycznego przebiega w kolejności określonej priorytetem
operatorów. Przy ręcznej kontroli poprawności i testowaniu programów (diagramy) należy
przyjąć założenia:
Operacje arytmetyczne wykonywane są w kolejności od lewej do prawej strony zapisu
wyrażenia z uwzględnieniem priorytetu operatorów arytmetycznych
Przykład 3_1 Diagram wartościowania wyrażenia typu Integer:
38 + 39 DIV 6 * 6 - 66 MOD 8
38 + 6 * 6 - 66 MOD 8 pierwsze przejście
38 + 36 - 66 MOD 8
38 + 36 - 2
74 - 2 drugie przejście
72
Przykład 3_2 Diagramy z zastosowaniem nawiasów wymuszających wykonanie najpierw
operacji w nawiasach
3.5 * (16 DIV 5) + 4.5 3.5 * (16 DIV 5 + 4.5)
3.5 * 3 + 4.5
3.5 * ( 3 + 4.5)
10.5 + 4.5
3.5 * 7.5
15.0
26.25
ĆWICZENIE 3_1
Przeprowadz wartościowanie wyrażenia:
typu Real 38.0 + 39 / 6 * 6 66 MOD 8
typu Integer 158 DIV ( ( 55 MOD 18 ) + ( 9 * 5 1 ) 36);
Wyrażenia logiczne
Wyrażeniem logicznym nazywamy takie wyrażenie, którego wartościowanie daje wynik typu
Boolean. Wartością wyrażenia logicznego może być jedna z dwóch stałych typu Boolean:
False lub True. Identyfikatory standardowe False i True oznaczają odpowiednio fałszywość i
prawdziwość zdania logicznego, jakim jest wyrażenie logiczne.
Turbo Pascal 7.0 str 9
Operatory relacji: = < > <> <= >=
Wyrażenie relacyjne wartość wyrażenia
52.5 < 52.6 True
31 <> 31 False
Program Relacje;
Uses crt;
Var J1,J2:Integer;
B1,B2:Boolean;
Begin
Write( Wprowadz dwie liczby Integer max. 4-cyfrowe: );
Read(J1,J2);
Writeln; wykonanie programu
B1:=J1>J2; dla J1 = 37; J2 = 1059
B2:=J1
Writeln( Wyrażenie ,J1:4, > ,J2:4, jest ,B1:5); Wyrażenie 37 > 1059 jest FALSE
Writeln;
Writeln( Wyrażenie ,J1:4, < ,J2:4, jest ,B2:5); Wyrażenie 37 < 1059 jest TRUE
Readkey
End.
Uwagi i uzupełnienia
1. Obydwa argumenty operatora relacji muszą być tego samego typu (wyjatek stanowią Integer i
Real).
2. Typy danych: Integer, Char i Boolean zaliczamy do tzw. typów porządkowych. Dla każdego
typu porządkowego są określone funkcje standardowe Ord, Pred i Succ
np. Ord(False)=0, Ord(True)=1
Pred(True)=False, Succ(False)=True
3. Dla typu danych Char określono ponadto funkcję standardową Chr.Wywołanie funkcji
Ord dla znaku ze zbioru ASCII (czytaj aski ) daje liczbę porządkową znaku (zał. w każdej
książce o TP)
np. Ord( B )=66, Ord( I )=73, itp. Chr jest funkcjÄ… odwrotnÄ… do Ord np. Chr(66)= B
Operatory logiczne
Do tworzenia złożonych wyrażeń typu Boolean wykorzystujemy operatory logiczne,
oznaczone słowami-symbolami NOT, OR, AND. Są to symbole: negacji, alternatywy i
koniunkcji. Argumentami tych operatorów muszą być wyrażenia typu Boolean.
Hierarchia operatorów
Poziom priorytetu Operatory
0(najwyższy) wyrażenia w nawiasach
1 NOT
2 * / DIV MOD AND
3 + - OR
4 < <= > >= <>
Przykład 3_3 Diagram wartościowania złożonych wyrażeń logicznych
(110 > 78) AND (3.1 < - 12.5) ( D < H ) AND ( K < R )
TRUE AND (3.1, < - 12.5) TRUE AND ( K < R )
TRUE AND FALSE TRUE AND TRUE
FALSE TRUE
Program Logika;
Var B, B1, B2 : Boolean;
Begin
B1 := Ord( H ) Ord( D ) + 10 = 14 ;
B2 := A <= Pred ( Succ ( A ) ) ;
B := NOT B1 OR B2 ; Postać wydruku
Writeln ( B1= , B1); B1=TRUE
Writeln ( B2= , B2); B2=TRUE
Writeln ( B=NOT B1 OR B2= ,B) B=NOT B1 OR B2=TRUE
End.
Turbo Pascal 7.0 str 10
FUNKCJE STANDARDOWE
Wywołanie Typ Typ wyniku Wartość funkcji
funkcji argumentu
Abs(x) Integer, Real Jak typ argumentu Wartość bezwzględna x
Chr(x) Integer Char Znak o liczbie porzÄ…dkowej x w typie Char
Cos(x) Integer, Real Real Cosinus
Exp(x) Integer, Real Real ex
Ln(x) Integer, Real Real Logarytm naturalny, x>0
Ord(x) PorzÄ…dkowy Integer Liczba porzÄ…dkowa argumentu
Pred(x) Porządkowy Jak typ argumentu Poprzednik argumentu (jeśli istnieje)
Round(x) Real Integer Wartość argumentu zaokrąglona do
najbliższej liczby typu Integer
Sin(x) Integer, Real Real Sinus
Sqr(x) Integer, Real Jak typ argumentu Kwadrat wartości x
Sqrt(x) Integer, Real Real Pierwiastek kwadratowy, x>0
Succ(x) Porządkowy Jak typ argumentu Następnik argumentu (jeśli istnieje)
Trunc(x) Real Integer Wartość argumentu obcięta do liczby
całkowitej; istnieją zależności:
Round(x)=Trunc(x+0.5) dla x>0,
Round(x)=Trunc(x-0.5) dla x<0,
Upcase(x) Char Char Zamieni znak na duży
ĆWICZENIE 3_2
Napisz program, który wypisze pierwszy znak większy od przekształconego do wielkiej litery
ĆWICZENIE 3_3
Przeprowadz wartościowanie wyrażenia:
Trunc (Sqr ( 2.5 + 8.3 ) DIV 4; (15 DIV 7 = 2) OR (9 MOD 2 < > 1);
(2 >1) AND NOT (4 < 5)
ĆWICZENIE 3_4
program oblicza odległość między dwoma punktami na płaszczyznie o współrzędnych (x1, y1);
2 1 2 1
(x2,y2) wg wzoru: ,
D = (X - X )2 + (Y - Y )2
gdzie współrzędne punktów podane są przez użytkownika z klawiatury
ĆWICZENIE 3_5
Dane są nieujemne liczby rzeczywiste A, B i C (wczytane z klawiatury), będące długościami boków
trójkąta. Program oblicza pole trójkąta wg wzoru Herona:
(a + b + c)
Pole = p( p - a)( p - b)( p - c) , gdzie p =
2
PYTANIA TESTOWE
1. Zakładając opisy obiektów programu:
CONST spacja = VAR m,n : Integer; a,b : Real; p,q : Boolean; c1,c2 : Char;
Oceń, czy poniższe instrukcje są poprawne:
a) m := Trunc(b) + a ; b) p := m + n ; c) c1 := spacja ;
d) p := q AND(Ord(c1) = a ) ; e) m := n MOD a ; f) c1 := c2 ;
g) c2 := Chr( a ) ; h) m := n Ord( 0 ) ; i) n := a Trunc(a) ;
j) b := 2.99 * 10 ; k) a := m/n ; l) b:= Ord(c1) + Ord(c2) ;
Turbo Pascal 7.0 str 11
TEMAT 4: INSTRUKCJA WARUNKOWA IF..THEN .
1. Instrukcja warunkowa if..then ( jeżeli ) uzależnia wykonanie innych instrukcji od spełnienia
podanego warunku.
If warunek then instrukcja ; {instrukcja warunkowa niepełna}
If warunek then instrukcja {instrukcja warunkowa pełna jest słowo ELSE;
else instrukcja ; przed else nie wolno stawiać średnika}
_________________________________________________________________________________________________
If warunek then begin
.........
ciÄ…g instrukcji;
........
end {brak średnika przed else}
else begin
.........
ciÄ…g instrukcji;
........
end ; {średnik kończący instrukcję warunkową}
ciąg dwu lub więcej kolejnych instrukcji, tj. instrukcji prostych lub strukturalnych, umieszczony
pomiędzy nawiasami logicznymi: begin .. end; stanowi instrukcję złożoną
2. PRZYKAAD 4_1
Program oblicza wartość zakupionych kaset. Wiadomo, że cena 1 kasety wynosi 15 zł, natomiast
przy zakupie co najmniej 5 kaset cena obniża się do 10 zł za 1 szt.
& & & & .
write( Ile kaset zakupiono ? ); readln( ilosc);
if ilosc < 5 then wartosc : = ilosc * 15
else wartosc : = ilosc * 10;
& & & & & &
Uwzględnić sytuację, gdy użytkownik poda błędne dane, np. ilość < 0.
& & & & & &
write( Ile kaset zakupiono ? ); readln( ilosc);
if ilosc < 0 then writeln( Błędne dane! )
else begin
if ilosc < 5 then cena : = ilosc * 15
else cena : = ilosc * 10;
end;
& & & & & .
{w rozwiązaniu powyżej może, ale nie musi być klamry begin end}
Ważne: w przypadku instrukcji warunkowej zagnieżdżonej słowo ELSE dotyczy zawsze
bezpośrednio poprzedzającego go THEN
3. Operatory AND i OR.
a) sprawdzenie, czy spełnionych jest jednocześnie kilka warunków.
If (warunek1) AND (warunek2) then instrukcja;
b) sprawdzenie, czy spełniony jest jeden (lub kilka) spośród podanych warunków.
If (warunek1) OR (warunek2) then instrukcja;
4. PRZYKAAD 4_2
Jeżeli x spełnia warunek -5 < x < 5 wówczas pojawia się komunikat x należy do przedziału .
Jeżeli x > 5 lub x < -5 wówczas pojawia się komunikat x nie należy do przedziału .
.......................
if ( x < 5 ) and ( x > -5 ) then write( x należy do przedziału );
if ( x > 5 ) or ( x < -5 ) then write( x nie należy do przedziału );
............. ............
Turbo Pascal 7.0 str 12
Ważne: Jeżeli argumentem operatora logicznego (NOT, OR, lub AND) jest wyrażenie relacyjne, to
wyrażenie to musi być zamknięte w nawiasach. Jest to konsekwencją wyższego priorytetu operatorów
logicznych w stosunku do operatorów relacji: I tak np. zapis:
37 < 49 AND 12 / 3 = 4 OR 2 * 2 < 5, jest błędny, ponieważ wartościowanie musiałoby zacząć się od
argumentu 49 operatora AND, a nie jest to argument typu Boolean.
Prawidłowy zapis, czyli odpowiednie zamknięcie nawiasami na dwa sposoby daje wartość TRUE
Program równanie_liniowe;
{ Program podaje rozwiazanie rownania Ax+B=0, sprawdzajac czy A nie jest zerowe. }
uses crt;
var
A, B,X : Real;
BEGIN
clrscr;
writeln ('Podaj wspolczynniki ');
write ('Podaj A: '); readln (A);
write ('Podaj B: '); readln (B);
if (A = 0)
then writeln ('Blad: dzielenie przez zero')
else begin
X:= -B/A;
writeln ('Pierwiastek równania wynosi: ', X:10:5);
end;
repeat until keypressed;
END.
ĆWICZENIE 4_1
Program, który określi czy podana przez użytkownika liczba całkowita jest parzysta, czy nieparzysta.
(UŻYJ MOD)
ĆWICZENIE 4_2
Program, który określi czy podana przez użytkownika liczba całkowita jest dodatnia, ujemna czy też
równa zero.
ĆWICZENIE 4_3
Program wypisuje największą z dwóch liczb, liczby wprowadzone są z klawiatury.
ĆWICZENIE 4_4
Napisać program wystawiający rachunek za rozmowy telefoniczne. Wiadomo, że abonament wynosi
10 zł i pokrywa 20 impulsów. Za każdy dodatkowy impuls należy zapłacić 10 gr.
Do rachunku netto należy doliczyć 22% VAT otrzymując w ten sposób rachunek brutto.
!!! Uwzględnić sytuację, gdy użytkownik poda złe dane, tzn. ujemną liczbę impulsów; wówczas
pojawi się komunikat błędne dane i żadne obliczenia nie zostaną wykonane.
ĆWICZENIE 4_5
Napisać program obliczający wynagrodzenie pracownika w sferze budżetowej. Wiadomo, że składa
się ono z dwóch elementów: 1) płacy zasadniczej; 2) dodatku stażowego.
Dodatek stażowy wynosi:
0% płacy zasadniczej, gdy staż <5 lat;
1% płacy zasadniczej za każdy rok pracy, gdy staż należy do przedziału zamkniętego <5;20> lat;
20% płacy zasadniczej, gdy staż >20 lat.
Uzupełnienie
Rozwiń programu uwzględniając sytuację, gdy użytkownik poda złe dane: tzn. ujemny staż pracy,
lub staż pracy >70 lat, lub ujemną płacę zasadniczą.
PYTANIE TESTOWE
1. Określ typ i jeżeli to możliwe wartości poniższych wyrażeń , w których zmienne p, q, r są tego
samego typu Boolean, a zmienna k jest typu Integer.
a) Sqr(a) b) Sqr(2.0) c) Ord( t ) Ord( a )
d) Trunc(-99.9) e) -Round(99.9) f) Round(-99.9)
g) Odd(k) OR Odd(k+1) h) 10 DIV 3 i) NOT(p AND q)
j) 126 DIV 3 MOD 5 k) p AND (q AND NOT q) OR r l) Round(-65.3 = Trunc(-65.3)
m) Ord(Succ( A )) = Ord( B ) n) 10/3
Turbo Pascal 7.0 str 13
Ważne: Szukanie MAX; MIN
Program pobierający osiem liczb rzeczywistych i wyświetlający na ekranie najmniejszą z nich
Użyj instrukcji warunkowej prostej oraz zmiennej pomocniczej: MIN (przypisz zmiennej MIN
wartość piewszej liczby, następnie wczytuj kolejne liczby i porównuj z MIN).
Program Min_8;
Uses Crt;
Var a1, a2, a3, a4, a5, a6, a7, a8, MIN : Integer ;
BEGIN
Write( Podaj liczbÄ™ a1 -> ); readln(a1) ;
MIN := a1;
Write( Podaj liczbÄ™ a2 -> ); readln(a2) ;
If a2 < MIN then MIN := a2;
Write( Podaj liczbÄ™ a3 -> ); readln(a3) ;
If a3 < MIN then MIN := a3;
Write( Podaj liczbÄ™ a4 -> ); readln(a4) ;
If a4 < MIN then MIN := a4;
Write( Podaj liczbÄ™ a5 -> ); readln(a5) ;
If a5 < MIN then MIN := a5;
Write( Podaj liczbÄ™ a6 -> ); readln(a6) ;
If a6 < MIN then MIN := a6;
Write( Podaj liczbÄ™ a7 -> ); readln(a7) ;
If a7 < MIN then MIN := a7;
Write( Podaj liczbÄ™ a8 -> ); readln(a8) ;
If a8 < MIN then MIN := a8;
Write( Najmniejsza liczba to -> , MIN); {Uff ! , a co jeśli zbiór będzie miał 100 liczb?}
Readkey;
END.
ĆWICZENIE 4_6
2
Program oblicza pierwiastki równania kwadratowego: ax + bx + c = 0
W algorytmie uwzględnij przypadek, gdy współczynniki a, b, c są równe zero.
Zastosuj instrukcję warunkową zagnieżdżoną
Jeśli masz problem skorzystaj ze schematu algorytmu obliczenia pierwiastków
funkcji kwadratowej - bieżący temat (nr 4)
PYTANIA TESTOWE
1. R oznacza zmienną typu Real, PI stałą typu Real, a POLE zmienną typu Integer. Ustal, która z
następujących instrukcji jest poprawna:
a) POLE:= 3.14159 * Sqr(R) ; b) PI := 3.14159 ;
c) R := R * Sqr(R) d) POLE := Round(2 * PI * R)
2. Wartość wyrażenia: 10 * 10 5 / 2 wynosi:
a) 25 b) 25.0 c) 97.5 d) 47.5
Turbo Pascal 7.0 str 14
PRZYKAAD: ZAGNIEŻDŻONA INSTRUKCJA WARUNKOWA IF..THEN
Przyporządkowanie wynikom punktowym z zakresu 0-100 punktów oceny według zasady:
Wynik 90-100 p. - Ocena 5.0;
Wynik 80-89 p. - Ocena 4.5;
Wynik 70-79 p. - Ocena 4.0;
Wynik 60-69 p. - Ocena 3.5;
Wynik 50-59 p. - Ocena 3.0;
Wynik 0-49 p. - Ocena 2.0
program test;
uses crt;
var wynik:integer;
ocena:real;
BEGIN
clrscr;
writeln('przypisanie oceny punktom z testu');
writeln;
write('podaj liczbe punktów z zakresu 0-100 -> ');
readln(wynik);
{ --------------------------------------------}
if wynik >= 50
then if wynik >= 60
then if wynik >= 70
then if wynik >= 80
then if wynik >=90
then ocena:=5.0
else ocena:=4.5
else ocena:= 4.0
else ocena:=3.5
else ocena:=3.0
else ocena:=2.0;
{------------------------------------------}
writeln('ocena z testu -> ',ocena:0:1);
repeat until keypressed
END.
Zmodyfikuj powyższy program zagnieżdżając instrukcje warunkową po ELSE
if wynik >= 90
then ocena:=5.0
else if wynik >= 80
then ocena:=4.5
else if wynik >= 70
then ocena:=4.0
else if wynik >= 60
then ocena:=3.5
else if wynik >=50
then ocena:=3.0
else ocena:=2.0 ;
----------------------------------------------------------------
Ważne: w przypadku instrukcji warunkowej zagnieżdżonej słowo ELSE dotyczy zawsze
bezpośrednio poprzedzającego go THEN
Turbo Pascal 7.0 str 15
Schemat do programu funkcja_kwadratowa
Program oblicza pierwiastki rzeczywiste równania kwadratowego
Ax2 + Bx + C = 0
w programie użyj procedury
wczytaj A, B, C
T
równanie liniowe (Bx + C = 0)
A=0
T
B=0
T
3: rozwiązaniem każda
C=0
liczba rzeczywista
N
0: brak rozwiązań
N
X1= - C/B
1: jedno rozwiÄ…zanie
N
równanie kwadratowe (Ax2 +Bx + C = 0)
DELTA
T
Delta>
X1= (-B+"delta)/2a
0
X2= (-B-"delta)/2a
2: dwa rozwiÄ…zania
N T
Delta<
0: brak rozwiązań
0
N
X1= - B/2A
1: jedno rozwiÄ…zanie
Wypisz ilość rozwiązań, gdzie
0: brak rozwiązań
1: jedno rozwiÄ…zanie: x1
2: dwa rozwiÄ…zania: x1, x2
3: rozwiązaniem jest każda liczba rzeczywista
Turbo Pascal 7.0 str 16
TEMAT 5: INSTRUKCJE ITERACYJNE
1. Instrukcje iteracyjne służą do wielokrotnego wykonywania ciągu instrukcji.
W języku Turbo Pascal występują 3 instrukcje iteracyjne:
" for..to..do
" while..do
" repeat..until
2. InstrukcjÄ™ for..to..do stosuje siÄ™ w celu wielokrotnego wykonywania pewnej grupy instrukcji.
Liczba powtórzeń jest znana, Pętla jest otwarta co oznacza, że jeżeli jest więcej instrukcji do
wykonania w pętli należy założyć klamrę logiczną begin .. end;.
for zmienna := początkowa_wartość_zmiennej to końcowa_wartość_zmiennej
do begin
...........................
ciÄ…g instrukcji;
...........................
end;
LUB
for zmienna := końcowa_wartość_zmiennej downto początkowa_wartość_zmiennej
do begin
...........................
ciÄ…g instrukcji;
...........................
end;
3. InstrukcjÄ™ repeat ...until stosuje siÄ™ w przypadku, gdy znany jest warunek przerywajÄ…cy
wykonywanie tego samego ciągu instrukcji. Liczba powtórzeń nie jest znana. Pętla zamknięta,
Pętla repeat przynajmniej raz się wykona (warunek sprawdzany jest na końcu; TRUE = wyjście),
repeat
...............
ciÄ…g instrukcji;
...............
until warunek;
4. W przypadku instrukcji while..do ciąg instrukcji jest wykonywany tak długo, dopóki spełniony
jest warunek po słowie kluczowym while. Liczba powtórzeń nie jest znana. Pętla otwarta. Może nie
wykonać się ani razu (nie spełniony warunek na wejściu do pętli; TRUE = wejście)
while warunek do
begin
...............
ciÄ…g instrukcji;
...............
end;
program licznik_FOR;
uses crt; program
var licznik_REPEAT;
program licznik_WHILE;
i:integer; uses crt;
uses crt;
BEGIN var
var
clrscr; i:integer;
i:integer;
for i:=1 to 10 do BEGIN
BEGIN
begin clrscr;
clrscr;
writeln ('petla -> I:=0;
I:=0;
',i:3); repeat
while i<10 do
end;
i:=i+1; begin
readkey
{licznik}
i:=i+1; {licznik}
end.
writeln ('petla -> ',i:3);
writeln ('petla ->
until i=10;
',i:3);
readkey
end;
END.
readkey
END.
Turbo Pascal 7.0 str 17
Turbo Pascal 7.0 str 18
DODATEK DO PTLI ITERACYJNYCH
program
repeat_licznik__warunek_wyjscia;
Program
uses crt;
while_licznik__warunek_wejscia;
var
uses crt;
i:integer;
var
B1:boolean;
i:integer;
BEGIN
B1:boolean;
clrscr;
BEGIN
Writeln('*** petla REPEAT ***');
clrscr;
writeln;
Writeln('*** petla WHILE ***');
B1:=False; {program nadaje
writeln;
wartość (false, 0)
B1:= True;
i:=0; poczÄ…tkowÄ… przy
i:=0;
zdefiniowaniu}
While B1 do
Repeat
begin
i:=i+1;
i:=i+1;
{i:=succ(i);}
writeln ('petla (i) -> ',i:3);
writeln ('petla (i) -> ',i:3);
B1 := i<5;
B1 := i=5;
writeln('warunek wejscia ->i<5 jest
writeln('warunek wyjscia ->i=5 jest
',B1);
',B1);
writeln;
writeln
end;
until B1;
write('*** jestem poza petla *** ,gdzie
write('*** jestem poza petla *** ,gdzie
i=',i);
i=',i);
readkey
readkey
END.
END.
END.
program pamiec_startowa;
{ile razy wykona się pętla WHILE?}
uses crt;
var i:integer;
BEGIN
clrscr;
writeln('petla repeat');
i:=0;
repeat
i:=i+1;
write('*');
until i=5;
writeln;
writeln('petla while');
while i<5 do
begin
write('*');
i:=i+1;
end;
readkey;
Turbo Pascal 7.0 str 19
Turbo Pascal 7.0 str 20
PRZYKAADY
Program obliczający kwadrat podanej liczby. Czynność ta jest wykonywana tyle razy, ile zażyczy
sobie użytkownik. ( INSTRUKCJA FOR..TO..DO )
PROGRAM kwadrat_1;
Uses Crt;
VAR
i, n : Integer;
a, kw : Real;
BEGIN
Writeln( Ile razy obliczać kwadrat liczby ?);
Write( Podaj liczbę powtórzeń n= ); readln(n);
Instrukcje zostanÄ…
wykonane n razy;
For i:=1 to n do
begin Liczbę n podał wcześniej
write( Podaj dowolnÄ… liczbÄ™ a= ); readln(a);
użytkownik programu
kw:= sqr(a);
writeln( Kwadratem liczby a jest : , kw:5:2);
end;
END.
& & & & & & & & & & & & & & & & & & & & & & & & ..
Program obliczający kwadrat podanej liczby. Czynność ta jest wykonywana tak długo, dopóki
użytkownik naciska klawisz n . ( INSTRUKCJA WHILE.. DO )
PROGRAM kwadrat_2;
Uses Crt;
VAR
a, kw : Real;
BEGIN
while readkey <> n do
begin
write( Podaj dowolnÄ… liczbÄ™ a= ); readln(a);
kw:= sqr(a);
writeln( Kwadratem liczby a jest : , kw:5:2);
writeln( Czy kontynuować? Naciśnij t lub n );
end;
END.
& & & & & & & & & & & & & & & & & & & & & & & & & .
Program obliczający kwadrat podanej liczby. Czynność ta jest wykonywana tak długo, dopóki nie
zostanie wciśnięty klawisz ESC . ( INSTRUKCJA REPEAT..UNTIL )
PROGRAM kwadrat_3;
Uses Crt;
VAR
a, kw : Real; y : Byte; z : Char;
BEGIN
repeat
write( Podaj dowolnÄ… liczbÄ™ a= ); readln(a);
kw:= sqr(a);
writeln( Kwadratem liczby a jest : , kw:5:2);
writeln( ESC EXIT );
z := ReadKey;
{lub y := Ord( z ); }
until z = Chr (27); {lub z = # 27;} { until y = 27; }
END.
Turbo Pascal 7.0 str 21
program suma_parz_AdoB;
{program oblicza sumÄ™ wszystkich parzystych liczb naturalnych
z zakresu od A do B używając instrukcji For, While, Repeat}
uses crt;
var i:integer;
A,B,suma:integer;
BEGIN
clrscr;
writeln ('ustal zakres dodawanych liczb od A do B');
write ('podaj A i B '); readln(A,B);
suma:=0;
For i:=A to B do
if (i mod 2)=0 then suma:=suma+i;
writeln ('suma liczb parzystych: ':30,suma:3); {dla A=1; B=5 -> suma
liczb 2 i 4 wynosi 6}
readkey;
END.
{analogicznie wykonaj dla pętli REPEAT, WHILE jako licznik wykorzystaj
A:=A+1;}
----------------------------------------------------------------------------------------------------------------
program obliczenie_wykladnicze;
{program oblicza wartość x do potęgi n - }
xn
uses crt;
var i,x,n,s:longint;
BEGIN
clrscr;
write('wrowadz podstawe x=');read(x);
write('wprowad wykladnik n=');read(n);
s:=1;
for i:=1 to n do
begin
s:=s*x
end;
writeln('wynik =',s);
repeat until keypressed;
END.
ĆWICZENIE 5_1 Oblicz sumę liczb od 1 do 10. Zastosuj pętle for
ĆWICZENIE 5_2 Program wpisuje liczby naturalne mniejsze od 100 i podzielne przez 11.
ĆWICZENIE 5_3 Program oblicza średnią N podanych przez użytkownika liczb
ĆWICZENIE 5_4 Program oblicza N! {metoda iteracyjna pętla for}
ĆWICZENIE 5_5 Program sprawdza czy liczba N jest pierwsza
write('podaj liczbÄ™');
program max_10;
readln(a);
{program szuka najwiekszej liczby z
max:=a;
dziesięciu,
i:=1;
gdzie liczby wczytane sa z klawiatury
pętla repeat }
uses crt;
var
a,max:real;
repeat
i:integer;
write('podaj liczbe ');
BEGIN
readln(a);
clrscr;
if a>max then max:=a;
Turbo Pascal 7.0 str 22
i:=i+1; readkey;
until i > 9; END.
write('największa z tych liczb: =
',max:6:1);
Turbo Pascal 7.0 str 23
program gwiazdki_1;
write('1':13-2*L);
{ dla L=1 nie nastąpi wejście
uses crt;
Write('1':L);
do pętli pętli wewnętrznej,
var K:integer;
Writeln
ponieważ wartość końcowa
begin
end;
2*L-2 zmiennej sterujÄ…cej K
clrscr;
write('1':10);
for K:=1 to 8 do jest mniejsza od wartości
for K:=1 to 13
Write( * ); {sprawdz Writeln }
poczÄ…tkowej}
do write('1');
readkey
readkey
end.
program piramida_2
end.
(Output);
program gwiazdki_2;
{powtórz program piramida_1
uses crt; *
trzy razy w pętli FOR
var K:integer *
program
Begin *
tapeta_5(Output);
program
clrscr; *
uses crt;
CHOINKA(Output);
for K:=1 to 8 do *
var
{wyjściem jest program
Writeln( * :K); *
K,L:integer;
piramida_1}
readkey *
begin
uses crt;
end. *
clrscr;
var K,L,j:integer;
for K:=1 to 3
begin
program literki_1;
do begin
clrscr;
uses crt;
writeln;
for j:=1 to 3 do
var K:integer;
for L:=1 to 5
LITERA:char;
for L:=1 to 4+L do
do begin
begin
begin
write('1':13);
clrscr;
Write('*':15-L) ;
for K:=1 to 3 do Write('1':L) ;
for K:=1 to 2*L-2 do
for LITERA:='A' to 'G' do
Write('1':12-2*L);
Write('*');
Write(LITERA:2);
write('1':L);
readkey Writeln
Writeln
end.
end;
end;
readkey
A B C D E F G A B C D E F G A B C
end;
end.
D E F G
readkey
end.
{W przykladzie petla "zewnetrzna" jest
sterowana zmienna K typu integer, a
program figura_2(Output);
petla "wewnetrzna" zmienna LITERA
program
uses crt;
typu char}
tapeta_6(Output);
var K,L:integer;
uses crt;
program literki_2;
begin
var
uses crt;
clrscr;
K,L,M:integer;
var K:integer;
write('*':13);
begin
LITERA:char;
for K:=1 to 12
clrscr;
begin
do write('*');
{-------------}
clrscr;
writeln;
for K:=1 to 3
for K:=1 to 3 do
for L:=1 to 5
begin do begin
do begin
for LITERA:='A' to 'G' do
writeln;
Write(LITERA:2); Write('*':L+13) ;
{--------------}
Writeln
Write('*':12-2*L);
for L:=1 to 5
end; A B C D E F
Writeln
do begin
G
end;
Write('1':L) ;
readkey A B C D E F
Write('*':19);
Write('1':12-2*L);
G
{-----------------}
end. A B C D E F
readkey
for M:=1 to 5
G
end.
do begin
program piramida_1(Output); Write('1':2*L) ;
program figura_3(Output);
uses crt;
Write('1':12-2*L);
uses crt;
var K,L:integer; end;
var
begin
{-----------------}
K,L:integer;
clrscr; writeln
begin
for L:=1 to 5
end;
clrscr;
do begin {--------------}
write('1':10);
Write('*':15-L) ;
end;
for K:=1 to 13
for K:=1 to 2*L-2 {-------------}
do write('1');
do Write('*');
readkey
writeln;
Writeln + end.
for L:=1 to 5
end; + + +
do begin
Napisz program, który
readkey + + + + +
write('1':10);
wykona figurę jak niżej:
end. + + + + + + +
write('1':L);
(dwie petle FOR)
+ + + + + + + + +
Turbo Pascal 7.0 str 24
(dwie pętle FOR
+ + + + +
+
+ + + + + +
+ + + + A + + +
+ +
+ + + + + + +
+ + + + A + + +
+ + +
+ + + + A + + +
+ + + + Kolejny program wykona
napis j.n
Turbo Pascal 7.0 str 25
TEMAT 6: INSTRUKCJA WYBORU: CASE .. OF .
1. Instrukcja CASE jest instrukcjÄ… wyboru (selekcji), sterujÄ…cÄ… wyborem jednej z instrukcji do
wykonania. Składnia instrukcji CASE jest następująca:
CASE Zmienna OF {zmienna zwana selektorem}
Pierwsza lista stałych wyboru : Instrukcja1;
Druga lista stałych wyboru : Instrukcja2;
.
.
N-ta lista stałych wyboru : InstrukcjaN.
ELSE Instrukcja;
END;
gdzie selector jest wyrażeniem typu porządkowego (np. Integer, Char, Boolean), a listy stałych wyboru
zawierają stałe typu selektora.
2. PRZYKAAD 6_1 program wypisujący komunikat informujący o porze roku w zależności od numeru
podanego miesiÄ…ca.
PROGRAM x;
Uses Crt;
VAR
Zmienna występująca po słowie case musi być typu całkowitego
a: Integer;
BEGIN
Write( Program wypisuje komunikat o porze roku );
Write( Podaj numer miesiÄ…ca roku );
Read(a);
Case a of
1,2,12 : write( Jest zima );
3,4,5 : write( Jest wiosna );
6,7,8 : write( Jest lato );
9,10,11 : write( Jest jesień );
else write( Nie ma takiego miesiÄ…ca );
end;
repeat until keypressed;
END.
3. PRZYKAAD 6_2 fragment programu, który przyporządkowuje wynikom punktowym z zakresu 0-100
punktów oceny według zasady:
4.
Wynik 90-100 p. Ocena 5.0; Wynik 60-69 p. Ocena 3.5;
Wynik 80-89 p. Ocena 4.5; Wynik 50-59 p. Ocena 3.0;
Wynik 70-79 p. Ocena 4.0; Wynik 0-49 p. Ocena 2.0;
& & .
CASE Wynik DIV 10 OF
10 , 9 : Ocena := 5.0 ;
8 : Ocena := 4.5 ;
7 : Ocena := 4.0 ;
6 : Ocena := 3.5 ;
5 : Ocena := 3.0 ;
0, 1, 2, 3, 4 : Ocena := 2.0;
END;
ĆWICZENIE 6_1;
program "rysuje ramkę" przy pomocy kodów ASCII:
[#]+[(186, 187, 188, 200, 201, 205, 32 - spacja )]
Szerokość ramki -> n
Wysokość ramki -> m,
gdzie obie zmienne wczytane z klawiatury, zastosuj pętle FOR
rogi ramki -> pojedyncze znaki ASCII
wypełnienie ramki -> spacje
Turbo Pascal 7.0 str 26
Wypisuje kody wpisanych znakow Oblicz silnie liczby n - metoda
- ESC konczy pracÄ™ iteracyjna, rekurencyjna do wyboru
program znak_kod; program silnia_mix;
uses crt;
uses crt; var liczba:integer;
silnia:longint;
var znak:char; wybor:integer;
{----------------------------------------------------}
kod:integer;
{ iteracja}
function silnia_iter(n:integer):longint;
BEGIN
var i,iloczyn:longint;
clrscr;
begin
iloczyn:=1;
repeat
for i:=2 to n do iloczyn:=iloczyn*i;
writeln('ESC - EXIT');
silnia_iter:=iloczyn;
writeln;
end;
write('Wpisz znak ->');
{-------------------------------------}
znak:=ReadKey;
{rekurencja}
kod:=ord(znak);
function silnia_rekur(n:integer):longint;
writeln(' ',znak,' kod wynosi = ',kod);
begin
until kod=27;
if n=0 then silnia_rekur:=1
else
writeln('Koniec pracy - nacisnij dowolny
silnia_rekur:=n*silnia_rekur(n-1);
klawisz');
end;
repeat until keypressed;
{------------------------------------}
END.
{wykonanie programu w zależności
---------------------------------------
od wyboru metody}
BEGIN
{Wypisuje znaki o wpisanych
Repeat
kodach
clrscr;
- 0 konczy prace}
writeln('program oblicza silnie liczby n
');
program kod_znak;
writeln('w zaleznosci od wyboru
metody');
uses crt;
writeln ;
var znak:char;
write('Podaj liczbe n -> ');
kod:integer;
readln(liczba);
BEGIN
writeln('metoda iteracyjna -------------
clrscr;
1');
writeln('metoda rekurencyjna -----------
repeat
2');
writeln( 0 kończy pracę );
writeln('koniec pracy ------------------ 0');
write('Podaj kod znaku ->');
write('wybierz metode -> ');
readln(kod);
readln(wybor);
znak:=chr(kod);
writeln ;
writeln('Kod ',kod,' odpowiada znakowi
',znak);
Case wybor of
writeln;
1:begin
until kod=0;
silnia:=silnia_iter(liczba);
writeln('Silnia = ',silnia);
writeln('Koniec pracy - nacisnij dowolny
repeat until keypressed;
klawisz');
end;
repeat until keypressed;
2:begin
END.
silnia:=silnia_rekur(liczba);
writeln('Silnia = ',silnia);
repeat until keypressed;
end;
end;
until wybor=0;
Turbo Pascal 7.0 str 27
END.
Turbo Pascal 7.0 str 28
TEMAT 7: YPY DANYCH DEFINIOWANE PRZEZ UŻYTKOWNIKA
T
W poprzednich rozdziałach wprowadzono pojęcie typu danych jako zbioru wartości,
które mogą przyjmować dane i zbioru operacji, jakie można wykonywać na tych danych.
Dotychczas poznaliśmy standardowe (tj. wbudowane w język) typy proste: Integer,
Real, Boolean i Char. Jeżeli zachodzi potrzeba, użytkownik może zdefiniować własne
typy danych w sekcji deklaracji programu za pomocÄ… definicji:
TYPE pierwszy identyfikator typu = pierwszy opis typu;
drugi identyfikator typu = drugi opis typu;
. . . .
n-ty identyfikator typu = n-ty opis typu;
Typ niestandardowy (definiowany przez użytkownika) może być typem: prostym
(wyliczeniowy i okrojony), strukturalnym (tablicowy, zbiorowy, rekordowy i plikowy) lub
wskaznikowym.
TYP WYLICZENIOWY I ZMIENNA WYLICZENIOWA
Typ wyliczeniowy jest to skończony i uporządkowany zbiór wartości definiowany
następująco:
TYPE T = (e1, e2, & ., En) ;
gdzie T jest identyfikatorem typu, zaś e są identyfikatorami stałych (możliwych
i
wartości ) typu T.
Przykład 7_1:
TYPE Ocena = (bdb, pdb, db, pdst, dost, nast.);
Przedmioty = (WF, jezyk1, jezyk2, matematyka, fizyka, historia);
Stałe w nawiasach mają podobny sens jak np. stałe True i False typu Boolean. Tak więc
dst jest identyfikatorem stałej typu Ocena, WF jest identyfikatorem stałej typu
Przedmioty itd.
Omawiany typ nazwano wyliczeniowym, ponieważ w definicji wyliczamy wszystkie
możliwe jego wartości. Wartościom tym po zdefiniowaniu, są przyporządkowane liczby
porządkowe: 0, 1, 2,& ., n-1 zgodnie z kolejnością wyliczenia. Jest to więc nowy typ
porządkowy, zdefiniowany przez użytkownika
Przykład 7_2
Istnienie uporządkowania powoduje, że stałe tego samego typu wyliczeniowego mogą
być argumentami wyrażeń relacyjnych i argumentami funkcji standardowych Ord, Succ
i Pred. Dla typów z przykładu wyżej mamy np.: Pred(matematyka)=jezyk2, Ord(db)=2
Możemy też wartościować wyrażenia relacyjne: bdbdost jest
bdbTrue
Możliwe jest podobnie jak dla typów standardowych, deklarowanie zmiennych typu
wyliczeniowego. Czynimy to na ogół dla zwiększenia czytelności programu.
Przykład 7_3
TYPE Pogoda = (Slonecznie, Pochmurno, Deszcz, Snieg);
VAR I, J, K : Integer;
X, Y : Real;
W, Prognoza : Pogoda;
Jeżeli identyfikator typu jest zbędny, to możemy go pominąć, łącząc deklaracje
zmiennej z opisem typu, np.
W, Prognoza : (Slonecznie, Pochmurno, Deszcz, Snieg);
Zmienne i stałe typu wyliczeniowego mogą występować w instrukcjach, w których nie
wykonuje się operacji arytmetycznych; nie mogą występować w instrukcjach Read/ln i
Write/ln
TYP OKROJONY
Typ okrojony jest to podzbiór wartości typu porządkowego, standardowego lub
wyliczeniowego definiowany następująco:
TYPE T = min . . max;
gdzie T jest identyfikatorem typu, a min, max są stałymi typu pierwotnego, tj. typu, z
którego jest wykrojony przedział od min do max.
Liczba porządkowa każdej stałej typu okrojonego jest równa wartości funkcji Ord dla tej
stałej, traktowanej jako element zbioru pierwotnego.
Turbo Pascal 7.0 str 29
Przykład 7_4
TYPE wynik = 0 . . 100 ; Byte = 0 . . 255 ; Num = 0 . . 9 ;
Nazwy = (FORTRAN, ALGOL, COBOL, PASCAL, C, PLI, MODULA, FORTH) ;
Znane = PASCAL . . MODULA ;
VAR W, Zakres : wynik ;
B, BB : Byte
Możliwe są deklaracje zmiennych z pominięciem definicji typu (są wyjątki)
Turbo Pascal 7.0 str 30
TEMAT 8: TYP TABLICOWY WPROWADZANIE I WYSZUKIWANIE
ELEMENTÓW TABLIC.
Tablica skończony zbiór elementów tego samego typu. Definicja typu tablicowego ma
postać:
TYPE A = ARRAY [T] of T2 ;
gdzie A jest identyfikatorem nowego typu tablicowego, T1 typem indeksowym,
określającym liczbę elementów tablicy, a T2 typem składowym (dowolnym typem)
W definicji typu tablicowego typ indeksowy może być typem porządkowym Char,
Boolean, wyliczeniowym lub typem okrojonym z jednego z wymienionych typów bądz z
typu Integer
Przykład Deklaracja typów
TYPE
Indeks = 1..5; {typ okrojony}
Wektor = ARRAY[Indeks] of Integer ;
Wiersz = ARRAY[1..65] of Char;
B = ARRAY[ A .. P ] of Boolean ;
Ocena = (bdb, pdb, db, pdst, dst, ndst) ; {typ wyliczeniowy}
Tab = ARRAY[1..6] of Ocena ;
Tab1 = ARRAY[Ocena] of Real ;
Tab2 = ARRAy[1..45] of db..dost;
VAR
W1 : Wektor ;
B1 : B ;
Stopień : Tab1 ;
Karta : ARRAY[1..80] of Char;
Zadeklarowane wyżej zmienne są zmiennymi tablicowymi, a więc zmiennymi
reprezentującymi całe tablice. Często nazywa się te zmienne krótko tablicami. Tak więc
zmienna:
W1 jest 5-elementową tablicą, do której można wpisywać wartości typu Integer;
B1 jest tablicą 16-elemntową, każdy jej element może mieć wartość True lub
False
Dostęp do dowolnego elementu tablicy uzyskujemy przez tzw. zmienną
indeksowanÄ…
Przykład tablicy jednowymiarowej.
Indeksy tablicy
1 2 3 4 5
28 35 4 1 16
Elementami sÄ… liczby
Deklaracja tablicy całkowite
VAR A : ARRAY[1..5] of Integer;
Zmienna
Tablica 5-
tablicowa
elementowa
{nazwa tablicy}
Przypisywanie wartości poszczególnym elementom tablicy:
a[1]:=28; a[2]:=35; a[3]:=4; a[4]:=1; a[5]:=16 {a[i] zmienna
indeksowana}
Przykład tablicy dwuwymiarowej.
1. 3. 3. 16
Deklaracja tablicy:
3 8 1
2 5. 3 6
VAR a : array[1..3 , 1..4 ] of Real;
4
przypisanie wartości elementom
2 5 73 7
nr kolumny
tablicy
nr wiersza
a[1,1]:=1.3; a[2,1]:=2; a[3,1]:=2;
a[1,2]:=3.8; a[2,2]:=5.4; a[3,2]:=5;
a[1,3]:=3.1; a[2,3]:=3; a[3,3]:=7.3;
Turbo Pascal 7.0 str 31
a[1,4]:=16; a[2,4]:=6; a[3,4]:=7;
W praktyce często zachodzi potrzeba kopiowania całych tablic; jest to możliwe w przypadku, gdy
tablice po obu stronach instrukcji przypisania sÄ… tego samego typu
Przykład
VAR P, Q : ARRAY[1..6] of Integer;
Instrukcja przypisania P:=Q; jest poprawna i kopiuje całą zawartość tablicy Q do tablicy P.
Daje ten sam efekt , co pętala: FOR K:=1 TO 6 DO P[K] := Q[K];
Turbo Pascal 7.0 str 32
PROGRAM PROGRAM
TABLICA_JEDNOWYMIAROWA; TABLICA_DWUWYMIAROWA;
uses crt; uses crt;
var a:array[1..6] of integer; var a:array[1..2,1..6] of integer;
i:integer; i:integer; {numer kolumny}
BEGIN j:integer; {numer wiersza}
clrscr; BEGIN
FOR i:=1 to 6 do clrscr;
begin FOR j:=1 to 2 do
writeln ('podaj liczbe ',i); begin
readln (a[i]); FOR i:=1 to 6 do
end; begin
writeln ('podaj liczbe ',i,' wiersza
writeln ('elementy tablicy'); ',j) ;
for i:=1 to 6 do readln (a[j,i]);
write ('a[i] : 3); {3 - format dla liczb end;
dwucyfrowych} writeln;
readkey end;
END.
writeln ('elementy tablicy');
for j:=1 to 2 do
begin
for i:=1 to 6 do
write ('a[j,i] : 3);
writeln;
end;
readkey
END.
PRZYKAAD 8_1
Do tablicy o nazwie t wprowadzić z klawiatury 10 dowolnych liczb rzeczywistych.
Zsumować liczbę trzecią i szóstą; wynik zapisać pod zmienną s.
Powiększyć każdą z 10 liczb o 2, a następnie wypisać powiększone liczby na ekranie.
.......
for i:=1 to 10 do read(t[i]);
s : = t[3] + t[6];
for i:=1 to 10 do begin
t[i]:=t[i]+2;
write(t[i]:4);
end;
& & &
TEMAT 9: GENERATOR LICZB LOSOWYCH:RANDOMIZE. FUNKCJA RANDOM.
Procedura RANDOMIZE uaktywnia generator liczb losowych.
Liczbę losową otrzymujemy poprzez wywołanie funkcji RANDOM(zakres), gdy nie
zostanie podany zakres, to zostaną wylosowane liczby z przedziału [0,1).
Przykład
a := random(100) zmienna a przyjmuje wartość równą liczbie naturalnej wylosowanej
z przedziału 0..99
Przykład program losuje 10 liczb z przedziału 0..49, a następnie wypisuje je na ekranie.
PROGRAM x;
Uses Crt;
Napisz program, który:
VAR
1. Losuje 20 liczb ze 100;
i:Integer;
2. wypisuje je,
a:array[1..10] of Integer;
3. Oblicza i wypisuje średnią
BEGIN
arytmetycznÄ… wylosowanych liczb
Randomize;
4. wypisze liczby mniejsze od średniej;
for i:=1 to 10 do begin
5. wypisze liczby większe od średniej
a[i]:=random(50);
tablicÄ™
write(a[i]:3);
5-cio elementowÄ…, a generuj liczby losowe z
zakresu [0,10)
Turbo Pascal 7.0 str 33
end;
END.
LICZBA BINARNA A LICZBA DZIESITNA ZAMIANA
Program zamieniający liczbę binarną ( 8 elementowy ciąg 0-1 ) na dziesiętną i odwrotnie.
Uwzględnić przypadek, gdy użytkownik wprowadzi inne liczby niż 0 lub 1.
W kodzie binarnym (0;1) na 8-bitach można zapisać liczbę 255.
Program binary;
Uses crt; 20 = 1
Var q:char; 21 = 2
i, n, Lb, kw : integer; 22 = 4
b: array[0..7] of integer; 23 = 8
24 = 16
BEGIN 25 = 32
clrscr; 26 = 64
writeln( 1 - binarna na dziesiętna ); 27
= 128
writeln( 2 dziesietna na binarna ); suma = 255
q:=readkey;
{-----------------------------------------------}
if q= 1 then begin
write( podaj liczbe binarna: -> po każdym elemencie wciśnij spacje );
i = 0 1 2 3 4 5 6 7
for i:=1 to 8 do read(b[i]);
0 1 1 0 0 1 1 1
kw:=128; Lb:=0;
for i:=1 to 8 do begin
0*27 1*26 1*25 0*24 0*23 1*22 1*21 1*20
Lb:=Lb+(b[i]*kw);
0 64 32 0 0 4 2 1
kw:= kw div 2
end;
writeln( jest to liczba dziesietna: , Lb ); {suma Lb=103}
end;
{-------------------------------------------------}
if q= 2 then begin Lb : 2 wynik div mod (reszta)
write( podaj liczbe: ); read(Lb);
103 : 2 = 51 1
for i:=1 to 8 do begin 51 : 2 = 25 1
25 : 2 = 12 1
b[i]:=Lb mod 2;
12 : 2 = 6 0
Lb :=Lb div 2;
6 : 2 = 3 0
end;
3 : 2 = 1 1
1 ; 2 = 0 1
0 : 2 = 0 0
write( liczba binarna: );
0 1 ciąg reszt czytany od końca ( od dołu )
for i:=8 downto 1 do write(b[i]:3);
to zapis binarny liczby
end;
{------------------------------------------------}
repeat until keypressed;
END.
TEMAT 10: SORTOWANIE TABLIC.
Algorytm sortowania n liczb: a , a a a
1 2, 3 , ..., n
1.sprawdzić czy a1< a2 tzn. pierwsze dwie liczby ułożone są we właściwej kolejności
2.jeżeli tak, wówczas sprawdzić, czy a2< a3
3.podobnie sprawdzić kolejne pary sąsiadujących liczb
4.gdyby sprawdzany warunek nie był spełniony należy zamienić sprawdzane liczby miejscami,
po czym ponownie zacząć sprawdzanie tzn. przejść do punktu1.
5.sortowanie zostanie zakończone, gdy po sprawdzeniu wszystkich sąsiednich par liczb nie
zostanie dokonana żadna zamiana.
Turbo Pascal 7.0 str 34
Program sortowanie_liczb;
uses Crt;
VAR
liczby:array[1..100] of real;
i,j,n:integer;
pomoc:real;
BEGIN
clrscr;
writeln('Program sortuje alfabetycznie podane przez ciebie liczby');
write('Podaj ilość liczb: '); readln(n);
Wczytywanie podanych liczb do tablicy
writeln('Podaj liczby: ');
liczby
for i:=1 to n do read(liczby[i]);
Porównywanie kolejnych sąsiadujących ze sobą
FOR i:=1 to n-1 do
liczb
FOR j:=i+1 to n do
if liczby[i]>liczby[j] then
begin
pomoc:=liczby[i];
Jeżeli porównywane liczby znajdą się
liczby[i]:=liczby[j];
w niewłaściwej kolejności, wówczas
liczby[j]:=pomoc;
zamieniane sÄ… miejscami
end;
writeln;
writeln('Oto uporzÄ…dkowane liczby:');
writeln;
for i:=1 to n do write(' ',liczby[i]:0:2);
repeat until keypressed;
END.
---------------------------------------------------------------------------------------
Program sortowanie_nazwisk;
uses Crt;
VAR
nazwisko:array[1..100] of string[30];
i,j,n:integer;
pomoc:string[30];
BEGIN
clrscr;
{czytanie nazwisk - kolejnych elementów tablicy}
writeln('Program sortuje alfabetycznie podane przez ciebie nazwiska');
write('Podaj ilość nazwisk: '); readln(n);
writeln;
for i:=1 to n do begin
write('Podaj nazwisko nr ',i,': ');
readln(nazwisko[i]);
end;
{porzÄ…dkowanie nazwisk}
FOR i:=1 to n-1 do
FOR j:=i+1 to n do
if nazwisko[i]>nazwisko[j] then
begin
pomoc:=nazwisko[i];
nazwisko[i]:=nazwisko[j];
nazwisko[j]:=pomoc;
end;
{wypisywanie uporzÄ…dkowanych nazwisk}
writeln;
writeln('Oto uporzÄ…dkowane nazwiska:');
writeln;
for i:=1 to n do writeln(i:3,' ',nazwisko[i]);
repeat until keypressed;
END.
Turbo Pascal 7.0 str 35
{********************************
Sortowanie rosnaco, stosujac algorytm
zamiany parami. W algorytmie bada sie {***********************************
(przeglada) pary sasiadujacych ze soba Sortowanie rosnaco, stosujac algorytm
liczb i ewentualnie zamienia je miejscami zamiany parami. W algorytmie bada sie
{ ********************************} (przeglada) pary sasiadujacych ze soba liczb
program sortow_A_babelkowe; i ewentualnie zamienia je miejscami
uses crt; **************************************}
const N = 7; {ilosc elementow w program sortow_B_babelkowe;
sortowanym zbiorze} uses crt;
var const N = 7; {ilosc elementow w sortowanym
d:array[1..N] of integer; zbiorze}
i,j:integer ; var
pom:integer; d:array[1..N] of integer;
i:integer ;
BEGIN pom,zamiana:integer;
clrscr;
writeln('Przyklad sortowania bbelkowego'); BEGIN
writeln('-------------------------------'); clrscr;
writeln('Przyklad sortowania bbelkowego');
{do analizy wczytaj zbiór 7-elem. writeln('-------------------------------');
posortowany rosnoco jak i malejaco}
{generujemy zbior do sortowania wypelniony
writeln('podaj liczby'); liczbami pseudolosowymi z zakresu [0;100) }
for i:=1 to N do
read(d[i]); randomize;
writeln; writeln; writeln('przed sortowaniem:');
for i := 1 to N do
begin
d[i] := random(100); write(d[i]:4);
end;
{wygenerowany zbior sortujemy za pomoca writeln; writeln;
algorytmu sortowania babelkowego}
FOR j:=1 to n-1 do {wygenerowany zbior sortujemy za pomoca
begin algorytmu sortowania babelkowego}
FOR i := 1 to n-1 do REPEAT
IF d[i] > d[i+1] then zamiana:=0;
begin FOR i := 1 to n-1 do
pom:=d[i]; IF d[i] > d[i+1] then
d[i]:=d[i+1]; begin
d[i+1]:=pom; pom:=d[i];
end; d[i]:=d[i+1];
d[i+1]:=pom;
{kolejne etapy sortowania (n-1 razy)} zamiana := zamiana +1;
end;
for i:=1 to n do write(' ',d[i]); {zwroc uwage na rozna ilosc petli sortujacych
writeln; zalezna od zbioru wylosowanego czyli
end; stopnia jego uporzadkowania}
for i:=1 to n do write(' ',d[i]);
{zbior zostal posortowany, wypisujemy writeln;
wyniki} UNTIL zamiana=0;
writeln;
writeln('po sortowaniu:'); {zbior zostal posortowany, wypisujemy
for i:=1 to N do write(d[i]:4); wyniki}
writeln; writeln; writeln;
writeln('po sortowaniu:');
repeat until keypressed; for i:=1 to N do write(d[i]:4);
END. writeln; writeln;
repeat until keypressed;
Uwaga END.
Dodanie zmiennej kontrolujÄ…cej czy
dokonuje
Turbo Pascal 7.0 str 36
siÄ™ zamiana skraca czas pracy
algorytmu (przykł. B)
Turbo Pascal 7.0 str 37
{**************************************************************************************
program demonstruje wykorzystanie algorytmu sortowania przez wstawianie
do uporzdkowania niewielkiego zbioru }
program sortow_insertowe;
uses crt;
{funkcja porównujca - porzdek rosncy }
function fp(a1,a2 :integer) :boolean;
var result:boolean;
begin
Result := a1 <= a2;
fp:=result;
end;
{****** program glówny ******** }
const
MAX_N = 20; {ilosc elementow w sortowanym zbiorze}
var
d:array[1..MAX_N] of integer;
i,j,n,x:integer;
BEGIN
clrscr;
writeln('Przyklad sortowania przez wstawianie');
writeln('------------------------------------');
writeln;
{***** generujemy zbior do sortowania wypelniony
liczbami pseudolosowymi z zakresu od 0 do 99 ******}
randomize;
writeln('przed sortowaniem:');
for i := 1 to MAX_N do
begin
d[i] := random(100); write(d[i]:4);
end;
writeln; writeln;
{***** wygenerowany zbior sortujemy za pomoca
algorytmu sortowania przez wstawianie *******}
n := MAX_N;
for i := n-1 downto 1 do
begin
x:=d[i]; j:=i+1;
while (j<=n) and not fp(x,d[j]) do
begin
d[j-1]:=d[j];
inc(j);
end;
d[j-1]:=x;
end;
{****** zbior zostal posortowany, wypisujemy wyniki ******}
writeln('po sortowaniu:');
for i:=1 to MAX_N do write(d[i]:4);
writeln; writeln;
write('nacisnij klawisz ENTER...'); readln;
END.
Turbo Pascal 7.0 str 38
TEMAT 11: DEFINICJA I WYWOAANIE PROCEDURY. ARGUMENTY
WYWOAANIA PROCEDURY.
1. Procedury stosowane sÄ… w sytuacjach, gdy w programie wielokrotnie powtarza siÄ™ ten sam
ciąg czynności.
2. Deklaracja procedury.
PROCEDURE nazwa procedury;
VAR
deklaracje zmiennych
BEGIN
CiÄ…g instrukcji;
END;
Deklaracje procedur umieszczane są przed słowem kluczowym BEGIN programu.
Przykład deklaracji i wywołania procedury.
PROGRAM x;
Uses Crt;
PROCEDURE linia;
Var
i:Integer; {zmienna i zmienna lokalna wykorzystywana wyłącznie przez tę procedurę}
begin
for i:=1 to 5 do write( * );
end;
BEGIN
Writeln( Program rysuje linie );
linia;
Wywołanie procedury
linia;
poprzez nazwÄ™
END.
Przykład procedury z parametrem.
parametr procedury jego
PROGRAM xx;
wartość określa ilość
Uses Crt;
gwiazdek w linii
VAR
n : Integer;
PROCEDURE linia(n : Integer);
Var
typ
i:Integer;
parametru
begin
wywołanie procedury z parametrem 8
for i:=1 to n do write( * );
narysowana zostanie linia składająca się z
end;
8 gwiazdek
BEGIN
Linia(8);
Write( Podaj długość linii ); read(n);
Linia(n); ilość gwiazdek w linii będzie zależała
od wartości liczby n podanej przez
END. użytkownika
ĆWICZENIE 11_1
Napisać program rysujący linię składającą się z gwiazdek. Wykorzystać procedurę rysującą
linię, w której parametrem jest liczba gwiazdek w linii liczbę tę podaje użytkownik w części
głównej programu.
ĆWICZENIE 11_2
Napisać procedurę wypisującą szlaczek składający się z dowolnych znaków. Parametrami
procedury są: znak, z jakiego ma składać się szlaczek oraz długość szlaczka . Znak oraz
długość szlaczka podaje użytkownik.
Turbo Pascal 7.0 str 39
program procedura_A; aktualne przed zmianą wartości w czasie
uses crt; wykonywania programu.}
var x,y,SAVE:integer; {zmienne
globalne}
PROCEDURE Zamiana;
Pararametr foramlny jest
begin
identyfikatorem używanym do
SAVE := X;
komunikacji pomiędzy blokiem
X := Y;
podprogramu a jego otoczeniem.
Y := SAVE
Zadaniem tego parametru formalnego jest
end; {zamiany}
przejęcie wartości argumentu podanej w
wywołaniu procedury (parametru
BEGIN {programu głównego}
aktualnego)
clrscr;
X := 75; Y := 256;
Rys. PRZEKAZYWANIE PARAMETRÓW:
Writeln('X=',X:5,' Y=',Y:5);
a) przez wartość (skopiowanie wartości)
Zamiana;
Writeln('X=',X:5,' Y=',Y:5);
Zamiana ( X , Y )
readkey
wartość X wartość Y
END.
Wydruk: X= 75 Y= 256
PROCEDURE Zamiana ( A , B : integer );
X= 256 Y= 75
b) przez zmiennÄ…
zmienne X, Y i SAVE w programie w/w sÄ…
Zamiana ( X , Y )
zmiennymi globalnymi, ponieważ
zadeklarowano je w bloku glównym
adres X adres Y
& & & & & & & & .& & & & & & & & & & & & & ..
program procedura_B;
PROCEDURE Zamiana (VAR A , B : integer );
uses crt;
var X,Y:integer; {zmienne globalne}
& & & & & & & & & & & & & & & & & & ..
& & &
PROCEDURE Zamiana (A,B:integer);
program procedura_C;
{ parametry formalne}
uses crt;
Var SAVE:integer; {zmienna lokalna }
var X,Y:integer; {zmienne globalne}
begin
SAVE := A;
PROCEDURE Zamiana(VAR
A := B;
A,B:integer);
B := SAVE;
Var SAVE:integer; {zmienna lokalna}
Writeln ('A=',A:5,' B=',B:5)
begin
end; {zamiany}
SAVE := A;
A := B;
BEGIN {programu glownego}
B := SAVE;
clrscr;
writeln('A=',A:5,' B=',B:5);
X := 75;
end; {zamiany}
Y := 256;
Writeln('X=',X:5,' Y=',Y:5);
BEGIN {programu glownego}
Zamiana(X,Y);
clrscr;
Writeln('X=',X:5,' Y=',Y:5);
X := 75;
readkey
Y := 256;
END.
Writeln('X=',X:5,' Y=',Y:5);
Zamiana(X,Y);
Wydruk:
Writeln('X=',X:5,' Y=',Y:5);
X= 75 Y= 256
readkey
A= 256 B= 75
END.
X= 75 Y= 256
Wydruk:
widac jednokierunkowÄ… komunikacjÄ™
X= 75 Y= 256
programu wołajacego z podprogramem za
A= 256 B= 75
pośrednictwem parametrów przekazywanych
X= 256 Y= 75
przez wartość. Sposób ten chroni parametry
Turbo Pascal 7.0 str 40
jeżeli żądamy, aby wyniki operacji na zmienną. W takim przypadku nazwy
parametrach formalnych w procedurze parametrów formalnych poprzedzamy
zostały przekazane do programu głównego, to słowem-symbolem VAR, które wówczas
stosujemy mechanizm przekazywania przez stajÄ… siÄ™ zmiennymi.
Turbo Pascal 7.0 str 41
TEMAT 12: DEFINICJA I WYWOAANIE FUNKCJI.
1. Funkcja jest podprogramem, podobnie jak procedura. Wywołanie procedury powoduje
wykonanie pewnych czynności; natomiast zadaniem funkcji jest obliczenie konkretnej wartości.
2. Przykładami funkcji standardowych ( zdefiniowanych przez Turbo Pascala ) są: sin(x), a mod b,
round(x), trunc(x) itd.
3. Przykład deklaracji własnej funkcji.
1
f (x) =
Program obliczający wartość funkcji: dla danego argumentu x.
2
x + 1
PROGRAM funkcja;
Uses Crt; Typ argumentu
VAR
x: Real;
Typ wyniku
FUNCTION wart( x : Real ):Real;
begin
wart := 1/(x*x + 1);
end;
Zmienna, pod którą kryje się wynik ma taką samą nazwę jak funkcja
BEGIN
clrscr;
write( Podaj argument x= ); readln(x);
write( Wartość funkcji wynosi , wart ( x : 0 : 2) );
END. Wywołanie funkcji
4. ĆWICZENIE 12_1
Napisać program, który oblicza wartość: nk . Program ten wykorzystuje funkcję, której
argumentami sÄ… n i k.
Ekran wyjściowy:
Program oblicza wartość n do potęgi k
Podaj n = ____
Podaj k = ____
____ do potęgi ____ wynosi ____.
Turbo Pascal 7.0 str 42
TEMAT 12: ZASTOSOWANIA FUNKCJI REKURENCYJNYCH I ITERACYJNYCH
write('Podaj numer elemenu ciagu ->'); readln(m);
1. Zapisz funkcje obliczajÄ…cÄ… n-ty wyraz
writeln('Wynik rekurencyjny=',a_rekuren(m));
podanego ciÄ…gu matematycznego
writeln('Wynik iteracyjny=',a_iterac(m));
repeat until keypressed;
an = an- 1 + 7;
END.
a1 = - 17;
2. Zapisz funkcje obliczajÄ…cÄ… n-ty wyraz
podanego ciÄ…gu matematycznego
program ciag_2;
uses crt;
an = an- 1 + an- 2;
function a_rekuren(n:integer):integer;
a1 = 1;
begin
a2 = 3;
if n=1 then a_rekuren:=1
3. Zapisz funkcje obliczajÄ…cÄ… n-ty wyraz
else
podanego ciÄ…gu matematycznego (n<8)
begin
if n=2 then a_rekuren:=3
else a_rekuren:=a_rekuren(n-
1)+a_rekuren(n-2);
an = an- 1 *an- 3;
end;
a1 = 1;
end;
a2 = 3;
a3 = 5; function a_iterac(n:integer):integer;
var i:integer;
program ciag_1;
a,b,c:integer;
uses crt;
begin
a:=1;
function a_rekuren(n:integer):integer;
b:=3;
begin
for i:=3 to n do begin
if n=1 then a_rekuren:=-17
c:=a+b;
else a_rekuren:=a_rekuren(n-1)+7;
a:=b;
end;
b:=c;
function a_iterac(n:integer):integer;
end;
var i:integer;
case n of
a:integer;
1: a_iterac:=a;
begin
2: a_iterac:=b;
a:=-17;
else a_iterac:=c;
for i:=2 to n do a:=a+7;
end;
a_iterac:=a;
end;
end;
var m:integer;
var m:integer;
BEGIN
BEGIN
clrscr;
clrscr;
write('Podaj numer elemenu ciagu ->');
Turbo Pascal 7.0 str 43
readln(m);
writeln('Wynik rekurencyjny=',a_rekuren(m));
writeln('Wynik iteracyjny=',a_iterac(m));
repeat until keypressed;
END.
program ciag_3;
program fib;
uses crt;
uses crt,dos;
function a_rekuren(n:integer):integer;
{procedura rekurencyjna}
begin
function fib_rekur(n:longint):longint;
case n of
begin
1: a_rekuren:=1;
if n<2 then fib_rekur:=n
2: a_rekuren:=3;
else fib_rekur:=fib_rekur(n-1)+fib_rekur(n-2);
3: a_rekuren:=5;
end;
else a_rekuren:=a_rekuren(n-1)*a_rekuren(n-3);
end;
{procedura iteracyjna}
end;
function fib_iter(n:integer):longint;
var p,p1,p2,i:longint;
function a_iterac(n:integer):integer;
begin
var i:integer;
p1:=0;p2:=1;p:=n;
a,b,c,d:integer;
for i:=2 to n do
begin
begin
a:=1;
p:=p1+p2;
b:=3;
p1:=p2;
c:=5;
p2:=p;
for i:=4 to n do begin
end;
d:=a*c;
fib_iter:=p;
a:=b;
end;
b:=c;
c:=d;
var czas_start,czas_stop:real;
end;
h,m,s,ss:word;
case n of
n:longint;
1: a_iterac:=a;
BEGIN
2: a_iterac:=b;
clrscr;
3: a_iterac:=c;
n:=35;
else a_iterac:=d;
end;
writeln('Liczba Fib. dla n= ',n);
end;
write('Proc. rekurencyjna = ');
GetTime(h,m,s,ss);
var m:integer;
czas_start:=ss+100*(s+60*(m+60.0*h));
writeln(fib_rekur(n));
BEGIN
GetTime(h,m,s,ss);
clrscr;
czas_stop:=ss+100*(s+60*(m+60.0*h));
write('Podaj numer elemenu ciagu ->'); readln(m);
writeln('Czas wykonania =',czas_stop-czas_start:8:0);
writeln('Wynik rekurencyjny=',a_rekuren(m));
writeln('Wynik iteracyjny=',a_iterac(m));
write('Proc. iteracyjna = ');
repeat until keypressed;
GetTime(h,m,s,ss);
END.
czas_start:=ss+100*(s+60*(m+60.0*h));
writeln(fib_iter(n));
Turbo Pascal 7.0 str 44
GetTime(h,m,s,ss);
END.
czas_stop:=ss+100*(s+60*(m+60.0*h));
writeln('Czas wykonania =',czas_stop-czas_start:8:0);
ASCII - American Standard Code for Information Interchange
Z klawiatury można otrzymać 256[0,255] znaków (typ Char ). Każdy ze znaków ma swój kod tzw. kod ASCII;
w systemie dziesiętnym DEC, znaki składają się z symbolu numeru # (ang. hash) po którym występują
właściwe cyfry dziesiętne: np. znak A ma kod #65
write(#65); postać wydruku: A
w systemie szesnastkowym XEX, znaki składają się z bezpośrednio po sobie następujących znaków:
symbolu numeru #, znaku dolara $ i właściwych cyfr szesnastkowych: np. znak A ma kod #$42
write(#$42) postać wydruku: A
Dla danych typu Char określono funkcje standardowe:
Np. Ord( B ) zamienia znak na kod 66; Chr(66) zamienia kod na znak B
Funkcja Ord jest funkcjÄ… odwrotnÄ… do Chr
Uzupełnienie kodów: elementy ramki
#186 Q% #187 W% #188 ]% #32 SP (spacja)
Turbo Pascal 7.0 str 45
#200 Z% #201 T% #205 P%
Wyszukiwarka
Podobne podstrony:
TP KRL
TP MRC S
TP WIL
zwiazki polifenolowe w owocach iw arzywach
IW
TP SKG
TP NRE
TP SAD
TP MWC
TP DWC
TP OKE
TP MPL
TP FSO
TP DWC
TP BOK
TP WLW
więcej podobnych podstron