1 / 36

Profs.:

Profs.:. José Eustáquio Rangel de Queiroz Roberto Medeiros de Faria. Carga Horária:. 60 h. Introdução à Programação. Capítulo 6. Arrays. Introdução à Programação. Tópicos 6.1 Introdução 6.2 Arrays 6.3 Declaração de Arrays 6.4 Exemplos de Uso de Arrays

Download Presentation

Profs.:

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. Profs.: José Eustáquio Rangel de Queiroz Roberto Medeiros de Faria Carga Horária: 60 h Introdução à Programação Capítulo 6 Arrays

  2. Introdução à Programação Tópicos 6.1 Introdução 6.2 Arrays 6.3 Declaração de Arrays 6.4 Exemplos de Uso de Arrays 6.5 Passagem de Arrays para Funções 6.6 Ordenação Arrays 6.7 Estudo de Caso: Cálculo da Média, Mediana e Moda Usando Arrays 6.8 Busca em Arrays 6.9 Arrays com Vários Subscritos

  3. 6.1 Introdução • Arrays • Estruturas de itens de dados relacionados • Entidade estática  Tamanho constante ao longo de todo o programa • Estruturas de dados dinâmicas  Capítulo 12 • Grupo de locações consecutivas de memória • Mesmo nome e tipo

  4. 6.2 Arrays • Referência a elementos de um array • Nome do array • Número da posição do elemento no array • Formato nome_array[número_posição] • Primeiro elemento  Posição 0 do array • Array cde n elementos • c[ 0], c[ 1] ... c[ n – 1 ]

  5. 6.2 Arrays -45 vet[0] • Exemplo • Nome do array  vet • Número de elementos  12 6 vet[1] 0 vet[2] 72 vet[3] 1543 vet[4] Nome do array Todos os elementos do array têm o mesmo nome,vet -89 vet[5] 0 vet[6] 62 vet[7] -3 vet[8] Posição do elemento Número que indica a posição do elemento no array acompanha o nome, entre colchetes 1 vet[9] 6453 vet[10] 78 vet[11]

  6. 6.2 Arrays • Elementos de array são semelhantes à variáveis normais c[0] = 3; printf("%d", c[0]); • Realização de operações em subscritos. Se x igual a 3 c[5 - 2] == c[3] == c[x]

  7. 6.3 Declaração de Arrays • Declaração de arrays • Nome • Tipo • Número de elementos tipo_array nome_array[número_elementos]; • Exemplos int c[10]; float meu_array[3284]; • Declaração de múltiplos arrays do mesmo tipo • Formato similar para variáveis regulares • Exemplo int b[ 100 ], x[ 27 ];

  8. 6.4 Exemplos de Uso de Arrays • Inicializadores int n[ 5 ] = { 1, 2, 3, 4, 5 }; • Número de inicializadores insuficiente Atribuição de 0 aos elementos mais à direita int n[5] = {0} • Todos os elementos iguais a 0 • Número de inicializadores excessivo Produção de um erro de sintaxe • Arrays em C não têm verificação de limites

  9. 6.4 Exemplos de Uso de Arrays • Omissão do tamanho  Determinação a partir dos inicializadores int n[ ] = { 1, 2, 3, 4, 5 }; • 5 inicializadores Array com 5 elementos

  10. 6.4 Exemplos de Uso de Arrays 01/*Programa de impressão de histograma */ 02#include<stdio.h> 03#defineTAM 10 04 05intmain() 06{ 07intn[TAM] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 }; 08inti, j; 09 10printf( "%s%13s%17s\n", "Elemento", "Valor", "Histograma" ); Elemento Valor Histograma 0 19 ******************* 1 3 *** 2 15 *************** 3 7 ******* 4 11 *********** 5 9 ********* 6 13 ************* 7 5 ***** 8 17 ***************** 9 1 * 11for( i = 0; i <= TAM - 1; i++ ) { 12 printf( "%7d%13d ", i, n[ i ]) ; 13for( j = 1; j <= n[ i ]; j++ )/* imprime uma barra */ 14printf( "%c", '*' ); 15printf( "\n" ); 16} 17return0; 18}

  11. 6.4 Exemplos de Uso de Arrays • Arrays de caracteres • Cadeia de caracteres primeiroArray estático • Possibilidade de inicialização de arrays de caracteres a partir do uso de literais do tipo cadeia de caracteres (string) char string1[ ] = “primeiro”; • Terminação de cadeias de caracteres  NULL(\0) • string1 é realmente composta por 9 elementos char string1[]={'p','r','i','m','e','i','r','o','\0' }; • Possibilidade de acesso a caracteres individuais string1[ 3 ] Caractere ‘m’

  12. 6.4 Exemplos de Uso de Arrays • Nome do array Endereço do array • Uso de & desnecessário scanf( "%s", string2 ); • Leitura de caracteres até a identificação de um espaço em branco • Possibilidade de escrita além do array Atenção e cuidado

  13. 6.4 Exemplos de Uso de Arrays 01 /* Tratamento de arrays de caracteres como cadeias de caracteres */ 02#include<stdio.h> 03 04intmain() 05{ 06charstring1[ 20 ], string2[] = "string literal"; 07inti; 08 09printf(" Entre com um string: "); 10scanf( "%s", string1 ); 11printf( "string1 é: %s\nstring2: é %s\n" 12"string1 com espacos entre caracteres é:\n", string1, string2 ); 13for( i = 0; string1[ i ] != '\0'; i++ ) 14printf( "%c ", string1[ i ] ); 15printf( "\n" ); Entre com um string: Alo todos string1 é: Alo string2 é: string literal string1 com espacos entre caracteres é: A l o 16 return0; 17}

  14. 6.5 Passagem de Arrays para Funções • Passagem de arrays para funções • Passagem de argumentos do tipo array Especificação do nome do array (sem colchetes) int array[24]; funcao(array, 24); • Tamanho do array usualmente passado para a função • Arrays são passados por referência • Nome do array Endereço do primeiro elemento • Conhecimento do espaço de armazenamento do array pela função • Modificação das locações originais de memória

  15. 6.5 Passagem de Arrays para Funções • Passagem de elementos do array • Passagem por valor • Passagem do nome do array com subscrito para a função (e.g. array[3]) • Protótipo da Função void modificaArray(int b[ ],int tamanho); • Nomes de parâmetros  Opcionais no protótipo • int b[ ] Possibilidade de escrita como int [ ] • int tamanhoint

  16. 6.4 Exemplos de Uso de Arrays 01 /* Passagem de arrays e elementos isolados de arrays para funções */ 02#include<stdio.h> 03 #defineTAM 5 04 05voidmodificaArray(int[],int); 06voidmodificaElemento(int); Arrays inteiros passados por referência podem ser modificados 07intmain() 08 { 09inta[TAM] = {0, 1, 2, 3, 4}, i; 10 11printf( "Efeitos da passagem de arrays inteiro em chamadas por referência: " 12“\nOs valores do array original são:\n " 13 for(i = 0; i <= TAM - 1; i++) 14printf( "%3d", a[ i ] ); Elementos de array passados por valor não podem ser modificados 15printf( "\n" ); 16 modificaArray(a, TAM);/* passagem por referência */ 17printf( “Os valores do array modificado são:\n" ); 18for(i = 0; i <= TAM - 1; i++) 19printf( "%3d", a[ i ] ); 20 printf( "\ Efeitos da passagem de elementos em chamadas por valor:" 21 "\nO valor de a[3] é %d\n", a[3] ); 22modificaElemento(a[ 3 ]); 23printf( “O valor de a[3] é %d\n", a[3] ); 24return0; 25 }

  17. 6.4 Exemplos de Uso de Arrays 26void modificaArray(int b[], int tam) 27{ 28 int j; 29 30 for (j = 0; j <= tam - 1; j++) 31 b[ j ] *= 2; 32 } 33 34 void modificaElemento(int e) 35 { 36 printf("Valor em modificaElemento é %d\n", e *= 2); 37 } Efeitos da passagem de arrays inteiros em chamadas por referência: Os valores do array original são: 0 1 2 3 4 Os valores do array modificado são: 0 2 4 6 8 Efeitos da passagem de elementos em chamadas por valor: O valor de a[3] é 6 Valor em modificaElemento é 12 O valor de a[3] é 6

  18. 6.6 Ordenação de Arrays • Ordenação de dados • Aplicação computacional importante • Nos mais diferentes contextos de trabalho, a ordenação de dados é uma atividade imprescindível

  19. Exercício • Série de Fibonacci e número de ouro Phi • Para a sequência de Fibonacci, os quocientes F(n)/F(n-1) tendem para o ‘número de ouro’ .  = 1.618 0339 887... • Calcule a série de Fibonacci até que o módulo da diferença entre duas aproximações de phi seja menor que 0.000001, ou seja .|F(n)/F(n-1) – F(n-1)/F(n-2)| < 0.000001. (Defina e use uma função mod(n) que retorna o módulo de n) • Guarde toda a série em um array e, ao final, mostre: • A série • O último phi = F(n)/F(n-1) • Os números 1/phi e 1 - phi

  20. 6.6 Ordenação de Arrays • Ordenação Borbulhante (Bubble sort/ Sinking sort) • Várias etapas ao longo do array • Comparação de pares sucessivos de elementos • Ordenação crescente (ou valores idênticos)  Posição dos elementos no array inalterada • Ordenação decrescente  Troca de posição dos elementos no array • Repetição do processo de comparação

  21. 6.6 Ordenação de Arrays • Exemplo • Seqüência original  Etapa 1 3 4 2 6 7 3 4 2 6 7 • Etapa 2  Etapa 3 3 4 2 6 7 3 2 4 6 7 • Etapa 4  Etapa 5 3 2 4 6 7 3 2 4 6 7 • Etapa 6 2 3 4 6 7 • Elementos de menor valor “borbulham” para a superfície (topo do array)

  22. 6.7 Estudo de Caso: Cálculo da Média, Mediana e Moda Usando Arrays • Média  Média aritmética • Mediana  Valor central de uma seqüência ordenada • Exemplo 2 3 4 6 7 • Mediana = 4 • Moda  Valor mais freqüente em uma seqüência • Exemplo 1 1 1 2 3 3 4 5 6 5 • Moda = 1

  23. 6.4 Exemplos de Uso de Arrays 01/* Programa para o cálculo da média, mediana, e moda dos dados */ 02#include<stdio.h> 03#defineTAM 99 04 05voidmedia(const int[]); 06voidmediana(int[]); 07voidmoda(int [],const int[]) ; 08voidbolha(int[]); 09voidimprimeArray(const int[]); 10intmain() 11{ 12intfreq[10] = {0}; 13intentrada[TAM] = 14{6, 7, 8, 9, 8, 7, 8, 9, 8, 9, 157, 8, 9, 5, 9, 8, 7, 8, 7, 8, 166, 7, 8, 9, 3, 9, 8, 7, 8, 7, 177, 8, 9, 8, 9, 8, 9, 7, 8, 9, 186, 7, 8, 7, 8, 7, 9, 8, 9, 2, 197, 8, 9, 8, 9, 8, 9, 7, 5, 3, 205, 6, 7, 2, 5, 3, 9, 4, 6, 4, 217, 8, 9, 6, 8, 7, 8, 9, 7, 8, 227, 4, 4, 2, 5, 3, 8, 7, 5, 6, 234, 5, 6, 1, 6, 5, 7, 8, 7 }; 24media(entrada); 25mediana(entrada); 26moda(freq, entrada); 27return0; 28}

  24. 6.4 Exemplos de Uso de Arrays 29voidmedia(constintvalores[]) 30{ 31intj, total = 0; 32 33printf( "%s\n%s\n%s\n", "********", " Média", "********" ); 34for(j = 0; j <= TAM - 1; j++) 35total += valores[j]; 36printf("A média é igual à razão do somatório de todos os itens de dados\n" 37"pelo número de itens de dados ( %d ). O valor médio neste exemplo \n" 38"eh : %d / %d = %.4f\n\n", TAM, total, TAM, (double)total/TAM); 39} 40voidmediana(intvalores[]) 41{ 42printf("\n%s\n%s\n%s\n%s","*********","Mediana",“*********","Array desordenado:"); 43imprimeArray(valores); 44bolha(valores); 45printf("\n\nArray ordenado:"); 46imprimeArray(valores); 47printf( "\n\nA mediana é o elemento %d do array ordenado de %d elemento(s).\n" 48"Neste exemplo, a mediana é %d\n\n", TAM/2, TAM,valores[TAM/2] ); 49} 50 voidmoda(intfreq[],const intvalores[]) 51 { 52 inttaxa, j, h, maior = 0, valorModa = 0; 53 54 printf("\n%s\n%s\n%s\n","********"," Moda","********"); 55 for(taxa = 1; taxa <= 9; taxa++) 56 freq[ taxa ] = 0;

  25. 6.4 Exemplos de Uso de Arrays 57for( j = 0; j <= TAM - 1; j++ ) ++freq[valores[j]]; 58printf("%s%11s%19s\n\n%54s\n%54s\n\n",“Entrada","Frequencia","Histograma", 59"1 1 2 2", "5 0 5 0 5" ); 60for( taxa = 1; taxa <= 9; taxa++ ) { Observe que a subscrição de frequencia[ ] é o valor de um elemento de entrada[ ] (valores[ ]) 61printf( "%8d%11d ", taxa, freq[taxa] ); 62if(freq[taxa] > maior) { 63maior = freq[taxa]; 64valorModa = taxa; 65} Imprime * em função do valor de frequencia[] 66for(h = 1; h <= freq[taxa]; h++) printf("*"); 67printf("\n"); 68} 69printf(“A moda é o valor mais freqüente de uma seqüência.\n" 70“Neste exemplo, a moda é %d, tendo ocorrido %d vezes.\n,valorModa,maior); 71} 72voidbolha(inta[]) 73{ 74intpasso, j, auxi; 75 76for(passo = 1; passo <= TAM - 1; passo++) 77for(j = 0; j <= TAM - 2; j++) 78if(a[j] > a[j+1]){ Ordenação Borbulhante: se há elementos fora de ordem, troca-os. 79auxi = a[j]; 80a[j] = a[j+1]; 81a[j+1] = auxi; 82} 83}

  26. 6.4 Exemplos de Uso de Arrays 84voidimprimeArray(constinta[]) 85{ 86intj; ******** Media ******** A média é igual à razão do somatório de todos os itens de dados pelo número de itens de dados ( %d ). O valor médio neste exemplo eh: 681 / 99 = 6.8788 ********* Mediana ********* Array desordenado: 7 8 9 8 7 8 9 8 9 7 8 9 5 9 8 7 8 7 8 6 7 8 9 3 9 8 7 8 7 7 8 9 8 9 8 9 7 8 9 6 7 8 7 8 7 9 8 9 2 7 8 9 8 9 8 9 7 5 3 5 6 7 2 5 3 9 4 6 4 7 8 9 6 8 7 8 9 7 8 7 4 4 2 5 3 8 7 5 6 4 5 6 1 6 5 7 8 7 Array ordenado: 1 2 2 2 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 A mediana é o elemento 49 do array ordenado de 99 elemento(s). Neste exemplo, a mediana é 7 87 88for(j = 0; j <= TAMANHO - 1; j++) { 89 if(j % 20 == 0) 90printf( "\n" ); 91 printf( "%2d", a[ j ] ); 92} 93}

  27. 6.4 Exemplos de Uso de Arrays ******** Moda ******** Resposta Frequencia Histograma 1 1 2 2 5 0 5 0 5 1 1 * 2 3 *** 3 4 **** 4 5 ***** 5 8 ******** 6 9 ********* 7 23 *********************** 8 27 *************************** 9 19 ******************* A moda é o valor mais freqüente de uma seqüência. Neste exemplo, a moda é 8, tendo ocorrido 27 vezes.

  28. 6.8 Busca em Arrays: Busca Linear e Busca Binária • Pesquisa de valores-chaves em arrays • Busca linear • Simplicidade • Comparação de cada elemento do array com o valor-chave • Utilidade em arrays pequenos e desordenados

  29. 6.8 Busca em Arrays: Busca Linear e Busca Binária • Busca binária • Adequação a arrays ordenados • Comparação do elemento intermediário com a chave • Se iguais Elemento encontrado • Se chave < meio  Busca na primeira metade do array • If chave > meio  Busca na segunda metade do array • Repetição do processo 5

  30. 6.8 Busca em Arrays: Busca Linear e Busca Binária • Busca binária • Grande rapidez do processo • No máximo n passos, onde 2n > N (número de elementos do array) • Exemplo: Array de 30 elementos • Número máximo de passos 5 (25 > 30)

  31. a[ 2 ][ 0 ] a[ 1 ][ 0 ] a[ 0 ][ 0 ] a[ 1 ][ 1 ] a[ 2 ][ 1 ] a[ 0 ][ 2 ] a[ 0 ][ 1 ] a[ 2 ][ 2 ] a[ 0 ][ 3 ] a[ 1 ][ 3 ] a[ 2 ][ 3 ] a[ 1 ][ 2 ] 6.9 Arrays com Vários Subscritos • Arrays com múltiplos subscritos • Tabelas com linhas e colunas (arraym x n) • Matrizes  Especificação da linha e, em seguida, da coluna Coluna 0 Coluna 1 Coluna 2 Coluna 3 Linha 0 Linha 1 Linha 2 Nome do array Subscrito da coluna Subscrito da linha

  32. 1 2 3 4 1 0 3 4 6.9 Arrays com Vários Subscritos • Inicialização • int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } }; • Agrupamento de inicializadores  Linhas entre chaves • Se não forem suficientes  Elementos não especificados ajustados para zero int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } }; • Referência de elementos • Especificação da linha e, em seguida, da coluna printf( "%d", b[ 0 ][ 1 ] );

  33. 6.4 Exemplos de Uso de Arrays 01/* Exemplo de um array com dois subscritos */ 02#include<stdio.h> 03#defineALUNOS 3 04#defineEXAMES 4 05intminimo(constint[][ EXAMES ],int,int); 06intmaximo(const int[][ EXAMES ],int,int); 07doublemedia(constint[], int); Cada linha é um aluno em particular, cada coluna são as notas em um exame. 08voidimprimeArray(constint[][ EXAMES ],int,int); 09intmain() 10{ 11intaluno; 12const intnotas[ALUNOS][EXAMES] = { { 77, 68, 86, 73 }, 13{ 96, 87, 89, 78 }, 14{ 70, 90, 86, 81 } }; 15printf(“O array é:\n"); 16imprimeArray(notas, ALUNOS, EXAMES ); 17printf("\n\nNota menor: %d\nNota maior: %d\n", 18minimo(notas, ALUNOS, EXAMES), 19maximo(notas, ALUNOS, EXAMES)); 20for(aluno = 0; aluno <= ALUNOS - 1; aluno++) 21printf(“Nota média do aluno %d %.2f\n", aluno, media(notas[aluno ], EXAMES)); 22return0; 23}

  34. 6.4 Exemplos de Uso de Arrays 24/* Determinação da menor nota */ 25intminimo(const intnotas[][EXAMES],intpupilos,inttestes) 26{ 27inti, j, menorNota = 100; 28for(i = 0; i <= pupilos - 1; i++) 29for(j = 0; j <= testes - 1; j++) 30if(notas[i][j] < menorNota) 31menorNota = notas[i][j]; 32returnmenorNota; 33} 34/* Determinação da nota máxima */ 35intmaximo(constintnotas[][EXAMES],intpupilos,inttestes) 36{ 37inti, j, maiorNota = 0; 38for(i = 0; i <= pupilos - 1; i++) 39for(j = 0; j <= testes - 1; j++) 40if(notas[i][j] > maiorNota) 41maiorNota = notas[i][j]; 42returnmaiorNota; 43} 44/* Determinação da nota média para um exame particular */ 45double media(constintnotas[],inttestes) 46{ 47inti, total = 0; 48for(i = 0; i <= testes - 1; i++) 49total += notas[ i ]; 50return(double) total/testes; 51}

  35. 6.4 Exemplos de Uso de Arrays 52/* Impressão do array */ 53voidimprimeArray(constintnotas[][ EXAMES ],intpupilos,inttestes) 54{ 55inti, j; 56printf( " [0] [1] [2] [3]" ); 57for( i = 0; i <= pupilos - 1; i++ ) { 58printf( "\nnotas[%d] ", i ); 59for(j = 0; j <= testes - 1; j++) 60printf( "%-5d", notas[ i ][ j ] ); 61} 62} O array é: [0] [1] [2] [3] notas[0] 77 68 86 73 notas[1] 96 87 89 78 notas[2] 70 90 86 81 Menor Nota: 68 Maior Nota: 96 A nota média para o aluno 0 é 76.00 A nota média para o aluno 1 é 87.50 A nota média para o aluno 2 é 81.75

  36. José Eustáquio Rangel de Queiroz Roberto Medeiros de Faria Ulrich Schiel UNIVERSIDADE FEDERAL DE CAMPINA GRANDE CENTRO DE CIÊNCIAS E TECNOLOGIA DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO

More Related