Практикум по программированию.Паскаль

158
А.А. Руденко, А.Г. Руденко, Н.А Руденко ПРАКТИКУМ ПО АЛГОРИТМИЧЕСКОМУ ПРОГРАММИРОВАНИЮ ТУРБО ПАСКАЛЬ ProCNC. Info 2008 1

Upload: vspraga

Post on 16-Nov-2014

52 views

Category:

Documents


2 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Практикум по программированию.Паскаль

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

ПРАКТИКУМ

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

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

ProCNC. Info2008

1

Page 2: Практикум по программированию.Паскаль

СОДЕРЖАНИЕ

ПРЕДИСЛОВИЕ ………………………………………………………………………. 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

Page 3: Практикум по программированию.Паскаль

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

Page 4: Практикум по программированию.Паскаль

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

Page 5: Практикум по программированию.Паскаль

ПРЕДИСЛОВИЕ

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

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

школ созданы компьютерные классы, но эти классы недостаточно снабжены методическими

пособиями, сборниками лабораторных работ и упражнений, компьютерными программами.

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

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

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

авторам не встречались.

В качестве алгоритмического языка взят язык Турбо Паскаль. Его структура, операторы

изложены в разделе 1, содержащего 6 глав. Здесь работа каждого из рассмотренных

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

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

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

приведены в конце раздела.

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

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

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

перерешать все задачи лабораторных работ.

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

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

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

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

Как показывает наш опыт работы выполнение этих упражнений и лабораторных работ

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

Турбо Паскаль.

5

Page 6: Практикум по программированию.Паскаль

РАЗДЕЛ 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

Page 7: Практикум по программированию.Паскаль

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

Page 8: Практикум по программированию.Паскаль

Например: 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

Page 9: Практикум по программированию.Паскаль

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

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

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

CASE, ARRAY и т.д. являются неправильными.

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

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

эквивалентны.

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

цифры.

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

создания идентификаторов, составляющих из двух слов, можно воспользоваться

большими буквами (например, DOMMOD) или символом подчеркивания (DOM_MOD),

но не пробелом (DOM MOD).

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

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

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

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

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

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

знаков;

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

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

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

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

9

Page 10: Практикум по программированию.Паскаль

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

Page 11: Практикум по программированию.Паскаль

Глава 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

Page 12: Практикум по программированию.Паскаль

В:=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

Page 13: Практикум по программированию.Паскаль

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);

16.40 14.25

P:6:2 – указывает, что для вывода

переменной отводится 6 позиций, а

число знаков после десятичной точки

должно быть 2.Write (`P=`,P:6:2, `S=`, S:6:2);

P=16.40 S=14.25

`P=`- дается команда напечатать P=

Write(`P=`,P:6:2,` `,`S=`,S:6:2);

P=16.40 S=14.25

` `- пробелы между P и S

Write(` P=`, P:6:2,` `,`S=`,S:6:2); Символ Р будет печататься на некотором

13

Page 14: Практикум по программированию.Паскаль

P=16.40 S=14.25 расстоянии от левого края экрана.Writeln (` P=`,P:6:2);

Writeln (` S=`,S:6:2);

P=16.40

S=14.25

P и S будут напечатаны в разных строках

Writeln (` P=`, P:6:2);

Writeln;

Writeln(` S=`,S:6:2);

P=16.40

S=14.25

Пустой оператор. Он увеличивает

расстояние между строками.

2.3. Линейные программыПример 2.4. Составить программу вычисления среднего арифметического,

среднего геометрического и среднего гармонического двух чисел a и b.

Среднее арифметическое s=ab2

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

Число с называется средним гармоническим чисел a и b,если

1c=1

2 1

a1

b . c= 2ab

ab

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

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

Page 15: Практикум по программированию.Паскаль

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

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

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

и осуществляет переход к оператору с меткой. Метка должна быть описана в программе. Описание меток состоит из зарезервированного слова 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

GOTO <метка>;

Page 16: Практикум по программированию.Паскаль

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

где В – условие; P и Q – операторы; IF (если) THEN (то) ELSE (иначе) – служебные слова.

Условие В представляет логическое выражение. В простейшем случае – это отношение

вида:

A1=A2, A1>A2, A1<A2, A1>=A2, A1<=A2, A1<>A2.

А1 и А2 – арифметические выражения.

Логическое выражение принимает одно из двух возможных значений:

«истина» (да) или «ложь» (нет).

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

.

16

IF B THEN P ELSE Q;

В Р

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

истина

Page 17: Практикум по программированию.Паскаль

Пример 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.

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

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

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

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

17

IF B THEN P

истина

ложь

В

Р Следующий

Page 18: Практикум по программированию.Паскаль

Пример 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

Page 19: Практикум по программированию.Паскаль

Пример 3.5.

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

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

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

Пример 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

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

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

y

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

3Х< -3 X>4 -3 4

X < -3 OR X > 4

Page 20: Практикум по программированию.Паскаль

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

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

условного оператора.

Например:

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

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

ax 2bxc=0 .

x1=−bb2−4 ac

2a ; x2=

−b−b2−4ac2a

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

а = 2; a = 2;

b = 3; b = 1;

c = -1; c = 7.

20

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

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

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

Page 21: Практикум по программированию.Паскаль

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

21

Начало

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

d: = -4ac

d<0

Вычисление X1,X2

Вывод a,b,c;X1,X2

Вывод «Действительных корней нет»

Конец

НЕТ

ДА

Page 22: Практикум по программированию.Паскаль

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 = 2b= 3c=- 1 x1= 0.2808 x2= -1.7808Рeшeнue квадратного уравненияa= 2b= 1c= 7Действительных корней нет

22

Page 23: Практикум по программированию.Паскаль

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

Принять: a = -2; b = 2; h = 0,5.

Блок – схема

23

Начало

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

x = a

y = +4x-1

Вывод X,Y

х: = x + h x≤

Конец

да

Нет

Page 24: Практикум по программированию.Паскаль

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

Page 25: Практикум по программированию.Паскаль

Глава 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

Page 26: Практикум по программированию.Паскаль

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

образом: 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

Page 27: Практикум по программированию.Паскаль

Как видим списки типов индексов пишутся в одних квадратных скобках и отделяются

