Вы находитесь на странице: 1из 41

Algoritmos Estruturas de

Dados
Professora: Mercedes Gonzales Mrquez
Universidade Estadual de Mato Grosso do Sul
Estruturas de Dados
Os tipos primitivos (inteiro, real, literal e lgico)
no so suficientes para representar todos os tipos
de informao.
Particularmente quando temos mais de uma
informao relacionada. Ex: Lista dos nomes dos
alunos de uma sala, endereo de algum etc.
Utilizaremos os tipos primitivos para construir
outras estruturas de dados mais complexas.
Vetores
Tambm denominados Estruturas compostas
homogneas unidimensionais
Permitem a manipulao de um conjunto de
informaes de um mesmo tipo primitivo
Declarao :
tipo primitivo : nome_vetor [numero de elementos]
Exemplo :
Um vetor com nome dados de 40 posies reais ter a
seguinte declarao.
Real: dados[40]
1 2 3 4 5 6 7 8 9 38 39 40
6,5 7,8 5,3
dados
9,8 9,1 4,7 7,8 7,8 3,6 2,4 9,8 1,5 2,8 4,6
Vetores
Manipulao:
Para manipular os elementos de um vetor devemos
especificar a sua posio.
1 2 3 4 5 6 7 8 9 38 39 40
6,5 7,8 5,3
dados
9,8 9,1 4,7 7,8 7,8 3,6 2,4 9,8 1,5 2,8 4,6
vetor[8]
A posio do vetor determinada por meio de uma
constante, de uma expresso aritmtica ou de uma
varivel que estiver dentro dos colchetes. Ela tambm
chamada de ndice.
Vetores
inteiro: NotaAcima
real: A, B, C, D, E, F, G, H, I, J, Mdia
inicio
NotaAcima 0
leia (A,B,C,D,E,F,G,H,I,J)
Mdia (A + B + C + D + E + F + G + H + I + J)/10
se (A > Mdia) ento
NotaAcima NotaAcima + 1
fim se
se (B > Mdia) ento
NotaAcima NotaAcima + 1
fim se
. . .
se (J > Mdia) ento
NotaAcima NotaAcima + 1
fimse
escreva (NotaAcima)
fim.
Algoritmo Notas acima da mdia usando variveis simples
Vetores

real: notas[10], soma, media
inteiro: NotaAcima, i
inicio
soma 0
NotaAcima 0
para i de 1 at 10 repita
leia ( notas[i] )
soma soma + notas[i]
fim para
media soma / 10
para i de 1 at 10 repita
se ( notas[i] > media ) ento
NotaAcima NotaAcima + 1
fim se
fim para
escreva (NotaAcima)
fim.
Algoritmo Notas acima da mdia usando vetor
Vetores
Exerccio Sendo o vetor v igual a
1 2 3 4 5 6 7 8 9 10
1 7,8 3 9 10 14 7,8 6 8 2 21 33
e as variveis x=2 e y=4 escreva o valor correspondente
solicitao
(a) v[x+1] (b) v[x+2] (c) v[x+3] (d) v[x+4]
(e) v[x*1] (f) v[x*2] (g) v[x*3] (h) v[v[x+4]]
(i) v[x+y] (j) v[8-v[2]] (k) v[v[4]] (l) v[v[v[7]]]
(m) v[v[1]*v[4]] (n) v[x+4]
Vetores

inteiro: va[50],vb[50],vc[50],i
inicio
para i de 1 at 50 repita
leia (va[i],vb[i] )
vc[i] va[i] + vb[i]
escreva (vc[i])
fimpara
fim.
Algoritmo 2 Leia dois vetores inteiros de 50 posies, some seus
correspondentes elementos e imprima o resultado da soma
Algoritmo 3 Preencha um vetor de 100 inteiros, colocando 1 na
posio par e 0 na posio impar
inteiro: vetor[100],i
inicio
para i de 1 at 100 repita
se (mod(i,2)<>0) ento
vetor[i] 1
seno
vetor[i] 0
fimpara;
fim.
Vetores
Algoritmo 4 Altere o exemplo da soma de vetores para que
esta realize a seguinte operao: produto do primeiro vetor pelo
inverso do segundo. Os vetores possuem 20 posies e contm
valores reais.

