Autor
|
Tema: ayuda con funciones (Leído 3,890 veces)
|
loadenro
Desconectado
Mensajes: 16
|
tengo un proyecto que consta de varios módulos, pero por el momento los he probado como archivos independientes, estoy tratando de unirlos y para eso necesito utilizar funciones, he realizado varias combinaciones pero en todas me da error, estoy utilizando Devc++, uno de los módulos realiza el histograma de unos datos que proceden de un archivo .txt, con la lectura del archivo no tengo problema, ni con la conversión char a float, el problema es cuando intento realizar el histograma de esos datos. a continuación menciono cuales serian las entradas y salidas del histograma: entrada: traza (traza es un vector declarado de la siguiente forma std::vector <float> traza) salidas:frecuencias y simbolos(ambos declarados de la misma manera que traza) cabe especificar que no conozco el largo de los vectores. gracias
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Dices donde está el problema, pero cuál es. Muestra el código que falla, que de error, o que no funcione bien.
|
|
|
En línea
|
|
|
|
loadenro
Desconectado
Mensajes: 16
|
void histograma(float trazas[] ), asi estoy declarando la funcion histograma(traza[]); asi la estoy llamando, por el momento solo queria pasar a trazas a histograma, sin que histograma me retornara algun valor, pero igual me da error. A continuacion presento el codigo #include <stdio.h> #include <conio.h> #include <iostream> #include <cstdlib> #include <vector>
//////// using namespace std; void histograma(float trazas[]); int main () {std::vector<float> simbolos; std::vector<float> frecuencias; std::vector<float> probabilidades; FILE *archivo; char caracter; std::vector<float> ayudante; std::vector<float> traza; float ayuda; char numPtr[1]; float por=5; archivo = fopen("D:\\entrada10.txt","r"); if (archivo == NULL){ printf("\nError de apertura del archivo. \n\n"); }else{ printf("\nEl contenido del archivo de prueba es \n\n"); while (feof(archivo) == 0) { caracter = fgetc(archivo); // printf("%c",caracter); numPtr[1]=caracter; ayuda=float(numPtr[1]-48); // cout<<"\n ayuda="<<ayuda; int kk=0; ayudante.push_back(ayuda); ////////////////////////////////// aqui empezamos a tranformar if (ayuda==-38) { // for(int ii=0;ii<ayudante.size();ii++)////mostrando ayudante // {cout<<"\n ayudante["<<ii<<"]="<<ayudante[ii];} if (ayudante[0]==-3)/////saber si es negativo { kk=1; ayudante.erase (ayudante.begin()); }////////// ayudante.pop_back(); int i=0; float suma=0; int cifras=0;/////dice cuantas cifras enteras tiene while (i<ayudante.size()) ///////saber cuantas cifras enteras tiene { if(ayudante[i]==-2)//contador de cifras enteras {cifras=i; i=ayudante.size(); } else {i++; cifras=i; } ; } //////////termina while int ii=0; int cifraaux=cifras; float aux=0; int k=0; while (cifras>1)/////parte entera {aux=ayudante[ii]; k=cifras; while (k>1) ///////multiplicaciones parte entera {aux=aux*10; k--; } cifras--; ii++; suma=suma+aux; // cout<<"\n suma="<<suma; } suma=suma+ayudante[ii]; int deci=ayudante.size()-cifraaux-1; ii=ayudante.size()-1; while (deci>0)////parte decimal {aux=ayudante[ii]; k=deci; while(k>0)///haciendo decimales {aux=aux/10; k--; } deci--; ii--; suma=suma+aux; // cout<<"\n suma="<<suma; } if (kk==1)/////////signo negativo {traza.push_back(suma*-1); } else {traza.push_back(suma); } // for(int ii=0;ii<traza.size();ii++)////mostrando ayudante // {cout<<"\n traza["<<ii<<"]="<<traza[ii];} ayudante.clear(); /////////////haciendo visajes int tamanotraza=traza.size(); /////////////// /////////////llamado a histograma histograma(traza[]); /////////////////////// return 0; } ///////////////funcion HISTOGRAMA void histograma(float trazas[] ) { int contfre=0; simbolos.push_back(traza[0]); for (int ii=0;ii<traza.size();ii++) {if (traza[ii]==traza[0]) {contfre++;} } frecuencias.push_back(contfre); cout<<"\n simbolos[0]="<<simbolos[0]; cout<<"\n frecuencias[0]="<<frecuencias[0];
for (int i=1;i<traza.size();i++) {int cont=0; int contfre=0; for (int ii=0;ii<simbolos.size();ii++) {if (traza[i]==simbolos[ii]) {cont++; break;} } if (cont==0) {simbolos.push_back(traza[i]); for (int ii=i;ii<traza.size();ii++) {if (traza[ii]==traza[i]) {contfre++;} } frecuencias.push_back(contfre); } } for(int ii=0;ii<simbolos.size();ii++) {cout<<"\n simbolos["<<ii<<"]="<<simbolos[ii]; cout<<"\n frecuencias["<<ii<<"]="<<frecuencias[ii];} float sumama=0; for(int ii=0;ii<simbolos.size();ii++) {sumama=sumama+frecuencias[ii];} cout<<"\n sumama="<<sumama; for(int ii=0;ii<simbolos.size();ii++) {float ayuda=0; ayuda=frecuencias[ii]/sumama; probabilidades.push_back(ayuda); cout<<"\n probabilidades["<<ii<<"]="<<probabilidades[ii];} float sumamam=0; for(int ii=0;ii<simbolos.size();ii++) {sumamam=sumamam+probabilidades[ii];} cout<<"\n sumamam="<<sumamam;
}
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
|
Re:
« Respuesta #3 en: 2 Abril 2014, 23:11 pm » |
|
Justo ahora me fuí del pc. Como no puedo probar el código, te puedo sugerir que pongas "historigrama(traza)", sin los corchetes. Si aún así sigue sin ir, pon por aquí el error que te da.
Enviado desde mi ST21i mediante Tapatalk
|
|
|
En línea
|
|
|
|
loadenro
Desconectado
Mensajes: 16
|
al quitarle los corchetes me da el siguiente error cannot convert `std::vector<float, std::allocator<float> >' to `float' for argument `1' to `void histograma(float)' void histograma(float trazas ) asi declare la funcion histograma(traza); asi la llamo
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
void histograma(float trazas[] )
Te has equivocado al declarar el argumento, sería más bien así: void histograma(vector<float> &trazas)
|
|
|
En línea
|
|
|
|
loadenro
Desconectado
Mensajes: 16
|
realice los cambios y me sigue dando error a function-definition is not allowed here before '{' token revise todos las llaves y las tengo completas, entonces el error debe ser en la forma de declarar la funcion creo yo
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Sin ver el código no sabría decirte.
|
|
|
En línea
|
|
|
|
loadenro
Desconectado
Mensajes: 16
|
ya arregle el problema, al declarar las funciones como me dijiste si funciono, muchas gracias, sin embargo ahora necesito que la funcion histograma me devuelva dos vectores (simbolos y frecuencias) y pues estoy en eso
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Puedes pasar los parametros por referencia o devolver una estructura: struct datos { vector<float> Datos; vector<float> Frecuencias; } Datos Histograma(vector<float> &trazas)
Otra solución más "express" es devolver una pareja (pair): pair<vector<float>,vector<float> > Histograma(vector<float> &trazas)
Para más información sobre la estructura "pair": https://www.youtube.com/watch?v=6Xqhqn15Bgo
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda con funciones en VB6
Programación Visual Basic
|
maxinitto
|
3
|
6,461
|
9 Febrero 2009, 01:40 am
por BlackZeroX
|
|
|
[C] Problema con Struct en funciones que llaman a otras funciones
Programación C/C++
|
lipman
|
9
|
23,642
|
19 Mayo 2011, 23:39 pm
por Littlehorse
|
|
|
Funciones en C, Ayuda!!
Programación C/C++
|
jfap45
|
4
|
2,057
|
23 Julio 2012, 22:24 pm
por durasno
|
|
|
(Ayuda), Funciones
Programación C/C++
|
maxotux
|
1
|
1,581
|
28 Noviembre 2012, 15:55 pm
por The Swash
|
|
|
Ayuda con funciones en C
Programación C/C++
|
Reikamoon
|
4
|
2,185
|
20 Agosto 2013, 10:48 am
por Alien-Z
|
|