Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Sumar Vectores con funciones

Estas en el tema de Sumar Vectores con funciones en el foro de C/C++ en Foros del Web. Hola, disculpen, estoy tratando de hacer este programa utilizando la memoria dinámica y funciones sin embargo al momento de mostrar el resultado, éste siempre es ...
  #1 (permalink)  
Antiguo 03/06/2015, 20:23
 
Fecha de Ingreso: junio-2015
Mensajes: 1
Antigüedad: 8 años, 10 meses
Puntos: 0
Sumar Vectores con funciones

Hola, disculpen, estoy tratando de hacer este programa utilizando la memoria dinámica y funciones sin embargo al momento de mostrar el resultado, éste siempre es 0 en todas las posiciones del vector suma

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

int vectorsuma(int *V1,int *V2,int *RE, int taman);

main ()
{
int *VE1, *VE2, *R, tam, i;

printf("Ingrese la longitud de los vectores:");
scanf("%d",&tam);

VE1= (int *) calloc (tam, sizeof(int) );

VE2= (int *) calloc (tam, sizeof(int) );

R= (int *) calloc (tam, sizeof(int) );

printf("\nIngresa los valores del primer vector");
for(i=0;i<tam;i++)
{
printf("\nPosicion[%d]:",i);
scanf("%d",&VE1[i]);
}

printf("\nIngresa los valores del segundo vector");
for(i=0;i<tam;i++)
{

printf("\nPosicion[%d]:",i);
scanf("%d",&VE2[i]);
}

printf("\nLa suma de los vectores es: ");
for(i=0;i<tam;i++)
{
printf("\nResultado posicion [%d]: %d",i, /*VE1[i]+VE2[i];)*/vectorsuma(VE1,VE2,R,tam));
}

}

int vectorsuma(int *V1,int *V2, int *RE, int taman)
{
int i;

V1=(int*)calloc(taman,sizeof(int));
V2=(int*)calloc(taman,sizeof(int));
RE=(int*)calloc(taman,sizeof(int));


for(i=0;taman;i++)
{

RE[i]= 1 [i] 2;[i]
return RE[i];
}


}
  #2 (permalink)  
Antiguo 04/06/2015, 08:32
 
Fecha de Ingreso: mayo-2015
Mensajes: 19
Antigüedad: 9 años
Puntos: 0
Respuesta: Sumar Vectores con funciones

Haces bastantes cosas erróneas, pasas los vectores como argumento a la función y vuelves a reservarles la memoria. Para empezar:
- Los vectores V1 y V2 está bien que los reserves en main(), el tercero de la suma solo resérvalo en memoria en la función suma.
- Una vez hecho, al pasarlos por referencia en la función suma, no hace falta que V1 y V2 vuelvan a reservarse, estás asignando nueva memoria para esos vectores y en realidad para no darla ningun uso.
- Si quieres que la función devuelva en cada llamada, el resultado de X posición, no hagas un bucle dentro de la función suma y mucho menos meter el return en el bucle.

Te dejo la solución aqui, cambiando el número de argumentos a pasar a la función suma:
Código:
#include<stdio.h>
#include<stdlib.h>

int vectorsuma(int *V1,int *V2,int *RE,int taman, int pos );

int main ()
{
    int *VE1, *VE2, *R, tam, i;
    
    printf("Ingrese la longitud de los vectores:");
    scanf("%d",&tam);
    
    VE1= (int *) calloc (tam, sizeof(int) );
    
    VE2= (int *) calloc (tam, sizeof(int) );
    
    printf("\nIngresa los valores del primer vector");
    for(i=0;i<tam;i++)
    {
        printf("\nPosicion[%d]:",i);
        scanf("%d",&VE1[i]);
    }
    
    printf("\nIngresa los valores del segundo vector");
    for(i=0;i<tam;i++)
    {
        
        printf("\nPosicion[%d]:",i);
        scanf("%d",&VE2[i]);
    }
    
    printf("\nLa suma de los vectores es: ");
    for(i=0;i<tam;i++)
    {
        printf("\nResultado posicion [%d]: %d",i, /*VE1[i]+VE2[i];)*/vectorsuma(VE1,VE2,R, tam, i));
    }
    
}

int vectorsuma(int *V1,int *V2, int *RE,int taman, int pos)
{
    
    RE=(int*)calloc(taman,sizeof(int));
        
        RE[pos]= V1[pos] +V2[pos];
        return RE[pos];
}
  #3 (permalink)  
Antiguo 04/06/2015, 14:37
 
Fecha de Ingreso: junio-2015
Mensajes: 2
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Sumar Vectores con funciones

También es recomendable comprobar que la reservar de memoria dinámica se realizan correctamente, por ello podemos hacer un par de cambios:
1. Inicializar los punteros que se utilizan a NULL
2. realizar una comprobación después de la reservar para ver si el puntero es NULL, puesto que las funciones de reserva de memoria dinámica devuelven NULL en caso de error.

Con estas dos modificaciones evitas que en el caso de que en tiempo de ejecución se realice una mala reserva de memoria el programa aborte con error, por violación de segmento.

El código tras estas dos modificaciones seria:

Código C:
Ver original
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int vectorsuma(int *V1,int *V2,int *RE,int taman, int pos );
  5.  
  6. int main ()
  7. {
  8.     //Linea cambiada
  9.     int * VE1 = NULL, *VE2 = NULL, *R = NULL, tam, i;
  10.    
  11.     printf("Ingrese la longitud de los vectores:");
  12.     scanf("%d",&tam);
  13.   //Linea cambiada  
  14.     if((VE1= (int *) calloc (tam, sizeof(int) )) == NULL){
  15. #ifdef DEBUG
  16.            fprintf(stderr, "Error, no se pudo reservar memoria dinamica.\n");
  17. #endif
  18.            return 0;
  19. }
  20.     //Linea cambiada
  21.     if((VE2= (int *) calloc (tam, sizeof(int) )) == NULL){
  22. #ifdef DEBUG
  23.            fprintf(stderr, "Error, no se pudo reservar memoria dinamica.\n");
  24. #endif
  25.            free(VE1);
  26.            return 0;
  27. }
  28.    
  29.     printf("\nIngresa los valores del primer vector");
  30.     for(i=0;i<tam;i++)
  31.     {
  32.         printf("\nPosicion[%d]:",i);
  33.         scanf("%d",&VE1[i]);
  34.     }
  35.    
  36.     printf("\nIngresa los valores del segundo vector");
  37.     for(i=0;i<tam;i++)
  38.     {
  39.        
  40.         printf("\nPosicion[%d]:",i);
  41.         scanf("%d",&VE2[i]);
  42.     }
  43.    
  44.     printf("\nLa suma de los vectores es: ");
  45.     for(i=0;i<tam;i++)
  46.     {
  47.         printf("\nResultado posicion [%d]: %d",i, /*VE1[i]+VE2[i];)*/vectorsuma(VE1,VE2,R, tam, i));
  48.     }
  49.    
  50. }
  51.  
  52. int vectorsuma(int *V1,int *V2, int *RE,int taman, int pos)
  53. {
  54.    
  55.     RE=(int*)calloc(taman,sizeof(int));
  56.        
  57.         RE[pos]= V1[pos] +V2[pos];
  58.         return RE[pos];}

Última edición por tote_skyria; 05/06/2015 a las 07:30

Etiquetas: funcion, funciones, int, programa, vectores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:42.