Ir ao conteúdo
  • Cadastre-se

mandalori

Membro Júnior
  • Posts

    6
  • Cadastrado em

  • Última visita

Tudo que mandalori postou

  1. "Engessado" correto :). preciso avançar o conteudo em lista encadeada, mas retomo com mais calma em breve. Obrigado mesmo.
  2. Bom dia @arfneto? sim eu entendo sua colocação as vezes vejo que o ensino da federal é muito enjessado, mas de qualquer forma preciso entender que o que esta sendo passado é para uma boa formação acredito eu. Bom, pesquisei na internet por alguns trabalhos, revisei o que estou fazendo mas não saio do mesmo lugar. Dentro do arquivo implementaca.c como o trabalho porposto sugeriu criar funçoes que retornam o valor de cada membro de cada indice apontado como no caso. int obter_amostra(dado_t *dado); float obter_temperatura(dado_t *dado); int obter_hora(dado_t *dado); interface.h int obter_amostra(dado_t *dado) { return dado->amostra; } float obter_temperatura(dado_t *dado) { return dado->temperatura; } int obter_hora(dado_t *dado) { return dado->tempo; } implementacao.c dado_t **sensor = ler_dados_csv("camera_temp.csv", &n_linhas); /* Imprima os dados:*/ printf("Amostra----Temperatura------hora\n"); for (i=0; i < 100; i++){ //printf( "...", obter_amostra(dados[i]), obter_temperatura(dados[i]), ... ); printf("%d, %f\n" , obter_amostra(sensor[i]), obter_temperatura(sensor[i]), obter_hora(sensor[i])); } main.c como pode ver, eu segui sua experiência em não escrever as declarações muito parecidas, agora ja estou sem conhecimento para terminar. Já abri o arquivo, li cada cada linha armazenei em cada campo da matriz **sensor, mas como acesso eles dentro da main.c? as funções obeter_xxx estão corretas? Dentro do for eu coloquei um inteiro 100 para garantir o laço po ruqe de fato não sei como usar o *tatal_dados. Precisar de mais detalhes é só pedir. Mais uma vez muito obrigado @arfneto.
  3. Ola! arfneto tudo bom? obrigado pela dedicação amigo, nossa você domina a linguagem tanto de programação quanto em explicar o conteúdo. Não apliquei ainda (neste horário) mas vou aplicar sim para corrigir, explicando sobre a comlexidade do código, ele foi postado pelo próprio professor para para estudar bem sobre a implementação de um TAD, embora que outros programas em nivéis menos complexos de tipos abstratos de dados eu ja domino bem, porém ponteiro para ponteiro preciso melhor muito. Assim que eu aplicar as correções de acordo com sua explicação e funcionar já respondo, finalizando, desculpa por não deixar na descrição o conteúdo do arquivo. Obrigado.
  4. Ola amigo 'V!OLADOR' tudo bom? obrigado pelo esforço em ajudar, de fato não tinha percebido essa atualização da variavel n_linhas porém eu não sei se você chegou a rodar o codigo mas na main.c acusa um erro de desreferenciar a matriz de ponteiro de ponteiro para struct, infelizmente não consegui entender essa parte procurei no livro c-total ou em alguma outras fontes mas não consegui uma explicação. puder dar mais um help valeu amigo Obrigado pela força.
  5. Ola pessoal tudo bem? Estou com um trabalho de faculdade deste semestre e por causa da pandemia não tivemos mais monitoria por isso se alguém puder me ajudar com meu trabalho agradeço. o programa a baixo faz uso de TDA em linguagem C e o erro que acontece é exatamente no main.c não consigo mostrar os dados lido no arquivo. Agradeço muito se me ajudarem. /** Programa que exibe na tela dados formatados * de um arquivo CSV conforme o padrão: * Series;Value;Time * <int>;<float>;<string> * <int>;<float>;<string> */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "interface.h" int main(){ int i; int n_linhas = 0; dado_t **dados = ler_dados_csv("camera_temp.csv", &n_linhas); /* Imprima os dados:*/ printf("Amostra----Temperatura------hora\n"); /* for (i=0; i < n_linhas; i++){ //printf( "...", obter_amostra(dados[i]), obter_temperatura(dados[i]), ... ); printf("%d, %f, %s\n", dados[i]->amostra, dados[i]->temperatura, dados[i]->tempo); } */ for (i=0; i < n_linhas; i++){ //printf( "...", obter_amostra(dados[i]), obter_temperatura(dados[i]), ... ); dados[i]; for(int k=0; k<1; k++) { printf("%d, %f, %s", dados->amostra, dados->temperatura, dados->tempo); } } // liberar_dados(); liberar_dados(dados); return 0; } main.c /* de um arquivo CSV conforme o padrão: * Series;Value;Time * <int>;<float>;<string> * <int>;<float>;<string> */ /* Includes de sistema */ #include <stdio.h> #include <stdlib.h> #include <string.h> /* Includes do módulo */ #include "interface.h" /* Ativa depuração do módulo, comente para código final */ #define DEBUG struct dados { int amostra; /*!< Identificador numérido da amostra */ float temperatura; /*!< Valor do dado: temperatura */ char tempo[15]; /*!< Time stamp */ }; typedef struct dados dado_t; dado_t * criar_dado (int amostra, float temperatura, char * timestamp) { dado_t * meu_novo_dado = malloc(sizeof(struct dados)); if(meu_novo_dado==NULL) { perror("abrir o arquivo"); exit(1); } /* Novos dados são copiados para nova estrutura vinda do malloc */ meu_novo_dado->amostra = amostra; meu_novo_dado->temperatura=temperatura; strcpy(meu_novo_dado->tempo, timestamp); //(...) //use strncpy para o timestamp return meu_novo_dado; } /*===========================Lê o arquivo e aloca memoria dinamicamente de acordo com o tamanho do arquivo===================*/ dado_t **ler_dados_csv(char *nome_do_arquivo, int *total_dados) { char buffer[64]; int i=0; /* Demais Variáveis */ int n_linhas = 0; int amostra; float temperatura; char hora[15]; /*Cria uma matriz de struct do tipo dado_t*/ dado_t **dados; FILE *fp = fopen(nome_do_arquivo,"r"); if (!fp) { perror("ler_dados_csv"); exit(1); } /* Ignora primeira linha */ fgets(buffer,64, fp); /* Contar todas as linhas: use while e fgets() */ while( !feof(fp)) { fgets(buffer, 64, fp); i++; } printf("%d: linhas lidas\n", i); /* Aloque memória: * Agora é um vetor de ponteiros */ dados = (dado_t**)malloc(n_linhas*sizeof(dado_t *) ); /*retorna ao inicio do arquivo*/ rewind(fp); /* Ignora primeira linha */ fgets(buffer,64, fp); while (fscanf (fp, "%d,%f,%14[^\n]s", &amostra, &temperatura, hora) == 3) { #ifdef DEBUG printf("%d, %f, %s\n", amostra, temperatura, hora); #endif /* Cria um novo dado abstrato e armazena a sua referência */ // dados[i] = criar_dado(amostra, temperatura, data); dados[i]=criar_dado(amostra, temperatura, hora); i++; } /*total de linhas lidas*/ *total_dados = i; /*retorna */ return dados; } int obter_amostra(dado_t *dado) { return dado->amostra; } void liberar_dados(dado_t **vetor) { free(vetor); } implemetacao.c #ifndef DADO_H_INCLUDED /* Criação de tipo abstrato dado_t */ typedef struct dados dado_t; /** * @brief Cria um novo dado * @param amostra: identificador da amostra * @param temperatura: valor da temperatura * @param timestamp: data e hora da amostra * * @retval dado_t: ponteiro para uma novo dado */ dado_t * criar_dado (int amostra, float temperatura, char * timestamp); /* Outras funções aqui: fazer os comentários */ void liberar_dados(dado_t **vetor); dado_t **ler_dados_csv(char *nome_do_arquivo, int *total_dados); //int obter_amostra(dado_t *dado); #endif interface.h camera_temp.csv

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!