Смекни!
smekni.com

Методические указания к лабораторным работам по дисциплине "Информатика" Составители: Викентьева О. Л., к т. н., доцент (стр. 6 из 8)

3) Словесный алгоритм решения задачи.

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

5) Результаты тестов.

6. Пример выполнения работы и оформления отчета

Лабораторная работа №3
«Работа с массивами»

1. Постановка задачи:

1) Сформировать с помощью датчика случайных чисел одномерный массив размерности М, которая задается пользователем.

2) Полученный массив напечатать.

3) Выполнить обработку и преобразование массива в соответствии со своим вариантом.

4) Напечатать преобразованный массив.

Вариант №26.

1) Вычислить количество четных чисел в массиве.

2) Удалить из массива все четные элементы. Оставшиеся элементы сдвинуть в начало массива, конец массива заполнить нулями.

2. Анализ задания:

1 задача относится к первому классу задач, т. к. для каждого элемент массива требуется проверить условие четности элемента.

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

3. Алгоритм решения 1 задачи:

Организуем перебор массива от начала к концу по одному элементу, для каждого элемента проверим условие четности a[I] mod 2 =0. Ели условие выполнится, то счетчик четных чисел увеличим на 1.

Алгоритм решения 2 задачи:

Организуем перебор массива от начала к концу по одному элементу, для каждого элемента проверим условие нечетности a[I] mod 2 <>0. Ели условие выполнится, то запишем этот элемент во вспомогательный массив B. Затем оставшиеся элементы массива B заполним нулями.

4. Программа

Var a:array[1..100]of integer;

I,J,K,M:integer;

Begin

Writeln (‘Введите количество элементов массива’);

Read(M);

Writeln(‘Сформирован массив целых чисел’);

For I:= 1 to M do begin

a[I]:=random(100)-50;

Write(a[I],’ ‘);

End;

Writeln;

K:=0;

For I:=1 to M do

If a[I]mod 2=0 then K:=K+1;

If k>0 then

Writeln(‘в массиве ‘ , K, ‘ четных элементов’)

Else begin

Writeln (‘Четных элементов нет’);

exit;{выход из программы}

Writeln(‘Удаление четных элементов из массива’);

J:=0;

For I:=1 to M do

If a[I]mod 2<>0 then begin

J:=J+1;

b[J]:=a[I];

end;

K:=J;

For I:=K to M do b[J]:=0;

For I:=1 to M do write(b[I],’ ‘);

Writeln;

End.

5. Тесты:

N Исходный массив Результат
5 34 –56 45 2 7 К=3 45 7 0 0 0
5 34 2 62 8 18 К=5 0 0 0 0 0
5 33 5 47 –15 -9 Четных чисел нет

Лабораторная работа №4
«Использование процедур и функций»

1. Цель работы:

1) Использование структур данных при решении задач;

2) Использование подпрограмм при решении задач.

2. Теоретические сведения

2.1. Подпрограммы

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

1) Это средство экономии памяти, т. к . каждая подпрограмма существует в программе в единственном экземпляре, а обращаться к ней можно многократно из различных точек программы.

2) Использование методики нисходящего проектирования программ, когда алгоритм представляется в виде относительно крупных подпрограмм, реализующих более менее самостоятельные части алгоритма. Подпрограммы в свою очередь могут разбиваться на более мелкие подпрограммы нижнего уровня и т. д. – до тех пор пока реализуемые подпрограммами алгоритмы не станут настолько простыми, что их можно будет легко запрограммировать.

Работа с подпрограммой состоит из двух этапов:

1) описание подпрограммы;

2) вызов ее в основной программе для исполнения.

Описание подпрограммы:

<заголовок>

<описание данных>

begin

<тело подпрограммы>

end;

Заголовок процедуры имеет вид:

Procedure <имя>[(<список_формальных_параметров>)];

Заголовок функции имеет вид:

Function <имя>[(<список_формальных_параметров>)]:<тип>;

<имя> - имя подпрограммы;

<список_формальных_параметров> - список передаваемых или возвращаемых подпрограммой данных;

<тип> - тип возвращаемого функцией результата.

Список формальных параметров может отсутствовать.

2.2. Параметры

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

