Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2009, 13:38   #71
Эмиль_C++
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 61
По умолчанию

да, что я вам и выше хотел объяснить.. только я не знаю как их присвоить.. может ввести в структуру int i, j; и выводить на экран А.i+1, A.j+1; B.i+1, B.j+1 и сравнить координаты и вывести 1 раз? там привыводе на экран при k=l нужно какое то условие приписать
Эмиль_C++ вне форума Ответить с цитированием
Старый 13.06.2009, 13:48   #72
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Эмиль_C++
только я не знаю как их присвоить.. может ввести в структуру int i, j; и выводить на экран А.i+1, A.j+1; B.i+1, B.j+1 и сравнить координаты и вывести 1 раз?
Можно и просто 4 переменные завести. И перед выводом
Код:
printf("Kvadrat %d  %d\n",i+1,j+1);
проверять, не равны ли i и j тем, что запомнили (для A и B). Если нет, то все ок - выводим.

На счет параллельности диагонали:
в начале вот так вот сделайте:
Код:
l=(B.y-A.y)/(B.x-A.x);
k=(kv[0][0].yu-kv[0][0].yd)/(kv[0][0].xu-kv[0][0].xd);
if(fabs(k)==fabs(l)) k=(kv[0][0].yd-kv[0][0].yu)/(kv[0][0].xd-kv[0][0].xu);
И из цикла тогда нужно будет убрать
Код:
 if(fabs(k)!=fabs(l))
и то, что с ним связано.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 13.06.2009, 16:42   #73
Эмиль_C++
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 61
По умолчанию

я создал сетку. еще дописал: приравнял i=i1, j=j1 и т.д . Когда прямая параллельная диагонали дописал условие.
Код:
#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, i1,j1,i2,j2;
 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;
      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);

  for(i=0;i<5;i++)
     {
       for(j=0;j<5;j++)
	 {
           if(A.x<kv[i][j].xu&&A.x>kv[i][j].xd&&A.y<kv[i][j].yu&&A.y>kv[i][j].yd)
                    printf("Kvadrat tochki A= %d  %d\n",i+1,j+1);
		    i=i1;
		    j=j1;
	    else
		  if(B.x<kv[i][j].xu&&B.x>kv[i][j].xd&&B.y<kv[i][j].yu&&B.y>kv[i][j].yd)
		     {
                     printf ("Kvadrat tochki B= %d  %d\n",i+1,j+1);
		     i=i2;
                           j=j2;
                     }

	 }


     }

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<B.x&&x>A.x&&y<B.y&&y>A.y&&x<kv[i][j].xu&&x>kv[i][j].xd&&y<kv[i][j].yu&&y>kv[i][j].yd)
			     {
                                if (i!=i1&&i!=i2&&j!=j1&&j!=j2)
			      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<B.x&&x>A.x&&y<B.y&&y>A.y&&x<kv[i][j].xu&&x>kv[i][j].xd&&y<kv[i][j].yu&&y>kv[i][j].yd)
			       	{
                                   if (i!=i1&&i!=i2&&j!=j1&&j!=j2)
				  printf("Kvadrat %d  %d\n",i+1,j+1);
				}
			   }
			}
			else
			{   k=1;
                             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<B.x&&x>A.x&&y<B.y&&y>A.y&&x<kv[i][j].xu&&x>kv[i][j].xd&&y<kv[i][j].yu&&y>kv[i][j].yd)
                              {
                            if (i!=i1&&i!=i2&&j!=j1&&j!=j2)
			  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<B.x && kv[i][j].xu>=A.x && kv[i][j].yd<B.y && kv[i][j].yu>=A.y)
          if (i!=i1&&i!=i2&&j!=j1&&j!=j2)
         printf("Kvadrat %d  %d\n",i+1,j+1);
 }


 if(l==0)
 {
  for(i=0;i<5;i++)
     {
      for(j=0;j<5;j++)
           if (kv[i][j].xd<B.x&&kv[i][j].xu>A.x&&kv[i][j].yd<B.y&&kv[i][j].yu>A.y)
                 if (i!=i1&&i!=i2&&j!=j1&&j!=j2)
	         printf("Kvadrat %d  %d\n",i+1,j+1);
     }
 }
     getch();
}
Эмиль_C++ вне форума Ответить с цитированием
Старый 13.06.2009, 16:55   #74
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
 {
           if(A.x<kv[i][j].xu&&A.x>kv[i][j].xd&&A.y<kv[i][j].yu&&A.y>kv[i][j].yd)
                    printf("Kvadrat tochki A= %d  %d\n",i+1,j+1);
		    i=i1;
		    j=j1;
	    else
		  if(B.x<kv[i][j].xu&&B.x>kv[i][j].xd&&B.y<kv[i][j].yu&&B.y>kv[i][j].yd)
		     {
                     printf ("Kvadrat tochki B= %d  %d\n",i+1,j+1);
		     i=i2;
                           j=j2;
                     }
Это что? Вам не кажется, что нужно наоборот присваивать?
И явно пропущены скобки.
Цитата:
Когда прямая параллельная диагонали дописал условие.
Где?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 13.06.2009, 17:16   #75
Эмиль_C++
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 61
По умолчанию

Код:
{
           if(A.x<kv[i][j].xu&&A.x>kv[i][j].xd&&A.y<kv[i][j].yu&&A.y>kv[i][j].yd)
                   { printf("Kvadrat tochki A= %d  %d\n",i+1,j+1);
		    i1=i;
		    j1=j;
                   }
	    else
		{  if(B.x<kv[i][j].xu&&B.x>kv[i][j].xd&&B.y<kv[i][j].yu&&B.y>kv[i][j].yd)
		     {
                     printf ("Kvadrat tochki B= %d  %d\n",i+1,j+1);
		     i2=i;
                           j2=j;
                      }
                     }
вот так?
когда параллельна :
Код:
else
			{   k=1;
                             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<B.x&&x>A.x&&y<B.y&&y>A.y&&x<kv[i][j].xu&&x>kv[i][j].xd&&y<kv[i][j].yu&&y>kv[i][j].yd)
                              {
                            if (i!=i1&&i!=i2&&j!=j1&&j!=j2)
			  printf("Kvadrat %d  %d\n",i+1,j+1);
                              }
			}
Эмиль_C++ вне форума Ответить с цитированием
Старый 13.06.2009, 17:24   #76
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
вот так?
Да.

А не проще ли было сделать, как я предложил в 72-м посте?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 13.06.2009, 17:57   #77
Эмиль_C++
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 61
По умолчанию

Это Вы про диагонали имеете ввиду?
Эмиль_C++ вне форума Ответить с цитированием
Старый 13.06.2009, 18:00   #78
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Эмиль_C++
Это Вы про диагонали имеете ввиду?
Да. В вашем нынешнем варианте вы в цикле постоянно пересчитываете k.

И еще:
Код:
if(k!=l||-k!=l)
почему ж "или"? Зачем вы потерли исправления в коде, которые я сделал в предыдущих постах?
Это условие будет выполняться всегда.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 13.06.2009, 18:18   #79
Эмиль_C++
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 61
По умолчанию

У Вас в вышеизложенном токсте программы не выводит значение при (0.5;0.5) (4.5;0.5)т.е при параллельн ОХ
Эмиль_C++ вне форума Ответить с цитированием
Старый 13.06.2009, 19:35   #80
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
У Вас в вышеизложенном токсте программы не выводит значение при (0.5;0.5) (4.5;0.5)т.е при параллельн ОХ
Да, но мы уже 2 страницы обсуждаем то, как это исправить. А вы, исправляя новые, возвращаете старые ошибки.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нахождение трассы движения точки на плоскости Эмиль_C++ Общие вопросы C/C++ 4 20.04.2009 14:26
Анимация движения точки по траектории ariant Microsoft Office Excel 4 25.12.2008 06:28
Уравнение плоскости eoln Помощь студентам 5 27.09.2008 09:22
точки плоскости, заданные своими координатами, попадают в круг с радиусом R Jondeer Общие вопросы C/C++ 6 16.06.2008 00:06
Отбражение чисел - точки, это точки, а не запятые, обозначающие дробную часть Дикий Помощь студентам 7 12.05.2008 17:57