You are on page 1of 27

Instituto Federal de Mato Grosso do Sul

Campus Aquidauana
Tecnlogo em Sistemas para Internet
Aula 15: Tipos de Dados
Complexos: Vetores
Disciplina: Algoritmos



*material elaborado pelo Prof Vincius Maeda
Variveis Compostas Homogneas
Unidimensionais
Definio
Declarao
Manipulao
Exemplos
Exerccios

Apresentao
2
Variveis compostas homogneas so um grupo
de variveis do mesmo tipo;
Imagine um prdio de uma determinada
empresa, cujo prdio possui um nmero finito de
andares, onde cada andar representa um
departamento da empresa;
Para exemplificar, veja a figura a seguir.
Definio
3
Definio
4
Prdio da empresa Aquid
Departamento da Direo
Departamento de Finanas
Departamento de RH
Departamento Comercial
Departamento de Logstica
A partir do exemplo anterior, podemos imaginar que
os andares so uma segmentao direta do prdio e
assim formado por uma estrutura composta
unidimensional;
Varivel composta homognea pode ser de dois
tipos:
Unidimensional
Multidimensional
As variveis compostas homogneas
unidimensionais so chamadas de vetores.
Definio
5
A declarao (criao) de um vetor se d da seguinte forma:
Em Portugol:
nome_da_variavel : vetor [ Li .. Lf ] de tipo primitivo

Onde,
Li: representa o limite inicial do vetor
Lf: representa o limite final do vetor
tipo primitivo: representa qualquer um dos tipos bsicos de dados

C ++:
tipo primitivo nome_variavel[tamanho];

Onde,
tipo primitivo: representa qualquer um dos tipos bsicos de dados
tamanho: representa a quantidade de posies do vetor;

Declarao
6
Um vetor de 30 posies para armazenar as mdias
dos alunos de uma sala, pode ser declarado da
seguinte forma;

vetMedia : vetor [1..30] de real

A figura abaixo representa o vetor declarado
anteriormente e com alguns dados:

Declarao (Portugol)
7
8,5 9,0 6,5 7,8 6,9 ... 8,0 4,5
1 2 3 4 5 ... 29 30
Um vetor de 30 posies para armazenar as mdias
dos alunos de uma sala, pode ser declarado da
seguinte forma;

float vetMedia[30];

A figura abaixo representa o vetor declarado
anteriormente e com alguns dados:

Declarao (C++)
8
8,5 9,0 6,5 7,8 6,9 ... 8,0 4,5
0 1 2 3 4 ... 28 29
Um vetor genrico seria da seguinte forma:


importante notar que o limite final (Lf) deve ser
sempre maior que o limite inicial (Li);
A quantidade de elementos do vetor ser dado
por Lf Li + 1.

Declarao
9
Li Li + 1 Li + 2 Li + 3 Li + 4 ... Lf 1 Lf
Para manipular um vetor, devemos especificar o
nome dele e dentro dos colchetes o nmero da
posio, tambm chamado de ndice;
O ndice dever ser um nmero inteiro.
vetMedia[4]
Manipulao (Portugol)
10
1 2 3 4 5 ... 29 30
importante saber que em C++ o vetor inicia na
posio 0 (zero);
Para manipular um vetor, devemos especificar o
nome dele e dentro dos colchetes o nmero da
posio, tambm chamado de ndice;
O ndice dever ser um nmero inteiro.
vetMedia[3]
Manipulao (C++)
11
0 1 2 3 4 ... 28 29
Por exemplo, se quisermos inserir um valor na posio 15 do
vetor vetMedia, faramos da seguinte forma:
vetMedia[15] <- 8.5

Outro exemplo, se desejarmos que o usurio insira um valor na
posio 20 do vetor, deveria ser da seguinte forma:
leia(vetMedia[20])

Outro exemplo, se desejarmos mostrar o contedo que est
armazenado na posio 13 do vetor, faramos da seguinte
forma;
escreva(vetMedia[13])
Manipulao (Portugol)
12
Por exemplo, se quisermos inserir um valor na posio 15 do
vetor vetMedia, faramos da seguinte forma:
vetMedia[14] = 8.5;

