русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Метод прямого обмена (пузырьковый метод)


Дата добавления: 2015-06-12; просмотров: 590; Нарушение авторских прав


program Sort ;

Const n=15;

Var a : array[1..n] of integer;

i , j, c: integer;

begin

Randomize;

for i:=1 to n do

begin

a[i]:=random(22); {создание массива в диапазоне [0;21]}

Write(a[i]:8)

end;

Writeln;

for i:=1 to n-1 do

for j:=1 to n-1 do

if a[j]>a[j+1] then begin

c:=a[j];

a[j];=a[j+1];

a[j+1]:=c;

end;

for i:=1 to n do Write(a[i]:8)

end.

 

 


 

Контрольные вопросы

 

1. Что такое массив?

2. Как определить местоположение элемента в массиве?

3. Что такое индекс? Каким требованиям он должен удовлетворять?

4. Каким образом задается описание массива? Что в нем указывается?

5. В каких операциях могут участвовать массивы и какие требования при этом предъявляются?

6. Каким образом задается обращение к элементу массива?

7. Почему при описании массива предпочтительнее употреблять константы, а не указывать размеры массива в явном виде?

8. Что называется главной (побочной) диагональю?

9. Как произвести вывод двумерного массива в виде матрицы?

10. Где ошибки (их четыре) в следующей программе?

Program Massiv;

var X : array[1..8]: real;

begin

Read (X);

for i:=1 to 8 do X:=X*2;

Write(X)

end.

11. Где ошибки (их три) в следующей программе?

Program Massiv;

var X : array[1…n] of real;

begin

Read (n);

for i:=1 to n do X[i]:=random(5);

Write(X[i]) end.

12. Найдите значение переменной Z при заданных исходных данных 7 4 -3 12 8 4 2 0

Program Summa;

const n=8;

var X : array[1..n] of integer;

Z: integer;

begin

for i:=1 to n do read(X[i]);

z:=z+X[i]

end.


 

ГЛАВА 5

Процедуры и функции

 

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



Такие самостоятельные программные блоки называются подпрограммами пользователя.

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

Достоинства подпрограмм:

· Программы с участием подпрограмм легче тестировать и отлаживать.

· Их изменение не приводит к изменению основной программы.

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

В языке Паскаль подпрограммы реализованы с посредством процедур и функций. Они имеют один и тот же смысл и аналогичную структуру, но различаются назначением и способом использования. Все процедуры и функции подразделяются на две группы: встроенные (или стандартные – являются частью языка и могут вызываться без предварительного описания) и определенные пользователем.

 

5.1 ПРОЦЕДУРЫ ПОЛЬЗОВАТЕЛЯ

 

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

 

Процедура в Паскале имеет структуру, подобную структуре программы.

Общая структура процедуры имеет вид:

Procedure имя процедуры (параметры); {Заголовок процедуры}

Uses список модулей;

Label метки;

Const объявление констант;

Type определение типов данных;

Var объявление переменных;

Begin

Тело процедуры;

End;

 

Обратите внимание –в конце тела процедуры, как и программы, стоит end, но с точкой запятой.

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

Формат:

Procedure <Имя> (<Список параметров>);

 

где Procedure – зарезервированное слово;

<имя> - имя процедуры, определяемое в соответствии с общими правилами построения идентификаторов;

<Список параметров> (формальных) - перечень имен для обозначения исходных данных и результатов работы процедуры с указанием их типов.

 

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

Например,

Procedure Sort (a, b: real; n, k: integer; h: char);

 

Допускается описание процедуры, не содержащее <Списка параметров>:

Procedure Sort;

 

5.1.1 Обращение к процедуре

 

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

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

 

Вызов процедуры приводит к выполнению операторов, составляющих тело процедуры. После этого управление переходит к оператору, следующему за вызовом процедуры.

Формат:

<Имя процедуры> (<Список параметров>);

 

где <Имя процедуры> – имя процедуры, к которой происходит обращение;

