1 / 32

Estrutura de Dados Avançada

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 }.

dena
Download Presentation

Estrutura de Dados Avançada

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Estrutura de Dados Avançada Ponteiros Vetores e Matrizes Prof. Mário Dantas

  2. 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 }

  3. 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: intcalcFatorial(intnumero) int calcula(intnum1, intnum2, charop)

  4. 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);

  5. 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(intnumero); int calcFatorial(int); int calcula(int num1, int num2, char op); int calcula(int, int, char);

  6. Revisão sobre Funções Função que Calcula Fatorial: #include <stdio.h> void fatorial(void);//prototipo intmain(void) { fatorial(); return 0; }

  7. 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(); • }

  8. Revisão sobre Funções #include <stdio.h> int fatorial (int n) { if (n <= 1) return 1; else return n * fatorial(n-1); } intmain(void) { int n, f; printf("Informe um Numero: "); scanf("%d", &n); f = fatorial(n); printf("Fatorial = %d\n", f); fflush(stdin); getchar(); return 0; }

  9. Ponteiros • São variáveis que apontam para outras variáveis; • Exemplo: /*programa que ilustra a utilização de ponteiros*/ #include <stdio.h> intmain (void) { int a; int *p; p = &a;// se esquecer dará ERRO *p = 2; printf(" %d", a); fflush(stdin); getchar(); return 0; }

  10. Ponteiros • PROGRAMA QUE SOMA DOIS NÚMEROS #include <stdio.h> int soma(int a, int b){ int c; c = a + b; return c; }  intmain(void){ int s; s = soma(3,5) printf("Soma = %d\n", s); fflush(stdin); getchar(); return 0; }

  11. Ponteiros • PROGRAMA QUE SOMA E MULTIPLICA DOIS NÚMEROS #include <stdio.h> voidsomaProduto(int a, int b, int c, int d){ c = a + b; d = a * b; } intmain(void){ int s, p; somaProduto(3,5, s, p); printf("Soma = %d Produto = %d\n", s, p); fflush(stdin); getchar(); return 0; }

  12. Ponteiros • Variáveis do tipo ponteiro • Para 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;

  13. Ponteiros • Variáveis do tipo ponteiro • A declaração variáveis para os tipos char, int, float e double é feita como segue: char *c; int *a; float *b; double *d;

  14. 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;

  15. Ponteiros • Variáveis do tipo ponteiro • O 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);

  16. Ponteiros • PROGRAMA QUE SOMA E MULTIPLICA DOIS NÚMEROS #include <stdio.h> voidsomaProduto(int a, int b, int *c, int *d){ *c = a + b; *d = a * b; } intmain(void){ int s, p; somaProduto(3,5, &s, &p); printf("Soma = %d Produto = %d\n", s, p); fflush(stdin); getchar(); return 0; }

  17. 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.

  18. 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’;

  19. Vetores • Formal geral para declarar um vetor: • tipo nome_variavel [tamanho]; • Exemplos: • int x [20]; • char nome [50]; • float notas [60]; • double precos [10];

  20. 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]);

  21. 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); }

  22. 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.

  23. 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)); }

  24. 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.

  25. #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); }

  26. 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;

  27. #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); }

  28. 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.

  29. #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); } }

  30. Exercícios • Dados dois vetores x e y, ambos com n elementos, determinar o produto escalar desses vetores.

  31. #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); }

  32. 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/

More Related