Структуры данных
Демонстрация работы стека
Пример 1.
Сформировать стек из N натуральных чисел, просмотреть его и уменьшить нечетные его элементы на 1.
Пример 2.
Сформировать очередь из N натуральных чисел, просмотреть ее и найти сумму второго и четвертого элементов очереди. Результат поместить с очередь.
Пример 1.
Сформировать стек из N натуральных чисел, просмотреть его и уменьшить нечетные его элементы на 1.
Работа стека моделируется с помощью одномерного массива S[1..N]. Для стека определены операции: инициализация стека, добавление элемента в стек, извлечение элемента из стека, просмотр стека. Операции оформлены в программе как процедуры. St - передаваемый или извлекаемый из стека элемент, i - номер последнего элемента в стеке.
Program Stek;
Var
s: array[1..100] of integer;
i, j, n, st: integer;
Procedure IniSt; {инициализация стека}
Begin
Write('Емкость стека'); Readln(n); i:=0;
End;
Procedure DobSt (st: integer); {добавление элемента в стек}
Begin
If i<n then
begin
i:=i+1; s[i]:=st;
end
else write('Стек переполнен');
End;
Procedure IsvSt (Var st:integer); {извлечение элемента из стека}
Begin
If i<>0 then
begin
st:=s[i]; i:=i-1;
end
else write('Стек пуст');
End;
Procedure ProsmSt; {просмотр стека}
Var
k: integer;
Begin
Writeln('ПРОСМОТР СТЕКА');
If i<>0 then For k:=i downto 1 do Writeln(k,' -й элемент: ', s[k])
else Writeln('-----СТЕК ПУСТ---');
Readln;
End;
{основная программа}
BEGIN
IniST; {инициализация стека}
{заполнение стека введенными элементами}
For j:=1 to n do
Begin
write('Ввод', j,'-го элемента'); readln(st); DobSt(st);
End;
ProsmSt; {просмотр стека}
{извлечение и проверка элементов стека}
Repeat
IsvSt(st); If st mod 2 =1 then st:=st-1; Writeln(st);
until i=0;
END.
Пример 2.
Сформировать очередь из N натуральных чисел, просмотреть ее и найти сумму второго и четвертого элементов очереди. Результат поместить с очередь.
Работа очереди моделируется с помощью одномерного массива О[1..N]. Для очереди определены операции: инициализация очереди, добавление элемента в очередь, извлечение элемента из очереди, просмотр очереди, которые оформлены в программе как процедуры. t - передаваемый или извлекаемый из стека элемент, Ob - номер первого элемента в очереди, Oe - номер последнего элемента в очереди.
Program Ochered;
Var
O: array[1..100] of integer;
t, S, Ob, Oe, n, j: integer;
Procedure IniO; {инициализация очереди}
Begin
Write('Емкость очереди'); Readln(n);
Ob:=0; Oe:=0;
End;
Procedure DobO(t: integer); {добавление элемента в очередь}
Begin
If Oe<>N then
begin
Oe:=Oe+1; o[Oe]:=t;
end
else write('Переполнение');
End;
Procedure IsvO(Var t:integer); {извлечение элемента из очереди}
Begin
If Ob<>Oe then
begin
Ob:=Ob+1; t:=o[Ob];
end
else write('Очередь пуста');
End;
Procedure ProsmO; {просмотр очереди}
Var
k: integer;
Begin
Writeln('ПРОСМОТР ОЧЕРЕДИ');
For k:=Ob+1 to Oe do writeln(k,' -й элемент ',o[k]);
Writeln('-----------------------------------------------------');
Readln;
End;
BEGIN {основная программа}
IniO;
{ заполнение очереди}
For j:=1 to n do
begin
Write('Ввод', j,'-го элемента '); Readln(t); DobO(t);
end;
ProsmO;
S:=0; IsvO(t); {извлечение первого элемента очереди}
IsvO(t); S:=S+t; {извлечение и суммирование второго элемента}
IsvO(t); {извлечение третьего элемента очереди}
IsvO(t); S:=S+t; {извлечение и суммирование четвертого элемента}
t:=S; DobO(t); {добавление суммы в очередь}
ProsmO; Readln
END.
Построение графических изображений
Основные графические процедуры и функции
1. INITGRAPH ( “драйвер” , “режим” , “путь” ) - инициирует графический режим работы адаптера .
“драйвер” , “режим” - переменные типа integer
“путь” - string
Каждая программа, использующая графические процедуры должна содержать следующие строки:
Uses Graph;
......
Var Dr , Reg : integer ;
.....
Begin
......
Dr : = 0 ; INITGRAPH (Dr , Reg , ‘f:\turbo7\bgi’) ;
2. CLEARDEVICE - очищает графический экран .
3. CLOSEGRAPH - прекращает работу в графическом режиме и восстанавливает текстовый .
4. GETMAXX , GETMAXY - функции , возвращающие значения максимальных координат в текущем режиме .
5. MOVETO ( X , Y ) - устанавливает новое текущее положение указателя
X , Y - координаты указателя (тип integer)
6. MOVEREL ( DX , DY ) - устанавливает новое положение указателя в текущих координатах .
DX , DY - приращение координаты (тип integer)
7. PUTPIXEL( X , Y, “цвет” ) - выводит точку .
X,Y- координаты точки (тип integer)
Пример 1.
Изображение звёздного неба.
Количество звёзд - 200, X, Y - координаты звезды, которые выбираются случайным образом .
Program Pr1;
Uses Graph;
Var
X , Y : integer ;
I, Dr, Reg : integer ;
BEGIN
Dr : = 0; Initgraph (Dr, Reg, ‘f:\tpas7\bgi’); {установка графического режима }
Randomize;
{ изображение звезд в случайном месте случайным цветом}
For I : = 1 to 200 do
Begin
X:= Random(GetMaxX); Y:= Random(GetMaxY);
Putpixel(X, Y, Random(16));
end ;
Readln {задержка до нажатия клавиши ENTER}
END.
8. LINE (X1,Y1, X2 Y2) - линия с концами в точках X1,Y1 и X2,Y2
9. LINETO (X , Y) - вычерчивает линию от текущего положения до положения заданного новыми координатами .
10. LINEREL (dX , dY) - вычерчивает линию от текущего положения до положения заданного приращением координат .
dX, dY - приращения координат
11. SETLINESTYLE (“вид” , “образец” , “толщина”) - устанавливает новый стиль вычерчиваемых линий .
"Вид" : 0 - сплошная "Толщина:" 1 - 1 пиксель
1 - точечная 3 - 3 пикселя
2 - штрих пунктирная
3 - пунктирная
4 - вид определяется пользователем
“Образец” - для линий, вид которых определяется пользователем. Два байта параметра образца определяет вид линии: 1-соответствует светящемуся пикселю , 0 - несветящемуся. Например, число 170 можно представить в двоичной системе 170 = 0000000010101010
Линия, заданная процедурой SETLINESTYLE(4,170,1) будет иметь вид .... .... .... .... .... .... ....
Примечание: если “вид” принимает значения 0,1,2 или 3, параметру “образец” следует присвоить значение 0.
Следующий пример демонстрирует различные стили линий .
Пример 2.
Программа строит 5 линий различного стиля.
Вид линии (переменная I) меняется от 0 до 4. При I=4 стиль линии определяет пользователь, поэтому образец (переменная Р) принимает значение, например, 170.
Program Pr2;
Uses Graph ;
Var
Dr , Reg , I , P : integer ;
BEGIN
Dr : = 0 ; Initgraph (Dr , Reg , ‘f:\tpas7\bgi’) ;
For I : =0 to 4 do
Begin
If i = 4 then p : = 170 else p : = 0;
Setlinestyle (i , p , 1);
Line (100 , 50 *(i + 1) , 400 , 50 *(i + 1)) ;
End;
END.
12.RECTANGLE (x1 , y1 , x2 , y2) – изображает прямоугольник
x1 , y1 - левый верхний угол , x2 , y2 - правый нижний угол .
13. BAR3D (x1 , y1 , x2 , y2 , “глубина” , “верх.грань”) - трёхмерное изображение параллелепипеда с закрашенной передней гранью .
x1 , y1 - левый верхний угол передней грани, x2 , y2 - правый нижний угол.
“верх.грань” принимает два значения: TopON - изображается верхняя грань или TopOFF - не изображается
14. CIRCLE (X , Y, R) – изображает окружность,
X , Y - координаты центра, R - радиус выраженный в пикселях .
Пример 3. Изобразить множество окружностей, центры которых лежат на окружности большего радиуса . В программе X, Y - координаты центра маленькой окружности, которые определяются как координаты точки, лежащей на окружности с центром в точке (320,200) и радиуса 150. Угол поворота равен Pi/10. |
|
Program Pr3;
Uses Graph;
Var
F : real;
I , X , Y , Dr , Reg : integer;
BEGIN
Dr:=0; Initgraph(Dr, Reg, 'f:\tpas7\bgi');
F:=0; While F<=2*Pi do
Begin
{вычисление координат точки, лежащей на окружности с центром (320,200) и радиусом 150}
X:= Trunc(320 + 150*cos(F)) ;
Y:= Trunc(200 - 150*sin(F)) ;
{построение маленькой окружности с центром (X,Y)}
Circle (x, y, 30) ;
F:= F + Pi/10; {увеличение угла поворота}
End;
Readln;
END.
15. ARC ( X , Y, “нач.угол” , “кон.угол” , “радиус”) - изображает дугу окружности
X , Y – центр окружности, “радиус” –радиус окружности
“нач.угол” , “кон.угол”- значение начального и конечного углов дуги, выраженные в градусах
16. ELLIPSE (X , Y, “нач.уг.” , “кон.уг.” , RX , RY ) - изображает дугу эллипса
RX-горизонтальный радиус, RY-вертикальный радиус
Пример 4. Построение изображения цилиндра.
Program Pr4;
Uses Graph;
Var
Dr, Regim: integer;
BEGIN
Dr:=0; Initgraph(Dr, Regim,'f:\tpas7\bgi');
Ellipse(320,100,0,360,120,40); {верхнее основание}
Ellipse(320, 380, 0, 360, 120, 40); {нижнее основание}
Line(200, 100, 200, 380); Line(440, 100, 440, 380);
Readln;
END.
17. SETCOLOR ( “цвет” ) – текущий цвет для вывода линий и символов .
Значения цветов :
0 – черный 1 – синий 2 – зелёный 3 – голубой
4 – красный 5 – фиолетовый 6 – коричневый 7 – св. серый
8 – темно-серый 9 – ярко-синий 10 – ярко-зел. 11 – ярко-голубой
12 – розовый 13 – малиновый 14 – желтый 15 – белый
18. SETBKCOLOR (“цвет”) - цвет фона .
19. SETFILLSTYLE ( “штриховка” , “цвет” ) - тип и цвет заполнения .
Типы штриховки : 0 - отсутствует (фоном) 1 - сплошная 2 - линиями
3 - /// 4 - утолщён.//// 5 -\\\
6 - утолщён.\\\\ 7 - +++ 8 - ***
9 - # 10 - редкие точки 11 - частые точки
12- опрределяется. пользователем
20. FLOODFILL ( X ,Y , С )- штрихует замкнутую область.
X ,Y - координаты точки, лежащей внутри замкнутой области.
С - цвет граничной линии.
Тип штриховки должен быть определён предварительно процедурой SETFILLSTYLE, в которой параметр “цвет” может не совпадать с параметром С процедуры FLOODFILL .
Пример 5.
Изобразить множество кругов, расположенных случайным образом, случайного размера и цвета.
Иcпользуемые переменные: X,Y - координаты центра окружности, R - радиус, C - цвет, T - стиль штриховки.
Program Pr5;
Uses Graph;
Var
Dr, Reg, I , X , Y , C , T, R : integer ;
BEGIN
Randomize ; Dr : = 0 ; Initgraph (Dr , Reg, 'f:\tpas7\bgi');
For i : =1 to 20 do
Begin
{выбор координат цетра окружности таким образом, чтобы самая большая окружность поместилась на экране}
X:= Random(GetMaxX - 100) + 50;
Y:= Random(GetMaxY - 100) + 50 ;
R:= Random(40) + 10 ; {выбор радиуса от 10 до 50}
C:= Random (15) + 1 ; {выбор цвета от 1 до 15}
T:= Random(10) + 1 ; {выбор стиля штриховки от 1 до 10}
Setcolor(C); {установка цвета изображения}
SetFillStyle (T , C); {установка стиля и цвета штриховки}
Circle (X, Y, C); {построение окружности}
Floodfill (X, Y, C) ; {закраска окружности}
End;
Readln;
END.
21. PIESLISE (X , Y , “нач. угол” , “кон. угол” , R) - вычерчивает и штрихует сектор окружности . Удобно использовать при построении круговых диаграмм .
X , Y – центр окружности, R –радиус окружности
“нач.угол” , “кон.угол”- значение начального и конечного углов дуги, выраженные в градусах
22. BAR ( X1 , Y1 , X2 , Y2 ) - штрихует прямоугольную область экрана
Пример 6.
Пострение изображения:
В программе построение окружностей происходит построчно. Переменная I определяет, в какой строке находится окружность, J - номер столбца. Если их сумма нечетна, то данная окружность закрашивается.
Program Pr6;
Uses Graph;
Var
I, J, Dr, Reg: integer;
BEGIN
Dr:=0; Initgraph(Dr, Reg, 'f:\tpas7\bgi');
SetFillStyle(2,15); {выбор стиля закраски кругов}
For I:=1 to 3 do
For J:=1 to 4 do
Begin
Circle(60*j,60*i,30);
Iif (I+J) mod 2=0 then FloodFill(60*J,60*I,15);
End;
Readln;
END.