Рекурсивная процедура добавления элемента в список
procedure addrec(var s:link;m:string);
begin
if s=nil then begin
new(s);s^.info:=m;s^.next:=nil
end
else addrec(s^.next,m)
end;
Включение в список
Предположим, что элемент, на который указывает ссылка q, нужно включить в список после элемента, на который указывает ссылка p. Необходимые присваивания значений ссылкам:
q^.next:=p^.next; p^.next:=q;
Если требуется включение перед элементом, указанным p^, а не после него, то кажется, что однонаправленная цепочка связей создает трудность, поскольку нет «прохода» к элементам, предшествующим данному. Однако простой «трюк» позволяет решить эту проблему:
k:=q^.info;
q^:=p^;
p^.info:=k;
p^.next:=q;
«Трюк» состоит в том, что новая компонента в действительности вставляется после p^, но затем происходит обмен значениями между новым элементом и p^.Удаление из списка
procedure del(var t:link;m:string);
{из списка t убирается элемент m}
var
p1,p:link;
begin
if t^.info=m then begin
p:=t^.next;
dispose(t);
t:=p
end
else begin
p:=t;
while (p^.info<>m) and (p^.next<>nil) do
begin p1:=p; p:=p^.next end;
if p^.info=m then begin
p1^.next=p^.next;
dispose(p)
end
end
end;
Рекурсивная процедура удаления элемента из списка
procedure delrec(var s:link;m:string);
var t:link;
|
|
begin
if s<>nil then begin
if s^.info=m then begin
t:=s^.next;
dispose(s);
s:=t
end
else delrec(s^.next,m)
end
end;
Тема 12. МАШИННАЯ ГРАФИКА.ПРИМЕРЫ ПРОГРАММ С РАЗЛИЧНОЙ СТРУКТУРНОЙ ОРГАНИЗАЦИЕЙ. (1 часа)
План лекции 15:
1. Программное обеспечение машинной графики.
2. Алгоритмы формирования графических изображений.
3. Средства структурирования.
4. Примеры программ с различной структурной организацией.
Чтобы сделать процесс графического программирования более эффективным, фирма Borland Int. разработала:
· библиотеку Graph;
· набор драйверов для работы с разными типами мониторов;
· набор шрифтов для вывода на экран текста.
Модуль Graph
Для формирования графических изображений в языке Turbo Pascal предназначен стандартный библиотечный модуль Graph. В нем содержатся 79 графических процедур, функций, десятки стандартных констант и типов данных. Все они составляют единый комплекс средств, позволяющих разрабатывать профессиональные программные продукты.
Подключение модуля Graph к пользовательской программе осуществляется стандартным способом – с помощью зарезервированного слова uses:
|
|
uses graph;
С этого момента все графические средства доступны пользователю.
Драйверы
Графические драйверы разработаны практически для всех существующих видеоадаптеров (см. табл.1). Они находятся в так называемых bgi-файлах и активизируются при инициализации графического режима.
Таблица1 - Графические драйверы
Драйвер | Адаптер |
cga.bgi | CGA |
egavga.bgi | EGA, VGA |
herc.bgi | Hercules |
Вывод текста в графических режимах может осуществляться самыми различными как стандартными, так и пользовательскими шрифтами. По умолчанию после инициализации графического режима устанавливается шрифт DefaultFont. Каждый его символ формируется в матрице 8´8 бит.
Таблица 2 - Стандартные шрифты
Шрифт | Файл |
TriplexFont | Trip.chr |
SmallFont | litt.chr |
SanSerifFont | sans.chr |
GothicFont | goth.chr |
Стандартный набор включает шрифты, приведенные в табл.2. Они размещены в отдельных файлах, имеющих расширение chr. Активизация нужного шрифта осуществляется специальной процедурой. Высота и ширина символов каждого шрифта могут изменяться с помощью специальных средств.
|
|
Прежде чем работать с графикой, необходимо установить наиболее подходящий для имеющегося монитора видеорежим. Каждый драйвер может поддерживать от одного до трех видеорежимов. Тип драйвера и режим могут быть заданы как число или как символическая константа типа. Константы, определяющие видеорежим, приведены в табл.3 вместе с информацией о выбираемом режиме и типе видеоадаптера, который может такой видеорежим поддерживать.
Таблица 3 - Видеорежимы
Драйвер | Режим | Разрешение | Файл |
CGA (1) | CGAC0, CGAHi | 320´200 (640´200) | cga.bgi |
EGA (3) | EGALo, EGAHi | 640´200 (640´350) | egavga.bgi |
VGA (9) | VGALo, VGAHi | 640´200 (640´480) | egavga.bgi |
HERC | HERCMONOHi | 720´348 | herc.bgi |
Инициализация видеорежима
С момента подключения модуля Graph программисту доступны все находящиеся в нем подпрограммы. В первую очередь вызывается процедура InitGraph, которая устанавливает один из возможных графических режимов. Формат процедуры:
InitGraph(DriverVar,ModeVar,'C:\Tp\Bgi');
Целочисленные переменные DriverVar и ModeVar задают драйвер и режим в соответствии со значениями, приведенными в табл. 16.3. Например:DriverVar:=VGA; ModeVar:=VGALo;
Первый параметр может задаваться как по имени, так и числом (в табл. 16.3 оно указано в скобках рядом с именем драйвера).
|
|
Для новичков, которые могут не знать типа дисплея своего компьютера, имеется встроенная константа Detect (она имеет нулевое значение). Если это значение присвоено параметру DriverVar:
DriverVar:=Detect;
то InitGraph автоматически инициирует нужный драйвер и установит наиболее подходящий для дисплея режим.
Третий параметр – маршрут к файлу *.bgi. Пустая строка означает, что графический драйвер находится в том же каталоге, что и программа.
Пример: Uses Graph;
var DriverVar, ModeVar: integer;
begin
DriverVar:=Detect;
InitGraph(DriverVar, ModeVar, '');
Закрытие видеорежима
Когда все запланированные графические работы выполнены, необходимо выйти из графического режима. Это делается с помощью процедуры CloseGraph, не имеющей параметров.
В процессе выполнения этой процедуры освобождается память, распределенная под драйверы графики, файлы шрифтов и промежуточные данные, и восстанавливается режим работы адаптера в то состояние, в котором он находился до выполнения инициализации системы.
{Программа вычерчиваем в центре экрана треугольник красной линией}
user Crt,Graph;
var
DriverVar, ModeVar :integer;
pp : array[1..4] of PointType;
{встроенный тип PointType определен как
record x,y:integer end}
xM, yM, xMaxD4, yMaxD4: word;
begin
DriverVar := Detect;
InitGraph(DriverVar,ModeVar,'');
xM := GetMaxX; yM := GetMaxY; xMaxD4 := xM div 4;
yMaxD4 := yM div 4;
{определение координат вершин}
pp[1].x := xMaxD4;
pp[1].y := yMaxD4;
pp[2].x := xM - xMaxD4;
pp[2].y := xMaxD4;
pp[3].x := xM div 2;
pp[3].y := yM - yMaxD4;
pp[4] := pp[1];
SetColor(LightRed); {цвет для вычерчивания}
DrawPoly(4,pp); {4 - количество пересечений + 1}
Readln;
CloseGraph
end.
Приложение А. Примеры программ
Ввод, вывод данных
program taxi;
var
ch1,ch2,ch3:integer;
k1,k2,k3:Integer;
p1,p2,p3:real;
begin
writeln('введите количество п сс жиров'); readln(k1);
writeln('введите количество вышедших п cс жиров'); readln(k2) ;
writeln('введите пок з ние счетчик '); readln(ch1);
p1:=ch1/k1;
Writeln(p1);
writeln('введите количество вышедших п с жжиров'); readln(k3);
writeln('введите пок з ние счетчик '); readln(ch2);
p2:=(ch2-p1)/(k2+k3);
Writeln(p2,' Otvet');
writeln('введите пок з ние счетчик '); readln(ch3);
p3:=ch3-p2-p1;
writeln ('су з плоченн я',p1,p2,p3); end.
Работа с матрицами
program d;
const n=10;
var mas:array[1..n] of integer;
i,j:byte;
exchanger:integer;
begin
for i:=1 to n do
begin
write('? ');
readln(mas[i]);
end;
for i:=1 to n-1 do
for j:=1 to n-1 do
if mas [j]>mas[j+1]
then
begin
exchanger:=mas[j];
mas[j]:=mas[j+1];
mas[j+1]:=exchanger;
end;
for i:=1 to n do write(mas[i]:6);
end.
program r;
var
j,i:integer;
a:array[1..3,1..3] of real;
b:array[1..3] of real;
begin
write('vvedite element massiva');
for i:=1 to 3 do
for j:=1 to 3 do
begin
readln(a[i,j]); end;
for i:=1 to 3 do
for j:=1 to 3 do
begin
b[i]:=b[i]+a[i,j];
write(a[i,j]);
end;
for i:=1 to 3 do begin
b[i]:=b[i]/3;
writeln(b[i]);end;
for i:=1 to 3 do
for j:=1 to 3 do begin
a[i,j]:=a[i,j]-b[i];
writeln(a[i,j]); end;
end.
Процедуры функции и подпрограммы, формальные и фактические параметры
Program dm;
const
mw=14.0;
var
vl,cs:real;
procedure nan(var pt:real);
begin
write('wedite stoimost tovara');
readln(pt);
end;
procedure calc(value:real;var cost:real);
begin
cost:=(1.0+mw/100.0)*value;
end;
procedure outpute(inpute:real);begin
writeln;writeln;
writeln('rasschitat cena s uchetom',mw:5:2,'%nalog','sostavlaet',inpute:7:2,'$');
end;
begin
nan(vl);
calc(vl,Cs);
outpute(Cs);
nan(vl);
calc(vl,cs);
outpute(Cs);
nan(Vl);
calc(vl,cs);
outpute(Cs);
end.
Указатели адресов памяти, ссылочные переменные
program T;
var
p1,ip:^integer;
begin
writeln('ip = ',ip^,'p1= ',p1^);
new(ip); new(p1);
writeln('ip=',ip^,'p1= ',p1^);
ip^:=7;
p1^:=20;
writeln('ip=',ip^,'p1= ',p1^);
ip:=p1;
writeln('ip=',ip^,'p1= ',p1^);
dispose(ip);
ip:=nil;
end.
Графический режим работы
program Tesya;
uses crt;
var
x1,y1,x2,y2:word;
Gulvira:string;
i:integer;
procedure wn(a1,b1,a2,b2:word);
begin
window(a1+i,b1+i,a2-i,b2-i);
end;
begin
x1:=6;y1:=6;x2:=44;y2:=24;
readln(Gulvira);
for i:=1 to 5 do;
begin
wn(x1,y1,x2,y2);
Inc(i);
textbackground(red);
end;
GOTOxy(15,15);
textattr:=i+8+16*i+blink;
write('Gulvira');
end.
program Tesya;
uses crt;
var
x,y:word;
FIO:string;
i:integer;
begin
clrscr;
textattr:=i+8+16*i+blink;
textbackground(green);
write('Gulvira',FIO);
read(FIO);
end.
program Love;
uses crt;
var
x1,y1,x2,y2:word;
Maks:string;
i:integer;
procedure wn(a1,b1,a2,b2:word);
begin
window(a1+i,b1+i,a2-i,b2-i);
end;
begin
clrscr;
textmode(co80);
x1:=4;y1:=4;x2:=56;y2:=45;
textattr:=i+11+25*i+blink;
textbackground(blue);
write('Maks');
readln(Maks);
for i:=1 to 3 do;
begin
wn(x1,y1,x2,y2);
textbackground(green);
end;
GOTOxy(15,15);
textattr:=i+25+40*i+blink;
write('Gulvira');
end.
Литература
1. Турбо Паскаль 7.0, К.: Торгово-издательское бюро ВHV, 1996-448 c.
2. Гофман В. Delphi 6. – Санкт-Петербург: Издательство «BHV», 2000.
3. В.Н.Пильщиков. Сборник упражнений по языку Паскаль: Учебное пособие для вузов.- М.: Наука, 1989.-160 с.
4. Ж.-П.Ламуатье. Упражнения по программированию на фортране IV. Перевод с фран., М.:- «Мир», 1978 .-160 с.
5. Фаронов В.В. Основы- Турбо-Паскаля 6.0. - М.: МВТУ - ФБСТО
ДИДАКТИК, 2000. - 304 с.
6. Меженный О.A. TURBO PASCAL. Учитесь программировать М.: Диа-
лектика, 2001
7. Абрамов В.Г. и др. Введение в язык Паскаль: для вузов. М.: Наука,
1988.-319 c.
8. Перминов О.Н. Программирование на языке Паскаль. - М.: Радио и
связь, 1988.-220 с..
9. Культин Н.Б. Программирование на Object Pascal в Delphi 5.- СПб.: БХВ – Санкт-Петербург, 1999. -464 с., ил.
10. Петров А.В. и др. Вычислительная техника в инженерных и экономических расчетах: Учебник для вузов. - М.: ВШ, 1984.
11. Шнейдерман Б. Психология программирования. - М.: Радио и связь, 1984.-304 с.
12. Дейтел X., Дейтел П. Как программировать на Си. -М.: Бином, 2000.
13. Паннае К., Мюррей У. Программирование на Си и Си++. -К.:Ирина, BHV, 2000.
14. Уэйт М., Прата С, Мартин Д. Язык Си. - М.: Мир, 1988.
Дата добавления: 2020-12-12; просмотров: 70; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!