Подпрограммы в языке программирования Turbo Pascal. Подпрограммы в языке программирования QBasic

Страницы работы

Фрагмент текста работы

{можно вызвать подпрограмму, указывая другие значения параметров}

End.

В результате выполнения этой программы на экране появится следующая строка:

****************************************

5          Программа вычисляющая НОК, содержащая подпрограмму- функцию, для вычисления НОД

Program n1;

Const c:array[1..5] of integer=(36,54,72,18,15);

Var x,y:integer;

Function NOD(a,b:integer):integer;   {заголовок функции}

begin

While a<>b do

If a>b then a:=a-b

else b:=b-a;

NOD:=a;                {результат функции присваивается ее имени}

end;                                            {конец описания функции}

Begin                                          {начало главной программы}

x:=c[1];

for i:=2 to 5 do

begin

y:=c[i];

x:=x*y div NOD (x,y)     {вызов функции}

end;

write(‘HOK=’,x);

End.                                             {конец главной программы}

           6           Программа написана на языке программирования Qbasic.Программа позволяет ввести два числа, затем сравнивает сумму этих чисел и их произведение. Большее из них выводин на экран.

DECLARE FUNCTION MAX2A!(a!, b!)

REM По заданным вещественным значениям x и y вычислить

REM U =max(X+Y, X*Y)

INPUT ”Введите два числа” ,X,Y

a= X+Y: b= X*Y: U= MAX2A(a,b)’Обращение к функции

PRINT “U=”; U

END

FUNCTION MAX2A(a,b)’Объявление функции

IF a>b THEN S=a ELSE S=b

MAX2A=S

END FUNCTION

7          Программа написана на языке Qbasic.Решает ту же задачу что и предыдущая, но объявление этой функции выглядит иначе

DEF MAX2A(a,b)’Объявление функции

IF a>b THEN S=a ELSE S=b

MAX2A=S

END DEF

REM U=max(X+Y,X*Y)

INPUT ” Введите два числа”,X,Y

a=X+Y: b=X*Y: U=MAX2A(a,b)’ Обращение к функции

PRINT ”U=”;U

END

8          Программа написана на языке Qbasic.Программа решает ту же задачу что и прдидущая, но  используется подпрограмма– процедура.

DECLARE SUB MAXim(r1!, r2!, RES!)

REM Начало подпрограммы

INPUT “ Введите два числа“,X,Y

MAXim X+Y, X*Y,U ‘Обращение к подпрограмме

PRINT “U =”;U

END

SUB MAXim (r1,r2,RES)’Объявление процедуры

IF r1>r2 THEN RES = r1 ELSE RES = r2

END SUB

Теоретические вопросы

–  Дайте определение функции.

–  Дайте определение процедуры.

–  Сформулируйте правила описания  процедуры (функции) на языке программирования Turbo Pascal, на языке QBasic.

–  Сформулируйте правила обращения к процедуре (функции) для этих языков программирования.

–  Сформулируйте основные отличия процедур от функций.

–  Какие переменные называются локальными (глобальными)?

–  Какие переменные называются формальными, а какие фактическими?

–  Какие переменные называются параметры – значения, какие параметры – переменные?

Повторение

Задача1

Перед вами программа, вычисления с+d и c*d с использованием подпрограммы

Program 1;

Var

a, b, ml, ad :real;

procedure MA(c,d:real; var ad, ml:real);

begin

ad:=c +d;

ml:=c*d;

end;

Begin

a:=2;

b:=5;

Ma(a,b,ad,ml);

End.

Задача2;

DEF MA(a,b)’Объявление подпрограммы

MA = (a+b)/2

END DEF

REM Среднее арифметическое двух чиселX и Y

INPUT “Введите  два числа” , X,Y

S = MA(X,Y)’Обращение к подпрограмме

PRINT “Среднее арифметическое двух чисел  “;X;Y;S

END

Задания:

