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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda ejercicio manejo de arrays
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda ejercicio manejo de arrays  (Leído 1,714 veces)
HIDE_95

Desconectado Desconectado

Mensajes: 9



Ver Perfil
Duda ejercicio manejo de arrays
« en: 13 Agosto 2015, 18:08 pm »

Buenas tardes. Tengo un problema y llevo un dia intentando solucionarlo pero no hay manera de que encuentre alguna solucion... Se trata de un ejercicio para aprender a moverte por los arrays y los struct . La mayor parte del ejercicio lo tengo resuelto solo me falta un subalgoritmo que al implementarlo no me da el resultado que me pide.
Este es el subalgoritmo que me falta por hacer:
 void all_mostFreqKMers(const string &texto, unsigned k, All_KmerMF &all_kmer_mf);
 que devuelve todos los k-mer mas frecuentes (all kmer mf) de texto . El tipo All KmerMF debe definirse como:

const unsigned MAX_KMERS = 10; // Maximo numero posible de kmers de tamaño k
typedef array <string, MAX_KMERS> KMers; // Array de cadenas para guardar los kmers mas frecuentes.
struct All_KmerMF
{
KMers kmers; // Listado de kmers (cadenas) mas frecuentes de tamaño k
unsigned num_kmers; // Numero de kmers mas frecuentes de tamaño k
unsigned frec; // Frecuencia de los kmers mas frecuentes de tamano k
};

Asi, en el ejemplo anterior, si llamamos al algoritmo all mostFreqKMers con k = 9, debe devolvernos los k-mers:

ATGATCAAG
CTCTTGATC
TCTTGATCA
CTTGATCAT

que tienen una frecuencia de 3 apariciones en el texto.

Aqui os dejo el codigo que he echo me compila bien , lo unico es que me devuelve por pantalla el mismo kmer , es decir , si pongo k = 9 , me devuelve 10 veces "CTTGATCAT" . Espero que me puedan echar una mano.


Código:
Código:
#include <iostream>
#include <string>
#include <tr1/array>

using namespace std ;
using namespace std :: tr1 ;
//Constantes y tipos
const unsigned MAX_KMERS = 10; // Maximo numero posible de kmers de tamaño k

typedef array <string, MAX_KMERS> KMers; // Array de cadenas para guardar los kmers mas frecuentes.

struct KmerMF
{
string kmer;
unsigned frec;
};

struct All_KmerMF
{
KMers kmers; // Listado de kmers (cadenas) mas frecuentes de tamano k
unsigned num_kmers; // Numero de kmers mas frecuentes de tamano k
unsigned frec; // Frecuencia de los kmers mas frecuentes de tamano k
};

//Cabecera subalgorimos
unsigned calc_frec(const string &texto, unsigned pos, const string &kmer) ; //Calcula la frecuencia de aparicion de un kmer en el texto
void mostFreqKMers(const string &texto, unsigned k , KmerMF &kmer_mf) ; //Devuelve el kmer (de longitud k) mas frecuente del texto
void all_mostFreqKMers(const string &texto, unsigned k, All_KmerMF &all_kmer_mf); //Devuelve todos los Kmer mas frecuentes del texto

//Algoritmo principal
int main ()
{

unsigned k ;
string texto = string("ATCAATGATCAACGTAAGCTTCTAAGCATGATCAAGGTGCTCACACAGTTTATCCACAAC") +
         "CTGAGTGGATGACATCAAGATAGGTCGTTGTATCTCCTTCCTCTCGTACTCTCATGACCA"  +
         "CGGAAAGATGATCAAGAGAGGATGATTTCTTGGCCATATCGCAATGAATACTTGTGACTT"  +
         "GTGCTTCCAATTGACATCTTCAGCGCCATATTGCGCTGGCCAAGGTGACGGAGCGGGATT"  +
         "ACGAAAGCATGATCATGGCTGTTGTTCTGTTTATCTTGTTTTGACTGAGACTTGTTAGGA"  +
         "TAGACGGTTTTTCATCACTGACTAGCCAAAGCCTTACTCTGCCTGACATCGACCGTAAAT"  +
         "TGATAATGAATTTACATGCTTCCGCGACGATTTACCTCTTGATCATCGATCCGATTGAAG"  +
         "ATCTTCAATTGTTAATTCTCTTGCCTCGACTCATAGCCATGATGAGCTCTTGATCATGTT"  +
         "TCCTTAACCCTCTATTTTTTACGGAAGAATGATCAAGCTGCTGCTCTTGATCATCGTTTC";

All_KmerMF all_kmer_mf ;

cout << "Introduzca k: " ;
cin >> k ;

all_mostFreqKMers ( texto , k , all_kmer_mf ) ;

for ( unsigned i = 0 ; i < all_kmer_mf.num_kmers ; i++ )
{
cout << "Kmers: " << all_kmer_mf.kmers[i] << endl ;
}

cout <<" ; " << all_kmer_mf.frec << " ; " << all_kmer_mf.num_kmers << endl ;

}


unsigned calc_frec(const string &texto, unsigned pos, const string &kmer)
{
unsigned frec , t , k ;

t = unsigned ( texto.size() ) ;
k = unsigned ( kmer.size() ) ;

frec = 0 ;
for ( unsigned i = pos ; i < t ; i++ )
{
if ( texto.substr ( i,k ) == kmer )
{
frec = frec + 1 ;
}
}

return frec ;

}

void mostFreqKMers(const string &texto, unsigned k, KmerMF &kmer_mf)
{
unsigned frecuencia ;
kmer_mf.frec = 0 ;

for ( unsigned i = 0 ; i < ( int( texto.size() ) -k ) ; i++ )
{

frecuencia = calc_frec ( texto , 0 , texto.substr ( i , k ) ) ;
if ( frecuencia >= kmer_mf.frec )
{
kmer_mf.kmer = texto.substr ( i , k ) ;
kmer_mf.frec = frecuencia ;
}

}

}

void all_mostFreqKMers(const string &texto, unsigned k, All_KmerMF &all_kmer_mf)
{

KmerMF kmer ;

all_kmer_mf.num_kmers = 0 ;

for ( unsigned i = 0 ; i < MAX_KMERS  ; i++ )
{
mostFreqKMers ( texto , k , kmer) ;

all_kmer_mf.kmers[i] = kmer.kmer ;
all_kmer_mf.frec = kmer.frec ;
all_kmer_mf.num_kmers++ ;

}


}


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Manejo de arrays para una sesion en mysql
PHP
WHK 2 4,280 Último mensaje 5 Abril 2009, 03:30 am
por WHK
Ayuda, arrays i manejo de string
Programación Visual Basic
ninto33 4 3,219 Último mensaje 5 Febrero 2010, 02:37 am
por xmbeat92
Ejercicio C ARRAYS
Ejercicios
cantabria1234 0 2,571 Último mensaje 7 Mayo 2013, 18:20 pm
por cantabria1234
Optimizar el código de este ejercicio (arrays) C++
Programación C/C++
seryioo 1 2,283 Último mensaje 8 Agosto 2015, 08:37 am
por exoesqueleto
[C++] Ayuda para ejercicio de un calendario usando arrays.
Programación C/C++
nadales56 5 3,457 Último mensaje 12 Septiembre 2019, 20:18 pm
por nadales56
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines