Ayuda uso de punteros.

Iniciado por laurinhabig0, 20 Noviembre 2017, 18:38 PM

0 Miembros y 1 Visitante están viendo este tema.

laurinhabig0

Necesito ayuda con este fragmento de código:

#include <stdio.h>

int *maximo(int vec[],int num){
    int *pmax = &vec[0];
    for (int i=0;i<num-1;i++){
        if(vec[i]<vec[i+1]){
            pmax++;
        }
    }
   
    return pmax;
}

int main() {
    int N;
       
    printf("Introduza o número de elementos do vector:\n");
    scanf("%d",&N);
       
    while(N<1){
    printf("ERRO. Introduza un número de elementos válido:\n");
    scanf("%d",&N);
    }
   
    int v[N];
   
    for(int i=0;i<N;i++){
        printf("Introduza un enteiro para a posición v[%d]:\n",i);
        scanf("%d",&v[i]);
    }
   
    printf("O máximo é %d\n",*maximo(v,N));
}


El ejercicio consiste en calcular el máximo de un vector de enteros con una función que se encuentre fuera del main y que devuelva un puntero a la posición del máximo. El código compila sin problemas pero al ejecutarlo falla en el cálculo del máximo, a ver si me echáis una mano y veis lo que está mal :( muchas gracias de antemano!!

calantra

#1
int *maximo(int vec[],int num){
   int *pmax = &vec[0];
   int valormi=vec[0];
   for (int i=1;i<num;i++){
       if(vec[i]>valormi){
           valormi=vec[i];
           pmax=&vec[i];
       }
   }

   return pmax;
}


De nada.
P.D. valormi representa el valor Máximo Inicial. Se actualiza cada vez que encuentra un numero mayor, en ese momento guarda la dirección del puntero del vector actual en pmax. En tu código avanzaba pmax siempre que el siguiente número al actual controlado fuera menor, incluso si los anteriores fueran mayores, apuntando erróneamente al número incorrecto.

laurinhabig0