Enviado em 18/02/2020 - 17:19h
Olá, boa tarde à todos!
#include "model.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
FILE *p_arquivo = NULL;
static lista_palavra *p_lista = NULL;
static lista_palavra *no()
{
lista_palavra *p_no = (lista_palavra *)malloc(sizeof(lista_palavra)); // Atribui o p_no à lista (lista palavra)
return p_no; // Retorna o endereço do primeiro nó
}
int abre_arquivo(void)
{
p_arquivo = fopen("palavras.txt", "r");
if (p_arquivo == NULL)
{
return -1;
}
else if (p_arquivo != NULL)
{
return 0;
}
}
int ler_arquivo(void)
{
int cont = 0, cont_letra = 0;
char *ler_palavra;
ler_palavra = malloc(32);
if (ler_palavra == NULL)
{
return -1;
}
abre_arquivo();
while (!feof(p_arquivo))
{
if (fscanf(p_arquivo, "%s", ler_palavra) < 0)
{
printf("Error");
}
add_lista(ler_palavra);
}
fclose(p_arquivo);
free(ler_palavra);
return 0;
}
void add_lista(char *ler_palavra)
{
lista_palavra *p_palavra = no(); // Ponteiro que aponta para primeiro no da lista(p_lista)
if (p_palavra == NULL)
{
exit(0);
}
strcpy(p_palavra->palavra, ler_palavra);
if (p_lista == NULL) // Adiciona na primeira posição
{
p_lista = p_palavra;
p_palavra->proximo = NULL;
}
else
{
p_palavra->proximo = p_lista;
p_lista = p_palavra;
}
geraAnagramas(p_palavra);
}
void imp_lista(void)
{
FILE *p_arquivo;
lista_palavra *p;
p = p_lista;
char *palavra;
palavra = malloc(32);
strcpy(palavra, p->palavra);
p_arquivo = fopen("impPalavra.txt", "w");
if (p_arquivo == NULL)
{
printf("Não foi possivel abrir o arquivo");
}
while (p != NULL)
{
fprintf(p_arquivo, "%s\n", palavra);
p = p->proximo;
}
free(palavra);
fclose(p_arquivo);
}
int fatorial(int num)
{
int fat = 1;
{
for (int i = 1; i <= num; i++)
{
fat *= i;
}
return fat;
}
}
int geraAnagramas(lista_palavra *p)
{
char *palavra;
palavra = malloc(32);
strcpy(palavra, p->palavra);
int cont_letra = strlen(palavra);
char letras[cont_letra];
int letras_repetidas = 0, distintas = 0, posicoes[cont_letra], lugar = 0;
memset(letras, 0, cont_letra);
for (int i = 0; i < cont_letra; i++)
{
letras[i] = palavra[i];
lugar = -1;
for (int j = 0; j < distintas; j++)
{
if ((letras[j] == palavra[i]))
{
lugar = j;
break;
}
}
if (lugar < 0)
{
letras[distintas] = palavra[i];
posicoes[distintas] = i;
distintas++;
}
else
{
letras_repetidas++;
}
}
printf("Repetidas: %d\n\n", letras_repetidas);
printf("Distintas: %d\n\n", distintas);
int numAnagramasSemRepeticao = fatorial(cont_letra);
for (int i = 0; i < distintas; i++)
{
numAnagramasSemRepeticao = numAnagramasSemRepeticao / (fatorial(letras_repetidas));
}
int i = 0, j = 0;
char *resto, *anagramasResto;
for (int i = 0; i < distintas; ++i)
{
int pos = 0;
pos = posicoes[i];
resto = substr(palavra, 0, pos + 1);
add_lista(resto);
//geraAnagramas(resto);
int k = 0;
char ret[40];
for (int j = 0; j < strlen(resto); j++)
{
ret[k] = letras[i] + anagramasResto[j];
imp_arquivo(ret[k]);
}
free(resto);
}
geraAnagramas(resto);
// imp_arquivo();
free(anagramasResto);
return 0;
}
char *substr(char *p1, int x, int y)
{
char *p2;
int i = 0, cont = 0;
p2 = malloc(40);
memset(p2, 0, 40);
memcpy(p2, &p1[x], y - x);
return p2;
}
void imp_arquivo()
{
FILE *p_arquivo;
char angrama;
p_arquivo = fopen("AnagGerado.txt", "w");
if (p_arquivo == NULL)
{
printf("Erro ao abrir a arquivo");
}
while (p_arquivo != NULL)
{
fprintf(p_arquivo, "%s\n", angrama);
}
}
Como agendar um backup automático do PostgreSQL no Cron evitando o problema de senha
Como preparar o Vim/Neovim para corrigir ortografia em português
Dark Web e Malwares na internet, quanto custa?
Configuração básica do Conky para mostrar informações sobre a sua máquina no Desktop
Exportação de histórico do Brave para o Firefox
Remapear e/ou trocar teclas no Linux
to falando dnv pq deletaram o meu topico (0)
Alexabolada casa comigo por favor, larga o Fábio e o VOL e vem comigo!... (12)
synalogy servidor de arquivos (2)
Atalho ctrl + Alt + T não funciona (2)
Não consigo fazer o adptador para cabo de rede funcionar (17)