Outro exemplo, se desejarmos que o usurio insira um valor na
posio 20 do vetor, deveria ser da seguinte forma:
cin >> vetMedia[19];

Outro exemplo, se desejarmos mostrar o contedo que est
armazenado na posio 13 do vetor, faramos da seguinte
forma;
cout << vetMedia[12];
Manipulao (C++)
13
Para entender melhor, aplicaremos um exemplo
com um algoritmo.
O prximo algoritmo busca saber a mdia da
classe a partir das mdias finais dos alunos,
sabendo que a classe possui 10 alunos.
Exemplo
14
algoritmo "MediaClasse"
var
mediaAluno, mediaClasse, somatorio : real
i : inteiro
inicio
somatorio <- 0
para i de 1 ate 10 faca
escreval("Informe a mdia do ", i, " aluno: ")
leia(mediaAluno)
somatorio <- somatorio + mediaAluno
fimpara
mediaClasse <- somatorio / 10
escreval(A mdia da classe : ", mediaClasse)
fimalgoritmo
Exemplo Mdia da Classe
(Portugol)
15
#include <iostream>

using namespace std;

int main()
{
float mediaAluno, mediaClasse, somatorio;
int i;

somatorio = 0;

for (i=0; i<10; i++) {
cout << "Informe a media do " << i+1 << "o. aluno: ";
cin >> mediaAluno;
somatorio = somatorio + mediaAluno;
}
mediaClasse = somatorio / 10;
cout << "A media da classe e: " << mediaClasse;

return 0;
}
Exemplo Mdia da Classe
(C++)
16
O algoritmo anterior ideal para calcular a mdia da
classe;
Porm haver problemas se quisermos saber a
quantidade de alunos que possuem mdia acima da
mdia da classe;
Torna-se impossvel, pois a varivel que armazena a
mdia do aluno renovada a cada loop;
Para isso o prximo algoritmo resolve esse
problema.
Exemplo Alunos Que Possuem
Mdia Acima da Mdia da Classe
17
algoritmo QuantidadeAlunoAcimaMediaClasse"
var
a, b, c, d, e, f, g, h, i, j, mediaClasse : real
quantidade : inteiro
inicio
somatorio <- 0
quantidade <- 0
escreval("Informe as mdias de todos os alunos: ")
leia(a, b, c, d, e, f, g, h, i, j) //entrada das mdias dos alunos
//clculo da mdia da classe
mediaClasse <- (a + b + c + d + e + f + g + h + i + j) / 10
se (a > mediaClasse) entao //verifica se a mdia do aluno a est acima
quantidade <- quantidade + 1
fimse
se (b > mediaClasse) entao //verifica se a mdia do aluno b est acima
quantidade <- quantidade + 1
fimse
Exemplo Alunos Que Possuem
Mdia Acima da Mdia da Classe
18
Exemplo Alunos Que Possuem
Mdia Acima da Mdia da Classe
19
se (c > mediaClasse) entao //verifica se a mdia do aluno c est acima
quantidade <- quantidade + 1
fimse
se (d > mediaClasse) entao //verifica se a mdia do aluno d est acima
quantidade <- quantidade + 1
fimse
se (e > mediaClasse) entao //verifica se a mdia do aluno e est acima
quantidade <- quantidade + 1
fimse
se (f > mediaClasse) entao //verifica se a mdia do aluno f est acima
quantidade <- quantidade + 1
fimse
se (g > mediaClasse) entao //verifica se a mdia do aluno g est acima
quantidade <- quantidade + 1
fimse
se (h > mediaClasse) entao //verifica se a mdia do aluno h est acima
quantidade <- quantidade + 1
fimse
Exemplo Alunos Que Possuem
Mdia Acima da Mdia da Classe
20
se (i > mediaClasse) entao //verifica se a mdia do aluno i est acima
quantidade <- quantidade + 1
fimse
se (j > mediaClasse) entao //verifica se a mdia do aluno j est acima
quantidade <- quantidade + 1
fimse
escreva("A quantidade de alunos acima da mdia : ", quantidade)
fimalgoritmo
Perceba que algoritmos como o anterior tornam-
se impraticveis se precisssemos de uma
quantidade enorme de variveis;
Seria mais interessante utilizar uma nica
varivel que armazenasse todas as mdias, para
isso existem os vetores;
Veja o prximo algoritmo, que descreve uma
forma mais simples para resolver aquele
problema.
Exemplo Alunos Que Possuem
Mdia Acima da Mdia da Classe
21
Ex. Alunos com Mdia Acima da
Mdia da Classe (Portugol)
22
algoritmo "QuantidadeAlunoAcimaMediaClasse"
var
vetMediaAluno : vetor [1..10] de real
mediaClasse, somatorio : real
i, quantidade : inteiro
inicio

//inicializa as variveis com valores nulos
somatorio <- 0
mediaClasse <- 0
quantidade <- 0

//lao de repetio que ir receber as mdias dos alunos
para i de 1 ate 10 faca
escreval("Informe a mdia do ", i, " aluno: ")
leia(vetMediaAluno[i])
fimpara
Ex. Alunos com Mdia Acima da
Mdia da Classe (Portugol)
23
//lao de repetio para somar todas as mdias dos alunos
para i de 1 ate 10 faca
somatorio <- somatorio + vetMediaAluno[i]
fimpara

mediaClasse <- somatorio / 10 //clculo da mdia

//lao de repetio verifica os alunos que esto acima da mdia
para i de 1 ate 10 faca
se (vetMediaAluno[i] > mediaClasse) entao
quantidade <- quantidade + 1
fimse
fimpara
escreva("A quantidade de alunos acima da mdia : ", quantidade)
fimalgoritmo
Ex. Alunos com Mdia Acima da
Mdia da Classe (C++)
24
#include <iostream>

using namespace std;

int main()
{

float vetMediaAluno[10];
float mediaClasse, somatorio;
int i, quantidade;

//inicializa as variveis com valores nulos
somatorio = 0;
mediaClasse = 0;
quantidade = 0;

//lao de repetio que ir receber as mdias dos alunos
for (i=0; i<10; i++) {
cout << "Informe a media do " << i+1 << "o. aluno: ";
cin >> vetMediaAluno[i];
}
Ex. Alunos com Mdia Acima da
Mdia da Classe (C++)
25
//lao de repetio para somar todas as mdias dos alunos
for (i=0; i<10; i++) {
somatorio = somatorio + vetMediaAluno[i];
}

mediaClasse = somatorio / 10; //clculo da mdia

//lao de repetio verifica os alunos que esto acima da mdia
for (i=0; i<10; i++) {
if (vetMediaAluno[i] > mediaClasse) {
quantidade = quantidade + 1;
}
}

cout << "A quantidade de alunos acima da media e: " << quantidade;

return 0;
}
1. Escreva um algoritmo que leia um vetor de 10 posies e mostre a quantidade de
nmeros lidos maiores que 50;
2. Escreva um algoritmo que leia um vetor de 20 posies e, sempre que um nmero par
for lido, mostre a mensagem par! na tela;
3. Escreva um algoritmo que leia um vetor de 5 posies e escreva na tela a soma dos
nmeros lidos;
4. Escreva um algoritmo que leia dois vetores de 5 posies e mostre a soma entre os
dois vetores em uma varivel;
5. Escreva um algoritmo que leia dois vetores de 5 posies e mostre a soma entre os
dois vetores em um terceiro vetor;
6. Construa um algoritmo que preencha um vetor de 100 elementos inteiros, colocando
o valor 1 para posio par e 0 para posio mpar;
7. Faa um programa que carregue um vetor de 10 nmeros inteiros, calcule e mostre os
nmeros primos e suas respectivas posies.
Exerccios
26
7. Escreva um algoritmo que receba 20 nmeros
inteiros num vetor e imprima o resultado
inverso deste vetor;
8. Faa um algoritmo que receba dois vetores de 10
nmeros inteiros cada um e mostre o vetor
resultante da intercalao deles;
9. Elabore um algoritmos que receba 10 nmeros
inteiros, em seguida faa a ordenao dos
elementos e mostre o resultado na tela.

Exerccios
27