Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: vite0150 en 07 de Junio 2014, 02:13
-
ocupo buscar todas las veces que aparece cada letra del alfabeto... por lo que pense que seria bueno ir guardando el acum2 en un array antes de cambiar a la siguiente letra... pero no me esta saliendo bien, en este caso me esta dando el numero 34 repetido... He intentado cambiar de posicion las llaves, pero no logro conseguir que funcione...
De casualidad alguien sabe donde esta el error?
string diccionario[100]={"casa", "perro", "carro", "computadora", "cabana", "coche", "mer", "sfefef"};
int vec[27];
int acum1=0, acum2=0;
for(char a='a';a<='z';a++) {
acum2=0;
for(int b=0;b<8;b++){
acum1=0; //aqui reinicio el acumulador para que no me lleve la cuenta de las otras palabras
for(int c=0;c<diccionario[b].length();c++){
if(diccionario[b][c]==a) //aqui recorro cada letra de cada palabra en busca de la letra que sea segun el primer for (de la 'a' a la 'z')
acum1++;}
if(acum1>0)
acum2++; //este acumulador es porque no ocupo las veces que se repite la letra sino el numero de palabras donde esta presente esa letra
for(int i=0;i<27;i++)
vec[i]=acum2;}} //aqui intento meter acum2 en un nuevo array para luego mostrar el numero de palabras en las que esta cada letra... pero esta parte en especifico es la que no funciona
for(int i=0;i<27;i++)
cout<<vec[i]<<endl;
-
Hola, es importante que indiques el lenguaje y compilador que estás utilizando para poder ayudarte. Aparentemente diría que es C++, pero facilita las cosas el dar esa información :D
También sería necesario que pongas el código de forma que sea compilable, parace que lo que has incluido es un fragmento de un código más amplio. Si se puede compilar también facilita las cosas :D
Saludos
-
Asi es, es c++... En clase usamos Visual studio 2012
Ademas despues de saber cuantas veces se repite 'x' letra en "diccionario" debo aplicar esta formula:-n/N * ( log (n/N) / log (2.0) )
Donde n=numero de palabras donde aparece la letra y N=numero total de palabras... Y luego de hacer esa formula debo decir cual de las letras es la que dio mayor resultado.
Pero bueno, todo paso a paso primero si me ayudas a decifrar porque no me esta guardando acum2 correctamente en el array... Gracias por la ayuda
#include<iostream>
#include<sstream>
#include<string>
using namespace std;
int main(){
string diccionario[]={"casa", "perro", "carro", "computadora", "cabana", "coche", "mer", "sfefef"};
int vec[27];
int acum1=0, acum2=0;
for(char a='a';a<='z';a++){
acum2=0;
for(int b=0;b<8;b++){
acum1=0;
for(int c=0;c<diccionario[b].length();c++){
if(diccionario[b][c]==a)
acum1++;}
if(acum1>0)
acum2++;}
for(int i=0;i<27;i++)
vec[i]=acum2;
}
for(int i=0;i<27;i++)
cout<<vec[i]<<endl;
system("pause");
return 0;
}
-
Tienes que tener cuidado con la lógica que utilizas y con los índices, contadores y acumuladores que utilizas.
He reestructurado el código (te lo pego a continuación) y a mí me está funcionando, pruébalo a ver si te funciona.
#include<iostream>
#include<sstream>
#include<string>
using namespace std;
int main() {
//string diccionario[]={"casa", "perro", "carro", "computadora", "cabana", "coche", "mer", "sfefef"};
string diccionario[]= {"casa", "perro", "carro"};
int contador = 0;
int vec[27] = {0};
int acum1=0;
for(char a='a'; a<='z'; a++) {
cout<<"LETRA ANALIZANDO: "<<a<<endl;
for(int b=0; b<3; b++) {
acum1=0;
cout<<"Palabra analizando: "<<diccionario[b]<<endl;
for(int c=0; c<diccionario[b].length(); c++) {
if(diccionario[b][c]==a) {
acum1++;
}
}
vec[contador]=vec[contador]+acum1;
cout<<"Encontrada la letra: "<<acum1<<" veces en la palabra"<<endl;
}
cout<<"Encontrada la letra: "<<vec[contador]<<" veces en todas las palabras "<<endl;
contador = contador+1;
}
for(int i=0; i<27; i++)
cout<<vec[i]<<endl;
//system("pause");
return 0;
}
Se usa un único acumulador: acum1, que va contando las veces que aparece una letra en todas las palabras y finalmente se guarda el número de apariciones en el vector vec.
Saludos.