ESTRUTURA DE DADOS AVANADA Ponteiros Vetores e Matrizes

  • Slides: 32
Download presentation
ESTRUTURA DE DADOS AVANÇADA Ponteiros Vetores e Matrizes Prof. Mário Dantas

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

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 }

REVISÃO SOBRE FUNÇÕES tipo_retornado: especifica o tipo de valor que a instrução return da

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 nomevar 1, . . . , tipo nomevar. N) Exemplo: int calc. Fatorial(int numero) int calcula(int num 1, int num 2, char op)

REVISÃO SOBRE FUNÇÕES Argumentos de Funções: são os valores passados na chamada da função;

REVISÃO SOBRE FUNÇÕES Argumentos de Funções: são os valores passados na chamada da função; Exemplo: num. Fatorial = calc. Fatorial(numero); calcula(num 1, num 2, operacao); printf(“Sua idade é: %d ano(s)”, idade); printf(“Sua idade é: %d ano(s)”, 20);

REVISÃO SOBRE FUNÇÕES Protótipo de Funções: Forma geral: tipo_retornado nome_da_função (lista de parâmentros. .

REVISÃO SOBRE FUNÇÕES Protótipo de Funções: Forma geral: tipo_retornado nome_da_função (lista de parâmentros. . . ) Exemplo: int calc. Fatorial(int numero); int calc. Fatorial(int); int calcula(int num 1, int num 2, char op); int calcula(int, char);

REVISÃO SOBRE FUNÇÕES Função que Calcula Fatorial: #include <stdio. h> void fatorial(void); //prototipo int

REVISÃO SOBRE FUNÇÕES Função que Calcula Fatorial: #include <stdio. h> void fatorial(void); //prototipo int main(void) { fatorial(); return 0; }

REVISÃO SOBRE FUNÇÕES void fatorial (void)//implementação { int i; int f = 1; int

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 = %dn", f); fflush(stdin); getchar(); }

REVISÃO SOBRE FUNÇÕES #include <stdio. h> int fatorial (int n) { if (n <=

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 = %dn", f); fflush(stdin); getchar(); return 0; }

PONTEIROS São variáveis que apontam para outras variáveis; Exemplo: /*programa que ilustra a utilização

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

PONTEIROS PROGRAMA QUE SOMA DOIS NÚMEROS #include <stdio. h> int soma(int a, int b){

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 = %dn", s); fflush(stdin); getchar(); return 0; }

PONTEIROS PROGRAMA QUE SOMA E MULTIPLICA DOIS NÚMEROS #include <stdio. h> void soma. Produto(int

PONTEIROS PROGRAMA QUE SOMA E MULTIPLICA DOIS NÚMEROS #include <stdio. h> void soma. Produto(int a, int b, int c, int d){ c = a + b; d = a * b; } int main(void){ int s, p; soma. Produto(3, 5, s, p); printf("Soma = %d Produto = %dn", s, p); fflush(stdin); getchar(); return 0; }

PONTEIROS Variáveis Para do tipo ponteiro cada tipo existente, há um tipo ponteiro capaz

PONTEIROS Variáveis Para do tipo ponteiro 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;

PONTEIROS Variáveis do tipo ponteiro A declaração variáveis para os tipos char, int, float

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;

PONTEIROS Variáveis do tipo ponteiro A atribuição de valores para ponteiros como segue: char

PONTEIROS Variáveis do tipo ponteiro A atribuição de valores para ponteiros como segue: char var 1 = ‘g’; int var 2 = 125; float var 3 = 3. 14; double var 4 = 6544. 6854; c = &var 1; a = &var 2; b = &var 3; d = &var 4; é feita

PONTEIROS Variáveis do tipo ponteiro O conteúdo de um ponteiro pode ser acessado como

PONTEIROS Variáveis do tipo ponteiro O conteúdo de um ponteiro pode ser acessado como segue: int numero; int var 2 = 125; int *a; a = &var 2; numero = *a; printf(“Conteúdo: %d – Endereço: %d”, *a, a);

PONTEIROS PROGRAMA QUE SOMA E MULTIPLICA DOIS NÚMEROS #include <stdio. h> void soma. Produto(int

PONTEIROS PROGRAMA QUE SOMA E MULTIPLICA DOIS NÚMEROS #include <stdio. h> void soma. Produto(int a, int b, int *c, int *d){ *c = a + b; *d = a * b; } int main(void){ int s, p; soma. Produto(3, 5, &s, &p); printf("Soma = %d Produto = %dn", s, p); fflush(stdin); getchar(); return 0; }

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

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.

VETORES Conceito: “é uma coleção de variáveis do mesmo tipo que é referenciada por

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

VETORES Formal geral para declarar um vetor: tipo nome_variavel [tamanho]; Exemplos: int x [20];

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

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

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

VETORES #include <stdio. h> int main(void){ int i, n; float v, media = 0;

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. 2 f", media); }

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

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.

VETORES #include <stdio. h> int main(void){ int i; float media, notas[10]; for(i=0; i <

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. 2 f media = %0. 2 f, diferenca = %0. 2 f n", notas[i], media, (notas[i] - media)); }

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

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.

#include <stdio. h> int main(void){ int i; int num, vetor[7]; for(i=0; i < 7;

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

EXERCÍCIOS Faça um programa que dado o vetor [2; 4; 35; 50; 23; 17;

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;

#include <stdio. h> int main(void){ int i, j; int maior, vetor[10] = {2, 4,

#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("n. Maior valor: %d ", maior); }

EXERCÍCIOS Deseja-se publicar o número de acertos de cada aluno em uma prova em

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.

#include <stdio. h> int main() { int n, i, aluno, pontos; char gabarito[5], resp[5];

#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 pontosn", aluno, pontos); } }

EXERCÍCIOS Dados dois vetores x e y, ambos com n elementos, determinar o produto

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

#include <stdio. h> #define MAX 10 int main() { int i, n; float prod,

#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: %fn", prod); }

REFERÊNCIAS Livros: Capítulos 4, 5, 6 do Livro “C Completo e Total”; Capítulos 4

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/#n ota 1> acessado em 18 fev 2010 Blog: http: //mariodantas. wordpress. com/