Considere o vetor vect abaixo e as operações realizadas com seus elementos.
int vect[SIZE], k;
for (
;
SIZE;
)
vect [ k ] = k;
for (
; k <SIZE;
)
vect [ k ] += vect[ k - 1 ];
(a) Quantos elementos possui o vetor vect?
(b) Apresente sequencialmente os elementos do vetor vect, após as operações realizadas, com SIZE
.
int vect[SIZE], k;
for (
vect [ k ] = k;
for (
vect [ k ] += vect[ k - 1 ];
(a) Quantos elementos possui o vetor vect?
(b) Apresente sequencialmente os elementos do vetor vect, após as operações realizadas, com SIZE
Passo 1
O enunciado apresenta um vetor declarado como
e dois laços que operam sobre seus elementos:
As perguntas são:
(a) Quantos elementos possui o vetor ?
(b) Para , quais são, em sequência, os elementos de
após as duas operações?
(a) Quantos elementos possui o vetor
(b) Para
Passo 2
Entendendo a declaração do vetor: quando escrevemos
em C, o vetor contém exatamente
posições. Essas posições são indexadas de
até
. Ou seja, os índices válidos são
Portanto, a resposta direta para (a) é que o vetor tem
elementos. Vou detalhar o porquê nos próximos passos para ficar claro na prova.
Passo 3
O primeiro laço inicializa o vetor com
Isso significa que, imediatamente após o primeiro laço, os elementos são
Para
isso produz inicialmente a sequência
Passo 4
O segundo laço executa
ou seja, para cada
atualiza-se
somando o valor já existente em
. Como
já pode ter sido atualizado no passo anterior do laço, o efeito deste laço é transformar cada
no somatório dos índices de
a
:
Uma demonstração rápida por raciocínio (tipo indução): para
temos
. Suponha que para algum
vale
. Então ao executar o passo
do laço:
Portanto a fórmula vale para todo
.
Passo 5
Usando a fórmula fechada para a soma dos primeiros inteiros
podemos calcular cada elemento depois do segundo laço. Vou listar
e
(uso
, então
):
Para
:
Para
:
Para
:
Para
:
Para
:
Para
:
Para
:
Para
:
Para
:
Para
:
Assim, para
a sequência final de elementos é
Resposta
(a)
elementos.
(b)
(b)