340 likes | 574 Views
Profa. Mercedes Gonzales Márquez. Algoritmos e Estruturas de Dados I – Estruturas de Dados. Estruturas de Dados. Os tipos primitivos ( inteiro , real, literal e lógico ) não são suficientes para representar todos os tipos de informação .
E N D
Profa. Mercedes Gonzales Márquez Algoritmos e Estruturasde Dados I – Estruturas de Dados
Estruturas de Dados Os tiposprimitivos (inteiro, real, literal e lógico) nãosãosuficientespararepresentartodosostipos de informação. Particularmentequandotemosmais de umainformaçãorelacionada. Ex: Lista dos nomes dos alunos de umasala, endereço de alguém etc. Utilizaremosostiposprimitivosparaconstruiroutrasestruturas de dados maiscomplexas.
Vetores TambémdenominadosEstruturascompostashomogêneasunidimensionais Permitem a manipulação de um conjunto de informações de um mesmotipoprimitivo Declaração : tipoprimitivo : nome_vetor [numero de elementos] Exemplo : Um vetor com nome “dados” de 40 posiçõesreaisterá a seguintedeclaração. Real: dados[40] dados 1 2 3 4 5 6 7 8 9 38 39 40 7,8 7,8 7,8 3,6 5,3 9,1 9,8 6,5 9,8 4,7 1,5 2,8 4,6 2,4
Vetores Manipulação: Para manipularoselementos de um vetordevemosespecificar a suaposição. dados 7,8 2,4 7,8 7,8 3,6 5,3 9,1 9,8 6,5 9,8 4,7 1,5 2,8 4,6 1 2 3 4 5 6 7 8 9 38 39 40 -dados[8] • A posição do vetor é determinadapormeio de umaconstante, de umaexpressãoaritméticaou de umavariávelqueestiverdentro dos colchetes. Ela é tambémchamada de índice.
Vetores Exercício – Sendo o vetor v igual a 2 33 7,8 7,8 6 8 3 10 9 1 21 14 1 2 3 4 5 6 7 8 9 10 e as variáveis x=2 e y=4 escreva o valorcorrespondente à solicitação (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 Algoritmo 2 – Leiadoisvetoresinteiros de 50 posições, some seuscorrespondenteselementos e imprima o resultadoda soma inteiro: va[50],vb[50],vc[50],i inicio para ide 1 até 50 repita leia (va[i],vb[i] ) vc[i] ← va[i] + vb[i] escreva (vc[i]) fimpara fim.
Vetores Algoritmo 3 – Preencha um vetor de 100 inteiros, colocando 1 naposição par e 0 naposiçãoimpar inteiro: vetor[100],i inicio para ide 1 até 100 repita se (mod(i,2)=0) então vetor[i] ← 1 senão vetor[i] ← 0 fimpara; fim.
Vetores Algoritmo 4 – Altere o exemploda soma de vetoresparaqueesta realize a seguinteoperação: produto do primeirovetorpeloinverso do segundo. Os vetorespossuem 20 posições e contémvaloresreais. 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.
Vetores Algoritmo 5 – Igualque o algoritmo 4, sóque o resultado dos produtos dos valorescorrespondentesdevem ser armazenados a partir do centropara as bordas, de modoalternado. 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.
Vetores Algoritmo 6 – Escrevaumaalgoritmoqueleia um vetor de 20 elementos e contequantosvalores pares existem no vetor. Algoritmo <contagempares> inteiro: V[20],i,c inicio c ←0 para i de 1 até 20 repita leia (V[i]) Se (mod(V[i],2)=0) então c ← c+1 fim se fim para escreva (c) fim.
Vetores Algoritmo 7 – Escreva um algoritmoqueleia um vetor de 50 posições de númerosinteiros e mostresomenteospositivos Algoritmo <positivos> inteiro:V[50], i inicio para i de 1 até 50 repita leia (V[i]) se (V[i]>0) então escreva (V[i]) fim se fim para fim.
Vetores Algoritmo 8 – Escreva um algoritmoqueleia um vetor de 80 elementosinteiros, encontre e mostre o menorelemento e suaposição no vetor. 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) então menorV[i] indi fim se fim para fim.
Vetores Algoritmo 9 – Faça um algoritmoqueleia um conjunto de 10 valoresinteiros e oscoloqueemdoisvetoresconformeforem pares ouímpares. Algoritmo <doisvetores> inteiro:V[10], V1[10],V2[10],i,c1,c2 inicio c1 c2 para i de 1 até 10 repita leia (V[i]) se (mod(V[i],2)=0) então V1[c1]V[i] c1c1+1 senão V2[c2]V[i] c2 c2 fim se fim para fim.
Vetores Algoritmo 10 – Ler um vetor v de 10 elementos inteiros e obter um vetor fat cujos componentes são os fatoriais dos respectivos componentes de v. Algoritmo <doisvetores> inteiro:v[10], fat[10],i,j inicio para i de 1 até 10 repita leia (v[i]) fat[i] 1 Para j de 1 até v[i] repita fat[i] fat[i]*j Fim Para fim.
Vetores Algoritmo 11 – 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 número de acertos do aluno e uma mensagem APROVADO, se a nota for maior ou igual a 6; e uma mensagem de REPROVADO, caso contrário.
Vetores notaacertos*0.5 se (nota>=6) então escreva (“APROVADO”) senão escreva(“REPROVADO”) fim se fim para fim 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 acertos ← 0 Para i de 1 até 20 repita leia R[i] se (R[i]=G[i]) então acertos ← acertos+1 fim se fim para
Vetores Algoritmo 12 – Faça um algoritmoqueleia um códigonuméricointeiro e um vetor de 50 posições de númerosreais. Se o código for 0 termine o algoritmo, se for 1, mostre o vetornaordemdireta, e se for 2, mostre o vetornaordeminversa.
Vetores Algoritmo <opcoes> inteiro:i,codigo real: vetor[50] inicio leia (codigo) se (codigo>0 e codigo<=2) então para i de 1 até 50 repita leia (vetor[i]) fim para se (codigo=1) então para i de 1 até 50 repita escreva (vetor[i]) fim para senão para i de 50 até 1 passo -1 repita escreva (vetor [i]) fim para fim se fim se fim
Vetores Algoritmo 13 – Faça um algoritmo que leia dois conjuntos de números inteiros tendo cada um 20 elementos e apresente os elementos comuns (interseção de conjuntos).
Vetores Algoritmo <intersecao> real: a[20], b[20], c[20] inteiro: i, j, k Inicio Para i de 1 até 20 repita Leia( a[i] ,b[i]) Fim_para k ← 0 Para i de 1 até 20 repita Para j de 1 até 20 repita Se( a[i] = b[j] ) então k ← k+1 c[k] ← a[i] Fim_se Fim_para Fim_para Se ( k=0 ) então Escreva(“Interseção Vazia. “) Senão Escreva(“Conjunto Interseção:”) Fim se Para i de 1 até k repita Escreva( c[i] ) Fim_para Fim_se Fim Obs. Com este algoritmo, se houver elementos repetidos, também se repetirão na saída. Como evitar isso?
Vetores Algoritmo 14 – Umalocadora de vídeos tem guardada, em um arquivo manual, a quantidade de filmesretiradosporclientedurante o ano de 2007. Faça um algoritmoque (a) leia um vetor de 500 posiçõesparaguardarestainformação e (b) crie um outrovetorcontendo a quantidade de locaçõesgratuitas a quecadacliente tem direito, considerandoque a locadoraestáfazendoumapromoção e paracada 10 filmesretiradosganha-se umalocaçãográtis.
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
Vetores Algoritmo 15 – Dado um polinômio P(x) de grau n, da forma P(x) = a0xn + a1xn-1 + ... + an-1x + an, onde a0, a1, ..., an (reais) são os coeficientes do polinômio. Faça um algoritmo para ler: n (o grau do polinômio), n<=100 os coeficientes a0, a1, ..., an e uma sequência de 5 valores para x. O algoritmo deve calcular o valor de P(x) para cada valor de x.
Vetores Algoritmo <polinomio> inteiro:i,n real: a[101],x início leia (n) para i de 1 até n+1 repita leia a[i] fim para para j de 1 até 5 repita leia x Px ← 0 para i de 1 até n+1 repita Px ← Px+ a[i]*x**(n-i+1) fim para escreva (x,Px) fim para fim
Vetores Algoritmo 16 – Escrever um algoritmoquefaça a reserva de passagens aéreas de uma companhia. Além da leitura do número dos vôos e quantidade de lugares disponíveis, ler vários pedidos de reserva, constituídos do número de carteira de identidade do cliente e do número de vôo desejado. Para cada cliente, verificar se há disponibilidade no vôo desejado. Em caso afirmativo, imprimir o número da identidade do cliente, e o número de vôo, atualizando o número de lugares disponíveis. Caso contrário, avisar ao cliente da inexistência de lugares. Indicando o fim dos pedidos de reserva, existe um passageiro cujo número de carteira de identidade é 9999. Considerar fixo e igual a 37 o número de vôos da companhia. Algoritmo <reservapassagens> inteiro:i,voos[37],disp[37],cliente,nvoo
início Para i de 1 até 37 repita leia (voos[i],disp[i]) Fim Para leiacliente enquantocliente<>9999 faça leianvoo i ← 0 repita i ← i+1 atéque (i=37 ouvoos[i]=nvoo) se (voos[i]=nvoo) então se (disp[i]>0) então escreva (cliente,nvoo) disp[i] ← disp[i]-1 senão escreva (nvoo, “lotado”) fim se senão escreva (“vooinexistente”) fim se leiacliente fimenquanto fim
Vetores Algoritmo 17 – Faça um algoritmoqueleia um vetor de 20 inteiros e o coloqueemordemcrescente, utilizando a seguinteestratégia de ordenação: • Selecione o elemento do vetor de 20 posiçõesqueapresente o menorvalor. • Troqueesteelementopeloprimeiro. • Repitaestasoperações, envolvendo agora apenasos 19 elementosrestantes (trocando o de menorvalor com a segundaposição), depoisos 18 elementos (trocando o de menorvalor com a terceiraposição), depoisos 17,16 e assimpordiante, atérestar um únicoelemento, o maior deles. Este algoritmo é conhecidocomoalgoritmo de seleção. • Animação em • http://www.youtube.com/watch?feature=player_embedded&v=LuANFAXgQEw
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 ) então menor ← vetor[j] indice ← j inter ← 1 fim se fim para se (inter=1) então vetor[indice] ← vetor[i] vetor[i] ← menor fim se fim para fim Vetores
Vetores Algoritmo 18 – Algoritmo 17 de forma mais simples e considerando n elementos (n<=20). Algoritmo <ordemcrescente> inteiro:i,j,vetor[20],aux,indice inicio Leia (n) para i de 1 até n-1 repita indice ← i para j de i+1 até n repita se (vetor[j] < v[indice]) então indice ← j fim se fim para aux ← vetor[i] vetor[i] ← v[indice] vetor[indice] ← aux fim para fim
Vetores Algoritmo 19 – Desenvolva um algoritmoqueleia um vetor de n posiçõesinteiras (n<=20) e o coloqueemordemcrescente, utilizandocomoestratégia de ordenação a comparação de pares de elementosadjacentes, permutando-osquandoestiveremfora de ordematéquetodosestejamordenados (AlgoritmodaBolha). (Animaçãoem http://www.youtube.com/watch?feature=player_embedded&v=gWkvvsJHbwY)
Vetores Algoritmo <ordemcrescente2> inteiro:i,j,aux,vetor[20] inicio Leia (n) para i de 1 até n-1 repita para j de 1 até n-i repita se (vetor[j] > vetor[j+1] ) então aux ← vetor[j] vetor[j+1] ← vetor[j] vetor[j] ← aux fim se fim para fim para fim
Vetores Algoritmo 20 – Desenvolva um algoritmoqueleia um vetor de n posiçõesinteiras (n<=20) e o coloqueemordemcrescente, utilizandocomoestratégia de ordenaçãoinserir um elemento k num vetor já ordenado de k-1 elementos.
Vetores Algoritmo <ordemcrescente3> inteiro:i,j,elemento,vetor[20] inicio Leia (n) para j de 2 até n repita elemento ←vetor[j] i ←j-1 enquanto (i>0 e vetor[i]>elemento) vetor[i+1] ← vetor[i] i ← i-1 fim enquanto vetor[i+1] ← elemento fim para fim
Tarefas: Resolva a lista de exercícios propostos de estrutura de repetição que estará disponível no dia 31/05 no site da disciplina. Vetores