Ayuda con código para implementar con el algoritmo divide y vencerás el mayor elemento de un vector

Quiero saber cual es el mayor elemento de un vector utilizando divide y vencerás y guardando la solución en las cabeceras de los métodos (es decir, siendo estos void). Creo que tengo un problema con los punteros y por eso no me funciona. Ejecute el siguiente código si es tan amable, ¿por qué me sale ese numero tan largo? ¿Qué puedo hacer?
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void llenar(int v[],int n){
int i;
for (i=0;i<n;i++){
v=rand()%20;
}
}
void mostrarvector(int v[],int n){
int i;
for(i=0;i<n;i++){
printf("%d ",v);
}
}
void combinar(int s1, int s2, int *sol){
if(s1>s2){
*sol=s1;
}
else{
*sol=s2;
}
}
int mayor(int v[],int iz, int de,int *s){
int s1,s2,sol,me;
if(iz==de){
return v[iz];
}
else{
me=(iz+de)/2;
mayor(v,iz,me,&s1);
mayor(v,me+1,de,&s2);
combinar(s1,s2,&sol);
}
*s=sol;
}
int main(){
int n=8;
int v[n];
int s=0;
llenar(v,n);
mostrarvector(v,n);
printf("\n");
mayor(v,0,n-1,&s);
printf("El mayor es: %d",s);
getch();
return 1;
}

1 respuesta

Respuesta
1
/*------------inicio------------*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define SIZE 8
void llenar( int v[], int size )
{
int i;
for ( i = 0; i < size; i++ )
{
v[ i ] = rand() % 20;
}
return;
} // end llenar()
void mostrarVector( int v[], int n )
{
int i;
printf( "Contenido del vector:\n\n" );
for( i = 0; i < n; i++)
{
printf( "%d ", v[ i ] );
} // end for
printf ("\n\n");
return;
} // end mostrarvector
void combinar( int s1, int s2, int *sol )
{
if ( s1 > s2 )
{
*sol = s1;
}
else
{
*sol = s2;
} // end if - else
return;
} // end combinar
int mayor( int v[], int iz, int de, int *s )
{
int s1;
int s2;
int sol;
int me;
if ( iz == de )
{
//return v[ iz ]; Se ha quitado este retorno y ahora si se está alterando
// la variable s
*s = v[ iz ];
return *s;
}
else
{
me = ( iz + de ) / 2;
mayor( v, iz, me, &s1);
mayor(v, me + 1, de, &s2);
// Al mandar s1 y s2 a la función combinar no tienen absolutamente nada
// Así que lo que se está asignando a la variable "sol" no es más
// que el valor que ellas contienen en un principio, o sea basura...
// Todo esto a raíz de que al llamar a la función mayor no se está
// alterando en ningún momento el valor de s1 y s2.
combinar(s1, s2, &sol);
} // end if - else
*s = sol;
return 0;
} // end mayor
int main( void )
{
//int n = VALOR;
int v[ SIZE ];
int s = 0;
llenar( v, SIZE );
mostrarVector( v, SIZE );
mayor(v, 0, SIZE - 1, &s);
printf("El mayor es: %d\n",s);
return 0;
} // end main()
/*------------fin------------*/

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas