Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Алгоритмизация и языки программирования. Учебно-методический комплекс.pdf
X
- •1. СИЛЛАБУС ДИСЦИПЛИНЫ ДЛЯ СТУДЕНТОВ
- •Тема 1. Понятие алгоритма, свойства, типы, исполнители
- •Структура программы.
- •Имена, ключевые слова и знаки операций
- •Тема 7. Символьные типы данных.
- •Обработка символьных данных.
- •Тема 9. Строки. Строковые процедуры.
- •Функции
- •Тема 11. Множества (Set)
- •Работа с текстовыми файлами
- •Тема 13. Записи
- •Тема 14. Построение изображений на экране
- •Отображение точки на экране
- •Отображение линий на экране
- •Построение прямоугольников на экране
- •Построение многоугольников
- •Построение дуг, эллипсов и окружностей
- •Основная литература
- •Дополнительная литература
- •ГЛОССАРИЙ

m:=A[1]; nmax:=1;
for l:=1 to q do
if A(l) > m then
begin
m:=A(l); nmax:=l
end
end; {конец описания процедуры}
begin
writeln ('n=');
readln (n);
writeln ('вводите массив');
for i:=1 to n do
readln (A[i]);
j:=n;
while j <> 1 do
begin
max (j,k);
R:=A(k); A(k):=A(j); A(j):=R;
j:=j-1
end;
writeln ('отсортированный массив');
for i:=1 to n do
writeln (A[i])
end.
Упражнения:
1. Написать процедуру, которая выводит на экран строку,
состоящую из одинаковых символов. Длина строки и символ
являются параметрами процедуры.
2. Написать функцию, которая вычисляет объем цилиндра.
Параметрами функции должны быть радиус и высота цилиндра.
3. Написать процедуру, который вычисляет объем и площадь
поверхности параллелепипеда.
4. Написать функцию, которая возвращает максимальное из
двух целых чисел, полученных в качестве аргумента.
5. Вычислить и запомнить количество отрицательных эле-
ментов каждого столбца для матриц А(10,10) и В(5,7).
111

6. Составить программу для нахождения среднего балла группы
)2)(147()74)(523(
23232
−+−−+−−+− xxxxxxxx
)12,max(1
),max(
),max(
2
bca
cba
cba
++
+++
по результатам сессии. Оценки групп сведены в матрицы А(25,5).
В(23,5), С(22,5), D(24,5). Определить лучшую группу.
7. Составить процедуру – оператор для нахождения коэффициентов многочлена, равного произведению двух многочленов степени n и m. При помощи этой процедуры вычислить коэффициенты
многочлена
8. Даны три строки различной длины. Напечатать ту из них, где
больше гласных латинских букв.
9. Даны три слова переменной длины. Составить слово, содержащее символы-цифры, входящие в данные слова.
10. Написать функцию present, которая возвращает процент от
числа, полученного в качестве аргумента.
ЛАБОРАТОРНАЯ РАБОТА 11
ФУНКЦИИ
ЦЕЛЬ РАБОТЫ:
1. Получить практические навыки написания подпрограмм в
виде функций.
2. Научиться использовать рекурсию.
.
КРАТКИЕ СВЕДЕНИЯ ИЗ ТЕОРИИ
Функция отличается от процедуры тем, что результат ее работы
возвращается в виде значения этой функции и, следовательно, вызов
функции может использоваться наряду с другими операндами в
выражениях.
Рекурсия - такой способ организации вычислительного про-
цесса, при котором подпрограмма в ходе выполнения составляющих
ее операторов обращается сама к себе.
ПРИМЕР 1: Даны действительные числа a,b,c. Вычислить
П Р О Г Р А М М А
112

program vur;
var z,a,b,c: real;
function max (x.y:real):real;
begin
if x > y
then max:=x
else max:=y
end;
{головная программа}
begin
writeln (' ввести a,b,c');
readln (a,b,c);
Z:=(max(a,b+c) + max(a+b,c*c))/(1+ max(a+b*c,12));
writeln ('Z=',Z)
end.
ПРИМЕР 2: Найти N число последовательности Фибоначчи.
Использовать рекурсивную функцию. Числа Фибоначчи образуют
последовательность, у которой каждый очередной член равен сумме
двух предыдущих: 0 1 1 2 3 5 8 13 . . . Обозначив N-й член ряда
Фибоначчи посредством символа F(N), можно записать следующую
рекурсивную зависимость:
F(N)=F(N-1)+F(N-2), n >= 3,
F(1)=1 и F(2)=1
П Р О Г Р А М М А
program FIBON;
var N: integer;
fuction F(k: integer): integer;
begin
if (k=1) or (k=2)
then F:=1
else F:=F(k-1)+F(k-2)
end;
{головная программа}
begin
113

writeln ('N=');
НОМЕР
ВАРИАНТА
1
Вычислить число сочетаний из n по m(n>m) по формуле:
2
Вычислить:
3
Вычислить:
4
Найти все трехзначные числа, равные сумме факториалов своих
5
Два треугольника заданы координатами своих вершин.
6
Решить уравнение ax+b=0, где
Значения k,l,m вводятся.
c
n
m n m
=
−
!
!( )!
min( ,exp( ), ) min( , , )
min( , , )
x y z y z
z x
x
+ 2
203
2
( )! !
a b a
+
a k l m
b l k l
m
=
= +
max( , , ),
max( , , )
2
3
3
readln (N);
writeln ('число =', F(N))
end.
Порядок работы
1. Составить алгоритм и программу с использованием под-
программы-функции (табл.17).
2. Составить алгоритм и программу, включающую рекусивную
функцию (табл.18).
Содержание отчета
Отчет по лабораторной работе должен содержать условия двух
задач, алгоритмы, программы, исходные данные для контрольного
примера, результаты.
цифр.
Вычислить площади треугольников с помощью формулы Герона и
определить, какой треугольник имеет большую площадь.
+
( )!
b a
Таблица 17
УСЛОВИЕ
−3
114

7
Даны действительные числа s,t. Вычислить:
где
8
Вычислить число сочетаний с повторениями по формуле:
9
Найти наибольший общий делитель целых положительных
10
Даны действительные числа х,у. Вычислить:
11
Решить уравнение
12
Используя функцию нахождения наибольшего общего
13
Вычислить:
14
Вычислить:
Найти НОД двух неотрицательных целых чисел m и n с
( )
( )
>−
>−
=
=
mnприmnmНОД
nmприnnmНОД
mnприn
НОД
,
,
g s g
t s
g
s st
( .
,
) (
,
) (
, )
1
5 2
1+
−
−
g a b
a b
a ab b
( , ) =
+
+ + +
2 2
2 2
2 3 4
c
n k
k n
=
+ −
−
( )!
!( )!11
h x y x y h h x y xy
4 2
11 20( , ) ( , ) max( ( , ), )− + + + +
h a b
a
b
b
a
a
b
( , ) ( )
=
+
+
+
− −
1 1
2
2
3
ax bx c
0+ + =
a
r m n
b m n
c mn r n m
r
=
= +
= +
min( , ,exp( )),
min( , , ),
min( , , )
3
2
2 10
( )! !
( )!
x y y
x
+
+
+4 1
min ( , ) min(
, . )
min(exp(
), )
2
2
25
ab a b
a
b
a b
+ +
чисел a,b,c.
где
,
,
2
,
где
Значения r,m,n вводятся.
делителя, найти наименьшее общее кратное двух чисел.
Таблица 18
НОМЕР
ВАРИАНТА
1
использованием первого алгоритма Евклида:
УСЛОВИЕ
115

2
Найти НОД двух неотрицательных целых чисел m и n c
использованием второго алгоритма Евклида:
( )
( )
( )
≠=
=≠
>
>
=
=
0,0
0,0
mod,
,mod
,
mnприm
mnприn
mnприmnmНОД
nmприnnmНОД
mnприn
nmНОД
3
Вычислить функцию Аккермана A(n,m) для неотрицательных
( ) ( )
( )( )
>>−−
=≠−
=+
=
0,01,,1
0,01,1
01
,
mnприmnAnA
mnприnA
nприm
mnA
4
Вычислить числа Каталана K(n) для натурального n по формуле:
K(n)=K(n-1)*(4*n-6)/n, при n ≥ 3
5
Вычислить n-ый член арифметической прогрессии. Заданы первый
(
)
(
)
>+
−
=
=
1
1,,
1
,,
1
1
1
n
при
dn
da
a
n
приa
n
d
a
a
6
Вычислить n-ый член геометрической прогрессии. Заданы первый
(
)
( )
>⋅
−
=
=
1
1,,
1
,
,
1
1
1
nприqnqaa
nприa
nqaa
7
Вычислить сумму n членов арифметической прогрессии. Заданы
( )
( ) (
)
>+
−
=
=
1,,1
,,
1
,,
11
1
1
nприnd
aan
daa
nприa
ndaa
8
Вычислить сумму n членов геометрической прогрессии. Заданы
( )
( ) ( )
>+−
=
=
1,,1,,
1
,,
11
1
1
nприnqaanqas
nприa
nqas
9
Вычислить:
( )
(
)
>−⋅
=
=
11
11
kприk
Fk
kпри
kF
10
Найти максимум из двух величин НОД(a,b) и НОД(c,d). Для
вычисления наибольшего общего делителя воспользоваться
c
m
n n m
=
−
!
!( )!
целых чисел m и n по формуле:
K(1)=K(2)=1
член а 1 и разность d.
член а1 и знаменатель геометрической прогрессии q.
первый член а1 и разность d. Для вычисления члена
арифметической прогрессии использовать формулу варианта 5.
первый член а1 и знаменатель геометрической прогрессии q. Для
вычисления члена геометрической прогрессии использовать
формулу варианта 6.
Для вычисления факториала воспользоваться формулой
116

формулой варианта 1.
11
Вычислить a! + b!. Для вычисления факториала воспользоваться
формулой варианта 9.
12
Вычислить F(k)-F(m), где F(k) - k-ый член последовательности
Фибоначчи, F(m) - m-ый член последовательности фибоначчи.
F(n)=F(n-1)+F(n-2) для n >= 3
13
Вычислить:
),(
),(
tzНОД
yxНОД
формулой варианта 2.
14
Вычислить величину pow(x,n) для вещественного х≠0 и целого n
( )
( )
( )
>−⋅
<
=
=
01,
0
||,
1
01
,
nприnxpowx
nпри
nxpow
nпри
nxpow
F(1)=F(2)=1
Для вычисления наибольшего общего делителя воспользоваться
по формуле:
ЛАБОРАТОРНАЯ РАБОТА 12
ГРАФИЧЕСКИЕ СРЕДСТВА ПАСКАЛЯ
ЦЕЛЬ РАБОТЫ: Научиться использовать графические сред-
ства Паскаля на примере построения графика функции
КРАТКИЕ СВЕДЕНИЯ ИЗ ТЕОРИИ
Инициализация графического режима производится с помощью
процедуры InitGraph (<драйвер>,<режим>,<путь>),
где <драйвер> - переменная типа INTEGER - указывает тип
(номер) графического драйвера. Например:
0 - Detect (тип установленного драйвера
распознается автоматически компьютером);
1 - CGA;
2 - EGA;
9 - VGA.
<режим> - переменная типа INTEGER - если тип драйвера не 0,
то указывается графический режим работы драйвера, т.е. размер
экрана в пикселях, число цветов и число страниц (экранов).
117

<путь> - выражение типа STRING - если тип драйвера не 0, то
Black = 0 (черный)
Darkgray = 8 (темно-серый)
Blue =1 (синий)
Lightblue = 9 (светло-синий)
Green =2 (зеленый)
Lightgreen =10 (светло-зеленый)
Cyan =3 (голубой)
Lightcyan =11 (светло- голубой)
Red =4 (красный)
Lightred =12 (светло-красный)
Magenta =5 (фиолетовый)
Lightmagenta=13(светло-фиолетовый)
Brown =6 (коричневый)
Yellow =14 (желтый)
Lightgray =7 (светло-серый)
White =15 (белый).
Заголовок процедуры
Геометрический смысл
putpixel(x,y,c)
построить точку (x,y) цветом c
setlinestyle(a,b,t)
установить стиль, образец и толщину линий
line(x1,y1,x2,y2)
соединить две точки отрезком
rectangle(x1,y1,x2,y2)
построить прямоугольник с заданными концами диагонали и сторонами, параллельными осям координат
circle(x,y,r)
построить окружность с центром (x,y) и радиусом R
arc(x,y,a,b,r)
построить дугу окружности: a,b -начальный и конечный
углы в градусах
ellipse(x,y,a,b,rx,ry)
построить эллиптическую дугу: rx, ry - полуоси
эллипса
setfillstyle(t,c)
установить стиль закраски и ее цвет
fillellipse(x,y,rx,ry)
построить закрашенный эллипс, используя цвет рисунка,
floodfill(x,y,cg)
закрасить фигуру до границы с цветом cg; (x,y) -
внутренняя точка фигуры
bar(x1,y1,x2,y2)
построить столбец, используя тип и цвет закраски
pieslice(x,y,a,b,r)
построить и закрасить сектор круга: a,b - начальный и
конечный углы дуги в градусах
sector(x,y,a,b,rx,ry)
построить и закрасить эллиптический сектор
settextstyle(f,n,d)
установить шрифт, направление вывода и размер
необходимо указать путь к файлу с графическим драйвером.
Основные графические процедуры
Цвет является выражением целого типа со значением из интер-
вала 0..15, в частности, может быть константой из таблицы:
Процедуры setcolor(цвет) и setbkcolor(цвет) устанавливают
цвет рисунка и цвет фона. При инициализации графики по
умолчанию устанавливается черный фон и белый цвет рисунка.
В следующей таблице указаны основные процедуры для модуля
Graph, применяющиеся для построения точек, отрезков, дуг,
прямоугольников, закрашивания замкнутых областей и вывода текста на графический экран.
118

символов текста
outtextxy(x,y,st)
вывести строку st, начиная с точки (x,y)
outtext(st)
вывести строку, начиная с точки расположения
текущего указателя
Значение стиля
Смысл
0 solidln
непрерывная линия
1 dotteln
пунктирная линия
2 centerln
штрихпунктирная линия
3 dashedln
штриховая линия
4 userbitln
определенная пользователем
вывода n и размер символов (параметр d). При f=0 используется
Первый аргумент процедуры setlinestyle(a,b,t) - стиль линии a принимает значения из таблицы:
Второй параметр b, "образец", имеет значение 4, если a=4, в
оста- льных случаях b=0. Третий параметр t, толщина линии, может
иметь значение 1 (нормальная толщина) или 3 (жирная линия).
Первый аргумент процедуры setfillstyle(t,c) - тип закраски
t - принимает значения из интервала 0..12. Наиболее употребителен
тип t=1 - заполнение фигуры текущим цветом. Другие типы закраски
приведены ниже.
Для вывода текста на графический экран сначала выполняется
процедура settextstyle(f,n,d), устанавливающая шрифт f, направление
стандартный точечный шрифт, встроенный в систему ТурбоПаскаль.
Направление вывода принимает значения 0 (горизонтальный
вывод) и 1 (вертикальный вывод).
Размер букв определяется параметром d, принимающим значения из интервала 1..10. Если d=1 и f=0, то каждый символ занимает
квадрат 8*8 точек, при d>1 сторона квадрата умножается на d.
Далее с помощью процедуры outtextxy(x,y,st) строка st выво-
дится на экран, начиная с точки (x,y), например:
• settextstyle(0,0,2);
• outtextxy(100,200,'горизонтальная строка');
• outtextxy(100,230,'размер увеличен вдвое');
Константы модуля GRAPH
119

В работе с графическими средствами часто используются конс-
(поддерживаемые графические
PC3270 = 10;
(стиль и толщина линий)
(константы закраски)
LtSlashFill = 3 ( /// штриховка);
(константы для Putimage)
NotPut = 4 ( NOT );
танты модуля Graph. Ниже приводится список наиболее употребительных констант этого модуля:
(коды ошибок при инициализации)
grOk = 0 (нет ошибок);
grNoInitGraph = -1 (графика не инициализирована);
grNotDetected = -2 (графическое устройство не обнаружено);
grFileNotFound = -3 (файл драйвера не найден);
grInvalidDriver = -4 (неправильный файл драйвера);
grNoLoadMem = -5 (нет памяти для драйвера);
grNoScanMem = -6 (нет памяти для просмотра областей);
grNoFloodMem = -7 (нет памяти для закраски областей);
grFontNotFound = -8 (фаты шрифта не найдены);
grNoFontMem = -9 (нет памяти для загрузки шрифта);
grInvalidMode = -10 (недопустимый графический режим);
grError = -11 (общая ошибка);
grIOError = -12 (ошибка ввода/вывода);
grInvalidFont = -13 (неверный файл шрифта);
grinvalidfontnum = - 14 (неверный номер шрифта);
драйверы)
Detect = 0 (автоматическое
распознавание);
CGA = 1;
MCGA = 2;
EGA = 3;
EGA64 = 4;
EGAMono = 5;
IBM8514 = 6 (зарезервировано);
HercMono = 7;
ATT400 = 8;
VGA = 9;
SolidLn = 0 (сплошная);
DottedLn = 1 (пунктирная);
CenterLn = 2 (осевая);
DashedLn = 3 (штриховая);
UserBitLn = 4 (определенная
пользователем)
NormWidth = 1 (нормальная толщина);
ThickWidth = 3 (жирная);
EmptyFill = 0 ( нет закраски );
SolidFill = 1 ( сплошная
закраска);
LineFill = 2 ( --- штриховка);
NormalPut = 0 ( MOV );
XORPut = 1 ( XOR );
OrPut = 2 ( OR );
AndPut = 3 ( AND );
120
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
