Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Определение трассы пути движения точки на плоскости

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Определение трассы пути движения точки на плоскости
Имя
Сообщение << Старые топики   Новые топики >>
Определение трассы пути движения точки на плоскости - 2009-06-12 17:04:55.156666   
Klan_1985

Сообщений: 6
Оценки: 0
Присоединился: 2009-06-12 17:01:24.233333
Добрый день! Помогите поалуйста решить задачу.. Делал в Borland C++ 3.1 после ввода значений точек А и В автоматически вылетает из окна вывода результата.. вот текст программы:#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #include &lt;stdlib.h&gt; #include &lt;dos.h&gt; #include &lt;stdio.h&gt; struct point {float x,y; }; struct koord { float xu; float yu; float xd; float yd; }; void main() { clrscr(); float y,x, s, k, l; s=1; int i,j; struct koord kv[5][5]; kv[0][0].yd=0; kv[0][0].xd=0; kv[0][0].yu=kv[0][0].yd+s; kv[0][0].xu=kv[0][0].xd+s; for(i=0;i&lt;5;i++) { for(j=1;j&lt;5;j++) { kv[i][j].xd=kv[i][j-1].xu; kv[i][j].yd=kv[i-1][j].yu; kv[i][j].xu=kv[i][j-1].xu+s; kv[i][j].yu=kv[i-1][j].yu; printf("KV xd=%.0f, yd=%.0f, xu=%.0f, yu=%.0f\n",kv[i][j].xd, kv[i][j].yd, kv[i][j].xu, kv[i][j].yu); } } struct point A,B; printf ("Vvedite koord A(x,y)\n"); scanf ("%f%f",&A.x,&A.y); printf ("Vvedite koord B(x,y)\n"); scanf ("%f%f",&B.x,&B.y); float xmin, xmax, ymin, ymax; if(A.x&lt;B.x) { xmin=A.x; xmax=B.x; } else { xmin=B.x; xmax=A.x; } if(A.y&lt;B.y) { ymin=A.y; ymax=B.y; } else { ymin=B.y; ymax=A.y; } for(i=0;i&lt;5;i++) { for(j=0;j&lt;5;j++) { if(xmin&lt;kv[i][j].xu&&xmin&gt;kv[i][j].xd&&ymin&lt;kv[i][j].yu&&ymin&gt;kv[i][j].yd) printf("Kvadrat tochki A= %d %d\n",i+1,j+1); else if(xmax&lt;kv[i][j].xu&&xmax&gt;kv[i][j].xd&&ymax&lt;kv[i][j].yu&&ymax&gt;kv[i][j].yd) printf ("Kvadrat tochki B= %d %d\n",i+1,j+1);}} if(B.x!=A.x) { l=(B.y-A.y)/(B.x-A.x); for(i=0;i&lt;5;i++) { for(j=0;j&lt;5;j++) { k=(kv[i][j].yu-kv[i][j].yd)/(kv[i][j].xu-kv[i][j].xd); if(k!=l||-k!=l) { x=(k*kv[i][j].xd-l*A.x+A.y-kv[i][j].yd)/(k-l); y=(((x-kv[i][j].xd)*(kv[i][j].yu-kv[i][j].yd))/(kv[i][j].xu-kv[i][j].xd))+kv[i][j].yd; if(x&lt;xmax&&x&gt;xmin&&y&lt;ymax&&y&gt;ymin&&x&lt;kv[i][j].xu&&x&gt;kv[i][j].xd&&y&lt;kv[i][j].yu&&y&gt;kv[i][j].yd) { printf("Kvadrat %d %d\n",i+1,j+1); } else { x=(-k*kv[i][j].xu-l*A.x+A.y-kv[i][j].yd)/(-k-l); y=(((x-kv[i][j].xu)*(kv[i][j].yu-kv[i][j].yd))/(kv[i][j].xd-kv[i][j].xu))+kv[i][j].yd; if(x&lt;xmax&&x&gt;xmin&&y&lt;ymax&&y&gt;ymin&&x&lt;kv[i][j].xu&&x&gt;kv[i][j].xd&&y&lt;kv[i][j].yu&&y&gt;kv[i][j].yd) { printf("Kvadrat %d %d\n",i+1,j+1); } } } else { printf("Kvadrat %d %d\n",i+1,j+1); } } } } else { for(i=0;i&lt;5;i++) for(j=0;j&lt;5;j++) if(kv[i][j].xd&lt;xmax&&kv[i][j].xu&gt;xmin&&kv[i][j].yd&lt;ymax&&kv[i][j].yu&gt;ymin) printf("Kvadrat %d %d\n",i+1,j+1); } getch(); }
Post #: 1
RE: Определение трассы пути движения точки на плоскости - 2009-06-12 17:06:02.163333   
Klan_1985

