@( Exc ) K/BASIC Zakladni popis @29-12-1985 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % % % %%%% % %%% %%% %%% % % % % % % % % % % % % % % % % % % % % % % % % % % % % %% % %%%% % % %%% % % % % % % % % % %%%%% % % % % % % % % % % % % % % % % % % % % % % %%%% % % %%% %%% %%% % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ( E x c ) Verze diskety K/BASIC: 1.01 (1985) K / B A S I C I I ******************************** Konfigurace hardware : TNS stolek Medium : disketa Operacni system : C P / M V 2.25 K / B A S I C je jeden z nekolika typu kompilatoru zalozenych na jazyce BASIC pod operacnim systemem CP/M. O B S A H O b s a h . . . . . . . . . . . . . . . . . . . . . . . . . 2 U v o d . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Zavedeni operacniho systemu CP/M . . . . . . . . . . . . 3 2. Format programu . . . . . . . . . . . . . . . . . . . . . 3 2.1. Cislovani prikazu (radku) . . . . . . . . . . . 4 2.2. Identifikatory . . . . . . . . . . . . . . . . 5 2.3. Aritmeticke operatory . . . . . . . . . . . . . 5 3. Vytvoreni programu v K/BASICu . . . . . . . . . . . . . . 6 3.1. Prace s prekladacem KBAS2 . . . . . . . . . . . 6 3.1.1. Druhy a funkce prepinacu . . . . . . 7 3.2. Ukazkovy priklad . . . . . . . . . . . . . . . 8 3.3. Priklady . . . . . . . . . . . . . . . . . . . 8 4. Prace se soubory . . . . . . . . . . . . . . . . . . . . 11 4.1. Organizace souboru . . . . . . . . . . . . . . 12 4.2. Ukazky kratkych programu pro praci se soubory . 13 U V O D Tento popis obsahuje prehled zakladnich instrukci potrebnych pri psani a provadeni programu v jazyce K/BASIC. Dale obsahuje nekolik jednoduchych programu na ukazku moznos- ti programovani v jazyce K/BASIC. Vsechny prikazy a dalsi moznosti K/BASICu jsou podrobne popsany v prirucce: OS MIKROS / K/BASIC / PRIRUCKA UZIVATELE. 1. Zavedeni operacniho systemu CP/M =================================== A) Zapnete pocitac a stisknete klavesu [RESET]. B) Vlozte systemovou disketu do mechaniky "0" a stisknete kla- vesu [ F ]. Pocitac hlasi pripravenost symbolem: A> Pozn.: Pokud se nepodari podle uvedeneho postupu zavest ope- racni system z mechaniky "0", vyjmete disketu, vlozte ji do mechaniky "1" a opakujte postup zavedeni systemu. Pocitac se pak hlasi symbolem: B> Pokud se system nezavede, je vhodne zkusit zavest ope- racni system z jine diskety. Je-li i tento pokus ne- uspesny, jedna se pravdepodobne o technickou zavadu na pocitaci. C) Nyni je pocitac pripraven k praci. Pro vytvoreni programu je nutne, aby na diskete byly tyto programy: ED .COM (nebo TED.COM) KBAS2.COM KRUN2.COM 2. Format programu ================== Program se sklada z jednoho nebo vice vhodne uspora- danych prikazu K/BASICu. Nazyvaji se zdrojovym programem. Pred prikazy muze byt mezera. Tam, kde je dovolena me- zera, se muze vlozit libovolny pocet mezer. Mezery v prikazech jsou nevyznamne. Proto prikazy: A=B+C A = B + C jsou ekvivalentni. Prikazy K/BASICu se pisi ve volnem formate s nasleduji- cimi dohodami: 1) Pokud prikaz neni ukonceny v jednom radku, musi se pouzit pokracovaci znak [\]. Pak je mozne pokracovat v prikazu na dalsim radku. Vyhrazena slova K/BASICu, nazvy promennych a retezcove konstanty nesmi byt preruseny mezerou, tabelatorem nebo znakem pro novy radek. Kazdy radek musi byt ukonceny znakem pro novy radek. 2) Vsechny znaky za pokracujicim znakem v prislusnem radku kom- pilator ignoruje. 3) Povolene jsou vicenasobne prikazy v radku oddelene znakem ':'. Prikazy "DATA", "DEF", "DIM" a "END" musi byt na samo- statnych radcich. Prikaz "IF" musi byt prvnim prikazem na radku. 2.1. Cislovani prikazu (radku) ------------------------------ Cislovani radku je nepovinne. Pokud je pouzito terminu "cislo prikazu", musi byt tento ocislovany prikaz na zacatku radku. Cisla prikazu (radku) jsou ignorovana krome spojeni s odkazy u techto prikazu: GO TO GO SUB ON IF U techto prikazu se musi cislo prikazu (radku) objevit jako navesti jedineho prikazu programu. Cisla prikazu nemusi byt v vzestupnem poradi. Priklad: 40 INPUT KROK 20 PRINT KROK 30 GO TO 40 Cisla prikazu 20 a 30 se nemusi v programu uvadet; v prubehu kompilace se ignoruji. Priklad: 10 INPUT KROK PRINT KROK GO TO 10 Cisla prikazu mohou obsahovat libovolny pocet cislic. Kompilator vsak rozlisuje pouze prvnich 31 cislic. Priklad: 108250147 INPUT KROK PRINT KROK GO TO 108250147 Dulezitou vlastnosti cislovani prikazu K/BASICu je, ze cislem prikazu muze byt jakekoliv platne cislo. Je mozne po- uzit: - cela cisla - desetinna cisla - cisla v exponencialnim tvaru Priklad: Spravne: 10 PRINT A Nespravne: M10 PRINT A 10.0 PRINT B 1M0 PRINT B 10.23 PRINT C 10F12 PRINT C 10E12 PRINT D 20;3 PRINT D 2.2 Identifikatory ------------------- Identifikator se zacina abecednim znakem, za kterym muze byt libovolny pocet alfanumerickych znaku nebo tecek. Rozlisuje se pouze prvnich 31 znaku. Pokud poslednim znakem identifikatoru je '$', identifi- kator je retezcoveho typu. Pokud poslednim znakem je '%', iden- tifikator je celociselneho typu. Identifikatory, ktere nekonci znakem '$' nebo '%', jsou realneho typu. Priklad: Spravne: K$ Nespravne: 250% C22% 1MISTO$ S POCET:POLI POCET.ZAZNAMU P20,50 INDEX% .250 A250.500 POCET ZAZNAMU A250.5 2.3. Aritmeticke operatory -------------------------- Aritmeticke operatory je mozno aplikovat na cela i re- alna cisla. Vsechna oznaceni, ktera jsou dohodnuta v prirucce K/BASIC, jsou platna az na oznaceni operatora umocneni. Znak pro operator umocneni ma tvar: ^ (bily ctverecek) Priklad: A = 2 B = 3 PRINT A^B Na displeji se vytiskne cislo 8. 3. Vytvoreni programu v K/BASICu ================================ Nejprve musite vytvorit zdrojovy program na disku pomo- ci textoveho editoru (pouziti K/BASICu predpoklada zakladni znalosti systemu CP/M). Je mozne napriklad pouzit textovvy editor TED. Jeho spusteni ma nasledujici format: A>TED kde je jmeno zdrojoveho textu programu (max. 8 znaku). Zdrojovy program musi byt typu .BAS (pro naslednou praci s prekladacem). 3.1. Prace s prekladacem KBAS2 ------------------------------ Po vytvoreni zdrojoveho programu je mozne ho prelozit do formy . To je umozneno prekladacem KBAS2. Prekladac K/BASICu se vyvolava nasledovne: A>KBAS2 $ [VEZMI] kde je jmeno zdrojoveho textu (predpoklada se typ BAS) je nepovinny odkaz na disk; pouziva se na urceni disko- ve jednotky, na kterou pozadujeme ulozit program typu INT. Odkaz ma tvar A: nebo B: je nepovinny prepinac prekladace, ktery je mozne po- uzit v dobe prekladu programu (druhy a funkce prepinacu jsou popsany na konci teto kapitoly) Priklad: A>KBAS2 MZDY B: Program MZDY.INT bude ulozen na disketu v mechanice 1. A>KBAS2 MZDY Bude vytvoren program MZDY.INT a ulozen v mechanice 0. Zdrojovy program se obvykle vypisuje na konzolu. Kazda chybova zprava se vypise za chybnym prikazem. V tom pripade je nutne chybu opravit pomoci textoveho editoru. Pokud je program bez chyby je mozne ho spustit nasle- dujicim zpusobem: A>KRUN2 TRACE , Volba sledovani (TRACE) je volitelna (podrobny popis je v prirucce K/BASICu). Neni podminkou ke spusteni programu. Priklad: A>KRUN2 MZDY.INT Tento prikaz spusti program MZDY.INT, ktery je ulozen na diskete v mechanice 0. Pozn.: Chybova hlaseni v prubehu prekladu i v prubehu vypoctu jsou uvedena v prirucce K/BASICu, v prilohach A a B. 3.1.1. Druhy a funkce prepinacu ------------------------------- Prepinac: B - potlacuje vystup programu na konzolu v dobe prekladu. Chyby se vytisknou i pri nastavenem prepinaci B. Neovlivnuje vy- stup na tiskarnu (prepinac F) nebo na disk (prepinac G). C - potlacuje vytvoreni souboru INT; vyhodne pri dlouhych prog- ramech, ktere vetsinou nebyvaji bez chyb. Syntakticka ana- lyza se provede bez zapisu docasneho souboru na disk. D - potlacuje prevod malych pismen na velke. Napr. promenne "UHEL" a "uhel" jsou chapany jako dve ruzne promenne. Vy- hrazena slova musi byt psana velkymi pismeny. E - pouziva se pri ladeni programu. Bezici program opatri chyb- nou zpravu cislem radku, ve kterem doslo k chybe. Musi se nastavit pri volbe sledovani (TRACE), jinak se volba sledo- vani neuplatni. F - zpusobi, ze prelozeny vypis programu se krome zobrazeni na displej vytiskne i na prirazenem vystupnim zarizeni. Tim dostanete kopii zkompilovaneho programu. Kazda nova stranka vypisu obsahuje hlavicku a cislo stranky. G - zpusobi, ze prelozeny vypis programu se zapise do diskoveho souboru. Soubor bude mit nazev puvodniho programu s typem LST. 3.2. Ukazkovy priklad --------------------- Tento priklad obsahuje temer vsechny operace, ktere jsou nutne pri psani a spusteni noveho programu. Text za znakem '/' znamena poznamku. A>TED FAKT.BAS / .BAS je nutne zadat / je zaveden program TED / pripravenost hlasi kurzorem / zacina zadani programu REM "VYPOCET FAKTORIALU" INPUT "ZADEJ CELE CISLO N"; N% SUMA = 1 FOR I = 2 TO N% SUMA = SUMA * I NEXT I PRINT "FAKTORIAL CISLA";N%;"JE";SUMA END [ STOP ] / touto klavesou ukoncime zadani / editor se ohlasi '*' E / provede se zaznam souboru na disk A>KBAS2 FAKT $B / prelozeni souboru FAKT.BAS s potla- / cenim vystupu programu na konzolu v / dobe prekladu; chyby se vytisknou A>KRUN2 FAKT.INT / spusteni programu FAKT.INT 3.3. Priklady ------------- V teto kapitole je ukazano nekolik jednoduchych progra- mu na dokresleni moznosti prace s jazykem K/BASIC. 1) V prvnim programu (na vypocet prumerneho veku studentu) jsou vyuzity 2 prikazy K/BASICu: CHAIN COMMON Prikaz CHAIN ------------ Odevzdava rizeni z prave vykonavaneho programu na prog- ram, urceny VYRAZEM. Predpokladany typ souboru je INT. Monitor K/BASICu v dobe vypoctu udrzuje v pameti 4 cas- ti: oblast KONSTANT, KODU, UDAJU a PROMENNYCH. Kazda z jednot- livych oblasti hlavniho programu musi byt vetsi nez prislusna oblast pripojovanych programu. Rozsah jednotlivych oblasti hlavniho programu je mozne prizpusobit pomoci prikazu: %CHAIN ,,, Prikaz %CHAIN muze byt pouze v hlavnim programu nebo v prvnim vykonavanem programu. Prikaz COMMON ------------- Zpusobuje, ze vsechny promenne uvedene v seznamu, jsou spolecne pro hlavni program i pro vsechny programy, ktere se vykonavaji pomoci prikazu CHAIN. Pokud hlavni program obsahuje prikaz COMMON, musi ho obsahovat take vsechny pripojene progra- my. Prikazy COMMON musi byt prvnimi prikazy programu. Pouze prikaz %CHAIN muze byt v hlavnim programu pred prikazem COMMON. Priklad: COMMON A,B,X(2) Tim je urceno, ze A,B jsou neindexovane realne promenne a X je dvourozmerne pole. Zde je program na vypocet prumerneho veku studentu: %CHAIN 100,200,100,100 / urcuje rozsah oblasti COMMON M,Z / urcuje spol.promenne DIM A(20),B(20) INPUT "N";N FOR I=1 TO N READ A(I) NEXT I C=0 FOR I=1 TO N STEP 2 C=C+A(I)+A(I+1) NEXT I M=C/N PRINT "PRUM.VEK MUZU JE ";M DATA 25,28,23,31,24,21,23,25 CHAIN "VEKZ" / odevzda rizeni programu VEKZ REM PRUMERNY VEK ZEN - VEKZ COMMON M,Z / urcuje spolecne promenne DIM A(20),B(20) IPUT "N";N FOR I=1 TO N READ A(I) NEXT I C=0 FOR I=1 TON STEP 2 C=C+A(I)+A(I+1) NEXT I Z=C/N PRINT "PRUM.VEK ZEN JE ";Z DATA 19,21,23,18,21,22,20,19 CHAIN "VEKSP" /odevzda rizeni programu VEKSP REM SPOLECNY PRUMER - VEKSP COMMON M,Z X=(M+Z)/2 PRINT "SPOLECNY PRUMER JE ";X STOP / zastaveni programu - rizeni / se odevzda systemu CP/M 2) Ukazkovy program na vyuziti generatoru nahodnych cisel: 50 INPUT "CHCETE HRAT: ANO=1, NE=0";ANO IF ANO=1 THEN 100 STOP 100 RANDOMIZE / nastaveni generatoru X=INT(RND*6)+1 / RND generuje nahodne cislo PRINT X GO TO 50 RND generuje nahodne cislo z intervalu <0,1) s rovnomernym rozlozenim pravdepodobnosti. RANDOMIZE inicializuje generator nahodnych cisel. Pro volbu prislusne konstanty se vyuziva casovy interval, ktery potrebuje adresat na vlozeni udaju v prikazu INPUT. Pro spravnou funkci je nutne, aby se pred timto prikazem vyskytoval prikaz INPUT. 3) Ukazkovy priklad na vyuziti viceradkove funkce: DIM B(10) INPUT "ZADEJ N";N FOR I=1 TO N READ B(I) NEXT I DEF FN.XYZ(N) / definice viceradkove funkce A=0 FOR I=1 TO N A = A+B(I) NEXT I FN.XYZ = A RETURN FEND / ukonceni viceradkove funkce PRINT FN.XYZ(N) / vytisteni hodnoty funkce DATA 10,20,30,40,50,60,70,80,90,80 STOP Funkce vrati hodnotu posledniho prirazeni pri vykonani prikazu RETURN. V tele funkce muze byt libovolny pocet prikazu RETURN. Pokud se jmenu funkce nepriradi zadna hodnota,vrati se posledni hodnota, ktera byla funkci vubec prirazena. Pokud ne- byla funkci prirazena hodnota, vrati se nula. 4. Prace se soubory =================== Pro aktivovani souboru se pouzivaji prikazy: CREATE OPEN FILE Po aktivovani souboru je mozne cist a zapisovat do souboru prikazy: READ PRINT Aktivni soubor je mozne deaktivovat prikazy: CLOSE DELETE Podrobny popis uvedenych prikazu je v prirucce K/BASIC, kap. 8. 4.1. Organizace souboru ----------------------- V K/BASICu se pouzivaji dva typy organizace souboru: sekvencni a pevna. Sekvencni organizace -------------------- Je vhodna pri pozadavku pamatovani udaju za sebou, polozku za polozkou. Pristup je mozny na zaklade prohlednuti pole za polem. Delka zapisovanych znaku neni omezena. Kazda udajova polozka vyzaduje jen takove misto, ktere je potrebne pro prislusny udaj a oddelovac. Nepouzivaji se zad- ne vyplnkove znaky. Priklad: Soubor, ktery obsahuje ciselne i retezcove udaje: "JOSEF","ANNA",1961 Pevna organizace ---------------- Soubor ma tehdy pevnou organizaci, pokud se pouzije v prikazech: CREATE OPEN FILE Volba delky zaznamu: RECL Kazda polozka udaju souboru pevne delky se zapise jako jednoduche pole, oddelene carkou (tak jako pri sekvencni orga- nizaci) s tim rozdilem, ze kazdy zaznam ma stejnou delku. Za- znamy jsou oddeleny znaky a (klavesa [VEZMI]) Pri kazdem vykonani prikazu "PRINT" se zapise jeden zaznam. Kazdy zaznam obsahuje pocet byte udanych parametrem "RECL". POZOR! Z toho plyne, ze spolecna delka vsech poli zaznamu musi byt mensi o 2 byte nez je cela delka zaznamu (kvuli CR-LF). 4.2. Ukazky kratkych programu pro praci se soubory -------------------------------------------------- 1) Priklad na vytvoreni souboru: CREATE "SOUBOR" RECL 60 AS 1 / vytvori a otevre sou- / bor, zaznamy o delce / 60 byte / cislo souboru je 1 PRINT#1;"ADAM","BRNO","129" / zapise se na soubor PRINT#1;"JAN","BRNO","150" / cislo 1 zaznam urceny PRINT#1;"OTA","BRNO","210" / za strednikem Bude vytvoren nasledujici soubor: "ADAM","BRNO","129" "JAN","BRNO","150" "OTA","BRNO","210" 2) Priklad na doplneni souboru: TRUE% = -1 IF END#1 THEN 100 OPEN "SOUBOR" RECL 60 AS 1 IF END#1 THEN 200 WHILE TRUE% READ#1;NAPRAZDNO WEND 200 PRINT#1;"UDAJE KTERE SE PRIPOJI" STOP 100 PRINT "SOUBOR SE NENASEL" STOP Vysledny soubor bude : "ADAM","BRNO","129" "JAN","BRNO","150" "OTA","BRNO","210" "UDAJE KTERE SE PRIPOJI" 3) Priklad na nalezeni urciteho zaznamu v souboru a jeho tisk: TRUE% = -1 / predpoklada se soubor OPEN "SOUBOR" RECL 60 AS 1 / z prikladu 1 IF END#1 THEN 500 FORM$="/..../: BYDLISTE - /..../ CISLO DOMU - /.../" WHILE TRUE% INPUT "VLOZ CISLO ZAMESTNANCE";C.ZAM% READ#1,C.ZAM%;JMENO$,MISTO$,CISLO$ PRINT USING FORM$;JMENO$,MISTO$,CISLO$ WEND 500 STOP Napriklad pri vlozeni cisla 1 se na displeji vytiskne: ADAM : BYDLISTE - BRNO CISLO DOMU - 129