Ir para conteúdo
Fórum Script Brasil

brdonsb

Membros
  • Total de itens

    2
  • Registro em

  • Última visita

Sobre brdonsb

brdonsb's Achievements

0

Reputação

  1. brdonsb

    anagrama em c

    Buenas Felipe. Tchê, acredito que você esteja limitando o tamanho da palavra em 5 letras apenas para teste. Caso contrário convém diminuir o valor do tamanho para 5 também. Da mesma forma seria mais interessante você usar uma forma diferente de tratar uma entrada maior que a esperada, talvez usando um while: while ( strlen(anagrama) > 5 ){ printf("\n\n\nERRO!!! Este programa so funciona com palavras que tenham no maximo 5 caracteres!\n\n"); printf ("Informe uma palavra de no maximo 5 caracteres: >"); gets(anagrama); } Dessa forma você não precisa rodar o programa novamente por causa de um erro de digitação. Na função que verifica a existência de letras iguais, não vejo a necessidade de fazeres tantas comparações, uma vez que se existir pelo menos uma repetição você terá que passar para a função pletrasiguais. Nesse caso ficaria melhor assim: int vletrasIguais (char anag[]){ int i, j; for (i = 0; i < strlen(anag); i++) for (j = 0; j < strlen(anag); j++){ if((anag[i]==anag[j]) && (i!=j)) return 1; } return 0; } Note que sem a condição de i!=j a função vai retornar que exite repetição. Quanto a função pletrasiguais ela realmente está confusa. Você está fazendo muitas comparações desnecessárias, pelo que entendi você compara se houve repetição usando o '$' e então incrementa. Confesso que não vou conseguir te ajudar seguindo essa linha de raciocínio. Acredito que seria mais fácil você usar um vetor para fazer essas comparações, de forma que sempre que você tiver uma repetição você incremente o valor da posição desse vetor. Algo assim, por exemplo: int pletrasIguais (char anag[]){ int i, j, *v, tam, fat, denominador=1; char *palavra; tam=strlen(anag); palavra=(char*)malloc(sizeof(char)*tam); strcpy(palavra,anag); v=(int*)malloc(sizeof(int)*tam); for(i=0;i<tam;i++) v[i]=1; for(i=0; i<tam; i++){ if(palavra[i]!='$') for(j=0; j<tam; j++){ if ((palavra[i]==palavra[j])&&(i!=j)){ v[i]++; palavra[j]='$'; } } } for(i=0;i<tam;i++){ fat=fatorial(v[i]); denominador=denominador*fat; } return denominador; } Acredito que você tenha o conhecimento matemático para solucionar a questão dos anagramas, logo saberá como usar o denominador. Qualquer duvida posta ai. Um abraço.
  2. Buenas Gutembergs. Tchê, pelo que eu entendi do seu problema, se é só para gravar a frase no arquivo, receber novamente do arquivo e indicar o numero de caracteres, acredito que seria mais simples você incluir a biblioteca string.h e usar a função strlen(). Seria interessante também você declarar mais uma variável para receber a frase do arquivo. Eu usaria também fgets ao invés de gets para evitar um estouro de memória, caso a frase digitada fosse maior que 100 caracteres. Veja que estou considerando que seu arquivo vai ter apenas uma linha, devido a forma como abriste o arquivo para escrita. O código ficaria mais ou menos assim: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void){ FILE *fp; int tam; char frase[100], frase_arq[100]; fp = fopen("teste.txt","w"); if(!fp){ printf( "Erro na abertura do arquivo"); exit(0); } printf("\nDigite a frase a ser escrita no arquivo.: "); fgets(frase, 100, stdin); printf("\n"); fputs (frase, fp); fclose(fp); fp = fopen("teste.txt","r+"); if(!fp){ printf( "Erro na abertura do arquivo"); exit(0); } fgets(frase_arq, 100, fp); tam=strlen(frase_arq)-1; /* -1 devido ao fato de que fgets tambem considera o "" */ fclose(fp); printf("O total de caracteres do arquivo e .: %d\n\n",tam); exit(0); }
×
×
  • Criar Novo...