Sunteți pe pagina 1din 31

ESTRUTURA DE DADOS

Ricardo de Almeida (ricalme@hotmail.com)

Agenda
1.

2.
3. 4.

5.
6. 7.

Apresentao Plano de Ensino Conhecendo a Turma Vetores Passagem de Vetores para Funes Exerccios de Fixao Reviso

Apresentao
Ricardo de Almeida ltima atualizao em: 04/03/2012

Atualmente Consultor de Gerenciamento de Projetos na PETROBRAS e Professor nas reas de Gerenciamento de Projetos e Estrutura de Dados na UNIVIX - Faculdade Brasileira. Trabalha a 5 anos na rea de Gerenciamento de Projetos, com nfase em Planejamento, Desenvolvimento e Controle da Produo nos Projetos Industriais, na rea de Explorao e Produo de Petrleo. Explorao e Produo de Petrleo. Atividade desempenhada com base nos conhecimentos adquiridos na MBA de Gerncia de Projetos cursado de 2004 a 2005 no Centro Universitrio Vila Velha - UVV. Tem experincia de 4 anos na rea de Informtica, atuando como Analista de Sistemas e Gerente de Projetos na MSW Consultoria Ltda. Atividade desempenhada com base na graduao de Bacharel em Sistemas de Informao cursado de 1999 a 2002 no Centro Universitrio Vila Velha - UVV. Busca expandir sua rea de atuao para o desenvolvimento de suas habilidades docentes, baseados no curso de Metodologia do Ensino Superior, cursado em 2006 no Centro Universitrio Vila Velha - UVV. Endereo para acessar este CV:
http://lattes.cnpq.br/8281272655007980

Apresentao
Ricardo de Almeida

Em processo de estudo para a Certificao PMP. Especialista em Gerenciamento de Projetos. Bacharel em Sistemas de Informao - UVV. 3 anos de Engenharia Eltrica - UFES. Instrutor de MS Project e Informtica - SENAC

19 anos de experincia nas diversas reas de TI.


Atuao em empresas como VALE, Tribunal de Justia da Bahia e PETROBRAS.

Plano de Ensino

Plano de Ensino

Estrutura de Dados
2012 / 01

Conhecendo a Turma

Em que rea trabalham? Qual a espectativa para com a disciplina? Qual a experincia com a ferramenta DEV C++?

Vetores
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);

Vetores
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);

Vetores
Vetor

Na linguagem C, quando declaramos um vetor (conceito anlogo


ao de declarao de uma varivel simples) devemos informar a dimenso do vetor, isto , o nmero mximo de elementos que poder ser armazenado no espao de memria que reservado ao vetor. Devemos informar o tipo dos valores que sero armazenados no

vetor (por exemplo, int, float ou double). Num vetor, s podemos


armazenar valores de um mesmo tipo.

Vetores
Declarao de um Vetor

<tipo> identificador [<nmero de posies>];


Ex.: float nota[4]; A primeira posio de um vetor tem ndice 0. A ltima posio de um vetor tem ndice. <nmero de posies> - 1 O sistema de execuo no verifica se um dado acesso est dentro dos limites de um vetor.

Vetores
ndices de um Vetor

A primeira posio tem sempre ndice zero (0).


Exemplo: float nota[4];

Vetores
ndices de um Vetor

Acesso a cada elemento feito atravs de indexao da varivel.


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 (invaso de memria) */

Vetores
Declarao de um Vetor

Estrutura de dados definindo um conjunto enumervel.


Exemplos de Declarao : v = vetor de inteiros com 10 elementos.
int v[10]; /* esta declarao reserva um espao de memria para */
/* armazenar 10 valores inteiros e este espao de memria */ /* referenciado pelo nome v */

int a, b[20];
float c[10]; double d[30], e, f[5];

/* declara uma varivel simples em um vetor */


/* declara um vetor */ /* declara dois vetores e uma varivel simples */

Vetores
Exemplo 5.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 5.2: Imprimindo o somatrio deste mesmo vetor.
#include <stdio.h> #include <stdlib.h> int main (void) { int i; float s = 0.0; /* inicializa somatrio 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]; } printf ("%f\n", s); /* para arredondar... use printf ("%.2f\n", s) */ system("PAUSE"); return 0;

Vetores
Alocao de um Vetor

Vetor alocado em posies contguas de memria.


Exemplo: v = vetor de inteiros com 10 elementos. Espao de memria de v =10 vezes Valores inteiros de 4 bytes = 40 bytes.

Vetores
Alocao de um Vetor

Nome do vetor aponta para endereo inicial.


A linguagem C permite aritmtica de ponteiros. Exemplo: v+0 : primeiro elemento de v ... v+9 : ltimo elemento de v O contedo de (v+i) O endereo de v[i] equivalente ao valor equivalente posio (v+i) Exemplo: armazenado em v[i] &v[i] equivalente a (v+i) *(v+i) equivalente a v[i]

Vetores
Exemplo 5.3 de Vetores:

Clculo da mdia e da varincia de um conjunto de 4 nmeros


reais:

Implementao: Valores so lidos e armazenados em um vetor de 4 posies. float v[4];

int i;
Clculos da mdia e da varincia efetuados sobre o conjunto de valores armazenado. float med, var;

Vetores
/* Clculo da mdia e da varincia de 4 nmeros reais */ #include <stdio.h> #include <stdlib.h> int main ( void ) { float v[4]; /* declara vetor com 4 elementos */ float med, var; /* variveis para a mdia e a varincia */ int i; /* varivel usada como ndice do vetor */ /* leitura dos valores */ for (i = 0; i < 4; i++) { scanf("%f", &v[i]); } /* faz ndice variar de 0 a 3 */ /* l cada elemento do vetor */

endereo da i-sima posio de v

Vetores
/* clculo da mdia */ med = 0.0; for (i = 0; i < 4; i++) med = med + v[i]; med = med / 4; /* inicializa mdia com zero */ /* acumula soma dos elementos */ /* calcula a mdia */

/* clculo da varincia */

comando no pertence ao corpo do for

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 varincia */ /* exibio do resultado */

comando no pertence ao corpo do for

printf ( "Media = %f Variancia = %f \n", med, var ); system("PAUSE"); return 0;

Passagem de Vetores para Funes


Passagem de Vetor para funo Consiste em passar o endereo da primeira posio do vetor.

Funo deve ter parmetro do tipo ponteiro para armazenar


valor Passar um vetor para uma funo equivalente a Passar o endereo inicial do vetor. Elementos do vetor no so copiados para a funo. Argumento copiado apenas o endereo do primeiro elemento Chamada a funo passando vetor de int

Funo deve ter um parmetro do tipo int *v

Exemplo 5.4 de Vetores: Vejamos o mesmo clculo da mdia e da varincia, agora com passagem de vetores para funes:

Passagem de Vetores para Funes


/* Clculo da mdia e da varincia de 4 reais (segunda verso) */ #include <stdio.h> #include <stdlib.h> /* Funo para clculo da mdia */ float media (int n, float *v) { int i; float s = 0.0; for (i = 0; i < n; i++) s += v[i]; return s/n; } /* O mesmo que: s = s + v[i] */

Parmetro do tipo ponteiro para float

Passagem de Vetores para Funes


/* Funo para clculo da varincia */ float variancia (int n, float *v, float m) { int i; float s = 0.0; for (i = 0; i < n; i++) s += (v[i] - m) * (v[i] - m); return s/n; } /* s = s + (v[i] - m) * (v[i] - m) */

Parmetro do tipo ponteiro para float

Passagem de Vetores para Funes


int main ( void ) { float v[4]; float med, var; int i; /* leitura dos valores */ for ( i = 0; i < 4; i++ ) scanf("%f", &v[i]); med = media(4, v); var = variancia(4, v, med); printf ( "Media = %f Variancia = %f \n", med, var); system("PAUSE");

Passagem de Vetor como Parmetro para as funes

return 0;
}

Passagem de Vetores para Funes


Passagem de Vetor para funo

Funo pode alterar os valores dos elementos do vetor pois


recebe o endereo do primeiro elemento do vetor (e no os elementos propriamente ditos).

Exemplo 5.5 de Vetores: Com uma funo incrementando todos os elementos de uma unidade, qual ser a resultado final?

Passagem de Vetores para Funes


/* Incrementa elementos de um vetor */ #include <stdio.h> #include <stdlib.h> /* Funo para incrementar o vetor */ void incr_vetor ( int n, int *v ) { int i; for (i = 0; i < n; i++) v[i]++; /* O mesmo que v[i] = v[i] + 1 */ } int main ( void ) { int a[ ] = {1, 3, 5}; incr_vetor (3, a); printf ("%d %d %d \n", a[0], a[1], a[2]); system("PAUSE"); return 0; O resultado ser 2, 4 e 6.

Funo do tipo void no retorna nenhum valor explcito.

Outra forma de declarao de vetor.

Exerccios Prticos de Fixao

Exerccios Prticos de Fixao


1 - Baixe o cdigo final da Reviso Parte II: a) Altere este cdigo para que o programa armazene todas as nota lidas e computadas em um vetor.

2 - Utilizando o exerccio anterior e considerando que a minha turma possui 5 alunos, gostaria que: a) o programa lesse as notas de todos os 5 alunos e calculasse todas as mdias.

Vetores
E caso no soubssemos o tamanho da turma, como resolveramos esta questo? o que veremos na prxima aula deste captulo, quando discutirmos: Alocao Dinmica; Vetores Locais e Funes.

Reviso
Quais pontos foram vistos neste captulo? Vetores.

Passagem de Vetores para Funes.

ESTRUTURA DE DADOS

Ricardo de Almeida (ricalme@hotmail.com)

S-ar putea să vă placă și