Autor
|
Tema: Proyecto en Dev C++ (Arreglo de dimensión variable en archivo .h") (Leído 11,393 veces)
|
MartNahuel95
Desconectado
Mensajes: 11
|
Si AlbertoBSD, ese era el problema, no me había dado cuenta de eso, gracias. Ahora tengo un nuevo inconveniente en el "main.cpp", al momento de llamar a mi función creada. A mi estructura del arreglo dinámico la renombré así: vectorN arreglo={NULL,0}; switch(op){ case 'C': printf("Introduzca la dimension de su conjunto de valores:"); scanf("%d",&arreglo.n); arreglo.elementos=(int*)calloc(arreglo.n, sizeof(int));
funciones.carga_arreglo(/*Cuál sería el argumento aquí*/);
break;
|
|
« Última modificación: 9 Junio 2016, 21:32 pm por MartNahuel95 »
|
En línea
|
|
|
|
class_OpenGL
Desconectado
Mensajes: 437
Si usas Direct3D, no eres mi amigo :P
|
Si nos guiamos por el ejemplo dado por AlbertoBSD, el argumento sería el vector. Es decir, puedes hacer esto: funciones.carga_arreglo(arreglo);
Solo quería aclarar que creo que hay algunos pequeños errores en el código de AlbertoBSD. Creo que este sería el código bueno (puede que me equivoque): #include<stdio.h> #include<math.h> #include "Calculos_estadisticos.h" void funciones::carga_arreglo(vectorN &V) {// Si no lo pasas por referencia, no afectará al vector. int z = V.n; // Aquí antes estaba vectorN.n, pero lo que quieres hacer es acceder al miembro de 'V' for(int i=0; i<z; i++){ scanf("%d",&vectorN.elementos[i]); // Aquí tienes que poner los corchetes para acceder a cada elemento } }
|
|
|
En línea
|
| Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL |
|
|
|
|
MartNahuel95
Desconectado
Mensajes: 11
|
Cierto, me faltó tambien el [sub i]También veo que tengo un error aquí: for(int i=0; i<z; i++){ scanf("%d",&vectorN.elementos[i]); } Donde está "vectorN" debe también ser cambiado por "V"Una vez solucionado esto, sigo teniendo un problema al llamar a mi función: funciones.carga_arreglo(arreglo); main.cpp [Error] expected unqualified-id before '.' token
|
|
|
En línea
|
|
|
|
class_OpenGL
Desconectado
Mensajes: 437
Si usas Direct3D, no eres mi amigo :P
|
No me fijé en eso antes. Si quieres acceder a las funciones de una estructura de forma estática, primero, en la estructura, tienes que definirlas como estáticas: struct funciones { static void carga_arreglo(arreglo V); static double media(arreglo V); static double varianza(arreglo V); static double desv_est(arreglo V); };
Definirlas de forma estática le dice al compilador que esos métodos (funciones dentro de una clase/estructura) no modificarán ningún miembro del objeto. Una vez declaras las funciones como estáticas, puedes usarlas así: funciones::carga_arreglo(arreglo);
|
|
|
En línea
|
| Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL |
|
|
|
|
MartNahuel95
Desconectado
Mensajes: 11
|
Tengo que agradecer en serio a los dos, A class_OpenGL y a AlbertoBSD. En serio Muchas Gracias.
Ahora que ya solucioné mi problema con la carga del arreglo puedo terminar de crear las funciones restantes.
Una última pregunta, ¿dónde libero la memoria?. Al liberar la memoria se elimina lo que se haya guardado en el vector no?
|
|
|
En línea
|
|
|
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.705
🏴 Libertad!!!!!
|
Una última pregunta, ¿dónde libero la memoria?. Al liberar la memoria se elimina lo que se haya guardado en el vector no?
Liberar memoria solo marca el espacio como disponible para que sea usado por otra parte del programa. El contenido no es borrado. Tienes que liberarla en una sección del codigo donde de ahi en adelante estes totalmente segura de que no volveras a acceder a esos elementos En codigos pequeños es generalemente al finalizar el programa. En codigos mas grandes hay que tomar el criterio que te comente. Saludos
|
|
|
En línea
|
|
|
|
MartNahuel95
Desconectado
Mensajes: 11
|
Genial!!
Muchas Gracias.
Saludos.
|
|
|
En línea
|
|
|
|
MartNahuel95
Desconectado
Mensajes: 11
|
Me surgió un nuevo inconveniente. Creé una función para corroborar que el usuario en tiempo de ejecución no calcule por ejemplo la media antes de cargar elementos al arreglo: int funciones::vector_vacio(vector_n V){ int z=V.n; double suma=0; for(int i=0;i<z;i++){ suma=suma+V.elementos[i]; } if(suma != 0){ return 1; }else{ return 0; } } Pero cuando lo quiero aplicar a la función para hallar la media: double funciones::media(vector_n V){ if(vector_vacio(vector_n V)==1){ int z=V.n; double suma=0; double media=0; for(int i=0;i<z;i++){ suma=suma+(V.elementos[i]); } media=suma/z; return media; }else{ printf("Cargue elementos a su arreglo!!"); return 0; } } Me marca error en el argumento de vector_vacioIn static member function 'static double funciones::media(vector_n)': [Error] expected primary-expression before 'V' Cuando creí que todo andaba bien, apareció esto jaja, lo siento.
|
|
|
En línea
|
|
|
|
class_OpenGL
Desconectado
Mensajes: 437
Si usas Direct3D, no eres mi amigo :P
|
La función 'vacío' se puede hacer más sencilla: bool funciones::vector_vacio(vector_n V){ for(int i = 0; i < V.n; i++) { if(0 != V.elementos[i]) return false; } return true; }
A parte de eso, en la función 'media' hay varios errores: double funciones::media(vector_n V){ double resultado = 0.0; int i; for(i = 0; i < V.n; i++) resultado += V.elements[i]; if(0 == V.n) {// Damos el error printf(stdout, "Error. Se ha intentado calcular la media de un conjunto vacío.\n"); return 0.0; } else { return resultado / (double)V.n; } }
|
|
« Última modificación: 10 Junio 2016, 05:51 am por class_OpenGL »
|
En línea
|
| Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL |
|
|
|
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.705
🏴 Libertad!!!!!
|
Tu primera funcion, que pasa si el usuario agrega puros 00000000000 En resultado de la suma siempre sera 0.. Lo mejor es validar si el varlor de n es distindo de 0 si lo es, quiere decir que el arreglo no esta vacio. Seria: int funciones::vector_vacio(vector_n V){ return !V.n; }
Lo anterior se lee como "Regresa la negacion de V.n, (Si es distinto de 0 regresa 0 [falso], si es 0 regresa 1 [Verdadero])" Sobre el error que te aparece la verdad no tengo ni idea de que sea, prueba este codigo y si te sale error nos dices. Saludos.
|
|
« Última modificación: 10 Junio 2016, 05:50 am por AlbertoBSD »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Proyecto Arreglo con estructuras (struct) En C++
Programación C/C++
|
Antarezx
|
0
|
8,765
|
26 Septiembre 2011, 00:26 am
por Antarezx
|
|
|
ayuda con VisualStudio2010,para que es "L" y "_T" y como lo arreglo[SOLUCIONADO]
Programación C/C++
|
Belial & Grimoire
|
6
|
5,191
|
1 Junio 2012, 04:45 am
por Karman
|
|
|
El "sizeof" para saber el tamaño del arreglo no me funciona
Programación C/C++
|
RGT
|
9
|
4,235
|
5 Abril 2015, 04:33 am
por rir3760
|
|
|
LLenar arreglo con un archivo txt
« 1 2 »
Programación C/C++
|
Angel774
|
18
|
14,429
|
8 Junio 2016, 03:14 am
por Angel774
|
|
|
tiene sentido un puntero para uso como arreglo con una dimensión entregada?
Programación C/C++
|
digimikeh
|
5
|
2,567
|
23 Febrero 2019, 02:52 am
por digimikeh
|
|