29
Operações com Vectores e Matrizes 1 Universidade Metodista de Angola, Departamento de Engenharias Introdução Vectores Definição de vectores Criação/Declaração de vectores Inicialização de vectores exemplos Matrizes Definição de matrizes Criação/Declaração de matrizes Inicialização de matrizes exemplos Tópicos

Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

Embed Size (px)

Citation preview

Page 1: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

Operações com Vectores e Matrizes

1Universidade Metodista de Angola, Departamento de Engenharias

• Introdução• Vectores

– Definição de vectores– Criação/Declaração de vectores– Inicialização de vectores – exemplos

• Matrizes– Definição de matrizes– Criação/Declaração de matrizes– Inicialização de matrizes– exemplos

Tópicos

Page 2: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

• Até agora já aprendemos em linguagem C o seguinte:– Tipos de dados básicos em linguagem C (int, float, char, double)– Funções de entrada e saída de dados (printf, puts,putchar, scanf,gets e

getchar)– Estruturas de controlo de execução de instruções (if-else, switch, operador ?:)– Estruturas de repetição – Ciclos (while, do-while, for)

• Agora vamos aprender como tratar dados homogéneos (do mesmo tipo)

• vectores e matrizes, são estruturas para armazenamento de dados do mesmo tipo

• Um vector é uma estrutura unidimensional• Vectores com mais de uma dimensão chamam-se matrizes ou

arrays

2Universidade Metodista de Angola, Departamento de Engenharias

Operações com Vectores e Matrizes

Introdução

Page 3: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

Nº Nome Proc. T1 T2 Iniciais 2ªExame Nota Final1 Albertina Júlio Pedro 5060 13,25 13 ‘A’2 Alberto Jerson F. Ferrão 6134 4,75 5 ‘A’3 André A. Q. Malungo 9349 19,5 20 ‘A’4 Angelina Calenguelela 5883 5,75 6 ‘A’5 António EuclidesAndré 4784 8,25 8 ‘A’6 Aurélio Lumenhe Tchimbungo 7572 8,0 8 ‘A’8 Carlos M. F. Gaspar 4749 11,75 12 ‘C’7 Carlos Mateus Cupapala Filho 4641 10,5 11 ‘C’

9 Cláudio R. Ambriz de Carvalho 7343 4,25 4 ‘C’10 Cleney Rafael M. Neto 7515 11,75 12 ‘C’11 Cleusio da Costa Dias dos Santos 5070 4,75 5 ‘C’12 Constantino Quissenguele C. Zua 6777 10,0 10 ‘C’13 Daniel Monteiro Reis Viana 6984 14,25 14 ‘D’

14 Delcio Homero Marcolino da Costa 3990 13,75 14 ‘D’

15 Délcio M. Carvalho Fernandes 7608 13,25 13 ‘D’

16 Diudésio Edgar Pedro de Barros 7605 14,75 15 ‘D’

17 Domingas Mateus J. Francisco 5264 9,5 10 ‘D’18 Edna Andreia de F. Brás 4320 12,5 13 ‘E’

19 Edna Solange Gomes Ximbi 7160 17,75 18 ‘E’

20 Eduarda Carvalho Paixão Franco 7259 14,0 14 ‘E’

3Universidade Metodista de Angola, Departamento de Engenharias

Vectores

Exemplo de uma pauta

Criação/Declaração de vectores em linguagem C

Para que servem os vectores?

No exemplo da pauta podemos criar os seguintes vectores:

Um vector para guardar o nº do processo de cada aluno.

Um vector para guardar as notas de cada aluno.

Um vector para guardar as notas arredondadas de cada aluno, etc.

charint

float ou doubleint

Page 4: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

4Universidade Metodista de Angola, Departamento de Engenharias

Vectores

Como definir os vectores?Sintaxetipo nome_do_vector [dimensão];

Um vector para guardar o nº do processo de cada aluno.

int processo[20];

Um vector para guardar as notas de cada aluno.

float notas[20]; ou double notas[20];

Um vector para guardar as notas arredondadas de cada aluno

int notas_arredondadas[20];

Numero de elementos que constitui o vector

Nome do vector, um nome qualquer

tipo, int, float, double, char

Exemplos

Page 5: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

5Universidade Metodista de Angola, Departamento de Engenharias

Um vector para guardar a primeira letra do nome de cada aluno.

char iniciais[20];

Vectores

Exemplos (continuação)

porque 20 ? - Porque queremos guardar a primeira letra do nome de 20 alunos

Não há um limite da dimensão dos vectores, sendo assim, o dimensionamentoé da responsabilidade do programador.

Quando um vector é criado, em cada posição contêm valores aleatórios (LIXO)

lixo lixolixolixolixolixolixolixolixolixo lixo lixolixolixolixolixolixolixolixolixo

0 7654321 8 1514131211109 19181716

Vector -> iniciais Vector com 20 posições

índiceO índice do primeiro elemento de um vector em C é sempre 0 (Zero)

Page 6: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

6Universidade Metodista de Angola, Departamento de Engenharias

Vectores

Como inicializar os vectores?

Para simplificar vamos considerar apenas os 1ºs 5 alunos:Ou seja:

int processo[5];int notas_arredondadas[5]float notas[5]char iniciais[5];

Tal como numa variável, um vector pode ser inicializado no momento da sua criação/declaração

int processo[5] = { 5060 , 6134 , 9349 , 5883 , 4784 };float notas[5] = { 13.25 , 4.75 , 19.5 , 5.75 , 8.25 }int notas_arredondadas[5] = { 13 , 5 , 20 , 6 , 8 }char iniciais[5] = { ‘A’ , ‘A’ , ‘A’ , ‘A’ , ’A’ };

Nº Nome Proc. T1 T2 Iniciais 2ªExame Nota Final1 Albertina Júlio Pedro 5060 13,25 13 ‘A’2 Alberto Jerson F. Ferrão 6134 4,75 5 ‘A’3 André A. Q. Malungo 9349 19,5 20 ‘A’4 Angelina Calenguelela 5883 5,75 6 ‘A’

5 António EuclidesAndré 4784 8,25 8 ‘A’6 Aurélio Lumenhe Tchimbungo 7572 8,0 8 ‘A’8 Carlos M. F. Gaspar 4749 11,75 12 ‘C’7 Carlos Mateus Cupapala Filho 4641 10,5 11 ‘C’

9 Cláudio R. Ambriz de Carvalho 7343 4,25 4 ‘C’10 Cleney Rafael M. Neto 7515 11,75 12 ‘C’11 Cleusio da Costa Dias dos Santos 5070 4,75 5 ‘C’12 Constantino Quissenguele C. Zua 6777 10,0 10 ‘C’13 Daniel Monteiro Reis Viana 6984 14,25 14 ‘D’

14 Delcio Homero Marcolino da Costa 3990 13,75 14 ‘D’

15 Délcio M. Carvalho Fernandes 7608 13,25 13 ‘D’

16 Diudésio Edgar Pedro de Barros 7605 14,75 15 ‘D’

17 Domingas Mateus J. Francisco 5264 9,5 10 ‘D’18 Edna Andreia de F. Brás 4320 12,5 13 ‘E’

19 Edna Solange Gomes Ximbi 7160 17,75 18 ‘E’

20 Eduarda Carvalho Paixão Franco 7259 14,0 14 ‘E’

lixo lixolixolixolixo

5060 4784588393496134processo

0 4321

13 86205notas_arredondadas

‘A’ ‘A’‘A’‘A’‘A’iniciais

13.25 8.255.7519.54.75notas

iniciais

65 65656565iniciaisCodigo ASCII do caracter ‘A’ é 65

Page 7: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

7Universidade Metodista de Angola, Departamento de Engenharias

Tal como numa variável, um vector pode ser inicializado após sua criação/declaração

Inicialização de vectores

/* definição dos vectores */int processo[5];int notas_arredondadas[5]float notas[5]char iniciais[5];

/*inicializações*/

processo[0] = 5060;processo[1] = 6134;processo[2] = 9349;processo[3] = 5883;processo[4] = 4784;

notas_arredondadas[0] = 13;notas_arredondadas[1] = 5;notas_arredondadas[2] = 20;notas_arredondadas[3] = 6;notas_arredondadas[4] = 8;

notas[0] = 13.25;notas[1] = 4.75;notas[2] = 19.5;notas[3] = 5.75;notas[4] = 8.25;

iniciais[0] = ‘A’;iniciais[1] = ‘A’;iniciais[2] = ‘A’;iniciais[3] = 65;iniciais[4] = ‘A’;

Vectores

índice

Page 8: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

8Universidade Metodista de Angola, Departamento de Engenharias

13.25 8.255.7519.54.75notas

notas[0] = 13.25;notas[1] = 4.75;

notas[2] = 19.5;

notas[3] =5.75;

notas[4] =8.25;

nota[0] nota[1] nota[2] nota[3] nota[4]índice

Forma de aceder a cada elemento do vectorOs brasileiros dizem acessar

Vectores

Page 9: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

9Universidade Metodista de Angola, Departamento de Engenharias

Vectores

#include <stdio.h>#include <stdlib.h>

int main(){

int notas_arredondadas[5]= {13,5,20,6,8};

char iniciais[]={‘A’,‘A’,‘A’,65,‘A’};

printf(“%c\n”,iniciais[0]);printf(“%c\n”,iniciais[1]);printf(“%c\n”,iniciais[2]);printf(“%c\n”,iniciais[3]);printf(“%c\n”,iniciais[4]);

printf(“%d\n”,notas_arredondadas[0]);printf(“%d\n”,notas_arredondadas[1]);printf(“%d\n”,notas_arredondadas[2]);printf(“%d\n”,notas_arredondadas[3]);printf(“%d\n”,notas_arredondadas[4]);

exit(0);

}

Exemplo de inicialização de vectores no momento da sua criação/declaração

Para exemplificar a inicializaçãoa partir do teclado vamos considerarapenas os vector iniciais e notas_arredondadas

Para os outros vectores processo, notas_arredondadas, iniciais, o processoé análogo.

O compilador cria um vector com 5elementos;

Page 10: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

10Universidade Metodista de Angola, Departamento de Engenharias

Vectores

#include <stdio.h>#include <stdlib.h>

int main(){

float notas[5] /*declarações de variáveis*/

/*inicializações*/

notas[0] = 13.25;notas[1] = 4.75;notas[2] = 19.5;notas[3] = 5.75;notas[4] = 8.25;

printf(“%f\n”, notas[0]);printf(“%.1f\n”,notas[1]);printf(“%.2f\n”,notas[2]);printf(“%.3f\n”,notas[3]);printf(“%.4f\n”,notas[4]);

exit(0);

}

Exemplo de inicialização de vectores após sua criação/declaração

13.2500004.819.505.7508.2500

O programa imprime o seguinte

6 casas decimais1 casas decimais2 casas decimais3 casas decimais4 casas decimais

Controlo das casas decimais a serem imprimidas, só válido para números reais

Para exemplificar a inicializaçãoa partir do teclado vamos considerarapenas o vector notas.

Para os outros vectores processo, notas_arredondadas, iniciais, o processoé análogo.

Page 11: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

11Universidade Metodista de Angola, Departamento de Engenharias

Vectores

Exemplo de inicialização de vectores a partir do teclado.Podemos usar a função scanf ou getchar no caso de vectores de caracteres

Inicialização de vectores

#include <stdio.h>#include <stdlib.h>

int main(){/*declarações de variaveis*/

int i;int processo[5];

scanf(“%d”,&processo[0]);scanf(“%d”,&processo[1]);scanf(“%d”,&processo[2]);scanf(“%d”,&processo[3]);scanf(“%d”,&processo[4]);

/*podemos usar um ciclo para escrita, em vez de 5 instruções printf*/

for( i = 0 ; i < 5 ; i++ )printf(“%d\n”,processo[i]);

exit(0);}

Para exemplificar a inicializaçãoa partir do teclado vamos considerarapenas o vector processo.

Para os outros vectores notas, notas_arredondadas,iniciais, o processo é análogo.

O que é que o programa imprime?

Depende dos que o utilizador inserir

Page 12: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

12Universidade Metodista de Angola, Departamento de Engenharias

Vectores

Exemplo de inicialização de vectores a partir do teclado. Podemos usar um ciclo para leitura de dados do teclado

Inicialização de vectores

#include <stdio.h>#include <stdlib.h>

int main(){/*declarações de variaveis*/

int i;int processo[5];

/*ciclo para leitura de dados do teclado*/

for( i = 0 ; i < 5 ; i++ )scanf(“%d”,&processo[i]);

/*ciclo para escrita*/

for( i = 0 ; i < 5 ; i++ )printf(“%d\n”,processo[i]);

exit(0);}

Para exemplificar a inicializaçãoa partir do teclado vamos considerarapenas o vector processo.

Para os outros vectores notas, notas_arredondadas,iniciais, o processo é análogo.

Page 13: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

13Universidade Metodista de Angola, Departamento de Engenharias

Vectores

Exemplo de inicialização de vectores a partir do teclado. Podemos definir uma constante , para representar o tamanho do vector

Inicialização de vectores

#include <stdio.h>#include <stdlib.h>#define DIM 5

int main(){/*declarações de variaveis*/

int i;int processo[DIM];

/*ciclo para leitura de dados do teclado*/

for( i = 0 ; i < DIM ; i++ )scanf(“%d”,&processo[i]);

/*ciclo para escrita*/

for( i = 0 ; i < DIM ; i++ )printf(“%d\n”,processo[i]);

exit(0);}

Este programa é genérico, ou seja,O programa cria um vector com umadimensão arbitrária.

Lê os dados do teclado.

Imprime os valores no ecrã.

Com a directiva #define DIM 5, compilador substitui por 5 onde ele encontrar o identificador DIM

definição de constantes

Page 14: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

14Universidade Metodista de Angola, Departamento de Engenharias

Vectores

Exemplo de inicialização de vectores a partir do teclado. Podemos definir uma constante , para representar o tamanho do vector

Inicialização de vectores

#include <stdio.h>#include <stdlib.h>

int main(){/*declarações de variaveis*/

int Dim=5;int i;int processo[5];

/*ciclo para leitura de dados do teclado*/

for( i = 0 ; i < Dim ; i++ )scanf(“%d”,&processo[i]);

/*ciclo para escrita*/

for( i = 0 ; i < Dim ; i++ )printf(“%d\n”,processo[i]);

exit(0);}

A diferença entre esse exemplo e o exemplo anterior, é que esse consomemais 4 bytes que o anterior.

Por causa da variável Dim.

definição uma variável

Page 15: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

Vectores

15Universidade Metodista de Angola, Departamento de Engenharias

Passagem de vectores para funções

Se pretendermos ler valores de diferentes vectores, teríamos que utilizar o ciclo de leitura

varias vezes.

Podemos desenhar uma função para leitura dos elementos de um vector e utiliza-la para ler

os elementos dos vários vectores.

A função terá que receber como parâmetro de entrada o vector a ser inicializado.

Vamos desenhar uma função de leitura dos elementos do vector processos.

void leitura(int processos[5])int i;/*ciclo de leitura*/for(i = 0 ; i < 5 ; i++){

printf(“insira o elemento:”);scanf(“%d”,&processos[i]);

}

}

Page 16: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

Vectores

16Universidade Metodista de Angola, Departamento de Engenharias

Passagem de vectores para funções

Essa função é limitada, para vectores com 5 elementos.

Podemos reescrever a função de modo a funcionar com vectores com uma dimensão n qualquer

void leitura2(int vector[],int n)int i;/*ciclo de leitura*/for(i = 0 ; i < n ; i++){

printf(“insira o elemento:”);scanf(“%d”,&vector[i]);

} }

Analogamente, pode-se criar uma função para escrita dos elementos do vector no ecrã.

void escrita(int vector[5])int i;/*ciclo de escrita*/for(i = 0 ; i < 5 ; i++)

printf(“%d”,vector[i]);}

void escrita2(int vector[],int n)int i;/*ciclo de escrita*/for(i = 0 ; i < n ; i++)

printf(“%d”,vector[i]); }

Para 5 elementos genérico

Page 17: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

Vectores

17Universidade Metodista de Angola, Departamento de Engenharias

#include <stdio.h>#include <stdlib.h>#define DIM 5

