Několik příkladů v Turbo Pascalu



Podobné dokumenty
Sada 1 - Základy programování

Úvod do programování

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Anotace. Jednotky (tvorba a využití), struktury (typ record),

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Sada 1 - Základy programování

Programovací jazyk Pascal

Digitální učební materiál

Sada 1 - Základy programování

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

= knihovna prostředků pro lepší práci s textovou obrazovkou, klávesnicí a generátorem zvuků

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

NPRG030 Programování I, 2015/16 1 / :25:32

Podprogramy; procedury a funkce

Základy programovacího jazyka Turbo Pascal

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

Algoritmizace a programování

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

Comenius Logo. Princip programování. Prostředí Comenius Logo

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

NPRG030 Programování I, 2016/17 1 / :58:13

Digitální učební materiál

Klasický podprogram, který nazýváme procedura. Jedná se v podstatě o příkaz. 1

Pseudonáhodná čísla = algoritmicky generovaná náhrada za náhodná čísla

dovolují dělení velkých úloh na menší = dekompozice

NPRG030 Programování I, 2017/18 1 / :22:16

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

NPRG030 Programování I, 2010/11

Sada 1 - Základy programování

Přijímací zkouška z informatiky Dz

Digitální učební materiál

Comenius Logo. Úterý 20. března. Princip programování. Prostředí Comenius Logo

Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy).

Sada 1 - Základy programování

Sada 1 - Základy programování

umenugr JEDNOTKA PRO VYTVÁŘENÍ UŽIVATELSKÝCH GRAFICKÝCH MENU Příručka uživatele a programátora

VY_32_INOVACE_08_2_04_PR

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D.

ALGORITMIZACE A PROGRAMOVÁNÍ

Anotace. pointery (pars prima). Martin Pergel,

Digitální učební materiál

Program a životní cyklus programu

Tematická oblast: Programování 2 (VY_32_INOVACE_08_2_PR) Anotace: Využití ve výuce: Použité zdroje:

Úvod do programování. Úvod do programování. ing. Miroslav Jílek 2009, SJOP Poděbrady

Digitální učební materiál

Anotace. Soubory a práce s nimi, rekurze podruhé, struktury (datový typ record), Martin Pergel,

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Pracovní listy - programování (algoritmy v jazyce Visual Basic) Algoritmus

Některé základní úlohy algoritmizace

Digitální učební materiál

Sada 1 - Základy programování

NPRG030 Programování I, 2018/19 1 / :25:37

Dynamické datové typy a struktury

Digitální učební materiál

Základní pojmy algoritmizace a programování ALGORITMUS INSTRUKCE STROJOVÝ KÓD VYŠŠÍ PROGRAMOVACÍ JAZYK ZDROJOVÝ KÓD KOMPILACE

Digitální učební materiál

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Jednoduché příkazy jazyka Pascal

LabView jako programovací jazyk II

Předmět: Algoritmizace praktické aplikace

Stručný návod k programu Octave

Třída DrawingTool. Obrázek 1: Prázdné okno připravené pro kreslení

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

1. D Y N A M I C K É DAT O V É STRUKTUR Y

Pokyny pro žáky k testování písemné zkoušky na počítači

Programy v prostředí operačního systému

10 Algoritmizace Příklad 2 Word 2007/ VBA

4.3 Operace nad ordin ln mi datov mi typy Operace nad logick m datov m typem Operace nad celo seln mi datov mi typy

VISUAL BASIC. Přehled témat

Inovace a zkvalitnění výuky prostřednictvím ICT Programování se strukturovanými údaji Programové jednotky

C2110 Operační systém UNIX a základy programování

KNIHOVNA LETNI_CAS. edice verze 1.0. Knihovna letni_cas. Ing. Zdeněk Rozehnal MICROPEL s.r.o. 2008

Algoritmizace. 1. Úvod. Algoritmus

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

1. Téma 03 - Rozhodování

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Aplikace. vliv na to, jakou mají strukturu i na to, jak pracné je je vyvinout. Bylo vypozorováno, že aplikace je možné rozdělit do skupin

Programování v jazyku LOGO - úvod

Algoritmizace a programování

PCKEYB JEDNOTKA PRO OBSLUHU KLÁVESNICE TYPU PC AT. Příručka uživatele a programátora

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

C# konzole Podíl dvou čísel, podmínka IF

POČÍTAČE A PROGRAMOVÁNÍ

Hodnocení soutěžních úloh

Martin Hejtmánek hejtmmar

Knihovna WebGraphLib

K 2 - Základy zpracování textu

Rozhledy matematicko-fyzikální

