36
[email protected] DSC/CCT/UFCG Profs .: José Eustáquio Rangel de Queiroz Roberto Medeiros de Faria Carga Horária: 60 h

Profs.:

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