int main(){/*declarações de variaveis*/

int i;int processo[DIM];

/*ciclo para leitura de dados do teclado*/

for( i = 0 ; i < DIM ; i++ )scanf(“%d”,&processo[i]);

/*ciclo para escrita*/

for( i = 0 ; i < DIM ; i++ )printf(“%d\n”,processo[i]);

exit(0);}

#include <stdio.h>#include <stdlib.h>#define DIM 5

void leitura(int processo[5]);void escrita(int processo[5]);

int main(){/*declarações de variaveis*/

int i;int processo[DIM];

/*leitura de dados do teclado*/

leitura(processo);

/*ciclo para escrita*/

escrita(processo);

exit(0);}

#include <stdio.h>#include <stdlib.h>#define DIM 5

void leitura2(int vector[],int n); void escrita2(int vector[],int n);

int main(){/*declarações de variaveis*/

int i;int processo[DIM];

/*leitura de dados do teclado*/

leitura2(processo,DIM);

/*ciclo para escrita*/

escrita2(processo,DIM);

exit(0);}

Leitura e escrita dos dados de um vector sem usar funções

Leitura e escrita dos dados de um vector usando funções

Page 18: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

• Declaração/criação de matrizes

• Inicialização de matrizes no momento da sua declaração

• Inicialização de matrizes após sua criação

• Inicialização de matrizes após sua criação, com dados

provenientes do teclado

• Exemplo de operações com matrizes

Matrizes

18Universidade Metodista de Angola, Departamento de Engenharias

Page 19: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

Matrizes

19Universidade Metodista de Angola, Departamento de Engenharias

Criação de matrizes

Sintaxetipo nome_da_matriz [dimensão][dimensão];

Número de linhas da matriz

Nome do vector, um nome qualquer

Tipo: int, float, double, char

Número de colunas da matriz

1.2 4.3 1.43.0 2.5 0

3.2 5.1 2.8A

= −

0 1 23 4 5

B =

E d n aH u g o

CE l s aI n e s

=

1.2 1.3 2.90.7 4.1 5.2

D =

Vamos criar as matrizes abaixo:

Page 20: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

Matrizes

20Universidade Metodista de Angola, Departamento de Engenharias

1.2 4.3 1.43.0 2.5 0

3.2 5.1 2.8A

= −

0 1 23 4 5

B =

E d n aH u g o

CE l s aI n e s

=

1.2 1.3 2.90.7 4.1 5.2

D =

matriz A Constituída por números reais (tipo float ou double)Tem 3 linhas e 3 colunas (dimensão 3x3)

matriz B Constituída por números inteiros (tipo int)Tem 2 linhas e 3 colunas (dimensão 2x3)

matriz C Constituída por caracteres (tipo char)Tem 4 linhas e 4 colunas (dimensão 4x4)

matriz D Constituída por número reais (tipo float ou double)Tem 2 linhas e 3 colunas (dimensão 2x3)

Criação de matrizes

float matrizA[3][3];

int matrizB[2][3];

char matrizC[4][4];

float matrizD[2][3];

Page 21: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

Matrizes

21Universidade Metodista de Angola, Departamento de Engenharias

float matrizA[3][3]; é reservado 3x3 posições de memória, cada uma com 4bytes

int matrizB[2][3]; é reservado 2x3 posições de memória, cada uma com 4 bytes

char matrizC[4][4]; é reservado 4x4 posições de memória, cada uma com 1 byte

float matrizD[2][3]; é reservado 2x3 posições de memória, cada uma com 4 bytes

1.2 4.3 1.43.0 2.5 0

3.2 5.1 2.8A

= −

0 1 23 4 5

B =

E d n aH u g o

CE l s aI n e s

=

1.2 1.3 2.90.7 4.1 5.2

D =

Criação de matrizes

Essas posições de memória são inicialmente inicializadas com valores aleatórios (LIXO)

Page 22: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

Matrizes

22Universidade Metodista de Angola, Departamento de Engenharias

Inicialização de matrizes no momento da sua criação

1.2 4.3 1.43.0 2.5 0

3.2 5.1 2.8A

= −

0 1 23 4 5

B =

E d n aH u g o

CE l s aI n e s

=

1.2 1.3 2.90.7 4.1 5.2

D =

