Dev - C++ - Problema operacion con arreglos y punteros

 
Vista:

Problema operacion con arreglos y punteros

Publicado por Giovanny (1 intervención) el 08/09/2017 20:25:23
Hola comunidad, tengo problemas con este código. En la función de promedio pasa que cuando acumulo la suma de lo que contiene el arreglo, arbitrariamente asigna valores a las posiciones afectando el calculo que necesito. Si alguna persona me puede ayudar se lo agradeceria mucho.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/******************************************************
 *Problema 2: codificar una funcion y dar uso         *
 *Input: Arreglo de 1D tipo int, tamaño del arreglo   *
 *Output: Promedio de datos                           *
 ******************************************************/
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <math.h>
 
 //prototipo
 
 int tamano_arreglo();
 int llenar_arreglo(int tam);
 float promedio (int *a, int tam);
 
 //main
 
 int main () {
 
 	int tam,arreglo = 0;
 	int *a;
 	float prom = 0;
 	tam = tamano_arreglo();
 	arreglo = llenar_arreglo(tam);
 	a = &arreglo;
 	prom = promedio(a,tam);
 	printf("El promedio de los datos ingresados es: %f \n",prom);
 
 
 }
 
 //desarrollo prototipos
 
 int tamano_arreglo(){
 
 	int tam = 0;
 	printf("Ingrese el tamano que desea tener el arreglo \n");
 	scanf("%d",&tam);
 	return tam;
 
 
 }
 
 int llenar_arreglo(int tam){
 	int i = 0;
 	int a[tam];
 	for (i=0; i<tam;i++){
 		printf("ingrese el valor %d:\n",i+1);
 		scanf("%d",&a[i]);
	 }
	for (i=0; i<tam;i++){
 		printf("Posicion # %d: %d\n",i,a[i]);
	 }
 	return *a;
 }
 
 float promedio (int *a, int tam){
 	int i=0;
	float suma, promedio = 0;
	for(i=0; i<tam; i++){
		suma += a[i];
	}
	for (i=0; i<tam;i++){
 		printf("Posicion # %d: %d\n",i,a[i]);
	}
	printf("la suma es %f \n",suma);
	promedio = suma / tam;
	return promedio;
 
 }
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
sin imagen de perfil
Val: 417
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problema operacion con arreglos y punteros

Publicado por Thanatos (199 intervenciones) el 09/09/2017 07:49:38
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <stdio.h>
#include <stdlib.h>  // malloc(), free()
 
int obtener_tamano(void);
int *reservar_memoria(int);
void llenar_arreglo(int *, int);
int sumar(const int *, int);
float promediar(int, int);
void liberar_memoria(int *);
 
int main(void) {
    int tamano = obtener_tamano();
    int *arreglo = reservar_memoria(tamano);
    float promedio = 0.0f;
    int suma = 0;
 
    if (arreglo) {
        llenar_arreglo(arreglo, tamano);
        suma = sumar(arreglo, tamano);
        promedio = promediar(suma, tamano);
        liberar_memoria(arreglo);
    }
    printf("\nSumatoria: %d\nPromedio:  %.2f\n", suma, promedio);
 
    return 0;
}
 
int obtener_tamano(void) {
    int tamano;
 
    printf("Ingrese la cantidad de elementos:\ncantidad = ");
    scanf("%d", &tamano);
 
    if (tamano < 0) {
        return 0;
    }
    return tamano;
}
 
int *reservar_memoria(int tamano) {
    int *arreglo = malloc((size_t) tamano * sizeof *arreglo);
 
    if (!arreglo) {
        fprintf(stderr, "\n* Error al reservar memoria *\n");
        return NULL;
    }
    return arreglo;
}
 
void llenar_arreglo(int *arreglo, int tamano) {
    if (tamano > 0) {
        printf("\nIngrese los elementos del arreglo:\n");
        for (int i = 0; i < tamano; ++i) {
            printf("arreglo[%d] = ", i + 1);
            scanf("%d", &arreglo[i]);
        }
    }
}
 
int sumar(const int *arreglo, int tamano) {
    int suma = 0;
 
    for (int i = 0; i < tamano; ++i) {
        suma += arreglo[i];
    }
    return suma;
}
 
float promediar(int suma, int tamano) {
    if (tamano == 0) {
        return 0.0f;
    }
    return (float) suma / (float) tamano;
}
 
void liberar_memoria(int *arreglo) {
    free(arreglo);
}
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