C/Visual C - Errores con punteros

 
Vista:

Errores con punteros

Publicado por Elisa (1 intervención) el 18/08/2006 12:09:06
Hola!intento usar el algoritmo divide y venceras para hallar el mayor de un vector. La restriccion es usar los metodos void(guardando la solucion en las cabeceras de los metodos). Tengo el siguiente fragmento de codigo y me devuelve un numero muy raro, creo que el problema esta en el uso de punteros. Por favor diganme que puedo hacer!!!Muchisimas gracias de antemano!!!

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

void llenar(int v[],int n){
int i;
for (i=0;i<n;i++){
v[i]=rand()%20;
}
}

void mostrarvector(int v[],int n){
int i;
for(i=0;i<n;i++){
printf("%d ",v[i]);
}
}

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;
}

(Ejecutarlo, ya vereis que raro es esto)Gracias!!!!!!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Errores con punteros

Publicado por Eduardo Negrete (76 intervenciones) el 19/08/2006 19:55:06
Mira El Algoritmo No Lo conozco Pero, Para Mi Que El Problema Esta En Lo Siguiente

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 = /
}

Declaras Estas Variables
int t s1, s2, sol, me;

Para Las Variables sol Y me No hay Problema
Pero Usas s1 Y s2 en la Función Combinar
Pero Nunca Las Inicializas

Y Recuerda Que Una Variable Sin Inicializar, O Esta En Cero Que Quiere Decir Que Tomo Una Dirección De Memoria Vacia O Hay Algo En Esa Direccion de memoria De Algun Otro Programa Que Se Hubiera Estado Usando Anteriormente

Checate Bien El Algoritmo Quiza Te Falto Poner Halgo Por Ahi
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Errores con punteros

Publicado por endless_loop (11 intervenciones) el 19/08/2006 20:14:39
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;
}

el error esta cuando devolves

return v[iz];

en ves de

*s = v[iz];
return 0; //o lo cambias a void en ves de int y le pones simplemente return;

las llamadas a

mayor(v,iz,me,&s1);
mayor(v,me+1,de,&s2);

nunca cambian los valores s1 y s2

entonces estos quedan como aparecieron en la pila: totalmente impredecibles.

cambiando el return x lo q te dije, el problema se arregla.

salu2 :).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar