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);
}
}
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Linux não é para todo mundo (4)
Dificuldade para renderizar vídeo no kdenlive (8)