друг от друга запятыми. В этом случае элемент матрицы С [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

Page 28: Практикум по программированию.Паскаль

МАССИВ В

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 – сумма положительных чисел;

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

да

нет

да нет

28

начало

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

SP:=0

SO:=0

I:=1

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

a[i]>=

SO: = SO+a(I)

SP:=SP+a(I)

I:=I+1 I<=6

вывод

конец

Page 29: Практикум по программированию.Паскаль

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

Page 30: Практикум по программированию.Паскаль

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

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

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

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

Конструкция счетного оператора цикла:

FOR X:= m1 TO m2 DO

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

m1 – начальное значения параметра цикла;

m2 – конечное значения цикла.

Здесь служебные слова FOR (для) TO (до) DO (выполнить)

m1, m2 должны получать значения до начала выполнения оператора FOR и не менять эти

значения в процессе выполнения оператора цикла.

Обычно m1 и m2 являются переменными целого типа, а шаг изменения от начального

до конечного равен 1( h=1 ).

Выполнение оператора цикла можно представить в виде следующей схемы

30

X: =m1

тело цикла

X: =X+1

X≤ m2

следующий

оператор

да

нет

Page 31: Практикум по программированию.Паскаль

Если шаг 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

Page 32: Практикум по программированию.Паскаль

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

15.

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

32

Начало

S:=Ø

k: =1

S: = S +

k:= k+1

k ≤ 15

Вывод S

Конец

Да

Нет

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

Сумма обратных квадратов S=1.5804.

Page 33: Практикум по программированию.Паскаль

Пример 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

Page 34: Практикум по программированию.Паскаль

Пример 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

Page 35: Практикум по программированию.Паскаль

Пример 5.5. Вычислить сумму

S=∑k =1

4 ∑n=1

ksin kn

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

Page 36: Практикум по программированию.Паскаль

Пример 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

Page 37: Практикум по программированию.Паскаль

Пример 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

Page 38: Практикум по программированию.Паскаль

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

Page 39: Практикум по программированию.Паскаль

Пример 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

Page 40: Практикум по программированию.Паскаль

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

Page 41: Практикум по программированию.Паскаль

Пример 5.11. Вычислить сумму четных степеней переменной х S= 2k, когда очередное значение степени 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

Page 42: Практикум по программированию.Паскаль

Пример 5.12. Найти корень кубический из числа N с точностью до 0,0001 по формуле

xk1=

2x kNx k

2

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

Page 43: Практикум по программированию.Паскаль

Пример 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

Page 44: Практикум по программированию.Паскаль

Пример 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

Page 45: Практикум по программированию.Паскаль

Пример 5.15. Последовательность x1 , x2 , . . . образована по закону xi=i−0 .1

i3∣tg 2i∣

( i= 1,2…). Известно действительное число E>0. Записать члени последовательности x1 , x2 , . . . остановившись после первого члена , для которого виполняется ∣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

Page 46: Практикум по программированию.Паскаль

Пример 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

Page 47: Практикум по программированию.Паскаль

Пример 5.17. Задано натуральное число n. Вычислить выражение ∑k=0

n −1 k k1 k !

.

∑k =0

n −1 k k1 k !

= 1−2 32!

− 43!

. . . .−1k k1k !

. . .

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

U k−1=−1 k kk−1 ! ; U k=

−1 k k1 k ! .

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

множитель U k

U k−1=−1k k1 k−1!

k ! −1k−1 k=−k1

k 2 .

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

Page 48: Практикум по программированию.Паскаль

Пример 5.18. Заданы целые числа a1 , a2 . . . .a n . Вычислить сумму тех чисел

последовательности, которые удовлетворяют условию ∣ai∣i2 .

Заданные числа составляют массив 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

Page 49: Практикум по программированию.Паскаль

Глава 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

Page 50: Практикум по программированию.Паскаль

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

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

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

Результатом выполнения подпрограммы 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

Page 51: Практикум по программированию.Паскаль

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

Page 52: Практикум по программированию.Паскаль

Пример 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

Page 53: Практикум по программированию.Паскаль

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

Page 54: Практикум по программированию.Паскаль

Пример 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

Page 55: Практикум по программированию.Паскаль

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.

x1,2=−b±b2−4 ac

2a Детерминант D = КРК – корень

квадратный.

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

55

Page 56: Практикум по программированию.Паскаль

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

Page 57: Практикум по программированию.Паскаль

Решение квадратного уравнения : 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

Page 58: Практикум по программированию.Паскаль

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

Page 59: Практикум по программированию.Паскаль

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

Page 60: Практикум по программированию.Паскаль

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

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

Page 61: Практикум по программированию.Паскаль

“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

Page 62: Практикум по программированию.Паскаль

“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

Page 63: Практикум по программированию.Паскаль

“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

Page 64: Практикум по программированию.Паскаль

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

Page 65: Практикум по программированию.Паскаль

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

Page 66: Практикум по программированию.Паскаль

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

Page 67: Практикум по программированию.Паскаль

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

Page 68: Практикум по программированию.Паскаль

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

Page 69: Практикум по программированию.Паскаль

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

Page 70: Практикум по программированию.Паскаль

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

Page 71: Практикум по программированию.Паскаль

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

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

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

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

объединившая главы ”Массивы” и ”Операторы цикла”.

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

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

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

соответствующих упражнений, читатель приступит к выполнению лабораторных работ. Для

этого читателю необходимо проанализировать задачу, составить блок-схему и написать

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

необходимо ввести в компьютер, отладить(т.е выловить ошибки, которые обнаружатся) и

получить числовой результат на экране.

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

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

материала.

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

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

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

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

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

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

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

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

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

71

Page 72: Практикум по программированию.Паскаль

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

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

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

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

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

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

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

Вариант

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

1LAB_111

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

2

LAB_121

LAB_122

ln

3

LAB_131 LAB_132

4 LAB_141

LAB_142

5

LAB_151 sin +

LAB_152 1 + x + ln

6

LAB_161

LAB_162 y – 2 arctgx – sin ln

7

LAB_171

LAB_172 xtg +2ln

72

Page 73: Практикум по программированию.Паскаль

8

LAB_181

LAB_182

9

LAB_191

LAB_192 y –

10

LAB_1101 LAB_1102

11 LAB_1111

LAB_1112 x sin x/(

12

LAB-1121

LAB-1122 ab2 / c 3sin x cos x

13 LAB_1131

LAB_1132

14

LAB_1141

LAB_1142 x ln

15

LAB_1151

LAB_1152

73

Page 74: Практикум по программированию.Паскаль

3.3 . Лабораторная работа “LAB_2“:

«Оператора присваивания, ввода – вывода»

Цель: овладение навыками записи операторов присваивания, ввода-вывода и

использовании линейных программ.

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

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

присваивается новое значение?5. Какова структура оператора ввода?6. Как осуществляется выполнение оператора вывода?7. Как выводится на экран дисплея комментарий к тексту?8. Как выполняется оператор вывода?

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

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

параметров.

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

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

1LAB_211

LAB_212 x2=5,72

.

2 LAB_221

x = 2; a = 248;b =87,2

LAB_222 5,87

3 LAB_231 x = 5; a = 23,5;

b =0,129; c = 350LAB_232

74

Page 75: Практикум по программированию.Паскаль

6,31

4LAB_241 x = 2,57;

y = 13,76

LAB_242 2,79

5

LAB_251 a = 1,25; b = -1,75;x = 4,78

LAB_252 6,31

6LAB_261 x = 2,15;

y = 9,78.

LAB_262 1,76

7LAB_271 a = 1,9;

b =0,04; c = 6LAB_272

2,56

8LAB_281 m = 1,2;

n = -3,76LAB_282

2,57

9LAB_291 a = 0,7;

b = -3,1

LAB_292 3,93

10LAB_2101 a = 3,2;

b =2; c = 0,75LAB_2102

2,74

11LAB_2111 x = 3,35; y = -0,27;

a = 2,1LAB_2112

1,74

12LAB_2121 x = -1,7; y = 3,2;

LAB_2122

75

Page 76: Практикум по программированию.Паскаль

2,64

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

a = 3,861

LAB_2132 1,25

14LAB_2141 x = 0,34; y = 0,95;

a = -0,5

LAB_2142 3,11

15LAB_2151 a = 9;

b =3,5; c = -1,2LAB_2152

1,12

76

Page 77: Практикум по программированию.Паскаль

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

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

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

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

2. Какова структура полного оператора условной передачи управления?

3. Как выполняются условный оператор передачи управления?

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

5. Какой вид имеет условие в операторе условной передачи управления?

Задание: вычислить значение функции Y при заданном значении t.

Варианты задание приведены в таблице.

Образец выполнения лабораторной работы “LAB-3“

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

, Блок-схема

да

нет

77

начало

конец

Вывод

Т = 1,27

Page 78: Практикум по программированию.Паскаль

При заданном значении 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

Page 79: Практикум по программированию.Паскаль

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

Page 80: Практикум по программированию.Паскаль

”Массивы. Оператор цикла”Цель работы: овладения навыками описания и формирования массива,

программирование циклических алгоритмов с помощью оператора цикла.

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

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 LAB_431 y= 3,8; 0,15; 15,1;

17,8; 39,2

4 LAB_441 y= 8,1; 12,3; 15,2;

31,5; 39,08

80

Page 81: Практикум по программированию.Паскаль

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

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

10 LAB_4101 y= 2arctgx – sin2,15; 2,3; 2,35;

2,37; 2,511 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

Page 82: Практикум по программированию.Паскаль

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Найти сумму первых десяти членов последовательности

.

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

82

Page 83: Практикум по программированию.Паскаль

4 LAB_442Используя формулу q, найти первые 10 членов арифметической прогрессии и их сумму, если

; d =1,5.

5 LAB_452

Вычислить значения многочленаP(x) + , записав его по схеме Горнера при х=2,5;

6 LAB_462 Вычислить значение функции y= для х є [-3; 1] с шагом Н=0,5.

7 LAB_472Найти количество отрицательных элементов массива и их сумму. 3; -2,7; 5; 11; -1,8; -0,9; 2,3; -15; 14; -8,7.

8 LAB_482

Заданы два массива А(5) и В(5).А(5)= 3; -2,7; 8; -4,1; 5,3; 6,8В(5)= -2; 8; 4,7; -11; 8,9; -15.Найти сумму S= .

9 LAB_492Найти сумму первых пяти членов последовательности

при х=3,2.

10 LAB_4102

Заданы два массива А(5) и В(5). Сформировать новый массив С(5) по правилу A(5)=7; 8,1; 9,3; -2,7; -0,5; 1,4B(5)=3; 1,2; 7; 9,3; 1,5; 5,2;

11 LAB_4112Из массива А(10) выдать на печать отрицательные элементы, стоящие на нечетных местах.А(10)=-3; -7; 9; 10; 11; -7,5; 8,1; 3,4; 2; -4; 3,5

12 LAB_4122Величина х принимает значения 1; 1,2; 1,4; 1,6; 1,8; 2.

Найти соответствующие значения .

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

с Н=0,5 и количество положительных значений среди вычисленных.

14 LAB_4142Найти сумму отрицательных значений функции

, принимаемых ею на [-3;3] с шагом Н=0,5.

15 LAB_4152Из массива заданных чисел найти среднее арифметическое положительных чисел. Заданные числа: 2; 7; -13; -8; 19; 5; -3; 15; -6; 21

83

Page 84: Практикум по программированию.Паскаль

Задание 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

Page 85: Практикум по программированию.Паскаль

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

Page 86: Практикум по программированию.Паскаль

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

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

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

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

1. Что такое функция пользователя?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

операторов и правил программирования.

86

Page 87: Практикум по программированию.Паскаль

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

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

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

тяжести заданных треугольников.

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)

M

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

A1 A2 B1 B2 C1 C2 D1 D2 M1 M2

87

Page 88: Практикум по программированию.Паскаль

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

Page 89: Практикум по программированию.Паскаль

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

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,52. a=13,4 b=8,3 h=5,73. 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

Page 90: Практикум по программированию.Паскаль

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; ;

12 LAB_512

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

13 LAB_513

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

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

90

Page 91: Практикум по программированию.Паскаль

14 LAB_514

Задана прямоугольная таблица чисел из 5 строк и 3 столбцов. Составить подпрограмму для вычисления суммы элементов столбца. Используя эту подпрограмму, вычислить сумму элементов каждого столбца: 2 3 1 -1 2 5 0 -5 -3 3 4 7 1 2 -4

15 LAB_515

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

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

Page 92: Практикум по программированию.Паскаль

РАЗДЕЛ 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))

4

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

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

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

5

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

Page 93: Практикум по программированию.Паскаль

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

Page 94: Практикум по программированию.Паскаль

x1,x2,y:real;BeginClrScr;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;

varx1,x2,z1,z2,z:real;BeginClrScr;

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;

BeginClrScr;

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

Page 95: Практикум по программированию.Паскаль

Program Lab_222;Uses Crt;Var x1,x2,z1,z2,z:real;BeginClrScr;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;BeginClrscr;

x1:=0.37;x2:=6.31;z1:=exp(-x1*x1+1);

95

Page 96: Практикум по программированию.Паскаль

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;BEGINClrScr;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.8553z= 2.2685

96

Page 97: Практикум по программированию.Паскаль

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;BeginClrScr;

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;BeginClrScr;

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

Page 98: Практикум по программированию.Паскаль

Program Lab_262;Uses Crt;Var x1,x2,z1,z2,z:real;BeginClrScr;

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;BeginClrScr;

x1:=0.74;x2:=2.56;

98

Page 99: Практикум по программированию.Паскаль

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;BeginClrScr;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;BeginClrScr;

x1:=1.59;

99

Page 100: Практикум по программированию.Паскаль

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;BeginClrScr;

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;BeginClrScr;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

Page 101: Практикум по программированию.Паскаль

Program Lab_2111;

Uses Crt;Var x, y, a, z : real;BeginClrScr;

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;

BeginClrScr;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;BeginClrScr; 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

Page 102: Практикум по программированию.Паскаль

Program Lab_2122;

Uses Crt;Var x1, x2, z1, z2, z: real;BeginClrScr;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;BeginClrScr;

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

Page 103: Практикум по программированию.Паскаль

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;BeginClrScr;

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;BeginClrScr;

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

Page 104: Практикум по программированию.Паскаль

Program Lab_2152; USES CRT

BeginClrScrx1:=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;BeginClrscr;

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

Page 105: Практикум по программированию.Паскаль

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;beginClrscr;

t:=0.7;x:=t*t+1.3*t+1;if x<=2.3 then

y:= sqr (sin(x))

105

Page 106: Практикум по программированию.Паскаль

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;beginClrscr;

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;beginClrscr;

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

Page 107: Практикум по программированию.Паскаль

Program LAB_37;Uses Crt;var x, y, t : real;beginClrscr;

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

Page 108: Практикум по программированию.Паскаль

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;beginClrscr: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

Page 109: Практикум по программированию.Паскаль

Program LAB_311;

Uses Crt;var x, y, real;beginClrscr;

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;BeginClrscr;

t:=-1.75;x:=t*t+3*t+1;

109

Page 110: Практикум по программированию.Паскаль

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;beginClrscr;

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

Page 111: Практикум по программированию.Паскаль

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.644x= 1.300 Y=-42.313x= 1.800 Y=338.008x= 2.800 Y=656.363x= 3.600 Y=1859.281

111

Page 112: Практикум по программированию.Паскаль

Program LAB_421;Uses Crt;Const N=5;VAR

i: integer;y: real;

X: array [1..N] of real;BEGINClrscr;For i:=1 to N do

beginwrite(‘i=’);read(X[i]);end;

For i:=1 to N DObeginy:= 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.71223x= 5.50 y=-5.00441x= 6.10 y=-2.81073x= 6.50 y=-1.95228x= 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

Page 113: Практикум по программированию.Паскаль

Clrscr;a:=1.2;For i:=1 to N DObeginwrite(‘i=’); readln (X[i]);end;For i:=1 to N DObeginIF (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.010x= 0.15 y= 1.661x=15.10 y=-0.541x=17.80 y=-0.347x=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;BEGINClrscr;

a:=1.2;b:=2.4;c:=5.4;

For i:=1 to N DO

113

Page 114: Практикум по программированию.Паскаль

beginwrite(‘i=’);read(X[i]);end;

For i:=1 to N DObegin 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.05855x = 2.300 y= 0.75505

Program LAB_451;Uses Crt;Const N=5;Var

i: integer;y: real;

X: array[1..N] of real;BEGINClrscr;For i:=1 to N Do

beginwrite (‘i=’);read(X[i]);end;

For i:=1 to N dobegin y:=(X[i]*sin(X[i]))/(X[i]*X[i]+5)+X[i]*X[i]*X[i]-2;

114

Page 115: Практикум по программированию.Паскаль

writeln(‘ x=’,X[i]:6:2,’ y=’,y:7:3); end;End.x= -3.10 y= -31.7822x= 2.52 y= 14.1323x= 5.81 y= 194.0546x= 7.50 y= 419.9899x= 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;BEGINClrscr;For i:=1 to N DObeginwrite(‘i=’); read(X[i]);end; a:=1.2;For i:=1 to N dobegin 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.35970x= 1.10 y=-0.14895x= 1.15 y=-0.06839x= 1.30 y= 0.10905x= 1.60 y= 0.30570

115

Page 116: Практикум по программированию.Паскаль

Program LAB_471;Uses Crt;Const N=5;

vari : 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.00000x= 1.80 y= 2.42797x= 2.20 y= 7.39549x= 2.50 y= 13.31704x= 7.50 y=849.03721

116

Page 117: Практикум по программированию.Паскаль

Program LAB_481;Uses Crt;Const N=5;VAR

i: integer;y, a, b, c: real;

X: array[1..N] of real;BEGINClrscr;For i:=1 to N DObeginwrite(‘i=’); read(X[i]);end; a:=1.2; b:=2.4; c:=5.4;For i:=1 to N DObeginy:= 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.492x= 3.00 y=23.400x= 2.50 y=18.900x= 8.00 y=101.400x=70.00 y=6053.400

117

Page 118: Практикум по программированию.Паскаль

Program LAB_491;Uses Crt;Const N=5;Var

i: integer;y: real;

X: array [1..N] of real;BEGINFor i:=1to N DObeginwrite(‘i=’); read(X[i]);end;For i:=1 to N dobegin 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.065x= 0.60 y= 0.094x= 0.90 y= 0.225x= 1.10 y= 0.355x= 1.50 y= 0.773

118

Page 119: Практикум по программированию.Паскаль

Program LAB_4101;Uses Crt;Const N=5;VAR

I : integer;y : real;

X: array[1..N] Of real;BEGINClrscr;For i:=1 to N DO

beginwrite(‘i=’);read(X[i]);end;

For i:=1 to N DObegin 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.817x= 2.30 y= 2.826x= 2.35 y= 2.828x= 2.37 y= 2.828x= 2.50 y= 2.827

119

Page 120: Практикум по программированию.Паскаль

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

beginwrite(‘i=’);read(X[i]);end;

For i:=1 to N dobegin 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.227x=-9.00 y=-5.803x= 0.50 y= 0.807x= 2.40 y= 4.275x= 3.40 y= 5.624

120

Page 121: Практикум по программированию.Паскаль

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 DObeginwrite(‘i=’); read(X[i]);end; a:=1.2;For i:=1 to N dobegin 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.812x=-1.05 y=-1.086x= 1.65 y= 0.249x= 3.25 y= 2.211

121

Page 122: Практикум по программированию.Паскаль

Program LAB_4131;Uses Crt;Const N=5;VAR

i:integer;y:real;

X: array [1..N] of real;BEGINFor i:=1 to N DO

beginwrite(‘i=’);read(X[i]);end;

For i:=1 to N DObegin 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.010x= 1.23 y= 0.441x= 5.20 y= 0.008x= 4.60 y= 0.009

122

Page 123: Практикум по программированию.Паскаль

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

beginwrite(‘i=’);read(X[i]);end;

For i:=1 to N DObegin 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.285x= 0.00 y= 1.000x= 1.20 y= 0.530x= 3.50 y=-0.097x= 5.00 y=-0.026

123

Page 124: Практикум по программированию.Паскаль

ЗАДАНИЕ 2

Program LAB_412;

Uses Crt;VAR

k, s: integer;label lb1;

BEGINClrscr;S: =0;For k:=1 to 99 DObegin 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;

BEGINClrscr;s:=0;For k:=1 to 10 DO

begin

124

Page 125: Практикум по программированию.Паскаль

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;BEGINClrscr;

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.20a=-10.40a= 20.80a=-41.60a= 83.20a=-166.40a=332.80a=-665.60a=1331.20a=-2662.40s=-1773.20

125

Page 126: Практикум по программированию.Паскаль

Program LAB_442;Uses Crt;VAR

a,d,s:real;k:integer;

BEGINClrscr;

a:=4.6; d:=1.5;s:=0.0;

For k: =1 to 10 DObegin 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

Page 127: Практикум по программированию.Паскаль

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

Page 128: Практикум по программированию.Паскаль

Program LAB_462;Uses CRT;

Vark,i:integer;a,b,y,h,x:real;

BEGINClrscr;

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.00x=-2.50 y=-70.00x=-2.00 y=-35.00x=-1.50 y=-13.00x=-1.00 y= -1.00x=-0.50 y= 4.00

Program LAB_472;Uses Crt;Const N=10;VarX:array[1..N] of real;

k,i:integer;s: real;

BEGINClrscr;s:=0;

128

Page 129: Практикум по программированию.Паскаль

For i:=1 to N dobegin 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;VARi:integer;s : real;A:array[1..6] of real;B: array [1..6] Of real;BeginClrscr;for i:=1 to N dobegin write(‘i=’); read(A[i]);

129

Page 130: Практикум по программированию.Паскаль

write(‘i=’); read(B[i]);end;s:=0;For i:=1 to N dobegin 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.240k=2 s= 36.454k=3 s= 155.759k=4 s= 842.954k=5 s= 5346.553

130

Page 131: Практикум по программированию.Паскаль

Program LAB_4102; Uses Crt;

Const N=6;VARk,i:integer;A: array [1..N] of real;B: array [1..N] of real;C: array [1..N] of real;

BEGINClrscr; For k:=1 to N DObegin write(‘k=’); read(A[k]);end;For i:=1 to N DObegin write(‘i=’); read(B[i]);end; For k: =1 to N dobegin 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

Page 132: Практикум по программированию.Паскаль

Program LAB_4112;Uses Crt;Const N=11;VARi: integer;A: array [1..N] of real;c: real;BEGINClrscr; 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

Page 133: Практикум по программированию.Паскаль

Program LAB_4122;Uses Crt;Const N=6;Var

i:integer;y:real;

X:array[1..N] of real;BEGINClrscr;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.821x= 1.200 y= 1.442x= 1.400 y= 2.322x= 1.600 y= 3.513x= 1.800 y= 5.064x= 2.000 y= 7.027

133

Page 134: Практикум по программированию.Паскаль

Program LAB_4132;Uses Crt;Const H=0.5;VAR

k, i:integer; x, y: real;

BEGINClrscr;

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.380x= -3.50 y= -0.189x= -3.00 y= 0.083x= -2.50 y= 0.391x= -2.00 y= 0.690x= -1.50 y= 0.957x= -1.00 y= 1.331x= -0.50 y= -3.182x= 0.00 y= 0.000x= 0.50 y= 0.158x= 1.00 y= 0.226x= 1.50 y= 0.204x= 2.00 y= 0.137

134

Page 135: Практикум по программированию.Паскаль

Program LAB_4142;Uses Crt;Const H=0.5;VAR

i, k: integer; x, y, s: real;

BEGINClrscr;

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.970x= -2.50 y= 1.040x= -2.00 y= -1.081x= -1.50 y= -1.500x= -1.00 y= -0.540x= -0.50 y= 0.208x= 0.00 y= 0.000x= 0.50 y= -0.327x= 1.00 y= 0.284x= 1.50 y= 1.440x= 2.00 y= 1.508x= 2.50 y= -0.364x= 3.00 y= -2.733

s= -6.545

135

Page 136: Практикум по программированию.Паскаль

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);beginL:= sqrt ( sqr (X2-X1)+ sqr (Y2-Y1));end;BEGINClrscr;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

Page 137: Практикум по программированию.Паскаль

END.X[i]=3Y[i]=2X[i]=-2Y[i]=5X[i]=9Y[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);beginL:=sqrt(sqr(X2-X1)+sqr(Y2-Y1));end; label lb1;BEGINClrscr;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

Page 138: Практикум по программированию.Паскаль

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]=3Y[i]=2X[i]=-2Y[i]=5X[i]=9Y[i]=4L1= 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

Page 139: Практикум по программированию.Паскаль

Lt:array[1..4] of real;PROCEDURE DLN(X1,X2,Y1,Y2:real;var L:real);beginL:=sqrt(sqr(X2-X1)+sqr(Y2-Y1));end; label lb1;BEGINClrscr;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

Page 140: Практикум по программированию.Паскаль

X[i]=-3Y[i]=2X[i]=2Y[i]=7X[i]=2Y[i]=3X[i]=4Y[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;BEGINClrscr;

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

Page 141: Практикум по программированию.Паскаль

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;beginDLN:= sqrt (sqr(x1-x2)+sqr(y1-y2));end;BEGINClrscr;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

Page 142: Практикум по программированию.Паскаль

Program LAB_56;Uses Crt; VarAlfa: 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; BeginDLN:= sqrt (sqr(x1-x2)+sqr(y1-y2));end;BEGINClrscr;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.000Lac = 12.00 Lbd = 8.00

Sin (alfa)= 0.9231

142

Page 143: Практикум по программированию.Паскаль

Program LAB_57;Uses Crt;Varp: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;beginDLN:= sqrt (sqr(x1-x2)+sqr(y1-y2));end;BEGINClrscr;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; VarCalfa: 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

Page 144: Практикум по программированию.Паскаль

DLN:= sqrt (sqr(x1-x2)+sqr(y1-y2));end;BEGINClrscr;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 . AA1 , A2 , B B1 , B2 .

Вектор C D задан координатами точек C C1 ,C2 и D D1 , D2 .

Координаты вектора A B X1 и Y1 соответственно равны:

X1=B1−A1 ; Y1=B2−A2 .

Координаты вектора C D X2 и Y2 соответственно равны:

X2=D1−C1 ; Y2=D2−C2 .

Условие перпендикулярности двух векторов – это равенство нулю их

скалярного произведения:

X1∗X2Y1∗Y2=0 .

Координаты точек A , B,C D вводятся в основной программе. В основной

программе осуществляется вывод информации. Подпрограмма вычисляет

144

Page 145: Практикум по программированию.Паскаль

координаты векторов и их скалярное произведение.

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;BEGINClrscr;

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.

Арифметическая прогрессия a1 , a2 , a3 . . . . a n

Формула суммы членов арифметической прогрессии:

S=a1a n n

2 или S=2a1d n−1 ]n