Сообщений: 6
Оценки: 0
Присоединился: 2009-06-12 17:01:24.233333
где k-коэффициент диагонали квадрата, l-коэффициент прямой проходящей через эти квадраты
Post #: 2
RE: Определение трассы пути движения точки на плоскости - 2009-06-12 17:12:43.293333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Поменяй компилятор. Это ошибка в BC++ 3.1 при работе с полями структуры с плавающей точкой.

Или в структуры читай данные через промежуточные переменные, например так:
float tmp; scanf( "%f", &tmp ); A.x = tmp;
Если не поможет - пройди пошагово в отладчике и посмотри, в каком именно месте вылетает.
Post #: 3
RE: Определение трассы пути движения точки на плоскости - 2009-06-12 17:22:03.930000   
Klan_1985

Сообщений: 6
Оценки: 0
Присоединился: 2009-06-12 17:01:24.233333
мне кажется сетка не правильно задана…
Post #: 4
RE: Определение трассы пути движения точки на плоскости - 2009-06-12 17:23:45.683333   
Klan_1985

Сообщений: 6
Оценки: 0
Присоединился: 2009-06-12 17:01:24.233333
вылетает в том месте где я вывожу на экран номера квадратов где находятся точки А и В
Post #: 5
RE: Определение трассы пути движения точки на плоскости - 2009-06-12 19:51:12.610000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Отформатируй нормально код, читать невозможно. Возможно, просто внутри циклов меняешь переменные, которые используются во внешних циклах.
Post #: 6
RE: Определение трассы пути движения точки на плоскости - 2009-06-13 00:09:35.246666   
Klan_1985

Сообщений: 6
Оценки: 0
Присоединился: 2009-06-12 17:01:24.233333
Struct koord kv-структура координат квадрата: (рисунок 2.3)

Рисунок 2.3- Структура координат квадрата

kv[5][5]-двумерный массив, где 5- максимальное значение
struct point- структура точки
k-угловой коэффициент диагонали квадрата
s-шаг координатной сетки
l-угловой коэффициент прямой
I,j-номер столбца и строки соответственно
float-вещественные числа одинарной точности
int-целые числа

#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <dos.h>
#include <stdio.h>
struct point // структура точки
{
float x,y;
};
struct koord // структура координат квадрата
{
float xu;
float yu;
float xd;
float yd;
};

void main() //главная функция
{
clrscr(); //очистка экрана
float y,x, s, k, l;
s=1; //шаг деления координатной сетки
int i,j;
struct koord kv[5][5]; // создание координатной сетки размерностью 5*5
kv[0][0].yd=0; // присваивание координат первому квадрату
kv[0][0].yu=kv[0][0].yd+s
kv[0].xd=0;
kv[0][0].xu=kv[0][0].xd+s
for(i=0;i&lt;5;i++)
{
for(j=1;j&lt;5;j++)
{
kv[j].xd=kv[j-1].xu;
kv[j].yd=kv[i-1][j].yu;
kv[j].xu=kv[j-1].xu+s;
kv[j].yu=kv[i-1][j].yu;
printf("KV xd=%.0f, yd=%.0f, xu=%.0f, yu=%.0f\n",kv[j].xd, kv[j].yd, kv[j].xu, kv[j].yu);
}
}

struct point A,B; // Ввод координат точек А и В
printf ("Vvedite koord A(x,y)\n");
scanf ("%f%f",&A.x,&A.y);
printf ("Vvedite koord B(x,y)\n");
scanf ("%f%f",&B.x,&B.y);

float xmin, xmax, ymin, ymax;


if(A.x&lt;B.x)
{
xmin=A.x;
xmax=B.x;
}
else
{
xmin=B.x;
xmax=A.x;
}

if(A.y&lt;B.y)
{
ymin=A.y;
ymax=B.y;
}
else
{
ymin=B.y;
ymax=A.y;
}
for(i=0;i&lt;5;i++)
{


for(j=0;j&lt;5;j++)
{ if(xmin&lt;kv[j].xu&&xmin&gt;kv[j].xd&&ymin&lt;kv[j].yu&&ymin&gt;kv[j].yd) // если точка принадлежит тому или иному квадрату
printf("Kvadrat tochki A= %d %d\n",i+1,j+1);
else
if(xmax&lt;kv[j].xu&&xmax&gt;kv[j].xd&&ymax&lt;kv[j].yu&&ymax&gt;kv[j].yd)
printf ("Kvadrat tochki B= %d %d\n",i+1,j+1);
}
}

if(B.x!=A.x) // условие- если координаты х точек А и В не равны между собой, то делаем следующие операции
{
l=(B.y-A.y)/(B.x-A.x); // угловой коэффициент прямой
k=(kv[j].yu-kv[j].yd)/(kv[j].xu-kv[j].xd); // угловой коэффициент диагонали координатного квадрата
for(i=0;i&lt;5;i++)
{


for(j=0;j&lt;5;j++)
{
if(k!=l||-k!=l) // если коэффициенты не равны по модулю
{
x=(k*kv[j].xd-l*A.x+A.y-kv[j].yd)/(k-l);
y=(((x-kv[j].xd)*(kv[j].yu-kv[j].yd))/(kv[j].xu-kv[j].xd))+kv[j].yd;
if(x&lt;xmax&&x&gt;xmin&&y&lt;ymax&&y&gt;ymin&&x&lt;kv[j].xu&&x&gt;kv[j].xd&&y&lt;kv[j].yu&&y&gt;kv[j].yd)
{
printf("Kvadrat %d %d\n",i+1,j+1);
}
else
{
x=(-k*kv[j].xu-l*A.x+A.y-kv[j].yd)/(-k-l);
y=(((x-kv[j].xu)*(kv[j].yu-kv[j].yd))/(kv[j].xd-kv[j].xu))+kv[j].yd;

if(x&lt;xmax&&x&gt;xmin&&y&lt;ymax&&y&gt;ymin&&x&lt;kv[j].xu&&x&gt;kv[j].xd&&y&lt;kv[j].yu&&y&gt;kv[j].yd)
{
printf("Kvadrat %d %d\n",i+1,j+1);
}
}
}
else
{
printf("Kvadrat %d %d\n",i+1,j+1);
}
}
}
}
else
{
for(i=0;i&lt;5;i++)
for(j=0;j&lt;5;j++)
if(kv[j].xd&lt;xmax&&kv[j].xu&gt;xmin&&kv[j].yd&lt;ymax&&kv[j].yu&gt;ymin)

printf("Kvadrat %d %d\n",i+1,j+1); // вывод координаты квадрата на экран
}
getch();

}
Post #: 7
RE: Определение трассы пути движения точки на плоскости - 2009-06-13 21:09:22.906666   
Klan_1985

Сообщений: 6
Оценки: 0
Присоединился: 2009-06-12 17:01:24.233333
вот отредактировал текст программы
Post #: 8
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Определение трассы пути движения точки на плоскости







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.