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

Тема в разделе "Общие вопросы по С и С++", создана пользователем Net, 8 сен 2005.

Статус темы:
Закрыта.
  1. Net

    Net Гость

    В головном модуле задать ряд целых чисел, являющихся координатами точек на плоскости (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 (только англ)

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

    Guest Гость

    Зачем тебе двумерный массив?

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

    Код (Text):
    /* объявление структуры - точки */
    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, то угол прямой.

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

    Net Гость

    Большое спасибо
     
  5. Net

    Net Гость

    <!--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]
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей