Jump to content

[Resolvido] Introduzir valores em matrizes


joaovilaca94
 Share

Recommended Posts

Boas!

Estive a tentar desenvolver um programa para introduzir valores em matrizes (neste caso numa matriz [10][7]) e estes ficarem guardados em ficheiros...

o código que fiz foi o seguinte:

FILE *ft;

ft = fopen("temperaturas.txt","r+");

int temp;

fprintf(ft, "%s", "Introduza as Temperaturas:\n");

for(i=0; i<10;i++)
{

 for(j=0; j<7; j++)
 {
   fscanf(ft, "%d", &temp);

   cid_temp[i][j] = temp;
 }

}

fclose(ft);

o unico erro que me dá é o seguinte:

"prog.temperaturas.c: In function ‘introduz_temperatura’:

prog.temperaturas.c:24:14: error: subscripted value is neither array nor pointer nor vector

cid_temp[j] = temp;"

Não consigo perceber qual é o problema que existe com o "j"...

Se alguem me pudesse ajudar agradecia,

cumprimentos

Link to comment
Share on other sites

void introduz_temperatura(int *cid_temp)
{
int i, j;

FILE *ft;
ft = fopen("temperaturas.txt","r+");
int temp;
fprintf(ft, "%s", "Introduza as Temperaturas:\n");
for(i=0; i<10;i++)
{
for(j=0; j<7; j++)
{
 fscanf(ft, "%d", &temp);

 cid_temp[i][j] = temp;
}
}

fclose(ft);

}

passo como sendo um vetor de inteiros...

Edited by thoga31
GeSHi
Link to comment
Share on other sites

Quando perguntei qual era a declaração de cid_temp presumi que me estivesses a dar a declaração correcta... Da forma que declaraste o cid_temp dentro da função, estás a dizer que é um array de inteiros, o que impede logicamente a operação que estavas a tentar realizar (i.e. cid_temp é um int, aos olhos do compilador). Tens que dizer ao compilador que é um array bidimensional (ou array de array de inteiros).

Solução: int **cid_temp.

Edited by pwseo
Link to comment
Share on other sites

Mas isso vai obrigar a passar o cid_temp de um array bidimensional para um array de arrays.

Tendo em conta que as dimensões são conhecidas (são usadas nos ciclos da função), penso que uma solução mais simples será declarar a função como void introduz_temperatura(int cid_temp[10][7]).

Qual a diferenca entre um array bidimensional e um array de arrays?

Um array bidimensional nao e um array de arrays mas com 2 dimensoes?

E qual o problema do array passar a ser array de arrays?

Link to comment
Share on other sites

Em C, os arrays multidimensionais são semelhantes a arrays unidimensionais em termos de organização de memória, oferecendo apenas açúcar sintático no acesso aos seus elementos. Por exemplo, int array1[M][N] é equivalente a um array de int array2[M*N], e aceder à posição array1 é equivalente a aceder à posição array2[i*N+j].

A minha definição de array de arrays é semelhante aos arrays bidimensionais do Java, em que tens um array de apontadores para arrays (unidimensionais). Neste caso, int array1[M][N], em vez de ser um espaço de memória contíguo de M*N posições, é um array de M apontadores para arrays de tamanho N. (Estes M arrays de tamanho N podem ou não estar em posições contíguas de memória.)

Link to comment
Share on other sites

Em C, os arrays multidimensionais são semelhantes a arrays unidimensionais em termos de organização de memória, oferecendo apenas açúcar sintático no acesso aos seus elementos. Por exemplo, int array1[M][N] é equivalente a um array de int array2[M*N], e aceder à posição array1 é equivalente a aceder à posição array2[i*N+j].

A minha definição de array de arrays é semelhante aos arrays bidimensionais do Java, em que tens um array de apontadores para arrays (unidimensionais). Neste caso, int array1[M][N], em vez de ser um espaço de memória contíguo de M*N posições, é um array de M apontadores para arrays de tamanho N. (Estes M arrays de tamanho N podem ou não estar em posições contíguas de memória.)

Mas acredito que possas na mesma acedê-los da mesma forma que acederias um array bidimensional int array[M][N].

Link to comment
Share on other sites

Mas acredito que possas na mesma acedê-los da mesma forma que acederias um array bidimensional int array[M][N].

Sim, podes. Mas a sua declaração/inicialização é diferente. (A razão pela qual eu sugeri não usar o int** era precisamente o facto de tal obrigar a alterar a declaração/inicialização da variável que era passada como argumento da função.)

  • Vote 1
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.