float matrizA[3][3] = { { 1.2 , 4.3 , 1.4 } , { -3.0 , 2.5 , 0.0 } , { 3.2 , 5.1 , 2.8 } };

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

char matrizC[4][4] = { { ‘E’, ‘d’ , ‘n’ , ‘a’ } , { ‘H’, ‘u’ , ‘g’ , ‘o’ } , { ‘E’, ‘l’ , ‘s’ , ‘a’ } , { ‘I’, ‘n’ , ‘e’ , ‘s’ } };

float matrizC[2][3] = { { 1.2 , 1.3 , 2.9 } , { 0.7 , 4.1, 5.2 } };

Page 23: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

Matrizes

23Universidade Metodista de Angola, Departamento de Engenharias

Exemplo de inicialização de matrizes no momento da sua criação

Para exemplificar a inicialização dematrizes após sua criação, vamos considerar apenas a matrizB.

Para as outras matrizes, matrizA, matrizC, matrizD, o processo é análogo.

#include <stdio.h>#include <stdlib.h>

int main(){/*declarações de variaveis*/

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

/*escrita dos elementos da matriz no ecrã.

*/printf(“%d”,matrizB[0][0]);printf(“%d”,matrizB[0][1]);printf(“%d\n”,matrizB[0][2]); printf(“%d”,matrizB[1][0]); printf(“%d”,matrizB[1][1]);printf(“%d”,matrizB[1][2]);

exit(0);}

0 1 23 4 5

B =

Para imprimir os elementos da matizB usou-se

6 instruções/funções printf.

Não é a melhor forma de programar.

Convém usar ciclos.

Nesse caso tem que se usar dois ciclos

Um para controlar as linhas da matriz.

Um para controlar as colunas da matriz.

Matriz B

Page 24: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

Matrizes

24Universidade Metodista de Angola, Departamento de Engenharias

Inicialização de matrizes após sua criação

1.2 1.3 2.90.7 4.1 5.2

D =

#include <stdio.h>#include <stdlib.h>

int main(){/*declarações de variaveis*/int i,j;float matrizD[2][3];

/*inicialização da matriz D*/matrizD[0][0] = 1.2;matrizD[0][1] = 1.3;matrizD[0][2] = 2.9;matrizD[1][0] = 0.7;matrizD[1][1] = 4.1;matrizD[1][2] = 5.2;

/*ciclos de escrita*/for( i = 0 ; i < 2 ; i++ ){

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

printf(“%.1f ”,matrizD[i][j]);}

printf(“\n”);}exit(0);

}

Matriz D

1.2 1.3 2.90.7 4.1 5.2

O programa imprime no ecrã o seguinte:

Para exemplificar a inicialização dematrizes após sua criação, vamos considerar apenas a matrizD.

Para as outras matrizes, matrizA, matrizB, matrizC, o processo é análogo.

Page 25: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

Matrizes

25Universidade Metodista de Angola, Departamento de Engenharias

Inicialização de matrizes a partir do teclado

1.2 1.3 2.90.7 4.1 5.2

D =

#include <stdio.h>#include <stdlib.h>

int main(){/*declarações de variaveis*/int i,j;float matrizD[2][3];

/*inicialização da matriz D*/scanf(“%f”,&matrizD[0][0]);scanf(“%f”,&matrizD[0][1]);scanf(“%f”,&matrizD[0][2]);scanf(“%f”,&matrizD[1][0]);scanf(“%f”,&matrizD[1][1]);scanf(“%f”,&matrizD[1][2]);

/*ciclos de escrita*/for( i = 0 ; i < 2 ; i++ ){

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

printf(“%.1f ”,matrizD[i][j]);}

printf(“\n”);}exit(0);

}

Matriz D

O que o programa imprime no ecrã ?

O programa em analise efectua as seguintesOperações:Lê 6 números reais do tecladoGuarda-os numa matriz rectangular, do tipo 2x3 Escreve esses números em duas linhas

Obs.:É possível fazer o mesmo programa usando um vector com dimensão 6.

É possível fazer a leitura desses dados Usando ciclos

Page 26: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

Matrizes

26Universidade Metodista de Angola, Departamento de Engenharias

