Você está na página 1de 11

Algoritmos e Estruturas de Dados 1 Prof.

Eduardo

1 - VARIVEIS COMPOSTAS HOMOGNEAS (VETORES E MATRIZES)


As variveis compostas homogneas so estruturas de dados que se caracterizam por um conjunto de variveis do mesmo tipo. Elas podem ser unidimensionais ou multidimensionais. Para explicar de maneira simples, vamos fazer uma analogia: imaginemos um quadradinho de um tabuleiro de damas. Este quadradinho uma varivel simples. A varivel composta homognea um conjunto desses quadradinhos. A este conjunto damos o nome de tabuleiro. Sendo assim, a nossa varivel composta homognea chama-se tabuleiro e sabemos que dentro dela existem diversos quadradinhos iguais, ou seja, cada quadradinho um elemento do tabuleiro e todos so do mesmo tipo.

(a) 1.1 VETOR

(b)

(c)

Varivel composta homognea unidimensional caracteriza-se por dados agrupados linearmente numa nica direo, como uma linha reta (b). Definio So varveis que recebem um nome e podem assumir vrios valores. Unidimensionais. Portanto, vetor tambm conhecido como varivel composta unidimensional. Isto quer dizer que se trata de um conjunto de variveis de mesmo tipo, que possuem o mesmo identificador (nome) e so alocadas sequencialmente na memria. Como as variveis tm o mesmo nome, o que as distingue um ndice que referencia sua localizao dentro da estrutura. 1.1.1 - Declarao de vetor declarao de variveis tipo nome[tamanho] onde tipo o tipo dos dados que sero armazenados no vetor; nome o nome da varivel do tipo vetor; tamanho a quantidade de variveis que vo compor o vetor. 1.1.2 - Exemplo de vetor declarao de variveis inteiro x[5]; x 1 2 3 4 5

x[1]

Algoritmos e Estruturas de Dados 1 Prof. Eduardo

1.1.3 - Atribuindo valores ao vetor As atribuies em vetor exigem que seja informada em qual de suas posies o valor ficar armazenado. x[1] 45; No exemplo, o nmero 45 ser armazenado na posio de ndice 1 do vetor. Veja: real notas[6]; Vetor notas de 6 posies do tipo real. (sintaxe: tipo nome[posies])
Em Algoritmo

notas 6.0 1 7.0 2 4.0 3 8.0 4 8.0 5 9.0 6

Para acessar cada valor correspondente s notas, no exemplo acima, deve-se utilizar um ndice, cujo valor varia de 1 (ou 0, em C++) at o tamanho do vetor. Observe as atribuies: notas[1] 6.0; notas[2] 7.0; ... 1.1.4 - Preenchendo um vetor Preencher um vetor significa atribuir valores a todas as suas posies. Assim, deve-se implementar um mecanismo que controle o valor do ndice. Exemplo: para x1 at 5 faa incio escreva(Digite o , x, nmero:); leia(vet[x]); fim para Nesse exemplo, a estrutura de repetio para foi utilizada para garantir que a varivel x assuma todos os valores possveis para o ndice do vetor. Assim, para cada execuo da repetio, ser utilizada uma posio diferente do vetor. Simulao: MEMRIA TELA
x = 1; vet 26 1 26 1 26 1 26 1 26 1 Digite o primeiro nmero: 26 2 15 2 15 2 15 2 15 2 3 4 5 Digite o segundo nmero: 15 3 -21 3 -21 3 -21 3 4 5 Digite o terceiro nmero: -21 4 46 4 46 4 5 Digite o quarto nmero: 46 5 0 5 Digite o primeiro nmero: 0

x = 2;

vet

x = 3;

vet

x = 4;

vet

x = 5;

vet

Algoritmos e Estruturas de Dados 1 Prof. Eduardo

1.1.5 - Mostrando os elementos do vetor Mostrar os valores contidos em um vetor tambm implica a utilizao. Exemplo: para x1 at 5 faa incio escreva(Este o , x, nmero do vetor); escreva(x[]); fim para Exerccio resolvido: Criar um algoritmo que leia um vetor de nmeros inteiros e 5 posies. Mostre cada elemento do vetor multiplicado por 3. algoritmo numeros declarao de variveis inteiro num[5], x,mult; inicio para x1 at 5 faa inicio escreva(Digite um nmero: ); leia(num[x]); fim para para x1 at 5 faa inicio multnum[x]*3; escreva(mult); fim para fim_algoritmo

Exerccios: 1 - Criar um algoritmo que leia 4 notas de um aluno armazenando-as em um vetor. Posteriormente, mostre as notas do fim para o comeo.
2 - Criar um algoritmo de Loteria que leia uma aposta de 13 nmeros e um gabarito com 13 nmeros de resultado. Compare o vetor de aposta com o vetor de gabarito e mostre o total de acertos. Exibe a mensagem de Ganhador caso ocorra 13 acertos. 3 - Criar um algoritmo que preencha um vetor com nove nmeros inteiros, calcule e mostre os nmeros primos e suas respectivas posies. 4 - Criar um algoritmo que leia um vetor A com cinco nmeros inteiros e outro vetor B com 4 nmeros inteiros. Mostrar os elementos que esto em A e no esto em B. A 1 5 10 8 7 B 2 1 10 5 5 - Criar um algoritmo que leia um vetor de trs caracteres e outro de cinco caracteres. Depois, mostrar os caracteres que so comuns aos dois. A a b c B a x 2 4 7 6 - Criar um algoritmo que leia dois vetores com 10 nmeros inteiros cada. Depois, deve-se subtrair o 1 elemento do vetor A do ltimo elemento do vetor B, o segundo elemento de A do penltimo de B e assim por diante. Os resultados das subtraes devem ser armazenados em um 3 vetor.

Algoritmos e Estruturas de Dados 1 Prof. Eduardo

7 - Criar um algoritmo que preencha dois vetores de dez elementos numricos cada um e mostre o vetor resultante da intercalao deles. vetor1 3 1 7 1 2 0 6 2 5 2 15 2 0 4 3 20 3 2 2 4 0 4 18 1 0 2 5 18 5 5 1 1 5 6 4 6 4 1 2 3 7 55 7 3 1 3 2 8 23 8 55 1 4 5 9 8 9 2 1 5 9 10 6 10 23 1 6 5 1 7 8 1 8 9 1 9 6 2 0

vetor2

Intercala o

1 2 3

1 5 4

4 5

7 8 9

8 - Faa um algoritmo que preencha um vetor com dez nmeros inteiros, calcule e mostre o vetor resultante de uma ordenao decrescente. vet 3 1 11 1 5 2 9 2 4 3 8 3 2 4 7 4 1 5 6 5 6 6 5 6 8 7 4 7 7 8 3 8 11 9 2 9 9 10 1 10

ordenado

9 - Faa um programa que preencha dois vetores com cinco elementos numricos cada um e depois ordeneos de maneira crescente. Dever ser gerado um terceiro vetor com dez posies, composto pela juno dos elementos dos vetores anteriores, tambm ordenado de maneira crescente. vet1 6 1 1 1 8 2 3 2 1 3 6 3 10 4 8 4 3 5 10 5

vet1 ordenado

vet2

20 1 0 1 3 4

0 2 2 2 5 5

7 3 5 3 6 6

2 4 7 4 7 7

5 5 20 5 8 8 10 9 20 10

vet2 ordenado

Resultado 0 1

1 2

2 3

10 - Faa um algoritmo para corrigir provas de mltipla escolha. Cada prova tem oito questes e cada questo vale um ponto. O primeiro conjunto de dados a ser lido o gabarito da prova. Os outros dados so os nmeros dos alunos e as respostas que deram s questes. Existem dez alunos matriculados. Calcule e mostre: O nmero e a nota de cada aluno; A percentagem de aprovao, sabendo-se que a nota mnima 6.

