procedure Printer;
begin
Wr iteChar:=Print;
end;
procedure Screen;
begin
WriteChar:=Scr;
end;
procedure WriteStr(s: string);
var
i:integer;
begin
for i:=l to Length(s) do
WriteChar(s[i
] ) s
end;
Использование такого кода:
Screen;
WriteStr('Вывод на экран');
Printer;
WriteStr('Печать на принтере');
Е с л и
к о л и ч е с т в о
н е о б х о д и м ы х к
в е к т о р и з а ц и и
ф у н к ц и й
в е л и к о , п р е д п о ч т и т е л ь н е е т а б л и ц а ф у н к ц и й ( с м . д а л е е ) .
С о в е т д е с я т ы й .
Н е устраивайте лиш ние проверки.
Д а ж е а в т о р ы ж у р н а л а « М о й к о м п ь ю т е р » и н о г д а и с п о л ь з у ю т
т а к о й к о д :
if flag=true then . . .
else .
..;
З а ч е м д е л а т ь п р о в е р к у и с т и н н о с т и ф л а г а л и ш н и й р а з , е с л и
э т о д е л а е т с а м о п е р а т о р
if?
Н у ж н о з а п и с ы в а т ь т а к :
if flag then .
..
else .
..;
А в м е с т о
if flag=false then . . .
else . .
.;
л у ч ш е
if not flag then . . .
else .
..;
О ч е н ь ч а с т о в с т р е ч а е ш ь и т а к о е :
function ххх(a,b: integer) -.boolean;
begin
if a>b then result: =true
else result: =false;
end;
Н а л и ц о л и ш н я я п р о в е р к а . Н а д о з а п и с ы в а т ь т а к :
function xxx(a,b: integer) : boolean;
begin
result :=a>b;
end;
Использование таблиц решений
С о в е т о д и н н а д ц а т ы й .
Используйте таблицы решений.
Т а б л и ц а р е ш е н и й — э т о т а б л и ц а , к о т о р а я с о д е р ж и т д а н н ы е
( т а б л и ц а д а н н ы х) и л и а д р е с а ф у н к ц и й ( т а б л и ц а ф ункций).
В
с а м о м
п р о с т о м
с л у ч а е
т а б л и ц а
р е ш
е н и й
и м е е т
о д н о
и з м е р е н и е , м о ж е т и м е т ь и б о л ь ш е . В п о с л е д н е м с л у ч а е т а б л и ц а
р е ш е н и й г о р а з д о у м е с т н е е с т р у к т у р ы у п р а в л е н и я .
Таблица данных с одним измерением.
В п е р в о м н а ш е м п р и м е р е р а с с м о т р е н а п р о с т а я о д н о м е р н а я
т а б л и ц а д а н н ы х :
const
tab:array[1.
.3] of integer=(25,30,35)
М ы п р о с т о в ы б и р а е м и з т а б л и ц ы з н а ч е н и е у п о з н а ч е н и ю х ,
в з я т о м у в к а ч е с т в е и н д е к с а в т а б л и ц е :
y:=tab[x];
Е щ е п р и м е р . Н у ж н о в ы ч и с л и т ь с т е п е н и т р о й к и . Р е ш е н и е
« в л о б » :
у : = 1 ;
for i:=l to n do
x:=x*3;
О д н а к о в м е с т о т о г о , ч т о б ы в ы ч и с л я т ь о т в е т п р и п о м о щ и
у м н о ж е н и я т р о й к и
н а с а м у с е б я п р а з ,
м о ж н о
в с е т а к и е
о т в е т ы в ы ч и с л и т ь з а р а н е е и з а п и с а т ь в т а б л и ц у :
const
tab:array[0.
.19] of
integer=(1,3,9,27,81,.
....,1162261467);
{Зв двадцатой степени уже не помещается в 32-битную
переменную}
y:=tab[п];
Т а к о е р е ш е н и е г о р а з д о б ы с т р е е . Е щ е р а з п о в т о р ю с ь , ч т о
ч а с т о т а к и е т а б л и ц ы п р и м е н я ю т с я д л я в ы ч и с л е н и я с и н у с о в и
к о с и н у с о в .
Таблица функций с одним измерением.
П р е д п о л о ж и м , в а ш а п р о г р а м м а д о л ж н а ч т о - т о п р е д п р и н я т ь
п р и
н а ж а т и и
к а к о й - л и б о
к л а в и ш и .
О
б ы ч н о
и с п о л ь з у ю т
с т р у к т у р у у п р а в л е н и я т и п а :
if кеу=вверх then Up else
if кеу=вниз then Down else
Э т о
х о р о ш
о ,
е с л и
у
в а с о б р а б а т ы в а ю т с я
т р и - ч е т ы р е
к л а в и ш и .
Е с л и
и х
б о л ь ш е ,
л у ч ш е
и с п о л ь з о в а т ь т а б л и ц у
ф у н к ц и й :
type
TProc=procedure;
const
tab:array[0.
.255] of
Tproc=(.
..,Up,.
..,Down,
К о н е ч н о ,
п о з и ц и я
п р о ц е д у р
в
т а б л и ц е
д о л ж н а
с о о т в е т с т в о в а т ь
к о д у
к л а в и ш и .
Т о г д а
в с я
п р е д ы д у щ а я
г р о м о з д к а я с т р у к т у р а у п р а в л е н и я п и ш е т с я о д н о й с т р о к о й :
tab[key];
Таблица данных с двумя измерениями.
В о з ь м е м
т а к у ю
з а д а ч у .
У
н а с
е с т ь
д в а
ф л а г а :
f r
п р и н и м а е т з н а ч е н и е и с т и н а , к о г д а п р о и с х о д и т ч т е н и е д а н н ы х
с д и с к а ,
fw
— п р и н и м а е т з н а ч е н и е
истина, к о г д а п р о и с х о д и т
з а п и с ь д а н н ы х н а д и с к . Н е о б х о д и м о в ы в е с т и т е к с т
чтение,
е с л и п р о и с х о д и т ч т е н и е с д и с к а ,
Запись,
к о г д а п р о и с х о д и т
з а п и с ь ,
Чтение/запись,
е с л и ч т е н и е
и
з а п и с ь п р о и с х о д и т
о д н о в р е м е н н о . И н а к о н е ц , н е н у ж н о н и ч е г о в ы в о д и т ь , е с л и
н и ч е г о н е п р о и с х о д и т .
Р е а л и з а ц и я с п о м о щ ь ю с т р у к т у р у п р а в л е н и я :
if fr and fw then Label.Caption: = ’Чтение/запись'
else
if frand (not fw) then Label.Caption: = 'Чтение' else
if not(fr) and fw then Label.Caption: = 'Запись' else
Label.Caption:='';
Э т о р е ш е н и е б л е к н е т п е р е д с л е д у ю щ и м . П р и м е н и м т а б л и ц у
д а н н ы х . П о ч е м у - т о м а л о к т о з н а е т , ч т о в к а ч е с т в е и н д е к с о в
в т а б л и ц е м о г у т в ы с т у п а т ь и л о г и ч е с к и е з н а ч е н и я :
const
tab:array[boolean,boolean] of strings
(('','Запись'),('Чтение','Чтение/запись'));
Label.Caption:=tab£fr,fw
] ;
Итоги
И
с п о л ь з о в а н и е
л о г и к и
и
у с л о в н ы х
о п е р а т о р о в
в
п р о г р а м м и р о в а н и и в е д е т к с л о ж н о м у , т р у д н о у п р а в л я е м о м у
и
н е э ф
ф
е к т и в н о м у
к о д у .
В м е с т о
л ю
б о г о
у с л о в н о г о
о п е р а т о р а м о ж н о и с п о л ь з о в а т ь т а б л и ц у ф у н к ц и й . Т о б и ш ь
в м е с т о
procedure сдепать_это;
begin
end;
procedure сдепать_то;
begin
end;
if условие then сделать_это else сделать то;
и с п о л ь з о в а т ь
type Tproc=procedure;
const
,
tab
:
array[boolean]
o f
Tproc=(сделать_то,сделать_это);
tab[условие];
м ой
к н м п ь ю т о
предыдущая страница 41 Мой Компьютер 2005 07 читать онлайн следующая страница 43 Мой Компьютер 2005 07 читать онлайн Домой Выключить/включить текст