Você está na página 1de 17

Universidade Estadual de Campinas UNICAMP Centro Superior de Educao Tecnolgica CESET ca o

Linguagem C - vol. 3
Prof.: Marco Antonio Garcia de Carvalho

Agosto 2005 Campinas, SP - Brasil

Sumrio a
1 Algoritmos de ordenao ca 1.1 Introduo . . . . . . . . . . . . . . . . . . . . ca 1.2 Algoritmos de ordenao: mtodos iterativos ca e 1.2.1 Ordenao por seleo . . . . . . . . . ca ca 1.2.2 Ordenao por insero . . . . . . . . ca ca 1.2.3 Ordenao bolha . . . . . . . . . . . . ca 1.3 Algoritmos de ordenao: mtodos recursivos ca e 1.3.1 Quicksort . . . . . . . . . . . . . . . . 1.3.2 Mergesort . . . . . . . . . . . . . . . . 2 Grafos 2.1 Denies bsicas . . . . . . . co a 2.2 Representaes de Grafos . . co 2.3 Matriz distncia em um grafo a 2.4 Algoritmo Dijkstra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 2 2 3 3 3 4 5 6 6 7 8 8 10 10 10 10 11 11 11 12 12 14 14 14 14 14 14 14 14 15 15 15 15 15 16

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

3 Arvores 3.1 Denies bsicas . . . . . . . . . . . . . . . . . . . . . . co a 3.2 Arvore geradora m nima . . . . . . . . . . . . . . . . . . 3.2.1 Algoritmo de Kruskal . . . . . . . . . . . . . . . 3.3 Arvores binrias . . . . . . . . . . . . . . . . . . . . . . a 3.4 Construo ascendente de rvores hierrquicas binrias . ca a a a 3.4.1 Fundamentos . . . . . . . . . . . . . . . . . . . . 3.4.2 Ligao Simples . . . . . . . . . . . . . . . . . . ca 3.4.3 Aplicao: O cdigo de Human . . . . . . . . . ca o 4 Sistemas de numerao ca 4.1 Denies . . . . . . . . . . . co 4.1.1 Sistema decimal . . . 4.1.2 Sistema binrio . . . . a 4.1.3 Sistema hexadecimal . 4.2 Converso entre sistemas . . . a 4.3 Aritmtica binria . . . . . . e a 4.4 Representao de Nmeros de ca u 5 Tipos abstratos de dados 5.1 Denies . . . . . . . . co 5.2 Pilhas . . . . . . . . . . 5.3 Filas . . . . . . . . . . . 5.4 Listas . . . . . . . . . . Bibliograa

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ponto Flutuante

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

1
1.1

Algoritmos de ordenao ca
Introduo ca
Ordenar um problema importante em diversas tarefas na computao. e ca Algoritmos de ordenao por seleo e insero so excelentes quando n pequeno, mas ca ca ca a e para grandes valores de n outros algoritmos de ordenao so mais ecientes(mergesort, ca a quicksort). Uma comparao simples entre tempo de execuo de algoritmos de ordenao dada a ca ca ca e seguir. Usou-se implementaes em Pascal (Brassard, 1988). co . Quando n pequeno, a diferena entre ecincia quase no percept e c e a e vel. . Quicksort aproximadamente 2 vezes mais rpido que o insertion sort na ordenao de e a ca 50 elementos e trs vezes mais rpido na ordenao de 100 elementos. e a ca . Para ordenar 1000 elementos, insertion sort leva cerca de 3 segundos, enquanto que o quicksort requer menos de 1/15 segundo. A inecincia de usar o insertion sort torna-se e clara para n da ordem de 5000 elementos: cerca de 1 minuto e meio; enquanto quicksort leva um pouco mais de 1 segundo. Podemos classicar os algoritmos de ordenao em dois grandes grupos: algoritmos iteraca tivos e algoritmos recursivos. As sees seguintes apresentam 3 algoritmos pertencentes ao co primeira grupo, alm de dois algoritmos de ordenao que trabalham com recursividade. e ca

1.2

Algoritmos de ordenao: mtodos iterativos ca e

So conhecidamente menos ecientes que os algoritmos recursivos quando se trabalha com a grandes quantidades de dados (anlise assinttica). a o Para os 3 algoritmos a seguir, efetue um teste de mesa (acompanhamento das variveis) a utilizando o vetor de 5 elementos V = {3, 1, 7, 2, 0}. 1.2.1 Ordenao por seleo ca ca

A maior parte do tempo de execuo gasto na realizao do lao interno. ca e ca c O algoritmo da ordem de O n2 . e Algoritmo 1 Algoritmo Selection sort Entrada: vetor V : vetor[1. . . n] Para i de 1 at n 1 Faa e c minj i minx V (i) Para j de i + 1 at n Faa e c Se V (j) < minx Ento a minj j minx V (j) Fim Se Fim Para V (minj) V (i) V (i) minx Fim Para

1.2.2

Ordenao por insero ca ca

O tempo que o algoritmo gasta para ordenar n elementos depende da congurao inicial ca dos elementos. O nmero de comparaes realizadas entre elementos uma boa medida da complexidade u co e (como para a maioria dos algoritmos de ordenao). ca Uma ordem de O (n) suciente para a maioria das instncias, embora para o pior caso seja e a de n2 . Algoritmo 2 Algoritmo Insertion sort Entrada: Vetor V : vetor[1. . . n] Para i de 2 at n Faa e c x V (i) j i1 Enquanto j > 0 e x < V (j) Faa c V (j + 1) V (j) j j1 Fim Enquanto V (j + 1) x Fim Para

1.2.3

Ordenao bolha ca

E uma das ordenaes mais conhecidas (e de pior performance, da ordem de n2 ). co A ordenao envolve repetidas comparaes e, se necessrio, a troca de elementos adjacentes. ca co a Os elementos so como bolhas em um tanque de gua: cada um procura o seu prprio n a a o vel. Algoritmo 3 Algoritmo Bolha Entrada: Vetor V , nmero de elementos n de V u Sa da: Vetor V ordenado Para i de 2 at n Faa e c Para j de n at i Faa e c Se V (j 1) > V (j) Ento a temp V (j 1) V (j 1) V (j) V (j) temp Fim Se Fim Para Fim Para Retornar V

1.3

Algoritmos de ordenao: mtodos recursivos ca e

Na linguagem C, assim como em outras linguagens, uma funo pode chamar a si prpria. ca o Essa funo dita recursiva. Recursividade o ato da funo de chamar a si mesma com a ca e e ca nalidade de resolver um determinado problema. Avalie os algoritmos a seguir para o vetor V = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3} (faa um acompanc hamento das variveis e do vetor V ). a 3

1.3.1

Quicksort

E um dos algoritmos de ordenao mais usados na prtica devido ` sua ecincia. ca a a e Faz parte das tcnicas denominadas de dividir e conquistar, que consistem em particionar e o problema em instncias menores, resolvendo-os sucessiva e independentemente, e ao nal a combinando-as para obter a soluo do problema original. ca O algoritmo (ver Algoritmo 4) inicia com a escolha de um dos elementos do vetor a ser ordenado como piv. Em seguida, o vetor dividido em duas partes: elementos maiores que o e o piv so posicionados ` direita e elementos menores que o piv, ` esquerda. o a a o a Em seguida, as duas partes do vetor so ordenadas independentemente atravs de chamadas a e recursivas ao algoritmo. O resultado um vetor completamente ordenado, obtido sem a e necessidade de outras etapas, como intercalaes e fuses. co o Algoritmo 4 Algoritmo Quicksort(T [i . . . j]) Se j i pequeno Ento a insertionsort(T [i . . . j]) Se No a Particiona(T [i . . . j] , l) Quicksort(T [i . . . l 1]) Quicksort(T [l + 1 . . . j]) Fim Se A funo Particiona permuta os elementos do vetor (T [i . . . j]) de modo que ao m de sua ca execuo i l j, os elementos de (T [i . . . l 1]) so menores que um piv p e os elementos ca a o (T [l + 1 . . . j]) so maiores que p. O piv p normalmente escolhido como o primeiro ou a o e ultimo elemento no vetor, como mostrado no exemplo a seguir (Figura 1).

Figura 1: Exemplo para a funo Particiona. O ultimo elemento foi o escolhido como piv. ca o

Na Figura 1: 1. Percorre-se da esquerda para direita at achar um elemento T(i) maior do que p. e

2. Percorre-se tambm da direita para esquerda at achar um elemento T(j) menor do que e e p. 3. Troca-se esses dois elementos. 4. Continua-se percorrendo e trocando os elementos at j i. e 5. Por m, troca-se p com T(i). O algoritmo da ordem de O n2 , para o pior caso. Contudo, para a maioria dos casos o e algoritmo quicksort da ordem de n logn. e 1.3.2 Mergesort

Consiste na tcnica de dividir e conquistar. e Separa um vetor em duas partes; ordena-as atravs de chamadas recursivas e depois agrupa e as solues de cada parte, preservando a ordem. co Algoritmo 5 Algoritmo Mergesort(A, inicio, f im) A o vetor a ser ordenado; inicio e f im correspondem aos e ndices do vetor. Se f im inicio pequeno Ento a insertionsort(A, inicio, f im) Se No a meio (inicio + f im) div 2 Mergesort(A, inicio, meio) Mergesort(A, meio + 1, f im) Intercala(A, inicio, meio, f im) Fim Se A Figura 2 mostra um exemplo de ordenao pelo mergesort. A primeira linha o vetor ca e inicial e cada linha ilustra uma troca ou uma intercalaao. c

Figura 2: Exemplo de ordenao pelo mergesort. ca

2
2.1

Grafos
Denies bsicas co a
Grafo Um grafo G denido por G = (V, E), sendo que V representa o conjunto de ns e o e E, o conjunto de arestas (i, j), onde i, j V . Dois ns i, j so vizinhos, denotado por o a i j, se eles esto conectados por uma aresta. A Figura 3 mostra um exemplo de grafo, a consistindo dos conjuntos V = {a, b, c, d, e} e e = {e1, e2, e3, e4, e5, e6}.

Figura 3: Exemplo de um Grafo.

Caminho Um caminho entre i1 e in a lista (i1 , i2 , . . . , in1 , in ), onde ik ik+1 , k = e 1, 2, . . . , n 1. Dois ns i, j so conectados se existe ao menos um caminho entre i e j. Um o a caminho onde i1 = in chamado de ciclo. Um exemplo de caminho entre os ns a e e do e o grafo na Figura 3 a lista (e3, e6) e Grafo conexo Um grafo G dito conexo se existe um caminho para qualquer par de ns e o (i, j) pertencente ` G. a Componente conexa Componente conexa o mximo subgrafo conexo de G. Observe e a que uma componente conexa sempre no-vazia; Um grafo vazio, portanto, no tem come a a ponentes.

Figura 4: Um grafo G com 3 componentes conexas.

Grafo direcional Um grafo dito direcional, ou d e grafro, quando o sentido das arestas e importante e indicado atravs de uma seta, como ilustrado na Figura 5. e

Figura 5: Exemplo de um d grafo.

Grafo Ponderado Em um grafo ponderado, um peso ou conjunto de pesos associado a e cada aresta, representado da forma w(i, j). J em um grafo com atributos A, denido por a G = (V, E, A), os valores so associados aos ns de G. O menor custo entre dois ns i, j, a o o C(i, j), denido como o menor custo entre os custos de todos os caminhos existentes entre e i e j.

2.2

Representaes de Grafos co

Matriz de adjacncia Uma das formas mais utilizadas para representar grafos via a e e matriz de adjacncia. Seja A = [aij ] uma matriz n n, onde n o numero de ns de um e e o grafo G = (V, E) qualquer. A matriz de adjacncia A constru da seguinte forma: e e da A(i, j) = 1 0 se i j caso contrrio a

A Figura 6 ilustra o conceito de matriz de adjacncia para um grafo simples. e

Figura 6: (a) Um grafo G e (b) sua matriz de adjacncia. e

Quando o grafo possui peso associado aos arcos, a representao s ca completa quando ca o tambm se indica a sua matriz de pesos, constru de maneira semelhante ` matriz ade da a jacncia (troca-se o valor do peso pelos 1s). Para d e grafos, preciso observar o sentido do e caminho entre os ns. o Lista indexada Trata-se de uma representao que favorece a recuperao mais rpida ca ca a de informao nos grafos, basicamente por no possuir informaes de no adjacncia (os ca a co a e zeros na matriz de adjacncia). Usa-se duas tabelas e . A tabela lista os sucessores do e n i, iniciando da posio referenciada em (i). Toda informao relacionada ao vrtice i o ca ca e est contida entre as posies (i) e (i + 1) 1 da tabela . Veja um exemplo na Figura 7 a co a seguir.

Figura 7: Lista indexada de um grafo G. Se o grafo for ponderado, ento a informao dos pesos das arestas deve ser armazenada em a ca uma outra tabela em uma correspondncia um-a-um com . e 7

2.3

Matriz distncia em um grafo a

Em diversas situaes, deseja-se calcular a distncia, ou o comprimento do caminho entre co a dois ns. O conceito de distncia deve respeitar algumas restries, como por exemplo, ser o a co associada a nmeros no negativos, alm de satisfazer as propriedades: u a e (a) d(u, v) 0 e d(u, v) = 0 se e somente se u = v (b) d(u, v) = d(v, u) (c) d(u, v) + d(v, w) d(u, w) onde u, v, w so ns de um grafo. A Figura 8 apresenta um grafo e sua respectiva matriz a o distncia. A cada arco associado um peso de valor 1. a e

Figura 8: Um grafo e sua matriz distncia. a

2.4

Algoritmo Dijkstra

Suponha que um grafo represente um conjunto de estradas em um estado ou pa (os vrtices s e representam as cidades e as arestas, as estradas). Cada aresta tem um peso que indica a distncia entre as duas cidades conectadas pela aresta. Um motorista deseja ir de uma cidade a A para outra cidade B e est interessado em obter uma resposta para as questes: a o (1) Existe um caminho entre A e B? (2) Se existir mais de um caminho, qual aquele que tem o menor comprimento? e Esse tipo de problema conhecido como problema do caminho m e nimo. Como se observa na Figura 8, a matriz distncia constru com base na menor distncia a e da a entre dois vrtices. O Algoritmo 6 determina o comprimento do menor caminho entre dois e ns a e z, em um grafo conectado. Esse algoritmo foi desenvolvido por Edsger W. Dijkstra, o na metade do sculo passado. e Algoritmo 6 Algoritmo Dijkstra Determina o menor caminho entre dois ns o Entrada: Grafo conectado com pesos nos arcos (matriz w), ns a e z. o Sa da: L(z) - comprimento do menor caminho entre a e z. L(a) 0 Para todo n x = a Faa o c L(x) Fim Para T conjunto de todos os ns cuja menor distncia at a ainda no foi calculada. o a e a Enquanto z T Faa c Escolha v T com menor L(v) T = T {v} Para x T vizinho a v Faa c L(x) min {L (x) , L (v) + w (v, x)} Fim Para Fim Enquanto Um exemplo da implementao desse algoritmo dado na Figura 9. A Figura 9(a) apresenta ca e um grafo G com pesos nos arcos. Deseja-se encontrar a menor distncia entre os ns a e z. a o 8

As Figuras 9(b)-9(f) mostram os passos realizados na implementao do Algoritmo 6 at se ca e alcanar o resultado desejado. c

Figura 9: (a) Um grafo G e (b)-(f) os passos necessrios para se obter a menor distncia entre os a a ns a e z segundo o Algoritmo 6. o

3
3.1

Arvores
Denies bsicas co a
Pode-se designar um n para ser a raiz da rvore, o que demonstra uma relao lgica o a ca o entre os ns. Essas rvores so ditas hierrquicas e a distncia entre cada n e a raiz o a a a a o e denominada de n vel. Em uma rvore hierrquica os ns podem ser rotulados de acordo com a a o a denominao de uma rvore genealgica: lhos, pais e ancestrais, no sentido literal das ca a o palavras. Arvore Um grafo conexo sem ciclos chamado de rvore. e a

Figura 10: Exemplo de rvore. a

Os vrtices de uma rvore que possuem somente um vizinho so chamados de folhas. e a a Floresta Uma oresta um grafo onde as componentes so rvores. e a a

3.2

Arvore geradora m nima

Arvore geradora E uma rvore T , subgrafo de G, que contm todos os ns de G. Uma a e o a rvore geradora cuja a soma dos pesos de seus arcos seja menor do que em qualquer outra situao chamada de rvore geradora m ca e a nima.

Figura 11: (b) um exemplo de rvore geradora de (a). e a

3.2.1

Algoritmo de Kruskal

Determina uma rvore geradora m a nima de um grafo G = (V, E). Um grafo pode ter mais de uma rvore geradora m a nima. Descreveremos de maneira informal o algoritmo de Kruskal:

10

1. O conjunto T de arestas est inicialmente vazio. Conforme o andamento do algoritmo, a arestas vo sendo adicionadas. a 2. A cada instante, o grafo parcial formado pelos ns de G e as arestas em T consistem o de vrias componentes conexas (inicialmente, quando T est vazio, cada n de G forma a a o uma componente conexa distinta). 3. Para construir componentes conexas cada vez maiores, examinam-se as arestas de G em ordem crescente de comprimento. Se uma aresta junta dois ns em uma diferente o componente conexa, adiciona-se ela a T e, conseqentemente, as duas componente u conexas transformam-se me uma. Caso contrrio, a aresta rejeitada: ela une dois ns a e o na mesma componente conexa e no pode ser adicionada a T sem formar um ciclo. a 4. O algoritmo pra somente quando uma componente conexa determinada. a e Vejamos um exemplo de determinao de AGM usando o algoritmo Kruskal para o grafo da ca Figura 12 e Tabela 1.

Figura 12: (a) Grafo G e sua (b) rvore geradora m a nima T .

Passo inicializao ca 1 2 3 4 5 6 7

Aresta {1, 2} {2, 3} {4, 5} {6, 7} {1, 4} {2, 5} {4, 7}

Componentes conexas {1} {2} {3} {4} {5} {6} {7} {1, 2} {3} {4} {5} {6} {7} {1, 2, 3} {4} {5} {6} {7} {1, 2, 3} {4, 5} {6} {7} {1, 2, 3} {4, 5} {6, 7} {1, 2, 3, 4, 5} {6, 7} rejeitada {1, 2, 3, 4, 5, 6, 7}

Tabela 1: Acompanhamento do exemplo para o algoritmo Kruskal.

3.3

Arvores binrias a

Uma rvore hierrquica onde cada n d origem a dois outros ns de n inferior chamada a a o a o vel e de rvore binria. a a Arvores binrias tem diversas aplicaes em computao (busca, classicao etc). a co ca ca Nmero de ns: Uma rvore binria completa com k n u o a a veis tem exatamente 2k 1 ns. o

3.4
3.4.1

Construo ascendente de rvores hierrquicas binrias ca a a a


Fundamentos

A distncia entre os ns (objetos) calculada previamente. a o e 11

Procede-se atravs de etapas sucessivas, reunindo-se dois-a-dois os objetos mais prximos. e o Ao m de cada etapa, recalcula-se a distncia entre o novo objeto formado e o restante dos a objetos. Uma das diculdades est na escolha da frmula para recalcular as distncias entre objetos. a o a Este processo gera uma hierarquia indexada. Diferentes formas de recalcular a distncia a produz diferentes tipos de hierarquias. As hierarquias mais comuns so as do tipo Ligao a ca Simples e Ligao Completa. Iremos trabalhar somente com a primeira. ca 3.4.2 Ligao Simples ca

Designa-se i e j os dois objetos que deseja-se agrupar e k um outro objeto do conjunto. A equao abaixo indica a nova distncia a ser calculada no processo de Ligao Simples. ca a ca d (i j, k) = min (d (i, k) , d (j, k)) Um exemplo de aplicao desta tcnica dado nas Figuras 13(a) e (b). ca e e (1)

Figura 13: (a) rvore original e (b) construo do tipo ligao simples. A representao grca a ca ca ca a em (b) conhecida como dendrograma. e

A partir dos dados da Figura 13(a), tem-se a distncia entre cada objeto: a d (x, y) = 1; d (x, z) = 2, 1; d (x, t) = 3, 3; d (y, z) = 1, 1; d (y, t) = 2, 3; d (z, t) = 1, 2 O primeiro grupo formado o x y, com distncia 1. Utilizando a equao da distncia para e a ca a a ligao simples, tem-se d (x y, z) = 1, 1 e d (x y, t) = 2, 3. Portanto, agrupa-se x y ca com o objeto z. Por m, agrupa-se o objeto t. 3.4.3 Aplicao: O cdigo de Human ca o

A codicao proposta por Human(1952) tm sido uma tcnica importante utilizada para ca e e comprimir dados e, portanto, economizar espao de armazenamento de arquivos. O problema c consiste em: dado um texto qualquer (uma seqncia de caracteres), determinar um cdigo ue o para cada um dos caracteres de forma que minimize a quantidade de bits necessria para a codicar o texto. Suponha que um texto com 250 caracteres contenha seis tipos de caracteres A, B, C, D, E e F , com freqncias (quantidade de caracteres no texto) iguais a 50, 20, 30, 40, ue 100 e 10, respectivamente. Determine um cdigo para cada um deles segundo o mtodo de o e Human (acompanhe o desenvolvimento atravs da Tabela 2 e da Figura 14). Observaes: e co 1. Se usarmos o cdigo ASCII extendido (8 bits), o nmero total de bits igual a 2508 = o u e 2000 bits. 2. Se usarmos um cdigo de tamanho xo de 3 bits para representar os 6 caracteres, o o nmero total de bits 250 3 = 750 bits. u e 3. Com o cdigo de Human, o nmero de bits cai para 580 bits!! o u

12

S mbolo E A D C B F

Freqncia ue 100 50 40 30 20 10

1a. 100 50 40 30 30

2a. 100 60 50 40

3a. 100 90 60

4a. 150 100

5a. 250

Tabela 2: Acompanhamento do exemplo para a codicao de Human. A numerao ao lado da ca ca palavra Freqncia representa a ordem de juno dos caracteres. ue ca

Figura 14: Uso de rvores binrias para a visualizao da codicao de Human. a a ca ca

13

4
4.1
4.1.1 4.1.2 4.1.3

Sistemas de numerao ca
Denies co
Sistema decimal Sistema binrio a Sistema hexadecimal

4.2 4.3 4.4

Converso entre sistemas a Aritmtica binria e a Representao de N meros de Ponto Flutuante ca u

14

5
5.1 5.2 5.3 5.4

Tipos abstratos de dados


Denies co Pilhas Filas Listas

15

Referncias e
[1] Celes, W., Cerqueira, R., Rangel, J. L. Introduo a Estrutura de Dados. Rio de Janeiro: ca Elsevier, 2004. [2] Schildt, H. C Completo e Total. So Paulo: Makron Books, 1996. a [3] Deitel, H. M., Deitel, P. J. Como Programar em C. Rio de Janeiro: LTC, 1999. [4] Arnush, C. Teach Yourself Turbo C++ 4.5 For Windows in 21 Days. Indianapolis: Sams Publishing, 1998. [5] Manzano, J. A. N. G. Linguagem C - Estudo Dirigido. So Paulo: Erica, 1997. a [6] CORTES, P. L. Turbo C: Ferramentas & Utilitrios, vol. 1. So Paulo: Erica, 1999. a a [7] Lehmann, A.H., Trevisan, R. Turbo C. Guia de Referncia Rpida de todas as Funes. So e a co a Paulo: Erica, 1990.

16

Você também pode gostar