Оператор условного перехода в Турбо Паскаль имеет вид:
if условие then оператор 1 else оператор 2;
условие - это логическое выражение, в зависимости от которого выбирается одна из двух альтернативных ветвей алгоритма.
Если значение условия истинно (TRUE), то будет выполняться оператор 1, записанный после ключевого слова then. В противном случае будет выполнен оператор 2, следующий за словом else, при этом оператор 1 пропускается.
После выполнения указанных операторов программа переходит к выполнению команды, стоящей непосредственно после оператора if.
Необходимо помнить, что перед ключевым словом else точка с запятой никогда не ставится!
else - часть в операторе if может отсутствовать:
if условие then оператор 1;
Тогда в случае невыполнения логического условия управление сразу передается оператору, стоящему в программе после конструкции if.
Следует помнить, что синтаксис языка допускает запись только одного оператора после ключевых слов then и else, поэтому группу инструкций обязательно надо объединять в составной оператор (окаймлять операторными скобками begin... end).
if x > 0 then modul := x else modul := - x;
if k > 0 then WriteLn('k - число положительное');
if min > max then begin
t := min;
min := max;
max := t;
end;
Оператор выбора
Часто возникают ситуации, когда приходится осуществлять выбор одного из нескольких альтернативных путей выполнения программы. Несмотря на то, что такой выбор можно организовать с помощью оператора if.. then, удобнее воспользоваться специальным оператором выбора. Его формат:
case <ключ_выбора> of
<константа_выбора> : <оператор>;
...
<константа_выбора> : <оператор2>;
end;
или
case <ключ_выбора> of
<список_выбора>
else <оператор3>
end;
Вначале вычисляется значение <ключ_выбора>, а затем в последовательности операторов <список_выбора> отыскивается такой, которому предшествует константа, равная вычисленному значению. Найденный оператор выполняется, после чего оператор выбора завершает свою работу. Если в списке выбора не будет найдена константа, соответствующая вычисленному значению ключа выбора, управление передается операторам, стоящим за словом else. Часть else <оператор3> можно опускать. Тогда при отсутствии нужной константы, оператор завершит свою работу.
Пример:
case ch of
'A'..'Z', 'a'..'z' : WriteLn('Буква');
'0'..'9' : WriteLn('Цифра');
'+', '-', '*', '/' : WriteLn('Оператор');
else WriteLn('Специальный символ')
end;
Метки и оператор перехода.
Оператор безусловного перехода
Помимо операторов условного перехода существует также оператор безусловного перехода goto. Формат:
goto <метка>
Оператор goto переходит при выполнении программы к определенному оператору программы, перед которым находится метка. Метка должна быть описана в разделе описания меток той программы (процедуры или функции), в которой она используется.
Необходимо, чтобы в программе существовал оператор, отмеченный указанной меткой. Она записывается перед оператором и отделяется от него двоеточием.
Пример:
label 1;
begin
...
goto 1;
...
1: WriteLn('Переход к метке 1');
end.
При
При использовании меток необходимо руководствоваться следующими правилами:
1. метка, на которую ссылается оператор goto, должна быть описана в разделе описаний и она обязательно должна встретиться где-нибудь в теле программы;
2. метки, описанные в процедуре (функции), локализуются в ней. Поэтому передача управления извне процедуры (функции) на метку внутри нее невозможна.
Учтите! Само понятие структурного программирования и общепринятый стиль программирования на структурных языках НЕ ПРИВЕТСТВУЕТ применение меток и операторов перехода в программах. Это затрудняет понимание программы, как автором, так и потребителями, кроме того, применение меток отрицательно сказывается на эффективности генерируемого кода.
Операторы циклов с предусловием, постусловием и с параметром в Turbo Pascal.
Циклы
В большинстве задач, встречающихся на практике, необходимо производить многократное выполнение некоторого действия. Такой многократно повторяющийся участок вычислительного процесса называется циклом.
Если заранее известно количество необходимых повторений, то цикл называется арифметическим. Если же количество повторений заранее неизвестно, то говорят об итерационном цикле.
В итерационных циклах производится проверка некоторого условия, и в зависимости от результата этой проверки происходит либо выход из цикла, либо повторение выполнения тела цикла. Если проверка условия производится перед выполнением блока операторов, то такой итерационный цикл называется циклом с предусловием (цикл "пока"), а если проверка производится после выполнения тела цикла, то это цикл с постусловием (цикл "до").
Особенность этих циклов заключается в том, что тело цикла с постусловием всегда выполняется хотя бы один раз, а тело цикла с предусловием может ни разу не выполниться. В зависимости от решаемой задачи необходимо использовать тот или иной вид итерационных циклов.
Арифметические циклы (циклы с параметром)
Синтаксис:
for <пар_цикла> := <нач_значение> to <кон_значение> do <оператор>
или
for <пар_цикла> := <нач_значение> downto <кон_значение> do <оператор>
Оператор for вызывает оператор, находящийся после слова do, по одному разу для каждого значения в диапазоне от значения 1 до значения 2.
Переменная цикла, начальное и конечное значения должны иметь порядковый тип. Со словом to, значение переменной цикла увеличивается на 1 при каждой итерации цикла. Со словом downto, значение переменной цикла уменьшается на 1 при каждой итерации цикла. Не следует самостоятельно изменять значение управляющей переменной внутри цикла.
Как и в случае использования оператора условного перехода, следует помнить, что синтаксис языка допускает запись только одного оператора после ключевого слова do, поэтому, если вы хотите в цикле выполнить группу операторов, обязательно надо объединить их в составной оператор (окаймить операторными скобками begin... end).
Пример 2. Латинский алфавит.
for ch:='A' to 'Z' do Writeln(ch);
Пример 3. Использование цикла с downto.
for i:=10 downto 1 do WriteLn(i);
Пример 4. Использование составного оператора.
for x:=1 to 10 do begin
y:=2*x+3;
WriteLn('f(',x,')=',y);
end;
Итерационные циклы с предусловием
Синтаксис:
while <условие> do <оператор>
Оператор после do будет выполняться до тех пор, пока логическое выражение принимает истинное значение (True). Логическое выражение является условием возобновления цикла. Его истинность проверяется каждый раз перед очередным повторением оператора цикла, который будет выполняться лишь до тех пор, пока логическое выражение истинно. Как только логическое выражение принимает значение ложь (False), осуществляется переход к оператору, следующему за while.
Выражение оценивается до выполнения оператора, так что если оно с самого начала было ложным (False), то оператор не будет выполнен ни разу.
Пример.
eps:=0.001;
while x > eps do x:=x/2;
Итерационные циклы с постусловием
Синтаксис:
repeat
<оператор>;
<оператор>;
...
<оператор>
until <условие>
Операторы между словами repeat и until повторяются, пока логическое выражение является ложным (False). Как только логическое выражение становится истинным (True), происходит выход из цикла.
Так как выражение оценивается после выполнения операторов, то в любом случае операторы выполнятся хотя бы один раз.
Пример.
repeat
WriteLn('Введите положительное число');
ReadLn(x);
until x>0;
Операторы завершения цикла
Для всех операторов цикла выход из цикла осуществляется как вследствие естественного окончания оператора цикла, так и с помощью операторов перехода и выхода.
В версии Турбо Паскаль 7.0 определены стандартные процедуры:
Break
Continue
Процедура Break выполняет безусловный выход из цикла. Процедура Continue обеспечивает переход к началу новой итерации цикла.
Заметим, что хотя и существует возможность выхода из цикла с помощью оператора безусловного перехода goto, делать этого не желательно. Во всех случаях можно воспользоваться специально предназначенными для этого процедурами Break и Continue.
Процедуры и функции в Turbo Pascal. Локализация переменных. Формальные и фактические параметры в Turbo Pascal.
Процедуры и функции
В языке Паскаль предусмотрены средства, позволяющие оформлять вспомогательный алгоритм как подпрограмму. Это бывает необходимо тогда, когда какой-либо подалгоритм неоднократно повторяется в программе или имеется возможность использовать некоторые фрагменты уже разработанных ранее алгоритмов. Кроме того, подпрограммы применяются для разбиения крупных программ на отдельные смысловые части в соответствии с модульным принципом в программировании.
Для использования подалгоритма в качестве подпрограммы ему необходимо присвоить имя и описать алгоритм по правилам языка Паскаль. В дальнейшем, при необходимости вызвать его в программе, делают вызов подпрограммы упоминанием в нужном месте имени и списка входных и выходных данных. Такое упоминание приводит к выполнению входящих в подпрограмму операторов, работающих с указанными данными. После выполнения подпрограммы работа продолжается с той команды, которая непосредственно следует за вызовом подпрограммы.
В языке Паскаль имеется два вида подпрограмм - процедуры и функции.
Процедуры и функции помещаются в раздел описаний программы. Для обмена информацией между процедурами и функциями и другими блоками программы существует механизм входных и выходных параметров. Входными параметрами называют величины, передающиеся из вызывающего блока в подпрограмму (исходные данные для подпрограммы), а выходными - передающиеся из подпрограммы в вызывающий блок (результаты работы подпрограммы).
Одна и та же подпрограмма может вызываться неоднократно, выполняя одни и те же действия с разными наборами входных данных. Параметры, использующиеся при записи текста подпрограммы в разделе описаний, называют формальными, а те, что используются при ее вызове - фактическими.
Описание и вызов процедур и функций
Структура описания процедур и функций до некоторой степени похожа на структуру программы: у них также имеются заголовок, раздел описаний и исполняемая часть. Раздел описаний содержит те же подразделы, что и раздел описаний программы: описания констант, типов, меток, процедур, функций, переменных. Исполняемая часть содержит собственно операторы процедур.
Формат описания процедуры имеет вид:
procedure имя процедуры (формальные параметры);
раздел описаний процедуры
begin
исполняемая часть процедуры
end;
Формат описания функции:
function имя функции (формальные параметры):тип результата;
раздел описаний функции
begin
исполняемая часть функции
end;
Формальные параметры в заголовке процедур и функций записываются в виде:
var имя праметра: имя типа
и отделяются друг от друга точкой с запятой. Ключевое слово var может отсутствовать (об этом далее). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type. Список формальных параметров может отсутствовать.
Вызов процедуры производится оператором, имеющим следующий формат:
имя процедуры(список фактических параметров);
Список фактических параметров - это их перечисление через запятую. При вызове фактические параметры как бы подставляются вместо формальных, стоящих на тех же местах в заголовке. Таким образом происходит передача входных параметров, затем выполняются операторы исполняемой части процедуры, после чего происходит возврат в вызывающий блок. Передача выходных параметров происходит непосредственно во время работы исполняемой части.
Вызов функции в Турбо Паскаль может производиться аналогичным способом, кроме того, имеется возможность осуществить вызов внутри какого-либо выражения. В частности имя функции может стоять в правой части оператора присваивания, в разделе условий оператора if и т. д.
Для передачи в вызывающий блок выходного значения функции в исполняемой части функции перед возвратом в вызывающий блок, необходимо поместить следующую команду:
имя функции := результат;
При вызове процедур и функций необходимо соблюдать следующие правила:
1. количество фактических параметров должно совпадать с количеством формальных;
2. соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.
Заметим, что имена формальных и фактических параметров могут совпадать. Это не приводит к проблемам, так как соответствующие им переменные все равно будут различны из-за того, что хранятся в разных областях памяти.
Кроме того, все формальные параметры являются временными переменными - они создаются в момент вызова подпрограммы и уничтожаются в момент выхода из нее.
Локальные и глобальные переменные в Turbo Pascal.
Вложенные процедуры. Если блок какой-либо процедуры Р1 содержит внутри процедуру Р2, то говорят, что Р2 вложена в Р1.
Пример:
PROCEDURE P1(X: REAL; VAR Y: REAL);
VAR C: INTEGER;
PROCEDURE P2(VAR Z: REAL);
......................
END;
BEGIN
................
END;
Любые идентификаторы, введённые внутри какого-либо блока (процедуры, функции) для описания переменных, констант, типов, процедур, называются локальными для данного блока. Такой блок вместе с вложенными в него подпрограммами называется областью действия этих локальных переменных, констант, типов и процедур.
Пример:
PROCEDURE T1;
VAR Y1,Y2:REAL;
PROCEDURE SQ1;
VAR A, B,C, D:REAL;
BEGIN
(*Переменные A, B,C, D являются локальными для SQ1,
область их действия - процедура SQ1*)
.................
END;
BEGIN
(*Переменные Y1,Y2 - нелокальные переменные для SQ1 -
область их действия процедуры T1 и SQ1*)
.................
END;
Константы, переменные, типы, описанные в блоке PROGRAM, называют глобальными. Использование локальных переменных позволяет системе лучше оптимизировать программы, делает их более наглядными и уменьшает вероятность появления ошибок.
При написании программ, имеющих вложенные подпрограммы, необходимо придерживаться следующих правил:
Описывать идентификаторы в том блоке, где они используются, если это возможно. Если один и тот же объект (переменная, тип, константа) используется в двух и более блоках, то описать этот объект надо в самом внешнем из них, содержащем все остальные блоки, использующие данный объект. Если переменная, используемая в процедуре, должна сохранить свое значение до следующего вызова этой процедуры, то такую переменную надо описать во внешнем блоке, содержащем данную процедуру.Локализация переменных дает программисту большую свободу в выборе идентификаторов. Так, если две процедуры А и В полностью отделены друг от друга (то есть не вложены одна в другую), то идентификаторы в них могут быть выбраны совершенно произвольно, в частности, могут повторяться. В этом случае совпадающим идентификаторам соответствуют разные области памяти, совершенно друг с другом не связанные.
Пример:
PROGRAM T2; VAR K: INTEGER;
PROCEDURE A;
VAR X, Z: REAL;
BEGIN (*Начало А*)
(* Через X, Z обозначены две величины - локальные переменные для А;
К - глобальная переменная для А*)
:::::::..
END;(*Конец А*)
PROCEDURE В;
VAR X, Z: REAL;
BEGIN (*Начало В*)
(* Через X, Z обозначены две другие величины - локальные переменные для В;
К - глобальная переменная для В*)
.................
END;(*Конец В*)
BEGIN(*Начало работы PROGRAM T2*)
(*К - единственная переменная, которую можно использовать в Т2*)
..............
END.
Если один и тот же идентификатор описан в блоке В и второй раз описан во вложенном блоке С, то надо помнить, что эти два одинаковых идентификатора соответствуют разным ячейкам памяти.
Пример:
PROGRAM T3;
VAR I: INTEGER; A: REAL;
Procedure P(VAR D: REAL);
VAR I: INTEGER;
BEGIN (*Начало Р*)
I:=3;
D:=I+10*D;
END;(*Конец Р*)
BEGIN
A:=2.0; I:=15; P(A); WRITELN(' I=',I,' A=',A)
END.
Глобальным переменным I и A отводятся две ячейки памяти. Первыми выполняются операторы А:=2.0 и I:=15. Затем вызывается процедура Р(А).
В процессе работы Р отводится ячейка для локальной переменной I и туда засылается число 3. После окончания работы процедуры Р эта ячейка I программой "забывается". После возврата на оператор WRITELN программа знает только одну ячейку I - глобальную, то есть ту, которая содержит число 15. Поэтому программа T3 выдаст на печать I=15, A=23.0, так как А=3+10*2.
Если локальная и глобальная переменные принадлежит к одному и тому же сложному типу, то этот тип надо описать в разделе TYPE, а сами переменные описывать через этот общий тип.
Пример:
PROGRAM T1;
TYPE AB=ARRAY[1..3] OF REAL;
VAR A: AB;
PROCEDURE Q;
VAR B: AB;.......
END.
В этом примере переменные А и В описаны через общий тип АВ. Если же локальная и глобальная переменные описаны одинаково, но не через общий тип, то транслятор может "не понять", что эти переменные принадлежат одному типу.
Замечание редактора. Две переменные принадлежат одному типу только в том случае, если они описаны с помощью одного идентификатора типа или, если они описаны в одной строке:
var a, b: array[1..3] of real;
В противном случае переменные принадлежат разным типам. Указанное правило относится к любым переменным, а не только в сравнении глобальных и локальных переменных.
Пример:
var a: 1..3;
b: 1..3;
В этом случае переменные a и b относятся к разным типам.
Пример:
PROGRAM T2;
VAR A: ARRAY [1..3] OF REAL;
PROCEDURE Q;
VAR B: ARRAY [1..3] OF REAL;
....................................
END.
В этом примере переменные А и В - одинаковые массивы, то есть типы переменных одинаковы, но транслятор, тем не менее, не считает, что А и В - принадлежат одному типу.
Переход в графический режим в Turbo Pascal. Масштабирование экрана. Процедуры и функции для работы с экраном в графическом режиме.
Модуль Graph представляет собой мощную библиотеку графических подпрограмм универсального назначения, рассчитанную на работу с наиболее распространенными графическими адаптерами IBM-совместимых ПК. Подпрограммы модуля Graph обеспечивают различные режимы работы многорежимных адаптеров, полностью используют их цветовые возможности и разрешающую способность.
При исполнении графических программ требуется автономный драйвер графического адаптера (BGI-файл). Если программа использует штриховые шрифты, то кроме того нужен один или несколько шрифтовых файлов (CHR-файлы). При необходимости драйвер и шрифты могут быть включены в тело программы еще на этапе компиляции.
Графические драйверы поддерживают следующие графические адаптеры (и полностью совместимые с ними):
CGA | Hercules |
MCGA | AT&T 400 |
EGA | 3270 PC |
VGA | IBM-8514 |
Для поддержки этих аппаратных средств используются следующие драйверы:
CGA. BGI | Драйвер для CGA, MCGA |
EGAVGA. BGI | Драйвер для EGA, VGA |
HERC. BGI | Драйвер для монохромного Hercules |
ATT. BGI | Драйвер для AT&T 6строк) |
PC3270.BGI | Драйвер для IBM 3270 PC |
IBM8514.BGI | Драйвер для IBM 8514 |
Во время выполнения программы процедура InitGraph автоматически распознает графический адаптер, установленный на ПК, загружает и инициализирует соответствующий графический драйвер, переводит адаптер в графический режим и возвращает управление вызывающей программе. Процедура CloseGraph выгружает драйвер из памяти и восстанавливает текстовый режим работы адаптера.
Подпрограммы модуля Graph позволяют адресоваться к любому элементу (пикселю) растрового графического экрана и управлять светимостью этого элемента. Для указания пикселя используется следующая система координат: верхний левый угол графического экрана имеет координаты 0,0; горизонтальная координата X увеличивается слева направо, вертикальная координата У увеличивается сверху вниз.
Некоторые графические подпрограммы используют понятие текущего указателя. Указатель содержит координаты того пикселя, начиная с которого будет строиться изображение подпрограммами LineTo, LineRel, OutText и др.
В модуле Graph имеется несколько процедур для рисования элементарных графических фигур - точек, линий, окружностей, дуг и т. п. При необходимости замкнутые фигуры могут быть закрашены различными цветами и стилями (образцами закраски).
Процедура SetViewPort создает на экране графическое окно. Если окно определено, весь дальнейший графический вывод осуществляется относительно координат этого окна и отсекается его границами.
В модуле имеются средства сохранения и выдачи изображений, работы с несколькими графическими страницами, установки необходимых цветов.
Значения ошибок, возвращаемые GraphResult
const
grOk = 0;{Нет ошибок}
grNoInitGraph = -1;{Графика не инициализирована}
grNotDetected = -2;{Графическое устройство не обнаружено}
grFileNotFound = -3;{Файл драйвера устройства не найден}
grInvalidDriver= -4;{Неправильный файл драйвера устройства}
grInvalidMode =-10;{Недопустимый графический режим}
grError =-11;{Общая ошибка}
grIOerror =-12;{Ошибка графического ввода/вывода}
Константы цвета
const | |
Black | = 0;{Черный} |
Blue | = 1;{Синий} |
Green | = 2;{Зеленый} |
Cyan | = 3;{Голубой} |
Red | = 4;{Красный} |
Magenta | = 5;{Фиолетовый} |
Brown | = 6;{Коричневый} |
Константы типов и толщины линий
const
SolidLn=0;{Сплошная}
DottedLn=1;{Точечная}
NormWidth=1;{Нормальная толщина}
ThickWidth= 3;{Тройная толщина}
Константы управления шрифтом
const
DefaultFont = 0;{Матричный шрифт 8x8}
TriplexFont = 1;{Шрифт триплекс; файл TRIP. CHR}
SmallFont = 2;{Мелкий шрифт; файл LITT. CHR}
SansSerifFont= 3;{Прямой шрифт; файл SANS. CHR}
RightText = 2;{Указатель справа от текста}
BottomText = 0;{Указатель снизу от текста}
CenterText = 1;{Указатель по центру текста}
TopText = 2;{Указатель сверху от текста}
Константы отсечения
const
ClipOn = True;{Отсекать изображение}
ClipOf£= False;{Игнорировать окно (не отсекать изображение)}
Процедуры
Procedure Arc(X, Y: Integer; StAngle, EndAngle, Radius: Word) Рисует дугу радиусом Radius от начального угла StAngle к конечному EndAngle, используя X, Y как координаты центра.
Procedure Bar (X1, Y1, X2, Y2 : Integer) Рисует полосу заданного размера, используя текущий стиль и цвет.
Procedure Bar3D(X1, Y1, X2, Y2: Integer; Depth: Word; Top: Boolean) Рисует трехмерную полосу, используя текущий стиль и цвет.
Procedure Circle (X, Y: Integer; R: word) Рисует окружность радиуса R, используя X, Y как координаты центра.
Procedure ClearDevice Очищает экран.
Procedure ClearViewPort Очищает окно.
Procedure CloseGraph Закрывает графический режим.
Procedure DetectGraph (var Driver, Mode: Integer) Возвращает тип Driver установленного драйвера и текущий режим Mode его работы.
Procedure DrawPoly (NumPoints: Word; var PolyPoints) Рисует многоугольник из NumPoints вершин с координатами в PolyPoints текущим цветом и типом линии.
Procedure Ellipse (X, Y; Integer; StAngle, EndAngle, XR, YR: Word) Рисует эллиптическую дугу от начального угла StAngle к конечному углу EndAngle, используя X, Y как координаты центра и XR. YR - как горизонтальный и вертикальный радиусы.
Procedure FillEllipse(X, Y; Integer; XR, YR: Word) Рисует заштрихованный эллипс, используя X, Y как центр uXR, YR как горизонтальный и вертикальный радиусы.
Procedure FloodFill (X, Y; Integer; Border; Word) Штрихует замкнутую область, содержащую внутреннюю точку с координатами X, Y и ограниченную линией с цветом Border. Используется текущий образец штриховки и цвет.
Procedure GetDefaultPalette(var Palette; PaletteType) Возвращает текущую палитру в записи PaletteType.
Procedure GetLineSettings (var LineInfo; LineSettingsType) Возвращает текущий стиль, шаблон и толщину линии.
Procedure GetViewSettings (var viewport: NiewPortType) Возвращает координаты и признак отсечки текущего окна.
Procedure GraphDefaults Устанавливает стандартные параметры графического режима.
Procedure InitGraph(var Driver, Mode; Integer; Path: String) Инициализирует графический режим. Переменные Driver и Mode должны содержать тип графического драйвера и его режим работы. Допускается указать Driver = 0 для автоматического определения этих параметров по результатам тестирования аппаратуры. Параметр Path определяет маршрут поиска файла графического драйвера.
Procedure Line (X1, Y1, Х2, Y2: Integer) Рисует линию от точки X1, Y1 до точки Х2, Y2.
Procedure LineRel(DX, DY: Integer) Рисует линию от текущего указателя к точке, заданной приращением координат.
Procedure LineTo(X, Y: Integer) Рисует линию от текущего указателя к точке X, Y.
Procedure MoveTo(X, Y: Integer) Смещает текущий указатель к точкеX, Y.
Procedure OutText (TextString: String) Выводит текстовую строку на экран.
Procedure OutTextXY(X, Y: Integer; TextString: String) Выводит текст в заданное место экрана.
Procedure PieSlice(X, Y: Integer; StAngle, EndAngle, Radius: Word) Рисует и штрихует сектор окружности радиусом Radius с центром в X. Y от начального угла StAngle к конечному углу EndAngle.
Procedure Rectangle (XI, Yl, X2, Y2: Integer) Рисует прямоугольник, используя текущий цвет и тип линии.
Procedure SetBkColor (Color: Word) Устанавливает цвет фона.
Procedure SetColor (Color: Word) Устанавливает основной цвет, которым будет осуществляться рисование.
Procedure SetFillPattern (Pattern: FillPatternType; Color: Word) Устанавливает произвольный образец штриховки.
Procedure SetFillStyle (Pattern, Color: Word) Устанавливает образец штриховки и цвет.
Procedure SetGraphBuf Size (Size: Word) Позволяет изменить размер буфера для функций штриховки.
Procedure SetGraphMode(Mode: Integer) Устанавливает новый графический режим и очищает экран.
Procedure SetLineStyle(LineStyle, Pattern, Thickness: Word) Устанавливает толщину и стиль линии.
Procedure SetPalette(ColorNum, Color: Word) Заменяет цвет палитры с номером ColorNum на цвет Color.
Функции
Procedure GetBkColor; Word Возвращает текущий фоновый цвет.
Procedure GetColor; Word Возвращает текущий цвет.
Procedure GetDriverName; String Возвращает строку с именем текущего драйвера.
Procedure GetGraphMode: Integer Возвращает текущий графический режим.
Procedure GetMaxColor; Word Возвращает максимальный цвет, который можно задать в SetColor.
Procedure GetMaxMode: Integer Возвращает номер максимального режима текущего загруженного драйвера.
Procedure GetMaxX: Integer Возвращает максимальную горизонтальную координату графического экрана.
Procedure GetMaxY; Integer Возвращает максимальную вертикальную координату графического экрана.
Procedure GetModeName(ModeNum; Word) ; String Возвращает строку с именем указанного графического режима.
Procedure GetPaletteSize: Integer Возвращает размер таблицы палитры.
Procedure GetPixel (X, Y; Integer) : Word Возвращает цвет пикселя с координатами X, Y.
Procedure GetX: Integer Возвращает координату X текущего указателя.
Procedure GraphResult: Integer Возвращает код ошибки для последней графической операции.
Понятие алгоритма и его свойства. Линейные, разветвляющиеся, циклические алгоритмы.
Алгоритм – описание последовательности действий (план), строгое исполнение которых приводит к решению поставленной задачи за конечное число шагов.
Свойства алгоритмов:
1. Дискретность (алгоритм должен состоять из конкретных действий, следующих в определенном порядке);
2. Детерминированность (любое действие должно быть строго и недвусмысленно определено в каждом случае);
3. Конечность (каждое действие и алгоритм в целом должны иметь возможность завершения);
4. Массовость (один и тот же алгоритм можно использовать с разными исходными данными);
5. Результативность (отсутствие ошибок, алгоритм должен приводить к правильному результату для всех допустимых входных значениях).
Виды алгоритмов:
1. Линейный алгоритм (описание действий, которые выполняются однократно в заданном порядке);
2. Циклический алгоритм (описание действий, которые должны повторятся указанное число раз или пока не выполнено задание);
3. Разветвляющий алгоритм (алгоритм, в котором в зависимости от условия выполняется либо одна, либо другая последовательность действий);
4. Вспомогательный алгоритм (алгоритм, который можно использовать в других алгоритмах, указав только его имя).
Алгоритм, записанный на «понятном» компьютеру языке программирования, называется программой.
Программирование - процесс составления программы для компьютера. Для первых ЭВМ программы записывались в виде последовательности элементарных операций. Это была очень трудоемкая и неэффективная работа. Поэтому в последствии были разработанные специальные языки программирования. В настоящее время существует множество искусственных языков для составления программ. Однако, так и не удалось создать идеальный язык, который бы устроил бы всех.
Алгоритмы поиска элементов из массивов данных.
Двоичный (бинарный) поиск элемента в массиве
Если у нас есть массив, содержащий упорядоченную последовательность данных, то очень эффективен двоичный поиск.
Переменные Lb и Ub содержат, соответственно, левую и правую границы отрезка массива, где находится нужный нам элемент. Мы начинаем всегда с исследования среднего элемента отрезка. Если искомое значение меньше среднего элемента, мы переходим к поиску в верхней половине отрезка, где все элементы меньше только что проверенного. Другими словами, значением Ub становится (M – 1) и на следующей итерации мы работаем с половиной массива. Таким образом, в результате каждой проверки мы вдвое сужаем область поиска. Так, в нашем примере, после первой итерации область поиска – всего лишь три элемента, после второй остается всего лишь один элемент. Таким образом, если длина массива равна 6, нам достаточно трех итераций, чтобы найти нужное число.
Двоичный поиск - очень мощный метод. Если, например, длина массива равна 1023, после первого сравнения область сужается до 511 элементов, а после второй - до 255. Легко посчитать, что для поиска в массиве из 1023 элементов достаточно 10 сравнений.
Интерполяционный поиск элемента в массиве
Представьте себе, что Вы ищете слово в словаре. Если нужное слово начинается с буквы 'А', вы наверное начнете поиск где-то в начале словаря. Когда найдена отправная точка для поиска, ваши дальнейшие действия мало похожи на рассмотренные выше методы.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |



