ci208 - programação de computadores aula 24: arrays · 2014-05-12 · um array é uma coleção /...
TRANSCRIPT
CI208 - Programação de Computadores���
Aula 24: Arrays
Prof. MSc. Diego Roberto Antunes
Universidade Federal do Paraná Setor de Ciências Exatas
Departamento de Informática
[email protected] www.inf.ufpr.br/diegor
Nas últimas aulas, vimos o conceito de arrays, bem como uma série de exercícios e algoritmos para resolver problemas particulares sobre um���tipo de array: os vetores ou arrays unidimensionais.���
Durante esta prática, aprendemos como declarar um array, como inicializá-lo, como ler e escrever dados do vetor na tela, como utilizá-lo em parâmetros de funções e alguns algoritmos mais sofisticados (e.g. ordenação e busca).
Vale relembrar...
Arrays
Um array é uma coleção / conjunto de um ou mais objetos / dados ���(de mesmo tipo), armazenados em endereços adjacentes de memória; ���
Existem basicamente dois tipos de arrays: ���unidimensionais (vetores) e multidimensionais (duas ou mais dimensões).
• Assim como as variáveis, precisamos declarar os arrays; • Para cada array deve ser definido:
a) o tipo dos dados; b) um nome; c) o tamanho (quantidade ou número de elementos) do array;
O que é um array?
• E como a definição diz, é associado: a) um bloco de endereços de memória adjacentes para o array;
• Cada objeto / valor armazenado no array é chamado de elemento do array;���
• Cada elemento do array é numerado, utilizando um inteiro chamado índice para identificá-lo; Então é correto dizer que cada elemento está em uma posição do array (onde cada posição está marcada por um índice);���
• Os índices de um array em C++ iniciam em 0 e aumentam de forma incremental de um em um;���
• Neste caso, o último índice será o tamanho do array – 1;
Elementos e Índices
Vamos lembrar, pela própria definição, que um array unidimensional (vetor) pode ser representado graficamente por um conjunto de blocos empilhados: ���
Arrays unidimensionais
notas!
[0]!
[1]!
[2]!
[3]!
[4]!
Ex: um array chamado notas que possui 5 elementos. Declaração:���int notas[5];
Vamos lembrar, pela própria definição, que um array unidimensional (vetor) pode ser representado graficamente por um conjunto de blocos empilhados: ���
Arrays unidimensionais
100!
notas!
45!
32!
97!
62!
[0]!
[1]!
[2]!
[3]!
[4]!
• cada bloco representa uma posição possível para armazenar um elemento; • o tamanho deste vetor é dado pela quantidade desses “blocos”: 5; • o primeiro elemento é numerado com o índice 0;
• o último elemento é numerado com o índice n – 1: 4;
Em C++ também é possível definir arrays com duas ou mais dimensões; Como veremos, de certa forma, arrays multidimensionais são considerados arrays de arrays;
Nas próximas aulas, vamos focar especificamente em problemas relacionados ao uso de array com duas dimensões, o qual pode ser imaginado / chamado como matriz (ou tabela);���
Arrays Multidimensionais
Como você deve imaginar, ao declarar uma matriz (array multidimensional) em C++ precisamos informar ao compilador o tamanho de cada dimensão: (assim como fazíamos com vetores, mas agora precisamos informar as dimensões extras)���
Exemplo: o professor de um curso com 50 alunos deseja criar um programa que contenha uma estrutura de dados em forma de tabela para armazenar p/ cada aluno o GRR(número) e as Notas da Prova 1, da Prova 2 e da Final.
Declaração
Como você deve imaginar, ao declarar uma matriz (array multidimensional) em C++ precisamos informar ao compilador o tamanho de cada dimensão: (assim como fazíamos com vetores, mas agora precisamos informar as dimensões extras)���
Exemplo: o professor de um curso com 50 alunos deseja criar um programa que contenha uma estrutura de dados em forma de tabela para armazenar p/ cada aluno o GRR(número) e as Notas da Prova 1, da Prova 2 e da Final.
Neste exemplo é adequado o uso de uma matriz (duas dimensões), a qual possui como dimensões 50 alunos x 4 Informações.���
Declaração
Exemplo: o professor de um curso com 50 alunos deseja criar um programa que contenha uma estrutura de dados em forma de tabela para armazenar p/ cada aluno o GRR(número) e as Notas da Prova 1, da Prova 2 e da Final.
Assim, a declaração de uma matriz para este problema em C++ seria utilizando mais colchetes [tamanho] para representar a segunda dimensão e seu tamanho. Portanto, para o exemplo, a declaração é:���
float notas[50][4];���
Ou seja, a matriz notas, armazena dados do tipo float, possui duas dimensões: 50 posições (uma para cada aluno) e 4 posições na segunda dimensão (para cada aluno: GRR, P1, P2, PF).���
Declaração
Neste exemplo, os índices da primeira dimensão vão de 0 até 49, enquanto da segunda dimensão vão de 0 a 3. Graficamente, temos float notas[50][4] como
Declaração
Neste exemplo, os índices da primeira dimensão vão de 0 até 49, enquanto da segunda dimensão vão de 0 a 3. Graficamente, temos float notas[50][4] como
Declaração
notas!
[0]!
[1]!
[2]!
...!
[49]!
Neste exemplo, os índices da primeira dimensão vão de 0 até 49, enquanto da segunda dimensão vão de 0 a 3. Graficamente, temos float notas[50][4] como
Declaração
notas!
[0]!
[1]!
[2]!
...!
[49]!
[0]! [1]! [2]! [3]!
Neste exemplo, os índices da primeira dimensão vão de 0 até 49, enquanto da segunda dimensão vão de 0 a 3. Graficamente, temos float notas[50][4] como
Declaração
notas!
[0]!
[1]!
[2]!
...!
[49]!
[0]! [1]! [2]! [3]!
No exemplo, declaramos notas[50][4] informando ao compilador o tamanho das duas dimensões como altura x largura ou linhas x colunas
Declaração
Ocorre praticamente igual aos vetores: podemos inicializar diretamente na declaração ou pela definição de valores conhecidos atribuídos durante um comando de repetição. A diferença é que agora vamos inicializar os valores da segunda dimensão.���
Exemplo: um array bidimensional tabela com três linhas e duas colunas pode ser inicializado da seguinte forma:
Inicialização
double tabela[3][2] = { {1.0, 0.0}, //Linha 0 ! {7.8, 1.3}, //Linha 1 ! {6.5, 0.0} //Linha 2 ! };!
Programa Notas double notas[50][4] = { {20121, 100, 90, 95}, ! {20122, 55, 65, 60}, ! {20123, 100, 100, 100},
! ! ! ! ! ! ! !… ! ! ! ! ! ! {20139, 10, 70, 40} !
};!
20121![0]!
[1]!
[2]!
...!
[49]!
[0]!
100!
[1]!
90!
[2]!
95!
[3]!
20122! 55! 65! 60!
20123! 100! 100! 100!
...! ...! ...! ...!
20139! 10! 70! 40!
Acesso aos dados
20121![0]!
[1]!
[2]!
...!
[49]!
[0]!
100!
[1]!
90!
[2]!
95!
[3]!
20122! 55! 65! 60!
20123! 100! 100! 100!
...! ...! ...! ...!
20139! 10! 70! 40!
Para acessar / usar os dados da matriz, deve-se utilizar seu nome (identificador) e indicar entre colchetes a linha e a coluna que deseja usar:
-notas[0][0] acessa o GRR do primeiro aluno; -notas[1][3] acessa a nota final do segundo aluno; -notas[49][1] e notas[49][2] retornam o que?
A leitura e a escrita de dados com matriz trabalha da mesma forma que os algoritmos de vetor. Qual a diferença? Agora você precisa controlar mais uma dimensão.
Ou seja, você precisa utilizar uma estrutura de repetição para controlar cada linha (altura) da matriz. E para cada linha, ler um a um os dados de cada coluna (largura) que é controlada por uma segunda estrutura de repetição.
Leitura e Escrita de Dados
Algoritmo:���
para l de 0 até LINHA faça: !para c de 0 até COLUNA faça: ! !cin >> matriz[l][c]; ���
Neste caso, para cada linha l o algoritmo lerá todas as colunas c (elemento por elemento), enquanto c < quantidade de colunas. Assim, a linha l é incrementada e os passos se repetem até a condição de saída do primeiro laço
Para a escrita dos dados, basicamente utilizamos o comando de saída + os caracteres que nos ajudarem a formatar a saída conforme nossa escolha.
Leitura e Escrita de Dados
Fazer um programa em C++, que utilize uma matriz 10 x 10 para calcular, armazenar e mostrar na tela a tabuada de 0 a 9.
Problema Tabuada
Dado uma matriz de dimensões N x M pelo usuário, faça um programa que busca nesta matriz o menor elemento e mostre-o na tela, bem como sua posição na matriz (linha e coluna).
Encontrar menor elemento
1) Faça um programa que leia uma matriz de números inteiros de dimensões N x M, e então mostre na tela a matriz da seguinte forma: se o elemento for par então mostre-o na tela, senão mostre um asterisco (*) no lugar daquele número.
2) Faça um programa que solicite do usuário as dimensões de uma matriz N x M e, então, solicite e leia duas matrizes A e B (de mesma dimensão). Em seguida, seu programa deve calcular a soma das duas matrizes (i.e. a soma de cada elemento) e salvar em uma terceira matriz C. Ao final mostre a matriz C na tela.
3) Dado uma matriz A de dimensões N x M, e um vetor V de tamanho M, faça um programa que gere uma matriz B, onde cada linha da matriz é a multiplicação de cada linha da matriz A pelo vetor V (ou seja, cada elemento da linha, multiplicado pelo elemento do vetor). Ao final mostre a matriz resultante na tela.
4) Faça um programa que leia uma matriz e então mostre na tela a matriz de forma transposta, ou seja, imprimir a matriz com linhas e colunas invertidas. Exemplo:
Entrada Saída 1 2 3 1 4 7 4 5 6 2 5 8 7 8 9 3 6 9