Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Лекция 18. begin x[1]:=random(100)/10;x[2]:=random(90)/10

End

End

IMPLEMENTATION

INTERFACE

Else

If line(a,b,c) then

Implementation

procedure rpoint;

begin x[1]:=random(100)/10;x[2]:=random(90)/10 end {rpoint};

procedure r;

begin d:=sqrt(sqr(x[1])+sqr(x[2])) end {r};

function dist;

begin dist:=sqrt(sqr(x[1]-y[1]) + sqr(x[2]-y[2])) end {dist};

function line;

begin line:=false; if (dist(x,y)=dist(x,z)+dist(y,z)) then line:=true;

if (dist(x,z)=dist(x,y)+dist(y,z)) then line:=true;

if (dist(z,y)=dist(x,z)+dist(x,z)) then line:=true;

end {line};

begin randomize;

END {points}.

program test_points; {Тест модуля points}

uses points;

var a,b,c:point;s: string [1];ra,rb,rc:real;

begin repeat writeln('Генерация точек a,b,c:');

rpoint(a);rpoint(b);rpoint(c);

writeln('a[1] a[2] b[1] b[2] c[1] c[2] ');

writeln(a[1]:2:2,' ',a[2]:2:2,' ',b[1]:2:2,' ',b[2]:2:2,' ',c[1]:2:2,' ',c[2]:2:2);

writeln('Расстояния от начала координат:');r(a,ra);r(b,rb);r(c,rc);

writeln('ra=',ra:2:2,' rb=',rb:2:2, ' rc=',rc:2:2);

writeln('Расстояния между точками:');

writeln('dist(a,b)=',dist(a,b):2:2);

writeln('dist(b,c)=',dist(b,c):2:2);

writeln('dist(a,c)=',dist(a,c):2:2);

writeln('line(a,b,c)=true {Точки а,в,с -лежат на одной прямой}')

writeln('line(a,b,c)=false {Точки а,в,с -не лежат на одной прямой}');

a:=b; writeln('a:=b; dist(a,b)=',dist(a,b):2:2);

if line(a,b,c) then writeln(' line(a,b,c)=true');readln(s);

until s=' ';

end {test_points}.

 

Представленный ниже модуль convert содержит два компонента: тип - массив из 5 строк и процедуру преобразования целого числа в название числа. Для тестирования этого модуля использована программа demo_conv_int, позволяющая в цикле вводить исходные числа и выводить их названия на экран.

UNIT convert; {Преобразование целого числа в строку - название числа}

type array_s = array [1..5] of string;

procedure conv_int(int: string; var s_int:array_s);

procedure conv_int(int: string; var s_int:array_s);

type string3 = string [3];

var k:byte;{длина числа} j:byte;{параметр}

trd: array [1..5] of string3;{массив строк-триад}

function s_trd(t:string3;numt:byte): string;{перевод в название триады}

const d: array [2..5] of string =('тысяч','миллион','миллиард','триллион');

dig: array ['1'..'9'] of string = ('один','два','три','четыре','пять','шесть','семь','восемь','девять');

var c:char;{переводимая цифра} j:byte; m: array [2..5] of string;

str1,str2,str3: string;{строки-названия цифр триады}

begin for j:=2 to 5 do m[j]:=d[j];

if t<>'000' then begin

c:=t[3]; case c of '0':str3:='' else str3:=dig[c] end;

c:=t[2]; case c of '0':str2:='';

'1': begin case t[3] of

'0':str2:='десять ';

'2':str2:='двенадцать ';

'3':str2:='тринадцать '

else str2:=copy(str3,1,length(str3)-1) +'надцать ';

end; if str2<>'' then str3:='';

end;

'2','3':str2:=dig[c]+'дцать ';

'4':str2:='сорок ';

'9':str2:='девяносто ' else str2:=dig[c]+'десят ';

end; c:=t[1]; case c of '0':str1:='';

'1':str1:='сто ';

'2':str1:='двести ';

'3'..'4':str1:=dig[c]+'ста ';

'5'..'9':str1:=dig[c]+'сот ';

end;

