Buscar

2015328 32453 UNIDADE+2+ +ESTRUTURAS+DE+DADOS+HOMOGÊNEAS+ +AULA+01

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”, &nota1); 
printf (“Nota do aluno 2: “); 
scanf (“%f”, &nota2); 
printf (“Nota do aluno 3: “); 
scanf (“%f”, &nota3); 
Estruturas de Dados Homogêneas 
Como armazernar 100 notas? 
float nota1, nota2, nota3, /* .... */ nota100; 
 
printf (“Nota do aluno 1: “); 
scanf (“%f”, &nota1); 
printf (“Nota do aluno 2: “); 
scanf (“%f”, &nota2); 
printf (“Nota do aluno 3: “); 
scanf (“%f”, &nota3); 
 
/* .... */ 
 
printf (“Nota do aluno 100: “); 
scanf (“%f”, &nota100); 
 
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)

Continue navegando