Prof jos eust quio rangel de queiroz rangel@dsc ufcg edu br rangeldequeiroz@gmail com
This presentation is the property of its rightful owner.
Sponsored Links
1 / 68

Prof.: José Eustáquio Rangel de Queiroz [email protected] [email protected] PowerPoint PPT Presentation


  • 43 Views
  • Uploaded on
  • Presentation posted in: General

Técnicas de Programação. Ordenação. Prof.: José Eustáquio Rangel de Queiroz [email protected] [email protected] Carga Horária: 60 horas. Carga Horária: 60 horas. Ordenação em C I. Considerações Iniciais I Ordenação

Download Presentation

Prof.: José Eustáquio Rangel de Queiroz [email protected] [email protected]

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Prof jos eust quio rangel de queiroz rangel@dsc ufcg edu br rangeldequeiroz@gmail com

Técnicas de Programação

Ordenação

Prof.:José Eustáquio Rangel de Queiroz

[email protected]

[email protected]

Carga Horária:60 horas

Carga Horária:60 horas


Ordena o em c i

Ordenação em C I

  • Considerações Iniciais I

    • Ordenação

      • Arranjo de uma série de itens similares em ordem crescente ou decrescente

    • Seja uma lista ordenada L de n itens

      • Cada item é denominado registro (em linguagem C, struct)

      • Possibilidade de associação de uma chave (c[k]) a cada registro (r[k])


Ordena o em c ii

Ordenação em C II

  • Considerações Iniciais II

    • Condição de ordenação da lista pela chave

      Sejprecedendokimplicarc[j] < c[k](ouc[j] > c[k])em alguma ordenação nas chaves


Ordena o em c iii

Ordenação em C III

  • Categorias Genéricas de Algoritmos

    • Algoritmos para a ordenação de matrizes (Memória/ Arquivos de acesso direto em discos)

    • Algoritmos para a ordenação de arquivos seqüenciais (Disco/ Fita)


Ordena o em c iv

Ordenação em C IV

  • Ordenação de Matrizes - Métodos Gerais

    • Troca (e.g. bubblesort, quicksort)

    • Seleção (e.g. heapsort)

    • Inserção (e.g. shellsort)


Ordena o em c v

Ordenação em C V

  • Avaliação de Algoritmos de Ordenação - Critérios Gerais

    • Velocidade de ordenação das informações no melhor caso, no caso médio e no pior caso

    • Comportamento do algoritmo (natural ou não natural )

    • Capacidade de rearranjo de elementos com chaves iguais


Ordena o em c vi

Ordenação em C VI

  • Ordenação Borbulhante (Bubble Sort) I

    • Ordenação por troca

      • Repetição de comparações e, caso necessária, troca de itens adjacentes

      • Método mais conhecido (e difamado)

    • Idéia Básica

      • Permuta de itens entre posições consecutivas

        • “Borbulhamento” de valores mais elevados (ou mais baixos) para o final (ou para o início) do arranjo


Ordena o em c vii

Ordenação em C VII

  • Ordenação Borbulhante (Bubble Sort) II

    • Considere-se i um vetor de inteiros do qual os n primeiros itens devam ser ordenados de modo que i[j] ≤ i[k] para 0 ≤ i < j < n

      • Fundamentação do método

        • Percurso seqüencial da lista de itens sucessivas vezes

        • Comparação de cada item com seu sucessor (i[k] com i[k+1])

        • Troca dos itens, caso não estejam na ordem correta


Ordena o em c viii

Ordenação em C VIII

  • Ordenação Borbulhante (Bubble Sort) III

    • Exemplo 01 – Ordenação da seqüência

      13, 5, 1, 0, 3, 2, 8, 1


Ordena o em c ix

Ordenação em C IX

  • Ordenação Borbulhante (Bubble Sort) IV

    • Exemplo 01 – Ordenação da seqüência

      5, 1, 0, 3, 2, 8, 1, 13


Ordena o em c x

Ordenação em C X

  • Ordenação Borbulhante (Bubble Sort) V

    • Exercício 01

      • Construir o quadro com todas as iterações necessárias à ordenação de todo a seqüência de inteiros do Exemplo 01


Ordena o em c xi

