Вспомогательные алгоритмы и их реализация на Бейсике
Пример 1.
PROGRAM PODPR;
USES CRT; (* ДЛЯ IBM PC *)
PROCEDURE PRIPEV;
BEGIN
WRITELN (ТУМ-БА-ЛА-ЛА !');
END;
BEGIN (* начало основной программы *)
CLRSCR; (* ДЛЯ IBM PC *)
WRITELN (' МЫ ИДЕМ И ПОЕМ ’);
PRIPEV;
WRITELN (‘ ТАМ ЗА ГОРАМИ СИНИЙ ЛЕС’ );
PRIPEV;
WRITELN (' СКОРО МЫ ТУДА ДОЙДЕМ ?' );
PRIPEV;
WRITELN (' МНОГО ЯГОД МЫ НАЙДЕМ ?' );
PRIPEV;
REPEAT UNTIL KEYPRESSED; (* ДЛЯ IBM PC *)
END.
Пример 2.
PROGRAM PTS1;
USES CRT;
VAR A, B, S1, S2 : REAL;
PROCEDURE PLACE ( X,Y:REAL; VAR SK, SP:REAL);
{ X и Y принимаются значения,
SK и SP передаются о основную программы и
являются результатами работы процедуры }
BEGIN
SK:=SQR(X); { КВАДРАТ }
SP:=X*Y; { ПРЯМОУГОЛЬНИК }
END;
{ОСНОВНАЯ ПРОГРАММА}
BEGIN
CLRSCR;
WRITELN ('ВВЕДИТЕ ЗНАЧЕНИЯ А, В:');
READ (A,B);
WRITELN;
PLACE (A,B,S1,S2); { ВЫ ЗОВ PLACE }
{А,В- передаются в процедуру ,
S1,S2- принимаются в качестве
результатов работы процедуры }
WRITELN (' Sl= ',S1:5:2; S2=',S2:5:2);
REPEAT UNTIL KEYPRESSED;
END.
Пример 3.
(*-----------------------------------------------------------------!
Фигурное катание !
------------------------------------------------------------------------------*)
PROGRAM MINMAX;
USES CRT;
CONST N=6; { ЧИСЛО СУДЕЙ }
TYPE MASSIV=ARRAY[1..N] OF REAL;
VAR
A : MASSIV; { МАССИВ ОЦЕНОК }
I : INTEGER; { ПАРАМЕТР ЦИКЛА }
MAX : REAL; { МАКСИМАЛЬНАЯ ОЦЕНКА }
MIN : REAL; { МИНИМАЛЬНАЯ ОЦЕНКА }
{ ПРОЦЕДУРА MAXMIN }
PROCEDURE MAXMIN ( K: INTEGER; VAR X : MASSIV;
VAR MAX,MIN : REAL );
VAR J : INTEGER;
BEGIN
MAX:=X[1];
MIN:=X[1];
FOR J:=l TO К DO
BEGIN
IF X[J]>MAX THEN MAX:=X[J];
IF X[J]<MIN THEN MIN:=X[J];
END; { конец цикла }
END; { конец процедуры }
{ Основная программа }
BEGIN
CLRSCR;
WRITELN ( 'КАКИЕ ОЦЕНКИ ДАЛИ СУДЬИ? ');
FOR I:=I TO N DO READ(A[I]);
MAXMIN (N,A,MAX,MIN); {ВЫЗОВ ПРОЦЕДУРЫ}
{ N, A – передаются в процедуру,
MAX, MIN - принимаются основной программой
как результаты работы процедуры }
WRITELN;
WRITELN;
WRITELN(' Максимальная оценка =’, МАХ:4:1);
WRITELN(‘Минимальная оценка = ', MIN :4:1);
REPEAT UNTIL KEYPRESSED;
END. { конец основной программы }
Задачи для самостоятельного решения.
1) Заменить отрицательные элементы линейной таблицы вычисления их
модулями, не пользуясь стандартной функцией вычисления модуля числа,
2) Написать программу вычисления значения выражения
(А!+М!)/С! где А, М и С - вводятся с клавиатуры,
2) Найти максимум из 4 чисел, в качестве процедуры используйте поиск максимальных из двух чисел.
Задачи должны решаться самостоятельно.
Примечание: ввиду сложности материала для слабых учащихся можно предложить готовый вариант программ с объяснением особенностей передачи параметров из основной программы в процедуру и обратно.
Возможные варианты задач.
Задача 1.
{ Замена элементов таблицы их модулями }
PROGRAM MOD;
CONST N=6; { ЧИСЛО ЭЛЕМЕНТОВ }
TYPE MASSIV=ARRAY[1..N] OF REAL;
VAR
A : MASSIV ;
I : INTEGER;
В : MASSIV ;
{ ПРОЦЕДУРА MODUL }
PROCEDURE MODUL (K: INTEGER; VAR X : MASSIV;
VAR В : MASSIB );
VAR J : INTEGER ;
BEGIN
FOR J:=l TO К DO
IF X[J]<0 THEN B [J]:= -X[J] ELSE B[J]:=X[J];
END;
{ ОСНОВНАЯ ПРОГРАММА }
BEGIN
WRITELN (' Введите элементы таблицы ' );
FOR I:=l TO N DO READ ( A[I]);
MODUL ( N,A,B); { ВЫЗОВ ПРОЦЕДУРЫ }
{ N,A - ПЕРЕДАЮТСЯ, В - ПРИНИМАЕТСЯ }
WRITELN;
WRITELN ( ' ОБРАБОТАННАЯ ТАБЛИЦА ');
FOR I:=l TO N DO WRITE ( B[I] : 3 );
END.
Задача 2.
(* ВЫЧИСЛЕНИЕ ЗНАЧЕНИЯ ВЫРАЖЕНИЯ
С ФАКТОРИАЛАМИ F! = (А! + М!)/ С! *) PROGRAM FAKT1;
VAR А, М, С : INTEGER ; (* ВВОДИМЫЕ ЧИСЛА *)
Al, Ml, Cl : INTEGER ; (* ФАКТОРИАЛЫ ЭТИХ ЧИСЕЛ *)
U : REAL; (* ЗНАЧЕНИЕ ВЫРАЖЕНИЯ *)
(* ПРОЦЕДУРА FAKTORIAL *)
PROCEDURE FAKTORIAL ( N : INTEGER ; VAR P:REAL);
VAR J : INTEGER ;
BEGIN
P:=l;
FOR J:= 1 TO N DO P:=P*J ;
END;
(* ОСНОВНАЯ ПРОГРАММА *)
BEGIN
WRITELN (' ВВЕДИТЕ З НАТУРАЛЬНЫХ ЧИСЛА ');
READ (A,M, С);
FAKTORIAL (А,А1); (* ВЫЗОВ ПРОЦЕДУРЫ *)
(* А - ПЕРЕДАЕТСЯ, Al - ПРИНИМАЕТСЯ *)
FAKTORIAL (M, Ml); (* ВЫЗОВ ПРОЦЕДУРЫ *)
(* М - ПЕРЕДАЕТСЯ, Ml - ПРИНИМАЕТСЯ *)
FAKTORIAL (C,C1); (* ВЫЗОВ ПРОЦЕДУРЫ *)
(* С - ПЕРЕДАЕТСЯ, С1- ПРИНИМАЕТСЯ *)
U:=(A1+M1 )/С1 ;
WRITELN ;
WRITELN (' ———————-——————————————);
WRITELN (' РЕЗУЛЬТАТ ВЫЧИСЛЕНИЯ =’, U:5:2 );
END.
Задача 3.
{ МАКСИМУМ ИЗ 4 ЧИСЕЛ }
PROGRAM MAX4;
VAR A.B,C,D : REAL; (* ВВОДИМЫЕ ЧИСЛА *)
М1,М2 : REAL; (* ПРОМЕЖУТОЧНЫЕ МАКСИМУМЫ*)
М : REAL; (* МАКСИМАЛЬНЫЙ ЭЛЕМЕНТ *)
(* ПРОЦЕДУРА MAX4 *)
PROCEDURE MAX4 ( X,Y : REAL ; VAR Z : REAL );
BEGIN
IF X>Y THEN Z:=X ELSE Z:=Y;
END;
(* ОСНОВНАЯ ПРОГРАММА *)
BEGIN
WRITELN (‘ ВВЕДИТЕ 4 ЧИСЛА ‘);
READ (A,B,C,D);
МАХ4(А,В,М1); (* ВЫЗОВ ПРОЦЕДУРЫ *)
(* А, В - ПЕРЕДАЮТСЯ ,
Ml - ПРИНИМАЕТСЯ *)
MAX4(C,D,M2); (* ВЫЗОВ ПРОЦЕДУРЫ *)
(* C,D - ПЕРЕДАЮТСЯ,
М2 - ПРИНИМАЕТСЯ *)
МАХ4 (М1,М2,М);
WRITELN ;
WRITELN (‘ МАКСИМАЛЬНОЕ ИЗ 4 ЧИСЕЛ – ‘,М : 4 : 2);
END.
Урок 3.
Тема урока :Функции пользователя.
Цель урока : обучить учащихся использованию функций пользователя, познакомить с правилами оформления функций пользователя и показать отличие функций от процедур.
Тип урока : комбинированный.
Структура урока ; 1. Вступительное слово учителя ( в виде лекции);
2. Практическая часть : вызов и анализ готовых программ с диска.
3. Заключительная часть. Выводы.
4. Домашнее задание.
Ход урока ;
1. Вступительное слово учителя.
Хотя набор встроенных функций очень широк, он не удовлетворяет требованиям каждого программиста. Пользователь может задавать свою функцию и обращаться к ней, меняя исходные данные.
Функция, определённая пользователем, состоит из заголовка и типа функции.
FUNCTION имя ( формальные параметры ):ТИП;
описание данных
BEGIN
операторы
END.
Раздел операторов должен содержать хотя бы один оператор, присваивающий имени функции значения.
Если таких присваиваний несколько, то результатом выполнения функции будет последнее значение.
Результат функции - единственное значение!
Обращение к функции осуществляется поимени с необязательным списком фактических параметров. Каждый аргумент должен соответствовать формальным параметрам, указанным в заголовке и иметь тот же тип.
2. Практическая часть.
Учащимся предлагается вызвать готовые программы с диска, записать из в тетрадь; анализ программ производится с помощью учителя .
Примеры программ.
Вычисление степени числа.
Пример 1.
(* ПРОГРАММА ВЫЧИСЛЯЕТ СТЕПЕНЬ ЧИСЛА *)
PROGRAM DEMO_FUNCTION;
VAR Z : INTEGER ; К : REAL ;
(* ФУНКЦИЯ ПОЛЬЗОВАТЕЛЯ *)
FUNCTION STEP ( F : REAL, EXP : INTEGER ): REAL ;
VAR С : INTEGER ; Т : REAL ;
BEGIN
IF EXP=0 THEN STEP=1 ELSE BEGIN T:=F;
FOR С :=2 TO ABS(EXP) DO Т :=T*F ;
IF EXP<0 THEN STEP:=1/T ELSE STEP:=T ;
END;
(* КОНЕЦ ФУНКЦИИ ПОЛЬЗОВАТЕЛЯ *)
(* ОСНОВНАЯ ПРОГРАММА *)
BEGIN
WRITELN (' ВВЕДИТЕ ЧИСЛО '); READ ( Z );
WRITELN ;
WRITELN ( STEP ( Z, 3 )); (* ВЫЧИСЛЕНИЕ Z В 3 СТЕПЕНИ *)
WRITELN ( STEP ( Z, 4 ));
WRITELN ('ВВЕДИТЕ НУЖНУЮ СТЕПЕНЬ');
READ (К);
WRITELN ( К , ' - Я СТЕПЕНЬ ЧИСЛА ', Z , STEP ( Z , К ));
END.
Пример 2.
(*———————————————————————
! ОФОРМЛЕНИЕ ФУНКЦИИ !
______________ *)
PROGRAM PT11;
{ВЫЧИСЛЕНИЕ F=M!-K! РАЗНОСТИ ФАКТОРИАЛОВ}
USES CRT;
VAR F,M,K : INTEGER;
(* ФУНКЦИЯ FAKT*)
FUNCTION FAKT ( N : INTEGER ): INTEGER;
VAR P,J : INTEGER;
BEGIN
P:=1;
FOR I:=2 TO N DO P:=P* I;
FAKT:=P; (* ФУНКЦИЯ FAKT ПОЛУЧАЕТ ЗНАЧЕНИЕ*)
WRITELN;
WRITELN ('ФАКТОРИАЛ ', N , '=', P);
END; (* КОНЕЦ ФУНКЦИИ *)
{ОСНОВНАЯ ПРОГРАММА}
BEGIN
CLRSCR;
WRITELN ('ВВЕДИТЕ ЗНАЧЕНИЯ M,K:');
READ (M,K);
F:=FAKT(M)-FAKT(K);
WRITELN;
WRITELN ('РАЗНОСТЬ ФАКТОРИАЛОВ= ',F:5);
REPEAT UNTIL KEYPRESSED;
END.
3. Заключение.
Функция пользователя состоит из заголовка с указанием типа функции, раздела описания данных и раздела операторов. В основную программу передается полученное функцией последнее значение.
4. Домашнее задание.
( x +8 )2 + x 3
Написать программу вычисления функции Y=———————
при х=2.3; 5.88; 6.11 ;9.05.. x+5
Программа должна содержать функцию пользователя.
Вспомогательные алгоритмы и их реализация на Бейсике.
Тема урока : Вспомогательные алгоритмы.
Цель урока : дать понятие вспомогательного алгоритма, его реализация на языке
Бейсик.
Ход урока:
1. Вспомогательные алгоритмы.
Вспомогательным называется алгоритм, снабженный заголовком, позволяющим вызвать этот алгоритм из других алгоритмов (наз. основными).
Любой алгоритм можно сделать вспомогательным, снабдив его соответственным
заголовком.
Использовать тогда, когда возникает необходимость многократно повторять один и тот же набор действий в одном или разных алгоритмах, а также вместе для решения сложных задач, когда задача разбивается на несколько более простых задач .
Набор команд, из которых состоит вспомогательный алгоритм заменяют одной командой вызова.
При использовании вспомогательного алгоритма никого, не интересует, из каких действий он состоит. Важно, каковы исходные данные (аргументы) этого алгоритма и что является результатом его работы (факты).
Пример: при использовании стиральной машины неважно вникать в ее устройство.
Достаточно знать, что «аргументами» для нее являются стиральный порошок, чистая вода и грязные вещи, а «результатом» грязная мыльная вода и чистые вещи.
В программировании вспомогательный алгоритм называется подпрограммой. Команда вызова ее: GOSUB <номер строки>.
Программа заканчивается словом RETURN. Оператор GOSUB передает управление на строку с номером, указывающим в нем. По оператору RETURN осуществляется возврат к оператору, следующему за оператором GOSUB.
Подпрограммы могут располагаться в любом месте программы (обычно в конце). Вызовы подпрограммы могут быть вложены в другие подпрограммы.
Пример 1
10 GOSUB 50
20 A=B+5
30 PRINT A
40 GO TO 70
50 B=3
60 RETURN
70 PRINT «Конец работы».
Пример 2
10 PRINT «Мы идем и поем,»
20 GOSUB 100
30 PRINT «Там за горами синий лес,»
40 GOSUB 100
50 PRINT «Скоро мы туда дойдем?»
60 GOSUB 100
70 PRINT «Много ли ягод там найдем?»
80 GOSUB 100
90 END
100 PRINT «Тум-ба-ла-ла»
100 RETURN
Пример 3
5 REM Литературный тест
7 REM POINTS (очки) - содержит очки за правильный ответ
10 LET POINTS=0
20 PRINT «Отцом Буратино был: 1)Вольтер; 2)Дон Жуан; 3)Папа Карло.
25 REM RUGHTANS (верный ответ) - содержит код правильного ответа.
30 LET RIGHTANS=2
40 GOSUB 500
50 PRINT «Роман “Старик и море” написал: 1)Хемингуэй; 2)Айвазовский; 3)Бетховен»
60 LET RIGHTANS=1
70 GOSUB 500
80 PRINT «Раскольников герой романа: 1)Достоевского; 2)Пушкина; 3)Крылова»
90 LET RIGHTANS=1
100 GOSUB 500
109 REM печать конечного счета
110 PRINT
130 END
499 REM Подпрограмма для восприятия и анализа ответа пользователя
500 INPUT ANSWER
510 IF ANSWER <>RIGHTANS THEN GOTO 520 ELSE GOTO 530
520 PRINT «Извините, ответом является:»; RIGHTANS
525 GOTO 540
530 PRINT «Великолепно!»
535 LET POINTS=POINTS+1
540 PRINT
545 RETURN
Пример 4
9 REM Нахождения максимума трех чисел.
10 INPUT A,B,C
20 LET X=A
30 LET Y=B
40 GOSUB 200
50 LET X=Z
60 LET Y=C
70 GOSUB 200
80 PRINT Z
90 STOP
200 REM Поиск максимума из двух чисел.
201 REM Аргумента X,Y. Результат Z
210 IF X>Y THEN Z=X ELSE Z=Y
220 RETURN