Лабораторный практикум по информатике. Практикум по дисциплине Информатика Уфа 2012 3 Лабораторный практикум по дисциплине Информатика Уфимск гос авиац техн унт Сост. В. В. Мартынов, Е. Н. Прошин, Ю. В
Скачать 8.39 Mb.
|
Пример 5. Линейная сортировка массива по возрастанию. Известны результаты тестирования 9 учащихся. Расположить данные результаты в порядке возрастания баллов. Программа реализации изложенного выше алгоритма линейной сортировки отбором может иметь следующий вид: PROGRAM Sort; TYPE M=array[1..9]of integer; Var a: M; i,j,m, k, x: integer; Begin For i:=1 to 9 do begin writeln('Введите результаты ',i,'-го учащегося'); readln(a[i]) end; {Для всех элементов массива, кроме последнего, сделать} for j:=1 to 8 do begin 85 for i:=1 to 5 do for j:=1 to 6 do begin writeln('Введите элемент массива'); readln(a[i,j]); Для заполнения массива случайными числами необходимо воспользоваться процедурой Randomize и функцией Random (N). Функция random(n) служит для задания случайных целых чисел из диапазона 0 ≤ x ≤ n-1. Например, для задания матрицы А размерности 5х7 необходимо использовать случайные числа из диапазона [-10,10], фрагмент программы будет выглядеть так: for i:=1 to 5 do for j:=1 to 7 do a[i,j]:=-10+random(21); Вывод на экран двумерного массива осуществляется в виде таблицы. Например, печать элементов матрицы А размерности 3х4 должна осуществляться в три строки и четыре столбца: for i:=1 to 3 do begin for j:=1 to 4 do write (a[i, j]:5); writeln; end; 7.2.1 Подсчет количества элементов матрицы, удовлетворяющих определенным условиям. Пример 1. Найти количество положительных элементов в заданной целочисленной матрице размерности 5х6. Возможное решение задачи: PROGRAM Mas_count; Type Matr=array[1..5,1..6] of integer; Var A: Matr; i, j, k: integer; Begin k:=0; for i:=1 to 5 do 86 for j:=1 to 6 do begin writeln('Введите элемент массива'); readln(a[i,j]); if a[i,j]>0 then k:=k+1 {Подсчет количества положительных элементов} end; writeln('k=', k) for i:=1 to 5 do begin for j:=1 to 6 do write (a[i, j]:5); writeln; end; End. 7.2.2 Поиск наибольшего (наименьшего) элемента заданного столбца матрицы. Пример 2. Найти наибольший элемент в первом столбце заданной действительной матрицы размерности 4х5. Пример возможного решения задачи: PROGRAM Mas_max; Type Matr=array[1..4,1..5] of real; Var A: Matr; i, j: integer; max: real; Begin for i:=1 to 4 do for j:=1 to 5 do begin writeln('Введите элемент массива'); readln(a[i,j]) end; max:=a[1,1]; for i:=2 to 4 do if a[i,1]>max then max:=a[i,1]; {Проверка элементов первого столбца} writeln('max=', max) for i:=1 to 4 do begin for j:=1 to 5 do write (a[i, j]:5); 87 writeln; end; End. 7.2.3. Вычисление среднего арифметического для каждой строки матрицы Пример 3. Известны экзаменационные оценки 10 студентов по 5 предметам. Вычислить средний балл каждого студента по итогам экзаменационной сессии. При решении задачи используем матрицу размерности 10х5. Поставим в соответствие первому индексу матрицы порядковый номер студента в списке, а второму индексу - номер предмета, по которому получена оценка. Матрицу оценок зададим с использованием функции генератора случайных чисел Random. PROGRAM Obr_mas; Type Mas=array[1..10,1..5] of byte; Var A: Mas; i,j: integer; s, sr:real; Begin for i:= 1 to 10 do for j:= 1 to 5 do A[i, j]:=2+random(4); {генерирование матрицы оценок} writeln('Матрица оценок '); for i:= 1 to 10 do {начало вывода матрицы оценок на экран} begin for j:= 1 to 5 do write(A[i,j]:3); {вывод в строку оценок i–го студента} writeln {переход к следующей строке} end; writeln('Средний балл '); for i:= 1 to 10 do begin s:= 0; for j:= 1 to 5 do S:= S + A[i,j]; {подсчет суммы оценок i–го студента} sr:=s/5; {подсчет его среднего балла} writeln(i,' студент - ',sr:4:2) {вывод на экран результата} 88 end End. Контрольные вопросы 1. Что понимают под массивом данных? 2. Поясните понятия размерности массива, индекса элемента массива. 3. Какой массив называют одномерным? Приведите примеры одномерных массивов. 4. Как создать тип «массив» на языке Pascal? 5. Как осуществляется обращение к отдельному элементу одномерного массива? 6. Каким образом выводятся элементы массива на экран? Приведите пример вывода на экран одномерного массива из 8 действительных чисел. 7. Что понимают под сортировкой массива? 8. Какие методы сортировки массивов известны? 9. Какой массив называют двумерным? 10. Поясните понятие матрицы, размерности матрицы. 11. Какие матрицы называют квадратными? 12. Как описываются двумерные массивы на языке Pascal? 13. Как осуществить обращение к отдельному элементу двумерного массива? 14. Как можно организовать автоматическое заполнение элементов матрицы случайными числами? Приведите пример. 15. Приведите пример фрагмента программы, который выводит на экран двумерный массив в виде матрицы из N строк и M столбцов. 8. Требования к содержанию и оформлению отчета Отчет о проделанной работе должен содержать: - название и цель работы; - номер и условие своего варианта; - описание основных этапов задания; - тексты разработанных программ; - полученные при расчетах результаты (скриншоты); - анализ полученных результатов и вывод по проделанной работе; 89 - ответы на контрольные вопросы в соответствии с указаниями преподавателя. 9. Критерии результативности лабораторного практикума Лабораторная работа считается выполненной, если: - задание к лабораторной работе выполнено в полном объеме; - студент представил тексты программ и результаты их выполнения; - результаты выполнения программ соответствуют поставленным задачам; - при устном ответе на 1-2 контрольных вопроса по указанию преподавателя студент демонстрирует знание основных операторов и определений изученной темы и умение применить их при решении соответствующих задач; - представленный отчет по лабораторной работе соответствует требованиям раздела 8. 90 Лабораторная работа №5 Процедуры и функции языка Borland Pascal 1. Цель работы Усвоить принцип конструирования процедур и функций и их использование в программах. 2. Задачи работы Научиться оформлять задачи в виде подпрограммы, использовать процедуры и функции на языке Pascal, составлять рекурсивные подпрограммы. 3. Теоретическая часть 3.1. Общие сведения о подпрограммах Решение сложной задачи довольно часто сводится к решению нескольких более простых подзадач, которые удобно выделить в отдельные подпрограммы. Подпрограмма – это выделенный в самостоятельную единицу участок программы, имеющий собственное имя, позволяющее вызвать подпрограмму из основной программы. Разработка подпрограмм необходима при многократном использовании в разных местах программы группы операторов, выполняющих однотипные действия. В языке Pascal имеется две разновидности подпрограмм – процедуры и функции. Структура подпрограммы аналогична структуре программы. 3.2. Локальные и глобальные переменные, формальные параметры Все переменные, которые использует подпрограмма, можно разбить на две категории: - локальные переменные – объявляются и используются только внутри подпрограммы; - глобальные - объявляются в основной программе и доступны как программе, так и всем ее подпрограммам. Обмен информацией между основной программой и подпрограммой может осуществляться только с помощью глобальных переменных двумя способами: непосредственно 91 обращаясь к глобальной переменной по имени или используя механизм формальных параметров. Формальные параметры задаются в заголовке подпрограммы в виде списка, разбитого на группы, разделенные точками с запятыми. Для каждой группы переменных указывается ее тип, например Procedure treug(x,y,z:Integer;Var ss:Real; Var pp : Integer); По своему назначению формальные параметры могут быть параметрами-значениями и параметрами-переменными. Параметр-значение в подпрограмму передается, а обратно не возвращается, а параметр-переменная в подпрограмме вычисляется, и в программу передается ее новое значение. Перед параметром- переменной ставится служебное слово Var. Действие слова Var распространяется до ближайшей точки с запятой, т. е. в пределах одной группы. Имена параметров могут быть любыми, в том числе и совпадать с именами глобальных переменных. В этом случае они хранятся в различных ячейках памяти, а глобальная переменная с таким именем становится недоступной для использования подпрограммой. Для предотвращения нежелательных изменений глобальных переменных рекомендуется: 1. входные переменные описывать как параметры-значения; 2. избегать непосредственного использования глобальных переменных в подпрограммах; 3. для локальных переменных и формальных параметров использовать имена, отличные от имен глобальных переменных. Тип формального параметра может быть практически любым за исключением файлового, однако в заголовке подпрограммы нельзя вводить новый тип. Например, чтобы из процедуры передать массив, следует в основной программе ввести тип-массив, а затем использовать его в заголовке: type tArr = array[l..100] of Real; procedure ZapolnMas (l:integer, var A: tArr; Max); Здесь A - параметр-переменная, l - параметр значение. Для вызова подпрограммы следует указать ее имя и список фактических параметров, значения которых передаются формальным параметрам. Все фактические параметры при этом 92 разделяются запятыми. Между формальными и фактическими параметрами должно быть взаимнооднозначное соответствие, т.е. они должны совпадать по количеству, типу и порядку следования. При обращении к подпрограмме формальные параметры заменяются соответствующими фактическими параметрами. Параметры-значения могут быть заменены не только переменными и числами, но и выражениями соответствующего типа, тогда как параметры-переменные могут быть заменены только переменными. 3.3. Подпрограмма-функция Подпрограмма-функция вычисляет одно единственное значение, которое передается через ее имя. Блок функции может содержать все разделы, которые могут быть в процедурах. Основные отличия функции от процедуры: 1. Заголовок функции состоит из слова function, за которым следует имя функции, далее в круглых скобках - список формальных параметров, затем через двоеточие записывается тип функции - тип возвращаемого параметра. Функция может возвращать параметры следующих типов: любого порядкового, любого вещественного, стандартного строкового типа string, любого указателя. 2. В теле функции хотя бы раз имени функции должно быть присвоено значение: <имя функции> := <результат>; . 3. Функция вызывается в каком-нибудь выражении. 3.4. Подпрограмма-процедура Любая процедура начинается с заголовка. В отличие от основной программы заголовок в процедуре обязателен. Общий вид заголовка: procedure <имя процедуры>(<формальные параметры> : <тип>); За заголовком могут идти такие же разделы, что и в основной программе. В отличие от основной программы процедура завершается точкой с запятой. В качестве результата процедура может возвращать в вызывающую программу множество простых или структурированных величин. Параметры, передающие результаты работы процедуры, должны быть обязательно параметрами–переменными. 93 Разрешается описывать процедуры без формальных параметров, тогда организация передачи информации из программы в процедуру и обратно проводится с помощью глобальных переменных, а заголовок процедуры будет иметь более простой вид: procedure <имя процедуры>; Для вызова процедуры из основной программы или другой подпрограммы следует записать имя процедуры и список фактических параметров. Например: Streug(a,b,c,s); Streug(a/b,c+5,7,s1); . Вызов процедуры без формальных параметров осуществляется по имени. 4. Описание оборудования и используемых программных комплексов Лабораторная работа проводится в компьютерном классе. Требования к аппаратному обеспечению: IBM-совместимые персональные компьютеры класса Pentium IV и выше, ОЗУ от 128 Мб. ПК должен быть обеспечен следующими программами: ОС Windows 2000/XP, Microsoft Office 2010, Borland Pascal 7.0. 5. Краткое руководство по эксплуатации оборудования При использовании оборудования необходимо: – соблюдать общие правила нахождения в учебных лабораториях, работы с компьютером и использования программных средств; – привести в порядок одежду; – осмотреть рабочее место, убрать все мешающие работе предметы; – визуально проверить правильность подключения ПЭВМ к электросети. 6. Задание 6.1. Составить программу табулирования функции на данном отрезке с данным шагом по указанному преподавателем варианту. 94 Таблица 1 Варианты задания по теме «Подпрограммы-функции» № варианта Задание 1 8 5x 2 x y на интервале 2 , 0 с шагом 0.1. 2 1 4 3 2 x x y на интервале 5 , 2 , 5 0 с шагом 0.1. 3 2 x x y на интервале 2 , 2 с шагом 0.2. 4 x x x y cos 5 3 4 7 на интервале 1 , 7 1 с шагом 0.1. 5 2 4 2 3 x x x y на интервале 1 , 1 с шагом 0.1. 6 x x y 3 sin на интервале 5 1 , 5 1 с шагом 0.12. 7 x x y cos на интервале 3 , 0 с шагом 0.11. 8 x tg x y 3 2 sin на интервале 1 , 0 с шагом 0.05. 9 3 2 x x y на интервале 2 , 1 с шагом 0.25. 10 x x y 2 sin 2 на интервале 3 , 3 с шагом 0.25. 11 x y 3 cos 5 на интервале 2 , 0 с шагом 0.1. 12 1 x x y на интервале 5 , 0 с шагом 0.5. 13 2 5 x x y на интервале 3 , 3 с шагом 0.25. 14 1 x e y на интервале 2 , 2 с шагом 0.2. 15 x y sin на интервале 2 , 0 с шагом 0.1. 16 2 3 x x y на интервале 3 , 6 с шагом 0.5. 17 x tg x x y cos sin на интервале 2 1 , 2 1 с шагом 0.1. 18 2 x e y x на интервале 2 , 2 с шагом 0.2. 19 2 1 2 tgx y на интервале 5 1 , 5 1 с шагом 0.1. 20 3 1 sin 1 sin x x y на интервале 2 , 1 с шагом 0.1. 95 5.2. Составить программу определения максимального элемента двумерного массива. 5.3. Составить программу решения задачи по указанному преподавателем варианту. Таблица 2 Варианты заданий для самостоятельного решения № варианта Задание 1 Составить программу перемножения двух матриц произвольной размерности, предусмотреть проверку возможности перемножения. 2 Составить программу сложения двух матриц произвольной размерности, предусмотреть проверку возможности сложения. 3 Дана целочисленная прямоугольная матрица. Определить количество строк, не содержащих ни одного нулевого элемента. 4 Дана целочисленная прямоугольная матрица. Определить количество столбцов, не содержащих ни одного нулевого элемента. 5 Дана целочисленная прямоугольная матрица. Определить количество столбцов, содержащих хотя бы один нулевой элемент. 6 Дана целочисленная прямоугольная матрица. Определить произведение элементов в тех строках, которые не содержат отрицательных элементов. 7 Дана целочисленная прямоугольная матрица. Определить сумму элементов в тех столбцах, которые не содержат отрицательных элементов. 8 Дана целочисленная прямоугольная матрица. Определить сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент. 9 Дана целочисленная прямоугольная матрица. Определить сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент. 10 Дана квадратная матрица действительных чисел. Найти сумму модулей элементов, расположенных ниже главной диагонали. 11 Дана квадратная матрица действительных чисел. Найти сумму модулей элементов, расположенных выше главной диагонали. 12 Дана прямоугольная матрица действительных чисел. Найти количество строк, среднее арифметическое элементов которых меньше заданной величины. 13 Дана прямоугольная матрица действительных чисел. Найти номер первого из столбцов, содержащих хотя бы один положительный элемент. 96 14 Найти номер первого из столбцов прямоугольной матрицы, не содержащих ни одного отрицательного элемента. 15 Найти номер первой из строк прямоугольной матрицы, не содержащих ни одного отрицательного элемента. 16 Дана целочисленная прямоугольная матрица. Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент. 17 Дана целочисленная прямоугольная матрица. Определить номер первой из строк, содержащих хотя бы один нулевой элемент. 18 Дан двумерный массив целых чисел. Составить программу, которая определяет, есть ли в каждой из строк массива хотя бы один элемент, оканчивающейся цифрой 3. В случае положительного ответа должны быть напечатаны координаты любого из таких элементов 19 Найти номер первого из столбцов прямоугольной матрицы, не содержащих ни одного положительного элемента. 20 Найти номер первой из строк прямоугольной матрицы, не содержащих ни одного положительного элемента. |