Uma coleção bidimensional B com M linhas e N colunas é armazenada na memória, linha após linha, de forma seqüencial. Sabendo-se que cada elemento ocupa K bytes e que o elemento B1,1 está no endereço end, e que encontre a fórmula que relaciona a cada par (lin, col) o endereço de memória onde encontra-se armazenado o elemento Blin, col.
Passo 1
Beleza, vamos entender o que o exercício está pedindo! Temos uma matriz bidimensional com linhas e colunas. Essa matriz está armazenada na memória do computador, linha por linha, de forma sequencial. Cada elemento dessa matriz ocupa bytes de memória. O elemento está armazenado no endereço de memória chamado . A dúvida é: como encontrar uma fórmula que, dado um par de índices , nos diga em qual endereço de memória está o elemento ?
Vamos precisar entender como os computadores armazenam matrizes na memória e como calcular endereços de memória usando essas informações.
Passo 2
Primeiro, vamos falar sobre armazenamento de matrizes na memória. Quando uma matriz é armazenada linha após linha (chamado de armazenamento em linha ou row-major order), significa que todos os elementos de uma linha são armazenados sequencialmente antes de passar para a próxima linha.
Por exemplo, para uma matriz 3x3:
Na memória, seria armazenada assim: .
Passo 3
Agora, precisamos calcular a posição do elemento Endereço(Blin, col) = end + [ (lin - 1) times N + (col - 1) ] times K na memória. Para isso, vamos usar alguns conceitos de endereçamento linear.
A fórmula geral para encontrar o endereço de memória de um elemento em uma matriz armazenada em linha é:
ç
Vamos entender cada parte dessa fórmula:
: endereço de memória do primeiro elemento .
: calcula quantos elementos estão nas linhas anteriores à linha atual.
: adiciona a posição dentro da linha atual.
Multiplicando por : converte o número de elementos em bytes, já que cada elemento ocupa bytes.
Passo 4
Vamos detalhar cada parte da fórmula:
Calculando os elementos das linhas anteriores:
(lin - 1) times N
Isso nos dá o total de elementos que estão antes da linha atual na matriz.
Adicionando a posição na linha atual:
(lin - 1) times N + (col - 1)
Agora, temos o número total de elementos antes de [ (lin - 1) times N + (col - 1) ] times K .
Convertendo para bytes:
Endereço(Blin, col) = end + [ (lin - 1) times N + (col - 1) ] times K
Isso nos dá o deslocamento em bytes a partir do endereço inicial .
Calculando o endereço final:
ç
Esse é o endereço de memória onde está armazenado .
Resposta
A fórmula que relaciona cada par Endereço(Blin, col) = end + [ (lin - 1) times N + (col - 1) ] times K ao endereço de memória onde está armazenado o elemento é: