elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con ejercicio
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con ejercicio  (Leído 1,671 veces)
NicolasPileci

Desconectado Desconectado

Mensajes: 32



Ver Perfil
Ayuda con ejercicio
« en: 19 Junio 2018, 02:45 am »

Estimados,
buenas noches.

Estoy intentando crear un programa que me imprima el mayor elemento de un vector:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int buscarMayor(int *p);
  5.  
  6. int main()
  7. {
  8.    system("color 0a");
  9.    int vec[5] = {1, 4, 5, 2, 2},
  10.        mayor;
  11.    mayor = buscarMayor(vec);
  12.    printf("El mayor es: %d", mayor);
  13.    return 0;
  14. }
  15.  
  16. int buscarMayor(int *p)
  17. {
  18.    int may = *p;
  19.    while(*p)
  20.        if (*p > may)
  21.            may = *p;
  22.        p++;
  23.    return may;
  24. }

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 Desconectado

Mensajes: 1.486


S3C M4NI4C


Ver Perfil
Re: Ayuda con ejercicio
« Respuesta #1 en: 19 Junio 2018, 03:41 am »

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:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.    int buscarMayor(int *p, int n);
  5.  
  6.    int main()
  7.    {
  8.        int vec[5] = {1, 4, 5, 2, 2},
  9.            mayor;
  10.        mayor = buscarMayor(vec,5);
  11.        printf("El mayor es: %d", mayor);
  12.        return 0;
  13.    }
  14.  
  15.    int buscarMayor(int *p, int n)
  16.    {
  17.        int may = *p;
  18.        while(--n){
  19.            if (*p > may)
  20.                may = *p;
  21.            p++;
  22.        }
  23.        return may;
  24.    }
  25.  

Saludos.


En línea

Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate

dijsktra

Desconectado Desconectado

Mensajes: 110


Mr Edsger Dijsktra (Tribute to)


Ver Perfil
Re: Ayuda con ejercicio
« Respuesta #2 en: 20 Junio 2018, 23:31 pm »


...
Así conseguirás que funcione:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.    int buscarMayor(int *p, int n);
  5.  
  6.    int main()
  7.    {
  8.        int vec[5] = {1, 4, 5, 2, 2},
  9.            mayor;
  10.        mayor = buscarMayor(vec,5);
  11.        printf("El mayor es: %d", mayor);
  12.        return 0;
  13.    }
  14.  
  15.    int buscarMayor(int *p, int n)
  16.    {
  17.        int may = *p;
  18.        while(--n){
  19.            if (*p > may)
  20.                may = *p;
  21.            p++;
  22.        }
  23.        return may;
  24.    }
  25.  

Saludos.

Aún est mal. Valga el contraejemplo:

Código
  1.        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,

Código
  1.       int may = *p++;  // mind the post-increment

O alternativamente, anticipar el incremento de p en el cuerpo
Código
  1. int buscarMayor( int *p, int n)
  2. {
  3.  int may = *p;
  4.  while(--n){
  5.    if (*++p > may) // mind the pre-increment
  6.      may = *p;
  7.  }
  8.  return may;
  9. }

« Ú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 Desconectado

Mensajes: 1.486


S3C M4NI4C


Ver Perfil
Re: Ayuda con ejercicio
« Respuesta #3 en: 21 Junio 2018, 05:48 am »

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

Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate

NicolasPileci

Desconectado Desconectado

Mensajes: 32



Ver Perfil
Re: Ayuda con ejercicio
« Respuesta #4 en: 3 Julio 2018, 01:39 am »

Muchas gracias a ambos!

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Ayuda] Ejercicio C 100
Ejercicios
Dem0ny 2 6,033 Último mensaje 19 Diciembre 2007, 22:45 pm
por Dem0ny
Ayuda co un ejercicio de C#
.NET (C#, VB.NET, ASP)
hitori batusai 2 5,347 Último mensaje 22 Febrero 2008, 01:53 am
por hitori batusai
Ayuda con ejercicio de VB
Programación Visual Basic
guada_sp 5 3,342 Último mensaje 8 Marzo 2008, 02:54 am
por ‭‭‭‭jackl007
Ayuda con ejercicio
.NET (C#, VB.NET, ASP)
elbrunosimpson 4 3,511 Último mensaje 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 Último mensaje 31 Marzo 2011, 15:43 pm
por d(-_-)b
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines