- •Задания
- •Контрольные вопросы
- •Подпрограммы Общие сведения о подпрограммах. Локальные и глобальные переменные
- •Формальные и фактические параметры. Передача параметров в подпрограмму.
- •Процедуры.
- •Функции.
- •Массивы.
- •Описание массивов
- •Операции над массивами.
- •Ввод-вывод элементов массива
- •Сортировка элементов в массиве.
- •1 Сортировка методом «пузырька»
- •2 Сортировка выбором:
- •Использование подпрограмм для работы с массивами.
- •Работа с динамическими переменными и указателями.
- •Работа с динамическими массивами с помощью процедур
- •Обработка матриц во Free Pascal
- •Ввод-вывод матриц
Лабораторная работа № 4
Массивы.
Процедуры и функции.
Цель работы: научиться правильно описывать различные массивы, уметь инициализировать массивы, распечатывать содержимое массива; научится решать задачи на использование массивов и подпрограмм.
Общие сведения.
Массив - это структурированный тип данных, который используется для описания упорядоченной совокупности фиксированного числа элементов одного типа, имеющих общее имя. Для обозначения элементов массива используются имя переменной-массива и индекс.
В практике программирования часто складываются ситуации, когда одну и ту же группу операторов, реализующих определенную цель, требуется повторить без изменений в нескольких местах программы. Для избавления от столь нерациональной траты времени была предложена концепция подпрограммы.
Подпрограмма – именованная, логически законченная группа операторов языка, которую можно вызвать для выполнения любое количество раз из различных мест программы. В языке Free Pascal существуют два вида подпрограмм: процедуры и функции. Главное отличие процедуры от функции заключается в том, что результатом исполнения операторов, составляющих тело функции, всегда является некоторое значение, поэтому функцию можно использовать непосредственно в выражениях, наряду с переменными и константами.
Перед выполнением работы необходимо изучить правила описания и использования переменных типа массив, правила описания подпрограм [см. Приложения].
Пример Найти сумму положительных элементов в массиве. Этапы решения задачи:
Алгоритм решения довольно прост - в цикле будем "пробегать" массив, сравнивая его ячейки с 0 и суммировать, если они >0.
Составим блок-схему программы
Уточним из каких блоков состоит блок"Суммирование положительных ячеек"
Содержание этих блоков простое, поэтому не стоит их уточнять.
Напишем программу на языке Паскаль
program example;
type
Tarray = array[1..100] of integer;
Var v: Tarray;
N,i,s:integer;
Procedure vvod_data(var m:Tarray;n:integer);
Var i:integer;
Begin
Writeln('Введите ',n,' чисел через пробел');
For i:= 1 to n do read(m[i]);
End;
Function summ(m:TArray):integer;
Var s:integer;
Begin
S:=0;
For i:= 1 to n do if m[i]>0 then s:= s+m[i];
Summ:=s;
End;
begin
write('Введите размерность массива N= '); readln(n);
vvod_Data(v,n);
s:= summ(v);
writeln('Сумма= ',s);
end.
Задания
Вариант 1
Вводится массив из N целых чисел. Определить, содержит ли последовательность хотя бы одно число, сумма цифр в котором равна их количеству. Создать подпрограмму, которая возвращает сумму и количество цифр в числе.
Вариант 2
Вводится массив из N целых положительных чисел. Определить, в каком из чисел наибольшая сумма всех его цифр. Для подсчета суммы цифр числа использовать подпрограмму.
Вариант 3
1. Вводится матрица из NхМ целых положительных чисел. Найти число с наибольшим количеством нулей. Составить подпрограмму для подсчета нулей в числе.
Вариант 4
Вводится массив из N целых положительных чисел. Определить наименьшую цифру у каждого числа. Написать подпрограмму, которая для заданного числа возвращает в нем наименьшую цифру.
Вариант 5
1. Вводится матрица из NхМ целых положительных чисел. Заменить все простые числа матрицы на 0. Определение простых чисел выполнить в подпрограмме.
Контрольные вопросы
Каким образом определяются переменные типа массив (одномерный и двумерный)?
Как осуществляется доступ к отдельному элементу одномерного и двумерного массива?
Каким образом выводятся элементы массива на экран?
Для чего нужны в программе процедуры и функции?
В чем отличие между процедурой и функцией?
Чем отличаются формальные и фактические параметры?
Чем отличаются параметры-значения и параметры-переменные?
Как объявляются глобальные и локальные переменные? Каково правило видимости этих переменных?
Приложение 1.
Подпрограммы Общие сведения о подпрограммах. Локальные и глобальные переменные
Подпрограмма – это поименованный набор описаний и операторов, выполняющих определенную задачу. Информация, передаваемая в подпрограмму для обработки, называется параметрами, а результат вычислений – значениями. Обращение к подпрограмме называют вызовом. Перед вызовом подпрограмма должны быть обязательно описана в разделе описаний. Описание подпрограммы состоит из заголовка и тела. В заголовке объявляется имя подпрограммы и в круглых скобках ее параметры, если они есть (для функции необходимо сообщить тип возвращаемого ею результата). Тело подпрограммы следует за заголовком и состоит из описаний и исполняемых операторов.
Любая подпрограмма может содержать описание других подпрограмм. Константы, переменные, типы данных могут быть объявлены как в основной программе, так и в подпрограммах различной степени вложенности. Переменные, константы и типы, объявленные в основной программе до определения подпрограмм, называются глобальными, они доступны всем функциям и процедурам. Переменные, константы и типы, описанные в какой-либо подпрограмме, доступны только в ней и называются локальными.
Для правильного определения области действия идентификаторов (переменных) необходимо придерживаться следующих правил:
•каждая переменная, константа или тип должны быть описаны перед использованием;
•областью действия переменной, константы или типа является та подпрограмма, в которой они описаны;
•все имена в пределах подпрограммы, в которой они объявлены, должны быть уникальными и не должны совпадать с именем самой подпрограммы;
•одноименные локальные и глобальные переменные – это разные переменные, обращение к таким переменным в подпрограмме трактуется как обращение к локальным переменным (глобальные переменные недоступны);
•при обращении к подпрограмме доступны объекты, которые объявлены в ней и до ее описания.