Estimados,
buenas noches.
Estoy intentando crear un programa que me imprima el mayor elemento de un vector:
#include <stdio.h>
#include <stdlib.h>
int buscarMayor(int *p);
int main()
{
system("color 0a");
int vec[5] = {1, 4, 5, 2, 2},
mayor;
mayor = buscarMayor(vec);
printf("El mayor es: %d", mayor);
return 0;
}
int buscarMayor(int *p)
{
int may = *p;
while(*p)
if (*p > may)
may = *p;
p++;
return may;
}
El código compila bien pero al ejecutarlo el programa queda en negro y no sucede nada.
Muchas gracias!
Citar
El código compila bien pero al ejecutarlo el programa queda en negro y no sucede nada.
El problema es que tienes un bucle infinito en buscarMayor, el while no tiene llaves "{" por lo tanto solo ejecuta el if y nunca incrementará la posición del puntero del vector.
El segundo problema es que haces while(*p), ¿qué te asegura que el vector p en la memoria de la pila, después de 5 posiciones contenga un 0? Normalmente contendrá información arbitraria, lo mejor es decirle al algoritmo que recorra 5 posiciones, es decir el número de elementos del vector.
Así conseguirás que funcione:
#include <stdio.h>
#include <stdlib.h>
int buscarMayor(int *p, int n);
int main()
{
int vec[5] = {1, 4, 5, 2, 2},
mayor;
mayor = buscarMayor(vec,5);
printf("El mayor es: %d", mayor);
return 0;
}
int buscarMayor(int *p, int n)
{
int may = *p;
while(--n){
if (*p > may)
may = *p;
p++;
}
return may;
}
Saludos.
Cita de: kub0x en 19 Junio 2018, 03:41 AM
...
Así conseguirás que funcione:
#include <stdio.h>
#include <stdlib.h>
int buscarMayor(int *p, int n);
int main()
{
int vec[5] = {1, 4, 5, 2, 2},
mayor;
mayor = buscarMayor(vec,5);
printf("El mayor es: %d", mayor);
return 0;
}
int buscarMayor(int *p, int n)
{
int may = *p;
while(--n){
if (*p > may)
may = *p;
p++;
}
return may;
}
Saludos.
Aún est mal. Valga el contraejemplo:
int vec[5] = {1, 4, 2, 2, 5}
Devolverá 4, cuando el mayor es el 5.
Sólo hay que hacer un pequeño cambio,
int may = *p++; // mind the post-increment
O alternativamente, anticipar el incremento de p en el cuerpo
int buscarMayor( int *p, int n)
{
int may = *p;
while(--n){
if (*++p > may) // mind the pre-increment
may = *p;
}
return may;
}
Así es, al pre decrementar n, tomará 4 iteraciones y en "0" sale del while dejando el último elemento del vector sin evaluar. La solución propuesta es tomar "may" como el primer elemento y empezar a recorrer el array desde el 2º elemento en busca del mayor.
Saludos.
Muchas gracias a ambos!
Saludos.