Использование в рисовании переменных величин. 


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



ЗНАЕТЕ ЛИ ВЫ?

Использование в рисовании переменных величин.



 

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

 

Задача 12.

Нарисовать горизонтальный ряд окружностей радиусом 10 на расстоянии 100 от верхнего края экрана и с такими горизонтальными координатами центра: 50, 80, 110, 140,…, 290.

 

Программа.

 

USES Graph;

VAR Device,Mode,x:Integer;

BEGIN

Device:=0;

InitGraph(Device,Mode,'a:\TP\BGI');

x:=50;

Repeat

Circle(x,100,10);

x:=x+30;

Until x>290;

ReadLn;

CloseGraph

END.

 

Задачи:

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

2. Нарисовать "Круги на воде", т.е. нарисовать 20 концентрических окружностей,

т.е. окружностей разного радиуса, но имеющих общий центр.

3. Разлиновать экран в линейку.

4. Разлиновать экран в клетку.

 

Использование случайных величин при рисовании.

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

Задача.

Нарисовать "звёздное небо", т.е. в случайных местах экрана нарисовать 1000 разноцветных точек.

 

Фрагмент программы:

 

For i:=1 to 1000 do PutPixel (Random(640),Random(480),Random(16));

 

Задачи:

  1. Нарисовать "дождь в луже", т.е. заполнить экран окружностями радиуса 20 в случайных местах.
  2. Нарисовать "мыльные пузыри", т.е. заполнить экран окружностями случайных радиусов и цветов в случайных местах.
  3. Нарисовать "звёзды в окне", т.е. изобразить звёздное небо в пределах прямоугольника.

 

 

 
 

 

 


Движение картинок по экрану.

Рассмотрим иллюзию движения, возникающую на экране кинотеатра.

Если внимательно посмотреть на киноплёнку фильма, изображающего, скажем, движение

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

Точно так же поступают с созданием движения на экране компьютера.

 

Задача.

Написать программу движения по экрану слева направо окружности.

 

Программа.

Сначала нарисуем слева окружность и тут же сотрём её, для чего нарисуем её на том же месте, но чёрным цветом. Несмотря на то, что окружность тут же сотрём, она успеет мелькнуть на экране и глаз это заметит. Затем надо нарисовать и стереть такую же окружность чуть правее, затем ещё правее, и т.д. Так как в цикле окружность последний раз стирается, т.е. рисуется чёрным цветом, то после цикла необходимо её еще раз нарисовать белым цветом.

 

USES Graph;

VAR Device,Mode,x:Integer;

BEGIN

Device:=0;

InitGraph(Device,Mode,'a:\TP\BGI');

x:=40;

Repeat

SetColor(15);

Circle(x,100,10); {рисуем белую окружность}

SetColor(0);

Circle(x,100,10); {рисуем чёрную окружность}

x:=x+1;

Until x>600;

SetColor(15);

Circle(x,100,10); {рисуем последний раз белую окружность}

ReadLn;

CloseGraph

END.

 

Замечание.

Изменить скорость движения можно, увеличив или уменьшив шаг движения. Если фигуры рисовать толстой линией, то движение сильно замедлится, так как толстая линия рисуется гораздо дольше тонкой, то же относится и к закрашенной окружности. Замедлить движение можно и с помощью оператора Delay, введя её между рисованием и стиранием фигуры.

 

Задачи:

  1. Нарисовать две окружности, которые движутся слева направо.
  2. Нарисовать две окружности, одна из которых движется вниз, а другая – направо.
  3. Нарисовать окружность, которая бесконечно движется, отскакивая от правого и левого края экрана.
  4. Нарисовать кораблик, плывущий по реке.

 

 

МАССИВЫ

 

I. Переменные с индексами.

Поскольку в алфавите Паскаля нет подстрочных букв и цифр, то индексированные переменные на Паскале обозначаются так:

x [1], y [I], z [I, j].

Рассмотрим бесконечный ряд чисел Фибоначчи: 1 1 2 3 5 8 13 21 34 … Каждое из чисел Фибоначчи обозначается индексированной переменной таким образом:

f [1] =1 f [2] =1 f [3] =2 f [4] =3 f [5] =5 …

В этом ряду каждое из чисел является суммой двух предыдущих. В индексном виде это записывается так:

f [1] = f [I-2] + f [I-1].

Задача.

Запишите в индексном виде, как получается из предыдущего числа ряда последующее:

а) 14 18 22 26 … f [I] = f [I-1] + 4

б) 6 12 24 48 … f [I] = f [I-1] * 2

в) 3 5 9 17 33 65 … f [I] = 2 * f [I-1] – 1

 

II. Определение массива.

 

Массив – это совокупность конечного числа элементов одного и того же типа, в которой каждый элемент имеет номер, а все элементы – общее имя.

Номер элемента массива назначается его индексом, причем индексов может быть несколько. Массив с одним индексом называют одномерным массивом, с двумя – двумерным и т.д.

Если в программе используется массив, его следует описать в разделе описаний программы.

 

III. Одномерные массивы.

 

Описание одномерного массива имеет вид:

VAR имя_массива: array [нач_инд.. кон_инд] of тип_данных;

Здесь имя_массива выбирается в соответствии с обычными привилами Раскаля. Array – читается "эррэй"; переводится "массив" – зарезервированное слово, указывающее, что имя относится к массиву. Нач_инд и кон_инд – это целые числа, определяющие диапазон изменения индексов элементов массива:

VAR temp: array [1..31] of Real;

Нумерация массива не обязательно начинается с 1, но нижняя граница должна быть меньше верхней. Количество элементов в массиве можно найти по формуле: кон_инд – нач_инд + 1.

