WolfmanZ Posted October 6, 2012 at 05:54 PM Report #478013 Posted October 6, 2012 at 05:54 PM como alocar matriz dinamicamente? e como faço para ler dados de um ficheiro para cada posiçao da matriz sabendo que a linha é assim: linha: 1452314(valor varia), M, 0.46546, 0.45785, ...? sei que o fscanf faz da para ler ate "," mas nao sei como se faz.
pmg Posted October 6, 2012 at 06:05 PM Report #478018 Posted October 6, 2012 at 06:05 PM hehe ... Faltaste a aula onde isso foi explicado? Os teus colegas nao te emprestam os apontamentos? Para alocacao dinamica usa malloc() ou calloc() ou realloc(); nao te esquecas de libertar os recursos quando ja nao precisares deles, com free(). Para leres numeros de virgula flutuante (tipo double) com o scanf() usa a conversao "%lf". What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
WolfmanZ Posted October 6, 2012 at 06:21 PM Author Report #478024 Posted October 6, 2012 at 06:21 PM nao é isso por acaso nao me lembro de fazer nada com matrizes dinamicas e a cena da virgula é dos para separar para onde dados vao os dados 123565-> M[0][0] M->[0][1] 0.545232->M[0][2]
pmg Posted October 6, 2012 at 07:08 PM Report #478035 Posted October 6, 2012 at 07:08 PM (edited) O scanf() descreve mais ou menos o que se quer ler (e ignorar). Para o teu exemplo concreto queres: a) ler um valor de tipo double, possivelmente com espacos antes b) ignorar uma virgula, um espaco, um 'M', uma virgula c) ler um valor de tipo double, possivelmente com espacos antes d) ignorar uma virgula e) ler um valor de tipo double, possivelmente com espacos antes f) verificar que as leituras e "ignoracoes" estao de acordo com a especificacao Isso faz-se com int check; check = scanf("%lf, M,%lf,%lf", &M[0][0], &M[0][1], &M[0][2]); if (check != 3) /* erro na leitura */; Outra maneira mais potente, no que respeita a tratamento e recuperacao de erros u usar fgets() para ler uma linha completa com ENTER e tudo, depois tratar essa linha com sscanf(), strtod() ou directamente caracter a caracter. Edited October 6, 2012 at 07:08 PM by pmg What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
WolfmanZ Posted October 6, 2012 at 07:15 PM Author Report #478040 Posted October 6, 2012 at 07:15 PM ok se eu ler a linha toda para uma string como faço para meter os valores na matriz string fica : "123546,M,0.464,0.214,0.154..." quero ler o 123546 para M[0][0] M para M[0][1] 0.464 para M[0][2] etc.
pmg Posted October 6, 2012 at 07:44 PM Report #478056 Posted October 6, 2012 at 07:44 PM ok se eu ler a linha toda para uma string como faço para meter os valores na matriz ... O sscanf() usa-se de maneira muito parecida com o scanf(). O meu exemplo acima com o scanf aplica-se quase sem alteracao para o sscanf(). A diferenca é que com o sscanf() tens acesso a string original e podes usa-la para explicar o erro ao utilizador. ... quero ler o 123546 para M[0][0] M para M[0][1] 0.464 para M[0][2] etc. Eh la ... nao podes ter tipos de dados diferentes em elementos distintos da matriz: ou sao todos valores de tipo double, ou sao todos caracteres, ou sao todos strings. Nao estas a confundir a matriz (ou array de arrays) com um mais simples array de estruturas? What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
WolfmanZ Posted October 6, 2012 at 08:12 PM Author Report #478064 Posted October 6, 2012 at 08:12 PM O sscanf() usa-se de maneira muito parecida com o scanf(). O meu exemplo acima com o scanf aplica-se quase sem alteracao para o sscanf(). A diferenca é que com o sscanf() tens acesso a string original e podes usa-la para explicar o erro ao utilizador. Eh la ... nao podes ter tipos de dados diferentes em elementos distintos da matriz: ou sao todos valores de tipo double, ou sao todos caracteres, ou sao todos strings. Nao estas a confundir a matriz (ou array de arrays) com um mais simples array de estruturas? se encontrar o M tem de meter na matriz um 1 se encontra B mete 0
pmg Posted October 6, 2012 at 08:25 PM Report #478068 Posted October 6, 2012 at 08:25 PM Em vez de usares M explicito no scanf() (ou sscanf()) usa %c e mete numa variavel temporaria. Depois, com um if, detecta se nessa variavel esta um 'M' ou um 'B' e actualiza o elemento do array de acordo com a situacao. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
WolfmanZ Posted October 7, 2012 at 04:35 PM Author Report #478141 Posted October 7, 2012 at 04:35 PM (edited) while (!feof(fp)) { fgets(aux,250,fp); pch = strtok (aux, ","); while (pch != NULL) { M[i][j] = atof(pch); pch = strtok (NULL, ","); break; j++; } i++; break; } /* M matriz de floats */ alguem me consegue ajudar a passar os dados lidos das linhas para a matriz ? Edited October 7, 2012 at 06:07 PM by pmg falta de LP
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now