Ir ao conteúdo

Gabriel Tellaroli Ramos

Membro Pleno
  • Posts

    32
  • Cadastrado em

  • Última visita

Tudo que Gabriel Tellaroli Ramos postou

  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. Teria que executar no Linux com o makefile?
  14. Eu selecionei a opção do C++11 e dps tentei a do C++17 mas continua com o erro ainda
  15. Uso a IDE no caso eu vou nessas opções e marco o C++17 e os dois C++11 ? Fui tentar e só da pra marcar 1 opção
  16. Opa consegui ver a versão e realmente minha versão é 5.1.0, teria que atualizar ou add alguma modificação como você comentou ??? Duvida nas linhas : Evento** p = (Evento**)e; ... Evento** p1 = (Evento**)evento1; Evento* e1 = *p1; Evento** p2 = (Evento**)evento2; Evento* e2 = *p2; ... Que que seriam esses ponteiros duplos ** ??Se é que pode se chamar assim kkkk
  17. S, nos estamos usando a estrutura de fila de prioridade para armazenar os eventos e estamos imprimindo pela sua prioridade já, só falta ajustar alguns detalhes para que o programa fique com execução correta semelhante a do trabalho mas acredito que agr esteja tudo Ok já, surgindo mais alguma duvida especifica eu entro em contato adicionado 2 minutos depois Primeiro você deve criar um novo projeto C e la você vai add os arquivos .c e .h copiando e colando pra pasta do projeto, depois dos arquivos estarem na pasta, você vai no projeto pelo codeblocks e clicka com o direito no projeto e seleciona add files então basta selecionar os arquivos .c e .h que você colo na pasta do projeto e pronto você consegue executar o programa
  18. Como você diz aqui v deve ta executando apenas o .c, sem criar um projeto e add as bibliotecas por isso o programa nunca vai rodar
  19. Amigo eu fiz o dowload dos programas e rodaram sem problemas, você n deve ta criando um projeto para add os .c e .h por tanto deve tar dando erro adicionado 2 minutos depois Boa cara, então na vdd estamos fazendo ainda (eu e meu grupo) vamos tentar entregar hj valendo um pouco menos mas conseguimos evoluir bastante já, realmente preciso estudar melhor esse conceito de filas, mas agradeço a atenção que você sempre tem sempre ajudando fico grato de vdd , é que realmente me sobra pouco tempo do dia com trabalho e faculdade, mas suas ajudas são sempre bem vindas, valeu abraço...
  20. N, e também n achei esse programa que você flo que mostrou, nem essa parte que precisa alterar
  21. @arfneto S, cheguei a ler mas como falei n entendo nd de fila/lista e aquele heap que você comentou.
  22. Estou tentando mas está difícil n consigo nem entender o objetivo do trab e o que tem que fazer, realmente o professor n explicou mt bem ainda mais com essas dificuldades da quarentena, e n entendo como você acha esse trabalho legal kkkk pra mim n tem sentido kkkk
  23. ED1-Trab01.pdfEstou com muita dificuldade para fazer esse trabalho realmente não entendi o conceito de filas e como trabalhar com elas em C, se alguém puder me ajudar não sei mas o que fazer obs: entrega 22/04
  24. @isrnick Nossa mano mt obrigado mesmo me ajudou mt cara n sei nem como agradecer e obrigado n sabia como postar codigo aqui no forum...

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