Member 14814978 Ответов: 1

Массивы в C (установка двойника, равного массиву?


Привет, я пишу серию операторов if, которые определяют, какой набор координат имеет максимальное значение.

У меня есть формула,которая вычисляет максимальное значение z и использует координаты (x, y). Т. е. z= (2*y)+x
это хорошо работает. Затем мне нужно получить его так, чтобы программа сказала мне, какой набор координат она использовала для получения этого значения Z. (есть 3 пары координат).

Координаты даны нам, и я просто хочу, чтобы максимальные координаты были названы новой переменной.

Я не включил весь код, так как он очень длинный, поскольку я делаю там и другие вещи, но я думаю, что дал всю необходимую информацию...

Программа уже успешно рассчитала z0, z1,z2, max
Координаты определяются примерно так в самом начале:
двойной P0 [] = {7,8};
двойной Р1 [] = {2,4};
двойной Р2 [] = {3,2};

Мне просто нужно, чтобы max содержал массив координат, которые дают мне значение для zmax.

Спасибо!!

Что я уже пробовал:

if (zmax==z0){
            max=P0[];
        } else if (zmax==z1){
            max=P1[];
        } else {
            max=P2[];
        }

        printf("ph is %f/n",max[0],max[1]);


НОВАЯ ВЕРСИЯ:
float maxformula (float z0, float z1, float z2, float zmax,float P0[], float P1[], float P2[]);
float maxformula (float z0, float z1, float z2, float zmax,float P0[], float P1[], float P2[]){


    if (zmax==z0){
        printf("zmax is zo");
        double max[]={P0[0],P0[1]};
printf("max is %f %f\n", max[0],max[1]);
    } else if (zmax==z1){
        printf("zmax is z1\n");
        double max[]={P1[0],P1[1]};
        printf("max is %f %f\n", max[0],max[1]);
    } else if (zmax==z2){
        printf("zmax is z2");
        double max[]={P2[0],P2[1]};
printf("max is %f %f\n", max[0],max[1]);
   }

}


В основном:
maxformula(z0,z1,z2,zmax,P0,P1,P2);


По какой-то причине дает мне правильные значения, но x и y переворачиваются (так что max[0] - это y max[1] - это x

1 Ответов

Рейтинг:
2

Richard MacCutchan

Почему вы используете двойные типы для целочисленных значений? Вы можете упростить код до чего-то вроде:

int coords[][2] = { { 7,8}, {2,4}, {3,2} };
int maxi = -1;
int maxz = 0;
for (int i = 0; i < 3; i++)
{
    int z = coords[i][0] + coords[i][1] * 2;  // assuming numbers are x, y
    if (z > maxz)
    {
        // save the maximum z and the index to its co-ordinates
        maxz = z;
        maxi = i;
    }
}
printf("max z: %d, cordinates %d, %d\n", maxz, coords[maxi][0], coords[maxi][1]);


Member 14814978

Спасибо за ответ!

Я использовал двойники, так как этот процесс будет происходить несколько раз, и я не был уверен, что точки останутся целыми числами (после этого есть еще одна формула, которая может изменить точки на десятичные).

Я искал эту формулу, которую можно было бы вызвать и использовать для получения массива.

Я обновил вопрос с моей текущей версией, но по какой-то причине, когда он печатает max в основном, он переворачивает координатные точки...

Richard MacCutchan

Я не уверен, что понимаю, что вы имеете в виду. Код, который я предоставил, мог бы довольно легко использовать двойные типы, если это необходимо. Вам нужно точно определить, какие входные данные должны быть переданы функции и какие выходные данные ожидаются. Первоначальный вопрос состоял только в том, чтобы найти максимальную пару координат.