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

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

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Лабораторная работа № 4. Обработка массивов
Цель работы приобретение навыков программирования при решении задач с использованием одномерных и двумерных массивов, а также характерных приемов программирования.
4.1 Массивы и их обработка с помощью циклов
Массив это структурированный тип данных, состоящий фиксированного числа элементов одного типа.
Массивы характеризуются именем, размерностью (количеством элементов), номерами (индексами) элементов в нем и значениями каждого элемента. Каждый элемент массива определяется своим индексом, по которому к нему осуществляется доступ.
Одномерный массив иначе называется вектором. Элемент одномерного массива имеет один индекс, указывающий на его порядковый номер.
Двумерный массив иначе называется матрицей. Элемент двумерного массива имеет два индекса: первый индекс соответствует номеру строки, второй номеру столбца, в которых находится элемент.
В таблице 4.1 приводятся характеристики вектора Х(4) и матрицы А(3,3).
Таблица 4.1 - Примеры одномерного и двумерного массивов
Имя |
Размерность |
Номера элементов |
Значения элементов |
Х |
4 (в массиве 4 элемента) |
(х1, х2, х 3, х 4) |
(-3.8, 7.6, 2, 4.3), т.е. х1 = -3.8, х4 = 4.3 |
А |
А(3,3) (в массиве 9 элементов: 3 строки, 3 столбца) |
т.е. а23 = 0; а32 = 4.2 |
Как и любой другой объект программы, массив должен быть объявлен. Существует два способа описания массива:
- явный - в разделе Type описания типов данных (между Const и Var) задается размерность массива и тип его элементов, затем в разделе Var сформированному типу массива присваивается имя. Например,
Type T = array [1..4] of real; Var A: T; |
{Объявлен массив А, состоящий из} {четырех вещественных элементов} |
Type Z = array[1..3,1..4] of real; Var В:Z; |
{Объявлен вещественный массив B,} {состоящий из трех строк и четырех столбцов} |
- неявный - минуя раздел Type. Например,
Var A: array [1..4] of real; |
{Объявлен массив A(4)} |
Var B: array [1..3, 1..4] of real; |
{Объявлен массив B(3,4)} |
Так в языке Паскаль нет возможности вводить и выводить массивы как единый объект, для обработки массивов используются операторы циклов. Ввод и вывод одномерных массивов возможен только поэлементно с помощью оператора цикла:
For i:=1 to 10 do Read (a[i]); |
{ввод вектора А(10) в строку,} {значения вводятся через пробел} |
For i:=1 to 10 do Readln (a[i]); |
{ввод вектора А(10) в столбец, ввод каждого} {элемента подтверждается клавишей Enter} |
For i:=1 to 10 do Write (a[i]); |
{вывод вектора А(10) в одну строку} |
For i:=1 to 10 do Writeln (a[i]); |
{вывод вектора А(10) в один столбец} |
Работая с матрицей также надо организовать перебор всех ее элементов, причем необходимо открыть два цикла для изменения номера строки (i) и номера столбца (j), т.е. в одном цикле организовать другой. Таким образом, ввод и вывод двумерных массивов возможен только поэлементно с помощью организации вложенного цикла:
{поэлементный ввод массива А(5,5)} |
{поэлементный вывод массива А(5,5)} |
For i:=1 to 5 do For j:=1 to 5 do Read (a[i,j]); |
For i:=1 to 5 do For j:=1 to 5 do Write (a[i,j]); |
При таком способе организации вывода двумерный массив будет выведен на экране в одну строку. Если же в цикле использовать оператор Writeln (а[i,j]), то массив будет выведен в один столбец. Для того чтобы получить на экране матрицу в ее общепринятом виде, используется следующая организация вывода двумерного массива:
For i:=1 to 4 do
Begin
For j:=1 to 5 do
Write (а[i,j]);
Writeln
End;
Пустой оператор Writeln в данном случае используется для перевода курсора на следующую строку.
Циклы, аналогичные рассмотренному выше, называются вложенными. Цикл, в котором создается другой цикл, называется внешним, цикл, создаваемый внутри, - внутренним. Правила организации внешнего и внутреннего цикла те же, что и простого цикла. Вложенных циклов может быть больше двух. Параметры внешнего и внутреннего циклов должны быть разными, причем при фиксированном значении параметра внешнего цикла параметр внутреннего цикла принимает по очереди все свои значения.
Как правило, характерные приемы программирования применяют к определенным элементам массивов, а именно: к элементам между заданными номерами строк и столбцов; при выполнении действий с элементами строк и столбцов; к элементам главной диагонали или параллельных ей; элементам побочной диагонали; элементам, расположенным выше и ниже главной диагонали.
Для того чтобы алгоритм был составлен правильно, необходимо хорошо представлять взаимосвязь индексов элементов матрицы (таблица 4.2).
Таблица 4.2 - Взаимосвязь индексов элементов матрицы
Расположение элементов в массиве |
Взаимосвязь индексов строк (i) и столбцов (j) |
Примеры организации циклов для перебора элементов |
главная диагональ |
i = j |
S:=0; For i:=1 to n do S:=S+a[i i]; |
побочная диагональ (n - порядок матрицы) |
i + j = n + 1 |
P:=1; For i:=1 to n do P:=P*a[i, n+1-i]; |
выше главной диагонали |
i < j |
k:=0; For i:=1 to n do For j:=1 to n do If i<j {или i>j} then k:=k+1; |
ниже главной диагонали |
i > j |
Если обработка массива идет построчно, то внешний цикл организуют по i, а внутренний по j, и, наоборот, при переборе элементов матрицы по столбцам внешний цикл организуют по j, а внутренний по i. Кроме того, если работа производится с элементами строк или столбцов, то между операторами открытия вложенных циклов или операторами их закрытия обычно стоит какой-либо оператор, осуществляющий действие со строкой или столбцом.
4.2 Примеры алгоритмов и программ обработки массивов
4.2.1 Найти наибольшее значение вектора Х(5) и его порядковый номер.
На рисунке 4.1 представлены блок-схема алгоритма, программа и контрольная развертка. Алгоритм нахождения наибольшего элемента в векторе, рассматриваемый в этом примере, состоит в следующем:
- задание некоторой промежуточной переменной значения равного значению одного из элементов массива;
- организация цикла, в котором должен присутствовать условный оператор, сравнивающий значение очередного элемента массива и введенной переменной;
- если элемент оказывается больше переменной, то ей присваивается значение этого элемента и при необходимости запоминается и его номер;
- последнее значение переменной при выходе из цикла и будет наибольшим элементом массива.
program primer4_1; type T = array [1..5] of real; var X:T; max:real; i, n: integer; begin for i :=1 to 5 do begin write (введи x (, i:2,)); readln (x[i]) end; max := x[1]; n := 1; for i :=2 to 5 do if x[i]>max then begin max := x[i]; n := i end; writeln(Наибольший элемент-, max); writeln (его номер-, n) end. |
|
Контрольная развертка Пусть введен массив Х(3, 7, -4, 8, 2). Согласно алгоритму max:=3; n:=1. i=2 x(2) > max 7 > 3 да max = x(2) = 7; n = i = 2 i=3 x(3) > max -4 > 7 нет max = x(2) = 7; n = i = 2 i=4 x(4) > max 8 > 7 да max = x(4) = 8; n = i = 4 i=5 x(5) > max 2 > 8 нет max = x(4) = 8; n = i = 4 по окончании цикла вывод полученных значений max = 8 и n = 4 |
|
Рисунок 4.1 - Нахождение наибольшего элемента в одномерном массиве |
4.2.2 Найти среднее арифметическое элементов вектора А(10). Блок-схема и программа решения задачи представлены на рисунке 4.2.
Program primer4_2; type T = array [1..5] of real; var A:T; S, SA:real; i, K: integer; begin for i := 1 to 10 do read (a[i]); S:=0; K:=0; for i := 1 to 10 do if a[i] > 0 then begin S:=S + a[i]; K:=K+1 end; SA=S/K; writeln (SA=, SA:10:2) end. |
|
Рисунок 4.2 Пример обработки одномерного массива |
Блок-схема и программа решения задачи представлены на рисунке 4.3. При решении данной задачи перед открытием циклов, в которых будет осуществляться накапливание количества, необходимо обнулить начальное значение переменной К. Отбор элементов выполняется с использованием сложного условия, т.е. условие выбора положительных элементов массива и условие отбора элементов, расположенных выше главной диагонали, заключены в круглые скобки и объединены с помощью конъюнкции (аnd).
program primer4_3; type T = array [1..4,1..5]of real; var A:T; i, j, K: integer; begin for i:=1 to 4 do for j:=1 to 5 do read (a[i,j]); K:=0; for i:=1 to 4 do for j:=1 to 5 do if (a[i,j]>0) and (i < j) then K:=K+1; writeln (K=, K) end. |
|
Рисунок 4.3 Пример обработки двумерного массива |
Блок-схема и программа решения задачи представлены на рисунке 4.4. В рассматриваемом примере обработка массива идет построчно, поэтому внешний цикл организуют по строкам (по индексу i), а внутренний по столбцам (по индексу j). Кроме того, между операторами открытия вложенных циклов стоит оператор, с помощью которого обнуляется начальное количество положительных элементов в каждой строке матрицы. Так как, открытый по строке цикл (по параметру i) содержит внутри себя несколько операторов, то для выделения их в единую последовательность, требуется применить операторные скобки Begin-End.
program primer4_4; type T = array [1..4,1..5]of real; var A:T; i, j, K: integer; begin for i:=1 to 4 do for j:=1 to 5 do read (a[i,j]); for i:=1 to 4 do begin K:=0; for j:=1 to 5 do if a[i,j] > 0 then K:=K+1; writeln (в,i,строке K=,K) end end. |
|
Рисунок 4.4 - Пример обработки двумерного массива |
4.3 Варианты заданий
4.3.1 Характерные приемы программирования обработки одномерных массивов
А(j)=j, если j- нечетные и А(j)=j/2, если j- четные;
В(j)=j², если j- нечетные и В(j)=j³, если j - четные.
4.3.2 Нахождение наибольшего (наименьшего) элемента в векторе
4.3.3 Программирование алгоритмов работы с частями матрицы
4.3.4 Программирование алгоритмов работы со строками и столбцами матрицы
4.4 Контрольные вопросы
1 Что такое «массив»?
2 Чем характеризуются элементы массива?
3 Чем отличаются явный и неявный способы объявления массивов?
4 Какие способы ввода массивов существуют в Паскале?
5 Чем отличается вывод элементов массива в строку и в столбец?
6 Какие действия необходимо выполнить для подсчета суммы элементов одномерного массива?
7 Что изменится в алгоритме при подсчете количества отрицательных элементов в массиве?
8 Как выполнить поиск наибольшего (наименьшего) элемента в массиве?
9 Каковы особенности работы с квадратной матрицей?
10 Как организовать обработку матрицы по столбцам (по строкам)?
Лабораторная работа №5. Обработка символьной информации
Цель работы приобретение навыков программирования при решении задач с использованием символьной информации и применения встроенных процедур и функций для обработки строк.
5.1 Строки и особенности их обработки
Для представления текстовой (символьной) информации предназначен специальный тип данных - строковый тип. Строка - это последовательность символов кодовой таблицы ПЭВМ. Длина строки (количество символов в строке) может динамически изменяться от 0 до 255. В компьютере каждый символ строки занимает 1 байт. Кроме того, для хранения информации о длине строки дополнительно отводится 1 байт.
Строка-константа служит для использования в программе некоторой, заранее известной последовательности литер. Формат объявления строки-константы имеет вид:
Const имя константы = 'последовательность символов';
Например, Const name = 'Эльза'; probel = ' ';
Если значение строки заранее не известно, а определяется в процессе выполнения программы (например, строка символов вводится), тогда используется строковая переменная. Для объявления переменных строкового типа используется стандартный идентификатор String, за которым следует заключенное в квадратные скобки значение длины строки. Если это значение не указывается, то по умолчанию длина строки равна 255 байт. Формат объявления строки-переменной имеет вид:
Var имя переменной: string [длина строки];
Например, Var slovo:string[10]; stroka:string;
Таким образом, строковый тип задается регулярным типом (как в случае с массивами), поэтому все свойства массивов переносятся и на строки (длина строки задается статически; доступ к отдельному символу строки осуществляется по его индексу). К особенностям строк следует отнести следующее:
В Паскале для выполнения наиболее часто применяемых действий со строками предназначен набор встроенных функций и процедур (таблица A1).
5.2 Пример алгоритма и программы обработки символьной информации
Составить программу, проверяющую, является ли введенный текст палиндромом (палиндром - текст который читается слева направо и справа налево одинаково). При составлении программы следует обратить внимание на то, что коды прописных букв русского алфавита в таблице ASCII следующие - Ord(A)=128,…,Ord(Я)=159, а строчные русские буквы расположены в таблице кодов не подряд - Ord(а)=160,…, Ord(п)=175, Ord(р) = 224,…, Ord(я)=239.
На рисунке 5.1 представлена блок-схема алгоритма решения задачи, ниже приведена соответствующая ей программа.
Рисунок 5.1 Пример обработки символьной информации |
program p_5; var st, a, b: string; i, n, k: integer; begin writeln ('Ведите текст на русском языке'); readln (st); a:=''; b:=''; n:=length(st); for i:=1 to n do if st[i]<>' ' then begin {Замена ПРОПИСНОЙ русской буквы на строчную} if (st[i]>='А') and (st[i]<='П') then st[i]:= chr(ord(st[i])+32) else if (st[i]>='Р')and(st[i]<='Я') then st[i]:=chr(ord(st[i])+80); a:=a+st[i]; b:=st[i]+b end; write (st,' - '); if a=b then writeln ('палиндром') else writeln ('не палиндром') end. |
5.3 Варианты заданий
5.4 Контрольные вопросы
1 Для какой цели используется строковый тип данных?
2 Что называется строкой символов? Какова максимальная длина строки?
3 Чем отличаются строковые константы и строковые переменные?
4 Как объявляются строковые переменные?
5 Назовите основные особенности строк.
6 Какие основные встроенные процедуры и функции предусмотрены для работы со строками?
Лабораторная работа №6. Использование подпрограмм и модулей
Цель работы приобретение навыков программирования при решении задач с использованием подпрограмм и модулей.
6.1 Подпрограмма-функция и подпрограмма-процедура
При программировании часто возникает необходимость повторять одну и ту же последовательность операторов в различных частях программы при разных параметрах, многократно переписывая их. Для реализации таких действий и сокращения объема программы удобно использовать подпрограммы: процедуры и функции. При решении задач с использованием подпрограмм необходимо сначала определить, что будет вычисляться многократно и сколько при одном вычислении будет результатов. Затем выбрать тип используемой подпрограммы в зависимости от количества предполагаемых результатов, т.к. в подпрограмме-функции результат может быть только один, а подпрограмме-процедуре несколько.
Любая подпрограмма содержит:
Заголовок подпрограмм оформляется по следующим правилам:
- в подпрограмме-функции |
|
Запись в Паскале |
Function имя (список формальных параметров):тип функции; |
Пример |
Function Beta ( x, y: integer; a, b: real) : real; |
- в подпрограмме-процедуре |
|
Запись в Паскале |
Procedure имя (список формальных параметров); |
Пример |
Procedure Alfa (N:integer; A,B:real; var max:real; var k:integer); |
Параметры, которые используются в описании процедуры, называются формальными (глобальными) параметрами. Формальные параметры процедуры делятся на параметры-значения и параметры-переменные. Под параметрами-значениями понимаются параметры, значения которых не меняются в ходе выполнения подпрограммы (входные). Параметры-переменные - выходные величины подпрограммы, значения которых передаются в головную программу. В списке формальных параметров перед перечислением параметров-переменных необходимо поставить слово Var. В рассмотренном примере вещественная величина max и целая i являются параметрами переменными. Параметры-значения в примере представлены целой величиной N и вещественными A и B. Если в подпрограмме будет использоваться параметр нестандартного типа, например массив, то этот тип должен быть описан явным способом в головной программе.
Формальные параметры подпрограммы-функции могут быть только параметрами-значениями, т.е. входными данными, а выходным параметром является имя подпрограммы, поэтому в заголовке необходимо указать ее тип.
Таким образом, результат процедуры передается через параметры-переменные, а результат подпрограммы-функции через ее имя. В связи с этим имя функции используется в качестве переменной в исполнительной части подпрограммы, которой присваивается результат, а для процедуры это категорически запрещается.
В описательной части подпрограммы следует описать локальные переменные (т.е. те, что используются только внутри подпрограммы), формальные параметры в этой части подпрограммы уже не описываются. Исполнительная часть подпрограммы реализует алгоритм, вынесенный в нее. Для подпрограммы-функции в этой части должен присутствовать оператор присваивания, в левой части которого стоит имя функции.
В отличие от программы подпрограмма заканчивается точкой с запятой.
Обращение к подпрограмме осуществляется из головной программы по следующим правилам:
- к подпрограмме-функции |
|
Запись в Паскале |
Имя переменной := Имя подпрограммы (список фактических параметров); |
Пример |
Z := Beta (5,6, S, D); |
- к подпрограмме-процедуре |
|
Запись в Паскале |
Имя подпрограммы (список фактических параметров); |
Пример |
Alfa (10, X, Xmax, ix); |
Параметры, которые при обращении к подпрограмме подставляются вместо формальных, называются фактическими (локальными) параметрами. Соответствие между фактическими и формальными параметрами устанавливается согласно порядку их следования, количеству в списке и в соответствии с указанным типом.
В программе может содержаться несколько различных подпрограмм, которые располагаются одна за другой после совокупности описания переменных головной программы. Если какая-то подпрограмма обращается к другой подпрограмме, то вызывающая подпрограмма должна располагаться после вызываемой.
6.2 Использование модулей
Кроме процедур и функций в Паскале используются модули. Библиотечный модуль это самостоятельно компилируемый файл Turbo Pascal, который может содержать описания констант, переменных, типов, процедур и функций. После того, как модуль создан и откомпилирован, его ресурсы можно использовать в любой программе на Turbo Pascal, просто указав имя этого модуля. Подпрограмму включают в состав модуля в том случае, когда она реализует действие, которое приходится выполнять достаточно часто. Такую подпрограмму можно написать и отладить один раз, а использовать многократно. Файл, содержащий модуль, обязан иметь имя, совпадающее с именем модуля. Доступ из программы к функциям модуля обеспечивает оператор использования Uses, который размещается сразу после заголовка программы и в котором указывается имя модуля (или нескольких модулей).
В самой первой строке модуля находится директива компилятору. Директива начинается со знака $ и заключается в фигурные скобки, причем между открывающей фигурной скобкой и знаком $ не должно быть пробела. Директива позволяет изменить работу (транслятора) компилятора например, на необходимость использования программой математического сопроцессора.
Каждый модуль имеет секции, озаглавленные зарезервированными словами.
Модуль начинается с зарезервированного слова Unit, за которым указывается заголовок модуля, и заканчивается словом End (признаком конца модуля), за которым следует точка. Для этого End не требуется соответствующего слова Begin, так как Begin служит признаком начала инициирующей секции, существование которой в модуле необязательно. Таким образом, парой слову End служит слово Unit, а не Begin.
Секция Interface (интерфейсная секция) содержит описания констант, типов, переменных и процедур, доступных из вызывающей программы или модуля, и обеспечивает взаимодействие модуля с другими модулями, а также с основной программой. Секция Implementation (секция реализации) содержит исходный код программ, заголовки которых представлены в интерфейсной секции модуля, а также может содержать локальные по отношению к модулю описания.
Модуль следует обязательно оттранслировать, при этом появится файл, имя которого совпадает с именем исходного файла, а расширение имеет вид .tpu. Выполнить оттранслированный модуль нельзя.
В состав Turbo Pascal 7.0 входит набор из восьми стандартных модулей (System, Dos, Crt, Printer, Graph, Overlay, Turbo3 (Graph3) и Strings), содержащих множество предопределенных типов, констант, переменных, процедур и функций, которые без ограничений можно использовать в пользовательских программах. Полное описание библиотечных модулей можно найти в файле помощи Help интегрированной инструментальной оболочки Turbo Pascal 7.0.
Модуль System это основное хранилище Turbo Pascal, в котором содержатся подпрограммы поддержки всех встроенных возможностей языка программирования, таких как файловый ввод-вывод, обработка строк, целочисленная арифметика, арифметика с плавающей точкой и динамическое распределение памяти. В отличие от других модулей этот модуль не требуется указывать в разделе Uses программы.
В модуле Dos собраны процедуры и функции, а также переменные и константы, позволяющие из программ получать доступ к средствам MS DOS и управлять файлами.
Подпрограммы модуля Crt позволяют управлять текстовыми режимами экрана, его цветами и окнами, яркостью свечения символов, а также расширенными кодами клавиатуры и звуком.
В модуле Printer объявляется только файловая переменная Lst, имеющая тип Text, которая ассоциируется с системным устройством LPT и позволяет выводить данные на печать.
Модуль Graph содержит множество подпрограмм, предназначенных для управления графическим режимом экрана. Однако для запуска программы, использующей этот модуль, необходимо иметь графический драйвер (файл с расширением .bgi) и, в дополнение к нему, файлы шрифтов (с расширением .chr).
При разработке крупных программ, когда возникает необходимость разбиения программы на отдельные сегменты (оверлеи), используют специальные средства, которые содержатся в модуле Overlay.
Модули Turbo3 и Graph3 предназначены для поддержания совместимости с Turbo Pascal 3.0, которая в настоящее время практически не используется.
Модуль Strings содержит функции и процедуры для написания программ, совместимых с Windows-приложениями.
6.3 Примеры использования подпрограмм и модулей
6.3.1 Вычислить , где А(n) и В(m)- одномерные массивы.
На рисунке 6.1 представлена блок-схема алгоритма решения задачи с использованием двух подпрограмм-процедур. В приведенной ниже программе решения данной задачи использованы две процедуры - VV и SUM. Первая служит для ввода значений исходных матриц и вызывается в основной программе после ввода значений размерностей массивов A и B n и m. Входными данными процедуры VV являются величина k, определяющая размерность вводимой матрицы. Выходные параметры, передаваемые в программу, - элементы массива Х. При первом вызове процедуры VV формальные параметры k, Х соответственно заменяется фактическими параметрами n, A. Подобная замена формальных параметров фактическими осуществляется и при втором вызове подпрограммы.
Рисунок 6.1 Пример использования подпрограммы-процедуры |
|
program primer6_1; type t = array [1..20] of real; var A, B:t; n, m: integer; SA, SB, Z:real; procedure VV (k: integer; var x: t); var i: integer; begin for i:=1 to k do read (x[i]) end; procedure SUM (k: integer; x: t; var s: real); var i:integer; begin s:=0; for i:=1 to k do s:=s+x[i] end; begin write (Введите размеры массивов А и В,n,m); readln (n,m); VV (n, A); VV (m,B); SUM (n,A,SA); SUM (m,B,SB); Z := SA*SB; writeln (Z=,z) end. |
На рисунке 6.2 представлена блок-схема алгоритма решения этой же задачи другим способом с использованием подпрограммы-функции.
Рисунок 6.2 - Пример использования подпрограммы-функции |
В приведенной ниже программе вызов реализован второй вариант решения данной задачи, в котором вместо процедуры SUM введена вещественная функция SUM. Такая замена повлекла соответствующие изменения как в описании подпрограммы, так и в обращении к ней. Вызов подпрограммы SUM осуществляется в головной программе после ввода элементов исходных массивов. Входные параметры массив Х и его размер k, выходной параметр - сумма элементов массива S. Следует отметить, что используемый в процедурах параметр i является локальным, то есть сохраняющим свои значения только внутри процедуры. После выполнения подпрограммы значения локальных параметров забываются. Поскольку процедура SUM имеет только один выходной параметр, то вместо нее можно использовать подпрограмму-функцию.
program primer6_2; type t = array [1..20] of real; var A, B: t; n, m: integer; SA, SB, Z: real; procedure VV (k: integer; var x: t); var i: integer; begin for i:=1 to k do read (x[i]) end; function SUM (k: integer; x: t): real; var i:integer; s:real; begin s:=0; for i:=1 to k do s:=s+x[i]; SUM:=s end; begin write (введите размеры массивов А и В, n, m); readln (n, m); VV(n, A); VV(m, B);SA:=SUM(n, A);SB:=SUM(m, B); Z:=SA*SB; writeln (Z=,z) end. |
6.3.2 Создать модуль, содержащий описания гиперболических функций Sinh(x), Cosh(x) и Tanh(x), используя известные математические соотношения
Ниже приведен текст созданного модуля и программа проверки, использующая его.
{$N+} {директива компилятору}
Unit hyp_fun; {заголовок модуля}
Interface {интерфейсная секция}
Function sinh (x: extended): extended;
Function cosh (x: extended): extended;
Function tanh (x: extended): extended;
Implementation {секция реализации}
var t: extended;
Function sinh (x: extended): extended;
Begin
t := exp(x); sinh := 0.5*(t 1.0/ t);
End;
Function cosh (x: extended): extended;
Begin
t := exp(x); cosh := 0.5*(t + 1.0/ t);
End;
Function tanh (x: extended): extended;
Begin
t := exp(x); tanh := (t - 1.0) / (t + 1.0);
End;
End. {конец модуля}
{$N+}
Program Test_hyperbolic_fun; {программа проверки}
Uses hyp_fun;
Begin
Writeln (sinh (0.5) =, sinh (0.5));
Writeln (cosh (-0.5) =, cosh (-0.5));
Writeln (tanh (1.5) =, tanh (1.5));
Write (Нажмите <Enter>:);
Readln;
End.
6.4 Варианты заданий
6.4.1 Использование подпрограммы-функции
Вычислить , где , .
6.4.2 Использование подпрограммы-процедуры
Amax и Bmax максимальные элементы массивов А(15) и B(13).
где Xmin и Ymin минимальные элементы массивов X(10) и Y(13).
, На рисунке 14 представлен второй вариант решения данной задачи, в котором вместо процедуры SUM введена вещественная функция SUM. Такая замена повлекла соответствующие изменения как в описании подпрограммы, так и в обращении к ней.
где Amin и Bmin минимальные элементы массивов А(15) и B(13); Amax и Bmax максимальные элементы массивов А(15) и B(13).
6.5 Контрольные вопросы
1 Что такое подпрограмма? Для каких целей используются подпрограммы?
2 Чем отличаются подпрограмма-функция от подпрограммы-процедуры?
3 По каким правилам оформляются заголовки подпрограмм?
4 Как осуществляется вызов подпрограмм?
5 Каким образом объявляются в подпрограммах нестандартные типы данных, например, массивы?
6 В чем разница между фактическими (локальными) и формальными (глобальными) параметрами?
7 Что такое модуль?
8 Каким образом осуществляется обращение к модулю?
9 Опишите структуру модуля.
10 Перечислите стандартные модули и их назначение.
Библиография
1 Симонович С.В. Информатика. Базовый курс.- СПб.: Питер, 2000.
2 ГОСТ 19.701-90. ЕСПД. Схемы алгоритмов и программ. Обозначения условные, графические. М.: Издательство стандартов,1990.
3 С.Немнюгин, Л.Перколаб. Изучаем Turbo Pascal. СПб.: Питер, 2001. О.А.Меженный.Turbo Pascal: учитесь программировать.- М.:Издательский дом «Вильямс», 2001.
5 Ю.Аляев, О.Козлов. Алгоритмизация и языки программирования Pascal, C++, Visual Basic: учебно-справочное пособие. М.: Финансы и статистика, 2004.
Содержание
Лабораторная работа №4. Обработка массивов 3
Лабораторная работа №5. Обработка символьной информации 16
Лабораторная работа №6. Использование подпрограмм и модулей 20
Приложение А 31
Библиография 32
31
Выход из VV
Ввод х(i)
i = 1, k
Вход в VV(k, X)
S = S + x(i)
Выход из SUM
i = 1, k
S = 0
Вход в SUM(k, X, S)
Ввод n, m
начало
SUM (m, B, SB)
SUM (n, A, SA)
V (m, B)
VV (n, A)
Вывод Z
конец
SUM = S
S = S + x(i)
выход из SUM
i = 1, k
S = 0
Вход в SUM(k, X, S)
выход из VV
Ввод х(i)
i = 1, k
Вход в VV(k, X)
Ввод n, m
начало
SB=SUM (m, B)
SA=SUM (n, A)
VV (m, B)
VV (n, A)
Вывод Z
конец
палиндром
нет
да
a = b
не палиндром
конец
b = st[i]+b
a = a+st[i]
нет
да
st[i]=chr(ord (st[i]))+80
st[i]=chr(ord (st[i]))+32
'Р' st[i]'Я'
a=''; b=''; n=length (st)
i = 1,n
нет
нет
да
'A' st[i]'П'
да
st[i] 0
Ввод st
начало
начало
конец
i =1,10
i = 1,10
ввод a(i)
S = 0; K = 0
a(i)>0
S=S+a(i); K=K+1
да
нет
вывод SA
SA = S/K
вывод max, n
нет
да
max = x(i); n = i
x(i)>max
max = x[1]; n=1
ввод x(i)
i = 2, 5
i =1, 5
конец
начало
конец
K = 0
вывод K
начало
i =1, 4
ввод a(i,j)
j =1, 5
i =1, 4
j = 1, 5
a(i,j)>0
и i<j
K = K + 1
да
нет
конец
K = 0
вывод K
начало
i =1, 4
ввод a(i,j)
j =1, 5
i =1, 4
j = 1, 5
a(i,j) > 0
K = K + 1
да
нет