Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПОНЯТИЕ АЛГОРИТМА И ЕГО СВОЙСТВА.docx
Скачиваний:
4
Добавлен:
10.07.2019
Размер:
182.74 Кб
Скачать

ПОНЯТИЕ АЛГОРИТМА И ЕГО СВОЙСТВА

Алгоритм – заранее заданное понятное и точное предписание возможному исполнителю совершить определенную последовательность действий для получения решения задачи за конечное число шагов.

Понятие алгоритма, являющееся фундаментальным в математике и информатике, возникло задолго до появления средств вычислительной техники. Слово «алгоритм» появилось в средние века, когда европейцы познакомились со способами выполнения арифметических действий в десятичной системе счисления; описанными узбекским математиком Муххамедом бен Аль-Хорезми. Слово алгоритм – есть результат европейского произношения слов Аль-Хорезми. Первоначально под алгоритмом понимали способ выполнения арифметических действий над десятичными числами. В дальнейшем это понятие стали использовать для обозначения любой последовательности действий, приводящей к решению поставленной задачи.

Любой алгоритм существует не сам по себе, а предназначен для определенного исполнителя (человека, робота, компьютера, языка программирования и т.д.). Свойством, характеризующим любого исполнителя, является то, что он умеет выполнять некоторые команды. Совокупность команд, которые данный исполнитель умеет выполнять, называется системой команд исполнителя. Алгоритм описывается в командах исполнителя, который будет его реализовывать. Объекты, над которыми исполнитель может совершать действия, образуют так называемую среду исполнителя. Исходные данные и результаты любого алгоритма всегда принадлежат среде того исполнителя, для которого предназначен алгоритм.

СВОЙСТВА АЛГОРИТМОВ

1. Понятность для исполнителя — исполнитель алгоритма должен понимать, как его выполнять. Иными словами, имея алгоритм и произвольный вариант исходных данных, исполнитель должен знать, как надо действовать для выполнения этого алгоритма.

2. Дискpетность (прерывность, раздельность) — алгоpитм должен пpедставлять пpоцесс pешения задачи как последовательное выполнение пpостых (или pанее опpеделенных) шагов (этапов).

3. Опpеделенность — каждое пpавило алгоpитма должно быть четким, однозначным и не оставлять места для пpоизвола. Благодаpя этому свойству выполнение алгоpитма носит механический хаpактеp и не тpебует никаких дополнительных указаний или сведений о pешаемой задаче.

4. Pезультативность (или конечность) состоит в том, что за конечное число шагов алгоpитм либо должен пpиводить к pешению задачи, либо после конечного числа шагов останавливаться из-за невозможности получить решение с выдачей соответствующего сообщения, либо неограниченно продолжаться в течение времени, отведенного для исполнения алгоритма, с выдачей промежуточных результатов.

5. Массовость означает, что алгоpитм pешения задачи pазpабатывается в общем виде, т.е. он должен быть пpименим для некотоpого класса задач, pазличающихся лишь исходными данными. Пpи этом исходные данные могут выбиpаться из некотоpой области, котоpая называется областью пpименимости алгоpитма.

На практике наиболее распространены следующие формы представления алгоритмов:

         словесная (запись на естественном языке);

         графическая (изображения из графических символов);

         псевдокоды (полуформализованные описания алгоритмов на условном алгоритмическом языке, включающие в себя как элементы языка программирования, так и фразы естественного языка, общепринятые математические обозначения и др.);

         программная (тексты на языках программирования).

Графический способ представления алгоритмов является более компактным и наглядным по сравнению со словесным.

ГРАФИЧЕСКОЕ ПРЕДСТАВЛЕНИЕ АЛГОРИТМА

Блок-схема – описание структуры алгоритма с помощью геометрических фигур с линиями-связями, показывающими порядок выполнения отдельных инструкций. Этот способ имеет ряд преимуществ. Благодаря наглядности, он обеспечивает «читаемость» алгоритма и явно отображает порядок выполнения отдельных команд. В блок-схеме каждой формальной конструкции соответствует определенная геометрическая фигура пли связанная линиями совокупность фигур.

