Programação de Computadores I

Livre

0
0
43
1 year ago
Preview
Full text

  CENTRO FEDERAL DE EDUCAđấO TECNOLốGICA DE MINAS GERAIS

  Vetores e Matrizes Programação de Computadores I

  Natália Batista https://sites.google.com/site/nataliacefetmg/ nataliabatista@decom.cefetmg.br

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);

  E se forem 3000 alunos?? Seriam necessárias 3000 Com vetores, variáveis do mesmo tipo! basta uma variável!

2. Tipos de dados

   Estrutura de dados simples

   Estrutura de dados composta homogênea

  x y

  Um tipo de dado é um conjunto cujos valores exibem comportamento uniforme nas operações associadas com o tipo. (Varejão)

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.

  0 1 2 3

  notas 25.4 18.0 26.8 29.5

4. Declaração de vetores

   Declaração: tipo nome[tamanho]; float notas[4];

int Media_final[10];

char nome[4];

  Media_final nome

   Os elementos dos vetores são acessados por indexação.  Exemplo: Media_final[4] refere-se ao elemento de conteúdo 92.

5. Preenchendo vetores

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

   Exemplo: float notas[4];

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

  o vetor tem 4 elementos

  • – cada variável do vetor é referenciada por um índice.
  • – Atribuição de valores aos elementos do vetor: notas[0] = 25.4;

  0 1 2 3

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

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', e a[2]='n'. i nt v[10]; //um vetor não inicializado

6. Leitura de dados e impressão

  //demonstra vetor de inteiros

  Saída

  #include <stdio.h> #define N 10 //constante N Digite 10 números: int main(){

  32 45 17 30 58 72 89 98 65 39 int conjunto[N] ;

  0 32 int i;

  1 45 2 17 //entrada de dados printf("Digite %d numeros:\n", N);

  3 30 for (i=0; i<N; i++)

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

  5 72 6 89 //impressão do vetor

  7 98 for (i= 0; i <N; i++)

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

  9 39 return 0; }

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 diferente do vetor.

6. Leitura de dados e impressão

  o

Exemplo: mostrar apenas o 5 valor armazenado no

vetor conjunto. printf ("%d", conjunto[4] );

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; return resultado; }

  #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]); } return 0; }

7. Vetores e funções

   Na passagem de parâmetro de apenas um

elemento do vetor, valem as regras para

variáveis simples (valor e referência).

  (1/5)

8. Vetores como parâmetros de funções

   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]; } return resultado; } 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 printf(" Soma = %d\n", resultado); return 0; }

  (2/5)

8. Vetores como parâmetros de funções

   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 .

  (5/5)

8. Vetores como parâmetros de funções

   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.

  (1/4)

9. Retorno de função pode ser 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.

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.

  Y Z

10. Matrizes

   Os elementos da matriz são acessados por indexação  índices.

   Cada elemento precisa de 2 índices: 

  Um para linha e outro

  0 1 2 3 4

  para coluna 

  Exemplo: uma matriz com 3 linhas e 5 colunas.

  1

  2

  (1/3)

11. Declaração de matrizes

   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: tipo nome [ nº de linhas ] [ nº de colunas ] ;

  (2/3)

11. Declaração de matrizes

   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  profundidade 3

  (3/3)

11. Declaração de matrizes

   Exercício: declarar a variável Paralelepípedo representada pelo figura a seguir.

  Cada elemento da variável é identificado pelo nome da variável seguido de três índices entre colchetes. char Paralelepípedo[6][4][6];

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]); } return 0; }

13. Lendo e imprimindo a matriz

   Exemplo: Faça um programa que preencha uma matriz 3x3 com números reais e leia outro valor numérico digitado pelo usuário. O programa deverá calcular e mostrar a matriz resultante da multiplicação do valor digitado por cada elemento da matriz.

  #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"); } return 0; }

  (1/6)

14. Matrizes e funções

   Na passagem de parâmetro de apenas um

elemento da matriz, valem as regras para

variáveis simples (valor e referência).

  (2/6) 

14. Matrizes e funções

  Como passar todos os elementos da matriz como parâmetro?

  (3/6)

14. Matrizes e funções

   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.

  (3/6)

14. Matrizes e funções

   Na definição da função, para receber uma matriz como parâmetro, deve-se seguir o exemplo: int soma(int matriz[][10]);

   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.

  (4/6)

14. Matrizes e funções

  

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]);

  #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); printf(" Soma = %d\n", resultado);

  (6/6)

14. Matrizes e funções

   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.

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

   Quando for necessário retornar uma matriz, devemos passá-la como parâmetro também.

  Como a passagem é por referência, as alterações realizadas dentro da função são mantidas.

16. Exercícios sugeridos

  1. Faça uma função que receba como parâmetro

dois vetores de dez números inteiros, determine e

mostre a intersecção entre eles.

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.

   a porcentagem de aprovação, sabendo-se que a nota mínima é 6.

  (1/4)

16. Exercícios sugeridos

  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.

  4. Faça um programa que receba como entrada uma matriz 2x2 e calcule o determinante dessa matriz.

  (2/4)

7. Exercícios sugeridos

  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 4 8 12 48

  Diagonal de A * 3 =

16. Exercícios sugeridos

  6 Felipe

  1

  3

  

9

  30

  1 Marcos

  

2

  2

  3 Tiago

  

2

  5

  (3/4) 6.

  Considere a seguinte tabela referente a um determinado time de futebol em um determinado campeonato.

  16

  1 Leonardo

  2

  

7

  8

  1 João

  10

  4 Wagner

  

10

  13

  Nome do Jogador Número da Camisa Gols Marcados Cartões Amarelos Cartões Vermelhos José

  

1

  (4/4)

16. Exercícios sugeridos

  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 gols no campeonato.

  Pergunta: 

  Como o nome do jogador poderia ser armazenado no programa?

17. Atividades sugeridas

   Leitura do livro-texto (Damas) e exercícios: Capítulo 6.

  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.

   Cristina D. Murta. Notas de aula. 2010.

Novo documento