1          Определите на каком языке программирования написана первая программа, вторая программа.

2          Какая подпрограмма использована в первой задаче, а во второй.

3          Укажите описание процедуры(функции) в подпрограмме

4          Укажите обращение к процедуре (функции) в программе.

5          Перечислите формальные переменныею

6          Перечислите фактические переменные.

7          Как передается значение функции в подпрограмму?

8          Как передается результат выполнения процедуры в программу?

9          Перечислите параметры-переменные.

10        Перечислите параметры-значения.

11        Перечислите локальные переменные.

12        Перечислите глобальные переменные.

Задачи для самостоятельной работы

Вариант1

Задача1

На языке Turbo Pascal разработайте программу, позволяющую вывести на экран следующее изображение, использовав подпрограмму для изображения отдельной фигуры:

1

1 1 1    

2  

2 2 2 

3

3 3 3                       

Задача2

На языке  Turbo Pascal разработайте программу, которая возвращает удвоенное значение большего из двух чисел (использовать подпрограмму, которая возвращает большее из двух целых чисел).

Задача3

Разработать программу, решающую ту же задачу на языке Qbasic.

Задача4

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

Задача5

Разработать программу,  которая заменяет стандартную функцию UpCase(преобразование строчных букв в прописные).На языке Turbo Pascal.

Задача6

Вычислите значение выражения: |x+3|/|z+1|+|y*3|/|z+3|,  не используя стандартную функцию mod.

Решение задач к 1 варианту

Задача1

program n1;

procedure ris(n,m:integer;x:char);

var

i:integer;

begin

for i:=1 to n do

write(' ');

write    (' ',x,' ');

writeln ;

for i:=1 to m do

write(' ');

write    ( x, x, x);

writeln;

end;

Begin

ris(1,1,'1');

ris(5,5,'2');

ris(9,9,'3');

End.

Задача2

Program n2;

Var

u,y,m,n:integer;

function max(a,b:integer):integer;

begin

if a>b then

max:=a

else max:=b;

end;

Begin

Writeln(‘введите 2 натуральных числа’);

Readln(u,y);

n:=max(u.y);

m:=n*2;

writeln(‘удвоенное значение большего числа(’,n,’)’равняется’,m);

End.

Задача 3

DECLARE FUNCTION MAX2A!(A!,B!)

REM U=2*MAX(X,Y);

INPUT ”ВВЕДИТЕ ДВА ЧИСЛА ”,X,Y

U=2*MAX2(X,Y)

PRINT”УДВОЕННОЕ ЗНАЧЕНИЕ БОЛЬШЕГО ЧИСЛА”;U

END

FUNCTION MAX2(A,B)’ОБЪЯВЛЕНИЕ ФУНКЦИИ

IF A>B THEN S=A ELSE S=B

MAX2=S

END FUNCTION

Задача4

DECLARE SUB PER1(A!,B!)

REМ НАЧАЛО ПРОГРАММЫ

INPUT ”ВВЕДИТЕ ДВА ЧИСЛА ”,X,Y

PRINT “X1=”;X;”Y1=”Y:

PER X,Y

PRINT ”X1=”;X;”Y1=”Y;

END

SUB PER(A,B)’ОБЪЯВЛЕНИЕ ПРОЦЕДУРЫ

N=A

A=B

B=N

END SUB

Задача5

program n5;

function UpCase(st:string):string;

var

i:integer;

begin

for i:=0 to length(st) do

begin

case st[i] of

'a'..'z':UpCase[i]:=chr(ord(st[i])-32);

'а'..'п':UpCase[i]:=chr(ord(st[i])-32);

'р'..'я':UpCase[i]:=chr(ord(st[i])-80);

else

UpCase[i]:=st[i];

end;

end;

begin

writeln(UpCase(‘masha’));

end.

Задача 6

Program n6;

var

x,y,z,s:real;

function modul(k:real):real;

begin

if k>=0 then modul:=k;

if k<0 then modul:=-k;

end;

Begin

writeln('Введите x,y,z');

readln(x,y,z);

s:=modul(x+3)/modul(z)+modul(y*3)/(modul(z)+3);

writeln('s=',s:3:2);

End.

Вариант2

Задача1

Разработайте программу, позволяющую вывести на экран следующее изображение, использовав подпрограмму для изображения отдельной фигуры:

111

111

222

222 

333

333

Задача2

Разработать программу, в которой используется подпрограмма для определения меньшего из двух чисел.(ТР)

Задача3

Разработать программу, решающую ту же задачу на языке Qbasic.

Задача4

Разработайте программу, которая возвращает введенные значения с противоположными знаками. На языке Qbasic.

Задача5

Разработайте программу, которая выводит на экран слово: ‘четное’–если введенное число четное и ‘не четное’ в противном случае.(не используя функцию odd)

Задача6

Вычислить значение выражения: х!+у!+z!+v!, где x, y, z, v – натуральные числа.

Решения задач 2 варианта

Задача1

Program n1;

procedure ris(n,m:integer;x:char);

var

i:integer;

begin

for i:=1 to n do

write(' ');

write(x,x,x);

writeln;

for i:= 1 to m do

write(' ');

write(x,x,x);

writeln;

end;

Begin

ris(1,1,'1');

ris(5,5,'2');

ris(9,9,'3');

End.

Задача2

Program n2;

var

u,y,m,n:integer;

function min(a,b:integer):integer;

begin

if a>b then min:=b;

if a<b then min:=a;

end;

Begin

writeln('Введите два различных числа ');

readln(u,y);

n:=min(u,y);

m:=n*2;

writeln('удвоенное значение меньшего числа(',n,’)=’,m);

end.

Задача3

DECLARE FUNCTION MIN2! (A!, B!)

REM U=2*MIN(X,Y)

INPUT "Введите два числа", X, Y

U = 2 * MIN2(X, Y)'

PRINT "удвоенное значение меньшего= "; U

END

FUNCTION MIN2 (A, B) 'объявление подпрограммы

IF A > B THEN S = B ELSE S = A

MIN2 = S

END FUNCTION

Задача4

DECLARE SUB ZNAK (X!)

DECLARE SUB ZNAK!(A!,B!)

REM

INPUT "введите число X1  ", X

ZNAK X

PRINT "число, противоположное X1=  "; X;

END

SUB ZNAK (X) 'объявление процедуры

IF X > 0 THEN ZNAK = -X

ELSE ZNAK = X

END SUB

Задача5

Program n5;

var

y,x,z:integer;

function dva(x:integer):integer;

begin

if frac(x/2)=0 then dva:=1

else dva:=-1;

end;

Begin

writeln('введите число');

readln(y);

x:=y;

z:=dva(x);

if z=1 then writeln('четное')

else writeln('не четное');

end.

Задача6

Program n6;

var

x,y,z,v,a:integer;

function fact(n:integer):integer;

var f,i:integer;

begin

f:=1;

for i:=2 to n do

f:=f*i;

fact:=f;

end;

Begin

writeln('введите значения x,y,z,v ');

readln(x,y,z,v);

a:=fact(x)+fact(y)+fact(z)+fact(v);

writeln('значение выражения=',a);

End.

Вариант3

Задача1

Разработайте программу, позволяющую вывести на экран следующее изображение, использовав подпрограмму для изображения отдельной фигуры:

1111

1    1

1111

2222

2    2

2222

3333

3    3

3333

Задача2

Вариант4           

Задача1

Разработайте программу, позволяющую вывести на экран следующее изображение, использовав подпрограмму для изображения отдельной фигуры:

3

333

3

2

222                  1

2                  111

1

Вариант5

Задача1

Разработайте программу, позволяющую вывести на экран следующее

Похожие материалы

Информация о работе