0% acharam este documento útil (0 voto)
48 visualizações30 páginas

APII Semana4 Arrays

Vetores são estruturas de dados unidimensionais e homogêneas em C que armazenam vários elementos do mesmo tipo de dados sequencialmente na memória. Cada elemento é identificado por um índice e o tamanho do vetor deve ser definido em tempo de compilação. Funções podem receber vetores como parâmetros, mas perdem a informação do tamanho, que deve ser passada separadamente.

Enviado por

Vinicius Lima
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PPTX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
48 visualizações30 páginas

APII Semana4 Arrays

Vetores são estruturas de dados unidimensionais e homogêneas em C que armazenam vários elementos do mesmo tipo de dados sequencialmente na memória. Cada elemento é identificado por um índice e o tamanho do vetor deve ser definido em tempo de compilação. Funções podem receber vetores como parâmetros, mas perdem a informação do tamanho, que deve ser passada separadamente.

Enviado por

Vinicius Lima
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PPTX, PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 30

Vetores (Arrays)

Algoritmos e Programação II – Turma 02D


2º semestre de 2023

Prof. André Kishimoto


Prof. Gustavo Scalabrini Sampaio
Prof. Leandro Carlos Fernandes

(Conteúdo adaptado do material elaborado e gentilmente cedido pela


profa. Ana Grasielle Dionisio Correa e prof. Tomaz Mikio Sasaki)
Variáveis Compostas Homogêneas

• Interpretada como um conjunto (coleção) de valores de um


mesmo tipo. Podem ser
• Unidimensionais (Vetores)
• Multidimensionais (Matrizes)
• Requerem novos conceitos para serem manipuladas
Vetores

• Também conhecido como arrays ou, ainda, arranjos.


• Tipo de dado usado para representar uma coleção de variáveis
de um mesmo tipo.
• Cada variável dentro dessa coleção é chamada de elemento do vetor.
• Estrutura de dados homogênea e unidimensional.
Vetores

Cada elemento do vetor é identificado por um índice.


• Número que indica a posição do elemento dentro vetor.
• Usado para acessar (ou alterar) o conteúdo armazenado na
memória por cada elemento (como uma variável simples).
• Em C, o índice começa em zero.
• Isto é, o primeiro elemento do vetor tem índice zero.
Vetores

Vetores em C possuem:
• Nome
Segue regras de nomenclatura de variáveis/identificadores.
• Tipo
Qual é o tipo de dado armazenado pelo vetor.
• Tamanho
Quantos elementos (dados) podem ser armazenados na memória.
Vetores

Sintaxe em C:
tipo nome_do_vetor[tamanho];

• O que diferencia a declaração de um vetor de qualquer outra variável é a


parte que acompanha seu nome, isto é, o par de colchetes [ ].
• tamanho representa o número de elementos (capacidade do vetor).
• O índice do vetor varia de 0 a (tamanho - 1).
Vetores

• As variáveis compostas são alocadas sequencialmente na


memória, onde o endereço mais baixo corresponde ao primeiro
elemento (índice 0) do vetor.

• Os elementos do vetor são guardados em sequência contínua na


memória, ou seja, um seguido do outro (diferente de variáveis
separadas).
Variáveis [simples] x Variáveis Compostas

(Neste exemplo, estamos assumindo que uma variável ocupa 1 byte de memória no
computador...)
• Uma variável simples possui um endereço único.
• Armazena somente um dado por vez.
Variáveis [simples] x Variáveis Compostas

(Neste exemplo, estamos assumindo que cada elemento do vetor ocupa 1 byte de memória no
computador...)
• Uma variável composta armazena N valores sequencialmente na
memória (N = quantidade de elementos do vetor).
• Exemplo: vetor com 6 elementos (“vetor de tamanho 6”).
Vetores

Dado um índice i de um vetor, o computador busca o conteúdo da


memória no endereço E[i] = E[0] + i
• i é o índice do elemento a ser acessado
• E[i] é o endereço do elemento de índice i
• E[0] é o endereço do primeiro elemento
Vetores

(Neste exemplo, estamos assumindo que cada elemento do vetor ocupa 1 byte de memória)
Ler a nota de 3 alunos de uma disciplina e
calcular a média.

Exemplo 1
Exemplo SEM uso de
vetores

12
Ler a nota de 3 alunos de uma disciplina e
calcular a média.

Exemplo 2
Exemplo COM uso de
vetores

13
A inicialização dos valores atribuídos aos
elementos de um vetor pode ser feita no
momento da sua declaração:

Exemplo 3
Inicialização

14
Observe que não precisamos explicitar o
tamanho do vetor quando declaramos e
iniciamos o vetor com valores (o compilador faz
isso pra gente):

Exemplo 4
Inicialização

15
Vetores

• Em linguagem C, não existe declaração de vetor dinâmico (*).


• Isto é, o tamanho do vetor deve ser definido em tempo de compilação, e
não em tempo de execução.
• O valor que dimensiona o vetor deve ser um número literal inteiro.
• Um literal inteiro (ex. 5) ou uma macro (ex. #define TAMANHO (5)), que é convertida
para um literal inteiro pelo pré-processador.

(*) Considerando que um vetor dinâmico é algo diferente de um vetor alocado


dinamicamente (assunto futuro do curso) e diferente de VLA (Variable Length Array, vetor
de tamanho variável).
Dependendo da versão da linguagem C e do compilador usado, VLA pode ser opcional ou
obrigatório (C99 VLA: obrigatório, C11: opcional, C23: obrigatório) (ver próximos slides).
Exemplo 5
VLA

17
Se esse código vai compilar ou não,
depende da versão da linguagem C e
do compilador...

Exemplo 5 (1)
(2)
VLA

(3)

18

(1) Código compilado sem problemas.


(2) VLA tratado como warning (-Wvla) (compilação OK).
(3) VLA tratado como erro (-Werror=vla) (erro de compilação).
Exemplo 6
• Como faríamos se não
conhecêssemos de
antemão quantos itens
entrariam no vetor?

• O exemplo a seguir aceita


até 50 notas e pode ser
facilmente modificado para
aceitar qualquer número
de notas, desde que
TAMANHO <= 50.

19
Vetores

• Em linguagem C, não há sistema que avise quando o limite de um vetor foi


excedido, ou seja, se transpusermos o fim do vetor durante uma operação
de atribuição, os valores sobressalentes irão se sobrepor a outros dados da
memória, armazenados em sequência.

• Como não foi reservado espaço para guardar novos valores do vetor, esses
dados irão se sobrepor a outras variáveis na memória.
• Provavelmente ocorrerá um erro durante a execução do programa!

• Providenciar a verificação do limite do vetor é responsabilidade do


programador. A solução é não permitir que o usuário digite dados acima do
limite em elementos do vetor.
Exemplo 7

No programa anterior (exemplo 6)...

21
Vetores

Calculando o tamanho de um vetor


• A função sizeof(var) retorna o tamanho alocado na memória para uma
variável var.
• Ou seja, essa função sozinha não retorna quantos elementos cabem no vetor e sim a
quantidade de bytes que a variável ocupa.
• Para calcular o tamanho do vetor, fazemos a divisão de sizeof(var)
por sizeof(tipo_var).
• Se var é um vetor de inteiros, saber quantos bytes ocupa um inteiro fará
com que o resultado da divisão seja a quantidade de elementos do vetor.
• Portanto, tamanho do vetor de inteiros = sizeof(var) / sizeof(int)
Exemplo 8
Calculando o tamanho
de um vetor

23
Vetores e Funções

• Podemos criar funções que recebem vetores como parâmetro.


• Porém, precisamos ter em mente uma particularidade da
linguagem C:
Quando um vetor é passado como parâmetro de uma função, o
vetor perde a sua dimensão e se torna um ponteiro (“array to
pointer decay”).
Vetores e Funções

• O que a função recebe como parâmetro, na verdade, é o


endereço de memória do primeiro elemento do vetor
(&vetor[0]).
• A informação de quantos blocos da memória são ocupados pelo vetor é
perdida!
• Com isso, não conseguimos calcular o tamanho do vetor que foi
passado como parâmetro da função, já que sizeof(vetor)
retornará o tamanho de um ponteiro.
• Como resolver essa limitação? Passamos um parâmetro adicional
com a informação do tamanho do vetor!
Vetores e Funções

• Outro ponto importante quando passamos um vetor para uma


função é que a passagem de parâmetro não é por valor.
• Ou seja, não há uma cópia local do vetor dentro da função.
• A passagem de parâmetro é feita por ponteiro (assunto futuro).
• Por conta disso, qualquer alteração do conteúdo do vetor feita
dentro da função é refletida na variável original (a que foi
passada como parâmetro da função).
• Isso acontece porque a função recebe o endereço de memória do
primeiro elemento do vetor – logo, a função acessa/modifica
diretamente a memória do vetor.
Exemplo 9
sizeof() “incorreto”
dentro da função

27
Exemplo 10
Função que recebe vetor e
parâmetro adicional
contendo tamanho do vetor

28
MENOTTI, D.; OLIVEIRA, L. CI-1002: Programação 2. Disponível em: <
https://wiki.inf.ufpr.br/maziero/doku.php?id=prog2:start>. Acesso em: 03 de
janeiro de 2023.

Referências DEITEL, P.; DEITEL, H. C: Como programar. 6ª edição. Editora Pearson,


2011. (disponível na Biblioteca Virtual Pearson)

KISHIMOTO, A. Programação de computadores: desenvolvimento de


jogos digitais com GameMaker: Studio. 1ª edição. Edição do autor, 2016.

29

Você também pode gostar

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy