Programování v Pascalu Přednáška 6

Slides:



Advertisements
Podobné prezentace
Gymnázium Vincence Makovského se sportovními třídami Nové Město na Moravě VY_32_INOVACE_INF_RO_17 Digitální učební materiál Sada: Úvod do programování.
Advertisements

Pro začátek něco lehčího
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Vlastní skript může být umístěn: v hlavičce stránky v těle stránky
Programování funkcí v Excelu (pole)
Pascal - příklady.
Programování v Pascalu
Algoritmizace od algoritmu k Pascalu.
Vnitřní řazení v poli (in sito)
1 Vnitřní řazení s využitím dynamických struktur Tvorba spojového seznamu je vcelku triviální záležitostí: a)Vytvořím prázdný seznam příkazem LIST:=nil.
DATOVÝ TYP POLE.
Programování v Pascalu Přednáška 8
Programování v Pascalu Přednáška 4
Programování v Pascalu Přednáška 2
Programování v Pascalu Přednáška 10 RNDr. Hana Havelková.
Programování v Pascalu Přednáška 3
Programování v Pascalu Přednáška 5 RNDr. Hana Havelková.
Programování v Pascalu Přednáška 9 RNDr. Hana Havelková.
Třídění Seminář IVT. Definice uspořádání skupiny dat (záznamů) dle daného klíče vzestupně (od nejmenší do největší hodnoty klíče) sestupně (od největší.
Algoritmizace a programování Datové typy v Delphi - 05
Algoritmizace a programování Podprogramy v Delphi - 10
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
1 Vyhledávání Principy vyhledávání Klasifikace klíče:  Interní klíč – je součástí prohlížených záznamů  Externí klíč – není jeho součástí, je jím např.
Informatika I 3. přednáška
Jazyk vývojových diagramů
Procedury a funkce Základní charakteristika a použití v programu.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
Deklarace Radim Štefan. 2 Použité zkratky BP – Borland Pascal De – Delphi.
Informatika I 2. přednáška
Gymnázium Vincence Makovského se sportovními třídami Nové Město na Moravě VY_32_INOVACE_INF_RO_18 Digitální učební materiál Sada: Úvod do programování.
Podmienený príkaz. Kĺúčové slová  Pro podmínky se v Pascalu používají klíčové příkazy IF, THEN a ELSE.  Také se jim říká „príkaz vetvenia"..  Příkaz.
Algoritmy a programovací techniky
Jazyk vývojových diagramů
Úvod do Pascalu. Co je Pascal? vyšší programovací jazyk poskytuje prostředky pro popis algoritmů, které odrážejí povahu řešených problémů, a nikoliv technickou.
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ ŘAZENÍ PRVKŮ – OPAKOVANÝM VÝBĚREM NEJVĚTŠÍHO PRVKU (SELECTSORT) Vytvořila: RNDr. Ivanka Dvořáčková Gymnázium K. V.
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ ŘAZENÍ PRVKŮ – PŘÍMOU VÝMĚNOU (BUBBLESORT) Vytvořila: RNDr. Ivanka Dvořáčková Gymnázium K. V. Raise, Hlinsko, Adámkova.
5. Procedury a funkce Procedura je samostatně odladěný algoritmus, v programu může být volána vícekrát. Dvojí terminologie - rozlišujeme procedury a funkce.
Informatika I 7. přednáška RNDr. Jiří Dvořák, CSc.
Informatika I 8. přednáška RNDr. Jiří Dvořák, CSc.
Datové typy a struktury
Programovací jazyk PASCAL
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Gymnázium Vincence Makovského se sportovními třídami Nové Město na Moravě VY_32_INOVACE_INF_RO_06 Digitální učební materiál Sada: Úvod do programování.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
10. Dynamické proměnné Dynamická proměnná se nezavádí deklarací proměnných, ale vzniká za běhu programu provedením speciálního příkazu. Nemá přidělen žádný.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Algoritmizace a programování Textové soubory - 13 Mgr. Josef Nožička IKT Algoritmizace a programování
GYMNÁZIUM, VLAŠIM, TYLOVA
6. Typ záznam Strukturovaný datový typ - znamená spojení několika elementů stejného nebo různých typů do jedné proměnné. Např. pole je strukturovaný datový.
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ PROCEDURY S PARAMETRY – NEJBLIŽŠÍ VYŠŠÍ A NIŽŠÍ ČÍSLO Vytvořila: RNDr. Ivanka Dvořáčková Gymnázium K. V. Raise, Hlinsko,
doc. RNDr. Zdeněk Botek, CSc.
Pascal – if Mgr. Lenka Švancarová.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
4. Typ pole 4.1 Jednorozměrná pole
Pascal – strukturované příkazy
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ
doc. RNDr. Zdeněk Botek, CSc.
doc. RNDr. Zdeněk Botek, CSc.
Cvičení 2 Podmíněné příkazy, cykly. Podmíněné příkazy Podmínka – jakýkoliv logický výraz ( a=1,……..) ( a=1,……..) Příkaz – vlastní instrukce, která se.
Cvičení 3-4 Procedury, funkce,řetězce. Procedury Procedura Procedura Procedura je podprogram, který mění stav programu (změnou stavu proměnných nebo změnou.
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ CYKLUS S PŘEDEM DANÝM POČTEM OPAKOVÁNÍ – SOUČIN POMOCÍ SOUČTU Vytvořila: RNDr. Ivanka Dvořáčková Gymnázium K. V. Raise,
Strukturované typy proměnných v programovacím jazyce Pascal - 2.hodina
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
Podprogramy.
program TextovySoubor;
DATOVÉ TYPY určuje druh hodnoty (číslo, text, logická hodnota) a množinu operací (aritmetické, logické, ...) skalární datový typ - hodnoty jsou uspořádané.
CU01 Informatika II 2/13 Základy algoritmizace
Transkript prezentace:

Programování v Pascalu Přednáška 6 RNDr. Hana Havelková

Pole Deklarace Přístup k prvkům Typové konstanty Jednorozměrná pole Vícerozměrná pole Pole jako parametr procedur a funkcí

Deklarace [ ] , typ indexu array typ typ indexu [ ] of , typ indexu ordinální typ Pro každou dimenzi pole je třeba uvést typ indexu – ordinální typ s výjimkou longint a jeho podintervalů Deklarace je statická – musíme předem znát maximální počet prvků pole (ve skutečnosti ani tak velké pole třeba nevyužijeme)

Příklady – uživatelské typy type TZnamka = 0 .. 5; TA_Real = array [1 .. 100] of real; TZnaky = array [1..26] of char; TJmena = array [1.. 30] of string; TOdpovedi = array [1 .. 50] of boolean; TKody = array ['a' .. 'z'] of char; TDny = array [1 .. 7] of string [2];

Pole, jehož prvkem je pole – pole polí type TPole1 = array [100..200] of array[1..10] of integer; TPole2 = array [Boolean] of array[1..10] of array ['a'..'e' ] of char; chápe překladač jako array[100 .. 200, 1 .. 10] of integer event. array [Boolean, 1..10, 'a'..'e' ] of char Poznámka: nejedná se ovšem o identické typy!!!

Příklady vícerozměrných polí const POCET_ZAKU = 30; POCET_PREDMETU = 15; MIN = -10; MAX = 20; RADKU = 10; SLOUPCU = 6; type TZnamky = array [1.. POCET_ZAKU, 1.. POCET_PREDMETU] of TZnamka; TKurzy = array[1..365, 1..20] of real; TTeploty = array[1..31, 1.. 12, 1.. 4] of real; TVysledky = array [1 .. 12, MIN .. MAX, Boolean] of real; TMatice = array [1..RADKU, 1 .. SLOUPCU] of real;

Přístup k prvkům pole pomocí indexu v programu píšeme jednotlivé indexy do hranatých závorek oddělené čárkou v textu píšeme jako dolní index (někdy oddělující čárku vynecháváme) funkce Low (pole) vrací hodnotu dolního indexu pole High (pole) vrací hodnotu dolního indexu pole

Příklad – měsíce s nadprůměrnými telefonními poplatky var platby : array [1..12] of real; suma, prumer : real; i : 1 .. 12; begin suma := 0; for i := 1 to 12 do begin Write(i, '. měsíc = '); ReadLn(platby[i]); suma := suma + platby[i]; end; prumer := suma / 12; for i := 1 to 12 do if platby[i] > prumer then WriteLn (i, '. měsíc'); ReadLn; end.

Četnosti známek z prověrky type TZnamka = 1..5; var Cetnosti : array [TZnamka] of integer; znamka : TZnamka; pocet, i : integer; begin for i:= 1 to 5 do Cetnosti[i] := 0; Write('Pocet zaku: '); ReadLn(pocet); for i := 1 to pocet do begin Write('Znamka ' + i + '. zaka: ');ReadLn(znamka); Cetnosti[znamka] := Cetnosti[znamka] + 1; end; WriteLn(i:2, Cetnosti[i] : 5); ReadLn; end.

Četnosti jednotlivých znaků ve větě var C : array ['A'..'Z'] of integer; i : 'A'..'Z'; znak : char; begin for i := 'A' to 'Z' do C[i] := 0; WriteLn ('Zadej vetu ukoncenou tečkou a odradkovanim!'); repeat Read(znak) ; znak := UpCase(znak); if znak in ['A'..'Z'] then Inc(C[znak]); until znak = '.'; for i := 'A' to 'Z' do WriteLn(i, C[i] : 5); ReadLn; end.

Skalární součin dvou vektorů var a, b : array [1.. 10] of real; n, s : real; begin Write('Zadej počet složek vektorů'); ReadLn(n); if (n > 10) or (n < 1) then n := 10; s := 0; for i := 1 to n do begin Write('a [', i, '] = '); ReadLn(a[i]) ; end; Write('b [', i, '] = '); ReadLn(b[i]) ; for i := 1 to n do s := s + a[i] * b[i]; WriteLn('Skalarni soucin je ', s : 10 : 2); ReadLn; end.

Skalární součin dvou vektorů – lepší var a, b : array [1.. 10] of real; n, s : real; begin Write('Zadej počet složek vektorů'); ReadLn(n); if (n > 10) or (n < 1) then n := 10; s := 0; for i := 1 to n do begin Write('a [', i, '] = '); ReadLn(a[i]) ; end; Write('b [', i, '] = '); ReadLn(b[i]) ; s := s + a[i] * b[i]; WriteLn('Skalarni soucin je ', s : 10 : 2); ReadLn; end.

Řádkové a sloupcové součty čísel v tabulce (1) const MAX = 50; var tab : array[1.. MAX, 1.. MAX] of real; i, j, radku, sloupcu : 1 .. MAX; sumar, sumas : array [1 .. MAX] of real; begin Write('Pocet radku '); ReadLn(radku); Write('Pocet sloupcu '); ReadLn(sloupcu); {nulovani souctovych promennych} for i := 1 to MAX do begin sumar[i] := 0; sumas[i] := 0; end;

Řádkové a sloupcové součty čísel v tabulce (2) {zadavani a soucasne pricitani hodnot prvku tabulky do patricnych radkovych a sloupcovych souctu} WriteLn('Zadavej cisla po radcich:'); for i := 1 to radku do begin for j := 1 to sloupcu do begin Write('prvek[', i, ', ', j, '] = '); ReadLn (tab[i, j]); sumar[i] := sumar[i] + tab[i, j] ; sumas[j] := sumas[j] + tab[i, j] ; end;

Řádkové a sloupcové součty čísel v tabulce (2) {vypis tabulky a radkovych souctu} for i := 1 to radku do begin for j := 1 to sloupcu do begin Write(tab[i, j] : 7 : 2); end; WriteLn(sumar[i] : 7 : 2); {vypis sloupcovych souctu} for j := 1 to sloupcu do Write (sumas[j] : 7 : 2); WriteLn; ReadLn; end.

Typové konstanty const DNY : array [1 .. 7] of string [2] = ('PO', 'UT', 'ST', 'CT', 'PA', 'SO', 'NE') ; BODY : array [1 .. 5] of integer = (100, 80, 50, 20, 0) ; PLATIDLA : array[1..12] of integer = (5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1) ; OBDOBI : array [1..4] of string = ('Jaro', 'Leto', 'Podzim', 'Zima') ;

Kontrola data {Predpokladame, ze je k dispozici funkce Prestupny(r:word):boolean} const Dny : array [1..12] of byte = (31,28,31,30,31,30,31,31,30,31,30,31); var den, mesic : byte; rok : word; Chyba : boolean; begin Chyba := false; Write('Zadej den, mesic, rok: ') ; ReadLn(den, mesic, rok); if Prestupny(rok) then Dny[2] := 29; if mesic > 12 then Chyba := true else if den > dny[mesic] then Chyba := true; if Chyba then WriteLn('Chyba!') else WriteLn('OK'); ReadLn; end.

Pole jako parametr procedur a funkcí vstupní parametr je vše bez problémů obvykle uvádíme jako další parametr počet prvků pole výstupní parametr (volání odkazem) používáme pokud chceme načíst pole v podprogramu chceme změnit hodnoty prvků pole chceme výsledek výpočtů podprogramu uložit do pole u formálního parametru musíme použít var formální a skutečný parametr by měly být shodné

Funkce vracející hodnotu maximálního prvku pole const POCET = 10; type TPole = array[1 .. POCET] of integer; function MaxPrvek (p : TPole ; N : integer) : integer; var i, max : integer; begin max := p[1]; for i := 2 to N do if p[i] > max then max := p[i] ; MaxPrvek := max; end;

Funkce testující rostoucí posloupnost const POCET = 20; type TPole = array[1 .. POCET] of real; function JeRostouci(p : TPole ; N : integer) : boolean; var i : integer; test : boolean; begin test := true; for i := 1 to N-1 do if p[i] >= p[i+1] then begin test := false; break; end; JeRostouci := test; end;

Procedura vypisující prvky pole const POCET = 10; type TPole = array[1 .. POCET] of integer; procedure VypisPole( p : TPole; N : integer); var i : integer; begin for i := 1 to N do WriteLn (p[i]); end;

Procedura načítající prvky pole const POCET = 10; type TPole = array[1 .. POCET] of integer; procedure NactiPole(var p : TPole; N : integer); var i : integer; begin for i := 1 to N do begin Write(i,'. prvek: '); ReadLn (p[i]); end;

Funkce skalární součin vektorů const POCET = 10; type TVektor = array[1 .. POCET] of real; function SkalarniSoucin( u, v : TVektor; N : integer) : real; var i : integer; S : real; begin S := 0; for i := 1 to N do S := S + u[i] * v[i] ; SkalarniSoucin := S; end;

Zpracování prospěchu procedure ZpracujProspech( Z : TPoleZnamek ; PocetPredmetu : integer; var prumer : real; var prospech : char); var suma, i : integer; pocet5, pocet3_4 : integer; begin suma := 0 ; pocet5 := 0 ; pocet3_4 := 0; for i := 1 to PocetPredmetu do begin suma := suma + Z[i]; if Z[i] = 5 then pocet5 := pocet5 + 1 else if (Z[i] = 3) or (Z[i] = 4) then pocet3_4 := pocet3_4 + 1 ; end; prumer := suma / PocetPredmetu; if pocet5 > 0 then prospech := 'N' else if pocet3_4 > 0 then prospech := 'P' else if prumer > 1.5 then prospech := 'P' else prospech := 'V';

Dvourozměrné pole denní i měsíční průměry teplot za jistý měsíc Předpokládejme, že teplota se měří každý den celkem 4x 1. měření v 6:00, 2. měř. v 12:00, 3. měř v 18:00, 4. měření v 24:00 Vstup: počet dní v měsíci, u každého dne zadáme postupně všechny 4 naměřené hodnoty Výstup: denní průměry, měsíční průměry v 6:00, 12:00, 18:00, 24:00 var Teploty : array [1 .. 31, 1 .. 4] of real; DSuma : array [1 .. 31] of real; MSuma : array [1 .. 4] of real; pocet, i, j : integer; begin { nulování součtových proměnných } for i := 1 to 31 do DSuma[i] := 0; for i := 1 to 4 do MSuma[i] := 0;

Dvourozměrné pole denní i měsíční průměry teplot za jistý měsíc Write ('Zadej počet dní: '); ReadLn(pocet); for i := 1 to pocet do begin for j := 1 to 4 do begin Write ('Zadej teplotu: '); ReadLn (Teploty[i, j]); DSuma[i] := DSuma[i] + Teploty[i, j] ; MSuma[j] := MSuma[j] + Teploty[i, j] ; end; WriteLn('Denní průměry'); for i := 1 to pocet do Write(DSuma[i] / 4 : 8 : 2); WriteLn; WriteLn('Měsíční průměry'); for i := 1 to 4 do Write(MSuma[i] / pocet : 8 : 2); ReadLn;

Otevřené pole – open array v deklaraci se neuvádí rozsahu indexů pole dolní index je vždy 0 horní index se zjistí pomocí funkce High() je třeba použít direktivu {$P+} umožňuje používat jako parametr procedur a funkcí pole s různým počtem prvků (ale typ prvku je stejný)

Open array var A : array [1 .. 50] of integer; B : array [-15 .. 15] of integer; C : array [-20 .. -10] of integer; jde použít jako skutečný parametr procedury procedure Vypocet (pole : array of integer) pole A má pak indexy od 0 – 49 pole B 0 – 30 pole C 0 – 10

Open array (1) program Otevrene_Pole; { indexy se vzdy chapou od 0, at jsou jakekoli} { tj. Low(pole)=0} { High(pole)=pocet prvku pole} {$P+} uses Crt; const N=5; type pole1 = array [1 .. N] of integer; pole2 = array [-N .. N] of integer; P : pole1= (1, 2, 44, 2, 7); Q : pole2= (2, 5, 8, 3, 9, 2, 0, 11, 4, 9, 1);

Open array (2) function Max (a : array of integer) : integer; var i, M : integer; begin M := a [Low(a)]; for i := Low(a) + 1 to High(a) do if M < a[i] then M := a[i]; Max := M; end; ClrScr; WriteLn ('Max pole1 je ', Max(P)) ; WriteLn ('Max pole2 je ', Max(Q)) ; ReadLn; end.

Vyhledávání v nesetříděném poli {funkce vrací -1, pokud prvek není nalezen, jinak vrací index prvního výskytu prvku} function Hledej (pole : array of real; hodnota : real) : real; var i , pocet, vysledek : integer; begin vysledek := -1; pocet = High(pole) ; for i:= 0 to pocet do if pole [i] = hodnota then begin vysledek := i; break; end; Hledej := vysledek;

Vyhledávání v setříděném poli (vzestupně) {funkce vrací -1, pokud prvek není nalezen, jinak vrací index prvního výskytu prvku} function Hledej (pole : array of real; hodnota : real) : real; var i , pocet, vysledek : integer; begin vysledek := -1; i := 0; pocet = High(pole) ; repeat if pole [i] < hodnota then i := i + 1 else break; until i = pocet; if (i < pocet ) and (pole[i] = hodnota) then vysledek := i; Hledej := vysledek; end;