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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ver si un vector es un monte
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ver si un vector es un monte  (Leído 1,864 veces)
pacman22

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Ver si un vector es un monte
« en: 31 Octubre 2014, 04:12 am »

Tengo que hacer una función recursiva en c, para saber si un vector de tamaño n es un monte (siempre n siendo par)
Un vector es un monte, si hasta la mitad es creciente, y la otra mitad es decreciente.

Lo pense dividiendo la lista en la mitad(M). Y recorrerla hasta M , preguntando si el elemento i <i+1 , entonces quedaria la recursion como monte(A[] ,i+1,m).
Y la otra mitad , recorrerla dese tamaño hasta M,monte(A[],tam-1,m) , ya que usaria la misma pregunta logica tam<tam-1 . Pero ahi surge el problema, por la lista de la izquierda pregunto con i+1 y aca con tam-1 . Alguna ayudita? Gracias.



En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Ver si un vector es un monte
« Respuesta #1 en: 31 Octubre 2014, 12:49 pm »

.....................................................
Lo pense dividiendo la lista en la mitad(M). Y recorrerla hasta M , preguntando si el elemento i <i+1 , entonces quedaria la recursion como monte(A[] ,i+1,m).
.....................................................

Creo que es liarla eso de dividir el array en dos partes.

Yo invocaría a la función recursiva con algo como:

Código
  1. printf( "\n\t%s.\n\n" , Monte ( num , i , sizeof num / sizeof *num - 1 ) == 1 ? "SI es Monte" : "NO es Monte"  ) ;

Y montaría la función recursiva para que diferencie entre la mitad izquierda y la derecha:



EI: codigo borrado, no hagas tareas.





« Última modificación: 31 Octubre 2014, 13:20 pm por Eternal Idol » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Ver si un vector es un monte
« Respuesta #2 en: 31 Octubre 2014, 17:08 pm »

Tengo que hacer una función recursiva en c, para saber si un vector de tamaño n es un monte (siempre n siendo par)
Un vector es un monte, si hasta la mitad es creciente, y la otra mitad es decreciente.
Como ya te comento leosansan la solución es mas sencilla.

Ya que tienes una lista "a" con un numero par de elementos si utilizamos "i" y "j" como indices para la parte izquierda y derecha (con valores iniciales primero y ultimo respectivamente) la condición limite (todos los elementos procesados formando un monte) es "i + 1 == j".

Si esa condición no se da ello indica que faltan elementos por procesar y lo primero que se debe hacer es verificar que sean mayores:
1) El elemento siguiente de la parte izquierda: "a[ i ] < a[i + 1]".
2) El elemento anterior de la parte derecha: "a[j - 1] > a[ j ]".

Si eso se da hasta el momento tienes un monte, la palabra final la tiene el proceso recursivo (la llamada a función) de los elementos "i + 1" y "j - 1".

Tal vez suene complicado pero no lo es, la función termina como una sola sentencia con tres operadores y cuatro operandos, inténtalo tu solo, presenta los avances y te ayudamos con los problemas que resulten.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Ver si un vector es un monte
« Respuesta #3 en: 31 Octubre 2014, 18:21 pm »

la condición limite (todos los elementos procesados formando un monte) es "i + 1 == j".
....................................................

"Creo", si no me fallan las cuentas, que con la opción de "ó  : i + 2 == j " cubrirías el caso de un numero impar de elementos.

¡¡¡¡ Saluditos! ..... !!!!



En línea

pacman22

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Ver si un vector es un monte
« Respuesta #4 en: 3 Noviembre 2014, 10:48 am »

Que tal esto?

Código
  1. void monte(int a[],int i,int fin)
  2. {
  3. if (i!=(fin/2))
  4. if ((a[i+1]>a[i])&&(a[(fin/2)+i+1]<a[(fin/2)+i]))
  5. monte(a,i+1,fin);
  6. else
  7. printf("\n el vector no es monte ");
  8. else
  9. printf("\n el vector es monte ");
  10. }
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines