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

[SOLUCIONADO] Suma de 2 Vectores en DevC

Estas en el tema de Suma de 2 Vectores en DevC en el foro de C/C++ en Foros del Web. Saludos!!! Quiaiera pedirles el favor me orientaran en el siguiente linea de codigo en DevC "El problema es que para mi esta bien se compila" ...
  #1 (permalink)  
Antiguo 11/05/2014, 00:41
 
Fecha de Ingreso: mayo-2014
Mensajes: 7
Antigüedad: 10 años
Puntos: 0
Pregunta Suma de 2 Vectores en DevC

Saludos!!!

Quiaiera pedirles el favor me orientaran en el siguiente linea de codigo en DevC

"El problema es que para mi esta bien se compila" pero a la hora de usarlo con numeros grandes, la suma no se hace bien, no entiendo porque, creo podria ser un problema al imprimirlos pero no doy, agradesco si me orientan, Gracias de antemano.

Codigo:

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


int main(int argc, char *argv[])

{

int m,i;
int vec1[m];
int vec2[m];
int vecsum[m];


printf("Ingrese el Tamaño de los Vectores a Sumar: \n");
scanf("%d",&m);

printf("Ingrese los Elementos del vector 1: \n");

for(i=0;i<=m;i++){
scanf("%d",&vec1[i]);

}

printf("Ingrese los elementos del Vector 2: \n");


for(i=0;i<=m;i++){
scanf("%d",&vec2[i]);
}

printf("\n\n La suma de los dos Vectores es: \n");

for(i=0;i<=m;i++){
vecsum[i]=vec1[i]+vec2[i];
printf(" %d ",vecsum[i]);
}
printf("\n");


system("pause");
return 0;
}
  #2 (permalink)  
Antiguo 11/05/2014, 01:04
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: Suma de 2 Vectores en DevC

hola amigo.
el primer problema que veo es que no le das un valor a m por lo tanto al declarar el array no le das valor.
cuando tu pides el tamayo del vecto no significa que se valla a pasar el valor cuando asignas el vecto por que esto susede despues y por lo tanto el programa no puede regresarse para cambiar a vec1[m] a vec1[2].
o le das un valor a m antes de que declares los vectores o el problema va a persistir tambien el los for en lugar de <= solo dejalo en < por que sino capturas un dato de mas.
esos son los unicos errores que veo que tienes.

buenoe spero haberte ayudado.
saludos.
drewermerc.
  #3 (permalink)  
Antiguo 11/05/2014, 01:10
 
Fecha de Ingreso: mayo-2014
Mensajes: 7
Antigüedad: 10 años
Puntos: 0
Respuesta: Suma de 2 Vectores en DevC

Cita:
Iniciado por Drewermerc Ver Mensaje
hola amigo.
el primer problema que veo es que no le das un valor a m por lo tanto al declarar el array no le das valor.
cuando tu pides el tamayo del vecto no significa que se valla a pasar el valor cuando asignas el vecto por que esto susede despues y por lo tanto el programa no puede regresarse para cambiar a vec1[m] a vec1[2].
o le das un valor a m antes de que declares los vectores o el problema va a persistir tambien el los for en lugar de <= solo dejalo en < por que sino capturas un dato de mas.
esos son los unicos errores que veo que tienes.

buenoe spero haberte ayudado.
saludos.
drewermerc.
Muchas Gracias por tu respuesta, y si uno de los problemas era lo de =<...ahora solo lo deje como <....

Por el valor de "m" no se como arreglarlo esque "necesriamente" tiene que pedirle al usuario el tamaño del vector en este caso "m" no se como arreglar esa parte.
  #4 (permalink)  
Antiguo 11/05/2014, 05:59
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Suma de 2 Vectores en DevC

