Ir ao conteúdo

Caio Marcelo Souza

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

Reputação

2
  1. V!OLADOR, eu assisti aos vídeos e li o programa do link que você me enviou, percebi até que o cara tinha um método para descartar os anagramas repetidos. Entretanto ainda não consegui terminar esse programa, eu não sou muito bom programando e estou travado de novo... já tem algumas horas que estou tentando resolver esse problema mas nada vem a minha cabeça. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #define MAX 255 //Structs typedef struct lista{ char letra[MAX]; struct lista* prox; }; //Funções //Função comparativa que permite uso do qsort int compare(const void* a, const void* b) { return (*(char*)a - *(char*)b); } //Função de Troca de caracters void troca(char* a, char* b) { char t = *a; *a = *b; *b = t; } int findCeil(char palavra[], char primeiro, int left, int h) { int ceilIndex = left; for (int i = left + 1; i <= h; i++) if (palavra[i] > primeiro && palavra[i] < palavra[ceilIndex]) ceilIndex = i; return ceilIndex; } //Função que printa as pemutações void sortedPermutations(char palavra[]) { int size = strlen(palavra); qsort(palavra, size, sizeof(palavra[0]), compare); bool isFinished = false; while (!isFinished) { static int x = 1; printf("%d %s \n", x++, palavra); int i; for (i = size - 2; i >= 0; --i) if (palavra[i] < palavra[i + 1]) break; if (i == -1) isFinished = true; else { int ceilIndex = findCeil(palavra, palavra[i], i + 1, size - 1); troca(&palavra[i], &palavra[ceilIndex]); qsort(palavra + i + 1, size - i - 1, sizeof(palavra[0]), compare); } } } //n! formula de permu //n!/(n - k)! //Função que printa as pemutações void sortedArrangement(char palavra[], int arranjos) { int size = strlen(palavra); qsort(palavra, size, sizeof(palavra[0]), compare); bool isFinished = false; while (!isFinished) { static int x = 1; printf("%d %s \n", x++, palavra); int i; for (i = size - 2; i >= 0; --i) if (palavra[i] < palavra[i + 1]) break; if (i == -1) isFinished = true; else { int ceilIndex = findCeil(palavra, palavra[i], i + 1, size - 1); troca(&palavra[i], &palavra[ceilIndex]); qsort(palavra + i + 1, size - i - 1, sizeof(palavra[0]), compare); } } } //Corpo do codigo int main(){ //Variaveis char palavra[255], aux; int tam, i, j, permu = 1; bool tf; printf("Digite uma palavra SEM ACENTOS para checar suas Permutacoes, Arranjos e Combinacoes\n"); //Limpa o Buffer, tirando todo o lixo setbuf(stdin, 0); //Ler a string, precisa de uma FILE, no caso standard input fgets(palavra, 255, stdin); //Limpando os espacos que nao foram utilizados palavra[strlen(palavra) - 1] = '\0'; //Adquirindo o tamanho da palavra tam = strlen(palavra); int cont[tam]; //Verificando se existem letras que se repetem for(i=0; palavra[i] != '\0'; i++){ for(j=0; palavra[j] != '\0'; j++){ if((palavra[i] == palavra[j])&&(i != j)){ tf = true; break; }else{ tf = false; } } } //Inicio das operacoes if(tf){ for(i=0; palavra[i] != '\0'; i++){ for(j=0; palavra[j] != '\0'; j++){ if((palavra[i] == palavra[j])&&(i != j)){ } } } //MOSTRA AS PERMUTACOES sortedPermutations(palavra); }else{ //MOSTRA AS PERMUTACOES sortedPermutations(palavra); //MOSTRA OS ARRANJOS printf("Informe o numero de Arranjos:"); int arranjos; scanf("%d", &arranjos); printf("\n"); sortedArrangement(palavra, arranjos) //MOSTRA AS COMBINACOES printf("Informe o numero de Combinacoes:"); int combinacao; scanf("%d", &combinacao); printf("\n"); } return 0; } Eu estou tentando inserir a Lista encadeada no lugar da String padrão e também tentei alterar a função de Permutação para Fazer os Arranjos e as Combinações mas nenhuma das lógicas que fiz deu certo, então apaguei do programa (provavelmente devia ter deixado para verem minha lógica), o ultimo protótipo salvo foi esse, se alguém puder dar uma olhada no código, o enunciado do problema foi postado na cabeça do tópico!
  2. Tenho um trabalho para entregar para meu professor da faculdade e estou com alguns problemas, eu sei fazer permutação na matemática mas utilizando o Codeblocks (C) é um pouco diferente haha. Estou colocando o código comentado abaixo caso alguém queira ajudar e o enunciado do exercício. "Elabore um programa em C que leia um conjunto de símbolos (letras e números) através de listas encadeadas, sem repetições via teclado, calcule a quantidade e liste: • Permutações • Arranjos • Combinações dos elementos do conjunto lido. Entrada: BOLA Saída: permutações: 24 B O L A B O A L B L O A B L A O B A O L B A L O O B L A O B A L O L B A O L A B O A B L O A L B L B O A L B A O L O B A L O A B L A B O L A O B A B O L A B L O A O B L A O L B A L B O A L O B Entrada: elementos para arranjar: 3 Saída: arranjos(4,3): 24 B O L B O A B L O B L A B A O B A L O B L O B A O L B O L A O A B O A L L B O L B A L O B L O A L A B L A O A B O A B L A O B A O L A L B A L O Entrada: elementos para combinar: 3 Saída: combinações (4,3): 4 B O L B O A B L A O L A Para palavras que tenham caracteres repetidos, requer apenas as permutações. Entrada: BALA Saída: permutações: 12 B A L A B A A L B L A A A B A L A B L A A A B L A A L B A L B A A L A B L B A A L A B A L A A B #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> //Corpo do codigo int main(){ //Variaveis char palavra[255], aux; int tam, i, j, permu = 1; bool tf; printf("Digite uma palavra SEM ACENTOS para checar suas Permutacoes, Arranjos e Combinacoes\n"); //Limpa o Buffer, tirando todo o lixo setbuf(stdin, 0); //Ler a string, precisa de uma FILE, no caso standard input fgets(palavra, 255, stdin); //Limpando os espacos que nao foram utilizados palavra[strlen(palavra) - 1] = '\0'; //Adquirindo o tamanho da palavra tam = strlen(palavra); //Verificando se existem letras que se repetem for(i=0; palavra[i] != '\0'; i++){ for(j=0; palavra[j] != '\0'; j++){ if((palavra[i] == palavra[j])&&(i != j)){ tf = true; break; }else{ tf = false; } } } //Inicio das operacoes if(tf){ for(i=tam; i>0; i--){ permu = permu*i; } printf("\nNumero de permutacoes:%d", permu); printf("\n"); //MOSTRAR AS PERMUTACOES for(i=0; i < permu; i++){ for(j=0; j < tam; j++){ printf("%c",palavra[j]); aux = palavra[tam]; palavra[tam] = palavra[i]; palavra[i]=aux; } printf("\n"); } }else{ printf("FALSE");//SEM REPETICAO } return 0; } OBS: Eu conheço LISTAS ENCADEADAS mas não sei como utilizar, então estou fazendo o programa com uma array do tipo string mesmo.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!