Exemplo de um programa em linguagem C que efectua a soma da matriz B com a matriz D e escreveO resultado no ecrã.

#include <stdio.h>#include <stdlib.h>

int main(){/*declarações de variaveis*/int i,j;int matrizB[2][3] = {{0,1,2},{3,4,5}}; float matrizD[2][3] = {{1.2,1.3,2.9},{0.7,4.1,5.2}}; float resultado[2][3];

/*cálculo da soma*/for( i = 0 ; i < 2 ; i++ )

for( j = 0 ; j < 3 ; j++ )resultado[i][j] = matrizB[i][j]+matrizD[i][j];

/*ciclos de escrita*/for( i = 0 ; i < 2 ; i++ ){

for( j = 0 ; j < 3 ; j++ ) printf(“%.1f ”,resultado[i][j]);

printf(“\n”);}exit(0);

}

Page 27: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

27Universidade Metodista de Angola, Departamento de Engenharias

Exemplo de um programa em linguagem Cque efectua a soma de duas matrizes denúmeros inteiros quaisquer do tipo 3x3, eapresenta o resultado no ecrã.

#include <stdio.h>#include <stdlib.h>

int main(){/*declarações de variaveis*/int i,j;int mat_A[3][3]; int mat_B[3][3];int mat_C[3][3];

/*leitura dos valores da matriz A*/for( i = 0 ; i < 3 ; i++ )

for( j = 0 ; j < 3 ; j++ ){printf(“insira A[%d][%d]: ”,i,j);scanf(“%d”,&mat_A[i][j]);

} /*leitura dos valores da matriz B*/for( i = 0 ; i < 3 ; i++ )

for( j = 0 ; j < 3 ; j++ ){printf(“insira B[%d][%d]: ”,i,j);scanf(“%d”,&mat_B[i][j]);

}/*calculo da soma*/for( i = 0 ; i < 3 ; i++ )

for( j = 0 ; j < 3 ; j++ )mat_C[i][j] = mat_A[i][j] + mat_B[i][j];

/*ciclos de escrita*/for( i = 0 ; i < 2 ; i++ ){

for( j = 0 ; j < 3 ; j++ ) printf(“%.1f ”,mat_C[i][j]);

printf(“\n”);}exit(0);

}

Page 28: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

Matrizes

28Universidade Metodista de Angola, Departamento de Engenharias

Analogamente do que se fez nos vectores podemos criar funções para leitura e escrita dos elementosde uma matriz

void leitura(int mat[3][3]){/*declarações de variaveis*/int i,j;/*ciclo de leitura*/for( i = 0 ; i < 3 ; i++ )

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

scanf(“%d”,&mat[i][j]);}

}

void escrita(int mat[3][3]){/*declarações de variaveis*/int i,j;/*ciclos de escrita*/for( i = 0 ; i < 3 ; i++ ){ for( j = 0 ; j < 3 ; j++ ) printf(“%d ”,mat[i][j]);

printf(“\n”);}

}

Função para leitura dos dados Função para escrita dos dados

Page 29: Operações com Vectores e Matrizes - web.ist.utl.ptweb.ist.utl.pt/.../Programacao_I_Cap_9_vectores_e_matrizes.pdf · • Até agora já aprendemos em linguagem C o seguinte: –

Matrizes

29Universidade Metodista de Angola, Departamento de Engenharias 29

Exemplo de um programa em linguagem C que efectua a soma de duas matrizes de números inteirosquaisquer do tipo 3x3, e apresenta o resultado no ecrã.#include <stdio.h>#include <stdlib.h>

void leitura(int mat[3][3]); /*prototipo das funções*/void escrita(int mat[3][3]);

int main(){/*declarações de variaveis*/int i,j;int mat_A[3][3]; int mat_B[3][3];int mat_C[3][3];

/*leitura dos valores da matriz A*/leitura(mat_A);/*leitura dos valores da matriz B*/leitura(mat_B);/*calculo da soma*/for( i = 0 ; i < 3 ; i++ )

for( j = 0 ; j < 3 ; j++ )mat_C[i][j] = mat_A[i][j] + mat_B[i][j];

/*escrita do resultado*/escrita(mat_C);

exit(0);}

Código mais compacto