Ir ao conteúdo
  • Cadastre-se

Gabriel Tellaroli Ramos

Membro Pleno
  • Posts

    33
  • Cadastrado em

  • Última visita

Reputação

11
  1. @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.
  2. @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
  3. 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
  4. 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
  5. 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
  6. 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.
  7. 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 ???
  8. 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...
  9. 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
  10. 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
  11. 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
  12. 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
  13. Eu selecionei a opção do C++11 e dps tentei a do C++17 mas continua com o erro ainda

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...