Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Для пункта меню “Идеальный газ” напишите новый код программы.






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

void __fastcall TForm1:: N3Click(TObject *Sender)

{

// тело функции по заданию сам.работы 4.1

}

 

Для второй функции доработайте готовую модель одной молекулы.

 

В физике идеальным называется газ, в котором силы взаимодействия между частицами пренебрежимо малы. Имея готовую модель одной молекулы, необходимо доработать программу так, чтобы она работала не с одной молекулой, а с массивом из N молекул. Кроме того, поскольку в газе обычно встречаются как «медленные», так и «быстрые» молекулы, скорость каждой отдельной молекулы будет выбираться случайным образом. Количество молекул объявим в виде константы и определим равное 30.

Для этого в код программы добавим описание нового типа данных «молекула»:

Указание: в языке Паскаль этот тип данных называлась запись и выглядела следующим образом

type

Molecule = record

X, Y: Integer;

Vx, Vy: Integer;

end;

объявление типа данных структура на языке С++ будет выглядеть следующим образом

struct Molecule

{

int X, Y;

int Vx, Vy;

};

Объявление одномерного массива измените так:

Паскаль Mol: array[1..N] of Molecule;

Си Molecule Mol [N];

 

Добавьте в код функции как показано ниже

void __fastcall TForm1:: N3Click(TObject *Sender)

{

struct Molecule

{

int X, Y;

int Vx, Vy;

};

const int N=30;

Molecule Mol [N];

int CurV;

 

…………………..// Скопируйте код функции предыдущей программы по одной молекуле, и внесите изменения по указаниям приведенным ниже.

 

 

}

 

4.2.1 Приведенный ниже фрагмент определяет выбор начального положения молекулы по координате Х и Y и её направления, получение составляющих скорости молекулы

 

x = RandomRange(R, Screen-> Width - R);

y = RandomRange(R, Screen-> Height - R);

angle = random(360)* M_PI /180;

Vx = floor(V * sin(angle)); //

Vy = floor(V * cos(angle));

 

Необходимо заменить на циклический алгоритм, определения начального положения массива молекул М[i], для которых определяются координаты X и Y в виде составного имени: M[i].X и M[i].Y

for(i=0; i< N; i++)

{

Mol[i].X: = RandomRange(R, Screen-> Width - R);

Mol[i].Y: = RandomRange(R, Screen-> Height - R);

angle= random(360)*M_ PI /180;

 

CurV= RandomRange(1, V);

Mol[i].Vx = floor(CurV * sin(angle));

Mol[i].Vy: = floor(CurV * cos(angle));

}

while (IsRunning)

{//начало цикла while

for(i=0; i< N; i++)

{

//……………….

}

Sleep(10); // пауза 10 миллисекунд

Application-> ProcessMessages();

 

}//конец цикла while

Обращение к объектам и его свойствам в языке С++ точка заменяется стрелкой Например:

Паскаль Screen.Width

Си Screen-> Width

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

 

procedure TForm1.StartStopBtnClick(Sender: TObject);

const R: Integer = 10; { радиус молекулы }

V: Integer = 7; { максимальная скорость молекулы }

N = 30;

var angle: Real; { угол, задающий изначальное направление полета }

i: Integer;

Mol: array[1..N] of Molecule;

CurV: Integer;

begin

if IsRunning then

begin

IsRunning: = false;

StartStopBtn.Caption: = 'Пуск';

Exit;

end;

StartStopBtn.Caption: = 'Стоп';

IsRunning: = true;

Randomize;

Screen.Refresh;

for i: = 1 to N do

begin

Mol[i].X: = RandomRange(R, Screen.Width - R); { выбор начального }

Mol[i].Y: = RandomRange(R, Screen.Height - R); { положения молекулы }

angle: = Random(360)* Pi /180; { и ее направления }

CurV: = RandomRange(1, V);

Mol[i].Vx: = Round(CurV * Sin(angle)); { получение составляющих }

Mol[i].Vy: = Round(CurV * Cos(angle)); { скорости молекулы }

end;

while isRunning do { основной цикл }

begin

for i: = 1 to N do

begin

Screen.Canvas.Pen.Color: = clBtnFace; { стираем молекулу }

Screen.Canvas.Ellipse(Mol[i].X - R, Mol[i].Y - R,

Mol[i].X + R, Mol[i].Y + R);

Mol[i].X: = Mol[i].X + Mol[i].Vx; { сдвигаем на новую позицию }

Mol[i].Y: = Mol[i].Y + Mol[i].Vy;

{ определяем, не вышла ли }

if Mol[i].X > Screen.Width - R then { молекула за границы аквариума }

begin Mol[i].X: = Screen.Width - R; Mol[i].Vx: = - Mol[i].Vx; end;

if Mol[i].X < R then

begin Mol[i].X: = R; Mol[i].Vx: = - Mol[i].Vx; end;

if Mol[i].Y > Screen.Height - R then

begin Mol[i].Y: = Screen.Height - R; Mol[i].Vy: = - Mol[i].Vy; end;

if Mol[i].Y < R then

begin Mol[i].Y: = R; Mol[i].Vy: = - Mol[i].Vy; end;

Screen.Canvas.Pen.Color: = clBlue; { рисуем молекулу на }

Screen.Canvas.Ellipse(Mol[i].X - R, Mol[i].Y - R, Mol[i].X + R, Mol[i].Y + R); { новой позиции }

end;

Sleep(10); { пауза 10 миллисекунд }

Application.ProcessMessages;

end;

end;

end.

Чтобы повысить точность модели, необходимо уменьшить радиус молекул (вплоть до единицы).

Проверить ошибки, провести компиляцию сохранить проект. Запустить на выполнение.

Записать код функции и скриншот работающей программы в отчет. Нарисовать блок-схему для кода функции пункта меню Идеальный газ.

4.3 Добавить новые пункты меню в соответствии с рисунком приведенном ниже:






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.