Файл: Практическая работа Реализация алгоритма линейной структуры.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.02.2024
Просмотров: 36
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Двумерный массив или матрица это таблица элементов одного типа, состоящая из нескольких строк с равным числом элементов в каждой.
Каждый двумерный массив определяется именем, числом строк и столбцов.
Описание двумерного массива в Паскале рекомендуется производить так:
Type
Matrix=array[Нижняя граница индекса1..Верхняя граница индекса1,
Нижняя граница индекса2..Верхняя граница индекса2]
of < тип элементов >;
Var < Имя массива> :Matrix;
Приведенная выше таблица мажет быть представлена в виде двухмерного массива так:
Type
Matr=array[1..4,1..5]of integer;
Var product:Matr;
Чтобы использовать элемент массива нужно указать имя массива и в квадратных скобках номер строки, затем номер столбца где этот элемент находится.
Так элемент product[2,3] содержит число Продукта3, которое произвел завод2.
Значение элементов двумерного массива выводятся на экран и вводятся с клавиатуры, как правило, по строкам, т.е. сначала все элементы первой строки, затем второй и т.д.
Ввод матрицы product будет выглядеть так:
for i:=1 to 4 do
for j:=1 to 5 do
begin
write('product[',i,',',j,']=');
readln(product[i,j]);
end;
Вывод элементов матрицы product будет выглядеть так:
for i:=1 to 4 do
begin
for j:=1 to 5 do
write(product[i,j]:6);
writeln;
end;
Пример: Нахождение суммы элементов заданного столбца и нахождение произведения всех элементов матрицы.
Здесь S1 - сумма элементов столбца с номером К; Р - произведение всех элементов матрицы А
S1:=0;
For i:=1 to m do
S1:=s1+a[i,k];
P:=1;
For i:=1 to m do
For j:=1 to n do
P:=p*a[i,j];
Пример: Получить новую матрицу путем деления всех элементов данной матрицы на ее наибольший по модулю элемент.
Здесь Max - максимальный по модулю элемент матрицы А.
max:=abs(a[1,1]);
For i:=1 to m do
For j:=1 to n do
If max < abs(a[i,j]) then max:=a[i,j];
For i:=1 to m do
For j:=1 to n do
A[i,j]:=a[i,j]/max;
Варианты заданий
1/21. Найти последний отрицательный элемент в массиве.
2/22. Найти максимальный элемент в массиве, стоящий на чётном месте.
3/23. Определить какой элемент раньше встречается в массиве: максимальный или минимальный.
4/24. Найти максимальный и минимальный элемент в массиве.
5/25. Найти первый элемент в массиве больший заданного значения.
6/26. Найти первый отрицательный элемент в массиве.
7/27. Определить произведение массива. А, удовлетворяющих условию d1<A[I]<d2.
8/28. Определить произведение элементов массива, стоящих на нечётных местах.
9/29. Определить сумму элементов массива. А, удовлетворяющих условию A[I]>d.
10/30. Определить сумму элементов массива, стоящих на нечётных местах.
11/31. Дан массив чисел. Найти значение max элемента. Если таких элементов несколько, то определить, сколько их.
12/32. Дан массив чисел. Найти, сколько в нем пар одинаковых соседних элементов.
13/33. Дан массив чисел. Найти max элемент, поставить его первым. Вывести на печать исходный и полученный массивы.
14/34. Дан массив чисел. Расставить их по убыванию. Вывести на печать исходный и полученный массивы.
15/35. Имеются данные об успеваемости не более чем 24 учебных групп (в процентах). Определить, на сколько нужно повысить успеваемость в самой отстающей группе, чтобы достичь среднего уровня успеваемости.
16/36. Известны данные о среднемесячной температуре за год. Определить, какая была самая высокая температура летом и самая низкая зимой.
17/37. В одномерном массиве произвольных чисел вычислить произведение отрицательных элементов, имеющих отрицательные индексы.
18/38. В одномерном массиве произвольных чисел найти max элемент из отрицательных.
19/39. В одномерном массиве из 20 чисел определить сумму и количество элементов, которые меньше 50 и индексы, которых кратны 4.
20/40. Определить сумму чётных элементов массива.
Контрольные вопросы
1. Как описываются двумерные массивы в Паскале?
-
Как осуществляется ввод и вывод двумерных массивов? -
Как обратиться к элементу двумерного массива? -
Приведите пример описания двумерного массива. -
Написать алгоритм: в исходной матрице поменять местами заданные столбцы, с номерами j1 и j2.
Лабораторная работа №6
Использование процедур и функций при работе с двумерными массивами
Цель работы: получение навыков работы с процедурами и функциями, закрепление навыков работы с двумерными массивами
Задание для подготовки к работе
-
Изучить способы описания и использования многомерных массивов; назначение подпрограмм; описание и обращение к подпрограммам. -
Разбить задачу соответствующего варианта на подзадачи, таким образом, чтобы решение каждой подзадачи описывалось процедурой или функцией, а основная программа состояла бы из последовательности вызова подпрограмм. -
Для каждой подзадачи описать спецификацию и блок-схему алгоритма. Спецификация содержит: заголовок программы, назначение, входные и выходные параметры. -
Подобрать наборы тестовых данных.
Задание к работе
Набрать программу, отладить ее, протестировать. Распечатать текст программы и результаты ее работы на тестовых данных.
Содержание отчета
-
Описание используемых структур данных. -
Описание подпрограмм: спецификация, блок-схема. -
Блок схема основной задачи. -
Наборы тестовых данных с обоснованием их выбора. -
Текст программы. -
Описание и анализ ошибок, выявленных при отладке программы.
Краткие теоретические сведения
В языке программирования Pascal определены два вида подпрограмм - процедуры и функции.
В программе описание процедур и функций должно располагаться между разделами описания переменных и основной программой. Каждая процедура или функция определяется только один раз, но может использоваться (вызываться) многократно.
Структура процедур и функций аналогична структуре полной программы на языке Паскаль:
- Заголовок подпрограммы - задает имя подпрограммы и список формальных параметров с указанием их типов.
- Раздел описаний.
- Тело подпрограммы.
Функцияэто особым образом оформленный фрагмент программы, имеющий собственное имя. Результат работы функции возвращается в виде значения этой функции.
Определение функции, создаваемой программистом, в общем виде выглядит так:
Function имя (список формальных параметров): тип результата;
var {раздел описания внутренних переменных функции}
begin {раздел команд функции}
имя := выражение;
end;
Пример функции вычисления факториала:
Function factor(n:integer): integer;
var
i, f: integer;
begin
f:=1;
for i:=2 to n do f:=f*i;
factor:=f;
end;
Пример. Вычислить значение
Program prf;
var
a,y : real;
i,b : integer;
{функция программиста}
function factor (n:integer): integer;
var
i,f: integer;
begin
f:=1;
for i:=2 to n do f:=f*i;
factor:=f;
end;
{основная программа}
begin
writeln ('введите значения a и b');
readln (a,b);
if a<=b
then y:=a*factor(b)
else
y:=b+factor(a);
writeln ('ответ y=', y:6:0);
end.
Необходимо учитывать: каждая функция возвращает значение определенного типа, поэтому тип возвращаемого значения, или, как говорят, тип функции, должен совпадать с типом переменной, которой присваивается значение функции. Для вычисления значения функции используется параметр, тип которого для функции строго определен, поэтому тип выражения, значение которого используется как параметр, должен совпадать с установленным для функции типом параметра.
Процедураособым образом оформленный фрагмент программы, имеющий собственное имя.
Для обмена информацией между процедурой и основной программой используются один или несколько параметров.
Общий вид процедуры:
Procedure имя_проц(список формальных параметров);
var
{раздел описания внутренних переменных процедуры}
begin
{команды процедуры}
end;
Найти сумму элементов массива, состоящего из 12 целых чисел.
Const n=12;
type mas=array[1..n]of integer;
Var a:mas; i,s:integer;
Procedure wwod(var a:mas; Name:char);
var i:integer;
Begin
for i:=1 to n do
Begin
Write(Name,'[',i,']=');
ReadLn(a[i]);
End;
End;
Begin
wwod(a,'a');
For i:=1 to n do
s:=s+a[i];
Write('s=',s:4);
Readln;
End.
При вызове процедуры и функции формальные параметры заменяются фактическими в порядке их следования.
Фактические параметры -параметры, которые передаются подпрограмме при обращении к ней.
Формальные параметрыэто переменные, фиктивно присутствующие в подпрограмме и определяющие тип и место подстановки фактических параметров, над которыми производятся действия.
Число и тип формальных и фактических параметров должны совпадать с точностью до их следования.
Варианты заданий
1/21. Дана матрица N×M, состоящая из натуральных чисел. Найти в ней наименьший элемент и определить его местоположение. Если таких элементов несколько, то вывести на экран местоположение каждого из них.
2/22. Дана матрица N×M, состоящая из натуральных чисел. Найти в строках самые правые наименьшие элементы и определить их местоположение.
3/23. Дана матрица N×M, состоящая из натуральных чисел. Выбрать в строках самые левые наименьшие элементы и поставит их в первый столбец.
4/24. Дана матрица N×M, состоящая из натуральных чисел. Расставить строки таким образом, чтобы элементы в первом столбце были упорядочены по убыванию.
5/25. Найти столбец матрицы, сумма элементов которого максимальна.
6/26. Найти первую строку матрицы (строку с наименьшим номером), произведение элементов которой отрицательно.
7/27. Найти последнюю строку матрицы (строку с наибольшим номером) произведение элементов которой положительно.
8/28. Найти первый столбец матрицы (столбец с наименьшим номером), произведение элементов которого отрицательно.
9/29. Найти строку матрицы, содержащую наибольшее число отрицательных элементов.
10/30. Найти столбец матрицы, содержащий наименьшее число отрицательных элементов.
11/31. Найти строку матрицы, содержащую наименьшее число нулевых элементов.
12/32. Найти столбец матрицы, содержащий наименьшее число нулевых элементов.
13/33. Найти сумму элементов квадратной матрицы, расположенных выше главной диагонали.
14/34. Найти сумму элементов квадратной матрицы, расположенных ниже главной диагонали.
15/35. Найти наибольший элемент, расположенный на главной диагонали квадратной матрицы, меньше заданного значения.
16/36. Найти наибольший элемент, расположенный на побочной диагонали квадратной матрицы, меньше заданного значения.
17/37. Найти наименьший элемент, расположенный на главной диагонали квадратной матрицы.
18/38. Найти наименьший элемент, расположенный на побочной диагонали квадратной матрицы.
19/39. Поменять местами заданные строки матрицы.
20/40. Поменять местами заданные столбцы матрицы.
Контрольные вопросы
-
Какими средствами Паскаля обеспечивается блочная структура программ? -
Чем подпрограммы-функции отличаются от подпрограмм-процедур? -
Для чего используются подпрограммы. -
В каких случаях для решения задачи следует использовать функции, а в каких – процедуры? -
Чем отличается обращение к функции от обращения к процедуре? -
Что такое область видимости переменных? -
Чем локальные переменные отличаются от глобальных?
Лабораторная работа №7
Работа со строками
Цель работы: Изучить стандартные процедуры и функции языка Turbo Pascal работы со строками. Получение навыков работы со строками и функциями.
Задание для подготовки к работе
-
Изучить строковый тип, организацию работы со строками; назначение и описание процедур и функций работы со строками. -
Разработать алгоритм для решения задачи соответствующего варианта. -
Подобрать тестовые данные.