UNIVERSIDADE FEDERAL DE UBERLÂNDIA ENGENHARIA MECÂNICA INTRODUÇÃO À ALGORITMOS Professora: Fabíola Gonçalves. AGENDA Estrutura de dados homogênea Declaração de Vetores Exemplos 2 INTRODUÇÃO 3 Algoritmos precisam de dados e informações para exercer as suas funções. Informações simples atendem a uma pequena parcela dos algoritmos. A maioria dos algoritmos utilizam uma grande carga de informações estas quando utilizadas com tipos primitivos precisam ser criadas com inúmeras variáveis.. tornando o algoritmo carregado de variáveis, já que uma variável contém apenas uma informação (exemplo: a1, a2, a3, a4)Difícil gerenciamento Como prever o número de informações que serão necessárias INTRODUÇÃO A alternativa para atendermos a esta demanda seria criar novos tipos que suportem outras informações. 4 Utilizando os armários como demonstração, uma gaveta só pode conter um objeto, uma variável tem somente uma informação, no tipo primitivo. quando se trata de tipos construídos, uma gaveta, ou melhor, uma variável pode conter inúmeras informações. VETOR A partir daí, iremos trabalhar com um tipo construído, denominado: Variáveis Compostas Homogêneas. Tem este nome porque é formado por variáveis que aceitam um número indeterminado de informações a partir de um tipo primitivo. Dividido em duas partes: Variáveis compostas Unidimensionais, conhecido como Vetor Variáveis compostas Multidimensionais, conhecido como Matriz. 5 VETOR 6 Para entendermos um vetor iremos utilizar o cenário de um edifício. Digamos que um edifício contém apenas um apartamento por andar. Um edifício corresponde a um vetor e cada apartamento corresponde a um elemento deste vetor. 7 ESTRUTURA DE DADOS HOMOGÊNEA VETOR Suporta N posições; Mesmo tipo de dado; Todos os elementos da estrutura são igualmente acessíveis, isto é, o tempo e o tipo de procedimento para acessar qualquer um dos elementos do vetor são iguais; cada elemento tem um índice próprio segundo sua posição; Ex.: inteiro vet[100]; // vetor de números inteiros 8 VETOR Os comandos que serão utilizados para de declarar um vetor são: 9 tipo v = vetor [li:lf]<tipo básico> v: nomeVetor; Observações: li e lf são obrigatoriamente constantes inteiras e li é menor do que lf (li < lf). A quantidade de elementos de um vetor é dada pela fórmula lf –li + 1. Isto significa que o vetor inicia a partir de li e é incrementado um a um, até lf. VETOR 10 VETOR 11 Um vetor é uma variável composta formada por uma sequência de variáveis, todas do mesmo tipo, com o mesmo identificador (mesmo nome) alocadas sequencialmente na memória. Declaração de um vetor tipo v = vetor [1:10] de caracter; v: vet; ou vet1, vet2,..., vetn: vetor [1..10] de inteiro; ou vet = [1, 23, 44, 67, 95, 12, 34, 74, 76, 89]; VETOR Operações via acessos no vetor: Pode-se somar as notas: Ex.: X<-nota[1] + nota[2]+ nota[3] X é igual a 22.5 elementos do vetor 12 tipo v = vetor [1:10] de real; v: nota; VETOR -EXEMPLOS Algoritmo Vetor { Função : uso de Vetor} Var // Seção de Declarações tipo v = vetor [1:10] de inteiro; v: vet; i, num: inteiro inicio // Abaixo é a seção de Comandos para i <-1 ate 10 faca escreval (“Digite um numero para ser armazenado no Vetor:”); leia (num); vet[i] <-num; fimpara para i <-1 ate 10 faca escreva (vet[i], “ ”); fim_pata fim VETOR Acessando elementos do vetor: Operações com índices: 14 VETOR Podemos construir vetor de palavras O vetor mês foi construído de tal modo que há uma correspondência entre o número do mês e o índice do elemento. Por exemplo, o mês de número 11 (novembro) é acessado pelo elemento mes[11]. A seguir alguns exemplos de Algoritmos sem o uso de Vetor e com o uso de Vetor 15 mes = ["jan" "fev" "mar" "abr“ “maio” "jun" "jul" "ago" "set" “out” "nov" "dez"]; EXEMPLO Imagine o seguinte problema: Crie um algoritmo que calcule a média de dez aluno que possuem apenas duas notas cada um. VETOR -EXEMPLOS Algoritmo MediaTurma; VAR //algoritmo sem vetor NOME: caracter; N1, N2, MEDIA: real; inicio para i <-1 ate 10 faca Escreva (“Digite o nome do”,i,“º aluno:”); Leia (NOME); Escreva (“Digite a sua 1ª nota:”); Leia (N1); Escreva (“Digite a sua 2ª nota:”); Leia (N2); MEDIA <-(N1 + N2) / 2; Escreva NOME, “teve média igual a”, MEDIA); fim_para; fim fimalgoritmo. 17 I: inteiro; {CONTADOR} VETOR O algoritmo fornece a média da turma, mas não pode imprimir os dez alunos com suas respectivas médias na ordem inversa, pois foi utilizada somente uma variável para os dez alunos e dez médias e quando um é fornecida a anterior é apagada. Então, se utilizarmos um variável para cada média: 10 nomes, 10 médias, 20 notas?? 18 Imagine calcular a média de 300 alunos desta forma? Totalmente inviável. Uma proposta de algoritmo para atender a esta necessidade vem a seguir: VETOR Algoritmo MediaTurma; VAR //algoritmo com vetor tipo v = vetor [1:10] de caracter; v: NOME; tipo c= vetor [1:10] de real; c: N1, N2, MEDIA; inicio para i <-1 ate 10 faca Escreva (“Digite o nome do”,i,“º aluno:”); Leia (NOME[i]); Escreva (“Digite a sua 1ª nota:”); Leia (N1[i]); Escreva (“Digite a sua 2ª nota:”); Leia (N2[i]); MEDIA [i]<-(N1[i] + N2[i]) / 2; Escreva (NOME[i], “teve média igual a”, MEDIA[i]); fimpara; para i <-10 ate 1 passo -1 faca Escreva(NOME[i],' teve média igual a ', media[i]); fimpara; fim 19 I: INTEGER; {contador} ESTRUTURA DE DADOS HOMOGÊNEA VETOR Imagine o seguinte problema: Dada uma relação de 5 estudantes, imprimir o nome de cada estudante, cuja nota é maior do que a média da classe. 20 ESTRUTURA DE DADOS HOMOGÊNEA VETOR Um algoritmo para esse problema poderia ser o seguinte: 21 Leia(nome1,nota1,nome2,nota2,nome3,nota3,nome4,nota4, nome5,nota5); media = (nota1+nota2+nota3+nota4+nota5) / 5,0; se nota1 > media então escreva (nome1); se nota2 > media então escreva (nome2); se nota3 > media então escreva (nome3); se nota4 > media então escreva (nome4); se nota5 > media então escreva (nome5); ESTRUTURA DE DADOS HOMOGÊNEA VETOR O algoritmo anterior apresenta uma solução possível; Porém, essa solução é inviável para uma lista de 100 alunos; 22 Uma variável para cada nome => 100 variáveis; Uma variável para cada nota => 100 variáveis; 100 testes. ESTRUTURA DE DADOS HOMOGÊNEA VETOR 23 Leia(nome1,nota1,nome2,nota2,...,nome100, nota100); media = (nota1+nota2+...+nota100) / 100,0; se nota1 > media então escreva (nome1); se nota2 > media então escreva (nome2); ... se nota100 > media então escreva (nome100); ESTRUTURA DE DADOS HOMOGÊNEA VETOR Como estes dados têm uma relação entre si, podemos declará-los usando um ÚNICO nome para todos os 100 elementos; Lista(vetor) = conjunto de 100 números acessados por um índice. 1 2 ... 99 24 0 ESTRUTURA DE DADOS HOMOGÊNEA VETOR Voltando ao problema anterior: 25 Dada uma relação de 5 estudantes, imprimir o nome de cada estudante, cuja nota é maior do que a média da classe. ESTRUTURA DE DADOS HOMOGÊNEA VETOR Um algoritmo para esse problema usando vetor: 26 para i = 1 até 5 faça escreva(“Entre com o nome e a nota do aluno); leia(nome[i],nota[i]); soma = 0; para i = 1 até 5 faça soma = soma + nota[i]; fim_para media = soma/5; para i = 1 até 5 faça se nota[i] > media então escrever (nome[i]); fim_para ESTRUTURA DE DADOS HOMOGÊNEA VETOR Se ao invés de 5, fossem 100 alunos? 27 ESTRUTURA DE DADOS HOMOGÊNEA VETOR Se ao invés de 5, fossem 100 alunos? 28 para i = 1 até 100 faça leia(nome[i],nota[i]) soma = 0 para i = 1 até 100 faça soma = soma + nota[i] media = soma/ 100 para i = 1 até 100 faça se nota[i] > media então escrever (nome[i]) EXERCÍCIOS 1) Sendo o vetor V igual ao que está descrito abaixo e as variáveis X=2 e Y=4, escreva o valor: a) V[X+1] b) V[X+2] c) V[X+4] d) V[X*1] e) V[X*3] f) V[Y+3] g) V[Y+4] h) V[Y*2] i) V[Y+X] j) V[X*Y] k) V[V[4]] l) V[V[2*X+Y]] m) V[V[2]*V[7]] EXERCÍCIOS 2. Elabore um algoritmo que leia um vetor A de 30 números inteiros e imprima o maior valor. 3. Elabore um algoritmo que, dados dois vetores inteiros de 10 posições, leia os dois vetores, some os valores da mesma posição e armazene em um terceiro vetor inteiro de 10 posições. No final imprima este terceiro vetor. 4. Um time de basquete possui 12 jogadores. Elabore um algoritmo que, dados dois vetores NOME e ALTURA, calcule e imprima o nome do jogador mais alto e a sua altura. Por fim, elabore um algoritmo que calcule a média de altura do time. 5. Faça um algoritmo que copie o conteúdo de um vetor em um segundo vetor EXERCÍCIOS 6. Faça um algoritmo que some o conteúdo de dois vetores e armazene o resultado em um terceiro vetor 7. Faça um algoritmo que faça a união de dois vetores de mesmo tamanho e mesmo tipo em um terceiro vetor com dobro do tamanho 8. Escreva um algoritmo que armazene em um vetor todos os números inteiros de 0 a 50. O algoritmo deve imprimir todos os valores armazenados. 9. Escreva um algoritmo que armazene em um vetor todos os números inteiros do intervalo de 1 a 100 (1 e 100 não entram). O algoritmo deve imprimir todos os valores armazenados. EXERCÍCIOS 10. Escreva um algoritmo que armazene em um vetor todos os números inteiros de 100 a 1 (em ordem decrescente). O algoritmo deve imprimir todos os valores armazenados. 11. Elabore um algoritmo que leia os vetores A e B de números reais de 4 posições (usando uma estrutura de repetição), calcule a média ponderada. Armazene a média em um terceiro vetor e, no final, imprima, na ordem inversa, este terceiro vetor, com duas casas decimais. Fórmula: MEDIA = (A[?] * 4 + B[?] * 6) / 10. EXERCÍCIOS 12. Escreva um algoritmo que armazene em um vetor os 10 primeiros números ímpares. Começando do número 1. 13. Escreva um algoritmo que receba dez números do usuário e armazene em um vetor a metade de cada número. O algoritmo deve imprimir todos os valores armazenados. 14. Escreva um algoritmo que receba a altura de 10 atletas. 15. Esse algoritmo deve imprimir a altura daqueles atletas que tem altura maior que a média. EXERCÍCIOS DESAFIO: Numa corrida há 10 corredores, de número de inscrição de 1 a 10. Faça um algoritmo que leia os valores do número do corredor e o seu respectivo tempo na corrida. Além disso, o algoritmo deve imprimir o vencedor e o vice-vencedor e seus tempos de corrida.