elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayuda con funciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ayuda con funciones  (Leído 3,890 veces)
loadenro

Desconectado Desconectado

Mensajes: 16


Ver Perfil
ayuda con funciones
« en: 2 Abril 2014, 22:51 pm »

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 Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: ayuda con funciones
« Respuesta #1 en: 2 Abril 2014, 22:54 pm »

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 Desconectado

Mensajes: 16


Ver Perfil
Re: ayuda con funciones
« Respuesta #2 en: 2 Abril 2014, 23:03 pm »

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
Código:
#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 Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
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 Desconectado

Mensajes: 16


Ver Perfil
Re: ayuda con funciones
« Respuesta #4 en: 2 Abril 2014, 23:17 pm »

al quitarle los corchetes me da el siguiente error
Código:
 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 Desconectado

Mensajes: 1.211



Ver Perfil
Re: ayuda con funciones
« Respuesta #5 en: 3 Abril 2014, 00:23 am »

Código
  1. void histograma(float trazas[] )

Te has equivocado al declarar el argumento, sería más bien así:
Código
  1. void histograma(vector<float> &trazas)
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
loadenro

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Re: ayuda con funciones
« Respuesta #6 en: 3 Abril 2014, 22:20 pm »

realice los cambios y me sigue dando error
Código:
 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 Desconectado

Mensajes: 1.211



Ver Perfil
Re: ayuda con funciones
« Respuesta #7 en: 3 Abril 2014, 22:37 pm »

Sin ver el código no sabría decirte.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
loadenro

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Re: ayuda con funciones
« Respuesta #8 en: 4 Abril 2014, 00:39 am »

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 Desconectado

Mensajes: 1.211



Ver Perfil
Re: ayuda con funciones
« Respuesta #9 en: 4 Abril 2014, 00:47 am »

Puedes pasar los parametros por referencia o devolver una estructura:
Código
  1. struct datos
  2. {
  3.    vector<float> Datos;
  4.    vector<float> Frecuencias;
  5. }
  6.  
  7. Datos Histograma(vector<float> &trazas)

Otra solución más "express" es devolver una pareja (pair):
Código
  1. 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

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con funciones en VB6
Programación Visual Basic
maxinitto 3 6,461 Último mensaje 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 Último mensaje 19 Mayo 2011, 23:39 pm
por Littlehorse
Funciones en C, Ayuda!!
Programación C/C++
jfap45 4 2,057 Último mensaje 23 Julio 2012, 22:24 pm
por durasno
(Ayuda), Funciones
Programación C/C++
maxotux 1 1,581 Último mensaje 28 Noviembre 2012, 15:55 pm
por The Swash
Ayuda con funciones en C
Programación C/C++
Reikamoon 4 2,185 Último mensaje 20 Agosto 2013, 10:48 am
por Alien-Z
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines