Opowieść o programowaniu w Adzie



Pobieranie 0.69 Mb.
Strona5/16
Data28.04.2016
Rozmiar0.69 Mb.
1   2   3   4   5   6   7   8   9   ...   16

Typ boolean

Z zagadnieniem prawdy i fałszu związany jest także typ logiczny - boolean, przyjmujący dwie wartości - false i true. W celu wprowadzania i wyprowadzania wartości tego typu musimy znów skonkretyzowac odpowiedni pakiet - tym razem ada.text_io.enumeration_io:


package boolean_io is new ada.text_io.enumeration_io(boolean);
Oto przykład zastowania:
-- tabelka logiczna

-- przyklad uzycia zmiennych logicznych

-- a przy okazji - opis dzialania operatorow
with ada.text_io;

use ada.text_io;


procedure pr15 is

package b_io is new ada.text_io.enumeration_io(boolean);

p,q:boolean;

begin


put_line(" TABELKA WARTOSCI LOGICZNYCH");

new_line(3);

put(" | p | q | not p | p and q | p or q |

p xor q | ");

new_line;

p:=true;


q:=true;

put(" | ");b_io.put(p,width=>5);

put(" | ");b_io.put(q,width=>5);

put(" | ");b_io.put(not p,width=>7);

put(" | ");b_io.put(p and q,width=>7);

put(" | ");b_io.put(p or q,width=>6);

put(" | ");b_io.put(p xor q,width=>7);

put(" |");

new_line;
q:=false;

put(" | ");b_io.put(p,width=>5);

put(" | ");b_io.put(q,width=>5);

put(" | ");b_io.put(not p,width=>7);

put(" | ");b_io.put(p and q,width=>7);

put(" | ");b_io.put(p or q,width=>6);

put(" | ");b_io.put(p xor q,width=>7);

put(" |");

new_line;

p:=false;

q:=true;

put(" | ");b_io.put(p,width=>5);

put(" | ");b_io.put(q,width=>5);

put(" | ");b_io.put(not p,width=>7);

put(" | ");b_io.put(p and q,width=>7);

put(" | ");b_io.put(p or q,width=>6);

put(" | ");b_io.put(p xor q,width=>7);

put(" |");

new_line;

q:=false;

put(" | ");b_io.put(p,width=>5);

put(" | ");b_io.put(q,width=>5);

put(" | ");b_io.put(not p,width=>7);

put(" | ");b_io.put(p and q,width=>7);

put(" | ");b_io.put(p or q,width=>6);

put(" | ");b_io.put(p xor q,width=>7);

put(" |");

new_line;


end pr15;
Wynikiem wykonania powyższego programu będzie następująca tabelka:
TABELKA WARTOSCI LOGICZNYCH

p

q

not p

p and q

p or q

p xor q

TRUE

TRUE

FALSE

TRUE

TRUE

FALSE

TRUE

FALSE

FALSE

FALSE

TRUE|

TRUE

FALSE

TRUE

TRUE

FALSE

TRUE

TRUE|

FALSE

FALSE

TRUE

FALSE

FALSE

FALSE


Typy znakowe

Kolejnymi typami - już nie liczbowymi, lecz znakowymi - są character zawierający znaki ze zbioru znaków o nazwie ISO 8859-1, czyli latin1, oraz wide_character ze znakami ze zbioru ISO 10646  BMP. Typ character zawiera 256 znaków - drukowalnych i niedrukowalnych , zaś wide_character - 65536 znaków. 256 początkowych znaków wide_character jest takie samo, jak w typie character. Znaki drukowalne obu typów ujmujemy w apostrofy (np. 'a', '$', '+'). Możliwość używania znaków niedrukowalnych (kontrolnych) należących do typu character, takich jak znak końca linii czy dźwięk, zapewnia nam pakiet o nazwie ada.characters.latin_1. Poszczególne znaki należące do tego typu otrzymały tam swoje nazwy (zostały zadeklarowane jako stałe), i przez te nazwy możemy się do nich odwoływać. Oto fragmenty tego pakietu:

------------------------

-- Control Characters --

------------------------
NUL : constant Character := Character'Val (0);

SOH : constant Character := Character'Val (1);

STX : constant Character := Character'Val (2);

ETX : constant Character := Character'Val (3);

EOT : constant Character := Character'Val (4);

ENQ : constant Character := Character'Val (5);

ACK : constant Character := Character'Val (6);

BEL : constant Character := Character'Val (7);

BS : constant Character := Character'Val (8);

HT : constant Character := Character'Val (9);

LF : constant Character := Character'Val (10);

VT : constant Character := Character'Val (11);

FF : constant Character := Character'Val (12);

CR : constant Character := Character'Val (13);

SO : constant Character := Character'Val (14);

SI : constant Character := Character'Val (15);


(....)
Space : constant Character := ' '; -- Character'Val(32)

Exclamation : constant Character := '!'; -- Character'Val(33)

Quotation : constant Character := '"'; -- Character'Val(34)

Number_Sign : constant Character := '#'; -- Character'Val(35)

Dollar_Sign : constant Character := '$'; -- Character'Val(36)

Percent_Sign : constant Character := '%'; -- Character'Val(37)

Ampersand : constant Character := '&'; -- Character'Val(38)

Apostrophe : constant Character := '''; -- Character'Val(39)

Left_Parenthesis : constant Character := '('; -- Character'Val(40)

Right_Parenthesis : constant Character := ')'; -- Character'Val(41)

Asterisk : constant Character := '*'; -- Character'Val(42)

Plus_Sign : constant Character := '+'; -- Character'Val(43)

i tak dalej. Znaku o nazwie BEL powodującego dźwięk możemy więc używać pisząc w programie ada.characters.latin_1.bel, tak jak to widać niżej:
-- program demonstrujacy uzycie znakow ASCII
with ada.text_io,ada.characters.latin_1;

use ada.text_io;


procedure pr16 is
znak:character:='d';
begin

new_line(7);

set_col(25);

-- tak wyprowadzamy znaki kontrolne ...

put("!!! Pora na kolacje !!!");

put(ada.characters.latin_1.bel);

new_line(2);

-- ... a tak znaki drukowalne

put(ada.characters.latin_1.asterisk);

new_line;

put('a');

new_line;

put(znak);

new_line;

put('a');

end pr16;

Oczywiście do każdego ze znaków można byłoby się odwołać tak, jak to widzieliśmy w pakiecie ada.characters.latin_1, pisząc character'val(n), ale jest to sposób nieco mniej naturalny. Co oznacza owo tajemnicze val, dowiemy się już wkrótce. Na razie zauważmy jeszcze, że za wyprowadzanie znaków typu character odpowiada pakiet ada.text_io. Na przykład do wyprowadzenia znaku używana jest procedura put. Nie jest to jednak to samo put, którego uzywaliśmy dotychczas - pakiet text_io zawiera odrębne procedury dla pojedynczych znaków i dla ich ciągów. Nie możemy na przykład używać dla znaków procedury put_line - istnieje tylko dla ciągu znaków, natomiast dla pojedynczego znaku nie jest zdefiniowana. Za wyprowadzanie znaków typu wide_character odpowiedzialny jest z kolei pakiet ada.wide_text_io. Znaki typu wide_character nie mogą pojawiać się w identyfikatorach, czyli w nazwach procedur, zmiennych i stałych, natomiast mogą pojawiać się w wyprowadzanych tekstach i komentarzach.

1   2   3   4   5   6   7   8   9   ...   16


©absta.pl 2016
wyślij wiadomość

    Strona główna