Рассмотрим некоторые основные конструкции, использующиеся для построения блок-схем алгоритмов программ:

Блок, характеризующий начало/конец алгоритма (для подпрограмм — вызов/возврат)

Блок — процесс, предназначенный для описания отдельных действий

Блок — Предопределенный процесс, предназначенный для обращения к вспомогательным алгоритмам (подпрограммам)

Блок — ввода/вывода с неопределенного носителя или описания исходных данных

 Блок — решение (проверка условия или условный блок)

Блок — границы цикла, описывающий циклические процессы типа: «цикл с предусловием», «цикл с постусловием»

Соединительные блоки

Описания алгоритма в словесной форме, на псевдокоде или в виде блок-схемы допускают некоторый произвол при изображении команд. Вместе с тем она настолько достаточна, что позволяет человеку понять суть дела и исполнить алгоритм. На практике исполнителями алгоритмов выступают компьютеры. Поэтому алгоритм, предназначенный для исполнения на компьютере, должен быть записан на «понятном» ему языке, такой формализованный язык называют языком программирования.

Программа – описание структуры алгоритма на языке алгоритмического программирования.

ФУНКЦИОНАЛЬНЫЕ БЛОКИ

Данный блок имеет один вход и один выход. Из простых команд и проверки условий образуются составные команды, имеющие более сложную структуру и тоже один вход и один выход.       Структурный подход к разработке алгоритмов определяет использование только базовых алгоритмических структур (конструкций): следование, ветвление, повторение, которые должны быть оформлены стандартным образом.

Рассмотрим основные структуры алгоритма.      Команда следования состоит только из простых команд. На рисунке простые команды имеют условное обозначение S1 и S2. Из команд следования образуются линейные алгоритмы. Примером линейного алгоритма будет нахождение суммы двух чисел, введенных с клавиатуры.

Команда ветвления - это составная команда алгоритма, в которой в зависимости от условия Р выполняется или одно S1, или другое S2 действие. Из команд следования и команд ветвления составляются разветвляющиеся алгоритмы (алгоритмы ветвления). Примером разветвляющегося алгоритма будет нахождение большего из двух чисел, введенных с клавиатуры.

Команда ветвления может быть полной и неполной формы. Неполная форма команды ветвления используется тогда, когда необходимо выполнять действие S только в случае соблюдения условия P. Если условие P не соблюдается, то команда ветвления завершает свою работу без выполнения действия. Примером команды ветвления неполной формы будет уменьшение в два раза только четного числа.

Команда повторения (цикл) - это составная команда алгоритма, в которой в зависимости от условия Р возможно многократное выполнение действия S. Из команд следования и команд повторения составляются циклические алгоритмы На рисунке представлена команда повторения с предусловием. Называется она так потому, что вначале проверяется условие, а уже затем выполняется действие. Причем действие выполняется, пока условие соблюдается.

В цикле с постусловием вначале выполняется действие S и лишь затем, проверяется условие P. Причем действие повторяется до тех пор, пока условие не соблюдается. Примером команды повторения с постусловием будет уменьшение положительного числа до тех пор, пока оно неотрицательное. Как только число становится отрицательным, команда повторения заканчивает свою работу.      С помощью соединения только этих элементарных конструкций (последовательно или вложением) можно "собрать" алгоритм любой степени сложности.

ПРИМЕРЫ АЛГОРИТМИЧЕСКИХ КОНСТРУКЦИЙ

Линейный алгоритм

Приведем пример записи алгоритма в виде блок-схемы, псевдокодов и на языке Паскаль. Ручное тестирование и подбор системы тестов выполняются аналогично предыдущему заданию.

Разветвляющийся алгоритм

Приведем пример записи разветвляющегося алгоритма для нахождения наибольшего из двух чисел.

Циклический алгоритм

Рассмотрим алгоритм нахождения суммы первых натуральных нечетных чисел до n. Представим запись алгоритма тремя способами: в виде блок-схемы, школьного алгоритмического языка и на языке программирования Pascal.

ТИПЫ ДАННЫХ. ОБЪЯВЛЕНИЕ ПЕРЕМЕННОЙ.

 

Данные - общее понятие всего того, с чем работает компьютер. Программа, написанная на языке Паскаль, обрабатывает данные, то есть является описанием последовательности действий, которые надо осуществить с некоторой последовательностью данных.

Программа может оперировать сданными различных типов: целыми и вещественными числами, символами, строками символов и логическими величинами.

Типы данных

 

Тип

Значение

Объем памяти

Целые типы

Byte

0 … 255

1 байт, без знака

ShortInt

128 … 127

1 байт, со знаком

Word

0 … 65535

2 байта, без знака

Integer

32768 … 32767

2 байта, со знаком

LongInt

2147483648 … 2147483647

4 байта, со знаком

Вещественные типы:

Single

Действительные короткие 1,5*10-45...3,4*1038

4 байта

Real

Действительные (основной тип) 2,9*10-39...1,7*1038

6 байтов

Double

Действительные длинные 5,0*10-324…1,7*10308

8 байтов

Extended

Действительные очень длинные 3,4*10-4932…1,1*104932

12 байтов

Символьные типы

Char

1 символ

1 байт

String

Строка символов

от 1 до 255 байтов

Логический тип

Boolean

Значение True  или  False

1 байт

 

Объявление переменной

Переменная - это область памяти компьютера, в которой находятся данные: исходные, промежуточные и результат.

 

Var имя переменной : тип переменной;

Можно описывать несколько переменных одного типа в одной строке.

Например:

Var

I, j, k : integer;

X, y, z : real;

n, l, m : byte;

t : String;

ИНСТРУКЦИЯ ПРИСВАИВАНИЯ. ФУНКЦИИ.

Инструкция присваивания позволяет изменить значение переменной, в том числе вычислить значение переменной по формуле. В результате выполнения инструкции присваивания значение переменной меняется, ей присваивается новое значение. В общем виде инструкция присваивания выглядит так:

Имя := Выражение;

где: имя — имя переменной, значение которой надо изменить;двоеточие и следующий за ним знак "равно" — символ «присвоить»выражение — выражение, значение которого присваивается переменной, имя  которой указано слева от символа операции "присвоить".Примеры:sum := cena * kol; rub := usd * k; skidka :=sum * 0.05; percent := 15; rez := rez +1;

Выражение

Выражение состоит из операндов и операторов. Операторы означают действия, операнды — объекты, над которыми эти действия выполняются. В качестве операндов выражения может выступать константа, переменная, функция или другое выражение.

Примеры выражений: sum + profit

sum * 0.75

к – 1

Таблица Операторы

Оператор

Действие

+

Сложение

-

Вычитание

*

Умножение

/

Деление

div

Деление нацело

mod

Вычисление остатка от деления

Результат выполнения операторов +, -, * и / очевиден. Значением выражения a div b является целая часть результата деления а на b, а выражения a mod b — остаток от деления, представленный как целое. Например, значение выражения 125 div 100 равно 1, а выражения 125 mod 100 равно 25. Следует обратить внимание, что операнды операторов div и mod должны быть целого типа. Операторы имеют разный приоритет. Так операторы *,./, div, mod имеют более высокий приоритет, чем операторы + и -. Другими словами, сначала выполняется умножение и деление, затем — сложение и вычитание.

Выражение, заключенное в скобки, трактуется как один операнд. Это значит, что операции, стоящие в скобках, будут выполняться в обычном порядке, но раньше, чем операции, находящиеся за скобками.

Функции

Функция — это подпрограмма, которая выполняет некоторую работу (вычисление). Например, функция sqrt вычисляет квадратный корень, а функция sin — синус.Для того чтобы воспользоваться функцией, ее имя надо указать в качестве операнда выражения инструкции присваивания. Например, в результате выполнения инструкции k : = sqrt (n) в переменную будет записано значение квадратного корня числа, которое находится в переменной n. В таблице приведены некоторые полезные функции.

 

