You are on page 1of 158

А.А. Руденко, А.Г. Руденко, Н.

А Руденко

ПРАКТИКУМ

ПО АЛГОРИТМИЧЕСКОМУ ПРОГРАММИРОВАНИЮ

ТУРБО ПАСКАЛЬ

ProCNC. Info
2008

1
СОДЕРЖАНИЕ

ПРЕДИСЛОВИЕ ………………………………………………………………………. 4
РАЗДЕЛ 1. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ТУРБО ПАСКАЛЬ ………………… 5

ГЛАВА 1. НАЧАЛЬНЫЕ СВЕДЕНИЯ …………………………………………………. 5

1.1. Алфавит языка Турбо Паскаль……………………………………………… 5

1.2. Константы и переменные…………………………………………………… 6

1.3. Арифметические выражения и их запись на языке Турбо Паскаль……… 8

ГЛАВА 2. СТРУКТУРА ПРОГРАММЫ. ОПЕРАТОРЫ ПРИСВАИВАНИЯ,

ВВОДА И ВЫВОДА. ЛИНЕЙНЫЕ ПРОГРАММЫ………………………………. 10

2.1. Оператор присваивания……………………………………………………… 10

2.2. Операторы ввода и вывода…………………………………………………... 11

2.3. Линейные программы………………………………………………………. 13

ГЛАВА 3. ОПЕРАТОРЫ УПРАВЛЕНИЯ………………………………………………. 14

3.1. Оператор безусловного перехода…………………………….……………. 14

3.2. Оператор условного перехода……………………………….…………….. 16

3.3. Программы с разветвлениями……………………………………………... 20

ГЛАВА 4. МАССИВІ. РАБОТА С МАССИВАМИ……………………………………... 25

4.1. Описание массива…………………………………………….…………… 26

4.2. Программы с массивами…………………………………………………… 27

ГЛАВА 5. ОПЕРАТОР ЦИКЛА………………………………………………………………….. 30

5.1. Структура счетного оператора цикла FOR………………………………. 30

5.2. Цикл спредусловием……………………………………………………… 38

5.3. Цикл с послесловием……………………………………………………… 40

ГЛАВА 6. ПОДПРОГРАММЫ……………………………………………………………………. 49

6.1. Процедуры и функции……………………………………………………. 49

2
6.2. Примеры программ, содержащих подпрограммы……………………. 50

РАЗДЕЛ 2. СБОРНИК УПРАЖНЕНИЙ “UP “………………………………….. 59

2.1. Инструкция к выполнению заданий…………………………………….. 59

2.2. Упражнения к главе 1 “UP-1”: Константы и переменные,

арифметические выражения в языке Паскаль…………………………. 60

2.3. Упражнения к главе 2 “ UP-2 “:Операторы присваивания,

ввода- вывода. Линейные программы………………………………….…. 62

2.4. Упражнения к главе 3 “UP-3 “: Операторы передачи управления.

Программы с разветвлениями………………….……………………….. 64

2.5. Упражнения к главе 4 “UP-4 “: Массивы ………….…………………….. 66

2 2.6. Упражнения к главе 5 “UP-5“: Операторы цикла………….……………. 68

2.7. Ответы к упражнениям “UP“……………………………………………… 69

РАЗДЕЛ 3. СБОРНИК ЛАБОРАТОРНЫХ РАБОТ ПО

ТУРБО ПАСКАЛЮ……………………………………………………. 71

3.1. Требования к оформлению лабораторных работ……………………….. 71

3.2. Лабораторная работа “ LAB-1 “: Записи арифметических

выражений на языке Турбо Паскаль………………………………………… 71

3.3. Лабораторная работа “ LAB-2 “: Операторы присваивания,

ввода-вывода…………………………………………………………….…… 74

3.4. Лабораторная работа “ LAB-3 “: Операторы передачи

управления. Программы с разветвлениями………………………………… 77

3.5. Лабораторная работа “ LAB-4 “: Массивы. Оператор цикла …………… 80

3
3.6. Лабораторная работа “ LAB-5 “: Подпрограммы…………… …………... 86

РАЗДЕЛ 4. ОТВЕТЫ И КОМПЬЮТЕРНЫЕ ПРОГРАММЫ

К ЛАБОРАТОРНЫМ РАБОТАМ……………………………………. 92

4.1. Лабораторная работа “ LAB-1 “…………………………………………….. 92

4.2. Лабораторная работа “ LAB-2 “……………………………………………... 93

4.3. Лабораторная работа “ LAB-3 “……………………………………………... 104

4.4. Лабораторная работа “ LAB-4 “…………………………………………….... 111

4.5. Лабораторная работа “ LAB-5 “………………………………………….. . . 136

ЛИТЕРАТУРА …………………………………………………………………………… 151

4
ПРЕДИСЛОВИЕ

Общество стало перед необходимостью повсеместного внедрения в производственный


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

Авторами предлагается пакет методических пособий и компьютерых программ не только


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

В качестве алгоритмического языка взят язык Турбо Паскаль. Его структура, операторы
изложены в разделе 1, содержащего 6 глав. Здесь работа каждого из рассмотренных
операторов иллюстрируется большим количеством компьютерных программ.

Для закрепления теоретического материала создан пакет упражнений ”UP” (раздел2).


Читатель, находясь за компьютером, должен ответить на ряд вопросов. Ответы на все вопросы
приведены в конце раздела.

В разделе 3 приведен сборник лабораторных работ. Тексты лабораторных работ


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

Конечная цель лабораторных работ: усвоить теоретический материал, создать


компьютерную программу, отладить ее на компьютере и получить числовой результат.

.В разделе 4 в помощь читателю приводятся распечатки компьютерных программ


лабораторных работ и числовые значения (ответы).

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

5
РАЗДЕЛ 1. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ТУРБО ПАСКАЛЬ
Глава 1. Начальные сведения
1.1. Алфавит языка Паскаль

Алфавит языка – это совокупность символов, из которых образуются слова и


предложения языка. Алфавит составляют следующие группы символов:
1) прописные и строчные буквы латинского алфавита;

2) буквы русского алфавита;

Русские буквы можно использовать только в текстах, включаемых в программу; в


математических формулах их использовать нельзя даже в тех случаях, когда они по
начертанию не отличаются от соответствующих латинских букв;
3) арабские цифры Ø 1 2 3 4 5 6 7 8 9.

Цифру Ø рекомендуется перечеркивать в тех случаях, когда ее можно спутать с буквой О;


4) знаки действий +, -, *, / обозначающие соответственно сложение, вычитание,
умножение, деление;

5) знаки отношений (равенств, неравенств):

> < = >=


больше меньше равно больше либо равно
<= < >
меньше либо равно не равно
6) скобки ( ) только круглые, применяются для указания порядка действия в
математических формулах;

7) разделители и специальные знаки: .,;:" и другие, применение которых будет


разъяснено в дальнейшем;

8) имена стандартных функций:

sin – синус; cos – косинус;

EXP – число е; Arctan – арктангенс;

6
Ln – натуральный логарифм; Pi – число π;

Sqr – квадрат; Sqrt – квадратный корень;

Abs – абсолютная величина числа;

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

Например: sin(x), Ln(x), Abs(x).

Аргумент тригонометрических функций Sin(x),Cos(x) и значение функции Arctan(x)


выражается в радианах.

9) служебные слова: and,array,begin,case,const,div,do,downto,else,end,

file,for,function,goto,if,in,label,mod,nil,not,of,packet,procedure,program,record,

repeat,set,then,to,type,until,var,while,with.

1.2. Константы и переменные.

Величины делятся на постоянные (константы) и переменные;

В языке Паскаль используются константы трех типов: целые, вещественные


(действительные) и литерные.

Целые константы записываются в виде последовательности десятичных цифр, перед


которой может быть знак плюс или минус. Константа без знака считается положительной.
Например: 128, - 1325, +781, 12, 50.

Вещественные константы могут быть предоставлены в форме с фиксированной точкой или в


экспоненциальной форме.

При записи числа в форме с фиксированной точкой точка используется для отделения
целой части от дробной. Например: 2.375; - 11.71; 0.3175. Целая часть, равная нулю,
обязательно должна быть записана: Например: 0.65 – правильно записано, .65 –
неправильно записано.

Вещественные константы, записанные в экспоненциальной форме, состоят из мантиссы и


порядка, отделенного от мантиссы буквой «Е», заменяющей 10.

7
Например: 14000=1.4*104=1.4Е4; 1.3*105=1.3Е5; Наличие мантиссы в записи числа
обязательно, если даже она равна 1. 106=1Е6.

Примеры неправильно записанных чисел:

12. – оканчивается точкой;


.13 – начинается с точки;
Е-21 – начинается с символа порядка;
-14.Е21 – мантисса оканчивается точкой;
15.12.14 – содержит две точки;
Е13 – начинается с символа порядка после знака.
Пример правильной записи этих чисел:
12 0.13 1Е-21 -14Е21 151214 -1Е13
Литерные константы – это набор любых символов алфавита, заключенных в кавычках.
Например: «слон», «класс», «ученик».

Переменная – это величина, которая меняет свои значения в процессе выполнения


программы. Для переменной величины вводится обозначение, которое называется именем и
назначается программистом. Имя переменной (идентификатор) состоит из букв латинского
алфавита или буквы, за которой следует цифра. Например: Х, А, А1, D, super.

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


букв латинского алфавита и 10 арабских цифр. Русские буквы использовать нельзя. Примеры
правильных идентификаторов: NUMBER, X, ABC.

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

MIN VALUE – нельзя использовать пробелы.

А+1 – нельзя использовать знак «+»

1S1DE – запрещается начинать с цифры.

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

1. В языке программирования Паскаль запрещается использовать в качестве


идентификаторов зарезервированные слова. Поэтому идентификаторы sin, Ln, IF,
CASE, ARRAY и т.д. являются неправильными.

2. Идентификаторы, отличающиеся лишь использованием прописных или строчных букв,


считаются одинаковыми. Следовательно, идентификаторы АВС и авс, или ABCD
эквивалентны.

3. Начиная со второй позиции, в идентификаторе можно применять наряду с буквами


цифры.

4. Пробел в ТП является разделителем и не может стоять внутри идентификатора. Для


создания идентификаторов, составляющих из двух слов, можно воспользоваться
большими буквами (например, DOMMOD) или символом подчеркивания (DOM_MOD),
но не пробелом (DOM MOD).

5. Идентификатор должен начинаться буквою или символом подчеркивания _

1.3. Арифметические выражения и их запись.

Арифметические выражения строятся из констант, переменных, стандартных функций


с помощью знаков действий +, -, *, / и круглых скобок.

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

1) выражения записываются в строку без каких-либо подстрочных или надстрочных


знаков;

2) вычисляют значение выражения слева направо в порядке старшинства операций:


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

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

3) число открытых и закрытых скобок должны быть одинаковым;

9
4) если значение аргумента не попадает в область определения функции, то будет выдано
сообщение об ошибке.

5) Примеры

№ Математическая запись Запись на Паскале

1 A/(B*C) или A/B/C

2
Sqrt(3*x+sqrt(Abs(x)))

3 sin|x| SIN(Abs(x))

4
EXP(-sqr(x)/2)

10
Глава 2. Структура программы. Операторы присваивания,
ввода и вывода. Линейные программы
Запись алгоритма решения задачи на специальном языке, предназначенная для
выполнения компьютером, называется программой.
Программа представляет собой последовательность действий (команд). В языках
программирования команды принято называть операторами. Каждый оператор записывается в
отдельную строку. Завершается программа оператором END.
2.1. Оператор присваивания
Оператор присваивания имеет вид:

где Х – имя переменной;


А – арифметическое выражение.
При выполнении этого оператора вычисляется значение арифметического выражения,
стоящего справа, и полученное значения присваивается переменной Х.

Знак равенства «: =» означает «присвоить»

Пример 2.1. Пусть Х=32+sin .

В программе Х получает значение в результате выполнения операторов присваивания:

PI: = 3.1415;
X: = Sqr (3)+SIN (PI/6)
Переменной Х будет присвоено значение 9.5.
В правую часть оператора присваивания могут входить имена переменных, но к моменту
выполнения оператора каждая из этих переменных должна получить числовое значение.
Числовые значения переменные получают либо с помощью оператора присваивания, либо с
помощью ввода.

Пример 2.2. Вычислить периметр Р прямоугольника, если стороны а=13.5, b=7.2.


Периметр Р =2а+2b.

Периметр может быть вычислен с помощью следующей последовательности операторов


присваивания:

А: =13.5;

11
В:=7.2;
Р:=2*А+2*В
В операторе присваивания в левой и правой частях может стоять одно и то же имя переменной.

Например: Х:=Х+5.5
Это означает, что переменная Х принимает новое значение равное прежнему плюс 5.5. Пусть
Х=2. В результате выполнения оператора присваивания Х получает значение 7.5 и в
последующих вычислениях значение Х равно 7.5.

В языке программирования Паскаль нельзя с помощью одного оператора присваивания


присвоить нескольким переменным одно и то же значение.

Нельзя, например, записать L:=K:=N:=1.


Вместо этого необходимо записать три оператора присваивания
L:=1;
K:=1;
N:=1.
2.2. Операторы ввода и вывода

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

1) read (a1,a2,…,an) – реализует чтения из стандартного файла input последовательности


из n значений и присваивание этих значений переменным а1,а2,…,аn;

2) readl(a1,a2,…an) –реализует чтения из стандартного файла input последовательности из


n значений, пропуск остальных значений до начала следующей строки в файле input,
присваивание считанных значений переменным а1,а2,…,аn;

3) readln – реализует пропуск строки в файле input до начала следующей строки.

Среди операторов вывода различают следующие выводы:

1) Write (a1,a2,..an) – реализует вывод значений переменныa1,a2,…,an в стандартный


файл output в одну строку;

12
2) Writel(a1,a2,…,an) – реализует вывод значений переменных a1,a2,…an в одну строку и
переход к началу следующей строки файла output;

3) Writeln – реализует пропуск строки (перевод строки) в файле output и переход к началу
следующей строки.

Решим следующую задачу.


Пример 2.3. Найти периметр и площадь прямоугольника со сторонами a и b, если a=
2,5м, b= 5,7м.
Периметр Р=2(a+b), площадь S=a*b.
Составим программу, введем числовые данные и получим результат действия программы.
Программа на Turbo Pascal имеет вид:
Program PR23; (имя программы)
Uses Crt; (Подключения библиотеки вспомогательных процедур и функций
для управления экраном)
Var a, b, P, S: real; (описания входных переменных)
Beqin (начало программы)
ClrScr; (Очищение экрана)
a:=2.5; (ввод числовой информации через
b:=5.7; оператор присваивання)
P:= 2*(a+b); (решение задачи)
S:= a*b;
Write (P,S); (вывод информации)
End.
На экране получим следующую информацию
1.6400000000Е+01 1.4250000000Е+01.
Ясно, что такой информацией неудобно пользоваться, т. к. надо думать, что собой
представляет первое число, а что – второе, да и числа неудобочитаемые.
Рассмотрим различные варианты вывода информации.
Write (P,S);
1.6400000000E+01 1.4250000000E+01
Write(P:6:2,S:6:2); P:6:2 – указывает, что для вывода
16.40 14.25 переменной отводится 6 позиций, а
число знаков после десятичной точки
должно быть 2.
Write (`P=`,P:6:2, `S=`, S:6:2); `P=`- дается команда напечатать P=
P=16.40 S=14.25
Write(`P=`,P:6:2,` `,`S=`,S:6:2); ` `- пробелы между P и S
P=16.40 S=14.25
Write(` P=`, P:6:2,` `,`S=`,S:6:2); Символ Р будет печататься на некотором

13
P=16.40 S=14.25 расстоянии от левого края экрана.
Writeln (` P=`,P:6:2);
Writeln (` S=`,S:6:2); P и S будут напечатаны в разных строках
P=16.40
S=14.25
Writeln (` P=`, P:6:2);
Writeln;
Пустой оператор. Он увеличивает
Writeln(` S=`,S:6:2);
расстояние между строками.
P=16.40
S=14.25

2.3. Линейные программы


Пример 2.4. Составить программу вычисления среднего арифметического,
среднего геометрического и среднего гармонического двух чисел a и b.
ab
Среднее арифметическое s=
2

Среднее геометрическое G= ab


Число с называется средним гармоническим чисел a и b,если
1 1 1 1 2 ab
=    c=
c 2 a b . ab

Программа имеет вид:


Program Pr24;
Uses Crt;
var s,G,c:real;
a,b:integer;
begin
ClrScr;
a:=5;
b:=7;
s:=(a+b);
G:=sqrt(a*b);
c:=2*a*b/(a+b);
write(' s=',s:8:4,' G=',G:8:4,' c=',c:8:4);
end. Результат: s =12.0000 G=5.9161 c=5.8333.

Глава 3. Операторы управления

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

3.1. Оператор безусловного перехода

Оператор безусловного перехода имеет вид:

GOTO <метка>;
и осуществляет переход к оператору с меткой.
Метка должна быть описана в программе. Описание меток состоит из зарезервированного
слова LABEL (метка), за которым следует список меток:
label
lb1, lb2;
Метка располагается непосредственно перед помечаемым оператором и отделяется от него
двоеточием.
Label
lb1;
begin
……………
goto lb1;
……………
lb1:
……………
Пример 3.1.
Program Pr31;
Uses Crt;
var a,c:real;
label lb1;
Begin
Clrscr;
a:=2;
c:=a+1;
goto lb1;
c:=a+2;
lb1:
write(' c=',c:4:1);
End. Результат вычислений c= 3.0
Оператор qoto lb1 передаёт управление оператору write. На экране появляется информация: с
= 3.
Оператор с: = a +2 выполняться не будет.

3.2. Оператор условного перехода

15
Оператор условной передачи управления имеет вид:

IF B THEN P ELSE Q;

где В – условие; P и Q – операторы;

IF (если) THEN (то) ELSE (иначе) – служебные слова.


Условие В представляет логическое выражение. В простейшем случае – это отношение
вида:
A1=A2, A1>A2, A1<A2, A1>=A2, A1<=A2, A1<>A2.
А1 и А2 – арифметические выражения.
Логическое выражение принимает одно из двух возможных значений:
«истина» (да) или «ложь» (нет).
Выполнение условного оператора можно изобразить в виде блок – схемы
.

истина
Р
В

Q Следующий оператор

16
Пример 3.2.

Program Pr32;
Uses Crt;
Var a, b, c: integer;
Begin
Clrscr;
a:=5;
b:=7;
if a>b then c:=a else c:=b;
write(' c=',c);
End.
c=7
В зависимости от значения условия выполняется оператор с = a или оператор с = b.

Результат выполнения этой программы имеет вид: с = 7.


Неполная форма условного оператора имеет вид:

IF B THEN P
Блок схема выполнения этого оператора имеет вид:

истина
Р Следующий
В
ложь

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


Р – оператор или номер строки, которой передаётся управление.

17
Пример 3.3.
Program Pr33;
Uses Crt;
Var a,b,c:integer;
Label
lb1,lb2;
begin
Clrscr;
a:=10;
b:=20;
if b>a then goto lb1;
c:=a+b;
Writeln(' c=',c);
goto lb2;
lb1:
c:=a-b;
writeln(' c=',c);
lb2:
End. В результате выполнения программы С имеет значение: С= -10.
Р и Q могут быть группой операторов. Операторы в группе отделяютя друг от друга
операторными скобками begin и end.
Пример 3.4.
Program Pr34;
Uses Crt;
Var a,b,c:integer;
begin
Clrscr;
a:=10;
b:=20;
if a>b then
begin c:=b; writeln(' c=',c) end
else
begin c:=a; writeln(' c=',c) end;
end.
Результат С = 10.

18
Пример 3.5.

Условие B может быть составным. Составные условия образуются из отношений и знаков


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

AND (и) – логическое умножение;


NOT (не) – логическое отрицание;
OR (или) – логическое сложение

№ Математическая запись Запись на ТП

1 -6 ≤ Х ≤ 2 Х >= -6 and Х <= 2


2
y X*X+Y*Y<=1 and X>0

3
Х< -3 X>4 X < -3 OR X>4
-3 4

Пример 3.6.
Program Pr36;
Uses Crt;
Var a,b,x,y,z:integer;
begin
Clrscr;
a:=10;
b:=20;
x:=5;
y:=3;
if( a<b) and( x>y) then z:=x+y;
write(' z=',z);
end.
Результат выполнения программы: Z = 8

19
Запишем несколько условных операторов:

if(x > 0) and (x <= 1) then y: = sqr(x) else y: = 1/x;

if a >= 0 then else y: = a-3;

Использование после then и else условного оператора порождает вложенную конструкцию


условного оператора.
Например:

if L1 then S1 else if L2 then S2 else S3;

3.3. Программы с разветвлениями

Пример 3.7. Составить программу нахождения корней квадратного уравнения

ax 2bx c=0 .

−b  b 2 −4 ac ; −b− b2 −4 ac
x1 = x 2=
2a 2a

Задачу просчитать для двух случаев:

а = 2; a = 2;

b = 3; b = 1;

c = -1; c = 7.

20
Составим блок –схему решения задачи

Начало

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

d: = -4ac

НЕТ
Вычисление
d< X1,X2
0

ДА

Вывод
«Действительных Вывод
корней нет» a,b,c;X1,X2

Конец

21
Program Pr37

Uses Crt;
Var a, b, c, d, x1, x2,d :real;
label lb1;
begin
Clrscr;
Writeln ('Решение квадратного уравнения ');
Write ('a=');
Readln (a);
Write ('b=');
Readln (b);
Write ('c=');
Readln (c);
Writeln;
d:=b*b-4*a*c;
if d<0 then goto lb1;
lb1 :
writeln ('Действительных корней нет');
x1: =(-b+sqrt(d))/2/a;
x2:=(-b-sqrt(d))/2/a;
writeln (' x1=',x1:8:4,' ','x2=',x2:8:4);
end.
Рeшeниe квадратного уравнения
a=2
b= 3
c=- 1
x1= 0.2808 x2= -1.7808
Рeшeнue квадратного уравнения
a= 2
b= 1
c= 7
Действительных корней нет

22
Пример 3.8. Составить таблицу значений функции y = +4x-1 на отрезке [a;b] с шагом h.
Принять: a = -2; b = 2; h = 0,5.

Блок – схема

Начало

Описание a,b,h
X,Y
Ввод a,b,h.

x=a

y = +4x-1

да
Вывод X,Y

х: = x + h x≤

Нет

Конец

23
Program Pr38;
Uses Crt;
Var a, b, h, x, y: real;
Label lb1;
Begin
Clrscr;
writeln(' Табулирование функции’);
writeln;
write('a=');
readln(a);
write('b=');
readln(b);
write('h=');
readln(h);
writeln(' x',' ','y');
x:=a;
lb1:
y:=x*x*x+4*x-1;
writeln( x:7:3,' ',y:7:3);
x:=x+h;
if x<=b then goto lb1;
readln;
end.

Табулирование функции
a=-2
b=2
h=0.5
x y
-2.000 -17.000
-1.500 -10.375
-1.000 -6.000
-0.500 -3.125
0.000 -1.000
0.500 1.125
1.000 4.000
1.500 8.375
2.000 15.000

24
Глава 4. Массивы. Работа с массивами

4.1. Описание массива

Множество величин, обладающих одинаковыми свойствами, объединяются в массив.


Например: массивом могут быть ученики школы; каждый ученик представляет собой элемент
этого массива.

Массивом может быть строка чисел А = [9,14,20,40], или прямоугольная таблица чисел

В=

Массив, состоящий из одной строки, называется одномерным. Массив, представляющий


собой таблицу чисел, называется двумерным.

Массив А – одномерный, массив В – двумерный.

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

Для обращения к отдельному элементу массива следует указать имя массива и в круглых
скобках написать его номер. Нумерация элементов массива начинается с нуля. Например: для
обращения в массиве А к элементу, значение которого 20, необходимо записать А(2) Если
массив двумерный, то элемент массива имеет два индекса, разделенные запятой. Первый
индекс указывает номер строки, второй - номер столбца.

Например. В массиве В: В (0,0)=1; В(2,0)=7; В (2,1)=8; В (1,1)=-6.

Номер элемента может быть константой, именем переменной или выражением.

Например: А(2), А(і ), А(і+2), В(i,j), B( i+k,2), B(i*2,k+i).

Элементы одномерного массива расположены в ячейках памяти ЭВМ друг за другом в


порядке возрастания номеров. Например: А(0), А(1), А(2), А(3)…

Элементы двумерного массива располагаются построчно: В(0,0), B (0,1), В (0,2),

B(0,3), B(1,0), B(1,1)…

25
Например: массив В = в ячейках памяти ЭВМ располагается следующим

образом: 3, 5, 7, 2, 0, -1, -1, -3.

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


равна нулю. Размерность массива А равна 4, массива В в последнем случае (2,4).

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

Описание типа массива задаётся следующим образом:

< Имя типа > ARRAY > ] OF <тип>

Здесь < имя типа >- идентификатор;


ARRAY (массив) OF (из ) – зарезервированные слова;
< сп. инд.типов > -список из одного или нескольких типов, разделенных запятыми.
Например, одномерные массивы A и B описываются так

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


VAR b1: array [2..8] of real ;
Примечание. Величины, соответствующие начальному и конечному индексам, т.е.
значения, указанные в квадратных скобках, разделяются двумя (!) точками. Причем перед
этими двумя точками и после них допускаются пробелы.

В первом примере объявлена переменная – массив, состоящая из 10 элементов типа real,


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

Элемент массива В1 имеет тип integer. Индекс для этого массива может изменятся в
интервале от 2 до 8.

Квадратную матрицу можно описать следующим образом.

Пусть целочисленное квадратная матрица содержит 15 строк и 15 столбцов.

Var с: array [1..15, 1..15] of integer;

В общем виде:

Var b1: array [Т1, Т2] of <тип>;

26
Как видим списки типов индексов пишутся в одних квадратных скобках и отделяются
друг от друга запятыми. В этом случае элемент матрицы С [i, j].

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

Например:

Var
a, b: array [1,5] of integer
begin
a: = b;
end.
После этого присвоения все пять элементов массива А получат те же значения, что и в массиве
В.

4.2. Программы с массивами

Пример 4.1. Дан массив А[1..2]. Сформировать массив В[1..2, 1..2] по правилу b(i,j)= аi –

3aj. i=1,2; j=1,2. a[1]=3.4; a[2]=4.2.

Program Pr41;

Uses Crt;
Var
a:array[1..2] of real;
b:array[1..2,1..2] of real;
Begin
Clrscr;
writeln(' MAССИВ B');
writeln;
a[1]:=3.4; a[2]:=4.2;
b[1,1]:=a[1]-3*a[1];
b[1,2]:=a[1]-3*a[2];
b[2,1]:=a[2]-3*a[1];
b[2,2]:=a[2]-3*a[2];
writeln(' b[1,1]=',b[1,1]:6:3,' b[1,2]=', b[1,2]:6:3);
writeln(' b[2,1]=',b[2,1]:6:3,' b[2,2]=', b[2,2]:6:3);
end.

27
МАССИВ В
b [1,1]=-6.800 b [1,2]=-9.200
b [2,1]=-6.000 b [2,2]=-8.400
Примечание: Эту программу можно упростить, если элементы массива В[i;j] будут
насчитываться в цикле. Смотрите пример 5.13 главы 5.

Пример 4.2. Найти сумму положительных и отрицательных элементов массива А(6) =


2.5, - 3.4, - 7.1, 0.5, - 4.7, 6.
начало Блок – схема

Описание массива,
объявление данных

SP:=0 SP – сумма положительных чисел;

SO – сумма отрицательных чисел.


SO:=0

I:=1

ввод элемента
массива

да
a[i]>= SP:=SP+a(I)
нет

SO: = SO+a(I) I:=I+1 I<=


6
да нет

вывод

конец

28
Program Pr42
Uses Crt;

var k,i:integer;
var
a:array[1..6] of real;
Var sp, so:real;
Label lb1;
Begin
Clrscr;
k:=6;i:=1;
a[1]:=2.5; a[2]:=-3.4; a[3]:=-7.1;
a[4]:=0.5; a[5]:=-4.7; a[6]:=6;
sp:=0;
so:=0;
lb1:
if a[i]>=0 then sp:=sp+a[i] else so:=so+a[i];
i:=i+1;
if i<=6 then goto lb1;
writeln(' sp=',sp:5:2,' ','so=',so:5:2);
end.
Sp= 9.00 So=-15.20

29
Глава 5. Оператор цикла

5.1. Структура счетного оператора цикла FOR

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


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

FOR X:= m1 TO m2 DO

X – простая переменная, называемая параметром цикла;


m1 – начальное значения параметра цикла;
m2 – конечное значения цикла.
Здесь служебные слова FOR (для) TO (до) DO (выполнить)
m1, m2 должны получать значения до начала выполнения оператора FOR и не менять эти
значения в процессе выполнения оператора цикла.
Обычно m1 и m2 являются переменными целого типа, а шаг изменения от начального
до конечного равен 1( h=1 ).
Выполнение оператора цикла можно представить в виде следующей схемы

X: =m1

тело цикла

X: =X+1

да
X≤
m2
нет

следующий
оператор

30
Если шаг h=-1, т.е. значение управляющей переменной убывает, то конструкция оператора
цикла следующая:

FOR X:=m1 downto m2 DO

Здесь m2 должно быть меньше m1.


Пример 5.1. Здесь представлена программа с использованием оператора цикла для
вычисления суммы квадратов чисел от 1 до 4. S=12+22+32+42
Program PR51; Комментарий
Uses Crt;
var s, x: integer; X= 1 S= 0+1*1= 1
Begin X= 2 S= 1+2*2= 5
ClrScr; X= 3 S= 5+ 3*3= 14
s:=0; X= 4 S= 14+ 4*4= 30
for x:=1 to 4 do X= 5 5 > 4 – происходит выход из цикла и
begin управление передается следующему оператору.
s: = s+sqr(x); В данном случае, это оператор вывода.
end;
writeln (' s=',s);
End.
Результат: S=30

Чтобы получить на экране или на печать данные, получение в комментариях, необходимо


включить оператор вывода в оператор цикла.
Program PR51A;
Uses crt;
var s,x:integer;
begin
ClrScr;
s:=0;
for x:=1 to 4 do
begin
s:=s+sqr(x);
writeln(' s=',s);
end;
end.
Результат: s=1 s=5 s=14 s=30

31
Пример 5.2. Составить программу вычисления суммы обратных квадратов чисел от 1 до
15.

S=1+ + +…+ .
Программа Блок-схема

Program Pr52;
Uses Crt; Начало
var k:integer;
s:real;
begin S:=Ø
ClrScr;
writeln(' Сумма обратных квадратов');
writeln;
s:=0; k: =1
for k:=1 to 15 do
s:=s+sqr(1/k);
writeln(' s=',s:8:4);
end.
S: = S +
Результат :

Сумма обратных квадратов


S=1.5804.
k:= k+1

Да
k≤
15

Нет

Вывод S

Конец

32
Пример 5.3. Составить таблицу значений функции y =x2+5
на отрезке [6, -2] с шагом h=-1.

Program Pr53;
Uses Crt;
Var y, x: integer;
begin
Clrscr;
for x:= 6 downto -2 do
begin
y:= x*x+5;
writeln(' x=',x:4,' y=',y:4);
end;
end.
x= 6 y= 41
x= 5 y= 30
x= 4 y= 21
x= 3 y= 14
x= 2 y= 9
x= 1 y= 6
x= 0 y= 5
x= -1 y= 6
x= -2 y= 9

33
Пример 5.4. Найти значение функции
Y =5х3+
при x= -1.2, 0.5, 1.4, 2.7.

Объединим значения х в массив Х, состоящий из четырех элементов.

Program Pr54;
Uses Crt;
var y:real; i:integer;
var x:array[1..4] of real;
begin
Clrscr;
writeln(' Вычисление значений функции' );
writeln;
x[1]:=-1.2; x[2]:=0.5;
x[3]:=1.4; x[4]:=2.7;
for i:=1 to 4 do
begin
y:=5*x[i]*x[i]*x[i]+sqrt(2+x[i]);
writeln(' x=',x[i]:4:1,' y=',y:9:4);
end;
end.
Вычисление значений функции

x=-1.2 y= -7.7456
x= 0.5 y= 2.2061
x= 1.4 y= 15.5639
x= 2.7 y= 100.5829

34
Пример 5.5. Вычислить сумму
k
4 ∑n=1 sin kn
S=∑k =1
k!

S1= - сумма. f=1*2*3…=k! – факториал

Program Pr55;
Uses crt;
var k,n:integer;
var s,s1,f:real;
begin
Clrscr;
s:=0;
s1:=0;
f:=1;
for k:=1 to 4 do

begin
for n:=1 to k do
begin
s1:=s1+sin(k*n);
f:=f*k;
s:=s+s1/f;
end;
end;
writeln(' ','s=', s:8:5);
end.
S = 2.09766

35
Пример 5.6. Три матрицы A, B, C, имеют 2 строки и 2 столбца каждая. Вычислить

элементы матрицы С по формуле Сi,j= , где i,j =1,2


Program Pr56;
Uses Crt;

Var i, j, k: integer;
Var a: array [1..2, 1..2] of real;
Var b: array [1..2,1..2] of real;
Var c: array [1..2,1..2] of real;
Begin
Clrscr;
a[1,1]:=1.2; a[1,2]:=2.1;
a[2,1]:=4.01; a[2,2]:=3.13;
b[1,1]:=12.3; b[1,2]:=0.81;
b[2,1]:=3.05; b[2,2]:=2.06;
for i:=1 to 2 do
begin
for j:=1 to 2 do
begin
c[i,j]:=0;
for k:=1 to 2 do
c[i, j]:=c[i, j]+a[i, k]*b[k, j];
writeln('i=',i,' j=',j,' ','c[i, j]=',c[i, j]:8:3);
end;
end;
End.
i=1 j=1 c[ i,j ]=21.165
i=1 j=2 c[ i,j ]=5.298
i=2 j=1 c[ i,j ]=58.870
i=2 j=2 c[ i,j ]=9.696

36
Пример 5.7. Составить таблицу значений функции y=2x+sin(x2) на отрезке [a,b] с
шагом h.
a=-0.5; b=2.5; h=0.5.
Используя данные задачи, можно определить количество циклов

k= k=6+1=7.

Program Pr57;
Uses Crt;
var a,b,x,y,h:real;
var k:integer;
Begin
Clrscr;
writeln('Вычисление значений функции');
h:=0.5; b:=2.5;
a:=-0.5;
x:=a;
for k:=1 to 7 do
begin
y:=EXP(x*ln(2))+sin(x*x);
writeln(' x=',x:5:2,' y=',y:6:3);
x:=x+h;
end;
End.

Вычисление значений функции

x =-0.50 y= 0.955
x= 0.00 y= 1.000
x= 0.50 y= 1.662
x= 1.00 y= 2.841
x= 1.50 y= 3.607
x= 2.00 y= 3.243
x= 2.50 y= 5.624

37
5.2. Цикл с предусловием

Оператор цикла While.

While <условие> DO <оператор>

While – пока DO – выполнить;


<условие> - выражение логического типа;
<оператор> - произвольный оператор Турбо Паскаля.
Если выражение <условие> имеет значение TRUE (истина ДА), то выполняется
<оператор>, после чего вычисление выражения <условие> и его проверка повторяются.
Если <условие> имеет значения FALSE (ложь НЕТ), оператор While прекращает свою
работу.
Пример 5.8. Найти сумму чисел от 1 до 10 с помощью цикла While … DO.

Program Pr58;
Uses Crt;
var i, s:integer;
begin
Clrscr;
s: =0;
i: =0;
while i<10 do
begin
i:=i+1;
s:=s+i;
end;
writeln (' s=',s);
end.
Результат: S=55.
Примечание. Цикл с предусловием While … DO используется, если неизвестно
количество циклов. В цикле с предусловием цикл работает до тех пор, пока выполняется
условие. В рассматриваемом примере условие i<10. Пока это условие выполняется, цикл
работает. Если условие не выполняется, то машина переходит к выполнению следующих
операторов программы.

38
Пример 5.9. Вычислить число π, пользуясь формулой Грегори
.
Вычисление необходимо прекратить, как только абсолютная величина очередного члена
ряда станет меньше чем 0.5*10-4.
Комментарий:
Snak – знак
k – количество операций в цикле, что характеризует количество членов разложения ряда.
Program Pr59
Uses Crt;
const
c=0.5E-7; .
, var s,s1:real;
snak,k:integer;
begin
Clrscr;
snak:=-1;
s:=1.0;
s1:=1.0;
k:=1;
while abs(s1) > c do
begin
s1:=snak/(2*k+1);
s:=s+s1;
snak:=-snak;
k:=k+1
end;
s:=4*s;
Writeln (' PI=',s:10:8);

End.
PI=3.14169264 k=10001

Член ряда, котрий стал меньше c=0.5*10-4 находится на 10001 месте ряда π /4.

39
5.3. Цикл с послесловием
Структура цикла следующая

REPEAT <операторы> UNTIL <условие>


Опера
тор (или группа операторов), который следует после служебного слова REPEAT (повторять),
выполняется при входе в оператор цикла хотя бы один раз, и только после этого вычисляется
булевское выражение, следующее за служебным словом UNTIL (до тех пор, пока). Если
булевское выражение имеет значение false (ложь, НЕТ), оператор или группа операторов
выполняется вновь и так до тех пор, пока булевское выражение примет значение true (истина,
ДА). После этого программа переходит к выполнению следующих операторов.
Пример 5.10. Найти сумму чисел от 1 до 50 с использованием цикла типа REPEAT …
UNTIL.

Program Pr510;
Uses Crt;
var k,s:integer;
begin
Clrscr;
writeln('Сумма чисел от 1 до 50');
writeln;
k:=0;
s:=0;
repeat
k:=k+1;
s:=s+k;
until k=50;
writeln(' ','s=',s);
end.

Сумма чисел от 1 до 50

S=1275.

40
Пример 5.11. Вычислить сумму четных степеней переменной х
2k
S= , когда очередное значение степени x2k не станет больше 104.
Принять х=2.

Program Pr511;

Uses Crt;

var k:integer;

var x,s:real;

begin

Clrscr;

x:=2;

s:=1;

k:=0;

repeat

k:=k+1;

s:=s+exp(2*k*ln(x));

until

exp(2*k*ln(x))>1E04;

writeln(' ','k=',k,' ','s=',s:5);

end.

Результат: k=7; S=2.2E+04.

41
Пример 5.12. Найти корень кубический из числа N с точностью до 0,0001 по формуле
N
2x k 
x 2k
x k 1 =
3
xk – предыдущее значение, xk+1 – последующее значение.

Пусть надо найти корень кубический из N=128 точностью h=1*10-4.


k– количество циклов
Program Pr512;
Uses Crt;
var x0,x,N,h:real;
var k:integer;
begin
Clrscr;
N:=128;
h:=1E-04;
writeln(' Корень кубический ');
x:=N;
k:=0;
repeat
x0:=x;
x:=(2*x0+N/(x0*x0))/3;
k:=k+1;
until abs(x-x0)<h;
writeln(' N=',N:8:2,' x=',x:8:4,' k=',k);
end.
. Корень кубический
N=128,00 x=5.0397 k=12

42
Пример 5.13. Смотрите пример 4.1 главы 4.
Дан массив А[1..2]. Сформировать массив В[1..2, 1..2] по правилу b(i,j)=аi – 3aj.
i= 1, 2; j= 1, 2; a[1]= 3.4; a[2]= 4.2.

Program Pr 5.13;

Uses Crt;
var i,j:integer;
var a:array[1..2] of real;
var b:array[1..2,1..2] of real;
begin
Clrscr;
writeln(' MAССИВ B');

a[1]:=3.4; a[2]:=4.2;
for i:=1 to 2 do
for j:=1 to 2 do
b[i,j]:=a[i]-3*a[j];
writeln(' b[1,1]=',b[1,1]:6:2,' b[1,2]=',b[1,2]:6:2);
writeln(' b[2,1]=',b[2,1]:6:2,' b[2,2]=',b[2,2]:6:2);
end.
MAССИВ B

b[1,1]= -6.80 b[1,2]= -9.20

b[2,1]= -6.00 b[2,2]= -8.40

43
Пример 5.14. Написать программу, которая сначала обеспечит ввод шести чисел в
одномерный массив, а затем складывать и выводить результат на экран.
Program Pr514;
Uses Crt;
const N=6;
var i,s:integer; . Комментарий:
var A:array[1..N] of integer; S – сумма чисел
Begin N – количество чисел.
Clrscr; A – массив из шести элементов.
writeln('Введите элемент '); Числа: 6, 12, 18, 24, 30, 36, которые
for i:=1 to N do будут элементами массива A[I].
Begin
write( 'i '); Ввод массива чисел с экрана
read(A[i]); Организация массива A[I]
end;
s:=0;
for i:=1 to N do
s:=s+A[i];
writeln (' s=',s);
end;
End.

Результат: S=126.

44
i−0 . 1
Пример 5.15. Последовательность x1 , x 2 , . . . образована по закону xi = 3
i ∣tg 2i∣
( i= 1,2…). Известно действительное число E>0. Записать члени последовательности
x1 , x 2 , . . . остановившись после первого члена , для которого виполняется ∣x i∣E .
Принято: E= EP =0.01.

Program Pr515;

Uses Crt;
var i:integer;
var ep, x:real;
Begin
Clrscr;
ep:=0.01;
x:=1;
i:=1;
while x>ep do
begin
x:=(i-0.1)/(i*i*i+abs(sin(2*i)/cos(2*i)));
writeln(x:6:3);
i:=i+1;
end;
End.

0.283 , 0.207 , 0.106, 0.055 , 0.039 , 0.027 , 0.020 , 0.015 , 0.012 , 0.010

45
Пример 5.16. Задано натуральное число n. Найти первую цифру числа n.
Для примера взято число 82953210
Program Pr516;
Uses Crt;
const N=8;
Label
lb1,lb2;
var A:array[1..N] of integer;
var B:array[1..9] of integer;
var i:integer;
Begin
Clrscr;
for i:=1 to N do
begin
write('A[i]=');
read(A[i]);
end;
for i:=1 to 9 do
B[i]:=i;
i:=1;
lb1:
if B[i]=A[1] then goto lb2;
i:=i+1;
if i<=9 then goto lb1;
lb2:
writeln;
writeln('A[1]=',B[i]);
End.
A[i]=8, A[i]=2, A[i]=9, A[i]=5, A[i]=3, A[i]=2, A[i]=1, A[i]=0.

Ответ: A [1]=8.

46
n
−1 k  k 1
Пример 5.17. Задано натуральное число n. Вычислить выражение ∑ k!
.
k =0

n
−1 k  k1  3 4 −1k  k 1
∑ k!
= 1−2 − ....
2! 3! k!
...
k =0

Обозначим сумму первых n членов через S. Общий член ряда обозначим через U.

−1 k k −1 k  k 1 
U k −1 = ; U k= .
 k −1 ! k!

Чтобы получить каждый последующий член ряда надо предыдущий умножить на один и тот
же

Uk −1k  k 1 k −1! k 1


множитель = =− 2 .
U k −1 k
k ! −1 k −1
k

Program Pr 517;

Uses Crt;
var s,u:real;
const n=5;
var k:integer;
Begin
Clrscr;
s:=1;
u:=1;
for k:=1 to n do
begin
u:=u*(-(k+1)/k/k);
s:=s+u;
end;
Writeln('s=',s:8:4);
End.
S= -0.0083.

47
Пример 5.18. Заданы целые числа a 1 , a 2 . . . . a n . Вычислить сумму тех чисел
2
последовательности, которые удовлетворяют условию ∣a i∣i .
Заданные числа составляют массив A(N) . N может принимать любое значение.
В этой программе N=6.
Program Pr518;
Uses Crt;
const N=6;
Label
lb1;
var A:array[1..N] of integer;
var S,i:integer;
Begin
Clrscr;
for i:=1 to N do
begin
write('A[i]=');
read(A[i]);
end;
i:=1; S:=0;
lb1:
if abs(A[i])<i*i then
S:=S+A[i];
i:=i+1;
if i<= N then goto lb1;
writeln;
writeln(' S=',S);
End.
A[i]=2, A[i]=5, A[i]=3, A[i]=-4 , A[i]=8, A[i]=-5.
Результат: S=2

48
Глава 6. Подпрограммы

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

В различных местах одной и той же программы многократно может выполняться одна и та


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

PROCEDURE < имя > < список параметров > < блок операторов >

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

FUNCTION < имя > < список параметров > <имя типа > < блок
операторов >

Например: PROCEDURE TRK (a, b, c, d : real; var s: real );


< Блок операторов >
FUNCTION KRT ( a, b, c, d: real ) : real;
< Блок операторов >
Имя процедуры или функции выбирается программистом.
Список параметров содержит перечень исходных данных, с которыми работает
программа, и переменные для обозначения результата. Параметры, перечисленные в списке,
называются формальными.

49
Если описывается подпрограмма в виде функции, то значение результата приобретает имя
функции, и поэтому должен быть определен тип функции. Функция всегда имеет
единственное значение, которое может быть скалярного, ограниченного или ссылочного типа.
Результатом выполнения подпрограммы PROCEDURE может быть несколько значений
( напимер, таблица значений, массив).
Содержательная часть подпрограммы представляет собой блок, который содержит раздел
описания данных и раздел операторов.
Заканчивается блок процедуры или функции символом ;

6.2. Примеры программ, содержащих подпрограммы


Пример 6.1. Найти периметр треугольника по координатам его вершин:
A( 2.5 ; 3.0) , B (-1.2 ; -4.0), C (5.0 ; -2.5).
Периметр треугольника Р = АВ + ВС + СА, т.е отыскание длины отрезка осуществляется
три раза. Можно оформить это действие в виде подпрограммы.
Расстояние между двумя точками находится по формуле:
B
l1 l2 А(ХА,YA) XA=2.5 , YA=3.0

A B(XB,YB) XB = -1.2 , YB= -4.0

l3 C C(XC,YC) XC=5.0 , YC= -2.5

Program Pr61;
Uses Crt;
var L, p, L1, L2, L3:real;
var xa, ya, xb, yb, xc, yc:real;
PROCEDURE DLN(x1, x2, y1, y2:real;var L:real);---------------------------
begin
L:=sqrt(sqr(x2-x1)+sqr(y2-y1));
end;-------------------------------------------------------------------------------
Begin
Clrscr;
writeln(' Вычисление периметра треугольника ');
xa:=2.5; xb:=-1.2;
ya:=3.0; yb:=-4.0;

50
DLN (xa, xb, ya, yb, L);
L1:=L;
xb:=-1.2; xc:=5.0;
yb:= -4.0; yc:= -2.5;
DLN (xb, xc, yb, yc, L);
L2:=L;
xa:= 2.5; xc:= 5.0;
ya:= 3.0; yc:=- 2.5;
DLN(xa, xc, ya, yc, L);
L3:=L;
p:=L1+L2+L3;
writeln(' L1=',L1:6:2,' L2=',L2:6:2,' L3=',L3:6:2);
writeln(' p=',p:7:2);
End.
Вычисление периметра треугольника
L1= 7.92 L2= 6.38 L3= 6.04
p= 20.34
Комментарий.

1) DLN – имя оператора PROCEDURE.

2) В имени DLN процедуры X1, X2, Y1, Y2 – формальные параметры.

3) L – длинна стороны треугольника, которая насчитывается в процессе работы оператора


PROCEDURE.

4) В программе трижды происходит обращение к процедуре DLN и формальные


параметры X1, X2, Y1, Y2 заменяются фактическими параметрами.

51
Пример 6.2. Условие задачи такое же, как и в примере 6.1. Рассмотрим другое обращение
к оператору PROCEDURE.

Program Pr62;
Uses Crt;
Var L, p, L1, L2, L3: real;
PROCEDURE DLN (x1, x2, y1, y2: real; var L: real); -------------------------
begin
L:=sqrt(sqr(x2-x1)+sqr(y2-y1));
end;
Begin ------------------------------------------------------------------------------
Clrscr;
writeln(' Периметр треугольника');
DLN (2.5, -1.2, 3.0, -4.0, L);
L1:=L;
DLN (-1.2, 5.0, -4.0, -2.5, L);
L2:=L;
DLN (2.5, 5.0, 3.0, -2.5, L);
L3:=L;
p:=L1+L2+L3;
writeln(' p=',p:7:4);
end.

Периметр треугольника
P=20.3381

Пример 6.3. Условие задачи такое как и в примере 6.1. Для определения периметра
треугольника необходимо воспользоваться подпрограммой с использованием функции.
Program Pr63;

Uses Crt;
Var p, L1, L2, L3: real;
FUNCTION DLN(x1, x2, y1, y2: real):real;-----------------------------
begin
DLN:= sqrt(sqr(x2-x1)+ sqr(y2-y1))

52
end; --------------------------------------------------------------------
begin
Clrscr;
writeln(' Периметр треугольника');
L1:=DLN(2.5, -1.2, 3.0, -4.0);

L2:=DLN(-1.2, 5.0, -4.0, -2.5);

L3:=DLN(2.5, 5.0, 3.0, -2.5);

p:=L1+ L2+ L3;

writeln(' p=',p:7:4);
end.

Периметр треугольника
P = 20,3381

Комментарий.

1) В заголовке функции DLN определён список входных параметров, их тип и тип


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

2) Если подпрограмма имеет вид функции, то обращение к функции происходит


аналогично обращению к стандартным функциям типа sin, cos, sqr, ln и т.д. В том месте
выражения, где это необходимо, записывается имя функции, вслед за которым в
круглых скобках перечисляются фактические параметры, нужные для её вычисления.

3) Значения функции DLN присваиваются длинам сторон L1, L2, L3.

53
Пример 6.4. Найти радиусы описанной и вписанной в треугольник окружностей.
Стороны треугольника a, b, c . a = 3.0, b = 4.0, c = 5.0
Радиус описанной окружности определяется по формуле:

R= ;
Радиус вписанной окружности определяется по формуле:

r= ;
где S – площадь треугольника.
Площадь треугольника можно вычислить по формуле Герона:
S= ;

где p = - полупериметр треугольника.

Задачу решить используя процедуру вычисления площади треугольника.


Обозначим имя процедуры через PLTR.

Program Pr64;

Uses Crt;
var a, b, c, s: real;
var Rop, Rwp: real;
PROCEDURE PLTR(x, y, z: real; VAR S:real);----------------------------------------
const
k=0.5;
var
p:real ;
r:boolean;
begin
r:=(x+y>z) and (x+z>y) and (y+z>x);
if r
then
begin
p:=k*(x+ y+ z);
S:=sqrt(p*(p-x)*(p-y)*(p-z))

54
end
else
S:=-1.0;
end; -------------------------------------------------------------------------------------

begin
Clrscr;
write('a=');
readln(a);
write('b=');
readln(b);
write('c=');
readln(c);
PLTR (a, b, c, S);
if S <=0 then writeln(' нет')
else
begin
Rop:=(a*b*c)/(4*S);
Rwp:=(2*S)/(a+b+c);
end;
writeln(' Rop=',Rop:6:2);
writeln(' Rwp=',Rwp:6:2);
readln;
end.
a= 3, b= 4, c= 5
Rop= 2.50, Rwp= 1.00

Пример 6.5. Решить квадратное уравнение + bx + c = 0 при заданных значениях


коэффициентов а) а = 1, b = -7, c = 12;
б) а = 1, b = -2, c = 1;
в) а = 2, b = 4, c = 7.

−b±  b 2 −4 ac
x1,2 = Детерминант D= КРК – корень
2a
квадратный.

: PROCEDURE КРК решает квадратное уравнение.

55
PROGRAM Pr65;

Uses Crt;

Var a,b,c:real;

Var x1,x2,D:real;

PROCEDURE KRK( a, b, c: real; var x1, x2:real);

begin

D:=b*b-4*a*c;

if D<0

then

writeln(' Действительных корней нет')

else

x1:=(-b+sqrt(D))/(2*a);

x2:=(-b-sqrt(D))/(2*a);

end;

BEGIN

Clrscr;

writeln('Решение квадратного уравнения');

write('a='); readln(a);

write('b='); readln(b);

write('c='); readln(c);

KRK(a,b,c,x1,x2);

writeln(' x1=',x1:6:2,' x2=',x2:6:2);

readln;

END.

Решение квадратного уравнения: a=1, b=-7, c=12. x1= 4.00, x2= 3.00

56
Решение квадратного уравнения : a=2, b=4, c=7. Действительных корней нет

Пример 6.6. Найти площадь пятиугольника ABCDE, если известны его стороны и две
диагонали. Сторонам пятиугольника и диагоналям нададим значения AB=1, BC=1.5, CD=2,
DE=3, EA=2, AC=2, AD=2.5.
Program Pr66;
Uses Crt;
Var ab, bc, cd, de, ea, ac, ad,s:real;
Var S1, S2, S3, SP: real;
Procedure PLtr (x, y, z: real; var S:real);----------------------------
const
k=0.5;
var p:real;
begin
p:=k*(x+y+z);
S:=sqrt(p*(p-x)*(p-y)*(p-z));
end;------------------------------------------------------------------
Begin
Clrscr;
write('ab='); readln(ab) ;
write('bc='); readln(bc);

write('cd='); readln(cd);

write('de='); readln(de);

write('ea='); readln(ea);

write('ac='); readln(ac) ;

write('ad='); readln(ad) ;

PLtr(ab, bc, ac, S);


S1:=S;
PLtr(ac, cd, ad, S);

57
S2:=S;
PLtr(ad, de, ea, S);
S3:=S;
SP:=S1+S2+S3;
writeln( 'S1=',S1:6:3,' S2=',S2:6:3, ' S3=',S3:6:3);
writeln( 'SP=',SP:6:2);
End .
S1= 0.726 S2= 1.952 S3= 2.480 SP= 5.16

58
2. РАЗДЕЛ 2 . СБОРНИК УПРАЖНЕНИЙ ”UP”

2.1. Инструкция к выполнению заданий


Упражнения предназначены для закрепления теоретического материала. По тематике они
строго соответствуют главам раздела 1. Так, после главы 1 следует выполнять упражнения с
шифром ”UP1”, после главы 2- с шифром ”UP2” и т.д

. Упражнения содержат несколько видов заданий.

Пример 1.

1. 1.2Е3 4. 0.7Е-1 7. 12.78

2. 128 5. +0.3 8. –1100

3. -3 6 +17 9 1Е3

Указать, какие из приведенных чисел являются константами целого типа?


Читатель должен, просматривая числа в порядке возрастания их номеров от 1 до 9, записать
номера тех констант, которые считает целого типа. В данном случае такими будут 2 3 6 8.
Эти цифры образуют число 2368. Это число и есть ответом на поставленный вопрос.

Пример 2. Вычислить значение выражения

20- sqrt(36)*sin(pi/6)

pi соответствует известному числу π . При выполнении данного упражнения читатель,


зная порядок выполнения операций, рассуждает так:

Sqrt(36)=6; sin(pi/6)=0.5; 6*0.5=3; 20-3=17 .

Ответ 17.

Пример 3. Какое значение получит переменная Y в результате выполнения программы?


A:=2;

B:=-3;

C:=-2;

X:=B/A;

X:=X+0.5;

Y:=A*X*X+B*X+C;

59
В этом случае читатель должен представить, что он машина, и выполнить все указанные
действия так, как их выполняет машина, и получить результат.
A=2

B=-3

C=-2

-3/2=-1.5

X= -1.5+0.5=-1

X=-1

2*(-1)*(-1)+(-3)*(-1)-2=2+3-2=3

Y=3

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

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


следующей программой:
X:=2;

Z:=X+1;

IF Z<4 THEN Y:=Z*Z+1 ELSE Y:=Z+5;

WRITE (‘ Y=’, Y);

END.

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


1. Y:=Z+5
2. Y:=Z*Z+1
Так как Z=2+1=3, 3<4, то вычисляется значение функции Y=Z*Z+1, ее номер 2.

2.2. Упражнения к главе 1 ”UP-1”: Константы и переменные, арифметические

выражения в языке ПАСКАЛЬ

“UP-1.1”. Какие из приведенных чисел являются константами целого типа?

1 2.1E3 4 0.7E-1 7 22.78

2 128 5 +0.9 8 -2100

3 -350 6 +71 9 1E5

60
“UP-1.2”. Какие из приведенных чисел являются вещественными константами в форме с
фиксированной точкой?

1 12.35 4 -1E5. 7 5

2 -0.75 5 0.71 8 -5.1

3 12E5 6 1315 9 -11.4

“UP-1.3”. Какие из приведенных чисел являются вещественными константами в


экспоненциальной форме?

1 11 4 -0,5E-2 7 2.7E05

2 1.3 5 1050 8 -1.38

3 -1.2E5 6 37.75 9 +3.21E-03

“UP-1.4”. .Какие из приведенных выражений могут служить именами переменных ?

1 5B 4 SIN 7 1AB

2 E6 5 G 8 +LN

3 Л1 6 10 9 L5

“UP-1.5 ”. Какие из приведенных выражений правильно записаны на языке ПАСКАЛЬ?

1 (A+B+C)/2

2 A^ 2C

3 SIN(X+2)*2

4 2COS(A+2)-A

5 X^.Y+Z-5.1

6 (X+Y*3.2-A)B

7 X+Y/(Z*Z)

8 X*X+Y*Y=R*R

9 SQRT(A*2+B*B)

61
“UP-1.6 ”. Вычислить значение выражений:
1 SQR(EXP(3*LN(2)))

2 EXP(3*LN(2+2))+17

3 SIN(PI/6)+COS(PI/3)

4 SIN(PI/4)/COS(PI/4)-EXP(0)

5 100/SQRT(25)/SQR(2)

2.3. Упражнения к главе 2 “UP-2 “:

Операторы присваивания, ввода –вывода. Линейные программы.

“UP-2.1 “. Среди приведенных выражений указать операторы присваивания

1 X:=X+5 5 X+2:=Y

2 Y:=7 6 K+5:=X+Y

3 WRITE(“C=”,C:6:2) 7 WRITE(“A+B”)

4 Z:=SQR(Z)+5.3*X 8 X:=X*X+A*X+B

“UP-2.2 “

1 write (' A=',A:5:2) 5 write(x:6:3,f:7:4)

2 write(a,b,c) 6 write(s,d)

3 writeln 7 write(‘s= ‘, s:6:3, ‘ ‘,’w=’,w:8:4)

4 write (‘ x=', x: 10:5)

1. Какие из операторов вывода, приведенные в таблице, выводят только значения


переменных?

2. Какие из приведенных операторов вывода выводят имена переменных и их значения?

3. Какой оператор определяет пропуск строки?

62
“UP-2.3“. Какое значение получит переменная Y после выполнения следующей
программы?
Х:= 5;

A:= 2;

В:= -1;

У:= A*X+B;

“UP-2.4”. Какое значение получит переменная Y после выполнения следующей


программы?

А:=12;

В:=14;

А:=10;

В:=В+5;

У:=А+В;

END.

“UP-2.5”. Какое значение получит переменная X после выполнения следующей


программы?

A:= 3;

B:= 4;

A:=(A+B)/2+A*2;

X:=SQRT(A+B*B-0.5);

END.

“UP-2.6”. Какое значение получит переменная S после выполнения программы?


A:=5;

B:=6;

S:=A*B;

A:=-1;

B:=3;

S:=S+A*

63
2.4. Упражнения к главе 3 “UP-3”:
Операторы передачи управления. Программы с разветвлениями

“UP-3.1”

1 GOTO L1

2 IF A.>B THEN WRITE(A)

3 IF A=B THEN B=X+Y ELSE B=X/2+Y/3

4 P=3.5*X+Y/2-X*Y

5 IF X<Y AND B>0 THEN GOTO L2

6 WRITE(X,Y,Z)

7 X=A+B-C

8 GOTO L3

9 IF A=B THEN IF B=C THEN A=X ELSE WRITE(A)

а) Какие из приведенных конструкций представляют оператор безусловного перехода?

б) Какие из приведенных конструкций представляют оператор условной передачи управления?

“UP-3.2”. Какое значение получит переменная X в результате выполнения программы?

A:=4;

B:=2;

A:=(A+B)/2+A;

X:=A*SQR(B);

WRITE(X);

END.

“UP-3.3”Какое значение получит переменная X в результате выполнения программы ?

A:=-3;

64
B:=-2;

A:=(B-A)*2-3;

GOTO Lb1;

Lb2:

X:=(A+B)*3;

GOTO Lb3;

Lb1:

B:=B-A;

GOTO Lb2;

Lb3:

END.

“UP-3.4”. Определить значение Y в результате выполнения программы, если. X=2.

READ(X);

IF X>5 THEN Y:=SQRT(X) ELSE Y:=SQR(X);

WRITE(Y);

END.

“UP-3.5”.Значение какой функции вычисляется в данной программе, если Х=6?

READ (X);

IF X<0 THEN GOTO Lb1;

IF X<=5 THEN GOTO Lb2;

Y: = LN(X-4);

GOTO Lb3;

Lb1:

Y: = COS(X);

GOTO Lb3;

Lb2:

Y:=1-0.2*X;

65
GOTO Lb3;

Lb3:

WRITE(Y);

END.

В ответе указать номер правильного ответа.

1. Y: = LN (X- 4) 2. Y: = COS (X) 3. Y: =1- 0.2*X

2.5. Упражнения к главе 4 “UP-4”: Массивы

“UP-4.1”.
1. 3.5+A*B+C[1]*A-C[2

2. 4.8+A1*B-C2/3

3. D11+SIN(X/2+4)-A3

4. B[2,3]*C-(SIN(Y)/COS(Y))/(A[1]+B[1,2])

5. I*J+K*N-A[I,J]+B[K,N]

6. AI+BK*C/SQR(X+Y)

7. F*(M[1]+M[2])/(1-SQR(M[1]*V*V)

8. A[I+J,K+2]*B[I+J]-SQR(K+3)

9. A[I*2,I+J]+B[I+3,I+K]

Среди данных выражений указать выражения

1) содержащие элементы массива;

3 2) содержащие элементы двумерного массива;

4 3) содержащие элементы массива, индексы которых являются


выражениями.

“UP-4.2”. Указать номера элементов массива, которые получат значения в результате


выполнения программы:

VAR A: ARRAJ [1. . 16] OF REAL;

I: =2;

J: =I*I+1;

66
A [J]: =3.5;

K: =J+2;

A [K]: =10.3;

A [I+K]: =7;

END.

“UP-4.3”. Указать наибольшее значение элемента массива A[1..5]], сформированного в


результате выполнения следующей программы:

VAR A:ARRAJ[1..5] OF REAL;

I:=1;

Lb1:

A[I]:=I*I-3*I+1;

I:=I+1;

IF I<=4 THEN GOTO Lb1;

END.

“UP-4.4”. Даны три массива A[1..3,1..4], B[1..7], C[1..2,1..6]. Какие из переменных,


указанных ниже, имеют смысл в соответствии с данными массивами?

1 A[1,1] 6 C[2]

2 B[8] 7 B[3,1]

3 C[3,7] 8 A[2,1]

4 B[6] 9 C[2,5]

5 A[3,5]

“UP-4.5”. Указать значение величины D после выполнения следующей программы:

VAR A: ARRAJ[1..2,1..2] OF REAL;

A[1,1]:=3;

A[1,2]:=4;

A[2,1]:=2;

67
A[2,2]:=-1;

D:=A[1,1]*A[2,2]-A[2,1]*A[1,2];

WRITE(D);

END.

2.6. Упражнения к главе 5 “UP-5”: Операторы цикла

“UP-5.1”.

1. Y:=5;

2. FOR A:=1 TO 12 DO

3. BEGIN

4. Y:=Y+A;

5. A:=A+3;

6. END;

7. WRITE(Y);

1. В данной программе указать номер оператора цикла.

2. Указать номер оператора, который формирует следующее значение параметра цикла.

3. Указать имя параметра цикла.

4. Сколько раз выполняется оператор 4?

5. Чему равно значение параметра цикла, при котором оператор 4 выполняется

последний раз?

“UP-5.2”. Какое значение получит переменная S в результате выполнения программы?

S:=0;

FOR K:=1 TO 9 DO

BEGIN

S:=S+K;

K:=K+2;

68
END;

WRITE(S);

“UP-5.3”. Задан двумерный массив A[1..3,1..3]=3,5,7,4,6,-1,-2,5,-4. Какое значение


получит переменная S в результате выполнения следующей программы?

S:=0;

BEGIN

FOR I:=1 TO 3 DO

J:=1;

S:=S+A[I,J];

END;

.
2.7. Ответы к упражнениям ”UP ”

UP-1.1 2368
UP-1.2 12589
UP-13 3479
UP-1.4 25
UP-1.5 1379
UP-1.6 1) 64 , 2) 81 , 3) 1 , 4) 0 , 5) 5

UP-2.1 1248

UP-2.2 1) 256 , 2) 147, 3) 3.

UP-2.3 9

UP-2.4 29

UP-2.5 5

UP-2.6 27

69
UP_3.1 a) 18 , b) 2359

UP-3.2 28

UP-3.3 -6

UP-3.4 4

UP_3.5 1

UP_4.1 1) 145789 2) 147

3) 4589 4) 89

UP-4.2 579

UP-4.3 5

UP-4.5 -11

UP-5.1 1). 2 , 2) 5 , 3) A , 4) 4 , 5) 10.

UP-5.2 25

UP-5.3 5

70
Раздел 3. Сборник лабораторных работ по Турбо Паскалю
3.1. Требования к оформлению лабораторных работ

Раздел 3 содержит тексты лабораторных работ.Лабораторные работы по тематике


соответствуют главам раздела 1. Исключение составляет лабораторная работа ”LAB-4”,
объединившая главы ”Массивы” и ”Операторы цикла”.

В основном лабораторные работы содержат 15 вариантов. Количество заданий в каждом


варианте зависит от их сложности.

Предполагается,что после изучения теоретического материала и проработки


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

К каждой лабораторной работе приводится образец выполнения работы, даются


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

В помощь читателю в разделе 4 приводятся решения (программы) всех задач


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

3.2. Лабораторная работа “LAB_1“:


Записи арифметических выражений на языке Турбо Паскаль

Цель работы: овладение навыками записи арифметических выражений на языке

Турбо Паскаль.
Контрольные вопросы.

1. Из каких букв и цифр состоит язык ТП?

2. Какими символами изображаются знаки действия?

71
3. Перечислить стандартные функции языка ТП.

4. Какова форма представления чисел?

5. Что может послужить именем переменной?

6. Какова структура арифметического выражения?

7. Каков порядок выполнения операций при вычислении арифметических выражений?

Работа содержит два задания.

Задание 1-2. Записать на языке ТП заданные арифметические выражения.

Вариа Шифр Арифметическое выражение


нт
LAB_111
1
LAB_112 0,25( x-1,75 ln (9,8+ ))

LAB_121

2 LAB ln
_122
LAB
_131
3 LAB
_132
4 LAB_141

LAB_142

LAB_151 sin +
5 LAB_152 1 + x + ln

LAB_161

6 LAB_162 y – 2 arctgx – sin ln


LAB_171

7
LAB_172 xtg +2ln

72
LAB_181

LAB_182

LA
B_191
9
LAB_192 y–

LAB_1
101
10 LAB
_1102

11 LAB_1111

