Помогите реализовать прогу на С

  • Автор темы Net
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

Net

Гость
#1
В головном модуле задать ряд целых чисел, являющихся координатами точек на плоскости (x1 y1 x2 y2.....) и вызвать функцию. Ее первый параметр - целое четное число (n), задающее количество введенных точек.
Последующие параметры - целые числа, задающие значение этих точек. В функции выяснить, найдутся ли среди этих точек четыре таких, которые являются вершинами квадрата. Вывести координаты вершин квадрата в головном млдуле. Индексы при работе с массивами не использовать.

Подскожите как лучше выделить паметь под двумерный массив и как с ним работать.
И как лучше находить квадрат :)
 
?

????

Гость
#2
Для: Net
грызи гранит сам!
_http://anatolix.naumen.ru/Books/CPP4RealProgrammers?v=rw4 (англ, рус)
_http://anatolix.naumen.ru/Books/EssentialCPP?v=185g (только англ)
_http://anatolix.naumen.ru/Books/CPPPrimer?v=6au (англ, рус)
_http://anatolix.naumen.ru/Books/CPPProgLang?v=18kr (только англ)

Будут конкретные вопросы - милости просим.
 
G

Guest

Гость
#3
Зачем тебе двумерный массив?

Структуры использовать можно? Если да, то делай так:

Код:
/* объявление структуры - точки */
typedef struct _point {
 int x, y;
} point;

/* объявляем указатель на массив точек */
point* array;

/* здесь вводится количество точек (count)*/
...

/* выделяем память под массив точек */
array = (point*) malloc( count * sizeof(point) );

/* вводим точки */
...

/* проходим по всем точкам, ища квадрат (все переменные - указатели):
first - первая точка квадрата
second - вторая
third - третья
fourth - четвёртая
end - последняя точка в массиве */
point *first, *second, *third, *fourth, *end;

end = array + (count - 1);

for ( first=array; first<=end; first++ )
 for ( second=first+1; second<=end; second++ )
   for ( third=second+1; third<=end; third++ )
     for ( fourth=third+1; fourth<=end; fourth++ )
       /* проверяем, является ли фигура квадрата и выводим её */

/* освобождаем память */
free( array );
Как определить, является ли четырёхугольник квадратом. Вспоминаем математику:
1. У квадрата все стороны равны (т.е. квадрат является ромбом)
2. Все углы квадрата прямые (т.е. квадрат является прямоугольником)

1. Тебе нужно найти все стороны квадрата и сравнить их. Как найти сторону (прямую между точками A и :D:
X = A.X - B.X
Y = A.Y - B.Y
сторона = корень( X*X + Y*Y )

2. Как определить, является ли угол A B C прямым?
Для этого можно использовать векторное произведение:
AB * BC = AB.X * BC.X + AB.Y * BC.Y
если AB * BC равно 0, то угол прямой.

Вот и всё. Если будут вопросы - задавай.
 
N

Net

Гость
#5
<!--QuoteBegin-Guest+15:09:2005, 08:03 -->
<span class="vbquote">(Guest @ 15:09:2005, 08:03 )</span><!--QuoteEBegin-->Нахождения квадрата реализовал так

int* kv(int n,pic *mas)
{ int x,y,xy,yz,zw,wx;
pic *f,*s,*t,*fo,*e;
int *top=(int*)malloc(n*2*sizeof(int));
e=mas+(n-1);
for(f=mas;f<=e;f++)
{
for(s=f+1;s<=e;s++)
{
for(t=s+1;t<=e;t++)
{
for(fo=t+1;fo<=e;fo++){
x=f->x-s->x;
y=f->y-s->y;
xy=sqrt(x*x+y*y);
x=s->x-t->x;
y=s->y-t->y;
yz=sqrt(x*x+y*y);
x=t->x-fo->x;
y=t->y-fo->y;
zw=sqrt(x*x+y*y);
x=fo->x-f->x;
y=fo->y-f->y;
wx=sqrt(x*x+y*y);
if(xy==yz && zw==wx){
*(top+0)=f->x;
*(top+1)=f->y;
*(top+2)=s->x;
*(top+3)=s->y;
*(top+4)=t->x;
*(top+5)=t->y;
*(top+6)=fo->x;
*(top+7)=fo->y;
return top;
}


}}}}

}
просто мне нужно в головном модуле вывести координаты точек но я немогу додуматься как их лучше туда передать
И если ввести коорд. двух квадрататов печатает только первый

Посоветуй если будет время чтонибудь, Заранее благодарен
[snapback]24848" rel="nofollow" target="_blank[/snapback]​
[/quote]
 
Статус
Закрыто для дальнейших ответов.