Algoritmos e Estruturas de Dados 1 Prof. Eduardo

11 - Faa um algoritmo que receba seis nmeros inteiros e mostre: Os nmeros pares digitados; A soma dos nmeros pares digitados; Os nmeros mpares digitados; A quantidade de nmeros mpares digitados. vetor Relatrio: Os nmeros pares so: Nmero 2 na posio 1 Nmero 4 na posio 2 Nmero 6 na posio 4 Soma dos pares = 12 Os nmeros mpares so: Nmero 5 na posio 3 Nmero 3 na posio 5 Nmero 7 na posio 6 Quantidade de mpares = 3 12 - Faa um algoritmo que preencha dois vetores, A e B, com vinte caracteres cada um. A seguir, troque o 1 elemento de A com o 20 de B, o 2 de A com o 19 de B, e assim por diante, at trocar 20 de A com o 1 de B. Mostre os vetores antes e depois da troca. Vetores antes da troca: A A 1 S 1 G 2 D 2 Y 3 4 3 W 4 5 4 5 5 H 5 V 6 G 6 S 7 R 7 8 8 U 8 6 9 8 9 J 10 9 10 G A W 2 M C H Q 6 L 11 12 13 14 15 16 17 18 19 20 K S A 1 2 V 4 D 5 M 11 12 13 14 15 16 17 18 19 20 2 1 4 2 5 3 6 4 3 5 7 6

Vetores depois da troca: A M 1 L 1 5 2 6 2 D 3 Q 3 4 4 H 4 V 5 C 5 2 6 M 6 1 7 2 7 A 8 W 8 S 9 A 9 K 10 G 10 9 8 U R G H 5 4 D S 11 12 13 14 15 16 17 18 19 20 J 6 8 S V 5 W Y G A 11 12 13 14 15 16 17 18 19 20

Algoritmos e Estruturas de Dados 1 Prof. Eduardo

13 Faa um algoritmo que simule um controle bancrio. Para tanto, devem ser lidos os cdigos de dez contas e seus respectivos saldos. Os cdigos devem ser armazenados em um vetor de nmeros inteiros (no pode haver mais de uma conta com o mesmo cdigo) e os saldos devem ser armazenados em um vetor de nmeros reais. O saldo dever ser cadastrado na mesma posio do cdigo. Por exemplo, se a conta 504 foi armazenada na quinta posio do vetor de cdigos, seu saldo dever ficar na quinta posio do vetor de saldos. Depois de fazer a leitura dos valores, dever aparecer o seguinte menu na tela: 1 Efetuar depsito 2 Efetuar saque 3 Consultar o ativo bancrio ( somatrio dos saldos de todos os clientes) 4 Finalizar o programa Para efetuar depsito, deve-se solicitar o cdigo da conta e o valor a ser depositado. Se a conta no estiver cadastrada, dever aparecer a mensagem Conta no encontrada e voltar ao menu. Se a conta existir, atualizar o seu saldo. Para efetuar saque, deve-se solicitar o cdigo da conta e o valor a ser sacado. Se a conta no estiver cadastrada, dever aparecer a mensagem Conta no encontrada e voltar ao menu. Se a conta existir, verificar se seu saldo suficiente, realizar o saque. (Estou supondo que a conta no pode ficar com saldo negativo.) Se o saldo for suficiente, realizar o saque e voltar ao menu. Caso contrrio, mostrar a mensagem Saldo insuficiente e voltar ao menu; Para consultar o ativo bancrio, deve-se somar o saldo e todas as contas do banco. Depois de mostrar esse valor, voltar ao menu; O algoritmo s termina quando for digitada a opo 4 Finalizar o programa.

14 Uma empresa possui nibus com 48 lugares (24 nas janelas e 24 no corredor). Faa um algoritmo que utilize dois vetores para controlar as poltronas ocupadas no corredor e na janela. Considere que 0 representa poltrona desocupada e 1, poltrona ocupada. janela 0 1 1 2 0 3 0 4 ... ... 1 22 0 23 0 24

