Vetores e Matrizes
Programação de Computadores I
Natália Batista
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”, ¬a1, ¬a2, ¬a3); 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!
Estrutura de dados simples
Estrutura de dados composta homogênea
x
y
2. Tipos de dados
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
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];
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
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',
//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:
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
6. Leitura de dados e impressão
Exemplo: mostrar apenas o 5o valor armazenado no
vetor conjunto.
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;
#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]); }
7. Vetores e funções
Na passagem de parâmetro de apenas um
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]; }
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
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.
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.
9. Retorno de função pode ser vetor? (1/4)
Quando for necessário retornar um vetor,
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.
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
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:
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
11. Declaração de matrizes
(3/3) Exercício: declarar a variável Paralelepípedo
representada pelo figura a seguir.
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]);
}
13. Lendo e imprimindo a matriz
Exemplo: Faça um programa que preencha
#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");
}
14. Matrizes e funções
(1/6) Na passagem de parâmetro de apenas um
14. Matrizes e funções
(2/6) Como passar todos os elementos da matriz
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.
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) 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);
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,
16. Exercícios sugeridos
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.
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.
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
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
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
Pergunta:
Como o nome do jogador poderia ser
17. Atividades sugeridas
Leitura do livro-texto (Damas) e exercícios:
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.