Функция

Значение функции

Abs(n)

Абсолютное значение n

Sqrt(n)

Квадратный корень из n

Sqr(n)

Квадрат n

Sin(n)

Синус n

Cos(n)

Косинус n

Ехр(n)

Экспонента n

Ln(n)

Натуральный логарифм n

Rardom(n)

Случайное целое число от 0 до n-1

АЛГОРИТМИЧЕСКИЕ СТРУКТУРЫ. ВЫБОР.

Выбор одного из двух или нескольких возможных вариантов можно реализовать при помощи инструкций IFили CASE.

Инструкция IF Вариант 1

if Условие

then begin

{ Эти инструкции выполняются, }

{ если Условие истинно }

end

else begin

{ Эти инструкции выполняются, }

{ если Условие ложно }

end;

Вариант 2

if Условие then begin{ Эти инструкции выполняются, }

{ если Условие истинно }

end;

Инструкция CASE

case Выражение of

Список_констант1: begin

{ последовательность инструкций 1 } end;

Список_констант2: begin

{ последовательность инструкций 2 } end;

Список_константN: begin

{ последовательность инструкций N } end

else begin

{ последовательность инструкций, выполняемая в случае, если значение Селектора не попало ни в один из списков} end;

end;

Селектор - выражение целого типа, значение которого определяет последовательность инструкций, которая будет выполнена, если значение Селектор будет равно константе, указанной в списке.

ЦИКЛИЧЕСКИЕ СТРУКТУРЫ

Инструкция FOR

Вариант 1 (с увеличением счетчика циклов)

for Счетчик := НачальноеЗначение to КонечноеЗначение do

begin

{ Инструкции }

end;

Инструкции между begin и end выполняются

[(КонечноеЗначение - НачальноеЗначение)+ 1] раз.

Если НачальноеЗначение больше, чем КонечноеЗначение, то инструкции между begin и end не выполняются.

Вариант 2 (с уменьшением счетчика циклов)

for Счетчик := НачальноеЗначение downto КонечноеЗначение do

begin

{ Инструкции }

end;

Инструкции между begin и end выполняются [(НачальноеЗначение — КонечноеЗначение) + 1] раз.

Если НачальноеЗначение меньше, чем КонечноеЗначение, то инструкции между begin и end не выполняются.

Примеры использования цикла FOR.

Инструкция REPEAT

repeat

begin

{ Инструкции }

end

until Условие;

Сначала выполняются инструкции, которые находятся между begin и end, затем проверяется значение выражения Условие. Если условие не выполняется, то снова выполняются инструкции цикла. И так до тех пор, пока условие не станет истинным.

Инструкция WHILE

while Условие do

begin

{ Инструкции }

end;

Сначала проверяется значение выражения Условие. Если оно истинно, то выполняются инструкции, находящиеся между begin и end. И так до тех пор, пока условие не станет ложным.

Примеры использования циклов.

РАБОТА СО СТРОКАМИ.

Строка — это последовательность символов. Для хранения строк используются переменные типа string.

Объявление строковой переменной в общем виде выглядит так:

Имя: string;   или

Имя: string[длина];

Имя — имя переменной; string — ключевое слово обозначения строкового типа; длина — константа целого типа, которая задает максимально возможную длину строки (количество символов).

Примеры объявления переменных типа string:

name: string[30];

buff:  string;

Если в объявлении переменной длина не указана, то по умолчанию длина строки устанавливается равной 255 символам, т. е. объявления

stroka: string[255]

stroka: string   эквивалентны.

Следует обратить внимание, что параметр длина, указанный в объявлении строковой переменной, задает не длину строки как таковую, а количество байт памяти, отводимой для переменной и, следовательно, длину строки, которую можно записать в переменную. Это надо учитывать при объявлении строковых переменных. Рекомендуется в качестве параметра длина указать значение, равное максимально возможной длине строки, которая может быть записана в переменную.

