Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

Подпрограммы – процедуры.

Лабораторная работа 7.

Сенатор.

 

Сталкер приложил палец к наушнику в ухе — передали сообщение с Барьера. Шмыгнув носом, Шептун сложил письмо и надежно спрятал в кармане комбинезона.

— Маркус, пошли, — позвал он. — Нас ждет встреча с новичками на Кордоне. Все уже готово.

Кот подбежал и, цепляясь за дорогую ткань, залез Шептуну на плечо. Сталкер стащил его оттуда, и взгляд остановился на ошейнике. Расстегнув его, Шептун в последний раз прочитал девиз.

— Клан «Набат» за здоровую Зону, — произнес он и вытер одинокую слезу. — Будет сделано, братья.

Размахнувшись, он бросил кусочек ремня с застежкой в траву.

— Привыкай, повелитель прерий, — сказал он, улыбаясь коту. — Больше никаких цепей.

Держа Маркуса на руках и переступая через камни, Шептун направился к джипу.

 

Во введении в тему подпрограммы мы рассматривали блок схему подпрограммы с использованием подпрограмм – процедур:

 


Описание процедуры нахождения корней квадратного уравнения:

Procedure root(a,b,c:real; var:x1,x2:real); {заголовок процедуры, где root – имя

процедуры; a,b,c,х1,х2 – формальные параметры, используемые при написании

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

(a,b,c – входные параметры, х1,х2 – выходные).}

begin... end; {тело процедуры.}

 

 


 


Обращение к процедуре с фактическими параметрами a,b,c, получение

результатов х1,х2. root(a,b,c,x1,x2);

 


Обращение к процедуре с фактическими параметрами s,t,p, получение

результатов z1,z2. root(s,t,p,z1,z2);

 


Обращение к процедуре с фактическими параметрами k,n,m, получение

результатов y1,y2. root(k,n,m,y1,y2);

 

 

Рассмотрим как будет выглядеть соответствующая программа.

Напомним как решается квадратное уравнение в общем случае:

ax2+bx+c=0

Если а=0, то уравнение превращается в уравнение первой степени и корень один и он равен x=-c/b

Если a≠0, то уравнение второй степени. Дискриминант уравнения d = b2- 4ac

если d ≥0, то корня два и они действительные x1 =-b- x2 =-b+

если дискриминант d <0, то корня два и они комплексные

 

x1 =- - * x2 =- + *

На рисунке представлена сема алгоритма нахождения корней уравнения.

Составим программу решения следующей задачи:

Необходимо найти корни квадратного уравнения, согласно приведенного алгоритма. Количество уравнений не ограничено, поскольку программа должна спрашивать «будет ли ещё уравнение?». При написании программы используем подпрограмму – процедуру.

 

program Project_7_1_root; {$APPTYPE CONSOLE}

uses Math, SysUtils;

Label n,nah,kon;

Var lit:char; a,b,c,x,x1d,x2d,x1m,x2m:real; v:byte;

procedure Root(a,b,c:real; var x1d,x2d,x1m,x2m:real; var v:byte);

label k_proc; var d:real;

begin if a=0 then begin v:=1; x1d:=-c/b; goto k_proc; end else

d:=sqr(b)-4*a*c;

if d>0 then begin v:=2; x1d:=(-b-sqrt(d))/(2*a);

x2d:=(-b+sqrt(d))/(2*a);

goto k_proc; end else

x1d:=-b/(2*a); x2d:=x1d; x1m:=-sqrt(-d)/(2*a); x2m:=sqrt(-d)/(2*a);

k_proc:end;

BEGIN n:writeln(' will there be another equation? input Y or y or N or n');

readln(lit);

if (lit='Y')or(lit='y') then goto nah else

if (lit='N')or(lit='n') then goto kon else

writeln('invalid sumdol'); goto n;

nah:writeln('input a,b,c'); readln(a,b,c); Root(a,b,c,x1d,x2d,x1m,x2m,v);

if v=1 then writeln('root is 1 - real, x=',x1d:6:2)else

if v=2 then writeln('root is 2 - real, x1=',x1d:6:2,' x2=',x2d:6:2)else

if x1m<0 then begin writeln('root is complex x1=',x1d:6:2,'-',x1m:6:2,'*i ',

'x2=',x2d:6:2,'+',x2m:6:2,'*i'); goto n;end else

writeln('root is complex x1=',x1d:6:2,'+',x1m:6:2,'*i ',

'x2=',x2d:6:2,'-',x2m:6:2,'*i'); goto n;

kon: End.

 