LAB_1112 x sin x/(

LAB-1121

12 3
LAB-1122  a b 2 / c  sin x cos x

13 LAB_1131

LAB_1132

LAB_1141

14 LAB_1142 x ln
LAB_1151

15 LAB_1152

73
3.3 . Лабораторная работа “LAB_2“:
«Оператора присваивания, ввода – вывода»
Цель: овладение навыками записи операторов присваивания, ввода-вывода и
использовании линейных программ.
Контрольные вопросы.

1. Какова структура оператора присваивания?


2. Как выполняется оператор присваивания?
3. Каково назначение оператора присваивания?
4. Что происходит с прежним значением переменной, когда этой переменной
присваивается новое значение?
5. Какова структура оператора ввода?
6. Как осуществляется выполнение оператора вывода?
7. Как выводится на экран дисплея комментарий к тексту?
8. Как выполняется оператор вывода?

Работа состоит из двух заданий.

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


параметров.
Задание 2. Вычислить значение Z = Z1+Z2, где Z1 = F1 (X1); Z2 = F2 (X2).

Вар. Шифр Функции Исходные данные


LAB_211
1
LAB_21
2 x 2 =5, 72

.
LAB_22 x = 2; a = 248;
2 1 b =87,2

LAB_22
2 5,87
LAB_231 x = 5; a = 23,5;
3 b =0,129; c = 350
LAB_232

74
6,31

LAB_241 x = 2,57;
4 y = 13,76

LAB_242
2,79
LAB_251 a = 1,25; b = -1,75;
x = 4,78
5
LAB_252 6,31

LAB_261 x = 2,15;
6 y = 9,78.

LAB_262 1,76

LAB_271 a = 1,9;
7 b =0,04; c = 6
LAB_272
2,56
LAB_281 m = 1,2;
8 n = -3,76
LAB_282
2,57
LAB_291 a = 0,7;
9 b = -3,1
LAB_292
3,93
LAB_2101 a = 3,2;
10 b =2; c = 0,75
LAB_2102
2,74
LAB_2111 x = 3,35; y = -0,27;
11 a = 2,1
LAB_2112
1,74
LAB_2121 x = -1,7; y = 3,2;
12
LAB_2122

75
2,64

LAB_2131 x = -0,025; y = 2,12;


13 a = 3,861
LAB_2132
1,25
LAB_2141 x = 0,34; y = 0,95;
14 a = -0,5
LAB_2142
3,11
LAB_2151 a = 9;
15 b =3,5; c = -1,2
LAB_2152
1,12

76
3.4. Лабораторная работа “LAB-3“: Операторы передачи управления
. Программы с разветвлениями

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


помощью операторов передачи управления.
Контрольные вопросы.

1. С помощью какого оператора осуществляется безусловная передача управления в


программе?
2. Какова структура полного оператора условной передачи управления?
3. Как выполняются условный оператор передачи управления?
4. Какой вид имеет неполный оператор условной передачи управления?
5. Какой вид имеет условие в операторе условной передачи управления?
Задание: вычислить значение функции Y при заданном значении t.
Варианты задание приведены в таблице.
Образец выполнения лабораторной работы “LAB-3“

Вычислить значение функции:

,
Блок-схема

начало

Т = 1,27

да

нет

Вывод

конец

77
При заданном значении t вычисляется значение Х и в зависимости от полученного
значения Х, вычисляется Y по одному из аналитических выражений.

Вар. Шифр Функция x T

1 LAB_31 1,5

2 LAB_32 0,3

3 _33 -1,1

4 LAB_34 0,7

5 LAB_35 0,9

6 LAB_36 -3

7 LAB_37 -0,64

8 LAB_38 0,93

78
9 LAB_39 -3,59

10 LAB_310 Y= 0,85

11 LAB_311 5,74

12 LAB_312 Y= -1,75

13 LAB_313 Y= -3,75

14 LAB_314 = 3,75

15 LAB_315 Y= 1,27

3.5. Лабораторная работа LAB_4:

79
”Массивы. Оператор цикла”
Цель работы: овладения навыками описания и формирования массива,
программирование циклических алгоритмов с помощью оператора цикла.
Контрольные вопросы

1. Что называется массивом?

2. Как в программе описывается массив?

3. Как можно ввести массив в память машины?

4. Какова структура оператора цикла?

5. В чем состоит выполнение оператора цикла?

6. Можно ли досрочно выйти из цикла?

7. Можно ли войти в цикл, минуя его начало?

Работа состоит из двух заданий.

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


Х.
a = 1,2; b= 2,4; c= 5,4.

Вар. Функции Независимая переменная

1 y= 0,2; 1,3; 1,8; 2,8; 3,6

2 LAB_421 y= x 5,8; 5,5; 6,1; 6,5; 7,6


3,8; 0,15; 15,1;
3 LAB_431 y=
17,8; 39,2
8,1; 12,3; 15,2;
4 LAB_441 y=
31,5; 39,08

80
Вар. Шифр Функции Независимая переменная
5 y= -3,1; 2,52; 5,81; 7,5; 9,4

6 LAB_461 y= 1,8; 1,16; 1,15; 1,35; 1,6

7 LAB_471 y= 1,0; 1,8; 2,2; 2,5; 7,5

8 LAB_481 y= a ,2; 3,0; 25; 8; 70

9 LAB_491 y= xtg + 2 0,5; 0,6; 0,9; 1,1; 1,5


2,15; 2,3; 2,35;
10 LAB_4101 y= 2arctgx – sin
2,37; 2,5
11 LAB_4111 y= 1+x+ -16; -9; 0,5; 2,4; 3,4

12 LAB_4121 y= -2,75; -1,05; 1,65; 3,25

13 LAB_4131 y= 0; -3,25; 1,23; 5,2; 4,6

14 LAB_4141 y= -1,5; 0; 1,2; 3,5; 5

Образец выполнения работы

Задание 1. Вычислить значения функции

y=0,25(x-1,75 при x=-1,0; 0,75; 2,1; 4,75; 5,12.

Все значения х удобно оформить в виде массива. Назовем его Х.

Размерность этого массива N=5.

Для ввода этого массива в память машины используем оператор цикла,

где параметром цикла будет номер элемента массива 1 ≤ i ≤ 5.

PROGRAM LAB_4ob1;

Uses Crt;
Const N=5;

81
var i,k:integer;
y:real;
X:array[1..n] of real;
BEGIN
Clrscr;
FOR I:=1 TO N DO
begin
write('i=');
read(X[i]);
end;
FOR K:=1 TO N DO

begin

y:=0.25*(X[k]-1.75*ln(9.8+X[k]*X[k]));

writeln(' x=',x[k]:5:2,' y=',y:6:3);

end; END.

x=-1.00 y=-1.291
x= 0.75 y=-0.835
x= 2.10 y=-0.636
x= 4.75 y=-0.334
x= 5.12 y=-0.288

Задание 2. Составить блок-схему и программу решения задачи

Вар. Шифр Условие задачи


Найти сумму нечетных двухзначных чисел.
1 LAB_412
На печать выдать сумму и их количество.
Найти сумму первых десяти членов последовательности
2 LAB_422
.
Используя формулу q, найти первые 10 членов
3 LAB_432
геометрической прогрессии и их сумму,если q=-2.

82
Используя формулу q, найти первые 10
4 LAB_442 членов арифметической прогрессии и их сумму, если
; d =1,5.
Вычислить значения многочлена
P(x) + ,
5 LAB_452 записав его по схеме Горнера
при х=2,5;

Вычислить значение функции y=


6 LAB_462
для х є [-3; 1] с шагом Н=0,5.
Найти количество отрицательных элементов массива
7 LAB_472 и их сумму. 3; -2,7; 5; 11; -1,8; -0,9; 2,3; -15; 14;
-8,7.
Заданы два массива А(5) и В(5).
А(5)= 3; -2,7; 8; -4,1; 5,3; 6,8
8 LAB_482 В(5)= -2; 8; 4,7; -11; 8,9; -15.
Найти сумму S= .
Найти сумму первых пяти членов последовательности
9 LAB_492
при х=3,2.
Заданы два массива А(5) и В(5). Сформировать
новый массив С(5) по правилу
10 LAB_4102
A(5)=7; 8,1; 9,3; -2,7; -0,5; 1,4
B(5)=3; 1,2; 7; 9,3; 1,5; 5,2;
Из массива А(10) выдать на печать отрицательные
11 LAB_4112 элементы, стоящие на нечетных местах.
А(10)=-3; -7; 9; 10; 11; -7,5; 8,1; 3,4; 2; -4; 3,5
Величина х принимает значения 1; 1,2; 1,4; 1,6; 1,8; 2.
12 LAB_4122
Найти соответствующие значения .

Вычислить значение функции на [-4;2]


13 LAB_4132
с Н=0,5 и количество положительных значений
среди вычисленных.
Найти сумму отрицательных значений функции
14 LAB_4142 , принимаемых ею на [-3;3]
с шагом Н=0,5.
Из массива заданных чисел найти среднее арифметическое
15 LAB_4152 положительных чисел.
Заданные числа: 2; 7; -13; -8; 19; 5; -3; 15; -6; 21

83
Задание 2.

Из массива заданных чисел найти среднее арифметическое положительных чисел.


Заданные числа: 2; 7; -13; -8; 19; 5; -3; 15; -6; 21
Оформим заданные числа в виде массива Х(9) и введем в память машины, используя
оператор цикла с параметром i.

S – сумма положительных элементов массива; SA=

SA – искомое среднее арифметическое положительных чисел;


К – количество положительных чисел

Program LAB_4ob2;
Uses Crt;
Const N=9;
var
i,k:integer;
s, sa: real ;
X:array[1..9] of real;

Label lb1

BEGIN

Clrscr;

For i:=1 to N do

begin

write('i=') ;

read(X[i]);

end;

s:=0; k:=0;

For i:=1 to n do

begin

lb1:

84
if X[i] <=0 then

begin

s:=s+X[i];

k:=k+1;

end

else

go to lb1

end;

writeln(' k=',k,' s=',s:6:3);

readln;
END.

k=6 s=11.500

85
Лабораторная работа ”LAB_5”: Подпрограммы

Цель работы: формирования навыков и умений по составлению программ с


использованием функций пользователя и подпрограмм.
Контрольные вопросы:
1. Что такое функция пользователя?

2. Как описывается в программе функция пользователя?

3. Является ли это описание выполняемым оператором?

4. Что такое программа в программе?

5. Какова структура подпрограммы?

6. Как осуществляется обращение к функции пользователя и к подпрограмме?

7. Как осуществляется выход из программы?

8. В чем отличие в полученных результатах после обращения к функции пользователя и к


подпрограмме?

9. Что называется формальными и фактическими параметрами? С какими параметрами


производятся вычисления?

10. Где должны располагаться подпрограммы в тексте программы?

Работа состоит из одной задачи. Читателю предлагается составить подпрограмму, а затем,


используя эту подпрограмму, решить поставленную задачу.
Эта лабораторная работа подводит итог того, что читатель усвоил при изучении
операторов и правил программирования.

86
Образец выполнения задания
Задача: Составить подпрограмму нахождения координат центра тяжести треугольника,
заданного своими вершинами. Используя эту подпрограмму, найти координаты центра
тяжести заданных треугольников.
1. А(-12;-3); В(12;-10); С(-6;14);
2. А(-6;-5); В(18;-12); С(0;12);
3. А(8;12); В(27;5); C(9;29).
Центр тяжести треугольника АВС лежит на пересечении его медиан. Точка М пересечения

медиан делит медиану в отношении 2: 1, считая от вершины. Отношение .

Координаты точки D находим по формулам:

Зная координаты точек В и D по формулам

; ;
находим координаты точки М. Это и есть искомые координаты центра тяжести треугольника.

D (-9; 5,5)

Введем обозначения по схеме

A1 A2 B1 B2 C1 C2 D1 D2 M1 M2

87
Program LAB_5ob1;

Uses Crt;

Var xa, ya, xb, yb, xc, yc, xd, yd: real;

Var xm, ym, L: real;

Procedure KCT (a1, a2, b1, b2, c1, c2, d1, d2: real; Var m1, m2: real);

Begin

d1: = (a1+c1)/2; d2:= (a2+c2)/2;

L: =2;

m1:= (b1+l*d1)/(1+L);

m2:= (b2+L*d2)/(1+L);

End;

begin

Clrscr;

writeln(' Вычисление координат центра тяжести треугольника ');

xa:=-12; ya:=-3;

xb:=12; yb:=-10;

xc:=-6; yc:=14;

KCT( xa, ya, xb, yb, xc, yc, xd, yd, xm,ym);

writeln;

write(' xm=',xm:6:3,' ym=',ym:6:3);

end.

Вычисление координат центра тяжести треугольника


xm = -2.000 ym = 0.333

88
Вар. Шифр Условие задачи
Составить подпрограмму вычисления периметра треугольника по
координатам его вершин. Используя эту подпрограмму, найти
периметры треугольников по заданным координатам вершин:
1 LAB_51
1. А(3;2), В(-2;5), C(9;4)
2. А(2;1), В(5;5), С(-4;6)
3. А(0;-3), В(9;0), С(6;-6)
Составить подпрограмму вычисления площади треугольника по
формуле Герона. Используя эту подпрограмму, найти площади
треугольников по заданным его вершинам:
2 LAB_52
1. А(3;2), В(-2;5), C(9;4)
2. А(2;1), В(5;5), С(-4;6)
3. A(0;-3), B(9;0), C(6;-6)
Составить программу вычисления периметра трапеции по
координатам её вершин. Используя эту подпрограмму, найти
периметры заданных трапеций:
3 LAB_53
1. А(-3;2), B(2;7), C(2,3), D(4;5)
2. A(-5;-4), B(8;-4), C(6;1), D(-2;1)
3. A(5;3), B(5;7), C(9;5), D(9;4)
Составить подпрограмму вычисления площади трапеции по
основаниям и высоте. Используя эту подпрограмму, найти площади
заданных трапеций:
4 LAB_54
1. a=6,5 b=3,4 h=2,5
2. a=13,4 b=8,3 h=5,7
3. a=15,5 b=8,4 h=6,5
Составить подпрограмму вычисления площади ромба по
координатам его вершин. Используя подпрограмму, найти площади
ромбов:
5 LAB_55
1. А(2;8), В(8;4), С(14;8), D(8;12)
2. A(5;6), B(11;2), C(17;6), D(11;10)
3. A(0;11), B(6;7), C(12;11), D(6;15)
Составить подпрограмму вычисления угла между сторонами ромба.
Используя эту подпрограмму, найти углы между сторонами
заданных ромбов:
6 LAB_56
1. А(2;8), В(8;4), С(14;8), D(8;12)
2. A(5;6), B(11;2), C(17;6), D(11;10)
3. A(0;11), B(6;7), C(12;11), D(6;15)
Составить подпрограмму вычисления площади параллелограмма по
координатам его вершин (используя формулу Герона). Используя
эту подпрограмму, найти площади заданных параллелограммов:
7 LAB_57
1. А(0;4), В(2;9), С(8;3), D(6;-2)
2. A(2;7), B(4;12), C(10;6), D(8;1)
3. A(-1;2), B(1;7), C(7;1), D(5;-4)

89
Составить подпрограмму вычисления угла между диагоналями
параллелограмма по координатам его вершин. Используя эту
подпрограмму, найти углы между диагоналями заданных
8 LAB_58 параллелограммов:
1. А(0;4), В(2;9), С(8;3), D(6;-2)
2. A(2;7), B(4;12), C(10;6), D(8;1)
3. A(-1;2), B(1;7), C(7;1), D(5;-4)

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


двух векторов, заданных координатами начала и конца. Используя
эту подпрограмму, проверить перпендикулярность данных пар
9 LAB_59 векторов:
1. A(2;8), B(14;8) и C(8;4), D(8;12)
2. A(2;8), B(8;4) и С(14;8), D(8;12)
3. А(0;1), B(12;11) и C(6;7), D(6;15)
Составить подпрограмму вычисления суммы членов
арифметической прогрессии. Используя эту подпрограмму,
10 LAB_510
вычислить сумму заданной арифметической прогрессии:
2, 5, 8, 11, … при n=5; 7; 10
Составить подпрограмму вычисления пройденного пути за время от
до , если скорость изменяется по закону .
Используя эту подпрограмму, найти пройденный путь при
11 LAB_511 следующих данных:
1. V=2+3t; ; .

2. V=10-2t; ; .
3. V=3,5+1,5t; ;
Составить подпрограмму вычисления суммы членов
геометрической прогрессии 10, 5, 2,5. Используя эту подпрограмму,
12 LAB_512
вычислить сумму n членов прогрессии, если n= 2; 5; 10.

Задана прямоугольная таблица чисел из 4 строк и 3 столбцов.


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

13 LAB_513 -3 5 6
0 1 2
-5 4 -7
1 2 -11

90
Задана прямоугольная таблица чисел из 5 строк и 3 столбцов.
Составить подпрограмму для вычисления суммы элементов
столбца. Используя эту подпрограмму, вычислить сумму элементов
каждого столбца:
14 LAB_514 2 3 1
-1 2 5
0 -5 -3
3 4 7
1 2 -4
Задан треугольник своими сторонами a, b, c. Составить
подпрограмму вычисления радиуса вписанной и описанной
окружности. Используя эту подпрограмму, вычислить радиусы
вписанной и описанной окружностей заданных треугольников:
15 LAB_515
1. a= 5; b= 3,2; c= 6,4.
2. a= 4,5; b= 1,7; c= 5,1.
3. a= 15; b= 8; c= 20.

91
РАЗДЕЛ 4. ОТВЕТЫ И КОМПЬЮТЕРНЫЕ ПРОГРАММЫ
К ЛАБОРАТОРНЫМ РАБОТАМ

4.1. Лабораторная работа ” Lab 1 ”

Lab-111 (x+y)*(x+y)*(x+y)+2*sin(x)
1
Lab-112 0.25*(x-1.75*Ln(9.8+x*x))
--------------------------------------------------------------------------------
Lab-121 (sqr(sin(x)-sqr(cos(x))/(x+y)
2
Lab-122 Ln(abs(a*a-x*x))
---------------------------------------------------------------------------------------------
Lab-131 (abs(cos(x)+abs(sin(y))/(x*x)
3
Lab-132 (abs(x)+2*cos(x))/0.5+x*x+sqr(x)+sqr(x)*sqr(x))
-----------------------------------------------------------------------------------------------
Lab-141 sqrt(abs(2*x+y))+exp(1/3*ln(2*y-x))

Lab-142 (sin(x)+cos(x))/(x*x+1)

----------------------------------------------------------------------------------------------

Lab-151 sin((x+y)/2)+sqrt(abs(x+1.2))

Lab-152 1+x+ln(abs(x))
-------------------------------------------------------------------------------------------------
Lab-161 1/(cos(x+y))+exp(1/3*ln(3.5*x))
6
Lab-162 y:=2*arctan(x)-sin(x/2)*ln(abs(x/4))
--------------------------------------------------------------------------------------------------

Lab-171 ((1+x/(1+x)))/(3*y)
7
Lab-172 x*sin(x/2)/cos(x/2)+2*ln(abs(cos(x/2)))
----------------------------------------------------------------------------------------------------
Lab-181 (sqrt(a+b))/(sin(a)+cos(b))

92
8
Lab-182 a*x*x+b*x+c
----------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
Lab-191 (x+y)/(sqr(x-y))+exp(x)*ln(2)
9
Lab-192 y-x*x*x*ln(x)-1
--------------------------------------------------------------------------------------------------

Lab-1101 (exp(x)*ln(2)-sin(x))/(1+x*x)
10
Lab-1102 ј*(1/(a*a*a*a) –1/(x*x*x*x)*arctan(x/a)
---------------------------------------------------------------------------------------------------
Lab-1111 (a*x+b*y)/(a*b)
11
Lab-1112 (x*sin(x))/(x*x+5)+x*sqr(x)-2
---------------------------------------------------------------------------------------------------
Lab-1121 exp(y)*ln(x)/sqrt(x*y)+2.3
12
Lab-1122 (a+b*b)/c*exp(1/3)*ln(sin(x))+cos(x)

---------------------------------------------------------------------------------------------------
Lab-1131 xx*y*y/2+3*x*abs(y)
13
Lab-1132 exp(1/3)*ln(x*x+a)-exp(1/3)*ln(x-a)-sqrt(a+x)
----------------------------------------------------------------------------------------------------
Lab-1141 sin(x)*cos(y)/(x+y)
14
Lab-1142 x*ln(abs(sin(pi*s/x))
----------------------------------------------------------------------------------------------------
Lab-1151 (ln(x*x+y*y))/sin(y)
15
Lab-1152 (13.5*exp(7)*ln(x)+9.5)/(5*(x*x-x+1))-
-5*sqr(x)*sqr(x)
----------------------------------------------------------------------------------------------------

4.2. Лабораторная работа ” Lab 2”

Program Lab_211;
Uses Crt;
var

93
x1,x2,y:real;
Begin
ClrScr;
x1:=0.62;
x2:=0.98;
y:=(0.5*x1-0.13*x2)/(0.15*x1*x1+0.37*x2+0.75);
writeln (‘y=’, y:8:3)
End. Y = 0.1560

Program Lab_212;
Uses Crt;
var
x1,x2,z1,z2,z:real;
Begin
ClrScr;
x1:=1.75;
x2:=5.72;
z1:=x1*sqr(cos(x1));
z2:=sqrt(2-sqr(sin(x2)));
z:=z1+z2;
write( ‘ z=’,z:7:4);
End. Z=1.3652

Program Lab_221;
Uses Crt;
Var a, b, x, y: real;
Begin
ClrScr;
x:=2;
a:=248;
b:=87.2;
y:=(a+b/3+x*a)/(x*a+b);
Writeln(‘y=’,y:8:5)
End. Y = 1.32556

94
Program Lab_222;
Uses Crt;
Var x1,x2,z1,z2,z:real;
Begin
ClrScr;
x1:=2.59;
x2:=5.87;
z1:=2*sin(2*x1);
z2:=sqrt(x2*x2+5);
z:=z1+z2;
writeln(‘z1=’,z1:7:4);
writeln(‘z2=’,z2:7:4);
writeln(‘z=’,z:7:4)
End. Z=4.4962

Program Lab_231;
Uses CRT;
Var x, a, b, c, y: real;
Begin
Clrscr
x:=5;
a:=23.5;
b:=0.189;
c:=350;
y:=((a*x*x+b)*c)/(b+a);
Write(‘ y=’,y:8:4);
End. Y = 8682.982

Program Lab_232;
Uses Crt;
Var x1, x2, z1, z2, z: real;
Begin
Clrscr;
x1:=0.37;
x2:=6.31;
z1:=exp(-x1*x1+1);

95
z2:=ln(abs(sin(x2)));
z:=z1+z2;
writeln(‘z1=’,z1:10:3);
writeln(‘z2=’,z2:10:3);
writeln(‘z=’,z:10:3);
End. z1= 2.370 z2= -3.619 z= -1.248

Program Lab_241;

Uses Crt;
Var x, y, z: real;
BEGIN
ClrScr;
x:=2.57;
y:=13.76;
z:=(x*x*y+0.15*y*y)/(1.37*x-y/0.37);
writeln(‘z=’,z:10:3);
End. z=-3.543

Program Lab_242;
Uses Crt;
Var x1,x2,z1,z2,z:real;
Begin
x1:=-6.23;
x2:=2.79;
z1:=sqrt(1+cos(x1)*cos(x1)); z2:=sin(ln(abs(x2))); z:=z1+z2;
Writeln(‘z1=’,z1:7:3,’ z2=’,z2:7:3 );
Writeln(‘ z=’,z:8:3);
End.
z1= 1.4132 z2= 0.8553
z= 2.2685

96
Program Lab_251;

Uses Crt;
var a,b,x,y:real;
Begin
ClrScr;
a:=1.25; b:=-1.75; x:=4.78;
y:=(a*x*x+b*x)/((sqr(x)*x)+0.78*x);
Writeln(‘y=’,y:8:4);
End. y= 0.1788

Program Lab_252;
Uses Crt;
Var x1,x2,z1,z2,z:real;
Begin
ClrScr;
x1:=0.85;
x2:=2.36;
z1:=ln(abs(sin(x1)));
z2:=exp(x2-2);
z:=z1+z2;
Writeln (‘ z1=’,z1:8:4);
Writeln (‘ z2=’,z2:8:4);
Writeln(‘ z=’,z:8:4)
end. z1= -0.2860 z2= 1.4333 z= 1.1474

Program Lab_261;

Uses Crt;
Var x, y, z: real;
Begin
ClrScr;
x:=2.15;
y:=9.78;
z:=(x*x+x*y-4.75)/(x*x*x*y-0.136*y);
Writeln(‘ z=’,z:8:4)
End.
z= 0.2180

97
Program Lab_262;
Uses Crt;
Var x1,x2,z1,z2,z:real;
Begin
ClrScr;
x1:=0.21;
x2:=1.76;
z1:=exp(sqrt(x1*x1+3));
z2:=cos(x2*x2);
z:=z1+z2;
Writeln (‘ z1=’,z1:8:4);
writeln(‘ z2=’,z2:8:4);
writeln(‘ z=’,z:8:4)
End. z1= 5.7244 z2= -0.9990 z= 4.7254

Program Lab_271;

Uses Crt;
Begin Var x, a, b, c: real;
ClrScr;
a:=1.9;
b:=0.04;
c:=6;
x:=(sqr(a+b)*sqr(a+b)*c*c)/(a*a-b*b);
Writeln(‘ x=’,x:8:4)
End . x=141.3171

Program Lab_272;

Uses Crt;
Var x1,x2,z1,z2,z:real;
Begin
ClrScr;
x1:=0.74;
x2:=2.56;

98
z1:=exp(1/3*ln(x1*x1+1));
z2:=ln(abs(cos(x2)));
z:=z1+z2;
Writeln(‘ Z1=’,z1:8:4);
Writeln(‘ z2=’,z2:8:4);
Writeln(‘ z=’,z:8:4)
End. Z1= 1.1567 z2= -0.1796 z= 0.9771

Program Lab_281;
Uses Crt;
Begin
ClrScr;
Var m, n, y : real.
m:=1.2;
n:=-3.76;
y:=((m-n)*(m-n)+4*m*n)/(m*m-n*n);
Writeln(‘ Y=’,y:8:4);
End.
Y= -0.5161

Program Lab_291;
Uses Crt;
Var a, b, x: real;
Begin
Clrscr
a:=0.7;
b:=-3.1;
x:=(25*b+a-(4*a*a-0.7*b*b)/a)*b;
writeln(‘ x=’,x:9:4)
End. x= 216.9690

Program Lab_292;

Uses Crt;
Var x1, x2, z1, z2, z: real;
Begin
ClrScr;
x1:=1.59;

99
x2:=3.93;
z1:=exp(1/3*ln(x1*x1+x1));
z2:=exp(sin(x2))+2;
z:=z1+z2;
writeln (‘ z1=’,z1:8:4,’ z2=’,z2:8:4);
writeln (‘ Z=’,z:8:4);
End. z1= 1.6029 z2= 2.4920 Z= 4.0949

Program Lab_2101;

Uses Crt;

Var a, b, c, y: real;
Begin
ClrScr;
a:=3.2;
b:=2;
c:=0.75;
y:=(1/a+1/b-2*c/(a*b))*(a+b+2*c);
Writeln(‘ y=’,y:9:4);
End. y= 3.8734

Program Lab_2102;
Uses Crt;
Var x1,x2,z1,z2,z:real;
Begin
ClrScr;
x1:= 1.95;
x2:= 2.74;
z1:= sqr(sin(2*x1));
z2:= exp(1/3*ln(sqr(ln(x2))+3));
z:= z1+z2;
Writeln(‘ z1=’,z1:8:4,’ z2=’,z2:8:4);
Writeln(‘ z=’,z:8:4);
End. z1= 0.4730 z2= 1.5895 z= 2.0625

100
Program Lab_2111;

Uses Crt;
Var x, y, a, z : real;
Begin
ClrScr;
x:=3.35;
y:=-0.27;
a:=2.1;
z:=(x*y-2*x+y)/(y-x*x-y*y*a);
Writeln(‘ Z=’,z:9:4);
End.
Z= 0.6762
Program Lab_2112;
Uses Crt;
Var x1, x2, z1, z2,z:real;
Begin
ClrScr;
x1:= -0.12; x2:= 1.74;
z1:= exp(x1*x1-2);
z2:= sqrt(sqr(sin(x2))+2);
z:= z1+z2;
Writeln (‘ z1=’,z1:8:4, ‘ z2=’,z2:8:4);
Writeln (‘ z=’,z:8:4);
End. z1= 0.3293 z2= 1.7200 z= 2.0493

Program Lab_2121;

Uses Crt ;

Var x, y, z : real;
Begin
ClrScr;
x:=-1.7; y:=3.2;
z:=(x*x*y*y-0.75*x*y)/(x*x+y*y);
Writeln(‘ z=’,z:8:4);
End.
Z= 2.5646

101
Program Lab_2122;

Uses Crt;
Var x1, x2, z1, z2, z: real;
Begin
ClrScr;
x1:= -1.61; x2:=2.84;
z1:=ln(x1+3);
z2:=exp(1/3*ln(sqr(sin(x2))+5));
z:=z1+z2;
Writeln(‘ z1=’,z1:8:4,’ z2=’,z2:8:4);
Writeln(‘ z=’,z:8:4);
End. z1= 0.3293 z2= 1.7200 z= 2.0493

Program Lab_2131;

Uses Crt;
Var x, y, a, z: real;
Begin
ClrScr;
x:=-0.025;
y:=2.12;
a:=3.861;
z:=(0.82*a*x-x*x*y*y*y)/(a *a + x*x+y*y);
Writeln(‘ z=’,z:8:5)
End. z= -0.00439

Program Lab_2132;

Uses Crt;
Var x1,x2,z1,z2,z:real;
Begin
ClrScr;
x1:=2.59; x2:=1.25;
z1:= exp(3*ln(cos(x1*x1-1))); z2:=2*exp(x2+2); z:=z1+z2;
Writeln(‘ z1=’,z1:8:5,’ z2=’,z2:8:5);
Writeln(‘ z=’,z:8:5);
End. z1= 0.59090 z2=51.58068 z=52.17158

102
Program Lab_2141;

Uses Crt;
Var x, y, a, z: real;
Begin
ClrScr;
x:=0.39; y:=0.95; a:=-0.5;
z:=(0.8*x*x*x+y*y*y-a*x)/(a* x*y + a* a );
Write( ‘ z=’,z:8:5);
End. Z =16.98579

Program Lab_2142;

Uses Crt;
Var x1, x2, z1, z2, z: real;
Begin
ClrScr;
x1:=0.81; x2:=3.11;
z1:=sqr(sin(x1))+9;
z2:=sqrt(x2*x2+cos(x2));
z:=z1+z2;
Writeln(‘ z1=’,z1:6:4,’ z2=’,z2:8:4);
Writeln(‘ z=’,z:8:4);
End. z1=9.5246 z2= 2.9449 z= 12.4695

Program Lab_2151;
Uses Crt;
Var a, b, c, x, y: real;
Begin
ClrScr;
a:=9; b:=3.5;
c:=8.72; x:=-1.2;
y:=(a* x+ b* x+ c* c)/(x* x+ b* b);
Write(‘ y=’,y:8:4);
End.
Y= 4.4586

103
Program Lab_2152;
USES CRT
Begin
ClrScr
x1:=0.51; x2:=1.12;
z1:=cos(x1)+exp(2*x1);
z2:= exp(1/3*ln(abs(sin (2*x2)))); z:=z1+z2;
Writeln(‘ z1=’,z1:8:4,’ z2=’,z2:8:4);
Write (‘ z=’,z:8:4)
End. z1= 3.6459 z2= 0.9222 z= 4.5682

4.3. Лабораторная работа ” Lab 3”

Program LAB_31;
Uses Crt;
var x, y, t: real;
Begin
Clrscr;
t:=1.5;
x:=1.2*t*t+t+3;
If x<=3.7 then
y:= ln(x+3)
Else
y: = sqrt (sqr(sin(x))+5);
Writeln( ‘ x=’,x:6:3,’ ‘,’ y=’,y:6:3);
End.
x= 7.200 y=2.3727

Program LAB_32;

Uses Crt;
var x, y, t: real;
begin

104
Clrscr;
t:=0.3;
x:=t*t*t-2.4*t;
If x<=0.5 then
y:= EXP(x*x-2)
Else y:= sqrt (sqr(cos(x))+1.7);
Writeln(‘ x=’,x:6:3,’ y=’,y:6:3)
End.
x=-0.693 y= 0.219

Program LAB_33;

Uses Crt;
var x, y, t: real;
begin
Clrscr;
t:=-1.1;
x:= sqrt (abs(t+3));
if x>1.4 then
y:= x+ x* x* cos(x)
else
y:= x* x+ x* sin(x) ;
writeln(‘ x=’,x:6:3,’ y=’,y:6:3);
end.
x=1.378 y= 3.2530

Program LAB_34;
Uses Crt;
var x, y, t : real;
begin
Clrscr;
t:=0.7;
x:=t*t+1.3*t+1;
if x<=2.3 then
y:= sqr (sin(x))

105
else
y:= EXP (1/3*ln((sqr(ln(x))+3)));
writeln(‘ x=’,x:6:3,’ y=’,y:6:3);
end.
x = 2.400 y = 1.5559

Program LAB_35;
Uses Crt;
var x, y, t : real;
begin
Clrscr;
t:=0.9;
x:= t /(t*t+t+1);
if X<=1.5 then
y:= EXP(1/3*ln(x*x+2))
else y:= EXP(sin(x));
writeln(‘ x=’,x:6:3,’ y=’,y:6:3);
end. x= 0.3321 y= 1.2827

Program LAB_36;
Uses Crt;
var x, y, t : real;
begin
Clrscr;
t:=-3.0;
x:=(t*t+1)/(0.7*t+1);
if x<=2.1 then
y:= EXP(cos(x)+3)
else
y: = sqr(ln(abs(2*x)));
writeln(‘ x=’,x:6:3,’ y=’,y:6:3);
end.
x = -9.0909 y= 7.8085

106
Program LAB_37;
Uses Crt;
var x, y, t : real;
begin
Clrscr;
t:=-0.64;
x:= t /sqr(t+1);
if x<=0 then
y:= EXP((1/3)*ln(x*x+2.5))
else
y:= cos (x*x);
writeln(‘ x=’,x:6:3,’ y=’,y:6:3);
end.
x=-4.9383 y= 2.9958

Program LAB_38;
Uses Crt;
var x, y, t : real;
begin
Clrscr;
t:=0.93;
x:= t* t* t /(1+t);
if x<=3.5 then
y:= x*sqr(cos(x))
else
y:= sqrt (2-sqr(x));
writeln(‘ x=’,x:6:3,’ y=’,y:6:3);]
end.
x= 0.4168 y= 0.3485

107
Program LAB_39;
Uses Crt;

var x, y, t : real;

begin

Clrscr;

t:=-3.59;

x:=2+EXP((1/3)*ln(abs(t+1.5)));

if x<=4 then

y:=2*sin(2*x)

else

y:= sqrt (x*x+5);

writeln(' x=',x:6:3,' y=',y:6:3);


end.
x= 3.2785 y= 0.5410

Program LAB_310;
Uses Crt;
var x, y, t : real;
begin
Clrscr:
t:=0.85;
x:= t* t /(t*t*t+1);
if x<=2 then
y:= ln(abs(sin(x)))
else
y:= EXP (x-2);
writeln(‘ x=’,x:6:3,’ y=’,y:6:3);
end.
x= 0.44761 y= -0.83745

108
Program LAB_311;

Uses Crt;
var x, y, real;
begin
Clrscr;
t:=5.74;
x:=(2*t+4)/(t*t+1);
if x<=-1 then
y:= EXP (sqrt(x*x+3))
else y:= EXP ((1/3)*ln(abs(x-3.5)));
writeln(‘ x=’,x:6:3,’ y=’,y:6:3);
end.
x= 0.45600 y= 1.44927

Program LAB_312;
Uses Crt;
var x, y, t : real;
begin
ClrScr;
t:=3.75;
x:= -t + sqrt(t*t+1);
if x<=1 then
y:=(x*x+5.75)/sin(x)
else y:=1/(1+x*x);
writeln(‘ x=’,x:6:3,’ y=’,y:6:3);
end.
x= 0.1310 y= 44.1

Program LAB_313;
Uses Crt;
Var x, y, t : real;
Begin
Clrscr;
t:=-1.75;
x:=t*t+3*t+1;

109
if x>0 then
y: = sin(sqrt(abs(x)))
else
y:= EXP (x)/(x*x+3*x);
writeln(‘ x=’,x:8:5,’ y=’,y:8:5);
End.
x= -1.18750 y=-0.14170

Program LAB_314;
Uses Crt;
var x, y ,and t : real;
begin
Clrscr;
t:=3.75;
x:= t* t* t-sqrt(t*t+1);
if x<=2.3 then
y:= sqrt(1+x+x*x)
Else
y:= cos (x)/abs(x-1.3);
writeln(‘ x=’,x:6:3,’ y=’,y:6:3);
end.
x=48.85333 y= 0.00332

110
4.4. Лабораторная работа ”Lab 4”

ЗАДАНИЕ 1

Program LAB_411;
Uses Crt;
Const N=5;
Var
i, k: integer; y: real;
X: array [1..N] of real;
BEGIN
Clrscr;
For i:=1 to N DO
begin
write(‘i=’);
read(X[i]);
end;
For k:= 1 to N do
begin
Y:= (13.5*EXP(7*ln(X[k]))+9.5)/(5*(X[k]*X[k]-X[k]-1))-4*EXP(4*ln(X[k]));
writeln(‘ x=’, X [k]:6:3, ‘ Y=’,Y:7:3);
read;
end;
END.
x= 0.200 Y= -1.644
x= 1.300 Y=-42.313
x= 1.800 Y=338.008
x= 2.800 Y=656.363
x= 3.600 Y=1859.281

111
Program LAB_421;
Uses Crt;
Const N=5;
VAR
i: integer;
y: real;
X: array [1..N] of real;
BEGIN
Clrscr;
For i:=1 to N do
begin
write(‘i=’);
read(X[i]);
end;
For i:=1 to N DO
begin
y:= X [ i]* ln ( abs (sin(15/X[i])));
writeln (‘ x=’, X[i]:6:2,’ y=’,y:8:5);
end;
END.
x= 5.80 y=-3.71223
x= 5.50 y=-5.00441
x= 6.10 y=-2.81073
x= 6.50 y=-1.95228
x= 7.60 y=-0.63426

Program LAB_431;
Uses Crt;
Const N=5;
VAR
i: integer;
y, a : real;
X: array[1..N] of real;
BEGIN

112
Clrscr;
a:=1.2;
For i:=1 to N DO
begin
write(‘i=’); readln (X[i]);
end;
For i:=1 to N DO
begin
IF (X[i]-a)>0 then
y := EXP((1/3)*ln(X[i]*X[i]+a))-EXP((1/3)*ln(X[i]-a))- sqrt ( a* X[i])
ELSE
y:= EXP((1/3)*ln(X[i]*X[i]+a))-(-1)*EXP((1/3)*ln(abs(X[i]-a)))- sqrt ( a* X [i]);
writeln(‘x=’,X[i]:5:2,’ y=’,y:6:3);
end;
END.
x= 3.80 y=-1.010
x= 0.15 y= 1.661
x=15.10 y=-0.541
x=17.80 y=-0.347
x=39.20 y= 1.322

Program LAB_441;
Uses Crt;
Const N=5;
Var
I : integer;
Y , a, b, c: real;
X: array [1..N ] of real;
BEGIN
Clrscr;
a:=1.2;
b:=2.4;
c:=5.4;
For i:=1 to N DO

113
begin
write(‘i=’);
read(X[i]);
end;
For i:=1 to N DO
begin
IF sin(X[i])>0 then
y:=(a+ b* b)/(c* EXP((1/3)*ln(sin(X[i])))) + cos (X[i])
Else
y:=(a+ b* b)/(c* EXP((1/3)*(-1)*ln(abs(sin(X[i]))))) + cos (X[i]);
writeln(‘ x=’,X[i]:5:3,’ y=’,y:6:3);
end;
END.
x = 8.100 y= 1.05855
x = 2.300 y= 0.75505

Program LAB_451;
Uses Crt;
Const N=5;
Var
i: integer;
y: real;
X: array[1..N] of real;
BEGIN
Clrscr;
For i:=1 to N Do
begin
write (‘i=’);
read(X[i]);
end;
For i:=1 to N do
begin
y:=(X[i]*sin(X[i]))/(X[i]*X[i]+5)+X[i]*X[i]*X[i]-2;

114
writeln(‘ x=’,X[i]:6:2,’ y=’,y:7:3); end;
End.
x= -3.10 y= -31.7822
x= 2.52 y= 14.1323
x= 5.81 y= 194.0546
x= 7.50 y= 419.9899
x= 9.40 y= 828.5865

Program LAB_461;
Uses Crt;
Const N=5;
Var
a, y: real;
i: integer;
X: array[1..N] of real;
BEGIN
Clrscr;
For i:=1 to N DO
begin
write(‘i=’); read(X[i]);
end; a:=1.2;
For i:=1 to N do
begin
y:=(1/(sqr(a)*sqr(a))-1/(sqr(X[i])*sqr(X[i])))*arctan(X[i]/a);
writeln (‘ x=’,X[i]:5:2,’ y=’,y:7:3);
end;
END.

x= 1.00 y=-0.35970
x= 1.10 y=-0.14895
x= 1.15 y=-0.06839
x= 1.30 y= 0.10905
x= 1.60 y= 0.30570

115
Program LAB_471;
Uses Crt;
Const N=5;
var
i : integer;
y : real;
X: array[1..N] of real;
BEGIN
Clrscr;
For i:=1 to N DO
begin
write(‘i=’);
read(X[i]);
end;
For i:=1 to N do
begin
Y:=X[i]*X[i]*X[i]*ln(X[i])-1;
writeln(‘ x=’,X[i]:5:2,’ y=’,y:7:3);
end;
END.
x= 1.00 y= -1.00000
x= 1.80 y= 2.42797
x= 2.20 y= 7.39549
x= 2.50 y= 13.31704
x= 7.50 y=849.03721

116
Program LAB_481;
Uses Crt;
Const N=5;
VAR
i: integer;
y, a, b, c: real;
X: array[1..N] of real;
BEGIN
Clrscr;
For i:=1 to N DO
begin
write(‘i=’); read(X[i]);
end;
a:=1.2; b:=2.4; c:=5.4;
For i:=1 to N DO
begin
y:= a* X [i]*X[i]+ b* X [i]+c;
writeln(‘ x=’, x[i]:5:2,’ y=’,y:6:3);
end;
END.
x= 1.10 y= 9.492
x= 3.00 y=23.400
x= 2.50 y=18.900
x= 8.00 y=101.400
x=70.00 y=6053.400

117
Program LAB_491;
Uses Crt;
Const N=5;
Var
i: integer;
y: real;
X: array [1..N] of real;
BEGIN
For i:=1to N DO
begin
write(‘i=’); read(X[i]);
end;
For i:=1 to N do
begin
y:= X[i]* sin(X[i]/2)/cos(X[i]/2)+2*ln(abs(cos(X[i]/2)));
writeln(‘ x=’,X[i]:5:2,’ y=’,y:6:3);
end;
END.
x= 0.50 y= 0.065
x= 0.60 y= 0.094
x= 0.90 y= 0.225
x= 1.10 y= 0.355
x= 1.50 y= 0.773

118
Program LAB_4101;
Uses Crt;
Const N=5;
VAR
I : integer;
y : real;
X: array[1..N] Of real;
BEGIN
Clrscr;
For i:=1 to N DO
begin
write(‘i=’);
read(X[i]);
end;
For i:=1 to N DO
begin
y:=2*arctan(X[i])-sin(X[i]/2)*ln(abs(X[i]/4));
writeln(‘ x=’,X[i]:5:2,’ y=’,y:6:3);
end;
END.
x= 2.15 y= 2.817
x= 2.30 y= 2.826
x= 2.35 y= 2.828
x= 2.37 y= 2.828
x= 2.50 y= 2.827

119
Program LAB_4111;
Uses Crt;
Const N=5;
VAR
i:integer;
y:real;
X:array[1..N] of real;
BEGIN
Clrscr;
For i:=1 to N DO
begin
write(‘i=’);
read(X[i]);
end;
For i:=1 to N do
begin
y:=1+X[i]+ln(abs(X[i]));
writeln(‘ x=‘,X[i]:5:2,’ y=’,y:6:3);
end;
END.
x=-16.00 y=-12.227
x=-9.00 y=-5.803
x= 0.50 y= 0.807
x= 2.40 y= 4.275
x= 3.40 y= 5.624

120
Program LAB_4121;
Uses Crt;
Const N=5;
Var
a,y:real;
i:integer;
X:array[1..N] of real;
BEGIN
Clrscr;
For i:=1 to N DO
begin
write(‘i=’); read(X[i]);
end; a:=1.2;
For i:=1 to N do
begin
y:=ln(abs(a*a-X[i]*X[i]));
Write (‘ x=‘, X [i]: 5:2,’ y=’, y: 6:3);
end;
END.
x=-2.75 y= 1.812
x=-1.05 y=-1.086
x= 1.65 y= 0.249
x= 3.25 y= 2.211

121
Program LAB_4131;
Uses Crt;
Const N=5;
VAR
i:integer;
y:real;
X: array [1..N] of real;
BEGIN
For i:=1 to N DO
begin
write(‘i=’);
read(X[i]);
end;
For i:=1 to N DO
begin
y:=(abs(X[i])+2*cos(X[i]))/(0.5+X[i]*X[i]+sqr(X[i])*sqr(X[i]));
writeln (‘ x=’, x[i]:5:2,’ y=’,y:6:3);
end;
END.
x= 0.00 y= 4.000
x=-3.25 y= 0.010
x= 1.23 y= 0.441
x= 5.20 y= 0.008
x= 4.60 y= 0.009

122
Program LAB_4141;
Uses Crt;
Const N=5;
VAR
i:integer;
y:real;
X:array[1..N] of real;
BEGIN
Clrscr;
For i:=1 to N DO
begin
write(‘i=’);
read(X[i]);
end;
For i:=1 to N DO
begin
y:=(sin(X[i])+cos(X[i]))/(X[i]*X[i]+1);
Writeln (‘ x=’, x[i]:5:2,’ y=’,y:6:3);
end;
END.
x=-1.50 y=-0.285
x= 0.00 y= 1.000
x= 1.20 y= 0.530
x= 3.50 y=-0.097
x= 5.00 y=-0.026

123
ЗАДАНИЕ 2

Program LAB_412;

Uses Crt;
VAR
k, s: integer;
label lb1;
BEGIN
Clrscr;
S: =0;
For k:=1 to 99 DO
begin
if k>= 10 then
begin
if Odd(k)
then s:=s+k
end
else goto lb1;
lb1:
end;
writeln (' k=', k ,' s=', s);
END.
k=45 s =2475

Program LAB_422;

Uses CRT;
VAR
k: integer;
u, s: real;
BEGIN
Clrscr;
s:=0;
For k:=1 to 10 DO
begin

124
u: =k/(1+k*k);
s:= s + u;
end;
writeln(' s=',s:8:4);
readln;
END.
S = 2.2616

Program LAB_432;

Uses CRT;
VAR a,q,s:real;
k:integer;
BEGIN
Clrscr;
a:=5.2; q:=-2.0; s:=0.0;
For k: =1 to 10 DO
begin
writeln(‘ a=’,a:6:2);
s:=s+a; a:=a*q;
end;
Writeln (‘ s=’, s: 6:2);
END.
a= 5.20
a=-10.40
a= 20.80
a=-41.60
a= 83.20
a=-166.40
a=332.80
a=-665.60
a=1331.20
a=-2662.40
s=-1773.20

125
Program LAB_442;
Uses Crt;
VAR
a,d,s:real;
k:integer;
BEGIN
Clrscr;
a:=4.6; d:=1.5;
s:=0.0;
For k: =1 to 10 DO
begin
writeln(‘ A=’,a:6:2);
s:=s+a;
a:=a+d;
end;
Writeln (‘ s=’, s: 6:2);
END.
A= 4.60
A= 6.10
A= 7.60
A= 9.10
A= 10.60
A= 12.10
A= 13.60
A= 15.10
A= 16.60
A= 18.10
S=113.50

126
Program LAB_452;
Uses Crt;
Const N=7;
var
i:integer;
a0,a1,a2,a3:real;
a4,a5:real;
p, x: real;
A:array[1..N] of real;
BEGIN
Clrscr;
For i:=N-1 downto 1 DO
begin
write('i=');
read(A[i]);
end;
write('x=');
read(x);
p:=a[N-1];
For i:=N-2 downto 1 do
begin
p:=p*x+a[i];
end;
writeln(' p=',p:8:3);
END.
i=2
i=-1.7
i=2.7
i=0.8
i=-3
i=1.5
x=2.5
p= 170.094

127
Program LAB_462;
Uses CRT;
Var
k,i:integer;
a,b,y,h,x:real;
BEGIN
Clrscr;
a:=-3.0; b:=1.0; h:=0.5;
x:=a;
For i:=1 to 9 do
begin
y:=4*x*x*x-2*x*x+5;
x:=x+h;
writeln(‘ x=’,x:5:2,’ y=’,y:6:3);
end;
END.
x=-3.00 y=-121.00
x=-2.50 y=-70.00
x=-2.00 y=-35.00
x=-1.50 y=-13.00
x=-1.00 y= -1.00
x=-0.50 y= 4.00

Program LAB_472;
Uses Crt;
Const N=10;
Var
X:array[1..N] of real;
k,i:integer;
s: real;
BEGIN
Clrscr;
s:=0;

128
For i:=1 to N do
begin
write(‘i=’);
read(X[i]);
end;
k:=1;
For i:=1 to N do
begin
if X[i]<0
then
begin
s:= s+ X [i];
k:=k+1
end;
end;
writeln (‘ k=’, k,’ s=’,s:6:2);
END.
k=5 s=-29.10

Program LAB_482;
Uses Crt;
Const N=6;
VAR
i:integer;
s : real;
A:array[1..6] of real;
B: array [1..6] Of real;
Begin
Clrscr;
for i:=1 to N do
begin
write(‘i=’);
read(A[i]);

129
write(‘i=’);
read(B[i]);
end;
s:=0;
For i:=1 to N do
begin
S: = S+ A [i]*B [i];
end;
Writeln(‘ s=’,s:6:2);
End.
s= 0.27

Program LAB_492;
Uses Crt;
Const N=5;
VAR
k:integer;
x,s,u:real;
BEGIN
Clrscr;
x:=3.2;
s:=0;
For k:=1 to N do
begin
s:=s+(EXP(2*k*ln(x)))/k/k;
writeln(‘ k=’,k,’ s=’,s:6:2);
end;
End.
k =1 s= 10.240
k=2 s= 36.454
k=3 s= 155.759
k=4 s= 842.954
k=5 s= 5346.553

130
Program LAB_4102;
Uses Crt;
Const N=6;
VAR
k,i:integer;
A: array [1..N] of real;
B: array [1..N] of real;
C: array [1..N] of real;
BEGIN
Clrscr;
For k:=1 to N DO
begin
write(‘k=’);
read(A[k]);
end;
For i:=1 to N DO
begin
write(‘i=’);
read(B[i]);
end;
For k: =1 to N do
begin
C[k]:=A[k]+B[k]*B[k];
writeln(‘ C[‘ , k,’]=’,C[k]:8:3);
end;
END.
C(1)= 16.000
C(2)= 9.540
C(3)= 58.300
C(4)= 83.790
C(5)= 1.750
C(6)= 28.440

131
Program LAB_4112;
Uses Crt;
Const N=11;
VAR
i: integer;
A: array [1..N] of real;
c: real;
BEGIN
Clrscr;
For i:=1 to N do
begin
write(‘i=’);
read(A[i]);
end;
For i:=1 to N do
begin
if odd(i)
Then
begin
if A[i]<0
then
begin
C:=A[i];
writeln(‘ c=’,c:6:2);
end;
end;
end;
END.
C=-3

132
Program LAB_4122;
Uses Crt;
Const N=6;
Var
i:integer;
y:real;
X:array[1..N] of real;
BEGIN
Clrscr;
For i: =1 to N do
begin
write(‘i=’);
read(X[i]);
end;
For i:=1 to N do
begin; y:=(3.285*X[i]*X[i]*X[i])/(5-EXP((1/3)*ln(X[i])));
writeln(‘ x=’,X[i]:6:3,’ y=’,y:8:3);
end;
END.
x= 1.000 y= 0.821
x= 1.200 y= 1.442
x= 1.400 y= 2.322
x= 1.600 y= 3.513
x= 1.800 y= 5.064
x= 2.000 y= 7.027

133
Program LAB_4132;
Uses Crt;
Const H=0.5;
VAR
k, i:integer;
x, y: real;
BEGIN
Clrscr;
x:=-4.0;
k:=0; i:=0;
while x<=2 DO
begin
x:= x+ k* h;
y:=(sqrt(abs(x))*sin(x))/(x+ EXP (x));
if y>0 then i:=i+1;
writeln(‘ x=’,x:6:2,’ y:=’,Y:7:3);
k:=k+1;
end;
writeln(‘ i=’, i);
END.
x= -4.00 y= -0.380
x= -3.50 y= -0.189
x= -3.00 y= 0.083
x= -2.50 y= 0.391
x= -2.00 y= 0.690
x= -1.50 y= 0.957
x= -1.00 y= 1.331
x= -0.50 y= -3.182
x= 0.00 y= 0.000
x= 0.50 y= 0.158
x= 1.00 y= 0.226
x= 1.50 y= 0.204
x= 2.00 y= 0.137

134
Program LAB_4142;
Uses Crt;
Const H=0.5;
VAR
i, k: integer;
x, y, s: real;
BEGIN
Clrscr;
s:=0; i:=0;
While x<3.0 DO
begin
x:=-3.0+i*H; y:= x* cos (2*x+3);
if y<0 then
s:= s+ y;
writeln(‘ x=’,x:6:2,’ y=’, y:7:3);
i:=i+1;
end;
writeln(‘ s=’,s:8:3);
END.
x= -3.00 y= 2.970
x= -2.50 y= 1.040
x= -2.00 y= -1.081
x= -1.50 y= -1.500
x= -1.00 y= -0.540
x= -0.50 y= 0.208
x= 0.00 y= 0.000
x= 0.50 y= -0.327
x= 1.00 y= 0.284
x= 1.50 y= 1.440
x= 2.00 y= 1.508
x= 2.50 y= -0.364
x= 3.00 y= -2.733
s= -6.545

135
4.5. Лабораторная работа ”Lab 5”

Program LAB_51;
Uses Crt;
VAR
i:integer;
p, X1, X2, Y1, Y2, L:real;
X: array [1..3] of real; Y: array [1..3] of real;
PROCEDURE DLN ( X1, X2, Y1, Y2: real; var L: real);
begin
L:= sqrt ( sqr (X2-X1)+ sqr (Y2-Y1));
end;
BEGIN
Clrscr;
For i:=1 to 3 DO
begin
write(‘X[i]=’);
read(X[i]);
write(‘Y[i]=’);
read(Y[i]);
end;
For i:=1 to 3 DO
P:=0;
begin
if i=3 then
begin
X2:= X[i-2]; Y2:= Y[i-2];
end;
X2:=X[i+1]; X1:=X[i];
Y2:=Y[i+1]; Y1:=Y[i];
DLN(X2,X1,Y2,Y1,L);
P:=P+L;
end;
write (‘ P=’,P:7:3);

136
END.
X[i]=3
Y[i]=2
X[i]=-2
Y[i]=5
X[i]=9
Y[i]=4
L= 5.83 L= 11.05 L= 6.32 P= 23.201

PROGRAM LAB_52;
Uses Crt;
VAR
i:integer;
p,X1,X2,Y1,Y2,L,S:real;
X:array[1..3] of real;
Y:array[1..3] of real;
Lt:array[1..3] of real;
PROCEDURE DLN(X1,X2,Y1,Y2:real;var L:real);
begin
L:=sqrt(sqr(X2-X1)+sqr(Y2-Y1));
end;
label lb1;
BEGIN
Clrscr;
For i:=1 to 3 DO
begin
write(‘X[i]=’);
read(X[i]);
write(‘Y[i]=’);
read(Y[i]);
end;
p:=0;
For i:=1 to 3 DO

137
begin
if i=3 then
begin
X2:=X[i-2]; Y2:=Y[i-2];
x1:=X[i]; Y1:=Y[i];
goto lb1;
end;
X2:=X[i+1]; X1:=X[i];
Y2:=Y[i+1]; Y1:=Y[i];
lb1: DLN(X2,X1,Y2,Y1,L);
Lt[i]:=L;
end;
write (‘ L1=’,Lt[1]:6:3,’ L2=’,Lt[2]:6:3,’ L3=’,Lt[3]:6:3);
p:=0.5*(Lt[1]+Lt[2]+Lt[3]);
S:=sqrt(p*(p-Lt[1])*(p-Lt[2])*(p-Lt[3]));
writeln;
writeln(‘ S=’,S:7:3);
END.
X[i]=3
Y[i]=2
X[i]=-2
Y[i]=5
X[i]=9
Y[i]=4
L1= 5.831 L2=11.045 L3= 6.325
S= 14.000

Program LAB_53;
Uses Crt;
VAR
i:integer;
p, X1, X2, Y1, Y2, L, S: real;
X:array[1..4] of real;
Y:array[1..4] of real;

138
Lt:array[1..4] of real;
PROCEDURE DLN(X1,X2,Y1,Y2:real;var L:real);
begin
L:=sqrt(sqr(X2-X1)+sqr(Y2-Y1));
end;
label lb1;
BEGIN
Clrscr;
For i:=1 to 4 DO
begin
write(‘X[i]=’);
read(X[i]);
write(‘Y[i]=’);
read(Y[i]);
end;
p:=0;
For i:=1 to 4 DO
begin
if i=4 then
begin
X2:=X[i-2]; Y2:=Y[i-2];
x1:=X[i]; Y1:=Y[i];
goto lb1;
end;
X2:=X[i+1]; X1:=X[i];
Y2:=Y[i+1]; Y1:=Y[i];
lb1: DLN(X2,X1,Y2,Y1,L);
Lt[i]:=L;
end;
writeln (‘ L1=’,Lt[1]:6:3,’ L2=’,Lt[2]:6:3);
writeln (‘ L3=’,Lt[3]:6:3,’ L4=’,Lt[4]:6:3);
p:=Lt[1]+Lt[2]+Lt[3]+Lt[4];
writeln(‘ p=’,p:7:3);
END.

139
X[i]=-3
Y[i]=2
X[i]=2
Y[i]=7
X[i]=2
Y[i]=3
X[i]=4
Y[i]=5
L1= 7.071 L2= 4.000 L3= 2.828 L4= 7.616
p= 21.515

PROGRAM LAB_54;
Uses Crt;
Const N=3;
var i:integer;
a: array[1..N] of real;
b: array[1..N] of real;
h: array[1..N] of real;
s: array[1..N] of real;
Procedure STR(a, b, h: real ; var s: real);
begin
s:=(a+b)/2*h;
end;
BEGIN
Clrscr;
for i:=1 to N Do
begin
writeln(‘a=’,’ b=’,’ h=’);
readln(a[i],b[i],h[i]);
end;
for i:=1 to N Do
begin
STR (a[i],b[i],h[i],s[i]);

140
Writeln (‘ a=’, a[i]:6:2,’ b=’, b[i]:6:2,’ h=’, h[i]:6:2);
Writeln ( ‘ s=’, s [i]:7:3);
end;
END.
a= 6.50 b= 3.40 h= 2.50
s= 12.375
a= 13.40 b= 8.30 h= 5.70
s= 61.845
a= 15.50 b= 8.40 h= 6.50
s= 77.675

Program LAB_55;
Uses Crt;
Var
x1, x2, x3, x4: real; y1, y2, y3, y4: real;
Lac, Lbd, S: real;
Lromba: real;
FUNCTION DLN(x1,x2,y1,y2:real):real;
begin
DLN:= sqrt (sqr(x1-x2)+sqr(y1-y2));
end;
BEGIN
Clrscr;
x1:=2; y1:=8; x2:=8; y2:=4; x3:=14; y3:=8; x4:=8; y4:=12;
Lac:= DLN(x1,x3,y1,y3);
Lbd:= DLN(x2,x4,y2,y4);
Lromba:= DLN(x1,x2,y1,y2);
S:=Lac*Lbd/2;
writeln(‘ Lromba=’,Lromba:7:3,’ S=’,S:7:3);
writeln(‘Lac=’,Lac:6:2,’ Lbd=’,Lbd:6:2);
END.
Lromba = 7.211 S= 48.000
Lac = 12.00 Lbd = 8.00

141
Program LAB_56;
Uses Crt;
Var
Alfa: real;
x1, x2, x3, x4: real;
y1, y2, y3, y4: real;
Lac, Lbd, S: real;
Lromba: real;
FUNCTION DLN(x1,x2,y1,y2:real):real;
Begin
DLN:= sqrt (sqr(x1-x2)+sqr(y1-y2));
end;
BEGIN
Clrscr;
x1:=2; y1:=8; x2:=8; y2:=4; x3:=14; y3:=8; x4:=8; y4:=12;
Lac:= DLN (x1,x3,y1,y3);
Lbd:= DLN (x2,x4,y2,y4);
Lromba:= DLN (x1,x2,y1,y2);
S:=Lac*Lbd/2;
Alfa:= S/sqr(Lromba);
writeln(‘ Lromba=’,Lromba:7:3,’ S=’,S:7:3);
writeln(‘ Lac=’,Lac:6:2,’ Lbd=’,Lbd:6:2);
writeln (‘ sin( alfa )=’, Alfa:6:4);
END.
Lromba = 7.211 S = 48.000
Lac = 12.00 Lbd = 8.00
Sin (alfa)= 0.9231

142
Program LAB_57;
Uses Crt;
Var
p:real; x1, x2 ,x3, x4: real; y1, y2, y3, y4: real;
Lac,Lbc, S:real;
Lab: real;
FUNCTION DLN(x1,x2,y1,y2:real):real;
begin
DLN:= sqrt (sqr(x1-x2)+sqr(y1-y2));
end;
BEGIN
Clrscr;
x1:=0; y1:=4; x2:=2; y2:=9; x3:=8; y3:=3; x4:=6; y4:=-2;
Lab:= DLN (x1,x2,y1,y2);
Lac:= DLN (x1,x3,y1,y3);
Lbc:= DLN (x2,x3,y2,y3);
p:=( Lab + Lac + Lbc )/2;
S:= 2*sqrt(p*(p-Lab)*(p-Lac)*( p- Lbc));
writeln(‘ S=’,S:7:3);
writeln(‘ Lab=’,Lab:6:3,’ Lac=’,Lac:6:3,’ Lbc=’,Lbc:6:3);
END.
S= 42.000
Lab = 5.385 Lac = 8.062 Lbc = 8.485

Program LAB_58;
Uses Crt;
Var
Calfa: real;
x1, x2,x3, x4: real;
y1, y2, y3, y4: real;
Lac, Lbd, S: real;
Lab, Lbo, Lao : real;
FUNCTION DLN(x1,x2,y1,y2:real):real;
begin

143
DLN:= sqrt (sqr(x1-x2)+sqr(y1-y2));
end;
BEGIN
Clrscr;
x1:=0; y1:=4; x2:=2; y2:=9; x3:=8; y3:=3; x4:=6; y4:=-2;
Lac:= DLN (x1,x3,y1,y3);
Lbd:= DLN(x2,x4,y2,y4);
Lab:= DLN(x1,x2,y1,y2);
Lbo:=0.5*Lbd;
Lao:=0.5*Lac;
Calfa:=(Lao* Lao + Lbo* Lbo- Lab* Lab)/(2* Lao* Lbo);
writeln(‘ cos(Alfa)=’,Calfa:6:4);
writeln(‘ Lab=’,Lab:6:2, ‘ Lac=’,Lac:6:2,’ Lbd=’,Lbd:6:2);
END.
cos(Alfa)=0.4557
Lab = 5.39 Lac = 8.06 Lbd = 11.70

Лабораторная работа LAB 59

Пусть вектор A B задан координатами точек A и B . A A1 , A2  , B  B1 , B2 .


 задан координатами точек C  C1 , C2  и D  D1 , D2  .
Вектор C D

Координаты вектора A B X1 и Y1 соответственно равны:

X1=B1−A1 ; Y1= B2− A2 .


Координаты вектора C D X2 и Y2 соответственно равны:

X2= D1−C1 ; Y2= D2−C2 .

Условие перпендикулярности двух векторов – это равенство нулю их

скалярного произведения:

X1∗X2Y1∗Y2=0 .

Координаты точек A , B,C D вводятся в основной программе. В основной

программе осуществляется вывод информации. Подпрограмма вычисляет

144
координаты векторов и их скалярное произведение.

Program LAB_59;
Uses Crt;
Var
xa, xb, ya, yb, xc, xd, yc, yd: real;
pw, x1, y1, x2, y2: real;
Function Pv (x1,x2,y1,y2:real):real;
begin
x1:=xb-xa; y1:=yb-ya;
x2:=xd-xc; y2:=yd-yc;
Pv:=x1*x2+y1*y2;
end;
BEGIN
Clrscr;
xa:=2; ya:=8;
xb:=14; yb:=8;
xc:=8; yc:=4;
xd:=8; yd:=12;
pw: = Pv (x1,x2,y1,y2);
if Pw=0 then
writeln (‘ Векторы перпендикулярны’);
else
writeln (‘ Векторы не перпендикулярны);
END.
Bекторы перпендикулярны

Лабораторная работа LAB 510.

Арифметическая прогрессия a 1 , a 2 , a 3 . . . . a n
Формула суммы членов арифметической прогрессии:

 a 1 a n n  2a1 d  n−1 ] n
S= или S = ,
2 2
где n - количество членов арифметической прогрессии,

a n =a 1 d  n−1  -последний член прогрессии,

145
d -разность прогрессии. d =a 2 −a 1 .
В примере арифметическая прогрессия: 2, 5, 8,…

Program LAB_510;
Uses Crt;
Var
i:integer;
N1,s,a1,a2,a3,d:real;
N:array[1..3] of real;
Procedure SPR(a1,d,N:real;var S:real);
begin
S:=(2*a1+d*(N-1))*N/2;
end;
BEGIN
Clrscr;
writeln(‘ Сумма арифметической прогрессии‘);
a1:=2; a2:=5; a3:=8; d:=a2-a1;
For i:=1 to 3 DO
begin
write(‘N(i)=’);
read(N[i]);
end;
For i:=1 to 3 Do
begin
SPR(a1,d,N[i],S);
Writeln(‘ N=’,N[i]:3:0,’ S=’,S:8:2);
end;
END.
Сумма арифметической прогрессии
N= 10 S= 155.00
N= 20 S= 610.00
N= 35 S= 1855.00

Лабораторная работа LAB 511

146
Необходимые формулы приведены в конце программы.

Program LAB_511;
Uses Crt;
Var
i, j: integer;
S:real;
t: array[1..3,1..2] of real;
V0: array[1..3] of real;
a: array[1..3] of real;
Procedure Sp (V0,a,t:real;var S:real);
begin
S:=V0*t+a*t*t/2 ;
end;
BEGIN
Clrscr;
For i:=1 to 3 do
begin
write(‘ V0=’);
read(V0[i]);
write(‘ a=’);
read(a[i]);
for j:=1 to 2 do
begin
write(‘t=’);
read(t[i,j]);
end;
end;
For i:=1 to 3 do
begin
for j:=1 to 2 do
begin
SP(V0[i],a[i],t[i, j],S);

147
writeln(‘ V0=’,V0[i]:4:2,’ a=’, a[i]:4:2,’ t=’, t[i, j]:4:1);
writeln(‘ S=’,S:7:2);
end;
end;
END.

Определение пути

V0=2.00 a=3.00 t= 2.0 S= 10.00

V0=2.00 a=3.00 t= 5.0 S= 47.50

V0=10.00 a=-2.00 t = 1.0 S= 9.00

V0=10.00 a=-2.00 t= 3.0 S= 21.00

V0=3.50 a=1.50 t= 0.0 S= 0.00

V0=3.50 a=1.50 t=10.0 S= 110.00

Пройденный точкой путь за время от t 1 до t 2 вычисляется по формуле

t2
at 2
S=∫ V 0 at dt =V 0 t  ,
t
2
1

1
В момент времени пройденный путь S 1 , в момент времени t 2 -пройденный путь
talignl¿¿¿ ¿
S 2 . Пройденный путь за время t 2 −t 1 будет S =S 2−S 1 .
at 2
Выражение V 0 t можно оформить как процедуру, значения которой
2
вычисляются при t 1 и t 2 .

148
Лабораторная работа LAB_512

Сумма членов геометрической прогрессии определяется по формуле:

a 1 −a n q a 1 −a 1 q n a 1 1−q n 
S= = = ,
1−q 1−q 1−q
если прогрессия убывающая.
Если n меняется, то S= f n  . Вычисление суммы членов прогрессии можно
оформить как функцию пользователя (процедуру) и обращаться к ней при каждом
новом значении n ( в цикле ).
Program LAB_512;
Uses Crt;
Var
i:integer;
N1,s,a1,a2,a3,q:real;
N:array[1..3] of real;
Procedure SGP(a1,d,N:real;var S:real);
begin
S:=(a1*(1-exp(N*ln(q))))/(1-q);
end;
BEGIN
Clrscr;
a1:=10;
a2:=5;
a3:=2.5;
q:=a2/a1;
For i:=1 to 3 DO
begin
write(‘N(i)=’);
read(N[i]);
end;
writeln(‘ Сумма геометрической прогрессии‘);
writeln;

149
For i:=1 to 3 Do
begin
SGP(a1,q,N[i],S);
Writeln(‘ N=’,N[i]:3:0,’ S=’,S:8:2);
end;
END.
Сумма геометрической прогрессии
N= 2 S= 15.0000
N= 5 S= 19.3750
N= 10 S= 19.9805

Program LAB_513;
Uses Crt;
Const N1=4;
Const N2=3;
Var
k,i,j:integer;
s:real;
Mas:array[1..N1,1..N2] of real;
Type
U=array[1..N2] of real;
Var Ur:U;
Procedure Smas(k, N2: integer; Ur :U; var S: real) ;
begin
s:=0;
for k:=1 to N2 do
begin
S:=S+Ur[k];
end;
end;
Begin
Clrscr;
writeln(' Введите элементы массива ');
For i:=1 to N1 do

150
for j:=1 to N2 do
begin
write(i, j, 'элемент');
end;
readln(Mas[i,j]);
For i:=1 to N1 do
begin
For k:=1 to N2 do
Begin
Ur[k]:=Mas[1,k];
SMas(k, N2, Ur, S);
writeln(' s=', s:7:3);
end;
end;
END.
Введите элементы массива
11элемент:-3
12элемент:5
13элемент:6
21элемент:0
22элемент:1
23элемент:2
31элемент:-5
32элемент:4
33элемент:-7
41элемент:1
42элемент:2
43элемент:-11
s= 8.000
s= 3.000
s= -8.000
s= -8.000

151
Program LAB_514;
Uses Crt;
Const N1=5;
Const N2=3;
Var k,i,j:integer; s:real;
Var Mas:array[1..N1,1..N2] of real;
Type
U=array[1..N2] of real;
Var Ur:U;
Procedure Smas(k, N1: integer;Ur:U; var S:real);
begin
s:=0;
for k:=1 to N1 DO
begin
S:=S+Ur[k];
end;
end;
Begin
Clrscr;
writeln(' Введите элемент массива ');
For i:=1 to N1 DO
for j:=1 to N2 DO
begin
write(i,j,элемент');
readln(Mas[i,j]);
end;
For i:=1 to N2 DO
begin
For k:=1 to N1 DO
Begin
Ur[k]:=Mas[i,k];
end;
SMas(K,N1,Ur, S);
writeln(' s=', s:7:3);

152
end
END.
Введите элементы массива
11элемент: 2
12элемент: 3
13элемент: 1
21элемент: -1
22элемент: 2
23элемент: 5
31элемент: 0
32элемент: -5
33элемент: -3
41элемент: 3
42элемент: 4
43элемент: 7
51элемент: 1
52элемент: 2
53элемент: -4
S = 5.000
S= 6.000
S=6.000

153
154
Литература

1. Алтухов Е.В., Рыбалко А.А., Савченко В.С. ” Основы информатики и вычислительной

техники” М., ”Высшая школа”, 1992, 303 с.

2. Бутомо И.Д., Самочадин А.В., Усанова Д.В.,” Программирование на алгоритмическом


языке ПАСКАЛЬ для микро ЭВМ”. Ленинград. Издательство Ленинградского Университета.
1985. 214с.
3. Турбо Паскаль К.: Издательство группы BHV, 2000.- 432 c.
4. Фаронов В.В. “ Турбо Паскаль “. М.: Издательство “ Нолидж”., www.knowledge.ru
2002, 571 c.

155
156
157
158

You might also like