Baixe o app para aproveitar ainda mais
Prévia do material em texto
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica COMPUTAÇÃO BÁSICA Vetores Prof. Bruno Macchiavello (bruno@cic.unb.br) Universidade de Brasília – UnB Instituto de Ciências Exatas – IE Departamento de Ciência da Computação – CIC Prof. Bruno Macchiavello 1 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Conjuntos de Dados • Algoritmos precisam de dados e informações para exercer as suas funções. • Informações simples atendem a uma pequena• Informações simples atendem a uma pequena parcela dos algoritmos. A maioria utiliza uma grande carga de informações e estas quando utilizadas com tipos primitivos precisam ser criadas inúmeras variáveis, tornando o algoritmo um monstro carregado de variáveis, já que uma variável contém apenas uma informação. Prof. Bruno Macchiavello 2 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Conjuntos de Dados • Imagine a seguinte situação: �Devemos desenvolver um programa para gestão de RH de uma empresa com três funcionários, e que para cada funcionário o programa deverá ler o salário dele e mais alguns dados, como número de filhos,dele e mais alguns dados, como número de filhos, para calcular o reajuste �Suponha que cada funcionário receberá um aumento de R$200,00 para cada filho que ele possuir. Nos moldes pensados anteriormente, a solução seria algo semelhante ao apresentado no próximo slide. Prof. Bruno Macchiavello 3 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Conjunto de Dados Exemplo: Algoritmo que lê o salário de três funcionários e calcula o aumento de R$200,00 por filho, para cada um deles. Algoritmo Deselegante Variáveis salario1, salario2, salario3, nfilhos1, nfilhos2, nfilhos3 : real Prof. Bruno Macchiavello 4 salario1, salario2, salario3, nfilhos1, nfilhos2, nfilhos3 : real Início Leia (salario1) Leia (nfilhos1) salario1←salario1 + 200 * nfilhos1 Escreva (“O novo salário do funcionário 1 é “,salario1) /* REPETIR O CÓDIGO ACIMA PARA OS FUNCIONÁRIOS 2 E 3 */ Fim Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Conjunto de Dados Exemplo: Algoritmo que lê o salário de três funcionários e calcula o aumento de R$200,00 por filho, para cada um deles. Algoritmo Deselegante Variáveis salario1, salario2, salario3, nfilhos1, nfilhos2, nfilhos3 : real Início Prof. Bruno Macchiavello 5 Início Leia (salario1) Leia (nfilhos1) salario1←salario1 + 200 * nfilhos1 Escreva (“O novo salário do funcionário 1 é “,salario1) /* REPETIR O CÓDIGO ACIMA PARA OS FUNCIONÁRIOS 2 E 3 */ Fim Qual seria o algoritmo para 1000 funcionários? Associarmos uma variável para cada funcionário? Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Conjunto de Dados • Para solucionar esse problema devemos trabalhar com um novo tipo de estruturas de dados: VETORES e MATRIZES. • Utilizando armários como demonstração, uma gaveta só pode conter um objeto, uma variável tem somente uma informação de uma determinado tipo. • Quando se trata de conjuntos de dados, uma gaveta, ou melhor, uma variável pode conter inúmeras informações. Prof. Bruno Macchiavello 6 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Vetor • Um vetor, do ponto de vista de Informática, é uma estrutura de dados homogênea, isto é, todos os elementos de um vetor são do mesmo tipo. • A estrutura como um todo é identificada por um nome e um elemento na estrutura por um índice.elemento na estrutura por um índice. • O índice indica a posição do elemento na estrutura. Prof. Bruno Macchiavello 7 . . . 0 1 2 N-2 N-1 Índice ou posição Conteúdo do vetor Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Vetor • Podemos então entender o vetor como um conjunto de dados homogêneos. Por exemplo um conjunto de valores inteiros: F = {6, -7, 8, 9, 20} • Podemos acessar cada um dos elementos do conjunto F mediante os índices representados por colchetes, na for F[i], onde i é um número inteiro. � Exemplos: o F[0] = 6 o F[2] = 8 o F[4] = 20 Prof. Bruno Macchiavello 8 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Vetores - Exemplos 10 1 23 3 75 85.2 21.5 90.5 55.3 0 1 2 3 4 Conteúdo Índice Conteúdo TIPO REAL S E N A C 0 1 2 3 4 Prof. Bruno Macchiavello 9 10 1 23 3 0 1 2 3 Conteúdo Conteúdo Índice Índice TIPO INTEIRO TIPO LITERAL Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Vetor • Declaração de vetores em pseudocódigo Variáveis <nome> : vetor [<tamanho>] de <tipo> Prof. Bruno Macchiavello 10 Exemplo de declaração de Vetores em Pseudocódigo Algoritmo Funcionario Variáveis SALF : vetor [1000] de reais /* vetor que armazena os salários dos funcionários */ CODF : vetor [1000] de inteiros /* vetor que armazena os códigos dos funcionários */ FILHOSF : vetor [1000] de inteiros /* vetor que armazena o nro de filhos dos funcionários */ Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Vetor • Declaração de Vetores em C <tipo> <nome>[<tamanho>]; Exemplo de declaração de Vetores em C Prof. Bruno Macchiavello 11 Exemplo de declaração de Vetores em C #include <stdio.h> int main () { float SALF[1000]; /* vetor que armazena os salários dos funcionários */ int CODF[1000] ; /* vetor que armazena os códigos dos funcionários */ int FILHOSF[1000] /* vetor que armazena o nro de filhos dos funcionários */ } Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Vetor • Um ponto IMPORTANTE é que na linguagem C o índice de um vetor de N elementos vai de zero a N-1, então F[0] é o primeiro elemento, F[N-1] é o último elemento e F[N] é uma variável inválida,o último elemento e F[N] é uma variável inválida, pois contando de zero a N-1 possuímos exatamente N elementos. • Para pseudocódigo vamos tamber assumir que a posição inicial é a posição 0. Prof. Bruno Macchiavello 12 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exemplo 1 Exemplo: Uma solução em pseudocódigo para o problema dos funcionários (para o caso de 100 funcionários). Note que no laço, a variável i assume valores entre 0 e 99, abrangendo assim todas as 100 posições dos vetores. Algoritmo Salário Variáveis i : inteiro salario : vetor[100] de reais Prof. Bruno Macchiavello 13 salario : vetor[100] de reais nfilhos : vetor[100] de inteiros Início Para i = 0 até 99 faça Escreva ("Digiteo salário do funcionário “,i+1) Leia(salario[i]) Escreva("Digite o número de filhos do funcionário ",i+1) Leia(nfilhos[i]) salario[i] ← salario[i] + (200*nfilhos[i]) Escreva(“O novo salário do funcionário ”,i+1,” é de R$”, salario[i]) FimPara Fim Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exemplo 1 Programa em C do algoritmo anterior #include <stdio.h> int main () { float salario[100]; int i; int nfilhos[100]; Prof. Bruno Macchiavello 14 for (i=0; i<100; i++) { printf("Digite o salário do funcionário %d\n",i+1); scanf("%f",&salario[i]); printf("Digite o número de filhos do funcionário %d\n",i+1); scanf("%d",&nfilhos[i]); salario[i]+= 200*nfilhos[i]; printf("O novo salário do funcionário %d é de R$%.2f\n",i+1, salario[i]); } getchar(); return 0; } Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Vetor - Observações • O vetor sempre deve ser declarado com tamanho fixo. Não pode se declarar um vetor com tamanho variável. int a=3;int a=3; float vetor[a]; const int a=3; float vetor[a]; float vetor[3]; Prof. Bruno Macchiavello 15 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Vetor - Observações • Não pode-se usar variáveis para declarar o tamanho do vetor, porém podem ser usadas variáveis durante o programa para acessar uma determinada posição do vetor com o seguinte cuidado: � A variável de índice não pode assumir valores negativos ou que sejam maiores ou iguais ao número N de elementos. A variável índice deve sempre oscilar entre 0 e N-1, caso contrário o programa tentará acessar áreas de memória fora daquela do vetor, o que gerará uma falha de segmentação do programa (o programa dará erro e será automaticamente fechado pelo sistema operacional). Prof. Bruno Macchiavello 16 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Vetor - Observações • Sobre o tamanho do vetor: �Não precisamos usar todas as N posições do vetor. �É comum declararmos um vetor maior que o necessário e perguntarmos ao usuário quantas posições ele vai precisar, e então fazermos nossoposições ele vai precisar, e então fazermos nosso índice variar de 0 a até esse novo limite, obviamente menor do que o número de posições declaradas (segue exemplo no próximo slide). Prof. Bruno Macchiavello 17 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exemplo: Esse é o mesmo exemplo anterior, mas agora o número de funcionários é variável. (Aqui presume-se que haverão no máximo 100 funcionários). Algoritmo Salário2 Variáveis i, nrofunc : inteiro salario : vetor[100] de reais nfilhos : vetor[100] de inteiros Início Escreva("Digite o número de funcionários”) Prof. Bruno Macchiavello 18 Escreva("Digite o número de funcionários”) Leia(nrofunc) Para i = 0 até nrofunc-1 faça Escreva ("Digite o salário do funcionário “,i+1) Leia(salario[i]) Escreva("Digite o número de filhos do funcionário ",i+1) Leia(nfilhos[i]) salario[i] ← salario[i] + (200*nfilhos[i]) Escreva(“O novo salário do funcionário ”,i+1,” é de R$”, salario[i]) FimPara Fim Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Programa em C do algoritmo anterior #include <stdio.h> int main () { float salario[100]; int i, nrofunc; int nfilhos[100]; printf("Digite o número de funcionários\n"); scanf("%d",&nrofunc); for (i=0; i<nrofunc && i<100; i++) { Prof. Bruno Macchiavello 19 for (i=0; i<nrofunc && i<100; i++) { printf("Digite o salário do funcionário %d\n",i+1); scanf("%f",&salario[i]); printf("Digite o número de filhos do funcionário %d\n",i+1); scanf("%d",&nfilhos[i]); salario[i]+= 200*nfilhos[i]; printf("O novo salário do funcionário %d é de R$%.2f\n",i+1, salario[i]); } getchar(); return 0; } Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Número de Elementos • Note que, no exemplo anterior, a condição de continuidade do laço for é composta por duas partes: � i<nrofunc garante que o programa pare assim que o número de funcionários for atingido, pois não hánúmero de funcionários for atingido, pois não há sentido em continuar a execução para funcionários inexistentes; � i<100 garante que o programa não extrapolará o tamanho de memória reservado para os funcionários, evitando uma falha de segmentação. Prof. Bruno Macchiavello 20 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exemplo: Faça um algoritmo que leia um conjunto de N inteiros (N será lido e é sempre menor ou igual a 100), encontre e mostre o maior deles. Algoritmo Numeros Variáveis i, n, maior : inteiro numeros : vetor[100] de inteiros Início Escreva("Digite a quantia de números a serem lidos:”) Leia(n); Prof. Bruno Macchiavello 21 Leia(n); Para i = 0 até n-1 faça Escreva ("Digite o”, i+1,”o numero “) Leia(numeros[i]) FimPara maior← numeros[0] Para i = 0 até n-1 faça Se numeros[i] > maior então maior← numeros[i] FimPara Escreva(“O maior número é ",maior) Fim Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Programa em C do algoritmo anterior #include <stdio.h> int main () { int i, n, maior, numeros[100]; printf("Digite a quantia de números a serem lidos: \n"); scanf("%d",&n); for (i=0; i<n; i++) { printf("Digite o %do número: \n",i+1); scanf("%d",&numeros[i]); Prof. Bruno Macchiavello 22 scanf("%d",&numeros[i]); } maior = numeros[0]; for (i=0; i<n; i++) { if (numeros[i]>maior) maior = numeros[i]; } printf(“O maior números é %d\n ",maior); getchar(); return 0; } Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exemplo 2 • Note que no exemplo anterior o vetor é varrido totalmente por duas vezes, uma para ler os dados e outra para determinar o maior elemento. • No caso de dois vetores grandes, isso pode aumentar o tempo de execução. • É melhor determinar o maior número durante a leitura de dados. Prof. Bruno Macchiavello 23 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exemplo: Faça um algoritmo que leia um conjunto de N inteiros (N será lido e é sempre menor ou igual a 100), encontre e mostre o maior deles. Obs: Esta solução deve varrer o vetor apenas uma vez. Algoritmo NovoNotas Variáveis i, n, maior : inteiro numeros : vetor[100] de inteiros Início Escreva("Digite a quantia de números a serem lidos:"); Prof. Bruno Macchiavello 24 Escreva("Digite a quantia de números a serem lidos:"); Leia(n); Para i = 0 até n-1 faça Escreva ("Digite o”, i+1,”o numero “) Leia(numeros[i]) Se i=0 então maior← numeros[i]; senão se (numeros[i]>maior) maior← numeros[i]; FimPara Escreva(“O maior número é ",maior) Fim Departamento de Ciência da ComputaçãoDepartamentode Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Programa em C do algoritmo anterior #include <stdio.h> int main () { int i, n, maior, numeros[100]; printf("Digite a quantia de números a serem lidos: \n"); scanf("%d",&n); for (i=0; i<n; i++) { printf("Digite o %do número: \n",i+1); scanf("%d",&numeros[i]); Prof. Bruno Macchiavello 25 scanf("%d",&numeros[i]); if (i==0) maior = numeros[0]; else if (numeros[i]>maior) maior = numeros[i]; } printf(“O maior números é %d\n ",maior); getchar(); return 0; } Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exercícios 1. Escreva um algoritmo que leia dois vetores de 25 inteiros cada (um vetor e depois o outro), crie um vetor de 50 inteiros que seja o resultado da intercalação dos elementos dos outros dois vetores e por fim mostre o conteúdo do novo vetor. 2. Escrever um algoritmo que lê um vetor X de 20 posições, e qualquer tipo. Escreva, a seguir, cada um dos valores distintos que aparecem em X dizendo quantas vezes cada valor aparece em X. Prof. Bruno Macchiavello 26 dizendo quantas vezes cada valor aparece em X. 3. Faça um algoritmo que leia um vetor de 50 posições de números inteiros e divida todos os seus elementos pelo menor valor do vetor (diferente de zero). Mostre o vetor após os cálculos. 4. Faça um algoritmo que leia dois vetores (A e B) de 20 posições de caracteres. A seguir, troque o 1º elemento de A com o 20º de B, o 2º de A com o 19º de B, assim por diante, até trocar o 20º de A com o 1º de B. Mostre os vetores antes e depois da troca.
Compartilhar