
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 atualizar sua versão estável do Debian
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Script de montagem de chroot automatica
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Instalar Dual Boot, Linux+Windows. (5)
Conky, alerta de temperatura alta (16)
De volta para o futuro - ou melhor, para o presente (parte 2) (3)









