У вас вопросы?
У нас ответы:) SamZan.net

а используется элемент b то элемент а должен быть описан раньше

Работа добавлена на сайт samzan.net: 2015-07-10

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 6.4.2025

1.1 Теоретические сведения

1.1.1 Структура программы в языке Паскаль

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

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

Раздел описаний, также как и предыдущие разделы, не является обязательным. Подразделы описаний могут повторяться многократно в любом порядке, но если в описании элемента «а» используется элемент «b», то элемент «а» должен быть описан раньше.

Таблица 1.1 Общая структура программы на языке

Описание

Текст в программе

Заголовок программы

Program Name;

Список используемых модулей

Uses Crt, Graph, MyMod;

Описания

– описания меток

Label L1, L2;

– описания констант

Const 

pi=3.14;

n=10;

Bool=True;

Str=’Result’;

– описания типов

Type 

Vector = array[1..n] of Integer;

– описания переменных

Var

k,m: integer;

S: real;

a,b: Vector;

  •  описания процедур и функций

Procedure …;

Function …;

Раздел операторов (тело программы)

– ввод данныхж

– вычисления;

– вывод на печать.

Begin

{операторы}

End.

1.1.2 Основные типы данных

Все типы данных в языке паскаль можно разделить на две группы: стандартные (предопределенные) и пользовательские.

К стандартным типам относятся:

  •  целые (Integer, ShortInt, LongInt, Byte, Word);
  •  вещественные (Real, Single, Double, Extended, Comp);
  •  булевские (Boolean, ByteBool, WordBool, LongBool);
  •  символьный (Char);
  •  строковые (String, PChar);
  •  указательный (Pointer);
  •  текстовый (Text).

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

Таблица 1.2 Примеры порядковых номеров

Тип

Порядковый номер

Целый

Значение числа

10

10

134

134

Булевский:

True

Любое число, отличное от 0

False

0

Символьный

‘a’

97

‘b’

98

‘m’

109

‘!’

33

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

Ord – возвращает порядковый номер.

Pred – возвращает предыдущее значение, если применяется к первому значению, то возвращается порядковый номер последнего значения,

Succ – возвращает следующее значение, если применяется к последнему значению, то возвращается порядковый номер первого значения,

Таблица 1.3 Примеры работы функций Ord, Pred и Succ

Тип переменной

Значение

b

Ord(b)

Pred(b)

Ord(Pred(b))

Succ(b)

Ord(Succ(b))

Целый

b:=10

10

9

9

11

11

b:= –10

–10

–11

–11

–9

–9

Булевский

b:=True

1

False

0

True

2

b:=False

0

True

–1

True

1

Символьный

b:=’d’

100

‘c’

99

‘e’

101

b:=’n’

110

‘m’

109

‘o'

111

b:=’+’

43

‘*’

42

‘,’

44

1.1.3 Оператор присваивания

Виды операторов:

Простые операторы не содержат в себе другие операторы.

Сложные операторы содержат простые операторы. Например, составной и условный операторы, операторы цикла, выбора и т.д.

Составные операторы содержат несколько операторов, которые заключаются в операторные скобки BeginEnd.

Оператор присваивания имеет вид: V:= A, где V –  имя переменной; А – выражение, := – знак присваивания.

При этом переменная V и выражение А должны иметь один и тот же тип.

Разрешается присваивать переменной типа REAL выражение типа INTEGER, но нельзя присваивать  выражение типа REAL переменной  INTEGER.

1.1.4 Арифметические выражения

Правила написания арифметических выражений: арифметические выражения должны быть записаны в строчку, операции должны быть указаны явно. Результатом вычисления арифметических выражений являются значения типа INTEGER (I, целый) или REAL (R, вещественный).

Таблица 1.4 Знаки арифметических операций и типы переменных

Название операции

Символ

Тип переменных

Тип результата

умножение

*

I, R

I, R

деление

/

I, R

R

деление нацело

DIV

I

I

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

MOD

I

I

сложение

+

I, R

I, R

вычитание

I, R

I, R

Приняты следующие правила, определяющие приоритет операций:

• операции умножения и деления (* ,/ , DIV , MOD) имеют более высокий приоритет, чем операции сложения и вычитания;

• для изменения порядка вычисления используются круглые скобки;

• скобочные структуры могут быть вложены друг в друга.

Синтаксис операций DIV, MOD: n DIV m или n MOD m.

Например, 174 = 10*17+4, т.е. при делении на 17 получается 10 (остаток 4).

Тогда результаты операций будут следующими:

174 DIV 17 = 10;

174 MOD 17 = 4.

1.1.5 Логические выражения

Логические выражения используют операции отношения (равно =, не равно < >, меньше <, больше >,меньше или равно <=, больше или равно >=) и булевские (логические) операции: not, and, or, xor.

Логическое отрицание (инверсия) в Паскале обозначается not; выражение not А истинно, если А ложно, и, наоборот, ложно, если А – истинно.

Логическое умножение (конъюнкция) обозначается and; выражение А and В истинно, если истинны оба выражения.

Логическое сложение (дизъюнкция) обозначается or; выражение А or В ложно, если ложны оба выражения, и истинно, если истинно хотя бы одно из этих выражений.

Исключающее ИЛИ обозначается хor; выражение А хor В истинно, если истинно только одно выражение (либо А, либо В).

Приоритет логических операций:

  1.  not,
  2.  and,
  3.  or, xor (одинаковый приоритет).

Булевской переменной можно присваивать выражение булевского типа. Использование в программах переменных булевского типа (с обязательным описанием Var  p: Boolean;) значительно упрощает алгоритм, размер программы и, соответственно, время ее выполнения.

Пример: Вывести на экран TRUE, если квадратное уравнение имеет хотя бы один корень, и FALSE, если корней нет.

Основная часть программы:

После описаний и ввода коэффициентов квадратного уравнения вычисляем переменную D – дискриминант.

1 способ (без использования булевских переменных):

if (D<0) then

WriteLn(‘FALSE’)

else

WriteLn(‘TRUE’);

2 способ (с введением булевской переменной):

p:= D>=0;

WriteLn(p);

Примечание: Невозможно применение двойных неравенств, выражение  2 < a < 7 записывается в виде (2 < a) and (a < 7).

1.1.6 Основные стандартные функции языка Паскаль

Таблица 1.5 Стандартные математические функции и их типы

Математическая функция

Функция на языке Паскаль

Тип аргумента

Тип функции

Примечание

|X| – модуль числа

ABS(X)

R, I

R, I

X2

SQR(X)

R, I

R, I

SQRT(X)

R, I

R

sin X

SIN(X)

R, I

R

Значение Х вводится в радианах

cos X

COS(X)

R, I

R

arctg X

ARCTAN(X)

R, I

R

eX

EXP(X)

R, I

R

ln X

LN(X)

R, I

R

[X] – целая часть Х

TRUNC(X)

R, I

I

округление Х до целого

ROUND(X)

R, I

I

Определение четности

ODD(X)

I

Boolean

TRUE, если Х-нечет

FALSE, если Х-чет.

Примечание: В языке Паскаль нет некоторых математических операций и функций. В этих случаях используется набор стандартных функций.

Например:

1) Возведение в степень – вместо AВ записывается EXP(В*LN(A));

2) Логарифм по произвольному основанию – вместо logAX записывается LN(X)/LN(A), например, lgX представляется в виде LN(X)/LN(10);

3) tgX и ctgX соответственно SIN(X)/COS(X) и COS(X)/ SIN(X);

4) arccosX – угол, косинус которого равен Х, при  ХЄ[-1; 1]. 

Вместо arccosX записываем ARCTAN(SQRT(1/SQR(X) – 1)). Или ARCTAN(SQRT(1–SQR(X))/X) при Х≠0 и при Х=0 arccosX=π/2. Аналогично arcsinX вычисляется выражением:  ARCTAN(X/SQRT(1–SQR(X))) при Х≠1 и при Х=1 arcsinX=π/2  и так далее.

1.1.7 Основные функции ввода/вывода

Вывод на экран производится при помощи встроенных процедур Write(переменная1, переменная2, …, переменнаяN) – печать,

WriteLn(переменная1, переменная2, …, переменнаяN) – печать с новой строки.

Ввод с экрана (чтение) реализуется аналогично: Read(переменные) или  ReadLn(переменные).

Например, необходимо считать с экрана монитора значение переменной n. Для удобства обычно сначала выводят строку:

Write('n = ');

а затем считываю значение:

Read(n);

Форматный вывод

Для вывода чисел предусмотрен форматный вывод.

Для всех типов целых чисел выводится длина (количество знаков в числе), например, Write(n:5); – будет выделять для вывода числа 5 знаков, т.е. если числа двузначные, то между ними будет интервал в 3 пробела.

Для вывода действительных чисел используется «двойной» формат, который включает общее количество разрядов и количество знаков после запятой. Например, Write(а:10:3); – будет выводить число с 3 знаками после запятой. Общее количество разрядов – 10. Из них 3 – после запятой, 1 выделяется для самой запятой и 1 выделяется для знака числа (+ или –), причем + по умолчанию не печатается. Это означает, что данный формат вывода предусматривает 5 знаков перед запятой, и возможно превышение формата.

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

Работа с файлами (ввод/вывод)

Сначала необходимо описать переменную файла, например: Var f: file;

Затем необходимо связать физический файл с файловой переменной. Для этого используется процедура Assign, например: Assign(f, ‘NameFile1.dat’) – работа с файлом NameFile1.dat из текущей директории. Также можно записывать полное имя файла (с указанием полного пути).

Открытие файлов выполняется процедурами Reset и Rewrite.

Процедура Reset(f) открывает существующий физический файл.

Процедура Rewrite(f) создает новый физический файл. Если файл с таким именем уже существует, то он удаляется, и на его месте записывается новый пустой файл.

Закрытие файлов выполняется процедурой Close: Close(f).

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

Таблица 1.6 Функции, используемые при работе с файлами

Функция

Описание

Тип аргумента

Тип функции

EOF (F)

TRUE, конец файла

FALSE, нет конца

file

boolean

EOLN (F)

TRUE, конец строки

FALSE, нет конца

File

boolean

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

Program SummaElemFile;

Uses Crt;

Var  x, Sum: real;

f: text;

Begin

ClrScr;

 Assign(f, ‘NameFile1.dat’);

 Reset(f);

Sum:=0;

 While not Eof(f) do

 begin

 Read(f, x);

 Sum:=Sum+x;

 end;

 Close(f);

 WriteLn(‘Summa of file’s elements =’, Sum);

 Readkey;

End.

1.1.8 Операторы цикла

Оператор цикла со счетчиком (с параметром)  for  подходит для таких вычислений, когда известны начальное и конечное значения счетчика.

При увеличении значения используется следующая форма:

for  i:=i1 to i2 do Оператор;

где i1 – начальное значение, i2 – конечное значение, причем, для выполнения цикла хотя бы один раз, обязательно должно быть i1<=i2. Оператор может быть как простым, так и составным. После выполнения Оператора (тела цикла) увеличение значения счетчика происходит автоматически. Т.е. специальный оператор (например, i:=i+1) не нужен.

При уменьшении значения используется следующая форма:

for  i:=i2 downto i1 do Оператор;

где i2 – начальное значение, i1 – конечное значение, причем, i2>=i1. Аналогично, не требуется специальный оператор для уменьшения значения счетчика.

Ограничения: шаг изменения счетчика может быть только +1 или –1, переменная, используемая в роли счетчика, должна быть только порядкового типа и должна быть локальной для того блока, в котором используется оператор for.

Порядок работы:

Переменной-счетчику присваивается первое значение, затем вычисляется тело цикла, значение счетчика увеличивается (или уменьшается) на 1. Это выполняется до тех пор, пока значение счетчика не превысит конечного значения. После выхода из цикла значения переменной счетчика имеет значение, на 1 больше/меньше конечного.

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

while  Условие  do  Оператор;

Оператор (или тело цикла), как и в предыдущем случае, может быть как простым, так и составным. Он выполняется до тех пор, пока Условие истинно. Дословно: пока (while) Условие верно, выполнять (do) тело цикла.

Порядок работы:

Сначала вычисляется Условие – выражение или переменная булевского типа. Если оно равно FALSE, то цикл не выполняется и управление передается следующему оператору. Если выражение TRUE, то цикл выполняется один раз и снова вычисляется Условие. Когда значение Условия примет значение FALSE, работа цикла завершается.

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

repeat

Оператор 1;

Оператор 2;

until  Условие;

Дословно: повторять (repeat) выполнение операторов, до тех пор, пока (until) Условие не станет верным.

Порядок работы:

Сначала выполняются все операторы, при этом не требуется использование составного оператора. Затем вычисляется Условие – выражение или переменная булевского типа. Цикл продолжается до тех пор, пока Условие принимает значение FALSE, и заканчивается, если Условие становится равным TRUE.

Таблица 1.7 Отличия и особенности работы различных операторов цикла

цикл со счетчиком  for

цикл с предусловием  while

цикл с постусловием  repeat

Начальная установка переменной счетчика

Не требуется

Необходимы начальные установки переменных, управляющих условием

Изменение переменной

Не допускается в теле цикла, происходит автоматически

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

