Baixe o app para aproveitar ainda mais
Prévia do material em texto
ALGORITMOS II Ricardo de Almeida (ricardo.almeida@univix.edu.br) 1. Relembrando... 2. Estruturas de Dados Homogêneas 3. Variáveis Indexadas Unidimensionais (Vetores) 4. Declaração de Vetor 5. Índice de Vetor 6. Alocação de Vetor 7. Exercícios de Fixação 8. Revisão Agenda Quais pontos foram vistos na unidade anterior? • Estruturas Sequenciais • Estruturas de Decisão • Estruturas de Repetição Relembrando... Estruturas de Dados Homogêneas A declaração de variáveis, uma a uma, é suficiente para a codificação algorítmica da solução de uma ampla gama de problemas, mas é insuficiente para resolver um grande número de problemas computacionais. Imagine, por exemplo, como faríamos para construir um algoritmo, que lesse os nome de 500 pessoas e imprimisse um relatório destes mesmos nomes, mas ordenados alfabeticamente. Não seria uma tarefa simples, pois teríamos que definir 500 variáveis do tipo literal, como é mostrado a seguir: Estruturas de Dados Homogêneas Estruturas de Dados Homogêneas Vejamos um algoritmo para ler e imprimir 500 nomes: // Exemplo 2.1 – Algoritmo Inviável ALGORITMO "inviavel" // Função : Estrutura Inviável // Autor : Prof. Ricardo VAR nome1, nome2, nome3, nome4, ..., nome499, nome500: CARACTER INICIO LEIA (nome1, nome2, ..., nome500) ESCREVAL (nome1) ESCREVAL (nome2) . . . ESCREVAL (nome500) FIMALGORITMO Estruturas de Dados Homogêneas Como armazernar 3 notas? float nota1, nota2, nota3; printf (“Nota do aluno 1: “); scanf (“%f”, ¬a1); printf (“Nota do aluno 2: “); scanf (“%f”, ¬a2); printf (“Nota do aluno 3: “); scanf (“%f”, ¬a3); Estruturas de Dados Homogêneas Como armazernar 100 notas? float nota1, nota2, nota3, /* .... */ nota100; printf (“Nota do aluno 1: “); scanf (“%f”, ¬a1); printf (“Nota do aluno 2: “); scanf (“%f”, ¬a2); printf (“Nota do aluno 3: “); scanf (“%f”, ¬a3); /* .... */ printf (“Nota do aluno 100: “); scanf (“%f”, ¬a100); Estruturas de Dados Homogêneas Estruturas de Dados Homogêneas Considere o tamanho do algoritmo, e o trabalho braçal necessário para construí-lo. Para resolver problemas como este, e outros, existem as variáveis indexadas. A declaração de uma variável indexada corresponde, na verdade, à declaração de várias variáveis cujo identificador difere apenas por um índice. O índice corresponde a um valor numérico começando por 0. Cada variável indexada pode receber valores no decorrer do algoritmo como se fosse uma variável comum. Estruturas de Dados Homogêneas Variáveis Indexadas Unidimensionais (Vetores) As estruturas de dados homogêneas que estudaremos são os vetores também conhecidos como arranjos. Vetores nada mais são que matrizes. Matriz (Álgebra) é Arranjo retangular de elementos de um conjunto. É importante ressaltar que vetores de qualquer dimensão são caracterizados por terem todos os seus elementos pertencentes ao mesmo tipo de dado. Vetores Vetores Vetor Na linguagem C, quando declaramos um vetor (conceito análogo ao de declaração de uma variável simples) devemos informar a dimensão do vetor, isto é, o número máximo de elementos que poderá ser armazenado no espaço de memória que é reservado ao vetor. Devemos informar o tipo dos valores que serão armazenados no vetor (por exemplo, int, float ou double). Num vetor, só podemos armazenar valores de um mesmo tipo. Vetores Declaração de Vetor <tipo> identificador [<número de posições>]; Ex.: float nota[4]; • A primeira posição de um vetor tem índice 0. • A última posição de um vetor tem índice. <número de posições> - 1 • O sistema de execução não verifica se um dado acesso está dentro dos limites de um vetor. Vetores Índices de Vetor • A primeira posição tem sempre índice zero (0). • Exemplo: float nota[4]; Vetores Índices de Vetor • Acesso a cada elemento é feito através de indexação da variável. • Exemplo: • v = vetor de inteiros com 10 elementos. v[0] = 0; /* acessa o primeiro elemento de v */ ... v[9] = 9; /* acessa o último elemento de v */ v[10] =10; /* ERRADO (invasão de memória) */ Vetores Declaração de Vetor • Estrutura de dados definindo um conjunto enumerável. • Exemplos de Declaração : • v = vetor de inteiros com 10 elementos. int v[10]; /* esta declaração reserva um espaço de memória para */ /* armazenar 10 valores inteiros e este espaço de memória */ /* é referenciado pelo nome v */ int a, b[20]; /* declara uma variável simples em um vetor */ float c[10]; /* declara um vetor */ double d[30], e, f[5]; /* declara dois vetores e uma variável simples */ Vetores Exemplo 2.1: Imprimindo os valores armazenados de um vetor. #include <stdio.h> #include <stdlib.h> int main (void) { int i; float v[6] = {2.3, 5.4, 1.0, 7.6, 8.8, 3.9}; for (i=0; i<6; i++) { printf ("%f\n", v[i]); } system("PAUSE"); return 0; } Vetores Exemplo 2.2: Inserindo os valores em um vetor. #include <stdio.h> #include <stdlib.h> int main (void) { int i; float v[6]; for (i=0; i<6; i++) { printf("Digite um numero: "); scanf("%f", &v[i]); } system("PAUSE"); return 0; } Vetores Exemplo 2.3: Imprimindo o somatório deste mesmo vetor. #include <stdio.h> #include <stdlib.h> int main (void) { int i; float s = 0.0; /* inicializa somatório com zero */ float v[6] = {2.3, 5.4, 1.0, 7.6, 8.8, 3.9}; for (i=0; i<6; i++) { s = s + v[i]; } /* para arredondar... use printf ("%.2f\n", s) */ printf ("%f\n", s); system("PAUSE"); return 0; } Vetores Alocação de Vetor • Vetor é alocado em posições contíguas de memória. • Exemplo: • v = vetor de inteiros com 10 elementos. • Espaço de memória de v =10 vezes • Valores inteiros de 4 bytes = 40 bytes. Vetores Alocação de Vetor • Nome do vetor aponta para endereço inicial. • A linguagem C permite aritmética de ponteiros. • Exemplo: • v+0 : primeiro elemento de v ... • v+9 : último elemento de v • Exemplo: • &v[i] é equivalente a (v+i) • (v+i) é equivalente a v[i] O endereço de v[i] é equivalente à posição (v+i) O conteúdo de (v+i) é equivalente ao valor armazenado em v[i] Vetores Exemplo 2.4 de Vetores: • Cálculo da média e da variância de um conjunto de 4 números reais: Implementação: • Valores são lidos e armazenados em um vetor de 4 posições. float v[4]; int i; • Cálculos da média e da variância efetuados sobre o conjunto de valores armazenado. float med, var; Vetores /* Cálculo da média e da variância de 4 números reais */ #include <stdio.h> #include <stdlib.h> int main ( void ) { float v[4]; /* declara vetor com 4 elementos */ float med, var; /* variáveis para a média e a variância */ int i; /* variável usada como índice do vetor */ /* leitura dos valores */ for (i = 0; i < 4; i++) /* faz índice variar de 0 a 3 */ { scanf("%f", &v[i]); /* lê cada elemento do vetor */ } endereço da i-ésima posição de v Vetores /* cálculo da média */ med = 0.0;/* inicializa média com zero */ for (i = 0; i < 4; i++) med = med + v[i]; /* acumula soma dos elementos */ med = med / 4; /* calcula a média */ /* cálculo da variância */ var = 0.0; /* inicializa com zero */ for ( i = 0; i < 4; i++ ) var = var + (v[i] - med) * (v[i] - med); /* acumula */ var = var / 4; /* calcula a variância */ /* exibição do resultado */ printf ( "Media = %.2f e Variancia = %.2f \n", med, var ); system("PAUSE"); return 0; } comando não pertence ao corpo do “for” comando não pertence ao corpo do “for” Exercícios Práticos de Fixação Exercícios Práticos de Fixação Vetores E como seria trabalharmos com informações bidimensionais? É o que veremos na próxima aula deste capítulo, quando discutirmos: • Variáveis Indexadas Bidimensionais (Matrizes) • Declaração de Matriz • Índices de Matriz • Inicialização de Matriz • Alocação de Matriz Revisão Quais pontos foram vistos nesta aula? • Estruturas de Dados Homogêneas • Variáveis Indexadas Unidimensionais (Vetores) • Declaração de Vetor • Índice de Vetor • Alocação de Vetor ALGORITMOS II Ricardo de Almeida (ricardo.almeida@univix.edu.br)
Compartilhar