<Список параметров> (фактических) - перечень конкретных значений (выражений) и имен, подставляемых на место формальных параметров процедуры при ее выполнении.

 

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

Формальных параметры – это переменные, фиктивно (формально) присутствующие в процедуре и определяющие тип и место подстановки параметров.

Фактические параметры – это реальные объекты программы, заменяющие в теле процедуры при ее вызове формальные параметры. Над этими объектами и производятся действия, предусмотренные операторами тела процедуры.

Например,

Sort (1.5, 3.24, 10, 526, ’-‘); {числа и символ – фактические параметры}

Sort; {фактические параметры не указаны, т.к. в вызываемой процедуре нет формальных параметров}

 

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

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

 

Обратите внимание –если процедура возвращает в программу какие-то значения, они должны быть описаны как параметры – переменные с использованием слова var.

Пример. Необходимо вычислить по заданному числу десятичный логарифм.

Так как такой функции в Паскале нет, то для вычисления используем соотношение y = 0.4348*ln(x). Для перевода можно использовать следующую процедуру.

 

Procedure Log10 (arg: real; Var log: real);

Begin

log:= 0.4348*ln(x)

End;

 

Вызов процедуры происходит так: Log10(x,y);

В качестве y в вызывающую программу будет возвращено значение десятичного логарифма от аргумента х. Это возможно только благодаря тому, что в списке параметров для перемнной log использован атрибут Var.

 

Пример. Напечатать первые n натуральных чисел и их факториалы, число n задается вводом.

Составим программу вычисления факториала с использованием процедуры.

 

Program faktorial;

Uses crt;

Var i,n: integer;

z:longint;

Procedure fakt(x:integer; var y:longint);

Var j:integer;

begin

y:=1;

for j:=1 to x do y:=y*j;

end;

Begin

clrscr;

write('VVEDITE n= '); readln(n);

for i:=1 to n do

begin

fakt(i,z);

writeln(i,' ', z);

end

end.

 

Пример. Составить алгоритм вычисления числа сочетаний. Число сочетаний рассчитать по формуле:

Данная задача была рассмотрена ранее в разделе 1.4. Приведем два способа составления программы для решения этой задачи.

Программа без использования процедуры Программа с использованием процедуры
Program Sochetanie; uses crt; var n,m,f1,f2,f3 : longint; c : real; i : integer; begin clrscr; read(n, m); f1:=1; for i :=2 to n do f1:= f1*i; f2:=1; for i :=2 to m do f2:= f2*i; f3:=1; for i:=2 to n-m do f3:= f3*i; c := f1/(f2* f3); write(‘число сочетаний равно’, c:3:1); end.   Program Sochetanie; uses crt; var n,m,f1,f2,f3:longint;c:real; Procedure fact(k:integer; var f:longint); var i:integer; begin f:=1; for i:=2 to k do f:=f*i; end; begin clrscr; readln(n,m); fact(n,f1); fact(m,f2); fact(n-m,f3); c:=f1/(f2*f3); write(c:3:1); end.

Пример: Вычислить выражение , n где задается вводом.

 

Program Sum_faktorial;

uses crt;

var i,n: integer;

z:longint;

s:real;

procedure fakt (x:integer; var y:longint);

var j:integer;

begin y:=1;

for j:=1 to x do y:=y*j;

end;

begin

clrscr;

write('VVEDITE n= '); readln(n);

s:=1;

for i:=1 to n do

begin

fakt(i,z);

s:=s+1/z;

writeln(i,' ', z, ' ' , 1/z:5:2);

end ;

write(s:4:1)

end.

 

 

5.2 ФУНКЦИИ ПОЛЬЗОВАТЕЛЯ

 

Функция пользователя аналогична процедуре, но имеются отличия:

· Функция передает в программу результат своей работы - единственное значение, носителем которого является имя самой функции

· Имя функции может входить в выражение как операнд. Функция возвращает результат в точку своего вызова.