METODICKÝ POKYN PRÁCE S MS PowerPoint - ZAČÁTEČNÍCI. Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky.

2 Strukturované datové typy Pole Záznam Množina... 4

Západočeská univerzita v Plzni FAKULTA PEDAGOGICKÁ KATEDRA VÝPOČETNÍ A DIDAKTICKÉ TECHNIKY

Programování. Debugging a testování. Martin Urza

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Textové soubory

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Transkript:

Kapitola 5 Několik příkladů v Turbo Pascalu V literatuře [3] se student mohl seznámit s podprogramy standardních jednotek Turbo Pascalu. V následujících dvou částech uvedeme ukázku několika příkladů využívajících podprogramy standardní jednotky Crt pro práci s obrazovkou a standardní jednotky Graph pro práci s grafikou. 5.1 Použití podprogramů pro práci s obrazovkou V jednotce Crt se nachází řada potřebných podprogramů pro práci s obrazovkou (a nejen s ní). Chceme-li pracovat s podprogramy jednotky CRT, pak na začátku části definicí a deklarací musíme uvést odstavec uses s identifikátorem Crt. Hodláme-li pak změnit barvu pozadí, na které budeme psát text, pak příkazem např. TextBackGround(blue) resp. TextBackGround(black) nastavíme barvu pro pozadí, v našem případě modrou resp. černou. Barva se však neobjeví, dokud něco na obrazovku nenapíšeme. Nastavíme-li barvu ke psaní textu příkazem např. TextColor(red) resp. TextColor(green), pak příkaz tisku např. Writeln( Ahoj ) způsobí tisk červeného Ahoj na modré pozadí, resp. zeleného Ahoj na černé pozadí. Celý zbytek obrazovky zůstává nezměněn. Hodláme -li vymodřit celou obrazovku pro případný další tisk, pak tak učiníme dvojicí příkazů TextBackGround(blue); ClrScr; Po těchto příkazech je obrazovka prázdná (Clear Screen) a modrá. Hodláme-li nyní naše červené Ahoj posadit asi doprostřed obrazovky, pak tak můžeme učinit příkazy TextColor(red); GoToXY(38,12); Write( Ahoj ); za předpokladu, že pracujeme ve standardním textovém režimu 25 řádků po 80 sloupcích. Chceme-li náš tisk doprovodit akustickým signálem, použijeme příkazy Sound(440); Delay(1000); NoSound; které z počítače vyloudí tón komorní a (440Hz) po dobu 1s (1000ms). Pozor opomenutí příkazu NoSound vede k neustálému pískání počítače. Příkaz Delay slouží k pozastavení vykonávání dalších příkazů počítačem. Bez jeho přítomosti ve výše uvedené trojici příkazů by byl generátor zvuku vypnut bezprostředně po jeho zapnutí tak rychle, že by uživatel žádný zvuk neslyšel. Velmi potřebná je funkce typu char ReadKey, poskytující hodnotu znaku stisknutého na klávesnici. Za předpokladu, že proměnná Z je typu char ji můžeme použít v příkazu Z := ReadKey; což vede ke stejnému efektu jako Read(Z) s tím rozdílem, že na příkaz Read(Z) musíme odpovědět stisknutím příslušné klávesy, např. A a tento potvrdit klávesou enter (poté je v proměnné Z znak A ), zatímco na příkaz Z := ReadKey odpovíme pouze stisknutím klávesy A. Algoritmizaci opakovaně vyžadované odpovědi na posledním řadku obrazovky tak dlouho, dokud správně neodpovíme, můžeme provést např. ve tvaru: repeat GoToXY(30,25); {* přechod doprostřed posledního řádku obrazovky *} ClrEol; {* vymazání od nastaveného kursoru do konce řádku *} Write( Chceš pokračovat? Odpověz A)no - N)e: ); Z := ReadKey; {* možno použít Z:=UpCase(Z) *} until Z in [ A, a, N, n ] {* a pak postačuje psát Z in [ A, N ] *} Uvedený algoritmus by se ovšem obešel i bez deklarované proměnné Z (ta však v praktických aplikacích bývá potřebná, neboť je zpravidla dále testována). Jeho poslední dva řádky můžeme nahradit jedním ve tvaru 71

72 KAPITOLA 5. NĚKOLIK PŘÍKLADŮ V TURBO PASCALU until ReadKey in [ A, a, N, n] popř. until UpCase(ReadKey) in [ A, N ] 5.2 Použití podprogramů pro práci s grafikou Ve všech dále uvedených příkladech je pracováno jak s jednotkou Crt, tak s jednotkou Graph. Zvolené ukázky mají především podnítit zájem studentů o grafické aplikace. Použití jednotlivých podprogramů není zde rozebíráno. Syntaxe jejich použití je pro studenta FAST dostatečně popsána v [3]. Příklad 5.2.1: Vykreslení průběhu funkce y=sin(x) v intervalu 2π, 2π. Program GRAF; {* vykresleni y = sin(x) *} uses Graph,Crt; {* pripojeni knihoven *} var I, GD, GM, Y1, Y2, POLX, POLY :integer; K1, K2, X, SIRKA, VYSKA :real; begin SIRKA:=4*pi; {* X je od -2pi do +2pi *} VYSKA:=2; {* Y v intervalu <-1,1> *} DetectGraph(GD,GM); InitGraph(GD,GM, u:\compil\tp_5.5\graph ); POLX:=GetMaxX div 2; POLY:=GetMaxY div 2; line(0,poly,getmaxx,poly); {* vykresleni osy x *} line(polx,0,polx,getmaxy); {* vykresleni osy y *} OutTextXY(GetMaxX-10,POLY+3, x ); {* popis osy x *} OutTextXY(POLX+5,1, y ); {* popis osy y *} K1:=SIRKA/(GetMaxX+1); {* koeficienty pro prevod *} K2:=(GetMaxY+1)/VYSKA; {* pixlu I na radiany X a *} SetColor(lightred); {* vysledku Y na pixly *} for I:=0 to GetMaxX do begin X:=(I-POLX)*K1; putpixel(i,poly-trunc(sin(x)*k2),lightblue); {* vystup (zobrazeni)bodu *} OutTextXY(20,10, y=sin(x) ); repeat until KeyPressed; closegraph; konec Příkladu 5.2.1 konec Příkladu 5.2.1 Příklad 5.2.2: Ukázka nastavení výplňového vzoru a barvy ohraničené oblasti na úloze vykreslení terče. Program TERC; uses Crt, Graph; var GD, GM, R :integer; begin writeln( Zadej poloměr nejvetší kružnice (maximálně 225): ); readln(r); SetBkColor(Brown); SetColor(Lightgreen); R:= R div 2; SetFillStyle(1,Lightred); FloodFill( (GetMaxX-1) div 2, (GetMaxY-30) div 2+R+2,Lightgreen); R := R div 2; SetFillStyle(10,LightBlue); FloodFill( (GetMaxX-1) div 2, (GetMaxY-30) div 2+R+2,Lightgreen); SetFillStyle(11,yellow); FloodFill( (GetMaxX-1) div 2, (GetMaxY-30) div 2,Lightgreen); OutTextXY(10,GetMaxY-10, T E R C - ukazuji pouze 5 sekund );

5.2. POUŽITÍ PODPROGRAMŮ PRO PRÁCI S GRAFIKOU 73 delay(5000); closegraph konec Příkladu 5.2.2 konec Příkladu 5.2.2 Příklad 5.2.3: Ukázka animace (pohybu) obrazce na úloze pohybu míčku v ohraničeném prostoru. Program MIC; {* ukázka animace *} uses Crt,Graph; {* (pohyb míčku) *} var GD,GM,X,Y,DX,DY,R,COLORR : integer; VLEVO,VPRAVO,NAHORU,DOLU : integer; Procedure INICIALIZACE; {* pro globální proměnné *} begin VLEVO := 100; VPRAVO := 500; NAHORU := 100; DOLU := 300; R := 20; COLORR := green; X := 200; Y := 200; DX := 5; DY := 5; Procedure KROK(var X,Y,DX,DY : integer); begin if((x+r+dx) >= VPRAVO) or ((X-R+DX) <= VLEVO) then DX:=-DX; if((y-r+dy) <= NAHORU) or ((Y+R+DY) >= DOLU) then DY:=-DY; SetColor(GetBkColor); Circle(X,Y,R); X := X + DX; Y:= Y + DY; SetColor(COLORR); Circle(X,Y,R); Begin INICIALIZACE; SetColor(red); Rectangle(VLEVO,NAHORU,VPRAVO,DOLU); repeat KROK(X,Y,DX,DY); until Keypressed; CloseGraph konec Příkladu 5.2.3 konec Příkladu 5.2.3 Příklad 5.2.4: Ukázka vykreslování sloupcového a kruhového histogramu. Dále uvedeny programy HISTOGRAM a KOLAC vedou k vykreslování sloupcového a kruhového histogramu. Praktická využitelnost je čtenáři jistě známa (vyhodnocování výsledků voleb apod.). Program HISTOGRAM; uses Graph, Crt; var GD,GM,X1,Y1,X2,Y2 : integer; PHJ, D, I : word; P : array[1..31] of real; TEXT : array[1..31] of string[5]; MAX : real; Begin ClrScr; Write( Zadej pocet hodnocenych jednotek: );ReadLn(PHJ); I:=1; MAX:=0; begin Write( Vysledky,I,. jednotky v %: ); Readln(P[I]); Write( Nazev,I,. jednotky [max. 5 znaku]: ); Readln(TEXT[I]); if P[I]>MAX then MAX:=P[I]; I:=I+1; ClearDevice;

