Мендель Виктор Васильевич, Ледовских Ирина Анатольевна - umotnas.ru o_O
Главная
Поиск по ключевым словам:
Похожие работы
Название работы Кол-во страниц Размер
Социология культуры времен поздней и ускоренной модернизации 1 182.51kb.
Методы и ход работы Менделя 1 116.21kb.
Урок информатики в 11б классе средней школы №6 города Балтийска Учитель... 1 49.68kb.
2011 г. Соловьев Виктор Васильевич канд физ мат наук (22. 03. 1 75.8kb.
Шаубергер Виктор – Энергия воды 11 3745.42kb.
Лентулов Аристарх Васильевич 1 18.5kb.
1. Выберите правильные ответы. По каким признакам Г. Мендель избрал... 1 80.57kb.
Виктор Александрович, есть ли сегодня информация, сколько средств... 1 97.25kb.
Сарыгин Александр Васильевич 1 52.98kb.
Михаил васильевич нестеров. Биография. Жизнь и творчество 1 177.37kb.
Буторина Ирина Валериевна – заведующий стоматологической поликлиникой... 1 113.55kb.
Павел басинский (председатель), марина дяченко, олег зайончковский... 1 24.7kb.
Викторина для любознательных: «Занимательная биология» 1 9.92kb.

Мендель Виктор Васильевич, Ледовских Ирина Анатольевна - страница №1/6




Приложение 4 (информатика)

СОДЕРЖАНИЕ

Мендель Виктор Васильевич, Ледовских Ирина Анатольевна (МИФ-2, №1, 2004) 2

Компьютерное математическое моделирование 2

Мендель Виктор Васильевич, Ледовских Ирина Анатольевна (МИФ-2, №2, 2004) 6

Компьютерное математическое моделирование 6

Звягина Анна Стефановна (МИФ-2, №4, 2004) 12

Компьютерные сети 12

Звягина Анна Стефановна (МИФ-2,№1,2005) 21

Глобальные сети, Интернет, IP-адресация 21

Вихтенко Эллина Михайловна (МИФ-2, №2, 2004) 31

Хабаровская краевая заочная олимпиада школьников по программированию 2003/2004 учебного года 31

Богоутдинов Дмитрий Гилманович, Казинец Виктор Алексеевич (МИФ-2,№2, 2005) 43

Проведение олимпиад по информатике в Хабаровском крае 43

Вихтенко Эллина Михайловна (МИФ-2, №2, 2005) 48

Геометрические задачи в олимпиадах по программированию 48

Богоутдинов Дмитрий Гилманович (МИФ-2, №3, 2005) 54

Алгоритмы: понятие, свойства, виды. Словесная форма представления алгоритмов 54

Богоутдинов Дмитрий Гилманович (МИФ-2, №4, 2005) 58

Алгоритмы и формы их представления 58

Мендель Виктор Васильевич, Ледовских Ирина Анатольевна (МИФ-2, №1, 2004)

Компьютерное математическое моделирование


Рассмотрим процедуру компьютерного моделирования от математического описания до алгоритма и программы. Для этого возьмем глобальную задачу.

ЗАДАЧА: Внутри прямоугольной области на экране компьютера изображен лабиринт. Внутри лабиринта двигаются два шарика. Если шарики ударяются о стенки, или друг о друга, они изменяют направление движения.

Разделим эту задачу на несколько элементарных фрагментов и каждый фрагмент рассмотрим отдельно.



Задача 1. Шарик появляется на экране компьютера внутри прямоугольника в точке (xc, yc) и движется до достижения одной из «стенок» прямоугольника со скоростью (vx, vy).

Замечание: здесь vx и vy – горизонтальная и вертикальная составляющие вектора скорости, xc, yc – координаты центра шарика в текущий момент времени.

Первый этап: математическое описание.

Из курса физики известно, что при прямолинейном движении координаты материальной точки изменяются по законам , .



Второй этап: составление алгоритма программы

Д
ля составления программы требуется уточнить, как проверяется, достиг шарик границы или нет. Здесь мы будем использовать такое условие: « если (хmin+R < xc < xmax-R) и (ymin+R < yc < ymax-R), то строится «шарик», иначе – остановка». Здесь R – радиус шарика, () – координаты правого нижнего, а (хmin, ymin) – координаты левого верхнего угла прямоугольника.

Уточним также, что означает блок «построение шарика». В этом блоке выполняется две операции:


  1. стирается старое изображение;

  2. строится новое изображение по пересчитанным значениям xc и yc.

Замечание: Стирать все изображение за каждый такт работы программы – не лучший способ, поэтому используем такой прием: на месте «старого» изображения будем строить точно такое же, но с цветом фона.
Третий этап: программа *

* Текст программы приводится для языка Turbo Pascal с минимальным использованием операторов.



program ball;

Uses graph, crt; {подключение библиотеки графических функций и процедур}

var

driver,mode: integer; {переменные для установки драйвера и режима работы}

xc,yc,R,vx,vy,Dt, xmin, ymin, xmax, ymax: integer;

begin

xc:=100; yc:=100; R:=10; {задаем начальные условия}

vx:=8; vy:=5; Dt:=1;

xmax:=600; ymax:=400;

xmin:=10; ymin:=10;

driver:=detect;

Initgraph(driver,mode,'путь к драйверу'); {инициализация графического режима}

SetFillStyle(1,14); {определяем стиль и цвет заливки прямоугольника}

Bar(xmin, ymin, xmax, ymax); {вычерчиваем закрашенный прямоугольник}

SetColor(13);

while (xc>xmin+R) and (xcymin+R) and (yc

begin

setcolor(14);

circle(xc,yc,R);

xc:=xc+vx*Dt;

yc:=yc+vy*Dt;

setcolor(13);

circle(xc,yc,R);

delay(200);

end;

closegraph;

end.
Четвертый этап: отладка программы.

Варьируя значения для vx, vy и Dt добейтесь оптимальной работы программы.


Задача 2. Дополним задачу 1 еще одним условием: если шарик достигает края прямоугольника, то он отражается от стенки и продолжает движение.
Первый этап: математическое описание.

Основной закон движения остается тем же, что и в задаче 1: ; . При достижении вертикальной стенки горизонтальная составляющая вектора скорости меняет знак на противоположный: vx= -vx, а при ударе о горизонтальную стенку меняет знак вертикальная составляющая скорости vy = -vy. Эти условия обеспечивают соблюдение очевидного физического факта: угол удара тела о стену равен углу отскока этого тела от стены.







Второй этап: алгоритм программы.

Третий этап: программа

program ball_1;

Uses graph, crt;

var

driver,mode: integer; {переменные для установки драйвера и режима работы}

xc,yc,R,vx,vy,Dt, xmin, ymin, xmax, ymax: integer;

begin

xc:=100; yc:=100; R:=10;

vx:=10; vy:=10; Dt:=1;

xmax:=600; ymax:=400;

xmin:=10; ymin:=10;

driver:=detect;

Initgraph(driver,mode,'путь к драйверу');

SetFillStyle(1,14);

Bar(xmin, ymin, xmax, ymax);

SetColor(13);

while not(keypressed) do

begin

if (xc<=xmin+R) or (xc>=xmax-R) then vx:=-vx;

if (yc<=ymin+R) or (yc>=ymax-R) then vy:=-vy;

xc:=xc+vx*Dt; yc:=yc+vy*Dt;

setcolor(13);

circle(xc,yc,R);

delay(100);

setcolor(14);

circle(xc,yc,R);

end;

closegraph;

end.
Четвертый этап: отладка программы.

Подбор оптимальных значений для vx, vy и Dt и обеспечение оптимальной работы программы.



Контрольные задания

Представленные ниже задачи являются контрольным заданием для учащихся 10-11 классов. Решения необходимо оформить в отдельной тетради и выслать по адресу 680000, г. Хабаровск, ул. Дзержинского, 48, ХКЦТТ, ХКЗФМШ
Для приведенных ниже задач выполните процесс построения компьютерной модели. 1
Задача 3. Шарик находится внутри лабиринта, внутренние перегородки которого – прямоугольники со сторонами, параллельными краям экрана. Шарик ударяется о внутренние и внешние стенки и отскакивает.
Задача 4. (об упругом ударе двух шариков). Два одинаковых шарика двигаются на экране. Ударяясь друг о друга, они изменяют направление движения.

Мендель Виктор Васильевич, Ледовских Ирина Анатольевна (МИФ-2, №2, 2004)

Компьютерное математическое моделирование2


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

ЗАДАЧА: Внутри прямоугольной области на экране компьютера изображен лабиринт. Внутри лабиринта двигаются два шарика. Если шарики ударяются о стенки, или друг о друга, они изменяют направление движения.


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

Задача 3. Шарик находится внутри лабиринта, внутренние перегородки которого – прямоугольники со сторонами, параллельными краям экрана. Шарик ударяется о внутренние и внешние стенки и отскакивает.

Первый этап: математическое описание

Основной закон движения остается тем же, что и в задаче 1: ; . Так же как в задаче 2 при ударе о вертикальную поверхность изменяется горизонтальная составляющая вектора скорости: vx= -vx, а при ударе о горизонтальную стенку меняет знак вертикальная составляющая скорости vy = -vy.



Второй этап: алгоритм программы

Блок-схема практически совпадает с блок-схемой из задачи №2. Уточним теперь, как в этой задаче будет проверяться условие, что шарик ударился о стенку или перегородку. Пусть перегородки и границы лабиринта окрашены в цвет с номером ColG. Касание шарика со стенкой означает, что в одной из точек (xc ± R; yc) или (xc;yc±R) на экране цвет имеет номер ColG. Поэтому, для того, чтобы определить коснулся шарик стенки (перегородки) или нет, достаточно проверить цвет точки, отстоящей от центра шарика в направлении движения шарика на расстоянии радиуса


+ 1. Напомним, что в языке Turbo Pascal функция GetPixel(x,y:integer):word возвращает значение цвета, в который окрашена точка с координатами (x, y).

Третий этап: программа

Модернизируем программу задачи № 2.



program ball_3;

Uses graph, crt;

var

driver, mode: integer; {переменные для установки драйвера и режима работы}

xc,yc,R,vx,vy,Dt,xmin,xmax,ymin,ymax: integer;

ColG, Colf: word;

begin

xc:=100; yc:=100; R:=10;

vx:=1; vy:=1; Dt:=1;

xmax:=600; ymax:=400;

xmin:=10; ymin:=10;

ColG:=13; Colf:=14;

{ColG – цвет стенки и внутренних перегородок лабиринта,

Colf – цвет коридоров лабиринта}

driver:=detect;

Initgraph(driver,mode,'путь к драйверу');

SetFillStyle(1,Colf);

Bar(xmin,ymin,xmax,ymax);

SetColor(ColG);

rectangle(xmin,ymin,xmax,ymax);

SetFillStyle(1,ColG);

{строим внутренние стенки лабиринта в виде закрашенных прямоугольников цвета ColG}

Bar(xmin,ymin+180,xmin+200,ymin+210);

Bar(xmin+180,ymin+210,xmin+200,ymin+320);

Bar(xmin+480,ymin,xmin+510,ymin+120);

Bar(xmin+510,ymin+100,xmin+380,ymin+120);

Bar(xmin+120,ymin,xmin+140,ymin+120);

Bar(xmin+320,ymax-160,xmin+340,ymax);

floodfill(500,440,ColG);

while not(keypressed) do

begin

{проверка условия, что шарик ударился о стенку или перегородку лабиринта}

if (GetPixel(xc+R+1,yc)=ColG) or (GetPixel(xc-R-1,yc)=ColG)

then vx:=-vx;

if (GetPixel(xc,yc+R+1)=ColG) or (GetPixel(xc,yc-R-1)=ColG)

then vy:=-vy;

xc:=xc+vx*Dt; yc:=yc+vy*Dt;

SetColor(ColG);

circle(xc,yc,R);

delay(10);

SetColor(Colf);

circle(xc,yc,R);

end;

closegraph;

end.
Четвертый этап: отладка программы.

Необходимо корректно выбрать xc и yc (чтобы шарик не оказался «внутри» стенки) и тщательно «выстроить» внутренние перегородки лабиринта. При построении лабиринта желательно учесть, что ширина внутренних перегородок должна быть не меньше радиуса шарика.

Рассмотрим теперь задачу об упругом ударе двух шариков.

Задача 4. (об упругом ударе двух шариков). Два одинаковых шарика двигаются на экране. Ударяясь друг о друга они изменяют направление движения.

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



1 Случай. Лобовой удар шариков. В этом случае направления движения шариков совпадают с направлением, проходящим через центры шариков. При этом возможны два подслучая:

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

  2. один шарик догоняет другой и после удара они движутся в одном направлении.

Из законов сохранения импульса и энергии следует, что в подслучае а) происходит «обмен» скоростями, т.е.:

    • первый шарик после удара меняет направление и получает скорость второго;

    • второй шарик меняет направление и получает скорость первого.

То же происходит и в подслучае b), за исключением того, что направления движения шаров не меняются.

Таким образом, если скорости шаров до упругого удара были v1 и v2, а после удара v1 и v2, то v1 = v2 и v2 = v1.



2 Случай. Общий случай, когда скорости шариков не направлены по линии, проходящей через их центры (см. рисунок).

Разложим скорости и на две взаимно-перпендикулярные составляющие, считая, что одна ось (OX) проходит через центры шариков.



и .

Уравнения движения при нецентральном ударе имеют сложный вид, поэтому мы упростим физическую картину. Будем считать, что в результате удара меняются только первые составляющие скоростей, т.е. и .

Запишем в векторном виде, как выразятся и :

Из свойств скалярного произведения следует, что: , а .

Отсюда и

Таким образом:



Обозначим координаты векторов скорости шаров и , а координаты центров шаров O1(x1c, y1c); O2(x2c, y2c).

Заметим также, что O1O2 = 2R, а у вектора координаты {x2c-x1c, y2c-y1c}.

Обозначим слагаемое, прибавляемое к и отнимаемое от . Его координаты равны {(x2c-x1c)k; (y2c-y1c)k},

где k = [(v1x-v2x)(x2c-x1c)+(v1y – v2y)(y2c-y1c)]/4R2.

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

v1x = v1x – k(x2c – x1c)

v1y = v1y – k(y2c – y1c)

v2x = v2x + k(x2c – x1c) (*)

v2y = v2y + k(y2c – y1c)



Третий этап: программа

Программа составляется аналогично программе задачи № 2 с единственным отличием в пересчете скоростей и постановке условий.

Условием будет являться:

if sqr(x2c-x1c)+sqr(y2c-y1c)<=4*sqr(R) then skorost(v1x,v1y,v2x,v2y);

В процедуре skorost (var v1x,v1y,v2x,v2y:real) осуществляется пересчет координат векторов скоростей после удара по формулам (*).



Приведем текст программы:
program ball_4;

Uses graph, crt; {подключение библиотеки графических функций и процедур}

var

driver, mode: integer; {переменные для установки драйвера и режима работы}

x1c,y1c,x2c, y2c, R, Dt,xmin,xmax,ymin,ymax: longint;

v1x,v1y,v2x, v2y: integer;

Colf, ColG:word;

procedure skorost(var v1x,v1y,v2x,v2y:integer); {процедура для пересчета координат векторов скоростей после удара}

var k:real;

begin

k:=((v1x-v2x)*(x2c-x1c)+(v1y-v2y)*(y2c-y1c))/(4*sqr(R));

v1x:=round(v1x-k*(x2c-x1c));

v1y:=round(v1y-k*(y2c-y1c));