Переменная типа string может получить значение в результате выполнения инструкции присваивания или ввода значения с клавиатуры. Если переменной присваивается значение, то тип этого выражения должен быть string.

Переменная типа string может получить значение в результате выполнения инструкции присваивания или ввода значения с клавиатуры. Если перемен ной присваивается значение, то тип этого выражения должен быть string.

Строковая константа — это последовательность символов, заключенная в кавычки. Например: 'информатика’, 'Москва'.

Переменную типа string можно сравнить с другой строковой переменной или константой, используя операторы =, <, >, <=, >=, <>. Строки сравниваются посимвольно от первого символа. Если все символы сравниваемых строк одинаковые, то такие строки считаются равными. Если в одинаковых пози циях строк находятся разные символы, большей считается та строка, у которой в этой позиции находится символ с большим кодом.

ФУНКЦИИ МАНИПУЛИРОВАНИЯ СТРОКАМИ.

Функция LENGTH

Функция length позволяет определить длину строки. В качестве параметра -надо указать строку (переменную строкового типа), длину которой надо определить. Значение функции (целое число) — количество символов строки.

Процедура DELETE

Процедура delete позволяет удалить часть строки. Обращение к процедуре выглядит следующим образом:

delete(Строка, p,n);

где Строка- переменная строкового типа; р— номер символа, с которого начинается удаляемая подстрока; n — длина удаляемой подстроки.

Функция POS

Функция pos позволяет определить положение подстроки в строке. В общем шде обращение к функции выглядит так:

p:= pos(Подстрока,Строка);

Подстрока — строковая константа или переменная, которую надо найти в строковой константе или переменной Строка.

Функция COPY

Функция сору позволяет выделить фрагмент строки (подстроку). В обще виде обращение к функции сору выглядит так:

st := copy(Строка,p,n);

где st — переменная, в которую надо записать подстроку; строка — переменная строкового типа, содержащая строку, фрагмент которой надо получить; р — номер первого символа в строке строка, с которого начинается выделяемая подстрока; n — длина выделяемой подстроки

ОДНОМЕРНЫЕ МАССИВЫ

Массив – это именованная группа однотипных данных, хранящихся в последовательных ячейках памяти. Каждая ячейка содержит элемент массива. Элементы нумеруются по порядку, но необязательно начиная с единицы. Порядковый номер элемента массива называется индексом этого элемента.

Индексы элементов массива обычно целые числа, однако могут быть и символами, а также описываться другими порядковыми типами.

Простой массив является одномерным. Он представляет собой линейную структуру.

Графическое представление массива:

 

 

 

 Объявление массива

Массив, как и любая переменная, должен быть объявлен в разделе объявления переменных.

В общем виде объявление одномерного массива выглядит так:

Имя:array[нижний_инцекс..верхний_индекс] of тип

Где:

  Имя — имя массива;

  array — ключевое слово, обозначающее, что объявляемая переменная является массивом;

  нижний_индекс и вврхний_индекс — целые числа, определяющие диапазон изменения индексов (номеров) элементов массива и, неявно, количество элементов массива;

                 тип — тип элементов массива.

Примеры объявления массивов:

a: array[1..10] of real;

b: array[0..4] of integer;

name: array[1..30] of string[25];

При объявлении массива вместо целых констант, задающих значения индексов, удобно использовать именованные константы (объявление именованной константы следует поместить в раздел const). Например, приведенное выше объявление массива  можно заменить на следующее:

const

N = 10;

var

a: array[1..N] of real;

ДВУМЕРНЫЕ МАССИВЫ

Двумерный массив в Паскале трактуется как одномерный массив, тип элементов которого также является массивом (массив массивов). Положение элементов в двумерных массивах Паскаля описывается двумя индексами. Их можно представить в виде прямоугольной таблицы или матрицы.

Рассмотрим двумерный массив Паскаля размерностью 3*3, то есть в ней будет три строки, а в каждой строке по три элемента:

