1 / 89

Capítulo VI – Variáveis Indexadas

Capítulo VI – Variáveis Indexadas. 6.1 – A necessidade de variáveis indexadas 6.2 – Vetores e matrizes 6.3 – Aplicações com vetores numéricos 6.4 – Aplicações com matrizes numéricas 6.5 – Cadeias de caracteres 6.6 – Aplicações com vetores de cadeias de caracteres.

mabli
Download Presentation

Capítulo VI – Variáveis Indexadas

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. Capítulo VI – Variáveis Indexadas 6.1 – A necessidade de variáveis indexadas 6.2 – Vetores e matrizes 6.3 – Aplicações com vetores numéricos 6.4 – Aplicações com matrizes numéricas 6.5 – Cadeias de caracteres 6.6 – Aplicações com vetores de cadeias de caracteres

  2. 6.3 – Aplicações com Vetores Numéricos 6.3.1 – Ordenação dos valores de um vetor • Colocar em ordem crescente ou decrescente os valores dentro dos elementos de um vetor 5 0 0 16 8 45 1 1 72 2 2 16 5 45 3 3 67 4 4 8 70 67 5 5 6 95 72 6 7 74 74 7 80 70 8 8 9 80 95 9 Vetor desordenado V Vetor ordenado crescentemente V

  3. São inúmeros os métodos para a ordenação de vetores apresentados na literatura • Alguns deles são bem simples, porém ineficientes para vetores muito longos • Outros, para vetores longos, são mais eficientes, porém mais complexos • Nesta seção será apresentado o conhecido método Bubble-Sort(método da bolha), que é dos mais simples • Esse nome é dado porque tem-se a impressão de que os elementos borbulham até chegar à sua posição definitiva

  4. O método Bubble-Sort consiste em: • Percorrer o vetor várias vezes • Durante cada percurso, efetuar troca de posição de elementos adjacentes, caso o elemento da esquerda seja maior que o da direita • Em cada percurso, um elemento atinge sua posição definitiva • Se, durante um dos percursos, não houver trocas, considera-se que o vetor está ordenado

  5. (cursor para percorrer o vetor várias vezes) Exemplo: seja o seguinte vetor e o método em seu início 16 0 45 1 2 72 5 3 8 4 5 67 95 6 7 74 70 8 80 9 V (limitante de i a cada percurso) p i trocou (semáforo que acende quando há troca)

  6. Não trocar 16 0 1 45 72 2 5 3 8 4 5 67 95 6 7 74 70 8 80 9 V i p trocou

  7. Não trocar 16 0 1 45 72 2 5 3 8 4 5 67 95 6 7 74 70 8 80 9 V i p trocou

  8. Trocar 16 0 1 45 72 2 5 3 8 4 5 67 95 6 7 74 70 8 80 9 V i p trocou

  9. Trocar 16 0 1 45 5 2 72 3 8 4 5 67 95 6 7 74 70 8 80 9 V i p trocou

  10. Trocar 16 0 1 45 5 2 8 3 72 4 5 67 95 6 7 74 70 8 80 9 V i p trocou

  11. Não trocar 16 0 1 45 5 2 8 3 67 4 5 72 95 6 7 74 70 8 80 9 V i p trocou

  12. Trocar 16 0 1 45 5 2 8 3 67 4 5 72 95 6 7 74 70 8 80 9 V i p trocou

  13. Trocar 16 0 1 45 5 2 8 3 67 4 5 72 74 6 7 95 70 8 80 9 V i p trocou

  14. Trocar 16 0 1 45 5 2 8 3 67 4 5 72 74 6 7 70 95 8 80 9 V i p trocou

  15. 95 em sua posição definitiva trocou acesa: começar novo percurso retroceder p 16 0 1 45 5 2 8 3 67 4 5 72 74 6 7 70 80 8 95 9 V p A variável cursora ‘i’ não precisa chegar até V[8] Basta chegar até V[7] trocou

  16. Não trocar 16 0 1 45 5 2 8 3 67 4 5 72 74 6 7 70 80 8 95 9 V i p trocou

  17. Trocar 16 0 1 45 5 2 8 3 67 4 5 72 74 6 7 70 80 8 95 9 V i p trocou

  18. Trocar 16 0 1 5 45 2 8 3 67 4 5 72 74 6 7 70 80 8 95 9 V i p trocou

  19. Não trocar 16 0 1 5 8 2 45 3 67 4 5 72 74 6 7 70 80 8 95 9 V i p trocou

  20. Não trocar 16 0 1 5 8 2 45 3 67 4 5 72 74 6 7 70 80 8 95 9 V i p trocou

  21. Não trocar 16 0 1 5 8 2 45 3 67 4 5 72 74 6 7 70 80 8 95 9 V i p trocou

  22. Trocar 16 0 1 5 8 2 45 3 67 4 5 72 74 6 7 70 80 8 95 9 V i p trocou

  23. Não trocar 16 0 1 5 8 2 45 3 67 4 5 72 70 6 7 74 80 8 95 9 V i p trocou

  24. 80 em sua posição definitiva trocou acesa: iniciar novo percurso retroceder p 0 16 5 1 2 8 3 45 4 67 5 72 70 6 74 7 80 8 9 95 V p trocou

  25. Trocar 16 0 1 5 8 2 45 3 67 4 5 72 70 6 7 74 80 8 95 9 V i p trocou

  26. Trocar 5 0 1 16 8 2 45 3 67 4 5 72 70 6 7 74 80 8 95 9 V i p trocou

  27. Não trocar 5 0 1 8 16 2 45 3 67 4 5 72 70 6 7 74 80 8 95 9 V i p trocou

  28. Não trocar 5 0 1 8 16 2 45 3 67 4 5 72 70 6 7 74 80 8 95 9 V i p trocou

  29. Não trocar 5 0 1 8 16 2 45 3 67 4 5 72 70 6 7 74 80 8 95 9 V i p trocou

  30. Trocar 5 0 1 8 16 2 45 3 67 4 5 72 70 6 7 74 80 8 95 9 V i p trocou

  31. Não trocar 5 0 1 8 16 2 45 3 67 4 5 70 72 6 7 74 80 8 95 9 V i p trocou

  32. 74 em sua posição definitiva trocou acesa: novo percurso retroceder p 0 5 8 1 2 16 3 45 4 67 5 70 72 6 74 7 80 8 9 95 V p trocou

  33. Não trocar 5 0 1 8 16 2 45 3 67 4 5 70 72 6 7 74 80 8 95 9 V i p trocou

  34. Não trocar 5 0 1 8 16 2 45 3 67 4 5 70 72 6 7 74 80 8 95 9 V i p trocou

  35. Não trocar 5 0 1 8 16 2 45 3 67 4 5 70 72 6 7 74 80 8 95 9 V i p trocou

  36. Não trocar 5 0 1 8 16 2 45 3 67 4 5 70 72 6 7 74 80 8 95 9 V i p trocou

  37. Não trocar 5 0 1 8 16 2 45 3 67 4 5 70 72 6 7 74 80 8 95 9 V i p trocou

  38. Não trocar 5 0 1 8 16 2 45 3 67 4 5 70 72 6 7 74 80 8 95 9 V i p trocou

  39. 72 em sua posição definitiva trocou apagada: vetor ordenado 0 5 8 1 2 16 3 45 4 67 5 70 72 6 74 7 80 8 9 95 V p trocou

  40. 5 0 1 8 2 16 3 45 67 4 5 70 72 6 7 74 80 8 95 9 V p Se, em todos os percursos, a lâmpada acender, o processo termina quando p chegar a -1

  41. Seja este trecho abreviado para Testar e Trocar (i, i+1); • O teste da necessidade de troca entre dois elementos adjacentes pode ser feito pelo seguinte trecho: if (V[i] > V[i+1]) { aux = V[i]; V[i] = V[i+1]; V[i+1] = aux; trocou = true; } • Um percurso genérico da variável i pode ser expresso por: for (trocou = false, i = 0; i <= p; i++) Testar e Trocar (i, i+1); ‘aux’ é uma variável auxiliar para realização de troca de conteúdo entre variáveis Seja este trecho abreviado para Percorrer até (p);

  42. Percorrer até (p); • for (trocou = false, i = 0; i <= p; i++) Testar e Trocar (i, i+1); • Sendo n, o número de elementos do vetor, os diversos percursos necessários para a ordenação podem ser realizados por for (trocou = true, p = n-2; p >= 0 && trocou == true; p--) Percorrer até (p); • A seguir o programa do Bubble-Sort completo

  43. #include <stdio.h> #include <stdlib.h> /* Criacao do tipo logic e suas constantes */ typedefcharlogic; constlogicfalse = 0, true = 1; /* Criacao do tipo vetor */ typedefint vetor[50]; /* Cabecalho e declarações locais */ int main () { int n, i, p, aux; logic trocou; vetor V;

  44. /* Leitura do vetor a ser ordenado */ printf ("Ordenacao de numeros pelo Bubble-Sort\n\n"); printf ("\tNumero de elementos: "); scanf ("%d",&n); printf ("\n\tElementos: "); for (i = 0; i < n; i++) scanf ("%d", &V[i]); /* Escrita do vetor desordenado */ printf ("\n\nVetor desordenado:\n\n"); for (i = 0; i < n; i++) printf ("%4d", V[i]);

  45. /* Aplicação do metodobubble-sort */ for (trocou = true, p = n-2; p >= 0 && trocou == true; p--) for (trocou = false, i = 0; i <= p; i++) if (V[i] > V[i+1]) { aux = V[i]; V[i] = V[i+1]; V[i+1] = aux; trocou = true; } /* Escrita do vetor ordenado */ printf ("\n\nVetor ordenado:\n\n"); for (i = 0; i < n; i++) printf ("%4d", V[i]);

  46. /* Fechamento da tela */ printf ("\n\n"); system ("pause"); return 0; } Ordenacao de numeros pelo Bubble-Sort Numero de elementos: 10 Elementos: 16 45 72 5 8 67 95 74 70 80 Vetor desordenado: 16 45 72 5 8 67 95 74 70 80 Vetor ordenado: 5 8 16 45 67 70 72 74 80 95 Digite algo para encerrar: Resultado de uma execução

  47. 6.3.2 – Procura de valores em um vetor • Outro problema muito conhecido: procurar um dado valor entre os elementos de um vetor • Quando o vetor não está ordenado, deve-se percorrê-lo sequencialmente, comparando os valores de seus elementos com o valor procurado • A procura termina quando o valor for encontrado, ou quando se chegar ao final do vetor • Esse tipo de procura é denominado procura sequencial

  48. n 10 Exemplo: seja o seguinte vetor desordenado: • Seja a procura do valor 67: • Percorre-se o vetor com um cursor i, de V[0] em diante • Quando i = 5, V[i] = V[5] = 67 • Então o valor procurado foi encontrado na posição 5 do vetor V i 16 0 1 45 72 2 5 3 4 8 5 67 6 95 7 74 8 70 9 80 Número de elementos do vetor V

  49. n 10 • Seja a procura do valor 50: • Percorre-se o vetor com um cursor i, de V[0] em diante • Para 0 ≤ i ≤ n-1 (n = 10), V[i] ≠ 50 • Então o valor procurado não foi encontrado no vetor V i 16 0 1 45 72 2 3 5 8 4 67 5 95 6 74 7 70 8 9 80 V

  50. n i num 67 10 • Trecho de programa que realiza a procura sequencial: printf ("Numero procurado: "); scanf ("%d", &num); i = 0; while (i < n && V[i] != num) i++; if (i < n) printf ("\n\t%d estah na posicao %d do vetor\n\n", num, i); else printf ("\n\t%d naoestah no vetor\n\n",num); 16 0 45 1 2 72 5 3 4 8 5 67 95 6 74 7 70 8 9 80 Caso ‘n’ seja muito grande e ‘num’ não esteja em ‘V’, o tempo de procura é longo É proporcional a ‘n’ V

More Related