Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Pascal


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 162
∙ повысить рейтинг »
Сергей Бендер
Статус: Профессионал
Рейтинг: 137
∙ повысить рейтинг »
lamed
Статус: Академик
Рейтинг: 2
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Pascal (Паскаль)

Номер выпуска:1282
Дата выхода:07.03.2016, 15:51
Администратор рассылки:F®ost (Администратор)
Подписчиков / экспертов:11 / 13
Вопросов / ответов:1 / 1

Консультация # 188868: Здравствуйте! Прошу помощи в следующем вопросе: Я написала программу на Pascal моделирования динамической системы, но она работает не полностью. Шарики выводятся, но не хотят двигаться( Не могу понять в чем ошибка... Помогите пожалуйста!!!
Код (Pascal) ::

Консультация # 188868:

Здравствуйте! Прошу помощи в следующем вопросе:

Я написала программу на Pascal моделирования динамической системы, но она работает не полностью. Шарики выводятся, но не хотят двигаться( Не могу понять в чем ошибка... Помогите пожалуйста!!!

Код (Pascal) :: выделить код
program Laba1_ISM;

uses
     crt, graphABC;
 // для отрисовки
const
  sizey = 700;

const
  sizex = 700;

const
  r = 7;

const
  size = 3;

const
  v = 1;

const
  k = 0.01;

const
  tim = 1;

type
  obj = record
    m, Xo, Yo, Vo, vx, vy, Alo, dx, dy: real;
  end;

var
  i, j, N, Nx, Ny, l: integer;
  dt, time: real;
  f: file of integer;
  t: text;
  ob: array[1..10] of obj;
  ob2: array[1..10] of obj;

function dlin(i, j: integer): real;
begin
  dlin := sqrt(sqr(ob[i].xo - ob[j].xo) + sqr(ob[i].yo - ob[j].yo));
end;

function FN(i, j: integer): real;
begin
  fn := abs(ob[i].m * ob[j].m) / sqr(dlin(i, j));
end;

function radian(i: real): real;
begin
  radian := i * pi / 180;
end;

procedure dist;
var
  i, j: integer;
  alp, atx, aty, ftx, fty, fij, fx, fy, cosx, sinx: real;
  a_x, a_y: real;
begin
  for i := 1 to n do
  begin
    ob[i].xo := ob[i].dx;
    ob[i].yo := ob[i].dy;
  end;
  if(n = 1) then
  begin
    ob[n].dx := ob[n].xo + ob[n].vx * dt;
    ob[n].dy := ob[n].yo + ob[n].vy * dt;
  end;
  for i := 1 to n do 
  begin
    fx := 0;
    fy := 0;
    for j := 1 to n do
      if(i <> j) then
      begin
        sinx := (ob[j].yo - ob[i].yo) / dlin(i, j);
        cosx := (ob[j].xo - ob[i].xo) / dlin(i, j);
        fij := Fn(i, j);
        ftx := fij * cosx;
        fty := fij * sinx;
        fx := fx + ftx;
        fy := fy + fty;
      end;
    
    a_x := fx / ob[i].m;
    a_y := fy / ob[i].m;
    
    ob[i].dx := ob[i].xo + ob[i].vx * dt + a_x * sqr(dt) * 0.5;
    ob[i].dy := ob[i].yo + ob[i].vy * dt + a_y * sqr(dt) * 0.5;
    
    ob[i].vx := ob[i].vx + a_x * dt;
    ob[i].vy := ob[i].vy + a_y * dt;
    
  end;
end;

procedure inct;
var
  i:integer;
  tx: text;
begin
  ASSIGN(tx, 'd:\Copybook\папка ИСМ1\Laba1ISM\input.dat');
  reset(tx);
  readln(tx, N);
  readln(tx, dt);
  readln(tx);
  for i := 1 to N do
  begin
    readln(tx, ob[i].m, ob[i].xo, ob[i].yo, ob[i].vo, ob[i].alo);
    ob[i].dx := ob[i].xo+6;
    ob[i].dy := ob[i].yo;
    ob[i].vx := ob[i].vo * cos(radian(ob[i].alo));
    ob[i].vy := ob[i].vo * sin(radian(ob[i].alo));
  end;
  close(tx);
  dt := v * dt;
end;

procedure window;
begin
  SetWindowCaption('ИиСМ, Лабораторная работа 1');
  SetWindowSize(SizeY, SizeX);
  Nx := SizeX div 2;
  Ny := SizeY div 2;
end;

procedure zaryad(i, q: integer);
begin
  if(q = 0) then
  begin
    SetPenStyle(psClear);
    circle(round(ob[i].xo * size) + Nx, round(-ob[i].yo * size) + Ny, (r + 2));
  end
  else circle(round(ob[i].dx * size) + Nx, round(-ob[i].dy * size) + Ny, r);
  SetPenStyle(psSolid);
end;

procedure osi;
begin
  SetPenColor(clgreen);
  Line(Nx, 10, Nx, SizeY - 10);
  Line(10, Ny, SizeX - 10, Ny);
  Line(SizeX - 20, Ny - 5, SizeX - 10, Ny);
  Line(SizeX - 20, Ny + 5, SizeX - 10, Ny);
  Line(Nx - 5, 20, Nx, 10);
  Line(Nx + 5, 20, Nx, 10);
end;

begin
  window;
  inct;
  for i := 1 to n do zaryad(i, 1);
 // osi;
  readkey;
  while(not keypressed ) do
  begin
    for i := 1 to n do zaryad(i, 1);
    dist;
    osi;
    //Delay(tim);
    for i := 1 to n do zaryad(i, 0);
  end;
  for i := 1 to n do zaryad(i, 1);
end.

Дата отправки: 01.03.2016, 19:11
Вопрос задал: Малышка (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Зенченко Константин Николаевич (Модератор):

Здравствуйте, Малышка!

© Цитата: Малышка
Шарики выводятся, но не хотят двигаться(

Шарики двигаются, только при сдедующем шаге они выходят за пределы отображаемой области и Вы их не видете.
Чтобы это проверить я делил расчитаные значения на 500(маштабировал), и увеличивал задержку.

Удачи!

Консультировал: Зенченко Константин Николаевич (Модератор)
Дата отправки: 04.03.2016, 22:50
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное