.PL 72 .PO 0 ..----!-----!------------------------------!----------------------------------R *** TURBOPASCAL - pomocny manual *** EDITOR Pohyb cursoru: ^S o znak vlevo ^D o znak vpravo ^A o slovo vlevo ^F o slovo vpravo ^E o radek nahoru ^X o radek dolu ^R o obrazovku nahoru ^C o obrazovku dolu ^Q^S na zacatek radku ^Q^D na konec radku ^Q^R na zacatek souboru ^Q^C na konec souboru ^Q^P na posledni pracovni posici Zmeny textu: ^V prepinac INSERT modu vymazani znaku vlevo od cursoru ^G vymazani znaku pod cursorem ^T vymazani slova vpravo od cursoru ^N ^Y vymazani radku ^Q^Y vymazani radku vpravo od cursoru Blokove instrukce: ^K^B oznaceni zacatku bloku ^K^K oznaceni konce bloku ^K^T oznaceni jednoho slova ^K^C kopirovani bloku ^K^V presun bloku ^K^Y vymazani bloku ^K^R cteni bloku z disku ^K^W zapis bloku na disk ^K^H zruseni blokovych navesti Ostatni instrukce: ^K^D konec editace ^I ^Q^I prepinac automaticke tabelace ^Q^L obnoveni radku ^Q^F hledani retezu ^Q^A zamena retezu options: B hledani nazpet G prohledat cely soubor n n-ty vyskyt retezu N nepta se na souhlas U ignoruje rozdil mezi malymi a velkymi znaky W pouze cela slova ^L opakovani ^Q^F nebo ^Q^A ^P prefix ridiciho znaku ^U preruseni vykonavani instrukce Reservovana slova * absolute * external nil * shr and file not * string array for of then begin forward or to case function packed type const goto procedure until div if program var do in record while downto * inline repeat with else label set * xor end mod * shl Standartni identifikatory ArcTan Delay Length Rename Assign Delete Ln Reset Aux EOF Lo Rewrite AuxInPtr EOLN Lst Round AuxOutPtr Erase LstOutPtr Seek BlockRead Execute Mark Sin BlockWrite Exp MaxInt SizeOf Boolean False Mem Sqr BufLen FilePos MemAvail Sqrt Byte FileSize Move Str Chain FillChar New Succ Char Flush NormVideo Swap Chr Frac Odd Text Close GetMem Ord Trm ClrEOL GotoXY Output True ClrScr HeapPtr Pi Trunc Con Hi Port UpCase ConInPtr HighVideo Pos Usr ConOutPtr IOresult Pred UsrInPtr Concat Input Ptr UsrOutPtr ConstPtr InsLine Random Val Copy Insert Randomize Write Cos Int Read Writeln CrtExit Integer Readln CrtInit Kbd Real DelLine KeyPressed Release Standartni skalarni typy Integer -32768..32767 ( 2 byte ) !!!nehlida se pretceni!!! Byte 0..255 ( 1 byte ) Real 1E-38 az 1E+38 , 11 platnych mist ( 6 byte ) nesmi byt uzito jako argument Pred a Succ nesmi byt uzito jako index pole nesmi byt uzito jako ridici promenna for a case neni dovoleno vytvaret intervaly Boolean (False,True) False < True ( 1 byte ) Char znak v kodu ASCII ( 1 byte ) Uzivatelem definovane jazykove elementy Identifikatory max. 127 signifikantnich znaku Konstanty hexadecimalni maji rozsah: $0000..$FFFF Retezy jsou kompatibilni s: poli array of char stejne delky a vsemi typy string Ridici znaky # pred konstantou 0..255 nebo $0..$FF : jedna se o ASCII znak prislusneho kodu ^ pred znakem : jedna se o korespondujici ridici znak ASCII Komentare {toto je komentar} , (*toto take*) kompilacni direktivy {$direktiva} Hlavicka programu program jmeno(parametr, ... ); Deklaracni cast 1.Deklarace navesti 2.Deklarace konstant 3.Deklarace typu 4.Deklarace promennych 5.Deklarace procedur a funkci Deklarace navesti: label id1,id2, ... ; navestim muze byt retez znaku, napr. label 10,error,Quit; deklarace konstant: const identifikator = konstanta; ... TURBO ma definovane tyto konstanty: Pi 3.1415926536e+00 False True Maxint 32767 deklarace typu: type identifikator = typ; ... deklarace promennych: var identifikator, ... : typ; ... Telo programu begin prikaz; ... end. Vyrazy Operatory: 1. unarni - 2. not 3. * / div mod and shl shr 4. ; - or xor 5. = <> < > <= >= in not and or xor lze pouzit i na typ integer, kde zpusobi binarni operaci misto div lze ekvivalentne pouzit / Prikazy Prirazovaci prikaz: promenna := vyraz ; Prikaz procedury: jmeno(par, ... ); Prikaz skoku: goto label; Slozeny prikaz: begin prikaz; ... end Podminky: if podminka then prikaz else prikaz; case selektor of konstanta, ... : prikaz; : : else prikaz; ... end; Cykly: while podminka do prikaz; repeat prikaz; : : until podminka; for promenna := vyraz to vyraz do prikaz; typy Vyctove typy: jmeno = (hodnota, ... ); Typy interval: jmeno = dolni..horni; Konverze typu: Krome standartnich konverzi ma turbo moznost konverze nasledujicim spusobem.Priklad: type ZN = (ANO,CAS,ER,MORE);{pak plati: ZN(2) = ER integer(CAS) = 1} Z toho vyplyva ekvivalence: ord() = integer() chr() = char() pozn.: Rozsah intervalu se implicitne nehlida. Je-li to treba je nutno pouzit kompilacni direktivu: {$R+} Typ string: jmeno = string[konstanta]; {konstanta = 1..255} Operace : + spojeni retezu napr.: 'turbo '+'pascal'='turbo pascal' Prirazeni: := napr.: LINE:='slovo'+WORD+'konec' Procedury: Delete(retez,posice,pocet) odstrani z retezu pocet znaku od posice Insert(retez,vsuvka,posice) vlozi do retezu vsuvku od posice Str(hodnota,retez) prevede hodnotu na retez napr.: X:=12.43; Str(X:10:0,S);{nyni S='12'} Val(retez,promenna,kod) prevede retez na hodnotu a doslo-li k chybe, nastavi kod na index prvniho chybneho znaku, jinak je 0. Funkce : Copy(retez,posice,pocet) ma hodnotu poctu znaku od posice retezu napr.: R:='qwerty'{nyni plati:} Copy(R,3,2)='er' Concat(retez, ... ) ma hodnotu spojeni retezu.Dala by se deklarovat: function Concat(S1,S2, ... :string) of string; begin Concat:=S1+S2+ ... end; Length(retez) ma hodnotu delky retezu Pos(retizek,retez) ma hodnotu od niz zacina retizek v retezu, neni-li tam ma hodnotu 0. pozn.:String je kompatibilni s char. Ze stringu lze prirazovat pomoci indexovani. Indexace zacina od 0. Pozor Pos od 1! Cili posledni znak je: STRING[Length(STRING)-1] Typ pole: jmeno = array[rozsah, ... ] of typ; TURBO ma dve preddefinovana pole typu Byte: Mem Port Typ zaznam: jmeno = record pevna cast; variantni cast; end; Pevna cast: promenna : typ; : : Variantni cast: case selektor : typ of hodnota, ... : ( jmeno : typ ; ... ) ; ... Vyvolani: RECORD.JMENO ... with RECORD, ... do begin prikaz,kde staci JMENO; ... end TYPY MNOZINA set of ordinalni typ konstruktor mnoziny: [vyraz, ... ,vyraz .. vyraz, ... ] definovane operace: + sjednoceni * prunik - rozdil = rovnost <> nerovnost <= "je obsazena v" >= "obsahuje" in "je prvkem mnoziny" TYPY KONSTANTA: jmeno : typ = konstanta U poli lze napr.: POLE : array [0..1,0..2] of integer = ((2,4,6),(7,8,9)) U zaznamu: type P = record X,Y,Z : integer; end const ZAZ : P = ( X : 3 ; Y : 12 ; Z: 128 ) U mnozin: const MALA : set of char = ['a'..'z'] TYPY SOUBOR: var jmeno : file of typ; Neni povoleno file of file !!! Operace na souborech: Assign(jmeno,retez) prirazeni fyzickeho souboru Rewrite(jmeno) zalozeni souboru Reset(jmeno) nastaveni zacatku souboru Read(jmeno,promenna, ... ) cteni ze souboru Write(jmeno,promenna, ... ) zapis do souboru Seek(jmeno,n) nastaveni na n-tou polozku (0=prvni) Flush(jmeno) nastaveni sectoroveho bufferu Close(jmeno) uzavreni souboru Erase(jmeno) vymazani souboru Rename(jmeno) prejmenovani souboru Standartni souborove funkce: EOF(jmeno) konec souboru (Boolean) FilePos(jmeno) pozice ukazatele (Integer) FileSize(jmeno) pocet slozek souboru (Integer) nastaveni ukazatele na konec souboru: Seek(jmeno,FileSize(jmeno)); Textove soubory: Standartni identifikator typu: Text Specialni textove operace: Readln(jmeno,promenna, ... ) Writeln(jmeno,vyraz, ... ) Eoln(jmeno) {typ Boolean - je-li EOF(F)=true pak Eoln(F)=true} Na textove soubory nelze uzit funkce: Seek Flush FilePos FileSize Logicka zarizeni: CON console (konzola = display + klavesnice) TRM terminal (display) KBD keyboard (klavesnice) LST list - printer (tiskarna) AUX auxiliary (pomocna) USR user (uzivatelska) Standartni soubory: Input CON: TRM: Output CON: TRM: Con CON: Trm TRM: Kbd KBD: Lst LST: Aux AUX: Usr USR: Na standartni soubory se nepouzivaji procedury: Reset Rewrite Close Vstup textovych souboru: Read(promenna, ... ) Read(file,promenna, ... ) Promenne mohou byt typu: Char String Integer Real. Eoln = true, jestlize nasledujici znak je 'cr' nebo '^Z'. Eof = true, jestlize nasledujici znak je '^Z'. Ciselny retez smi mit max. 30 znaku. Pro vstup z konzoly plati: Navrat o znak: '' nebo '^H'. Smazani celeho radku: '^X' Delka vstupniho bufferu konzoly je 127 znaku a da se upravit zmenou preddefinovane promenne BufLen. Napr.: BufLen := 14 Readln Ma stejne parametry a plati totez co pro Read, ale po skonceni vstupu ignoruje zbytek radku a muze se vyskytovat bez parametru. Vystup textovych souboru: Write({jako u Read}) Writeln Parametry mohou mit doplnek - cislo oddelene dvojteckou, ktere ma vyznam delky vystupujiciho retezu. U typu real muze byt dalsi doplnek s vyznamem poctu desetinnych mist, a cislo pak vystupuje v nelogaritmickem tvaru. Netypove soubory: file Priklad deklarace: var SOUBOR : file; Lze pouzit vsechny procedury a funkce, krome Read, Write, Flush. Specificke procedury: BlockRead(file,promenna,pocet) BlockWrite(file,promenna,pocet) file je identifikator netypoveho souboru promenna jsou ctena/zapisovana data pocet je vyraz typu integer, ktery specifikuje pocet 128-bytovych bloku urcenych pro prenos mezi pameti a diskem. I/O kontrola: Normalne kompilator preklada s kontrolou prenosu dat, ale pouzitim {$I-} lze kontrolu vypustit. Pak je nutno kontrolu zajistit programove pomoci standartni funkce: IOresult , ktera je v pripade spravneho prenosu rovna nule, v pripade chyby ma hodnotu cisla chyby. Hodnota IOresult se muze menit v prubehu vykonavani: BlockRead BlockWrite Chain Close Erase Execute Flush Read Readln Rename Reset Rewrite Seek Write Writeln DYNAMICKE DATOVE STRUKTURY deklarace napr.: type SPOJ = ^OBJEKT OBJEKT = record DALSI : SPOJ; HODN : integer end; var P : SPOJ;{je promenna typu ukzatel} P:=nil {promenna P neukazuje na zadnou dynamickou promennou} P:=P^.DALSI {postup ukazatele na dalsi dynamickou promennou} na promenne stejneho typu ukazatel mohou byt aplikovany relacni operatory: = <> New(P) {vytvori se dynamicka promenna typu OBJEKT a ukazatel na tuto promennou se ulozi do P} Mark(P) {ulozi do promenne hodnotu ukazatele hromady} Relase(P) {ulozi do ukazatele hromady hodnotu promenne} GetMem(P,I) {nastavi ukazatel na diru v hromade o I bytech} lze deklarovat ukazatel typu: U:^Integer; PROCEDURY procedure identifikator (specifikace parametru ; ...) lokalni deklarace begin posloupnost prikazu end FUNKCE function identifikator (specifikace parametru ; ...) : typ funkce lokalni deklarace begin posloupnost prikazu end Pro pripad vzajemne rekurze je mozno pouzit neuplne deklarace: hlavicka ; forward ; SPECIFIKACE PARAMETRU VOLANE HODNOTOU: identifikator : typ VOLANE ODKAZEM : var identifikator : typ Jako typ je povolen pouze identifikator! Napr.: procedure S(M: array[1..50] of Integer); {je chybne} Parametry typu file musi byt volany odkazem! Rizeni kontroly typu parametru: Prekladac kontroluje shodnost typu parametru a za shodne povazuje napr.: typy string shodne delky, coz muze byt nezadouci. Kontrolu je mozno vypnout kompilacnim prikazem {$V-}. Netypove parametry: Nema-li formalni parametr uveden typ, muze byt jako skutecny parametr uzit libovolny typ. Je treba je pouzit v deklaraci jako absolute. Napr.: je spravne: program Vymena; type Matice = array[1..50,1..25]: var M1,M2: Matice; procedure Sun(var A,B; Size: Integer) type T = array[1..MaxInt] of byte; var X : T absolute A; Y : T absolute B; C : Integer; begin for C := 1 to Size do begin Y[C] := X[C]; X[C] := 0; end; end; begin Sun(M1,M2,SizeOf(M1)); end. Standartni procedury: Delay(Time) Zpusobi programovou smycku v trvani cca Time ms (integer). CrlEol Smaze radek vpravo od kursoru. ClrScr Smaze obrazovku a nastavi kursor na posici "home". DelLine Smaze radek s kursorem a vyroluje obrazovku nahoru. InsLine Prida radek na posici kursoru a sroluje obrazovku dolu. Init Vysle "Terminal Initialization String" definovany pri instalaci. Exit Vysle "Terminal Reset String" definovany pri inicializaci. GotoXY(X,Y) Nastavi kursor na posici X,Y. LowVideo Vysle "End of highlighting" definovany pri inicializaci, tj. znak "dim". HighVideo Vysle "Highlighting" definovany pri inicializaci, tj. "normal" mode obrazovky. Randomize Inicializuje generator nahodnych cisel. Move(odkud,kam,kolik) Prresune blok pameti delky 'kolik' (v byte) od adresy obsazene promennou 'odkud' na misto od adresy obsazene promennou 'kam'. FillChar(odkud,kolik,co) Naplmi blok pameti delky 'kolik' (v byte) od adresy obsazene promennou 'odkud' obsahem 'co' (typ byte, char). Standartni funkce: Abs(vyraz) ArcTan(vyraz) - vysledek je v radianech. Cos(vyraz) - argument je v radianech. Exp(vyraz) Frac(vyraz) - desetinna cast cisla. Int(vyraz) - cela cast cisla. Ln(vyraz) Sin(vyraz) - argument je v radianech. Sqr(vyraz) Sqrt(vyraz) Pred(vyraz) - predchudce. Succ(vyraz) - naslednik. Odd(vyraz) - argument = integer, vysledek = boolean ekvivalent: (abs(vyraz) mod 2 = 1) Ord(vyraz) - ordinalni cislo. Round(vyraz) - konverze real -> integer zaokrouhlenim. Trunc(vyraz) - konverze real -> integer zanedbanim. Hi(vyraz) - argument i vysledek jsou integer. Horni byte vysledku je 0, dolni je horni byte vyrazu. KeyPressed - boolean. Je true, byla-li stisknuta klavesa. Lo(vyraz) - argument i vysledek jsou integer. Snuluje horni byte vysledku vyrazu. Random - real. Nahodne cislo [0<=Random<1] Random(vyraz) - integer. Nahodne cislo [0<=Random + ; 1 -> -). Retez (string): Obsazuje o 1 byte vetsi pamet, nez je jeho max. delka: @ Aktualni delka (L) @+1 Prvni znak : @+L Posledni znak @+L+1 Nepouzito : @+Max Nepouzito Mnozina (set): Kazdy prvek mnoziny obsazuje 1 bit pameti. Protoze maximum prvku je 256, muze mnozina obsazovat max. 32 byte. Konkretne obsazuje: (Max div 8) - (Min div 8) +1 byte. Adresa elementu E je: MemAddress = @ + (E div 8) - (Min div 8). Adresa bitu je: BitAddress = E mod 8. Soubor (File Interface Block): Kazda promenna souboru predstavuje prislusny file interface block (FIB). Ten obsazuje 176 byte a sklada se z ridici sekce (prvnich 48 byte) a sektoroveho bufferu (poslednich 128 byte): @ Flags byte @+1 File type @+2 Character buffer @+3 Sector buffer pointer @+4 Number of records (LSB) @+5 Number of records (MSB) @+6 Record length in bytes (LSB) @+7 Record length in bytes (MSB) @+8 Current record number (LSB) @+9 Current record number (MSB) @+10 Nepouzito @+11 Nepouzito @+12 First byte of CP/M FCB : @+47 Last byte of CP/M FCB @+48 First byte of sector buffer : @+175 Last byte of sector buffer Flag byte (@) obsahuje 4 jednobitove flagy, ktere indikuji stav souboru: bit 0 Input flag. Je 1 je-li je povoleno cteni. bit 1 Output flag. Je 1 je-li povolen zapis. bit 2 Write semaphore. Je 1 jsou-li data zapisovana do bufferu. bit 3 Read semaphore. Je 1 neni-li obsah bufferu definovan. File type (@+1) specifikuje typ zarizeni: 0 Consola (CON:) 1 Terminal (TRM:) 2 Keyboard (KBD:) 3 List - tiskarna (LST:) 4 Auxiliary - pomocne (AUX:) 5 User - uzivatelske (USR:) 6 Disk Netypove soubory nemaji ve FIB sektorovy buffer a FIB ma delku 48 byte. Data se prenaseji na disk primo z promenne. Pointry: Pointr obsazuje v pameti 2 byte s 16-bitovou adresou v bytove prehozenem formatu. PREDDEFINOVANE PROMENNE: HeapPtr Pointer hromady RecurPtr Pointer rekurzivniho sklipku StackPtr Pointer sklipku CPU KOMPILACNI DIREKTIVY Zapisuji se jako komentare zacinajici znakem '$'. Je mozno uvest soucasne nekolik direktiv: {$R-,B+,V-}. Direktiva B Implicitne: B+ Ridi I/O mod pro standartni soubory Input a Output. {B+} selektuje zarizeni CON: {B-} selektuje zarizeni TRM: Direktiva C Implicitne: C+ Ridi reprezentaci ridicich znaku, ktere vstoupi behem provadeni procedury Read nebo Readln. {C+} vtoupi-li ^C - zastavi se pvadeni programu ^S - prepina vystup na obrazovku {C-} kontrolni znaky nemaji interpretaci Direktiva I Implicitne: I+ Ridi hlidani chyb pri I/O. {I+} kontrola je zabezpecena kompilatorem {I-} je nutno pouzit standartni funkci IOresult Direktiva R Implicitne: R- Ridi hlidani indexu. {R+} kontroluji se indexy poli a rozsahy intervalu {R-} kontrola se neprovadi Direktiva V Implicitne: V+ Ridi hlidani typu stringu uziteho jako skutecny parametr misto formalniho parametru typu var {V+} typ stringu se hlida {V-} kompilator dovoli uzit string jine delky Direktiva U Implicitne: U- Ridi uzivatelske preruseni vykonavani programu pri stisknuti ^C. {U+} preruseni se provede {U-} nema efekt Direktiva X Implicitne: X+ Ridi optimizaci poli. {X+} maximalni rychlost {X-} minimalni pamet Direktiva A Implicitne: A+ Ridi generaci absolutniho (nerekurzivniho) kodu. {A+} absolutni kod {A-} rekurzivni kod Direktiva W Implicitne: W2 Ridi velikost mista pro prikaz With tj. urcuje kolik rekordu muze byt otevreno uvnitr jednoho bloku. Za W musi nasledovat jedna cislice 1..9.