Ordenação em C XI

  • Ordenação Borbulhante (Bubble Sort) VI

    • Constatação  Após a 1ª iteração, o maior elemento assume a posição correta

    • Em geral, i[n-k] assumirá a posição correta após a iteração k

    • Simplicidade algorítmica x Velocidade de processamento

      • Uma das piores formas de ordenação


Ordena o em c xii

Ordenação em C XII

  • Ordenação Borbulhante (Bubble Sort) VII

    • Algoritmo 01

Borbulhante01(int i[ ], int n) {

int iteracao, k, auxi;

for (iteracao = 1; iteracao <= n; iteracao++)

for (k=1; k < n; k++)

if (i [k-1] > i[k]){

auxi = i[k-1];

i[k-1] = i[k];

i[k] = auxi;

}

}


Ordena o em c xiii

Ordenação em C XIII

  • Ordenação Borbulhante (Bubble Sort) VIII

    • Algoritmo 02

Borbulhante02(char *item, int n) {

int iteracao, k;

char t;

for (iteracao = 1; iteracao < n; iteracao++)

for (k=n-1; k > =iteracao; k--)

if (item [k-1] > item[k]){

auxi = item[k-1];

item[k-1] = item[k];

item[k] = auxi;

}

}


Ordena o em c xiv

Ordenação em C XIV

  • Ordenação Borbulhante (Bubble Sort) IX

    • Exercício 02

      • Comparar as funções apresentadas nos slides 13 e 14 e responder:

        • Ambas podem ser empregadas indistintamente? Justificar a resposta.

        • Empregar cada uma das funções comparadas em uma aplicação prática.


Ordena o em c xv

Ordenação em C XV

  • Ordenação Borbulhante (Bubble Sort) X

    • Exercício 03

      • Analisar o código apresentado no slide 17 se a string de caracteres digitada for

        Este eh apenas um teste de Borbulhante02


Ordena o em c xvi

Ordenação em C XVI

  • Ordenação Borbulhante (Bubble Sort) X

    • Exercício 03 – Código em C


Ordena o em c xvii

Ordenação em C XVII

  • Ordenação Borbulhante (Bubble Sort) XI

    • Considerações Finais

      • Número de comparações ½(n2 – n )

      • Número de trocas no melhor caso 0

      • Número de trocas no caso médio ¾ (n2 – n)

      • Número de trocas no pior caso 3/2 (n2 – n)


Ordena o em c xviii

Ordenação em C XVIII

  • Ordenação Oscilante (Shaker) I

    • Melhoramento do Método de Ordenação Borbulhante (Bubble Sort)

    • Exercício 04

      • Analisar o código apresentado no slide 20 e compará-lo com o código do slide 14


Ordena o em c xix

Ordenação em C XIX

  • Ordenação Oscilante (Shaker) II


Ordena o em c xx

Ordenação em C XX

  • Ordenação Oscilante (Shaker) III

    • Exercício 05

      • Analisar o processo de ordenação do Exemplo 01 empregando o algoritmo apresentado no slide 20


Ordena o em c xxi

Ordenação em C XXI

  • Ordenação por Seleção I

    • Procedimento Básico I

      • Primeira iteração

        • Identificação do maior valor e permuta com o último item da seqüência

          • Posicionamento correto do maior item


Ordena o em c xxii

Ordenação em C XXII

  • Ordenação por Seleção II

    • Procedimento Básico II

      • Segunda iteração

        • Varredura apenas dos n-1 itens da seqüência e permuta do maior deles com o item ocupante da posição n-1

          • Posicionamento correto dos dois maiores itens


Ordena o em c xxiii

Ordenação em C XXIII

  • Ordenação por Seleção III

    • Procedimento Básico III

      • n-ésima Iteração

        • Ordenação da seqüência inteira após n iterações

    • Variante simples  Identificação do menor item a cada iteração e seu reposicionamento na porção inicial da seqüência de itens


Ordena o em c xxiv

Ordenação em C XXIV

  • Ordenação por Seleção IV

    • Algoritmo em C

void Selecao(int i[], int n){

int k, j;

int min, auxi;

for (k = 0; k < n-1; k++){

min = i;

for (j = i+1; j < n; j++){

if (i[j] < i[min])

min = j;

}

auxi = i[k];

i[k] = i[min];

i[min] = auxi;

}

}


