ищет максимум в массиве структур - PullRequest
0 голосов
/ 07 февраля 2012

Я только начинающий в стадии обучения.

Я должен организовать структуру point (x, y, z), чтобы эта структура p[n]имеет точку с наибольшим значением x.Мой метод правильный?Если нет, есть ли более простые способы сделать это?

struct point 
{
    float x;
    float y;
} p[1000];

void sortptx(struct point *t, int ctr);  

int main()
{
    int n = 100;  
    sortptx(&p, n);  
    return 0;  
}  

void sortptx(struct point *t, int ctr)  
{
    float temp;  
    int i;  
    for(i = 0; i < ctr-1; i++)  
    {
        if (t[ctr]->x < t[i]->x)  
        {
            temp = t[ctr]->x;  
            t[ctr]->x = t[i]->x;  
            t[i]->x = temp;  
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 07 февраля 2012

Из того, что я понимаю, вы не хотите сортировать, но найдите point с максимальным x и убедитесь, что оно хранится в p[n-1].

struct point 
{
    float x;
    float y;
} p[1000];

Вот как этоможет выглядеть так:

void max(struct point *t, int ctr)  
{ 
    struct point temp;  
    int i;  
    for(i = 0; i < (ctr - 1); i++)  
    { 
        if (t[ctr - 1].x < t[i].x)  
        { 
            temp = t[ctr - 1];  
            t[ctr - 1] = t[i];  
            t[i] = temp;  
        }
    }  
}

Эта функция принимает struct point *t в качестве аргумента, который является указателем на первый point, как и p.t[i] равно struct point в индексе i (не указатель на struct point), поэтому вы используете . вместо -> при доступе к его членам.И поскольку вы индексируете с нуля, последний элемент массива размером n имеет индекс n-1, то есть место, где будет храниться struct point с самым высоким x.

Пример:

int main ()  
{ 
    for(int i = 0; i < 99; i++)
    {
        p[i].x = 1;
        p[i].y = 3;
    }
    p[4].x = 7;

    int n = 100;  
    max(p, n);  

    cout << p[n - 1].x;

    return 0;  
}  

вывод: 7

0 голосов
/ 07 февраля 2012

Здесь есть как минимум несколько ошибок:

  1. Как уже упоминалось в комментариях, struct point *t является либо указателем на один struct point, либо массивом точек. Это , а не указатель на массив указателей на struct point. Так что t[i]->x должно быть t[i].x.

  2. Если ctr предназначен для длины массива точек, t[ctr] будет запускаться с конца массива и может получить доступ к неинициализированной памяти. В этом случае t[ctr-1] будет последним элементом массива.

  3. Вместо того, чтобы менять местами целые точки, вы просто меняете координаты x.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...