Kein Folientitel - PowerPoint PPT Presentation

1 / 35
About This Presentation
Title:

Kein Folientitel

Description:

Profs.: Jos Eust quio Rangel de Queiroz Roberto Faria de Medeiros Carga Hor ria: 60 h – PowerPoint PPT presentation

Number of Views:38
Avg rating:3.0/5.0
Slides: 36
Provided by: GerhardM4
Category:
Tags: folientitel | kein | sort

less

Transcript and Presenter's Notes

Title: Kein Folientitel


1
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_arraynúmero_posição
  • Primeiro elemento ? Posição 0 do array
  • Array c de n elementos
  • c 0, c 1 ... c n 1

5
6.2 Arrays
  • Exemplo
  • Nome do array ? vet
  • Número de elementos ? 12

-45
vet0
6
vet1
0
vet2
72
vet3
1543
vet4
Nome do array Todos os elementos do array têm o
mesmo nome, vet
-89
vet5
0
vet6
62
vet7
-3
vet8
Posição do elemento Número que indica a posição
do elemento no array acompanha o nome, entre
colchetes
1
vet9
6453
vet10
78
vet11
6
6.2 Arrays
  • Elementos de array são semelhantes à variáveis
    normais
  • c0 3
  • printf("d", c0)
  • Realização de operações em subscritos. Se x
    igual a 3
  • c5 - 2 c3 cx