Условия работы

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

Работает, пока Условие истинно, завершается, когда Условие становится ложным.

Может не выполняться ни разу.

Работает, пока Условие ложно, завершается, когда условие становится истинным.

Обязательно выполняется минимум 1 раз.

Использование более одного оператора

Необходимо использовать составной оператор.

Использование составного оператора не требуется.

Пример – вычисление суммы элементов массива

S:=0;

for i:=1 to n do

S:=S+a[i];

S:=0;

i:=1;

while i<=n do

begin

S:=S+a[i];

i:=i+1;

end;

S:=0;

i:=1;

repeat

S:=S+a[i];

i:=i+1;

until i>n;

Ход работы цикла может быть нарушен оператором безусловного перехода goto (см. п.1.1.9) или операторами Break и Continue.

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

Оператор Continue прерывает выполнения тела цикла, но из цикла не выходит. Т.е. после оператора Continue  не выполняется следующий оператор в цикле, а проверяется условие окончания цикла и, если условие выполняется, то тело цикла будет продолжать выполняться. Примеры использования этих операторов можно найти в разделе 1.1.10.

1.1.9 Операторы перехода (безусловный и условные)

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

В Turbo Pascal есть два условных оператора:  if  и  case, но исторически сложилось, что оператор  if  называют условным, а оператор  case – оператором выбора или варианта.

Условный оператор  if  используется в полной и неполной форме.

Неполная форма: if  Условие then Оператор1;

полная форма: if  Условие then Оператор1 else Оператор2;

Если условие верно (TRUE), то выполняется Оператор1, если условие ложно (FALSE), то в случае неполной формы выполняется следующий оператор, в случае полной формы – Оператор2.

Особенности: Выбирает только одно из двух возможных действий.

Нельзя ставить символ «;»  ни перед then, ни перед else. Только внутри составных операторов (Оператор1 и Оператор2 могут быть как простыми, так и составными).

Оператор выбора  case  позволяет выполнить одно из нескольких действий в зависимости от значения переменной-переключателя.

case Переключатель of

Список1:  Оператор1;

Список2:  Оператор2;

 СписокN:  ОператорN

else ОператорEnd

end;

Порядок работы: Если переменная-переключатель принимает одно из значений Списка1, то выполняется Оператор1, а остальные пропускаются и т.д. ОператорEnd будет выполняться, если значение переключателя не совпало ни с одним из значений предыдущих списков.

Необходимо также учесть:

  •  В неполном операторе  case  строка с  «else»  отсутствует.
  •  Перед  else  символ «;»  не ставится.
  •  Переменные в списке могут разделяться запятой (например, 1,2,3,4,5) или вводиться интервалом (1..5).
  •  Операторы могут быть составными.

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

1. Ввести с экрана символ. Определить вид символа: цифра, буква и т.п.

Var MyChar: Char;

Begin

ReadLn(MyChar);

 case MyChar of

‘0’..’9’:  WriteLn(‘Это цифра’);

‘A’..’Z’:  WriteLn(‘Это прописная буква’);

‘a’..’z’:  WriteLn(‘Это строчная буква’)

else WriteLn(‘Это символ’)

end;

End.

2. Ввести номер месяца. Напечатать номер квартала.

Var MyNum: Integer;

Begin

ReadLn(MyNum);

 case MyChar of

1..3:  WriteLn(‘I’);

4..6:  WriteLn(‘II’);

7..8:  WriteLn(‘III’);

9..12:  WriteLn(‘IV’)

else WriteLn(‘Номер месяца должен быть от 1 до 12!’)

end;

End.

1.1.10 Работа с массивами

Считывание (ввод) одномерного массива известной длины из файла

Var  x: array [1..20] of real;

i: integer;

f: text;

Begin

 Assign(f, ‘NameFile.dat’);

 Reset(f);

 for i:=1 to 20 do

 Read(f, x[i]);

 Close(f);

End.

Считывание одномерного массива неизвестной длины из файла, определение размера массива

Var  x: array [1..100] of real;

i,N: integer;

f: text;

Begin

 Assign(f, ‘NameFile.dat’);

 Reset(f);

i:=0;

 While not Eof(f) do

 begin

 i:=i+1;

 Read(f, x[i]);

 end;

N:=i1;

 Close(f);

End.

Запись (вывод) одномерного массива в файл

Var  x: array [1..20] of real;

i,N: integer;

f2: text;

Begin

 Assign(f2, ‘NameFile.rez’);

 ReWrite(f2);

 for i:=1 to 20 do

 Write(f2, x[i]:10:3);

 Close(f2);

