Recién comencé a aprender C, y sería genial si me pudieras ayudar con lo siguiente:

Acabo de escribir un programa que guarda un vector de 4 componentes ingresado por el usuario (usando la función llamada save_vector), lo imprime (usando la función llamada print_vector) y si algún componente es negativo, también lo imprime con todos los componentes en valor absoluto (positivos) usando la función absolute_values.

Sin embargo, no estoy seguro de cómo hacer que la función absolute_values funcione. Las otras dos funciones funcionan bien.

¡Espero leer cualquier sugerencia para mejorar este código! ¡Gracias! :-)

#include <stdio.h>

void print_vector(int N,float * V);
void save_vector(int N,float * V);
void absolute_values(int N, float * V);



int main(void)
{

    const int n=5;
    int i;
    float v[n];

    puts("Enter the 5 components of the vector:");
    save_vector(n, v);

    puts("\nThe vector is:");
    print_vector(n, v);

    puts("\nThe absolute vector is:");
    absolute_values(n, v);

    return 0;
}

void save_vector(int N, float * V)
{
    int i;
    for(i=0;i<N;i++)
        scanf("%f",V+i);
}

void print_vector(int N, float * V)
{
    int i;
    for(i=0;i<N;i++)
        printf(" %.2f ",*(V+i));
}

void absolute_values(int N, float * V)
{
    int i;
    for(i=0;i<N;i++)
      if (*(v+i)<0)
        v[i]=v[i]*(-1);
         printf(" %.2f ",*(V+i));

}
0
Henry 27 abr. 2020 a las 00:02

2 respuestas

La mejor respuesta

Usando V en lugar de v. Y, se pierde la llave {} en el bucle for:

void absolute_values(int N, float * V)
{
    int i;
    for(i=0;i<N;i++){
      if (*(V+i)<0)
        V[i]=V[i]*(-1);
      printf(" %.2f ",*(V+i));
    }

}

Debe usar V[i] en lugar de *(V+i). Ambos están bien, pero V[i] es más fácil de leer el código. No los mezcle, hace que su código sea difícil de leer y comprender.

1
Hitokiri 26 abr. 2020 a las 21:16

Como alternativa a la solución de @Hitokiri, también estoy dejando aquí la función absolute_values pero esta vez usando el operador condicional. Además, siguiendo la sugerencia de @ Hitokiri, estoy usando V[i] porque parece más limpio.

void absolute_values(int N, float * V)
{
    int i;
    for(i=0;i<N;i++)
    {
        printf(" %.2f ", ((V[i]<0)?-V[i]:V[i]));
    }
}
0
Henry 26 abr. 2020 a las 21:31