Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal.DOC
Скачиваний:
23
Добавлен:
21.03.2015
Размер:
1.77 Mб
Скачать

Практическое задание n 1. 35

1. Создать на экране несколько рядов разворачивающихся по горизонтали. либо по вертикали окон разного цвета с надписями.

2. Вывести на экране несколько рядов карточек со случайными номерами цветов, в различных диапазонах для каждого ряда. В центре экрана вывести окно с сообщением о количестве рядов с одинаковым цветом карточек.

70

Приведем пример операторов для построения орнаментов.

Для построения орнаментов в текстовом режиме удобно использовать массив N1xN2 значений из нулей и единиц, записанных в файле.

Например, при N1=3, N2=5, можно записать в текстовом редакторе файл 0 0 1 0 0

со значениями: 0 1 0 1 0

1 1 1 1 1

В программе следует открыть файл с орнаментом и считать значения в массив, например:

for i:= 1 to N1 do begin for j:= 1 to N2 do read( f, a[ i, j ] ); readln( f ) end;

где f - файловая переменная, a[i, j] - элемент массива N1xN2.

Орнамент можно разместить в окне, например, операторами:

Window(x1, y1, x1+N2, y1+N1); TextBackGround(Green); ClrScr;

for i:= 1 to N1 do

for j:= 1 to N2 do if a[i,j] <> 0 then begin GotoXY(j,i); write(#219) end;

Приведем примеры операторов, позволяющих строить в текстовом режиме горизонтальные и вертикальные гистограммы. Пусть требуется построить N значений функции Y=Sin(x); на интервале от 0 до Pi.

1) Определим дискретные значения "х" и "Y".

for i:= 0 to N do begin x[i]:= Pi*i/N; Y[i]:=Sin(x[i]) end;

2) Определим наибольшее значение функции "Y": Y_max:=1; и размеры окна:

xm:= lo(WindMax)+1; ym:= hi(WindMax)+1;

3) Определим коэффициенты масштабирования по осям X и Y:

km_x:= (xm-5)/Y_max; km_y:= (ym-5)/Y_max;

4) Для построения вертикальной гистограммы

можно использовать операторы:

for i:=0 to N do begin Yg:=round(km_y*Y[i]); { графические значения Y[i]}

for j:=1 to Yg do begin GotoXY(i, ym-j); { переход на новую строку }

write (#219) { рисуем вертикальный столбик }

end end;

5) Для построения горизонтальной гистограммы

можно использовать операторы:

for i:=0 to N do begin Yg:=round(km_x*Y[i]); { графические значения Y[i]}

GotoXY(1, i+1); { переход на новую строку }

for j:=1 to Yg do write (#220) { рисуем горизонтальный столбик}

end;

Практическое задание n 1. 36

1. Создать на экране несколько рядов окон с чередованием двух орнаментов.

2. Построить горизонтальную, либо вертикальную гистограммы столбиками разного цвета для 20-ти значений функций: Y= |Sin(x)|*x; либо Y= Sin(x)+x; в диапазоне "x" от 0 до 2*Pi, с выводом значений "x" и "Y".

71

Приведем пример программы поиска цели в лабиринте - перемещение символа по экрану с анализом содержания ячеек вокруг текущей позиции. Строится прямоугольник с преградами в котором случайным образом задаются координаты цели и "десантника", ищущего цель. Алгоритм поиска построен на анализе значений ячеек вокруг "десантника", при этом значение "десантника" k=1, и проверяется значение восьми окружающих ячеек. Как только обнаруживается ячейка со значением меньшим k, то "десантник" перемещается в эту ячейку, иначе k увеличивается и цикл проверок повторяется. Ячейка, из которой вышел “десантник”, помечается цифрой со значением параметра k. Наибольшее число проверок k=8.

Начальные значения пустых ячеек равны нулю, прямоугольника и преград - десяти.

Uses crt;

Label Metka;

Const NM=25; { число преград в лабиринте }

Var a: array[1..100, 1..50] of word; { массив ячеек }

NN, MM, N, M, N1, M1, i, j, k, l, i1, j1: word;

BEGIN textmode(258); TextColor(1); Randomize;

N:= lo(WindMax)+1; M:= hi(WindMax); {размеры лабиринта}

NN:=Random(N)+1; MM:=Random(M)+1; { длина преграды по X и по Y}

for i:=2 to N-1 do for j:=2 to M-1 do a[i,j]:=0; {обнуление массива}

for i:=1 to N do begin a[i,1]:=10; a[i,M]:=10; {границы лабиринта}

GotoXY(i, 1); write(#219);

GotoXY(i, M); write(#219); end;

for j:=1 to M do begin a[1, j]:=10; a[N, j]:=10; Д

GotoXY(1, j); write(#219);

GotoXY(N, j); write(#219); end;

for l:=1 to NM do begin {преграды в лабиринте} Ц

i:=random(N-2)+2; j:=random(M-2)+2;

i1:=i+random(NN)+1; j1:=j+random(MM)+1;

repeat a[ i, j ]:=10; GotoXY(i,j); write(#219); i:= i+1 until ( i>=N) or ( i>i1);

repeat a[ i, j ]:=10; GotoXY(i,j); write(#219); j:= j+1 until ( j>=M) or ( j>j1);

end;

i:=random(N)+1; j:=random(M)+1; a[i,j]:=11; {координаты цели}

TextColor(14); GotoXY(i, j); write('Ц');

i:=random(N-2)+2; j:=random(M-2)+2; a[i,j]:=1; {координаты десантника}

TextColor(5); GotoXY(i, j); write('Д'); delay(1000);

repeat

for i1:= i-1 to i+1 do for j1:= j-1 to j+1 do {поиск цели}

if a[i1,j1]= 11 then begin TextColor(14); GotoXY(1,M+1);

Write('Цель обнаружена'); readln; Halt end;

for k:=1 to 8 do begin {цикл до 8-ми проверок вокруг текущей позиции}

a[i,j]:=k; GotoXY(i,j); write(k); {отмечаем текущую позицию}

for i1:= i-1 to i+1 do for j1:= j-1 to j+1 do {поиск выхода}

if a[i1,j1]< k then begin i:=i1; j:=j1; GOTO Metka end;

end;

TextColor(14); GotoXY(1, M+1); Write('ТУПИК'); readln; Halt;

Metka: GotoXY(i, j); Write('Д'); delay(10)

until keypressed;

END.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]