Каждый элемент имеет свой номер, как у одномерных массивов, но сейчас номер уже состоит из двух чисел – номера строки, в которой находится элемент, и номера столбца. Таким образом, номер элемента определяется пересечением строки и столбца. Например, a 21 – это элемент, стоящий во второй строке и в первом столбце.

Описание двумерного массива Паскаля.

Существует несколько способов объявления двумерного массива Паскаля.

Мы уже умеем описывать одномерные массивы, элементы которых могут иметь любой тип, а, следовательно, и сами элементы могут быть массивами. Рассмотрим следующее описание типов и переменных:

Пример описания двумерного массива Паскаля

Type

Vector = array [1..5] of <тип_элементов>;

Matrix= array [1..10] of vector;

Var m: matrix;

Мы объявили двумерный массив Паскаля m, состоящий из 10 строк, в каждой из которых 5 столбцов. При этом к каждой i -й строке можно обращаться m [ i ], а каждому j -му элементу внутри i -й строки – m [ i , j ].

Определение типов для двумерных массивов Паскаля можно задавать и в одной строке:

Type

Matrix= array [1..5] of array [1..10] of < тип элементов >;

или еще проще:

type

matrix = array [1..5, 1..10] of <тип элементов>;

Обращение к элементам двумерного массива имеет вид: M [ i , j ]. Это означает, что мы хотим получить элемент, расположенный в i -й строке и j -м столбце

Основные действия с двумерными массивами Паскаля

Все, что было сказано об основных действиях с одномерными массивами, справедливо и для матриц. Единственное действие, которое можно осуществить над однотипными матрицами целиком – это присваивание. Т.е., если в программе у нас описаны две матрицы одного типа, например,

type

matrix= array [1..5, 1..10] of integer;

var

   a , b : matrix ;

то в ходе выполнения программы можно присвоить матрице a значение матрицы b ( a := b ). Все остальные действия выполняются поэлементно, при этом над элементами можно выполнять все допустимые операции, которые определены для типа данных элементов массива. Это означает, что если массив состоит из целых чисел, то над его элементами можно выполнять операции, определенные для целых чисел, если же массив состоит из символов, то к ним применимы операции, определенные для работы с символами.

ПРОЦЕДУРЫ И ФУНКЦИИ

Большую программу можно разделить по функциональному признаку на части и реализовать каждую часть как подпрограмму. Разбивка большой программы на подпрограммы облегчает процесс разработки программы, делает ее структуру более понятной, позволяет работать над одной программой нескольким программистам.

Подпрограмма — это небольшая программа, которая обеспечивает решение некоторой подзадачи (части большой задачи). В языке Pascal существует два типа подпрограмм — функции и процедуры.

Функция

Функция — это подпрограмма. Для того чтобы функция была выполнена, ее надо вызвать — указать имя функции в качестве операнда выражения. Например, стандартная функция sqrt вычисляет квадратный корень числа, указанного в качестве ее параметра. Значение функции связано с ее именем. Поэтому для того, чтобы вычислить значение квадратного корня из числа, находящегося в переменной х, следует записать: у: =sqrt (х).

В общем виде инструкция обращения к функции выглядит так:

Переменная: =Функция (Параметры) ;

где Переменная — переменная, которой надо присвоить значение, вычисленное функцией; Функция — имя функции; Параметры — список параметров, .которые используются для вычисления значения функции. В качестве параметров обычно используют переменные или выражения.

Примеры использования (вызова) стандартных функций:

у:=Abs(х);

х: = Round(d);

Следует обратить внимание на то, что:

         тип переменной, которой присваивается значение функции, должен соответствовать типу функции (типу значения, которое возвращает функция);

         тип и количество параметров для каждой функции строго определены.

Различают следующие типы функций:

         Стандартные

         Библиотечные

         Программиста

Стандартные функции

Стандартными называют функции, которые доступны "по умолчанию".

Некоторые стандартные функции:

 

 

БИБЛИОТЕЧНЫЕ ФУНКЦИИ

