Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
ECT1203 Linguagem de Programação 2012.1 Prof. Diego Rodrigues de Carvalho Profa. Idalmis Milián Sardina Prof. Luiz Eduardo Cunha Leite Prof. Marconi Rodrigues Câmara Prof. Marcelo Henrique Ramalho Nobre Aula 07 – Vetores Universidade Federal do Rio Grande do Norte Escola de Ciências e Tecnologia Hora de silenciar o celular Manter o celular sempre desligado/silencioso quando estiver em sala de aula Nunca atender o celular em sala de aula Revisão da aula passada Estruturas de repetição = método para executar um conjunto de comandos diversas vezes. while Executa o conjunto ENQUANTO uma condição for verdadeira. testa depois executa Geralmente usad0 quando não sabemos o total de repetições while(num!=0){ cout << num <<endl; cin >> num; } do... while Executa o conjunto ENQUANTO uma condição for verdadeira. executa depois testa do{ cin >> num; cout << num <<endl; } while(num!=0); for Executa o conjunto de comandos um número DEFINIDO de vezes. Usa como parâmetros as 3 etapas das estruturas de repetição (inicialização, teste e atualização). for (int i=0; i< 3;i++){ cout << i <<endl; } Problema: Armazenar as notas de 4 jurados de salto ornamental e Calcular a média. ??? Simples... int main(){ float n1, n2, n3, n4, media; cout << “Entre com a nota 1: ”; cin >> n1; cout << “Entre com a nota 2: ”; cin >> n2; cout << “Entre com a nota 3: ”; cin >> n3; cout << “Entre com a nota 4: ”; cin >> n4; media = (n1 + n2 + n3 + n4)/4; cout << “Media: ” << media << endl; return 0; } Problema: E se tivéssemos 25 juízes? ??? 7 Simples também, mas bem longo... int main(){ float n1, n2, n3, n4, n5, n6, n7, n8, n9, n10; float n11, n12, n13, n14, n15, n16, n17, n18; float n19, n20, n21, n22, n23, n24, n25, media; cout << “Entre com a nota 1: ”; cin >> n1; cout << “Entre com a nota 2: ”; cin >> n2; cout << “Entre com a nota 3: ”; cin >> n3; cout << “Entre com a nota 4: ”; cin >> n4; cout << “Entre com a nota 5: ”; cin >> n5; cout << “Entre com a nota 6: ”; cin >> n6; cout << “Entre com a nota 7: ”; cin >> n7; cout << “Entre com a nota 8: ”; cin >> n8; ... Ainda não acabou... cout << “Entre com a nota 9: ”; cin >> n9; cout << “Entre com a nota 10: ”; cin >> n10; cout << “Entre com a nota 11: ”; cin >> n11; cout << “Entre com a nota 12: ”; cin >> n12; cout << “Entre com a nota 13: ”; cin >> n13; cout << “Entre com a nota 14: ”; cin >> n14; cout << “Entre com a nota 15: ”; cin >> n15; cout << “Entre com a nota 16: ”; cin >> n16; cout << “Entre com a nota 17: ”; cin >> 17; cout << “Entre com a nota 18: ”; cin >> n18; ... Ufa!!! cout << “Entre com a nota 19: ”; cin >> n19; cout << “Entre com a nota 20: ”; cin >> n20; cout << “Entre com a nota 21: ”; cin >> n21; cout << “Entre com a nota 22: ”; cin >> n22; cout << “Entre com a nota 23: ”; cin >> n23; cout << “Entre com a nota 24: ”; cin >> n24; cout << “Entre com a nota 25: ”; cin >> n25; media = (n1+n2+n3+n4+n5+n6+n7+n8+n9+n10+n11+n12+n13+n14+n15+n16+n17+n18+n19+n20+n21+n22+n23+n24+n25)/25; cout << “Media: ” << media << endl; return 0; } Esta é a melhor maneira de se resolver este problema? Problemas semelhantes na ciência e engenharia Redes de sensores Processamento de sinais Matemática (vetores) Controlar múltiplos programas Conjunto de informações Objetivo da aula Responder a seguinte pergunta: Aprendi que uma variável guarda UMA informação... Mas nem tudo pode ser representado através de UMA informação, existe uma maneira de trabalhar com diversas informações? Ou para cada informação eu precisarei de uma variável? Vetor Coleção de variáveis do mesmo tipo referenciada por um nome comum Matriz unidimensional Também chamado de Array ou Lista Definição Os elementos de um vetor são armazenados em posições contíguas na memória Cada elemento é acessado por meio de um índice Características variável vetor Declaração de vetores sintaxe float dados[40]; tipo nome[número de elementos]; exemplo Declaração de um vetor chamado dados para guardar 40 números reais O valor que dimensiona o vetor deve ser uma constante inteira. Atenção! 16 Obs.: variable-length array (or VLA) Acessando os elementos de um vetor Para acessar o elemento de um vetor, devemos especificar a sua posição: dados[8] A posição do vetor é determinada por meio de um número inteiro entre colchetes: uma constante, uma expressão aritmética ou uma variável entre colchetes. Também chamada de índice. 0 1 2 3 4 5 6 7 8 37 38 39 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 ... 17 Atribuindo valores dados[2] = 2.9; Exemplo 1 cin >> dados[2]; Exemplo 2 O índice do primeiro elemento de um vetor é zero. Atenção! float dados[40]; tamanho do vetor dados[2] = 2.9; índice do elemento dados[2] = dados[0] + dados[1] Exemplo 3 18 Exercício Considere o vetor v a seguir: e as variáveis x=3 e y=2. Escreva o valor correspondente às solicitações abaixo: 0 1 2 3 4 5 6 7 8 9 10 11 6 7,8 5 v 4 2 4 7,8 5 3 2 2 1 2 6 (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] 19 Quanto espaço um vetor ocupa? Total de bytes = sizeof(tipo) * tamanho do vetor char s[10]; total_de_bytes = sizeof(char)*10; total_de_bytes = sizeof(s); int x[4]; total_de_bytes = sizeof(int)*4; total_de_bytes = sizeof(x); Vetores e as estruturas de repetição O comando de atribuição só é capaz de armazenar UMA informação por vez. Os vetores, porém, armazenam diversas informações. Como armazenar informações em um vetor de maneira automática? resposta: estruturas de repetição. int i,dados[3]; for (i=0 ; i<3 ; i++){ cin >> dados[i]; } Qual o erro deste programa? int main() { float notas[10], media; int i; for(i=1; i<=10; i++) { cout << "Entre com a nota “<< i <<”: “; cin >> notas[i]; } media = 0; for(i=1; i<=10; i++) { media = media + notas[i]; } media = media/10; cout << "Media: “<< media << endl; return 0; } Resposta: O índice do primeiro elemento é zero O vetor tem tamanho 10, portanto não existe elemento de índice 10. A linguagem C++ não realiza verificação de limites de vetores. Acesso a posições inválidas pode sobrepor dados da memória! Atenção! Inicializando vetores //Programa que calcula o total de dias transcorridos no ano int main() { int dmes[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; int dia, mes, ano; char ch; cout << “Digite a data (DD/MM/AAAA): ” cin >> dia >> ch >> mes >> ch >> ano; mes--; if(ano%4==0 && ano%100!=0 || ano%400==0) dmes[1] = 29; int total = dia; for(int i=0; i<mes; i++) total += dmes[i]; cout << ”Total de dias transcorridos: “<< total << endl; return 0; } Inicializando vetores Certo ou errado? float notas[3]; notas = {4.5, 7.0, 8.2}; Resolvendo o problema com vetores int main() { float notas[25], media; int i; for(i=0;i<25;i++) { cout << "Entre com a nota “<< i+1 <<”: “; cin >> notas[i]; } media = 0; for(i=0;i<25;i++) { media = media + notas[i]; } media = media/25; cout << "Media: “<< media << endl; return 0; } Exercício 1 Dados dois vetores com n (n <= 50) componentes cada um, calcular e imprimir a soma deles. Exercício 2 Leia um conjunto com n (n <= 20) números e informe se existe algum elemento repetido no conjunto. Exercício 3 Leia n (n <= 30) números quaisquer e imprima-os sem repetições. Exemplo: Entrada: 1,1,3,4,3,5,-8 Saída: 1,3,4,5,-8 Exercício 4 Dadas duas seqüências com n (n <= 100) números inteiros entre 0 e 9, interpretadas como dois números inteiros de n algarismos, calcular a seqüência de números que representa a soma dos dois inteiros. Exemplo: n = 8 1ª seqüência 8 2 4 3 4 2 5 1 2ª seqüência + 3 3 7 5 2 3 3 7 = 1 1 6 1 8 6 5 8 8 Exercício 5 Faça um programa para imprimir as n (n <= 100) primeiras linhas do triângulo de Pascal usando apenas um vetor, com o valor de n fornecido pelo usuário. Triângulo de Pascal para n = 6: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
Compartilhar