Upload
demetrius-porter
View
16
Download
0
Embed Size (px)
DESCRIPTION
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.1Introdução 6.2 Arrays 6.3Declaração de Arrays 6.4Exemplos de Uso de Arrays - PowerPoint PPT Presentation
Citation preview
ran
gel@
dsc.u
fpb
.br
DSC/CCT/UFCGDSC/CCT/UFCG
Profs.:Profs.: José Eustáquio Rangel de QueirozRoberto Medeiros de Faria José Eustáquio Rangel de QueirozRoberto Medeiros de Faria
Carga Horária:Carga Horária: 60 h60 h
22
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
Tópicos
6.1 Introdução6.2 Arrays6.3 Declaração de Arrays6.4 Exemplos de Uso de Arrays6.5 Passagem de Arrays para Funções6.6 Ordenação Arrays6.7 Estudo de Caso: Cálculo da Média, Mediana e Moda
Usando Arrays6.8 Busca em Arrays6.9 Arrays com Vários Subscritos
Tópicos
6.1 Introdução6.2 Arrays6.3 Declaração de Arrays6.4 Exemplos de Uso de Arrays6.5 Passagem de Arrays para Funções6.6 Ordenação Arrays6.7 Estudo de Caso: Cálculo da Média, Mediana e Moda
Usando Arrays6.8 Busca em Arrays6.9 Arrays com Vários Subscritos
Introdução à ProgramaçãoIntrodução à Programação
33
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.1Introduç
ão
6.1Introduç
ã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
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
44
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.2 Arrays6.2 Arrays
Referência a elementos de um array
Nome do array
Número da posição do elemento no array
Formato
nome_arraynome_array[[número_posiçãonúmero_posição]]
Primeiro elemento Posição 0 do array
Array cc de nn elementos
c[ 0], c[ 1] ... c[ n – 1 ]
Referência a elementos de um array
Nome do array
Número da posição do elemento no array
Formato
nome_arraynome_array[[número_posiçãonúmero_posição]]
Primeiro elemento Posição 0 do array
Array cc de nn elementos
c[ 0], c[ 1] ... c[ n – 1 ]
55
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.2 Arrays6.2 Arrays
Exemplo
Nome do array vetvet
Número de elementos 1212
Exemplo
Nome do array vetvet
Número de elementos 1212
Nome do arrayNome do array
Todos os elementos do array têm o mesmo nome, vetvet
Nome do arrayNome do array
Todos os elementos do array têm o mesmo nome, vetvet
Posição do elementoPosição do elemento
Número que indica a posição do elemento no array acompanha o nome, entre colchetes
Posição do elementoPosição do elemento
Número que indica a posição do elemento no array acompanha o nome, entre colchetes
vet[0]vet[0]
vet[1]vet[1]
vet[2]vet[2]
vet[3]vet[3]
vet[4]vet[4]
vet[5]vet[5]
vet[6]vet[6]
vet[7]vet[7]
vet[8]vet[8]
vet[9]vet[9]
vet[10]vet[10]
vet[11]vet[11] 7878
64536453
11
-3-3
6262
00
-89-89
15431543
7272
00
66
-45-45
66
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.2 Arrays6.2 Arrays
Elementos de array são semelhantes à variáveis normais
c[0] = 3;c[0] = 3;
printf("%d", c[0]);printf("%d", c[0]);
Realização de operações em subscritos. Se xx igual a 33
c[5 - 2] == c[3] == c[x]c[5 - 2] == c[3] == c[x]
Elementos de array são semelhantes à variáveis normais
c[0] = 3;c[0] = 3;
printf("%d", c[0]);printf("%d", c[0]);
Realização de operações em subscritos. Se xx igual a 33
c[5 - 2] == c[3] == c[x]c[5 - 2] == c[3] == c[x]
77
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.3Declaração de Arrays
6.3Declaração de Arrays Declaração de arrays
Nome Tipo Número de elementos
tipo_array nome_array[número_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 ];
Declaração de arrays Nome Tipo Número de elementos
tipo_array nome_array[número_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 ];
88
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.4 Exemplos de Uso de Arrays
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
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
99
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.4 Exemplos de Uso de Arrays
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
Omissão do tamanho Determinação a partir dos inicializadores
int n[ ] = { 1, 2, 3, 4, 5 };
5 inicializadores Array com 5 elementos
1010
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.4 Exemplos de Uso de Arrays
6.4 Exemplos de Uso de Arrays
01 /*Programa de impressão de histograma */01 /*Programa de impressão de histograma */02 #include <stdio.h>02 #include <stdio.h>03 #define TAM 1003 #define TAM 10040405 int main()05 int main()06 {06 {07 int n[TAM] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 };07 int n[TAM] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 };08 int i, j;08 int i, j;090910 printf( "%s%13s%17s\n", "Elemento", "Valor", "Histograma" );10 printf( "%s%13s%17s\n", "Elemento", "Valor", "Histograma" );11 for ( i = 0; i <= TAM - 1; i++ ) {11 for ( i = 0; i <= TAM - 1; i++ ) {12 printf( "%7d%13d ", i, n[ i ]) ;12 printf( "%7d%13d ", i, n[ i ]) ;13 for ( j = 1; j <= n[ i ]; j++ ) /* imprime uma barra */13 for ( j = 1; j <= n[ i ]; j++ ) /* imprime uma barra */14 printf( "%c", '*' );14 printf( "%c", '*' );15 printf( "\n" );15 printf( "\n" );16 }16 }17 return 0;17 return 0;18 }18 }
Elemento Valor Histograma 0 19 ******************* 1 3 *** 2 15 *************** 3 7 ******* 4 11 *********** 5 9 ********* 6 13 ************* 7 5 ***** 8 17 ***************** 9 1 *
Elemento Valor Histograma 0 19 ******************* 1 3 *** 2 15 *************** 3 7 ******* 4 11 *********** 5 9 ********* 6 13 ************* 7 5 ***** 8 17 ***************** 9 1 *
1111
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
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”;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’
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”;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’
6.4 Exemplos de Uso de Arrays
6.4 Exemplos de Uso de Arrays
1212
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
Nome do array Endereço do array
Uso de && desnecessário
scanf( "%s", string2 );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
Nome do array Endereço do array
Uso de && desnecessário
scanf( "%s", string2 );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
6.4 Exemplos de Uso de Arrays
6.4 Exemplos de Uso de Arrays
1313
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.4 Exemplos de Uso de Arrays
6.4 Exemplos de Uso de Arrays
Entre com um string: Alo todosstring1 é: Alostring2 é: string literalstring1 com espacos entre caracteres é:A l o
Entre com um string: Alo todosstring1 é: Alostring2 é: string literalstring1 com espacos entre caracteres é:A l o
01 /* Tratamento de arrays de caracteres como cadeias de caracteres */01 /* Tratamento de arrays de caracteres como cadeias de caracteres */02 #include <stdio.h>02 #include <stdio.h>030304 int main()04 int main()05 {05 {06 char string1[ 20 ], string2[] = "string literal";06 char string1[ 20 ], string2[] = "string literal";07 int i;07 int i;080809 printf(" Entre com um string: ");09 printf(" Entre com um string: ");10 scanf( "%s", string1 );10 scanf( "%s", string1 );11 printf( "string1 é: %s\nstring2: é %s\n"11 printf( "string1 é: %s\nstring2: é %s\n"12 "string1 com espacos entre caracteres é:\n", string1, string2 );12 "string1 com espacos entre caracteres é:\n", string1, string2 );13 for ( i = 0; string1[ i ] != '\0'; i++ )13 for ( i = 0; string1[ i ] != '\0'; i++ )14 printf( "%c ", string1[ i ] );14 printf( "%c ", string1[ i ] );15 printf( "\n" );15 printf( "\n" );16 return 0;16 return 0;17 }17 }
1414
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.5Passagem de Arrays para Funções
6.5Passagem 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];int array[24];funcao(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
Passagem de arrays para funções Passagem de argumentos do tipo array
Especificação do nome do array (sem colchetes)
int array[24];int array[24];funcao(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
1515
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.5 Passagem de Arrays para Funções
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]array[3]))
Protótipo da Funçãovoid modificaArray(int b[ ],int tamanho);void modificaArray(int b[ ],int tamanho);
Nomes de parâmetros Opcionais no protótipo
int b[ ]int b[ ] Possibilidade de escrita como int [ ]int [ ]
int tamanhoint tamanho intint
Passagem de elementos do array Passagem por valor
Passagem do nome do array com subscrito para a função (e.g. array[3]array[3]))
Protótipo da Funçãovoid modificaArray(int b[ ],int tamanho);void modificaArray(int b[ ],int tamanho);
Nomes de parâmetros Opcionais no protótipo
int b[ ]int b[ ] Possibilidade de escrita como int [ ]int [ ]
int tamanhoint tamanho intint
1616
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.4 Exemplos de Uso de Arrays
6.4 Exemplos de Uso de Arrays
01 /* Passagem de arrays e elementos isolados de arrays para funções */01 /* Passagem de arrays e elementos isolados de arrays para funções */02 #include <stdio.h>02 #include <stdio.h>03 #define TAM 503 #define TAM 5040405 void modificaArray(int [], int);05 void modificaArray(int [], int);06 void modificaElemento(int);06 void modificaElemento(int);07 int main()07 int main()08 {08 {09 int a[TAM] = {0, 1, 2, 3, 4}, i; 09 int a[TAM] = {0, 1, 2, 3, 4}, i; 101011 printf( "Efeitos da passagem de arrays inteiro em chamadas por referência: "11 printf( "Efeitos da passagem de arrays inteiro em chamadas por referência: "12 “\nOs valores do array original são:\n "12 “\nOs valores do array original são:\n "13 for (i = 0; i <= TAM - 1; i++) 13 for (i = 0; i <= TAM - 1; i++) 14 printf( "%3d", a[ i ] );14 printf( "%3d", a[ i ] );15 printf( "\n" );15 printf( "\n" );16 modificaArray(a, TAM); /* passagem por referência */16 modificaArray(a, TAM); /* passagem por referência */17 printf( “Os valores do array modificado são:\n" );17 printf( “Os valores do array modificado são:\n" );18 for (i = 0; i <= TAM - 1; i++)18 for (i = 0; i <= TAM - 1; i++)19 printf( "%3d", a[ i ] );19 printf( "%3d", a[ i ] );20 printf( "\ Efeitos da passagem de elementos em chamadas por valor:"20 printf( "\ Efeitos da passagem de elementos em chamadas por valor:"21 "\nO valor de a[3] é %d\n", a[3] );21 "\nO valor de a[3] é %d\n", a[3] );22 modificaElemento(a[ 3 ]);22 modificaElemento(a[ 3 ]);23 printf( “O valor de a[3] é %d\n", a[3] );23 printf( “O valor de a[3] é %d\n", a[3] );24 return 0;24 return 0;25 }25 }
Arrays inteiros passados por Arrays inteiros passados por referência podem ser referência podem ser modificadosmodificados
Arrays inteiros passados por Arrays inteiros passados por referência podem ser referência podem ser modificadosmodificados
Elementos de array Elementos de array passados por valor não passados por valor não podem ser modificadospodem ser modificados
Elementos de array Elementos de array passados por valor não passados por valor não podem ser modificadospodem ser modificados
1717
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.4 Exemplos de Uso de Arrays
6.4 Exemplos de Uso de Arrays
26 void modificaArray(int b[], int tam)27 {28 int j;2930 for (j = 0; j <= tam - 1; j++)31 b[ j ] *= 2;32 }3334 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:Efeitos da passagem de arrays inteiros em chamadas por referência:
Os valores do array original são:Os valores do array original são: 0 1 2 3 40 1 2 3 4Os valores do array modificado são:Os valores do array modificado são: 0 2 4 6 80 2 4 6 8
Efeitos da passagem de elementos em chamadas por valor:Efeitos da passagem de elementos em chamadas por valor:
O valor de a[3] é 6O valor de a[3] é 6Valor em modificaElemento é 12Valor em modificaElemento é 12O valor de a[3] é 6O valor de a[3] é 6
Efeitos da passagem de arrays inteiros em chamadas por referência:Efeitos da passagem de arrays inteiros em chamadas por referência:
Os valores do array original são:Os valores do array original são: 0 1 2 3 40 1 2 3 4Os valores do array modificado são:Os valores do array modificado são: 0 2 4 6 80 2 4 6 8
Efeitos da passagem de elementos em chamadas por valor:Efeitos da passagem de elementos em chamadas por valor:
O valor de a[3] é 6O valor de a[3] é 6Valor em modificaElemento é 12Valor em modificaElemento é 12O valor de a[3] é 6O valor de a[3] é 6
1818
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.6 Ordenação de Arrays
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
Ordenação de dados
Aplicação computacional importante
Nos mais diferentes contextos de trabalho, a ordenação de dados é uma atividade imprescindível
1919
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
ExercícioExercí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
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
2020
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.6 Ordenação de Arrays
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
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
2121
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.6 Ordenação de Arrays
6.6 Ordenação de Arrays
Exemplo Seqüência original Etapa 1
3 4 2 6 73 4 2 6 7 3 4 2 6 73 4 2 6 7 Etapa 2 Etapa 3
3 4 2 6 73 4 2 6 7 3 2 4 6 7 3 2 4 6 7 Etapa 4 Etapa 5
3 2 4 6 73 2 4 6 7 3 2 4 6 7 3 2 4 6 7 Etapa 6
2 3 4 6 72 3 4 6 7 Elementos de menor valor “borbulham” para a
superfície (topo do array)
Exemplo Seqüência original Etapa 1
3 4 2 6 73 4 2 6 7 3 4 2 6 73 4 2 6 7 Etapa 2 Etapa 3
3 4 2 6 73 4 2 6 7 3 2 4 6 7 3 2 4 6 7 Etapa 4 Etapa 5
3 2 4 6 73 2 4 6 7 3 2 4 6 7 3 2 4 6 7 Etapa 6
2 3 4 6 72 3 4 6 7 Elementos de menor valor “borbulham” para a
superfície (topo do array)
2222
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.7 Estudo de Caso: Cálculo da Média, Mediana e Moda Usando Arrays
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 72 3 4 6 7 Mediana = 4 4
Moda Valor mais freqüente em uma seqüência
Exemplo
1 1 1 2 3 3 4 5 6 51 1 1 2 3 3 4 5 6 5 Moda = 1 1
Média Média aritmética
Mediana Valor central de uma seqüência ordenada
Exemplo
2 3 4 6 72 3 4 6 7 Mediana = 4 4
Moda Valor mais freqüente em uma seqüência
Exemplo
1 1 1 2 3 3 4 5 6 51 1 1 2 3 3 4 5 6 5 Moda = 1 1
2323
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.4 Exemplos de Uso de Arrays
6.4 Exemplos de Uso de Arrays
01 /* Programa para o cálculo da média, mediana, e moda dos dados */01 /* Programa para o cálculo da média, mediana, e moda dos dados */02 #include <stdio.h>02 #include <stdio.h>03 #define TAM 9903 #define TAM 99040405 void media(const int []);05 void media(const int []);06 void mediana(int []);06 void mediana(int []);07 void moda(int [], const int []) ;07 void moda(int [], const int []) ;08 void bolha(int []);08 void bolha(int []);09 void imprimeArray(const int []);09 void imprimeArray(const int []);10 int main()10 int main()11 {11 {12 int freq[10] = {0};12 int freq[10] = {0};13 int entrada[TAM] = 13 int entrada[TAM] = 14 {6, 7, 8, 9, 8, 7, 8, 9, 8, 9,14 {6, 7, 8, 9, 8, 7, 8, 9, 8, 9,15 7, 8, 9, 5, 9, 8, 7, 8, 7, 8,15 7, 8, 9, 5, 9, 8, 7, 8, 7, 8,16 6, 7, 8, 9, 3, 9, 8, 7, 8, 7,16 6, 7, 8, 9, 3, 9, 8, 7, 8, 7,17 7, 8, 9, 8, 9, 8, 9, 7, 8, 9,17 7, 8, 9, 8, 9, 8, 9, 7, 8, 9,18 6, 7, 8, 7, 8, 7, 9, 8, 9, 2,18 6, 7, 8, 7, 8, 7, 9, 8, 9, 2,19 7, 8, 9, 8, 9, 8, 9, 7, 5, 3,19 7, 8, 9, 8, 9, 8, 9, 7, 5, 3,20 5, 6, 7, 2, 5, 3, 9, 4, 6, 4,20 5, 6, 7, 2, 5, 3, 9, 4, 6, 4,21 7, 8, 9, 6, 8, 7, 8, 9, 7, 8,21 7, 8, 9, 6, 8, 7, 8, 9, 7, 8,22 7, 4, 4, 2, 5, 3, 8, 7, 5, 6,22 7, 4, 4, 2, 5, 3, 8, 7, 5, 6,23 4, 5, 6, 1, 6, 5, 7, 8, 7 };23 4, 5, 6, 1, 6, 5, 7, 8, 7 };24 media(entrada);24 media(entrada);25 mediana(entrada);25 mediana(entrada);26 moda(freq, entrada);26 moda(freq, entrada);27 return 0;27 return 0;28 }28 }
2424
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.4 Exemplos de Uso de Arrays
6.4 Exemplos de Uso de Arrays29 void media(const int valores[])29 void media(const int valores[])
30 {30 {31 int j, total = 0;31 int j, total = 0;323233 printf( "%s\n%s\n%s\n", "********", " Média", "********" );33 printf( "%s\n%s\n%s\n", "********", " Média", "********" );34 for (j = 0; j <= TAM - 1; j++)34 for (j = 0; j <= TAM - 1; j++)35 total += valores[j];35 total += valores[j];36 printf("A média é igual à razão do somatório de todos os itens de dados\n"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"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);38 "eh : %d / %d = %.4f\n\n", TAM, total, TAM, (double)total/TAM);39 }39 }40 void mediana(int valores[])40 void mediana(int valores[])41 {41 {42 printf("\n%s\n%s\n%s\n%s","*********","Mediana",“*********","Array desordenado:");42 printf("\n%s\n%s\n%s\n%s","*********","Mediana",“*********","Array desordenado:");43 imprimeArray(valores);43 imprimeArray(valores);44 bolha(valores);44 bolha(valores);45 printf("\n\nArray ordenado:");45 printf("\n\nArray ordenado:");46 imprimeArray(valores);46 imprimeArray(valores);47 printf( "\n\nA mediana é o elemento %d do array ordenado de %d elemento(s).\n"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,valores[TAM/2] );48 "Neste exemplo, a mediana é %d\n\n", TAM/2, TAM,valores[TAM/2] );49 }49 }50 void moda(int freq[], const int valores[])50 void moda(int freq[], const int valores[])51 {51 {52 int taxa, j, h, maior = 0, valorModa = 0;52 int taxa, j, h, maior = 0, valorModa = 0;535354 printf("\n%s\n%s\n%s\n","********"," Moda","********");54 printf("\n%s\n%s\n%s\n","********"," Moda","********");55 for (taxa = 1; taxa <= 9; taxa++)55 for (taxa = 1; taxa <= 9; taxa++)56 freq[ taxa ] = 0;
2525
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.4 Exemplos de Uso de Arrays
6.4 Exemplos de Uso de Arrays57 for ( j = 0; j <= TAM - 1; j++ ) ++freq[valores[j]];57 for ( j = 0; j <= TAM - 1; j++ ) ++freq[valores[j]];
58 printf("%s%11s%19s\n\n%54s\n%54s\n\n",“Entrada","Frequencia","Histograma",58 printf("%s%11s%19s\n\n%54s\n%54s\n\n",“Entrada","Frequencia","Histograma",59 "1 1 2 2", "5 0 5 0 5" );59 "1 1 2 2", "5 0 5 0 5" );60 for ( taxa = 1; taxa <= 9; taxa++ ) {60 for ( taxa = 1; taxa <= 9; taxa++ ) {61 printf( "%8d%11d ", taxa, freq[taxa] );61 printf( "%8d%11d ", taxa, freq[taxa] );62 if (freq[taxa] > maior) {62 if (freq[taxa] > maior) {63 maior = freq[taxa];63 maior = freq[taxa];64 valorModa = taxa;64 valorModa = taxa;65 }65 }66 for (h = 1; h <= freq[taxa]; h++) printf("*");66 for (h = 1; h <= freq[taxa]; h++) printf("*");67 printf("\n");67 printf("\n");68 }68 }69 printf(“A moda é o valor mais freqüente de uma seqüência.\n"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);70 “Neste exemplo, a moda é %d, tendo ocorrido %d vezes.\n,valorModa,maior);
72 void bolha(int a[])72 void bolha(int a[])73 {73 {74 int passo, j, auxi;74 int passo, j, auxi;757576 for (passo = 1; passo <= TAM - 1; passo++)76 for (passo = 1; passo <= TAM - 1; passo++)77 for (j = 0; j <= TAM - 2; j++)77 for (j = 0; j <= TAM - 2; j++)78 if (a[j] > a[j+1]){78 if (a[j] > a[j+1]){79 auxi = a[j];79 auxi = a[j];80 a[j] = a[j+1];80 a[j] = a[j+1];81 a[j+1] = auxi;81 a[j+1] = auxi;82 }82 }83 }83 }
71 }71 }
Observe que a subscrição de Observe que a subscrição de frequencia[ ]frequencia[ ] é o valor de um é o valor de um elemento de elemento de entrada[ ]entrada[ ] ((valores[ ]valores[ ]))
Observe que a subscrição de Observe que a subscrição de frequencia[ ]frequencia[ ] é o valor de um é o valor de um elemento de elemento de entrada[ ]entrada[ ] ((valores[ ]valores[ ]))
Imprime Imprime ** em função do em função do valor de valor de frequencia[]frequencia[] Imprime Imprime ** em função do em função do valor de valor de frequencia[]frequencia[]
Ordenação Ordenação BorbulhanteBorbulhante: se : se há elementos fora de há elementos fora de ordem, troca-os. ordem, troca-os.
Ordenação Ordenação BorbulhanteBorbulhante: se : se há elementos fora de há elementos fora de ordem, troca-os. ordem, troca-os.
2626
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.4 Exemplos de Uso de Arrays
6.4 Exemplos de Uso de Arrays
84 void imprimeArray(const int a[])85 {86 int j;8788 for (j = 0; j <= TAMANHO - 1; j++) {89 if (j % 20 == 0)90 printf( "\n" );91 printf( "%2d", a[ j ] );92 }93 }
******** 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
******** 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
2727
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.4 Exemplos de Uso de Arrays
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.
******** 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.
2828
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.8 Busca em Arrays: Busca Linear e Busca Binária
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
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
2929
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
Busca binária
Adequação a arrays ordenados
Comparação do elemento intermediário com a chave
Se iguaisiguais Elemento encontrado
Se chave < meio chave < meio Busca na primeira metade do array
If chave > meio chave > meio Busca na segunda metade do array
Repetição do processo
Busca binária
Adequação a arrays ordenados
Comparação do elemento intermediário com a chave
Se iguaisiguais Elemento encontrado
Se chave < meio chave < meio Busca na primeira metade do array
If chave > meio chave > meio Busca na segunda metade do array
Repetição do processo
5
6.8 Busca em Arrays: Busca Linear e Busca Binária
6.8 Busca em Arrays: Busca Linear e Busca Binária
3030
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
Busca binária
Grande rapidez do processo
No máximo nn passos, onde 22nn > N > N (número de elementos do array)
Exemplo: Array de 30 elementos
Número máximo de passos 5 (25 > 30)
Busca binária
Grande rapidez do processo
No máximo nn passos, onde 22nn > N > N (número de elementos do array)
Exemplo: Array de 30 elementos
Número máximo de passos 5 (25 > 30)
6.8 Busca em Arrays: Busca Linear e Busca Binária
6.8 Busca em Arrays: Busca Linear e Busca Binária
3131
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.9 Arrays com Vários Subscritos
6.9 Arrays com Vários Subscritos
Arrays com múltiplos subscritos
Tabelas com linhas e colunas (array m m xx n n)
Matrizes Especificação da linha e, em seguida, da coluna
Arrays com múltiplos subscritos
Tabelas com linhas e colunas (array m m xx n n)
Matrizes Especificação da linha e, em seguida, da coluna
Linha 0Linha 0
Linha 1Linha 1
Linha 2Linha 2
Coluna 0Coluna 0 Coluna 1Coluna 1 Coluna 2Coluna 2 Coluna 3Coluna 3
a[ 0 ][ 0 ]a[ 0 ][ 0 ]
a[ 1 ][ 0 ]a[ 1 ][ 0 ]
a[ 2 ][ 0 ]a[ 2 ][ 0 ]
a[ 0 ][ 1 ]a[ 0 ][ 1 ]
a[ 1 ][ 1 ]a[ 1 ][ 1 ]
a[ 2 ][ 1 ]a[ 2 ][ 1 ]
a[ 0 ][ 2 ]a[ 0 ][ 2 ]
a[ 1 ][ 2 ]a[ 1 ][ 2 ]
a[ 2 ][ 2 ]a[ 2 ][ 2 ]
a[ 0 ][ 3 ]a[ 0 ][ 3 ]
a[ 1 ][ 3 ]a[ 1 ][ 3 ]
a[ 2 ][ 3 ]a[ 2 ][ 3 ]
Subscrito da linhaSubscrito da linha
Nome do arrayNome do array Subscrito da colunaSubscrito da coluna
3232
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
Inicialização int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } };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, 4int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } }; } };
Referência de elementos Especificação da linha e, em seguida, da coluna
printf( "%d", b[ 0 ][ 1 ] );printf( "%d", b[ 0 ][ 1 ] );
Inicialização int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } };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, 4int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } }; } };
Referência de elementos Especificação da linha e, em seguida, da coluna
printf( "%d", b[ 0 ][ 1 ] );printf( "%d", b[ 0 ][ 1 ] );
1 21 2
3 43 4
1 01 0
3 43 4
6.9 Arrays com Vários Subscritos
6.9 Arrays com Vários Subscritos
3333
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.4 Exemplos de Uso de Arrays
6.4 Exemplos de Uso de Arrays
01 /* Exemplo de um array com dois subscritos */01 /* Exemplo de um array com dois subscritos */02 #include <stdio.h>02 #include <stdio.h>03 #define ALUNOS 303 #define ALUNOS 304 #define EXAMES 404 #define EXAMES 405 int minimo(const int [][ EXAMES ], int, int);05 int minimo(const int [][ EXAMES ], int, int);06 int maximo(const int [][ EXAMES ], int, int);06 int maximo(const int [][ EXAMES ], int, int);07 double media(const int [], int);07 double media(const int [], int);08 void imprimeArray(const int [][ EXAMES ], int, int);08 void imprimeArray(const int [][ EXAMES ], int, int);09 int main()09 int main()10 {10 {11 int aluno;11 int aluno;12 const int notas[ALUNOS][EXAMES] = { { 77, 68, 86, 73 },12 const int notas[ALUNOS][EXAMES] = { { 77, 68, 86, 73 },13 { 96, 87, 89, 78 },13 { 96, 87, 89, 78 },14 { 70, 90, 86, 81 } };14 { 70, 90, 86, 81 } };15 printf(“O array é:\n");15 printf(“O array é:\n");16 imprimeArray(notas, ALUNOS, EXAMES );16 imprimeArray(notas, ALUNOS, EXAMES );17 printf("\n\nNota menor: %d\nNota maior: %d\n",17 printf("\n\nNota menor: %d\nNota maior: %d\n",18 minimo(notas, ALUNOS, EXAMES),18 minimo(notas, ALUNOS, EXAMES),19 maximo(notas, ALUNOS, EXAMES));19 maximo(notas, ALUNOS, EXAMES));20 for (aluno = 0; aluno <= ALUNOS - 1; aluno++)20 for (aluno = 0; aluno <= ALUNOS - 1; aluno++)21 printf(“Nota média do aluno %d %.2f\n", aluno, media(notas[aluno ], EXAMES));21 printf(“Nota média do aluno %d %.2f\n", aluno, media(notas[aluno ], EXAMES));22 return 0;22 return 0;23 }23 }
Cada linha é um aluno em Cada linha é um aluno em particular, cada coluna são particular, cada coluna são as notas em um exame. as notas em um exame.
Cada linha é um aluno em Cada linha é um aluno em particular, cada coluna são particular, cada coluna são as notas em um exame. as notas em um exame.
3434
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.4 Exemplos de Uso de Arrays
6.4 Exemplos de Uso de Arrays
24 /* Determinação da menor nota */24 /* Determinação da menor nota */25 int minimo(const int notas[][EXAMES], int pupilos, int testes)25 int minimo(const int notas[][EXAMES], int pupilos, int testes)26 {26 {27 int i, j, menorNota = 100;27 int i, j, menorNota = 100;28 for (i = 0; i <= pupilos - 1; i++)28 for (i = 0; i <= pupilos - 1; i++)29 for (j = 0; j <= testes - 1; j++)29 for (j = 0; j <= testes - 1; j++)30 if (notas[i][j] < menorNota)30 if (notas[i][j] < menorNota)31 menorNota = notas[i][j];31 menorNota = notas[i][j];32 return menorNota;32 return menorNota;33 }33 }34 /* Determinação da nota máxima */34 /* Determinação da nota máxima */35 int maximo(const int notas[][EXAMES], int pupilos, int testes)35 int maximo(const int notas[][EXAMES], int pupilos, int testes)36 {36 {37 int i, j, maiorNota = 0;37 int i, j, maiorNota = 0;38 for (i = 0; i <= pupilos - 1; i++)38 for (i = 0; i <= pupilos - 1; i++)39 for (j = 0; j <= testes - 1; j++)39 for (j = 0; j <= testes - 1; j++)40 if (notas[i][j] > maiorNota)40 if (notas[i][j] > maiorNota)41 maiorNota = notas[i][j];41 maiorNota = notas[i][j];42 return maiorNota;42 return maiorNota;43 }43 }44 /* Determinação da nota média para um exame particular */44 /* Determinação da nota média para um exame particular */45 double media(const int notas[], int testes)45 double media(const int notas[], int testes)46 {46 {47 int i, total = 0;47 int i, total = 0;48 for (i = 0; i <= testes - 1; i++)48 for (i = 0; i <= testes - 1; i++)49 total += notas[ i ];49 total += notas[ i ];50 return (double) total/testes;50 return (double) total/testes;51 }51 }
3535
ran
gel@
dsc.u
fpb
.br
ran
gel@
lmrs
-sem
arh
.ufp
b.b
r
DSC/CCT/UFCGDSC/CCT/UFCG
6.4 Exemplos de Uso de Arrays
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 <= pupilos - 1; i++ ) {58 printf( "\nnotas[%d] ", i );59 for (j = 0; j <= testes - 1; j++)60 printf( "%-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: 68Maior Nota: 96A nota média para o aluno 0 é 76.00A nota média para o aluno 1 é 87.50A nota média para o aluno 2 é 81.75
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: 68Maior Nota: 96A nota média para o aluno 0 é 76.00A nota média para o aluno 1 é 87.50A nota média para o aluno 2 é 81.75
ran
gel@
dsc.u
fpb
.br
DSC/CCT/UFCGDSC/CCT/UFCG
José Eustáquio Rangel de QueirozRoberto Medeiros de Faria
Ulrich Schiel
José Eustáquio Rangel de QueirozRoberto Medeiros de Faria
Ulrich Schiel
DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃODEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO
UNIVERSIDADE FEDERAL DE CAMPINA GRANDEUNIVERSIDADE FEDERAL DE CAMPINA GRANDE
CENTRO DE CIÊNCIAS E TECNOLOGIACENTRO DE CIÊNCIAS E TECNOLOGIA