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);
}
}
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.
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
¡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!
@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.
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!