End.

При выводе массива числа записываются подряд, поэтому необходимо всегда делать форматный вывод (см. п.1.1.7).

Вычисление наибольшего элемента одномерного массива

Var  x: array [1..100] of real;

 max: real;

i,N, Nmax: integer;

Begin

max:=x[1];

 for i:=2 to N do

if (x[i]>max) then

 begin

 max:=x[i];

 Nmax:=i;

 end;

End.

В результате работы программы вычисляется значение max, равное наибольшему элементу массива и Nmax – номер наибольшего элемента. Необходимо учесть, что эта программа не печатает значения. Для печати необходимо использовать оператор Write.

Для нахождения минимального (наименьшего) элемента программа аналогичная, только для удобства вводятся переменные min, Nmin и в условном операторе if  изменяется условие: if  (x[i]<min) then

Нахождение массива, состоящего из определенных элементов исходного массива

j:=0;

n2:=0;

for i:=1 to n do

 if (Условие) then

 begin

j:=j+1;

b[j]:=a[i];

 end;

n2:=j;

В результате получаем массив b, содержащий элементы исходного массива, удовлетворяющие «Условию» и число n2 – количество элементов полученного массива. Условие определяется в зависимости от поставленной задачи. Некоторые примеры условий представлены в таблице 1.8.

Таблица 1.8 Определение «Условия»

Условие задания

«Условие» в программе

Тип элементов массива

Найти положительные элементы

a[i] > 0

Для целых и действительных типов

Найти отрицательные элементы

a[i] < 0

Найти неположительные элементы

a[i] ≤ 0

Найти неотрицательные элементы

a[i] ≤  0

Найти четные элементы

a[i] mod 2 = 0

или

not odd(a[i])

Только для целых типов

Найти нечетные элементы

a[i] mod 2 <> 0

или

odd(a[i])

Найти все элементы, делящиеся на n

a[i] mod п = 0

Найти все элементы, не делящиеся на n

a[i] mod п <> 0

Нахождение первого положительного элемента массива

Var

a: mass;

i, Num, firstPol: integer;

Begin

 Num:=0;

firstPol:=0;

 for i:=1 to n do

 if a[i] > 0 then

 begin

firstPol:= a[i];

Num:=i;

 Break;

 end;

 if firstPol = 0 then

WriteLn(‘Net poloz. elementov’);

End.

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

Нахождение последнего положительного элемента массива

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

for i:=n  downto  1 do

и т.д.

Сортировка одномерного массива по возрастанию

for i:=1 to N–1 do

 for j:=i+1 to N do

if  a[i]>a[j] then

begin

 t:=a[i];

a[i]:=a[j];

a[j]:=t;

 end;

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

Для сортировки по убыванию необходимо изменить условие в операторе  if.

1.1.11 Процедуры и функции. Модули.

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

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

Наиболее часто употребляемые библиотечные процедуры и функции называют стандартными. Некоторые стандартные функции и процедуры были описаны ранее (это стандартные математические функции, процедуры ввода-вывода и т.п.).

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

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

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

Заголовок процедуры в общем случае выглядит так:

PROCEDURE <имя> (<список формальных параметров>);

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

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

Список формальных параметров выглядит так:

(Парам1:Type1; Парам2:Type2;… VAR ПарамN:TypeN…);

При этом параметры, стоящие перед VAR – это параметры, передаваемые в процедуру (параметры-значения), а после VAR – параметры, вычисляемые в процедуре или результат работы процедуры (параметры-переменные).

Особенности:

  1.  Если есть несколько параметров одного типа, они записываются через запятую, как в описаниях переменных.
  2.  В спецификации параметров можно использовать только идентификатор типа. Например, можно написать (a, b, c: real) но нельзя написать (a:array[1..10] of  real). При использовании массив, необходимо предварительно задать тип переменной массива:

Const n=10;

Type Matr = array[1..n] of real;

Фактические параметры – это идентификаторы конкретных переменных, используемые при вызове процедуры.

Вызов процедуры в программе осуществляется следующим образом:

<имя> (<список фактических параметров>);

Список фактических параметров выглядит так:

(Парам1, Парам2, … ПарамN);

Пример. Векторное произведение.

Необходимо вычислить векторное произведение  Для этого сначала вычисляется векторное произведение , а затем вычисляется

Program NameProg;

Const n=3;

Type Vector = array[1..n] of real;

Var

i: integer;

x,y,z,rez: Vector;