Ordena o em c xxv

Ordenação em C XXV

  • Ordenação por Seleção V

    • Exercício 06

      • Analisar o processo de ordenação do Exemplo 01 empregando o algoritmo apresentado no slide 25


Ordena o em c xxvi

Ordenação em C XXVI

  • Ordenação por Seleção VI

    • Considerações Finais

      • Número de comparações ½(n2 – n )

      • Número de trocas no melhor caso 3(n-1)

      • Número de trocas no caso médio n(lnn + y)

        • y 0,577216  Constante de Euler

      • Número de trocas no pior caso ¼n2 + 3(n - 1)


Ordena o em c xxvii

Ordenação em C XXVII

  • Ordenação por Inserção I

    • Procedimento

      • Ordenação dos 2 primeiros itens da seqüência

      • Inserção do 3º item na sua posição ordenada com relação aos 2 primeiros

      • Inserção do 4º item na lista dos 3 elementos

      • Prosseguimento até a ordenação de todos os elementos


Ordena o em c xxviii

Ordenação em C XXVIII

  • Ordenação por Inserção II

    • Algoritmo em C

void Insercao(int i[], int n){

int k, j, chave;

for (k=1; k < n; k++){

chave = i[k];

j = k;

while ((j > 0) && (i[j-1] > chave)){

i[j] = i[j-1];

j = j - 1;

}

i[j] = chave;

}

}

http://www.cs.hope.edu/~alganim/animator/Animator.html


Ordena o em c xxvix

Ordenação em C XXVIX

  • Ordenação por Inserção III

    • Exercício 07

      • Analisar o processo de ordenação do Exemplo 01 empregando o algoritmo apresentado no slide 29


Ordena o em c xxx

Ordenação em C XXX

  • Ordenação por Inserção IV

    • Vantagens

      • Comportamento natural

        • Menor carga de trabalho quando os itens já se encontram ordenados

        • Máxima carga de trabalho quando a lista está ordenada no sentido inverso

      • Não rearranjo de itens de mesma chave

        • Uma lista ordenada por duas chaves permanecerá ordenada para ambas as chaves após a ordenação


Ordena o em c xxxi

Ordenação em C XXXI

  • Ordenação por Inserção V

    • Considerações Finais

      • Número de comparações

        • Lista em ordem (n - 1)

        • Lista em ordem ½(n2 – n ) - 1

      • Número de trocas no melhor caso 2(n – 1)

      • Número de trocas no caso médio ¼(n2 + 9n -10)

      • Número de trocas no pior caso ½(n2 +3n - 4)


Ordena o em c xxxii

Ordenação em C XXXII

  • Métodos Melhores de Ordenação

    • Ineficiência de todos os algoritmos estudados até este ponto  Tempo de processamento da ordem de n2

      • Ordenações lentas para grandes listas (n > 100)

    • Solução

      • Outras formas de ordenação

        • E.g. métodos Shell e Quicksort


Ordena o em c xxxiii

Ordenação em C XXXIII

  • Ordenação Shell I

    • Considerações Iniciais

      • Concepção do método  D. L. Shell

      • Método de operação freqüentemente associado ao mecanismo de empilhamento de conchas do mar

      • Derivação

        • Ordenação por Inserção

        • Fundamentação na redução dos incrementos


Ordena o em c xxxiv

Ordenação em C XXXIV

  • Ordenação Shell II

    • Procedimento I

      • Consideração Inicial

        • Composição do vetor por vários segmentos, cada um dos quais reúne os itens que se encontram a uma distância d entre si

      • Ordenação de cada segmento


Ordena o em c xxxv

Ordenação em C XXXV

  • Ordenação Shell III

    • Procedimento II

      • Redução de d e repetição do processo para segmentos nos quais o intervalo entre itens é menor do que na primeira iteração do processo

      • Repetições sucessivas do processo, até que d = 1 (valor obrigatório para o intervalo na última iteração)


Ordena o em c xxxvi

Ordenação em C XXXVI

  • Ordenação Shell IV

    • Definição do valor inicial de d– Exemplo

      • Ordenação de todos os itens afastados entre si de 3 posições

      • Ordenação de todos os itens afastados entre si de 2 posições

      • Finalmente, ordenação de todos os itens adjacentes