2 ,

где n - количество членов арифметической прогрессии,

a n=a1d n−1 -последний член прогрессии,

145

Page 146: Практикум по программированию.Паскаль

d -разность прогрессии. d=a2−a1 . В примере арифметическая прогрессия: 2, 5, 8,…

Program LAB_510;Uses Crt;Vari:integer;N1,s,a1,a2,a3,d:real;N:array[1..3] of real;Procedure SPR(a1,d,N:real;var S:real);beginS:=(2*a1+d*(N-1))*N/2;end;BEGINClrscr;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.00N= 20 S= 610.00N= 35 S= 1855.00

Лабораторная работа LAB 511

146

Page 147: Практикум по программированию.Паскаль

Необходимые формулы приведены в конце программы.

Program LAB_511; Uses Crt;Vari, 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);beginS:=V0*t+a*t*t/2 ;end;BEGINClrscr;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

Page 148: Практикум по программированию.Паскаль

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 Пройденный точкой путь за время от t1 до t 2 вычисляется по формуле

S=∫t1

t 2

V 0at dt=V 0 tat2

2 ,

В момент времени 1

talignl¿¿¿¿ пройденный путь S 1 , в момент времени t 2 -пройденный путь

S 2 . Пройденный путь за время t 2−t1 будет S=S 2−S1 .

Выражение V 0 tat2

2 можно оформить как процедуру, значения которой

вычисляются при t1 и t 2 .

148

Page 149: Практикум по программированию.Паскаль

Лабораторная работа LAB_512

Сумма членов геометрической прогрессии определяется по формуле:

S=a1−an q

1−q =a1−a1 qn

1−q =a1 1−qn

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);beginS:=(a1*(1-exp(N*ln(q))))/(1-q);end;BEGINClrscr;

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

Page 150: Практикум по программированию.Паскаль

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

Page 151: Практикум по программированию.Паскаль

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элемент:-312элемент:513элемент:621элемент:022элемент:123элемент:231элемент:-532элемент:433элемент:-741элемент:142элемент:243элемент:-11 s= 8.000 s= 3.000 s= -8.000 s= -8.000

151

Page 152: Практикум по программированию.Паскаль

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

Page 153: Практикум по программированию.Паскаль

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

Page 154: Практикум по программированию.Паскаль

154

Page 155: Практикум по программированию.Паскаль

Литература

1. Алтухов Е.В., Рыбалко А.А., Савченко В.С. ” Основы информатики и вычислительной

техники” М., ”Высшая школа”, 1992, 303 с.

2. Бутомо И.Д., Самочадин А.В., Усанова Д.В.,” Программирование на алгоритмическом

языке ПАСКАЛЬ для микро ЭВМ”. Ленинград. Издательство Ленинградского Университета.

1985. 214с.

3. Турбо Паскаль К.: Издательство группы BHV, 2000.- 432 c.

4. Фаронов В.В. “ Турбо Паскаль “. М.: Издательство “ Нолидж”., www.knowledge.ru

2002, 571 c.

155

Page 156: Практикум по программированию.Паскаль

156

Page 157: Практикум по программированию.Паскаль

157

Page 158: Практикум по программированию.Паскаль

158