Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Отчет по лабораторной работе
Результаты выполнения лабораторной работы должны быть сохранены в файлы и представлены для контроля преподавателю. Отчет по лабораторной работе должен содержать: цели и задачи работы, блок-схему алгоритма (если это требуется в задании к упражнению), распечатку исходного кода программ, исходные данные задачи и результаты ее решения. Контрольные вопросы 1. Какие действия выполняются оператором перехода? 2. Зачем необходимо при отладке программы тестировать все ветви алгоритма? 3 Указать последовательность действий, выполняемых при организации циклических участков программы с заданным числом повторений. 4. Указать назначение и правила организации цикла. 5. Перечислить возможные способы организации цикла с заданным числом повторений в изучаемом языке программирования. 6. Указать отличия в организации циклов с заданным числом повторении и итерационных. 7. Какие средства языка целесообразно использовать для организации циклов с заданным числом повторений? 8. Указать, какие операторы составляют тело цикла. 9 В чем состоят преимущества использования операторов цикла в программах? Лабораторная работа № 3 Цель работы — овладение практическими навыками работы с массивами, особенностями их ввода и вывода, приобретение дальнейших навыков по организации программ циклической структуры с использованием приемов программирования.
ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
|
Динамические массивы.
Динамические массивы не имеют никакой предраспределенной памяти. Определяется только когда создан указатель. Размеры таких массивов должны быть установлены прежде, чем они будут использоваться. С помощью процедуры SetLength для таких массивов необходимо выделить динамическую память.
Например
SetLength(dynArray, 5);
устанавливает размер одномерного массива dynArray в 5 элементов. При этом будет распределена динамическая память под массив.
Все динамические массивы начинаются с индекса = 0.
Далее обработка элементов динамического массива программируется также как для статического массива.
Индивидуальные подмассивы многомерного динамического массива могут иметь различные измерения - они, конечно, являются отдельными массивами. После одной такой операции SetLength, на элементы набора массива уже можно ссылаться, даже при том, что остальная часть массива неопределена.
Задание для самостоятельной подготовки
1. Изучить:
— способы описания размеров массивов на языке программирования;
— способы ввода и вывода одномерных и многомерных массивов;
— реализацию на конкретном языке программирования приемов накопления суммы и произведения, запоминания результатов, нахождения наибольшего и наименьшего элементов в массивах.
2. Разработать алгоритм решения в соответствии с заданием.
3. Составить программу решения задачи.
4. Подготовить тест для проверки программы.
Задание 1.
1. Обработать на ЭВМ одномерный массив в соответствии с вариантом задания, указанного в табл. 4.1.
2. Проверить правильность выполнения программы с помощью тестового варианта.
Таблица 4.1
Вариант задания | Массив | Действия | Условия и ограничения |
Х(100) | Вычислить сумму и количество элементов массива Х | ||
А (80) | Вычислить среднее арифметическое значение элемента массива А | ||
Х(70) | Переписать элементы массива Х в массив Y и подсчитать их количество | ||
В (50) | Определить максимальный элемент массива В и его порядковый номер | ||
С (40) | Вычислить минимальный элемент массива С и его номер | ||
D (80) | Найти максимальный и минимальный элементы массива D и поменять их местами | ||
Y(20) | Вычислить среднее геометрическое элемента массива Y | ||
Z(30) | Расположить в массиве R сначала положительные, а затем отрицательные элементы массива Z |
Таблица 4.1 Окончание
Вариант задания | Массив | Действия | Условия и ограничения |
N(50) | Определить сумму элементов массива N, кратных трем | ||
X(N) | Вычислить сумму и количество элементов массива Х | ||
A(N) | Найти среднее геометрическое элементов массива А | ||
X(N) | Переписать в массив Y подряд положительные элементы массива Х | ||
X(N) | Переписать подряд в массив Y положительные и в массив Z отрицательные элементы массива Х | ||
B(K) | Определить максимальный элемент массива В и его порядковый номер | ||
C(K) | Определить минимальный элемент массива С и его порядковый номер |
Задание 2.
1. Обработать на ЭВМ матрицу в соответствии с вариантом задания, указанного в табл. 5.1. Вывести на печать результаты и исходную матрицу в общепринятом виде.
2. Проверить правильность выполнения программы с помощью тестового варианта.
Таблица 5.1
Вариант задания | Имя матрицы и размеры | Действия | Условия ограничения |
А (10, 15) | Вычислить и запомнить сумму и число положительных элементов каждого столбца матрицы. Результаты отпечатать в виде двух строк | ||
А (N, M) | Вычислить и запомнить суммы и числа элементов каждой строки матрицы. Результаты отпечатать в виде двух столбцов | ||
В (N, N) | Вычислить сумму и число элементов матрицы, находящихся под главной диагональю и на ней | ||
С (N, N) | Вычислить сумму и число положительных элементов матрицы, находящихся над главной диагональю | ||
D (К, К) | Записать на место отрицательных элементов матрицы нули и вывести ее на печать в общепринятом виде | ||
D(10, 10) | Записать на место отрицательных элементов матрицы нули, а на место положительных — единицы. Вывести на печать нижнюю треугольную матрицу в общепринятом виде | ||
F (N, M) | Найти в каждой строке матрицы максимальный и минимальный элементы и поместить их на место первого и последнего элемента строки соответственно. Матрицу напечатать в общепринятом виде | ||
F(10, 8) | Транспонировать матрицу и вывести на печать элементы главной диагонали и диагонали, расположенной под главной. Результаты разместить в двух строках | ||
N (10, 10) | Для целочисленной матрицы найти для каждой строки число элементов, кратных пяти, и наибольший из полученных результатов | ||
N (10, 10) | Из положительных элементов матрицы N сформировать матрицу М (10, КМАХ), располагая их в строках матрицы подряд, где КМАХ — максимальное число положительных элементов строки матрицы N. Записать нули на место отсутствующих элементов. Отпечатать обе матрицы в общепринятом виде | ||
P(N, N) | Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали. Отпечатать полученную матрицу в общепринятом виде | ||
R (К, N) | Найти наибольший и наименьший элементы матрицы и поменять их местами | ||
S (25, 8) | Ввести исходные данные в первые 24 строки и первые 7 столбцов. Вычислить среднее арифметическое значение элементов каждой строки и записать его в 8-й столбец, а также среднее арифметическое каждого столбца и записать его в 25-ю строку. Отпечатать полученную матрицу в общепринятом виде | ||
T (N, M) | Найти строку с наибольшей и наименьшей суммой элементов. Вывести на печать найденные строки и суммы их элементов | ||
V(15, 10) | Упорядочить по возрастанию элементы каждой строки матрицы. Отпечатать полученную матрицу в общепринятом виде |
Контрольные вопросы
1. Что такое массив как структура данных?
2. Что указывается в операторе объявления статического массива?
3. Какой вид цикла, как правило, применяют при обработке элементов массива?
4. Как организовать работу со статическим массивом переменной размерности?
5. Указать основные правила организации вложенных циклов.
6. Указать способы выхода из внутреннего цикла.
7. Как организовать вывод матрицы в общепринятом виде?
8. Как организовать вывод нижней треугольной матрицы в общепринятом виде?
9. Как организовать ввод матрицы размером N x M элементов?
Лабораторная работа № 4
Программирование с использованием подпрограмм пользователя
Цель работы — овладение навыками алгоритмизации и программирования задач с использованием подпрограмм пользователя различных видов, овладение навыками написания подпрограмм и обращения к ним, использования параметров подпрограмм по значению и по ссылке.
Задания для самостоятельной подготовки
1. Изучить:
— правила записи подпрограмм различных видов и способов обращении к ним;
— способы передачи параметров в подпрограмму;
— правила записи программ, использующих подпрограммы различных видов;
— порядок выполнения программ, использующих подпрограммы.
2. Разработать алгоритм решения в соответствии с заданием.
3. Составить программу решения задачи с использованием
А) подпрограммы-функции
Б) подпрограммы-процедуры.
4. Подготовить тестовый вариант программы и исходных данных.
ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Подпрограмма – это логически завершенный компонент про-граммы. Подпрограмма представляет собой некоторую функцию об-работки информации, которая отображает конкретный набор аргу-ментов в некоторый набор результатов. Определение подпрограммысостоит из двух частей: спецификации и реализации. Спецификация (прототип) подпрограммы включает: тип подпрограммы: function (функция), procedure (процедура). function – подпрограмма явно возвращает только один результи-рующий объект данных; procedure – подпрограмма возвращает бо-лее одного значения или действия подпрограммы сводятся только кмодификации ее аргументов вместо возвращения результата; имя подпрограммы; формальные параметры: аргументы (порядок следования, типкаждого аргумента) и результаты (порядок следования, тип каждогорезультата). Реализация подпрограммы (тело подпрограммы) включает: описание локальных данных, используемых подпрограммой; операторы, задающие действия, которые должна выполнитьподпрограмма. Локальные данные и операторы инкапсулированы (спрятаны), такчто ни локальные данные, ни операторы по отдельности не доступныпользователю подпрограммы. Пользователь может только вызватьподпрограмму. В тело подпрограмм могут входить определения дру-гих (вложенных) подпрограмм. Вызывающая программа – программа (подпрограмма), котораяобращается к подпрограмме (вызывает подпрограмму). Оператор вызова – оператор вызывающей программы, с помо-щью которого она обращается к подпрограмме. Оператор вызоваподпрограммы содержит: имя подпрограммы; список фактических параметров. Фактические параметры – это элементы вызывающей программы(константы, переменные, массивы и др.), значения которых переда-ются в подпрограмму или возвращаются из нее. При вызове подпро-граммы значения фактических параметров присваиваются соответст-вующим формальным параметрам (типы фактических и формаль-ных параметров должны совпадать! ). Вызываемая программа – подпрограмма, к которой обращает-ся вызывающая программа. Вызываемая программа возвращает уп-равление вызывающей программе, которая продолжает свое выпол-нение с оператора, следующего за оператором вызова. Обмен информацией между вызывающей и вызываемой програм-мами может осуществляться с использованием глобальных данныхили передачей параметров. Глобальные данные Глобальные данные – это данные (константы, переменные, мас-сивы и др.), объявленные в начале программы и доступные в подпро-граммах и «главной программе» (основном блоке программы). Глобальные данные следует использовать только для передачиинформации от одной программы (подпрограммы) к другой. Напри-мер, одна подпрограмма формирует значения данных, а другая под-программа использует эти значения Способы передачи параметров Когда вызывающая программа обращается к подпрограмме, тре-буется связать фактические параметры вызывающей программы сформальными параметрами подпрограммы. Чаще всего применяютсядва подхода: либо фактический параметр вычисляется, и полученноезначение передается формальному параметру (передача значением); либо формальному параметру становится доступен адрес значенияфактического параметра (передача по ссылке). Передача значением В этом случае формальный параметр a обрабатывается в под-программе как локальная переменная, инициализируемая в началевыполнения подпрограммы значением соответствующего фактиче-ского параметра x. В операторе вызова фактическим параметром может быть: константа; переменная; выражение; функция. Значение фактического параметра при изменении соответст-вующего ему формального параметра не изменяется. Передача по ссылке В этом случае формальный параметр (описание параметра начинается со слова var) обрабатывается в подпрограмме как переменная, адрес которой есть адрес соответствующего фактического параметра. В операторе вызова фактическим параметром может быть только переменная. Любое изменение формального параметра есть изменение со-ответствующего ему фактического параметра. Функции Формат спецификации функции: function < имя> (< список формальных параметров> ): < тип результата>; Для возвращения результата функция должна содержать хотя быодин оператор присваивания следующего вида: < имя подпрограммы> : = < результат>; где результат – это вычисленное значение в подпрограмме (констан-та, переменная, элемент массива и другие элементы данных). Вызов функции включается в оператор языка Pascal. Пример вызова функции P(x): y: = P(x); {вызов P(x) в операторе присваивания} if P(x)> 0 then {вызов P(x) в операторах if и writeln } writeln(P(x)); В качестве примера рассмотрим описание и использование функ-ции power, которая возводит переменную base в степень exponent – function power( base, exponent: real): real; begin power: = exp( exponent ∗ ln(base)); {exp, ln – встроенные функции Pascal: exp (x) – ex, ln (x) – натуральный логарифм x } end; Вызов функции power может быть, например, таким: writeln(power(3, 5)); Процедуры Формат спецификации процедуры: procedure < имя> (< список формальных параметров> ); Входные параметры (аргументы) процедуры передаются значени-ем или по адресу, а выходные параметры (результаты) – по адресу. Вызов процедуры – это отдельный оператор, который содержитимя процедуры и список фактических параметров. Например: P(x); {это вызов процедуры P(x) } В качестве примера использования процедуры рассмотрим описа-ние и использование той же самой подпрограммы power. В этомслучае, наряду с аргументами base и exponent, которые передаютсяпо значению, необходимо добавить в спецификацию процедуры вы-ходной параметр (результат), который должен быть передан по ссыл-ке (в примере это pow). procedure power( base, exponent: real; var pow: real); begin pow: = exp( exponent ∗ ln(base)); end; Пример вызова процедуры power: power(3, 4, j); writeln(j); Передача массивов в качестве параметров В качестве примера будем использовать подпрограмму вычисле-ния суммы значений элементов одномерного массива.. Формальные параметры как массивы с фиксированными размерами В данном примере для описания типов параметров используетсязаранее определенный тип massiv с фиксированной размерностью. uses crt; const N=3; type massiv = array[1..N] of integer; function sum_1( x: massiv ): integer; var i: integer; sum: integer; begin sum: = 0; for i: = 1 to N do sum: = sum+x[i]; sum_1: = sum; end; var {main – главная программа } i: integer; a: massiv; begin clrscr; writeln('massiv a'); for i: =1 to N do readln(a[i]); writeln('summa= ', sum_1(a)); end.Формальные параметры как массивы со «свободными» размерами Существует несколько возможностей передавать массивы в под-программу, не указывая их размеры. В языке Pascal для этого можноиспользовать функции low, high и sizeof. Использование функцийlow, high и sizeof требует подключения модуля crt. Функции low и high возвращают соответственно наименьшее инаибольшее значение индекса массива. Функция sizeof возвращает размер объекта данных в байтах. Обратите внимание, что в данных примерах описание размеровфактического массива a начинается с 0. Передача подпрограммы как параметра Если необходимо передать в качестве фактического параметраимя подпрограммы, то соответствующий ему формальный параметрдолжен иметь процедурный тип, соответствующий прототипу под-программы. В качестве примера рассмотрим программу, которая строит таб-лицу сумм и произведений целых чисел. Для построения таблицыиспользуется процедура PrintTable, которая для вычисления значе-ния таблицы вызывает функцию add (вычисление суммы) или функ-цию Multiply (вычисление произведения). Имя вызываемой функциипроцедура получает как параметр Operation. В программе описание процедурного типа имеет вид type Func = function (x, y; integer): integer; Спецификация подпрограммы, имя которой используется в каче-стве параметра, должна содержать ключевое слово far («дальний вы-зов»). Это указание необходимо компилятору для правильной гене-рации исполняемой программы. Рекурсивные подпрограммы Слово рекурсия происходит от латинского слова «recursio» – воз-вращение. В программировании рекурсия означает, что подпрограмма обра-щается сама к себе непосредственно или через цепочку вызовов дру-гих подпрограмм.Задание
Таблица 6.1
Вариант | Условия задачи | Примечания | ||
Вычислить наибольшие корни квадратных уравнений | Все корни действительные вычислять в подпрограмме | |||
Подсчитать число точек, находящихся внутри круга радиусом г с центром в начале координат; координаты заданы массивами Х(100), Y(100) | Расстояние до точки от начала координат вычислять в подпрограмме | |||
Определить периметры треугольников, заданных координатами их вершин ХА (3), ХВ (3), ХС (3) YA (3), YB (3), YC (3) | Длину стороны треугольников вычислять в подпрограмме | |||
Вычислить , где v1, v2, v3 – объемы шаров с радиусами r1, r2, r3 соответственно | vi вычислять в подпрограмме | |||
Вычислить суммы положительных элементов массивов X (N), Y (M), Z (K) | ||||
Вычислить среднее арифметическое положительных элементов для массивов A (N1), B (N2), C (N3) | ||||
Подсчитать количество отрицательных элементов матриц X (10, 15) и Y (20, 12) | Количество отрицательных элементов матрицы вычислять в подпрограмме | |||
Вычислить суммы положительных элементов каждой строки для матриц A (5, 4) и B (3, 6) | Сумму положительных элементов строки матрицы вычислять в подпрограмме | |||
Вычислить , где xm1 и xm2 - наименьшие элементы массивов X1 (70), X2 (80) | Наименьший элемент одномерного массива вычислять в подпрограмме | |||
Вычислить , где s1 и k1 — сумма и количество положительных элементов массива Х(N); s2 и k2 — сумма и количество положительных элементов массива Y (M) | Сумму и количество положительных элементов массива- в подпрограмме | |||
Вычислить , где s1 и k1 — сумма и количество отрицательных элементов массива Х(100); s2 и k2 — сумма и количество отрицательных элементов массива Y (80) | Вычислять в одной подпрограмме s и k | |||
Вычислить и запомнить суммы положительных элементов каждой строки матрицы А (10, 20), В (15, 10) | Сумму положительных элементов строки -в подпрограмме | |||
Вычислить , где x1 и x2 – корни уравнения , y1 и y2 - | В подпрограмме-все действительные корни | |||
Найти наибольшие элементы и их порядковые номера массивов Х (N) и Y (М) | Наибольший элемент массива и его порядковый номер вычислять в подпрограмме | |||
Переписать положительные элементы массива Х(100) и Y (80) в массив Z подряд | Запись в массив Z осуществлять в подпрограмме | |||
Найти наименьшие элементы и номера строк и столбцов, в которых они расположены, для матриц А (10, 15) и В (15, 12) | Наименьшие элементы и номера строк и столбцов- в подпрограмме | |||
Вывести на печать элементы целочисленных матриц N (5, 8) и М (10, 6), кратные трем | Кратность трем определять в подпрограмме | |||
Вычислить , где xi и yi заданы массивами | Все суммы вычислять с использованием подпрограммы | |||
Вычислить , где xmax – максимальный элемент массива Х (50); ymin – минимальный элемент массива Y (40) | xmax и ymin вычислять в подпрограмме |
2. Проверить правильность выполнения программы с помощью тестового варианта исходных данных.
3. Составить блок-схему алгоритма задачи с любым вариантом подпрограммы.
Контрольные вопросы
1. Указать, при каких условиях целесообразно использование подпрограмм, какие выгоды они предоставляют пользователю.
2. Указать, в чем отличие различных видов подпрограмм пользователя.
3. Указать способы обращения к подпрограммам пользователя.
4. Указать способы передачи параметров в подпрограмму.
5. Указать, как организовать подпрограмму без параметров.
6. Перечислить, как согласуются формальные и фактические параметры.
7. Указать конструкции, которые могут быть формальными и фактическими параметрами.
Лабораторная работа № 5
Обработка файловых структур данных
Цель работы — овладение навыками алгоритмизации и программирования файловых структур данных; проектирование структуры файла, вывод данных в файл, чтение данных из файла.
Задания для самостоятельной подготовки
1. Изучить:
— основную терминологию, связанную с файловыми структурами данных: файл и его структура, физическая и логическая записи, методы доступа, форматные и бесформатные записи, запись конца файла для файлов с последовательным доступом;
— возможности языка программирования по обработке файла с последовательной организацией: запись данных в файл, чтение из файла, добавление записей в файл, корректировка записей и т. п.
— возможности языка программирования по обработке типизированного файла.
2. Разработать алгоритм решения в соответствии с заданием.
3. Составить программу решения задачи.
4. Подготовить тестовый вариант программы и исходных данных.
ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Последнее изменение этой страницы: 2017-03-11; Просмотров: 1194; Нарушение авторского права страницы