Ещё одна задача: Имеется одномерный массив. Определить сумму положительных элементов, номер последнего отрицательного элемента, количество отрицательных элементов массива.

Количество массивов не ограничено, количество элементов массива произвольное, но не более 70.

 

program Project_7_2; {$APPTYPE CONSOLE}

uses SysUtils;

type mas=array[1..70]of real;

var n,k,i,no,kol,r,j:byte; a:mas; s:real; ch:char;

procedure prmas(n:byte; var s:real; var k,no:byte);

var i:byte; a:mas;

begin for i:=1 to n do begin

writeln('input ',i,' element array a'); readln(a[i]); end; {Введите i элемент массива а}

writeln; for i:=1 to n do write('a[',i,']=',a[i]:5:1,' '); {Вывод массива на экран}

s:=0; k:=0; no:=0;

for i:=1 to n do begin

if a[i]>=0 then s:=s+a[i] else begin no:=i; k:=k+1; end; end; end;

BEGIN writeln('Specify the number of arrays'); readln(kol); {Введите количество массивов}

for j:=1 to kol do begin

writeln('Specify the dimensionality ’,j,’ of the array'); readln(r); {Задайте размерность j массива }

prmas(r,s,k,no); writeln;

writeln('The sum of positive elements =',s:6:1); {Сумма положительных элементов }

writeln('The last negative element has number =',no:2); {последний отриц. элем. имеет номер }

writeln('The number of negative items =',k:2);end; {Количество отрицательных элементов}

readln; END.

 

Локальные и глобальные описания объектов.

Мы уже знаем, что программа всегда блок, т.е. раздел операторов, снабжен­ный описаниями и имеющий заголовок. Вид блока-программы:

Program имя программы (возможны опции); {опции не обязательны} Label {раздел описания меток} Const...; {раздел описания констант} Туре {раздел определения типов} Var {раздел описания переменных}

Function...; Procedure {раздел описания функций и процедур} BEGIN... END. {раздел операторов}.

Функции и процедуры в свою очередь также являются блоками: Procedure имя (список входных формальных параметров); Var (список выходных формальных параметров); Label...; Const…; Type…; Var…; function…; procedure…; begin … раздел операторов…end;

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

Таким образом, программа всегда блок, в который могут быть вложены дру­гие блоки.

Как один из вариантов, возможна следующая структура программы:


Program prim; {начало блока 1}

Label N,M;
Const k=5.6;
Type d=array[1..10] of integer;
Var bx.real; i, j.integer; z,y:d;
function f(ftb,c:réai):real; {начало блока2}
begin f:=…; end; {конец блока2}

procedure proc(f,b, с: real; var x,y,z:real); {начало блокаЗ}

Label K,L; var d,w,s:real;…

function fp(a,b:real):real; {начало блока4}

begin… fp:=; end; {тело fp, конец бл.4}

begin x:=…; y:=…; Z:=…; end; {тело proc, конец бл.З}

BEGIN b:=…; END. {тело основной программы,конец бл.1)

 

Таким образом, программа состоит из 4-х блоков. Все имена меток, кон­стант, типов, переменных, функций f и Ргос известны в блоке №1, поскольку они описаны в описании блока №1. Считантся, что они описаны здесь локально.

В блоке №2 - function описаний нет, поэтому своих собственных объектов этот блок не имеет. Формальные параметры не в счет, поскольку они служат только для описания алгоритма вычисления результата с именем f в функции f, а ячейки памяти для b,c,f здесь не выделяются.

Однако в этом блоке можно использовать все объекты, которые описаны в вышестоящем блоке, т.е. блоке 1, т.к. блок 2 является составляющей частью блока 1. Иногда говорят, что имена объектов блока 1 описаны для блока 2 глобально.

Аналогичная ситуация и с блоком 3 - Procedure Ргос. Для нее все объекты блока 1 являются глобальными, т.е. доступны. Кроме того, в блоке 3 имеются свои, описанные здесь объекты - метки K,L, переменные d,w,s, функция fp, ко­торые могут быть использованы только в блоке №3 и не известны в блоках №1 и№2.

Как следствие возможно применение одинаковых имен в различных блоках. Например см. имя d. В блоке 1 это тип массива. В блоке №3, в ргос имеется свое d, которое является собственным в блоке 3 и представляет собой не массив, а ячейку памяти типа real.

 

Варианты заданий для лабораторной работы №7 следует брать как варианты заданий к лабораторрой работе №5 (массивы), но написать программу с следующими дополнениями:

<== предыдущая лекция | следующая лекция ==>
 | Процедуры
Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 683; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.022 сек.