• Nenhum resultado encontrado

Bac004 - Parte 7

N/A
N/A
Protected

Academic year: 2021

Share "Bac004 - Parte 7"

Copied!
45
0
0

Texto

(1)

Vetores

Variáveis Compostas

Homogeneas

(2)

Variáveis Compostas

Unidimensionais - Vetor



Variáveis que possuem a finalidade de

armazenar vários valores do mesmo

tipo de forma uniforme na memória.



Conjuntos de dados referenciados por

um mesmo nome e que necessitam de

somente um índice para que seus

elementos sejam endereçados são

ditos compostos unidimensionais.

(3)

Variáveis Compostas

Unidimensionais - Vetor

São úteis quando se deseja armazenar vários

valores do mesmo tipo.

Considere um programa que peça ao usuário para

digitar a nota de 40 alunos e as armazene na

memória.

Sem a utilização de vetores seria necessário

declarar 40 variáveis, uma para armazenar cada

nota, atribuindo-lhes os valores digitados pelo

usuário.

Este mesmo programa poderia ser feito declarando

apenas 1 vetor que armazene 40 valores.

(4)

Variáveis Compostas

Unidimensionais - Vetor



O conjunto de 40 notas dos alunos de uma

disciplina pode constituir uma variável

composta.



A este conjunto associa-se o identificador

NOTA que passará a identificar não uma única

posição de memória, mas 40.



A referência ao conteúdo do n-ésimo elemento

do conjunto será indicada pela notação

NOTA[n-1], onde n é um número inteiro ou uma

variável numérica contendo um valor inteiro.

(5)

Variáveis Compostas

Unidimensionais - Exemplo



São unidimensionais as variáveis NOTA,

IDADE e NOME mostradas a seguir:

BAC004-Informática-Teórica-Fabiana C

(6)

Variáveis Compostas

Unidimensionais - Vetor



Nas linguagens C/C++ o limite inferior

de uma variável composta é sempre 0.



A declaração exige apenas o total de

elementos.



Portanto, a faixa de intervalo do índice

varia de 0 até total de elementos

menos 1.

(7)

7

Variáveis Compostas

Unidimensionais - Vetor



Exemplo 1: int vetor[6]



Na memória é representado da seguinte forma:



Sendo uma única variável com o nome vetor

com 6 posições, nas quais podem ser

armazenados números inteiros. A faixa de

intervalo do índice varia de 0 até total de

elementos menos 1. Para o vetor[6], do

exemplo, os índices variam de 0 a 5.

(8)

Variáveis Compostas

Unidimensionais - Vetor

Observe que o tamanho de um vetor pode ser

determinado por uma variável inteira, como na

última linha do exemplo abaixo.

int codigo[40]; /*Declara o vetor codigo que armazena 40 células do tipo

int */

float preco[6]; /*Declara o vetor preco que armazena 6 células do tipo

float*/

char alternativa[10]; /*Declara o vetor alternativa que armazena 10

células do tipo char*/

int n = 50;

(9)

9

Variáveis Compostas

Unidimensionais - Vetor



Exemplo 2:

int vetor [6] = {12, 95, 75, 84, 7, 41};

(10)

Variáveis Compostas

Unidimensionais - Vetor

Para atribuir ou recuperar valores das

células de um vetor, basta informar o

seu nome e o índice da célula que

deseja acessar entre colchetes.

Vale lembrar que apenas uma célula

pode ser acessada por comando.

Comandos para manipular mais de

uma célula ao mesmo tempo gerarão

(11)

11

Variáveis Compostas

Unidimensionais - Vetor



Exemplo 3: A atribuição pode ser feita em

apenas um elemento de cada vez.

vetor[1]=202;

vetor[5]=12;

(12)

Variáveis Compostas

Unidimensionais - Vetor



Exemplo 4: A atribuição pode ser feita lendo

entradas do teclado

(13)

13

Variáveis Compostas

Unidimensionais - Vetor



Exemplo 5: A apresentação dos dados pode

ser com uma repetição

(14)

Variáveis Compostas Unidimensionais

– Vetor - Exemplo

//ProgC060 - Programa exemplo de vetor #include <iostream> #include <cstdlib> int main() { int N[6], Contador;

for(Contador=0; Contador < 6; Contador++) N[Contador] = 2;

for(Contador=0; Contador < 6; Contador++) std::cout << N[Contador] << "\t";

system("PAUSE > null"); return 0;

Declaração de um vetor de 6 elementos.

Contador para controlar a repetição.

Repetição para colocar o valor dois nas posições do vetor

(15)

15

Variáveis Compostas Unidimensionais

– Vetor - Exemplo

//ProgC061 - Programa que calcula o número de dias verificando se é bissexto #include <iostream>

#include <cstdlib> int main()

{

int dmes[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int dia, mes, ano, total;

char ch;

std::cout << "Digite a data no formato DD/MM/AAAA: "; std::cin >> dia >> ch >> mes >> ch >> ano;

if (ano%4==0 && ano%100 || ano%400==0) dmes[1]=29;

total=dia;

for(int i=0; i<mes-1; i++) total += dmes[i];

std::cout << "Total de dias transcorridos: " << total; system("PAUSE > null");

return 0; }

Declaração de um vetor de 12 elementos, atribuindo valores.

Leitura formatada com cin. Mais de um elemento digitado.

Condição para verificação de ano bissexto.

(16)

Variáveis Compostas Unidimensionais

– Vetor - Exemplo

// ProgC062.cpp - Vetor com tamanho informado do teclado. #include <iostream>

#include <cstdlib> using namespace std; int main() {

int tamanho;

cout<<"Digite o comprimento do vetor:"; cin>>tamanho;

int vetor[tamanho];

cout<<"Digite uma sequencia com " <<tamanho<<" numeros inteiros:\n"; for (int i = 0; i < tamanho; i++)

cin>>vetor[i];

cout<<"A sequencia digitada foi:\n"; for (int i = 0; i < tamanho; i++)

cout<<vetor[i]<<" "; system ("pause > null"); return 0;

Solicita tamanho do vetor.

Declaração de um vetor do tamanho especificado pelo usuário.

Inserção de itens no vetor

(17)

Variáveis Compostas

Unidimensionais – Vetor - Exemplo

int maior (int vet[10])

{

int m = vet[0];

for (int i = 1; i < 10; ++i)

{

if (vet[i] > m)

m = vet[i];

}

return m;

}

(18)

Variáveis Compostas

Unidimensionais – Vetor - Exemplo

// ProgC063.cpp - Vetor - passagem de parametro. #include <iostream>

#include <cstdlib> using namespace std;

int maior (int vet[], int tam) { int m = vet[0];

for (int i = 1; i < tam; ++i) { if (vet[i] > m)

m = vet[i]; } return m; }

int main() {

int valores [6] = {3, -1, 8, 12, 5, -6}; int mValor = maior(valores, 6);

cout << "Maior valor = " << mValor << endl;

Tamanho do vetor.

Passagem de vetor por parametro sem informar tamanho do vetor.

(19)

Variáveis Compostas

Unidimensionais – Vetor - Exemplo

Por definição, ao passar um vetor como

parâmetro para uma função em C++, esta

passagem é feita apenas por referência

Qualquer alteração nas células deste vetor

continuará sendo válida após o término da

função.

O símbolo '&' está implícito em todas as

passagens de vetores como parâmetros

(incluir este símbolo causa um erro de

compilação).

(20)

Variáveis Compostas

Unidimensionais – Vetor - Exemplo

// ProgC064.cpp - Vetor - passagem de parametro (sempre referencia).

#include <iostream>

using namespace std;

void zerar(int vet[], int tam) {

for (int i = 0; i < tam; ++i) vet[i] = 0;

}

int main(){

int v[4] = {10, 20, 30, 40};

cout << "v = [" << v[0] << ", " << v[1] << ", " << v[2] << ", " << v[3] << "]"

<< endl;

zerar(v, 4);

cout << "v = [" << v[0] << ", " << v[1] << ", " << v[2] << ", " << v[3] << "]"

Resultado em tela: v = [10, 20, 30, 40] v = [0, 0, 0, 0]

(21)

Variáveis Compostas

Unidimensionais – Vetor - Exemplo

// ProgC065.cpp - Vetor - soma dos elementos. #include <iostream>

using namespace std; int soma(int vetor[]) {

int resultado = 0;

for(int i=0; i<10; i++) resultado = resultado + vetor[i]; return resultado;}

int main(){ int vetor[10]; int resultado;

for(int i=0; i<10; i++){

cout << "Digite o " << i+1 << " numero: "; cin >> vetor[i]; } resultado = soma(vetor);

cout << " Soma = " << resultado; }

Repetição para preencher o vetor.

Chamada da função soma.

Repetição para percorrer o vetor somando os seus valores.

(22)

Variáveis Compostas

Unidimensionais – Vetor

Quando for necessário retornar um

vetor, devemos passá-lo como

parâmetro também.

Como a passagem é por referência, as

alterações realizadas dentro da função

são mantidas.

(23)

Variáveis Compostas

Unidimensionais – Vetor

// ProgC066.cpp - Vetor - função ordenação

#include <iostream>

using namespace std;

void ordena(int A[], int B[]){

int aux;

for(int i=0; i<5; i++)

B[i] = A[i];

for(int i=0; i<4; i++){

for(int j=i+1; j<5; j++){

if (B[i] > B[j]){

aux = B[i];

B[i] = B[j];

B[j] = aux; } } } }

int main(){

int vetor_inicial[5], vetor_ordenado[5];

for(int i=0; i<5; i++){

cout << "Digite o " << i+1 << "

numero: ";

cin >> vetor_inicial[i];

}

ordena(vetor_inicial, vetor_ordenado);

for(int i=0; i<5; i++){

cout << vetor_ordenado[i] << endl;

}

}

A ideia é ir trazendo para as posições iniciais do vetor os números menores

(24)

Exercícios



Faça um programa em C++ que

carregue dois vetores de dez

elementos numéricos cada um e

mostre um vetor produto dos dois

vetores.

(25)

Tópicos para Discussão



Variáveis Compostas Homogêneas



Unidimensional – Vetor



Declaração



Atribuição



Leitura do teclado



Apresentação (impressão)



Passagem por parametro



Somente uma posição



Vetor inteiro

BAC004-Informática-Teórica-Fabiana C

(26)

Matrizes

Variáveis Compostas

Homogeneas

(27)

27

Variáveis Compostas

Multidimensionais - Matriz



Assim como os vetores, as matrizes

são variáveis que podem armazenar

diferentes valores do mesmo tipo

sequencialmente.



No entanto, as matrizes apresentam

um arranjo bidimensional,

diferentemente dos vetores que são

unidimensionais.

(28)

Variáveis Compostas

Multidimensionais - Matriz



Os elementos de uma matriz podem

ser de qualquer tipo, incluindo outras

matrizes.



Com dois pares de colchetes obtém-se

uma matriz de duas dimensões e com

cada par de colchetes adicionais

obtém-se matrizes com uma dimensão

a mais.

(29)

Variáveis Compostas

Multidimensionais - Matriz

Suponha que deseja-se fazer um mapa de sala

das turmas de uma escola.

Em cada sala existem 6 filas cada uma com 5

mesas, totalizando uma capacidade de

acomodar 30 alunos.

Para representar este arranjo em um programa,

seria possível utilizar uma matriz de 5 linhas e

6 colunas, definindo 30 células cada uma

(30)

Variáveis Compostas

(31)

31

Variáveis Compostas

(32)

Variáveis Compostas

Multidimensionais - Matriz



As matrizes são alocadas sequencialmente

na memória , sendo que suas células

devem ser acessadas referenciando-se uma

linha e uma coluna. A seguinte declaração:

int mat[3][3];



Aloca uma matriz na memória (assim como

os vetores, as matrizes têm o seu primeiro

índice de linha e coluna iniciados em 0)

(33)

Introdução à Computação Aulas Laboratório -Fabiana Costa Guedes

33

Variáveis Compostas

(34)

Variáveis Compostas

(35)

35

Variáveis Compostas

(36)

Variáveis Compostas

Multidimensionais - Matriz

// ProgC067.cpp - Programa Exemplo Matriz

#include <iostream>

using namespace std;

int main(){

int mat[3][3];

for (int i = 0; i < 3; i++) {

for (int j = 0; j < 3;j++) {

cout<< "Insira o valor do elemento da "<<i+1<<"a. linha, "<<j+1<<"a. coluna: ";

cin >> mat[i][j];

}

}

}

Declaração da matriz. Preencher matriz

(37)

37

Variáveis Compostas

Multidimensionais – Matriz - Exemplo

// ProgC068.cpp - Exemplo Soma de Matriz #include <iostream>

using namespace std; int main() {

int mat1[3][3], mat2[3][3], mat3[3][3]; cout << "Preencha a matriz 1" << endl; for (int i = 0; i <= 2; i++)

for (int j = 0; j <= 2;j++) {

cout << "Insira o elemento da " << i+1 << "ª linha, " << j+1 << "ª coluna: "; cin >> mat1[i][j]; }

cout << "Preencha a matriz 2" << endl; for (int i = 0; i <= 2; i++)

for (int j = 0; j <= 2;j++) {

cout << "Insira o elemento da " << i+1 << "ª linha, " << j+1 << "ª coluna: "; cin >> mat2[i][j]; }

for (int i = 0; i <= 2; i++) for (int j = 0; j <= 2; j++)

mat3[i][j] = mat1[i][j] + mat2[i][j]; cout << "Matriz resultante" << endl; for (int i = 0; i <= 2; i++)

for (int j = 0; j <= 2; j++)

cout<< "mat3[" << i+1 << "][" << j+1 << "] = " << mat3[i][j] << endl; }

Declaração das tres matrizes.

Repetição para atribuição de valores para matriz 1

Repetição para apresentar matriz resultante. Repetição para atribuição de valores para matriz 2

(38)

Variáveis Compostas

Multidimensionais – Matriz - Exemplo

// ProgC069.cpp - Exemplo Soma de elementos de Matriz #include <iostream>

using namespace std; int main(){

int mat[3][3], i, j, s;

for (int i = 0; i < 3; i++)

for (int j = 0; j < 3; j++) {

cout<< "Insira o elemento da " << i+1 << "ª linha, " << j+1 << "ª coluna: "; cin >> mat[i][j]; } s = 0; for (i = 0; i < 3; i++) s += mat[i][i]; Declaração da matriz.

Repetição para inserir elementos.

Repetição para cálculo.

Elementos de mesmo indice são da diagonal principal

(39)

Variáveis Compostas

Multidimensionais – Matriz - Exemplo

// ProgC070.cpp - Apresentação de Dados formatada #include <iostream>

using namespace std; int main(){

int mat[3][3], i, j;

for (int i = 0; i < 3; i++)

for (int j = 0; j < 3; j++) {

cout<<"Insira o elemento da "<<i+1<<"ª linha, "<<j+1<<"ª coluna: "; cin>> mat[i][j]; }

for (int i = 0; i < 3; i++) {

for (int j = 0; j < 3; j++) { cout<< mat[i][j] << "\t"; } cout << "\n"; } }

(40)

Variáveis Compostas

Multidimensionais – Matriz

Uma matriz é passada como

parâmetro a uma função incluindo o

seu tipo, nome e dimensões (número

de linhas e número de colunas) no

(41)

Variáveis Compostas

Multidimensionais – Matriz

float retornaMaior(float mat[5][5]){

int maior = mat[[0][0];

for (int i = 0; i < 5; ++i) {

for (int j = 0; j < 5; ++j) {

if (mat[i][j] > maior)

maior = mat[i][j];

}

}

return maior;

}

Percorre a matriz Teste de maior

(42)

Variáveis Compostas

Multidimensionais – Matriz

As células das matrizes também são

implicitamente passadas como referência

às funções, o que significa que o símbolo

de referência '&' está implícito em cada

matriz passada como parâmetro.

Qualquer modificação feita nas células de

uma matriz dentro de uma função

permanecerá mesmo depois que esta

função terminar sua execução.

(43)

Variáveis Compostas

Multidimensionais – Matriz

// ProgC071.cpp - Multuplicação por constante #include <iostream>

using namespace std;

void multiplica(float mat[5][5], float k){ for (int i = 0; i < 5; ++i)

for (int j = 0; j < 5; ++j) mat[i][j] = k * mat[i][j]; } int main(){

float k, valores[5][5];

cout << "Preencha os valores da matriz:" << endl; for (int i = 0; i < 5; ++i){

for (int j = 0; j < 5; ++j){

cout<<"Digite um valor para o elemento da linha "<<i<<", coluna "<<j<<": "; cin>>valores[i][j];}} cout << "Digite o valor de uma constante k para multiplicar a matriz: "; cin >> k;

multiplica(valores, k); for (int i = 0; i < 5; ++i) {

for (int j = 0; j < 5; ++j) cout << valores[i][j] << " "; cout << endl; }}

Função multiplica matriz por constante

Matriz por parametro

(44)

Exercícios



Faça um programa que carregue uma matriz 2X2,

calcule e mostre uma matriz resultante que será a

matriz digitada multiplicada pelo maior elemento da

matriz.



Faça um programa que carregue uma matriz 10X3

com as notas de dez alunos em três provas. Mostre

um relatório com o número do aluno (número da

linha) e a prova em que cada aluno obteve menor

nota. Ao final do relatório, mostre quantos alunos

tiveram menor nota na prova 1, quantos tiveram

menor nota na prova 2 e quantos tiveram menor

nota na prova 3.

(45)

Tópicos para Discussão



Variáveis Compostas Homogêneas



Multidimensional – Matriz



Declaração



Atribuição



Leitura do teclado



Apresentação (impressão)



Passagem por parametro



Somente uma posição



Matriz inteira

Referências

Documentos relacionados

Classificador Descrição da Conta Saldo Anterior Débitos Créditos Saldo Atual 389

Deseja-se um algoritmo que transforme um integrando (entrada) em uma primitiva (saída). Então deve-se contar com a existência de diferentes funções que aparecem na primitiva mas

A análise da Figura 4 permite constatar que mesmo quando os valores de reflectância de superfície detectados pelo sensor MODIS/TERRA são muito baixos, os valores detectados

No apartamento Tipo 02, do Condomínio Amazônia, apesar de apresentar áreas menores, em relação às do Le Parc, a distribuição dos setores são mais

UNIÃO CIVIL ENTRE PESSOAS DO MESMO SEXO - ALTA RELEVÂNCIA SOCIAL E JURÍDICO-CONSTITUCIONAL DA QUESTÃO PERTINENTE ÀS UNIÕES HOMOAFETIVAS LEGITIMIDADE CONSTITUCIONAL DO RECONHECIMENTO

Dependendo do tipo de dados (observações, questionários, entrevistas, documentos, testes, etc.), é possível encontrar respostas para problemas diferentes. Na análise dos

A quinta alteragao diz respeito a carta de ordem, carta precatoria e carta rogatoria, que podem ser expedidas por meio eletronico, situacao em que a assinatura do juiz devera

The following hypotheses were tested were: (1) there would be differences in filler particles characteristics between bulk- fill and conventional composites; (2) LT would