Algoritmo <produto>
inteiro: i
real: V[20],a[20],b[20]
inicio
para i de 1 at 20 repita
V[i] a[i]*b[21-i]
fim para
fim.
Algoritmo 5 Igual que o algoritmo 4, s que o resultado dos
produtos dos valores correspondentes devem ser armazenados
a partir do centro para as bordas, de modo alternado.
Vetores

Algoritmo <produto2>
real: V[20],a[20],b[20]
inteiro: i
inicio
para i de 1 at 10 repita
v[11-i]=a[11-i]*b[10+i]
v[10+i]=a[10+i]+b[11-i]
fim para
fim.
Algoritmo 6 Escreva uma algoritmo que leia um vetor de 20
elementos e conte quantos valores pares existem no vetor.
Vetores

Algoritmo <contagempares>
inteiro: V[20],i,c
inicio
c0
para i de 1 at 20 repita
leia (V[i])
Se (mod(V[],2)=0) ento
cc+1
fim se
fim para
escreva (c)
fim.
Algoritmo 7 Escreva um algoritmo que leia um vetor de 50
posies de nmeros inteiros e mostre somente os positivos
Vetores

Algoritmo <positivos>
inteiro:V[50], i
inicio
para i de 1 at 50 repita
leia (V[i])
se (V[i]>0) ento
escreva (V[i])
fim se
fim para
fim.
Algoritmo 8 Escreva um algoritmo que leia um vetor de 80
elementos inteiros, encontre e mostre o menor elemento e sua
posio no vetor.
Vetores

Algoritmo <menorelemento>
inteiro:V[80], i, ind,menor
inicio
leia (V[1])
menorV[1]
ind1
para i de 2 at 80 repita
leia (V[i])
se (V[i]<menor) ento
menorV[i]
indi
fim se
fim para
fim.
Algoritmo 9 Faa um algoritmo que leia um conjunto de 10
valores inteiros e os coloque em dois vetores conforme forem
pares ou mpares.
Vetores

Algoritmo <doisvetores>
inteiro:V[10], V1[10],V2[10],i,c1,c2
inicio
c11
c21
para i de 1 at 10 repita
leia (V[i])
se (mod(V[i],2)=0) ento
V1[c1]V[i]
c1c1+1
seno
V2[c2]V[i]
c2 c2+1
fim se
fim para
fim.
Algoritmo 10 Escreva um algoritmo que leia um vetor G de 20
elementos literais que representa o gabarito de uma prova. A
seguir para cada um dos 50 alunos da turma, leia o vetor de
respostas R do aluno. Mostre o nmero de acertos do aluno e
uma mensagem APROVADO, se a nota for maior ou igual a 6; e
uma mensagem de REPROVADO, caso contrrio.
Vetores
Algoritmo 10 Escreva um algoritmo que leia um vetor G de 20
elementos literais que representa o gabarito de uma prova. A
seguir para cada um dos 50 alunos da turma, leia o vetor de
respostas R do aluno. Mostre o nmero de acertos do aluno e
uma mensagem APROVADO, se a nota for maior ou igual a 6; e
uma mensagem de REPROVADO, caso contrrio.
Vetores
Algoritmo <prova>
literal:G[20], R[20]
inteiro:i,j,acertos
inicio
para i de 1 at 20 repita
leia (G[i])
fim para
para j de 1 at 50 repita
acertos0
Para i de 1 at 20 repita
leia R[i]
se (R[i]=G[i]) ento
acertosacertos+1
fim se
fim para


notaacertos*0.5
se (nota>=6) ento
escreva (APROVADO)
seno
escreva(REPROVADO)
fim se
fim para
fim
Algoritmo 11 Faa um algoritmo que leia o cdigo numrico
inteiro e um vetor de 50 posies de nmeros reais. Se o cdigo
for 0 termine o algoritmo, se for 1, mostre o vetor na ordem
direta, e se for 2, mostre o vetor na ordem inversa.
Vetores
Vetores
Algoritmo <opcoes>
inteiro:i,codigo
real: vetor[50]
inicio
leia (codigo)
se (codigo>0 e codigo<=2) ento
para i de 1 at 50 repita
leia (vetor[i])
fim para
se (codigo==1) ento
para i de 1 at 50 repita
escreva (vetor[i])
fim para
seno
para i de 50 at 1 passo -1 repita
escreva (vetor [i])
fim para
fim se
fim se
fim
Algoritmo 12 Uma locadora de vdeos tem guardada, em um
arquivo manual, a quantidade de filmes retirados por cliente
durante o ano de 2007. Faa um algoritmo que
(a) leia um vetor de 500 posies para guardar esta informao
e
(b) crie um outro vetor contendo a quantidade de locaes
gratuitas a que cada cliente tem direito, considerando que a
locadora est fazendo uma promoo e para cada 10 filmes
retirados ganha-se uma locao grtis.
Vetores
Vetores
Algoritmo <locadora>
inteiro:i,locacoes[500],gratuitas[500]
inicio
para i de 1 at 500 repita
leia (locacoes[i])
gratuitas[i]=DIV(locacoes[i],10)
fim para
fim
Algoritmo 13 Faa um algoritmo que leia um vetor de 20
inteiros e o coloque em ordem crescente, utilizando a seguinte
estratgia de ordenao:
Selecione o elemento do vetor de 20 posies que apresente o
menor valor.
Troque este elemento pelo primeiro.
Repita estas operaes, envolvendo agora apenas os 19
elementos restantes (trocando o de menor valor com a segunda
posio), depois os 18 elementos (trocando o de menor valor
com a terceira posio), depois os 17,16 e assim por diante, at
restar um nico elemento, o maior deles.
Vetores
Vetores
Algoritmo <ordemcrescente>
inteiro:i,j,vetor[20]
inicio
para i de 1 at 19 repita
inter 0
menor vetor[i]
indice i
para j de i+1 at 20 repita
se (vetor[j] < menor ) ento
menor vetor[j]
indice j
inter 1
fim se
fim para
se (inter) ento
vetor[indice] vetor[i]
vetor[i] menor
fim se
fim para
fim
Algoritmo 14 Desenvolva um algoritmo que leia um vetor de
20 posies inteiras e o coloque em ordem crescente, utilizando
como estratgia de ordenao a comparao de pares de
elementos adjacentes, permutando-os quando estiverem for a
de ordem at que todos estejam ordenados.
Vetores
Vetores
Algoritmo <ordemcrescente2>
inteiro:i,j,tvetor[20]
inicio
para i de 2 at 20 repita
para j de 20 at i passo -1 repita
se (vetor[j-1] < vetor[j] ) ento
t vetor[j-1]
vetor[j-1] vetor[j]
vetor[j] t
fim se
fim para
fim para
fim
Mltiplos Vetores
s vezes temos a necessidade de armazenar
vrios vetores para um mesmo dado. Por
exemplo, um vetor pode armazenar as notas da
primeira prova de uma turma. Mas como
armazenar as notas das 4 provas de uma turma e
depois calcular a mdia final?

Criamos 4 vetores?
Real: nota1[65],nota2[65],nota3[65],nota4[65];

Mas e se forem 100 notas? Criamos 100
vetores?
no h nada melhor ?
Mltiplos Vetores
Matrizes
Uma matriz representa um conjunto de vetores
de mesmo tamanho.
Uma matriz possui n linhas e m colunas:
as linhas so numeradas de 1 a n
as colunas so numeradas de 1 a m
Uma matriz pode armazenar (linhas * colunas)
elementos de um mesmo tipo

Mltiplos Vetores
Uma matriz de m linhas e n colunas
1 2 3 4 n-1 n
1


2

3


4




m
Mltiplos Vetores
- H casos em que uma matriz insuficiente para armazenar um
conjunto de dados para um determinado programa. Nestes casos,
necessrio definir um vetor de d-dimenses.

-Tambm denominado Estrutura composta homognea
multidimensional
Exemplos
- vetor tridimensional:
inteiro matriz[10][10][10]

- Quatro dimenses:
inteiro matriz[5][10][10][10]

- Declarao geral para d dimenses:

Tipo primitivo : varivel[num_elem_ prim.dim]
[num_elem_seg_dim]...[num_elem_d_dim]
Mltiplos Vetores
-Para utilizar um vetor ns o inserimos em um nico lao
de repetio, fazendo com que haja variao em seu
ndice.
-Como em uma estrutura multidimensional possumos
mais de um ndice, faz-se necessria a utilizao de mais
laos de repetio, em mesmo nmero do que o nmero
de dimenses da estrutura.
-As estruturas multidimensionais mais utilizadas so as
bidimensionais (Matrizes).
-Exercicios com matrizes

(1) Construa um algoritmo que efetue a leitura de duas
matrizes inteiras de dimenso 5x5, calcule e imprima a
soma delas.
Matrizes
Algoritmo <somamatrizes>
inteiro:A[5][5],B[5][5],S[5][5],i,j
inicio
para i de 1 at 5 repita
para j de 1 at 5 repita
leia (A[i][j],B[i][j])
C[i][j] A[i][j]+B[i][j]
fim para
fim para
fim
(2) Elabore um algoritmo que leia duas matrizes inteiras
A e B de dimenso 3x3 e calcule em uma matriz R, a
multiplicao delas.
Matrizes
(
(
(

(
(
(

=
(
(
(

33 32 31
23 22 21
13 12 11
33 32 31
23 22 21
13 12 11
33 32 31
23 22 21
13 12 11
*
B B B
B B B
B B B
A A A
A A A
A A A
R R R
R R R
R R R
Lembre-se que:
33 33 23 32 13 31 33
32 33 22 32 12 31 32
31 23 21 22 11 21 21
33 13 23 12 13 11 13
32 13 22 12 12 11 12
31 13 21 12 11 11 11
* * *
* * *
...
* * *
* * *
* * *
* * *
B A B A B A R
B A B A B A R
B A B A B A R
B A B A B A R
B A B A B A R
B A B A B A R
+ + =
+ + =
+ + =
+ + =
+ + =
+ + =
Matrizes
Algoritmo <produtomatrizes>
inteiro:A[3][3],B[3][3],R[3][3],i,j,k
inicio
para i de 1 at 3 repita
para j de 1 at 3 repita
leia (A[i][j],B[i][j])
fim para
fim para
para i de 1 at 3 repita
para j de 1 at 3 repita
R[i][j] 0
para k de 1 at 3 repita
R[i][j] A[i][k]*B[k][j]+R[i][j]
fim para
fim para
fim para
fim
Matrizes
(3) Faa um algoritmo que leia uma matriz M de 10x10
Troque a seguir
(a)A linha 2 com a linha 8(b)A coluna 4 com a coluna 10
(c)A diagonal principal com a diagonal secundria
(d)A linha 5 com a coluna 10
Algoritmo <trocas>
inteiro:M[10][10],i,j,t
inicio
para i de 1 at 10 repita
para j de 1 at 10 repita
leia (M[i][j])
fim para
fim para
para i de 1 at 10 repita
t M[2][i]
M[2][i] M[8][i]
M[8][i] t
t M[i][4]
M[i][4] M[i][10]
M[i][10] t


t M[5][i]
M[5][i] M[i][10]
M[i][10] t
t M[i][i]
M[i][i] M[i][11-i]
M[i][11-i] t
fim para
fim
Matrizes
(4) Faa um algoritmo que leia uma matriz M de
dimenso 6x6 e um valor A, multiplique a matriz pelo
valor A, coloque os valores da matriz multiplicados por
A em um vetor de 36 elementos e imprima o vetor.
Algoritmo <matriz_vetor>
inteiro:M[6][6],V[36],A,i,j
inicio
leia (A)
para i de 1 at 6 repita
para j de 1 at 6 repita
leia (M[i][j])
V[(i-1)*6+j] A*M[i][j]
fim para
fim para

Matrizes
(5) Escreva um algoritmo que leia um nmero inteiro A e uma
matriz de 30x30 de inteiros. Tambm deve contar quantos valores
iguais a A esto na matriz e criar uma matriz X contendo todos os
elementos diferentes de A. Nas outras posies deve se colocar o
valor 0.
Algoritmo <matriz_vetor>
inteiro:M[30][30],A,X[30][30],i,j,cont
inicio
leia (A)
cont <-0
para i de 1 at 30 repita
para j de 1 at 30 repita
leia (M[i][j])
se (M[i][j]=A) ento
X[i][j] 0
cont<-cont+1
seno
X[i][j] M[i][j]
fim se
fim para
fim para

Matrizes
(6) Escreva um algoritmo que leia uma matriz M de 12 x
13 e divide todos os 13 elementos de cada uma das
linhas de M pelo maior elemento em mdulo daquela
linha.
Algoritmo <divide_maior>
inteiro:M[12][13],maior,i,j
inicio
para i de 1 at 12 repita
maior0
para j de 1 at 13 repita
leia (M[i][j])
se (abs(M[i][j])>maior) ento
maior abs(M[i][j])
fim se
fim para
para j de 1 at 13 repita
M[i][j]M[i][j]/maior
fim para
fim para
fim

Matrizes
(7) Escreva um algoritmo que leia uma matriz M de 5 x 5
e crie dois vetores SL[5] e SC[5] que contenham,
respectivamente, as somas das linhas e das colunas de M.
Escreva a matriz e os vetores criados.
Algoritmo <soma_linhas_colunas>
inteiro:M[5][5],SL[5],SC[5],i,j
inicio
para i de 1 at 5 repita
SL[i]0
SC[i]0
para j de 1 at 5 repita
leia (M[i][j])
SL[i] SL[i]+M[i][j]
SC[i] SC[i]+M[j][i]
fim para
fim para
fim

Matrizes
(8) Faa um algoritmo que leia uma matriz 20x15 de
inteiros e calcule a soma das linhas pares da matriz.
Algoritmo <soma_linhas_pares>
inteiro:M[20][15],S,i,j
inicio
S0
para i de 2 at 20 passo 2 repita
para j de 1 at 15 repita
leia (M[i][j])
S S+M[i][j]
fim para
fim para
fim

Matrizes
(9) Na teoria de sistemas, define-se como elemento
minimax de uma matriz o menor elemento da linha onde
se encontra o maior elemento da matriz. Escreva um
algoritmo que leia uma matriz 10x10 de inteiros e
encontre seu elemento minimax, mostrando tambm sua
posio.
Matrizes
Algoritmo <minimax>
inteiro:M[10][10],minimax,maior,indi,indj,i,j
inicio
maior-inf
para i de 1 at 10 repita
para j de 1 at 10 repita
leia (M[i][j])
se (M[i][j]>maior) ento
maior M[i][j]
indii
fim se
fim para
fim para
menorinf
para j de 1 at 10 repita
se (M[indi][j]<menor) ento
menorM[i][j]
indjj
fim se
fim para
fim

Matrizes
Resolver os exerccios propostos sobre vetores e
matrizes do livro de Harry Farrer.

Вам также может понравиться