Так, например, массив VAR sum: array [6..8] of Integer; состоит всего из трех элементов 8 – 6 + 1=3.

 

Обратимся к элементу массива как к обычной переменной можно, указав имя массива и индекс элемента в квадратных скобках [ ]. С элементами массива можно выполнять все операции, которые допускаются его типом.

Пример задания одномерного массива:

1 способ (примитивное присваивание VAR a: array [1..4]\ of integer;

BEGIN

a [1]: = 8; a [2]: = 9; a [3]: = - 35; a [4]: = 2;

 

2 способ (с помощью клавиатуры)

const n = 10;

VAR a: array [1..n] of integer; I: integer;

 

BEGIN

For I:1 to n do begin

writeln (' Введите a [', I, '] ');

Readhn (a [I]);

end; for

 

Задача.

Дана таблица чисел. Найти сумму положительных элементов.

Программа

const n =5;

VAR a: array [1..n] of integer;

S, I: integer;

BEGIN

For I = 1 to n do readln (a [I]);

For I: 1 to n do write (a [I]; 1);

writehn;

S: = 0;

For I = 1 to n do if a [I] > 0 then S: = S +U [I];

write ('S = ', S);

END.

 

IV. Двумерные массивы.

 

Описание двумерного массива имеет вид:

VAR имя_массива: array [номер_1столбца.. номер_посл_столбца] of тип_данных;

Так, таблица сложения натуральных чисел может быть описана так:

VAR Add: array [1..9,1..9] of Integer;

Обратиться к элементу двумерного массива можно, указав номер строки (индекс I) и номер столбца (индекс I) в квадратных скобках после имени массива. Так, например, на пересечении сложения чисел стоит элемент Add [2,5], он равен 7.

Пример задания двумерного массива:

1 способ (примитивное присваивание)

 

VAR t: array [1..3, 1..4] of Integer;

 

BEGIN

t [1,1]: = - 8; … t [1,1]: = - 18;

t [3,1]: = 11; … t [3,4]: = 25;

 

2 способ (с помощью клавиатуры)

VAR a: array [1..3, 1..4] of Integer;

BEGIN

For I = 1 to 3 do

begin

writehn ('Введите элементы ', I, ' строки ');

For I: = 1 to 4 do Readhn (a [I, j]);

end; for

 

Задача.

В доме 3 подъезда по 6 квартир. Число жильцов в каждой квартире известно. Данные хранятся в виде таблицы:

а) жильцов в каждом подъезде

б) во всем доме.

Программа

VAR a: array [1..3, 1..6] of Integer;

y: array [1..3] of Integer;

e, j, f, n: Integer;

BEGIN

n: = 0l; количество жильцов всего дома

For I = 1 to 3 do

begin

writeln ('Введите количество жильцов в ', I, ' подъезда ')

y [I]: = 0; количество жильцов в I-ого подъезда

for I: 1 to 6 do

begin

read (a [I, j]);

y [I]: = y [I] + a [I, j];

end;

n: = n + y [I];

end;

For f: = 1 to 3 do

writehn (' количество жильцов ', f, ' подъезда: ', y [f]);

Writeln (' количество жильцов всего дома = ', n);

END.

 

СТРОКОВЫЙ ТИП String. РАБОТА СО СТРОКАМИ.

 

Вспомним, что описание VAR a: String говорит о том, что переменная а обязана иметь строковое (текстовое значение).

Чтобы сэкономить память, работая в квадратных скобках, после слова String, максимальную длину строки.

Например:

VAR a: String [20]. В этом случае под символы переменной ав память будет отведено 20 байт.

Если задана строка s: = ' Барка ', то считается автоматически заданным массив символов с тем же именем: s [1] = ' Б ', s [2] = ' a ', s [3] = ' н ', s [4] = ' к ', s [5] = ' а '. Тогда после выполнения оператора s [3]: = ' р ' мы получили s = ' Барка '.

Строки можно сравнивать. Условие S1 = S2 считается выполненным, если обе строки абсолютно одинаковы, включая и пробелы. Сравнивание идет посимвольно слева направо. Поэтому считается, что ' панк ' < ' парк ', так как первый несовпадающий символ ' р ' имеет больший номер в алфавите, чем ' н '.

 

ПРОЦЕДУРЫ, ФУНКЦИИ И ОПЕРАЦИИ ДЛЯ РАБОТЫ НАД СТРОКАМИ.

 

Исходные данные Операции Результат Пояснение
s1: = ' Мото '; s2: = ' роллер ' s3: = s1 + s2 или s3: = condet (s1, s2) s3 = ' Мотороллер ' Операция + над двумя строками просто соединяет две строки в одну.
s5 = ' Мотороллер ' k: = Pos (' рол ', s5) k = 5 Функция Pos возвращает позицию, на которой находится строка 'рол' в строке s5. В случае, если такой строки нет, то значение функции равно 0.
s3 = ' Мотороллер ' I: = Length (s3) I = 10 Функция Length (длина) выдает (возвращает) количество символов в строке.
s3 = ' астроном ' s4: = Copy (s3,3,4) s4 = ' трон ' Функция Copy возвращает часть строки длиной 4 начиная с третьего символа.
s5 = ' Коробочка '; Delete (s5,4,2) s5 = ' Корочка ' Процедура Delete удаляет из строки s5 два символа начиная с четвертого.
s6: = ' Рука '; s7: = ' баш '; Insert (s7,s6,3) s6 = ' Рубашка ' Процедура Insert вставляет в строку s6 строку s7 начиная с третьего символа.
x: = 2.73284 Str (x:4:2,s8) s8 = ' 2.73 '  
s8 = ' 2.73 ' Val (s8,x,Osh) x = 2.73  

 



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 176; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.251.155 (0.038 с.)