Библиотечной называют функцию или процедуру, которая становится доступной в результате подключения к программе библиотеки (модуля), в которой эта функция находится. Например, процедура Textcolor модуля Crt позоляет установить цвет текста. Чтобы библиотечная функция стала доступной, модуль, в котором она находится, надо подключить — добавить в текст программы инструкцию uses, указав в качестве параметра имя модуля.

 

Функция программиста

Turbo Pascal позволяет программисту объявить свою собственную функцию и в дальнейшем использовать ее точно так же, как и стандартные функции.

 

Объявление функции

Объявление функции в общем виде выглядит так:

function Имя(Параметры):Тип; var

{ здесь объявления внутренних переменных функции}

begin

{ здесь инструкции функции} Имя := Выражение; end;

где:

function — зарезервированное слово языка Turbo Pascal, обозначающее, что далее следуют инструкции, реализующие функцию;

Имя — имя функции;

Параметры — список переменных, которые используются для передачи в функцию информации, необходимой для вычисления значения функции;

Тип — тип значения функции.

Следует обратить внимание, что функция завершается инструкцией, которая присваивает значение идентификатору Имя.Именно эта инструкция определяет значение функции.

 

Использование функции

Для того чтобы функцию, созданную программистом, можно было использовать, ее (в простейшем случае) следует поместить в текст программы, перед разделом объявления переменных.

Инструкции функции будут выполнены, если в каком-либо из выражений программы в качестве операнда будет указано имя этой функции (переход от инструкций основной процедуры программы к инструкциям функции называется вызовом функции или обращением к функции). Если в объявлении функции указаны параметры (эти параметры называются формальными), то после имени функции также должны быть указаны параметры (эти параметры называются фактическими), причем количество и тип фактических параметров должно соответствовать количеству и типу формальных параметров. В качестве фактических параметров обычно используют переменные или константы, реже — выражения

Операции с файлами

Объявление файла

Файл — это структура данных, представляющая собой последовательность элементов одного типа. Количество элементов файла практически не ограничено.

Как и любая переменная программы, файл должен быть объявлен в разделе объявления переменных. В объявлении файла указывается тип элемент файла. В общем виде объявление файла выглядит так:

Имя: file of ТипЭлементов

Примеры:

f: file of char;              { файл символов }

f: file of real;               { файл вещественных чисел }

f: file of integer;          { файл целых чисел }

Файл, компонентами которого являются символы (char), называется текстовым. Описание file of char можно заменить на text, т. е. объявление f:text эквивалентно объявлению f: file of char.

Назначение файла

Объявление файла (точнее, файловой переменной) задает только тип компонентов: файла. Чтобы программа получила доступ к файлу, необходимо указать имя файла. Имя файла задается путем вызова процедуры assign,инструкция вызова в общем виде выглядит так:

assign( Файл, Имя_Файла);

где Файл— файловая переменная;

Имя_Файла — имя файла, к которому надо получить доступ.

В инструкции вызова процедуры assign рекомендуется указывать полное имя файла (диск, каталог, имя и расширение файла). Необходимо обратить мание, имя файла должно быть указано в соответствии с правилами записи•имен файлов в MS-DOS (можно использовать только буквы латинского алфавита и цифры; количество символов в имени каталога, подкаталога или файла не должно быть больше восьми).

Ниже приведены примеры вызова процедуры assign.

assign(f,'а:\test.txt'); assign(f,'с:\test\spb.txt');

Открытие файла

Чтобы программа могла прочитать данные из файла или записать данные  в файл, файл необходимооткрыть. В языке Pascal есть несколько инструкций, обеспечивающих открытие файла. Инструкция reset открывает файл для чтения данных, append— для записи в режиме добавления, rewrite — для перезаписи.

Закрытие файла

Перед завершением работы программа должна закрыть все открытые файлы, Делается это вызовом процедуры close. В качестве параметра процедуры close следует  указать файловую переменную, связанную с файлом, который надо закрыть.

Пример использования процедуры:

close (f) ;

Запись в файла

Для того, чтобы программа могла записать данные в файл, файл надо открать для записи.

Возможны следующие варианты открытия файла для записи.

         Перезапись файла осуществляется вызовом процедуры rewrite, указав в качестве параметра файловую переменную.

         Добавление данных в существующий файл. Если переменная f является файловой, то в результате выполнения инструкции write(f, x); в файл, связанный с переменной f будет записано значение переменнойx.

ГРАФИЧЕСКИЕ ПРИМИТИВЫ

Любая картинка, чертеж, схема могут рассматриваться как совокупность графических примитивов: точек, линий, прямоугольников, окружностей, дуг и др. Чтобы на экране появилась нужная картинка, программа должна нарисовать графические примитивы, составляющие эту картинку.

GDI расшифровывается как Graphics Device Interface, и представляет собой интерфейс, который Windows использует для рисования 2D графики

Все графические функции в Delphi являются надстройками над стандартными GDI функциями Windows..

Ниже, в таблице, представлены некоторые важные классы GDI :

Имя

Описание

Pen

Используется для рисования простых линий. Обычно применяется для функции LineTo или при рисовании рамки для определённой фигуры (например для функции Rectangle).

Brush

Кисть используется для заполнения области определённым цветом. Применяется в функциях Rectangle, FillRect или FloodFill.

Font

Используется для задания шрифта, которым будет нарисован текст. Можно указать имя шрифта, размер и т.д.

Region

Позволяет задать регион (замкнутое пространство). Регионом может быть круг, квадрат или произвольная фигура. Позволяет так же делать дырки в фигурах.

Рисование линий

Сперва необходимо чётко уяснить, что координата (0,0) это верхний левый угол экрана. То есть значения по оси y увеличиваются вниз экрана. Соответственно, координата (0, 50) означает, что мы просто отступили на 50 пикселей от верха экрана.

Самое главное, что надо знать при рисовании линий и фигур, это различие между пером (Pen) и кистью (Brush). Всё очень просто: перо (Pen) используется при рисовании линий или рамок, а кисть (Brush) для заполнения фигуры.

Ниже приведены две функции, которые используются для рисования линий и обе принадлежат TCanvas:

Имя

Описание

Пример

MoveTo

Перемещает точку начала рисования линии в указанные координаты x и y

Canvas.MoveTo(50, 100);

LineTo

Рисует линию начиная с текущей позиции (см. MoveTo) до указанных координат x и y.

Canvas.LineTo(50, 100);

Эффект перемещения точки начала рисования линии так же достигается при помощи установки своства PenPos в канвасе... например, "Canvas.PenPos.x := 20;", "Canvas.PenPos.y := 50", или "Canvas.PenPos := Point(20,50);".

По умолчанию, точка начала рисования установлена в (0,0), то есть, если сразу вызвать "Canvas.LineTo(100,100);" то будет нарисована линия из точки (0,0) в точку (100, 100). Точка начала рисования автоматически переместится в (100, 100), то есть, если выполнить команду "Canvas.LineTo(200, 100);", то следующая линия будет нарисована из точки (100, 100) в (200, 100). Поэтому, если мы хотим рисовать линии несоединённые друг с другом, то придётся воспользоваться методом MoveTo.

Функция

Тип функции

Значение

Abs (х)

Тот же, что и тип аргумента

Абсолютное значение x

Sqrt(х)

real

Квадратный корень х

Sqr(х)

Тот же, что и тип аргумента

Квадрат х

Sin(а)

real

Синус угла а (величина угла должна быть указана в радианах)

Cos(а)

real

Косинус угла а (величина угла должна быть указана в радианах)

ArcTan(х)

real

Арктангенс х

Ехр (х)

real

Экспонента х

Ln (х)

real

Натуральный логарифм х

Round(х)

integer

Ближайшее к х целое

Trunc(х)

integer

Целая часть х

Frac(х)

integer

Дробная часть вещественного х, представленная как целое число

Int(х)

integer

Целая часть вещественного х, представленная как целое число