Параметры подразделяются на параметры-значения, параметры-переменные и параметры-константы. Если параметр определен как параметр-переменная (перед ним ставится слово Var), то при вызове подпрограммы передается адрес соответствующей переменной, следовательно, изменение такого параметра приводит к изменению значения по указанному адресу, и фактический параметр тоже меняется. Если параметр определен как параметр-значение, то перед вызовом подпрограммы это значение вычисляется, полученный результат копируется во временную память и передается в подпрограмму. Любые возможные изменения этого параметра не воспринимаются вызывающей программой, следовательно, фактический параметр не меняется. При использовании параметров констант (перед ним ставится слово Const) в подпрограмму будет передаваться адрес области памяти, в которой располагается переменная или вычисляемое значение, но компилятор блокирует присваивание нового значения параметру-константе в теле программы.

2.3. Передача результата из подпрограммы в вызывающую программу

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

Пример.

Function Tan(x:Real);

Begin

Tan:=sin(x)/cos(x);

End;

. . . . .

begin{main}

. . . . .

a:=tan(0.1234);

b:=tan(y);

c:=tan(a/b);

. . . . . .

End.

Процедура может возвращать несколько значений. Для этого в процедуре используются параметры-переменные.

Пример:

Procedure Tan(x:Real; var y:Real);

Begin

Y:=sin(x)/cos(x);

End;

. . . . . .

begin{main}

. . . . .

Tan(0.1234,a);

Tan(y, b);

Tan(a/b, c);

. . . .

End.

2.4. Локальные и глобальные переменные

Переменные, описанные в подпрограмме, называются локальными. Они доступны только в той подпрограмме, в которой они описаны. Переменные, описанные до описания этой подпрограммы, называются глобальными.

Пример.

Program P;

Var A, B :Integer;{глобальные}

Procedure P1;

Var B, C :Real;{локальные}

Begin

. . . . . .

End;{P1}

. . . . .

End.{P}

Одноименные локальные и глобальные переменные – это разные переменные. Любое обращение к таким переменным в теле подпрограммы трактуется как обращение к локальным переменным, т. е. одноименные глобальные переменные будут недоступны.

2.5. Параметры-массивы и параметры-строки

Типом любого параметра в списке формальных параметров может только стандартный или заранее определенный тип. Поэтому при передаче массива следует сначала описать его тип. Пример:

Type mas=array[1..100]of integer;

Procedure P(a:mas);

. . . . . . .

Так как строка является своеобразным массивом, передача строк в подпрограммы осуществляется аналогично.

3. Постановка задачи

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

4. Варианты

1. В двумерном массиве записаны слова, представляющие собой последовательность цифр, завершающихся 0. Необходимо распечатать слова через запятую, заключив печатную строку в скобки. Длина печатной строки 60 символов. Извлечение слова оформить в виде подпрограммы.

Например:

исходные данные - 123023402303450

234450234567010

234455677670450

результат - (123,234,23,345)(23445,234567,1)(23445567767,45)

2. Написать подпрограмму для обмена строк двумерного массива с ее помощью отсортировать массив по элементам третьего столбца.

3. Написать подпрограмму для суммирования матриц. С ее помощью сложить исходную матрицу и транспонированную (т. е. полученную поворотом исходной на 90 °).

4. Написать подпрограмму для удаления строки из двумерного массива. Оставшиеся строки должны быть расположены плотно, недостающие элементы заменяются 0. С помощью разработанных подпрограмм исключить из массива строки с номерами от А до В.

5. Определить является ли матрица ортонормированной, т. е. такой, что скалярное произведение каждой пары различных строк равно 0, а скалярное произведение строки самой на себя равно 1.

6. Элемент матрицы является седловой точкой, если он является наименьшим в своей строке и наибольшим в своем столбце (или наоборот: наибольшим в своей строке и наименьшим в своем столбце).Для заданной матрицы определить все седловые точки.

7. Написать подпрограмму обмена столбца и строки двухмерного массива. С ее помощью поменять местами те строки и столбцы, первые элементы которых совпадают.

8. Написать подпрограмму транспонирования квадратной матрицы (т.е. поворота исходной матрицы на 90 °). С ее помощью определить является ли заданная матрица симметрической. (Матрица называется симметрической, если транспонированная матрица равна исходной).

9. Написать подпрограмму для вычисления суммы элементов квадратной матрицы, которые расположены ниже главной диагонали. С ее помощью найти максимальное значение такой суммы в n матрицах.

10. Написать подпрограмму, проверяющую есть ли отрицательные элементы в указанной строке двумерного массива. Удалить из массива все строки с отрицательными элементами, удаленная строка заполняется 0 и переносится в конец массива.