Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 12.06.2009
Сообщений: 3

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

12.06.2009, 16:56. Показов 1250. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! С праздником всех!! Помогите поалуйста решить задачу.. Делал в Borland C++ 3.1 после ввода значений точек А и В автоматически вылетает из окна вывода результата.. вот текст программы:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#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];
  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<5;i++)
  { 
       
    for(j=1;j<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<B.x)
  {
    xmin=A.x;
    xmax=B.x;
  }
    else
    {
    xmin=B.x;
    xmax=A.x;
    }
 
    if(A.y<B.y)
     {
       ymin=A.y;
       ymax=B.y;
     }
     else
     {
       ymin=B.y;
       ymax=A.y;
     }
for(i=0;i<5;i++)
        {
 
 
            for(j=0;j<5;j++)
               {    if(xmin<kv[i][j].xu&&xmin>kv[i][j].xd&&ymin<kv[i][j].yu&&ymin>kv[i][j].yd)
                printf("Kvadrat tochki A= %d  %d\n",i+1,j+1);
                 else
                  if(xmax<kv[i][j].xu&&xmax>kv[i][j].xd&&ymax<kv[i][j].yu&&ymax>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<5;i++)
    {
 
 
        for(j=0;j<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<xmax&&x>xmin&&y<ymax&&y>ymin&&x<kv[i][j].xu&&x>kv[i][j].xd&&y<kv[i][j].yu&&y>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<xmax&&x>xmin&&y<ymax&&y>ymin&&x<kv[i][j].xu&&x>kv[i][j].xd&&y<kv[i][j].yu&&y>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<5;i++)
     for(j=0;j<5;j++)               if(kv[i][j].xd<xmax&&kv[i][j].xu>xmin&&kv[i][j].yd<ymax&&kv[i][j].yu>ymin)
 
            printf("Kvadrat %d  %d\n",i+1,j+1);
}
     getch();
 
}
Добавлено через 1 минуту 12 секунд
где k-коэффициент диагонали квадрата, l-коэффициент прямой проходящей через эти квадраты
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.06.2009, 16:56
Ответы с готовыми решениями:

Составить функцию движения точки на плоскости
Здравствуйте, на плоскости даны точки А и B. Точка А движется в одном направлении с постоянной скоростью, точка B преследует точку А с...

Определение ускорения движения заданной точки
Здравствуйте подскажите с чего следует начать при &quot; определении ускорения движения заданной точки&quot; вот само уравнение ...

Определение траектории движения материальной точки
Доброго времени суток! Задача следующая: необходимо определить траекторию материальной точки на плоскости при известном изменении...

4
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
12.06.2009, 17:25
В Borland C++ 3.1 в меню Run кнопочки есть такие: "Go to cursor", "Trace into", "Step Over"...
Они предназначены для отладки программы.
И позволяют найти строку с ошибкой.
И еще, в программу, вообще-то, нужно писать комментарии...
Предлагаете гадать на кофейной гуще, что вы там собирались сделать?
0
0 / 0 / 0
Регистрация: 12.06.2009
Сообщений: 3
13.06.2009, 00:19  [ТС]
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
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[i][0].xd=0;
    kv[0][0].xu=kv[0][0].xd+s  
  for(i=0;i<5;i++)
  { 
    for(j=1;j<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<B.x)
  {
    xmin=A.x;
    xmax=B.x;
  }
    else
    {
    xmin=B.x;
    xmax=A.x;
    }
 
    if(A.y<B.y)
     {
       ymin=A.y;
       ymax=B.y;
     }
     else
     {
       ymin=B.y;
       ymax=A.y;
     }
for(i=0;i<5;i++)
        {
 
 
            for(j=0;j<5;j++)
               {    if(xmin<kv[i][j].xu&&xmin>kv[i][j].xd&&ymin<kv[i][j].yu&&ymin>kv[i][j].yd) // если точка принадлежит тому или иному квадрату
                printf("Kvadrat tochki A= %d  %d\n",i+1,j+1);
                 else
                  if(xmax<kv[i][j].xu&&xmax>kv[i][j].xd&&ymax<kv[i][j].yu&&ymax>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); // угловой коэффициент прямой
k=(kv[i][j].yu-kv[i][j].yd)/(kv[i][j].xu-kv[i][j].xd); // угловой коэффициент диагонали координатного квадрата
    for(i=0;i<5;i++)
    {
 
 
       for(j=0;j<5;j++)
        {
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<xmax&&x>xmin&&y<ymax&&y>ymin&&x<kv[i][j].xu&&x>kv[i][j].xd&&y<kv[i][j].yu&&y>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<xmax&&x>xmin&&y<ymax&&y>ymin&&x<kv[i][j].xu&&x>kv[i][j].xd&&y<kv[i][j].yu&&y>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<5;i++)
     for(j=0;j<5;j++)               if(kv[i][j].xd<xmax&&kv[i][j].xu>xmin&&kv[i][j].yd<ymax&&kv[i][j].yu>ymin)
 
            printf("Kvadrat %d  %d\n",i+1,j+1); // вывод координаты квадрата на экран
}
     getch();
 
}
Добавлено через 40 минут 47 секунд
При вводе значения точек А и В программа не вычисляет номера квадратов через которые прошла прямая АВ а просто выходит из экрана вывода результата..
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
13.06.2009, 08:39
очевидно, что это - не рабочий код.
он не может скомпилироваться.
а если и скомпилируется - вылетит сразу после запуска.
C++
1
2
3
    kv[0][0].yu=kv[0][0].yd+s  //а где ;  ???
    kv[i][0].xd=0;                          //что такое i ??? переменная неинициализирована
    kv[0][0].xu=kv[0][0].xd+s  //тоже нет ;  ???
дальше хлеще
C++
1
2
3
4
5
6
7
8
9
10
11
12
 for(i=0;i<5;i++)
  { 
    for(j=1;j<5;j++)
   {
       kv[i][j].xd=kv[i][j-1].xu;
          kv[i][j].yd=kv[i-1][j].yu;   //при первом проходе здесь i = 0. а куда указывает i-1 ??? =-O
 
       kv[i][j].xu=kv[i][j-1].xu+s;
          kv[i][j].yu=kv[i-1][j].yu; // i =0; i-1 ??
  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);
} 
  }
дальше даже не рассматриваю.
система скорее всего вылетит, поскольку обращение идет за границу массива, и перетирает что-то еще.

можно увидеть с чем вы НА САМОМ ДЕЛЕ работаете?
разве сложно скопировать текст из файла cpp в строку сообщения??
0
0 / 0 / 0
Регистрация: 12.06.2009
Сообщений: 3
13.06.2009, 19:12  [ТС]
вот более менее отлаженная программа:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#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=0,j=0;
 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(j=1;j<5;j++)
     {
      i=0;
      kv[i][j].xd=kv[i][j-1].xu;
      kv[i][j].xu=kv[i][j].xd+s;
      kv[i][j].yd=0;
      kv[i][j].yu=kv[i][j].yd+s;
     }
 
 
  for(i=1;i<5;i++)
  {
   
   for(j=1;j<5;j++)
     {
     
      kv[i][j].xd=kv[0][j].xd;
      kv[i][j].xu=kv[0][j].xu;
      kv[i][j].yd=kv[i-1][j].yu;
      kv[i][j].yu=kv[i][j].yd+s;
           
     }
   }
 
 
   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<B.x)
  {
    xmin=A.x;
    xmax=B.x;
  }
    else
    {
    xmin=B.x;
    xmax=A.x;
    }
 
    if(A.y<B.y)
     {
       ymin=A.y;
       ymax=B.y;
     }
     else
     {
       ymin=B.y;
       ymax=A.y;
     }
for(i=0;i<5;i++)
        {
 
 
            for(j=0;j<5;j++)
               {    if(xmin<kv[i][j].xu&&xmin>kv[i][j].xd&&ymin<kv[i][j].yu&&ymin>kv[i][j].yd)
                printf("Kvadrat tochki A= %d  %d\n",i+1,j+1);
                 else
                  if(xmax<kv[i][j].xu&&xmax>kv[i][j].xd&&ymax<kv[i][j].yu&&ymax>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<5;i++)
    {
 
 
        for(j=0;j<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<xmax&&x>xmin&&y<ymax&&y>ymin&&x<kv[i][j].xu&&x>kv[i][j].xd&&y<kv[i][j].yu&&y>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<xmax&&x>xmin&&y<ymax&&y>ymin&&x<kv[i][j].xu&&x>kv[i][j].xd&&y<kv[i][j].yu&&y>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<5;i++)
     for(j=0;j<5;j++)
            if(kv[i][j].xd<xmax&&kv[i][j].xu>xmin&&kv[i][j].yd<ymax&&kv[i][j].yu>ymin)
            {
            printf("Kvadrat %d  %d\n",i+1,j+1);}
}
     getch();
 
}
теперь надо исключить повторения в выводе квадрата и показать квадраты если прямая движется параллельно диагоналям квадрата.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.06.2009, 19:12
Помогаю со студенческими работами здесь

Определение точки в плоскости
Даны две точки на плоскости. Определить «самую левую», «самую правую», «самую верхнюю», «самую нижнюю».

Определение расстояния от точки до плоскости
Определить расстояние от точки А до заданной плоскости, помогите пожалуйста сделать, мне еще несколько задач осталось принести, обязательно...

Определение скорости и ускорения точки по заданным уравнениям ее движения.
Задание 4. Определение скорости и ускорения точки по заданным уравнениям ее движения. По заданным уравнениям движения установить вид...

Определение принадлежности точки части плоскости

Определение принадлежности точки к заштрихованной плоскости
Даны действительные числа х, у. Определить принадлежит ли точка с координатами (х;у) заштрихованной части плоскости. Фигура изображена в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru