Buscar

Algoritmos e Programação - Aula 04 - Vetores

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Algoritmos e Programação 
Professor Marco A. Sartori 
marco.sartori@fag.edu.br 
Matrizes | Vetores 
 
 
 
Página 1 de 7 
 
Matrizes e vetores ......................................................................................................................... 2 
Declaração de vetores ............................................................................................................... 2 
Vetores dinâmicos ................................................................................................................. 3 
Vetores de múltiplas dimensões ............................................................................................... 4 
Declaração de inicialização de vetores de múltiplas dimensões .......................................... 5 
Geração de números aleatórios ................................................................................................ 5 
A função rand() ...................................................................................................................... 5 
Referências .................................................................................................................................... 7 
 
 
 
 
 Algoritmos e Programação 
Professor Marco A. Sartori 
marco.sartori@fag.edu.br 
Matrizes | Vetores 
 
 
 
Página 2 de 7 
 
Matrizes e vetores 
 
Um vetor é um conjunto de espaços de memória que se relacionam pelo fato de que todos 
têm o mesmo nome e o mesmo tipo. Para se referir a um local ou elemento onde em 
particular no vetor, especificamos o nome do vetor e o número da posição do elemento em 
particular nesse vetor. 
 
 
A Figura 1 mostra um vetor 
de inteiros chamado C. Esse 
vetor contém 12 elementos. 
Qualquer um desses 
elementos pode ser 
referenciado com o nome do 
vetor seguido pelo número 
de posição do elemento em 
particular entre colchetes 
([]). O primeiro elemento de 
cada vetor é identificado 
pela posição elemento 
zerésimo. Assim, o primeiro 
elemento do vetor é 
referenciado como c[0], o 
segundo elemento como 
c[1], o sétimo elemento 
como c[6], e, em geral, o i-
ésimo elemento do vetor c é 
referenciado como c[i – 1]. 
Os nomes do vetor, assim como outros nomes de variáveis, só podem conter letras, dígitos e 
sublinhados. Nomes de vetores não podem começar com um dígito. 
O número da posição contido dentro dos colchetes é, formalmente, chamado de subscrito ou 
índice. Um índice precisa ser um número inteiro ou uma expressão inteira. Se um programa 
usa uma expressão como índice, então a expressão é avaliada para determinar o índice. Por 
exemplo, se a = 5 e b = 6, então a instrução c [a + b] += 2; soma 2 ao elemento c[11] do vetor. 
Para impressão de um elemento do vetor, a seguinte instrução poderia ser utilizada: 
printf (“%d”,c[0]); 
Para leitura de um número para um elemento do vetor, a seguinte instrução poderia ser 
utilizada: 
scanf(“%d”,&c[6]); 
Para realização um cálculo qualquer, a instrução a seguir poderia ser utilizada como modelo: 
C[0] += c[1]; 
Declaração de vetores 
Os vetores ocupam espaço na memória. Você especifica o tipo de cada elemento e o número 
de elementos exigidos pelo vetor, de modo que o computador possa reservar a quantidade de 
memória apropriada. 
Figura 1 - Exemplo de um vetor de 12 posições. 
 
 
 
 Algoritmos e Programação 
Professor Marco A. Sartori 
marco.sartori@fag.edu.br 
Matrizes | Vetores 
 
 
 
Página 3 de 7 
 
 
Figura 2 - Declaração de vetores. 
A quantidade de elementos do vetor pode ser definida por meio de uma constante, ou ainda, 
por meio de uma constante simbólica. O exemplo a seguir mostra como ocorreria a declaração 
de um vetor que utiliza uma constante t para definição do total de elementos. 
 
Figura 3 - Utilização de constantes na definição do total de elementos do vetor. 
Vetores dinâmicos 
A linguagem C prima pela economia de memória durante a execução de seus programas. 
Quando declaramos um vetor no início de um programa, o compilador separa um “pedaço” da 
memória do computador de tamanho equivalente ao tamanho máximo do vetor. Assim, se 
criarmos um vetor de inteiros com 200 elementos, o compilador separa na memória do 
computador um espaço de 400 bytes (2 bytes x 200 elementos). Entretanto, quando 
trabalhamos com vetores, frequentemente não sabemos qual o tamanho exato de elementos 
que precisamos. Ao criar um vetor, estipulamos um valor que seja maior do que o valor 
máximo de elementos que precisamos, mesmo que não utilizemos todos os espaços 
disponíveis no vetor. Isso causa desperdício de memória do computador e lentidão na 
execução de programas. 
 
Para evitar este problema, a linguagem C possui dois operadores de controle de memória. Em 
primeiro lugar, temos o operador new, que é utilizado para alocar espaços na memória do 
computador durante a execução de um programa. Em segundo lugar, o operador delete, que 
libera a memória alocada com o operador new, após sua utilização. Este tipo de criação e 
destruição de variáveis é chamado de alocação dinâmica. Um vetor criado dessa forma é 
chamado de vetor dinâmico. 
 
A vantagem de se criar vetores dinâmicos é que a memória utilizada pelo vetor, só é “tirada” 
do sistema após a execução do operador new, e pode ser liberada novamente após sua 
utilização do operador delete. Quando criamos um vetor do jeito “normal”, a memória 
utilizada por ela é guardada pelo programa durante toda sua execução, consumindo recursos 
desnecessários do computador. 
 
 
 
 Algoritmos e Programação 
Professor Marco A. Sartori 
marco.sartori@fag.edu.br 
Matrizes | Vetores 
 
 
 
Página 4 de 7 
 
A sintaxe para declaração de um vetor utilizando o operador new é a seguinte: 
<tipo> *<nome> = new <tipo> [ <numero de elementos> ]; 
 
Por exemplo, para criar um vetor do tipo float com 10 elementos: 
float *lista = new float [10]; 
 
O acesso aos elementos do novo vetor é feito de forma análoga ao de um vetor criado do jeito 
“normal”: utilizamos o nome do vetor, seguido do número do elemento acessado. Como já 
dito anteriormente, o primeiro elemento de um vetor é sempre o elemento 0. Note que não 
podemos inicializar automaticamente os valores de um vetor criado dessa forma. Cada 
elemento do vetor deve ter seu valor atribuído separadamente. 
 
A outra face do operador new é o operador delete. Só podemos utilizar este operador com 
vetores criados pelo operador new, ou seja, vetores criados por declaração normal não podem 
ser apagados durante a execução do programa. Para utilizar o operador delete para apagar um 
vetor, a sintaxe é a seguinte: 
delete <nome>; 
 
O programa a seguir mostra um exemplo de utilização de um vetor dinâmico: 
 
Figura 4 - Exemplo de utilização de vetores dinâmicos. 
Vetores de múltiplas dimensões 
As matrizes (ou vetores) em C podem ter vários índices. Os vetores de índices múltiplos (ou 
vetores multimensionais) podem ser 
utilizados na representação de 
tabelas de valores que consistem em 
informações organizadas em linhas e 
colunas. Para identificar determinado 
elemento da tabela, devemos 
especificar dois índices: o primeiro 
(por convenção) identifica a linha do 
elemento, e o segundo (por 
convenção) identifica a coluna do 
elemento. Tabelas ou vetores que 
Figura 5 - Vetor de índice duplo com 3 linhas e 4 colunas. 
 
 
 
 Algoritmos e Programação 
Professor Marco A. Sartori 
marco.sartori@fag.edu.br 
Matrizes | Vetores 
 
 
 
Página 5 de 7 
 
exigem dois índices para identificar determinado elemento são chamados de vetores de índiceduplo. Vetores de índices múltiplos podem ter mais de dois índices. 
Declaração de inicialização de vetores de múltiplas dimensões 
 
Um vetor de índices múltiplos pode ser inicializado quando declarado, assim como um vetor 
de índice único. Por exemplo, um vetor de índice duplo int b[2][2] poderia ser definido e 
inicializado como: int b[2][2] = { {1 , 2} , {3 , 4} }; 
Os valores são agrupados por linha em chaves. Os valores no primeiro conjunto de chaves 
inicializam a linha 0, e os valores no segundo conjunto de chaves inicializam a linha 1. Assim, os 
valores 1 e 2 inicializam os elementos b[0][0] e b[0][1], respectivamente, e os valores 3 e 4 
inicializam os elementos b[1][0] e b[1][1], respectivamente. Se não houver inicializadores 
suficientes para determinada linha, os elementos restantes dessa linha serão inicializados em 
0. Desta forma, int b[2][2] = { {1} , {3 , 4} }; inicializaria b[0][0] em 1, b[0][1] em 0, b[1][0] em 3 
e b[1][1] em 4; 
O exemplo a seguir mostra a declaração, inicialização e manipulação de um vetor de índice 
duplo: 
 
Figura 6 - Exemplo de declaração, inicialização e manipulação de um vetor de índice duplo. 
Geração de números aleatórios 
A função rand() 
A função rand() gera um número inteiro entre 0 e RAND_MAX (uma constante simbólica 
definida no cabeçalho <stdlib.h>). A C padrão indica que o valor de RAND_MAX deve ser pelo 
menos 32767, que é o valor máximo para um inteiro de dois bytes, ou seja, 16 bits. 
O intervalo de valores produzidos diretamente por rand(), normalmente é diferente daquele 
que é necessário em uma aplicação específica. Por exemplo, um programa que simula o 
lançamento de um dado, deverá considerar um intervalo de valores entre 1 e 6, 
correspondente aos lados do dado. 
A instrução rand() % 6 produz números em um intervalo de 0 a 5. Isso é chamado de escala. O 
número 6 é chamado de fator de escala. Ao modificarmos a instrução anterior para 
acrescentando 1 ao resultado, 1 + (rand() % 6), os números gerados passam a estar contidos 
no intervalo de 1 a 6. 
 
 
 
 Algoritmos e Programação 
Professor Marco A. Sartori 
marco.sartori@fag.edu.br 
Matrizes | Vetores 
 
 
 
Página 6 de 7 
 
Apesar de gerar números aleatórios, a combinação de valores geradas por rand() resulta 
sempre nos mesmo números a cada execução do programa. 
Para que as combinações de valores passem a conter valores diferentes daqueles gerados na 
execução anterior do programa, é necessário que o programa utilize a randomização. A 
randomização é um processo que ocorre na função srand(). A função srand() utiliza um 
argumento inteiro unsigned e “semeia” a função rand(), para que ela possa produzir uma nova 
sequência de números a cada execução do programa. 
O exemplo a seguir mostra a utilização da função srand() para “semear” novas sementes de 
números aleatórios: 
 
Figura 7 - Exemplo de utilização da função srand(). 
No exemplo acima, a cada execução pode ser informado um valor diferente para a semente, 
resultando, portanto, em valores aleatórios diferentes a cada execução. Caso seja necessário 
plantar novas sementes sem a necessidade de informa-la manualmente, o comando a seguir 
poderá ser utilizado: 
srand(time(NULL)); 
 
A instrução acima faz com que o computador leia seu clock para obter o valor da semente 
automaticamente. A função time retorna o número de segundos que se passaram desde a 
meia noite de 1º de janeiro de 1970. Esse valor é convertido em um inteiro não sinalizado 
(unsigned), e é usado como semente do gerador de números aleatórios. A função time recebe 
NULL como um argumento (time é capaz de lhe oferecer uma string que represente o valor 
que ele retorna; NULL desativa essa capacidade para uma chama específica a time). Para 
utilização da função time, é necessária a utilização do cabeçalho <time.h> no programa, 
conforme mostra o exemplo a seguir: 
 
 
 
 Algoritmos e Programação 
Professor Marco A. Sartori 
marco.sartori@fag.edu.br 
Matrizes | Vetores 
 
 
 
Página 7 de 7 
 
 
Figura 8 - Exemplo de utilização da função time como semente para rand(). 
Referências 
DEITEL, H.M; DEITEL,P.J. C Como programar. 6ª edição. São Paulo: Pearson, 2011.

Outros materiais