problema vectores en c

Iniciado por howaboutno, 7 Noviembre 2012, 19:05 PM

0 Miembros y 1 Visitante están viendo este tema.

howaboutno

el enunciado es el siguiente:
Citarleer dos vectores de dimensión 10 y construir un tercer vector, e imprimirlo cuyos componentes sean la suma de los dos anteriores

yo lo que tengo hecho es esto: seguramente sea una chapuza y he de decir que no funciona pero ya no entiendo nada ni avanzo. tambien he de decir que es el primer ejercicio que hago de vectores...
gracias por la ayuda =)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define  num 10
void generar_vector(int v[]);
void imprimir_vector(int v[]);
void generar_vector2 (int v2[]);
void imprimir_vector2 (int v2[]);
int main(void)
{ srand(time(NULL));
int v[num];
int v2[num];
generar_vector(v);
imprimir_vector(v);
return EXIT_SUCCESS;
}
void generar_vector(int v[])
{

int t;
for(t=0;t<num;t++)
{
v[t]=(rand()%100+1)/10;//para generar datos float (con decimales)
}

}//fin del generar vector

void imprimir_vector(int v[])
{
int t,i;

for(t=0;t<num;t++)
{

printf("%d\n",v[t]);
fflush(stdout);
}

for(i=0;i<num;i++)
{

printf(" \n%d",v[i]);
fflush(stdout);
}
}//fin de imprimir vector

void generar_vector2 (int v2[])
{
int t,suma=0;
int v[num];
for(t=0;t<num;t++)
{
suma=suma+generar_vector(v);
}
}
void imprimir_vector2 (int v2[])
{ int i;
for(i=0;i<num;i++)
{

printf(" \n%d",v2[i]);
fflush(stdout);
}
}


ecfisa

Hola.

No vas nada mal encaminado... lo que si, se puede usar una sola funcion para generar ambos arreglos, así como también otra para que realize la suma.

Por ejemplo y mayormente basado en tu codigo:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define  NUM 10

void generar_vector(int *);  
void sumar_vectores(int *, int *, int *);
void imprimir_vectores(int *, int *, int *);

int main(void) {
 int v1[NUM], v2[NUM], v3[NUM];

 srand(time(NULL));
 generar_vector(v1);
 generar_vector(v2);
 sumar_vectores(v1,v2,v3);
  imprimir_vectores(v1,v2,v3);
 getchar();
return EXIT_SUCCESS;
}
void generar_vector(int *v) {
int i;
for(i=0;i<NUM;i++)
v[i]=(rand()%100+1)/10;
}

void sumar_vectores(int *v1, int *v2, int *v3) {
 int i;
 for(i=0;i<NUM;i++)
   v3[i] = v1[i]+v2[i];
}

void imprimir_vectores(int *v1, int *v2, int *v3)
{
int i;
for(i=0;i<NUM;i++)
 printf("%d %d %d\n",v1[i],v2[i],v3[i]);
}


La declaración de los parámetros como punteros es equivalente a la tuya podes usar la que prefieras, es decir:

void sumar_vectores(int *, int *, int *);
...
void sumar_vectores(int *v1, int *v2, int *v3) {

// Es equivalente a hacer:
void sumar_vectores(int [], int [], int []);
...
void sumar_vectores(int v1[], int v2[], int v2[]) {
...


Saludos.

howaboutno

Cita de: ecfisa en  7 Noviembre 2012, 19:38 PM
Hola.

No vas nada mal encaminado... lo que si, se puede usar una sola funcion para generar ambos arreglos, así como también otra para que realize la suma.

Por ejemplo y mayormente basado en tu codigo:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define  NUM 10

void generar_vector(int *);  
void sumar_vectores(int *, int *, int *);
void imprimir_vectores(int *, int *, int *);

int main(void) {
 int v1[NUM], v2[NUM], v3[NUM];

 srand(time(NULL));
 generar_vector(v1);
 generar_vector(v2);
 sumar_vectores(v1,v2,v3);
  imprimir_vectores(v1,v2,v3);
 getchar();
return EXIT_SUCCESS;
}
void generar_vector(int *v) {
int i;
for(i=0;i<NUM;i++)
v[i]=(rand()%100+1)/10;
}

void sumar_vectores(int *v1, int *v2, int *v3) {
 int i;
 for(i=0;i<NUM;i++)
   v3[i] = v1[i]+v2[i];
}

void imprimir_vectores(int *v1, int *v2, int *v3)
{
int i;
for(i=0;i<NUM;i++)
 printf("%d %d %d\n",v1[i],v2[i],v3[i]);
}


La declaración de los parámetros como punteros es equivalente a la tuya podes usar la que prefieras, es decir:

void sumar_vectores(int *, int *, int *);
...
void sumar_vectores(int *v1, int *v2, int *v3) {

// Es equivalente a hacer:
void sumar_vectores(int [], int [], int []);
...
void sumar_vectores(int v1[], int v2[], int v2[]) {
...


Saludos.



AAAh, vaale, ya lo he captado :D parecia mas complicado pero esto está tirado ;)
graciaaaas

do-while

¡Buenas!

???????????????????????????????????????????

v[t]=(rand()%100+1)/10;//para generar datos float (con decimales)


Ahi tienes una expresion en la que todos los elementos son enteros, luego nunca obtendras un float a partir de ellos si no casteas alguno de ellos... Pero por mucho que promociones alguno de los valores a float (o double, lo que prefieras), el vector en el que almacenas los datos es de tipo int, por lo que al final terminaras truncando el numero real obternido y siempre guardaras un entero.

Si quieres utilizar valores reales, tendras que promocionar alguno de los valores de la expresion que hay a la derecha de la igualdad y tendras que pasar un vector de float o double.

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

BatchianoISpyxolo

@do-while el problema está en el tipo del vector. La expresión está bien que se asigna está bien.

(rand()%100+1)/10 = [1..100] / 10

Números enteros entre 1 y 100 divididos entre 10. Evidentemente solo los múltiplos de 10 darán como resultado un entero.

Puede que desees aprender a programar desde 0: www.espascal.es

do-while

#5
Cita de: BatchianoISpyxolo en  8 Noviembre 2012, 16:25 PM
@do-while el problema está en el tipo del vector. La expresión está bien que se asigna está bien.

(rand()%100+1)/10 = [1..100] / 10

Números enteros entre 1 y 100 divididos entre 10. Evidentemente solo los múltiplos de 10 darán como resultado un entero.



Es evidente que si trabajas con numeros enteros, el resultado de dividir un entero por un entero te dara un entero: http://c.conclase.net/curso/?cap=009


#include <stdio.h>

int main(int argc, char *argv[])
{
   int x = 32;

   printf("%f\n",(float)( x / 10));

   return 0;
}


Que no es lo mismo que:

#include <stdio.h>

int main(int argc, char *argv[])
{
   int x = 32;

   printf("%f\n",(float)(x) / 10);

   return 0;
}

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!