Ordena o em c xxxvii

Ordenação em C XXXVII

  • Ordenação Shell V

    • Exemplo 02 – Ordenação da seqüência

      45, 23, 4, 9, 6, 7, 91, 8, 12, 25

d=3

d=2

d=1

6

7

23

25

91

9

25

45

91

6

8

23

4

7

12

9

6

4

25

8

7

45

23

12

91

4

8

9

12

45

4

6

8

7

9

23

12

25

45

91

45

23

4

9

6

7

91

8

12

25

4

6

7

8

9

12

23

25

45

91


Ordena o em c xxxviii

Ordenação em C XXXVIII

  • Ordenação Shell VI

    • Exemplo 03 – Ordenação da seqüência

      f, d, a, h, j, b, g, c, e, i

d=3

d=2

d=1

b

d

g

i

j

f

g

h

i

d

c

j

a

b

e

f

d

a

g

c

b

h

j

e

i

a

c

e

f

h

a

b

c

d

e

g

f

i

h

j

f

d

a

h

j

b

g

c

e

i

a

b

c

d

e

f

g

h

i

j


Ordena o em c xxxix

Ordenação em C XXXIX

  • Ordenação Shell VII

    • Exemplo 03 – Ordenação da seqüência

      f, d, a, h, j, b, g, c, e, i


Ordena o em c xl

Ordenação em C XL

  • Ordenação Shell VIII

    • Algoritmo em C

void Shell(){

int i[n], d, i, j, auxi;

for(d= n/2; d > 0; d = d/2)

for(i = d; i < n; i++)

for(j = i - d; j >= 0 && i[j] > i[j+d]; j = j - d){

auxi = i[j];

i[j] = i[j+d];

i[j+d] = auxi;

}


Ordena o em c xli

Ordenação em C XLI

  • Ordenação Shell IX

    • Shell x Métodos de Ordenação Anteriores


Ordena o em c xlii

Ordenação em C XLII

  • Ordenação Rápida (Quicksort) I

    • Considerações Iniciais I

      • Superior aos demais métodos de ordenação  Algoritmo de ordenação mais rápido conhecido na prática (métodos de ordenação baseados em endereços podem ser mais rápidas)

      • Concepção  C. A. R. Hoare, em 1962

      • Idéia Básica  Divisão para conquista


Ordena o em c xliii

Ordenação em C XLIII

  • Ordenação Rápida (Quicksort) II

    • Considerações Iniciais II

      • Fundamentação  Método de ordenação por trocas e na idéia de partições

        • Seleção de um valor (comparador) e partição da seqüência em duas seções, com todos os elementos maiores ou iguais ao valor da partição de um lado e os menores do outro

        • Repetição do processo para cada seção restante até a ordenação completa da matriz


Ordena o em c xliv

Ordenação em C XLIV

  • Ordenação Rápida (Quicksort) III

    • Considerações Iniciais III

      • Procedimento Básico

        • Se o número de itens a ser ordenado for 0 ou 1, retorno da informação

        • Caso contrário, consideração de qualquer item da seqüência i[n] como elemento particionador ou pivô (ip)

        • Partição da seqüência de itens em 2 conjuntos disjuntos, S1 (i[n] ≤ip) e S1 (i[n] >ip)

        • Retorno de QuickSort (S1) seguido de ip e de QuickSort (S2)


Ordena o em c xlv

5

1

4

2

3

9

15

12

1

2

3

4

5

9

10

12

15

1

2

3

4

5

9

10

12

15

Ordenação em C XLV

  • Ordenação Rápida (Quicksort) IV

    • Exemplo 04 – Ordenação da seqüência

      5, 1, 4, 2, 10, 3, 9, 15, 12

Considerando o item central (10) como pivô e particionando a seqüência conforme o procedimento do slide 45

Ordenando os subconjuntos

Recombinando os subconjuntos com o pivô


Ordena o em c xlvi

5

1

4

2

10

3

9

15

12

5

1

4

2

3

9

10

15

12

5

1

4

2

3

9

10

15

12

1

2

5

4

3

9

10

12

15

1

2

3

4

5

9

10

12

15

1

2

3

4

5

9

10

12

15

Ordenação em C XLVI

  • Ordenação Rápida (Quicksort) V

    • Exemplo 04 – Ordenação da seqüência

      5, 1, 4, 2, 10, 3, 9, 15, 12

Lista Desordenada

Partição 1

Partição 2

Partição 3

Partição 4

Lista Ordenada


Ordena o em c xlvii

Ordenação em C XLVII

  • Ordenação Rápida (Quicksort) VI

    • Exercício 08

      • Ordenar a seqüência de caracteres do Exemplo 03 (slide 39) empregando o método Quicksort


Ordena o em c xlviii

Ordenação em C XLVIII

  • Ordenação Rápida (Quicksort) VII

    • Algoritmo em C


Ordena o em c xlix

Ordenação em C XLIX

  • Ordenação Rápida (Quicksort) VIII

    • Considerações Finais I

      • O valor central pode ser escolhido aleatoriamente ou selecionado através da média de um pequeno conjunto de valores retirado da matriz

      • Ordenação ótima Necessidade de seleção de um valor precisamente no centro da faixa de valores (tarefa difícil)


Ordena o em c l

Ordenação em C L

  • Ordenação Rápida (Quicksort) IX

    • Considerações Finais II

      • Ordenação péssima Posicionamento do valor escolhido em uma extremidade e, mesmo assim, o quicksort seleciona o elemento central da matriz

      • Número médio de comparações nlog(n)

      • Número médio de trocas (aproximado) n/6 log(n)


Ordena o em c li

Ordenação em C LI

  • Ordenação Rápida (Quicksort) X

    • Considerações Finais III

      • Ordenação Quicksort Melhor dos métodos estudados

        • Velocidade de processamento dos dados

      • Ordenação de listas de dados muito pequenas (n < 100)

        • Comprometimento da eficiência do método  Tempo extra das chamadas recursivas

        • Sugestão  Ordenação borbulhante


Ordena o em c lii

Ordenação em C LII

  • Ordenação Rápida (Quicksort) XI

    • Considerações Finais IV

      • Fornecimento da função qsort() pela maioria dos compiladores (parte da biblioteca padrão)

        • Impossibilidade de aplicação de uma função generalizada a todas as situações

        • Parametrização de qsort() para operação sobre uma variedade de dados

          • Execução mais lenta do que a de um algoritmo de ordenação semelhante operando apenas sobre um tipo de dados


Ordena o em c liii

Ordenação em C LIII

  • Ordenação de Outras Estruturas de Dados I

    • Ordenação de Strings I

      • Estratégia Vantajosa

        • Criação de uma matriz de apontadores e caracteres para as strings

          • Possibilidade de indexação fácil

          • Manutenção da base do algoritmo quicksort inalterada


Ordena o em c liv

Ordenação em C LIV

  • Ordenação de Outras Estruturas de Dados II

    • Ordenação de Strings II

      • Exercício 09

        • Analisar e descrever o código apresentado nos slides 56 e 57


Ordena o em c lv

Ordenação em C LV

  • Exemplo 09 (1/2)

/* Ordenação de strings */

#include <string.h>

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#define N 5

#define TAM 10

void quick_string(char i[][TAM], int cont);

void qs_string(char i[][TAM], int esq, int dir);

void main(void)

{

int k;

char s[N][TAM];

clrscr();

for(k = 0; k < N; k++){

printf(“Digite uma string [%d]:", k+1);

gets(s[k]);

}

quick_string(s, N);

printf("\nStrings ordenadas:");

for(k = 0; k < N; k++) printf("\n%s", s[k]);

getche();

}


Ordena o em c lvi

Ordenação em C LVI

  • Exemplo 09 (2/2)

/* Quicksort para strings */

void quick_string(char i[][TAM], int cont){

qs_string(i, 0, cont-1);

}

void qs_string(char i[][TAM], int esq, int dir){

register int j, k;

char *x;

char auxi[10];

i = esq; j = dir;

x=i[(esq + dir)/2];

do {

while(strcmp(i[k], x) < 0 && k < dir) k++;

while(strcmp(i[j], x) > 0 && j > esq) j--;

if(k <= j){

strcpy(auxi, i[k]);

strcpy(i[k], i[k]);

strcpy(item[j], auxi);

i++; j--;

}

} while(k <= j);

if(esq < j) qs_string(i, esq, j);

if(i < dir) qs_string(i, k, dir);

}


Ordena o em c lvii

Ordenação em C LVII

  • Ordenação de Outras Estruturas de Dados III

    • Ordenação de Arquivos em Disco I

      • Modos de Acesso a Arquivos em Disco

        • Seqüencial

        • Direto ou Randômico (aleatório)


Ordena o em c lviii

Ordenação em C LVIII

  • Ordenação de Outras Estruturas de Dados IV

    • Ordenação de Arquivos em Disco II

      • Arquivos pequenos

        • Leitura na memória

          • Ordenação eficiente a partir de algoritmos de ordenação de vetores (apresentados em slides anteriores)


Ordena o em c lix

Ordenação em C LIX

  • Ordenação de Outras Estruturas de Dados V

    • Ordenação de Arquivos em Disco III

      • Arquivos grandes

        • Impossibilidade de leitura na memória

          • Adoção de técnicas especiais


Ordena o em c lx

Ordenação em C LX

  • Ordenação de Outras Estruturas de Dados VI

    • Ordenação de Arquivos em Disco IV

      • Vantagens (acesso aleatório – seqüencial)

        • Facilidade de manutenção e atualização de informações sem necessidade de cópia de toda a lista de dados

        • Possibilidade de tratamento como um grandes vetores (matrizes) no disco

          • Simplificação do processo de ordenação

Nota: O tratamento de um arquivo de acesso aleatório como uma matriz implica a possibilidade de uso do método quicksort com modificações relativamente simples


Ordena o em c lxi

Ordenação em C LXI

  • Considerações Finais sobre Algoritmos de Ordenação I

    • Classes de Algoritmos em função de sua Complexidade I

      • Constatação de correlação direta entre a complexidade algorítmica e eficiência relativa do algoritmo

      • Complexidade Algorítmica

        • Geralmente expressa em notação Big-O

          • OComplexidade do algoritmo

          • nTamanho do conjunto de dados processados


Ordena o em c lxii

Ordenação em C LXII

  • Considerações Finais sobre Algoritmos de Ordenação II

    • Classes de Algoritmos em função de sua Complexidade II

      • Complexidade QuadráticaO(n2)

        • Ordenações bubble, por inserção, por seleção e shell

      • Complexidade LogarítmicaO(nlogn)

        • Heapsort, mergesort e quicksort

http://www.softpanorama.org/Algorithms/sorting.shtml

http://www.devx.com/vb2themax/Article/19900


Ordena o em c lxiii

Métodos de Ordenação 0(n2)

900

800

700

600

500

Tempo de ordenação (s)

400

300

Borbulhante

200

Inserção

100

Seleção

Shell

0

n

10

105

Ordenação em C LXIII

  • Considerações Finais sobre Algoritmos de Ordenação III

    • Complexidade Quadrática  O(n2)


Ordena o em c lxiv

Métodos de Ordenação 0(nlogn)

0,7

0,6

0,5

0,4

Tempo de ordenação (s)

0,3

0,2

0,1

0

n

10

105

Ordenação em C LXIV

  • Considerações Finais sobre Algoritmos de Ordenação IV

    • Complexidade Logarítmica  O(nlogn)


Ordena o em c lxv

Ordenação em C LXV

  • Considerações Finais sobre Algoritmos de Ordenação V

    • O qualificativo melhor é função do contexto de uso

      • Quicksort pode parecer o método mais rápido

        • Usá-lo em uma lista de 15 itens é como matar um mosquito com uma bazuca

    • Necessidade de conhecimento dos diferentes métodos de ordenação

      • Escolha do algoritmo mais adequado à resolução do problema de interesse


Ordena o em c lxvi

Ordenação em C LXVI

  • Considerações Finais sobre Algoritmos de Ordenação VI

    • Os algoritmos da 2ª categoria são indiscutivelmente mais rápidos do que os da 1ª categoria

      • Desvantagens

        • Custo computacional

        • Uso de recursão

        • Uso de arrays múltiplos


Rangel@dsc ufcg edu br rangeldequeiroz@gmail com

José Eustáquio Rangel de Queiroz

UNIVERSIDADE FEDERAL DE CAMPINA GRANDE

CENTRO DE CIÊNCIAS E TECNOLOGIA

DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO

[email protected], [email protected]


  • Login