Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Typy wyrażenia, schematy blokowe, writeln, readln, if, pętle.

Podobne prezentacje


Prezentacja na temat: "Typy wyrażenia, schematy blokowe, writeln, readln, if, pętle."— Zapis prezentacji:

1 Typy wyrażenia, schematy blokowe, writeln, readln, if, pętle

2 Niestandardowe typy proste type nazwa_typu = opis_typu; Typy wyliczeniowe Typy wyliczeniowe type nazwa_typu = (pierwszy_identyfikator, drugi,..., ostatni); Typy okrojone Typy okrojone type nazwa_typu = stała1.. stała2;

3 Typ wyliczeniowy type nazwa_typu = (pierwszy_identyfikator, drugi,..., ostatni); np.: np.: program typy_3; type dtyg = (pn, wt, sr, cz, pt, so, ni); var d: dtyg; begin d := pn; d := succ(d); { wtorek (poznamy za chwilę succ())} writeln(d) { źle! Nie da się wypisać! } end.

4 Typ okrojony type nazwa_typu = stała1.. stała2; {stała1 < stała2, obie tego samego typu porządkowego} {stała1 < stała2, obie tego samego typu porządkowego} np.: np.: type litera = A..Z; drob = pn..pt; { po zdefiniowaniu dtyg w poprz. przykł. } zakres = ;

5 Konwersje porządkowy na liczbę całkowitą porządkowy na liczbę całkowitą ord(wyrażenie); na dowolny typ na dowolny typ nazwa_typu(wyrażenie); np.: dtyg(2)=sr

6 Typy anonimowe zamiast zamiasttype dtyg = (pn, wt, sr, cz, pt, so, ni); var d: dtyg; można nie definiować nazwy typu można nie definiować nazwy typuvar d: (pn, wt, sr, cz, pt, so, ni); {OK.} var d: (pn, wt, sr, cz, pt, so, ni); {blad: redeklaracja pn, wt … }

7 Zgodność typów Dwa typy są zgodne jeżeli: Dwa typy są zgodne jeżeli: 1. są to typy takie same, lub 2. jeden z nich jest okrojonym typem drugiego albo obydwa są okrojonymi typami tego samego typu pierwotnego, lub 3. obydwa są typami zbiorowymi o zgodnych typach podstawowych. T2 jest zgodny w sensie przypisania z T1, jeżeli: T2 jest zgodny w sensie przypisania z T1, jeżeli: 1. T1 i T2 są tym samym typem (nie dotyczy typu plikowego), 2. T1 i T2 są zgodnymi typami porządkowymi i wartość typu T2 należy do typu T1, 3. T1 i T2 są typami zbiorowymi i wszystkie elementy wartości typu T2 należą do typu podstawowego typu T1.

8 Wyrażenia Operatory i funkcje Operatory i funkcje Operatory dla liczb rzeczywistych: Operatory dla liczb rzeczywistych: + - * / Funkcje dla liczb rzeczywistych: Funkcje dla liczb rzeczywistych: abs, sqr, sin, cos, arctan, exp, ln, sqrt, int (TP) Funkcje dla liczb rzeczywistych, wynik integer: Funkcje dla liczb rzeczywistych, wynik integer: round, trunc

9 Wyrażenia Operatory dla liczb całkowitych: Operatory dla liczb całkowitych: + - * mod div and or xor not shl shr Operator dla liczb całkowitych, wynik rzeczywisty: Operator dla liczb całkowitych, wynik rzeczywisty:/ Funkcje dla liczb całkowitych: Funkcje dla liczb całkowitych:odd()

10 Wyrażenia Funkcje dla typów porządkowych: Funkcje dla typów porządkowych: pred(t), succ(t) Funkcje operujące na typach: Funkcje operujące na typach:sizeof(T)

11 Przykłady wyrażeń 2+2, 2+2, 2*(3+4), 2*(3+4), (1+2)/(3+4), (1+2)/(3+4), (a+4)/17.45, (wynik rzeczywisty) (a+4)/17.45, (wynik rzeczywisty) ln(x), sqr(x), sqrt(x), ln(x), sqr(x), sqrt(x), sin(x)/cos(x) (nie ma tan(x)!), sin(x)/cos(x) (nie ma tan(x)!), sqr(sin(x))+sqr(cos(x)) sqr(sin(x))+sqr(cos(x))

12 Typy złożone tablice tablice rekordy rekordy zbiory zbiory pliki pliki

13 Tablice jednowymiarowe type typ_tab = typ_tab = array [typ_porządkowy] of typ_elementów; array [typ_porządkowy] of typ_elementów;type dtyg = (pn, wt, sr, cz, pt, so, ni); dtyg = (pn, wt, sr, cz, pt, so, ni); typ_tab = array [dtyg] of integer; t10 = array [1..10] of real;

14 Tablice jednowymiarowe Mając zdefiniowany typ tablicowy zadeklarujemy tablice: var tab1: typ_tab; tab2: t10; …tab1[ni]:=0;tab1[pn]:=5+tab1[ni];writeln(tab1[pn]);

15 Ograniczenia pamięci systemu Turbo Pascal i DOS type tint = array [integer] of char; {za duzy typ !!!}

16 Poprawność zakresów W TurboPascalu: W TurboPascalu:{$R+} {tutaj poprawność sprawdzana w trakcie biegu programu, a nie tylko kompilacji – indeksy mogą być wyrażeniami} {$R-}

17 Tablice wielowymiarowe Tablica, której elementami są tablice: Tablica, której elementami są tablice: (array[...] of array [...] of...) składnia uproszczona: składnia uproszczona:type typ_tab = array [tporz1,tporz2,tporz3] of typ_elementów; np.: np.:var a = array [a..z,0..4] of real; (...)a[b,3]:=3.1415;

18 Łańcuchy znakowe Typ dla przechowywania łańcuchów znaków Typ dla przechowywania łańcuchów znakówvar s1: string;{ do 255 znaków } s3: string[20];{ do 20 znaków }

19 Łańcuchy znakowe Przykłady operacji na łańcuchach Przykłady operacji na łańcuchach s1 := Przykładowy tekst; writeln(s1); s1 := To jest + s1; Reprezentacja typu string w pamięci Reprezentacja typu string w pamięci łańcuch jako tablica znaków indeksowana od 1 łańcuch jako tablica znaków indeksowana od 1 length(łańcuch) length(łańcuch)

20 Schematy blokowe (a) blok graniczny (początek / koniec (stop)); (a) blok graniczny (początek / koniec (stop)); (b) blok wejścia-wyjścia; (b) blok wejścia-wyjścia; (c) blok obliczeniowy; (c) blok obliczeniowy; (d) blok decyzyjny; (d) blok decyzyjny; (e) blok wywołania podprogramu; (e) blok wywołania podprogramu; (f) blok fragmentu (makro rozpisane w innym miejscu); (f) blok fragmentu (makro rozpisane w innym miejscu); (g) komentarz; (g) komentarz; (h) łącznik wewnątrzstronicowy; (h) łącznik wewnątrzstronicowy; (i) łącznik międzystronicowy (i) łącznik międzystronicowy

21 Schematy blokowe Do każdego bloku może dochodzić dowolna liczba strzałek. Każda z nich oznacza wykonanie wszystkich czynności danego bloku. Do każdego bloku może dochodzić dowolna liczba strzałek. Każda z nich oznacza wykonanie wszystkich czynności danego bloku. Z każdego bloku, z wyjątkiem bloku decyzyjnego, może wychodzić tylko jedna strzałka. Z bloku decyzyjnego moszą wychodzić dwie strzałki oznaczone odpowiednio Tak oraz Nie. Z każdego bloku, z wyjątkiem bloku decyzyjnego, może wychodzić tylko jedna strzałka. Z bloku decyzyjnego moszą wychodzić dwie strzałki oznaczone odpowiednio Tak oraz Nie. Blok graniczny lub łącznik jest pozbawiony jednej ze strzałek dochodzącej lub wychodzącej. Pozostałe bloki muszą mieć zarówno strzałkę dochodzącą, jak i wychodzącą. Blok graniczny lub łącznik jest pozbawiony jednej ze strzałek dochodzącej lub wychodzącej. Pozostałe bloki muszą mieć zarówno strzałkę dochodzącą, jak i wychodzącą. Schemat działania programu powinien być uzupełniony listą nazw, zawierającą nazwy wszystkich zmiennych użytych w programie wraz z wyjaśnieniem spełnianej funkcji. Schemat działania programu powinien być uzupełniony listą nazw, zawierającą nazwy wszystkich zmiennych użytych w programie wraz z wyjaśnieniem spełnianej funkcji.

22 Schematy blokowe program test_4; program test_4; var x: real; var x: real; begin x := 2.5; x := 2.5; x := 2*x; x := 2*x; writeln(x) end. end.

23 Procedury standardowe writeln i write writeln a write writeln a write writeln(Hello, world); write(Hello,); writeln( world); writeln;

24 Procedury standardowe writeln i write działa dla tyów standardowych prostych oraz dla string działa dla tyów standardowych prostych oraz dla string można wywoływać z wieloma argumentami można wywoływać z wieloma argumentami write(x,y); {2 arg, zlepia się!} write(x,,y);{3 arg, czytelnie}

25 Procedury standardowe writeln i write formatowanie formatowaniek=123;writeln(>,k,<);writeln(>,k:5,<);writeln(>,k:2,<);>123< > <>123<

26 Procedury standardowe writeln i write formatowanie, typ real formatowanie, typ real (0 – szer. domyślna) (0 – szer. domyślna)writeln(>,Pi,<);writeln(>,Pi:0,<);writeln(>,Pi:0:3,<);writeln(>,Pi:8:3,<); writeln(>,-Pi,,-Pi,<);writeln(>,-Pi:0:3,<); > E E+00< > 3.1E E+00<>3.142< > <> E+00<>-3.142<

27 Procedury standardowe readln i read read(nazwa_zmiennej); read(nazwa_zmiennej); read a readln, buforowanie read a readln, buforowanie program czytanie; var d: integer; begin write(Podaj liczbę: ); readln(d);writeln(d*d=,sqr(d))end.

28 Instrukcje sterujące

29 Instrukcja if if warunek then instrukcja; instrukcja; program inst_war; var d: integer; begin write(Podaj liczbę: ); readln(d); if d>0 then writeln(d jest dodatnie); writeln(d jest dodatnie);writeln(Koniec) end.

30 Instrukcja złożona begininstrukcja_1;instrukcja_2;...instrukcja_nend program inst_war; var d: integer; begin write(Podaj liczbę: ); readln(d); if d>0 then begin begin writeln(d jest dodatnie); writeln(d jest dodatnie); writeln(d=, d); writeln(d=, d); end; end;writeln(Koniec) end.

31 Instrukcja złożona program inst_war2; var d,d0: integer; begin write(Podaj liczbę: ); readln(d); d0 := d; { zapamiętanie początkowej wartości d } if d<0 then begin begin writeln(Podano liczbę ujemną.); writeln(Podano liczbę ujemną.); d := -d; { wyznaczamy liczbę przeciwną } d := -d; { wyznaczamy liczbę przeciwną } end; { konieczny średnik! } end; { konieczny średnik! }writeln(Abs(,d0,)=,d) end.

32 Instrukcja alternatywy if warunek then instrukcja_1 instrukcja_1else instrukcja_2; instrukcja_2; przed else nie może wystąpić średnik przed else nie może wystąpić średnik

33 Instrukcja alternatywy program inst_alt; var d: integer; begin write(Podaj liczbę: ); readln(d); if d>0 then writeln(d jest dodatnie) writeln(d jest dodatnie)else if d<0 then if d<0 then writeln(d jest ujemne) writeln(d jest ujemne) else else writeln(d jest zerem) writeln(d jest zerem)writeln(Koniec) end.

34 Iteracje: pętla while while warunek do instrukcja; instrukcja;

35 Iteracje: pętla while program wysnaczenie potegi liczby; var n,wynik: integer; begin write(Do której potęgi podnieść 2: ); readln(n); { n powinno być nieujemne!!! Nie sprawdzamy tego. } wynik:=1; while n > 0 do begin begin wynik:=2*wynik; wynik:=2*wynik; n:= n-1 { albo dec(n) } n:= n-1 { albo dec(n) } end; end;writeln(wynik=,wynik)end.

36 Iteracje: pętla repeat repeat instrukcja_1; instrukcja_1; instrukcja_2; instrukcja_2; instrukcja_n instrukcja_n until warunek;

37 Iteracje: pętla repeat program przyk_repeat; var n: integer; beginrepeat write(Podaj liczbę nieujemną: ); write(Podaj liczbę nieujemną: ); readln(n); readln(n); if n<0 then if n<0 then writeln(To jest liczba ujemna!); writeln(To jest liczba ujemna!); until n>=0; writeln(W porządku.) end.

38 Iteracje: pętla for for zm_ster := wart_pocz to wart_końc do instrukcja; instrukcja; wariant downto wariant downto

39 Iteracje: pętla for zmienną sterującą zm_ster może być tylko zmienna typu porządkowego (np. integer, char, typ wyliczeniowy); zmienną sterującą zm_ster może być tylko zmienna typu porządkowego (np. integer, char, typ wyliczeniowy); wart_pocz oraz wart_końc muszą być wyrażeniami tego samego typu, co zmienna sterująca; wart_pocz oraz wart_końc muszą być wyrażeniami tego samego typu, co zmienna sterująca; instrukcja umieszczona wewnątrz pętli nie może zmieniać wartości zmiennej sterującej; instrukcja umieszczona wewnątrz pętli nie może zmieniać wartości zmiennej sterującej; po zakończeniu wykonywania pętli wartość zmiennej sterującej jest nieokreślona (nie wolno zakładać, że jest ona równa następną wartością po wart_końc). Czyli schemat blokowy niezupełnie odpowiada rzeczywistości. po zakończeniu wykonywania pętli wartość zmiennej sterującej jest nieokreślona (nie wolno zakładać, że jest ona równa następną wartością po wart_końc). Czyli schemat blokowy niezupełnie odpowiada rzeczywistości.

40 Iteracje: pętla for program przyk_for; var c: char; begin for c:=a to z do write(c); write(c); writeln; end.

41 break i continue Występują tylko w Turbo Pascalu Występują tylko w Turbo Pascalu Instrukcja break powoduje natychmiastowe zakończenie wykonywania najbardziej wewnętrznej z pętli while, repeat lub for, w jakiej została zapisana. Jeśli zostanie umieszczona poza pętlą, to kompilator zgłosi błąd. Instrukcja break powoduje natychmiastowe zakończenie wykonywania najbardziej wewnętrznej z pętli while, repeat lub for, w jakiej została zapisana. Jeśli zostanie umieszczona poza pętlą, to kompilator zgłosi błąd. Instrukcja continue również może być stosowana tylko w pętlach. Powoduje przejście do następnej iteracji, czyli pominięcie wszystkich instrukcji w wnętrza pętli aż do zapętlenia. Dla instrukcji while i repeat oznacza to natychmiastowe przejście do sprawdzania warunku, dla for - do modyfikacji zmiennej sterującej i sprawdzania warunku. Instrukcja continue również może być stosowana tylko w pętlach. Powoduje przejście do następnej iteracji, czyli pominięcie wszystkich instrukcji w wnętrza pętli aż do zapętlenia. Dla instrukcji while i repeat oznacza to natychmiastowe przejście do sprawdzania warunku, dla for - do modyfikacji zmiennej sterującej i sprawdzania warunku.

42 Przykłady Zapisać bez użycia for instrukcję Zapisać bez użycia for instrukcję for z:=w1 to w2 do I for z:=w1 to w2 do I

43 Przykłady Zapisać bez użycia for instrukcję Zapisać bez użycia for instrukcję for z:=w1 to w2 do I for z:=w1 to w2 do I z:=w1;{rozwiązanie typowe} z:=w1;{rozwiązanie typowe} while z<=w2 do while z<=w2 do begin begin I; I; z:=succ(z) z:=succ(z) end; end;

44 Przykłady Zapisać bez użycia repeat instrukcję Zapisać bez użycia repeat instrukcję repeat I1; I2;...; In until warunek;

45 Przykłady Zapisać bez użycia repeat instrukcję Zapisać bez użycia repeat instrukcję repeat I1; I2;...; In until warunek; z:=w1; while z<=w2 do begin I1; I2;...; In; I1; I2;...; In; while not warunek do while not warunek do begin begin I1; I2;...; In I1; I2;...; In end; end; end;

46 Przykłady Zapisać bez użycia while instrukcję Zapisać bez użycia while instrukcję while warunek do I;

47 Przykłady Zapisać bez użycia while instrukcję Zapisać bez użycia while instrukcję while warunek do I; if warunek then repeat I until not warunek; repeat I until not warunek;

48 Przykłady Wypisać na ekranie tabliczkę mnożenia do 10. Wypisać na ekranie tabliczkę mnożenia do : : : : : : : : : : : : : : : : : : :

49 Przykłady program tmno; var a,b : integer; a,b : integer;begin write(' '); for a:=1 to 10 do for a:=1 to 10 do write(a:4); write(a:4); writeln; writeln; for b:=1 to 10 do begin begin write(b:2, ': '); write(b:2, ': '); for a:=1 to 10 do for a:=1 to 10 do write(a*b:4); write(a*b:4); writeln; writeln; end endend.

50 Przykłady wczytać 20 liczb całkowitych i wypisać je na ekran wczytać 20 liczb całkowitych i wypisać je na ekran

51 Przykłady program tab20; var i : integer; i : integer; tab : array [1..20] of integer; tab : array [1..20] of integer;begin for i:=1 to 20 do for i:=1 to 20 do read(tab[i]); read(tab[i]); for i:=1 to 20 do for i:=1 to 20 do writeln(i:2, ' ', tab[i]); writeln(i:2, ' ', tab[i]);end.

52 Przykłady wczytać 20 liczb całkowitych i wypisać je na ekran w odwrotnej kolejności wczytać 20 liczb całkowitych i wypisać je na ekran w odwrotnej kolejności

53 Przykłady program tab20; var i : integer; i : integer; tab : array [1..20] of integer; tab : array [1..20] of integer;begin for i:=20 downto 1 do for i:=20 downto 1 do read(tab[i]); read(tab[i]); for i:=1 to 20 do for i:=1 to 20 do writeln(i:2, ' ', tab[i]); writeln(i:2, ' ', tab[i]);end.

54 Przykłady wczytać 20 liczb całkowitych do tablicy i wyszukać największą liczbę wczytać 20 liczb całkowitych do tablicy i wyszukać największą liczbę

55 Przykłady program max20; var i : integer; i : integer; max: integer; max: integer; tab : array [1..20] of integer; tab : array [1..20] of integer;begin for i:=1 to 20 do for i:=1 to 20 do read(tab[i]); read(tab[i]); max := tab[1]; max := tab[1]; for i:=2 to 20 do for i:=2 to 20 do if tab[i]>max then if tab[i]>max then max := tab[i]; max := tab[i];end.

56 Przykłady wczytać 20 liczb całkowitych do tablicy i posortować tablicę wczytać 20 liczb całkowitych do tablicy i posortować tablicę

57 Przykłady program bubble; var i : integer; { licznik pętli } i : integer; { licznik pętli } pom : integer; { pomocnicza } pom : integer; { pomocnicza } zamiany: boolean; zamiany: boolean; {flaga - czy byly zamiany} {flaga - czy byly zamiany} tab : array [1..20] of integer; tab : array [1..20] of integer;begin for i:=1 to 20 do { wczytaj } for i:=1 to 20 do { wczytaj } read(tab[i]); read(tab[i]); { posortuj } { posortuj } for i:=1 to 20 do { wypisz } for i:=1 to 20 do { wypisz } writeln(i, ' ', tab[i]); writeln(i, ' ', tab[i]);end. { posortuj } { posortuj }repeat zamiany := false; zamiany := false; for i:=1 to 19 do for i:=1 to 19 do if tab[i]>tab[i+1] then if tab[i]>tab[i+1] then begin begin pom := tab[i]; pom := tab[i]; tab[i] := tab[i+1]; tab[i] := tab[i+1]; tab[i+1] := pom; tab[i+1] := pom; zamiany := true; zamiany := true; end end until zamiany=false; until zamiany=false;


Pobierz ppt "Typy wyrażenia, schematy blokowe, writeln, readln, if, pętle."

Podobne prezentacje


Reklamy Google