Ese programa tiene problemas.
No puedes hacer esto: [m]. A menos que m sea una constante.
Lo de
Cita:
printf("Ingrese el Tamaño de los Vectores a Sumar: \n");
scanf("%d",&m);
... olvídalo =(

Para poder hacer eso [m] seria asi:
const int m = 10;
int vec1[m];
Entonces si.

Para hacer una tabla que le elijas el tamaño, eso debes usar memoria dinámica pero en c no se usar las malloc y familia, no tengo ganas de liarme con eso XD.

búsquese tablas dinámicas en c y te va salir montones de formas de hacer eso pero te advierto que casi todas son trabajando con el heap XD.

Mira encontre una buena pajinita que te explica mas o menos como se hace en c :D(Es lo minimo que te puedo hacer ^^)

http://www.linuxhispano.net/2011/08/...n-vector-en-c/

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main () {
  4.     //======================================================================
  5.     int numeroElementos;
  6.     int * vector;// una tabla es un puntero que apunta al primer objeto de una cadena, este sera nuestro puntero    
  7.     //======================================================================   
  8.     printf ( "¿Cuántos elementos quieres? " );
  9.     scanf ( "%d", &numeroElementos );  //Ahora si pedimos el tamaño que va tener eso en el heap
  10.  
  11.     //======================================================================   
  12.     //malloc reserva la cantidad de numeroElementos multiplicado por el tamaño de un int si por
  13.     //ejemplo en nuestro ordenador un int tiene 4 bytes sera el numero que ingresemos multiplicado por 4.
  14.     //Si vamos gradar float el calculo sera numeroElementos * sizeof ( float ) y asi para todos los tipos ;)
  15.     vector = ( int * ) malloc ( numeroElementos * sizeof ( int ) );  
  16.    
  17.    
  18.     //======================================================================
  19.     // Eso es muy importante ya que comprueba que se aya creado nuestra tabla, caso no se hubiera creado
  20.     //no iba a saber y entonces el programa se cerraria de forma inesperada cuando le asignamos una variable,
  21.     //como la memoria dinámica no se libera sola..
  22.     //quedaría llena con cosas que allí habíamos puesto anteriormente, si una sola variable falla al crearla
  23.     //deberías mostrar un mensaje de error y borrar todo lo anterior o bien puedes volver a intentar crear la tabla pero si no logras,
  24.     //estas obligado a liberas lo que antes habias creado antes de cerrar el programa ;)
  25.     //¡Recuerdalo! Jamas usar una tabla que no se cree correctamente o el programa se crashea ok;)    
  26.     if ( vector == NULL ) {
  27.         perror ( "Problemas reservando memoria" );
  28.         exit ( 1 );
  29.     }
  30.  
  31.  
  32.  
  33.     //======================================================================   
  34.     // trabajamos con el vector
  35.     //Una vez creado y comprobado lo usas de manera normal como una tabla normal solo que a esa si le ibas a poder decir el
  36.     //tamaño que tiene antes de crearla.
  37.  
  38.  
  39.  
  40.     //======================================================================   
  41.     // lo liberamos
  42.     //Como dije antes la memoria dinámica no se libera sola, debes liberarla antes, lo que no se es
  43.     //si tendrías que liberar antes a cada posición de la tabla[0],tabla[1]tabla[2]... como dije desconozco malloc y familia XD
  44.     free ( vector );
  45.    
  46.     return 0;
  47. }

Si no sabes trabajar con el heap mejor primero te lías con el antes de hacer tablas dinámicas, eso necesitas conocimientos sobre punteros, y memoria dinámica

Última edición por vangodp; 11/05/2014 a las 06:27
  #5 (permalink)  
Antiguo 11/05/2014, 08:54
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: Suma de 2 Vectores en DevC

hola vangod.
bueno pues no es tan dificil como se veo o dice con un par de practicas ya te vas dando cuenta de como funciona es cierto que habeses tienes que tener cierto cudados pero bueno en lo personal no es muy complicado.

hola Designss.
bueno ssolo agrgando algo a la informacion de codigo que te proporciono vangodp yo le agregaria calloc y realloc.
ya que calloc aparte de reservar memoria tambien te la inicializa con 0 y realloc esta redimenciona el tamaño de espacio de memoria por ejemplo si nesesitas un espacio inical de 3 y despues as adelante en tu programa de 5 solo aplicas realloc y la memoria la redmencionas a 5 espacios. aqu te dejo el codigo de vangodp con estas funciones.

Código C:
Ver original
  1. #include <stdio.h>
  2.     #include <stdlib.h>
  3.     int main () {
  4.         //======================================================================
  5.         int numeroElementos;
  6.         int * vector;// una tabla es un puntero que apunta al primer objeto de una cadena, este sera nuestro puntero    
  7.         //======================================================================  
  8.         printf ( "¿Cuántos elementos quieres? " );
  9.         scanf ( "%d", &numeroElementos );  //Ahora si pedimos el tamaño que va tener eso en el heap
  10.      
  11.         //======================================================================  
  12.         //malloc reserva la cantidad de numeroElementos multiplicado por el tamaño de un int si por
  13.         //ejemplo en nuestro ordenador un int tiene 4 bytes sera el numero que ingresemos multiplicado por 4.
  14.         //Si vamos gradar float el calculo sera numeroElementos * sizeof ( float ) y asi para todos los tipos ;)
  15.         vector = ( int * ) malloc ( sizeof ( int ), sizeof( int ) );  
  16.                
  17.         //======================================================================  
  18.         //calloc reserva la cantidad de numeroElementos, el tamaño de un int si por
  19.         //ejemplo en nuestro ordenador un int tiene 4 bytes sera el numero que ingresemos multiplicado por 4.
  20.         //Si vamos gradar float el calculo sera numeroElementos * sizeof ( float ) y asi para todos los tipos ;)
  21.         //a diferencia de malloc es que los dos elementos se ponen separados asi como se muestra acontinuacion
  22.         //estructura de la funcion es void *calloc(size_t nmemb, size_t size);
  23.         // en nmemb la catidad de memoria a reservar y despues d ela coma  va el tipo de datos que se quiere reservar ya sea int, cloat etc
  24.         vector = ( int * ) calloc ( sizeof ( int ), sizeof( int ) );
  25.  
  26.         //lo que hace realloc es redimencionar  el espacio de memoria por ejemplo con calloc inicializamos solo un espacio de tipo
  27.         //int con realloc lo ponemos redimecionar a 2, 3 , 4 etc. y si queremos redimencionar mas solo tenemos que volver a poner
  28.         // realloc con nose 6, 7, 8 etc.
  29.         // estructura de la funcion es void *realloc(void *ptr, size_t size);
  30.         // *ptr es el puntero a edireccionar en este caso vector y la coma es el numero de espacios que se quieres ocupas ya sea
  31.         //4, 5, 6, 7, 8 etc
  32.         vector = ( int * ) realloc (vector, 5);
  33.        
  34.         //======================================================================
  35.         // Eso es muy importante ya que comprueba que se aya creado nuestra tabla, caso no se hubiera creado
  36.         //no iba a saber y entonces el programa se cerraria de forma inesperada cuando le asignamos una variable,
  37.         //como la memoria dinámica no se libera sola..
  38.         //quedaría llena con cosas que allí habíamos puesto anteriormente, si una sola variable falla al crearla
  39.         //deberías mostrar un mensaje de error y borrar todo lo anterior o bien puedes volver a intentar crear la tabla pero si no logras,
  40.         //estas obligado a liberas lo que antes habias creado antes de cerrar el programa ;)
  41.         //¡Recuerdalo! Jamas usar una tabla que no se cree correctamente o el programa se crashea ok;)    
  42.         if ( vector == NULL ) {
  43.             perror ( "Problemas reservando memoria" );
  44.             exit ( 1 );
  45.         }
  46.      
  47.      
  48.      
  49.         //======================================================================  
  50.         // trabajamos con el vector
  51.         //Una vez creado y comprobado lo usas de manera normal como una tabla normal solo que a esa si le ibas a poder decir el
  52.         //tamaño que tiene antes de crearla.
  53.      
  54.      
  55.      
  56.         //======================================================================  
  57.         // lo liberamos
  58.         //Como dije antes la memoria dinámica no se libera sola, debes liberarla antes, lo que no se es
  59.         //si tendrías que liberar antes a cada posición de la tabla[0],tabla[1]tabla[2]... como dije desconozco malloc y familia XD
  60.         free ( vector );
  61.        
  62.         return 0;
  63.     }
solo puedes usar malloc o calloc solas, no juntas si usas malloc no puedes usar calloc y si usas calloc no puedes usar malloc.
bueno espero que te sea util esto.
saludos.
drewermerc.
  #6 (permalink)  
Antiguo 11/05/2014, 10:30
 
Fecha de Ingreso: mayo-2014
Mensajes: 7
Antigüedad: 10 años
Puntos: 0
Respuesta: Suma de 2 Vectores en DevC

Muchas Gracias a Todos por su ayuda.....voy seguir sus consejos para terminarlo aunque veo que se me complicara.....
  #7 (permalink)  
Antiguo 11/05/2014, 11:15
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Suma de 2 Vectores en DevC

Cita:
Iniciado por Drewermerc Ver Mensaje
hola vangod.
bueno pues no es tan dificil como se veo o dice con un par de practicas ya te vas dando cuenta de como funciona es cierto que habeses tienes que tener cierto cudados pero bueno en lo personal no es muy complicado.

hola Designss.
bueno ssolo agrgando algo a la informacion de codigo que te proporciono vangodp yo le agregaria calloc y realloc.
ya que calloc aparte de reservar memoria tambien te la inicializa con 0 y realloc esta redimenciona el tamaño de espacio de memoria por ejemplo si nesesitas un espacio inical de 3 y despues as adelante en tu programa de 5 solo aplicas realloc y la memoria la redmencionas a 5 espacios. aqu te dejo el codigo de vangodp con estas funciones.

Código C:
Ver original
  1. #include <stdio.h>
  2.     #include <stdlib.h>
  3.     int main () {
  4.         //======================================================================
  5.         int numeroElementos;
  6.         int * vector;// una tabla es un puntero que apunta al primer objeto de una cadena, este sera nuestro puntero    
  7.         //======================================================================  
  8.         printf ( "¿Cuántos elementos quieres? " );
  9.         scanf ( "%d", &numeroElementos );  //Ahora si pedimos el tamaño que va tener eso en el heap
  10.      
  11.         //======================================================================  
  12.         //malloc reserva la cantidad de numeroElementos multiplicado por el tamaño de un int si por
  13.         //ejemplo en nuestro ordenador un int tiene 4 bytes sera el numero que ingresemos multiplicado por 4.
  14.         //Si vamos gradar float el calculo sera numeroElementos * sizeof ( float ) y asi para todos los tipos ;)
  15.         vector = ( int * ) malloc ( sizeof ( int ), sizeof( int ) );  
  16.                
  17.         //======================================================================  
  18.         //calloc reserva la cantidad de numeroElementos, el tamaño de un int si por
  19.         //ejemplo en nuestro ordenador un int tiene 4 bytes sera el numero que ingresemos multiplicado por 4.
  20.         //Si vamos gradar float el calculo sera numeroElementos * sizeof ( float ) y asi para todos los tipos ;)
  21.         //a diferencia de malloc es que los dos elementos se ponen separados asi como se muestra acontinuacion
  22.         //estructura de la funcion es void *calloc(size_t nmemb, size_t size);
  23.         // en nmemb la catidad de memoria a reservar y despues d ela coma  va el tipo de datos que se quiere reservar ya sea int, cloat etc
  24.         vector = ( int * ) calloc ( sizeof ( int ), sizeof( int ) );
  25.  
  26.         //lo que hace realloc es redimencionar  el espacio de memoria por ejemplo con calloc inicializamos solo un espacio de tipo
  27.         //int con realloc lo ponemos redimecionar a 2, 3 , 4 etc. y si queremos redimencionar mas solo tenemos que volver a poner
  28.         // realloc con nose 6, 7, 8 etc.
  29.         // estructura de la funcion es void *realloc(void *ptr, size_t size);
  30.         // *ptr es el puntero a edireccionar en este caso vector y la coma es el numero de espacios que se quieres ocupas ya sea
  31.         //4, 5, 6, 7, 8 etc
  32.         vector = ( int * ) realloc (vector, 5);
  33.        
  34.         //======================================================================
  35.         // Eso es muy importante ya que comprueba que se aya creado nuestra tabla, caso no se hubiera creado
  36.         //no iba a saber y entonces el programa se cerraria de forma inesperada cuando le asignamos una variable,
  37.         //como la memoria dinámica no se libera sola..
  38.         //quedaría llena con cosas que allí habíamos puesto anteriormente, si una sola variable falla al crearla
  39.         //deberías mostrar un mensaje de error y borrar todo lo anterior o bien puedes volver a intentar crear la tabla pero si no logras,
  40.         //estas obligado a liberas lo que antes habias creado antes de cerrar el programa ;)
  41.         //¡Recuerdalo! Jamas usar una tabla que no se cree correctamente o el programa se crashea ok;)    
  42.         if ( vector == NULL ) {
  43.             perror ( "Problemas reservando memoria" );
  44.             exit ( 1 );
  45.         }
  46.      
  47.      
  48.      
  49.         //======================================================================  
  50.         // trabajamos con el vector
  51.         //Una vez creado y comprobado lo usas de manera normal como una tabla normal solo que a esa si le ibas a poder decir el
  52.         //tamaño que tiene antes de crearla.
  53.      
  54.      
  55.      
  56.         //======================================================================  
  57.         // lo liberamos
  58.         //Como dije antes la memoria dinámica no se libera sola, debes liberarla antes, lo que no se es
  59.         //si tendrías que liberar antes a cada posición de la tabla[0],tabla[1]tabla[2]... como dije desconozco malloc y familia XD
  60.         free ( vector );
  61.        
  62.         return 0;
  63.     }
solo puedes usar malloc o calloc solas, no juntas si usas malloc no puedes usar calloc y si usas calloc no puedes usar malloc.
bueno espero que te sea util esto.
saludos.
drewermerc.
Perfecto, yo es que soy de c++ y por allí no se recomienda las funciones de c para reservar la memoria por que no están preparadas para las clases o algo así XDD
Mesclarlas va dar mas dolor de cabeza que beneficio, por que si uso malloc o calloc o lo que sea debo usar free, y si uso new debo usar delet, entonces solo uso new y delet de c++.
me gusta por ejemplo lo que hace realloc o asi creo que se llama, que aumenta una tabla por ejemplo¿No?Eso molaría XD
No se como funcionan esas funciones en c muy bien, aun que si se que son para lo mismo que es reservar memoria, la memoria se tiene que liberar ya que no se libera sola.
Menos mal que te tenemos aquí que sabes mas que yo en c y le puedes mejorar mi aporte chuchorrenduo.XDD

Última edición por vangodp; 11/05/2014 a las 11:21
  #8 (permalink)  
Antiguo 11/05/2014, 12:56
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: Suma de 2 Vectores en DevC

bueno pues si vangodp en c++ cambian algna funciones y en algunas cosas si se facilita un poco el trabajo pero es casi los mismo y bueno tambien aporto lo que puedo ya que aun no soy un experto en memoria dinamica pero voy aprendiendo mas con el tiempo.
saludos.
drewermerc.
  #9 (permalink)  
Antiguo 11/05/2014, 13:27
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Suma de 2 Vectores en DevC

En c++, new invoca el constructor. No es solo peticion de memoria.
delete invoca el destructor, no es solo liberacion de memoria
__________________
Visita mi perfil en LinkedIn
  #10 (permalink)  
Antiguo 11/05/2014, 14:38
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Suma de 2 Vectores en DevC

Cita:
Iniciado por CalgaryCorpus Ver Mensaje
En c++, new invoca el constructor. No es solo peticion de memoria.
delete invoca el destructor, no es solo liberacion de memoria
por eso debo usar new y y delete y olvidar las demás formas XDDD
  #11 (permalink)  
Antiguo 19/05/2014, 07:30
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años
Puntos: 49
Respuesta: Suma de 2 Vectores en DevC

Cita:
Iniciado por Designss Ver Mensaje
...............................................

Por el valor de "m" no se como arreglarlo es que "necesariamente" tiene que pedirle al usuario el tamaño del vector en este caso "m" no se como arreglar esa parte.
No problem, no tienes por qué liarte con memoria dinámica para eso. Tan solo tienes que declarar los arrays después de introducir el valor de m:

Cita:
Ingrese el Tamaño de los Vectores a Sumar: 3
Ingrese los Elementos del vector 1:
vec1[4]=:1
vec1[4]=:2
vec1[4]=:3

Ingrese los elementos del Vector 2:
vec2[4]=:2
vec2[4]=:3
vec2[4]=:4


La suma de los dos Vectores es:
3 5 7
Presione una tecla para continuar . . .
Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void){
  5.   int m,i;
  6.   printf("Ingrese el Tama\xA4o de los Vectores a Sumar: ");
  7.   scanf("%d",&m);
  8.   int vec1[m];
  9.   int vec2[m];
  10.   int vecsum[m];
  11.   printf("Ingrese los Elementos del vector 1: \n");
  12.   for(i=0;i<m;i++){
  13.     printf("vec1[%d]=:",m+1);
  14.     scanf("%d",&vec1[i]);
  15.   }
  16.   printf("\nIngrese los elementos del Vector 2: \n");
  17.   for(i=0;i<m;i++){
  18.     printf("vec2[%d]=:",m+1);
  19.     scanf("%d",&vec2[i]);
  20.   }
  21.   printf("\n\n La suma de los dos Vectores es: \n");
  22.   for(i=0;i<m;i++){
  23.     vecsum[i]=vec1[i]+vec2[i];
  24.     printf(" %d ",vecsum[i]);
  25.   }
  26.   printf("\n");
  27.   system("pause");
  28.   return 0;
  29. }

¡¡¡Saluditos!!!


Etiquetas: 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 03:36.