Programação de Computadores I

43 

Full text

(1)

Vetores e Matrizes

Programação de Computadores I

Natália Batista

(2)

1. Exemplo inicial

Exemplo: armazenar a nota de 3 alunos, calcular a média, imprimir as notas e a média.

//trecho de código

float nota1, nota2, nota3, media; printf(“Digite as 3 notas:\n”);

scanf(“%f%f%f”, &nota1, &nota2, &nota3); media = (nota1+nota2+nota3)/3.0;

printf(“nota1 = %f, nota2 = %f, nota3 = %f, media = %f\ n”,nota1, nota2, nota3, media);

Com vetores, basta uma

variável!

(3)

 Estrutura de dados simples

 Estrutura de dados composta homogênea

x

y

2. Tipos de dados

(4)

3. Vetores

 Também conhecidos com arranjos ou arrays.  Ocupam posições contíguas na memória.

 O índice varia obrigatoriamente de 0 a n-1, onde

n é o tamanho do vetor.

 Os elementos podem ser de qualquer tipo mas

são sempre do mesmo tipo.

 Cada posição deve ser tratada exatamente

como uma variável comum daquele tipo.

notas

0 1 2 3

(5)

4. Declaração de vetores

 Declaração:

 Os elementos dos vetores são acessados por indexação.

Media_final

nome

float notas[4];

int Media_final[10];

char nome[4];

(6)

5. Preenchendo vetores

 Atribuição: vetor[posição] = valor ou expressão ou variável;  Exemplo:

o vetor tem 4 elementos

os elementos estão nas posições 0, 1, 2 e 3.

cada variável do vetor é referenciada por um índice.

Atribuição de valores aos elementos do vetor:

notas[0] = 25.4; notas[1] = 18.0; notas[2] = 26.8; notas[3] = 29.5;

float notas[4];

notas

0 1 2 3

(7)

5. Preenchendo vetores

int a[4]={0,1,2,3};

 define (cria) um vetor de quatro inteiros e inicializa a[0]=0, a[1]=1, e

a[2]= 2; a[3] = 3.

int a[ ]={1,2,3};

 define um vetor de apenas três elementos, com inicialização

equivalente ao anterior.

char a[3]={'b','k','n'};

 define (cria) um vetor de três caracteres e inicializa a[0]='b', a[1]='k',

(8)

//demonstra vetor de inteiros #include <stdio.h>

#define N 10 //constante N int main(){

int conjunto[N]; int i;

//entrada de dados

printf("Digite %d numeros:\n", N); for (i=0; i<N; i++)

scanf("%d", &conjunto[i]);

//impressão do vetor for (i= 0; i <N; i++)

printf ("%d %d\n", i, conjunto[i]);

return 0; }

6. Leitura de dados e impressão

Saída

Digite 10 números:

(9)

6. Leitura de dados e impressão

 A repetição for garante que o índice i assuma todos

os valores possíveis para o índice do vetor, ou seja, de 0 a 9.

 Em cada iteração, será utilizada uma posição

(10)

6. Leitura de dados e impressão

Exemplo: mostrar apenas o 5o valor armazenado no

vetor conjunto.

(11)

7. Vetores e funções

 Exemplo: Faça um programa que preencha um

vetor com 100 números inteiros e em seguida mostre os números primos e suas respectivas posições. Utilize a função:

int primo(int N){ int resultado = 0;

int num_divisores = 0; for(int i=1; i<= N; i++){ if ( N%i == 0 )

num_divisores++; }

if (num_divisores == 2) resultado = 1;

(12)

#include <stdio.h> #define MAX 100

int main(){

int vetor[MAX]; int resultado;

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

printf("Digite o numero %d: ", i); scanf("%d", &vetor[i]);

}

printf("Numeros primos:\n");

for(int i=0; i<MAX; i++){ resultado = primo(vetor[i]);

if (resultado)

printf("%d %d\n", i, vetor[i]); }

(13)

7. Vetores e funções

 Na passagem de parâmetro de apenas um

(14)

8. Vetores como parâmetros de funções (1/5)

 Exemplo: função que soma os 10 elementos

de um vetor de inteiros passado como parâmetro e retorna o resultado.

int soma(int vetor[]){ int resultado = 0;

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

resultado = resultado + vetor[i]; }

(15)

int main(){

int vetor[10]; int resultado;

//leitura dos numeros for(int i=0; i<10; i++){

printf("Digite o %d numero: ", i+1); scanf("%d", &vetor[i]);

}

//chamada da função resultado = soma(vetor);

//impressão do resultado

(16)

 Vetores podem ser passados como

parâmetros apenas por referência:

 deve-se passar apenas o endereço da posição

inicial do vetor.

 O endereço é o nome do vetor sem o índice entre

colchetes.

(17)

 Se alguma alteração for realizada nos

elementos do vetor dentro da função, o vetor original fica alterado também.

 vetor[] é uma variável ponteiro que guarda o

endereço inicial (posição 0) do vetor.

(18)

9. Retorno de função pode ser vetor? (1/4)

 Quando for necessário retornar um vetor,

(19)

10. Matrizes

 São variáveis compostas homogêneas

multidimensionais.

 São formadas por uma sequência de variáveis do

mesmo tipo alocadas sequencialmente na memória.

(20)

10. Matrizes

 Os elementos da matriz

são acessados por indexação índices.

 Cada elemento precisa

de 2 índices:

 Um para linha e outro

para coluna

 Exemplo: uma matriz com 3

linhas e 5 colunas.

0 1 2 3 4

0

1

(21)

11. Declaração de matrizes

(1/3)

 Exemplos:

 Variável simples: int X;  Vetor: int Y [3];

 Matrizes: int Z [3] [5];

char M [10] [4];

float matriz [200] [10];

 Regra geral:

(22)

11. Declaração de matrizes

(2/3)

 Matrizes com dimensão maior que 2:

tipo nome [dimensão 1][dimensão 2]...[dimensão N]

 Exemplo: float Y[2][4][3];

 2 linhas  4 colunas

(23)

11. Declaração de matrizes

(3/3)

Exercício: declarar a variável Paralelepípedo

representada pelo figura a seguir.

(24)

12. Preenchendo a matriz

 Exemplo: Faça um programa que preencha

uma matriz 10x10 com 100 números inteiros lidos da entrada padrão.

int main(){

int m[10][10];

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

printf(“Digite o elemento [%d] [%d]:”, i, j); scanf(“%d”, &m[i][j]);

}

(25)

13. Lendo e imprimindo a matriz

 Exemplo: Faça um programa que preencha

(26)

#include <stdio.h> #define N 3

int main(){

float M[N][N], R[N][N], valor; //Leitura

for(int i=0; i<N; i++){ for(int j=0; j<N; j++){

printf("Digite o numero [%d][%d]: ", i, j); scanf("%f", &M[i][j]);

} }

printf("Digite o valor escalar: "); scanf("%f", &valor);

//Multiplicacao da matriz pelo valor for(int i=0; i<N; i++)

for(int j=0; j<N; j++) R[i][j] = M[i][j] * valor;

//Saida

for(int i=0; i<N; i++){ for(int j=0; j<N; j++) printf("%10.2f", R[i][j]); printf("\n");

}

(27)

14. Matrizes e funções

(1/6)

 Na passagem de parâmetro de apenas um

(28)

14. Matrizes e funções

(2/6)

 Como passar todos os elementos da matriz

(29)

 Matrizes podem ser passadas como

parâmetros apenas por referência:

 deve-se passar apenas o endereço da posição

inicial da matriz.

 O endereço é o nome da matriz sem colchetes.

(30)

 Na definição da função, para receber uma

matriz como parâmetro, deve-se seguir o exemplo:

 Como a passagem é por referência, o endereço é o

nome da matriz seguido de colchetes vazios da primeira dimensão.

 Em seguida, deve-se colocar entre colchetes o

tamanho da segunda dimensão.

14. Matrizes e funções

(3/6)

(31)

 Exemplo: Faça um programa que preencha

uma matriz X com 10x10 elementos, calcule e mostre a soma de todos os elementos de X utilizando uma função de protótipo:

int soma(int matriz[][10]);

(32)

#include <stdio.h> #define N 10

int soma(int m[][N]){ int resultado = 0;

for(int i=0; i<N; i++){ for(int j=0; j<N; j++){

resultado = resultado + m[i][j]; } } return resultado; } int main(){ int X[N][N]; int resultado;

for(int i=0; i<N; i++){ for(int j=0; j<N; j++){

printf("Digite o numero [%d][%d]:", i, j); scanf("%d", &X[i][j]);

} }

resultado = soma(X);

(33)

 Se alguma alteração for realizada nos

elementos da matriz dentro da função, a matriz original fica alterada também.

 M é uma variável ponteiro que guarda o

endereço inicial (posição 0) da matriz.

(34)

15. Retorno de função pode ser matriz?

 Quando for necessário retornar uma matriz,

(35)

16. Exercícios sugeridos

(36)

16. Exercícios sugeridos

2. Faça um programa para corrigir provas de múltipla escolha. Cada prova tem 20 questões e cada questão vale um ponto. O primeiro conjunto de dados a ser lido é o gabarito da prova. Os outros dados são os números dos alunos e as respostas que deram às questões. Existem 70 alunos matriculados. Calcule e mostre:

 o número e a nota de cada aluno.

(37)

16. Exercícios sugeridos

(1/4)

3. Faça um programa que receba como entrada duas matrizes 3x3, A e B, e faça a multiplicação matricial de A por B.

(38)

7. Exercícios sugeridos

(2/4)

5. Escrever um programa que leia uma matriz 4x4, multiplique os elementos da diagonal principal por uma constante K, também lida, e escreva a matriz resultante. Seja A a matriz, descrita a seguir, e K = 3:

A = 1 5 9 13

2 6 10 14

3 7 11 15

4 8 12 16

A = 3 5 9 13

2 18 10 14

3 7 33 15

(39)

16. Exercícios sugeridos

(3/4)

6. Considere a seguinte tabela referente a um

determinado time de futebol em um determinado campeonato.

Nome do Jogador Número da

Camisa Gols Marcados Cartões Amarelos CartõesVermelhos

José 13 10 4 0

Wagner 10 0 1 0

João 8 7 2 1

Leonardo 16 1 6 0

Felipe 5 2 3 0

Tiago 2 2 1 0

(40)

16. Exercícios sugeridos

(4/4)

Faça um programa que:

 Preencha a tabela. Considere apenas as colunas: número

da camisa, gols marcados, cartões amarelos e cartões vermelhos.

 Imprima as estatísticas para o jogador João.

 Imprima o total de gols marcados pelo time no campeonato.  Faça um programa que, dado o número da camisa na

entrada, imprima os gols e cartões referentes ao jogador.

 Imprima o número da camisa do jogador que marcou mais

(41)

Pergunta:

 Como o nome do jogador poderia ser

(42)

17. Atividades sugeridas

 Leitura do livro-texto (Damas) e exercícios:

(43)

Referências

 Ana Fernanda G. Ascencio, et al. Fundamentos da Programação de Computadores:

Algoritmos, Pascal e C/C++. Prentice Hall, 2002.

 Luis Damas. Linguagem C. LTC, 2015.

 Flávio M. Varejão. Linguagens de

Programação: conceitos e técnicas. Elsevier,

2004.

Figure

Updating...

References

Updating...

Download now (43 página)