Рекурсивная процедура добавления элемента в список



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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!