Procedure VectMult (a,b: Vector; var c: Vector);

Begin

c[1]:= a[2]*b[3]– a[3]*b[2];

c[2]:= a[3]*b[1]– a[1]*b[3];

c[3]:= a[1]*b[3]– a[3]*b[1];

End;

Begin

VectMult (x,y,z);

VectMult (x,z,rez);

End.

Формальные параметры здесь – это a, b, c, а фактические – при первом вызове процедуры – x,y,z и при втором – x,z,rez.

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

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

FUNCTION <имя> (<список форм. параметров>): <тип результата>;

Вызывается просто по имени.

Пример1. Вычисление синуса угла, заданного в градусах

Program NameProg;

Var

i: integer;

x,y,z: real;

Function SinGrad(x: real): real;

Begin

SinGrad := sin(x*3,1415926/180);

End;

Begin

y:= 5* SinGrad(x) – 2 sqr(x);

 z:= sqr( sqr(x))/7 – 13* SinGrad(x) – 2;

End.

Пример2. Вычисление длины вектора

Program NameProg;

Const n=3;

Type Vector = array[1..n] of real;

Var

DLx, DLy: real;

x,y: Vector;

Function DlVect(a: Vector): real;

Var i: integer;

Begin

DlVect:=0;

for i:=1 to 3 do

Begin

DlVect:= DlVect+sqr(a[i]);

End;

End;

Begin

DLx:= DlVect(x);

DLy:= DlVect(y);

End.

Пример 3. Вычисление котангенса угла в градусах

Program NameProg;

Var

a,y: real;

Function  CtgGrad (a: real): real;

Const pi=3,14;

Var x: real;

Begin

x:=a*pi/180;

 if (sin(x) <> 0) then

ctgGrad:=cos(x)/sin(x)

 else

 WriteLn(‘ctg  не существует’);

End;

Begin

y:=ctgGrad(x);

End.

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

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

Например, Function  Integral(a,b:real; Function f(x:real):real): real;

Можно вводить описание процедурных и функциональных типов в разделе описания типов:

type

FuncType = Function(x: Real): Real;

ProcType = Procedure (a,b: Real; var x,y: Real);

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

После объявления процедурного или функционального типа его можно использовать для описания формальных параметров – имен процедур и функций. Кроме того, необходимо написать те реальные процедуры или функции, имена которых будут передаваться как фактические параметры. Эти процедуры и функции должны компилироваться в режиме дальней адресации (far) с ключом {$F+}.

Модули (объекты UNIT) – это комплекс специально подобранных процедур и функций, которые хранятся на диске в откомпилированном виде (файлы с расширением tpu).

Наиболее часто используемые готовые модули:

– для управления режимом экрана – модуль Crt,

– для создания программ интерфейса, рисования – модуль Graph,

– для обработки прерываний – модуль DOS.

Возможно создание своей собственной библиотеки процедур и функций, объединение их в модуль, компиляция – и дальнейшее использование в своих программах.

Borland Pascal содержит следующие стандартные модули:

Crt, Dos, Graph, Graph3, Objects, ODialogs, Overlay, Printer, Strings, System, Turbo3, WinAPI, WinCrt, WinDOS, WinPrn, WinProcs,WinTypes.

Данные стандартные модули обеспечивают поддержку всех ваших программ на Borland Pascal и хранятся в отдельных файлах TPW.TPL (для среды Windows), TPP.TPL (для защищенного режима DOS) или TURBO.TPL (для реального режима DOS).

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

1.1.11.1 Модуль System

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

1.1.11.2 Модуль Crt

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

Таблица 1.9. Процедуры и функции модуля Crt

Имя

Назначение

Процедуры задания режимов работы

TextMode

Задание текстового режима

Процедуры управления цветом

High Video
LowVideo
Norm Video
TextBackground
TextColor

Задание высокой яркости символов
Задание малой яркости символов
Задание исходной яркости символов
Задание цвета фона
Задание цвета символов

Процедуры работы с экраном

ClrEol
ClrScr
DelLine
GotoXY
InsLine
Window

Удаление символов от курсора до конца строки
Очистка экрана
Удаление строки, в которой находится курсор
Перемещение курсора в заданную позицию
Добавление пустой строки на экране
Задание размеров окна

Функции работы с экраном

WhereX
WhereY

Текущая координата X курсора
Текущая координата Y курсора

Функции работы с клавиатурой

KeyPressed
ReadKey

Проверка нажатия клавиши
Чтение символа с клавиатуры

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

Sound
NoSound

Включение звука
Отключение звука

Процедуры разнообразного назначения

Delay

AssignCrt

Задержка выполнения программы
Связь текстового файла с устройством CRT

Порядок выполнения работ

1. Ознакомиться с основными теоретическими сведениями.

2. Составить алгоритм программы.

3. Составить программу на языке Паскаль для своего варианта задания, отладить в среде TurboPascal, получить результат.

4. Оформить отчет.

  •  Номер и название лабораторной работы
  •  Фамилия, Имя
  •  Номер группы
  •  Вариант задания
  •  Условие (текст задания)
  •  Текст программы на языке Паскаль
  •  Результаты вычислений.

ЛАБОРАТОРНАЯ РАБОТА №5. Работа с двумерными массивами

Цель работы: Получить навыки работы в составлении программ с двумерными массивами, научиться сортировать числовые данные.

ВАРИАНТЫ ИНДИВИДУАЛЬНЫХ ЗАДАНИЙ

Задание 1.

  1.  Дан двумерный массив. Создать одномерный массив, содержащий положительные элементы главной диагонали. Упорядочить по убыванию.
  2.  Дан двумерный массив. Создать одномерный массив, содержащий отрицательные элементы побочной диагонали. Упорядочить полученный массив по возрастанию.
  3.  Дан двумерный массив. Создать одномерный массив, содержащий элементы главной и побочной диагоналей. Упорядочить по возрастанию.
  4.  Дан двумерный массив. Создать одномерный массив, содержащий элементы над главной диагональю. Упорядочить по убыванию.
  5.  Дан двумерный массив. Создать одномерный массив, содержащий элементы под главной диагональю. Упорядочить по возрастанию.
  6.  Дан двумерный массив. Создать одномерный массив, содержащий все отрицательные элементы. Упорядочить по возрастанию.
  7.  Дан двумерный массив. Создать одномерный массив, содержащий все неотрицательные элементы. Упорядочить по убыванию.
  8.  Дан двумерный массив. Создать одномерный массив, содержащий элементы над побочной диагональю. Упорядочить по убыванию.
  9.  Дан двумерный массив. Создать одномерный массив, содержащий элементы под побочной диагональю. Упорядочить по возрастанию.
  10.  Дан двумерный массив. Создать одномерный массив, содержащий все положительные элементы. Упорядочить по возрастанию.

Задание 2.

Задан массив целых чисел a [1..3].

  1.  Создать матрицу 3х3, для которой bij=2ai + 3aj.
  2.  Создать матрицу 3х3, для которой bij=ai2 – 2aj.
  3.  Создать матрицу 3х3, в которой диагональные элементы bii=ai2, а остальные элементы bij = bji = 2ai aj.
  4.  Создать матрицу 3х3, для которой bij=2ai2 + aj.
  5.  Создать матрицу 3х3, первый столбец которой состоит из элементов массива a, второй столбец – из элементов массива a, умноженных на 2, третий столбец – из элементов массива a  с противоположным знаком.
  6.  Создать матрицу 3х3, для которой bij=2ai aj – 7.
  7.  Создать матрицу 3х3, в которой bij = 4aj – 5ai.
  8.  Создать матрицу 3х3, в которой bij = 2aj + 7ai.
  9.  Создать матрицу 3х3, в которой bij = 4ai aj – 5ai.
  10.  Создать матрицу 3х3, для которой bij=5ai – 2aj2.
  11.  Создать матрицу 3х3, первый столбец которой состоит из элементов массива a, умноженных на 3, второй столбец – из элементов массива a, третий столбец – из элементов массива a, уменьшенных на 2.

ЛАБОРАТОРНАЯ РАБОТА №6. Программирование с использованием подпрограмм

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

Необходимые математические формулы:

Обратные тригонометрические функции:

Гиперболические функции:

Расстояние между двумя точками в пространстве:

Уравнение прямой на плоскости, проходящей через две точки:

где

Точка находится внутри круга с центром в точке (х0, у0) и радиусом R, если выполняется неравенство: (х  x0)2 + (y– у0)2 R2.

Точка находится вне круга с центром в точке (х0, у0) и радиусом R, если выполняется неравенство: (х  x0)2 + (y– у0)2 > R2.

ВАРИАНТЫ ИНДИВИДУАЛЬНЫХ ЗАДАНИЙ