7
6.3 Declaração de Arrays
  • Declaração de arrays
  • Nome
  • Tipo
  • Número de elementos
  • tipo_array nome_arraynúmero_elementos
  • Exemplos
  • int c10
  • float meu_array3284
  • Declaração de múltiplos arrays do mesmo tipo
  • Formato similar para variáveis regulares

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 n5 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 ltstdio.hgt
03 define TAM 10
04
05 int main()
06
07 int nTAM 19, 3, 15, 7, 11, 9, 13, 5, 17,
1
08 int i, j
09
10 printf( "s13s17s\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
11 for ( i 0 i lt TAM - 1 i )
12 printf( "7d13d ", i, n i )
13 for ( j 1 j lt n i j ) / imprime
uma barra /
14 printf( "c", '' )
15 printf( "\n" )
16
17 return 0
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 ltstdio.hgt
03
04 int main()
05
06 char string1 20 , string2 "string
literal"
07 int i
08
09 printf(" Entre com um string ")
10 scanf( "s", string1 )
11 printf( "string1 is s\nstring2 is s\n"
12 "string1 com espacos entre caracteres é\n",
string1, string2 )
13 for ( i 0 string1 i ! '\0' i )
14 printf( "c ", string1 i )
15 printf( "\n" )
Entre com um string Alo todos string1 é
Alo string2 é string literal string1 com espacos
entre caracteres é A l o
16 return 0
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 Array24
  • Função(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. Array3)
  • Protótipo da Função
  • void modificaArray(int b,int tamanho)
  • Nomes de parâmettros ? 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 ltstdio.hgt
03 define TAM 5
04
05 void modificaArray(int , int)
06 void modificaElemento(int)
Arrays inteiros passados por referência podem ser
modificados
07 int main()
08
09 int aTAM 0, 1, 2, 3, 4, i
10
11 printf( "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 lt TAM - 1 i)
14 printf( "3d", a i )
Elementos de array passados por valor não podem
ser modificados
15 printf( "\n" )
16 modificaArray(a, TAM) / passagem por
referência /
17 printf( Os valores do array modificado
são\n" )
18 for (i 0 i lt TAM - 1 i)
19 printf( "3d", a i )
20 printf( "\ Efeitos da passagem de elementos em
chamadas por valor"
21 "\nO valor de a3 é d\n", a3 )
22 modificaElemento(a 3 )
23 printf( O valor de a3 é d\n", a3 )
24 return 0
25
17
6.4 Exemplos de Uso de Arrays
26 void modificaArray(int b, int tam)
27
28 int j
29
30 for (j 0 j lt 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 a3 é 6 Valor em modificaElemento é
12 O valor de a3 é 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
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

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

21
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

22
6.4 Exemplos de Uso de Arrays
01 / Programa para o cálculo da média, mediana,
e moda dos dados /
02 include ltstdio.hgt
03 define TAM 99
04
05 void media(const int )
06 void mediana(int )
07 void moda(int , const int )
08 void bolha(int )
09 void imprimeArray(const int )
10 int main()
11
12 int freq10 0
13 int entradaTAM
14 6, 7, 8, 9, 8, 7, 8, 9, 8, 9,
15 7, 8, 9, 5, 9, 8, 7, 8, 7, 8,
16 6, 7, 8, 9, 3, 9, 8, 7, 8, 7,
17 7, 8, 9, 8, 9, 8, 9, 7, 8, 9,
18 6, 7, 8, 7, 8, 7, 9, 8, 9, 2,
19 7, 8, 9, 8, 9, 8, 9, 7, 5, 3,
20 5, 6, 7, 2, 5, 3, 9, 4, 6, 4,
21 7, 8, 9, 6, 8, 7, 8, 9, 7, 8,
22 7, 4, 4, 2, 5, 3, 8, 7, 5, 6,
23 4, 5, 6, 1, 6, 5, 7, 8, 7
24 media(entrada)
25 mediana(entrada)
26 moda(freq, entrada)
27 return 0
28
23
6.4 Exemplos de Uso de Arrays
29 void media(const int valores)
30
31 int j, total 0
32
33 printf( "s\ns\ns\n", "", " Média",
"" )
34 for (j 0 j lt TAM - 1 j)
35 total valoresj
36 printf("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
40 void mediana(int valores)
41
42 printf("\ns\ns\ns\ns","","Mediana"
,","Array desordenado")
43 imprimeArray(valores)
44 bolha(valores)
45 printf("\n\nArray ordenado")
46 imprimeArray(valores)
47 printf( "\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,valoresTAM/2 )
49
50 void moda(int freq, const int valores)
51
52 int taxa, j, h, maior 0, valorModa 0
53
54 printf("\ns\ns\ns\n","","
Moda","")
55 for (taxa 1 taxa lt 9 taxa)
56 freq taxa 0
24
6.4 Exemplos de Uso de Arrays
57 for ( j 0 j lt TAM - 1 j )
freqvaloresj
58 printf("s11s19s\n\n54s\n54s\n\n",Entrada"
,"Frequencia","Histograma",
59 "1 1 2 2", "5 0 5 0 5" )
60 for ( taxa 1 taxa lt 9 taxa )
Observe que a subscrição de frequencia é o
valor de um elemento de entrada (valores )
61 printf( "8d11d ", taxa, freqtaxa
)
62 if (freqtaxa gt maior)
63 maior freqtaxa
64 valorModa taxa
65
Imprime em função do valor de frequencia
66 for (h 1 h lt freqtaxa h) printf("")
67 printf("\n")
68
69 printf(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
72 void bolha(int a)
73
74 int passo, j, auxi
75
76 for (passo 1 passo lt TAM - 1 passo)
77 for (j 0 j lt TAM - 2 j)
78 if (aj gt aj1)
Ordenação Borbulhante se há elementos fora de
ordem, troca-os.
79 auxi aj
80 aj aj1
81 aj1 auxi
82
83
25
6.4 Exemplos de Uso de Arrays
84 void imprimeArray(const int a)
85
86 int j
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
88 for (j 0 j lt TAMANHO - 1 j)
89 if (j 20 0)
90 printf( "\n" )
91 printf( "2d", a j )
92
93
26
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.
27
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

28
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 lt meio ? Busca na primeira metade do
    array
  • If chave gt meio ? Busca na segunda metade do
    array
  • Repetição do processo

5
29
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 gt N (número de
    elementos do array)
  • Exemplo Array de 30 elementos
  • Número máximo de passos ? 5 (25 gt 30)

30
6.9 Arrays com Vários Subscritos
  • Arrays com múltiplos subscritos
  • Tabelas com linhas e colunas (array m 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
31
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 )


 
32
6.4 Exemplos de Uso de Arrays
01 / Exemplo de um array com dois subscritos /
02 include ltstdio.hgt
03 define ALUNOS 3
04 define EXAMES 4
05 int minimo(const int EXAMES , int, int)
06 int maximo(const int EXAMES , int, int)
07 double media(const int , int)
Cada linha é um aluno em particular, cada coluna
são as notas em um exame.
08 void imprimeArray(const int EXAMES , int,
int)
09 int main()
10
11 int aluno
12 const int notasALUNOSEXAMES 77,
68, 86, 73 ,
13 96, 87, 89, 78 ,
14 70, 90, 86, 81
15 printf(O array é\n")
16 printArray(notas, ALUNOS, EXAMES )
17 printf("\n\nNota menor d\nNota maior d\n",
18 minimo(notas, ALUNOS, EXAMES),
19 maximo(notas, ALUNOS, EXAMES))
20 for (aluno 0 aluno lt ALUNOS - 1 aluno)
21 printf(Nota média do aluno d .2f\n", aluno,
media(notasaluno , EXAMES))
22 return 0
23
33
6.4 Exemplos de Uso de Arrays
24 / Determinação da menor nota /
25 int minimo(const int notasEXAMES, int
pupilos, int testes)
26
27 int i, j, menorNota 100
28 for (i 0 i lt pupilos - 1 i)
29 for (j 0 j lt testes - 1 j)
30 if (notasij lt menorNota)
31 menorNota notasij
32 return menorNota
33
34 / Determinação da nota máxima /
35 int maximo(const int notasEXAMES, int
pupilos, int testes)
36
37 int i, j, maiorNota 0
38 for (i 0 i lt pupilos - 1 i)
39 for (j 0 j lt testes - 1 j)
40 if (notasij gt maiorNota)
41 maiorNota notasij
42 return maiorNota
43
44 / Determinação da nota média para um exame
particular /
45 double media(const int notas, int testes)
46
47 int i, total 0
48 for (i 0 i lt testes - 1 i)
49 total notas i
50 return (double) total/testes
51
34
6.4 Exemplos de Uso de Arrays
52 / Impressão do array /
53 void imprimeArray(const int notas EXAMES ,
int pupilos, int testes)
54
55 int i, j
56 printf( " 0 1 2 3"
)
57 for ( i 0 i lt pupilos - 1 i )
58 printf( "\nnotasd ", i )
59 for (j 0 j lt testes - 1 j)
60 printf( "-5d", notas i j )
61
62
O array é 0 1 2
3 notas0 77 68 86 73 notas1 96 87
89 78 notas2 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
35
José Eustáquio Rangel de Queiroz Roberto Medeiros
de Faria
UNIVERSIDADE FEDERAL DE CAMPINA GRANDE
CENTRO DE CIÊNCIAS E TECNOLOGIA
DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO
Write a Comment
User Comments (0)
About PowerShow.com