if (numt=2) and (str3<>'') then case t[3] of '2'..'4':

begin if str3 ='два' then str3:='две ';m[2]:=m[2]+'и' end;

'1': if str3 ='один' then

begin str3:='одна ';m[2]:=m[2]+'а' end;

end;

 

if (numt>2) and (str3<>'') then case t[3] of '2'..'4':m[numt]:=m[numt]+'а';

'0','5'..'9':m[numt]:=m[numt]+'ов';

else if numt>2 then m[numt]:=m[numt]+'ов';

if numt>1 then s_trd:=str1+str2+str3+' '+m[numt]

else s_trd:=str1+str2+str3;

else s_trd:='';

end {s_trd};

begin {conv_int} k:=length(int); if k<15 then

for j:=1 to 15-k do int:='0'+int;

if k>15 then halt;

for j:=1 to 5 do

trd[j]:=int[15-(j-1)*3-2]+int[15-(j-1)*3-1]+int[15-(j-1)*3];

for j:=5 downto 1 do

s_int[6-j]:=s_trd(trd[j], j);

end {conv_int};

END {convert}.

program demo_conv_int; {Тест модуля convert}

uses convert;

var j:byte;i: string;str_i:array_s;{type array_s= array [1..5] of string }

begin repeat write('Введите целое число:');readln(i);

conv_int(i,str_i); for j:=1 to 5 do { Построчный вывод названия числа i}

if str_i[j]<>'' then writeln(str_i[j]); readln(i);

until i=''; {Выход из цикла при нажатии enter}

end {dem_conv}.

 

5. Использование модулей в программах.

Модули являются высокоэффективным средством прикладного программирования задач для самых различных областей. Они позволяют накапливать знания в виде соответствующих реализаций процедур, функций, типов, объектов, констант, характерных для тех или иных предметных областей, и делать эти знания доступными для использования в программах. Хотя механизм модулей не предполагает никаких ограничений на то, какие компоненты следует объединять в одном модуле, обычно модули создаются по функциональному принципу, объединяя лишь родственные компоненты.

Модули, предназначенные для использования в любых программах, естественно считать стандартными модулями. Они включаются в состав системы программирования как её неотъемлемая часть.

В Турбо Паскале имеется целая группа стандартных модулей: system, dos, crt, printer, overlay, graph и др. Первые пять этих модулей объединены в библиотечный файл со стандартным именем turbo.tpl. Этот файл является одним из обязательных для работы с системой Турбо Паскаль.

Основным стандартным модулем библиотеки turbo.tpl является модуль system, в котором сосредоточены процедуры и функции для всех стандартных типов данных (таких как integer, real, string и др.), а также многие подпрограммы общего назначения. Модуль system является единственным стандартным модулем, не требующим для работы с ним uses -описания (он подключен к любой программе по умолчанию). Все остальные стандартные модули из tubo.tpl становятся доступными только после их uses -описания в программе, как и для всех других модулей.

Стандартный модуль dos содержит средства доступа к операционной системе MS DOS, осуществляя интерфейс между системой Турбо Паскаль и MS DOS.

Стандартный модуль printer - самый простой из стандартных модулей. Он содержит лишь переменную Lst, осуществляющую связь с принтером для процедур вывода write и writeln.

Стандартный модуль overlay обеспечивает организацию оверлейных программ - программ с перекрытием в оперативной памяти (т.е. позволяющих использовать программы, размер которых превышает объем доступной оперативной памяти).

Особое место в Турбо Паскале занимают стандартные модули CRT и GRAPH. Модуль CRT содержит средства для управления экраном дисплея в текстовом режиме, а также ввода информации с клавиатуры, управления звуком и задержкой. Модуль GRAPH содержит несколько десятков процедур и функций для управления экраном дисплея в графическом режиме. Этот модуль работает совместно с графическими драйверами дисплея (файлами с расширением bgi), обеспечивая создание графических программ практически для всех типов адаптеров SVGA, VGA, EGA и других. Модули CRT и GRAPH ниже будут рассмотрены подробнее.

 

6. Стандартный модуль СRT.

Некоторые простейшие средства управления экраном из модуля CRT были уже рассмотрены ранее (при изучении простых операторов Турбо Паскаля). Здесь мы более подробно рассмотрим средства модуля CRT в целом.

В текстовом режиме экран рассматривается как матрица из строк и столбов, в каждую позицию которой может быть помещен символ из кодовой таблицы ASCII. Координаты экрана измеряются от верхнего левого угла, имеющего координаты (1,1), и возрастают слева направо и сверху вниз. Число строк и столбцов зависит от режима экрана (обычный режим - 25 строк и 80 столбцов). Позиция экрана характеризуется также визуальными свойствами: цветом фона, цветом линий символа и яркостью (нормальная, низкая, высокая).

Модуль CRT содержит ряд процедур, функций, константы цветов, режимов экрана и некоторые переменные. Все средства модуля CRT можно разделить на несколько групп: установки режима экрана, ввода с клавиатуры, управления курсором, управления окном, управления цветом и яркостью, управления звуком.

Установка режима экрана: процедура TextMode(mode:word) устанавливающая режим (число строк и столбцов экрана, монохромный или цветной режим) в соответствии с константами режима. Константа последнего установленного режима сохраняется в стандартной переменной lastmode. К этой группе относится также процедура AssignCrt(var F:text), осуществляющая связь с файловой переменной F клавиатуры для ввода, либо экран для вывода текста.

Ввод с клавиатуры: функции без аргументов KeyPressed (с результатом булевского типа) и ReadKey (с результатом типа char). Функция KeyPressed фиксирует сам факт нажатия на любую клавишу, возвращая true, если клавиша была нажата и false - в противном случае. Функция ReadKey осуществляет "слепое чтение" кода нажатой клавиши, приостанавливая выполнение программы до нажатия клавиши и возвращая в качестве результата код клавиши (без отображения его на экране). Это более гибкое средство ввода с клавиатуры, чем операторы read и readln.

Управление курсором: процедуры GotoXY(x,y:byte), CtrlEol, DelLine, InsLine; функции без параметров whereX, whereY. Эти процедуры позволяют установить курсор в позицию (x,y); удалить символы от курсора до конца строки; удалить текущую строку, сдвинув вверх все остальные строки и, очистив нижнюю строку; вставить пустую строку в позицию курсора. Функции whereX, whereY позволяют определить текущее положение курсора на экране (или в окне экрана) и возвращают позицию курсора как целое типа byte.

Управление цветом и яркостью: процедуры TextBackGround(color:byte), TextColor(color:byte), ClrScr, NormVideo, HighVideo, LowVideo. Первые три процедуры уже были описаны раннее среди простых средств управления экраном, а остальные предназначены для установки нормальной, высокой или низкой яркости символов и относятся к последующему выводу символов на экран.

Управление окнами: процедура window(x1,y1,x2,y2:byte) предназначена для установки окна на экране и была уже описана ранее. В дополнении к ней в модуле CRT имеются переменные windmin и windmax типа word, в которых, хранятся координаты текущего окна (верхнего левого и нижнего угла).

Управление звуком: процедуры sound(f:word), nosound, delay(d:word). Эти процедуры соответственно включают генератор звука с частотой f, выключают генератор звука, устанавливают задержку (приостановку работы программы) на d миллисекунд. Для иллюстрации использования средств модуля CRT приведем пример программы, реализующей "бегущую строку":

program animal_string_m;

{Программа демонстрации "бегущей" строки}

uses CRT;

var str: string; {Вводимая строка}

x,y,x0,x1:byte;j,k,r:byte;

procedure write_anim(s: string);

{ Анимированный посимвольный вывод строки }

var i:byte;

begin for i:=1 to length(s) do begin write(s[i]);delay(300) end;

end {write_anim};

BEGIN textbackground(cyan);textcolor(white);clrscr;

write_anim(' Программа "бегущей" строки');

repeat repeat window(25,10,55,11);textbackground(green);

textcolor(black);clrscr;

write_anim('Введите строку:');writeln;x:=whereX;y:=whereY;

Lowvideo;k:=0;gotoXY(x,y);readln(str);r:=length(str);

for j:=1 to r do if str[j]=' ' then inc(k);

until k<r;

gotoXY(x,y);Highvideo;write_anim(str);

x0:=Lo(windmin);x1:=Lo(windmax); r:=x1-x0-r;

{ Имитация "бегущей строки"}

for j:=1 to r do { Сдвиг строки вправо на один символ}

begin str:=' '+str;gotoXY(x,y);write(str);delay(300) end

until readkey=#13;

END { animal_string_m}.

7. Стандартный модуль GRAPH.

Модуль GRAPH - библиотека подпрограмм работы с графическим режимом экрана. В графическом режиме экран рассматривается как совокупность точек (пикселей), яркостью и цветом которых можно управлять, получая то или иное графическое изображение. В модуле GRAPH имеются около 80 подпрограмм управления графическим экраном, обеспечивающие многие потребности графических программ. У нас нет возможности детально останавливаться на этих подпрограммах, поэтому ограничимся общей характеристикой средств данного модуля и простым примером графической программы, использующей модуль GRAPH.

 

Графический экран состоит из точек-пикселей, образующих растр. Для адресации пикселя используется координатная сетка, ведущая свой отсчёт от верхнего левого угла, имеющего координаты (0,0), и увеличивающая значения координат слева направо и сверху вниз. Для установки графического режима предусмотрена процедура InitGraph, а для возврата в текстовый режим - CloseGraph. На экране можно создавать графические окна (процедурой SetViewPort), ограничивающие графический вывод границами окна.

Значительная группа подпрограмм обеспечивает рисование элементарных графических фигур (точек, прямых линий, окружностей, эллипсов и их дуг, прямоугольников, многоугольников), установку цветов и яркости, а также закрашивание замкнутых фигур различными цветами и стилями закраски или оформления линий.

Имеются средства вывода текста на графический экран с помощью специально предусмотренных шрифтов (матричных и штриховых). Для использования штриховых шрифтов необходимы соответствующие шрифтовые файлы (с расширением chr).

Имеются также средства для хранения и вывода изображений, работы с несколькими графическими страницами.

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

program russian_flag;

{Формирование изображения Российского флага на графическом экране}

uses Graph,CRT;

var path: string;driver,mode,r,j,i:integer;c:word;

begin {начальная установка графического режима}

clrscr;driver:=detect;mode:=VGAHi;InitGraph(driver,mode,'');

{полукруг на голубом фоне}

setbkcolor(cyan);r:=99;arc(319,239,0,180,r);

{рисование флагштока}

moveto(319-r,239);lineto(319+r,239);delay(1000);

{наполнение цветом полукруга и флагштока}

setfillstyle(solidfill,green);floodfill(300,200,white);

{рисование трехцветного флага}

moveto(319,239-r);lineto(319,5);c:=white;

for j:=1 to 3 do begin setfillstyle(solidfill,c);

bar(319,5+(j-1)*33,319+2*r,5+j*33);

c:=(c+3) mod 17;delay(1000)

end;readln

end { russian_flag}.

 

Экспресс - проверка знаний пройденного материала:

1 Нарисуйте структурную схему регулируемого выпрямителя

2 Нарисуйте структурную схему регулируемого выпрямителя

3 Нарисуйте схему регулирования выпрямленного напряжения с помощью

дросселя с насыщением

4 Нарисуйте схему фазовращателя с фазосдвигающей цепочкой и его

векторную диаграмму

5 Нарисуйте схемы управления тиристором малой мощности

6 Нарисуйте принципиальную схему импульсно –фазового управления и

временные диаграммы

7 Напишите ключевые слова к теме лекции 17.

После изучения лекции 18 студент должен знать: принцип работы пассивных и электронных сглаживающих фильтров

Уметь: согласно условиям задания выбрать требуемый фильтр инарисовать схему фильтра

 

<== предыдущая лекция | следующая лекция ==>
Interface. Лекции 17-19: Модули и их использование | Общие сведения. Тема 2.6 Сглаживающие фильтры
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 234; Нарушение авторских прав?; Мы поможем в написании вашей работы!


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



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




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