ESTRUTURA DE DADOS AVANADA Ponteiros Vetores e Matrizes


















![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];](https://slidetodoc.com/presentation_image_h/f3d319951d6ee6dfcefe2bb2c98cd537/image-19.jpg)
![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]](https://slidetodoc.com/presentation_image_h/f3d319951d6ee6dfcefe2bb2c98cd537/image-20.jpg)


![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 <](https://slidetodoc.com/presentation_image_h/f3d319951d6ee6dfcefe2bb2c98cd537/image-23.jpg)

![#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;](https://slidetodoc.com/presentation_image_h/f3d319951d6ee6dfcefe2bb2c98cd537/image-25.jpg)

![#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,](https://slidetodoc.com/presentation_image_h/f3d319951d6ee6dfcefe2bb2c98cd537/image-27.jpg)

![#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];](https://slidetodoc.com/presentation_image_h/f3d319951d6ee6dfcefe2bb2c98cd537/image-29.jpg)



- Slides: 32
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 }
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; 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. . . ) 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 main(void) { fatorial(); return 0; }
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 <= 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 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){ 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 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 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 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 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 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 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: 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 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]; char nome [50]; float notas [60]; double precos [10];
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; 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 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 < 10; i++){ printf("Informe o valor %d: ", i+1); scanf("%f", ¬as[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 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; 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; 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, 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 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]; 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 escalar desses vetores.
#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 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/