Buscar

Computação Básica - Vetores

Prévia do material em texto

Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
COMPUTAÇÃO BÁSICA
Vetores
Prof. Bruno Macchiavello (bruno@cic.unb.br)
Universidade de Brasília – UnB 
Instituto de Ciências Exatas – IE 
Departamento de Ciência da Computação – CIC 
Prof. Bruno Macchiavello 1
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Conjuntos de Dados
• Algoritmos precisam de dados e informações
para exercer as suas funções.
• Informações simples atendem a uma pequena• Informações simples atendem a uma pequena
parcela dos algoritmos. A maioria utiliza uma
grande carga de informações e estas quando
utilizadas com tipos primitivos precisam ser
criadas inúmeras variáveis, tornando o algoritmo
um monstro carregado de variáveis, já que uma
variável contém apenas uma informação.
Prof. Bruno Macchiavello 2
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Conjuntos de Dados
• Imagine a seguinte situação:
�Devemos desenvolver um programa para gestão de
RH de uma empresa com três funcionários, e que
para cada funcionário o programa deverá ler o salário
dele e mais alguns dados, como número de filhos,dele e mais alguns dados, como número de filhos,
para calcular o reajuste
�Suponha que cada funcionário receberá um aumento
de R$200,00 para cada filho que ele possuir. Nos
moldes pensados anteriormente, a solução seria algo
semelhante ao apresentado no próximo slide.
Prof. Bruno Macchiavello 3
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Conjunto de Dados
Exemplo:
Algoritmo que lê o salário de três funcionários e calcula o aumento de 
R$200,00 por filho, para cada um deles.
Algoritmo Deselegante
Variáveis
salario1, salario2, salario3, nfilhos1, nfilhos2, nfilhos3 : real
Prof. Bruno Macchiavello 4
salario1, salario2, salario3, nfilhos1, nfilhos2, nfilhos3 : real
Início
Leia (salario1)
Leia (nfilhos1)
salario1←salario1 + 200 * nfilhos1
Escreva (“O novo salário do funcionário 1 é “,salario1) 
/* REPETIR O CÓDIGO ACIMA PARA OS FUNCIONÁRIOS 2 E 3 */
Fim
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Conjunto de Dados
Exemplo:
Algoritmo que lê o salário de três funcionários e calcula o aumento de 
R$200,00 por filho, para cada um deles.
Algoritmo Deselegante
Variáveis
salario1, salario2, salario3, nfilhos1, nfilhos2, nfilhos3 : real
Início
Prof. Bruno Macchiavello 5
Início
Leia (salario1)
Leia (nfilhos1)
salario1←salario1 + 200 * nfilhos1
Escreva (“O novo salário do funcionário 1 é “,salario1) 
/* REPETIR O CÓDIGO ACIMA PARA OS FUNCIONÁRIOS 2 E 3 */
Fim
Qual seria o algoritmo para 1000 funcionários?
Associarmos uma variável para cada funcionário?
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Conjunto de Dados
• Para solucionar esse problema devemos trabalhar com um novo 
tipo de estruturas de dados: VETORES e MATRIZES.
• Utilizando armários como demonstração, uma gaveta só pode 
conter um objeto, uma variável tem somente uma informação de 
uma determinado tipo.
• Quando se trata de conjuntos de dados, uma gaveta, ou melhor, 
uma variável pode conter inúmeras informações.
Prof. Bruno Macchiavello 6
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Vetor
• Um vetor, do ponto de vista de Informática, é uma estrutura de
dados homogênea, isto é, todos os elementos de um vetor são do
mesmo tipo.
• A estrutura como um todo é identificada por um nome e um
elemento na estrutura por um índice.elemento na estrutura por um índice.
• O índice indica a posição do elemento na estrutura.
Prof. Bruno Macchiavello 7
. . .
0 1 2 N-2 N-1
Índice ou posição
Conteúdo do vetor
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Vetor
• Podemos então entender o vetor como um conjunto de 
dados homogêneos. Por exemplo um conjunto de 
valores inteiros:
F = {6, -7, 8, 9, 20}
• Podemos acessar cada um dos elementos do conjunto F 
mediante os índices representados por colchetes, na for 
F[i], onde i é um número inteiro.
� Exemplos:
o F[0] = 6
o F[2] = 8
o F[4] = 20
Prof. Bruno Macchiavello 8
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Vetores - Exemplos
10 1 23 3
75 85.2 21.5 90.5 55.3
0 1 2 3 4
Conteúdo
Índice
Conteúdo
TIPO REAL
S E N A C
0 1 2 3 4
Prof. Bruno Macchiavello 9
10 1 23 3
0 1 2 3
Conteúdo
Conteúdo
Índice
Índice
TIPO INTEIRO
TIPO LITERAL
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Vetor
• Declaração de vetores em pseudocódigo
Variáveis 
<nome> : vetor [<tamanho>] de <tipo>
Prof. Bruno Macchiavello 10
Exemplo de declaração de Vetores em Pseudocódigo
Algoritmo Funcionario
Variáveis
SALF : vetor [1000] de reais /* vetor que armazena os 
salários dos funcionários */
CODF : vetor [1000] de inteiros /* vetor que armazena os 
códigos dos funcionários */
FILHOSF : vetor [1000] de inteiros /* vetor que armazena o 
nro de filhos dos funcionários */
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Vetor
• Declaração de Vetores em C
<tipo> <nome>[<tamanho>];
Exemplo de declaração de Vetores em C
Prof. Bruno Macchiavello 11
Exemplo de declaração de Vetores em C
#include <stdio.h>
int main () {
float SALF[1000]; /* vetor que armazena os 
salários dos funcionários */
int CODF[1000] ; /* vetor que armazena os 
códigos dos funcionários */
int FILHOSF[1000] /* vetor que armazena o 
nro de filhos dos funcionários */
}
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Vetor
• Um ponto IMPORTANTE é que na linguagem C
o índice de um vetor de N elementos vai de zero
a N-1, então F[0] é o primeiro elemento, F[N-1] é
o último elemento e F[N] é uma variável inválida,o último elemento e F[N] é uma variável inválida,
pois contando de zero a N-1 possuímos
exatamente N elementos.
• Para pseudocódigo vamos tamber assumir que
a posição inicial é a posição 0.
Prof. Bruno Macchiavello 12
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Exemplo 1
Exemplo:
Uma solução em pseudocódigo para o problema dos funcionários (para o caso
de 100 funcionários). Note que no laço, a variável i assume valores entre 0 e
99, abrangendo assim todas as 100 posições dos vetores.
Algoritmo Salário
Variáveis
i : inteiro
salario : vetor[100] de reais
Prof. Bruno Macchiavello 13
salario : vetor[100] de reais
nfilhos : vetor[100] de inteiros
Início
Para i = 0 até 99 faça
Escreva ("Digiteo salário do funcionário “,i+1)
Leia(salario[i])
Escreva("Digite o número de filhos do funcionário ",i+1)
Leia(nfilhos[i])
salario[i] ← salario[i] + (200*nfilhos[i])
Escreva(“O novo salário do funcionário ”,i+1,” é de R$”, salario[i])
FimPara
Fim
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Exemplo 1
Programa em C do algoritmo anterior
#include <stdio.h>
int main () {
float salario[100];
int i;
int nfilhos[100];
Prof. Bruno Macchiavello 14
for (i=0; i<100; i++) {
printf("Digite o salário do funcionário %d\n",i+1);
scanf("%f",&salario[i]);
printf("Digite o número de filhos do funcionário %d\n",i+1);
scanf("%d",&nfilhos[i]);
salario[i]+= 200*nfilhos[i];
printf("O novo salário do funcionário %d é de R$%.2f\n",i+1, salario[i]);
}
getchar();
return 0;
}
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Vetor - Observações
• O vetor sempre deve ser declarado com tamanho 
fixo. Não pode se declarar um vetor com tamanho 
variável.
int a=3;int a=3;
float vetor[a];
const int a=3;
float vetor[a];
float vetor[3];
Prof. Bruno Macchiavello 15
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Vetor - Observações
• Não pode-se usar variáveis para declarar o
tamanho do vetor, porém podem ser usadas
variáveis durante o programa para acessar uma
determinada posição do vetor com o seguinte
cuidado:
� A variável de índice não pode assumir valores negativos
ou que sejam maiores ou iguais ao número N de
elementos. A variável índice deve sempre oscilar entre
0 e N-1, caso contrário o programa tentará acessar áreas
de memória fora daquela do vetor, o que gerará uma falha
de segmentação do programa (o programa dará erro e
será automaticamente fechado pelo sistema operacional).
Prof. Bruno Macchiavello 16
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Vetor - Observações
• Sobre o tamanho do vetor:
�Não precisamos usar todas as N posições do vetor.
�É comum declararmos um vetor maior que o
necessário e perguntarmos ao usuário quantas
posições ele vai precisar, e então fazermos nossoposições ele vai precisar, e então fazermos nosso
índice variar de 0 a até esse novo limite, obviamente
menor do que o número de posições declaradas
(segue exemplo no próximo slide).
Prof. Bruno Macchiavello 17
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Exemplo:
Esse é o mesmo exemplo anterior, mas agora o número de funcionários é 
variável. (Aqui presume-se que haverão no máximo 100 funcionários).
Algoritmo Salário2
Variáveis
i, nrofunc : inteiro
salario : vetor[100] de reais
nfilhos : vetor[100] de inteiros
Início
Escreva("Digite o número de funcionários”)
Prof. Bruno Macchiavello 18
Escreva("Digite o número de funcionários”)
Leia(nrofunc)
Para i = 0 até nrofunc-1 faça
Escreva ("Digite o salário do funcionário “,i+1) 
Leia(salario[i])
Escreva("Digite o número de filhos do funcionário ",i+1)
Leia(nfilhos[i])
salario[i] ← salario[i] + (200*nfilhos[i])
Escreva(“O novo salário do funcionário ”,i+1,” é de R$”, salario[i])
FimPara
Fim
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Programa em C do algoritmo anterior
#include <stdio.h>
int main () {
float salario[100];
int i, nrofunc;
int nfilhos[100];
printf("Digite o número de funcionários\n");
scanf("%d",&nrofunc);
for (i=0; i<nrofunc && i<100; i++) {
Prof. Bruno Macchiavello 19
for (i=0; i<nrofunc && i<100; i++) {
printf("Digite o salário do funcionário %d\n",i+1);
scanf("%f",&salario[i]);
printf("Digite o número de filhos do funcionário %d\n",i+1);
scanf("%d",&nfilhos[i]);
salario[i]+= 200*nfilhos[i];
printf("O novo salário do funcionário %d é de R$%.2f\n",i+1, salario[i]);
}
getchar();
return 0;
}
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Número de Elementos
• Note que, no exemplo anterior, a condição de
continuidade do laço for é composta por duas
partes:
� i<nrofunc garante que o programa pare assim que o
número de funcionários for atingido, pois não hánúmero de funcionários for atingido, pois não há
sentido em continuar a execução para funcionários
inexistentes;
� i<100 garante que o programa não extrapolará o
tamanho de memória reservado para os funcionários,
evitando uma falha de segmentação.
Prof. Bruno Macchiavello 20
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Exemplo:
Faça um algoritmo que leia um conjunto de N inteiros (N será lido e é
sempre menor ou igual a 100), encontre e mostre o maior deles.
Algoritmo Numeros
Variáveis
i, n, maior : inteiro
numeros : vetor[100] de inteiros
Início
Escreva("Digite a quantia de números a serem lidos:”)
Leia(n);
Prof. Bruno Macchiavello 21
Leia(n);
Para i = 0 até n-1 faça
Escreva ("Digite o”, i+1,”o numero “) 
Leia(numeros[i]) 
FimPara
maior← numeros[0]
Para i = 0 até n-1 faça
Se numeros[i] > maior então
maior← numeros[i]
FimPara
Escreva(“O maior número é ",maior)
Fim
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Programa em C do algoritmo anterior
#include <stdio.h>
int main () {
int i, n, maior, numeros[100];
printf("Digite a quantia de números a serem lidos: \n");
scanf("%d",&n);
for (i=0; i<n; i++) {
printf("Digite o %do número: \n",i+1);
scanf("%d",&numeros[i]);
Prof. Bruno Macchiavello 22
scanf("%d",&numeros[i]);
}
maior = numeros[0];
for (i=0; i<n; i++) {
if (numeros[i]>maior) 
maior = numeros[i];
}
printf(“O maior números é %d\n ",maior);
getchar();
return 0;
}
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Exemplo 2
• Note que no exemplo anterior o vetor é varrido
totalmente por duas vezes, uma para ler os
dados e outra para determinar o maior
elemento.
• No caso de dois vetores grandes, isso pode
aumentar o tempo de execução.
• É melhor determinar o maior número durante a 
leitura de dados.
Prof. Bruno Macchiavello 23
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Exemplo:
Faça um algoritmo que leia um conjunto de N inteiros (N será lido e é
sempre menor ou igual a 100), encontre e mostre o maior deles.
Obs: Esta solução deve varrer o vetor apenas uma vez.
Algoritmo NovoNotas
Variáveis
i, n, maior : inteiro
numeros : vetor[100] de inteiros
Início
Escreva("Digite a quantia de números a serem lidos:");
Prof. Bruno Macchiavello 24
Escreva("Digite a quantia de números a serem lidos:");
Leia(n);
Para i = 0 até n-1 faça
Escreva ("Digite o”, i+1,”o numero “) 
Leia(numeros[i]) 
Se i=0 então 
maior← numeros[i];
senão se (numeros[i]>maior) 
maior← numeros[i];
FimPara
Escreva(“O maior número é ",maior)
Fim
Departamento de Ciência da ComputaçãoDepartamentode Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Programa em C do algoritmo anterior
#include <stdio.h>
int main () {
int i, n, maior, numeros[100];
printf("Digite a quantia de números a serem lidos: \n");
scanf("%d",&n);
for (i=0; i<n; i++) {
printf("Digite o %do número: \n",i+1);
scanf("%d",&numeros[i]);
Prof. Bruno Macchiavello 25
scanf("%d",&numeros[i]);
if (i==0)
maior = numeros[0];
else if (numeros[i]>maior) 
maior = numeros[i];
}
printf(“O maior números é %d\n ",maior);
getchar();
return 0;
}
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Exercícios
1. Escreva um algoritmo que leia dois vetores de 25 inteiros cada (um 
vetor e depois o outro), crie um vetor de 50 inteiros que seja o resultado 
da intercalação dos elementos dos outros dois vetores e por fim mostre o 
conteúdo do novo vetor.
2. Escrever um algoritmo que lê um vetor X de 20 posições, e qualquer 
tipo. Escreva, a seguir, cada um dos valores distintos que aparecem em X 
dizendo quantas vezes cada valor aparece em X.
Prof. Bruno Macchiavello 26
dizendo quantas vezes cada valor aparece em X.
3. Faça um algoritmo que leia um vetor de 50 posições de números
inteiros e divida todos os seus elementos pelo menor valor do vetor 
(diferente de zero). Mostre o vetor após os cálculos.
4. Faça um algoritmo que leia dois vetores (A e B) de 20 posições de 
caracteres. A seguir, troque o 1º elemento de A com o 20º de B, o 2º de A 
com o 19º de B, assim por diante, até trocar o 20º de A com o 1º de B. 
Mostre os vetores antes e depois da troca.

Continue navegando