Файл: Практическая работа Реализация алгоритма линейной структуры.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 09.02.2024

Просмотров: 27

Скачиваний: 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. Как описываются двумерные массивы в Паскале?

  1. Как осуществляется ввод и вывод двумерных массивов?

  2. Как обратиться к элементу двумерного массива?

  3. Приведите пример описания двумерного массива.

  4. Написать алгоритм: в исходной матрице поменять местами заданные столбцы, с номерами j1 и j2.






Лабораторная работа №6

Использование процедур и функций при работе с двумерными массивами



Цель работы: получение навыков работы с процедурами и функциями, закрепление навыков работы с двумерными массивами
Задание для подготовки к работе

  1. Изучить способы описания и использования многомерных массивов; назначение подпрограмм; описание и обращение к подпрограммам.

  2. Разбить задачу соответствующего варианта на подзадачи, таким образом, чтобы решение каждой подзадачи описывалось процедурой или функцией, а основная программа состояла бы из последовательности вызова подпрограмм.

  3. Для каждой подзадачи описать спецификацию и блок-схему алгоритма. Спецификация содержит: заголовок программы, назначение, входные и выходные параметры.

  4. Подобрать наборы тестовых данных.



Задание к работе

Набрать программу, отладить ее, протестировать. Распечатать текст программы и результаты ее работы на тестовых данных.
Содержание отчета

  1. Описание используемых структур данных.

  2. Описание подпрограмм: спецификация, блок-схема.

  3. Блок схема основной задачи.

  4. Наборы тестовых данных с обоснованием их выбора.

  5. Текст программы.

  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. Поменять местами заданные столбцы матрицы.
Контрольные вопросы

  1. Какими средствами Паскаля обеспечивается блочная структура программ?

  2. Чем подпрограммы-функции отличаются от подпрограмм-процедур?

  3. Для чего используются подпрограммы.

  4. В каких случаях для решения задачи следует использовать функции, а в каких – процедуры?

  5. Чем отличается обращение к функции от обращения к процедуре?

  6. Что такое область видимости переменных?

  7. Чем локальные переменные отличаются от глобальных?


























Лабораторная работа №7

Работа со строками


Цель работы: Изучить стандартные процедуры и функции языка Turbo Pascal работы со строками. Получение навыков работы со строками и функциями.
Задание для подготовки к работе

  1. Изучить строковый тип, организацию работы со строками; назначение и описание процедур и функций работы со строками.

  2. Разработать алгоритм для решения задачи соответствующего варианта.

  3. Подобрать тестовые данные.