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:
B = B1,1 & B1,2 & B1,3 B2,1 & B2,2 & B2,3 B3,1 & B3,2 & B3,3
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:
  1. 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.
  2. 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 .
  3. 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 .
  4. 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 é:
ç

Exercícios relacionados