Вспомогательные алгоритмы и их реализация на Бейсике

Пример 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 имя ( формальные параметры ):ТИП;

Вспомогательные алгоритмы и их реализация на Бейсике - student2.ru описание данных

BEGIN

Вспомогательные алгоритмы и их реализация на Бейсике - student2.ru операторы

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.

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

       
  Вспомогательные алгоритмы и их реализация на Бейсике - student2.ru
 
    Вспомогательные алгоритмы и их реализация на Бейсике - student2.ru

Пример 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

Наши рекомендации