74 KAPITOLA 5. NĚKOLIK PŘÍKLADŮ V TURBO PASCALU D:= 50; {trunc(getmaxx/phj) } X1:=0; Y1:= GetMaxY; I:=1; begin X2:=X1+D; Y2:=trunc(GetMaxY*(1-P[I]/100)); { (1-P[I]/MAX) } SetFillStyle(1,I); Bar3D(X1,Y1,X2,Y2,10,true); OutTextXY(X2-trunc(D/2),Y2-25,TEXT[I]); I:=I+1; X1:=X2; while not KeyPressed do; CloseGraph; Program KOLAC; uses Graph, Crt; var GD, GM, X, Y : integer; PHJ,D,I, R, U1, U2 : word; P : array[1..31] of real; TEXT : array[1..31] of string[5]; MAX, S : real; Begin ClrScr; Write( Zadej počet hodnocených jednotek: );ReadLn(PHJ); I:=1; MAX:=0; begin Write( Výsledky,I,. jednotky v %: ); Readln(P[I]); Write( Název,I,. jednotky [max. 5 znaku]: ); Readln(TEXT[I]); if P[I]>MAX then MAX:=P[I]; I:=I+1; S:=0; {* Převod na %, pakliže není zadání do součtu 100 *} for I:=1 to PHJ do S:=S+P[I]; for I:=1 to PHJ do P[I]:=100*P[I]/S; DetectGraph(GD,GM); ClearDevice; SetColor(0); X:=(GetMaxX-1) div 2; Y:= (GetMaxY-30) div 2; I:=1; R:=100; U1:=0; line(x,y,x+r,y); begin SetFillStyle(1,I); if I=PHJ then U2:=360 else U2:=U1 + trunc(360*p[i]/100); Sector(X,Y,U1,U2,R,R); Bar((I-1)*70,GetMaxY-50,(I-1)*70+50,GetMaxY); InitGraph(GD,GM, U:\compil\tp_5.5\graph ); OutTextXY((I-1)*70+10,GetMaxY-25,TEXT[I]); I:=I+1; U1:=U2; {* Porovnani procedury Sector a procedury Arc sector(100,100,0,30,100,100); line(300,300,400,300); arc(300,300,0,30,100); line(300+round(100*cos(pi*6)),300-round(100*sin(pi/6)),300,300); *} while not KeyPressed do; CloseGraph; konec Příkladu 5.2.4 konec Příkladu 5.2.4

Literatura [1] Wirth, N.: Algoritmus + Data Structures = Program. Prentice Hall, Englewood Cliffs, New York, USA 1973 [2] Jensen,K. Wirth, N.: Pascal User Manual and Report. Springer Verlag, New York 1974 [3] Motyčka, A. Novotná,H.: Výpočetní technika a algoritmizace (Vybrané pasáže z Turbo Pascalu). VUT FAST, Brno, 1992 [4] Rábová, Z. Češka, M. Honzík, J.M. Hruška, T.: Počítače a programování. ES VUT Brno, 1980 [5] Bajgar, L. Tyc, O.: Základy programování. PASCAL. Průvodce Turbo Pascalem. ES VUT Brno, 1992 [6] Rybička, J.: Programové vybavení počítačů (algoritmizace). ES VŠZ v Brně, 1992 [7] Jinoch, J. Müller, K. Vogel, J.: Programování v jazyku Pascal. SNTL Praha, 1985 [8] Cimrman, J.: Počátkové programování v Čechách a na Moravě. VN v Liptákově, někdy před sto lety [9] Honzík, J.: Programovací techniky. ES VUT v Brně, 1985 [10] Motyčka, A. Rybička, J.: Výpočetní technika a algoritmizace (Ovládání prostředí Turbo Pascalu). VUT FAST, Brno, 1992 [11] Hruška, T.: Pascal pro začátečníky. SNTL Praha, 1989 [12] Erbes, J. Motyčka, A. Motyčková, L.: Úvod do programování v jazyce Pascal. ES VŠZ Brno, 1986 75