Общая структура функции аналогична структуре процедуры:

Functionимя функции (параметры) : тип; {Заголовок функции}

Uses список модулей;

Label метки;

Const объявление констант;

Type определение типов данных;

Var объявление переменных;

Begin

Тело функции;

End;

 

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

Заголовок функции так же как и заголовок процедуры не может быть опущен.

Формат:

function <Имя>(Список формальных параметров) : <Тип>;

 

где Function – зарезервированное слово.

<имя> - имя функции, определяемое в соответствии с общими правилами построения идентификаторов;

<Список параметров> (формальных) - перечень имен для обозначения исходных данных и результатов работы функции с указанием их типов.

Например,

function Sort : double ; {формальных параметров нет}

function Sort (a, b : real) : real; {a, b - формальные параметры}

 

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

Например:

Writeln(fibo(i)); {параметр – значение переменной}

C:=instep(2,8); {параметры – непосредственно значения }

Пример. Необходимо вычислить значение функции тангенса tan(x) аргумента х.

 

Function Tan (x: real) : real;

Var tangens: real;

Begin

tangens:= Sin(x)/Cos(x);

Tan:= tangens;

End;

 

Для вызова функции из основной программы или другой подпрограммы следует в выражении, где необходимо использовать значение функции, указать имя функции со списком фактических параметров, которые должны совпадать по количеству и типам с формальными параметрами функции. Например, надо вычислить , оператор присваивания будет Y:= Tan(x)/(1+sqr(Tan(x));

Пример. Напечатать первые n натуральных чисел и их факториалы, число n задается вводом.

Этот пример был рассмотрен ранее с использованием процедуры. Составим программу вычисления факториала с использованием функции.

 

Program faktorial;

uses crt;

var i,n: integer;

z: longint;

function fakt(x:integer):longint;

var j: integer;

y: longint;

begin y:=1;

for j:=1 to x do y:=y*j;

fakt:=y;

end;

begin

clrscr;

write('VVEDITE n= '); readln(n);

for i:=1 to n do writeln(i,' ', fakt(i));

end.

Пример. Составить алгоритм вычисления числа сочетаний. Число сочетаний рассчитать по формуле:

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

 

Program Sochetanie;

var n, m : integer; c : real;

Function faсt (k : integer) : integer;

var i, f : integer;

begin f := 1;

for i := 2 to k do f := f*i

faсt := f

end;

begin

read(n, m);

c := fakt(n)/( fakt(m)*fakt(n-m));

write(‘число сочетаний равно’, c:3:1);

end.

Следует знать:

· Тело подпрограммы по структуре аналогично программе, но после слова end ставится точка с запятой.

· Вызов подпрограммы-процедуры выполняется отдельным оператором главной программы. Обращение к функции выполняется по имени, которое входит в выражение как операнд.

· Функция всегда возвращает, по крайней мере, одно значение, носителем которого является ее имя.

· Среди выполняемых операторов функции обязательно должен присутствовать оператор присваивания результата вычислений имени функции.

· Фактические параметры при вызове подпрограммы должны соответствовать формальным параметрам, указанным при ее объявлении по количеству, порядку следования слева направо и типу.

· Если параметры подпрограммы используются для возврата результата работы в главную программу, то в объявлении подпрограммы перед именем соответствующего формального параметра должно присутствовать слово var.


 

ГЛАВА 6

графика

 

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

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

Графические режимы отличаются:

· размером графической сетки (М*N, где М – количество точек по горизонтали, N - количество точек по вертикали);

· цветностью (число воспроизводимых на экране цветов).

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

Константы, определяющие видеорежим, приведены в таблице 6.1 вместе с информацией о выбираемом режиме и типе видеоадаптера, который может такой режим поддерживать.

Таблица 6.1

Драйвер Режим Разрешение Файл
CGA (1) CGACo, CGAHi 320*200 (640*200) CGA.BGI
EGA (3) EGALo, EGAHi 640*200 (640*350) EGAVGA.BGI
VGA (9) VGALo, VGAHi 640*200 (640*350) EGAVGA.BGI
HERC (8) HERCMONOHI 720*348 HERC.BGI

 

Какой бы адаптер ни был установлен на компьютере, мы можем использовать один и тот же набор графических процедур и функций Турбо Паскаля благодаря тому, что их конечная настройка на конкретный адаптер осуществляется автоматически. Графические адаптеры разработаны практически для всех существующих видеоадаптеров. Они находятся в файлах, имеющих расширение .BGI (Borland Graphics Interface) и активизируются при инициализации графического режима.

 

6.1 МОДУЛЬ GRAPH

 

Для формирования графических изображений в языке Турбо Паскаль предназначен стандартный библиотечный модуль GRAPH.В нем содержится 79 графических процедур, функций, десятки стандартных констант и типов данных.

Для запуска графической системы необходимо сделать следующее:

1. Подключить модуль GRAPH – библиотеку графических процедур;

2. Вызвать процедуру InitGraph, которая устанавливает один из возможных графических режимов.

 

Формат процедуры:

InitGraph(var Driver, Mode: integer; Path: string);

 

где Driver – целая переменная, определяющая тип графического драйвера;

Mode - целая переменная, задающая режим работы графического драйвера;

Path – маршрут поиска файла графического драйвера (если он расположен в активной директории, то вместо маршрута ставятся два апострофа).

 

Пример программы для инициализации графики на начальном этапе работы:

uses Graph;

var Driver, Mode: integer;

begin

Driver:=Detect; {для автоматического определения драйвера и установки режима}

InitGraph (Driver, Mode,’\TP\BGI’);

 

Во время выполнения программы процедура InitGraph автоматически распознает графический адаптер, установленный на ПК, загружает и инициализирует соответствующий графический драйвер, переводит адаптер в графический режим и возвращает управление вызывающей программе. С этого момента все графические средства доступны пользователю.

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

 

 

6.2 БАЗОВЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ

 

Для построения изображений на экране используется система координат. Отсчет начинается от верхнего левого угла экрана, который имеет координаты (0, 0). Значение Х (столбец) увеличивается слева направо, значение Y (строка) увеличивается сверху вниз.

Рассмотрим экран, который имеет 640 точек в горизонтальном (Х) направлении и 480 – в вертикальном (Y) (см. рисунок 6.1).

 


Рис. 6.1. Координаты экрана

 

Чтобы строить изображение. Необходимо указывать, по крайней мере, точку начала вывода. В текстовых режимах эту точку указывает курсор, который присутствует на экране. В графических режимах видимого курсора нет, но есть невидимый текущий указатель CP (Current Pointer). Фактически это тот же курсор, но он невидим. Для перемещения CP имеются процедуры MoveTo и MoveRel.

Для перемещения текущего указателя в точку с координатами X, Y используется процедура:

MoveTo(X, Y : integer);

 

Например,MoveTo(200, 100) переместит CP в точку экрана с координатами 200, 100.

Для перемещения CP на dX точек по горизонтали и на dY точек по вертикали используется процедура:

MoveRel(dX, dY : integer);

 

Например,MoveRel(5, 10) переместит CP из точки с координатами 200, 100 в точку 205, 110.

 

Чтобы стереть все изображения на экране, т.е. очистить его, используется не имеющая параметров процедура ClearDevice. С момента ее выполнения все установки по цвету, фону и окнам аннулируются, и курсор помещается в точку с координатами (0, 0).

 

 

6.2.1 Установка цвета

 

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

Процедура SetColor(Color : Word) устанавливает цвет, используемый процедурами графического вывода, в значение, заданное параметром Color. Возможные значения Color приведены в таблице 6.2.

Например, SetColor(3) или SetColor(Cyan).

 



<== предыдущая лекция | следующая лекция ==>
ОПЕРАТОРЫ ПОВТОРА | Цветовая шкала


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.015 сек.