Universidade Estadual de Feira de Santana Departamento de Ciências Exatas Engenharia de Computação EXA801 – Algoritmos e Programação 1 EXA801 Algoritmos e Programação 1 Prof. Matheus Giovanni Pires Aula 5‐Vetores Aula 5 Vetores e Matrizes e Matrizes Esta aula foi baseada em material cedido gentilmente pelas professoras Ana Lúcia Lima Marreiros Maia e Fabiana Cristina Bertoni Motivação • Se o usuário precisa digitar uma sequência de números e depois mostrar esta sequência em ordem inversa. Como fazer? • Para uma sequência de quatro números, poderíamos utilizar quatro variáveis. q – Exemplo: numero1, numero2, numero3, numero4 • EE para uma sequência de 100 números? Como para uma sequência de 100 números? Como faríamos? • Como armazenar vários valores em uma única Como armazenar vários valores em uma única estrutura de armazenamento? 2 Estruturas homogêneas Estruturas homogêneas • Estruturas homogêneas unidimensionais – VETORES • Estruturas homogêneas multidimensionais g – MATRIZES 3 Vetores • Armazenam vários elementos do mesmo tipo primitivo; p ç • Vários valores em posições diferentes, com ordem específica entre si; Elementos podem ser repetidos ou não; • Elementos podem ser repetidos ou não; • Podemos encontrar esse tópico na literatura com as seguintes nomenclaturas: seguintes nomenclaturas: – Vetor, Array, Matriz unidimensional ou Arranjo. 4 Ilustração de um vetor Ilustração de um vetor • Exemplo de um vetor capaz de armazenar 7 números inteiros, chamado numeros. 0 1 2 3 4 5 6 – Todas as posições pertencem ao vetor numeros, e cada p ç p , uma dessas posições é capaz de armazenar um número inteiro; – O acesso a cada um dos valores armazenados em numeros é feito por um índice que cada posição possui. – Na linguagem C, esses índices iniciam‐se no valor zero, ou seja, o índice da primeira posição de numeros é o zero e o índice da última posição de numeros é o 6. índice da última posição de numeros éo6 5 Declaração de um vetor Declaração de um vetor • Forma Geral: tipo nome[tamanho]; • onde: – tipo: qualquer tipo da linguagem C – nome: nome do vetor nome: nome do vetor – tamanho: define quantos elementos o vetor é capaz de armazenar. Deve ser um valor constante. armazenar. Deve ser um valor constante. • Exemplos: i t numeros[7]; int [7] char respostas[5]; float notas[100]; 6 Declaração de um vetor Declaração de um vetor • Declaração não dimensionada: – Caso o tamanho não seja especificado, o vetor já deve ser inicializado. Exemplo: int vet1[] = {1,5,8,3}; • O compilador alocará o espaço suficiente para armazenar o conteúdo atribuído, ou seja, o vetor terá tamanho = 4. • As duas notações a seguir são equivalentes: int vet1[4] [ ] = { {1, , 2, , 3, , 4}; }; int vet1[] = {1, 2, 3, 4}; 7 Acesso aos elementos de um vetor Acesso aos elementos de um vetor • Para ter acesso a cada elemento do vetor, é necessário especificar o nome do vetor seguido do índice da posição desejada. Exemplos: • Armazenando o valor 15 na 4ª posição do vetor numeros: numeros[3] = 15; • Lendo Lendo um número inteiro do teclado e um número inteiro do teclado e armazenando‐o na 1ª posição do vetor numeros: scanf("%d", scanf( %d , &numeros[0]); 8 Acesso aos elementos de um vetor Acesso aos elementos de um vetor • Imprimindo o 6º elemento do vetor numeros: printf("%d",numeros[5]); • Imprimindo um elemento com a posição especificada p p ç p por uma variável: p printf("%d",numeros[x]); , • Imprimindo um elemento com a posição especificada pelo resultado de uma expressão: pelo resultado de uma expressão: printf("%d",numeros[x+2]); 9 Acesso aos elementos de um vetor Acesso aos elementos de um vetor • ATENÇÃO – IMPORTANTE – Sendo numeros um vetor de números inteiros NÃO é possível fazer: scanf("%d",&numeros); printf("%d",numeros); 10 Vetores: exemplo 1 Vetores: exemplo 1 • Programa que lê 10 valores inteiros e armazena‐os em um vetor, em seguida, os valores lidos são exibidos na tela. #include <stdio.h> const int MAX = 10; void main() { int lista[MAX]; int i; //índice do vetor, sempre inteiro for(i = 0; i < MAX; i++){ printf("\nDigite o %d elemento do vetor: ", i + 1); scanf("%d",&lista[i]); } printf ("\nValores lidos:\n"); for(i = 0; i < MAX; i++) printf("%d\n" lista[i]); printf("%d\n", } 11 Vetores: exemplo 2 Vetores: exemplo 2 • Programa que lê 7 valores inteiros e armazena‐os em um vetor, em seguida, imprime os valores lidos em ordem inversa à leitura. #include <stdio.h> const int MAX = 7; void main() { int vetor[MAX], i; for(i=0; i < MAX; i++) { printf("\nDigite o elemento %d: ", i + 1); scanf("%d", &vetor[i]); } for(i=MAX-1; i>=0; i--) printf("\nElemento %d: %d", i+1, vetor[i]); } 12 Vetores: considerações Vetores: considerações • Tamanho do vetor é fixo (alocação estática), ou seja, não é possível alterar. p q • É preciso saber a quantidade máxima de elementos que se deseja armazenar. Pode‐se se criar uma variável numérica para armazenar criar uma variável numérica para armazenar • Pode quantas posições estão sendo usadas de fato. 13 Vetores: considerações Vetores: considerações • Nenhuma restrição é feita quanto a quantidade de valores inseridos. – Se o usuário ultrapassar o limite, o programa tentará ler os valores normalmente, mas os escreverá em uma parte não alocada de memória. Isto pode resultar nos mais variados erros de execução: variados erros de execução: • Acessar local inválido da memória. • Erro (operação ilegal, segmentation Erro (operação ilegal, segmentation fault) fault) pode levar o programa a pode levar o programa a ser "finalizado" pelo sistema operacional. 14 Matrizes • Armazenam vários elementos do mesmo tipo primitivo. • Matrizes têm mais de um índice de referência. • Matriz bidimensional é uma representação tabular (retangular, em linhas e colunas) de um conjunto de (retangular, em linhas e colunas) de um conjunto de dados do mesmo tipo. 15 Ilustração de uma matriz Ilustração de uma matriz • Matriz notas contendo notas de 3 avaliações de 5 alunos. – A linhas representam os alunos e as colunas representam as notas. 0 1 2 0 8.9 7.4 5.7 1 69 6.9 27 2.7 40 4.0 2 9.5 9.4 8.6 3 49 4.9 89 8.9 63 6.3 4 7.2 9.9 7.7 16 Declaração de uma matriz Declaração de uma matriz • Forma Geral: tipo nome[dim1][dim2]...[dimN]; • onde: – tipo: qualquer tipo possível na linguagem C. – nome: nome da matriz. – [dim1][dim2]...[dimN]: cada tamanho inteiro entre colchetes define o tamanho da respectiva dimensão desejada. • A matriz notas é declarada da seguinte forma: g float notas[5][3]; 17 Declaração de uma matriz Declaração de uma matriz • Declaração não dimensionada: – Podem ter apenas seu primeiro índice não especificado, os outros devem ser indicados para que o compilador possa i d indexar de forma correta. d f int mat1[][2]= {1,5,8,3}; • O compilador alocará o espaço suficiente para armazenar o conteúdo atribuído, ou seja, irá inserindo os elementos, considerando 2 colunas e quantas linhas forem necessárias. 18 Acesso aos elementos de uma matriz Acesso aos elementos de uma matriz • Para ter acesso a cada elemento da matriz, é necessário especificar o nome da matriz seguido do índice da linha e da coluna entre colchetes. • Armazenando o valor 9.4 na 3ª linha e 2ª coluna da matriz notas: notas[2][1] = 9.4; • Lendo Lendo um número real do teclado e armazenando um número real do teclado e armazenando‐o o na 1ª linha e 2ª coluna da matriz notas: printf( Digite um número"); printf("Digite número ); scanf("%f", ¬as[0][1]); 19 Matrizes: exemplo 1 Matrizes: exemplo 1 • Programa que lê 3 notas de 5 alunos e as armazena em uma matriz de ordem 5 X 3 de números reais, e em seguida imprime os valores lidos. 20 Matrizes: exemplo 1 Matrizes: exemplo 1 #include <stdio.h> #define ALUNO 5 // ou const int ALUNO = 5; #d fi #define NOTAS 3 // ou const t int i t NOTAS = 3; 3 void main() { float notas[ALUNO][NOTAS]; int i, , j j; // índices q que representam p linhas e colunas for(i = 0; i < ALUNO; i++){ for(j = 0; j < NOTAS; j++) { printf("\nDigite i tf("\ Di it a %da %d nota t d do aluno l %d %d: " ", j+1 j+1, i+1) i+1); scanf("%f", ¬as[i][j]); } } printf("\nValores lidos:\n\n"); for(i = 0; i < ALUNO; i++) { for(j = 0; j < NOTAS; j++) printf ("%5.1f", ("%5 1f" notas[i][j]); printf("\n"); } } 21 Matrizes: exemplo 2 Matrizes: exemplo 2 • Programa que lê duas matrizes inteiras 3 X 4 e obtenha uma terceira matriz, a qual é resultado da soma das duas anteriores. Imprime a matriz resultante. 22 Matrizes: exemplo 2 Matrizes: exemplo 2 #include <stdio.h> #define LINHAS 3 // ou const int LINHAS = 3; #define COLUNAS 4 // ou const int COLUNAS = 4; void main() { int A[LINHAS][COLUNAS], B[LINHAS][COLUNAS], C[LINHAS][COLUNAS], i, j; for(i = 0; i < LINHAS; i++) for(j = 0; j < COLUNAS; j++) { printf("\nDigite o elemento %d %d da matriz A: ", i+1, j+1); scanf("%d", &A[i][j]); } for(i = 0; i < LINHAS; i++) for(j = 0; j < COLUNAS; j++) { printf("\nDigite o elemento %d %d da matriz B: ", i+1, j+1); scanf("%d", &B[i][j]); } printf("\nMatriz resultante:\n\n"); for(i = 0; i < LINHAS; i++) { for(j = 0; j < COLUNAS; j++) { C[i][j] = A[i][j] + B[i][j]; printf ("%5d", C[i][j]); } printf("\n"); } } 23 Exercícios • Faça um programa que leia N valores inteiros (0 < N ≤ 100) e armazena‐os em um vetor. Em seguida, mostre os valores lidos em ordem inversa à leitura. • Faça um programa que leia 8 valores inteiros e armazena‐os em um vetor. Em seguida, calcule e g mostre a soma dos valores pares lidos. Faça um programa que leia 10 valores que • Faça um programa que leia 10 valores que representam notas e armazene‐as em um vetor. Em seguida, calcule e imprima a média das notas e as seguida, calcule e imprima a média das notas e as notas que estão acima da média. 24 Exercícios • Faça um programa que leia 200 números inteiros e armazene‐os em um vetor V. Em seguida separe os elementos de V em dois vetores A e B, de forma que o vetor A contenha os elementos pares de V e B contenha os elementos ímpares de V. Imprima na tela os números dos vetores A e B. • Faça um programa que leia 30 valores inteiros positivos e armazene‐os em um vetor, calcule e imprima: – O menor valor do vetor. – A quantidade de elementos do vetor que são divisíveis q q pelo menor valor. 25 Exercícios • Faça um programa que leia 30 números inteiros e armazene‐os em um vetor A e leia também um inteiro n. Em seguida seu programa deve procurar o valor n em A e imprimir a posição em que este aparece. Se o elemento não estiver no vetor, o programa deve imprimir uma mensagem indicando que o elemento não pertence ao vetor. • Faça um programa que leia um número inteiro e uma matriz 4 X 4 de inteiros, e obtenha uma segunda matriz resultado do produto da matriz original pelo número lido. Imprima a matriz resultado. 26 Exercícios • Escreva um programa que leia uma matriz 10x10 e encontre e imprima o maior e o menor elemento da matriz. • Escreva um programa que leia as notas das 5 provas de 50 alunos e armazene‐as em uma matriz e calcule e imprima as médias das 5 notas de cada um dos 50 alunos. Calcule ainda a maior média e a quantidade de alunos com média maior ou igual a 7. 27