Это методическое пособие предназначено для желающих самостоятельно научиться решать задачи по основным разделам предмета на языках Бейсик и Паскаль. Предлагаемая методика включает
Вид материала | Методическое пособие |
СодержаниеX.7.Вопросы для самопроверки XI. Использование подпрограмм и функций Результат: С - число сочетаний из N по M. Input n, m |
- Учебно-методическое пособие таганрог 2005 ббк 67. 01 Составитель, 578.81kb.
- Курс. 01;Мпк. 01;3 методическое пособие по курсовой работе методика воспитательной, 230.31kb.
- Методика преподавания хореографических дисциплин Учебно-методическое пособие для специальности, 1490.89kb.
- Ниязов Олег Нургалиевич Ниязов О. Н. Н60 методическое пособие, 75.1kb.
- Учебно-методическое пособие Йошкар-Ола, 2009 ббк п 6 удк 636, 3772.57kb.
- Учебно-методическое пособие и ситуационные задачи по урологии для студентов волгоград,, 482.99kb.
- Панасенко Александр Иванович, профессор кафедры органической и биологической химии, 259.01kb.
- Учебное пособие по курсу «управление банковским продуктом» Составитель: к э. н., доцент, 955.86kb.
- Предлагаемая работа представляет собой попытку в краткой форме изложить теоретический, 1296.91kb.
- Российской федерации, 664.65kb.
X.7.Вопросы для самопроверки
1. В чем особенности организации программ для обработки массивов произвольных размеров?
2. Алгоритм преобразования:
- матрицы в вектор;
- вектора в матрицу.
3. Способы заполнения матрицы.
4. Типовые алгоритмы обработки массивов:
- суммирования;
- умножения;
- удаления;
- транспонирования;
- обмен местами;
- поиск MIN, МАХ;
- включения элемента;
- преобразования;
- упорядочения.
(Ответы на все вопросы сопровождать примерами!)
XI. Использование подпрограмм и функций
При решении задач часто приходится в различных местах программ выполнять одну и туже последовательность операторов, причем обычно с разными значениями переменных. В этих случаях указанную последовательность операторов целесообразно оформить в виде подпрограммы, т. е. записать их один раз и выполнять по мере необходимости.
По отношению к каждой подпрограмме все переменные программы условно разделены на четыре группы: входные, выходные, внутренние и прочие.
Входные - это переменные, которым присваиваются значения исходных данных, необходимые для решения задачи, реализуемой данной подпрограммой.
Выходные - это переменные, в которых получаются результаты работы подпрограммы, т. е. через входные и выходные переменные основная программа осуществляет обмен информацией с подпрограммой.
Внутренние - это переменные подпрограммы. Внутренняя переменная должна обладать тем свойством, что если везде в данной подпрограмме заменить имя этой переменной на любое другое, не фигурирующее в основной программе, то работа в целом всей программы не изменится.
Прочие - это все остальные переменные основной программы.
Для того, чтобы составленную подпрограмму можно было использовать в других задачах, к каждой подпрограмме составляется инструкция по ее использованию. В инструкцию, как правило, включаются следующие пункты:
- Назначение подпрограммы.
- Используемый метод.
- Переменные, используемые подпрограммой (с разделением на входные, выходные и внутренние).
- Используемые данной подпрограммой другие подпрограммы и функции.
- Требования к вызывающей программе (какие должны быть описаны массивы, какие функции и подпрограммы, какие необходимо сделать присвоения пред обращением к данной подпрограмме).
- Возможные изменения подпрограммы.
XI.1.Бейсик
В Бейсике подпрограмма оформляется как группа операторов, которая должна выполняться при обращении к ней, и составляет с программой единое целое.
Обращение к подпрограмме осуществляется оператором
GOSUB N
где N - номер строки, с которой начинается подпрограмма. Последним оператором, выполняемым в подпрограмме, должен быть оператор RETURN.
пример: Составит программу для вычисления числа сочетаний. Вычисление факториала вычислить в виде подпрограммы.
Список используемых переменных.
Исходные данные: N, M - целые неотрицательные числа, N>=M.
Результат: С - число сочетаний из N по M.
Вспомогательные переменные: С1=N!, С2=M!.
Переменные в подпрограмме: L - переменная, факториал которой вычисляется в подпрограмме, P=L! вычисляется в подпрограмме, I - управляющая переменная цикла.
10 PRINT "Введите N, M"
- INPUT N, M
30 L= N \ GOSUB 1000 \ C1= P
40 L= M \ GOSUB 1000 \ C1= P
50 L=N-M \ GOSUB 1000
- 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) и что, даже если значения формальных параметров в теле функции будут изменены, новые значения не будут переданы обратно вызывающей программе. Это, кстати, не является различием между процедурами и функциями; Вы можете использовать оба типа параметров с любым видом подпрограмм.