-
Posts
32 -
Cadastrado em
-
Última visita
Reputação
11-
C Construir Arvore binaria em C, a partir da ordem infixa e posfixa..!
Gabriel Tellaroli Ramos respondeu ao tópico de Gabriel Tellaroli Ramos em C/C#/C++
@arfneto então essa duas funções ja são definidas no problema em si eu só peguei e criei a logica dentro da maketree, o professor n exige que utilize elas mas eu achei que seria melhor utilizando elas pois ele disse que resolvou com elas, o problema é que essa logica que eu criei n atende a todos os casos de árvore e acabou funcionando apenas para a do enunciado. adicionado 1 minuto depois A respeito do makefile o que seria essa -std, nunca tinha feito o make file antes, me baseei em um que ja estava pronto só troquei os nomes dos arquivos. -
C Construir Arvore binaria em C, a partir da ordem infixa e posfixa..!
Gabriel Tellaroli Ramos respondeu ao tópico de Gabriel Tellaroli Ramos em C/C#/C++
@arfneto Então, o código são 3 arquivos, por isso coloquei em zip acredito ser mais fácil, de analisar assim você pode descompactar e ver todos os arquivos, mas a minha duvida em si é nessa função que eu vou usar para criar a arvore. Na minha logica deu certo mas eu fiquei muito preso ao caso de exemplo do enunciado, e quando fui testar com outro caso não deu certo! Se você puder me ajudar, o maior problema é achar alguma condição que atenda a todos os casos de ter uma subarvore esquerda ou direita. void make_tree(arvbin *t, int n, int in_index, int *infixa, int pos_index, int *posfixa) { if ((*t = (arvbin)malloc(sizeof(struct no_arvbin))) == NULL) { fprintf(stderr, "Erro de alocacao de memoria!\n"); exit(1); } //int countDir = 0; (*t)->dado = posfixa[pos_index]; (*t)->esq = (*t)->dir = NULL; int count = 0; while (infixa[in_index] != posfixa[pos_index]) { in_index++; count++; } // Verificor se tem Subarvore esquerda!! if (in_index > 0 && count != 1) { // Tem Subarvore esquerda if (in_index % 2 == 0) { make_tree(&(*t)->esq, in_index, 0, infixa, in_index - 1, posfixa); } else { make_tree(&(*t)->esq, in_index, count+1, infixa, count+2, posfixa); } } // Verificor se tem Subarvore direita!! if (in_index + 1 < n ) { // Tem Subarvore direita make_tree(&(*t)->dir, pos_index, in_index, infixa, pos_index - 1, posfixa); } } adicionado 3 minutos depois -
Galera seguinte estou com um problema em C para construir uma arvore binaria a partir de dois vetores um que tem os dados da arvore em-ordem e outro tem seus dados em pós-ordem. A partir desses dados eu tenho que fazer a criação da arvore, eu fiz algumas tentativas e deu certo para esse exemplo do problema porém fui testar outros exemplos e n deu certo. Se alguém puder me ajudar vou anexar os arquivos com os meus códigos e com o enunciado do problema. Trabalho - 1.zip == São meus códigos. (O makefile n sei se está correto, mas esta funcionando kkk) Planilha com meu teste de mesa == https://docs.google.com/spreadsheets/d/1iPu3WRVJTxvhAoP2OyG4jo40RCZ5R4_eVA7JDeeKIgI/edit?usp=sharing ED2-Trab1-2020 == Problema. Trabalho - 1.zip ED2-Trab1-2020.pdf
-
Gabriel Tellaroli Ramos alterou sua foto pessoal
-
C Filas de prioridade em C Trab Impossivel :(
Gabriel Tellaroli Ramos respondeu ao tópico de Gabriel Tellaroli Ramos em C/C#/C++
N etendi mt bem, mas ja enviei tudo espero só n tirar 0 kkkk porque realmente fiquei um tempão pra conseguir resolver eu e meu amigo no caso né, e vou tentar dormir um pouco agr porque amanha(hoje no caso) ainda tenho que acordar cedo kkkkkkkk Obrigado pela atenção mais uma vez sou mt grato Boa Noite -
C Filas de prioridade em C Trab Impossivel :(
Gabriel Tellaroli Ramos respondeu ao tópico de Gabriel Tellaroli Ramos em C/C#/C++
Estou tentando testar o makefile mas n consigo a principio ele esta correto né?? adicionado 9 minutos depois S são 3 arquivos : engine.c engine.h main.c -
C Filas de prioridade em C Trab Impossivel :(
Gabriel Tellaroli Ramos respondeu ao tópico de Gabriel Tellaroli Ramos em C/C#/C++
Perdão pelo anexo kkkkk é costume, n cheguei a testar o make file porque estou desenvolvendo no windows mesmo mas acredito que esteja funcionando, eu acho ruim o professor cobrar algo que n funcione no windows quando a maioria se n todos os alunos usam o windows. -
C Filas de prioridade em C Trab Impossivel :(
Gabriel Tellaroli Ramos respondeu ao tópico de Gabriel Tellaroli Ramos em C/C#/C++
Kkkkk é então a maneira que a gente encontrou foi essa meio que foi um improviso mas esta funcionando. você chegou a testar o meu codigo? Funcionou ? O que você acha ? adicionado 0 minutos depois @arfneto Makefile.txt Esse seria o makefile ??? -
C Filas de prioridade em C Trab Impossivel :(
Gabriel Tellaroli Ramos respondeu ao tópico de Gabriel Tellaroli Ramos em C/C#/C++
N, na vdd fizemos de maneira que n precisa pegar o tempo em que foi gerado pois ele vai armazenar no vetor conforme vai sendo gerado então atribuímos um contador para verificar a posição em que ele foi gerado e verificamos a partir dai... -
C Filas de prioridade em C Trab Impossivel :(
Gabriel Tellaroli Ramos respondeu ao tópico de Gabriel Tellaroli Ramos em C/C#/C++
Esse codigo que eu postei aparentemente consegue resolver o trab, se você puder testar ele também, eu e meu grupo estamos testando aqui e esta funcionando. obs: selecionar (1) inserir e informar as fatias de tempo: Irei testar o seu no linux fazendo essa alteração pra ve se funciona Edit: Testei o seu aqui e aparetemente ele funcionou mas esta dando um erro de segmentação a partir da Terceira fatia de tempo -
C Filas de prioridade em C Trab Impossivel :(
Gabriel Tellaroli Ramos respondeu ao tópico de Gabriel Tellaroli Ramos em C/C#/C++
Oi amigo estou tentando fazer o trab aqui se for preciso posto meu codigo sem problemas e outra o codigo que ele postou esta me ajudando a realizar o trabalho tanto que eu nem to conseguindo rodar o codigo no meu pc como voce pode observar, e acredito que n tenha problema nenhum o professor esta vendo pois estou pedindo ajuda como qualquer um que precisa ao fazer algo que n aprendeu Segue meus codigos: #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #include "engine.h" #include "malloc.h" char eventos_nome[9][24] = {"Colisao", "Atualizacao tela", "Particulas", "Logica do Jogo", "Teclado", "Inteligencia Artificial", "Mouse", "Simulacao Fisica", "Internet" }; int controlador = 0; void inserir_infos(fila_prio * fp, int qnt_tempo) { free(fp); srand((unsigned)time(NULL)); int num_aleatorio; fp->tam = 0; for (int v = 1; v <= qnt_tempo; v++ ) { printf("\nTempo #%d \n\n",v); int girar = rand() % 20; printf("Eventos gerados (%d):\n", girar); for (int i = 0; i < girar ; i++) { num_aleatorio = rand() % 9; /*fp->info[i].prioridade = ranking_prioridade(num_aleatorio); fp->info[i].grupo = ranking_grupo(num_aleatorio); //strcpy(fp[i].grupo, ranking_grupo(num_aleatorio)); strcpy(fp->info[i].evento, eventos_nome[num_aleatorio]); fp->info[i].momento = i; fp->tam++;*/ ajusta_fila(fp, num_aleatorio, i); //fp->info[i].momento = i; printf("Nome: %s | Prioridade : %d |Grupo : %c |Ordem : %d \n", eventos_nome[num_aleatorio], ranking_prioridade(num_aleatorio), ranking_grupo(num_aleatorio), i); //arrumar_infos(fp, ) } //qsort(fp, girar, sizeof(fila_prio*), compara_eventos); printf("\nEventos Atendidos: \n"); for (int i = 0; i < fp->tam ; i++) { printf("Nome: %s |Prioridade : %d |Grupo : %c |Ordem : %d\n", fp->info[i].evento, fp->info[i].prioridade, fp->info[i].grupo, fp->info[i].momento); } fp->tam = 0; free(fp); } } void Quick(fila_prio * fp, fila_prio * auxiliar, int inicio, int fim) { int aux, i, j, meio; i = inicio; j = fim; meio = (int) ((i + j) / 2); //auxiliar->info = fp->info[meio]; do { while ( (fp->info[i].grupo < fp->info[meio].grupo && fp->info[i].grupo == 97) || ( ( (fp->info[i].grupo == fp->info[meio].grupo) || (fp->info[i].grupo > 97) ) && (fp->info[i].prioridade < fp->info[meio].prioridade) ) ) { printf("Prioridade : %d | Grupo : %c |--------------| Prioridade : %d | Grupo : %c \n", fp->info[i].prioridade, fp->info[i].grupo, fp->info[meio].prioridade, fp->info[meio].grupo); i = i + 1; // maior } while ( fp->info[meio].grupo == 97 && (fp->info[j].grupo > fp->info[meio].grupo ) || ( ((fp->info[j].grupo == fp->info[meio].grupo) || (fp->info[j].grupo > 97)) && (fp->info[j].prioridade > fp->info[meio].prioridade) ) ) { printf("Prioridade : %d | Grupo : %c |--------------| Prioridade : %d | Grupo : %c \n", fp->info[i].prioridade, fp->info[i].grupo, fp->info[meio].prioridade, fp->info[meio].grupo); j = j - 1; // menor } if(i <= j) { auxiliar->info[0] = fp->info[i]; fp->info[i] = fp->info[j]; fp->info[j] = auxiliar->info[0]; i = i + 1; j = j - 1; } } while(j > i); if(inicio < j) Quick(fp, auxiliar, inicio, j); if(i < fim) Quick(fp, auxiliar, i, fim); } void ajusta_fila(fila_prio * fp, int j, int x) { int i = fp->tam-1; while ((i >= 0 && ranking_prioridade(j) < fp->info[i].prioridade && fp->info[i].grupo != 'a' && ranking_grupo(j) != 'a') || (i >= 0 && fp->info[i].grupo != 'a' && ranking_grupo(j) == 'a') || (i >= 0 && ranking_prioridade(j) < fp->info[i].prioridade && fp->info[i].grupo != 'a' && ranking_grupo(j) == 'a') || (i >= 0 && ranking_prioridade(j) < fp->info[i].prioridade && fp->info[i].grupo == 'a' && ranking_grupo(j) == 'a') || (i >= 0 && ranking_prioridade(j) == fp->info[i].prioridade && fp->info[i].grupo != 'a' && ranking_grupo(j) != 'a' && fp->info[i].momento > x) ) //|| (i >= 0 && fp->info[i].prioridade > ranking_prioridade(j) && fp->info[i].grupo != 'a' && ranking_grupo(j) == 'a' )) // while ( (fp->info[i].grupo < fp->info[meio].grupo && fp->info[i].grupo == 97) || ( ( (fp->info[i].grupo == fp->info[meio].grupo) || (fp->info[i].grupo > 97) ) && (fp->info[i].prioridade < fp->info[meio].prioridade) ) ) { fp->info[i+1] = fp->info[i]; i--; } strcpy(fp->info[i+1].evento, eventos_nome[j]); fp->info[i+1].grupo = ranking_grupo(j); fp->info[i+1].prioridade = ranking_prioridade(j); fp->info[i+1].momento = x; fp->tam++; } void listar_FilaPrio(fila_prio * fp) { printf("Tamanho %d \n",fp->tam); for (int i = 0; i <= sizeof(fp) ; i++) { printf("Nome: %s | Prioridade : %d | Grupo : %c \n", fp->info[i].evento, fp->info[i].prioridade, fp->info[i].grupo); } } int ranking_prioridade(int num) { switch(num) { case 0: case 3: case 4: return 0; break; case 1: case 5: case 6: return 1; break; case 2: case 7: case 8: return 2; break; } return -1; } char ranking_grupo(int valor_at) { //int indice = strcspn(eventos_nome, fp[valor_array].evento); //printf("%d e %d -> ",valor_array, valor_at); switch(valor_at) { case 0: case 1: case 2: //fp[valor_array].grupo = 'a'; //printf("A"); return 'a'; break; case 3: case 5: case 7: //printf("B"); // fp[valor_array].grupo = 'b'; return 'b'; break; case 4: case 6: case 8: // printf("C"); // fp[valor_array].grupo = 'c'; return 'c'; break; } return -1; } #include <stdio.h> #include <stdlib.h> #include <string.h> #include "malloc.h" #include "engine.h" int main(int argc, char** argv) { fila_prio * fp[100]; fila_prio * auxiliar[100]; int op; int valor_roda; char nome_string[30]; do { printf("\n\n\tLISTA ORDENADA\n"); printf("\t<1> Inserir\n"); printf("\t<4> Imprimir\n"); printf("\t<0> Sair do programa\n"); printf("\tOpcao: "); scanf("%d", &op); switch (op) { case 1: printf("\tFatias de tempo :"); scanf("%d", &valor_roda); inserir_infos(fp, valor_roda); break; case 4: printf("\n\tConteudo da lista: "); listar_FilaPrio(fp); break; case 0: break; default: printf("\n\tOpcao invalida!\n"); } } while (op != 0); return 0; } // end main() // end testa_rotina() #ifndef ENGINE_H_INCLUDED #define ENGINE_H_INCLUDED #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX 100 typedef struct fpa_info { char evento[21]; // nome do evento char grupo; // 'a', 'b' ou 'c' int prioridade; // 0: alta, 1: média, 2: baixa int momento; unsigned long timestamp; // tempo em nanosegundos } fpa_info; typedef struct { int tam; struct fpa_info info[MAX]; } fila_prio; void inserir_infos(fila_prio *, int); void ajusta_fila(fila_prio *, int, int); int ranking_prioridade(int); char ranking_grupo(int); #endif // ENGINE_H_INCLUDED -
C Filas de prioridade em C Trab Impossivel :(
Gabriel Tellaroli Ramos respondeu ao tópico de Gabriel Tellaroli Ramos em C/C#/C++
S estou usando apenas o gcc -o e da esse erro do diretorio , vou tentar baixar essa versão do gcc mais atualizada porque daquele jeito selecionando o gcc++17 ou o gcc++11 n funcionou EDIT: Testei num compilador online e ele da esse erro de n achar o diretorio do windows.h também -
C Filas de prioridade em C Trab Impossivel :(
Gabriel Tellaroli Ramos respondeu ao tópico de Gabriel Tellaroli Ramos em C/C#/C++
N, justamente essa parte que a gente n fez ainda porque realmente n tem no windows mas se no Linux o que você enviou funcionar eu posso tentar rodar ele no Linux tenho uma maquina aqui que tem linux só n sei usar direito mas sei que precisa de um makefile, e eu n achei os arquivos .h no GIT sera que ta faltando eles ou n ? Estou com o Linux aqui tentei testar o programa no Linux e ele fla que n encontra o diretorio do windows.h creio que so exista no windows mas no windows n existe a funca do clock_gettime() n sei o que eu faço agr kkkkk -
C Filas de prioridade em C Trab Impossivel :(
Gabriel Tellaroli Ramos respondeu ao tópico de Gabriel Tellaroli Ramos em C/C#/C++
N, no windows -
C Filas de prioridade em C Trab Impossivel :(
Gabriel Tellaroli Ramos respondeu ao tópico de Gabriel Tellaroli Ramos em C/C#/C++
Teria que executar no Linux com o makefile? -
C Filas de prioridade em C Trab Impossivel :(
Gabriel Tellaroli Ramos respondeu ao tópico de Gabriel Tellaroli Ramos em C/C#/C++
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