v2x:=round(v2x+k*(x2c-x1c));

v2y:=round(v2y+k*(y2c-y1c));

end;

begin

x1c:=100; y1c:=100; {задаем начальные условия}

x2c:=300; y2c:=250; R:=10;

v1x:=2; v1y:=-1; v2x:=-5; v2y:=2; Dt:=1;

xmax:=600; ymax:=400;

xmin:=10; ymin:=10;

Colf:=14; ColG:=13;

driver:=detect;

Initgraph(driver,mode,'путь к драйверу'); {инициализация графического режима}

SetFillStyle(1,Colf);

Bar(xmin,ymin,xmax,ymax);

SetColor(ColG);

while not(keypressed) do

begin

if sqr(x2c-x1c)+sqr(y2c-y1c)<=4*sqr(R)

then skorost(v1x,v1y,v2x,v2y); {проверка условия соударения двух шариков и пересчет координат векторов скоростей}

{проверка на достижение границы и пересчет координат скоростей}

if (x1c<=xmin+R) or (x1c>=xmax-R) then v1x:=-v1x;

if (y1c<=ymin+R) or (y1c>=ymax-R) then v1y:=-v1y;

if (x2c<=xmin+R) or (x2c>=xmax-R) then v2x:=-v2x;

if (y2c<=ymin+R) or (y2c>=ymax-R) then v2y:=-v2y;

x1c:=x1c+v1x*Dt; y1c:=y1c+v1y*Dt;

x2c:=x2c+v2x*Dt; y2c:=y2c+v2y*Dt;

SetColor(ColG);

SetFillStyle(1,ColG);

circle(x1c,y1c,R); FloodFill(x1c,y1c,ColG); {рисуем первый шарик}

SetFillStyle(1,ColG-1);

circle(x2c,y2c,R); FloodFill(x2c,y2c,ColG); {рисуем второй шарик}

delay(10);

SetColor(Colf);

SetFillStyle(1,Colf);

circle(x1c,y1c,R); FloodFill(x1c,y1c,Colf);

circle(x2c,y2c,R); FloodFill(x2c,y2c,Colf);

end;

closegraph;

end.

следующая страница >>