0 0 0 1 ... 1 0 0 1 2 3 4 ... 22 23 24 Inicialmente, todas as poltronas estaro livres. Depois disso, o algoritmo dever apresentar as seguintes opes: Vender passagem. Mostrar mapa de ocupao do nibus. Encerrar. Quando a opo escolhida for Vender passagem, dever ser perguntado se o usurio deseja janela ou corredor e o nmero da poltrona. O algoritmo dever, ento, dar uma das seguintes mensagens: Venda efetivada se a poltrona solicitada estiver livre, marcando-a como ocupada. Poltrona ocupada se a poltrona solicitada no estiver disponvel para venda. nibus lotado quando todas as poltronas j estiverem ocupadas. Quando a opo escolhida for Mostrar mapa de ocupao do nibus, dever ser mostrada uma listagem conforme a seguir:
JANELA 1 Ocupada 2 Ocupada 3 Livre 4 Livre 5 Ocupada ... CORREDOR 1 Ocupada 2 Livre 3 Livre 4 - Ocupada 5 - Livre

corredor

Quando for escolhida a opo Encerrar, a execuo do programa dever ser finalizada.

Algoritmos e Estruturas de Dados 1 Prof. Eduardo

1.2 - MATRIZ A varivel composta multidimensional caracteriza-se por dados agrupados em diferentes direes, como num plano (a) ou num cubo (c). 1.2.1 - Definio Uma matriz uma varivel composta homognea multidimensional. Ela formada por uma sequencia de variveis, todas do mesmo tipo, com o mesmo identificador (mesmo nome), e alocadas sequencialmente na memria. Uma vez que as variveis tm o mesmo nome, o que as distingue so ndices que referenciam sua localizao dentro da estrutura. Uma varivel do tipo matriz precisa de um ndice para cada uma de suas dimenses. No caso mais simples, bidimensionais:
1 1 2 3 4 5 2 3 4 5

Linhas

Colunas

1.2.2 - Declarao de Matriz Um algoritmo pode declarar uma matriz, conforme descrito a seguir: declarao de variveis tipo nome[dimenso1,dimenso2,dimenso3, . . . ,dimensoN ]; onde tipo o tipo de dados dos elementos da matriz; nome o nome da varivel do tipo matriz; dimenso1 a quantidade de elementos da 1 dimenso (muitas vezes chamada de linha); dimenso2 a quantidade de elementos da 2 dimenso (muitas vezes chamada de coluna); dimenso3 a quantidade de elementos da 3 dimenso (muitas vezes chamada de profundidade); dimensoN a quantidade de elementos da n-sima dimenso;

1.2.3 - Exemplo de Matriz O exemplo a seguir define uma matriz bidimensional, onde o tamanho da 1 dimenso (linha) 3 e o da 2 dimenso (coluna) 5. declarao de variveis inteiro m[3,5];
1 m 1 2 3 2 3 4 5

m[1,1]

m[3,4]

Algoritmos e Estruturas de Dados 1 Prof. Eduardo

O exemplo que se segue define uma matriz tridimensional, onde o tamanho da 1 dimenso (linha) 4, o tamanho da 2 dimenso (coluna 6 e o tamanho da 3 dimenso (profundidade) 3.

Atribuindo valores a uma matriz x[2,4] 45; x[3,1] 13; x[4,2,1] 0; x[3,5,3] -4;

1.2.4 - Preenchendo uma matriz Para preencher uma matriz, necessrio identificar todas as suas posies. Isto exige a utilizao de um ndice para cada dimenso da matriz. No exemplo a seguir, uma matriz bidimensional com trs linhas e cinco colunas mostrada. Observe que a varivel i varia dentro do intervalo de 1 a 3, ou seja, exatamente nas linhas. Para cada valor de i, a varivel j varia de 1 a 5, ou seja, as cinco colunas que cada linha possui. para i1 at 3 faa incio para j1 at 5 faa incio escreva(Digite o nmero da linha , i, e coluna , j, :); leia(x[i,j]); fim para fim para Simulao: MEMRIA i j 1 1 2 3 4 5 2 1 2 3 4 5 3 1 2 3 4 5 TELA Digite o nmero da linha 1 e coluna 1: 12 Digite o nmero da linha 1 e coluna 2: 9 Digite o nmero da linha 1 e coluna 3: 3 Digite o nmero da linha 1 e coluna 4: 7 Digite o nmero da linha 1 e coluna 5: -23 Digite o nmero da linha 2 e coluna 1: 15 Digite o nmero da linha 2 e coluna 2: 4 Digite o nmero da linha 2 e coluna 3: 2 Digite o nmero da linha 2 e coluna 4: 34 Digite o nmero da linha 2 e coluna 5: -4 Digite o nmero da linha 3 e coluna 1: 3 Digite o nmero da linha 3 e coluna 2: 45 Digite o nmero da linha 3 e coluna 3: 3 Digite o nmero da linha 3 e coluna 4: 0 Digite o nmero da linha 3 e coluna 5: -3

Algoritmos e Estruturas de Dados 1 Prof. Eduardo

Assim pode-se imaginar os elementos dispostos em uma estrutura bidimensional, como uma tabela:
1 x 1 2 3 2 3 4 5

12 15 3

9 4 45

3 2 3

7 34 0

-23 -4 -3

J no exemplo que se segue, uma matriz tridimensional com quatro linhas, trs colunas e profundidade dois preenchida. Observe que a varivel i oscila dentro do intervalo de 1 a 4, ou seja, exatamente nas linhas. Para cada valor de i, a varivel j se movimenta de 1 a 3, ou seja, as trs colunas que cada linha possui, e, por fim, a varivel k se alterna entre 1 e 2, que a profundidade. para i1 at 4 faa incio para j1 at 3 faa incio para k1 at 2 faa incio escreva(Digite o nmero da linha , i, coluna , j, e profundidade , k,:); leia(x[i,j]); fim para fim para fim para MEMRIA i j k 1 1 1 2 2 1 2 3 1 2 2 1 1 2 2 1 2 3 1 2 3 1 1 2 2 1 2 3 1 2 4 1 1 2 2 1 2 3 1 2 TELA Digite o nmero da linha 1 coluna 1 e profundidade 1: 2 Digite o nmero da linha 1 coluna 1 e profundidade 2: 5 Digite o nmero da linha 1 coluna 2 e profundidade 1: -1 Digite o nmero da linha 1 coluna 2 e profundidade 2: 0 Digite o nmero da linha 1 coluna 3 e profundidade 1: 15 Digite o nmero da linha 1 coluna 3 e profundidade 2: 8 Digite o nmero da linha 2 coluna 1 e profundidade 1: -25 Digite o nmero da linha 2 coluna 1 e profundidade 2: 3 Digite o nmero da linha 2 coluna 2 e profundidade 1: 6 Digite o nmero da linha 2 coluna 2 e profundidade 2: 9 Digite o nmero da linha 2 coluna 3 e profundidade 1: 7 Digite o nmero da linha 2 coluna 3 e profundidade 2: 11 Digite o nmero da linha 3 coluna 1 e profundidade 1: 23 Digite o nmero da linha 3 coluna 1 e profundidade 2: -2 Digite o nmero da linha 3 coluna 2 e profundidade 1: -5 Digite o nmero da linha 3 coluna 2 e profundidade 2: 46 Digite o nmero da linha 3 coluna 3 e profundidade 1: 19 Digite o nmero da linha 3 coluna 3 e profundidade 2: 1 Digite o nmero da linha 4 coluna 1 e profundidade 1: 14 Digite o nmero da linha 4 coluna 1 e profundidade 2: 27 Digite o nmero da linha 4 coluna 2 e profundidade 1: 5 Digite o nmero da linha 4 coluna 2 e profundidade 2: 4 Digite o nmero da linha 4 coluna 3 e profundidade 1: 10 Digite o nmero da linha 4 coluna 3 e profundidade 2: 65

Algoritmos e Estruturas de Dados 1 Prof. Eduardo

10

Assim pode-se imaginar os elementos dispostos em uma estrutura tridimensional, como um cubo:

1.2.5 - Mostrando os elementos de uma matriz Para mostrar os elementos de uma matriz, necessrio identificar as suas posies. Isto exige a utilizao de um ndice para cada dimenso da matriz. No exemplo a seguir, uma matriz bidimensional com trs linhas e cinco colunas mostrada. Observe que a varivel i assume valores seqenciais no intervalo de 1 a 3, ou seja, exatamente nas linhas da matriz. Para cada valor assumido por i, a varivel j assume valores sequenciais de 1 a 5, ou seja, as cinco colunas que cada linha possui. para i1 at 3 faa incio para j1 at 5 faa incio escreva(x[i,j]); fim para fim para Exerccio resolvido: Criar um algoritmo que leia as trs notas de 2 alunos do 1 ano de Licenciatura em Computao. Depois mostre estas notas divididas por 2, uma vez que, constatou-se que estes alunos colaram nas provas. algoritmo notas declarao de variveis real notas[2,3], div; inteiro a,b; incio para a1 at 2 faa incio para b1 at 3 faa incio escreva(Digite uma nota: ); leia(notas[a,b]); fim para fim para para a1 at 2 faa incio para b1 at 3 faa incio divnotas[a,b]/2; escreva(Nota dividida: ,div); fim para fim para

Algoritmos e Estruturas de Dados 1 Prof. Eduardo

11

Exerccios:
1 Criar um algoritmo que leia uma matriz 6 x 4 de nmeros inteiros e um elemento inteiro qualquer, multiplique todos os elementos da matriz por este elemento inteiro qualquer. Mostrar a matriz alterada. 2 Criar um algoritmo que leia uma matriz 3 x 3 de nmeros reais. Calcular e mostrar o somatrio dos elementos da 3 linha. 3 Criar um algoritmo que leia uma matriz 3 x 3 de nmeros inteiros e mostre apenas os elementos da diagonal principal. 4 Faa um algoritmo que preencha: um vetor com oito posies, contendo nomes de lojas; outro vetor com quatro posies, contendo nomes de produtos; uma matriz 4 x 8 com os preos de todos os produtos em cada loja. O programa dever mostrar todas as relaes (nome do produto nome da loja) em que o preo no ultrapasse R$120,00). 5 Criar um algoritmo que preencha uma matriz 10 x 20 com nmeros inteiros e some cada uma das linhas, armazenando o resultado das somas em um vetor. A seguir, o programa dever multiplicar cada elemento da matriz pela soma da linha correspondente e mostrar a matriz resultante. 6 Criar um algoritmo que receba: um vetor com o nome de cinco cidades diferentes; uma matriz 5 x 5 com a distncia entre as cidades, sendo que na diagonal principal deve ser colocada automaticamente distncia zero, ou seja, no deve ser permitida a digitao; o consumo de combustvel de um veculo, ou seja, quantos quilmetros este veculo percorre com um litro de combustvel. O programa dever calcular e mostrar: os percursos que no ultrapassem 250 quilmetros (os percursos so compostos pelos nomes das cidades de origem e pelos nomes das cidades de destino); todos os percursos (nome da cidade de origem e nome da cidade de destino), juntamente com a quantidade de combustvel necessria para o veculo percorr-lo.

7 Uma escola deseja controlar as mdias das disciplinas cursadas por seus alunos. Sabe-se que nessa escola existem trs turmas, com oito alunos cada, e cada aluno cursa quatro disciplinas. Crie um algoritmo que armazene essas mdias em uma matriz 3 x 8 x 4. Depois da leitura, ele dever calcular e mostrar: a mdia geral de cada aluno; a mdia de cada turma.

Você também pode gostar