КАТЕГОРИИ: Архитектура-(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; Вложений блоков друг в друга может быть сколько угодно. (Имеется в виду функций и процедур). Таким образом, программа всегда блок, в который могут быть вложены другие блоки. Как один из вариантов, возможна следующая структура программы:
Label N,M; 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; Просмотров: 704; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |