Pido Ayuda desde Costa Rica
Saludos Amigos: Tengo la peor profesora del mundo nos pide cosas que no nos enseña a hacer si pueden me ayuda con este no quiero perder el curso pero la profesora asi lo quieres:
Encabezado del problema:
• Escriba un programa que lea una lÃnea de texto.
• Produzca una lÃnea de todas las letras que aparecen en el texto, junto con el número de veces que cada letra ocurre en la lÃnea.
• Las letras deberán aparecer en orden, desde la más frecuente hasta la menos frecuente.
• Puede suponer que la entrada consiste únicamente en letras minúsculas.
• Ejemplo:
– Do be do bo.
Letra # ocurrencias
o 3
d 2
b 2
e 1
• El programa tendrá que ordenar el arreglo según los miembros enteros de la estructura del arreglo.
Gracias
Encabezado del problema:
• Escriba un programa que lea una lÃnea de texto.
• Produzca una lÃnea de todas las letras que aparecen en el texto, junto con el número de veces que cada letra ocurre en la lÃnea.
• Las letras deberán aparecer en orden, desde la más frecuente hasta la menos frecuente.
• Puede suponer que la entrada consiste únicamente en letras minúsculas.
• Ejemplo:
– Do be do bo.
Letra # ocurrencias
o 3
d 2
b 2
e 1
• El programa tendrá que ordenar el arreglo según los miembros enteros de la estructura del arreglo.
Gracias
El problema que pides no es del otro mundo aquà te dejo uno que tenÃa hace tiempo:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void ImprimeOrdenados(char letras[],unsigned short int cont[]);
#define Limite 26
#define Fin ' '
void main(void)
{
register basura;
FILE *arch;
arch=fopen("ARCHIVO","rb+");
if(arch!=NULL)
{
char letras[Limite],aux;
unsigned short int cont[Limite],auxcont=0;
letras[0]=Fin;
cont[0]=0;
while(!feof(arch))
{
aux=fgetc(arch);
if(isalpha(aux))
{
aux=toupper(aux);
for(register a=0;a<strlen(letras);a++)
{
if(aux==letras[a])
break;
}//busca letra
if(a==strlen(letras))
{
letras[auxcont]=aux;
cont[auxcont]+=1;
auxcont++;
letras[auxcont]=Fin;
cont[auxcont]=0;
}//no esta esta letra
else
cont[a]+=1;
}//si es letra
}//lee el archivo
ImprimeOrdenados(letras,cont);
}
else
printf("n Error al abrir el archivo prog2.in!!");
printf("nn Enter Any Key For Exit!! ");
scanf("%d",&basura);
}
void ImprimeOrdenados(char letras[],unsigned short int cont[])
{
char auxLetras;
register auxCont;
for(register a=0;a<strlen(letras);a++) //ordena por numero
{
for(register b=0;b<strlen(letras);b++)
{
if(cont[a]>cont[b])
{
auxCont=cont[a];
cont[a]=cont[b];
cont[b]=auxCont;
auxLetras=letras[a];
letras[a]=letras[b];
letras[b]=auxLetras;
}
}
}//por numero
for(a=0;a<strlen(letras)-1;a++) //ordena por letra
{
if(cont[a]==cont[a+1])//si son iguales
{
if(letras[a]>letras[a+1])
{
auxLetras=letras[a+1];
letras[a+1]=letras[a];
letras[a]=auxLetras;
}
}
}//por letra
for(a=0;a<strlen(letras);a++)
printf("n %c t %d",letras[a],cont[a]);
}
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void ImprimeOrdenados(char letras[],unsigned short int cont[]);
#define Limite 26
#define Fin ' '
void main(void)
{
register basura;
FILE *arch;
arch=fopen("ARCHIVO","rb+");
if(arch!=NULL)
{
char letras[Limite],aux;
unsigned short int cont[Limite],auxcont=0;
letras[0]=Fin;
cont[0]=0;
while(!feof(arch))
{
aux=fgetc(arch);
if(isalpha(aux))
{
aux=toupper(aux);
for(register a=0;a<strlen(letras);a++)
{
if(aux==letras[a])
break;
}//busca letra
if(a==strlen(letras))
{
letras[auxcont]=aux;
cont[auxcont]+=1;
auxcont++;
letras[auxcont]=Fin;
cont[auxcont]=0;
}//no esta esta letra
else
cont[a]+=1;
}//si es letra
}//lee el archivo
ImprimeOrdenados(letras,cont);
}
else
printf("n Error al abrir el archivo prog2.in!!");
printf("nn Enter Any Key For Exit!! ");
scanf("%d",&basura);
}
void ImprimeOrdenados(char letras[],unsigned short int cont[])
{
char auxLetras;
register auxCont;
for(register a=0;a<strlen(letras);a++) //ordena por numero
{
for(register b=0;b<strlen(letras);b++)
{
if(cont[a]>cont[b])
{
auxCont=cont[a];
cont[a]=cont[b];
cont[b]=auxCont;
auxLetras=letras[a];
letras[a]=letras[b];
letras[b]=auxLetras;
}
}
}//por numero
for(a=0;a<strlen(letras)-1;a++) //ordena por letra
{
if(cont[a]==cont[a+1])//si son iguales
{
if(letras[a]>letras[a+1])
{
auxLetras=letras[a+1];
letras[a+1]=letras[a];
letras[a]=auxLetras;
}
}
}//por letra
for(a=0;a<strlen(letras);a++)
printf("n %c t %d",letras[a],cont[a]);
}
