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

Вид материалаМетодическое пособие

Содержание


X.7.Вопросы для самопроверки
XI. Использование подпрограмм и функций
Результат: С - число сочетаний из N по M.
Input n, m
Подобный материал:
1   ...   17   18   19   20   21   22   23   24   25

X.7.Вопросы для самопроверки


1. В чем особенности организации программ для об­работки массивов произвольных размеров?

2. Алгоритм преобразования:

- матрицы в вектор;

- вектора в матрицу.

3. Способы заполнения матрицы.

4. Типовые алгоритмы обработки массивов:

- суммирования;

- умножения;

- удаления;

- транспонирования;

- обмен местами;

- поиск MIN, МАХ;

- включения элемента;

- преобразования;

- упорядочения.

(Ответы на все вопросы сопровождать примерами!)

XI. Использование подпрограмм и функций


При решении задач часто приходится в различных местах программ выполнять одну и туже последовательность операторов, причем обычно с разными значениями переменных. В этих случаях указанную последовательность операторов целесообразно оформить в виде подпрограммы, т. е. записать их один раз и выполнять по мере необходимости.

По отношению к каждой подпрограмме все переменные программы условно разделены на четыре группы: входные, выходные, внутренние и прочие.

Входные - это переменные, которым присваиваются значения исходных данных, необходимые для решения задачи, реализуемой данной подпрограммой.

Выходные - это переменные, в которых получаются результаты работы подпрограммы, т. е. через входные и выходные переменные основная программа осуществляет обмен информацией с подпрограммой.

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

Прочие - это все остальные переменные основной программы.

Для того, чтобы составленную подпрограмму можно было использовать в других задачах, к каждой подпрограмме составляется инструкция по ее использованию. В инструкцию, как правило, включаются следующие пункты:
  1. Назначение подпрограммы.
  2. Используемый метод.
  3. Переменные, используемые подпрограммой (с разделением на входные, выходные и внутренние).
  4. Используемые данной подпрограммой другие подпрограммы и функции.
  5. Требования к вызывающей программе (какие должны быть описаны массивы, какие функции и подпрограммы, какие необходимо сделать присвоения пред обращением к данной подпрограмме).
  6. Возможные изменения подпрограммы.



XI.1.Бейсик


В Бейсике подпрограмма оформляется как группа операторов, которая должна выполняться при обращении к ней, и составляет с программой единое целое.

Обращение к подпрограмме осуществляется оператором

GOSUB N

где N - номер строки, с которой начинается подпрограмма. Последним оператором, выполняемым в подпрограмме, должен быть оператор RETURN.


пример: Составит программу для вычисления числа сочетаний. Вычисление факториала вычислить в виде подпрограммы.




Список используемых переменных.

Исходные данные: N, M - целые неотрицательные числа, N>=M.

Результат: С - число сочетаний из N по M.

Вспомогательные переменные: С1=N!, С2=M!.

Переменные в подпрограмме: L - переменная, факториал которой вычисляется в подпрограмме, P=L! вычисляется в подпрограмме, I - управляющая переменная цикла.


10 PRINT "Введите N, M"
  1. INPUT N, M

30 L= N \ GOSUB 1000 \ C1= P

40 L= M \ GOSUB 1000 \ C1= P

50 L=N-M \ GOSUB 1000
  1. C = C1/ (C2*P)

70 PRINT "Число сочетаний из "; N; "по"; M; "="; C

80 STOP

1000 REM подпрограмма вычисления факториала

1010 P=1

1020 FOR I=1 TO L

1030 P=P*I

1040 NEXT I

1050 RETURN

XI.2.Паскаль


Как упоминалось ранее, процедуры и функции, известные как подпрограммы, могут появиться в любом месте до основного тела программы. Для процедур используется следующий формат:


procedure имя-процедуры(параметры);


label

метки;

const

описания констант;

type

определения типов данных;

var

описания переменных;

procedures и functions;

begin

основное тело процедуры;

end;

Функции имеют такой же формат, что и процедуры за иск­лючением того, что они начинаются с заголовка function и заканчиваются типом данных для возвращаемого значения функции:

function имя_функции(параметры) : тип данных;

Как можно видеть, здесь имеется только два различия от структуры обычной программы: процедуры и функции начинаются с заголовка procedure или function, а не с заголовка program, и заканчиваются не точкой, а точкой с запятой. Процедуры и функции могут иметь свои собственные константы, типы данных, переменные и даже собственные процедуры и функции. Но все эти элементы могут использоваться только в тех процедурах и функциях, в которых они определены.


Ниже приводится вариант программы DORATIO.PAS, в кото­ром используется процедура для получения двух значений и функция для вычисления коэффициента:

пример: program DoRatio;

var

A,В: integer;

Ratio: real;

procedure GetData ( var X,Y : integer);

begin

Write(' Введите два числа: ');

Readln (X,V)

end;


function GetRatio ( I,J : integer) : real;

begin

GetRatio := I/J

end;

begin

GetData (A,B);

Ratio := GetRatio (A,B);

Writeln ('Отношение равно', Ratio)

end.

При компиляции и запуске программы первым в теле прог­раммы выполняется оператор GetData (A,B). Этот тип оператора называется вызовом процедуры. При обработке этого вызова программа выполняет операторы в GetData, заменяя Х и Y (фор­мальные параметры) на A и В (фактические параметры). Ключе­вое слово var перед Х и Y в операторе вызова процедуры GetData указывает, что фактические параметры должны быть пе­ременными и что значения переменных могут быть изменены и переданы обратно вызывающей программе. Поэтому процедуре GetData нельзя передавать литералы, константы, выражения и так далее. При завершении выполнения GetData управление пе­редается в основное тело программы оператору, следующему за вызовом GetData.

Этим следующим оператором является вызов функции GetRatio. Отметим здесь некоторые важные различия. Во-пер­вых, GetRatio возвращает значение, которое затем должно быть где-нибудь использовано; в данном случае это значение прис­ваивается Ratio. Во-вторых, в основном теле функции значение присваивается GetRatio. Таким образом функция определяет, какое значение следует возвратить. В-третьих, перед формаль­ными параметрами I и J здесь отсутствует ключевое слово var. Это означает, что фактические параметры могут быть любыми целочисленными выражениями, например, Ratio:= GetRatiо(A+В,300) и что, даже если значения формальных пара­метров в теле функции будут изменены, новые значения не бу­дут переданы обратно вызывающей программе. Это, кстати, не является различием между процедурами и функциями; Вы можете использовать оба типа параметров с любым видом подпрограмм.