Autor
|
Tema: Ayuda con ejercicio (Leído 1,671 veces)
|
NicolasPileci
Desconectado
Mensajes: 32
|
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() { 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!
|
|
|
En línea
|
|
|
|
kub0x
Enlightenment Seeker
Colaborador
Desconectado
Mensajes: 1.486
S3C M4NI4C
|
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.
|
|
|
En línea
|
|
|
|
dijsktra
Desconectado
Mensajes: 110
Mr Edsger Dijsktra (Tribute to)
|
... 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; }
|
|
« Última modificación: 20 Junio 2018, 23:58 pm por dijsktra »
|
En línea
|
Si la depuración es el proceso de eliminar fallos en el software, entonces programar debe ser el proceso de ponerlos dentro. (Edsger Dijsktra)
|
|
|
kub0x
Enlightenment Seeker
Colaborador
Desconectado
Mensajes: 1.486
S3C M4NI4C
|
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.
|
|
|
En línea
|
|
|
|
NicolasPileci
Desconectado
Mensajes: 32
|
Muchas gracias a ambos!
Saludos.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Ayuda] Ejercicio C 100
Ejercicios
|
Dem0ny
|
2
|
6,033
|
19 Diciembre 2007, 22:45 pm
por Dem0ny
|
|
|
Ayuda co un ejercicio de C#
.NET (C#, VB.NET, ASP)
|
hitori batusai
|
2
|
5,347
|
22 Febrero 2008, 01:53 am
por hitori batusai
|
|
|
Ayuda con ejercicio de VB
Programación Visual Basic
|
guada_sp
|
5
|
3,342
|
8 Marzo 2008, 02:54 am
por jackl007
|
|
|
Ayuda con ejercicio
.NET (C#, VB.NET, ASP)
|
elbrunosimpson
|
4
|
3,511
|
4 Septiembre 2008, 23:16 pm
por Meta
|
|
|
Ayuda ejercicio de Pascal, cuando uno no lo ve claro pide ayuda
Programación General
|
manu3742
|
1
|
3,235
|
31 Marzo 2011, 15:43 pm
por d(-_-)b
|
|