Dejair Junior Postado Novembro 5, 2015 Denunciar Share Postado Novembro 5, 2015 Bom dia galera!Preciso de um auxílio pra resolver essa situação problema que me deparei no fim do semestre, acredito que para os grandes gurus da linguagem C isso seja tranquilo, porém para mim está como um túnel sem luz no final! Peço auxílio por favor!Os links são dos arquivos de texto arquivo dados_coletados.txt (https://drive.google.com/file/d/0B7IzC05oTXBoMjVkLWZaNHBNSW8/view?usp=sharing) que contém os dados coletados pelo grupo que observou o trecho escolhido para o pedágio e o arquivo analise_pedagio.txt (https://drive.google.com/file/d/0B7IzC05oTXBoMjdBdFY5Tl9UUlE/view?usp=sharing) que contém o resultado esperado para o programa a ser desenvolvido.Desde já agradeço muito a ajuda pra esse caso que preciso solucionar até dia 16 de novembro! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 brunoandrad Postado Novembro 5, 2015 Denunciar Share Postado Novembro 5, 2015 Ola, até qual parte você já fez? Qual a dificuldade/erro que esta encontrando? Poste o código do que você já fez e as duvidas. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Dejair Junior Postado Novembro 5, 2015 Autor Denunciar Share Postado Novembro 5, 2015 Boa tarde amigo!Ainda não comecei e não sei por onde começar exatamente, vou me esforçar no próximo sábado e domingo. Se tu puder me dar uma dica de como começo me ajuda. Sou muito iniciante e não tenho prática. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Novembro 5, 2015 Denunciar Share Postado Novembro 5, 2015 Para abrir arquivos, utilize a função fopen. Para ler linha por linha do arquivo, utilize a função fgets, da stdio.h (ver primeiro exemplo).Para ler uma linha em especifico, utilize sscanf: sscanf(linha, "%d %d %d %d %d", &semana, &dia, &hora, &carros, &motos, &caminhoes);Onde semana, dia, hora, carros, motos e caminhoes são inteiros. O resto da lógica e análise, por enquanto, fica por você. Quando começar a trabalhar em cima do problema e enfrente alguma dúvida mais específica em relação a lógica, venha falar conosco!Abraços. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Dejair Junior Postado Novembro 6, 2015 Autor Denunciar Share Postado Novembro 6, 2015 Obrigado pessoal!!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 brunoandrad Postado Novembro 6, 2015 Denunciar Share Postado Novembro 6, 2015 Vai postando conforme você for fazendo(com as duvidas), ou após entregar o trabalho coloca o código aqui para gente. Esses trabalhos/exercícios são legais para pessoas como eu que estudam por conta própria. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Dejair Junior Postado Novembro 8, 2015 Autor Denunciar Share Postado Novembro 8, 2015 Certo Bruno, estou fazendo agora, o que tu acha de ir tentando fazer por aí também que assim podemos resolver facilmente esse problema? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Dejair Junior Postado Novembro 8, 2015 Autor Denunciar Share Postado Novembro 8, 2015 acredito que o início do programa seja esse, porém acho que faltam variáveis relacionadas a cada dia da semana pro cálculo das médias, tipo domingo=1, segunda=2....etc#include <stdio.h>#include <stdlib.h>int main(){ float vcarro=5, vmoto=2.5, vcami=10;//valores unitários de cada tipo de veículo float mcarro_dom, mmoto_dom, mcami_dom;//média do total de veículos em todos domingos float mcarro_seg, mmoto_seg, mcami_seg;//média do total de veículos em todas segundas-feiras float mcarro_ter, mmoto_ter, mcami_ter;//média do total de veículos em todas terças-feiras float mcarro_qua, mmoto_qua, mcami_qua;//média do total de veículos em todas quartas-feiras float mcarro_qui, mmoto_qui, mcami_qui;//média do total de veículos em todas quintas-feiras float mcarro_sex, mmoto_sex, mcami_sex;//média do total de veículos em todas sextas-feiras float mcarro_sab, mmoto_sab, mcami_sab;//média do total de veículos em todos sábados float valorm_dom, valorm_seg, valorm_ter, valorm_qua, valorm_qui, valorm_sex, valorm_sab;//valor médio por dia da semana, sendo considerado todas 5 semanas FILE *dados; dados = fopen("dados_coletados.txt", "r");//irá abrir o arquivo somente com permissão de leitura if (dados == NULL) { printf("Arquivo dados_coletados.txt não localizado!\n");//exibe mensagem de erro caso o arquivo não esteja na pasta de compilação system("pause");//pausa o sistema antes de reiniciar exit(1);//aborta o programa//espaço pra absorver dados do arquivo e fazer os cálculos } fclose(dados);FILE *estudo; estudo = fopen("estudo_pedagio.txt", "w");//irá abrir o arquivo com permissão de gravação if (estudo == NULL) { printf("Arquivo estudo_pedagio.txt não localizado!\n");//exibe mensagem de erro caso o arquivo não esteja na pasta de compilação system("pause");//pausa o sistema antes de reiniciar exit(1);//aborta o programa//espaço pra escrever resultados obtidos no arquivo e demonstrar ao usuário } fclose(estudo); system("pause"); return 0;} Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Dejair Junior Postado Novembro 8, 2015 Autor Denunciar Share Postado Novembro 8, 2015 (editado) Não consigo entender como fazer o programa ler os dados específicos do arquivo dados_coletados.txt, por exemplo: ler todos a quantidade de carros em todas as horas (0-23), em todos domingos (dia 1), nas 5 semanas (1-5) para que a partir destes dados possa calcular as médias e grave em um novo arquivo estudo_pedagio.txt para ser demonstrado na tela. Para abrir arquivos, utilize a função fopen. Para ler linha por linha do arquivo, utilize a função fgets, da stdio.h (ver primeiro exemplo).Para ler uma linha em especifico, utilize sscanf: sscanf(linha, "%d %d %d %d %d", &semana, &dia, &hora, &carros, &motos, &caminhoes);Onde semana, dia, hora, carros, motos e caminhoes são inteiros. O resto da lógica e análise, por enquanto, fica por você. Quando começar a trabalhar em cima do problema e enfrente alguma dúvida mais específica em relação a lógica, venha falar conosco!Abraços. Durub:O sscanf é para ler uma linha específica (sentence)? Qual a diferença para o fscanf? O que estou em dúvida também é q são 840 linhas no total em 7 dias para 5 semanas, deverei fazer então um sscanf para cada linha que preciso buscar determinado valor? Sendo assim então terei que criar variáveis para alocar os valores para os cálculos? Por exemplo: para receber a quantidade de carros no primeiro domingo da primeira semana. Editado Novembro 8, 2015 por Dejair Junior Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Novembro 8, 2015 Denunciar Share Postado Novembro 8, 2015 A diferença é que se tiver uma linha mal formada, o programa continua sem problemas. Lendo uma linha por vez, caso a linha contenha problemas, a entrada continua ok para a próxima linha. Todavia, ainda é bom disparar um erro. Pode-se verificar quantos dados o sscanf leu com seu valor de retorno. Se ele for diferente de 5, um erro de leitura ocorreu.O sscanf deverá estar em um loop, onde os dados são lidos e armazenados corretamente de acordo com a semana. Recomendo utilizar arrays (vetores) para fazer isso.Abraços. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Dejair Junior Postado Novembro 9, 2015 Autor Denunciar Share Postado Novembro 9, 2015 Pode me ajudar dizendo como seria um exemplo de código de utilização em Loop? Pois o conceito eu sei mas a prática de aplicação que estou com dificuldades. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vangodp Postado Novembro 9, 2015 Denunciar Share Postado Novembro 9, 2015 #include <stdio.h> #include <stdlib.h> typedef struct { int nSemana; int diaSemana; int hora; int nCarros; int nMotos; int nCaminhoes; }Dados; int main (){ Dados d; FILE *f = fopen("dados_coletados.txt", "r"); if ( f == NULL ){ perror("Erro"); getchar(); return 1; } while( fscanf(f,"%d %d %d %d %d %d%*c", &d.nSemana, &d.diaSemana, &d.hora, &d.nCarros, &d.nMotos, &d.nCaminhoes ) != EOF ){ //Processar printf( "%d %d %2d %2d %2d %2d\n", d.nSemana, d.diaSemana, d.hora, d.nCarros, d.nMotos, d.nCaminhoes ); } fclose(f); getchar(); return 0; }Esse código lê completamente o arquivo dados_coletados.txt, depois disso você só precisa usar contadores para ir obtendo os dados. por exemplo, para obter os dados dos carros passados cada dia da semana você vai precisar de um vetor de inteiros tipo int nCarrosDia[7];, esse vetor vai guardar o total de carros durante uma semana. Nós sabemos que são 5 semanas, então podemos ter uma matriz em vez de um vetor, tipo int nCarros[5][7] (5 semanas de 7 dias). Si queremos contar os carros da segunda feira da semana 2 seria nCarros[1][0]++; por cada carro que passe esse dia. você vai precisar de algo parecido para motos e caminhões também, você pode agrupar tudo isso baixo uma estrutura, algo como:#include <stdio.h> #include <stdlib.h> #define SEMANAS 5 #define DIAS 7 typedef struct { int nCarros [DIAS]; int nMotos [DIAS]; int nCaminhoes[DIAS]; }Contadores; int main (){ Contadores semana[SEMANAS] = {0}; // 5 semanas por 7 dias = um mes //contar 2 carros quarta feira da semana 3: semana[2].nCarros[2]++; semana[2].nCarros[2]++; printf ( "Quarta feira da semana numero 3 passaram %d carros.", semana[2].nCarros[2] ); getchar(); return 0; } Vou deixar um exemplo que diz todos os carros que passaram durante a encosta:#include <stdio.h> #include <stdlib.h> #define SEMANAS 5 #define DIAS 7 #define HORAS 24 typedef struct { int nSemana; int diaSemana; int hora; int nCarros; int nMotos; int nCaminhoes; }Dados; typedef struct { int nCarros [DIAS][HORAS]; int nMotos [DIAS][HORAS]; int nCaminhoes[DIAS][HORAS]; }Contadores; FILE *fileOpen(); int main (){ Contadores semana[SEMANAS] = {0}; // 5 semanas por 7 dias = um mes Dados d; FILE *f = fileOpen(); int allCar = 0; //lemos o arquivo e guardamos os numeros no array de structs Contador chamado semana. while( fscanf(f,"%d %d %d %d %d %d%*c", &d.nSemana, &d.diaSemana, &d.hora, &d.nCarros, &d.nMotos, &d.nCaminhoes ) != EOF ){ //Processar allCar += d.nCarros; // para comparar com contadorCarros e ver si bate o resultado, teoricamente é a mesma coisa, só que aqui obtenho o resultado desde o ficheiro, e mais abaixo desde a memoria. semana[ d.nSemana-1 ].nCarros [d.diaSemana-1][d.hora] += d.nCarros; //semana[ d.nSemana-1 ].nMotos [d.diaSemana-1][d.hora] += d.nMotos; //semana[ d.nSemana-1 ].nCaminhoes[d.diaSemana-1][d.hora] += d.nCaminhoes; } //Agora posso fazer coisas como contar o numero total de carros que passaram int s, _d, h, contadorCarros=0; for ( s = 0; s < SEMANAS; s++ ){ for ( _d = 0; _d < DIAS; _d++ ){ for ( h = 0; h < HORAS; h++ ){ contadorCarros += semana[ s ].nCarros [_d][h]; //printf ( "carros semana[%d] dia[%d] hora[%d]: %d\n", s, _d, h, contadorCarros ); } } } //informar o numero total de carros desde a memoria printf ( "Todos os carros que passaram = %d(memoria) \n\n", contadorCarros); //informar o numero total de carros desde o arquivo para comparar com o resultado anterior //printf ( "Todos os carros que passaram = %d(arquivo) \n\n", contadorCarros); fclose(f); getchar(); return 0; } FILE *fileOpen(){ FILE* f = fopen("dados_coletados.txt", "r"); if ( f == NULL ){ perror("Erro"); getchar(); exit(1); } return f; }Como você pode ver, uma vez obtido os números desde o arquivo, você pode fazer o que quiser com ele, para obter o numero de carros total eu somei todos os carros que passaram em um contador durante as 5 semanas todos os 7 dias e 23 horas cada dia. isso me da o total de carros que passaram, para obter uma media deveria dividir esse números devidamente para obter o resultado. Mas as mates se me dão fatal hahaha, igual que a língua portuguesa. XDTente fazer seu código em base a esse si precisar de algo vai expondo aqui suas duvidas. Sorte. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Dejair Junior Postado Novembro 14, 2015 Autor Denunciar Share Postado Novembro 14, 2015 Valeu por hora VANGODP!Como resultado deste problema tenho que implementar um código que apresente este resultado:Numero de semanas: 5Numero de dias por semana: 7Valor pedagio para carros: R$ 5,00Valor pedagio para motos: R$ 2,50Valor pedagio para caminh?es: R$ 10,00Domingo-------Numero medio de veiculos: 617,400Numero medio de carros: 222,000Numero medio de motos: 233,600Numero medio de camihoes: 161,800Rendimento medio por semana: R$ 3312,00Segunda-------Numero medio de veiculos: 730,000Numero medio de carros: 261,800Numero medio de motos: 224,400Numero medio de camihoes: 243,800Rendimento medio por semana: R$ 4308,00Terca-------Numero medio de veiculos: 619,600Numero medio de carros: 201,600Numero medio de motos: 214,600Numero medio de camihoes: 203,400Rendimento medio por semana: R$ 3578,50Quarta-------Numero medio de veiculos: 733,400Numero medio de carros: 206,200Numero medio de motos: 240,200Numero medio de camihoes: 287,000Rendimento medio por semana: R$ 4501,50Quinta-------Numero medio de veiculos: 654,000Numero medio de carros: 171,600Numero medio de motos: 228,600Numero medio de camihoes: 253,800Rendimento medio por semana: R$ 3967,50Sexta-------Numero medio de veiculos: 598,000Numero medio de carros: 195,200Numero medio de motos: 214,200Numero medio de camihoes: 188,600Rendimento medio por semana: R$ 3397,50Sabado-------Numero medio de veiculos: 537,200Numero medio de carros: 204,800Numero medio de motos: 137,200Numero medio de camihoes: 195,200Rendimento medio por semana: R$ 3319,00Maior movimento ocorrido foi 65 veiculos na semana 3, dia 2, hora 0. Sendo que o professor disse que no dia irá mudar valores para ver se o processamento está correto.Como foi extremamente superficial os conteúdos ensinados por ser o primeiro nível, ele não ensinou STRUCT, acredito que seja semelhante à FUNÇÃO mas realmente fiquei sem muita compreensão, e outra coisa que fiquei sem entender é o símbolo de += em (allCar += d.nCarros).Fico no teu aguardo de mais auxílio!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Novembro 14, 2015 Denunciar Share Postado Novembro 14, 2015 Estou com pouco tempo, mas posso adiantar duas coisas:allCar += d.nCarros é equivalente a allCar = allCar + d.nCarros -- basicamente, você está somando à variável.Tem uma introdução legal sobre structs aqui: http://www.ime.usp.br/~pf/algoritmos/aulas/stru.htmlAbraços, Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Dejair Junior Postado Novembro 15, 2015 Autor Denunciar Share Postado Novembro 15, 2015 Bom dia amigo Durub,não estou conseguindo entender essa matéria STRUCT e inclusive falei com um colega e ele disse que como não foi visto em aula o professor prefere que não coloque conteúdos não vistos em aula.Teria como me ajudarem com esse código sem a utilização de STRUCT em C?Fico no aguardo galera e desde já te agradeço!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Dejair Junior Postado Novembro 17, 2015 Autor Denunciar Share Postado Novembro 17, 2015 Alguém consegue me ajudar?Tenho que apresentar hoje o trabalho e ainda não consegui entender como fazer para o programa buscar dados específicos em um arquivo de texto e fazer com que ele calcule soma e média a partir desses dados para esse caso!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Dejair Junior
Bom dia galera!
Preciso de um auxílio pra resolver essa situação problema que me deparei no fim do semestre, acredito que para os grandes gurus da linguagem C isso seja tranquilo, porém para mim está como um túnel sem luz no final! Peço auxílio por favor!
Os links são dos arquivos de texto arquivo dados_coletados.txt (https://drive.google.com/file/d/0B7IzC05oTXBoMjVkLWZaNHBNSW8/view?usp=sharing) que contém os dados coletados pelo grupo que observou o trecho escolhido para o pedágio e o arquivo analise_pedagio.txt (https://drive.google.com/file/d/0B7IzC05oTXBoMjdBdFY5Tl9UUlE/view?usp=sharing) que contém o resultado esperado para o programa a ser desenvolvido.
Desde já agradeço muito a ajuda pra esse caso que preciso solucionar até dia 16 de novembro!
Link para o comentário
Compartilhar em outros sites
15 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.