32
ESTRUTURA DE DADOS AVANÇADA Ponteiros Vetores e Matrizes Prof. Mário Dantas

Estrutura de Dados Avançada

  • Upload
    dena

  • View
    28

  • Download
    0

Embed Size (px)

DESCRIPTION

Estrutura de Dados Avançada. Ponteiros Vetores e Matrizes Prof. Mário Dantas. Revisão sobre Funções. “Um programa deve ser pensando em termos de funções” Celes (2004); Estrutura de uma Função: tipo_retornado nome_da_função (lista de parâmentros...) { corpo da função }. - PowerPoint PPT Presentation

Citation preview

Page 1: Estrutura de Dados Avançada

ESTRUTURA DE DADOS AVANÇADAPonteiros

Vetores e Matrizes

Prof. Mário Dantas

Page 2: Estrutura de Dados Avançada

REVISÃO SOBRE FUNÇÕES

“Um programa deve ser pensando em termos de funções” Celes (2004);

Estrutura de uma Função:

tipo_retornado nome_da_função (lista de parâmentros...)

{

corpo da função

}

Page 3: Estrutura de Dados Avançada

REVISÃO SOBRE FUNÇÕES tipo_retornado: especifica o tipo de valor que

a instrução return da função devolve;

lista de parâmetros: é uma lista de tipo de valor e nomes de variáveis separados por virgula;

Forma geral : f(tipo nomevar1, tipo nomevar1, ..., tipo nomevarN)

Exemplo:int calcFatorial(int numero)int calcula(int num1, int num2, char op)

Page 4: Estrutura de Dados Avançada

REVISÃO SOBRE FUNÇÕES

Argumentos de Funções: são os valores passados na chamada da função;

Exemplo:

numFatorial = calcFatorial(numero);

calcula(num1, num2, operacao);

printf(“Sua idade é: %d ano(s)”, idade);

printf(“Sua idade é: %d ano(s)”, 20);

Page 5: Estrutura de Dados Avançada

REVISÃO SOBRE FUNÇÕES

Protótipo de Funções:

Forma geral: tipo_retornado nome_da_função (lista de parâmentros...)

Exemplo:int calcFatorial(int numero);

int calcFatorial(int);

int calcula(int num1, int num2, char op);

int calcula(int, int, char);

Page 6: Estrutura de Dados Avançada

REVISÃO SOBRE FUNÇÕES

#include <stdio.h> void fatorial(void);//prototipo int main(void){ fatorial(); return 0;} 

Função que Calcula Fatorial:Função que Calcula Fatorial:

Page 7: Estrutura de Dados Avançada

REVISÃO SOBRE FUNÇÕES

void fatorial (void)//implementação{ int i; int f = 1; int n; printf("Informe um Numero: "); scanf("%d", &n); for (i = 1; i <=n; i++) f*=i; printf("Fatorial = %d\n", f); fflush(stdin); getchar();}

Page 8: Estrutura de Dados Avançada

REVISÃO SOBRE FUNÇÕES#include <stdio.h> int fatorial (int n) { if (n <= 1) return 1; else return n * fatorial(n-1);} int main(void) { int n, f; printf("Informe um Numero: "); scanf("%d", &n); f = fatorial(n); printf("Fatorial = %d\n", f); fflush(stdin); getchar(); return 0;}

Page 9: Estrutura de Dados Avançada

PONTEIROS São variáveis que apontam para outras variáveis; Exemplo:

/*programa que ilustra a utilização de ponteiros*/#include <stdio.h> int main (void){ int a; int *p; p = &a;// se esquecer dará ERRO *p = 2; printf(" %d", a); fflush(stdin); getchar(); return 0;}

Page 10: Estrutura de Dados Avançada

PONTEIROS PROGRAMA QUE SOMA DOIS NÚMEROS

#include <stdio.h> int soma(int a, int b){ int c; c = a + b; return c;} int main(void){ int s; s = soma(3,5) printf("Soma = %d\n", s);

fflush(stdin); getchar(); return 0;}

Page 11: Estrutura de Dados Avançada

PONTEIROS PROGRAMA QUE SOMA E MULTIPLICA DOIS

NÚMEROS

#include <stdio.h> void somaProduto(int a, int b, int c, int d){ c = a + b; d = a * b;}int main(void){ int s, p; somaProduto(3,5, s, p); printf("Soma = %d Produto = %d\n", s, p); fflush(stdin); getchar(); return 0;}

Page 12: Estrutura de Dados Avançada

PONTEIROS

Variáveis do tipo ponteiroPara cada tipo existente, há um

tipo ponteiro capaz de armazenar endereços de memória em que existem valores do tipo correspondentes;

Portanto, a princípio, existe ponteiros para char, int, float e double;

Page 13: Estrutura de Dados Avançada

PONTEIROS

Variáveis do tipo ponteiroA declaração variáveis para os

tipos char, int, float e double é feita como segue:

char *c;int *a;float *b;double *d;

Page 14: Estrutura de Dados Avançada

PONTEIROS Variáveis do tipo ponteiro

A atribuição de valores para ponteiros é feita como segue:

char var1 = ‘g’;int var2 = 125;float var3 = 3.14;double var4 = 6544.6854;

c = &var1;a = &var2;b = &var3;d = &var4;

Page 15: Estrutura de Dados Avançada

PONTEIROS

Variáveis do tipo ponteiroO conteúdo de um ponteiro pode

ser acessado como segue:

int numero;int var2 = 125;int *a;a = &var2;numero = *a;printf(“Conteúdo: %d – Endereço: %d”, *a, a);

Page 16: Estrutura de Dados Avançada

PONTEIROS PROGRAMA QUE SOMA E MULTIPLICA DOIS NÚMEROS

#include <stdio.h> void somaProduto(int a, int b, int *c, int *d){ *c = a + b; *d = a * b;}int main(void){ int s, p; somaProduto(3,5, &s, &p); printf("Soma = %d Produto = %d\n", s, p); fflush(stdin); getchar(); return 0;}

Page 17: Estrutura de Dados Avançada

PONTEIROS

EXERCÍCIOS: Programa que troca o valor de dois números; Fazer uma função que:

receba 3 números como parâmetros: A, B e C; ordene de tal forma que, ao final da função, A

contenha o menor número e C o maior; Fazer um programa que receba 3 números do

usuário, chame a função e mostre os números ordenados.

Escreva uma função CALCULA que: receba como parâmetros duas variáveis inteiras, X e

Y; retorne em X a soma de X e Y; retorne em Y a subtração de X e Y.

Page 18: Estrutura de Dados Avançada

VETORES

Conceito: “é uma coleção de variáveis do mesmo tipo que é referenciada por um nome comum”;

Em C todos os vetores consistem em posições contínuas de memória;

Podem ter uma ou várias dimensões;

Um elemento específico de um vetor pode ser acessado por meio de um índice;

O vetor mais comum em C é a string, que nada mais é que um conjunto de caracteres terminado por um nulo ou ‘/0’;

Page 19: Estrutura de Dados Avançada

VETORES

Formal geral para declarar um vetor: tipo nome_variavel [tamanho];

Exemplos: int x [20]; char nome [50]; float notas [60]; double precos [10];

Page 20: Estrutura de Dados Avançada

VETORES

Atribuição de valores:int vetor[5] = {2, 4, 35, 50, 23};

x [2] = 54;

for (i=0; i < tamanho; i++){scanf(“%d”, &vetor[i]);

Acesso ao conteúdo:y = x [2];

for (i=0; i < tamanho; i++){printf(“%d, ”, vetor[i]);

Page 21: Estrutura de Dados Avançada

VETORES

#include <stdio.h>

int main(void){

int i, n;

float v, media = 0;

printf("Informe o numero de elementos:");

scanf("%d", &n);

for(i=0; i < n; i++){

printf("Informe o valor %d:", i+1);

scanf("%f", &v);

media = media + v;

}

media = media / n;

printf("Valor da media = %0.2f", media);

}

Page 22: Estrutura de Dados Avançada

VETORES

Complicando um pouco... Faça um programa que calcule a média das

notas de 10 alunos e mostre a nota, a média e a diferença entres elas.

Page 23: Estrutura de Dados Avançada

VETORES#include <stdio.h>

int main(void){

int i;

float media, notas[10];

for(i=0; i < 10; i++){

printf("Informe o valor %d:", i+1);

scanf("%f", &notas[i]);

}

media = 0;

for(i=0; i < 10; i++)

media = media + notas[i];

media = media / 10;

for(i=0; i < 10; i++)

printf("nota = %0.2f media = %0.2f, diferenca = %0.2f \n", notas[i], media, (notas[i] - media));

}

Page 24: Estrutura de Dados Avançada

EXERCÍCIOS

Faça um programa que: leia 7 valores inteiros e os armazene em um

vetor. Listar o vetor com as referidas posições de armazenamento de cada valor.

ofereça uma pesquisa onde dado um valor inteiro qualquer de entrada retornar a posição deste valor dentro do vetor, e caso este valor não esteja presente no vetor retornar –1.

Page 25: Estrutura de Dados Avançada

#include <stdio.h>

int main(void){

int i;

int num, vetor[7];

for(i=0; i < 7; i++){

printf("Informe o valor %d: ", i);

scanf("%d", &vetor[i]);

}

printf("Informe o valor a se pesquisado: ");

scanf("%d", &num);

for(i=0; i < 7; i++)

printf("valor = %d posicao = %d \n", vetor[i], i);

for(i=0; i < 7; i++)

if(num==vetor[i])

break;

if (i == 7)

i = -1;

printf("posicao do valor pesquisado = %d \n", i);

}

Page 26: Estrutura de Dados Avançada

EXERCÍCIOS

Faça um programa que dado o vetor [2; 4; 35; 50; 23; 17; 9; 12; 27; 5]:

coloque os valores em ordem crescente dentro do vetor;

mostre o maior valor;

Page 27: Estrutura de Dados Avançada

#include <stdio.h>

int main(void){

int i, j;

int maior, vetor[10] = {2, 4, 35, 50, 23, 17, 9, 12, 27, 5};

for(i=0; i < 10; i++)

for(j=0; j < 10; j++){

if(vetor[j] > vetor[i]){

maior = vetor[j];

vetor[j] = vetor[i];

vetor [i]=maior;

}

}

maior = 0;

for(i=0; i < 10; i++)

if (vetor[i] > maior)

maior = vetor[i];

for(i=0; i < 10; i++)

printf("%d ", vetor[i]);

printf("\nMaior valor: %d ", maior);

}

Page 28: Estrutura de Dados Avançada

EXERCÍCIOS

Deseja-se publicar o número de acertos de cada aluno em uma prova em forma de testes. A prova consta de 30 questões, cada uma com cinco alternativas identificadas por A, B, C, D e E. Para isso são dados: o cartão gabarito; o número de alunos da turma; o cartão de respostas para cada aluno, contendo

o seu número e suas respostas.

Page 29: Estrutura de Dados Avançada

#include <stdio.h>

int main() {

int n, i, aluno, pontos;

char gabarito[5], resp[5];

printf("Digite o numero de alunos: ");

scanf("%d", &n);

printf("Digite o gabarito da prova: ");

for (i = 0; i < 5; i++)

scanf(" %c", &gabarito[i]); /* atencao para o espaco em branco */

for (aluno = 1; aluno <= n; aluno++) {

pontos = 0;

printf("Digite as respostas do aluno %d: ", aluno);

for (i = 0; i < 5; i++) {

scanf(" %c", &resp[i]); /* atencao para o espaco em branco */

if (resp[i] == gabarito[i])

pontos = pontos + 1;

}

printf("O aluno %d fez %d pontos\n", aluno, pontos);

}

}

Page 30: Estrutura de Dados Avançada

EXERCÍCIOS

Dados dois vetores x e y, ambos com n elementos, determinar o produto escalar desses vetores.

Page 31: Estrutura de Dados Avançada

#include <stdio.h>

#define MAX 10

int main() {

int i, n;

float prod, x[MAX], y[MAX];

printf("Digite o tamanho dos vetores: ");

scanf("%d", &n);

printf("Digite os componentes do vetor x: ");

for (i = 0; i < n; i++)

scanf("%f", &x[i]);

printf("Digite os componentes do vetor y: ");

for (i = 0; i < n; i++)

scanf("%f", &y[i]);

prod = 0;

for (i = 0; i < n; i++)

prod = prod + x[i] * y[i];

printf("Produto escalar desses vetores: %f\n", prod);

}

Page 32: Estrutura de Dados Avançada

REFERÊNCIAS

Livros: Capítulos 4, 5, 6 do Livro “C Completo e Total”; Capítulos 4 e 5 do Livro “Introdução a

Estrutura de Dados”;

Sites <http://www.ime.usp.br/~macmulti/exercicios/

vetores/#nota1> acessado em 18 fev 2010

Blog: http://mariodantas.wordpress.com/