Задание 1.

  1.  Вычислить наибольшее значение заданной функции на интервале [–5; 5] с шагом 0,01, если . Для определения арккосинуса определить и использовать функцию. Вывести значение х и значение функции f(x).
  2.  Даны координаты вершин N-угольника на плоскости и координаты точки внутри него. Найти расстояние от данной точки до ближайшей вершины N-угольника (наименьшее расстояние).
  3.  Вычислить наименьшее значение заданной функции на интервале [–1; 1] с шагом 0,05, если . Для определения арксинуса определить и использовать функцию. Вывести значение х и значение функции f(x).
  4.  Произвольно заданы N точек в пространстве (для каждой точки заданы 3 координаты). Найти 2 точки, расстояние между которыми – наименьшее.
  5.  Вычислить наибольшее значение заданной функции на интервале (0; 10) с шагом 0,5, если . Для определения котангенса определить и использовать функцию. Вывести значение х и значение функции f(x).
  6.  Даны координаты вершин N-угольника на плоскости и координаты точки внутри него. Найти расстояние от данной точки до самой отдаленной вершины N-угольника (наибольшее расстояние).
  7.  Вычислить наименьшее значение заданной функции на интервале [–2; 2] с шагом 0,01, если . Для определения гиперболического синуса определить и использовать функцию. Вывести значение х и значение функции f(x).
  8.  Произвольно заданы N точек в пространстве (для каждой точки заданы 3 координаты). Найти 2 точки, расстояние между которыми – наибольшее.
  9.  На плоскости задано N точек. Найти все точки, лежащие внутри круга радиуса R с центром в начале координат.
  10.   Вычислить наименьшее значение заданной функции на интервале [–2; 2] с шагом 0,02, если . Для определения гиперболического косинуса определить и использовать функцию. Вывести значение х и значение функции f(x).

Задание 2.

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

Использовать формальный параметр-функцию.

Значения a и b также включить в список параметров процедуры.

Значение h выбрать равным 0,05.

Значение п вычислить по формуле:  .

Учесть, что

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

a

b

f(x)

1

1

12

7th(3x2–1)

2

2

11

3cth(2x2+1)

3

3

15

4th(x2+1)

4

4

14

5cth(x2/2+1)

5

5

13

6ch(–2x2–1)

6

6

17

8ch(4x2+3)

7

7

16

2sh(6x2+7)

8

-1

9

9sh(x2/2+1)

9

-2

13

7cos(2x2–3)

10

-3

15

6cos(4x2+3)

СОДЕРЖАНИЕ

[0.1] 1.1 Теоретические сведения

[0.1.1] 1.1.1 Структура программы в языке Паскаль

[0.1.2] 1.1.2 Основные типы данных

[0.1.3] 1.1.3 Оператор присваивания

[0.1.4] 1.1.4 Арифметические выражения

[0.1.5] 1.1.5 Логические выражения

[0.1.6] 1.1.6 Основные стандартные функции языка Паскаль

[0.1.7] 1.1.7 Основные функции ввода/вывода

[0.1.8] 1.1.8 Операторы цикла

[0.1.9] 1.1.9 Операторы перехода (безусловный и условные)

[0.1.10] 1.1.10 Работа с массивами

[0.1.11] 1.1.11 Процедуры и функции. Модули.

[0.1.11.1] 1.1.11.1 Модуль System

[0.1.11.2] 1.1.11.2 Модуль Crt

[0.1.12] Порядок выполнения работ

[0.1.13] ЛАБОРАТОРНАЯ РАБОТА №5. Работа с двумерными массивами

[0.1.14] ЛАБОРАТОРНАЯ РАБОТА №6. Программирование с использованием подпрограмм

PAGE   \* MERGEFORMAT 21




1. Художник русской истории
2. Тема- Відмінювання іменників що вживаються лишев мнoжині Мета- пояснити oсобливoсті відмiнювання іменників
3. а дендритное поле
4. ЭКОНОМИКО-МАТЕМАТИЧЕСКИЕ МОДЕЛИ
5. Отчет по производственной практике в отделе документационного обеспечения Турухтанного таможенного поста Балтийской таможни в качестве помощника государственного таможенного инспектора отдела документационного обеспечения
6. Особенно многие уверовали в это за последние годы когда на наших глазах происходят перемены столь внезапны
7. это самостоятельная отрасль казахстанского право которое призвано изучать направление деятельности госуд
8. за весь период сохраняется средний заработок возмещаются расходы по проезду к месту командировки
9. права і ліва Перший ідентифікатор як уже було сказано міститься у вершині дерева
10. КОНКУРСЫ 26 НОЯБРЯ вторник 14.