From 3879940eda9dcc57660d47643188779d9c4831c5 Mon Sep 17 00:00:00 2001 From: Antonio Neto Date: Sat, 16 Sep 2023 12:23:18 -0300 Subject: [PATCH 1/6] Versao mais ludica --- {fonte => Codigos}/ajuda/README.md | 182 ++-- {fonte => Codigos}/ajuda/java/Arq.java | 412 ++++----- {fonte => Codigos}/ajuda/java/ExemploURL.java | 80 +- {fonte => Codigos}/ajuda/java/MyIO.java | 504 +++++------ .../u00 Nivelamento/c/aquivo/arq01.c | 36 +- .../u00 Nivelamento/c/aquivo/arq02.c | 38 +- .../u00 Nivelamento/c/aquivo/arq03.c | 42 +- .../u00 Nivelamento/c/aquivo/arq04.c | 46 +- .../u00 Nivelamento/c/aquivo/arq05.c | 24 +- .../u00 Nivelamento/c/aquivo/arq06.c | 22 +- .../u00 Nivelamento/c/aquivo/arq07.c | 38 +- .../u00 Nivelamento/c/aquivo/arq08.c | 48 +- .../u00 Nivelamento/c/aquivo/arq09.c | 50 +- .../u00 Nivelamento/c/aquivo/arq10.c | 70 +- .../u00 Nivelamento/c/aquivo/arq11.c | 46 +- .../u00 Nivelamento/c/aquivo/arq12.c | 44 +- .../u00 Nivelamento/c/aquivo/arquivos.c | 232 ++--- .../u00 Nivelamento/c/argumentos_main.c | 26 +- .../u00 Nivelamento/c/leituraescrita.c | 44 +- .../u00 Nivelamento/c/makefile/helloworld.c | 12 +- .../u00 Nivelamento/c/makefile/helloworld.h | 12 +- .../u00 Nivelamento/c/makefile/main.c | 16 +- .../u00 Nivelamento/c/makefile/makefile | 30 +- .../u00 Nivelamento/c/meuprimeiroprograma.c | 12 +- .../u00 Nivelamento/c/ponteiro/ponteiro01.c | 26 +- .../u00 Nivelamento/c/ponteiro/ponteiro02.c | 38 +- .../u00 Nivelamento/c/ponteiro/ponteiro03.c | 54 +- .../u00 Nivelamento/c/ponteiro/ponteiro04.c | 26 +- .../u00 Nivelamento/c/ponteiro/ponteiro05.c | 52 +- .../c/ponteiro/ponteiro05emCMaisMais.cc | 52 +- .../u00 Nivelamento/c/ponteiro/ponteiro06.c | 48 +- .../u00 Nivelamento/c/ponteiro/ponteiro07.c | 60 +- .../u00 Nivelamento/c/ponteiro/ponteiro08.c | 38 +- .../u00 Nivelamento/c/ponteiro/ponteiro09.c | 80 +- .../u00 Nivelamento/c/ponteiro/ponteiro10.c | 42 +- .../u00 Nivelamento/c/ponteiro/ponteiro11.c | 40 +- .../u00 Nivelamento/c/ponteiro/ponteiro12.c | 40 +- .../c/recursividade/chamandometodo.c | 52 +- .../c/recursividade/contarmaiuscula.c | 90 +- .../c/recursividade/fatorialrecursivo.c | 36 +- .../c/recursividade/fibonaccirecursivo.c | 36 +- .../c/recursividade/multiplicacao.c | 68 +- .../c/recursividade/printrecursivo.c | 34 +- .../u00 Nivelamento/c/registro/registro01.c | 48 +- .../u00 Nivelamento/c/registro/registro02.c | 48 +- .../u00 Nivelamento/c/registro/registro03.c | 44 +- .../u00 Nivelamento/c/registro/registro04.c | 58 +- {fonte => Codigos}/u00 Nivelamento/c/sizeof.c | 28 +- {fonte => Codigos}/u00 Nivelamento/c/string.c | 66 +- .../java/argumentoMain/ArgumentoMain.java | 12 +- .../java/arquivo/ExemploArq01Escrita.java | 42 +- .../java/arquivo/ExemploArq02Leitura.java | 56 +- .../java/arquivo/ExemploArq02bLeitura.java | 56 +- .../java/arquivo/ExemploArq03Exercicio.java | 32 +- .../java/arquivo/ExemploRAF01Escrita.java | 32 +- .../java/arquivo/ExemploRAF02Leitura.java | 44 +- .../java/arquivo/ExemploRAF03Cabecote.java | 58 +- .../java/classeObjeto/ExemploOO.java | 0 .../java/classeObjeto/classeMatriz/Lixao.java | 86 +- .../classeObjeto/classeMatriz/Matriz.java | 122 +-- .../classeObjeto/classeRetangulo/Lixao.java | 0 .../classeRetangulo/Principal.java | 88 +- .../classeRetangulo/Retangulo.java | 204 ++--- .../java/classeObjeto/estatico/Estatico.java | 38 +- .../java/classeObjeto/estatico/Lixao.java | 52 +- .../primeiraClasse/Funcionario.java | 0 .../classeObjeto/primeiraClasse/Lixao.java | 0 .../java/classeObjeto/visibilidade/Lixao.java | 54 +- .../visibilidade/Visibilidade.java | 0 .../entradaSaida/ExemploBufferedReader.java | 86 +- .../java/entradaSaida/ExemploMyIO.java | 26 +- .../java/entradaSaida/ExemploScanner.java | 56 +- .../java/entradaSaida/entrada.txt | 10 +- .../java/ponteiro/Cliente.java | 0 .../java/ponteiro/Ponteiro01Array.java | 28 +- .../Ponteiro02PassagemTipoPrimitivo.java | 38 +- .../ponteiro/Ponteiro03PassagemArray.java | 62 +- .../java/ponteiro/Ponteiro04Objeto.java | 110 +-- .../ponteiro/Ponteiro05PassagemObjeto.java | 192 ++-- .../Ponteiro06PassagemObjetoClone.java | 198 ++--- .../java/ponteiro/Ponteiro07ObjetoClone.java | 116 +-- .../java/ponteiro/Ponteiro08Objeto.java | 0 .../java/recursividade/ChamandoMetodo.java | 40 +- .../java/recursividade/ContarMaiuscula.java | 80 +- .../java/recursividade/FatorialRecursivo.java | 40 +- .../recursividade/FibonacciRecursivo.java | 36 +- .../java/recursividade/Multiplicacao.java | 62 +- .../java/recursividade/PrintRecursivo.java | 36 +- .../TratamentoExcecao01.java | 24 +- .../TratamentoExcecao02.java | 38 +- .../TratamentoExcecao03.java | 44 +- .../TratamentoExcecao04.java | 74 +- .../TratamentoExcecao05.java | 44 +- .../README.md | 4 +- .../java/AND_OR.java | 38 +- .../java/Log.java | 34 +- .../java/Pesquisa.java | 122 +-- .../README.md | 4 +- .../c/fila.c | 288 +++--- .../c/lista.c | 430 ++++----- .../java/Fila.java | 200 ++--- .../java/Fila2Pilha.java | 112 +-- .../java/Lista.java | 366 ++++---- .../java/ListaOrdenada.java | 312 +++---- .../java/PrincipalFila.java | 126 +-- .../java/PrincipalLista.java | 58 +- .../java/PrincipalListaOrdenada.java | 42 +- .../README.md | 28 +- .../c/bolha.c | 28 +- .../c/bolha.h | 12 +- .../c/countingsort.c | 72 +- .../c/countingsort.h | 16 +- .../c/geracao.c | 140 +-- .../c/geracao.h | 36 +- .../c/heapsort.c | 112 +-- .../c/heapsort.h | 28 +- .../c/insercao.c | 30 +- .../c/insercao.h | 16 +- .../c/makefile | 86 +- .../c/mergesort.c | 90 +- .../c/mergesort.h | 24 +- .../c/principal.c | 120 +-- .../c/quicksort.c | 44 +- .../c/quicksort.h | 20 +- .../c/radixsort.c | 102 +-- .../c/radixsort.h | 20 +- .../c/selecao.c | 28 +- .../c/selecao.h | 16 +- .../c/shellsort.c | 54 +- .../c/shellsort.h | 20 +- .../java/Bolha.java | 76 +- .../java/Countingsort.java | 132 +-- .../java/Geracao.java | 320 +++---- .../java/Heapsort.java | 176 ++-- .../java/Insercao.java | 84 +- .../java/Mergesort.java | 162 ++-- .../java/Principal.java | 96 +- .../java/Quicksort.java | 106 +-- .../java/Radixsort.java | 164 ++-- .../java/Selecao.java | 82 +- .../java/Shellsort.java | 120 +-- .../c/celula.h | 62 +- .../c/coletalixo/a.out | Bin .../c/coletalixo/coletalixo.c | 76 +- .../c/fila.h | 122 +-- .../c/fila/fila.c | 270 +++--- .../c/fila_teste.c | 52 +- .../c/lista.h | 244 +++--- .../c/lista_dupla.h | 302 +++---- .../c/lista_dupla_teste.c | 100 +-- .../c/lista_teste.c | 86 +- .../c/listadupla/listadupla.c | 534 ++++++------ .../c/listasimples/lista.c | 496 +++++------ .../c/matriz/entrada.in | 74 +- .../c/pilha.h | 120 +-- .../c/pilha/pilha.c | 206 ++--- .../c/pilha_teste.c | 52 +- .../java/TADs Nativos em Java/FilaNativa.java | 32 +- .../java/TADs Nativos em Java/ListaNativa.java | 72 +- .../java/TADs Nativos em Java/PilhaNativa.java | 30 +- .../java/coletalixo/Celula.java | 52 +- .../java/coletalixo/ColetaLixo.java | 46 +- .../java/fila/Celula.java | 52 +- .../java/fila/Fila.java | 122 +-- .../java/fila/PrincipalFila.java | 126 +-- .../java/listadupla/CelulaDupla.java | 54 +- .../java/listadupla/ListaDupla.java | 408 ++++----- .../java/listadupla/PrincipalListaDupla.java | 80 +- .../java/listasimples}/Celula.java | 52 +- .../java/listasimples/Lista.java | 376 ++++---- .../java/listasimples/PrincipalLista.java | 82 +- .../java/matriz/Celula.java | 40 +- .../java/matriz/Matriz.java | 116 +-- .../java/matriz/Principal.java | 60 +- .../java/matriz/entrada.in | 74 +- .../java/pilha}/Celula.java | 52 +- .../java/pilha/Pilha.java | 180 ++-- .../java/pilha/PrincipalPilha.java | 70 +- .../u05 Árvores binárias/README.md | 4 +- .../arvoreArvore/ArvoreArvore.java | 446 +++++----- .../u05 Árvores binárias/arvoreArvore/No.java | 70 +- .../arvoreArvore/No2.java | 52 +- .../arvoreBinaria/c/arvorebinaria.c | 406 ++++----- .../arvoreBinaria/c/arvorebinaria.h | 50 +- .../arvoreBinaria/c/makefile | 38 +- .../u05 Árvores binárias/arvoreBinaria/c/no.c | 36 +- .../u05 Árvores binárias/arvoreBinaria/c/no.h | 30 +- .../arvoreBinaria/c/principal.c | 118 +-- .../arvoreBinaria/cc/arvorebinaria.cc | 400 ++++----- .../arvoreBinaria/cc/arvorebinaria.h | 54 +- .../arvoreBinaria/cc/makefile | 32 +- .../arvoreBinaria/cc/no.cc | 32 +- .../arvoreBinaria/cc/no.h | 28 +- .../arvoreBinaria/cc/principal.cc | 120 +-- .../arvoreBinaria/java/ArvoreBinaria.java | 820 +++++++++--------- .../arvoreBinaria/java/No.java | 62 +- .../arvoreBinaria/java/Principal.java | 30 +- .../arvoreBinaria/java/Principal2.java | 56 +- .../arvoreBinaria/java/Principal3.java | 66 +- .../arvoreBinaria/java/TreeSort.java | 122 +-- .../arvoreBinariaDeLista/Agenda.java | 192 ++-- .../arvoreBinariaDeLista/Celula.java | 34 +- .../arvoreBinariaDeLista/Contato.java | 32 +- .../arvoreBinariaDeLista/No.java | 24 +- .../matrizDeLista}/Celula.java | 52 +- .../matrizDeLista/CelulaMat.java | 44 +- .../matrizDeLista/MatrizDeLista.java | 0 .../u06 Balanceamento de árvores/README.md | 4 +- .../java/alvinegra/Alvinegra.java | 570 ++++++------ .../java/alvinegra/NoAN.java | 58 +- .../java/alvinegra/Oi.java | 0 .../java/alvinegra/Principal.java | 166 ++-- .../java/avl/AVL.java | 498 +++++------ .../java/avl/No.java | 90 +- .../java/avl/Principal.java | 40 +- .../u07 Tabelas e dicionários/README.md | 4 +- .../java/doidona/DoidonaComTADsProntas.java | 234 ++--- .../java/doidona/DoidonaSemTADsProntas.java | 318 +++---- .../java/hashDiretoRehash/Hash.java | 128 +-- .../java/hashDiretoReserva/Hash.java | 126 +-- .../java/hashIndiretoLista/Hash.java | 86 +- .../java/hashIndiretoLista/Lista.java | 412 ++++----- {fonte => Codigos}/u08 Árvores TRIE/README.md | 4 +- .../u08 Árvores TRIE/java/patricia/No.java | 62 +- .../java/patricia/Patricia.java | 282 +++--- .../java/patricia/Principal.java | 94 +- .../java/trie/ArvoreTrie.java | 180 ++-- .../u08 Árvores TRIE/java/trie/No.java | 42 +- .../u08 Árvores TRIE/java/trie/Principal.java | 70 +- .../java/trieVariacoes/trieAB}/ArvoreTrie.java | 142 +-- .../java/trieVariacoes/trieAB/No.java | 206 ++--- .../java/trieVariacoes/trieAB/NoAB.java | 54 +- .../java/trieVariacoes/trieAB/Principal.java | 68 +- .../trieHashAceitandoPrefixo/ArvoreTrie.java | 144 +-- .../trieHashAceitandoPrefixo/No.java | 42 +- .../trieHashAceitandoPrefixo/Principal.java | 72 +- .../trieListaFlexivel}/ArvoreTrie.java | 142 +-- .../trieListaFlexivel/Celula.java | 60 +- .../trieVariacoes/trieListaFlexivel/No.java | 126 +-- .../trieListaFlexivel/Principal.java | 68 +- .../java/trieVariacoes/trieListaFlexivel/oi | 168 ++-- .../unidade00a_nivelamento_gitHub.pdf | Bin .../u00 Nivelamento/unidade00b_exercicios.pdf | Bin .../u00 Nivelamento/unidade00c_roteiroLab.pdf | Bin .../unidade00d_nivelamento_MyIO.pdf | Bin ...nidade00e_nivelamento_redirecionamento.pdf | Bin .../unidade00f_nivelamento_arquivo.pdf | Bin ...nidade00g_nivelamento_IntroduçãoAoJava.pdf | Bin ...dade00h_conceitosBasicos_recursividade.pdf | Bin .../unidade00i_conceitosBasicos_ponteiros.pdf | Bin ...unidade00j_conceitosBasicos_formatacao.pdf | Bin ...idade00k_nivelamento_tratamentoExcecao.pdf | Bin .../unidade00l_nivelamento_introducaoOO.pdf | Bin ...ade00m_linguagemCparaProgramadoresJava.pdf | Bin .../unidade00n_conceitosCLASSPATH.pdf | Bin .../unidade00o_processoAEDsIIExercício.pdf | Bin .../unidade01-planoEnsino.pdf | Bin ...unidade01a-noções-complexidade-gabarito.pdf | Bin .../unidade01a-noções-complexidade.pdf | Bin .../unidade01a2_algoritmosPesquisa.pdf | Bin .../unidade01a3_ordenacaoInterna_selecao.pdf | Bin ...rdenacaoInterna_selecao_estruturaCodigo.pdf | Bin .../unidade01b1_somatorios_introdução.pdf | Bin .../unidade01b2_somatorios_manipulação.pdf | Bin .../unidade01b3_somatorios_metodos.pdf | Bin .../unidade01b4_somatorios_gabarito.pdf | Bin ...ndamentos-analise-complexidade-gabarito.pdf | Bin ...ade01c-fundamentos-analise-complexidade.pdf | Bin .../unidade02a_tadLinear_lista.pdf | Bin .../unidade02b_tadLinear_pilha.pdf | Bin .../unidade02c_tadLinear_fila.pdf | Bin .../unidade03a_ordenacaoInterna_bolha.pdf | Bin .../unidade03b_ordenacaoInterna_insercao.pdf | Bin .../unidade03c_ordenacaoInterna_shellsort.pdf | Bin .../unidade03d_ordenacaoInterna_quicksort.pdf | Bin .../unidade03e_ordenacaoInterna_mergesort.pdf | Bin .../unidade03f_ordenacaoInterna_heapsort.pdf | Bin .../unidade03g_ordenacaoInterna_countingsort.pdf | Bin .../unidade03h_ordenacaoInterna_radixsort.pdf | Bin .../unidade03i_ordenacaoInterna_conclusao.pdf | Bin .../unidade03j_ordenacaoParcial.pdf | Bin .../unidade03k_ordenacaoParalela.pdf | Bin .../unidade04a_tadFlexivel_introducao.pdf | Bin .../unidade04b_tadFlexivel_pilha.pdf | Bin .../unidade04b_tadLinear_pilha.pdf | Bin .../unidade04c_tadFlexivel_fila.pdf | Bin .../unidade04c_tadLinear_fila.pdf | Bin .../unidade04d_tadFlexivel_listasimples.pdf | Bin .../unidade04e_tadFlexivel_listadupla.pdf | Bin .../unidade04f_tadFlexivel_matriz.pdf | Bin .../unidade04h_tadFlexivel_emC.pdf | Bin .../unidade05a_árvoreBinaria_introdução.pdf | Bin .../unidade05b_ordenacaoInterna_insercao.pdf | Bin .../unidade05b_árvoreBinaria_inserção.pdf | Bin .../unidade05c_ordenacaoInterna_shellsort.pdf | Bin ...5c_árvoreBinaria_pesquisa e caminhamento.pdf | Bin .../unidade05d_ordenacaoInterna_quicksort.pdf | Bin .../unidade05d_árvoreBinaria_remoção.pdf | Bin .../unidade05e_árvoreBinaria_em_C.pdf | Bin .../unidade05f_ordenacaoInterna_heapsort.pdf | Bin .../unidade05f_árvoreBinaria_em_C++.pdf | Bin ...unidade05g_ordenacaoInterna_countingsort.pdf | Bin ...ade05g_árvoreBinaria_Estruturas Híbridas.pdf | Bin .../unidade05h_ordenacaoInterna_radixsort.pdf | Bin .../unidade05i_ordenacaoInterna_conclusao.pdf | Bin .../unidade05j_ordenacaoParcial.pdf | Bin .../unidade05k_ordenacaoParalela.pdf | Bin .../unidade06a_balanceamento.pdf | Bin .../unidade06b_avl.pdf | Bin .../unidade06c_2_3_4.pdf | Bin .../unidade06d_alvinegra.pdf | Bin .../unidade06g_coletaDeLixo.pdf | Bin .../unidade07a_tabelaHash.pdf | Bin .../u08 Árvores TRIE/unidade08a_trie.pdf | Bin .../u08 Árvores TRIE/unidade08b_patricia.pdf | Bin README.md | 27 +- .../unidade03a_ordenacaoInterna_bolha (1).pdf | Bin 314436 -> 0 bytes oiii | 18 - 318 files changed, 11851 insertions(+), 11858 deletions(-) rename {fonte => Codigos}/ajuda/README.md (96%) rename {fonte => Codigos}/ajuda/java/Arq.java (95%) rename {fonte => Codigos}/ajuda/java/ExemploURL.java (96%) rename {fonte => Codigos}/ajuda/java/MyIO.java (96%) rename {fonte => Codigos}/u00 Nivelamento/c/aquivo/arq01.c (95%) rename {fonte => Codigos}/u00 Nivelamento/c/aquivo/arq02.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/aquivo/arq03.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/aquivo/arq04.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/aquivo/arq05.c (93%) rename {fonte => Codigos}/u00 Nivelamento/c/aquivo/arq06.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/aquivo/arq07.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/aquivo/arq08.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/aquivo/arq09.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/aquivo/arq10.c (95%) rename {fonte => Codigos}/u00 Nivelamento/c/aquivo/arq11.c (95%) rename {fonte => Codigos}/u00 Nivelamento/c/aquivo/arq12.c (96%) rename {fonte => Codigos}/u00 Nivelamento/c/aquivo/arquivos.c (96%) rename {fonte => Codigos}/u00 Nivelamento/c/argumentos_main.c (93%) rename {fonte => Codigos}/u00 Nivelamento/c/leituraescrita.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/makefile/helloworld.c (93%) rename {fonte => Codigos}/u00 Nivelamento/c/makefile/helloworld.h (91%) rename {fonte => Codigos}/u00 Nivelamento/c/makefile/main.c (93%) rename {fonte => Codigos}/u00 Nivelamento/c/makefile/makefile (95%) rename {fonte => Codigos}/u00 Nivelamento/c/meuprimeiroprograma.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/ponteiro/ponteiro01.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/ponteiro/ponteiro02.c (96%) rename {fonte => Codigos}/u00 Nivelamento/c/ponteiro/ponteiro03.c (96%) rename {fonte => Codigos}/u00 Nivelamento/c/ponteiro/ponteiro04.c (93%) rename {fonte => Codigos}/u00 Nivelamento/c/ponteiro/ponteiro05.c (95%) rename {fonte => Codigos}/u00 Nivelamento/c/ponteiro/ponteiro05emCMaisMais.cc (94%) rename {fonte => Codigos}/u00 Nivelamento/c/ponteiro/ponteiro06.c (95%) rename {fonte => Codigos}/u00 Nivelamento/c/ponteiro/ponteiro07.c (93%) rename {fonte => Codigos}/u00 Nivelamento/c/ponteiro/ponteiro08.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/ponteiro/ponteiro09.c (96%) rename {fonte => Codigos}/u00 Nivelamento/c/ponteiro/ponteiro10.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/ponteiro/ponteiro11.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/ponteiro/ponteiro12.c (96%) rename {fonte => Codigos}/u00 Nivelamento/c/recursividade/chamandometodo.c (93%) rename {fonte => Codigos}/u00 Nivelamento/c/recursividade/contarmaiuscula.c (95%) rename {fonte => Codigos}/u00 Nivelamento/c/recursividade/fatorialrecursivo.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/recursividade/fibonaccirecursivo.c (95%) rename {fonte => Codigos}/u00 Nivelamento/c/recursividade/multiplicacao.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/recursividade/printrecursivo.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/registro/registro01.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/registro/registro02.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/registro/registro03.c (94%) rename {fonte => Codigos}/u00 Nivelamento/c/registro/registro04.c (95%) rename {fonte => Codigos}/u00 Nivelamento/c/sizeof.c (96%) rename {fonte => Codigos}/u00 Nivelamento/c/string.c (96%) rename {fonte => Codigos}/u00 Nivelamento/java/argumentoMain/ArgumentoMain.java (97%) rename {fonte => Codigos}/u00 Nivelamento/java/arquivo/ExemploArq01Escrita.java (94%) rename {fonte => Codigos}/u00 Nivelamento/java/arquivo/ExemploArq02Leitura.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/arquivo/ExemploArq02bLeitura.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/arquivo/ExemploArq03Exercicio.java (95%) rename {fonte => Codigos}/u00 Nivelamento/java/arquivo/ExemploRAF01Escrita.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/arquivo/ExemploRAF02Leitura.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/arquivo/ExemploRAF03Cabecote.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/classeObjeto/ExemploOO.java (100%) rename {fonte => Codigos}/u00 Nivelamento/java/classeObjeto/classeMatriz/Lixao.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/classeObjeto/classeMatriz/Matriz.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/classeObjeto/classeRetangulo/Lixao.java (100%) rename {fonte => Codigos}/u00 Nivelamento/java/classeObjeto/classeRetangulo/Principal.java (97%) rename {fonte => Codigos}/u00 Nivelamento/java/classeObjeto/classeRetangulo/Retangulo.java (95%) rename {fonte => Codigos}/u00 Nivelamento/java/classeObjeto/estatico/Estatico.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/classeObjeto/estatico/Lixao.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/classeObjeto/primeiraClasse/Funcionario.java (100%) rename {fonte => Codigos}/u00 Nivelamento/java/classeObjeto/primeiraClasse/Lixao.java (100%) rename {fonte => Codigos}/u00 Nivelamento/java/classeObjeto/visibilidade/Lixao.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/classeObjeto/visibilidade/Visibilidade.java (100%) rename {fonte => Codigos}/u00 Nivelamento/java/entradaSaida/ExemploBufferedReader.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/entradaSaida/ExemploMyIO.java (97%) rename {fonte => Codigos}/u00 Nivelamento/java/entradaSaida/ExemploScanner.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/entradaSaida/entrada.txt (80%) rename {fonte => Codigos}/u00 Nivelamento/java/ponteiro/Cliente.java (100%) rename {fonte => Codigos}/u00 Nivelamento/java/ponteiro/Ponteiro01Array.java (95%) rename {fonte => Codigos}/u00 Nivelamento/java/ponteiro/Ponteiro02PassagemTipoPrimitivo.java (95%) rename {fonte => Codigos}/u00 Nivelamento/java/ponteiro/Ponteiro03PassagemArray.java (95%) rename {fonte => Codigos}/u00 Nivelamento/java/ponteiro/Ponteiro04Objeto.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/ponteiro/Ponteiro05PassagemObjeto.java (97%) rename {fonte => Codigos}/u00 Nivelamento/java/ponteiro/Ponteiro06PassagemObjetoClone.java (97%) rename {fonte => Codigos}/u00 Nivelamento/java/ponteiro/Ponteiro07ObjetoClone.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/ponteiro/Ponteiro08Objeto.java (100%) rename {fonte => Codigos}/u00 Nivelamento/java/recursividade/ChamandoMetodo.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/recursividade/ContarMaiuscula.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/recursividade/FatorialRecursivo.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/recursividade/FibonacciRecursivo.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/recursividade/Multiplicacao.java (95%) rename {fonte => Codigos}/u00 Nivelamento/java/recursividade/PrintRecursivo.java (95%) rename {fonte => Codigos}/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao01.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao02.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao03.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao04.java (96%) rename {fonte => Codigos}/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao05.java (96%) rename {fonte => Codigos}/u01 Fundamentos de análise de algoritmos/README.md (97%) rename {fonte => Codigos}/u01 Fundamentos de análise de algoritmos/java/AND_OR.java (96%) rename {fonte => Codigos}/u01 Fundamentos de análise de algoritmos/java/Log.java (96%) rename {fonte => Codigos}/u01 Fundamentos de análise de algoritmos/java/Pesquisa.java (96%) rename {fonte => Codigos}/u02 Estruturas de dados basicas lineares/README.md (97%) rename {fonte => Codigos}/u02 Estruturas de dados basicas lineares/c/fila.c (94%) rename {fonte => Codigos}/u02 Estruturas de dados basicas lineares/c/lista.c (94%) rename {fonte => Codigos}/u02 Estruturas de dados basicas lineares/java/Fila.java (95%) rename {fonte => Codigos}/u02 Estruturas de dados basicas lineares/java/Fila2Pilha.java (94%) rename {fonte => Codigos}/u02 Estruturas de dados basicas lineares/java/Lista.java (95%) rename {fonte => Codigos}/u02 Estruturas de dados basicas lineares/java/ListaOrdenada.java (95%) rename {fonte => Codigos}/u02 Estruturas de dados basicas lineares/java/PrincipalFila.java (95%) rename {fonte => Codigos}/u02 Estruturas de dados basicas lineares/java/PrincipalLista.java (96%) rename {fonte => Codigos}/u02 Estruturas de dados basicas lineares/java/PrincipalListaOrdenada.java (96%) rename {fonte => Codigos}/u03 Ordenação em memória principal/README.md (93%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/bolha.c (81%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/bolha.h (97%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/countingsort.c (97%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/countingsort.h (97%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/geracao.c (96%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/geracao.h (98%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/heapsort.c (96%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/heapsort.h (98%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/insercao.c (96%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/insercao.h (97%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/makefile (95%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/mergesort.c (96%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/mergesort.h (98%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/principal.c (95%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/quicksort.c (97%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/quicksort.h (97%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/radixsort.c (96%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/radixsort.h (97%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/selecao.c (93%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/selecao.h (97%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/shellsort.c (96%) rename {fonte => Codigos}/u03 Ordenação em memória principal/c/shellsort.h (97%) rename {fonte => Codigos}/u03 Ordenação em memória principal/java/Bolha.java (93%) rename {fonte => Codigos}/u03 Ordenação em memória principal/java/Countingsort.java (95%) rename {fonte => Codigos}/u03 Ordenação em memória principal/java/Geracao.java (94%) rename {fonte => Codigos}/u03 Ordenação em memória principal/java/Heapsort.java (95%) rename {fonte => Codigos}/u03 Ordenação em memória principal/java/Insercao.java (94%) rename {fonte => Codigos}/u03 Ordenação em memória principal/java/Mergesort.java (95%) rename {fonte => Codigos}/u03 Ordenação em memória principal/java/Principal.java (96%) rename {fonte => Codigos}/u03 Ordenação em memória principal/java/Quicksort.java (95%) rename {fonte => Codigos}/u03 Ordenação em memória principal/java/Radixsort.java (95%) rename {fonte => Codigos}/u03 Ordenação em memória principal/java/Selecao.java (94%) rename {fonte => Codigos}/u03 Ordenação em memória principal/java/Shellsort.java (94%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/c/celula.h (96%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/c/coletalixo/a.out (100%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/c/coletalixo/coletalixo.c (94%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/c/fila.h (96%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/c/fila/fila.c (94%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/c/fila_teste.c (95%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/c/lista.h (96%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/c/lista_dupla.h (96%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/c/lista_dupla_teste.c (96%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/c/lista_teste.c (95%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/c/listadupla/listadupla.c (95%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/c/listasimples/lista.c (95%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/c/matriz/entrada.in (95%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/c/pilha.h (96%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/c/pilha/pilha.c (94%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/c/pilha_teste.c (95%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/FilaNativa.java (95%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/ListaNativa.java (97%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/PilhaNativa.java (95%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/coletalixo/Celula.java (95%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/coletalixo/ColetaLixo.java (94%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/fila/Celula.java (94%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/fila/Fila.java (94%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/fila/PrincipalFila.java (95%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/listadupla/CelulaDupla.java (94%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/listadupla/ListaDupla.java (96%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/listadupla/PrincipalListaDupla.java (96%) rename {fonte/u05 Árvores binárias/matrizDeLista => Codigos/u04 Estruturas de dados básicas flexíveis/java/listasimples}/Celula.java (94%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/listasimples/Lista.java (96%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/listasimples/PrincipalLista.java (96%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/matriz/Celula.java (95%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/matriz/Matriz.java (94%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/matriz/Principal.java (97%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/matriz/entrada.in (95%) rename {fonte/u04 Estruturas de dados básicas flexíveis/java/listasimples => Codigos/u04 Estruturas de dados básicas flexíveis/java/pilha}/Celula.java (94%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/pilha/Pilha.java (94%) rename {fonte => Codigos}/u04 Estruturas de dados básicas flexíveis/java/pilha/PrincipalPilha.java (95%) rename {fonte => Codigos}/u05 Árvores binárias/README.md (98%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreArvore/ArvoreArvore.java (95%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreArvore/No.java (94%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreArvore/No2.java (95%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinaria/c/arvorebinaria.c (95%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinaria/c/arvorebinaria.h (94%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinaria/c/makefile (95%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinaria/c/no.c (94%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinaria/c/no.h (93%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinaria/c/principal.c (94%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinaria/cc/arvorebinaria.cc (95%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinaria/cc/arvorebinaria.h (95%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinaria/cc/makefile (96%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinaria/cc/no.cc (93%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinaria/cc/no.h (94%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinaria/cc/principal.cc (96%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinaria/java/ArvoreBinaria.java (95%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinaria/java/No.java (95%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinaria/java/Principal.java (97%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinaria/java/Principal2.java (96%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinaria/java/Principal3.java (96%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinaria/java/TreeSort.java (95%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinariaDeLista/Agenda.java (95%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinariaDeLista/Celula.java (94%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinariaDeLista/Contato.java (95%) rename {fonte => Codigos}/u05 Árvores binárias/arvoreBinariaDeLista/No.java (94%) rename {fonte/u04 Estruturas de dados básicas flexíveis/java/pilha => Codigos/u05 Árvores binárias/matrizDeLista}/Celula.java (94%) rename {fonte => Codigos}/u05 Árvores binárias/matrizDeLista/CelulaMat.java (95%) rename {fonte => Codigos}/u05 Árvores binárias/matrizDeLista/MatrizDeLista.java (100%) rename {fonte => Codigos}/u06 Balanceamento de árvores/README.md (98%) rename {fonte => Codigos}/u06 Balanceamento de árvores/java/alvinegra/Alvinegra.java (97%) rename {fonte => Codigos}/u06 Balanceamento de árvores/java/alvinegra/NoAN.java (94%) rename {fonte => Codigos}/u06 Balanceamento de árvores/java/alvinegra/Oi.java (100%) rename {fonte => Codigos}/u06 Balanceamento de árvores/java/alvinegra/Principal.java (96%) rename {fonte => Codigos}/u06 Balanceamento de árvores/java/avl/AVL.java (96%) rename {fonte => Codigos}/u06 Balanceamento de árvores/java/avl/No.java (95%) rename {fonte => Codigos}/u06 Balanceamento de árvores/java/avl/Principal.java (95%) rename {fonte => Codigos}/u07 Tabelas e dicionários/README.md (98%) rename {fonte => Codigos}/u07 Tabelas e dicionários/java/doidona/DoidonaComTADsProntas.java (95%) rename {fonte => Codigos}/u07 Tabelas e dicionários/java/doidona/DoidonaSemTADsProntas.java (95%) rename {fonte => Codigos}/u07 Tabelas e dicionários/java/hashDiretoRehash/Hash.java (95%) rename {fonte => Codigos}/u07 Tabelas e dicionários/java/hashDiretoReserva/Hash.java (95%) rename {fonte => Codigos}/u07 Tabelas e dicionários/java/hashIndiretoLista/Hash.java (95%) rename {fonte => Codigos}/u07 Tabelas e dicionários/java/hashIndiretoLista/Lista.java (96%) rename {fonte => Codigos}/u08 Árvores TRIE/README.md (98%) rename {fonte => Codigos}/u08 Árvores TRIE/java/patricia/No.java (94%) rename {fonte => Codigos}/u08 Árvores TRIE/java/patricia/Patricia.java (97%) rename {fonte => Codigos}/u08 Árvores TRIE/java/patricia/Principal.java (96%) rename {fonte => Codigos}/u08 Árvores TRIE/java/trie/ArvoreTrie.java (96%) rename {fonte => Codigos}/u08 Árvores TRIE/java/trie/No.java (95%) rename {fonte => Codigos}/u08 Árvores TRIE/java/trie/Principal.java (96%) rename {fonte/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel => Codigos/u08 Árvores TRIE/java/trieVariacoes/trieAB}/ArvoreTrie.java (96%) rename {fonte => Codigos}/u08 Árvores TRIE/java/trieVariacoes/trieAB/No.java (94%) rename {fonte => Codigos}/u08 Árvores TRIE/java/trieVariacoes/trieAB/NoAB.java (94%) rename {fonte => Codigos}/u08 Árvores TRIE/java/trieVariacoes/trieAB/Principal.java (96%) rename {fonte => Codigos}/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/ArvoreTrie.java (96%) rename {fonte => Codigos}/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/No.java (94%) rename {fonte => Codigos}/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/Principal.java (96%) rename {fonte/u08 Árvores TRIE/java/trieVariacoes/trieAB => Codigos/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel}/ArvoreTrie.java (96%) rename {fonte => Codigos}/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/Celula.java (95%) rename {fonte => Codigos}/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/No.java (95%) rename {fonte => Codigos}/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/Principal.java (96%) rename {fonte => Codigos}/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/oi (96%) rename {aula => PowerPoints}/u00 Nivelamento/unidade00a_nivelamento_gitHub.pdf (100%) rename {aula => PowerPoints}/u00 Nivelamento/unidade00b_exercicios.pdf (100%) rename {aula => PowerPoints}/u00 Nivelamento/unidade00c_roteiroLab.pdf (100%) rename {aula => PowerPoints}/u00 Nivelamento/unidade00d_nivelamento_MyIO.pdf (100%) rename {aula => PowerPoints}/u00 Nivelamento/unidade00e_nivelamento_redirecionamento.pdf (100%) rename {aula => PowerPoints}/u00 Nivelamento/unidade00f_nivelamento_arquivo.pdf (100%) rename {aula => PowerPoints}/u00 Nivelamento/unidade00g_nivelamento_IntroduçãoAoJava.pdf (100%) rename {aula => PowerPoints}/u00 Nivelamento/unidade00h_conceitosBasicos_recursividade.pdf (100%) rename {aula => PowerPoints}/u00 Nivelamento/unidade00i_conceitosBasicos_ponteiros.pdf (100%) rename {aula => PowerPoints}/u00 Nivelamento/unidade00j_conceitosBasicos_formatacao.pdf (100%) rename {aula => PowerPoints}/u00 Nivelamento/unidade00k_nivelamento_tratamentoExcecao.pdf (100%) rename {aula => PowerPoints}/u00 Nivelamento/unidade00l_nivelamento_introducaoOO.pdf (100%) rename {aula => PowerPoints}/u00 Nivelamento/unidade00m_linguagemCparaProgramadoresJava.pdf (100%) rename {aula => PowerPoints}/u00 Nivelamento/unidade00n_conceitosCLASSPATH.pdf (100%) rename {aula => PowerPoints}/u00 Nivelamento/unidade00o_processoAEDsIIExercício.pdf (100%) rename {aula => PowerPoints}/u01 Fundamentos de Análise de Algoritmos/unidade01-planoEnsino.pdf (100%) rename {aula => PowerPoints}/u01 Fundamentos de Análise de Algoritmos/unidade01a-noções-complexidade-gabarito.pdf (100%) rename {aula => PowerPoints}/u01 Fundamentos de Análise de Algoritmos/unidade01a-noções-complexidade.pdf (100%) rename {aula => PowerPoints}/u01 Fundamentos de Análise de Algoritmos/unidade01a2_algoritmosPesquisa.pdf (100%) rename {aula => PowerPoints}/u01 Fundamentos de Análise de Algoritmos/unidade01a3_ordenacaoInterna_selecao.pdf (100%) rename {aula => PowerPoints}/u01 Fundamentos de Análise de Algoritmos/unidade01a3_ordenacaoInterna_selecao_estruturaCodigo.pdf (100%) rename {aula => PowerPoints}/u01 Fundamentos de Análise de Algoritmos/unidade01b1_somatorios_introdução.pdf (100%) rename {aula => PowerPoints}/u01 Fundamentos de Análise de Algoritmos/unidade01b2_somatorios_manipulação.pdf (100%) rename {aula => PowerPoints}/u01 Fundamentos de Análise de Algoritmos/unidade01b3_somatorios_metodos.pdf (100%) rename {aula => PowerPoints}/u01 Fundamentos de Análise de Algoritmos/unidade01b4_somatorios_gabarito.pdf (100%) rename {aula => PowerPoints}/u01 Fundamentos de Análise de Algoritmos/unidade01c-fundamentos-analise-complexidade-gabarito.pdf (100%) rename {aula => PowerPoints}/u01 Fundamentos de Análise de Algoritmos/unidade01c-fundamentos-analise-complexidade.pdf (100%) rename {aula => PowerPoints}/u02 Estruturas de dados básicas lineares/unidade02a_tadLinear_lista.pdf (100%) rename {aula => PowerPoints}/u02 Estruturas de dados básicas lineares/unidade02b_tadLinear_pilha.pdf (100%) rename {aula => PowerPoints}/u02 Estruturas de dados básicas lineares/unidade02c_tadLinear_fila.pdf (100%) rename {aula => PowerPoints}/u03 Ordenação em memória principal/unidade03a_ordenacaoInterna_bolha.pdf (100%) rename {aula => PowerPoints}/u03 Ordenação em memória principal/unidade03b_ordenacaoInterna_insercao.pdf (100%) rename {aula => PowerPoints}/u03 Ordenação em memória principal/unidade03c_ordenacaoInterna_shellsort.pdf (100%) rename {aula => PowerPoints}/u03 Ordenação em memória principal/unidade03d_ordenacaoInterna_quicksort.pdf (100%) rename {aula => PowerPoints}/u03 Ordenação em memória principal/unidade03e_ordenacaoInterna_mergesort.pdf (100%) rename {aula => PowerPoints}/u03 Ordenação em memória principal/unidade03f_ordenacaoInterna_heapsort.pdf (100%) rename {aula => PowerPoints}/u03 Ordenação em memória principal/unidade03g_ordenacaoInterna_countingsort.pdf (100%) rename {aula => PowerPoints}/u03 Ordenação em memória principal/unidade03h_ordenacaoInterna_radixsort.pdf (100%) rename {aula => PowerPoints}/u03 Ordenação em memória principal/unidade03i_ordenacaoInterna_conclusao.pdf (100%) rename {aula => PowerPoints}/u03 Ordenação em memória principal/unidade03j_ordenacaoParcial.pdf (100%) rename {aula => PowerPoints}/u03 Ordenação em memória principal/unidade03k_ordenacaoParalela.pdf (100%) rename {aula => PowerPoints}/u04 Estruturas de dados básicas flexíveis/unidade04a_tadFlexivel_introducao.pdf (100%) rename {aula => PowerPoints}/u04 Estruturas de dados básicas flexíveis/unidade04b_tadFlexivel_pilha.pdf (100%) rename {aula => PowerPoints}/u04 Estruturas de dados básicas flexíveis/unidade04b_tadLinear_pilha.pdf (100%) rename {aula => PowerPoints}/u04 Estruturas de dados básicas flexíveis/unidade04c_tadFlexivel_fila.pdf (100%) rename {aula => PowerPoints}/u04 Estruturas de dados básicas flexíveis/unidade04c_tadLinear_fila.pdf (100%) rename {aula => PowerPoints}/u04 Estruturas de dados básicas flexíveis/unidade04d_tadFlexivel_listasimples.pdf (100%) rename {aula => PowerPoints}/u04 Estruturas de dados básicas flexíveis/unidade04e_tadFlexivel_listadupla.pdf (100%) rename {aula => PowerPoints}/u04 Estruturas de dados básicas flexíveis/unidade04f_tadFlexivel_matriz.pdf (100%) rename {aula => PowerPoints}/u04 Estruturas de dados básicas flexíveis/unidade04h_tadFlexivel_emC.pdf (100%) rename {aula => PowerPoints}/u05 Árvores binárias/unidade05a_árvoreBinaria_introdução.pdf (100%) rename {aula => PowerPoints}/u05 Árvores binárias/unidade05b_ordenacaoInterna_insercao.pdf (100%) rename {aula => PowerPoints}/u05 Árvores binárias/unidade05b_árvoreBinaria_inserção.pdf (100%) rename {aula => PowerPoints}/u05 Árvores binárias/unidade05c_ordenacaoInterna_shellsort.pdf (100%) rename {aula => PowerPoints}/u05 Árvores binárias/unidade05c_árvoreBinaria_pesquisa e caminhamento.pdf (100%) rename {aula => PowerPoints}/u05 Árvores binárias/unidade05d_ordenacaoInterna_quicksort.pdf (100%) rename {aula => PowerPoints}/u05 Árvores binárias/unidade05d_árvoreBinaria_remoção.pdf (100%) rename {aula => PowerPoints}/u05 Árvores binárias/unidade05e_árvoreBinaria_em_C.pdf (100%) rename {aula => PowerPoints}/u05 Árvores binárias/unidade05f_ordenacaoInterna_heapsort.pdf (100%) rename {aula => PowerPoints}/u05 Árvores binárias/unidade05f_árvoreBinaria_em_C++.pdf (100%) rename {aula => PowerPoints}/u05 Árvores binárias/unidade05g_ordenacaoInterna_countingsort.pdf (100%) rename {aula => PowerPoints}/u05 Árvores binárias/unidade05g_árvoreBinaria_Estruturas Híbridas.pdf (100%) rename {aula => PowerPoints}/u05 Árvores binárias/unidade05h_ordenacaoInterna_radixsort.pdf (100%) rename {aula => PowerPoints}/u05 Árvores binárias/unidade05i_ordenacaoInterna_conclusao.pdf (100%) rename {aula => PowerPoints}/u05 Árvores binárias/unidade05j_ordenacaoParcial.pdf (100%) rename {aula => PowerPoints}/u05 Árvores binárias/unidade05k_ordenacaoParalela.pdf (100%) rename {aula => PowerPoints}/u06 Balanceamento de árvores/unidade06a_balanceamento.pdf (100%) rename {aula => PowerPoints}/u06 Balanceamento de árvores/unidade06b_avl.pdf (100%) rename {aula => PowerPoints}/u06 Balanceamento de árvores/unidade06c_2_3_4.pdf (100%) rename {aula => PowerPoints}/u06 Balanceamento de árvores/unidade06d_alvinegra.pdf (100%) rename {aula => PowerPoints}/u06 Balanceamento de árvores/unidade06g_coletaDeLixo.pdf (100%) rename {aula => PowerPoints}/u07 Tabelas e dicionários/unidade07a_tabelaHash.pdf (100%) rename {aula => PowerPoints}/u08 Árvores TRIE/unidade08a_trie.pdf (100%) rename {aula => PowerPoints}/u08 Árvores TRIE/unidade08b_patricia.pdf (100%) delete mode 100644 aula/u03 Ordenação em memória principal/unidade03a_ordenacaoInterna_bolha (1).pdf delete mode 100644 oiii diff --git a/fonte/ajuda/README.md b/Codigos/ajuda/README.md similarity index 96% rename from fonte/ajuda/README.md rename to Codigos/ajuda/README.md index f5a8f63..5b84a99 100644 --- a/fonte/ajuda/README.md +++ b/Codigos/ajuda/README.md @@ -1,91 +1,91 @@ -## ALGUNS ARQUIVOS INTERESSANTES -* ~/.bash_history - Lista de comandos executados -* ~/.vimrc - Configuracoes do VIM -* ~/.profile - Configuracoes do seu Usuario - -## PRINCIPAIS COMANDOS NO VIM -* i - Abre o modo de insercao -* ESC - Fecha o modo de insercao -* :w - Salvar -* :q - Sair -* :q! - Forcar saida -* :wq! - Salvar e forcar a saida -* ? PALAVRA - Procurar as ocorrencias de PALAVRA -* :%s/STRING_OLD/STRING_NEW/gc - Substrituir a STRING_OLD pela STRING_NEW -* yy - Copiar linha -* NUMEROyy - Copiar NUMERO linhas -* dd - Excluir linha -* NUMEROdd - Excluir NUMERO linhas -* dw - Excluir palavra -* NUMEROdw - Excluir NUMERO palavras -* p - Colar -* :sp ARQUIVO - Abre o arquivo ARQUIVO -* ww - Alternar entre os arquivos abertos -* CTRL+V - Abre o modo de visualizacao - -## ALGUNS COMANDOS PARA O MODO SHELL DO LINUX -* man -* exit -* cd -* ls -* ls -l -t -h -* rm -* cp -* mkdir -* clear -* grep -* grep "PALAVRA" ARQUIVO -* diff -* diff ARQUIVO1 ARQUIVO2 -* ssh -* sftp -* wget -* chmod -* javac -* java -* tar -zcvf arquivo.tar.gz pasta -* tar -zxvf arquivo.tar.gz - -## COMPILAR E EXECUTAR PROGRAMA JAVA EM LINHA DE COMANDO - -1) Compilar: -> javac Programa.java - -2) Executar: -> java Programa - -3) Executar alterando entrada padrao: -> java Programa < entrada.in - -4) Executar alterando saida padrao: -> java Programa > saida.in - -5) Executar alterando entrada/saida padrao: -> java Programa < entrada.in > saida.in - -## COMPILAR E EXECUTAR PROGRAMA C++ EM LINHA DE COMANDO - -1) Compilar: -> g++ fonte.cc -o objeto - -2) Executar: -> ./objeto - -3) Executar alterando entrada padrao: -> ./objeto < entrada.in - -4) Executar alterando saida padrao: -> ./objeto > saida.in - -5) Executar alterando entrada/saida padrao: -> ./objeto < entrada.in > saida.in - -## GDB -1) Chamar o gdb -> gdb objeto - -2) Executar no gdb -> run - -3) Acessar a pilha de chamadas -> bt +## ALGUNS ARQUIVOS INTERESSANTES +* ~/.bash_history - Lista de comandos executados +* ~/.vimrc - Configuracoes do VIM +* ~/.profile - Configuracoes do seu Usuario + +## PRINCIPAIS COMANDOS NO VIM +* i - Abre o modo de insercao +* ESC - Fecha o modo de insercao +* :w - Salvar +* :q - Sair +* :q! - Forcar saida +* :wq! - Salvar e forcar a saida +* ? PALAVRA - Procurar as ocorrencias de PALAVRA +* :%s/STRING_OLD/STRING_NEW/gc - Substrituir a STRING_OLD pela STRING_NEW +* yy - Copiar linha +* NUMEROyy - Copiar NUMERO linhas +* dd - Excluir linha +* NUMEROdd - Excluir NUMERO linhas +* dw - Excluir palavra +* NUMEROdw - Excluir NUMERO palavras +* p - Colar +* :sp ARQUIVO - Abre o arquivo ARQUIVO +* ww - Alternar entre os arquivos abertos +* CTRL+V - Abre o modo de visualizacao + +## ALGUNS COMANDOS PARA O MODO SHELL DO LINUX +* man +* exit +* cd +* ls +* ls -l -t -h +* rm +* cp +* mkdir +* clear +* grep +* grep "PALAVRA" ARQUIVO +* diff +* diff ARQUIVO1 ARQUIVO2 +* ssh +* sftp +* wget +* chmod +* javac +* java +* tar -zcvf arquivo.tar.gz pasta +* tar -zxvf arquivo.tar.gz + +## COMPILAR E EXECUTAR PROGRAMA JAVA EM LINHA DE COMANDO + +1) Compilar: +> javac Programa.java + +2) Executar: +> java Programa + +3) Executar alterando entrada padrao: +> java Programa < entrada.in + +4) Executar alterando saida padrao: +> java Programa > saida.in + +5) Executar alterando entrada/saida padrao: +> java Programa < entrada.in > saida.in + +## COMPILAR E EXECUTAR PROGRAMA C++ EM LINHA DE COMANDO + +1) Compilar: +> g++ fonte.cc -o objeto + +2) Executar: +> ./objeto + +3) Executar alterando entrada padrao: +> ./objeto < entrada.in + +4) Executar alterando saida padrao: +> ./objeto > saida.in + +5) Executar alterando entrada/saida padrao: +> ./objeto < entrada.in > saida.in + +## GDB +1) Chamar o gdb +> gdb objeto + +2) Executar no gdb +> run + +3) Acessar a pilha de chamadas +> bt diff --git a/fonte/ajuda/java/Arq.java b/Codigos/ajuda/java/Arq.java similarity index 95% rename from fonte/ajuda/java/Arq.java rename to Codigos/ajuda/java/Arq.java index 861df8e..9a632d1 100644 --- a/fonte/ajuda/java/Arq.java +++ b/Codigos/ajuda/java/Arq.java @@ -1,206 +1,206 @@ -import java.io.*; -import java.util.Formatter; -import java.util.Scanner; -import java.io.File; -import java.nio.charset.*; - -public class Arq -{ - private static String nomeArquivo = ""; - private static String charsetArquivo = "ISO-8859-1"; - private static boolean write = false, read = false; - private static Formatter saida = null; - private static Scanner entrada = null; - - public static boolean openWrite(String nomeArq, String charset) { - boolean resp = false; - close(); - try{ - saida = new Formatter(nomeArq, charset); - nomeArquivo = nomeArq; - resp = write = true; - } catch (Exception e) {} - return resp; - } - - public static boolean openWrite(String nomeArq) { - return openWrite(nomeArq, charsetArquivo); - } - - public static boolean openWriteClose(String nomeArq, String charset, String conteudo) { - boolean resp = openWrite(nomeArq, charset); - if(resp == true){ - println(conteudo); - close(); - } - return resp; - } - - public static boolean openWriteClose(String nomeArq, String conteudo) { - return openWriteClose(nomeArq, charsetArquivo, conteudo); - } - - public static boolean openRead(String nomeArq) { - return openRead(nomeArq, charsetArquivo); - } - - public static boolean openRead(String nomeArq, String charset) { - boolean resp = false; - close(); - try{ - entrada = new Scanner(new File(nomeArq), charset); - nomeArquivo = nomeArq; - resp = read = true; - } catch (Exception e) {} - return resp; - } - - public static String openReadClose(String nomeArq){ - openRead(nomeArq); - String resp = readAll(); - close(); - return resp; - } - - public static void close() { - if(write == true){ - saida.close(); - } - if(read == true){ - entrada.close(); - } - write = read = false; - nomeArquivo = ""; - charsetArquivo = "ISO-8859-1"; - } - - public static long length(){ - long resp = -1; - if(read != write){ - File file = new File(nomeArquivo); - resp = file.length(); - } - return resp; - } - - public static void print(int x){ - if(write == true){ - saida.format( "%d", x); - } - } - - public static void print(double x){ - if(write == true){ - saida.format( "%f", x); - } - } - - public static void print(String x){ - if(write == true){ - saida.format( "%s", x); - } - } - - public static void print(boolean x){ - if(write == true){ - saida.format( "%s", ((x) ? "true" : "false")); - } - } - - public static void print(char x){ - if(write == true){ - saida.format( "%c", x); - } - } - - public static void println(int x){ - if(write == true){ - saida.format( "%d\n", x); - } - } - - public static void println(double x){ - if(write == true){ - saida.format( "%f\n", x); - } - } - - public static void println(String x){ - if(write == true){ - saida.format( "%s\n", x); - } - } - - public static void println(boolean x){ - if(write == true){ - saida.format( "%s\n", ((x) ? "true" : "false")); - } - } - - public static void println(char x){ - if(write == true){ - saida.format( "%c\n", x); - } - } - - public static int readInt(){ - int resp = -1; - try{ - resp = entrada.nextInt(); - } catch (Exception e) {} - return resp; - } - - public static char readChar(){ - char resp = ' '; - try{ - resp = (char)entrada.nextByte(); - } catch (Exception e) {} - return resp; - } - - public static double readDouble(){ - double resp = -1; - try{ - resp = Double.parseDouble(readString().replace(",",".")); - } catch (Exception e) {} - return resp; - } - - public static String readString(){ - String resp = ""; - try{ - resp = entrada.next(); - } catch (Exception e) { System.out.println(e.getMessage()); } - return resp; - } - - public static boolean readBoolean(){ - boolean resp = false; - try{ - resp = (entrada.next().equals("true")) ? true : false; - } catch (Exception e) {} - return resp; - } - - public static String readLine(){ - String resp = ""; - try{ - resp = entrada.nextLine(); - } catch (Exception e) { System.out.println(e.getMessage()); } - return resp; - } - - - public static boolean hasNext(){ - return entrada.hasNext(); - } - - public static String readAll(){ - String resp = ""; - while(hasNext()){ - resp += (readLine() + "\n"); - } - return resp; - } -} +import java.io.*; +import java.util.Formatter; +import java.util.Scanner; +import java.io.File; +import java.nio.charset.*; + +public class Arq +{ + private static String nomeArquivo = ""; + private static String charsetArquivo = "ISO-8859-1"; + private static boolean write = false, read = false; + private static Formatter saida = null; + private static Scanner entrada = null; + + public static boolean openWrite(String nomeArq, String charset) { + boolean resp = false; + close(); + try{ + saida = new Formatter(nomeArq, charset); + nomeArquivo = nomeArq; + resp = write = true; + } catch (Exception e) {} + return resp; + } + + public static boolean openWrite(String nomeArq) { + return openWrite(nomeArq, charsetArquivo); + } + + public static boolean openWriteClose(String nomeArq, String charset, String conteudo) { + boolean resp = openWrite(nomeArq, charset); + if(resp == true){ + println(conteudo); + close(); + } + return resp; + } + + public static boolean openWriteClose(String nomeArq, String conteudo) { + return openWriteClose(nomeArq, charsetArquivo, conteudo); + } + + public static boolean openRead(String nomeArq) { + return openRead(nomeArq, charsetArquivo); + } + + public static boolean openRead(String nomeArq, String charset) { + boolean resp = false; + close(); + try{ + entrada = new Scanner(new File(nomeArq), charset); + nomeArquivo = nomeArq; + resp = read = true; + } catch (Exception e) {} + return resp; + } + + public static String openReadClose(String nomeArq){ + openRead(nomeArq); + String resp = readAll(); + close(); + return resp; + } + + public static void close() { + if(write == true){ + saida.close(); + } + if(read == true){ + entrada.close(); + } + write = read = false; + nomeArquivo = ""; + charsetArquivo = "ISO-8859-1"; + } + + public static long length(){ + long resp = -1; + if(read != write){ + File file = new File(nomeArquivo); + resp = file.length(); + } + return resp; + } + + public static void print(int x){ + if(write == true){ + saida.format( "%d", x); + } + } + + public static void print(double x){ + if(write == true){ + saida.format( "%f", x); + } + } + + public static void print(String x){ + if(write == true){ + saida.format( "%s", x); + } + } + + public static void print(boolean x){ + if(write == true){ + saida.format( "%s", ((x) ? "true" : "false")); + } + } + + public static void print(char x){ + if(write == true){ + saida.format( "%c", x); + } + } + + public static void println(int x){ + if(write == true){ + saida.format( "%d\n", x); + } + } + + public static void println(double x){ + if(write == true){ + saida.format( "%f\n", x); + } + } + + public static void println(String x){ + if(write == true){ + saida.format( "%s\n", x); + } + } + + public static void println(boolean x){ + if(write == true){ + saida.format( "%s\n", ((x) ? "true" : "false")); + } + } + + public static void println(char x){ + if(write == true){ + saida.format( "%c\n", x); + } + } + + public static int readInt(){ + int resp = -1; + try{ + resp = entrada.nextInt(); + } catch (Exception e) {} + return resp; + } + + public static char readChar(){ + char resp = ' '; + try{ + resp = (char)entrada.nextByte(); + } catch (Exception e) {} + return resp; + } + + public static double readDouble(){ + double resp = -1; + try{ + resp = Double.parseDouble(readString().replace(",",".")); + } catch (Exception e) {} + return resp; + } + + public static String readString(){ + String resp = ""; + try{ + resp = entrada.next(); + } catch (Exception e) { System.out.println(e.getMessage()); } + return resp; + } + + public static boolean readBoolean(){ + boolean resp = false; + try{ + resp = (entrada.next().equals("true")) ? true : false; + } catch (Exception e) {} + return resp; + } + + public static String readLine(){ + String resp = ""; + try{ + resp = entrada.nextLine(); + } catch (Exception e) { System.out.println(e.getMessage()); } + return resp; + } + + + public static boolean hasNext(){ + return entrada.hasNext(); + } + + public static String readAll(){ + String resp = ""; + while(hasNext()){ + resp += (readLine() + "\n"); + } + return resp; + } +} diff --git a/fonte/ajuda/java/ExemploURL.java b/Codigos/ajuda/java/ExemploURL.java similarity index 96% rename from fonte/ajuda/java/ExemploURL.java rename to Codigos/ajuda/java/ExemploURL.java index d43b6ef..b21b213 100644 --- a/fonte/ajuda/java/ExemploURL.java +++ b/Codigos/ajuda/java/ExemploURL.java @@ -1,40 +1,40 @@ -import java.io.*; -import java.net.*; - -class ExemploURL { - public static String getHtml(String endereco){ - URL url; - InputStream is = null; - BufferedReader br; - String resp = "", line; - - try { - url = new URL(endereco); - is = url.openStream(); // throws an IOException - br = new BufferedReader(new InputStreamReader(is)); - - while ((line = br.readLine()) != null) { - resp += line + "\n"; - } - } catch (MalformedURLException mue) { - mue.printStackTrace(); - } catch (IOException ioe) { - ioe.printStackTrace(); - } - - try { - is.close(); - } catch (IOException ioe) { - // nothing to see here - - } - - return resp; - } - public static void main(String[] args) { - String endereco, html; - endereco = "http://maratona.crc.pucminas.br/series/Friends.html"; - html = getHtml(endereco); - System.out.print(html); - } -} +import java.io.*; +import java.net.*; + +class ExemploURL { + public static String getHtml(String endereco){ + URL url; + InputStream is = null; + BufferedReader br; + String resp = "", line; + + try { + url = new URL(endereco); + is = url.openStream(); // throws an IOException + br = new BufferedReader(new InputStreamReader(is)); + + while ((line = br.readLine()) != null) { + resp += line + "\n"; + } + } catch (MalformedURLException mue) { + mue.printStackTrace(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } + + try { + is.close(); + } catch (IOException ioe) { + // nothing to see here + + } + + return resp; + } + public static void main(String[] args) { + String endereco, html; + endereco = "http://maratona.crc.pucminas.br/series/Friends.html"; + html = getHtml(endereco); + System.out.print(html); + } +} diff --git a/fonte/ajuda/java/MyIO.java b/Codigos/ajuda/java/MyIO.java similarity index 96% rename from fonte/ajuda/java/MyIO.java rename to Codigos/ajuda/java/MyIO.java index d7dd0a8..ef15cf2 100644 --- a/fonte/ajuda/java/MyIO.java +++ b/Codigos/ajuda/java/MyIO.java @@ -1,252 +1,252 @@ -import java.io.*; -import java.nio.charset.*; - -class MyIO { - - private static BufferedReader in = new BufferedReader(new InputStreamReader(System.in, Charset.forName("ISO-8859-1"))); - private static String charset = "ISO-8859-1"; - - public static void setCharset(String charset_){ - charset = charset_; - in = new BufferedReader(new InputStreamReader(System.in, Charset.forName(charset))); - } - - public static void print(){ - } - - public static void print(int x){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.print(x); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - } - - public static void print(float x){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.print(x); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - } - - public static void print(double x){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.print(x); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - } - - public static void print(String x){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.print(x); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - } - - public static void print(boolean x){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.print(x); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - } - - public static void print(char x){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.print(x); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - } - - public static void println(){ - } - - public static void println(int x){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.println(x); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - } - - public static void println(float x){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.println(x); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - } - - public static void println(double x){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.println(x); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - } - - public static void println(String x){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.println(x); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - } - - public static void println(boolean x){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.println(x); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - } - - public static void println(char x){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.println(x); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - } - - public static void printf(String formato, double x){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.printf(formato, x);// "%.2f" - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - } - - public static double readDouble(){ - double d = -1; - try{ - d = Double.parseDouble(readString().trim().replace(",",".")); - }catch(Exception e){} - return d; - } - - public static double readDouble(String str){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.print(str); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - return readDouble(); - } - - public static float readFloat(){ - return (float) readDouble(); - } - - public static float readFloat(String str){ - return (float) readDouble(str); - } - - public static int readInt(){ - int i = -1; - try{ - i = Integer.parseInt(readString().trim()); - }catch(Exception e){} - return i; - } - - public static int readInt(String str){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.print(str); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - return readInt(); - } - - public static String readString(){ - String s = ""; - char tmp; - try{ - do{ - tmp = (char)in.read(); - if(tmp != '\n' && tmp != ' ' && tmp != 13){ - s += tmp; - } - }while(tmp != '\n' && tmp != ' '); - }catch(IOException ioe){ - System.out.println("lerPalavra: " + ioe.getMessage()); - } - return s; - } - - public static String readString(String str){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.print(str); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - return readString(); - } - - public static String readLine(){ - String s = ""; - char tmp; - try{ - do{ - tmp = (char)in.read(); - if(tmp != '\n' && tmp != 13){ - s += tmp; - } - }while(tmp != '\n'); - }catch(IOException ioe){ - System.out.println("lerPalavra: " + ioe.getMessage()); - } - return s; - } - - public static String readLine(String str){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.print(str); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - return readLine(); - } - - public static char readChar(){ - char resp = ' '; - try{ - resp = (char)in.read(); - }catch(Exception e){} - return resp; - } - - public static char readChar(String str){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.print(str); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - return readChar(); - } - - public static boolean readBoolean(){ - boolean resp = false; - String str = ""; - - try{ - str = readString(); - }catch(Exception e){} - - if(str.equals("true") || str.equals("TRUE") || str.equals("t") || str.equals("1") || - str.equals("verdadeiro") || str.equals("VERDADEIRO") || str.equals("V")){ - resp = true; - } - - return resp; - } - - public static boolean readBoolean(String str){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.print(str); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - return readBoolean(); - } - - public static void pause(){ - try{ - in.read(); - }catch(Exception e){} - } - - public static void pause(String str){ - try { - PrintStream out = new PrintStream(System.out, true, charset); - out.print(str); - }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } - pause(); - } -} +import java.io.*; +import java.nio.charset.*; + +class MyIO { + + private static BufferedReader in = new BufferedReader(new InputStreamReader(System.in, Charset.forName("ISO-8859-1"))); + private static String charset = "ISO-8859-1"; + + public static void setCharset(String charset_){ + charset = charset_; + in = new BufferedReader(new InputStreamReader(System.in, Charset.forName(charset))); + } + + public static void print(){ + } + + public static void print(int x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void print(float x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void print(double x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void print(String x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void print(boolean x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void print(char x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void println(){ + } + + public static void println(int x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.println(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void println(float x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.println(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void println(double x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.println(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void println(String x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.println(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void println(boolean x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.println(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void println(char x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.println(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void printf(String formato, double x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.printf(formato, x);// "%.2f" + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static double readDouble(){ + double d = -1; + try{ + d = Double.parseDouble(readString().trim().replace(",",".")); + }catch(Exception e){} + return d; + } + + public static double readDouble(String str){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(str); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + return readDouble(); + } + + public static float readFloat(){ + return (float) readDouble(); + } + + public static float readFloat(String str){ + return (float) readDouble(str); + } + + public static int readInt(){ + int i = -1; + try{ + i = Integer.parseInt(readString().trim()); + }catch(Exception e){} + return i; + } + + public static int readInt(String str){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(str); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + return readInt(); + } + + public static String readString(){ + String s = ""; + char tmp; + try{ + do{ + tmp = (char)in.read(); + if(tmp != '\n' && tmp != ' ' && tmp != 13){ + s += tmp; + } + }while(tmp != '\n' && tmp != ' '); + }catch(IOException ioe){ + System.out.println("lerPalavra: " + ioe.getMessage()); + } + return s; + } + + public static String readString(String str){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(str); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + return readString(); + } + + public static String readLine(){ + String s = ""; + char tmp; + try{ + do{ + tmp = (char)in.read(); + if(tmp != '\n' && tmp != 13){ + s += tmp; + } + }while(tmp != '\n'); + }catch(IOException ioe){ + System.out.println("lerPalavra: " + ioe.getMessage()); + } + return s; + } + + public static String readLine(String str){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(str); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + return readLine(); + } + + public static char readChar(){ + char resp = ' '; + try{ + resp = (char)in.read(); + }catch(Exception e){} + return resp; + } + + public static char readChar(String str){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(str); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + return readChar(); + } + + public static boolean readBoolean(){ + boolean resp = false; + String str = ""; + + try{ + str = readString(); + }catch(Exception e){} + + if(str.equals("true") || str.equals("TRUE") || str.equals("t") || str.equals("1") || + str.equals("verdadeiro") || str.equals("VERDADEIRO") || str.equals("V")){ + resp = true; + } + + return resp; + } + + public static boolean readBoolean(String str){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(str); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + return readBoolean(); + } + + public static void pause(){ + try{ + in.read(); + }catch(Exception e){} + } + + public static void pause(String str){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(str); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + pause(); + } +} diff --git a/fonte/u00 Nivelamento/c/aquivo/arq01.c b/Codigos/u00 Nivelamento/c/aquivo/arq01.c similarity index 95% rename from fonte/u00 Nivelamento/c/aquivo/arq01.c rename to Codigos/u00 Nivelamento/c/aquivo/arq01.c index 1ab7d09..c2b110f 100644 --- a/fonte/u00 Nivelamento/c/aquivo/arq01.c +++ b/Codigos/u00 Nivelamento/c/aquivo/arq01.c @@ -1,18 +1,18 @@ -#include -#include - - - -int main(int argc, char *argv[]) { - - FILE *p = fopen ("teste.txt", "r"); - // testa se o arquivo foi aberto com sucesso - if (p != NULL) { - printf ("Arquivo foi aberto com sucesso.\n\n"); - fclose(p); - } else { - printf ("Nao foi possivel abrir o arquivo.\n\n"); - } - - return 0; -} +#include +#include + + + +int main(int argc, char *argv[]) { + + FILE *p = fopen ("teste.txt", "r"); + // testa se o arquivo foi aberto com sucesso + if (p != NULL) { + printf ("Arquivo foi aberto com sucesso.\n\n"); + fclose(p); + } else { + printf ("Nao foi possivel abrir o arquivo.\n\n"); + } + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/aquivo/arq02.c b/Codigos/u00 Nivelamento/c/aquivo/arq02.c similarity index 94% rename from fonte/u00 Nivelamento/c/aquivo/arq02.c rename to Codigos/u00 Nivelamento/c/aquivo/arq02.c index 9caf220..af77220 100644 --- a/fonte/u00 Nivelamento/c/aquivo/arq02.c +++ b/Codigos/u00 Nivelamento/c/aquivo/arq02.c @@ -1,19 +1,19 @@ -#include -#include - - - -int main(int argc, char *argv[]) { - - FILE *p = fopen ("teste.txt", "r"); - - // testa se o arquivo foi aberto com sucesso - if (p != NULL) { - printf ("Arquivo foi aberto com sucesso.\n\n"); - fclose(p); - } else { - printf ("Nao foi possivel abrir o arquivo.\n\n"); - } - - return 0; -} +#include +#include + + + +int main(int argc, char *argv[]) { + + FILE *p = fopen ("teste.txt", "r"); + + // testa se o arquivo foi aberto com sucesso + if (p != NULL) { + printf ("Arquivo foi aberto com sucesso.\n\n"); + fclose(p); + } else { + printf ("Nao foi possivel abrir o arquivo.\n\n"); + } + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/aquivo/arq03.c b/Codigos/u00 Nivelamento/c/aquivo/arq03.c similarity index 94% rename from fonte/u00 Nivelamento/c/aquivo/arq03.c rename to Codigos/u00 Nivelamento/c/aquivo/arq03.c index a99cf22..4a4fe7b 100644 --- a/fonte/u00 Nivelamento/c/aquivo/arq03.c +++ b/Codigos/u00 Nivelamento/c/aquivo/arq03.c @@ -1,21 +1,21 @@ -#include -#include - -int main(int argc, char *argv[]) { - - FILE *p = fopen (argv[1], "r"); - int ch; - - if (p != NULL) { - do { - ch = fgetc(p); - if(ch != EOF){ - printf( "%i %c\n", ch, (char)ch); - //printf( "%c", (char)ch); - } - } while (ch != EOF); - fclose(p); - } - - return 0; -} +#include +#include + +int main(int argc, char *argv[]) { + + FILE *p = fopen (argv[1], "r"); + int ch; + + if (p != NULL) { + do { + ch = fgetc(p); + if(ch != EOF){ + printf( "%i %c\n", ch, (char)ch); + //printf( "%c", (char)ch); + } + } while (ch != EOF); + fclose(p); + } + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/aquivo/arq04.c b/Codigos/u00 Nivelamento/c/aquivo/arq04.c similarity index 94% rename from fonte/u00 Nivelamento/c/aquivo/arq04.c rename to Codigos/u00 Nivelamento/c/aquivo/arq04.c index e8fb236..8e7d1e8 100644 --- a/fonte/u00 Nivelamento/c/aquivo/arq04.c +++ b/Codigos/u00 Nivelamento/c/aquivo/arq04.c @@ -1,23 +1,23 @@ -#include -#include - -int main(int argc, char *argv[]) { - - FILE *p = fopen ("teste.txt", "r"); - char str[100+1]; - char* resp; - int i = 0; - - if (p != NULL) { - do { - resp = fgets(str, 100, p); - if(resp != NULL){ - printf("(%d) %s", i, str); - i++; - } - } while (resp != NULL); - fclose(p); - } - - return 0; -} +#include +#include + +int main(int argc, char *argv[]) { + + FILE *p = fopen ("teste.txt", "r"); + char str[100+1]; + char* resp; + int i = 0; + + if (p != NULL) { + do { + resp = fgets(str, 100, p); + if(resp != NULL){ + printf("(%d) %s", i, str); + i++; + } + } while (resp != NULL); + fclose(p); + } + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/aquivo/arq05.c b/Codigos/u00 Nivelamento/c/aquivo/arq05.c similarity index 93% rename from fonte/u00 Nivelamento/c/aquivo/arq05.c rename to Codigos/u00 Nivelamento/c/aquivo/arq05.c index 1b64a43..7942f00 100644 --- a/fonte/u00 Nivelamento/c/aquivo/arq05.c +++ b/Codigos/u00 Nivelamento/c/aquivo/arq05.c @@ -1,12 +1,12 @@ -#include -#include - -int main(int argc, char *argv[]) { - - FILE *p = fopen ("teste.txt", "w"); - fputc('M', p); - fclose(p); - - return 0; -} - +#include +#include + +int main(int argc, char *argv[]) { + + FILE *p = fopen ("teste.txt", "w"); + fputc('M', p); + fclose(p); + + return 0; +} + diff --git a/fonte/u00 Nivelamento/c/aquivo/arq06.c b/Codigos/u00 Nivelamento/c/aquivo/arq06.c similarity index 94% rename from fonte/u00 Nivelamento/c/aquivo/arq06.c rename to Codigos/u00 Nivelamento/c/aquivo/arq06.c index 28236f6..59f2301 100644 --- a/fonte/u00 Nivelamento/c/aquivo/arq06.c +++ b/Codigos/u00 Nivelamento/c/aquivo/arq06.c @@ -1,11 +1,11 @@ -#include -#include - -int main(int argc, char *argv[]) { - - FILE *p = fopen ("teste.txt", "w"); - fputs("Algoritmos e Estruturas de Dados II", p); - fclose(p); - - return 0; -} +#include +#include + +int main(int argc, char *argv[]) { + + FILE *p = fopen ("teste.txt", "w"); + fputs("Algoritmos e Estruturas de Dados II", p); + fclose(p); + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/aquivo/arq07.c b/Codigos/u00 Nivelamento/c/aquivo/arq07.c similarity index 94% rename from fonte/u00 Nivelamento/c/aquivo/arq07.c rename to Codigos/u00 Nivelamento/c/aquivo/arq07.c index 8c7d20d..58c76ac 100644 --- a/fonte/u00 Nivelamento/c/aquivo/arq07.c +++ b/Codigos/u00 Nivelamento/c/aquivo/arq07.c @@ -1,19 +1,19 @@ -#include -#include - -int main(int argc, char *argv[]) { - - FILE *in = fopen ("teste.txt", "r"), - *out = fopen ("copia.txt", "w"); - - while ( !feof(in) ) { - char ch = getc(in); - if ( !feof(in)) { - putc(ch, out); - } - } - - fclose(in); - fclose(out); - return 0; -} +#include +#include + +int main(int argc, char *argv[]) { + + FILE *in = fopen ("teste.txt", "r"), + *out = fopen ("copia.txt", "w"); + + while ( !feof(in) ) { + char ch = getc(in); + if ( !feof(in)) { + putc(ch, out); + } + } + + fclose(in); + fclose(out); + return 0; +} diff --git a/fonte/u00 Nivelamento/c/aquivo/arq08.c b/Codigos/u00 Nivelamento/c/aquivo/arq08.c similarity index 94% rename from fonte/u00 Nivelamento/c/aquivo/arq08.c rename to Codigos/u00 Nivelamento/c/aquivo/arq08.c index 08efb69..4272946 100644 --- a/fonte/u00 Nivelamento/c/aquivo/arq08.c +++ b/Codigos/u00 Nivelamento/c/aquivo/arq08.c @@ -1,24 +1,24 @@ -#include -#include - -int main(int argc, char *argv[]) { - - FILE *p; - - double d = 12.23; - int i = 101; - long l = 123023L; - - if ((p = fopen("teste.txt", "wb")) == NULL) { - printf ("arquivo nao pode ser aberto\n"); - exit(1); - } - - fwrite(&d, sizeof(double), 1, p); - fwrite(&i, sizeof(int), 1, p); - fwrite(&l, sizeof(long), 1, p); - - fclose(p); - - return 0; -} +#include +#include + +int main(int argc, char *argv[]) { + + FILE *p; + + double d = 12.23; + int i = 101; + long l = 123023L; + + if ((p = fopen("teste.txt", "wb")) == NULL) { + printf ("arquivo nao pode ser aberto\n"); + exit(1); + } + + fwrite(&d, sizeof(double), 1, p); + fwrite(&i, sizeof(int), 1, p); + fwrite(&l, sizeof(long), 1, p); + + fclose(p); + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/aquivo/arq09.c b/Codigos/u00 Nivelamento/c/aquivo/arq09.c similarity index 94% rename from fonte/u00 Nivelamento/c/aquivo/arq09.c rename to Codigos/u00 Nivelamento/c/aquivo/arq09.c index fc981f4..725fb36 100644 --- a/fonte/u00 Nivelamento/c/aquivo/arq09.c +++ b/Codigos/u00 Nivelamento/c/aquivo/arq09.c @@ -1,25 +1,25 @@ -#include -#include - -int main(int argc, char *argv[]) { - - FILE *p; - - double d; - int i; - long l; - - if ((p = fopen("teste.txt", "rb")) == NULL) { - printf ("arquivo nao pode ser aberto\n"); - exit(1); - } - - fread(&d, sizeof(double), 1, p); - fread (&i, sizeof(int), 1, p); - fread (&l, sizeof(long), 1, p); - - printf("%f %d %ld", d, i, l); - fclose(p); - return 0; -} - +#include +#include + +int main(int argc, char *argv[]) { + + FILE *p; + + double d; + int i; + long l; + + if ((p = fopen("teste.txt", "rb")) == NULL) { + printf ("arquivo nao pode ser aberto\n"); + exit(1); + } + + fread(&d, sizeof(double), 1, p); + fread (&i, sizeof(int), 1, p); + fread (&l, sizeof(long), 1, p); + + printf("%f %d %ld", d, i, l); + fclose(p); + return 0; +} + diff --git a/fonte/u00 Nivelamento/c/aquivo/arq10.c b/Codigos/u00 Nivelamento/c/aquivo/arq10.c similarity index 95% rename from fonte/u00 Nivelamento/c/aquivo/arq10.c rename to Codigos/u00 Nivelamento/c/aquivo/arq10.c index 8403138..b62fc8f 100644 --- a/fonte/u00 Nivelamento/c/aquivo/arq10.c +++ b/Codigos/u00 Nivelamento/c/aquivo/arq10.c @@ -1,35 +1,35 @@ -#include -#include - -typedef struct cliente { - char nome[100]; - int codigo; -} cliente; - -void escrever(char*); -void ler(char*); - -void main(int argc, char** argv){ - escrever("teste.txt"); - ler("teste.txt"); -} - -void escrever(char* nomeArq){ - cliente c1, c2; - strcat(c1.nome, "Ze da Silva"); c1.codigo = 1; - strcat(c2.nome, "Lele da Cuca"); c2.codigo = 11; - FILE *p = fopen(nomeArq, "ab"); - fwrite(&c1, sizeof(cliente), 1, p); - fwrite(&c2, sizeof(cliente), 1, p); - fclose(p); -} - -void ler(char* nomeArq){ - cliente c1, c2; - FILE *p = fopen(nomeArq, "rb"); - fread(&c1, sizeof(cliente), 1, p); - fread(&c2, sizeof(cliente), 1, p); - fclose(p); - printf("%s -- %d\n", c1.nome, c1.codigo); - printf("%s -- %d\n", c2.nome, c2.codigo); -} +#include +#include + +typedef struct cliente { + char nome[100]; + int codigo; +} cliente; + +void escrever(char*); +void ler(char*); + +void main(int argc, char** argv){ + escrever("teste.txt"); + ler("teste.txt"); +} + +void escrever(char* nomeArq){ + cliente c1, c2; + strcat(c1.nome, "Ze da Silva"); c1.codigo = 1; + strcat(c2.nome, "Lele da Cuca"); c2.codigo = 11; + FILE *p = fopen(nomeArq, "ab"); + fwrite(&c1, sizeof(cliente), 1, p); + fwrite(&c2, sizeof(cliente), 1, p); + fclose(p); +} + +void ler(char* nomeArq){ + cliente c1, c2; + FILE *p = fopen(nomeArq, "rb"); + fread(&c1, sizeof(cliente), 1, p); + fread(&c2, sizeof(cliente), 1, p); + fclose(p); + printf("%s -- %d\n", c1.nome, c1.codigo); + printf("%s -- %d\n", c2.nome, c2.codigo); +} diff --git a/fonte/u00 Nivelamento/c/aquivo/arq11.c b/Codigos/u00 Nivelamento/c/aquivo/arq11.c similarity index 95% rename from fonte/u00 Nivelamento/c/aquivo/arq11.c rename to Codigos/u00 Nivelamento/c/aquivo/arq11.c index 3b3f2da..3b7cf8a 100644 --- a/fonte/u00 Nivelamento/c/aquivo/arq11.c +++ b/Codigos/u00 Nivelamento/c/aquivo/arq11.c @@ -1,23 +1,23 @@ -#include - -int main(int argc, char *argv[]) { - FILE *p = fopen("teste.txt", "wb+"); - - double d = 12.23; int i = 101; long l = 123023L; - - - fwrite(&d, sizeof(double), 1, p); - fwrite(&i, sizeof(int), 1, p); - fwrite(&l, sizeof(long), 1, p); - - rewind(p); - - fread(&d, sizeof(double), 1, p); - fread (&i, sizeof(int), 1, p); - fread (&l, sizeof(long), 1, p); - - printf("%f %d %ld", d, i, l); - fclose(p); - - return 0; -} +#include + +int main(int argc, char *argv[]) { + FILE *p = fopen("teste.txt", "wb+"); + + double d = 12.23; int i = 101; long l = 123023L; + + + fwrite(&d, sizeof(double), 1, p); + fwrite(&i, sizeof(int), 1, p); + fwrite(&l, sizeof(long), 1, p); + + rewind(p); + + fread(&d, sizeof(double), 1, p); + fread (&i, sizeof(int), 1, p); + fread (&l, sizeof(long), 1, p); + + printf("%f %d %ld", d, i, l); + fclose(p); + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/aquivo/arq12.c b/Codigos/u00 Nivelamento/c/aquivo/arq12.c similarity index 96% rename from fonte/u00 Nivelamento/c/aquivo/arq12.c rename to Codigos/u00 Nivelamento/c/aquivo/arq12.c index 13e0aa9..81a2ff6 100644 --- a/fonte/u00 Nivelamento/c/aquivo/arq12.c +++ b/Codigos/u00 Nivelamento/c/aquivo/arq12.c @@ -1,22 +1,22 @@ -#include - -int main(int argc, char *argv[]) { - FILE *p = fopen("teste.txt", "wb+"); - int registro, valor, i; - - for (i = valor = 0; i < 10; i++, valor = i * 10) fwrite(&valor, sizeof(int), 1, p); - - int numRegistro = ftell(p) / sizeof (int); - - do { - printf ("\nEscolha um numero entre zero e %i: ", numRegistro-1); - scanf("%d", ®istro); - } while (registro < 0 || registro >= numRegistro); - - fseek(p, registro * sizeof(int), SEEK_SET); - fread(&valor, sizeof(int), 1, p); - fclose(p); - printf ("\nValor: %d\n\n", valor); - - return 0; -} +#include + +int main(int argc, char *argv[]) { + FILE *p = fopen("teste.txt", "wb+"); + int registro, valor, i; + + for (i = valor = 0; i < 10; i++, valor = i * 10) fwrite(&valor, sizeof(int), 1, p); + + int numRegistro = ftell(p) / sizeof (int); + + do { + printf ("\nEscolha um numero entre zero e %i: ", numRegistro-1); + scanf("%d", ®istro); + } while (registro < 0 || registro >= numRegistro); + + fseek(p, registro * sizeof(int), SEEK_SET); + fread(&valor, sizeof(int), 1, p); + fclose(p); + printf ("\nValor: %d\n\n", valor); + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/aquivo/arquivos.c b/Codigos/u00 Nivelamento/c/aquivo/arquivos.c similarity index 96% rename from fonte/u00 Nivelamento/c/aquivo/arquivos.c rename to Codigos/u00 Nivelamento/c/aquivo/arquivos.c index 5d93b4e..d25865a 100644 --- a/fonte/u00 Nivelamento/c/aquivo/arquivos.c +++ b/Codigos/u00 Nivelamento/c/aquivo/arquivos.c @@ -1,117 +1,117 @@ -#include -#include -#include -//============================================================================= -void gravar_arquivo_texto(){ - - // ABRIR O ARQUIVO - FILE *arq = fopen("arquivo.txt", "w"); - - if(arq == NULL){ - printf("Erro ao tentar abrir o arquivo!\n"); - return; - } - - // ESCREVER NO ARQUIVO - fprintf(arq, "%s\t", "Algoritmos"); - fprintf(arq, "%d\t", 1); - fprintf(arq, "%f\t", 5.3); - fprintf(arq, "%c\t", 'X'); - - // FECHA O ARQUIVO - fclose(arq); -} -//============================================================================= -void ler_texto_texto(){ - - char texto[12], caracter; - int inteiro; - float real; - - // ABRIR O ARQUIVO - FILE *arq = fopen("arquivo.txt", "r"); - - if(arq == NULL){ - printf("Erro ao tentar abrir o arquivo!\n"); - return; - } - - // LE O ARQUIVO - fscanf(arq, "%99[^\t]\t", &texto); // LER STRING - fscanf(arq, "%d\t", &inteiro); - fscanf(arq, "%f\t", &real); - fscanf(arq, "%c\t", &caracter); - - // FECHA O ARQUIVO - fclose(arq); - - printf("texto: %s\n", texto); - printf("inteiro: %d\n", inteiro); - printf("real: %f\n", real); - printf("caracter: %c\n", caracter); -} -//============================================================================= -void gravar_arquivo_binario(){ - - char texto[12] = "Algoritmos", caracter = 'X'; - int inteiro = 1; - float real = 5.3; - - // ABRIR O ARQUIVO - FILE *arq = fopen("arquivo.bin", "wb"); - - if(arq == NULL){ - printf("Erro ao tentar abrir o arquivo!\n"); - return; - } - - // ESCREVER NO ARQUIVO - fwrite(&texto, sizeof(char), 12, arq); - fwrite(&inteiro, sizeof(int), 1, arq); - fwrite(&real, sizeof(float), 1, arq); - fwrite(&caracter,sizeof(char), 1, arq); - - // FECHA O ARQUIVO - fclose(arq); -} -//============================================================================= -void ler_texto_binario(){ - - char texto[12], caracter; - int inteiro; - float real; - - // ABRIR O ARQUIVO - FILE *arq = fopen("arquivo.bin", "rb"); - - if(arq == NULL){ - printf("Erro ao tentar abrir o arquivo!\n"); - return; - } - - // LE O ARQUIVO - fread(&texto, sizeof(char), 12, arq); - fread(&inteiro, sizeof(int), 1, arq); - fread(&real, sizeof(float), 1, arq); - fread(&caracter,sizeof(char), 1, arq); - - // FECHA O ARQUIVO - fclose(arq); - - printf("texto: %s\n", texto); - printf("inteiro: %d\n", inteiro); - printf("real: %f\n", real); - printf("caracter: %c\n", caracter); -} -//============================================================================= - -int main(){ - - gravar_arquivo_texto(); - ler_texto_texto(); - - gravar_arquivo_binario(); - ler_texto_binario(); - - return 1; +#include +#include +#include +//============================================================================= +void gravar_arquivo_texto(){ + + // ABRIR O ARQUIVO + FILE *arq = fopen("arquivo.txt", "w"); + + if(arq == NULL){ + printf("Erro ao tentar abrir o arquivo!\n"); + return; + } + + // ESCREVER NO ARQUIVO + fprintf(arq, "%s\t", "Algoritmos"); + fprintf(arq, "%d\t", 1); + fprintf(arq, "%f\t", 5.3); + fprintf(arq, "%c\t", 'X'); + + // FECHA O ARQUIVO + fclose(arq); +} +//============================================================================= +void ler_texto_texto(){ + + char texto[12], caracter; + int inteiro; + float real; + + // ABRIR O ARQUIVO + FILE *arq = fopen("arquivo.txt", "r"); + + if(arq == NULL){ + printf("Erro ao tentar abrir o arquivo!\n"); + return; + } + + // LE O ARQUIVO + fscanf(arq, "%99[^\t]\t", &texto); // LER STRING + fscanf(arq, "%d\t", &inteiro); + fscanf(arq, "%f\t", &real); + fscanf(arq, "%c\t", &caracter); + + // FECHA O ARQUIVO + fclose(arq); + + printf("texto: %s\n", texto); + printf("inteiro: %d\n", inteiro); + printf("real: %f\n", real); + printf("caracter: %c\n", caracter); +} +//============================================================================= +void gravar_arquivo_binario(){ + + char texto[12] = "Algoritmos", caracter = 'X'; + int inteiro = 1; + float real = 5.3; + + // ABRIR O ARQUIVO + FILE *arq = fopen("arquivo.bin", "wb"); + + if(arq == NULL){ + printf("Erro ao tentar abrir o arquivo!\n"); + return; + } + + // ESCREVER NO ARQUIVO + fwrite(&texto, sizeof(char), 12, arq); + fwrite(&inteiro, sizeof(int), 1, arq); + fwrite(&real, sizeof(float), 1, arq); + fwrite(&caracter,sizeof(char), 1, arq); + + // FECHA O ARQUIVO + fclose(arq); +} +//============================================================================= +void ler_texto_binario(){ + + char texto[12], caracter; + int inteiro; + float real; + + // ABRIR O ARQUIVO + FILE *arq = fopen("arquivo.bin", "rb"); + + if(arq == NULL){ + printf("Erro ao tentar abrir o arquivo!\n"); + return; + } + + // LE O ARQUIVO + fread(&texto, sizeof(char), 12, arq); + fread(&inteiro, sizeof(int), 1, arq); + fread(&real, sizeof(float), 1, arq); + fread(&caracter,sizeof(char), 1, arq); + + // FECHA O ARQUIVO + fclose(arq); + + printf("texto: %s\n", texto); + printf("inteiro: %d\n", inteiro); + printf("real: %f\n", real); + printf("caracter: %c\n", caracter); +} +//============================================================================= + +int main(){ + + gravar_arquivo_texto(); + ler_texto_texto(); + + gravar_arquivo_binario(); + ler_texto_binario(); + + return 1; } \ No newline at end of file diff --git a/fonte/u00 Nivelamento/c/argumentos_main.c b/Codigos/u00 Nivelamento/c/argumentos_main.c similarity index 93% rename from fonte/u00 Nivelamento/c/argumentos_main.c rename to Codigos/u00 Nivelamento/c/argumentos_main.c index 1afa7ed..4e61c56 100644 --- a/fonte/u00 Nivelamento/c/argumentos_main.c +++ b/Codigos/u00 Nivelamento/c/argumentos_main.c @@ -1,14 +1,14 @@ -#include -#include -//============================================================================= -// EXEMPLO DE UTILIZAÇÃO DOS ARGUMENTOS PASSADOS PARA O MAIN -int main(int argc, char *argv[]){ - - int i; - - for (i = 0; i < argc; i++) - printf("%d Parametro: %s\n", i, argv[i]); - - return 0; -} +#include +#include +//============================================================================= +// EXEMPLO DE UTILIZAÇÃO DOS ARGUMENTOS PASSADOS PARA O MAIN +int main(int argc, char *argv[]){ + + int i; + + for (i = 0; i < argc; i++) + printf("%d Parametro: %s\n", i, argv[i]); + + return 0; +} //============================================================================= \ No newline at end of file diff --git a/fonte/u00 Nivelamento/c/leituraescrita.c b/Codigos/u00 Nivelamento/c/leituraescrita.c similarity index 94% rename from fonte/u00 Nivelamento/c/leituraescrita.c rename to Codigos/u00 Nivelamento/c/leituraescrita.c index 6e65b98..6b8cd70 100644 --- a/fonte/u00 Nivelamento/c/leituraescrita.c +++ b/Codigos/u00 Nivelamento/c/leituraescrita.c @@ -1,22 +1,22 @@ -#include -#include - -int main(int argc, char *argv[]){ - char c; - char s[100]; - int i; - double d; - - printf("\nEntre com um caractere: "); - scanf("%c", &c); - - printf("\nEntre com uma palavra: "); - scanf("%s", s); - - printf("\nEntre com um inteiro e um real: "); - scanf("%i%lf", &i, &d); - - printf("\ninteiro(%d) real(%f) char(%c) s(%s)", i, d, c, s); - - return 0; -} +#include +#include + +int main(int argc, char *argv[]){ + char c; + char s[100]; + int i; + double d; + + printf("\nEntre com um caractere: "); + scanf("%c", &c); + + printf("\nEntre com uma palavra: "); + scanf("%s", s); + + printf("\nEntre com um inteiro e um real: "); + scanf("%i%lf", &i, &d); + + printf("\ninteiro(%d) real(%f) char(%c) s(%s)", i, d, c, s); + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/makefile/helloworld.c b/Codigos/u00 Nivelamento/c/makefile/helloworld.c similarity index 93% rename from fonte/u00 Nivelamento/c/makefile/helloworld.c rename to Codigos/u00 Nivelamento/c/makefile/helloworld.c index 7cf10d3..d069246 100644 --- a/fonte/u00 Nivelamento/c/makefile/helloworld.c +++ b/Codigos/u00 Nivelamento/c/makefile/helloworld.c @@ -1,6 +1,6 @@ -#include -#include - -void helloWorld(void){ - printf("Hello World!\n"); -} +#include +#include + +void helloWorld(void){ + printf("Hello World!\n"); +} diff --git a/fonte/u00 Nivelamento/c/makefile/helloworld.h b/Codigos/u00 Nivelamento/c/makefile/helloworld.h similarity index 91% rename from fonte/u00 Nivelamento/c/makefile/helloworld.h rename to Codigos/u00 Nivelamento/c/makefile/helloworld.h index e32f328..a4d992d 100644 --- a/fonte/u00 Nivelamento/c/makefile/helloworld.h +++ b/Codigos/u00 Nivelamento/c/makefile/helloworld.h @@ -1,6 +1,6 @@ -#ifndef _H_TESTE -#define _H_TESTE - -void helloWorld(void); - -#endif +#ifndef _H_TESTE +#define _H_TESTE + +void helloWorld(void); + +#endif diff --git a/fonte/u00 Nivelamento/c/makefile/main.c b/Codigos/u00 Nivelamento/c/makefile/main.c similarity index 93% rename from fonte/u00 Nivelamento/c/makefile/main.c rename to Codigos/u00 Nivelamento/c/makefile/main.c index 7d56d8a..96c33dc 100644 --- a/fonte/u00 Nivelamento/c/makefile/main.c +++ b/Codigos/u00 Nivelamento/c/makefile/main.c @@ -1,8 +1,8 @@ -#include -#include -#include "helloworld.h" - -int main(){ - helloWorld(); - return (0); -} +#include +#include +#include "helloworld.h" + +int main(){ + helloWorld(); + return (0); +} diff --git a/fonte/u00 Nivelamento/c/makefile/makefile b/Codigos/u00 Nivelamento/c/makefile/makefile similarity index 95% rename from fonte/u00 Nivelamento/c/makefile/makefile rename to Codigos/u00 Nivelamento/c/makefile/makefile index ef10892..d89dc49 100644 --- a/fonte/u00 Nivelamento/c/makefile/makefile +++ b/Codigos/u00 Nivelamento/c/makefile/makefile @@ -1,15 +1,15 @@ -# My first makefile - -all: printy - -printy: main.o helloworld.o - gcc -o printy main.o helloworld.o - -main.o: main.c helloworld.h - gcc -o main.o main.c -c -W -Wall -ansi -pedantic - -helloworld.o: helloworld.c helloworld.h - gcc -o helloworld.o helloworld.c -c -W -Wall -ansi -pedantic - -clean: - rm -rf *.o *~ printy +# My first makefile + +all: printy + +printy: main.o helloworld.o + gcc -o printy main.o helloworld.o + +main.o: main.c helloworld.h + gcc -o main.o main.c -c -W -Wall -ansi -pedantic + +helloworld.o: helloworld.c helloworld.h + gcc -o helloworld.o helloworld.c -c -W -Wall -ansi -pedantic + +clean: + rm -rf *.o *~ printy diff --git a/fonte/u00 Nivelamento/c/meuprimeiroprograma.c b/Codigos/u00 Nivelamento/c/meuprimeiroprograma.c similarity index 94% rename from fonte/u00 Nivelamento/c/meuprimeiroprograma.c rename to Codigos/u00 Nivelamento/c/meuprimeiroprograma.c index a0f8193..b362750 100644 --- a/fonte/u00 Nivelamento/c/meuprimeiroprograma.c +++ b/Codigos/u00 Nivelamento/c/meuprimeiroprograma.c @@ -1,6 +1,6 @@ -#include - -int main(int argc, char *argv[]) { - printf ("Ola pessoal!!!\n\n"); - return 0; -} +#include + +int main(int argc, char *argv[]) { + printf ("Ola pessoal!!!\n\n"); + return 0; +} diff --git a/fonte/u00 Nivelamento/c/ponteiro/ponteiro01.c b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro01.c similarity index 94% rename from fonte/u00 Nivelamento/c/ponteiro/ponteiro01.c rename to Codigos/u00 Nivelamento/c/ponteiro/ponteiro01.c index a75946b..d6ebbb2 100644 --- a/fonte/u00 Nivelamento/c/ponteiro/ponteiro01.c +++ b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro01.c @@ -1,13 +1,13 @@ -#include -#include - -int main (int argc, char** argv){ - int x = 10; - int * y = & x; - printf("\n%i", x); - printf("\n%p", &x); - printf("\n%p", y); - printf("\n%p", &y); - printf("\n%i", *y); - printf("\n"); -} +#include +#include + +int main (int argc, char** argv){ + int x = 10; + int * y = & x; + printf("\n%i", x); + printf("\n%p", &x); + printf("\n%p", y); + printf("\n%p", &y); + printf("\n%i", *y); + printf("\n"); +} diff --git a/fonte/u00 Nivelamento/c/ponteiro/ponteiro02.c b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro02.c similarity index 96% rename from fonte/u00 Nivelamento/c/ponteiro/ponteiro02.c rename to Codigos/u00 Nivelamento/c/ponteiro/ponteiro02.c index 7e6f9a8..0271848 100644 --- a/fonte/u00 Nivelamento/c/ponteiro/ponteiro02.c +++ b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro02.c @@ -1,19 +1,19 @@ -#include -#include - -int main (int argc, char** argv){ - int x1 = 11, - x2 = 22, - x3 = 33; - int *p; - - p = &x1; //p <- o endereço de x1 - x2 = *p; //x2 <- o cont. do addr apont. por p - *p = x3; //o cont. do addr apont. por p <- x3 - p = &x3; //p <- o endereço de x3 - *p = 0; //o cont. do addr apont. por p <- x3 - - printf("\ncont:%d %d %d %d", x1, x2, x3, *p); - printf("\naddr:%p %p %p %p", &x1, &x2, &x3, p); - printf("\n"); -} +#include +#include + +int main (int argc, char** argv){ + int x1 = 11, + x2 = 22, + x3 = 33; + int *p; + + p = &x1; //p <- o endereço de x1 + x2 = *p; //x2 <- o cont. do addr apont. por p + *p = x3; //o cont. do addr apont. por p <- x3 + p = &x3; //p <- o endereço de x3 + *p = 0; //o cont. do addr apont. por p <- x3 + + printf("\ncont:%d %d %d %d", x1, x2, x3, *p); + printf("\naddr:%p %p %p %p", &x1, &x2, &x3, p); + printf("\n"); +} diff --git a/fonte/u00 Nivelamento/c/ponteiro/ponteiro03.c b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro03.c similarity index 96% rename from fonte/u00 Nivelamento/c/ponteiro/ponteiro03.c rename to Codigos/u00 Nivelamento/c/ponteiro/ponteiro03.c index 7923df7..8457201 100644 --- a/fonte/u00 Nivelamento/c/ponteiro/ponteiro03.c +++ b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro03.c @@ -1,27 +1,27 @@ -#include -#include - -int main (int argc, char** argv){ - int *x1; - int x2; - int *x3; - - x1 = (int*) malloc (sizeof(int)); - printf("\nx1(%p)(%i)(%p) x2(%i)(%p) x3(%p)(%i)(%p)", x1, *x1, &x1, x2, &x2, x3, *x3, &x3); - - *x1 = 20; - printf("\nx1(%p)(%i)(%p) x2(%i)(%p) x3(%p)(%i)(%p)", x1, *x1, &x1, x2, &x2, x3, *x3, &x3); - - x2 = *x1; - printf("\nx1(%p)(%i)(%p) x2(%i)(%p) x3(%p)(%i)(%p)", x1, *x1, &x1, x2, &x2, x3, *x3, &x3); - - *x3 = x2 * *x1; - printf("\nx1(%p)(%i)(%p) x2(%i)(%p) x3(%p)(%i)(%p)", x1, *x1, &x1, x2, &x2, x3, *x3, &x3); - - x3 = &x2; - printf("\nx1(%p)(%i)(%p) x2(%i)(%p) x3(%p)(%i)(%p)", x1, *x1, &x1, x2, &x2, x3, *x3, &x3); - - x2 = 15; - printf("\nx1(%p)(%i)(%p) x2(%i)(%p) x3(%p)(%i)(%p)", x1, *x1, &x1, x2, &x2, x3, *x3, &x3); - printf("\n"); -} +#include +#include + +int main (int argc, char** argv){ + int *x1; + int x2; + int *x3; + + x1 = (int*) malloc (sizeof(int)); + printf("\nx1(%p)(%i)(%p) x2(%i)(%p) x3(%p)(%i)(%p)", x1, *x1, &x1, x2, &x2, x3, *x3, &x3); + + *x1 = 20; + printf("\nx1(%p)(%i)(%p) x2(%i)(%p) x3(%p)(%i)(%p)", x1, *x1, &x1, x2, &x2, x3, *x3, &x3); + + x2 = *x1; + printf("\nx1(%p)(%i)(%p) x2(%i)(%p) x3(%p)(%i)(%p)", x1, *x1, &x1, x2, &x2, x3, *x3, &x3); + + *x3 = x2 * *x1; + printf("\nx1(%p)(%i)(%p) x2(%i)(%p) x3(%p)(%i)(%p)", x1, *x1, &x1, x2, &x2, x3, *x3, &x3); + + x3 = &x2; + printf("\nx1(%p)(%i)(%p) x2(%i)(%p) x3(%p)(%i)(%p)", x1, *x1, &x1, x2, &x2, x3, *x3, &x3); + + x2 = 15; + printf("\nx1(%p)(%i)(%p) x2(%i)(%p) x3(%p)(%i)(%p)", x1, *x1, &x1, x2, &x2, x3, *x3, &x3); + printf("\n"); +} diff --git a/fonte/u00 Nivelamento/c/ponteiro/ponteiro04.c b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro04.c similarity index 93% rename from fonte/u00 Nivelamento/c/ponteiro/ponteiro04.c rename to Codigos/u00 Nivelamento/c/ponteiro/ponteiro04.c index 694652e..3c1356c 100644 --- a/fonte/u00 Nivelamento/c/ponteiro/ponteiro04.c +++ b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro04.c @@ -1,13 +1,13 @@ -#include -#include -#include - -int main (int argc, char** argv){ - double M [3][3]; - double *p = M[0]; - - for (int i = 0; i < pow(3, 2); i++, p++){ - *p=0.0; - } - -} +#include +#include +#include + +int main (int argc, char** argv){ + double M [3][3]; + double *p = M[0]; + + for (int i = 0; i < pow(3, 2); i++, p++){ + *p=0.0; + } + +} diff --git a/fonte/u00 Nivelamento/c/ponteiro/ponteiro05.c b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro05.c similarity index 95% rename from fonte/u00 Nivelamento/c/ponteiro/ponteiro05.c rename to Codigos/u00 Nivelamento/c/ponteiro/ponteiro05.c index ea28593..1d33714 100644 --- a/fonte/u00 Nivelamento/c/ponteiro/ponteiro05.c +++ b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro05.c @@ -1,26 +1,26 @@ -#include -#include - -#define MAXTAM 10 - -typedef struct Cliente { - int codigo; - char nome[MAXTAM]; -} Cliente; - - -int main (int argc, char** argv){ - char* p1 = (char*) malloc (sizeof(char)); - int* p2 = (int*) malloc (sizeof(int)); - float* p3 = (float*) malloc (sizeof(float)); - Cliente* p4 = (Cliente*) malloc (sizeof(Cliente)); - int* p5 = (int*) malloc (MAXTAM * sizeof (int)); - Cliente* p6 =(Cliente*) malloc (MAXTAM * sizeof (Cliente)); - - free(p1); - free(p2); - free(p3); - free(p4); - free(p5); - free(p6); -} +#include +#include + +#define MAXTAM 10 + +typedef struct Cliente { + int codigo; + char nome[MAXTAM]; +} Cliente; + + +int main (int argc, char** argv){ + char* p1 = (char*) malloc (sizeof(char)); + int* p2 = (int*) malloc (sizeof(int)); + float* p3 = (float*) malloc (sizeof(float)); + Cliente* p4 = (Cliente*) malloc (sizeof(Cliente)); + int* p5 = (int*) malloc (MAXTAM * sizeof (int)); + Cliente* p6 =(Cliente*) malloc (MAXTAM * sizeof (Cliente)); + + free(p1); + free(p2); + free(p3); + free(p4); + free(p5); + free(p6); +} diff --git a/fonte/u00 Nivelamento/c/ponteiro/ponteiro05emCMaisMais.cc b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro05emCMaisMais.cc similarity index 94% rename from fonte/u00 Nivelamento/c/ponteiro/ponteiro05emCMaisMais.cc rename to Codigos/u00 Nivelamento/c/ponteiro/ponteiro05emCMaisMais.cc index fb50d8b..7a378e2 100644 --- a/fonte/u00 Nivelamento/c/ponteiro/ponteiro05emCMaisMais.cc +++ b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro05emCMaisMais.cc @@ -1,26 +1,26 @@ -#include -using namespace std; - -#define MAXTAM 10 - -typedef struct Cliente { - int codigo; - char nome[MAXTAM]; -} Cliente; - - -int main (int argc, char** argv){ - char* p1 = new char; - int* p2 = new int; - float* p3 = new float; - Cliente* p4 = new Cliente; - int* p5 = new int [MAXTAM]; - Cliente* p6 = new Cliente[MAXTAM]; - - delete p1; - delete p2; - delete p3; - delete p4; - delete [] p5; - delete [] p6; -} +#include +using namespace std; + +#define MAXTAM 10 + +typedef struct Cliente { + int codigo; + char nome[MAXTAM]; +} Cliente; + + +int main (int argc, char** argv){ + char* p1 = new char; + int* p2 = new int; + float* p3 = new float; + Cliente* p4 = new Cliente; + int* p5 = new int [MAXTAM]; + Cliente* p6 = new Cliente[MAXTAM]; + + delete p1; + delete p2; + delete p3; + delete p4; + delete [] p5; + delete [] p6; +} diff --git a/fonte/u00 Nivelamento/c/ponteiro/ponteiro06.c b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro06.c similarity index 95% rename from fonte/u00 Nivelamento/c/ponteiro/ponteiro06.c rename to Codigos/u00 Nivelamento/c/ponteiro/ponteiro06.c index 7afd57f..2c7719e 100644 --- a/fonte/u00 Nivelamento/c/ponteiro/ponteiro06.c +++ b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro06.c @@ -1,24 +1,24 @@ -#include -#include -#include - -#define MAXTAM 100 - -typedef struct Cliente { - int codigo; - char nome[MAXTAM]; -} Cliente; - -int main (int argc, char** argv){ - Cliente registro; - Cliente* ponteiro = (Cliente*) malloc (sizeof(Cliente)); - - registro.codigo = 1; - strcpy(registro.nome, "AA"); - printf("\nFuncionario (%i): %s", registro.codigo, registro.nome); - - ponteiro->codigo = 2; - strcpy(ponteiro->nome, "BB"); - printf("\nFuncionario (%i): %s", ponteiro->codigo, ponteiro->nome); - printf("\n"); -} +#include +#include +#include + +#define MAXTAM 100 + +typedef struct Cliente { + int codigo; + char nome[MAXTAM]; +} Cliente; + +int main (int argc, char** argv){ + Cliente registro; + Cliente* ponteiro = (Cliente*) malloc (sizeof(Cliente)); + + registro.codigo = 1; + strcpy(registro.nome, "AA"); + printf("\nFuncionario (%i): %s", registro.codigo, registro.nome); + + ponteiro->codigo = 2; + strcpy(ponteiro->nome, "BB"); + printf("\nFuncionario (%i): %s", ponteiro->codigo, ponteiro->nome); + printf("\n"); +} diff --git a/fonte/u00 Nivelamento/c/ponteiro/ponteiro07.c b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro07.c similarity index 93% rename from fonte/u00 Nivelamento/c/ponteiro/ponteiro07.c rename to Codigos/u00 Nivelamento/c/ponteiro/ponteiro07.c index 45ccfb3..7c91723 100644 --- a/fonte/u00 Nivelamento/c/ponteiro/ponteiro07.c +++ b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro07.c @@ -1,30 +1,30 @@ -#include -#include - -int main (int argc, char** argv){ - double a; - double *p, *q; - - a = 3.14; - printf("%f\n", a); - - p = &a; - *p = 2.718; - printf("%f\n", a); - - a = 5; - printf("%f\n", *p); - - p = NULL; - p = (double*) malloc(sizeof(double)); - *p = 20; - q = p; - - printf("%f\n", *p); - printf("%f\n", a); - free(p); - printf("%f\n", *q); - printf("\n"); - - return 0; -} +#include +#include + +int main (int argc, char** argv){ + double a; + double *p, *q; + + a = 3.14; + printf("%f\n", a); + + p = &a; + *p = 2.718; + printf("%f\n", a); + + a = 5; + printf("%f\n", *p); + + p = NULL; + p = (double*) malloc(sizeof(double)); + *p = 20; + q = p; + + printf("%f\n", *p); + printf("%f\n", a); + free(p); + printf("%f\n", *q); + printf("\n"); + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/ponteiro/ponteiro08.c b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro08.c similarity index 94% rename from fonte/u00 Nivelamento/c/ponteiro/ponteiro08.c rename to Codigos/u00 Nivelamento/c/ponteiro/ponteiro08.c index 0b2dbb7..3a1b2f2 100644 --- a/fonte/u00 Nivelamento/c/ponteiro/ponteiro08.c +++ b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro08.c @@ -1,19 +1,19 @@ -#include -#include - -int main (int argc, char** argv){ - int a[10], *b; - - b = a; - b[5] = 100; - printf("\n%d -- %d", a[5], b[5]); - - b = (int*) malloc(10*sizeof(int)); - b[7] = 100; - printf("\n%d -- %d", a[7], b[7]); - printf("\n"); - - //O comando a = b gera um erro de compilação - - return 0; -} +#include +#include + +int main (int argc, char** argv){ + int a[10], *b; + + b = a; + b[5] = 100; + printf("\n%d -- %d", a[5], b[5]); + + b = (int*) malloc(10*sizeof(int)); + b[7] = 100; + printf("\n%d -- %d", a[7], b[7]); + printf("\n"); + + //O comando a = b gera um erro de compilação + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/ponteiro/ponteiro09.c b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro09.c similarity index 96% rename from fonte/u00 Nivelamento/c/ponteiro/ponteiro09.c rename to Codigos/u00 Nivelamento/c/ponteiro/ponteiro09.c index bec3bd8..ed4f931 100644 --- a/fonte/u00 Nivelamento/c/ponteiro/ponteiro09.c +++ b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro09.c @@ -1,40 +1,40 @@ -#include -#include - -int main (int argc, char** argv){ - int *x1; - int x2; - int *x3; - - x1 = (int*) malloc(sizeof(int)); - printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); - - *x1 = 20; - printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); - - x2 = *x1; - printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); - - *x3 = x2 * *x1; - printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); - - x3 = &x2; - printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); - - x2 = 15; - printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); - - x2 = 13 & 3; - printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); - - x2 = 13 | 3; - printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); - - x2 = 13 >> 1; - printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); - - x2 = 13 << 1; - printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); - - return 0; -} +#include +#include + +int main (int argc, char** argv){ + int *x1; + int x2; + int *x3; + + x1 = (int*) malloc(sizeof(int)); + printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); + + *x1 = 20; + printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); + + x2 = *x1; + printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); + + *x3 = x2 * *x1; + printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); + + x3 = &x2; + printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); + + x2 = 15; + printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); + + x2 = 13 & 3; + printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); + + x2 = 13 | 3; + printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); + + x2 = 13 >> 1; + printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); + + x2 = 13 << 1; + printf("\nx1(%p)(%p)(%i) x2(%p)(%i) x3(%p)(%p)(%i)", &x1, x1, *x1, &x2, x2, &x3, x3, *x3); + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/ponteiro/ponteiro10.c b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro10.c similarity index 94% rename from fonte/u00 Nivelamento/c/ponteiro/ponteiro10.c rename to Codigos/u00 Nivelamento/c/ponteiro/ponteiro10.c index 386b37a..b342c0f 100644 --- a/fonte/u00 Nivelamento/c/ponteiro/ponteiro10.c +++ b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro10.c @@ -1,21 +1,21 @@ -#include -#include - -#define MAXTAM 10 - -typedef struct Cliente { - int codigo; - char nome[MAXTAM]; -} Cliente; - -int main (int argc, char** argv){ - Cliente c; - c.codigo = 5; - Cliente *p = NULL; - p = (Cliente*) malloc (sizeof(Cliente)); - p->codigo = 6; - Cliente *p2 = &c; - p2->codigo = 7; - - return 0; -} +#include +#include + +#define MAXTAM 10 + +typedef struct Cliente { + int codigo; + char nome[MAXTAM]; +} Cliente; + +int main (int argc, char** argv){ + Cliente c; + c.codigo = 5; + Cliente *p = NULL; + p = (Cliente*) malloc (sizeof(Cliente)); + p->codigo = 6; + Cliente *p2 = &c; + p2->codigo = 7; + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/ponteiro/ponteiro11.c b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro11.c similarity index 94% rename from fonte/u00 Nivelamento/c/ponteiro/ponteiro11.c rename to Codigos/u00 Nivelamento/c/ponteiro/ponteiro11.c index 85911f3..963e646 100644 --- a/fonte/u00 Nivelamento/c/ponteiro/ponteiro11.c +++ b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro11.c @@ -1,20 +1,20 @@ -#include -#include - -typedef struct Celula { - int elemento; - struct Celula *prox; -} Celula; - -Celula *novaCelula(int elemento) { - Celula *nova = (Celula*) malloc(sizeof(Celula)); - nova->elemento = elemento; - nova->prox = NULL; - return nova; -} - -int main (int argc, char** argv){ - Celula *tmp = novaCelula(3); - - return 0; -} +#include +#include + +typedef struct Celula { + int elemento; + struct Celula *prox; +} Celula; + +Celula *novaCelula(int elemento) { + Celula *nova = (Celula*) malloc(sizeof(Celula)); + nova->elemento = elemento; + nova->prox = NULL; + return nova; +} + +int main (int argc, char** argv){ + Celula *tmp = novaCelula(3); + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/ponteiro/ponteiro12.c b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro12.c similarity index 96% rename from fonte/u00 Nivelamento/c/ponteiro/ponteiro12.c rename to Codigos/u00 Nivelamento/c/ponteiro/ponteiro12.c index e278c91..b0318c3 100644 --- a/fonte/u00 Nivelamento/c/ponteiro/ponteiro12.c +++ b/Codigos/u00 Nivelamento/c/ponteiro/ponteiro12.c @@ -1,20 +1,20 @@ -#include -#include - -typedef struct Elemento { - int valor; -} Elemento; - -int main (int argc, char** argv){ - Elemento e1; - Elemento* e2 = (Elemento*) malloc (3 * sizeof (Elemento)); - Elemento e3[3]; - Elemento** e4 = (Elemento**) malloc(3 * sizeof(Elemento*)); - e4[0] = (Elemento*) malloc(sizeof(Elemento*)); - e4[2] = (Elemento*) malloc(sizeof(Elemento*)); - - e4[0]->valor = 7; - - printf("\n%i -- %i\n", e4[0]->valor, e4[2]->valor); - return 0; -} +#include +#include + +typedef struct Elemento { + int valor; +} Elemento; + +int main (int argc, char** argv){ + Elemento e1; + Elemento* e2 = (Elemento*) malloc (3 * sizeof (Elemento)); + Elemento e3[3]; + Elemento** e4 = (Elemento**) malloc(3 * sizeof(Elemento*)); + e4[0] = (Elemento*) malloc(sizeof(Elemento*)); + e4[2] = (Elemento*) malloc(sizeof(Elemento*)); + + e4[0]->valor = 7; + + printf("\n%i -- %i\n", e4[0]->valor, e4[2]->valor); + return 0; +} diff --git a/fonte/u00 Nivelamento/c/recursividade/chamandometodo.c b/Codigos/u00 Nivelamento/c/recursividade/chamandometodo.c similarity index 93% rename from fonte/u00 Nivelamento/c/recursividade/chamandometodo.c rename to Codigos/u00 Nivelamento/c/recursividade/chamandometodo.c index bfd1330..0e18ac4 100644 --- a/fonte/u00 Nivelamento/c/recursividade/chamandometodo.c +++ b/Codigos/u00 Nivelamento/c/recursividade/chamandometodo.c @@ -1,26 +1,26 @@ -#include -#include - -void terceiro(){ - printf("3o - inicio e fim\n"); -} - -void segundo(){ - printf("2o - inicio\n"); - terceiro(); - printf("2o - fim\n"); -} - -void primeiro(){ - printf("1o - inicio\n"); - segundo(); - printf("1o - fim\n"); -} - -int main(int argc, char *argv[]) { - printf("main - inicio\n"); - primeiro(); - printf("main - fim\n"); - - return 0; -} +#include +#include + +void terceiro(){ + printf("3o - inicio e fim\n"); +} + +void segundo(){ + printf("2o - inicio\n"); + terceiro(); + printf("2o - fim\n"); +} + +void primeiro(){ + printf("1o - inicio\n"); + segundo(); + printf("1o - fim\n"); +} + +int main(int argc, char *argv[]) { + printf("main - inicio\n"); + primeiro(); + printf("main - fim\n"); + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/recursividade/contarmaiuscula.c b/Codigos/u00 Nivelamento/c/recursividade/contarmaiuscula.c similarity index 95% rename from fonte/u00 Nivelamento/c/recursividade/contarmaiuscula.c rename to Codigos/u00 Nivelamento/c/recursividade/contarmaiuscula.c index ffdcbb4..b522aaa 100644 --- a/fonte/u00 Nivelamento/c/recursividade/contarmaiuscula.c +++ b/Codigos/u00 Nivelamento/c/recursividade/contarmaiuscula.c @@ -1,45 +1,45 @@ -#include -#include -#include - -#define bool int -#define true 1 -#define false 0 - -bool isUpper(char x){ - return (x >= 'A' && x <= 'Z'); -} - -int contMaiusculo(char* s){ - int cont = 0; - - for(int i = 0; i < strlen(s); i++){ - if(isUpper(s[i]) == true){ - cont++; - } - } - return cont; -} - -int contMaiusculoRec(char* s, int i){ - int cont = 0; - - if(i < strlen(s)){ - if(isUpper(s[i]) == true){ - cont++; - } - cont += contMaiusculoRec(s, i + 1); - } - return cont; -} - -int contMaiusculoRecursivo(char* s){ - return contMaiusculoRec(s, 0); -} - -int main(int argc, char *argv[]) { - printf("\nAlGoritmos e Estrutudas de Dados: %i", contMaiusculo("AlGoritmos e Estruturas de Dados")); - printf("\nAlGoritmos e Estruturas de Dados: %i", contMaiusculoRecursivo("AlGoritmos e Estruturas de Dados")); - - return 0; -} +#include +#include +#include + +#define bool int +#define true 1 +#define false 0 + +bool isUpper(char x){ + return (x >= 'A' && x <= 'Z'); +} + +int contMaiusculo(char* s){ + int cont = 0; + + for(int i = 0; i < strlen(s); i++){ + if(isUpper(s[i]) == true){ + cont++; + } + } + return cont; +} + +int contMaiusculoRec(char* s, int i){ + int cont = 0; + + if(i < strlen(s)){ + if(isUpper(s[i]) == true){ + cont++; + } + cont += contMaiusculoRec(s, i + 1); + } + return cont; +} + +int contMaiusculoRecursivo(char* s){ + return contMaiusculoRec(s, 0); +} + +int main(int argc, char *argv[]) { + printf("\nAlGoritmos e Estrutudas de Dados: %i", contMaiusculo("AlGoritmos e Estruturas de Dados")); + printf("\nAlGoritmos e Estruturas de Dados: %i", contMaiusculoRecursivo("AlGoritmos e Estruturas de Dados")); + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/recursividade/fatorialrecursivo.c b/Codigos/u00 Nivelamento/c/recursividade/fatorialrecursivo.c similarity index 94% rename from fonte/u00 Nivelamento/c/recursividade/fatorialrecursivo.c rename to Codigos/u00 Nivelamento/c/recursividade/fatorialrecursivo.c index 676f455..d41e3eb 100644 --- a/fonte/u00 Nivelamento/c/recursividade/fatorialrecursivo.c +++ b/Codigos/u00 Nivelamento/c/recursividade/fatorialrecursivo.c @@ -1,18 +1,18 @@ -#include -#include - -int fatorial(int n){ - int resp; - printf("\nfat (%i)", n); - resp = (n == 1) ? 1 : n * fatorial(n-1); - printf("\nfat n(%i): %i", n, resp); - return resp; -} - - -int main(int argc, char *argv[]) { - int n = 5; - printf("\nFATORIAL RECURSIVO(%i): %i", n, fatorial(n)); - - return 0; -} +#include +#include + +int fatorial(int n){ + int resp; + printf("\nfat (%i)", n); + resp = (n == 1) ? 1 : n * fatorial(n-1); + printf("\nfat n(%i): %i", n, resp); + return resp; +} + + +int main(int argc, char *argv[]) { + int n = 5; + printf("\nFATORIAL RECURSIVO(%i): %i", n, fatorial(n)); + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/recursividade/fibonaccirecursivo.c b/Codigos/u00 Nivelamento/c/recursividade/fibonaccirecursivo.c similarity index 95% rename from fonte/u00 Nivelamento/c/recursividade/fibonaccirecursivo.c rename to Codigos/u00 Nivelamento/c/recursividade/fibonaccirecursivo.c index 09eb930..b749871 100644 --- a/fonte/u00 Nivelamento/c/recursividade/fibonaccirecursivo.c +++ b/Codigos/u00 Nivelamento/c/recursividade/fibonaccirecursivo.c @@ -1,18 +1,18 @@ -#include -#include - -int fibonacci(int n){ - int resp; - printf("\nfib (%i)", n); - resp = (n == 0 || n == 1) ? 1 : fibonacci(n-1) + fibonacci(n-2); - printf("\nfib n(%i): %i", n, resp); - return resp; -} - - -int main(int argc, char *argv[]) { - int n = 5; - printf("\nFIBONACCI RECURSIVO(%i): %i", n, fibonacci(n)); - - return 0; -} +#include +#include + +int fibonacci(int n){ + int resp; + printf("\nfib (%i)", n); + resp = (n == 0 || n == 1) ? 1 : fibonacci(n-1) + fibonacci(n-2); + printf("\nfib n(%i): %i", n, resp); + return resp; +} + + +int main(int argc, char *argv[]) { + int n = 5; + printf("\nFIBONACCI RECURSIVO(%i): %i", n, fibonacci(n)); + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/recursividade/multiplicacao.c b/Codigos/u00 Nivelamento/c/recursividade/multiplicacao.c similarity index 94% rename from fonte/u00 Nivelamento/c/recursividade/multiplicacao.c rename to Codigos/u00 Nivelamento/c/recursividade/multiplicacao.c index 857573f..81e9b07 100644 --- a/fonte/u00 Nivelamento/c/recursividade/multiplicacao.c +++ b/Codigos/u00 Nivelamento/c/recursividade/multiplicacao.c @@ -1,34 +1,34 @@ -#include -#include - -int multiplicacaoRec(int a, int b, int i){ - int resp = 0; - - if(i < b){ - resp = a + multiplicacaoRec(a, b, i+1); - } - - return resp; -} - -int multiplicacao(int a, int b){ - return multiplicacaoRec(a, b, 0); -} - -int multiplicacaoIt(int a, int b){ - int resp = 0; - for(int i = 0; i < b; i++){ - resp = a + resp; - } - return resp; -} - -int main(int argc, char *argv[]) { - int mult = multiplicacaoIt(4, 3); - printf("\nRESPOSTA IT: %i", mult); - - mult = multiplicacao(4, 3); - printf("\nRESPOSTA REC: %i", mult); - - return 0; -} +#include +#include + +int multiplicacaoRec(int a, int b, int i){ + int resp = 0; + + if(i < b){ + resp = a + multiplicacaoRec(a, b, i+1); + } + + return resp; +} + +int multiplicacao(int a, int b){ + return multiplicacaoRec(a, b, 0); +} + +int multiplicacaoIt(int a, int b){ + int resp = 0; + for(int i = 0; i < b; i++){ + resp = a + resp; + } + return resp; +} + +int main(int argc, char *argv[]) { + int mult = multiplicacaoIt(4, 3); + printf("\nRESPOSTA IT: %i", mult); + + mult = multiplicacao(4, 3); + printf("\nRESPOSTA REC: %i", mult); + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/recursividade/printrecursivo.c b/Codigos/u00 Nivelamento/c/recursividade/printrecursivo.c similarity index 94% rename from fonte/u00 Nivelamento/c/recursividade/printrecursivo.c rename to Codigos/u00 Nivelamento/c/recursividade/printrecursivo.c index e77607c..e4b67a3 100644 --- a/fonte/u00 Nivelamento/c/recursividade/printrecursivo.c +++ b/Codigos/u00 Nivelamento/c/recursividade/printrecursivo.c @@ -1,17 +1,17 @@ -#include -#include - -void printRecursivo(int i){ - printf("\nvalor de i: %i", i); - if(i > 0){ - printRecursivo(i-1); - } - printf("\nvalor de i: %i", i); -} - -int main(int argc, char *argv[]) { - int n = 3; - printRecursivo(n); - - return 0; -} +#include +#include + +void printRecursivo(int i){ + printf("\nvalor de i: %i", i); + if(i > 0){ + printRecursivo(i-1); + } + printf("\nvalor de i: %i", i); +} + +int main(int argc, char *argv[]) { + int n = 3; + printRecursivo(n); + + return 0; +} diff --git a/fonte/u00 Nivelamento/c/registro/registro01.c b/Codigos/u00 Nivelamento/c/registro/registro01.c similarity index 94% rename from fonte/u00 Nivelamento/c/registro/registro01.c rename to Codigos/u00 Nivelamento/c/registro/registro01.c index d6be8d9..6178a8d 100644 --- a/fonte/u00 Nivelamento/c/registro/registro01.c +++ b/Codigos/u00 Nivelamento/c/registro/registro01.c @@ -1,24 +1,24 @@ - - -#include - -#define MAXTAM 100 - -struct Funcionario { - int matricula; - char nome[MAXTAM]; -}; - -void main (){ - struct Funcionario f; - - printf("\nEntre com a matricula: "); - scanf("%d", &f.matricula); - - printf("\nEntre com o nome: "); - scanf("%s", f.nome); - - printf("\nMatricula: %d", f.matricula); - printf("\nNome: %s", f.nome); - printf("\n\n"); -} + + +#include + +#define MAXTAM 100 + +struct Funcionario { + int matricula; + char nome[MAXTAM]; +}; + +void main (){ + struct Funcionario f; + + printf("\nEntre com a matricula: "); + scanf("%d", &f.matricula); + + printf("\nEntre com o nome: "); + scanf("%s", f.nome); + + printf("\nMatricula: %d", f.matricula); + printf("\nNome: %s", f.nome); + printf("\n\n"); +} diff --git a/fonte/u00 Nivelamento/c/registro/registro02.c b/Codigos/u00 Nivelamento/c/registro/registro02.c similarity index 94% rename from fonte/u00 Nivelamento/c/registro/registro02.c rename to Codigos/u00 Nivelamento/c/registro/registro02.c index e6a3122..1dc7faa 100644 --- a/fonte/u00 Nivelamento/c/registro/registro02.c +++ b/Codigos/u00 Nivelamento/c/registro/registro02.c @@ -1,24 +1,24 @@ -#include - -#define MAXTAM 100 - -struct Funcionario { - int matricula; - char nome[MAXTAM]; -}; - -typedef struct Funcionario Funcionario; - -void main (){ - Funcionario f; - - printf("\nEntre com a matricula: "); - scanf("%d", &f.matricula); - - printf("\nEntre com o nome: "); - scanf("%s", f.nome); - - printf("\nMatricula: %d", f.matricula); - printf("\nNome: %s", f.nome); - printf("\n\n"); -} +#include + +#define MAXTAM 100 + +struct Funcionario { + int matricula; + char nome[MAXTAM]; +}; + +typedef struct Funcionario Funcionario; + +void main (){ + Funcionario f; + + printf("\nEntre com a matricula: "); + scanf("%d", &f.matricula); + + printf("\nEntre com o nome: "); + scanf("%s", f.nome); + + printf("\nMatricula: %d", f.matricula); + printf("\nNome: %s", f.nome); + printf("\n\n"); +} diff --git a/fonte/u00 Nivelamento/c/registro/registro03.c b/Codigos/u00 Nivelamento/c/registro/registro03.c similarity index 94% rename from fonte/u00 Nivelamento/c/registro/registro03.c rename to Codigos/u00 Nivelamento/c/registro/registro03.c index 743c3fe..50dffe5 100644 --- a/fonte/u00 Nivelamento/c/registro/registro03.c +++ b/Codigos/u00 Nivelamento/c/registro/registro03.c @@ -1,22 +1,22 @@ -#include - -#define MAXTAM 100 - -typedef struct Funcionario { - int matricula; - char nome[MAXTAM]; -} Funcionario; - -void main (){ - Funcionario f; - - printf("\nEntre com a matricula: "); - scanf("%d", &f.matricula); - - printf("\nEntre com o nome: "); - scanf("%s", f.nome); - - printf("\nMatricula: %d", f.matricula); - printf("\nNome: %s", f.nome); - printf("\n\n"); -} +#include + +#define MAXTAM 100 + +typedef struct Funcionario { + int matricula; + char nome[MAXTAM]; +} Funcionario; + +void main (){ + Funcionario f; + + printf("\nEntre com a matricula: "); + scanf("%d", &f.matricula); + + printf("\nEntre com o nome: "); + scanf("%s", f.nome); + + printf("\nMatricula: %d", f.matricula); + printf("\nNome: %s", f.nome); + printf("\n\n"); +} diff --git a/fonte/u00 Nivelamento/c/registro/registro04.c b/Codigos/u00 Nivelamento/c/registro/registro04.c similarity index 95% rename from fonte/u00 Nivelamento/c/registro/registro04.c rename to Codigos/u00 Nivelamento/c/registro/registro04.c index 692ca5b..3c387ec 100644 --- a/fonte/u00 Nivelamento/c/registro/registro04.c +++ b/Codigos/u00 Nivelamento/c/registro/registro04.c @@ -1,29 +1,29 @@ -#include - -#define MAXTAM 100 - -struct Funcionario { - int matricula; - char nome[MAXTAM]; -}; - -typedef struct Funcionario Funcionario; - -void main (){ - Funcionario vet[MAXTAM]; - int n = 3; - - for(int i = 0; i < n; i++){ - printf("\nEntre com a matricula do funcionario %d: ", (i+1)); - scanf("%d", &vet[i].matricula); - - printf("\nEntre com o nome do funcionario %d: ", (i+1)); - scanf("%s", vet[i].nome); - } - - for(int i = 0; i < n; i++){ - printf("\nMatricula do funcionario %d: %d", (i+1), vet[i].matricula); - printf("\nNome do funcionario %d: %s\n", (i+1), vet[i].nome); - } - printf("\n\n"); -} +#include + +#define MAXTAM 100 + +struct Funcionario { + int matricula; + char nome[MAXTAM]; +}; + +typedef struct Funcionario Funcionario; + +void main (){ + Funcionario vet[MAXTAM]; + int n = 3; + + for(int i = 0; i < n; i++){ + printf("\nEntre com a matricula do funcionario %d: ", (i+1)); + scanf("%d", &vet[i].matricula); + + printf("\nEntre com o nome do funcionario %d: ", (i+1)); + scanf("%s", vet[i].nome); + } + + for(int i = 0; i < n; i++){ + printf("\nMatricula do funcionario %d: %d", (i+1), vet[i].matricula); + printf("\nNome do funcionario %d: %s\n", (i+1), vet[i].nome); + } + printf("\n\n"); +} diff --git a/fonte/u00 Nivelamento/c/sizeof.c b/Codigos/u00 Nivelamento/c/sizeof.c similarity index 96% rename from fonte/u00 Nivelamento/c/sizeof.c rename to Codigos/u00 Nivelamento/c/sizeof.c index 5806266..cb24007 100644 --- a/fonte/u00 Nivelamento/c/sizeof.c +++ b/Codigos/u00 Nivelamento/c/sizeof.c @@ -1,14 +1,14 @@ -#include - -int main(int argc, char *argv[]) { - int a = sizeof(char), - b = sizeof(int), - c = sizeof(double), - d = sizeof(float); - - printf ("Tamanho do char: %i\n", a); - printf ("Tamanho do int: %i\n", b); - printf ("Tamanho do double: %i\n", c); - printf ("Tamanho do float: %i\n", d); - return 0; -} +#include + +int main(int argc, char *argv[]) { + int a = sizeof(char), + b = sizeof(int), + c = sizeof(double), + d = sizeof(float); + + printf ("Tamanho do char: %i\n", a); + printf ("Tamanho do int: %i\n", b); + printf ("Tamanho do double: %i\n", c); + printf ("Tamanho do float: %i\n", d); + return 0; +} diff --git a/fonte/u00 Nivelamento/c/string.c b/Codigos/u00 Nivelamento/c/string.c similarity index 96% rename from fonte/u00 Nivelamento/c/string.c rename to Codigos/u00 Nivelamento/c/string.c index e2f4721..164b473 100644 --- a/fonte/u00 Nivelamento/c/string.c +++ b/Codigos/u00 Nivelamento/c/string.c @@ -1,33 +1,33 @@ -#include -#include - -int main(int argc, char *argv[]){ - char s1[80], s2[80]; - - strcpy(s1, "Algoritmos"); - strcpy(s2, " e Estruturas de Dados II"); - - printf("\nTamanho s1(%i)", (int)strlen(s1)); - printf("\nTamanho s2(%i)", (int)strlen(s2)); - - if(!strcmp(s1, s2)) printf("\nIguais!!!"); - else printf("\nDiferentes!!!"); - - strcat(s1, s2); - printf("\nNova s1 (%s)", s1); - - strcpy(s2, s1); - printf("\nNova s2 (%s)", s2); - - if(!strcmp(s1, s2)) printf("\nIguais!!!"); - else printf("\nDiferentes!!!"); - - s1[10] = s2[10] = '\0'; s1[11] = 'a'; s2[11] = 'b'; - printf("\nNova s1 (%s)", s1); - printf("\nNova s2 (%s)", s2); - - if(!strcmp(s1, s2)) printf("\nIguais!!!"); - else printf("\nDiferentes!!!"); - - return 0; -} +#include +#include + +int main(int argc, char *argv[]){ + char s1[80], s2[80]; + + strcpy(s1, "Algoritmos"); + strcpy(s2, " e Estruturas de Dados II"); + + printf("\nTamanho s1(%i)", (int)strlen(s1)); + printf("\nTamanho s2(%i)", (int)strlen(s2)); + + if(!strcmp(s1, s2)) printf("\nIguais!!!"); + else printf("\nDiferentes!!!"); + + strcat(s1, s2); + printf("\nNova s1 (%s)", s1); + + strcpy(s2, s1); + printf("\nNova s2 (%s)", s2); + + if(!strcmp(s1, s2)) printf("\nIguais!!!"); + else printf("\nDiferentes!!!"); + + s1[10] = s2[10] = '\0'; s1[11] = 'a'; s2[11] = 'b'; + printf("\nNova s1 (%s)", s1); + printf("\nNova s2 (%s)", s2); + + if(!strcmp(s1, s2)) printf("\nIguais!!!"); + else printf("\nDiferentes!!!"); + + return 0; +} diff --git a/fonte/u00 Nivelamento/java/argumentoMain/ArgumentoMain.java b/Codigos/u00 Nivelamento/java/argumentoMain/ArgumentoMain.java similarity index 97% rename from fonte/u00 Nivelamento/java/argumentoMain/ArgumentoMain.java rename to Codigos/u00 Nivelamento/java/argumentoMain/ArgumentoMain.java index f5ef803..aca4a51 100644 --- a/fonte/u00 Nivelamento/java/argumentoMain/ArgumentoMain.java +++ b/Codigos/u00 Nivelamento/java/argumentoMain/ArgumentoMain.java @@ -1,6 +1,6 @@ -class ArgumentoMain { - public static void main (String[] args){ - System.out.println("Primeiro parametro: " + args[0]); - System.out.println("Numero de parametros: " + args.length); - } -} +class ArgumentoMain { + public static void main (String[] args){ + System.out.println("Primeiro parametro: " + args[0]); + System.out.println("Numero de parametros: " + args.length); + } +} diff --git a/fonte/u00 Nivelamento/java/arquivo/ExemploArq01Escrita.java b/Codigos/u00 Nivelamento/java/arquivo/ExemploArq01Escrita.java similarity index 94% rename from fonte/u00 Nivelamento/java/arquivo/ExemploArq01Escrita.java rename to Codigos/u00 Nivelamento/java/arquivo/ExemploArq01Escrita.java index c678a38..4e0fcd9 100644 --- a/fonte/u00 Nivelamento/java/arquivo/ExemploArq01Escrita.java +++ b/Codigos/u00 Nivelamento/java/arquivo/ExemploArq01Escrita.java @@ -1,21 +1,21 @@ -class ExemploArq01Escrita -{ - public static void main(String[] args) - { - //Abrir o arquivo texto - Arq.openWrite("exemplo.txt"); - - - //Escrever no arquivo texto - Arq.println(1); - Arq.println(5.3); - Arq.println('X'); - Arq.println(true); - Arq.println("Algoritmos"); - - - //Fechar o arquivo texto - Arq.close(); - - } // Fim main() -} // Fim class +class ExemploArq01Escrita +{ + public static void main(String[] args) + { + //Abrir o arquivo texto + Arq.openWrite("exemplo.txt"); + + + //Escrever no arquivo texto + Arq.println(1); + Arq.println(5.3); + Arq.println('X'); + Arq.println(true); + Arq.println("Algoritmos"); + + + //Fechar o arquivo texto + Arq.close(); + + } // Fim main() +} // Fim class diff --git a/fonte/u00 Nivelamento/java/arquivo/ExemploArq02Leitura.java b/Codigos/u00 Nivelamento/java/arquivo/ExemploArq02Leitura.java similarity index 96% rename from fonte/u00 Nivelamento/java/arquivo/ExemploArq02Leitura.java rename to Codigos/u00 Nivelamento/java/arquivo/ExemploArq02Leitura.java index 76adaf5..0b73f32 100644 --- a/fonte/u00 Nivelamento/java/arquivo/ExemploArq02Leitura.java +++ b/Codigos/u00 Nivelamento/java/arquivo/ExemploArq02Leitura.java @@ -1,28 +1,28 @@ -class ExemploArq02Leitura -{ - public static void main(String[] args) - { - //Abrir o arquivo texto - Arq.openRead("exemplo.txt"); - - - //Ler o arquivo texto - int inteiro = Arq.readInt(); - double real = Arq.readDouble(); - char caractere = Arq.readChar(); - boolean boleano = Arq.readBoolean(); - String str = Arq.readString(); - - - //Fechar o arquivo texto - Arq.close(); - - //Mostrar os valores lidos na tela - MyIO.println("inteiro: " + inteiro); - MyIO.println("real: " + real); - MyIO.println("caractere: " + caractere); - MyIO.println("boleano: " + boleano); - MyIO.println("str: " + str); - - } // Fim main() -} // Fim class +class ExemploArq02Leitura +{ + public static void main(String[] args) + { + //Abrir o arquivo texto + Arq.openRead("exemplo.txt"); + + + //Ler o arquivo texto + int inteiro = Arq.readInt(); + double real = Arq.readDouble(); + char caractere = Arq.readChar(); + boolean boleano = Arq.readBoolean(); + String str = Arq.readString(); + + + //Fechar o arquivo texto + Arq.close(); + + //Mostrar os valores lidos na tela + MyIO.println("inteiro: " + inteiro); + MyIO.println("real: " + real); + MyIO.println("caractere: " + caractere); + MyIO.println("boleano: " + boleano); + MyIO.println("str: " + str); + + } // Fim main() +} // Fim class diff --git a/fonte/u00 Nivelamento/java/arquivo/ExemploArq02bLeitura.java b/Codigos/u00 Nivelamento/java/arquivo/ExemploArq02bLeitura.java similarity index 96% rename from fonte/u00 Nivelamento/java/arquivo/ExemploArq02bLeitura.java rename to Codigos/u00 Nivelamento/java/arquivo/ExemploArq02bLeitura.java index fcf6b80..33e3465 100644 --- a/fonte/u00 Nivelamento/java/arquivo/ExemploArq02bLeitura.java +++ b/Codigos/u00 Nivelamento/java/arquivo/ExemploArq02bLeitura.java @@ -1,28 +1,28 @@ -class ExemploArq02bLeitura -{ - public static void main(String[] args) - { - //Abrir o arquivo texto - Arq.openRead("exemplo.txt"); - - - //Ler o arquivo texto - int inteiro = Integer.parseInt(Arq.readLine()); - double real = Double.parseDouble(Arq.readLine().replace(",",".")); - char caractere = Arq.readLine().charAt(0); - boolean boleano = Boolean.parseBoolean(Arq.readLine()); - String str = Arq.readLine(); - - - //Fechar o arquivo texto - Arq.close(); - - //Mostrar os valores lidos na tela - MyIO.println("inteiro: " + inteiro); - MyIO.println("real: " + real); - MyIO.println("caractere: " + caractere); - MyIO.println("boleano: " + boleano); - MyIO.println("str: " + str); - - } // Fim main() -} // Fim class +class ExemploArq02bLeitura +{ + public static void main(String[] args) + { + //Abrir o arquivo texto + Arq.openRead("exemplo.txt"); + + + //Ler o arquivo texto + int inteiro = Integer.parseInt(Arq.readLine()); + double real = Double.parseDouble(Arq.readLine().replace(",",".")); + char caractere = Arq.readLine().charAt(0); + boolean boleano = Boolean.parseBoolean(Arq.readLine()); + String str = Arq.readLine(); + + + //Fechar o arquivo texto + Arq.close(); + + //Mostrar os valores lidos na tela + MyIO.println("inteiro: " + inteiro); + MyIO.println("real: " + real); + MyIO.println("caractere: " + caractere); + MyIO.println("boleano: " + boleano); + MyIO.println("str: " + str); + + } // Fim main() +} // Fim class diff --git a/fonte/u00 Nivelamento/java/arquivo/ExemploArq03Exercicio.java b/Codigos/u00 Nivelamento/java/arquivo/ExemploArq03Exercicio.java similarity index 95% rename from fonte/u00 Nivelamento/java/arquivo/ExemploArq03Exercicio.java rename to Codigos/u00 Nivelamento/java/arquivo/ExemploArq03Exercicio.java index f0d7b28..71ad469 100644 --- a/fonte/u00 Nivelamento/java/arquivo/ExemploArq03Exercicio.java +++ b/Codigos/u00 Nivelamento/java/arquivo/ExemploArq03Exercicio.java @@ -1,16 +1,16 @@ -class ExemploArq03Exercicio { - public static void main (String[] args){ - Arq.openRead("exemplo.txt"); - - String str = ""; - while (Arq.hasNext() == true){ - str += Arq.readChar(); - } - - Arq.close(); - - Arq.openWrite("copia.txt"); - Arq.print(str); - Arq.close(); - } -} +class ExemploArq03Exercicio { + public static void main (String[] args){ + Arq.openRead("exemplo.txt"); + + String str = ""; + while (Arq.hasNext() == true){ + str += Arq.readChar(); + } + + Arq.close(); + + Arq.openWrite("copia.txt"); + Arq.print(str); + Arq.close(); + } +} diff --git a/fonte/u00 Nivelamento/java/arquivo/ExemploRAF01Escrita.java b/Codigos/u00 Nivelamento/java/arquivo/ExemploRAF01Escrita.java similarity index 96% rename from fonte/u00 Nivelamento/java/arquivo/ExemploRAF01Escrita.java rename to Codigos/u00 Nivelamento/java/arquivo/ExemploRAF01Escrita.java index e69eef7..123cc8e 100644 --- a/fonte/u00 Nivelamento/java/arquivo/ExemploRAF01Escrita.java +++ b/Codigos/u00 Nivelamento/java/arquivo/ExemploRAF01Escrita.java @@ -1,16 +1,16 @@ -import java.io.*; - -public class ExemploRAF01Escrita { - public static void main(String args[]) throws Exception { - - RandomAccessFile raf = new RandomAccessFile("exemplo.txt","rw"); - - raf.writeInt(1); - raf.writeDouble(5.3); - raf.writeChar('X'); - raf.writeBoolean(true); - raf.writeBytes("Algoritmos"); - - raf.close(); - } -} +import java.io.*; + +public class ExemploRAF01Escrita { + public static void main(String args[]) throws Exception { + + RandomAccessFile raf = new RandomAccessFile("exemplo.txt","rw"); + + raf.writeInt(1); + raf.writeDouble(5.3); + raf.writeChar('X'); + raf.writeBoolean(true); + raf.writeBytes("Algoritmos"); + + raf.close(); + } +} diff --git a/fonte/u00 Nivelamento/java/arquivo/ExemploRAF02Leitura.java b/Codigos/u00 Nivelamento/java/arquivo/ExemploRAF02Leitura.java similarity index 96% rename from fonte/u00 Nivelamento/java/arquivo/ExemploRAF02Leitura.java rename to Codigos/u00 Nivelamento/java/arquivo/ExemploRAF02Leitura.java index 907a480..a81535f 100644 --- a/fonte/u00 Nivelamento/java/arquivo/ExemploRAF02Leitura.java +++ b/Codigos/u00 Nivelamento/java/arquivo/ExemploRAF02Leitura.java @@ -1,22 +1,22 @@ -import java.io.*; - -class ExemploRAF02Leitura { - public static void main (String[] args) throws Exception{ - RandomAccessFile raf = new RandomAccessFile("exemplo.txt", "rw"); - - int inteiro = raf.readInt(); - double real = raf.readDouble(); - char caractere = raf.readChar(); - boolean boleano = raf.readBoolean(); - String str = raf.readLine(); - - raf.close(); - - System.out.println("inteiro: " + inteiro); - System.out.println("real: " + real); - System.out.println("caractere: " + caractere); - System.out.println("boleano: " + boleano); - System.out.println("str: " + str); - } -} - +import java.io.*; + +class ExemploRAF02Leitura { + public static void main (String[] args) throws Exception{ + RandomAccessFile raf = new RandomAccessFile("exemplo.txt", "rw"); + + int inteiro = raf.readInt(); + double real = raf.readDouble(); + char caractere = raf.readChar(); + boolean boleano = raf.readBoolean(); + String str = raf.readLine(); + + raf.close(); + + System.out.println("inteiro: " + inteiro); + System.out.println("real: " + real); + System.out.println("caractere: " + caractere); + System.out.println("boleano: " + boleano); + System.out.println("str: " + str); + } +} + diff --git a/fonte/u00 Nivelamento/java/arquivo/ExemploRAF03Cabecote.java b/Codigos/u00 Nivelamento/java/arquivo/ExemploRAF03Cabecote.java similarity index 96% rename from fonte/u00 Nivelamento/java/arquivo/ExemploRAF03Cabecote.java rename to Codigos/u00 Nivelamento/java/arquivo/ExemploRAF03Cabecote.java index 121b8b9..364f16e 100644 --- a/fonte/u00 Nivelamento/java/arquivo/ExemploRAF03Cabecote.java +++ b/Codigos/u00 Nivelamento/java/arquivo/ExemploRAF03Cabecote.java @@ -1,29 +1,29 @@ -import java.io.*; - -public class ExemploRAF03Cabecote { - public static void main(String args[]) throws Exception { - - RandomAccessFile raf = new RandomAccessFile("exemplo.txt","rw"); - - raf.writeInt(1); - raf.writeDouble(5.3); - raf.writeChar('X'); - raf.writeBoolean(true); - raf.writeBytes("Algoritmos"); - - raf.seek(0); //Retornando o cabecote para a posicao 0 - System.out.println(raf.readInt()); //imprimindo o inteiro - - raf.seek(12); //Setando o cabecote na posicao 12 (do caractere, - //12 = 4 do int + 8 do double) - System.out.println(raf.readChar()); - - raf.seek(12); //Setando o cabecote novamente na posicao 12 - raf.writeChar('@'); //Substituindo o caractere - - raf.seek(12); - System.out.println(raf.readChar()); - - raf.close(); - } -} +import java.io.*; + +public class ExemploRAF03Cabecote { + public static void main(String args[]) throws Exception { + + RandomAccessFile raf = new RandomAccessFile("exemplo.txt","rw"); + + raf.writeInt(1); + raf.writeDouble(5.3); + raf.writeChar('X'); + raf.writeBoolean(true); + raf.writeBytes("Algoritmos"); + + raf.seek(0); //Retornando o cabecote para a posicao 0 + System.out.println(raf.readInt()); //imprimindo o inteiro + + raf.seek(12); //Setando o cabecote na posicao 12 (do caractere, + //12 = 4 do int + 8 do double) + System.out.println(raf.readChar()); + + raf.seek(12); //Setando o cabecote novamente na posicao 12 + raf.writeChar('@'); //Substituindo o caractere + + raf.seek(12); + System.out.println(raf.readChar()); + + raf.close(); + } +} diff --git a/fonte/u00 Nivelamento/java/classeObjeto/ExemploOO.java b/Codigos/u00 Nivelamento/java/classeObjeto/ExemploOO.java similarity index 100% rename from fonte/u00 Nivelamento/java/classeObjeto/ExemploOO.java rename to Codigos/u00 Nivelamento/java/classeObjeto/ExemploOO.java diff --git a/fonte/u00 Nivelamento/java/classeObjeto/classeMatriz/Lixao.java b/Codigos/u00 Nivelamento/java/classeObjeto/classeMatriz/Lixao.java similarity index 96% rename from fonte/u00 Nivelamento/java/classeObjeto/classeMatriz/Lixao.java rename to Codigos/u00 Nivelamento/java/classeObjeto/classeMatriz/Lixao.java index 086a7d1..dadfdb6 100644 --- a/fonte/u00 Nivelamento/java/classeObjeto/classeMatriz/Lixao.java +++ b/Codigos/u00 Nivelamento/java/classeObjeto/classeMatriz/Lixao.java @@ -1,48 +1,48 @@ import java.util.*; class Lixao{ - public static Scanner sc = new Scanner(System.in); - public static void main(String[] args){ - int linha, coluna; - Matriz m1, m2; - + public static Scanner sc = new Scanner(System.in); + public static void main(String[] args){ + int linha, coluna; + Matriz m1, m2; + //Leitura do numero de linhas das matrizes - System.out.println("Digite o numero de linhas:"); - linha = sc.nextInt(); - + System.out.println("Digite o numero de linhas:"); + linha = sc.nextInt(); + //Leitura do numero de coluna das matrizes - System.out.println("Digite o numero de colunas:"); - coluna = sc.nextInt(); - - //Definicao do tamanho das matrizes - m1 = new Matriz(linha,coluna); - m2 = new Matriz(linha, coluna); - - //Leitura de cada elemento da matriz 1 - m1.ler(); - - //Leitura de cada elemento da matriz 2 - m2.ler(); - - //Somar as duas matrizes e salvar o resultado na matriz 3 - Matriz m3 = m1.soma(m2); - - //Imprimir a matriz 1 - m1.imprimir(); - - //Imprimir a matriz 2 - m2.imprimir(); - - //Imprimir a matriz 3 - m3.imprimir(); - - //Imprimir a matriz 1 em formato de grid - m1.imprimirEmGrid(); - - //Imprimir a matriz 2 em formato de grid - m2.imprimirEmGrid(); - - //Imprimir a matriz 3 em formato de grid - m3.imprimirEmGrid(); - } -} + System.out.println("Digite o numero de colunas:"); + coluna = sc.nextInt(); + + //Definicao do tamanho das matrizes + m1 = new Matriz(linha,coluna); + m2 = new Matriz(linha, coluna); + + //Leitura de cada elemento da matriz 1 + m1.ler(); + + //Leitura de cada elemento da matriz 2 + m2.ler(); + + //Somar as duas matrizes e salvar o resultado na matriz 3 + Matriz m3 = m1.soma(m2); + + //Imprimir a matriz 1 + m1.imprimir(); + + //Imprimir a matriz 2 + m2.imprimir(); + + //Imprimir a matriz 3 + m3.imprimir(); + + //Imprimir a matriz 1 em formato de grid + m1.imprimirEmGrid(); + + //Imprimir a matriz 2 em formato de grid + m2.imprimirEmGrid(); + + //Imprimir a matriz 3 em formato de grid + m3.imprimirEmGrid(); + } +} diff --git a/fonte/u00 Nivelamento/java/classeObjeto/classeMatriz/Matriz.java b/Codigos/u00 Nivelamento/java/classeObjeto/classeMatriz/Matriz.java similarity index 96% rename from fonte/u00 Nivelamento/java/classeObjeto/classeMatriz/Matriz.java rename to Codigos/u00 Nivelamento/java/classeObjeto/classeMatriz/Matriz.java index da3421f..829a908 100644 --- a/fonte/u00 Nivelamento/java/classeObjeto/classeMatriz/Matriz.java +++ b/Codigos/u00 Nivelamento/java/classeObjeto/classeMatriz/Matriz.java @@ -1,65 +1,65 @@ import java.util.*; -class Matriz{ - private int linha; - private int coluna; +class Matriz{ + private int linha; + private int coluna; private int[][] mat; - public static Scanner sc = new Scanner(System.in); - public Matriz(){ - linha = coluna = 10; - mat = new int[linha][coluna]; - } - public Matriz(int linha_, int coluna_){ - linha = linha_; - coluna = coluna_; - mat = new int[linha][coluna]; - } - public int getElemento(int i, int j){ - return mat[i][j]; - } - public void setElemento(int i, int j, int valor){ - mat[i][j] = valor; - } - public void ler(){ - for (int i = 0; i < linha; i++){ + public static Scanner sc = new Scanner(System.in); + public Matriz(){ + linha = coluna = 10; + mat = new int[linha][coluna]; + } + public Matriz(int linha_, int coluna_){ + linha = linha_; + coluna = coluna_; + mat = new int[linha][coluna]; + } + public int getElemento(int i, int j){ + return mat[i][j]; + } + public void setElemento(int i, int j, int valor){ + mat[i][j] = valor; + } + public void ler(){ + for (int i = 0; i < linha; i++){ for (int j = 0; j < coluna; j++){ - System.out.println("Digite o elemento [" + i + "," + j + "]: "); - mat[i][j] = sc.nextInt(); - } - } - System.out.println(); - } - - public Matriz soma(Matriz outra){ - - Matriz resp = new Matriz(linha, coluna); - - for (int i = 0; i < linha; i++){ - for (int j = 0; j < coluna; j++){ - resp.mat[i][j] = mat[i][j] + outra.mat[i][j]; - } - } - - return resp; - - } - - public void imprimir(){ - for (int i = 0; i < linha; i++){ - for (int j = 0; j < coluna; j++){ - System.out.println("Mat[" + i + "," + j + "]: " + mat[i][j]); - } - } - System.out.println(); - } - public void imprimirEmGrid(){ - for (int i = 0; i < linha; i++){ - for (int j = 0; j < coluna; j++){ - System.out.print(" " + mat[i][j]); - } - System.out.println(); - } - System.out.println(); - } -} - + System.out.println("Digite o elemento [" + i + "," + j + "]: "); + mat[i][j] = sc.nextInt(); + } + } + System.out.println(); + } + + public Matriz soma(Matriz outra){ + + Matriz resp = new Matriz(linha, coluna); + + for (int i = 0; i < linha; i++){ + for (int j = 0; j < coluna; j++){ + resp.mat[i][j] = mat[i][j] + outra.mat[i][j]; + } + } + + return resp; + + } + + public void imprimir(){ + for (int i = 0; i < linha; i++){ + for (int j = 0; j < coluna; j++){ + System.out.println("Mat[" + i + "," + j + "]: " + mat[i][j]); + } + } + System.out.println(); + } + public void imprimirEmGrid(){ + for (int i = 0; i < linha; i++){ + for (int j = 0; j < coluna; j++){ + System.out.print(" " + mat[i][j]); + } + System.out.println(); + } + System.out.println(); + } +} + diff --git a/fonte/u00 Nivelamento/java/classeObjeto/classeRetangulo/Lixao.java b/Codigos/u00 Nivelamento/java/classeObjeto/classeRetangulo/Lixao.java similarity index 100% rename from fonte/u00 Nivelamento/java/classeObjeto/classeRetangulo/Lixao.java rename to Codigos/u00 Nivelamento/java/classeObjeto/classeRetangulo/Lixao.java diff --git a/fonte/u00 Nivelamento/java/classeObjeto/classeRetangulo/Principal.java b/Codigos/u00 Nivelamento/java/classeObjeto/classeRetangulo/Principal.java similarity index 97% rename from fonte/u00 Nivelamento/java/classeObjeto/classeRetangulo/Principal.java rename to Codigos/u00 Nivelamento/java/classeObjeto/classeRetangulo/Principal.java index 734a85a..14633eb 100644 --- a/fonte/u00 Nivelamento/java/classeObjeto/classeRetangulo/Principal.java +++ b/Codigos/u00 Nivelamento/java/classeObjeto/classeRetangulo/Principal.java @@ -1,44 +1,44 @@ -/** - * Introducao a programacao orientada por objetos - * @author Max do Val Machado - * @version 2 01/2015 - */ -class Principal -{ - public static void main(String[] args) - { - Retangulo r1 = new Retangulo(); - Retangulo r2 = new Retangulo(); - - r1.lerTudo(); - r1.escreverTudo(); - - r2.lerTudo(); - r2.escreverTudo(); - - if (r1.comparar(r2.getB(), r2.getH()) == true){ - System.out.println("Os retangulos " + r1.getNome() + " e " + r2.getNome() + "sao iguais!"); - }else{ - System.out.println("Os retangulos " + r1.getNome() + " e " + r2.getNome() + "sao diferentes!"); - } - - if (r1.comparar(r2) == true){ - System.out.println("Os retangulos " + r1.getNome() + " e " + r2.getNome() + "sao iguais!"); - }else{ - System.out.println("Os retangulos " + r1.getNome() + " e " + r2.getNome() + "sao diferentes!"); - } - - if (r1.comparar(r1) == true){ - System.out.println("Os retangulos " + r1.getNome() + " e " + r1.getNome() + "sao iguais!"); - }else{ - System.out.println("Os retangulos " + r1.getNome() + " e " + r1.getNome() + "sao diferentes!"); - } - - if (r2.comparar(r1) == true){ - System.out.println("Os retangulos " + r2.getNome() + " e " + r1.getNome() + "sao iguais!"); - }else{ - System.out.println("Os retangulos " + r2.getNome() + " e " + r1.getNome() + "sao diferentes!"); - } - } -} - +/** + * Introducao a programacao orientada por objetos + * @author Max do Val Machado + * @version 2 01/2015 + */ +class Principal +{ + public static void main(String[] args) + { + Retangulo r1 = new Retangulo(); + Retangulo r2 = new Retangulo(); + + r1.lerTudo(); + r1.escreverTudo(); + + r2.lerTudo(); + r2.escreverTudo(); + + if (r1.comparar(r2.getB(), r2.getH()) == true){ + System.out.println("Os retangulos " + r1.getNome() + " e " + r2.getNome() + "sao iguais!"); + }else{ + System.out.println("Os retangulos " + r1.getNome() + " e " + r2.getNome() + "sao diferentes!"); + } + + if (r1.comparar(r2) == true){ + System.out.println("Os retangulos " + r1.getNome() + " e " + r2.getNome() + "sao iguais!"); + }else{ + System.out.println("Os retangulos " + r1.getNome() + " e " + r2.getNome() + "sao diferentes!"); + } + + if (r1.comparar(r1) == true){ + System.out.println("Os retangulos " + r1.getNome() + " e " + r1.getNome() + "sao iguais!"); + }else{ + System.out.println("Os retangulos " + r1.getNome() + " e " + r1.getNome() + "sao diferentes!"); + } + + if (r2.comparar(r1) == true){ + System.out.println("Os retangulos " + r2.getNome() + " e " + r1.getNome() + "sao iguais!"); + }else{ + System.out.println("Os retangulos " + r2.getNome() + " e " + r1.getNome() + "sao diferentes!"); + } + } +} + diff --git a/fonte/u00 Nivelamento/java/classeObjeto/classeRetangulo/Retangulo.java b/Codigos/u00 Nivelamento/java/classeObjeto/classeRetangulo/Retangulo.java similarity index 95% rename from fonte/u00 Nivelamento/java/classeObjeto/classeRetangulo/Retangulo.java rename to Codigos/u00 Nivelamento/java/classeObjeto/classeRetangulo/Retangulo.java index 409a03a..8f29e44 100644 --- a/fonte/u00 Nivelamento/java/classeObjeto/classeRetangulo/Retangulo.java +++ b/Codigos/u00 Nivelamento/java/classeObjeto/classeRetangulo/Retangulo.java @@ -1,102 +1,102 @@ -/** - * Introducao a programacao orientada por objetos - * @author Max do Val Machado - * @version 2 01/2015 - */ -class Retangulo{ - //Declaracao de variaveis - private double b, h; - private String nome; - - //Construtor vazio - public Retangulo(){ - this.b = this.h = 0; - this.nome = ""; - } - - //Construtor que recebe parametros - public Retangulo(double b, double h, String nome){ - this.b = b; - this.h = h; - this.nome = nome; - } - - public double getB(){ - return this.b; - } - - public void setB(double b){ - this.b = b; - } - - public double getH(){ - return this.h; - } - - public void setH(double h){ - this.h = h; - } - - public String getNome(){ - return this.nome; - } - - public void setNome(String nome){ - this.nome = nome; - } - - public void lerTudo(){ - b = MyIO.readDouble("Entre com a base: "); - h = MyIO.readDouble("Entre com a altura: "); - nome = MyIO.readString("Entre com o nome: "); - } - - public void escreverTudo(){ - System.out.println("NOME: " + nome); - System.out.println("Base: " + b); - System.out.println("Altura: " + h); - System.out.println("Area: " + getArea()); - System.out.println("Diagonal: " + getDiagonal()); - System.out.println("Perimetro: " + getPerimetro()); - } - - - //Retornar a area - public double getArea(){ - return (b * h); - } - - //Retornar o perimetro - public double getPerimetro(){ - return ((b + h) * 2); - } - - //Retornar a diagonal - public double getDiagonal(){ - return Math.sqrt(b * b + h * h); - } - - - //Comparar - public boolean comparar(double outraB, double outraH){ - boolean resp; - - if (this.b == outraB && this.h == outraH){ - resp = true; - }else{ - resp = false; - } - - return resp; - } - - //Comparar - //public boolean comparar(double outraB, double outraH){ - // return (this.b == outraB && this.h == outraH); - //} - - //Comparar - public boolean comparar(Retangulo x){ - return (this.b == x.b && this.h == x.h); - } -} +/** + * Introducao a programacao orientada por objetos + * @author Max do Val Machado + * @version 2 01/2015 + */ +class Retangulo{ + //Declaracao de variaveis + private double b, h; + private String nome; + + //Construtor vazio + public Retangulo(){ + this.b = this.h = 0; + this.nome = ""; + } + + //Construtor que recebe parametros + public Retangulo(double b, double h, String nome){ + this.b = b; + this.h = h; + this.nome = nome; + } + + public double getB(){ + return this.b; + } + + public void setB(double b){ + this.b = b; + } + + public double getH(){ + return this.h; + } + + public void setH(double h){ + this.h = h; + } + + public String getNome(){ + return this.nome; + } + + public void setNome(String nome){ + this.nome = nome; + } + + public void lerTudo(){ + b = MyIO.readDouble("Entre com a base: "); + h = MyIO.readDouble("Entre com a altura: "); + nome = MyIO.readString("Entre com o nome: "); + } + + public void escreverTudo(){ + System.out.println("NOME: " + nome); + System.out.println("Base: " + b); + System.out.println("Altura: " + h); + System.out.println("Area: " + getArea()); + System.out.println("Diagonal: " + getDiagonal()); + System.out.println("Perimetro: " + getPerimetro()); + } + + + //Retornar a area + public double getArea(){ + return (b * h); + } + + //Retornar o perimetro + public double getPerimetro(){ + return ((b + h) * 2); + } + + //Retornar a diagonal + public double getDiagonal(){ + return Math.sqrt(b * b + h * h); + } + + + //Comparar + public boolean comparar(double outraB, double outraH){ + boolean resp; + + if (this.b == outraB && this.h == outraH){ + resp = true; + }else{ + resp = false; + } + + return resp; + } + + //Comparar + //public boolean comparar(double outraB, double outraH){ + // return (this.b == outraB && this.h == outraH); + //} + + //Comparar + public boolean comparar(Retangulo x){ + return (this.b == x.b && this.h == x.h); + } +} diff --git a/fonte/u00 Nivelamento/java/classeObjeto/estatico/Estatico.java b/Codigos/u00 Nivelamento/java/classeObjeto/estatico/Estatico.java similarity index 96% rename from fonte/u00 Nivelamento/java/classeObjeto/estatico/Estatico.java rename to Codigos/u00 Nivelamento/java/classeObjeto/estatico/Estatico.java index 5cc1220..e3c1aa0 100644 --- a/fonte/u00 Nivelamento/java/classeObjeto/estatico/Estatico.java +++ b/Codigos/u00 Nivelamento/java/classeObjeto/estatico/Estatico.java @@ -1,19 +1,19 @@ -class Estatico { - public static int numeroEstatico; - public int numeroNaoEstatico; - - public Estatico(){ - numeroEstatico = 0; - } - - public static void metodoEstatico(){ - System.out.println("Metodo Estatico: " + numeroEstatico); - } - - public void metodoNaoEstatico(){ - System.out.println("Metodo Nao Estatico: " + numeroEstatico + " / " + numeroNaoEstatico); - } - public void setEstatico(int valor){ - numeroEstatico = valor; - } -} +class Estatico { + public static int numeroEstatico; + public int numeroNaoEstatico; + + public Estatico(){ + numeroEstatico = 0; + } + + public static void metodoEstatico(){ + System.out.println("Metodo Estatico: " + numeroEstatico); + } + + public void metodoNaoEstatico(){ + System.out.println("Metodo Nao Estatico: " + numeroEstatico + " / " + numeroNaoEstatico); + } + public void setEstatico(int valor){ + numeroEstatico = valor; + } +} diff --git a/fonte/u00 Nivelamento/java/classeObjeto/estatico/Lixao.java b/Codigos/u00 Nivelamento/java/classeObjeto/estatico/Lixao.java similarity index 96% rename from fonte/u00 Nivelamento/java/classeObjeto/estatico/Lixao.java rename to Codigos/u00 Nivelamento/java/classeObjeto/estatico/Lixao.java index e4fb0c3..77bb183 100644 --- a/fonte/u00 Nivelamento/java/classeObjeto/estatico/Lixao.java +++ b/Codigos/u00 Nivelamento/java/classeObjeto/estatico/Lixao.java @@ -1,26 +1,26 @@ -class Lixao{ - public static void main(String[] args){ - Estatico e1 = new Estatico(); - Estatico e2 = new Estatico(); - - System.out.println("(1) =================================="); - Estatico.numeroEstatico = 1; - System.out.println(Estatico.numeroEstatico); - System.out.println(e1.numeroEstatico); - e1.numeroEstatico = 3; - System.out.println(e2.numeroEstatico); - - e1.numeroNaoEstatico = 2; - e2.numeroNaoEstatico = 4; - System.out.println(e1.numeroNaoEstatico); - - //Error non-static variable numeroNaoEstatico cannot be referenced from a static context - //Estatico.numeroNaoEstatico = 10; - - System.out.println("(2) =================================="); - Estatico.metodoEstatico(); - e1.metodoNaoEstatico(); - //Estatico.metodoNaoEstatico(); - } -} - +class Lixao{ + public static void main(String[] args){ + Estatico e1 = new Estatico(); + Estatico e2 = new Estatico(); + + System.out.println("(1) =================================="); + Estatico.numeroEstatico = 1; + System.out.println(Estatico.numeroEstatico); + System.out.println(e1.numeroEstatico); + e1.numeroEstatico = 3; + System.out.println(e2.numeroEstatico); + + e1.numeroNaoEstatico = 2; + e2.numeroNaoEstatico = 4; + System.out.println(e1.numeroNaoEstatico); + + //Error non-static variable numeroNaoEstatico cannot be referenced from a static context + //Estatico.numeroNaoEstatico = 10; + + System.out.println("(2) =================================="); + Estatico.metodoEstatico(); + e1.metodoNaoEstatico(); + //Estatico.metodoNaoEstatico(); + } +} + diff --git a/fonte/u00 Nivelamento/java/classeObjeto/primeiraClasse/Funcionario.java b/Codigos/u00 Nivelamento/java/classeObjeto/primeiraClasse/Funcionario.java similarity index 100% rename from fonte/u00 Nivelamento/java/classeObjeto/primeiraClasse/Funcionario.java rename to Codigos/u00 Nivelamento/java/classeObjeto/primeiraClasse/Funcionario.java diff --git a/fonte/u00 Nivelamento/java/classeObjeto/primeiraClasse/Lixao.java b/Codigos/u00 Nivelamento/java/classeObjeto/primeiraClasse/Lixao.java similarity index 100% rename from fonte/u00 Nivelamento/java/classeObjeto/primeiraClasse/Lixao.java rename to Codigos/u00 Nivelamento/java/classeObjeto/primeiraClasse/Lixao.java diff --git a/fonte/u00 Nivelamento/java/classeObjeto/visibilidade/Lixao.java b/Codigos/u00 Nivelamento/java/classeObjeto/visibilidade/Lixao.java similarity index 96% rename from fonte/u00 Nivelamento/java/classeObjeto/visibilidade/Lixao.java rename to Codigos/u00 Nivelamento/java/classeObjeto/visibilidade/Lixao.java index 0845fe7..a2f6d01 100644 --- a/fonte/u00 Nivelamento/java/classeObjeto/visibilidade/Lixao.java +++ b/Codigos/u00 Nivelamento/java/classeObjeto/visibilidade/Lixao.java @@ -1,27 +1,27 @@ -class Lixao{ - public static void main(String[] args){ - Visibilidade v = new Visibilidade(); - - System.out.println("(1) =================================="); - - v.numeroPublico = 1; - System.out.println(v.numeroPublico); - - //Error numeroPrivado has private access in Visibilidade - //v.numeroPrivado = 2; - - //Error numeroPrivado has private access in Visibilidade - //System.out.println(v.numeroPrivado); - - v.setNumeroPrivado(3); - System.out.println(v.getNumeroPrivado()); - - System.out.println("(2) =================================="); - - v.metodoPublico(); - - //Error metodoPrivado() has private access in Visibilidade - //v.metodoPrivado(); - - v.chamaPrivado(); -} } +class Lixao{ + public static void main(String[] args){ + Visibilidade v = new Visibilidade(); + + System.out.println("(1) =================================="); + + v.numeroPublico = 1; + System.out.println(v.numeroPublico); + + //Error numeroPrivado has private access in Visibilidade + //v.numeroPrivado = 2; + + //Error numeroPrivado has private access in Visibilidade + //System.out.println(v.numeroPrivado); + + v.setNumeroPrivado(3); + System.out.println(v.getNumeroPrivado()); + + System.out.println("(2) =================================="); + + v.metodoPublico(); + + //Error metodoPrivado() has private access in Visibilidade + //v.metodoPrivado(); + + v.chamaPrivado(); +} } diff --git a/fonte/u00 Nivelamento/java/classeObjeto/visibilidade/Visibilidade.java b/Codigos/u00 Nivelamento/java/classeObjeto/visibilidade/Visibilidade.java similarity index 100% rename from fonte/u00 Nivelamento/java/classeObjeto/visibilidade/Visibilidade.java rename to Codigos/u00 Nivelamento/java/classeObjeto/visibilidade/Visibilidade.java diff --git a/fonte/u00 Nivelamento/java/entradaSaida/ExemploBufferedReader.java b/Codigos/u00 Nivelamento/java/entradaSaida/ExemploBufferedReader.java similarity index 96% rename from fonte/u00 Nivelamento/java/entradaSaida/ExemploBufferedReader.java rename to Codigos/u00 Nivelamento/java/entradaSaida/ExemploBufferedReader.java index 7d694bc..73e7aa7 100644 --- a/fonte/u00 Nivelamento/java/entradaSaida/ExemploBufferedReader.java +++ b/Codigos/u00 Nivelamento/java/entradaSaida/ExemploBufferedReader.java @@ -1,43 +1,43 @@ -import java.io.*; -import java.nio.charset.*; - -class ExemploBufferedReader { - - //Declaracao da classe BufferedReader - private static BufferedReader in = new BufferedReader(new InputStreamReader(System.in, Charset.forName("ISO-8859-1"))); - - public static String readString(){ - String s = ""; - char tmp; - try{ - do{ - tmp = (char)in.read(); - if(tmp != '\n' && tmp != ' ' && tmp != 13){ - s += tmp; - } - }while(tmp != '\n' && tmp != ' '); - }catch(IOException ioe){} - return s; - } - - public static void main(String [] args) throws Exception { - - System.out.printf("Entre com uma palavra: "); - String str = readString(); - - System.out.printf("Entre com um numero inteiro: "); - int inteiro = Integer.parseInt(readString().trim()); - - System.out.printf("Entre com um numero real: "); - double real = Double.parseDouble(readString().trim().replace(",",".")); - - System.out.printf("Entre com um caractere: "); - char caractere = (char)in.read(); - - System.out.println("Sua str: " + str); - System.out.println("Seu inteiro: " + inteiro); - System.out.println("Seu real: " + real); - System.out.println("Seu caractere: " + caractere); - } // fim main () -} // fim class - +import java.io.*; +import java.nio.charset.*; + +class ExemploBufferedReader { + + //Declaracao da classe BufferedReader + private static BufferedReader in = new BufferedReader(new InputStreamReader(System.in, Charset.forName("ISO-8859-1"))); + + public static String readString(){ + String s = ""; + char tmp; + try{ + do{ + tmp = (char)in.read(); + if(tmp != '\n' && tmp != ' ' && tmp != 13){ + s += tmp; + } + }while(tmp != '\n' && tmp != ' '); + }catch(IOException ioe){} + return s; + } + + public static void main(String [] args) throws Exception { + + System.out.printf("Entre com uma palavra: "); + String str = readString(); + + System.out.printf("Entre com um numero inteiro: "); + int inteiro = Integer.parseInt(readString().trim()); + + System.out.printf("Entre com um numero real: "); + double real = Double.parseDouble(readString().trim().replace(",",".")); + + System.out.printf("Entre com um caractere: "); + char caractere = (char)in.read(); + + System.out.println("Sua str: " + str); + System.out.println("Seu inteiro: " + inteiro); + System.out.println("Seu real: " + real); + System.out.println("Seu caractere: " + caractere); + } // fim main () +} // fim class + diff --git a/fonte/u00 Nivelamento/java/entradaSaida/ExemploMyIO.java b/Codigos/u00 Nivelamento/java/entradaSaida/ExemploMyIO.java similarity index 97% rename from fonte/u00 Nivelamento/java/entradaSaida/ExemploMyIO.java rename to Codigos/u00 Nivelamento/java/entradaSaida/ExemploMyIO.java index 2f472d6..1a68fdb 100644 --- a/fonte/u00 Nivelamento/java/entradaSaida/ExemploMyIO.java +++ b/Codigos/u00 Nivelamento/java/entradaSaida/ExemploMyIO.java @@ -1,13 +1,13 @@ -class ExemploMyIO { - public static void main (String[] args){ - String str = MyIO.readString("Entre com uma palavra: "); - int inteiro = MyIO.readInt("Entre com um inteiro: "); - double real = MyIO.readDouble("Entre com um real: "); - char caractere = MyIO.readChar("Entre com um caractere: "); - - MyIO.println("Sua string: " + str); - MyIO.println("Seu inteiro: " + inteiro); - MyIO.println("Seu real: " + real); - MyIO.println("Seu caractere: " + caractere); - } -} +class ExemploMyIO { + public static void main (String[] args){ + String str = MyIO.readString("Entre com uma palavra: "); + int inteiro = MyIO.readInt("Entre com um inteiro: "); + double real = MyIO.readDouble("Entre com um real: "); + char caractere = MyIO.readChar("Entre com um caractere: "); + + MyIO.println("Sua string: " + str); + MyIO.println("Seu inteiro: " + inteiro); + MyIO.println("Seu real: " + real); + MyIO.println("Seu caractere: " + caractere); + } +} diff --git a/fonte/u00 Nivelamento/java/entradaSaida/ExemploScanner.java b/Codigos/u00 Nivelamento/java/entradaSaida/ExemploScanner.java similarity index 96% rename from fonte/u00 Nivelamento/java/entradaSaida/ExemploScanner.java rename to Codigos/u00 Nivelamento/java/entradaSaida/ExemploScanner.java index 314ec8c..de65592 100644 --- a/fonte/u00 Nivelamento/java/entradaSaida/ExemploScanner.java +++ b/Codigos/u00 Nivelamento/java/entradaSaida/ExemploScanner.java @@ -1,28 +1,28 @@ -import java.util.*; - -class ExemploScanner { - public static void main(String [] args){ - - //Declaracao da classe scanner - Scanner scanner = new Scanner (System.in); - - System.out.printf("Entre com uma palavra: "); - String str = scanner.nextLine(); - - System.out.printf("Entre com um caractere: "); - char caractere = scanner.nextLine().charAt(0); - - System.out.printf("Entre com um numero inteiro: "); - int inteiro = scanner.nextInt(); - - System.out.printf("Entre com um numero real: "); - double real = scanner.nextDouble(); - - System.out.println("Sua str: " + str); - System.out.println("Seu inteiro: " + inteiro); - System.out.println("Seu real: " + real); - System.out.println("Seu caractere: " + caractere); - - } // fim main () -} // fim class - +import java.util.*; + +class ExemploScanner { + public static void main(String [] args){ + + //Declaracao da classe scanner + Scanner scanner = new Scanner (System.in); + + System.out.printf("Entre com uma palavra: "); + String str = scanner.nextLine(); + + System.out.printf("Entre com um caractere: "); + char caractere = scanner.nextLine().charAt(0); + + System.out.printf("Entre com um numero inteiro: "); + int inteiro = scanner.nextInt(); + + System.out.printf("Entre com um numero real: "); + double real = scanner.nextDouble(); + + System.out.println("Sua str: " + str); + System.out.println("Seu inteiro: " + inteiro); + System.out.println("Seu real: " + real); + System.out.println("Seu caractere: " + caractere); + + } // fim main () +} // fim class + diff --git a/fonte/u00 Nivelamento/java/entradaSaida/entrada.txt b/Codigos/u00 Nivelamento/java/entradaSaida/entrada.txt similarity index 80% rename from fonte/u00 Nivelamento/java/entradaSaida/entrada.txt rename to Codigos/u00 Nivelamento/java/entradaSaida/entrada.txt index 29caefe..600d616 100644 --- a/fonte/u00 Nivelamento/java/entradaSaida/entrada.txt +++ b/Codigos/u00 Nivelamento/java/entradaSaida/entrada.txt @@ -1,5 +1,5 @@ -hoje -3000000 -12.3 -a - +hoje +3000000 +12.3 +a + diff --git a/fonte/u00 Nivelamento/java/ponteiro/Cliente.java b/Codigos/u00 Nivelamento/java/ponteiro/Cliente.java similarity index 100% rename from fonte/u00 Nivelamento/java/ponteiro/Cliente.java rename to Codigos/u00 Nivelamento/java/ponteiro/Cliente.java diff --git a/fonte/u00 Nivelamento/java/ponteiro/Ponteiro01Array.java b/Codigos/u00 Nivelamento/java/ponteiro/Ponteiro01Array.java similarity index 95% rename from fonte/u00 Nivelamento/java/ponteiro/Ponteiro01Array.java rename to Codigos/u00 Nivelamento/java/ponteiro/Ponteiro01Array.java index 45d7455..5c92859 100644 --- a/fonte/u00 Nivelamento/java/ponteiro/Ponteiro01Array.java +++ b/Codigos/u00 Nivelamento/java/ponteiro/Ponteiro01Array.java @@ -1,14 +1,14 @@ -/** - * Ponteiro - * @author Max do Val Machado - * @version 2 01/2015 - */ -class Ponteiro01Array { - public static void main (String[] args) { - int[] vet = new int [5]; - System.out.println(vet); - - vet = new int [5]; - System.out.println(vet); - } -} +/** + * Ponteiro + * @author Max do Val Machado + * @version 2 01/2015 + */ +class Ponteiro01Array { + public static void main (String[] args) { + int[] vet = new int [5]; + System.out.println(vet); + + vet = new int [5]; + System.out.println(vet); + } +} diff --git a/fonte/u00 Nivelamento/java/ponteiro/Ponteiro02PassagemTipoPrimitivo.java b/Codigos/u00 Nivelamento/java/ponteiro/Ponteiro02PassagemTipoPrimitivo.java similarity index 95% rename from fonte/u00 Nivelamento/java/ponteiro/Ponteiro02PassagemTipoPrimitivo.java rename to Codigos/u00 Nivelamento/java/ponteiro/Ponteiro02PassagemTipoPrimitivo.java index 05fe3c1..afa9135 100644 --- a/fonte/u00 Nivelamento/java/ponteiro/Ponteiro02PassagemTipoPrimitivo.java +++ b/Codigos/u00 Nivelamento/java/ponteiro/Ponteiro02PassagemTipoPrimitivo.java @@ -1,19 +1,19 @@ -/** - * Ponteiro - * @author Max do Val Machado - * @version 2 01/2015 - */ -class Ponteiro02PassagemTipoPrimitivo { - public static void passagemDeTipoPrimitivo(int a){ - System.out.println("a: " + a); - a = 10; - System.out.println("a: " + a); - } - public static void main(String[] args) { - int x = 5; - System.out.println("x: " + x); - passagemDeTipoPrimitivo(x); - System.out.println("x: " + x); - } -} - +/** + * Ponteiro + * @author Max do Val Machado + * @version 2 01/2015 + */ +class Ponteiro02PassagemTipoPrimitivo { + public static void passagemDeTipoPrimitivo(int a){ + System.out.println("a: " + a); + a = 10; + System.out.println("a: " + a); + } + public static void main(String[] args) { + int x = 5; + System.out.println("x: " + x); + passagemDeTipoPrimitivo(x); + System.out.println("x: " + x); + } +} + diff --git a/fonte/u00 Nivelamento/java/ponteiro/Ponteiro03PassagemArray.java b/Codigos/u00 Nivelamento/java/ponteiro/Ponteiro03PassagemArray.java similarity index 95% rename from fonte/u00 Nivelamento/java/ponteiro/Ponteiro03PassagemArray.java rename to Codigos/u00 Nivelamento/java/ponteiro/Ponteiro03PassagemArray.java index e7beb5e..2cf9747 100644 --- a/fonte/u00 Nivelamento/java/ponteiro/Ponteiro03PassagemArray.java +++ b/Codigos/u00 Nivelamento/java/ponteiro/Ponteiro03PassagemArray.java @@ -1,31 +1,31 @@ -/** - * Ponteiro - * @author Max do Val Machado - * @version 2 01/2015 - */ -class Ponteiro03PassagemArray { - public static void passangemDeArray(int[] b){ - for(int i = 0; i < 5; i++){ - b[i] *= 5; - System.out.println("b[" + i + "]: " + b[i]); - } - b = new int[5]; - for(int i = 0; i < 5; i++){ - b[i] = i; - System.out.println("b[" + i + "]: " + b[i]); - } - } - public static void main(String[] args) { - int[] y = new int [5]; - - for(int i = 0; i < 5; i++){ - y[i] = i; - System.out.println("y[" + i + "]: " + y[i]); - } - passangemDeArray(y); - for(int i = 0; i < 5; i++){ - System.out.println("y[" + i + "]: " + y[i]); - } - } -} - +/** + * Ponteiro + * @author Max do Val Machado + * @version 2 01/2015 + */ +class Ponteiro03PassagemArray { + public static void passangemDeArray(int[] b){ + for(int i = 0; i < 5; i++){ + b[i] *= 5; + System.out.println("b[" + i + "]: " + b[i]); + } + b = new int[5]; + for(int i = 0; i < 5; i++){ + b[i] = i; + System.out.println("b[" + i + "]: " + b[i]); + } + } + public static void main(String[] args) { + int[] y = new int [5]; + + for(int i = 0; i < 5; i++){ + y[i] = i; + System.out.println("y[" + i + "]: " + y[i]); + } + passangemDeArray(y); + for(int i = 0; i < 5; i++){ + System.out.println("y[" + i + "]: " + y[i]); + } + } +} + diff --git a/fonte/u00 Nivelamento/java/ponteiro/Ponteiro04Objeto.java b/Codigos/u00 Nivelamento/java/ponteiro/Ponteiro04Objeto.java similarity index 96% rename from fonte/u00 Nivelamento/java/ponteiro/Ponteiro04Objeto.java rename to Codigos/u00 Nivelamento/java/ponteiro/Ponteiro04Objeto.java index 71c7eb3..2989c20 100644 --- a/fonte/u00 Nivelamento/java/ponteiro/Ponteiro04Objeto.java +++ b/Codigos/u00 Nivelamento/java/ponteiro/Ponteiro04Objeto.java @@ -1,55 +1,55 @@ -/** - * Ponteiro - * @author Max do Val Machado - * @version 3 01/2016 - */ -class Cliente{ - private int codigo; - private String nome; - public Cliente(){ - this(0, ""); - } - public Cliente(int codigo){ - this(codigo, ""); - } - public Cliente(int codigo, String nome){ - this.codigo = codigo; - this.nome = nome; - } - public int getCodigo(){ - return codigo; - } - public void setCodigo(int codigo){ - this.codigo = codigo; - } - public String getNome(){ - return nome; - } - public void setNome(String nome){ - this.nome = nome; - } -} - -class Ponteiro04Objeto { - - public static void main (String[] args){ - - //Declarando tres ponteiros - Cliente c1 = null, c2 = null, c3 = null; - System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); - - //Alocando areas de memoria (ou inicializando objetos) e apontando os ponteiros para tais areas - c1 = new Cliente(1, "aa"); - c2 = c1; - c3 = new Cliente(2, "bb"); - System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); - - //Setando o codigo apontado por c1 e c2 - c2.setCodigo(3); - System.out.println("ATRIBUTOs:"); - System.out.println("c1(" + c1.getCodigo() + " / " + c1.getNome()+")"); - System.out.println("c2(" + c2.getCodigo() + " / " + c2.getNome()+")"); - System.out.println("c3(" + c3.getCodigo() + " / " + c3.getNome()+")"); - - } -} +/** + * Ponteiro + * @author Max do Val Machado + * @version 3 01/2016 + */ +class Cliente{ + private int codigo; + private String nome; + public Cliente(){ + this(0, ""); + } + public Cliente(int codigo){ + this(codigo, ""); + } + public Cliente(int codigo, String nome){ + this.codigo = codigo; + this.nome = nome; + } + public int getCodigo(){ + return codigo; + } + public void setCodigo(int codigo){ + this.codigo = codigo; + } + public String getNome(){ + return nome; + } + public void setNome(String nome){ + this.nome = nome; + } +} + +class Ponteiro04Objeto { + + public static void main (String[] args){ + + //Declarando tres ponteiros + Cliente c1 = null, c2 = null, c3 = null; + System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); + + //Alocando areas de memoria (ou inicializando objetos) e apontando os ponteiros para tais areas + c1 = new Cliente(1, "aa"); + c2 = c1; + c3 = new Cliente(2, "bb"); + System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); + + //Setando o codigo apontado por c1 e c2 + c2.setCodigo(3); + System.out.println("ATRIBUTOs:"); + System.out.println("c1(" + c1.getCodigo() + " / " + c1.getNome()+")"); + System.out.println("c2(" + c2.getCodigo() + " / " + c2.getNome()+")"); + System.out.println("c3(" + c3.getCodigo() + " / " + c3.getNome()+")"); + + } +} diff --git a/fonte/u00 Nivelamento/java/ponteiro/Ponteiro05PassagemObjeto.java b/Codigos/u00 Nivelamento/java/ponteiro/Ponteiro05PassagemObjeto.java similarity index 97% rename from fonte/u00 Nivelamento/java/ponteiro/Ponteiro05PassagemObjeto.java rename to Codigos/u00 Nivelamento/java/ponteiro/Ponteiro05PassagemObjeto.java index 01293a0..19ff72d 100644 --- a/fonte/u00 Nivelamento/java/ponteiro/Ponteiro05PassagemObjeto.java +++ b/Codigos/u00 Nivelamento/java/ponteiro/Ponteiro05PassagemObjeto.java @@ -1,96 +1,96 @@ -/** - * Ponteiro - * @author Max do Val Machado - * @version 3 01/2016 - */ -class Cliente{ - private int codigo; - private String nome; - public Cliente(){ - this(0, ""); - } - public Cliente(int codigo){ - this(codigo, ""); - } - public Cliente(int codigo, String nome){ - this.codigo = codigo; - this.nome = nome; - } - public int getCodigo(){ - return codigo; - } - public void setCodigo(int codigo){ - this.codigo = codigo; - } - public String getNome(){ - return nome; - } - public void setNome(String nome){ - this.nome = nome; - } -} - -class Ponteiro05PassagemObjeto { - - /** - * Metodo que recebe um ponteiro contendo o endereco de um objeto. Em seguida, o metodo altera o - * conteudo do objeto apontado pelo ponteiro (o mesmo objeto apontado por c1 no metodo principal). - * Depois, o metodo retorna o conteudo do nosso ponteiro (endereco recebido como parametro). - */ - public static Cliente setar2(Cliente y){ - y.setCodigo(6); - y.setNome("ff"); - System.out.println("ADDRs: y(" + y + ")"); - System.out.println("ATRIBUTOs: y(" + y.getCodigo() + " / " + y.getNome()+")"); - - return y; - } - - /** - * Metodo que recebe um ponteiro contendo o endereco de um objeto. Em seguida, o metodo altera o - * conteudo do objeto apontado pelo ponteiro (o mesmo objeto apontado por c1 no metodo principal). - * Depois, o metodo faz com que o ponteiro corrente aponte para outro objeto (veja que c1 do metodo - * princial continua apontando para o primeiro objeto). No final, a coleta de lixo do java libera a - * area de memoria que continha o ponteiro e o objeto criados neste metodo. - */ - public static void setar1(Cliente x){ - x.setCodigo(4); - x.setNome("dd"); - System.out.println("ADDRs: x(" + x + ")"); - System.out.println("ATRIBUTOs: x(" + x.getCodigo() + " / " + x.getNome()+")"); - - x = new Cliente (5, "ee"); - System.out.println("ADDRs: x(" + x + ")"); - System.out.println("ATRIBUTOs: x(" + x.getCodigo() + " / " + x.getNome()+")"); - } - - - public static void main (String[] args){ - - //Declarando tres ponteiros - Cliente c1 = new Cliente(1, "aa"); - Cliente c2 = c1; - Cliente c3 = new Cliente(2, "bb"); - System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); - System.out.println("ATRIBUTOs:"); - System.out.println("c1(" + c1.getCodigo() + " / " + c1.getNome()+")"); - System.out.println("c2(" + c2.getCodigo() + " / " + c2.getNome()+")"); - System.out.println("c3(" + c3.getCodigo() + " / " + c3.getNome()+")"); - - //Chamando o metodo setar1 e passando POR VALOR O ADDR de c1 - setar1(c1); - System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); - System.out.println("ATRIBUTOs:"); - System.out.println("c1(" + c1.getCodigo() + " / " + c1.getNome()+")"); - System.out.println("c2(" + c2.getCodigo() + " / " + c2.getNome()+")"); - System.out.println("c3(" + c3.getCodigo() + " / " + c3.getNome()+")"); - - //Chamando o metodo setar2, passando POR VALOR O ADDR DE c2 e retornando um novo endereco para C3 - c3 = setar2(c2); - System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); - System.out.println("ATRIBUTOs:"); - System.out.println("c1(" + c1.getCodigo() + " / " + c1.getNome()+")"); - System.out.println("c2(" + c2.getCodigo() + " / " + c2.getNome()+")"); - System.out.println("c3(" + c3.getCodigo() + " / " + c3.getNome()+")"); - } -} +/** + * Ponteiro + * @author Max do Val Machado + * @version 3 01/2016 + */ +class Cliente{ + private int codigo; + private String nome; + public Cliente(){ + this(0, ""); + } + public Cliente(int codigo){ + this(codigo, ""); + } + public Cliente(int codigo, String nome){ + this.codigo = codigo; + this.nome = nome; + } + public int getCodigo(){ + return codigo; + } + public void setCodigo(int codigo){ + this.codigo = codigo; + } + public String getNome(){ + return nome; + } + public void setNome(String nome){ + this.nome = nome; + } +} + +class Ponteiro05PassagemObjeto { + + /** + * Metodo que recebe um ponteiro contendo o endereco de um objeto. Em seguida, o metodo altera o + * conteudo do objeto apontado pelo ponteiro (o mesmo objeto apontado por c1 no metodo principal). + * Depois, o metodo retorna o conteudo do nosso ponteiro (endereco recebido como parametro). + */ + public static Cliente setar2(Cliente y){ + y.setCodigo(6); + y.setNome("ff"); + System.out.println("ADDRs: y(" + y + ")"); + System.out.println("ATRIBUTOs: y(" + y.getCodigo() + " / " + y.getNome()+")"); + + return y; + } + + /** + * Metodo que recebe um ponteiro contendo o endereco de um objeto. Em seguida, o metodo altera o + * conteudo do objeto apontado pelo ponteiro (o mesmo objeto apontado por c1 no metodo principal). + * Depois, o metodo faz com que o ponteiro corrente aponte para outro objeto (veja que c1 do metodo + * princial continua apontando para o primeiro objeto). No final, a coleta de lixo do java libera a + * area de memoria que continha o ponteiro e o objeto criados neste metodo. + */ + public static void setar1(Cliente x){ + x.setCodigo(4); + x.setNome("dd"); + System.out.println("ADDRs: x(" + x + ")"); + System.out.println("ATRIBUTOs: x(" + x.getCodigo() + " / " + x.getNome()+")"); + + x = new Cliente (5, "ee"); + System.out.println("ADDRs: x(" + x + ")"); + System.out.println("ATRIBUTOs: x(" + x.getCodigo() + " / " + x.getNome()+")"); + } + + + public static void main (String[] args){ + + //Declarando tres ponteiros + Cliente c1 = new Cliente(1, "aa"); + Cliente c2 = c1; + Cliente c3 = new Cliente(2, "bb"); + System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); + System.out.println("ATRIBUTOs:"); + System.out.println("c1(" + c1.getCodigo() + " / " + c1.getNome()+")"); + System.out.println("c2(" + c2.getCodigo() + " / " + c2.getNome()+")"); + System.out.println("c3(" + c3.getCodigo() + " / " + c3.getNome()+")"); + + //Chamando o metodo setar1 e passando POR VALOR O ADDR de c1 + setar1(c1); + System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); + System.out.println("ATRIBUTOs:"); + System.out.println("c1(" + c1.getCodigo() + " / " + c1.getNome()+")"); + System.out.println("c2(" + c2.getCodigo() + " / " + c2.getNome()+")"); + System.out.println("c3(" + c3.getCodigo() + " / " + c3.getNome()+")"); + + //Chamando o metodo setar2, passando POR VALOR O ADDR DE c2 e retornando um novo endereco para C3 + c3 = setar2(c2); + System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); + System.out.println("ATRIBUTOs:"); + System.out.println("c1(" + c1.getCodigo() + " / " + c1.getNome()+")"); + System.out.println("c2(" + c2.getCodigo() + " / " + c2.getNome()+")"); + System.out.println("c3(" + c3.getCodigo() + " / " + c3.getNome()+")"); + } +} diff --git a/fonte/u00 Nivelamento/java/ponteiro/Ponteiro06PassagemObjetoClone.java b/Codigos/u00 Nivelamento/java/ponteiro/Ponteiro06PassagemObjetoClone.java similarity index 97% rename from fonte/u00 Nivelamento/java/ponteiro/Ponteiro06PassagemObjetoClone.java rename to Codigos/u00 Nivelamento/java/ponteiro/Ponteiro06PassagemObjetoClone.java index 630d02b..a070e0a 100644 --- a/fonte/u00 Nivelamento/java/ponteiro/Ponteiro06PassagemObjetoClone.java +++ b/Codigos/u00 Nivelamento/java/ponteiro/Ponteiro06PassagemObjetoClone.java @@ -1,99 +1,99 @@ -/** - * Ponteiro - * @author Max do Val Machado - * @version 3 01/2016 - */ -class Cliente{ - private int codigo; - private String nome; - public Cliente(){ - this(0, ""); - } - public Cliente(int codigo){ - this(codigo, ""); - } - public Cliente(int codigo, String nome){ - this.codigo = codigo; - this.nome = nome; - } - public int getCodigo(){ - return codigo; - } - public void setCodigo(int codigo){ - this.codigo = codigo; - } - public String getNome(){ - return nome; - } - public void setNome(String nome){ - this.nome = nome; - } - public Cliente clone(){ - return new Cliente(this.codigo, this.nome); - } -} - -class Ponteiro06PassagemObjetoClone { - - /** - * Metodo que recebe um ponteiro contendo o endereco de um objeto. Em seguida, o metodo altera o - * conteudo do objeto apontado pelo ponteiro (o mesmo objeto apontado por c1 no metodo principal). - * Depois, o metodo retorna o conteudo do nosso ponteiro (endereco recebido como parametro). - */ - public static Cliente setar2(Cliente y){ - y.setCodigo(6); - y.setNome("ff"); - System.out.println("ADDRs: y(" + y + ")"); - System.out.println("ATRIBUTOs: y(" + y.getCodigo() + " / " + y.getNome()+")"); - - return y; - } - - /** - * Metodo que recebe um ponteiro contendo o endereco de um objeto. Em seguida, o metodo altera o - * conteudo do objeto apontado pelo ponteiro (o mesmo objeto apontado por c1 no metodo principal). - * Depois, o metodo faz com que o ponteiro corrente aponte para outro objeto (veja que c1 do metodo - * princial continua apontando para o primeiro objeto). No final, a coleta de lixo do java libera a - * area de memoria que continha o ponteiro e o objeto criados neste metodo. - */ - public static void setar1(Cliente x){ - x.setCodigo(4); - x.setNome("dd"); - System.out.println("ADDRs: x(" + x + ")"); - System.out.println("ATRIBUTOs: x(" + x.getCodigo() + " / " + x.getNome()+")"); - - x = new Cliente (5, "ee"); - System.out.println("ADDRs: x(" + x + ")"); - System.out.println("ATRIBUTOs: x(" + x.getCodigo() + " / " + x.getNome()+")"); - } - - - public static void main (String[] args){ - - //Declarando tres ponteiros - Cliente c1 = new Cliente(1, "aa"); - Cliente c2 = c1.clone(); - Cliente c3 = new Cliente(2, "bb"); - System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); - System.out.println("ATRIBUTOs:"); - System.out.println("c1(" + c1.getCodigo() + " / " + c1.getNome()+")"); - System.out.println("c2(" + c2.getCodigo() + " / " + c2.getNome()+")"); - System.out.println("c3(" + c3.getCodigo() + " / " + c3.getNome()+")"); - - //Chamando o metodo setar1 e passando POR VALOR O ADDR de c1 - setar1(c1); - System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); - System.out.println("ATRIBUTOs:"); - System.out.println("c1(" + c1.getCodigo() + " / " + c1.getNome()+")"); - System.out.println("c2(" + c2.getCodigo() + " / " + c2.getNome()+")"); - System.out.println("c3(" + c3.getCodigo() + " / " + c3.getNome()+")"); - - //Chamando o metodo setar2, passando POR VALOR O ADDR DE c2 e retornando um novo endereco para C3 - c3 = setar2(c2); - System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); - System.out.println("ATRIBUTOs:"); - System.out.println("c1(" + c1.getCodigo() + " / " + c1.getNome()+")"); - System.out.println("c2(" + c2.getCodigo() + " / " + c2.getNome()+")"); - System.out.println("c3(" + c3.getCodigo() + " / " + c3.getNome()+")"); - } -} +/** + * Ponteiro + * @author Max do Val Machado + * @version 3 01/2016 + */ +class Cliente{ + private int codigo; + private String nome; + public Cliente(){ + this(0, ""); + } + public Cliente(int codigo){ + this(codigo, ""); + } + public Cliente(int codigo, String nome){ + this.codigo = codigo; + this.nome = nome; + } + public int getCodigo(){ + return codigo; + } + public void setCodigo(int codigo){ + this.codigo = codigo; + } + public String getNome(){ + return nome; + } + public void setNome(String nome){ + this.nome = nome; + } + public Cliente clone(){ + return new Cliente(this.codigo, this.nome); + } +} + +class Ponteiro06PassagemObjetoClone { + + /** + * Metodo que recebe um ponteiro contendo o endereco de um objeto. Em seguida, o metodo altera o + * conteudo do objeto apontado pelo ponteiro (o mesmo objeto apontado por c1 no metodo principal). + * Depois, o metodo retorna o conteudo do nosso ponteiro (endereco recebido como parametro). + */ + public static Cliente setar2(Cliente y){ + y.setCodigo(6); + y.setNome("ff"); + System.out.println("ADDRs: y(" + y + ")"); + System.out.println("ATRIBUTOs: y(" + y.getCodigo() + " / " + y.getNome()+")"); + + return y; + } + + /** + * Metodo que recebe um ponteiro contendo o endereco de um objeto. Em seguida, o metodo altera o + * conteudo do objeto apontado pelo ponteiro (o mesmo objeto apontado por c1 no metodo principal). + * Depois, o metodo faz com que o ponteiro corrente aponte para outro objeto (veja que c1 do metodo + * princial continua apontando para o primeiro objeto). No final, a coleta de lixo do java libera a + * area de memoria que continha o ponteiro e o objeto criados neste metodo. + */ + public static void setar1(Cliente x){ + x.setCodigo(4); + x.setNome("dd"); + System.out.println("ADDRs: x(" + x + ")"); + System.out.println("ATRIBUTOs: x(" + x.getCodigo() + " / " + x.getNome()+")"); + + x = new Cliente (5, "ee"); + System.out.println("ADDRs: x(" + x + ")"); + System.out.println("ATRIBUTOs: x(" + x.getCodigo() + " / " + x.getNome()+")"); + } + + + public static void main (String[] args){ + + //Declarando tres ponteiros + Cliente c1 = new Cliente(1, "aa"); + Cliente c2 = c1.clone(); + Cliente c3 = new Cliente(2, "bb"); + System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); + System.out.println("ATRIBUTOs:"); + System.out.println("c1(" + c1.getCodigo() + " / " + c1.getNome()+")"); + System.out.println("c2(" + c2.getCodigo() + " / " + c2.getNome()+")"); + System.out.println("c3(" + c3.getCodigo() + " / " + c3.getNome()+")"); + + //Chamando o metodo setar1 e passando POR VALOR O ADDR de c1 + setar1(c1); + System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); + System.out.println("ATRIBUTOs:"); + System.out.println("c1(" + c1.getCodigo() + " / " + c1.getNome()+")"); + System.out.println("c2(" + c2.getCodigo() + " / " + c2.getNome()+")"); + System.out.println("c3(" + c3.getCodigo() + " / " + c3.getNome()+")"); + + //Chamando o metodo setar2, passando POR VALOR O ADDR DE c2 e retornando um novo endereco para C3 + c3 = setar2(c2); + System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); + System.out.println("ATRIBUTOs:"); + System.out.println("c1(" + c1.getCodigo() + " / " + c1.getNome()+")"); + System.out.println("c2(" + c2.getCodigo() + " / " + c2.getNome()+")"); + System.out.println("c3(" + c3.getCodigo() + " / " + c3.getNome()+")"); + } +} diff --git a/fonte/u00 Nivelamento/java/ponteiro/Ponteiro07ObjetoClone.java b/Codigos/u00 Nivelamento/java/ponteiro/Ponteiro07ObjetoClone.java similarity index 96% rename from fonte/u00 Nivelamento/java/ponteiro/Ponteiro07ObjetoClone.java rename to Codigos/u00 Nivelamento/java/ponteiro/Ponteiro07ObjetoClone.java index e0ec6ba..2f668c8 100644 --- a/fonte/u00 Nivelamento/java/ponteiro/Ponteiro07ObjetoClone.java +++ b/Codigos/u00 Nivelamento/java/ponteiro/Ponteiro07ObjetoClone.java @@ -1,58 +1,58 @@ -/** - * Ponteiro - * @author Max do Val Machado - * @version 3 01/2016 - */ -class Cliente{ - private int codigo; - private String nome; - public Cliente(){ - this(0, ""); - } - public Cliente(int codigo){ - this(codigo, ""); - } - public Cliente(int codigo, String nome){ - this.codigo = codigo; - this.nome = nome; - } - public int getCodigo(){ - return codigo; - } - public void setCodigo(int codigo){ - this.codigo = codigo; - } - public String getNome(){ - return nome; - } - public void setNome(String nome){ - this.nome = nome; - } - public Cliente clone(){ - return new Cliente(this.codigo, this.nome); - } -} - -class Ponteiro07ObjetoClone { - - public static void main (String[] args){ - - //Declarando tres ponteiros - Cliente c1 = null, c2 = null, c3 = null; - System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); - - //Alocando areas de memoria (ou inicializando objetos) e apontando os ponteiros para tais areas - c1 = new Cliente(1, "aa"); - c2 = c1; - c3 = new Cliente(2, "bb"); - System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); - - //Setando o codigo apontado por c1 e c2 - c2.setCodigo(3); - System.out.println("ATRIBUTOs:"); - System.out.println("c1(" + c1.getCodigo() + " / " + c1.getNome()+")"); - System.out.println("c2(" + c2.getCodigo() + " / " + c2.getNome()+")"); - System.out.println("c3(" + c3.getCodigo() + " / " + c3.getNome()+")"); - - } -} +/** + * Ponteiro + * @author Max do Val Machado + * @version 3 01/2016 + */ +class Cliente{ + private int codigo; + private String nome; + public Cliente(){ + this(0, ""); + } + public Cliente(int codigo){ + this(codigo, ""); + } + public Cliente(int codigo, String nome){ + this.codigo = codigo; + this.nome = nome; + } + public int getCodigo(){ + return codigo; + } + public void setCodigo(int codigo){ + this.codigo = codigo; + } + public String getNome(){ + return nome; + } + public void setNome(String nome){ + this.nome = nome; + } + public Cliente clone(){ + return new Cliente(this.codigo, this.nome); + } +} + +class Ponteiro07ObjetoClone { + + public static void main (String[] args){ + + //Declarando tres ponteiros + Cliente c1 = null, c2 = null, c3 = null; + System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); + + //Alocando areas de memoria (ou inicializando objetos) e apontando os ponteiros para tais areas + c1 = new Cliente(1, "aa"); + c2 = c1; + c3 = new Cliente(2, "bb"); + System.out.println("ADDRs: c1(" + c1 + ")\tc2(" + c2 + ")\tc3(" + c3 + ")"); + + //Setando o codigo apontado por c1 e c2 + c2.setCodigo(3); + System.out.println("ATRIBUTOs:"); + System.out.println("c1(" + c1.getCodigo() + " / " + c1.getNome()+")"); + System.out.println("c2(" + c2.getCodigo() + " / " + c2.getNome()+")"); + System.out.println("c3(" + c3.getCodigo() + " / " + c3.getNome()+")"); + + } +} diff --git a/fonte/u00 Nivelamento/java/ponteiro/Ponteiro08Objeto.java b/Codigos/u00 Nivelamento/java/ponteiro/Ponteiro08Objeto.java similarity index 100% rename from fonte/u00 Nivelamento/java/ponteiro/Ponteiro08Objeto.java rename to Codigos/u00 Nivelamento/java/ponteiro/Ponteiro08Objeto.java diff --git a/fonte/u00 Nivelamento/java/recursividade/ChamandoMetodo.java b/Codigos/u00 Nivelamento/java/recursividade/ChamandoMetodo.java similarity index 96% rename from fonte/u00 Nivelamento/java/recursividade/ChamandoMetodo.java rename to Codigos/u00 Nivelamento/java/recursividade/ChamandoMetodo.java index 5ca38c0..266ba68 100644 --- a/fonte/u00 Nivelamento/java/recursividade/ChamandoMetodo.java +++ b/Codigos/u00 Nivelamento/java/recursividade/ChamandoMetodo.java @@ -1,20 +1,20 @@ -class ChamandoMetodo { - public static void primeiro(){ - System.out.println("1o - inicio"); - segundo(); - System.out.println("1o - fim"); - } - public static void segundo(){ - System.out.println("2o - inicio"); - terceiro(); - System.out.println("2o - fim"); - } - public static void terceiro(){ - System.out.println("3o - inicio e fim"); - } - public static void main (String[] args){ - System.out.println("main - inicio"); - primeiro(); - System.out.println("main - fim"); - } -} +class ChamandoMetodo { + public static void primeiro(){ + System.out.println("1o - inicio"); + segundo(); + System.out.println("1o - fim"); + } + public static void segundo(){ + System.out.println("2o - inicio"); + terceiro(); + System.out.println("2o - fim"); + } + public static void terceiro(){ + System.out.println("3o - inicio e fim"); + } + public static void main (String[] args){ + System.out.println("main - inicio"); + primeiro(); + System.out.println("main - fim"); + } +} diff --git a/fonte/u00 Nivelamento/java/recursividade/ContarMaiuscula.java b/Codigos/u00 Nivelamento/java/recursividade/ContarMaiuscula.java similarity index 96% rename from fonte/u00 Nivelamento/java/recursividade/ContarMaiuscula.java rename to Codigos/u00 Nivelamento/java/recursividade/ContarMaiuscula.java index 44baec1..df268db 100644 --- a/fonte/u00 Nivelamento/java/recursividade/ContarMaiuscula.java +++ b/Codigos/u00 Nivelamento/java/recursividade/ContarMaiuscula.java @@ -1,40 +1,40 @@ -/** - * Recursividade - * @author Max do Val Machado - * @version 2 01/2015 - */ -class ContarMaiuscula { - public static boolean isUpper(char x){ - return (x >= 'A' && x <= 'Z'); - } - - public static int contMaiusculo(String s){ - int cont = 0; - - for(int i = 0; i < s.length(); i++){ - if(isUpper(s.charAt(i)) == true){ - cont++; - } - } - return cont; - } - public static int contMaiusculo2(String s){ - return contMaiusculo2(s, 0); - } - public static int contMaiusculo2(String s, int i){ - int cont = 0; - - if(i < s.length()){ - if(isUpper(s.charAt(i)) == true){ - cont++; - } - cont += contMaiusculo2(s, i + 1); - } - return cont; - } - - public static void main (String[] args){ - System.out.println("AlGoritmos e Estruturas de Dados: " + contMaiusculo("AlGoritmos e Estruturas de Dados")); - System.out.println("AlGoritmos e Estruturas de Dados: " + contMaiusculo2("AlGoritmos e Estruturas de Dados")); - } -} +/** + * Recursividade + * @author Max do Val Machado + * @version 2 01/2015 + */ +class ContarMaiuscula { + public static boolean isUpper(char x){ + return (x >= 'A' && x <= 'Z'); + } + + public static int contMaiusculo(String s){ + int cont = 0; + + for(int i = 0; i < s.length(); i++){ + if(isUpper(s.charAt(i)) == true){ + cont++; + } + } + return cont; + } + public static int contMaiusculo2(String s){ + return contMaiusculo2(s, 0); + } + public static int contMaiusculo2(String s, int i){ + int cont = 0; + + if(i < s.length()){ + if(isUpper(s.charAt(i)) == true){ + cont++; + } + cont += contMaiusculo2(s, i + 1); + } + return cont; + } + + public static void main (String[] args){ + System.out.println("AlGoritmos e Estruturas de Dados: " + contMaiusculo("AlGoritmos e Estruturas de Dados")); + System.out.println("AlGoritmos e Estruturas de Dados: " + contMaiusculo2("AlGoritmos e Estruturas de Dados")); + } +} diff --git a/fonte/u00 Nivelamento/java/recursividade/FatorialRecursivo.java b/Codigos/u00 Nivelamento/java/recursividade/FatorialRecursivo.java similarity index 96% rename from fonte/u00 Nivelamento/java/recursividade/FatorialRecursivo.java rename to Codigos/u00 Nivelamento/java/recursividade/FatorialRecursivo.java index 5fc700b..03361f2 100644 --- a/fonte/u00 Nivelamento/java/recursividade/FatorialRecursivo.java +++ b/Codigos/u00 Nivelamento/java/recursividade/FatorialRecursivo.java @@ -1,20 +1,20 @@ -/** - * Recursividade - * @author Max do Val Machado - * @version 2 01/2015 - */ -class FatorialRecursivo{ - public static int fatorial(int n){ - int resp; - System.out.println("fat (" + n + ")"); - resp = (n == 1) ? 1 : n * fatorial(n-1); - System.out.println("fat n(" + n + "): " + resp); - return resp; - } - - public static void main(String[] args){ - int n = Integer.parseInt(args[0]); - System.out.println("FATORIAL RECURSIVO(" + n + "): " + fatorial(n)); - } -} - +/** + * Recursividade + * @author Max do Val Machado + * @version 2 01/2015 + */ +class FatorialRecursivo{ + public static int fatorial(int n){ + int resp; + System.out.println("fat (" + n + ")"); + resp = (n == 1) ? 1 : n * fatorial(n-1); + System.out.println("fat n(" + n + "): " + resp); + return resp; + } + + public static void main(String[] args){ + int n = Integer.parseInt(args[0]); + System.out.println("FATORIAL RECURSIVO(" + n + "): " + fatorial(n)); + } +} + diff --git a/fonte/u00 Nivelamento/java/recursividade/FibonacciRecursivo.java b/Codigos/u00 Nivelamento/java/recursividade/FibonacciRecursivo.java similarity index 96% rename from fonte/u00 Nivelamento/java/recursividade/FibonacciRecursivo.java rename to Codigos/u00 Nivelamento/java/recursividade/FibonacciRecursivo.java index 24bdf0d..54a9e74 100644 --- a/fonte/u00 Nivelamento/java/recursividade/FibonacciRecursivo.java +++ b/Codigos/u00 Nivelamento/java/recursividade/FibonacciRecursivo.java @@ -1,18 +1,18 @@ -/** - * Recursividade - * @author Max do Val Machado - * @version 2 01/2015 - */ -class FibonacciRecursivo { - public static int fibRec (int n){ - int resp; - System.out.println("fib (" + n + ")"); - resp = (n == 0 || n == 1) ? 1 : fibRec(n-1) + fibRec(n-2); - System.out.println("fib (" + n + "): " + resp); - return resp; - } - public static void main (String[] args){ - int n = Integer.parseInt(args[0]); - System.out.println("FIBONACCI RECURSIVO(" + n + "): " + fibRec(n)); - } -} +/** + * Recursividade + * @author Max do Val Machado + * @version 2 01/2015 + */ +class FibonacciRecursivo { + public static int fibRec (int n){ + int resp; + System.out.println("fib (" + n + ")"); + resp = (n == 0 || n == 1) ? 1 : fibRec(n-1) + fibRec(n-2); + System.out.println("fib (" + n + "): " + resp); + return resp; + } + public static void main (String[] args){ + int n = Integer.parseInt(args[0]); + System.out.println("FIBONACCI RECURSIVO(" + n + "): " + fibRec(n)); + } +} diff --git a/fonte/u00 Nivelamento/java/recursividade/Multiplicacao.java b/Codigos/u00 Nivelamento/java/recursividade/Multiplicacao.java similarity index 95% rename from fonte/u00 Nivelamento/java/recursividade/Multiplicacao.java rename to Codigos/u00 Nivelamento/java/recursividade/Multiplicacao.java index a4eb52b..1e8b339 100644 --- a/fonte/u00 Nivelamento/java/recursividade/Multiplicacao.java +++ b/Codigos/u00 Nivelamento/java/recursividade/Multiplicacao.java @@ -1,31 +1,31 @@ -class Multiplicacao { - public static int multiplicacao(int a, int b){ - return multiplicacao(a, b, 0); - } - - public static int multiplicacao(int a, int b, int i){ - int resp = 0; - - if(i < b){ - resp = a + multiplicacao(a, b, i+1); - } - - return resp; - } - - public static int multiplicacaoInt(int a, int b){ - int resp = 0; - for(int i = 0; i < b; i++){ - resp = a + resp; - } - return resp; - } - - public static void main (String[] args){ - int mult = multiplicacaoInt(4, 3); - System.out.println("RESPOSTA INT: " + mult); - - mult = multiplicacao(4, 3); - System.out.println("RESPOSTA REC: " + mult); - } -} +class Multiplicacao { + public static int multiplicacao(int a, int b){ + return multiplicacao(a, b, 0); + } + + public static int multiplicacao(int a, int b, int i){ + int resp = 0; + + if(i < b){ + resp = a + multiplicacao(a, b, i+1); + } + + return resp; + } + + public static int multiplicacaoInt(int a, int b){ + int resp = 0; + for(int i = 0; i < b; i++){ + resp = a + resp; + } + return resp; + } + + public static void main (String[] args){ + int mult = multiplicacaoInt(4, 3); + System.out.println("RESPOSTA INT: " + mult); + + mult = multiplicacao(4, 3); + System.out.println("RESPOSTA REC: " + mult); + } +} diff --git a/fonte/u00 Nivelamento/java/recursividade/PrintRecursivo.java b/Codigos/u00 Nivelamento/java/recursividade/PrintRecursivo.java similarity index 95% rename from fonte/u00 Nivelamento/java/recursividade/PrintRecursivo.java rename to Codigos/u00 Nivelamento/java/recursividade/PrintRecursivo.java index 4d74b84..fe93fcd 100644 --- a/fonte/u00 Nivelamento/java/recursividade/PrintRecursivo.java +++ b/Codigos/u00 Nivelamento/java/recursividade/PrintRecursivo.java @@ -1,18 +1,18 @@ -/** - * Recursividade - * @author Max do Val Machado - * @version 2 01/2015 - */ -class PrintRecursivo{ - public static void printRecursivo(int i){ - System.out.println("valor de i: " + i); - if(i > 0){ - printRecursivo(i-1); - } - System.out.println("valor de i: " + i); - } - public static void main(String[] args){ - int n = Integer.parseInt(args[0]); - printRecursivo(n); - } -} +/** + * Recursividade + * @author Max do Val Machado + * @version 2 01/2015 + */ +class PrintRecursivo{ + public static void printRecursivo(int i){ + System.out.println("valor de i: " + i); + if(i > 0){ + printRecursivo(i-1); + } + System.out.println("valor de i: " + i); + } + public static void main(String[] args){ + int n = Integer.parseInt(args[0]); + printRecursivo(n); + } +} diff --git a/fonte/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao01.java b/Codigos/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao01.java similarity index 96% rename from fonte/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao01.java rename to Codigos/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao01.java index 230ef1e..300b29c 100644 --- a/fonte/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao01.java +++ b/Codigos/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao01.java @@ -1,12 +1,12 @@ -/** - * Tratamento de excecao - * @author Max do Val Machado - * @version 2 01/2015 - */ -public class TratamentoExcecao01 { - public static void main(String[] args) { - Integer i = new Integer(args[0]); - MyIO.println("A variavel i vale " + i); - MyIO.println("FIM DE PROGRAMA!!!"); - } -} +/** + * Tratamento de excecao + * @author Max do Val Machado + * @version 2 01/2015 + */ +public class TratamentoExcecao01 { + public static void main(String[] args) { + Integer i = new Integer(args[0]); + MyIO.println("A variavel i vale " + i); + MyIO.println("FIM DE PROGRAMA!!!"); + } +} diff --git a/fonte/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao02.java b/Codigos/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao02.java similarity index 96% rename from fonte/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao02.java rename to Codigos/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao02.java index 031883d..9712c33 100644 --- a/fonte/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao02.java +++ b/Codigos/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao02.java @@ -1,19 +1,19 @@ -/** - * Tratamento de excecao - * @author Max do Val Machado - * @version 2 01/2015 - */ -public class TratamentoExcecao02 { - public static void main(String[] args) { - try { - Integer i = new Integer(args[0]); - MyIO.println("A variavel i vale " + i); - - } catch (ArrayIndexOutOfBoundsException e){ - MyIO.println("Erro na passagem de parametros!!!"); - - } finally { - MyIO.println("FIM DE PROGRAMA!!!"); - } - } -} +/** + * Tratamento de excecao + * @author Max do Val Machado + * @version 2 01/2015 + */ +public class TratamentoExcecao02 { + public static void main(String[] args) { + try { + Integer i = new Integer(args[0]); + MyIO.println("A variavel i vale " + i); + + } catch (ArrayIndexOutOfBoundsException e){ + MyIO.println("Erro na passagem de parametros!!!"); + + } finally { + MyIO.println("FIM DE PROGRAMA!!!"); + } + } +} diff --git a/fonte/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao03.java b/Codigos/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao03.java similarity index 96% rename from fonte/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao03.java rename to Codigos/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao03.java index 8aba90c..aec366e 100644 --- a/fonte/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao03.java +++ b/Codigos/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao03.java @@ -1,22 +1,22 @@ -/** - * Tratamento de excecao - * @author Max do Val Machado - * @version 2 01/2015 - */ -public class TratamentoExcecao03 { - public static void main(String[] args) { - try { - Integer i = new Integer(args[0]); - MyIO.println("A variavel i vale " + i); - - } catch (NumberFormatException e) { - MyIO.println("Erro de formatacao!!!"); - - } catch (ArrayIndexOutOfBoundsException e){ - MyIO.println("Erro na passagem de parametros!!!"); - - } finally { - MyIO.println("FIM DE PROGRAMA!!!"); - } - } -} +/** + * Tratamento de excecao + * @author Max do Val Machado + * @version 2 01/2015 + */ +public class TratamentoExcecao03 { + public static void main(String[] args) { + try { + Integer i = new Integer(args[0]); + MyIO.println("A variavel i vale " + i); + + } catch (NumberFormatException e) { + MyIO.println("Erro de formatacao!!!"); + + } catch (ArrayIndexOutOfBoundsException e){ + MyIO.println("Erro na passagem de parametros!!!"); + + } finally { + MyIO.println("FIM DE PROGRAMA!!!"); + } + } +} diff --git a/fonte/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao04.java b/Codigos/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao04.java similarity index 96% rename from fonte/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao04.java rename to Codigos/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao04.java index 1819109..3b99bb2 100644 --- a/fonte/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao04.java +++ b/Codigos/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao04.java @@ -1,37 +1,37 @@ -/** - * Tratamento de excecao - * @author Max do Val Machado - * @version 2 01/2015 - */ -public class TratamentoExcecao04 { - public static void metodo1(String s) throws NumberFormatException, ArrayIndexOutOfBoundsException { - Integer i = new Integer(s); - MyIO.println("A variavel i vale " + i); - } - - public static void metodo2(String s) throws NumberFormatException { - Integer i = new Integer(s); - MyIO.println("A variavel i vale " + i); - } - - public static void main(String[] args) { - try { - metodo1(args[0]); - } catch (NumberFormatException e) { - MyIO.println("Erro!!!"); - - } catch (ArrayIndexOutOfBoundsException e){ - MyIO.println("Erro!!!"); - } - - MyIO.println("-------------->>>>>>>> <<<<<<<<--------------"); - - try { - metodo2(args[0]); - } catch (NumberFormatException e) { - MyIO.println("Erro!!!"); - } - - MyIO.println("-------------->>>>>>>> <<<<<<<<--------------"); - } -} +/** + * Tratamento de excecao + * @author Max do Val Machado + * @version 2 01/2015 + */ +public class TratamentoExcecao04 { + public static void metodo1(String s) throws NumberFormatException, ArrayIndexOutOfBoundsException { + Integer i = new Integer(s); + MyIO.println("A variavel i vale " + i); + } + + public static void metodo2(String s) throws NumberFormatException { + Integer i = new Integer(s); + MyIO.println("A variavel i vale " + i); + } + + public static void main(String[] args) { + try { + metodo1(args[0]); + } catch (NumberFormatException e) { + MyIO.println("Erro!!!"); + + } catch (ArrayIndexOutOfBoundsException e){ + MyIO.println("Erro!!!"); + } + + MyIO.println("-------------->>>>>>>> <<<<<<<<--------------"); + + try { + metodo2(args[0]); + } catch (NumberFormatException e) { + MyIO.println("Erro!!!"); + } + + MyIO.println("-------------->>>>>>>> <<<<<<<<--------------"); + } +} diff --git a/fonte/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao05.java b/Codigos/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao05.java similarity index 96% rename from fonte/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao05.java rename to Codigos/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao05.java index 7d102bb..9070d5d 100644 --- a/fonte/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao05.java +++ b/Codigos/u00 Nivelamento/java/tratamentoExcecao/TratamentoExcecao05.java @@ -1,22 +1,22 @@ -/** - * Tratamento de excecao - * @author Max do Val Machado - * @version 2 01/2015 - */ -public class TratamentoExcecao05 { - public static void metodo(int i) throws Exception { - if(i % 2 == 1){ - throw new Exception ("Valor impar"); - } - } - - public static void main(String[] args) throws Exception { - - int i = 2; - MyIO.println("-------------->>>>>>>> <<<<<<<<--------------"); - metodo(i); - MyIO.println("-------------->>>>>>>> <<<<<<<<--------------"); - metodo(++i); - MyIO.println("-------------->>>>>>>> <<<<<<<<--------------"); - } -} +/** + * Tratamento de excecao + * @author Max do Val Machado + * @version 2 01/2015 + */ +public class TratamentoExcecao05 { + public static void metodo(int i) throws Exception { + if(i % 2 == 1){ + throw new Exception ("Valor impar"); + } + } + + public static void main(String[] args) throws Exception { + + int i = 2; + MyIO.println("-------------->>>>>>>> <<<<<<<<--------------"); + metodo(i); + MyIO.println("-------------->>>>>>>> <<<<<<<<--------------"); + metodo(++i); + MyIO.println("-------------->>>>>>>> <<<<<<<<--------------"); + } +} diff --git a/fonte/u01 Fundamentos de análise de algoritmos/README.md b/Codigos/u01 Fundamentos de análise de algoritmos/README.md similarity index 97% rename from fonte/u01 Fundamentos de análise de algoritmos/README.md rename to Codigos/u01 Fundamentos de análise de algoritmos/README.md index e1aa42c..e0ca21c 100644 --- a/fonte/u01 Fundamentos de análise de algoritmos/README.md +++ b/Codigos/u01 Fundamentos de análise de algoritmos/README.md @@ -1,2 +1,2 @@ -# U1 - Introdução -Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II +# U1 - Introdução +Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II diff --git a/fonte/u01 Fundamentos de análise de algoritmos/java/AND_OR.java b/Codigos/u01 Fundamentos de análise de algoritmos/java/AND_OR.java similarity index 96% rename from fonte/u01 Fundamentos de análise de algoritmos/java/AND_OR.java rename to Codigos/u01 Fundamentos de análise de algoritmos/java/AND_OR.java index bfd339a..4543931 100644 --- a/fonte/u01 Fundamentos de análise de algoritmos/java/AND_OR.java +++ b/Codigos/u01 Fundamentos de análise de algoritmos/java/AND_OR.java @@ -1,19 +1,19 @@ -class AND_OR { - public static boolean m1(){ - System.out.println("m1"); - return true; - } - public static boolean m2(){ - System.out.println("m2"); - return false; - } - public static void main (String[] args) { - System.out.println("====================="); - boolean or = m1() || m2(); - System.out.println("OR: " + or); - System.out.println("====================="); - boolean and = m2() && m1(); - System.out.println("AND: " + and); - System.out.println("====================="); - } -} +class AND_OR { + public static boolean m1(){ + System.out.println("m1"); + return true; + } + public static boolean m2(){ + System.out.println("m2"); + return false; + } + public static void main (String[] args) { + System.out.println("====================="); + boolean or = m1() || m2(); + System.out.println("OR: " + or); + System.out.println("====================="); + boolean and = m2() && m1(); + System.out.println("AND: " + and); + System.out.println("====================="); + } +} diff --git a/fonte/u01 Fundamentos de análise de algoritmos/java/Log.java b/Codigos/u01 Fundamentos de análise de algoritmos/java/Log.java similarity index 96% rename from fonte/u01 Fundamentos de análise de algoritmos/java/Log.java rename to Codigos/u01 Fundamentos de análise de algoritmos/java/Log.java index 22aaae6..839ea75 100644 --- a/fonte/u01 Fundamentos de análise de algoritmos/java/Log.java +++ b/Codigos/u01 Fundamentos de análise de algoritmos/java/Log.java @@ -1,17 +1,17 @@ -class Log { - public static void main (String[] args) { - int[] n = {4,5,6,7,8,9,10,11,12,13,14,15,16,17,31,32,33,63,64,65}; - int cont; - - for(int k = 0; k < n.length; k++){ - System.out.print("\n[n = " + n[k] + "] => "); - cont = 0; - for(int i = n[k]; i > 0; i /= 2){ - System.out.print(" " + i); - cont++; - } - System.out.print(" (" + cont + " vezes)"); - } - System.out.print("\n"); - } -} +class Log { + public static void main (String[] args) { + int[] n = {4,5,6,7,8,9,10,11,12,13,14,15,16,17,31,32,33,63,64,65}; + int cont; + + for(int k = 0; k < n.length; k++){ + System.out.print("\n[n = " + n[k] + "] => "); + cont = 0; + for(int i = n[k]; i > 0; i /= 2){ + System.out.print(" " + i); + cont++; + } + System.out.print(" (" + cont + " vezes)"); + } + System.out.print("\n"); + } +} diff --git a/fonte/u01 Fundamentos de análise de algoritmos/java/Pesquisa.java b/Codigos/u01 Fundamentos de análise de algoritmos/java/Pesquisa.java similarity index 96% rename from fonte/u01 Fundamentos de análise de algoritmos/java/Pesquisa.java rename to Codigos/u01 Fundamentos de análise de algoritmos/java/Pesquisa.java index e4f8077..e6e5170 100644 --- a/fonte/u01 Fundamentos de análise de algoritmos/java/Pesquisa.java +++ b/Codigos/u01 Fundamentos de análise de algoritmos/java/Pesquisa.java @@ -1,61 +1,61 @@ -class Pesquisa { - public static boolean pesqSeq(int[] vet, int x){ - boolean resp = false; - int n = vet.length; - - for(int i = 0; i < n; i++){ - if(vet[i] == x){ - resp = true; - i = n; - } - } - return resp; - } - - public static boolean pesqBin(int[] vet, int x){ - boolean resp = false; - int dir = (vet.length - 1), esq = 0, meio; - - while (esq <= dir){ - meio = (esq + dir) / 2; - if(x == vet[meio]){ - resp = true; - esq = dir + 1; - } else if (x > vet[meio]) { - esq = meio + 1; - } else { - dir = meio - 1; - } - } - return resp; - } - - public static boolean pesqBinRec(int[] vet, int x){ - return pesqBinRec(vet, x, 0, (vet.length - 1)); - } - - public static boolean pesqBinRec(int[] vet, int x, int esq, int dir){ - boolean resp; - int meio = (esq + dir) / 2; - - if(esq > dir) { - resp = false; - } else if(x == vet[meio]){ - resp = true; - } else if (x > vet[meio]) { - resp = pesqBinRec(vet, x, meio + 1, dir); - } else { - resp = pesqBinRec(vet, x, esq, meio - 1); - } - return resp; - } - - public static void main (String[] args){ - int[] vet = {2, 3, 5, 7, 9, 11, 15, 17, 20, 21, 30, 43, 49, 70, 71, 82}; - int x = 35; - - System.out.println("Pesquisa Sequencial: " + pesqSeq(vet, x)); - System.out.println("Pesquisa Binária: " + pesqBin(vet, x)); - System.out.println("Pesquisa Binária Recursiva: " + pesqBinRec(vet, x)); - } -} +class Pesquisa { + public static boolean pesqSeq(int[] vet, int x){ + boolean resp = false; + int n = vet.length; + + for(int i = 0; i < n; i++){ + if(vet[i] == x){ + resp = true; + i = n; + } + } + return resp; + } + + public static boolean pesqBin(int[] vet, int x){ + boolean resp = false; + int dir = (vet.length - 1), esq = 0, meio; + + while (esq <= dir){ + meio = (esq + dir) / 2; + if(x == vet[meio]){ + resp = true; + esq = dir + 1; + } else if (x > vet[meio]) { + esq = meio + 1; + } else { + dir = meio - 1; + } + } + return resp; + } + + public static boolean pesqBinRec(int[] vet, int x){ + return pesqBinRec(vet, x, 0, (vet.length - 1)); + } + + public static boolean pesqBinRec(int[] vet, int x, int esq, int dir){ + boolean resp; + int meio = (esq + dir) / 2; + + if(esq > dir) { + resp = false; + } else if(x == vet[meio]){ + resp = true; + } else if (x > vet[meio]) { + resp = pesqBinRec(vet, x, meio + 1, dir); + } else { + resp = pesqBinRec(vet, x, esq, meio - 1); + } + return resp; + } + + public static void main (String[] args){ + int[] vet = {2, 3, 5, 7, 9, 11, 15, 17, 20, 21, 30, 43, 49, 70, 71, 82}; + int x = 35; + + System.out.println("Pesquisa Sequencial: " + pesqSeq(vet, x)); + System.out.println("Pesquisa Binária: " + pesqBin(vet, x)); + System.out.println("Pesquisa Binária Recursiva: " + pesqBinRec(vet, x)); + } +} diff --git a/fonte/u02 Estruturas de dados basicas lineares/README.md b/Codigos/u02 Estruturas de dados basicas lineares/README.md similarity index 97% rename from fonte/u02 Estruturas de dados basicas lineares/README.md rename to Codigos/u02 Estruturas de dados basicas lineares/README.md index 8a9c59c..04c9141 100644 --- a/fonte/u02 Estruturas de dados basicas lineares/README.md +++ b/Codigos/u02 Estruturas de dados basicas lineares/README.md @@ -1,2 +1,2 @@ -# AEDII -Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II +# AEDII +Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II diff --git a/fonte/u02 Estruturas de dados basicas lineares/c/fila.c b/Codigos/u02 Estruturas de dados basicas lineares/c/fila.c similarity index 94% rename from fonte/u02 Estruturas de dados basicas lineares/c/fila.c rename to Codigos/u02 Estruturas de dados basicas lineares/c/fila.c index 44b3f52..c079400 100644 --- a/fonte/u02 Estruturas de dados basicas lineares/c/fila.c +++ b/Codigos/u02 Estruturas de dados basicas lineares/c/fila.c @@ -1,144 +1,144 @@ -/** - * Lista estatica - * @author Max do Val Machado - * @version 2 01/2015 - */ -#include -#include - -#define MAXTAM 6 -#define bool short -#define true 1 -#define false 0 - -int array[MAXTAM+1]; // Elementos da pilha -int primeiro; // Remove do indice "primeiro". -int ultimo; // Insere no indice "ultimo". - - -/** - * Inicializacoes - */ -void start(){ - primeiro = ultimo = 0; -} - - -/** - * Insere um elemento na ultima posicao da - * @param x int elemento a ser inserido. - * @Se a fila estiver cheia. - */ -void inserir(int x) { - - //validar insercao - if (((ultimo + 1) % MAXTAM) == primeiro) { - printf("Erro ao inserir!"); - exit(1); - } - - array[ultimo] = x; - ultimo = (ultimo + 1) % MAXTAM; -} - - -/** - * Remove um elemento da primeira posicao da fila e movimenta - * os demais elementos para o primeiro da mesma. - * @return resp int elemento a ser removido. - * @Se a fila estiver vazia. - */ -int remover() { - - //validar remocao - if (primeiro == ultimo) { - printf("Erro ao remover!"); - exit(1); - } - - int resp = array[primeiro]; - primeiro = (primeiro + 1) % MAXTAM; - return resp; -} - - -/** - * Mostra os array separados por espacos. - */ -void mostrar (){ - int i; - printf("\n["); - - for(i = primeiro; i != ultimo; i = ((i + 1) % MAXTAM)) { - printf(" %d", array[i]); - } - - printf(" ]"); -} - - -/** - * Retorna um bool indicando se a fila esta vazia - * @return bool indicando se a fila esta vazia - */ -bool isVazia() { - return (primeiro == ultimo); -} - - -int main(int argc, char** argv){ - int x1, x2, x3; - printf("\n==== FILA ESTATICA ===="); - start(); - - inserir(5); - inserir(7); - inserir(8); - inserir(9); - - printf("\nApos insercoes(5, 7, 8, 9): "); - mostrar(); - - x1 = remover(); - x2 = remover(); - - printf("\nApos remocoes (%d, %d):", x1, x2); - mostrar(); - - inserir(3); - inserir(4); - - - printf("\nApos insercoes(3, 4): "); - mostrar(); - - x1 = remover(); - x2 = remover(); - x3 = remover(); - - printf("\nApos remocoes (%d, %d, %d):", x1, x2, x3); - mostrar(); - - inserir(4); - inserir(5); - - printf("\nApos insercoes(4, 5): "); - mostrar(); - - x1 = remover(); - x2 = remover(); - - printf("\nApos remocoes (%d, %d):", x1, x2); - mostrar(); - - inserir(6); - inserir(7); - - printf("\nApos insercoes(6, 7): "); - mostrar(); - - x1 = remover(); - - printf("\nApos remocao (%d):", x1); - mostrar(); -} +/** + * Lista estatica + * @author Max do Val Machado + * @version 2 01/2015 + */ +#include +#include + +#define MAXTAM 6 +#define bool short +#define true 1 +#define false 0 + +int array[MAXTAM+1]; // Elementos da pilha +int primeiro; // Remove do indice "primeiro". +int ultimo; // Insere no indice "ultimo". + + +/** + * Inicializacoes + */ +void start(){ + primeiro = ultimo = 0; +} + + +/** + * Insere um elemento na ultima posicao da + * @param x int elemento a ser inserido. + * @Se a fila estiver cheia. + */ +void inserir(int x) { + + //validar insercao + if (((ultimo + 1) % MAXTAM) == primeiro) { + printf("Erro ao inserir!"); + exit(1); + } + + array[ultimo] = x; + ultimo = (ultimo + 1) % MAXTAM; +} + + +/** + * Remove um elemento da primeira posicao da fila e movimenta + * os demais elementos para o primeiro da mesma. + * @return resp int elemento a ser removido. + * @Se a fila estiver vazia. + */ +int remover() { + + //validar remocao + if (primeiro == ultimo) { + printf("Erro ao remover!"); + exit(1); + } + + int resp = array[primeiro]; + primeiro = (primeiro + 1) % MAXTAM; + return resp; +} + + +/** + * Mostra os array separados por espacos. + */ +void mostrar (){ + int i; + printf("\n["); + + for(i = primeiro; i != ultimo; i = ((i + 1) % MAXTAM)) { + printf(" %d", array[i]); + } + + printf(" ]"); +} + + +/** + * Retorna um bool indicando se a fila esta vazia + * @return bool indicando se a fila esta vazia + */ +bool isVazia() { + return (primeiro == ultimo); +} + + +int main(int argc, char** argv){ + int x1, x2, x3; + printf("\n==== FILA ESTATICA ===="); + start(); + + inserir(5); + inserir(7); + inserir(8); + inserir(9); + + printf("\nApos insercoes(5, 7, 8, 9): "); + mostrar(); + + x1 = remover(); + x2 = remover(); + + printf("\nApos remocoes (%d, %d):", x1, x2); + mostrar(); + + inserir(3); + inserir(4); + + + printf("\nApos insercoes(3, 4): "); + mostrar(); + + x1 = remover(); + x2 = remover(); + x3 = remover(); + + printf("\nApos remocoes (%d, %d, %d):", x1, x2, x3); + mostrar(); + + inserir(4); + inserir(5); + + printf("\nApos insercoes(4, 5): "); + mostrar(); + + x1 = remover(); + x2 = remover(); + + printf("\nApos remocoes (%d, %d):", x1, x2); + mostrar(); + + inserir(6); + inserir(7); + + printf("\nApos insercoes(6, 7): "); + mostrar(); + + x1 = remover(); + + printf("\nApos remocao (%d):", x1); + mostrar(); +} diff --git a/fonte/u02 Estruturas de dados basicas lineares/c/lista.c b/Codigos/u02 Estruturas de dados basicas lineares/c/lista.c similarity index 94% rename from fonte/u02 Estruturas de dados basicas lineares/c/lista.c rename to Codigos/u02 Estruturas de dados basicas lineares/c/lista.c index 3f0a6e9..fa56475 100644 --- a/fonte/u02 Estruturas de dados basicas lineares/c/lista.c +++ b/Codigos/u02 Estruturas de dados basicas lineares/c/lista.c @@ -1,215 +1,215 @@ -/** - * Lista estatica - * @author Max do Val Machado - * @version 2 01/2015 - */ -#include -#include - -#define MAXTAM 6 -#define bool short -#define true 1 -#define false 0 - -int array[MAXTAM]; // Elementos da pilha -int n; // Quantidade de array. - - -/** - * Inicializacoes - */ -void start(){ - n = 0; -} - - -/** - * Insere um elemento na primeira posicao da lista e move os demais - * elementos para o fim da - * @param x int elemento a ser inserido. - */ -void inserirInicio(int x) { - int i; - - //validar insercao - if(n >= MAXTAM){ - printf("Erro ao inserir!"); - exit(1); - } - - //levar elementos para o fim do array - for(i = n; i > 0; i--){ - array[i] = array[i-1]; - } - - array[0] = x; - n++; -} - - -/** - * Insere um elemento na ultima posicao da - * @param x int elemento a ser inserido. - */ -void inserirFim(int x) { - - //validar insercao - if(n >= MAXTAM){ - printf("Erro ao inserir!"); - exit(1); - } - - array[n] = x; - n++; -} - - -/** - * Insere um elemento em uma posicao especifica e move os demais - * elementos para o fim da - * @param x int elemento a ser inserido. - * @param pos Posicao de insercao. - */ -void inserir(int x, int pos) { - int i; - - //validar insercao - if(n >= MAXTAM || pos < 0 || pos > n){ - printf("Erro ao inserir!"); - exit(1); - } - - //levar elementos para o fim do array - for(i = n; i > pos; i--){ - array[i] = array[i-1]; - } - - array[pos] = x; - n++; -} - - -/** - * Remove um elemento da primeira posicao da lista e movimenta - * os demais elementos para o inicio da mesma. - * @return resp int elemento a ser removido. - */ -int removerInicio() { - int i, resp; - - //validar remocao - if (n == 0) { - printf("Erro ao remover!"); - exit(1); - } - - resp = array[0]; - n--; - - for(i = 0; i < n; i++){ - array[i] = array[i+1]; - } - - return resp; -} - - -/** - * Remove um elemento da ultima posicao da - * @return resp int elemento a ser removido. - */ -int removerFim() { - - //validar remocao - if (n == 0) { - printf("Erro ao remover!"); - exit(1); - } - - return array[--n]; -} - - -/** - * Remove um elemento de uma posicao especifica da lista e - * movimenta os demais elementos para o inicio da mesma. - * @param pos Posicao de remocao. - * @return resp int elemento a ser removido. - */ -int remover(int pos) { - int i, resp; - - //validar remocao - if (n == 0 || pos < 0 || pos >= n) { - printf("Erro ao remover!"); - exit(1); - } - - resp = array[pos]; - n--; - - for(i = pos; i < n; i++){ - array[i] = array[i+1]; - } - - return resp; -} - - -/** - * Mostra os array separados por espacos. - */ -void mostrar (){ - int i; - - printf("[ "); - - for(i = 0; i < n; i++){ - printf("%d ", array[i]); - } - - printf("]\n"); -} - - -/** - * Procura um array e retorna se ele existe. - * @param x int elemento a ser pesquisado. - * @return true se o array existir, - * false em caso contrario. - */ -bool pesquisar(int x) { - bool retorno = false; - int i; - - for (i = 0; i < n && retorno == false; i++) { - retorno = (array[i] == x); - } - return retorno; -} - - -int main(int argc, char** argv){ - int x1, x2, x3; - - printf("==== LISTA ESTATICA ====\n"); - - start(); - - inserirInicio(1); - inserirInicio(0); - inserirFim(2); - inserirFim(3); - inserir(4, 3); - inserir(5, 2); - - printf("Apos insercoes: "); - mostrar(); - - x1 = removerInicio(); - x2 = removerFim(); - x3 = remover(2); - - printf("Apos remocoes (%d, %d, %d): ", x1, x2, x3); - mostrar(); -} +/** + * Lista estatica + * @author Max do Val Machado + * @version 2 01/2015 + */ +#include +#include + +#define MAXTAM 6 +#define bool short +#define true 1 +#define false 0 + +int array[MAXTAM]; // Elementos da pilha +int n; // Quantidade de array. + + +/** + * Inicializacoes + */ +void start(){ + n = 0; +} + + +/** + * Insere um elemento na primeira posicao da lista e move os demais + * elementos para o fim da + * @param x int elemento a ser inserido. + */ +void inserirInicio(int x) { + int i; + + //validar insercao + if(n >= MAXTAM){ + printf("Erro ao inserir!"); + exit(1); + } + + //levar elementos para o fim do array + for(i = n; i > 0; i--){ + array[i] = array[i-1]; + } + + array[0] = x; + n++; +} + + +/** + * Insere um elemento na ultima posicao da + * @param x int elemento a ser inserido. + */ +void inserirFim(int x) { + + //validar insercao + if(n >= MAXTAM){ + printf("Erro ao inserir!"); + exit(1); + } + + array[n] = x; + n++; +} + + +/** + * Insere um elemento em uma posicao especifica e move os demais + * elementos para o fim da + * @param x int elemento a ser inserido. + * @param pos Posicao de insercao. + */ +void inserir(int x, int pos) { + int i; + + //validar insercao + if(n >= MAXTAM || pos < 0 || pos > n){ + printf("Erro ao inserir!"); + exit(1); + } + + //levar elementos para o fim do array + for(i = n; i > pos; i--){ + array[i] = array[i-1]; + } + + array[pos] = x; + n++; +} + + +/** + * Remove um elemento da primeira posicao da lista e movimenta + * os demais elementos para o inicio da mesma. + * @return resp int elemento a ser removido. + */ +int removerInicio() { + int i, resp; + + //validar remocao + if (n == 0) { + printf("Erro ao remover!"); + exit(1); + } + + resp = array[0]; + n--; + + for(i = 0; i < n; i++){ + array[i] = array[i+1]; + } + + return resp; +} + + +/** + * Remove um elemento da ultima posicao da + * @return resp int elemento a ser removido. + */ +int removerFim() { + + //validar remocao + if (n == 0) { + printf("Erro ao remover!"); + exit(1); + } + + return array[--n]; +} + + +/** + * Remove um elemento de uma posicao especifica da lista e + * movimenta os demais elementos para o inicio da mesma. + * @param pos Posicao de remocao. + * @return resp int elemento a ser removido. + */ +int remover(int pos) { + int i, resp; + + //validar remocao + if (n == 0 || pos < 0 || pos >= n) { + printf("Erro ao remover!"); + exit(1); + } + + resp = array[pos]; + n--; + + for(i = pos; i < n; i++){ + array[i] = array[i+1]; + } + + return resp; +} + + +/** + * Mostra os array separados por espacos. + */ +void mostrar (){ + int i; + + printf("[ "); + + for(i = 0; i < n; i++){ + printf("%d ", array[i]); + } + + printf("]\n"); +} + + +/** + * Procura um array e retorna se ele existe. + * @param x int elemento a ser pesquisado. + * @return true se o array existir, + * false em caso contrario. + */ +bool pesquisar(int x) { + bool retorno = false; + int i; + + for (i = 0; i < n && retorno == false; i++) { + retorno = (array[i] == x); + } + return retorno; +} + + +int main(int argc, char** argv){ + int x1, x2, x3; + + printf("==== LISTA ESTATICA ====\n"); + + start(); + + inserirInicio(1); + inserirInicio(0); + inserirFim(2); + inserirFim(3); + inserir(4, 3); + inserir(5, 2); + + printf("Apos insercoes: "); + mostrar(); + + x1 = removerInicio(); + x2 = removerFim(); + x3 = remover(2); + + printf("Apos remocoes (%d, %d, %d): ", x1, x2, x3); + mostrar(); +} diff --git a/fonte/u02 Estruturas de dados basicas lineares/java/Fila.java b/Codigos/u02 Estruturas de dados basicas lineares/java/Fila.java similarity index 95% rename from fonte/u02 Estruturas de dados basicas lineares/java/Fila.java rename to Codigos/u02 Estruturas de dados basicas lineares/java/Fila.java index 1cde69f..d7009ba 100644 --- a/fonte/u02 Estruturas de dados basicas lineares/java/Fila.java +++ b/Codigos/u02 Estruturas de dados basicas lineares/java/Fila.java @@ -1,100 +1,100 @@ -/** - * Fila estatica - * @author Max do Val Machado - * @version 2 01/2015 - */ -class Fila { - private int[] array; - private int primeiro; // Remove do indice "primeiro". - private int ultimo; // Insere no indice "ultimo". - - - /** - * Construtor da classe. - */ - public Fila () { - this(6); - } - - - /** - * Construtor da classe. - * @param tamanho Tamanho da fila. - */ - public Fila (int tamanho){ - array = new int[tamanho+1]; - primeiro = ultimo = 0; - } - - - /** - * Insere um elemento na ultima posicao da fila. - * @param x int elemento a ser inserido. - * @throws Exception Se a fila estiver cheia. - */ - public void inserir(int x) throws Exception { - - //validar insercao - if (((ultimo + 1) % array.length) == primeiro) { - throw new Exception("Erro ao inserir!"); - } - - array[ultimo] = x; - ultimo = (ultimo + 1) % array.length; - } - - - /** - * Remove um elemento da primeira posicao da fila e movimenta - * os demais elementos para o primeiro da mesma. - * @return resp int elemento a ser removido. - * @throws Exception Se a fila estiver vazia. - */ - public int remover() throws Exception { - - //validar remocao - if (primeiro == ultimo) { - throw new Exception("Erro ao remover!"); - } - - int resp = array[primeiro]; - primeiro = (primeiro + 1) % array.length; - return resp; - } - - - /** - * Mostra os array separados por espacos. - */ - public void mostrar (){ - System.out.print("[ "); - - for(int i = primeiro; i != ultimo; i = ((i + 1) % array.length)) { - System.out.print(array[i] + " "); - } - - System.out.println("]"); - } - - public void mostrarRec(){ - System.out.print("[ "); - mostrarRec(primeiro); - System.out.println("]"); - } - - public void mostrarRec(int i){ - if(i != ultimo){ - System.out.print(array[i] + " "); - mostrarRec((i + 1) % array.length); - } - } - - - /** - * Retorna um boolean indicando se a fila esta vazia - * @return boolean indicando se a fila esta vazia - */ - public boolean isVazia() { - return (primeiro == ultimo); - } -} +/** + * Fila estatica + * @author Max do Val Machado + * @version 2 01/2015 + */ +class Fila { + private int[] array; + private int primeiro; // Remove do indice "primeiro". + private int ultimo; // Insere no indice "ultimo". + + + /** + * Construtor da classe. + */ + public Fila () { + this(6); + } + + + /** + * Construtor da classe. + * @param tamanho Tamanho da fila. + */ + public Fila (int tamanho){ + array = new int[tamanho+1]; + primeiro = ultimo = 0; + } + + + /** + * Insere um elemento na ultima posicao da fila. + * @param x int elemento a ser inserido. + * @throws Exception Se a fila estiver cheia. + */ + public void inserir(int x) throws Exception { + + //validar insercao + if (((ultimo + 1) % array.length) == primeiro) { + throw new Exception("Erro ao inserir!"); + } + + array[ultimo] = x; + ultimo = (ultimo + 1) % array.length; + } + + + /** + * Remove um elemento da primeira posicao da fila e movimenta + * os demais elementos para o primeiro da mesma. + * @return resp int elemento a ser removido. + * @throws Exception Se a fila estiver vazia. + */ + public int remover() throws Exception { + + //validar remocao + if (primeiro == ultimo) { + throw new Exception("Erro ao remover!"); + } + + int resp = array[primeiro]; + primeiro = (primeiro + 1) % array.length; + return resp; + } + + + /** + * Mostra os array separados por espacos. + */ + public void mostrar (){ + System.out.print("[ "); + + for(int i = primeiro; i != ultimo; i = ((i + 1) % array.length)) { + System.out.print(array[i] + " "); + } + + System.out.println("]"); + } + + public void mostrarRec(){ + System.out.print("[ "); + mostrarRec(primeiro); + System.out.println("]"); + } + + public void mostrarRec(int i){ + if(i != ultimo){ + System.out.print(array[i] + " "); + mostrarRec((i + 1) % array.length); + } + } + + + /** + * Retorna um boolean indicando se a fila esta vazia + * @return boolean indicando se a fila esta vazia + */ + public boolean isVazia() { + return (primeiro == ultimo); + } +} diff --git a/fonte/u02 Estruturas de dados basicas lineares/java/Fila2Pilha.java b/Codigos/u02 Estruturas de dados basicas lineares/java/Fila2Pilha.java similarity index 94% rename from fonte/u02 Estruturas de dados basicas lineares/java/Fila2Pilha.java rename to Codigos/u02 Estruturas de dados basicas lineares/java/Fila2Pilha.java index 40980df..035bc9c 100644 --- a/fonte/u02 Estruturas de dados basicas lineares/java/Fila2Pilha.java +++ b/Codigos/u02 Estruturas de dados basicas lineares/java/Fila2Pilha.java @@ -1,56 +1,56 @@ -/** - * Fila 2 Pilha - * @author Felipe Cunha - * @version 1 1/2017 - */ - - public class Fila2Pilha{ - - private Fila f1, f2; - - public Fila2Pilha(){ - f1 = new Fila(6); - f2 = new Fila(6); - } - - public Fila2Pilha(int tamanho){ - f1 = new Fila (tamanho); - f2 = new Fila (tamanho); - } - - public void empilhar(int elemento) throws Exception { - while(!f1.isVazia()){ - f2.inserir(f1.remover()); - } - - f1.inserir(elemento); - - while(!f2.isVazia()){ - f1.inserir(f2.remover()); - } - } - - public int desempilhar() throws Exception { - return f1.remover(); - } - - public void mostrar(){ - f1.mostrar(); - } - - public boolean isVazia(){ - return f1.isVazia(); - } - - public static void main(String []args) throws Exception{ - Fila2Pilha p1 = new Fila2Pilha(); - - p1.empilhar(10); - p1.empilhar(11); - p1.empilhar(15); - p1.empilhar(20); - - p1.mostrar(); - - } - } +/** + * Fila 2 Pilha + * @author Felipe Cunha + * @version 1 1/2017 + */ + + public class Fila2Pilha{ + + private Fila f1, f2; + + public Fila2Pilha(){ + f1 = new Fila(6); + f2 = new Fila(6); + } + + public Fila2Pilha(int tamanho){ + f1 = new Fila (tamanho); + f2 = new Fila (tamanho); + } + + public void empilhar(int elemento) throws Exception { + while(!f1.isVazia()){ + f2.inserir(f1.remover()); + } + + f1.inserir(elemento); + + while(!f2.isVazia()){ + f1.inserir(f2.remover()); + } + } + + public int desempilhar() throws Exception { + return f1.remover(); + } + + public void mostrar(){ + f1.mostrar(); + } + + public boolean isVazia(){ + return f1.isVazia(); + } + + public static void main(String []args) throws Exception{ + Fila2Pilha p1 = new Fila2Pilha(); + + p1.empilhar(10); + p1.empilhar(11); + p1.empilhar(15); + p1.empilhar(20); + + p1.mostrar(); + + } + } diff --git a/fonte/u02 Estruturas de dados basicas lineares/java/Lista.java b/Codigos/u02 Estruturas de dados basicas lineares/java/Lista.java similarity index 95% rename from fonte/u02 Estruturas de dados basicas lineares/java/Lista.java rename to Codigos/u02 Estruturas de dados basicas lineares/java/Lista.java index 113228a..60eeb77 100644 --- a/fonte/u02 Estruturas de dados basicas lineares/java/Lista.java +++ b/Codigos/u02 Estruturas de dados basicas lineares/java/Lista.java @@ -1,183 +1,183 @@ -/** - * Lista estatica - * @author Max do Val Machado - * @version 2 01/2015 - */ -class Lista { - private int[] array; - private int n; - - - /** - * Construtor da classe. - */ - public Lista () { - this(6); - } - - - /** - * Construtor da classe. - * @param tamanho Tamanho da lista. - */ - public Lista (int tamanho){ - array = new int[tamanho]; - n = 0; - } - - - /** - * Insere um elemento na primeira posicao da lista e move os demais - * elementos para o fim da lista. - * @param x int elemento a ser inserido. - * @throws Exception Se a lista estiver cheia. - */ - public void inserirInicio(int x) throws Exception { - - //validar insercao - if(n >= array.length){ - throw new Exception("Erro ao inserir!"); - } - - //levar elementos para o fim do array - for(int i = n; i > 0; i--){ - array[i] = array[i-1]; - } - - array[0] = x; - n++; - } - - - /** - * Insere um elemento na ultima posicao da lista. - * @param x int elemento a ser inserido. - * @throws Exception Se a lista estiver cheia. - */ - public void inserirFim(int x) throws Exception { - - //validar insercao - if(n >= array.length){ - throw new Exception("Erro ao inserir!"); - } - - array[n] = x; - n++; - } - - - /** - * Insere um elemento em uma posicao especifica e move os demais - * elementos para o fim da lista. - * @param x int elemento a ser inserido. - * @param pos Posicao de insercao. - * @throws Exception Se a lista estiver cheia ou a posicao invalida. - */ - public void inserir(int x, int pos) throws Exception { - - //validar insercao - if(n >= array.length || pos < 0 || pos > n){ - throw new Exception("Erro ao inserir!"); - } - - //levar elementos para o fim do array - for(int i = n; i > pos; i--){ - array[i] = array[i-1]; - } - - array[pos] = x; - n++; - } - - - /** - * Remove um elemento da primeira posicao da lista e movimenta - * os demais elementos para o inicio da mesma. - * @return resp int elemento a ser removido. - * @throws Exception Se a lista estiver vazia. - */ - public int removerInicio() throws Exception { - - //validar remocao - if (n == 0) { - throw new Exception("Erro ao remover!"); - } - - int resp = array[0]; - n--; - - for(int i = 0; i < n; i++){ - array[i] = array[i+1]; - } - - return resp; - } - - - /** - * Remove um elemento da ultima posicao da lista. - * @return resp int elemento a ser removido. - * @throws Exception Se a lista estiver vazia. - */ - public int removerFim() throws Exception { - - //validar remocao - if (n == 0) { - throw new Exception("Erro ao remover!"); - } - - return array[--n]; - } - - - /** - * Remove um elemento de uma posicao especifica da lista e - * movimenta os demais elementos para o inicio da mesma. - * @param pos Posicao de remocao. - * @return resp int elemento a ser removido. - * @throws Exception Se a lista estiver vazia ou a posicao for invalida. - */ - public int remover(int pos) throws Exception { - - //validar remocao - if (n == 0 || pos < 0 || pos >= n) { - throw new Exception("Erro ao remover!"); - } - - int resp = array[pos]; - n--; - - for(int i = pos; i < n; i++){ - array[i] = array[i+1]; - } - - return resp; - } - - - /** - * Mostra os elementos da lista separados por espacos. - */ - public void mostrar (){ - System.out.print("[ "); - for(int i = 0; i < n; i++){ - System.out.print(array[i] + " "); - } - System.out.println("]"); - } - - - /** - * Procura um elemento e retorna se ele existe. - * @param x int elemento a ser pesquisado. - * @return true se o array existir, - * false em caso contrario. - */ - public boolean pesquisar(int x) { - boolean retorno = false; - for (int i = 0; i < n && retorno == false; i++) { - retorno = (array[i] == x); - } - return retorno; - } -} +/** + * Lista estatica + * @author Max do Val Machado + * @version 2 01/2015 + */ +class Lista { + private int[] array; + private int n; + + + /** + * Construtor da classe. + */ + public Lista () { + this(6); + } + + + /** + * Construtor da classe. + * @param tamanho Tamanho da lista. + */ + public Lista (int tamanho){ + array = new int[tamanho]; + n = 0; + } + + + /** + * Insere um elemento na primeira posicao da lista e move os demais + * elementos para o fim da lista. + * @param x int elemento a ser inserido. + * @throws Exception Se a lista estiver cheia. + */ + public void inserirInicio(int x) throws Exception { + + //validar insercao + if(n >= array.length){ + throw new Exception("Erro ao inserir!"); + } + + //levar elementos para o fim do array + for(int i = n; i > 0; i--){ + array[i] = array[i-1]; + } + + array[0] = x; + n++; + } + + + /** + * Insere um elemento na ultima posicao da lista. + * @param x int elemento a ser inserido. + * @throws Exception Se a lista estiver cheia. + */ + public void inserirFim(int x) throws Exception { + + //validar insercao + if(n >= array.length){ + throw new Exception("Erro ao inserir!"); + } + + array[n] = x; + n++; + } + + + /** + * Insere um elemento em uma posicao especifica e move os demais + * elementos para o fim da lista. + * @param x int elemento a ser inserido. + * @param pos Posicao de insercao. + * @throws Exception Se a lista estiver cheia ou a posicao invalida. + */ + public void inserir(int x, int pos) throws Exception { + + //validar insercao + if(n >= array.length || pos < 0 || pos > n){ + throw new Exception("Erro ao inserir!"); + } + + //levar elementos para o fim do array + for(int i = n; i > pos; i--){ + array[i] = array[i-1]; + } + + array[pos] = x; + n++; + } + + + /** + * Remove um elemento da primeira posicao da lista e movimenta + * os demais elementos para o inicio da mesma. + * @return resp int elemento a ser removido. + * @throws Exception Se a lista estiver vazia. + */ + public int removerInicio() throws Exception { + + //validar remocao + if (n == 0) { + throw new Exception("Erro ao remover!"); + } + + int resp = array[0]; + n--; + + for(int i = 0; i < n; i++){ + array[i] = array[i+1]; + } + + return resp; + } + + + /** + * Remove um elemento da ultima posicao da lista. + * @return resp int elemento a ser removido. + * @throws Exception Se a lista estiver vazia. + */ + public int removerFim() throws Exception { + + //validar remocao + if (n == 0) { + throw new Exception("Erro ao remover!"); + } + + return array[--n]; + } + + + /** + * Remove um elemento de uma posicao especifica da lista e + * movimenta os demais elementos para o inicio da mesma. + * @param pos Posicao de remocao. + * @return resp int elemento a ser removido. + * @throws Exception Se a lista estiver vazia ou a posicao for invalida. + */ + public int remover(int pos) throws Exception { + + //validar remocao + if (n == 0 || pos < 0 || pos >= n) { + throw new Exception("Erro ao remover!"); + } + + int resp = array[pos]; + n--; + + for(int i = pos; i < n; i++){ + array[i] = array[i+1]; + } + + return resp; + } + + + /** + * Mostra os elementos da lista separados por espacos. + */ + public void mostrar (){ + System.out.print("[ "); + for(int i = 0; i < n; i++){ + System.out.print(array[i] + " "); + } + System.out.println("]"); + } + + + /** + * Procura um elemento e retorna se ele existe. + * @param x int elemento a ser pesquisado. + * @return true se o array existir, + * false em caso contrario. + */ + public boolean pesquisar(int x) { + boolean retorno = false; + for (int i = 0; i < n && retorno == false; i++) { + retorno = (array[i] == x); + } + return retorno; + } +} diff --git a/fonte/u02 Estruturas de dados basicas lineares/java/ListaOrdenada.java b/Codigos/u02 Estruturas de dados basicas lineares/java/ListaOrdenada.java similarity index 95% rename from fonte/u02 Estruturas de dados basicas lineares/java/ListaOrdenada.java rename to Codigos/u02 Estruturas de dados basicas lineares/java/ListaOrdenada.java index 141e9c6..a60186c 100644 --- a/fonte/u02 Estruturas de dados basicas lineares/java/ListaOrdenada.java +++ b/Codigos/u02 Estruturas de dados basicas lineares/java/ListaOrdenada.java @@ -1,156 +1,156 @@ -/** - * Lista estatica - * @author Max do Val Machado - * @version 2 01/2015 - */ -class ListaOrdenada { - private int[] array; - private int n; - - - /** - * Construtor da classe. - */ - public ListaOrdenada () { - this(6); - } - - - /** - * Construtor da classe. - * @param tamanho Tamanho da lista. - */ - public ListaOrdenada (int tamanho){ - array = new int[tamanho]; - n = 0; - } - - - /** - * Insere um elemento - * @param x int elemento a ser inserido. - * @throws Exception Se a lista estiver cheia ou a posicao invalida. - */ - public void inserir(int x) throws Exception { - - //validar insercao - if(n >= array.length){ - throw new Exception("Erro ao inserir!"); - } - - //procurar a posicao de insercao e movimentando os demais elementos para o fim do array - int pos; - for(pos = n-1; pos >= 0 && array[pos] > x; pos--){ - array[pos+1] = array[pos]; - } - array[pos+1] = x; - n++; - } - - /** - * Retorna verdadeiro/falso indicando se o array esta ordenado - * @return boolean indicando se o array esta ordenado - */ - public boolean isOrdenado(){ - boolean resp = true; - for(int i = 1; i < n; i++){ - if(array[i] < array[i-1]){ - i = n; - resp = false; - } - } - return resp; - } - - - /** - * Remove um elemento da primeira posicao da lista e movimenta - * os demais elementos para o inicio da mesma. - * @return resp int elemento a ser removido. - * @throws Exception Se a lista estiver vazia. - */ - public int removerInicio() throws Exception { - - //validar remocao - if (n == 0) { - throw new Exception("Erro ao remover!"); - } - - int resp = array[0]; - n--; - - for(int i = 0; i < n; i++){ - array[i] = array[i+1]; - } - - return resp; - } - - - /** - * Remove um elemento da ultima posicao da lista. - * @return resp int elemento a ser removido. - * @throws Exception Se a lista estiver vazia. - */ - public int removerFim() throws Exception { - - //validar remocao - if (n == 0) { - throw new Exception("Erro ao remover!"); - } - - return array[--n]; - } - - - /** - * Remove um elemento de uma posicao especifica da lista e - * movimenta os demais elementos para o inicio da mesma. - * @param pos Posicao de remocao. - * @return resp int elemento a ser removido. - * @throws Exception Se a lista estiver vazia ou a posicao for invalida. - */ - public int remover(int pos) throws Exception { - - //validar remocao - if (n == 0 || pos < 0 || pos >= n) { - throw new Exception("Erro ao remover!"); - } - - int resp = array[pos]; - n--; - - for(int i = pos; i < n; i++){ - array[i] = array[i+1]; - } - - return resp; - } - - - /** - * Mostra os elementos da lista separados por espacos. - */ - public void mostrar (){ - System.out.print("[ "); - for(int i = 0; i < n; i++){ - System.out.print(array[i] + " "); - } - System.out.println("]"); - } - - - /** - * Procura um elemento e retorna se ele existe. - * @param x int elemento a ser pesquisado. - * @return true se o array existir, - * false em caso contrario. - */ - public boolean pesquisar(int x) { - boolean retorno = false; - for (int i = 0; i < n && retorno == false; i++) { - retorno = (array[i] == x); - } - return retorno; - } -} +/** + * Lista estatica + * @author Max do Val Machado + * @version 2 01/2015 + */ +class ListaOrdenada { + private int[] array; + private int n; + + + /** + * Construtor da classe. + */ + public ListaOrdenada () { + this(6); + } + + + /** + * Construtor da classe. + * @param tamanho Tamanho da lista. + */ + public ListaOrdenada (int tamanho){ + array = new int[tamanho]; + n = 0; + } + + + /** + * Insere um elemento + * @param x int elemento a ser inserido. + * @throws Exception Se a lista estiver cheia ou a posicao invalida. + */ + public void inserir(int x) throws Exception { + + //validar insercao + if(n >= array.length){ + throw new Exception("Erro ao inserir!"); + } + + //procurar a posicao de insercao e movimentando os demais elementos para o fim do array + int pos; + for(pos = n-1; pos >= 0 && array[pos] > x; pos--){ + array[pos+1] = array[pos]; + } + array[pos+1] = x; + n++; + } + + /** + * Retorna verdadeiro/falso indicando se o array esta ordenado + * @return boolean indicando se o array esta ordenado + */ + public boolean isOrdenado(){ + boolean resp = true; + for(int i = 1; i < n; i++){ + if(array[i] < array[i-1]){ + i = n; + resp = false; + } + } + return resp; + } + + + /** + * Remove um elemento da primeira posicao da lista e movimenta + * os demais elementos para o inicio da mesma. + * @return resp int elemento a ser removido. + * @throws Exception Se a lista estiver vazia. + */ + public int removerInicio() throws Exception { + + //validar remocao + if (n == 0) { + throw new Exception("Erro ao remover!"); + } + + int resp = array[0]; + n--; + + for(int i = 0; i < n; i++){ + array[i] = array[i+1]; + } + + return resp; + } + + + /** + * Remove um elemento da ultima posicao da lista. + * @return resp int elemento a ser removido. + * @throws Exception Se a lista estiver vazia. + */ + public int removerFim() throws Exception { + + //validar remocao + if (n == 0) { + throw new Exception("Erro ao remover!"); + } + + return array[--n]; + } + + + /** + * Remove um elemento de uma posicao especifica da lista e + * movimenta os demais elementos para o inicio da mesma. + * @param pos Posicao de remocao. + * @return resp int elemento a ser removido. + * @throws Exception Se a lista estiver vazia ou a posicao for invalida. + */ + public int remover(int pos) throws Exception { + + //validar remocao + if (n == 0 || pos < 0 || pos >= n) { + throw new Exception("Erro ao remover!"); + } + + int resp = array[pos]; + n--; + + for(int i = pos; i < n; i++){ + array[i] = array[i+1]; + } + + return resp; + } + + + /** + * Mostra os elementos da lista separados por espacos. + */ + public void mostrar (){ + System.out.print("[ "); + for(int i = 0; i < n; i++){ + System.out.print(array[i] + " "); + } + System.out.println("]"); + } + + + /** + * Procura um elemento e retorna se ele existe. + * @param x int elemento a ser pesquisado. + * @return true se o array existir, + * false em caso contrario. + */ + public boolean pesquisar(int x) { + boolean retorno = false; + for (int i = 0; i < n && retorno == false; i++) { + retorno = (array[i] == x); + } + return retorno; + } +} diff --git a/fonte/u02 Estruturas de dados basicas lineares/java/PrincipalFila.java b/Codigos/u02 Estruturas de dados basicas lineares/java/PrincipalFila.java similarity index 95% rename from fonte/u02 Estruturas de dados basicas lineares/java/PrincipalFila.java rename to Codigos/u02 Estruturas de dados basicas lineares/java/PrincipalFila.java index 0795dcb..dad9eea 100644 --- a/fonte/u02 Estruturas de dados basicas lineares/java/PrincipalFila.java +++ b/Codigos/u02 Estruturas de dados basicas lineares/java/PrincipalFila.java @@ -1,63 +1,63 @@ -/** - * Fila estatica - * @author Max do Val Machado - * @version 2 01/2015 - */ -class PrincipalFila { - public static void main(String[] args) throws Exception { - System.out.println("==== FILA ESTATICA ===="); - Fila fila = new Fila(); - int x1, x2, x3; - - fila.inserir(5); - fila.inserir(7); - fila.inserir(8); - fila.inserir(9); - - System.out.println("Apos insercoes(5, 7, 8, 9): "); - fila.mostrar(); - - x1 = fila.remover(); - x2 = fila.remover(); - - System.out.println("Apos remocoes (" + x1 + ", " + x2 + "):"); - fila.mostrar(); - - fila.inserir(3); - fila.inserir(4); - - - System.out.println("Apos insercoes(3, 4): "); - fila.mostrar(); - - x1 = fila.remover(); - x2 = fila.remover(); - x3 = fila.remover(); - - System.out.println("Apos remocoes (" + x1 + ", " + x2 + ", " + x3 + "):"); - fila.mostrar(); - - fila.inserir(4); - fila.inserir(5); - - System.out.println("Apos insercoes(4, 5): "); - fila.mostrar(); - - x1 = fila.remover(); - x2 = fila.remover(); - - System.out.println("Apos remocoes (" + x1 + ", " + x2 + "):"); - fila.mostrar(); - - fila.inserir(6); - fila.inserir(7); - - System.out.println("Apos insercoes(6, 7): "); - fila.mostrar(); - - x1 = fila.remover(); - - System.out.println("Apos remocao (" + x1 + "): "); - fila.mostrar(); - } -} +/** + * Fila estatica + * @author Max do Val Machado + * @version 2 01/2015 + */ +class PrincipalFila { + public static void main(String[] args) throws Exception { + System.out.println("==== FILA ESTATICA ===="); + Fila fila = new Fila(); + int x1, x2, x3; + + fila.inserir(5); + fila.inserir(7); + fila.inserir(8); + fila.inserir(9); + + System.out.println("Apos insercoes(5, 7, 8, 9): "); + fila.mostrar(); + + x1 = fila.remover(); + x2 = fila.remover(); + + System.out.println("Apos remocoes (" + x1 + ", " + x2 + "):"); + fila.mostrar(); + + fila.inserir(3); + fila.inserir(4); + + + System.out.println("Apos insercoes(3, 4): "); + fila.mostrar(); + + x1 = fila.remover(); + x2 = fila.remover(); + x3 = fila.remover(); + + System.out.println("Apos remocoes (" + x1 + ", " + x2 + ", " + x3 + "):"); + fila.mostrar(); + + fila.inserir(4); + fila.inserir(5); + + System.out.println("Apos insercoes(4, 5): "); + fila.mostrar(); + + x1 = fila.remover(); + x2 = fila.remover(); + + System.out.println("Apos remocoes (" + x1 + ", " + x2 + "):"); + fila.mostrar(); + + fila.inserir(6); + fila.inserir(7); + + System.out.println("Apos insercoes(6, 7): "); + fila.mostrar(); + + x1 = fila.remover(); + + System.out.println("Apos remocao (" + x1 + "): "); + fila.mostrar(); + } +} diff --git a/fonte/u02 Estruturas de dados basicas lineares/java/PrincipalLista.java b/Codigos/u02 Estruturas de dados basicas lineares/java/PrincipalLista.java similarity index 96% rename from fonte/u02 Estruturas de dados basicas lineares/java/PrincipalLista.java rename to Codigos/u02 Estruturas de dados basicas lineares/java/PrincipalLista.java index 3d5b275..ed737cb 100644 --- a/fonte/u02 Estruturas de dados basicas lineares/java/PrincipalLista.java +++ b/Codigos/u02 Estruturas de dados basicas lineares/java/PrincipalLista.java @@ -1,29 +1,29 @@ -/** - * Lista estatica - * @author Max do Val Machado - * @version 2 01/2015 - */ -class PrincipalLista { - public static void main(String[] args) throws Exception { - System.out.println("==== LISTA ESTATICA ===="); - Lista lista = new Lista(); - int x1, x2, x3; - - lista.inserirInicio(1); - lista.inserirInicio(0); - lista.inserirFim(2); - lista.inserirFim(3); - lista.inserir(4, 3); - lista.inserir(5, 2); - - System.out.print("Apos insercoes: "); - lista.mostrar(); - - x1 = lista.removerInicio(); - x2 = lista.removerFim(); - x3 = lista.remover(2); - - System.out.print("Apos remocoes (" + x1 + ", " + x2 + ", " + x3 + "):"); - lista.mostrar(); - } -} +/** + * Lista estatica + * @author Max do Val Machado + * @version 2 01/2015 + */ +class PrincipalLista { + public static void main(String[] args) throws Exception { + System.out.println("==== LISTA ESTATICA ===="); + Lista lista = new Lista(); + int x1, x2, x3; + + lista.inserirInicio(1); + lista.inserirInicio(0); + lista.inserirFim(2); + lista.inserirFim(3); + lista.inserir(4, 3); + lista.inserir(5, 2); + + System.out.print("Apos insercoes: "); + lista.mostrar(); + + x1 = lista.removerInicio(); + x2 = lista.removerFim(); + x3 = lista.remover(2); + + System.out.print("Apos remocoes (" + x1 + ", " + x2 + ", " + x3 + "):"); + lista.mostrar(); + } +} diff --git a/fonte/u02 Estruturas de dados basicas lineares/java/PrincipalListaOrdenada.java b/Codigos/u02 Estruturas de dados basicas lineares/java/PrincipalListaOrdenada.java similarity index 96% rename from fonte/u02 Estruturas de dados basicas lineares/java/PrincipalListaOrdenada.java rename to Codigos/u02 Estruturas de dados basicas lineares/java/PrincipalListaOrdenada.java index e84d999..5f8a033 100644 --- a/fonte/u02 Estruturas de dados basicas lineares/java/PrincipalListaOrdenada.java +++ b/Codigos/u02 Estruturas de dados basicas lineares/java/PrincipalListaOrdenada.java @@ -1,21 +1,21 @@ -import java.util.*; -/** - * Lista estatica - * @author Max do Val Machado - * @version 2 01/2015 - */ -class PrincipalListaOrdenada { - public static void main(String[] args) throws Exception { - Random gerador = new Random(); - System.out.println("==== LISTA ESTATICA ===="); - ListaOrdenada lista = new ListaOrdenada(1000); - - for(int i = 0; i < 1000; i++){ - lista.inserir(Math.abs(gerador.nextInt()) % 1000); - } - - System.out.print("Apos insercoes: "); - lista.mostrar(); - System.out.print("Ordenada: " + lista.isOrdenado()); - } -} +import java.util.*; +/** + * Lista estatica + * @author Max do Val Machado + * @version 2 01/2015 + */ +class PrincipalListaOrdenada { + public static void main(String[] args) throws Exception { + Random gerador = new Random(); + System.out.println("==== LISTA ESTATICA ===="); + ListaOrdenada lista = new ListaOrdenada(1000); + + for(int i = 0; i < 1000; i++){ + lista.inserir(Math.abs(gerador.nextInt()) % 1000); + } + + System.out.print("Apos insercoes: "); + lista.mostrar(); + System.out.print("Ordenada: " + lista.isOrdenado()); + } +} diff --git a/fonte/u03 Ordenação em memória principal/README.md b/Codigos/u03 Ordenação em memória principal/README.md similarity index 93% rename from fonte/u03 Ordenação em memória principal/README.md rename to Codigos/u03 Ordenação em memória principal/README.md index c7a6b21..0de7ba5 100644 --- a/fonte/u03 Ordenação em memória principal/README.md +++ b/Codigos/u03 Ordenação em memória principal/README.md @@ -1,14 +1,14 @@ -# U4 - Ordenação em memória principal - -## Exemplo de como compilar o código - -``` -gcc -I. bolha_teste.c -o bolha_teste - -``` - -## Exemplo de como executar o código - -``` -.\bolha_teste.exe 10 -``` +# U4 - Ordenação em memória principal + +## Exemplo de como compilar o código + +``` +gcc -I. bolha_teste.c -o bolha_teste + +``` + +## Exemplo de como executar o código + +``` +.\bolha_teste.exe 10 +``` diff --git a/fonte/u03 Ordenação em memória principal/c/bolha.c b/Codigos/u03 Ordenação em memória principal/c/bolha.c similarity index 81% rename from fonte/u03 Ordenação em memória principal/c/bolha.c rename to Codigos/u03 Ordenação em memória principal/c/bolha.c index 754dcaa..995a219 100644 --- a/fonte/u03 Ordenação em memória principal/c/bolha.c +++ b/Codigos/u03 Ordenação em memória principal/c/bolha.c @@ -1,14 +1,14 @@ -#include "geracao.h" -#include "bolha.h" -//============================================================================= -void bolha(int *array, int n){ - int i, j; - for (i = (n - 1); i > 0; i--) { - for (j = 0; j < i; j++) { - if (array[j] > array[j + 1]) { - swap(&array[j], &array[j + 1]); - } - } - } -} -//============================================================================= +#include "geracao.h" +#include "bolha.h" +//============================================================================= +void bolha(int *array, int n){ + int i, j; + for (i = 0; i < (n-1); i--) { + for (j = 0; j < (n-1); j++) { + if (array[j] > array[j + 1]) { + swap(&array[j], &array[j + 1]); + } + } + } +} +//============================================================================= diff --git a/fonte/u03 Ordenação em memória principal/c/bolha.h b/Codigos/u03 Ordenação em memória principal/c/bolha.h similarity index 97% rename from fonte/u03 Ordenação em memória principal/c/bolha.h rename to Codigos/u03 Ordenação em memória principal/c/bolha.h index e3eab68..0a0d246 100644 --- a/fonte/u03 Ordenação em memória principal/c/bolha.h +++ b/Codigos/u03 Ordenação em memória principal/c/bolha.h @@ -1,6 +1,6 @@ -#ifndef BOLHA_H -#define BOLHA_H -//============================================================================= -void bolha(int *array, int n); -//============================================================================= -#endif +#ifndef BOLHA_H +#define BOLHA_H +//============================================================================= +void bolha(int *array, int n); +//============================================================================= +#endif diff --git a/fonte/u03 Ordenação em memória principal/c/countingsort.c b/Codigos/u03 Ordenação em memória principal/c/countingsort.c similarity index 97% rename from fonte/u03 Ordenação em memória principal/c/countingsort.c rename to Codigos/u03 Ordenação em memória principal/c/countingsort.c index 67c8e08..561afa4 100644 --- a/fonte/u03 Ordenação em memória principal/c/countingsort.c +++ b/Codigos/u03 Ordenação em memória principal/c/countingsort.c @@ -1,36 +1,36 @@ -#include "geracao.h" -#include "countingsort.h" -//============================================================================= -int getMaior(int *array, int n) { - int maior = array[0]; - - for (int i = 0; i < n; i++) { - if(maior < array[i]){ - maior = array[i]; - } - } - return maior; -} -//============================================================================= -void countingsort(int *array, int n) { - //Array para contar o numero de ocorrencias de cada elemento - int tamCount = getMaior(array, n) + 1; - int count[tamCount]; - int ordenado[n]; - - //Inicializar cada posicao do array de contagem - for (int i = 0; i < tamCount; count[i] = 0, i++); - - //Agora, o count[i] contem o numero de elemento iguais a i - for (int i = 0; i < n; count[array[i]]++, i++); - - //Agora, o count[i] contem o numero de elemento menores ou iguais a i - for(int i = 1; i < tamCount; count[i] += count[i-1], i++); - - //Ordenando - for(int i = n-1; i >= 0; ordenado[count[array[i]]-1] = array[i], count[array[i]]--, i--); - - //Copiando para o array original - for(int i = 0; i < n; array[i] = ordenado[i], i++); -} -//============================================================================= +#include "geracao.h" +#include "countingsort.h" +//============================================================================= +int getMaior(int *array, int n) { + int maior = array[0]; + + for (int i = 0; i < n; i++) { + if(maior < array[i]){ + maior = array[i]; + } + } + return maior; +} +//============================================================================= +void countingsort(int *array, int n) { + //Array para contar o numero de ocorrencias de cada elemento + int tamCount = getMaior(array, n) + 1; + int count[tamCount]; + int ordenado[n]; + + //Inicializar cada posicao do array de contagem + for (int i = 0; i < tamCount; count[i] = 0, i++); + + //Agora, o count[i] contem o numero de elemento iguais a i + for (int i = 0; i < n; count[array[i]]++, i++); + + //Agora, o count[i] contem o numero de elemento menores ou iguais a i + for(int i = 1; i < tamCount; count[i] += count[i-1], i++); + + //Ordenando + for(int i = n-1; i >= 0; ordenado[count[array[i]]-1] = array[i], count[array[i]]--, i--); + + //Copiando para o array original + for(int i = 0; i < n; array[i] = ordenado[i], i++); +} +//============================================================================= diff --git a/fonte/u03 Ordenação em memória principal/c/countingsort.h b/Codigos/u03 Ordenação em memória principal/c/countingsort.h similarity index 97% rename from fonte/u03 Ordenação em memória principal/c/countingsort.h rename to Codigos/u03 Ordenação em memória principal/c/countingsort.h index dc2d866..8c8859a 100644 --- a/fonte/u03 Ordenação em memória principal/c/countingsort.h +++ b/Codigos/u03 Ordenação em memória principal/c/countingsort.h @@ -1,8 +1,8 @@ -#ifndef COUNTINGSORT_H -#define COUNTINGSORT_H -//============================================================================= -int getMaior(int *array, int n); -//============================================================================= -void countingsort(int *array, int n); -//============================================================================= -#endif +#ifndef COUNTINGSORT_H +#define COUNTINGSORT_H +//============================================================================= +int getMaior(int *array, int n); +//============================================================================= +void countingsort(int *array, int n); +//============================================================================= +#endif diff --git a/fonte/u03 Ordenação em memória principal/c/geracao.c b/Codigos/u03 Ordenação em memória principal/c/geracao.c similarity index 96% rename from fonte/u03 Ordenação em memória principal/c/geracao.c rename to Codigos/u03 Ordenação em memória principal/c/geracao.c index 5d682ed..3caf2d3 100644 --- a/fonte/u03 Ordenação em memória principal/c/geracao.c +++ b/Codigos/u03 Ordenação em memória principal/c/geracao.c @@ -1,70 +1,70 @@ -#include "geracao.h" -//============================================================================= -#include -#include -#include -#include -//============================================================================= -// PROCEDIMENTO PARA TROCAR DOIS ELEMENTOS DO VETOR -void swap(int *i, int *j) { - int temp = *i; - *i = *j; - *j = temp; -} -//============================================================================= -// PROCEDIMENTO PARA PREENCHER UM ARRANJO COM ELEMENTOS EM ORDEM CRESCENTE -void crescente(int *array, int n) { - for (int i = 0; i < n; i++) { - array[i] = i; - } -} -//============================================================================= -// PROCEDIMENTO PARA PREENCHER UM ARRANJO COM ELEMENTOS EM ORDEM DECRESCENTE -void decrescente(int *array, int n) { - for (int i = 0; i < n; i++) { - array[i] = n - 1 - i; - } -} -//============================================================================= -// PROCEDIMENTO PARA PREENCHER UM ARRANJO COM ELEMENTOS EM ORDEM ALEATORIA -void aleatorio(int *array, int n) { - crescente(array, n); - srand(time(NULL)); - for (int i = 0; i < n; i++) { - swap(&array[i], &array[rand() % n]); - } -} -//============================================================================= -// PROCEDIMENTO PARA PREENCHER UM ARRANJO COM ELEMENTOS DA ENTRADA PADRAO -int entradaPadrao(int *array) { - int n; - scanf("%i", &n); - array = (int*) malloc(n*sizeof(int)); - - for (int i = 0; i < n; i++) { - scanf("%i", &array[i]); - } - return n; -} -//============================================================================= -// PROCEDIMENTO PARA EXIBIR OS DADOS PRESENTES NO ARRANJO -void mostrar(int *array, int n) { - printf("[ "); - for (int i = 0; i < n; i++) { - printf("%d ", array[i]); - } - printf("] \n"); -} -//============================================================================= -// PROCEDIMENTO PARA VERIFICAR SE O ARRANJO ESTA ORDENADO -bool isOrdenado(int *array, int n){ - bool resp = true; - for(int i = 1; i < n; i++){ - if(array[i-1] > array[i]){ - i = n; - resp = false; - } - } - return resp; -} -//============================================================================= +#include "geracao.h" +//============================================================================= +#include +#include +#include +#include +//============================================================================= +// PROCEDIMENTO PARA TROCAR DOIS ELEMENTOS DO VETOR +void swap(int *i, int *j) { + int temp = *i; + *i = *j; + *j = temp; +} +//============================================================================= +// PROCEDIMENTO PARA PREENCHER UM ARRANJO COM ELEMENTOS EM ORDEM CRESCENTE +void crescente(int *array, int n) { + for (int i = 0; i < n; i++) { + array[i] = i; + } +} +//============================================================================= +// PROCEDIMENTO PARA PREENCHER UM ARRANJO COM ELEMENTOS EM ORDEM DECRESCENTE +void decrescente(int *array, int n) { + for (int i = 0; i < n; i++) { + array[i] = n - 1 - i; + } +} +//============================================================================= +// PROCEDIMENTO PARA PREENCHER UM ARRANJO COM ELEMENTOS EM ORDEM ALEATORIA +void aleatorio(int *array, int n) { + crescente(array, n); + srand(time(NULL)); + for (int i = 0; i < n; i++) { + swap(&array[i], &array[rand() % n]); + } +} +//============================================================================= +// PROCEDIMENTO PARA PREENCHER UM ARRANJO COM ELEMENTOS DA ENTRADA PADRAO +int entradaPadrao(int *array) { + int n; + scanf("%i", &n); + array = (int*) malloc(n*sizeof(int)); + + for (int i = 0; i < n; i++) { + scanf("%i", &array[i]); + } + return n; +} +//============================================================================= +// PROCEDIMENTO PARA EXIBIR OS DADOS PRESENTES NO ARRANJO +void mostrar(int *array, int n) { + printf("[ "); + for (int i = 0; i < n; i++) { + printf("%d ", array[i]); + } + printf("] \n"); +} +//============================================================================= +// PROCEDIMENTO PARA VERIFICAR SE O ARRANJO ESTA ORDENADO +bool isOrdenado(int *array, int n){ + bool resp = true; + for(int i = 1; i < n; i++){ + if(array[i-1] > array[i]){ + i = n; + resp = false; + } + } + return resp; +} +//============================================================================= diff --git a/fonte/u03 Ordenação em memória principal/c/geracao.h b/Codigos/u03 Ordenação em memória principal/c/geracao.h similarity index 98% rename from fonte/u03 Ordenação em memória principal/c/geracao.h rename to Codigos/u03 Ordenação em memória principal/c/geracao.h index 9258524..a77cfb0 100644 --- a/fonte/u03 Ordenação em memória principal/c/geracao.h +++ b/Codigos/u03 Ordenação em memória principal/c/geracao.h @@ -1,18 +1,18 @@ -#ifndef GERACAO_H -#define GERACAO_H -//============================================================================= -#include -//============================================================================= -void swap(int *i, int *j); -//============================================================================= -void crescente(int *array, int n); -//============================================================================= -void decrescente(int *array, int n); -//============================================================================= -void aleatorio(int *array, int n); -//============================================================================= -void mostrar(int *array, int n); -//============================================================================= -bool isOrdenado(int *array, int n); -//============================================================================= -#endif +#ifndef GERACAO_H +#define GERACAO_H +//============================================================================= +#include +//============================================================================= +void swap(int *i, int *j); +//============================================================================= +void crescente(int *array, int n); +//============================================================================= +void decrescente(int *array, int n); +//============================================================================= +void aleatorio(int *array, int n); +//============================================================================= +void mostrar(int *array, int n); +//============================================================================= +bool isOrdenado(int *array, int n); +//============================================================================= +#endif diff --git a/fonte/u03 Ordenação em memória principal/c/heapsort.c b/Codigos/u03 Ordenação em memória principal/c/heapsort.c similarity index 96% rename from fonte/u03 Ordenação em memória principal/c/heapsort.c rename to Codigos/u03 Ordenação em memória principal/c/heapsort.c index e6b4f87..1bb4c1b 100644 --- a/fonte/u03 Ordenação em memória principal/c/heapsort.c +++ b/Codigos/u03 Ordenação em memória principal/c/heapsort.c @@ -1,56 +1,56 @@ -#include "heapsort.h" -//============================================================================= -void construir(int *array, int tamHeap){ - for(int i = tamHeap; i > 1 && array[i] > array[i/2]; i /= 2){ - swap(array + i, array + i/2); - } -} -//============================================================================= -int getMaiorFilho(int *array, int i, int tamHeap){ - int filho; - if (2*i == tamHeap || array[2*i] > array[2*i+1]){ - filho = 2*i; - } else { - filho = 2*i + 1; - } - return filho; -} -//============================================================================= -void reconstruir(int *array, int tamHeap){ - int i = 1; - while(i <= (tamHeap/2)){ - int filho = getMaiorFilho(array, i, tamHeap); - if(array[i] < array[filho]){ - swap(array + i, array + filho); - i = filho; - }else{ - i = tamHeap; - } - } -} -//============================================================================= -void heapsort(int *array, int n) { - //Alterar o vetor ignorando a posicao zero - int arrayTmp[n+1]; - for(int i = 0; i < n; i++){ - arrayTmp[i+1] = array[i]; - } - - //Contrucao do heap - for(int tamHeap = 2; tamHeap <= n; tamHeap++){ - construir(arrayTmp, tamHeap); - } - - //Ordenacao propriamente dita - int tamHeap = n; - while(tamHeap > 1){ - swap(arrayTmp + 1, arrayTmp + tamHeap--); - reconstruir(arrayTmp, tamHeap); - } - - //Alterar o vetor para voltar a posicao zero - for(int i = 0; i < n; i++){ - array[i] = arrayTmp[i+1]; - } -} -//============================================================================= +#include "heapsort.h" +//============================================================================= +void construir(int *array, int tamHeap){ + for(int i = tamHeap; i > 1 && array[i] > array[i/2]; i /= 2){ + swap(array + i, array + i/2); + } +} +//============================================================================= +int getMaiorFilho(int *array, int i, int tamHeap){ + int filho; + if (2*i == tamHeap || array[2*i] > array[2*i+1]){ + filho = 2*i; + } else { + filho = 2*i + 1; + } + return filho; +} +//============================================================================= +void reconstruir(int *array, int tamHeap){ + int i = 1; + while(i <= (tamHeap/2)){ + int filho = getMaiorFilho(array, i, tamHeap); + if(array[i] < array[filho]){ + swap(array + i, array + filho); + i = filho; + }else{ + i = tamHeap; + } + } +} +//============================================================================= +void heapsort(int *array, int n) { + //Alterar o vetor ignorando a posicao zero + int arrayTmp[n+1]; + for(int i = 0; i < n; i++){ + arrayTmp[i+1] = array[i]; + } + + //Contrucao do heap + for(int tamHeap = 2; tamHeap <= n; tamHeap++){ + construir(arrayTmp, tamHeap); + } + + //Ordenacao propriamente dita + int tamHeap = n; + while(tamHeap > 1){ + swap(arrayTmp + 1, arrayTmp + tamHeap--); + reconstruir(arrayTmp, tamHeap); + } + + //Alterar o vetor para voltar a posicao zero + for(int i = 0; i < n; i++){ + array[i] = arrayTmp[i+1]; + } +} +//============================================================================= diff --git a/fonte/u03 Ordenação em memória principal/c/heapsort.h b/Codigos/u03 Ordenação em memória principal/c/heapsort.h similarity index 98% rename from fonte/u03 Ordenação em memória principal/c/heapsort.h rename to Codigos/u03 Ordenação em memória principal/c/heapsort.h index d9b0503..2e8012b 100644 --- a/fonte/u03 Ordenação em memória principal/c/heapsort.h +++ b/Codigos/u03 Ordenação em memória principal/c/heapsort.h @@ -1,14 +1,14 @@ -#ifndef HEAPSORT_H -#define HEAPSORT_H -//============================================================================= -#include "geracao.h" -//============================================================================= -void construir(int *array, int tamHeap); -//============================================================================= -int getMaiorFilho(int *array, int i, int tamHeap); -//============================================================================= -void reconstruir(int *array, int tamHeap); -//============================================================================= -void heapsort(int *array, int n); -//============================================================================= -#endif +#ifndef HEAPSORT_H +#define HEAPSORT_H +//============================================================================= +#include "geracao.h" +//============================================================================= +void construir(int *array, int tamHeap); +//============================================================================= +int getMaiorFilho(int *array, int i, int tamHeap); +//============================================================================= +void reconstruir(int *array, int tamHeap); +//============================================================================= +void heapsort(int *array, int n); +//============================================================================= +#endif diff --git a/fonte/u03 Ordenação em memória principal/c/insercao.c b/Codigos/u03 Ordenação em memória principal/c/insercao.c similarity index 96% rename from fonte/u03 Ordenação em memória principal/c/insercao.c rename to Codigos/u03 Ordenação em memória principal/c/insercao.c index ca75b72..aed2972 100644 --- a/fonte/u03 Ordenação em memória principal/c/insercao.c +++ b/Codigos/u03 Ordenação em memória principal/c/insercao.c @@ -1,15 +1,15 @@ -#include "insercao.h" -//============================================================================= -void insercao(int *array, int n){ - for (int i = 1; i < n; i++) { - int tmp = array[i]; - int j = i - 1; - - while ((j >= 0) && (array[j] > tmp)) { - array[j + 1] = array[j]; - j--; - } - array[j+1] = tmp; - } -} -//============================================================================= +#include "insercao.h" +//============================================================================= +void insercao(int *array, int n){ + for (int i = 1; i < n; i++) { + int tmp = array[i]; + int j = i - 1; + + while ((j >= 0) && (array[j] > tmp)) { + array[j + 1] = array[j]; + j--; + } + array[j+1] = tmp; + } +} +//============================================================================= diff --git a/fonte/u03 Ordenação em memória principal/c/insercao.h b/Codigos/u03 Ordenação em memória principal/c/insercao.h similarity index 97% rename from fonte/u03 Ordenação em memória principal/c/insercao.h rename to Codigos/u03 Ordenação em memória principal/c/insercao.h index d1a3d5a..431e1bb 100644 --- a/fonte/u03 Ordenação em memória principal/c/insercao.h +++ b/Codigos/u03 Ordenação em memória principal/c/insercao.h @@ -1,8 +1,8 @@ -#ifndef INSERCAO_H -#define INSERCAO_H -//============================================================================= -#include "geracao.h" -//============================================================================= -void insercao(int *array, int n); -//============================================================================= -#endif +#ifndef INSERCAO_H +#define INSERCAO_H +//============================================================================= +#include "geracao.h" +//============================================================================= +void insercao(int *array, int n); +//============================================================================= +#endif diff --git a/fonte/u03 Ordenação em memória principal/c/makefile b/Codigos/u03 Ordenação em memória principal/c/makefile similarity index 95% rename from fonte/u03 Ordenação em memória principal/c/makefile rename to Codigos/u03 Ordenação em memória principal/c/makefile index 392cec9..dc40917 100644 --- a/fonte/u03 Ordenação em memória principal/c/makefile +++ b/Codigos/u03 Ordenação em memória principal/c/makefile @@ -1,43 +1,43 @@ -all: exec - -exec: principal.o geracao.o bolha.o countingsort.o radixsort.o heapsort.o insercao.o mergesort.o quicksort.o selecao.o shellsort.o - gcc -o exec principal.o geracao.o bolha.o countingsort.o radixsort.o heapsort.o insercao.o mergesort.o quicksort.o selecao.o shellsort.o - -principal.o: principal.c - gcc -o principal.o principal.c -c -W -Wall -pedantic - -bolha.o: bolha.c - gcc -o bolha.o bolha.c -c -W -Wall -pedantic - -countingsort.o: countingsort.c - gcc -o countingsort.o countingsort.c -c -W -Wall -pedantic - -radixsort.o: radixsort.c - gcc -o radixsort.o radixsort.c -c -W -Wall -pedantic - -geracao.o: geracao.c - gcc -o geracao.o geracao.c -c -W -Wall -pedantic - -heapsort.o: heapsort.c - gcc -o heapsort.o heapsort.c -c -W -Wall -pedantic - -insercao.o: insercao.c - gcc -o insercao.o insercao.c -c -W -Wall -pedantic - -mergesort.o: mergesort.c - gcc -o mergesort.o mergesort.c -c -W -Wall -pedantic - -quicksort.o: quicksort.c - gcc -o quicksort.o quicksort.c -c -W -Wall -pedantic - -selecao.o: selecao.c - gcc -o selecao.o selecao.c -c -W -Wall -pedantic - -shellsort.o: shellsort.c - gcc -o shellsort.o shellsort.c -c -W -Wall -pedantic - -clean: - rm -rf *.o *~ exec - -limpa: - rm -rf *.o +all: exec + +exec: principal.o geracao.o bolha.o countingsort.o radixsort.o heapsort.o insercao.o mergesort.o quicksort.o selecao.o shellsort.o + gcc -o exec principal.o geracao.o bolha.o countingsort.o radixsort.o heapsort.o insercao.o mergesort.o quicksort.o selecao.o shellsort.o + +principal.o: principal.c + gcc -o principal.o principal.c -c -W -Wall -pedantic + +bolha.o: bolha.c + gcc -o bolha.o bolha.c -c -W -Wall -pedantic + +countingsort.o: countingsort.c + gcc -o countingsort.o countingsort.c -c -W -Wall -pedantic + +radixsort.o: radixsort.c + gcc -o radixsort.o radixsort.c -c -W -Wall -pedantic + +geracao.o: geracao.c + gcc -o geracao.o geracao.c -c -W -Wall -pedantic + +heapsort.o: heapsort.c + gcc -o heapsort.o heapsort.c -c -W -Wall -pedantic + +insercao.o: insercao.c + gcc -o insercao.o insercao.c -c -W -Wall -pedantic + +mergesort.o: mergesort.c + gcc -o mergesort.o mergesort.c -c -W -Wall -pedantic + +quicksort.o: quicksort.c + gcc -o quicksort.o quicksort.c -c -W -Wall -pedantic + +selecao.o: selecao.c + gcc -o selecao.o selecao.c -c -W -Wall -pedantic + +shellsort.o: shellsort.c + gcc -o shellsort.o shellsort.c -c -W -Wall -pedantic + +clean: + rm -rf *.o *~ exec + +limpa: + rm -rf *.o \ No newline at end of file diff --git a/fonte/u03 Ordenação em memória principal/c/mergesort.c b/Codigos/u03 Ordenação em memória principal/c/mergesort.c similarity index 96% rename from fonte/u03 Ordenação em memória principal/c/mergesort.c rename to Codigos/u03 Ordenação em memória principal/c/mergesort.c index 76b875c..50ef40f 100644 --- a/fonte/u03 Ordenação em memória principal/c/mergesort.c +++ b/Codigos/u03 Ordenação em memória principal/c/mergesort.c @@ -1,45 +1,45 @@ -#include "mergesort.h" -#include -//============================================================================= -void mergesort(int *array, int n) { - mergesortRec(array, 0, n-1); -} -//============================================================================= -void mergesortRec(int *array, int esq, int dir){ - if (esq < dir){ - int meio = (esq + dir) / 2; - mergesortRec(array, esq, meio); - mergesortRec(array, meio + 1, dir); - intercalar(array, esq, meio, dir); - } -} -//============================================================================= -void intercalar(int* array, int esq, int meio, int dir){ - int n1, n2, i, j, k; - - //Definir tamanho dos dois subarrays - n1 = meio-esq+1; - n2 = dir - meio; - - int* a1 = (int*) malloc((n1+1) * sizeof(int)); - int* a2 = (int*) malloc((n2+1) * sizeof(int)); - - //Inicializar primeiro subarray - for(i = 0; i < n1; i++){ - a1[i] = array[esq+i]; - } - - //Inicializar segundo subarray - for(j = 0; j < n2; j++){ - a2[j] = array[meio+j+1]; - } - - //Sentinela no final dos dois arrays - a1[i] = a2[j] = 0x7FFFFFFF; - - //Intercalacao propriamente dita - for(i = j = 0, k = esq; k <= dir; k++){ - array[k] = (a1[i] <= a2[j]) ? a1[i++] : a2[j++]; - } -} -//============================================================================= +#include "mergesort.h" +#include +//============================================================================= +void mergesort(int *array, int n) { + mergesortRec(array, 0, n-1); +} +//============================================================================= +void mergesortRec(int *array, int esq, int dir){ + if (esq < dir){ + int meio = (esq + dir) / 2; + mergesortRec(array, esq, meio); + mergesortRec(array, meio + 1, dir); + intercalar(array, esq, meio, dir); + } +} +//============================================================================= +void intercalar(int* array, int esq, int meio, int dir){ + int n1, n2, i, j, k; + + //Definir tamanho dos dois subarrays + n1 = meio-esq+1; + n2 = dir - meio; + + int* a1 = (int*) malloc((n1+1) * sizeof(int)); + int* a2 = (int*) malloc((n2+1) * sizeof(int)); + + //Inicializar primeiro subarray + for(i = 0; i < n1; i++){ + a1[i] = array[esq+i]; + } + + //Inicializar segundo subarray + for(j = 0; j < n2; j++){ + a2[j] = array[meio+j+1]; + } + + //Sentinela no final dos dois arrays + a1[i] = a2[j] = 0x7FFFFFFF; + + //Intercalacao propriamente dita + for(i = j = 0, k = esq; k <= dir; k++){ + array[k] = (a1[i] <= a2[j]) ? a1[i++] : a2[j++]; + } +} +//============================================================================= diff --git a/fonte/u03 Ordenação em memória principal/c/mergesort.h b/Codigos/u03 Ordenação em memória principal/c/mergesort.h similarity index 98% rename from fonte/u03 Ordenação em memória principal/c/mergesort.h rename to Codigos/u03 Ordenação em memória principal/c/mergesort.h index 7ae5ab0..3f1b041 100644 --- a/fonte/u03 Ordenação em memória principal/c/mergesort.h +++ b/Codigos/u03 Ordenação em memória principal/c/mergesort.h @@ -1,12 +1,12 @@ -#ifndef MERGESORT_H -#define MERGESORT_H -//============================================================================= -#include "geracao.h" -//============================================================================= -void mergesort(int *array, int n); -//============================================================================= -void mergesortRec(int *array, int esq, int dir); -//============================================================================= -void intercalar(int* array, int esq, int meio, int dir); -//============================================================================= -#endif +#ifndef MERGESORT_H +#define MERGESORT_H +//============================================================================= +#include "geracao.h" +//============================================================================= +void mergesort(int *array, int n); +//============================================================================= +void mergesortRec(int *array, int esq, int dir); +//============================================================================= +void intercalar(int* array, int esq, int meio, int dir); +//============================================================================= +#endif diff --git a/fonte/u03 Ordenação em memória principal/c/principal.c b/Codigos/u03 Ordenação em memória principal/c/principal.c similarity index 95% rename from fonte/u03 Ordenação em memória principal/c/principal.c rename to Codigos/u03 Ordenação em memória principal/c/principal.c index 77be22b..adc8cd5 100644 --- a/fonte/u03 Ordenação em memória principal/c/principal.c +++ b/Codigos/u03 Ordenação em memória principal/c/principal.c @@ -1,60 +1,60 @@ -#include "bolha.h" -#include "countingsort.h" -#include "radixsort.h" -#include "heapsort.h" -#include "insercao.h" -#include "mergesort.h" -#include "quicksort.h" -#include "selecao.h" -#include "shellsort.h" -#include "geracao.h" - -#include -#include -#include - -//============================================================================= -int main(int argc, char **argv) { - - //Delcaracao de variaveis - int n = (argc < 2) ? 1000 : atoi(argv[1]); - int *array = (int*) malloc(n*sizeof(int)); - clock_t inicio, fim; - double total; - - - //Geracao do conjunto a ser ordenado - aleatorio(array, n); - //crescente(array, n); - //decrescente(array, n); - - - //Mostrar o conjunto a ser ordenado - //mostrar(array, n); - - - //Execucao do algoritmo de ordenacao - inicio = clock(); - //bolha(array, n); - //countingsort(array, n); - //heapsort(array, n); - //insercao(array, n); - //mergesort(array, n); - //quicksort(array, n); - //selecao(array, n); - radixsort(array,n); - //shellsort(array, n); - fim = clock(); - total = ((fim - inicio) / (double)CLOCKS_PER_SEC); - - - //Mostrar o conjunto ordenado, tempo de execucao e status da ordenacao - //algoritmo.mostrar(array, n); - printf("Tempo para ordenar: %f s.\n", total); - printf("isOrdenado: %s\n", isOrdenado(array, n) ? "true" : "false"); - - //Desalocar o espaco de memoria do array - free(array); - - return 0; -} +#include "bolha.h" +#include "countingsort.h" +#include "radixsort.h" +#include "heapsort.h" +#include "insercao.h" +#include "mergesort.h" +#include "quicksort.h" +#include "selecao.h" +#include "shellsort.h" +#include "geracao.h" + +#include +#include +#include + +//============================================================================= +int main(int argc, char **argv) { + + //Delcaracao de variaveis + int n = (argc < 2) ? 1000 : atoi(argv[1]); + int *array = (int*) malloc(n*sizeof(int)); + clock_t inicio, fim; + double total; + + + //Geracao do conjunto a ser ordenado + aleatorio(array, n); + //crescente(array, n); + //decrescente(array, n); + + + //Mostrar o conjunto a ser ordenado + //mostrar(array, n); + + + //Execucao do algoritmo de ordenacao + inicio = clock(); + //bolha(array, n); + //countingsort(array, n); + //heapsort(array, n); + //insercao(array, n); + //mergesort(array, n); + //quicksort(array, n); + //selecao(array, n); + radixsort(array,n); + //shellsort(array, n); + fim = clock(); + total = ((fim - inicio) / (double)CLOCKS_PER_SEC); + + + //Mostrar o conjunto ordenado, tempo de execucao e status da ordenacao + //algoritmo.mostrar(array, n); + printf("Tempo para ordenar: %f s.\n", total); + printf("isOrdenado: %s\n", isOrdenado(array, n) ? "true" : "false"); + + //Desalocar o espaco de memoria do array + free(array); + + return 0; +} diff --git a/fonte/u03 Ordenação em memória principal/c/quicksort.c b/Codigos/u03 Ordenação em memória principal/c/quicksort.c similarity index 97% rename from fonte/u03 Ordenação em memória principal/c/quicksort.c rename to Codigos/u03 Ordenação em memória principal/c/quicksort.c index cea67fb..883588a 100644 --- a/fonte/u03 Ordenação em memória principal/c/quicksort.c +++ b/Codigos/u03 Ordenação em memória principal/c/quicksort.c @@ -1,22 +1,22 @@ -#include "quicksort.h" -//============================================================================= -void quicksortRec(int *array, int esq, int dir) { - int i = esq, j = dir; - int pivo = array[(dir+esq)/2]; - while (i <= j) { - while (array[i] < pivo) i++; - while (array[j] > pivo) j--; - if (i <= j) { - swap(array + i, array + j); - i++; - j--; - } - } - if (esq < j) quicksortRec(array, esq, j); - if (i < dir) quicksortRec(array, i, dir); -} -//============================================================================= -void quicksort(int *array, int n) { - quicksortRec(array, 0, n-1); -} -//============================================================================= +#include "quicksort.h" +//============================================================================= +void quicksortRec(int *array, int esq, int dir) { + int i = esq, j = dir; + int pivo = array[(dir+esq)/2]; + while (i <= j) { + while (array[i] < pivo) i++; + while (array[j] > pivo) j--; + if (i <= j) { + swap(array + i, array + j); + i++; + j--; + } + } + if (esq < j) quicksortRec(array, esq, j); + if (i < dir) quicksortRec(array, i, dir); +} +//============================================================================= +void quicksort(int *array, int n) { + quicksortRec(array, 0, n-1); +} +//============================================================================= diff --git a/fonte/u03 Ordenação em memória principal/c/quicksort.h b/Codigos/u03 Ordenação em memória principal/c/quicksort.h similarity index 97% rename from fonte/u03 Ordenação em memória principal/c/quicksort.h rename to Codigos/u03 Ordenação em memória principal/c/quicksort.h index b6aa99e..abacfcd 100644 --- a/fonte/u03 Ordenação em memória principal/c/quicksort.h +++ b/Codigos/u03 Ordenação em memória principal/c/quicksort.h @@ -1,10 +1,10 @@ -#ifndef QUICKSORT_H -#define QUICKSORT_H -//============================================================================= -#include "geracao.h" -//============================================================================= -void quicksortRec(int *array, int esq, int dir); -//============================================================================= -void quicksort(int *array, int n); -//============================================================================= -#endif +#ifndef QUICKSORT_H +#define QUICKSORT_H +//============================================================================= +#include "geracao.h" +//============================================================================= +void quicksortRec(int *array, int esq, int dir); +//============================================================================= +void quicksort(int *array, int n); +//============================================================================= +#endif diff --git a/fonte/u03 Ordenação em memória principal/c/radixsort.c b/Codigos/u03 Ordenação em memória principal/c/radixsort.c similarity index 96% rename from fonte/u03 Ordenação em memória principal/c/radixsort.c rename to Codigos/u03 Ordenação em memória principal/c/radixsort.c index 0bbc022..84b95bb 100644 --- a/fonte/u03 Ordenação em memória principal/c/radixsort.c +++ b/Codigos/u03 Ordenação em memória principal/c/radixsort.c @@ -1,51 +1,51 @@ -#include "geracao.h" -#include "radixsort.h" -//============================================================================= -int getMax(int *array, int n) { - int maior = array[0]; - - for (int i = 1; i < n; i++) { - if(maior < array[i]){ - maior = array[i]; - } - } - return maior; -} -//============================================================================= -void radixsort(int *array, int n) { - //Array para contar o numero de ocorrencias de cada elemento - int max = getMax(array, n); - for (int exp = 1; max/exp > 0; exp *= 10) { - radcountingSort(array, n, exp); - } -} - - void radcountingSort(int *array, int n, int exp) { - int count[10]; - int output[n]; - - //Inicializar cada posicao do array de contagem - for (int i = 0; i < 10; count[i] = 0, i++); - - //Agora, o count[i] contem o numero de elemento iguais a i - for (int i = 0; i < n; i++) { - count[(array[i]/exp) % 10]++; - } - - //Agora, o count[i] contem o numero de elemento menores ou iguais a i - for (int i = 1; i < 10; i++) { - count[i] += count[i-1]; - } - - //Ordenando - for (int i = n-1; i >= 0; i--) { - output[count[(array[i]/exp) % 10] - 1] = array[i]; - count[(array[i]/exp) % 10]--; - } - - //Copiando para o array original - for (int i = 0; i < n; i++) { - array[i] = output[i]; - } - } -//============================================================================= +#include "geracao.h" +#include "radixsort.h" +//============================================================================= +int getMax(int *array, int n) { + int maior = array[0]; + + for (int i = 1; i < n; i++) { + if(maior < array[i]){ + maior = array[i]; + } + } + return maior; +} +//============================================================================= +void radixsort(int *array, int n) { + //Array para contar o numero de ocorrencias de cada elemento + int max = getMax(array, n); + for (int exp = 1; max/exp > 0; exp *= 10) { + radcountingSort(array, n, exp); + } +} + + void radcountingSort(int *array, int n, int exp) { + int count[10]; + int output[n]; + + //Inicializar cada posicao do array de contagem + for (int i = 0; i < 10; count[i] = 0, i++); + + //Agora, o count[i] contem o numero de elemento iguais a i + for (int i = 0; i < n; i++) { + count[(array[i]/exp) % 10]++; + } + + //Agora, o count[i] contem o numero de elemento menores ou iguais a i + for (int i = 1; i < 10; i++) { + count[i] += count[i-1]; + } + + //Ordenando + for (int i = n-1; i >= 0; i--) { + output[count[(array[i]/exp) % 10] - 1] = array[i]; + count[(array[i]/exp) % 10]--; + } + + //Copiando para o array original + for (int i = 0; i < n; i++) { + array[i] = output[i]; + } + } +//============================================================================= diff --git a/fonte/u03 Ordenação em memória principal/c/radixsort.h b/Codigos/u03 Ordenação em memória principal/c/radixsort.h similarity index 97% rename from fonte/u03 Ordenação em memória principal/c/radixsort.h rename to Codigos/u03 Ordenação em memória principal/c/radixsort.h index e0d81cc..3fcfab0 100644 --- a/fonte/u03 Ordenação em memória principal/c/radixsort.h +++ b/Codigos/u03 Ordenação em memória principal/c/radixsort.h @@ -1,10 +1,10 @@ -#ifndef RADIXSORT_H -#define RADIXSORT_H -//============================================================================= -int getMax(int *array, int n); -//============================================================================= -void radixsort(int *array, int n); - -void radcountingSort(int *array, int n, int exp); -//============================================================================= -#endif +#ifndef RADIXSORT_H +#define RADIXSORT_H +//============================================================================= +int getMax(int *array, int n); +//============================================================================= +void radixsort(int *array, int n); + +void radcountingSort(int *array, int n, int exp); +//============================================================================= +#endif diff --git a/fonte/u03 Ordenação em memória principal/c/selecao.c b/Codigos/u03 Ordenação em memória principal/c/selecao.c similarity index 93% rename from fonte/u03 Ordenação em memória principal/c/selecao.c rename to Codigos/u03 Ordenação em memória principal/c/selecao.c index d9592bf..e4b728e 100644 --- a/fonte/u03 Ordenação em memória principal/c/selecao.c +++ b/Codigos/u03 Ordenação em memória principal/c/selecao.c @@ -1,14 +1,14 @@ -#include "selecao.h" -//============================================================================= -void selecao(int *array, int n){ - for (int i = 0; i < (n - 1); i++) { - int menor = i; - for (int j = (i + 1); j < n; j++){ - if (array[menor] > array[j]){ - menor = j; - } - } - swap(&array[menor], &array[i]); - } -} -//============================================================================= +#include "selecao.h" +//============================================================================= +void selecao(int *array, int n){ + for (int i = 0; i < (n - 1); i++) { + int menor = i; + for (int j = (i + 1); j < n; j++){ + if (array[menor] > array[j]){ + menor = j; + } + } + swap(&array[menor], &array[i]); + } +} +//============================================================================= \ No newline at end of file diff --git a/fonte/u03 Ordenação em memória principal/c/selecao.h b/Codigos/u03 Ordenação em memória principal/c/selecao.h similarity index 97% rename from fonte/u03 Ordenação em memória principal/c/selecao.h rename to Codigos/u03 Ordenação em memória principal/c/selecao.h index 8d84d99..9a19155 100644 --- a/fonte/u03 Ordenação em memória principal/c/selecao.h +++ b/Codigos/u03 Ordenação em memória principal/c/selecao.h @@ -1,8 +1,8 @@ -#ifndef SELECAO_H -#define SELECAO_H -//============================================================================= -#include "geracao.h" -//============================================================================= -void selecao(int *array, int n); -//============================================================================= -#endif +#ifndef SELECAO_H +#define SELECAO_H +//============================================================================= +#include "geracao.h" +//============================================================================= +void selecao(int *array, int n); +//============================================================================= +#endif diff --git a/fonte/u03 Ordenação em memória principal/c/shellsort.c b/Codigos/u03 Ordenação em memória principal/c/shellsort.c similarity index 96% rename from fonte/u03 Ordenação em memória principal/c/shellsort.c rename to Codigos/u03 Ordenação em memória principal/c/shellsort.c index f8c119a..8a97cf5 100644 --- a/fonte/u03 Ordenação em memória principal/c/shellsort.c +++ b/Codigos/u03 Ordenação em memória principal/c/shellsort.c @@ -1,27 +1,27 @@ -#include "shellsort.h" -//============================================================================= -void insercaoPorCor(int *array, int n, int cor, int h){ - for (int i = (h + cor); i < n; i+=h) { - int tmp = array[i]; - int j = i - h; - while ((j >= 0) && (array[j] > tmp)) { - array[j + h] = array[j]; - j-=h; - } - array[j + h] = tmp; - } -} -//============================================================================= -void shellsort(int *array, int n) { - int h = 1; - - do { h = (h * 3) + 1; } while (h < n); - - do { - h /= 3; - for(int cor = 0; cor < h; cor++){ - insercaoPorCor(array, n, cor, h); - } - } while (h != 1); -} -//============================================================================= +#include "shellsort.h" +//============================================================================= +void insercaoPorCor(int *array, int n, int cor, int h){ + for (int i = (h + cor); i < n; i+=h) { + int tmp = array[i]; + int j = i - h; + while ((j >= 0) && (array[j] > tmp)) { + array[j + h] = array[j]; + j-=h; + } + array[j + h] = tmp; + } +} +//============================================================================= +void shellsort(int *array, int n) { + int h = 1; + + do { h = (h * 3) + 1; } while (h < n); + + do { + h /= 3; + for(int cor = 0; cor < h; cor++){ + insercaoPorCor(array, n, cor, h); + } + } while (h != 1); +} +//============================================================================= diff --git a/fonte/u03 Ordenação em memória principal/c/shellsort.h b/Codigos/u03 Ordenação em memória principal/c/shellsort.h similarity index 97% rename from fonte/u03 Ordenação em memória principal/c/shellsort.h rename to Codigos/u03 Ordenação em memória principal/c/shellsort.h index 8146a88..3e019c4 100644 --- a/fonte/u03 Ordenação em memória principal/c/shellsort.h +++ b/Codigos/u03 Ordenação em memória principal/c/shellsort.h @@ -1,10 +1,10 @@ -#ifndef SHELLSORT_H -#define SHELLSORT_H -//============================================================================= -#include "geracao.h" -//============================================================================= -void insercaoPorCor(int *array, int n, int cor, int h); -//============================================================================= -void shellsort(int *array, int n); -//============================================================================= -#endif +#ifndef SHELLSORT_H +#define SHELLSORT_H +//============================================================================= +#include "geracao.h" +//============================================================================= +void insercaoPorCor(int *array, int n, int cor, int h); +//============================================================================= +void shellsort(int *array, int n); +//============================================================================= +#endif diff --git a/fonte/u03 Ordenação em memória principal/java/Bolha.java b/Codigos/u03 Ordenação em memória principal/java/Bolha.java similarity index 93% rename from fonte/u03 Ordenação em memória principal/java/Bolha.java rename to Codigos/u03 Ordenação em memória principal/java/Bolha.java index 9457b99..1fc0868 100644 --- a/fonte/u03 Ordenação em memória principal/java/Bolha.java +++ b/Codigos/u03 Ordenação em memória principal/java/Bolha.java @@ -1,38 +1,38 @@ -/** - * Metodo de ordenacao da bolha - * @author Max do Val Machado - * @version 3 08/2020 - */ -class Bolha extends Geracao { - - /** - * Construtor. - */ - public Bolha(){ - super(); - } - - - /** - * Construtor. - * @param int tamanho do array de numeros inteiros. - */ - public Bolha(int tamanho){ - super(tamanho); - } - - - /** - * Algoritmo de ordenacao Bolha. - */ - @Override - public void sort() { - for (int i = (n - 1); i > 0; i--) { - for (int j = 0; j < i; j++) { - if (array[j] > array[j + 1]) { - swap(j, j+1); - } - } - } - } -} +/** + * Metodo de ordenacao da bolha + * @author Max do Val Machado + * @version 3 08/2020 + */ +class Bolha extends Geracao { + + /** + * Construtor. + */ + public Bolha(){ + super(); + } + + + /** + * Construtor. + * @param int tamanho do array de numeros inteiros. + */ + public Bolha(int tamanho){ + super(tamanho); + } + + + /** + * Algoritmo de ordenacao Bolha. + */ + @Override + public void sort() { + for (int i = (n - 1); i > 0; i--) { + for (int j = 0; j < i; j++) { + if (array[j] > array[j + 1]) { + swap(j, j+1); + } + } + } + } +} diff --git a/fonte/u03 Ordenação em memória principal/java/Countingsort.java b/Codigos/u03 Ordenação em memória principal/java/Countingsort.java similarity index 95% rename from fonte/u03 Ordenação em memória principal/java/Countingsort.java rename to Codigos/u03 Ordenação em memória principal/java/Countingsort.java index 9dc5a2b..949700f 100644 --- a/fonte/u03 Ordenação em memória principal/java/Countingsort.java +++ b/Codigos/u03 Ordenação em memória principal/java/Countingsort.java @@ -1,66 +1,66 @@ -/** - * Metodo de ordenacao por contagem - * @author Max do Val Machado - * @version 3 08/2020 - */ - -class Countingsort extends Geracao { - - /** - * Construtor. - */ - public Countingsort(){ - super(); - } - - - /** - * Construtor. - * @param int tamanho do array de numeros inteiros. - */ - public Countingsort(int tamanho){ - super(tamanho); - } - - - /** - * Algoritmo de ordenacao Countingsort. - */ - @Override - public void sort() { - //Array para contar o numero de ocorrencias de cada elemento - int[] count = new int[getMaior() + 1]; - int[] ordenado = new int[n]; - - //Inicializar cada posicao do array de contagem - for (int i = 0; i < count.length; count[i] = 0, i++); - - //Agora, o count[i] contem o numero de elemento iguais a i - for (int i = 0; i < n; count[array[i]]++, i++); - - //Agora, o count[i] contem o numero de elemento menores ou iguais a i - for(int i = 1; i < count.length; count[i] += count[i-1], i++); - - //Ordenando - for(int i = n-1; i >= 0; ordenado[count[array[i]]-1] = array[i], count[array[i]]--, i--); - - //Copiando para o array original - for(int i = 0; i < n; array[i] = ordenado[i], i++); - } - - - /** - * Retorna o maior elemento do array. - * @return maior elemento - */ - public int getMaior() { - int maior = array[0]; - - for (int i = 0; i < n; i++) { - if(maior < array[i]){ - maior = array[i]; - } - } - return maior; - } -} +/** + * Metodo de ordenacao por contagem + * @author Max do Val Machado + * @version 3 08/2020 + */ + +class Countingsort extends Geracao { + + /** + * Construtor. + */ + public Countingsort(){ + super(); + } + + + /** + * Construtor. + * @param int tamanho do array de numeros inteiros. + */ + public Countingsort(int tamanho){ + super(tamanho); + } + + + /** + * Algoritmo de ordenacao Countingsort. + */ + @Override + public void sort() { + //Array para contar o numero de ocorrencias de cada elemento + int[] count = new int[getMaior() + 1]; + int[] ordenado = new int[n]; + + //Inicializar cada posicao do array de contagem + for (int i = 0; i < count.length; count[i] = 0, i++); + + //Agora, o count[i] contem o numero de elemento iguais a i + for (int i = 0; i < n; count[array[i]]++, i++); + + //Agora, o count[i] contem o numero de elemento menores ou iguais a i + for(int i = 1; i < count.length; count[i] += count[i-1], i++); + + //Ordenando + for(int i = n-1; i >= 0; ordenado[count[array[i]]-1] = array[i], count[array[i]]--, i--); + + //Copiando para o array original + for(int i = 0; i < n; array[i] = ordenado[i], i++); + } + + + /** + * Retorna o maior elemento do array. + * @return maior elemento + */ + public int getMaior() { + int maior = array[0]; + + for (int i = 0; i < n; i++) { + if(maior < array[i]){ + maior = array[i]; + } + } + return maior; + } +} diff --git a/fonte/u03 Ordenação em memória principal/java/Geracao.java b/Codigos/u03 Ordenação em memória principal/java/Geracao.java similarity index 94% rename from fonte/u03 Ordenação em memória principal/java/Geracao.java rename to Codigos/u03 Ordenação em memória principal/java/Geracao.java index 32f4664..79be4d3 100644 --- a/fonte/u03 Ordenação em memória principal/java/Geracao.java +++ b/Codigos/u03 Ordenação em memória principal/java/Geracao.java @@ -1,160 +1,160 @@ -/** - * Geracao de elementos de um array - * @author Max do Val Machado - * @version 3 08/2020 - */ - -import java.util.*; - -class Geracao { - protected int[] array; - protected int n; - - - /** - * Construtor. - */ - public Geracao(){ - array = new int[100]; - n = array.length; - } - - - /** - * Construtor. - * @param int tamanho do array de numeros inteiros. - */ - public Geracao(int tamanho){ - array = new int[tamanho]; - n = array.length; - } - - - /** - * Produz um array ordenado de modo crescente. - */ - public void crescente() { - for (int i = 0; i < n; i++) { - array[i] = i; - } - } - - - /** - * Produz um array ordenado de modo decrescente. - */ - public void decrescente() { - for (int i = 0; i < n; i++) { - array[i] = n - 1 - i; - } - } - - - /** - * Produz um array com numeros aleatorios. - */ - public void aleatorio() { - Random rand = new Random(); - crescente(); - for (int i = 0; i < n; i++) { - swap(i, Math.abs(rand.nextInt()) % n); - } - } - - - /** - * Efetua a leitura dos elementos via entrada padrao. - */ - public void entradaPadrao() { - n = MyIO.readInt(); - array = new int[n]; - - for (int i = 0; i < n; i++) { - array[i] = MyIO.readInt(); - } - } - - /** - * Recebe um Efetua a leitura dos elementos via entrada padrao. - */ - public void entrada(int[] vet){ - n = vet.length; - array = new int[n]; - for(int i = 0; i < n; i++){ - array[i] = vet[i]; - } - } - - - /** - * Mostra os k primeiros elementos do array. - * @param int k indica a quantidade de elementos do array a serem mostrados. - */ - public void mostrar(int k) { - System.out.print("["); - - for (int i = 0; i < k; i++) { - System.out.print(" ("+i+")" + array[i]); - } - - System.out.println("]"); - } - - - /** - * Mostra os elementos do array. - */ - public void mostrar() { - System.out.print("["); - - for (int i = 0; i < n; i++) { - System.out.print(" ("+i+")" + array[i]); - } - - System.out.println("]"); - } - - - /** - * Troca o conteudo de duas posicoes do array - * @param i int primeira posicao - * @param j int segunda posicao - */ - public void swap(int i, int j) { - int temp = array[i]; - array[i] = array[j]; - array[j] = temp; - } - - - /** - * Retorna o timestamp atual - * @return timestamp atual - */ - public long now(){ - return new Date().getTime(); - } - - - /** - * Retorna verdadeiro/falso indicando se o array esta ordenado - * @return boolean indicando se o array esta ordenado - */ - public boolean isOrdenado(){ - boolean resp = true; - for(int i = 1; i < n; i++){ - if(array[i] < array[i-1]){ - i = n; - resp = false; - } - } - return resp; - } - - /* - * Metodo a ser implementado nas subclasses - */ - public void sort(){ - System.out.println("Método a ser implementado nas subclasses."); - } -} +/** + * Geracao de elementos de um array + * @author Max do Val Machado + * @version 3 08/2020 + */ + +import java.util.*; + +class Geracao { + protected int[] array; + protected int n; + + + /** + * Construtor. + */ + public Geracao(){ + array = new int[100]; + n = array.length; + } + + + /** + * Construtor. + * @param int tamanho do array de numeros inteiros. + */ + public Geracao(int tamanho){ + array = new int[tamanho]; + n = array.length; + } + + + /** + * Produz um array ordenado de modo crescente. + */ + public void crescente() { + for (int i = 0; i < n; i++) { + array[i] = i; + } + } + + + /** + * Produz um array ordenado de modo decrescente. + */ + public void decrescente() { + for (int i = 0; i < n; i++) { + array[i] = n - 1 - i; + } + } + + + /** + * Produz um array com numeros aleatorios. + */ + public void aleatorio() { + Random rand = new Random(); + crescente(); + for (int i = 0; i < n; i++) { + swap(i, Math.abs(rand.nextInt()) % n); + } + } + + + /** + * Efetua a leitura dos elementos via entrada padrao. + */ + public void entradaPadrao() { + n = MyIO.readInt(); + array = new int[n]; + + for (int i = 0; i < n; i++) { + array[i] = MyIO.readInt(); + } + } + + /** + * Recebe um Efetua a leitura dos elementos via entrada padrao. + */ + public void entrada(int[] vet){ + n = vet.length; + array = new int[n]; + for(int i = 0; i < n; i++){ + array[i] = vet[i]; + } + } + + + /** + * Mostra os k primeiros elementos do array. + * @param int k indica a quantidade de elementos do array a serem mostrados. + */ + public void mostrar(int k) { + System.out.print("["); + + for (int i = 0; i < k; i++) { + System.out.print(" ("+i+")" + array[i]); + } + + System.out.println("]"); + } + + + /** + * Mostra os elementos do array. + */ + public void mostrar() { + System.out.print("["); + + for (int i = 0; i < n; i++) { + System.out.print(" ("+i+")" + array[i]); + } + + System.out.println("]"); + } + + + /** + * Troca o conteudo de duas posicoes do array + * @param i int primeira posicao + * @param j int segunda posicao + */ + public void swap(int i, int j) { + int temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + + + /** + * Retorna o timestamp atual + * @return timestamp atual + */ + public long now(){ + return new Date().getTime(); + } + + + /** + * Retorna verdadeiro/falso indicando se o array esta ordenado + * @return boolean indicando se o array esta ordenado + */ + public boolean isOrdenado(){ + boolean resp = true; + for(int i = 1; i < n; i++){ + if(array[i] < array[i-1]){ + i = n; + resp = false; + } + } + return resp; + } + + /* + * Metodo a ser implementado nas subclasses + */ + public void sort(){ + System.out.println("Método a ser implementado nas subclasses."); + } +} diff --git a/fonte/u03 Ordenação em memória principal/java/Heapsort.java b/Codigos/u03 Ordenação em memória principal/java/Heapsort.java similarity index 95% rename from fonte/u03 Ordenação em memória principal/java/Heapsort.java rename to Codigos/u03 Ordenação em memória principal/java/Heapsort.java index 14a5315..84d57c8 100644 --- a/fonte/u03 Ordenação em memória principal/java/Heapsort.java +++ b/Codigos/u03 Ordenação em memória principal/java/Heapsort.java @@ -1,88 +1,88 @@ -/** - * Algoritmo de ordenacao Heapsort - * @author Max do Val Machado - * @version 3 08/2020 - */ - -class Heapsort extends Geracao { - - /** - * Construtor. - */ - public Heapsort(){ - super(); - } - - - /** - * Construtor. - * @param int tamanho do array de numeros inteiros. - */ - public Heapsort(int tamanho){ - super(tamanho); - } - - - /** - * Algoritmo de ordenacao Heapsort. - */ - @Override - public void sort() { - //Alterar o vetor ignorando a posicao zero - int[] tmp = new int[n+1]; - for(int i = 0; i < n; i++){ - tmp[i+1] = array[i]; - } - array = tmp; - - //Contrucao do heap - for(int tamHeap = 2; tamHeap <= n; tamHeap++){ - construir(tamHeap); - } - - //Ordenacao propriamente dita - int tamHeap = n; - while(tamHeap > 1){ - swap(1, tamHeap--); - reconstruir(tamHeap); - } - - //Alterar o vetor para voltar a posicao zero - tmp = array; - array = new int[n]; - for(int i = 0; i < n; i++){ - array[i] = tmp[i+1]; - } - } - - - public void construir(int tamHeap){ - for(int i = tamHeap; i > 1 && array[i] > array[i/2]; i /= 2){ - swap(i, i/2); - } - } - - - public void reconstruir(int tamHeap){ - int i = 1; - while(i <= (tamHeap/2)){ - int filho = getMaiorFilho(i, tamHeap); - if(array[i] < array[filho]){ - swap(i, filho); - i = filho; - }else{ - i = tamHeap; - } - } - } - - public int getMaiorFilho(int i, int tamHeap){ - int filho; - if (2*i == tamHeap || array[2*i] > array[2*i+1]){ - filho = 2*i; - } else { - filho = 2*i + 1; - } - return filho; - } -} +/** + * Algoritmo de ordenacao Heapsort + * @author Max do Val Machado + * @version 3 08/2020 + */ + +class Heapsort extends Geracao { + + /** + * Construtor. + */ + public Heapsort(){ + super(); + } + + + /** + * Construtor. + * @param int tamanho do array de numeros inteiros. + */ + public Heapsort(int tamanho){ + super(tamanho); + } + + + /** + * Algoritmo de ordenacao Heapsort. + */ + @Override + public void sort() { + //Alterar o vetor ignorando a posicao zero + int[] tmp = new int[n+1]; + for(int i = 0; i < n; i++){ + tmp[i+1] = array[i]; + } + array = tmp; + + //Contrucao do heap + for(int tamHeap = 2; tamHeap <= n; tamHeap++){ + construir(tamHeap); + } + + //Ordenacao propriamente dita + int tamHeap = n; + while(tamHeap > 1){ + swap(1, tamHeap--); + reconstruir(tamHeap); + } + + //Alterar o vetor para voltar a posicao zero + tmp = array; + array = new int[n]; + for(int i = 0; i < n; i++){ + array[i] = tmp[i+1]; + } + } + + + public void construir(int tamHeap){ + for(int i = tamHeap; i > 1 && array[i] > array[i/2]; i /= 2){ + swap(i, i/2); + } + } + + + public void reconstruir(int tamHeap){ + int i = 1; + while(i <= (tamHeap/2)){ + int filho = getMaiorFilho(i, tamHeap); + if(array[i] < array[filho]){ + swap(i, filho); + i = filho; + }else{ + i = tamHeap; + } + } + } + + public int getMaiorFilho(int i, int tamHeap){ + int filho; + if (2*i == tamHeap || array[2*i] > array[2*i+1]){ + filho = 2*i; + } else { + filho = 2*i + 1; + } + return filho; + } +} diff --git a/fonte/u03 Ordenação em memória principal/java/Insercao.java b/Codigos/u03 Ordenação em memória principal/java/Insercao.java similarity index 94% rename from fonte/u03 Ordenação em memória principal/java/Insercao.java rename to Codigos/u03 Ordenação em memória principal/java/Insercao.java index 72b8e74..a98de08 100644 --- a/fonte/u03 Ordenação em memória principal/java/Insercao.java +++ b/Codigos/u03 Ordenação em memória principal/java/Insercao.java @@ -1,42 +1,42 @@ -/** - * Algoritmo de ordenacao por insercao - * @author Max do Val Machado - * @version 3 01/2020 - */ - -class Insercao extends Geracao { - - /** - * Construtor. - */ - public Insercao(){ - super(); - } - - - /** - * Construtor. - * @param int tamanho do array de numeros inteiros. - */ - public Insercao(int tamanho){ - super(tamanho); - } - - - /** - * Algoritmo de ordenacao por insercao. - */ - @Override - public void sort() { - for (int i = 1; i < n; i++) { - int tmp = array[i]; - int j = i - 1; - - while ((j >= 0) && (array[j] > tmp)) { - array[j + 1] = array[j]; - j--; - } - array[j + 1] = tmp; - } - } -} +/** + * Algoritmo de ordenacao por insercao + * @author Max do Val Machado + * @version 3 01/2020 + */ + +class Insercao extends Geracao { + + /** + * Construtor. + */ + public Insercao(){ + super(); + } + + + /** + * Construtor. + * @param int tamanho do array de numeros inteiros. + */ + public Insercao(int tamanho){ + super(tamanho); + } + + + /** + * Algoritmo de ordenacao por insercao. + */ + @Override + public void sort() { + for (int i = 1; i < n; i++) { + int tmp = array[i]; + int j = i - 1; + + while ((j >= 0) && (array[j] > tmp)) { + array[j + 1] = array[j]; + j--; + } + array[j + 1] = tmp; + } + } +} diff --git a/fonte/u03 Ordenação em memória principal/java/Mergesort.java b/Codigos/u03 Ordenação em memória principal/java/Mergesort.java similarity index 95% rename from fonte/u03 Ordenação em memória principal/java/Mergesort.java rename to Codigos/u03 Ordenação em memória principal/java/Mergesort.java index aa3bb37..2cea4fc 100644 --- a/fonte/u03 Ordenação em memória principal/java/Mergesort.java +++ b/Codigos/u03 Ordenação em memória principal/java/Mergesort.java @@ -1,81 +1,81 @@ -/** - * Algoritmo de ordenacao Mergesort - * @author Max do Val Machado - * @version 3 08/2020 - */ -class Mergesort extends Geracao { - - /** - * Construtor. - */ - public Mergesort(){ - super(); - } - - - /** - * Construtor. - * @param int tamanho do array de numeros inteiros. - */ - public Mergesort(int tamanho){ - super(tamanho); - } - - - /** - * Algoritmo de ordenacao Mergesort. - */ - @Override - public void sort() { - mergesort(0, n-1); - } - - /** - * Algoritmo de ordenacao Mergesort. - * @param int esq inicio do array a ser ordenado - * @param int dir fim do array a ser ordenado - */ - private void mergesort(int esq, int dir) { - if (esq < dir){ - int meio = (esq + dir) / 2; - mergesort(esq, meio); - mergesort(meio + 1, dir); - intercalar(esq, meio, dir); - } - } - - /** - * Algoritmo que intercala os elementos entre as posicoes esq e dir - * @param int esq inicio do array a ser ordenado - * @param int meio posicao do meio do array a ser ordenado - * @param int dir fim do array a ser ordenado - */ - public void intercalar(int esq, int meio, int dir){ - int n1, n2, i, j, k; - - //Definir tamanho dos dois subarrays - n1 = meio-esq+1; - n2 = dir - meio; - - int[] a1 = new int[n1+1]; - int[] a2 = new int[n2+1]; - - //Inicializar primeiro subarray - for(i = 0; i < n1; i++){ - a1[i] = array[esq+i]; - } - - //Inicializar segundo subarray - for(j = 0; j < n2; j++){ - a2[j] = array[meio+j+1]; - } - - //Sentinela no final dos dois arrays - a1[i] = a2[j] = 0x7FFFFFFF; - - //Intercalacao propriamente dita - for(i = j = 0, k = esq; k <= dir; k++){ - array[k] = (a1[i] <= a2[j]) ? a1[i++] : a2[j++]; - } - } -} +/** + * Algoritmo de ordenacao Mergesort + * @author Max do Val Machado + * @version 3 08/2020 + */ +class Mergesort extends Geracao { + + /** + * Construtor. + */ + public Mergesort(){ + super(); + } + + + /** + * Construtor. + * @param int tamanho do array de numeros inteiros. + */ + public Mergesort(int tamanho){ + super(tamanho); + } + + + /** + * Algoritmo de ordenacao Mergesort. + */ + @Override + public void sort() { + mergesort(0, n-1); + } + + /** + * Algoritmo de ordenacao Mergesort. + * @param int esq inicio do array a ser ordenado + * @param int dir fim do array a ser ordenado + */ + private void mergesort(int esq, int dir) { + if (esq < dir){ + int meio = (esq + dir) / 2; + mergesort(esq, meio); + mergesort(meio + 1, dir); + intercalar(esq, meio, dir); + } + } + + /** + * Algoritmo que intercala os elementos entre as posicoes esq e dir + * @param int esq inicio do array a ser ordenado + * @param int meio posicao do meio do array a ser ordenado + * @param int dir fim do array a ser ordenado + */ + public void intercalar(int esq, int meio, int dir){ + int n1, n2, i, j, k; + + //Definir tamanho dos dois subarrays + n1 = meio-esq+1; + n2 = dir - meio; + + int[] a1 = new int[n1+1]; + int[] a2 = new int[n2+1]; + + //Inicializar primeiro subarray + for(i = 0; i < n1; i++){ + a1[i] = array[esq+i]; + } + + //Inicializar segundo subarray + for(j = 0; j < n2; j++){ + a2[j] = array[meio+j+1]; + } + + //Sentinela no final dos dois arrays + a1[i] = a2[j] = 0x7FFFFFFF; + + //Intercalacao propriamente dita + for(i = j = 0, k = esq; k <= dir; k++){ + array[k] = (a1[i] <= a2[j]) ? a1[i++] : a2[j++]; + } + } +} diff --git a/fonte/u03 Ordenação em memória principal/java/Principal.java b/Codigos/u03 Ordenação em memória principal/java/Principal.java similarity index 96% rename from fonte/u03 Ordenação em memória principal/java/Principal.java rename to Codigos/u03 Ordenação em memória principal/java/Principal.java index 99b901f..2b35fc8 100644 --- a/fonte/u03 Ordenação em memória principal/java/Principal.java +++ b/Codigos/u03 Ordenação em memória principal/java/Principal.java @@ -1,48 +1,48 @@ -/** - * Classe Principal - * @author Max do Val Machado - * @version 3 08/2020 - */ -class Principal { - public static void main(String[] args) { - - //Delcaracao de variaveis - Geracao algoritmo; - int n = (args.length < 1) ? 1000 : Integer.parseInt(args[0]); - double inicio, fim; - - - //Inicializacao do algoritmo de ordenacao - //algoritmo = new Bolha(n); - //algoritmo = new Countingsort(n); - //algoritmo = new Heapsort(n); - algoritmo = new Insercao(n); - //algoritmo = new Mergesort(n); - //algoritmo = new Quicksort(n); - //algoritmo = new Radixsort(n); - //algoritmo = new Selecao(n); - //algoritmo = new Shellsort(n); - - - //Geracao do conjunto a ser ordenado - //algoritmo.aleatorio(); - algoritmo.crescente(); - //algoritmo.decrescente(); - - - //Mostrar o conjunto a ser ordenado - //algoritmo.mostrar(); - - - //Execucao do algoritmo de ordenacao - inicio = algoritmo.now(); - algoritmo.sort(); - fim = algoritmo.now(); - - - //Mostrar o conjunto ordenado, tempo de execucao e status da ordenacao - //algoritmo.mostrar(); - System.out.println("Tempo para ordenar: " + (fim-inicio)/1000.0 + " s."); - System.out.println("isOrdenado: " + algoritmo.isOrdenado()); - } -} +/** + * Classe Principal + * @author Max do Val Machado + * @version 3 08/2020 + */ +class Principal { + public static void main(String[] args) { + + //Delcaracao de variaveis + Geracao algoritmo; + int n = (args.length < 1) ? 1000 : Integer.parseInt(args[0]); + double inicio, fim; + + + //Inicializacao do algoritmo de ordenacao + //algoritmo = new Bolha(n); + //algoritmo = new Countingsort(n); + //algoritmo = new Heapsort(n); + algoritmo = new Insercao(n); + //algoritmo = new Mergesort(n); + //algoritmo = new Quicksort(n); + //algoritmo = new Radixsort(n); + //algoritmo = new Selecao(n); + //algoritmo = new Shellsort(n); + + + //Geracao do conjunto a ser ordenado + //algoritmo.aleatorio(); + algoritmo.crescente(); + //algoritmo.decrescente(); + + + //Mostrar o conjunto a ser ordenado + //algoritmo.mostrar(); + + + //Execucao do algoritmo de ordenacao + inicio = algoritmo.now(); + algoritmo.sort(); + fim = algoritmo.now(); + + + //Mostrar o conjunto ordenado, tempo de execucao e status da ordenacao + //algoritmo.mostrar(); + System.out.println("Tempo para ordenar: " + (fim-inicio)/1000.0 + " s."); + System.out.println("isOrdenado: " + algoritmo.isOrdenado()); + } +} diff --git a/fonte/u03 Ordenação em memória principal/java/Quicksort.java b/Codigos/u03 Ordenação em memória principal/java/Quicksort.java similarity index 95% rename from fonte/u03 Ordenação em memória principal/java/Quicksort.java rename to Codigos/u03 Ordenação em memória principal/java/Quicksort.java index c2ac27f..7aa9fcd 100644 --- a/fonte/u03 Ordenação em memória principal/java/Quicksort.java +++ b/Codigos/u03 Ordenação em memória principal/java/Quicksort.java @@ -1,53 +1,53 @@ -/** - * Algoritmo de ordenacao Quicksort - * @author Max do Val Machado - * @version 3 08/2020 - */ -class Quicksort extends Geracao { - - /** - * Construtor. - */ - public Quicksort(){ - super(); - } - - - /** - * Construtor. - * @param int tamanho do array de numeros inteiros. - */ - public Quicksort(int tamanho){ - super(tamanho); - } - - - /** - * Algoritmo de ordenacao Quicksort. - */ - @Override - public void sort() { - quicksort(0, n-1); - } - - /** - * Algoritmo de ordenacao Quicksort. - * @param int esq inicio do array a ser ordenado - * @param int dir fim do array a ser ordenado - */ - private void quicksort(int esq, int dir) { - int i = esq, j = dir; - int pivo = array[(dir+esq)/2]; - while (i <= j) { - while (array[i] < pivo) i++; - while (array[j] > pivo) j--; - if (i <= j) { - swap(i, j); - i++; - j--; - } - } - if (esq < j) quicksort(esq, j); - if (i < dir) quicksort(i, dir); - } -} +/** + * Algoritmo de ordenacao Quicksort + * @author Max do Val Machado + * @version 3 08/2020 + */ +class Quicksort extends Geracao { + + /** + * Construtor. + */ + public Quicksort(){ + super(); + } + + + /** + * Construtor. + * @param int tamanho do array de numeros inteiros. + */ + public Quicksort(int tamanho){ + super(tamanho); + } + + + /** + * Algoritmo de ordenacao Quicksort. + */ + @Override + public void sort() { + quicksort(0, n-1); + } + + /** + * Algoritmo de ordenacao Quicksort. + * @param int esq inicio do array a ser ordenado + * @param int dir fim do array a ser ordenado + */ + private void quicksort(int esq, int dir) { + int i = esq, j = dir; + int pivo = array[(dir+esq)/2]; + while (i <= j) { + while (array[i] < pivo) i++; + while (array[j] > pivo) j--; + if (i <= j) { + swap(i, j); + i++; + j--; + } + } + if (esq < j) quicksort(esq, j); + if (i < dir) quicksort(i, dir); + } +} diff --git a/fonte/u03 Ordenação em memória principal/java/Radixsort.java b/Codigos/u03 Ordenação em memória principal/java/Radixsort.java similarity index 95% rename from fonte/u03 Ordenação em memória principal/java/Radixsort.java rename to Codigos/u03 Ordenação em memória principal/java/Radixsort.java index e7d7b93..96a3d3c 100644 --- a/fonte/u03 Ordenação em memória principal/java/Radixsort.java +++ b/Codigos/u03 Ordenação em memória principal/java/Radixsort.java @@ -1,82 +1,82 @@ -/** - * Metodo de ordenacao por contagem - * @author Daniel Capanema - * @version 1 04/2023 - */ - -class Radixsort extends Geracao { - - /** - * Construtor. - */ - public Radixsort(){ - super(); - } - - - /** - * Construtor. - * @param int tamanho do array de numeros inteiros. - */ - public Radixsort(int tamanho){ - super(tamanho); - } - - - /** - * Algoritmo de ordenacao Countingsort. - */ - @Override - public void sort() { - int max = getMaior(); - for (int exp = 1; max/exp > 0; exp *= 10) { - sort(exp); - } - } - - public void sort(int exp) { - int[] count = new int[10]; - int[] output = new int[n]; - - //Inicializar cada posicao do array de contagem - for (int i = 0; i < 10; count[i] = 0, i++); - - //Agora, o count[i] contem o numero de elemento iguais a i - for (int i = 0; i < n; i++) { - count[(array[i]/exp) % 10]++; - } - - //Agora, o count[i] contem o numero de elemento menores ou iguais a i - for (int i = 1; i < 10; i++) { - count[i] += count[i-1]; - } - - //Ordenando - for (int i = n-1; i >= 0; i--) { - output[count[(array[i]/exp) % 10] - 1] = array[i]; - count[(array[i]/exp) % 10]--; - } - - //Copiando para o array original - for (int i = 0; i < n; i++) { - array[i] = output[i]; - } - } - - - - /** - * Retorna o maior elemento do array. - * @return maior elemento - */ - public int getMaior() { - int maior = array[0]; - - for (int i = 1; i < n; i++) { - if(maior < array[i]){ - maior = array[i]; - } - } - return maior; - } -} +/** + * Metodo de ordenacao por contagem + * @author Daniel Capanema + * @version 1 04/2023 + */ + +class Radixsort extends Geracao { + + /** + * Construtor. + */ + public Radixsort(){ + super(); + } + + + /** + * Construtor. + * @param int tamanho do array de numeros inteiros. + */ + public Radixsort(int tamanho){ + super(tamanho); + } + + + /** + * Algoritmo de ordenacao Countingsort. + */ + @Override + public void sort() { + int max = getMaior(); + for (int exp = 1; max/exp > 0; exp *= 10) { + sort(exp); + } + } + + public void sort(int exp) { + int[] count = new int[10]; + int[] output = new int[n]; + + //Inicializar cada posicao do array de contagem + for (int i = 0; i < 10; count[i] = 0, i++); + + //Agora, o count[i] contem o numero de elemento iguais a i + for (int i = 0; i < n; i++) { + count[(array[i]/exp) % 10]++; + } + + //Agora, o count[i] contem o numero de elemento menores ou iguais a i + for (int i = 1; i < 10; i++) { + count[i] += count[i-1]; + } + + //Ordenando + for (int i = n-1; i >= 0; i--) { + output[count[(array[i]/exp) % 10] - 1] = array[i]; + count[(array[i]/exp) % 10]--; + } + + //Copiando para o array original + for (int i = 0; i < n; i++) { + array[i] = output[i]; + } + } + + + + /** + * Retorna o maior elemento do array. + * @return maior elemento + */ + public int getMaior() { + int maior = array[0]; + + for (int i = 1; i < n; i++) { + if(maior < array[i]){ + maior = array[i]; + } + } + return maior; + } +} diff --git a/fonte/u03 Ordenação em memória principal/java/Selecao.java b/Codigos/u03 Ordenação em memória principal/java/Selecao.java similarity index 94% rename from fonte/u03 Ordenação em memória principal/java/Selecao.java rename to Codigos/u03 Ordenação em memória principal/java/Selecao.java index ca3ac67..5eb0117 100644 --- a/fonte/u03 Ordenação em memória principal/java/Selecao.java +++ b/Codigos/u03 Ordenação em memória principal/java/Selecao.java @@ -1,41 +1,41 @@ -/** - * Algoritmo de ordenacao por selecao - * @author Max do Val Machado - * @version 3 08/2020 - */ - -class Selecao extends Geracao { - - /** - * Construtor. - */ - public Selecao(){ - super(); - } - - - /** - * Construtor. - * @param int tamanho do array de numeros inteiros. - */ - public Selecao(int tamanho){ - super(tamanho); - } - - - /** - * Algoritmo de ordenacao por selecao. - */ - @Override - public void sort() { - for (int i = 0; i < (n - 1); i++) { - int menor = i; - for (int j = (i + 1); j < n; j++){ - if (array[menor] > array[j]){ - menor = j; - } - } - swap(menor, i); - } - } -} +/** + * Algoritmo de ordenacao por selecao + * @author Max do Val Machado + * @version 3 08/2020 + */ + +class Selecao extends Geracao { + + /** + * Construtor. + */ + public Selecao(){ + super(); + } + + + /** + * Construtor. + * @param int tamanho do array de numeros inteiros. + */ + public Selecao(int tamanho){ + super(tamanho); + } + + + /** + * Algoritmo de ordenacao por selecao. + */ + @Override + public void sort() { + for (int i = 0; i < (n - 1); i++) { + int menor = i; + for (int j = (i + 1); j < n; j++){ + if (array[menor] > array[j]){ + menor = j; + } + } + swap(menor, i); + } + } +} diff --git a/fonte/u03 Ordenação em memória principal/java/Shellsort.java b/Codigos/u03 Ordenação em memória principal/java/Shellsort.java similarity index 94% rename from fonte/u03 Ordenação em memória principal/java/Shellsort.java rename to Codigos/u03 Ordenação em memória principal/java/Shellsort.java index d268087..dd86c77 100644 --- a/fonte/u03 Ordenação em memória principal/java/Shellsort.java +++ b/Codigos/u03 Ordenação em memória principal/java/Shellsort.java @@ -1,60 +1,60 @@ -/** - * Algoritmo de ordenacao Shellsort - * @author Max do Val Machado - * @version 3 08/2020 - */ - -class Shellsort extends Geracao { - - /** - * Construtor. - */ - public Shellsort(){ - super(); - } - - - /** - * Construtor. - * @param int tamanho do array de numeros inteiros. - */ - public Shellsort(int tamanho){ - super(tamanho); - } - - - /** - * Algoritmo de ordenacao Shellsort. - */ - @Override - public void sort() { - int h = 1; - - do { h = (h * 3) + 1; } while (h < n); - - do { - h /= 3; - for(int cor = 0; cor < h; cor++){ - insercaoPorCor(cor, h); - } - } while (h != 1); - } - - - /** - * Metodo que efetua a insercao nos pseudo-arrays do Shellsort. - * @param int cor cor do pseudo array. - * @param int h passo do shelsort - */ - public void insercaoPorCor(int cor, int h){ - for (int i = (h + cor); i < n; i+=h) { - int tmp = array[i]; - int j = i - h; - while ((j >= 0) && (array[j] > tmp)) { - array[j + h] = array[j]; - j-=h; - } - array[j + h] = tmp; - } - } -} +/** + * Algoritmo de ordenacao Shellsort + * @author Max do Val Machado + * @version 3 08/2020 + */ + +class Shellsort extends Geracao { + + /** + * Construtor. + */ + public Shellsort(){ + super(); + } + + + /** + * Construtor. + * @param int tamanho do array de numeros inteiros. + */ + public Shellsort(int tamanho){ + super(tamanho); + } + + + /** + * Algoritmo de ordenacao Shellsort. + */ + @Override + public void sort() { + int h = 1; + + do { h = (h * 3) + 1; } while (h < n); + + do { + h /= 3; + for(int cor = 0; cor < h; cor++){ + insercaoPorCor(cor, h); + } + } while (h != 1); + } + + + /** + * Metodo que efetua a insercao nos pseudo-arrays do Shellsort. + * @param int cor cor do pseudo array. + * @param int h passo do shelsort + */ + public void insercaoPorCor(int cor, int h){ + for (int i = (h + cor); i < n; i+=h) { + int tmp = array[i]; + int j = i - h; + while ((j >= 0) && (array[j] > tmp)) { + array[j + h] = array[j]; + j-=h; + } + array[j + h] = tmp; + } + } +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/c/celula.h b/Codigos/u04 Estruturas de dados básicas flexíveis/c/celula.h similarity index 96% rename from fonte/u04 Estruturas de dados básicas flexíveis/c/celula.h rename to Codigos/u04 Estruturas de dados básicas flexíveis/c/celula.h index 32f5d3f..13e326d 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/c/celula.h +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/c/celula.h @@ -1,32 +1,32 @@ - #ifndef CELULA_H - #define CELULA_H - //============================================================================= -#include -#include - //============================================================================= -typedef struct Celula{ - int elemento; - struct Celula *prox; -}Celula; -//============================================================================= -Celula* new_celula(int elemento){ - Celula *temp = (Celula*)malloc(sizeof(Celula)); - temp->elemento = elemento; - temp->prox = NULL; - return temp; -} - //============================================================================= - typedef struct CelulaDupla{ - int elemento; - struct CelulaDupla *prox, *ant; -}CelulaDupla; -//============================================================================= -CelulaDupla* new_celula_dupla(int elemento){ - CelulaDupla *temp = (CelulaDupla*)malloc(sizeof(CelulaDupla)); - temp->elemento = elemento; - temp->ant = NULL; - temp->prox = NULL; - return temp; -} - //============================================================================= + #ifndef CELULA_H + #define CELULA_H + //============================================================================= +#include +#include + //============================================================================= +typedef struct Celula{ + int elemento; + struct Celula *prox; +}Celula; +//============================================================================= +Celula* new_celula(int elemento){ + Celula *temp = (Celula*)malloc(sizeof(Celula)); + temp->elemento = elemento; + temp->prox = NULL; + return temp; +} + //============================================================================= + typedef struct CelulaDupla{ + int elemento; + struct CelulaDupla *prox, *ant; +}CelulaDupla; +//============================================================================= +CelulaDupla* new_celula_dupla(int elemento){ + CelulaDupla *temp = (CelulaDupla*)malloc(sizeof(CelulaDupla)); + temp->elemento = elemento; + temp->ant = NULL; + temp->prox = NULL; + return temp; +} + //============================================================================= #endif \ No newline at end of file diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/c/coletalixo/a.out b/Codigos/u04 Estruturas de dados básicas flexíveis/c/coletalixo/a.out similarity index 100% rename from fonte/u04 Estruturas de dados básicas flexíveis/c/coletalixo/a.out rename to Codigos/u04 Estruturas de dados básicas flexíveis/c/coletalixo/a.out diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/c/coletalixo/coletalixo.c b/Codigos/u04 Estruturas de dados básicas flexíveis/c/coletalixo/coletalixo.c similarity index 94% rename from fonte/u04 Estruturas de dados básicas flexíveis/c/coletalixo/coletalixo.c rename to Codigos/u04 Estruturas de dados básicas flexíveis/c/coletalixo/coletalixo.c index 4acc597..71a726b 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/c/coletalixo/coletalixo.c +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/c/coletalixo/coletalixo.c @@ -1,38 +1,38 @@ -#include -#include -#define true 1 - -typedef struct Celula { - int elemento; // Elemento inserido na celula. - struct Celula* prox; // Aponta a celula prox. -} Celula; - -Celula* novaCelula(int elemento) { - Celula* nova = (Celula*) malloc(sizeof(Celula)); - nova->elemento = elemento; - nova->prox = NULL; - return nova; -} - -Celula* primeiro; - -void start () { - primeiro = novaCelula(-1); -} - -void inserir(int x) { - primeiro->prox = novaCelula(x); - Celula* tmp = primeiro; - primeiro = primeiro->prox; - free(tmp); -} - -int main(int argc, char** argv) { - start(); - while(true){ - inserir(0); - } - return 0; -} - - +#include +#include +#define true 1 + +typedef struct Celula { + int elemento; // Elemento inserido na celula. + struct Celula* prox; // Aponta a celula prox. +} Celula; + +Celula* novaCelula(int elemento) { + Celula* nova = (Celula*) malloc(sizeof(Celula)); + nova->elemento = elemento; + nova->prox = NULL; + return nova; +} + +Celula* primeiro; + +void start () { + primeiro = novaCelula(-1); +} + +void inserir(int x) { + primeiro->prox = novaCelula(x); + Celula* tmp = primeiro; + primeiro = primeiro->prox; + free(tmp); +} + +int main(int argc, char** argv) { + start(); + while(true){ + inserir(0); + } + return 0; +} + + diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/c/fila.h b/Codigos/u04 Estruturas de dados básicas flexíveis/c/fila.h similarity index 96% rename from fonte/u04 Estruturas de dados básicas flexíveis/c/fila.h rename to Codigos/u04 Estruturas de dados básicas flexíveis/c/fila.h index b1ce120..0a287c7 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/c/fila.h +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/c/fila.h @@ -1,62 +1,62 @@ -#ifndef FILA_H -#define FILA_H -//============================================================================= -#include -#include -#include -#include -#include "celula.h" -//============================================================================= -typedef struct Fila{ - struct Celula *primeiro, *ultimo; - int size; -} Fila; -//============================================================================= -Fila new_fila(){ - Fila temp; - temp.primeiro = temp.ultimo = new_celula(-1); - temp.size = 0; - return temp; -} -//============================================================================= -int size_fila(Fila *f){ - return f->size; -} -//============================================================================= -void enqueue_fila(Fila *f, int elemento){ - f->ultimo->prox = new_celula(elemento); - f->ultimo = f->ultimo->prox; - f->size++; -} -//============================================================================= -int dequeue_fila(Fila *f){ - - if (f->primeiro == f->ultimo){ - printf("\nA fila esta vazia!\n"); - return INT_MIN; - } - - Celula *temp = f->primeiro; - f->primeiro = f->primeiro->prox; - f->size--; - free(temp); - return f->primeiro->elemento; -} -//============================================================================= -void print_fila(Fila *f){ - Celula *i; - printf("["); - for (i = f->primeiro->prox; i != NULL; i = i->prox) - { - printf("%d, ", i->elemento); - } - printf("] \n"); -} -//============================================================================= -void delete_fila(Fila *f){ - while(f->size > 0) - dequeue_fila(f); - free(f->primeiro); -} -//============================================================================= +#ifndef FILA_H +#define FILA_H +//============================================================================= +#include +#include +#include +#include +#include "celula.h" +//============================================================================= +typedef struct Fila{ + struct Celula *primeiro, *ultimo; + int size; +} Fila; +//============================================================================= +Fila new_fila(){ + Fila temp; + temp.primeiro = temp.ultimo = new_celula(-1); + temp.size = 0; + return temp; +} +//============================================================================= +int size_fila(Fila *f){ + return f->size; +} +//============================================================================= +void enqueue_fila(Fila *f, int elemento){ + f->ultimo->prox = new_celula(elemento); + f->ultimo = f->ultimo->prox; + f->size++; +} +//============================================================================= +int dequeue_fila(Fila *f){ + + if (f->primeiro == f->ultimo){ + printf("\nA fila esta vazia!\n"); + return INT_MIN; + } + + Celula *temp = f->primeiro; + f->primeiro = f->primeiro->prox; + f->size--; + free(temp); + return f->primeiro->elemento; +} +//============================================================================= +void print_fila(Fila *f){ + Celula *i; + printf("["); + for (i = f->primeiro->prox; i != NULL; i = i->prox) + { + printf("%d, ", i->elemento); + } + printf("] \n"); +} +//============================================================================= +void delete_fila(Fila *f){ + while(f->size > 0) + dequeue_fila(f); + free(f->primeiro); +} +//============================================================================= #endif \ No newline at end of file diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/c/fila/fila.c b/Codigos/u04 Estruturas de dados básicas flexíveis/c/fila/fila.c similarity index 94% rename from fonte/u04 Estruturas de dados básicas flexíveis/c/fila/fila.c rename to Codigos/u04 Estruturas de dados básicas flexíveis/c/fila/fila.c index c1ec78e..1560643 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/c/fila/fila.c +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/c/fila/fila.c @@ -1,135 +1,135 @@ -/** - * Fila flexivel - * @author Max do Val Machado - * @version 2 01/2015 - */ -#include -#include -#include - -//TIPO CELULA =================================================================== -typedef struct Celula { - int elemento; // Elemento inserido na celula. - struct Celula* prox; // Aponta a celula prox. -} Celula; - -Celula* novaCelula(int elemento) { - Celula* nova = (Celula*) malloc(sizeof(Celula)); - nova->elemento = elemento; - nova->prox = NULL; - return nova; -} - -//FILA PROPRIAMENTE DITA ======================================================== -Celula* primeiro; -Celula* ultimo; - - -/** - * Cria uma fila sem elementos (somente no cabeca). - */ -void start () { - primeiro = novaCelula(-1); - ultimo = primeiro; -} - - -/** - * Insere elemento na fila (politica FIFO). - * @param x int Elemento a inserir. - */ -void inserir(int x) { - ultimo->prox = novaCelula(x); - ultimo = ultimo->prox; -} - - -/** - * Remove elemento da fila (politica FIFO). - * @return Elemento removido. - */ -int remover() { - if (primeiro == ultimo) { - errx(1, "Erro ao remover!"); - } - Celula* tmp = primeiro; - primeiro = primeiro->prox; - int resp = primeiro->elemento; - tmp->prox = NULL; - free(tmp); - tmp = NULL; - return resp; -} - - -/** - * Mostra os elementos separados por espacos. - */ -void mostrar() { - Celula* i; - printf("[ "); - for (i = primeiro->prox; i != NULL; i = i->prox) { - printf("%d ", i->elemento); - } - printf("] \n"); -} - - -//METODO PRINCIPAL ============================================================== -int main(int argc, char** argv){ - int x1, x2, x3; - printf("\n==== FILA FLEXIVEL ===="); - - start(); - - inserir(5); - inserir(7); - inserir(8); - inserir(9); - - printf("\nApos insercoes(5, 7, 8, 9): "); - mostrar(); - - x1 = remover(); - x2 = remover(); - - printf("\nApos remocoes (%d, %d):", x1, x2); - mostrar(); - - inserir(3); - inserir(4); - - - printf("\nApos insercoes(3, 4): "); - mostrar(); - - x1 = remover(); - x2 = remover(); - x3 = remover(); - - printf("\nApos remocoes (%d, %d, %d):", x1, x2, x3); - mostrar(); - - inserir(4); - inserir(5); - - printf("\nApos insercoes(4, 5): "); - mostrar(); - - x1 = remover(); - x2 = remover(); - - printf("\nApos remocoes (%d, %d):", x1, x2); - mostrar(); - - inserir(6); - inserir(7); - - printf("\nApos insercoes(6, 7): "); - mostrar(); - - x1 = remover(); - - printf("\nApos remocao (%d):", x1); - mostrar(); -} +/** + * Fila flexivel + * @author Max do Val Machado + * @version 2 01/2015 + */ +#include +#include +#include + +//TIPO CELULA =================================================================== +typedef struct Celula { + int elemento; // Elemento inserido na celula. + struct Celula* prox; // Aponta a celula prox. +} Celula; + +Celula* novaCelula(int elemento) { + Celula* nova = (Celula*) malloc(sizeof(Celula)); + nova->elemento = elemento; + nova->prox = NULL; + return nova; +} + +//FILA PROPRIAMENTE DITA ======================================================== +Celula* primeiro; +Celula* ultimo; + + +/** + * Cria uma fila sem elementos (somente no cabeca). + */ +void start () { + primeiro = novaCelula(-1); + ultimo = primeiro; +} + + +/** + * Insere elemento na fila (politica FIFO). + * @param x int Elemento a inserir. + */ +void inserir(int x) { + ultimo->prox = novaCelula(x); + ultimo = ultimo->prox; +} + + +/** + * Remove elemento da fila (politica FIFO). + * @return Elemento removido. + */ +int remover() { + if (primeiro == ultimo) { + errx(1, "Erro ao remover!"); + } + Celula* tmp = primeiro; + primeiro = primeiro->prox; + int resp = primeiro->elemento; + tmp->prox = NULL; + free(tmp); + tmp = NULL; + return resp; +} + + +/** + * Mostra os elementos separados por espacos. + */ +void mostrar() { + Celula* i; + printf("[ "); + for (i = primeiro->prox; i != NULL; i = i->prox) { + printf("%d ", i->elemento); + } + printf("] \n"); +} + + +//METODO PRINCIPAL ============================================================== +int main(int argc, char** argv){ + int x1, x2, x3; + printf("\n==== FILA FLEXIVEL ===="); + + start(); + + inserir(5); + inserir(7); + inserir(8); + inserir(9); + + printf("\nApos insercoes(5, 7, 8, 9): "); + mostrar(); + + x1 = remover(); + x2 = remover(); + + printf("\nApos remocoes (%d, %d):", x1, x2); + mostrar(); + + inserir(3); + inserir(4); + + + printf("\nApos insercoes(3, 4): "); + mostrar(); + + x1 = remover(); + x2 = remover(); + x3 = remover(); + + printf("\nApos remocoes (%d, %d, %d):", x1, x2, x3); + mostrar(); + + inserir(4); + inserir(5); + + printf("\nApos insercoes(4, 5): "); + mostrar(); + + x1 = remover(); + x2 = remover(); + + printf("\nApos remocoes (%d, %d):", x1, x2); + mostrar(); + + inserir(6); + inserir(7); + + printf("\nApos insercoes(6, 7): "); + mostrar(); + + x1 = remover(); + + printf("\nApos remocao (%d):", x1); + mostrar(); +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/c/fila_teste.c b/Codigos/u04 Estruturas de dados básicas flexíveis/c/fila_teste.c similarity index 95% rename from fonte/u04 Estruturas de dados básicas flexíveis/c/fila_teste.c rename to Codigos/u04 Estruturas de dados básicas flexíveis/c/fila_teste.c index 4d2c003..1eb1d51 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/c/fila_teste.c +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/c/fila_teste.c @@ -1,27 +1,27 @@ -#include "fila.h" -//============================================================================= -int main() { - - Fila f; - int i, x1, x2, x3; - printf("==== FILA FLEXIVEL ====\n"); - - f = new_fila(); - - for(i=0; i < 10; i++) - enqueue_fila(&f, i); - - printf("Apos inserrir os dados: \n"); - print_fila(&f); - - x1 = dequeue_fila(&f); - x2 = dequeue_fila(&f); - x3 = dequeue_fila(&f); - - printf("Apos as remocoes (%d, %d, %d) \n", x1, x2, x3); - print_fila(&f); - - delete_fila(&f); - - return 0; +#include "fila.h" +//============================================================================= +int main() { + + Fila f; + int i, x1, x2, x3; + printf("==== FILA FLEXIVEL ====\n"); + + f = new_fila(); + + for(i=0; i < 10; i++) + enqueue_fila(&f, i); + + printf("Apos inserrir os dados: \n"); + print_fila(&f); + + x1 = dequeue_fila(&f); + x2 = dequeue_fila(&f); + x3 = dequeue_fila(&f); + + printf("Apos as remocoes (%d, %d, %d) \n", x1, x2, x3); + print_fila(&f); + + delete_fila(&f); + + return 0; } \ No newline at end of file diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/c/lista.h b/Codigos/u04 Estruturas de dados básicas flexíveis/c/lista.h similarity index 96% rename from fonte/u04 Estruturas de dados básicas flexíveis/c/lista.h rename to Codigos/u04 Estruturas de dados básicas flexíveis/c/lista.h index 52ff6a5..26ea2cb 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/c/lista.h +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/c/lista.h @@ -1,123 +1,123 @@ -#ifndef LISTA_H -#define LISTA_H -//============================================================================= -#include -#include -#include -#include -#include "celula.h" -//============================================================================= -typedef struct Lista{ - struct Celula *primeiro, *ultimo; - int size; -} Lista; -//============================================================================= -Lista new_lista(){ - Lista temp; - temp.primeiro = temp.ultimo = new_celula(-1); - temp.size = 0; - return temp; -} -//============================================================================= -int size_lista(Lista *l){ - return l->size; -} -//============================================================================= -void insert_begin(Lista *l, int elemento){ - - Celula *temp = new_celula(-1); - temp->prox = l->primeiro; - - l->primeiro->elemento = elemento; - l->primeiro = temp; - l->size++; -} -//============================================================================= -void insert_end(Lista *l, int elemento){ - l->ultimo->prox = new_celula(elemento); - l->ultimo = l->ultimo->prox; - l->size++; -} -//============================================================================= -void insert_at(Lista *l, int elemento, int pos){ - - if(pos < 0 || pos > l->size) - printf("Erro ao tentar inserir na posicao (%d/ tamanho = %d) invalida!", pos, l->size); - else if (pos == 0) - insert_begin(l, elemento); - else if (pos == l->size) - insert_end(l, elemento); - else{ - - Celula *ant = l->primeiro; - for(int i=0; iprox; - - Celula *temp = new_celula(elemento); - temp->prox = ant->prox; - ant->prox = temp; - l->size++; - } -} -//============================================================================= -int remove_at(Lista *l, int pos){ - - if(l->primeiro == l->ultimo){ - printf("\nA lista esta vazia!\n"); - return INT_MIN; - }else if(pos < 0 || pos > l->size-1) - printf("Erro ao tentar remover item da posicao (%d/ tamanho = %d) invalida!", pos, l->size); - else{ - - Celula *ant = l->primeiro; - for(int i=0; iprox; - - Celula *temp = ant->prox; - int elemento = temp->elemento; - - ant->prox = temp->prox; - free(temp); - - if(pos == l->size-1) - l->ultimo = ant; - - l->size--; - - return elemento; - } -} -//============================================================================= -int remove_begin(Lista *l){ - return remove_at(l, 0); -} -//============================================================================= -int remove_end(Lista *l){ - return remove_at(l, l->size-1); -} -//============================================================================= -bool pesquisar_lista(Lista *l, int elemento){ - Celula *i; - for (i = l->primeiro->prox; i != NULL; i = i->prox) - if(i->elemento == elemento) - return true; - return false; -} -//============================================================================= -void print_lista(Lista *l){ - Celula *i; - printf("["); - for (i = l->primeiro->prox; i != NULL; i = i->prox) - { - printf("%d, ", i->elemento); - } - printf("] \n"); -} -//============================================================================= -void delete_lista(Lista *l){ - while(l->size > 0) - remove_at(l,0); - free(l->primeiro); -} -//============================================================================= +#ifndef LISTA_H +#define LISTA_H +//============================================================================= +#include +#include +#include +#include +#include "celula.h" +//============================================================================= +typedef struct Lista{ + struct Celula *primeiro, *ultimo; + int size; +} Lista; +//============================================================================= +Lista new_lista(){ + Lista temp; + temp.primeiro = temp.ultimo = new_celula(-1); + temp.size = 0; + return temp; +} +//============================================================================= +int size_lista(Lista *l){ + return l->size; +} +//============================================================================= +void insert_begin(Lista *l, int elemento){ + + Celula *temp = new_celula(-1); + temp->prox = l->primeiro; + + l->primeiro->elemento = elemento; + l->primeiro = temp; + l->size++; +} +//============================================================================= +void insert_end(Lista *l, int elemento){ + l->ultimo->prox = new_celula(elemento); + l->ultimo = l->ultimo->prox; + l->size++; +} +//============================================================================= +void insert_at(Lista *l, int elemento, int pos){ + + if(pos < 0 || pos > l->size) + printf("Erro ao tentar inserir na posicao (%d/ tamanho = %d) invalida!", pos, l->size); + else if (pos == 0) + insert_begin(l, elemento); + else if (pos == l->size) + insert_end(l, elemento); + else{ + + Celula *ant = l->primeiro; + for(int i=0; iprox; + + Celula *temp = new_celula(elemento); + temp->prox = ant->prox; + ant->prox = temp; + l->size++; + } +} +//============================================================================= +int remove_at(Lista *l, int pos){ + + if(l->primeiro == l->ultimo){ + printf("\nA lista esta vazia!\n"); + return INT_MIN; + }else if(pos < 0 || pos > l->size-1) + printf("Erro ao tentar remover item da posicao (%d/ tamanho = %d) invalida!", pos, l->size); + else{ + + Celula *ant = l->primeiro; + for(int i=0; iprox; + + Celula *temp = ant->prox; + int elemento = temp->elemento; + + ant->prox = temp->prox; + free(temp); + + if(pos == l->size-1) + l->ultimo = ant; + + l->size--; + + return elemento; + } +} +//============================================================================= +int remove_begin(Lista *l){ + return remove_at(l, 0); +} +//============================================================================= +int remove_end(Lista *l){ + return remove_at(l, l->size-1); +} +//============================================================================= +bool pesquisar_lista(Lista *l, int elemento){ + Celula *i; + for (i = l->primeiro->prox; i != NULL; i = i->prox) + if(i->elemento == elemento) + return true; + return false; +} +//============================================================================= +void print_lista(Lista *l){ + Celula *i; + printf("["); + for (i = l->primeiro->prox; i != NULL; i = i->prox) + { + printf("%d, ", i->elemento); + } + printf("] \n"); +} +//============================================================================= +void delete_lista(Lista *l){ + while(l->size > 0) + remove_at(l,0); + free(l->primeiro); +} +//============================================================================= #endif \ No newline at end of file diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/c/lista_dupla.h b/Codigos/u04 Estruturas de dados básicas flexíveis/c/lista_dupla.h similarity index 96% rename from fonte/u04 Estruturas de dados básicas flexíveis/c/lista_dupla.h rename to Codigos/u04 Estruturas de dados básicas flexíveis/c/lista_dupla.h index c896f28..31340ed 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/c/lista_dupla.h +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/c/lista_dupla.h @@ -1,152 +1,152 @@ -#ifndef LISTADUPLA_H -#define LISTADUPLA_H -//============================================================================= -#include -#include -#include -#include -#include "celula.h" -//============================================================================= -typedef struct ListaDupla{ - struct CelulaDupla *primeiro, *ultimo; - int size; -} ListaDupla; -//============================================================================= -ListaDupla new_lista_dupla(){ - ListaDupla temp; - temp.primeiro = temp.ultimo = new_celula_dupla(-1); - temp.size = 0; - return temp; -} -//============================================================================= -int size_lista_dupla(ListaDupla *l){ - return l->size; -} -//============================================================================= -void insert_begin_dupla(ListaDupla *l, int elemento){ - - CelulaDupla *temp = new_celula_dupla(-1); - temp->prox = l->primeiro; - - l->primeiro->elemento = elemento; - l->primeiro->ant = temp; - l->primeiro = temp; - l->size++; -} -//============================================================================= -void insert_end_dupla(ListaDupla *l, int elemento){ - l->ultimo->prox = new_celula_dupla(elemento); - l->ultimo->prox->ant = l->ultimo; - l->ultimo = l->ultimo->prox; - l->size++; -} -//============================================================================= -void insert_at_dupla(ListaDupla *l, int elemento, int pos){ - - if(pos < 0 || pos > l->size) - printf("Erro ao tentar inserir na posicao (%d/ tamanho = %d) invalida!", pos, l->size); - else if (pos == 0) - insert_begin_dupla(l, elemento); - else if (pos == l->size) - insert_end_dupla(l, elemento); - else{ - - CelulaDupla *ant = l->primeiro; - for(int i=0; iprox; - - CelulaDupla *temp = new_celula_dupla(elemento); - temp->prox = ant->prox; - temp->prox->ant = temp; - temp->ant = ant; - ant->prox = temp; - l->size++; - } -} -//============================================================================= -int remove_end_dupla(ListaDupla *l){ - - if(l->primeiro == l->ultimo){ - printf("\nA lista esta vazia!\n"); - return INT_MIN; - } - - CelulaDupla *temp = l->ultimo; - int elemento = temp->elemento; - - l->ultimo = l->ultimo->ant; - l->ultimo->prox = NULL; - l->size--; - - free(temp); - - return elemento; -} -//============================================================================= -int remove_at_dupla(ListaDupla *l, int pos){ - - if(l->primeiro == l->ultimo){ - printf("\nA lista esta vazia!\n"); - return INT_MIN; - }else if(pos < 0 || pos > l->size-1) - printf("Erro ao tentar remover item da posicao (%d/ tamanho = %d) invalida!", pos, l->size); - else if(pos == l->size-1) - remove_end_dupla(l); - else{ - - CelulaDupla *ant = l->primeiro; - for(int i=0; iprox; - - CelulaDupla *temp = ant->prox; - int elemento = temp->elemento; - - temp->prox->ant = ant; - ant->prox = temp->prox; - free(temp); - - l->size--; - - return elemento; - } -} -//============================================================================= -int remove_begin_dupla(ListaDupla *l){ - return remove_at_dupla(l, 0); -} -//============================================================================= -bool pesquisar_lista_dupla(ListaDupla *l, int elemento){ - CelulaDupla *i; - for (i = l->primeiro->prox; i != NULL; i = i->prox) - if(i->elemento == elemento) - return true; - return false; -} -//============================================================================= -void print_lista_dupla(ListaDupla *l){ - CelulaDupla *i; - printf("["); - for (i = l->primeiro->prox; i != NULL; i = i->prox) - { - printf("%d, ", i->elemento); - } - printf("] \n"); -} -//============================================================================= -void print_lista_dupla_inverso(ListaDupla *l){ - CelulaDupla *i; - printf("["); - for (i = l->ultimo; i != l->primeiro; i = i->ant) - { - printf("%d, ", i->elemento); - } - printf("] \n"); -} -//============================================================================= -void delete_lista_dupla(ListaDupla *l){ - while(l->size > 0) - remove_at_dupla(l,0); - free(l->primeiro); -} -//============================================================================= +#ifndef LISTADUPLA_H +#define LISTADUPLA_H +//============================================================================= +#include +#include +#include +#include +#include "celula.h" +//============================================================================= +typedef struct ListaDupla{ + struct CelulaDupla *primeiro, *ultimo; + int size; +} ListaDupla; +//============================================================================= +ListaDupla new_lista_dupla(){ + ListaDupla temp; + temp.primeiro = temp.ultimo = new_celula_dupla(-1); + temp.size = 0; + return temp; +} +//============================================================================= +int size_lista_dupla(ListaDupla *l){ + return l->size; +} +//============================================================================= +void insert_begin_dupla(ListaDupla *l, int elemento){ + + CelulaDupla *temp = new_celula_dupla(-1); + temp->prox = l->primeiro; + + l->primeiro->elemento = elemento; + l->primeiro->ant = temp; + l->primeiro = temp; + l->size++; +} +//============================================================================= +void insert_end_dupla(ListaDupla *l, int elemento){ + l->ultimo->prox = new_celula_dupla(elemento); + l->ultimo->prox->ant = l->ultimo; + l->ultimo = l->ultimo->prox; + l->size++; +} +//============================================================================= +void insert_at_dupla(ListaDupla *l, int elemento, int pos){ + + if(pos < 0 || pos > l->size) + printf("Erro ao tentar inserir na posicao (%d/ tamanho = %d) invalida!", pos, l->size); + else if (pos == 0) + insert_begin_dupla(l, elemento); + else if (pos == l->size) + insert_end_dupla(l, elemento); + else{ + + CelulaDupla *ant = l->primeiro; + for(int i=0; iprox; + + CelulaDupla *temp = new_celula_dupla(elemento); + temp->prox = ant->prox; + temp->prox->ant = temp; + temp->ant = ant; + ant->prox = temp; + l->size++; + } +} +//============================================================================= +int remove_end_dupla(ListaDupla *l){ + + if(l->primeiro == l->ultimo){ + printf("\nA lista esta vazia!\n"); + return INT_MIN; + } + + CelulaDupla *temp = l->ultimo; + int elemento = temp->elemento; + + l->ultimo = l->ultimo->ant; + l->ultimo->prox = NULL; + l->size--; + + free(temp); + + return elemento; +} +//============================================================================= +int remove_at_dupla(ListaDupla *l, int pos){ + + if(l->primeiro == l->ultimo){ + printf("\nA lista esta vazia!\n"); + return INT_MIN; + }else if(pos < 0 || pos > l->size-1) + printf("Erro ao tentar remover item da posicao (%d/ tamanho = %d) invalida!", pos, l->size); + else if(pos == l->size-1) + remove_end_dupla(l); + else{ + + CelulaDupla *ant = l->primeiro; + for(int i=0; iprox; + + CelulaDupla *temp = ant->prox; + int elemento = temp->elemento; + + temp->prox->ant = ant; + ant->prox = temp->prox; + free(temp); + + l->size--; + + return elemento; + } +} +//============================================================================= +int remove_begin_dupla(ListaDupla *l){ + return remove_at_dupla(l, 0); +} +//============================================================================= +bool pesquisar_lista_dupla(ListaDupla *l, int elemento){ + CelulaDupla *i; + for (i = l->primeiro->prox; i != NULL; i = i->prox) + if(i->elemento == elemento) + return true; + return false; +} +//============================================================================= +void print_lista_dupla(ListaDupla *l){ + CelulaDupla *i; + printf("["); + for (i = l->primeiro->prox; i != NULL; i = i->prox) + { + printf("%d, ", i->elemento); + } + printf("] \n"); +} +//============================================================================= +void print_lista_dupla_inverso(ListaDupla *l){ + CelulaDupla *i; + printf("["); + for (i = l->ultimo; i != l->primeiro; i = i->ant) + { + printf("%d, ", i->elemento); + } + printf("] \n"); +} +//============================================================================= +void delete_lista_dupla(ListaDupla *l){ + while(l->size > 0) + remove_at_dupla(l,0); + free(l->primeiro); +} +//============================================================================= #endif \ No newline at end of file diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/c/lista_dupla_teste.c b/Codigos/u04 Estruturas de dados básicas flexíveis/c/lista_dupla_teste.c similarity index 96% rename from fonte/u04 Estruturas de dados básicas flexíveis/c/lista_dupla_teste.c rename to Codigos/u04 Estruturas de dados básicas flexíveis/c/lista_dupla_teste.c index 9bd54ee..2e01e51 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/c/lista_dupla_teste.c +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/c/lista_dupla_teste.c @@ -1,51 +1,51 @@ -#include "lista_dupla.h" -//============================================================================= -int main() { - - ListaDupla l; - int i, x1, x2, x3; - printf("==== LISTA FLEXIVEL ====\n"); - - l = new_lista_dupla(); - - for(i=0; i < 5; i++) - insert_end_dupla(&l, i); - - printf("Apos inserir os dados: \n"); - print_lista_dupla(&l); - print_lista_dupla_inverso(&l); - - printf("Apos inserir no inicio: \n"); - insert_begin_dupla(&l, i++); - print_lista_dupla(&l); - print_lista_dupla_inverso(&l); - - printf("Apos inserir no final: \n"); - insert_end_dupla(&l, i++); - print_lista_dupla(&l); - print_lista_dupla_inverso(&l); - - printf("Apos inserir na posicao 4: \n"); - insert_at_dupla(&l, i++, 4); - print_lista_dupla(&l); - print_lista_dupla_inverso(&l); - - printf("Apos remover no inicio: \n"); - x1 = remove_begin_dupla(&l); - print_lista_dupla(&l); - print_lista_dupla_inverso(&l); - - printf("Apos remover no final: \n"); - x1 = remove_end_dupla(&l); - print_lista_dupla(&l); - print_lista_dupla_inverso(&l); - - printf("Apos remover na posicao 2: \n"); - x1 = remove_at_dupla(&l, 2); - print_lista_dupla(&l); - print_lista_dupla_inverso(&l); - - delete_lista_dupla(&l); - - return 0; +#include "lista_dupla.h" +//============================================================================= +int main() { + + ListaDupla l; + int i, x1, x2, x3; + printf("==== LISTA FLEXIVEL ====\n"); + + l = new_lista_dupla(); + + for(i=0; i < 5; i++) + insert_end_dupla(&l, i); + + printf("Apos inserir os dados: \n"); + print_lista_dupla(&l); + print_lista_dupla_inverso(&l); + + printf("Apos inserir no inicio: \n"); + insert_begin_dupla(&l, i++); + print_lista_dupla(&l); + print_lista_dupla_inverso(&l); + + printf("Apos inserir no final: \n"); + insert_end_dupla(&l, i++); + print_lista_dupla(&l); + print_lista_dupla_inverso(&l); + + printf("Apos inserir na posicao 4: \n"); + insert_at_dupla(&l, i++, 4); + print_lista_dupla(&l); + print_lista_dupla_inverso(&l); + + printf("Apos remover no inicio: \n"); + x1 = remove_begin_dupla(&l); + print_lista_dupla(&l); + print_lista_dupla_inverso(&l); + + printf("Apos remover no final: \n"); + x1 = remove_end_dupla(&l); + print_lista_dupla(&l); + print_lista_dupla_inverso(&l); + + printf("Apos remover na posicao 2: \n"); + x1 = remove_at_dupla(&l, 2); + print_lista_dupla(&l); + print_lista_dupla_inverso(&l); + + delete_lista_dupla(&l); + + return 0; } \ No newline at end of file diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/c/lista_teste.c b/Codigos/u04 Estruturas de dados básicas flexíveis/c/lista_teste.c similarity index 95% rename from fonte/u04 Estruturas de dados básicas flexíveis/c/lista_teste.c rename to Codigos/u04 Estruturas de dados básicas flexíveis/c/lista_teste.c index f33491d..01b92fe 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/c/lista_teste.c +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/c/lista_teste.c @@ -1,44 +1,44 @@ -#include "lista.h" -//============================================================================= -int main() { - - Lista l; - int i, x1, x2, x3; - printf("==== LISTA FLEXIVEL ====\n"); - - l = new_lista(); - - for(i=0; i < 5; i++) - insert_end(&l, i); - - printf("Apos inserir os dados: \n"); - print_lista(&l); - - printf("Apos inserir no inicio: \n"); - insert_begin(&l, i++); - print_lista(&l); - - printf("Apos inserir no final: \n"); - insert_end(&l, i++); - print_lista(&l); - - printf("Apos inserir na posicao 4: \n"); - insert_at(&l, i++, 4); - print_lista(&l); - - printf("Apos remover no inicio: \n"); - x1 = remove_begin(&l); - print_lista(&l); - - printf("Apos remover no final: \n"); - x1 = remove_end(&l); - print_lista(&l); - - printf("Apos remover na posicao 2: \n"); - x1 = remove_at(&l, 2); - print_lista(&l); - - delete_lista(&l); - - return 0; +#include "lista.h" +//============================================================================= +int main() { + + Lista l; + int i, x1, x2, x3; + printf("==== LISTA FLEXIVEL ====\n"); + + l = new_lista(); + + for(i=0; i < 5; i++) + insert_end(&l, i); + + printf("Apos inserir os dados: \n"); + print_lista(&l); + + printf("Apos inserir no inicio: \n"); + insert_begin(&l, i++); + print_lista(&l); + + printf("Apos inserir no final: \n"); + insert_end(&l, i++); + print_lista(&l); + + printf("Apos inserir na posicao 4: \n"); + insert_at(&l, i++, 4); + print_lista(&l); + + printf("Apos remover no inicio: \n"); + x1 = remove_begin(&l); + print_lista(&l); + + printf("Apos remover no final: \n"); + x1 = remove_end(&l); + print_lista(&l); + + printf("Apos remover na posicao 2: \n"); + x1 = remove_at(&l, 2); + print_lista(&l); + + delete_lista(&l); + + return 0; } \ No newline at end of file diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/c/listadupla/listadupla.c b/Codigos/u04 Estruturas de dados básicas flexíveis/c/listadupla/listadupla.c similarity index 95% rename from fonte/u04 Estruturas de dados básicas flexíveis/c/listadupla/listadupla.c rename to Codigos/u04 Estruturas de dados básicas flexíveis/c/listadupla/listadupla.c index 3bb2812..63c450f 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/c/listadupla/listadupla.c +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/c/listadupla/listadupla.c @@ -1,267 +1,267 @@ -/** - * Lista dupla dinamica - * @author Max do Val Machado - * @version 2 01/2015 - */ -#include -#include -#include - -#define bool short -#define true 1 -#define false 0 - -//TIPO CELULA =================================================================== -typedef struct CelulaDupla { - int elemento; // Elemento inserido na celula. - struct CelulaDupla* prox; // Aponta a celula prox. - struct CelulaDupla* ant; // Aponta a celula anterior. -} CelulaDupla; - -CelulaDupla* novaCelulaDupla(int elemento) { - CelulaDupla* nova = (CelulaDupla*) malloc(sizeof(CelulaDupla)); - nova->elemento = elemento; - nova->ant = nova->prox = NULL; - return nova; -} - -//LISTA PROPRIAMENTE DITA ======================================================= -CelulaDupla* primeiro; -CelulaDupla* ultimo; - - -/** - * Cria uma lista dupla sem elementos (somente no cabeca). - */ -void start () { - primeiro = novaCelulaDupla(-1); - ultimo = primeiro; -} - - -/** - * Insere um elemento na primeira posicao da lista. - * @param x int elemento a ser inserido. - */ -void inserirInicio(int x) { - CelulaDupla* tmp = novaCelulaDupla(x); - - tmp->ant = primeiro; - tmp->prox = primeiro->prox; - primeiro->prox = tmp; - if (primeiro == ultimo) { - ultimo = tmp; - } else { - tmp->prox->ant = tmp; - } - tmp = NULL; -} - - -/** - * Insere um elemento na ultima posicao da lista. - * @param x int elemento a ser inserido. - */ -void inserirFim(int x) { - ultimo->prox = novaCelulaDupla(x); - ultimo->prox->ant = ultimo; - ultimo = ultimo->prox; -} - - -/** - * Remove um elemento da primeira posicao da lista. - * @return resp int elemento a ser removido. - */ -int removerInicio() { - if (primeiro == ultimo) { - errx(1, "Erro ao remover (vazia)!"); - } - - CelulaDupla* tmp = primeiro; - primeiro = primeiro->prox; - int resp = primeiro->elemento; - tmp->prox = primeiro->ant = NULL; - free(tmp); - tmp = NULL; - return resp; -} - - -/** - * Remove um elemento da ultima posicao da lista. - * @return resp int elemento a ser removido. - */ -int removerFim() { - if (primeiro == ultimo) { - errx(1, "Erro ao remover (vazia)!"); - } - int resp = ultimo->elemento; - ultimo = ultimo->ant; - ultimo->prox->ant = NULL; - free(ultimo->prox); - ultimo->prox = NULL; - return resp; -} - - -/** - * Calcula e retorna o tamanho, em numero de elementos, da lista. - * @return resp int tamanho - */ -int tamanho() { - int tamanho = 0; - CelulaDupla* i; - for(i = primeiro; i != ultimo; i = i->prox, tamanho++); - return tamanho; -} - - -/** - * Insere um elemento em uma posicao especifica considerando que o - * primeiro elemento valido esta na posicao 0. - * @param x int elemento a ser inserido. - * @param pos int posicao da insercao. - * @throws Exception Se posicao invalida. - */ -void inserir(int x, int pos) { - - int tam = tamanho(); - - if(pos < 0 || pos > tam){ - errx(1, "Erro ao remover (posicao %d/%d invalida!", pos, tam); - } else if (pos == 0){ - inserirInicio(x); - } else if (pos == tam){ - inserirFim(x); - } else { - // Caminhar ate a posicao anterior a insercao - CelulaDupla* i = primeiro; - int j; - for(j = 0; j < pos; j++, i = i->prox); - - CelulaDupla* tmp = novaCelulaDupla(x); - tmp->ant = i; - tmp->prox = i->prox; - tmp->ant->prox = tmp->prox->ant = tmp; - tmp = i = NULL; - } -} - - -/** - * Remove um elemento de uma posicao especifica da lista - * considerando que o primeiro elemento valido esta na posicao 0. - * @param posicao Meio da remocao. - * @return resp int elemento a ser removido. - * @throws Exception Se posicao invalida. - */ -int remover(int pos) { - int resp; - int tam = tamanho(); - - if (primeiro == ultimo){ - errx(1, "Erro ao remover (vazia)!"); - } else if(pos < 0 || pos >= tam){ - errx(1, "Erro ao remover (posicao %d/%d invalida!", pos, tam); - } else if (pos == 0){ - resp = removerInicio(); - } else if (pos == tam - 1){ - resp = removerFim(); - } else { - // Caminhar ate a posicao anterior a insercao - CelulaDupla* i = primeiro->prox; - int j; - for(j = 0; j < pos; j++, i = i->prox); - - i->ant->prox = i->prox; - i->prox->ant = i->ant; - resp = i->elemento; - i->prox = i->ant = NULL; - free(i); - i = NULL; - } - - return resp; -} - - -/** - * Mostra os elementos da lista separados por espacos. - */ -void mostrar() { - CelulaDupla* i; - printf("[ "); - for (i = primeiro->prox; i != NULL; i = i->prox) { - printf("%d ", i->elemento); - } - printf("] \n"); -} - - -/** - * Mostra os elementos da lista de forma invertida - * e separados por espacos. - */ -void mostrarInverso() { - printf("[ "); - CelulaDupla* i; - for (i = ultimo; i != primeiro; i = i->ant){ - printf("%d ", i->elemento); - } - printf("] \n"); // Termina de mostrar. -} - - -/** - * Procura um elemento e retorna se ele existe. - * @param x Elemento a pesquisar. - * @return true se o elemento existir, - * false em caso contrario. - */ -bool pesquisar(int x) { - bool resp = false; - CelulaDupla* i; - - for (i = primeiro->prox; i != NULL; i = i->prox) { - if(i->elemento == x){ - resp = true; - i = ultimo; - } - } - return resp; -} - - -int main(int argc, char** argv) { - start(); - - printf("LISTA DINAMICA DUPLAMENTE ENCADEADA\n\n"); - - inserirInicio(2); - inserirInicio(1); - inserirFim(5); - inserirFim(6); - inserir(3, 2); - inserir(4, 3); - inserir(7, 6); - inserir(0, 0); - inserirFim(8); - inserirFim(9); - - printf("Apos insercoes: "); - mostrar(); - mostrarInverso(); - - remover(3); - remover(2); - removerFim(); - removerInicio(); - remover(0); - remover(4); - - printf("Apos remocoes: "); - mostrar(); - mostrarInverso(); - return 0; -} +/** + * Lista dupla dinamica + * @author Max do Val Machado + * @version 2 01/2015 + */ +#include +#include +#include + +#define bool short +#define true 1 +#define false 0 + +//TIPO CELULA =================================================================== +typedef struct CelulaDupla { + int elemento; // Elemento inserido na celula. + struct CelulaDupla* prox; // Aponta a celula prox. + struct CelulaDupla* ant; // Aponta a celula anterior. +} CelulaDupla; + +CelulaDupla* novaCelulaDupla(int elemento) { + CelulaDupla* nova = (CelulaDupla*) malloc(sizeof(CelulaDupla)); + nova->elemento = elemento; + nova->ant = nova->prox = NULL; + return nova; +} + +//LISTA PROPRIAMENTE DITA ======================================================= +CelulaDupla* primeiro; +CelulaDupla* ultimo; + + +/** + * Cria uma lista dupla sem elementos (somente no cabeca). + */ +void start () { + primeiro = novaCelulaDupla(-1); + ultimo = primeiro; +} + + +/** + * Insere um elemento na primeira posicao da lista. + * @param x int elemento a ser inserido. + */ +void inserirInicio(int x) { + CelulaDupla* tmp = novaCelulaDupla(x); + + tmp->ant = primeiro; + tmp->prox = primeiro->prox; + primeiro->prox = tmp; + if (primeiro == ultimo) { + ultimo = tmp; + } else { + tmp->prox->ant = tmp; + } + tmp = NULL; +} + + +/** + * Insere um elemento na ultima posicao da lista. + * @param x int elemento a ser inserido. + */ +void inserirFim(int x) { + ultimo->prox = novaCelulaDupla(x); + ultimo->prox->ant = ultimo; + ultimo = ultimo->prox; +} + + +/** + * Remove um elemento da primeira posicao da lista. + * @return resp int elemento a ser removido. + */ +int removerInicio() { + if (primeiro == ultimo) { + errx(1, "Erro ao remover (vazia)!"); + } + + CelulaDupla* tmp = primeiro; + primeiro = primeiro->prox; + int resp = primeiro->elemento; + tmp->prox = primeiro->ant = NULL; + free(tmp); + tmp = NULL; + return resp; +} + + +/** + * Remove um elemento da ultima posicao da lista. + * @return resp int elemento a ser removido. + */ +int removerFim() { + if (primeiro == ultimo) { + errx(1, "Erro ao remover (vazia)!"); + } + int resp = ultimo->elemento; + ultimo = ultimo->ant; + ultimo->prox->ant = NULL; + free(ultimo->prox); + ultimo->prox = NULL; + return resp; +} + + +/** + * Calcula e retorna o tamanho, em numero de elementos, da lista. + * @return resp int tamanho + */ +int tamanho() { + int tamanho = 0; + CelulaDupla* i; + for(i = primeiro; i != ultimo; i = i->prox, tamanho++); + return tamanho; +} + + +/** + * Insere um elemento em uma posicao especifica considerando que o + * primeiro elemento valido esta na posicao 0. + * @param x int elemento a ser inserido. + * @param pos int posicao da insercao. + * @throws Exception Se posicao invalida. + */ +void inserir(int x, int pos) { + + int tam = tamanho(); + + if(pos < 0 || pos > tam){ + errx(1, "Erro ao remover (posicao %d/%d invalida!", pos, tam); + } else if (pos == 0){ + inserirInicio(x); + } else if (pos == tam){ + inserirFim(x); + } else { + // Caminhar ate a posicao anterior a insercao + CelulaDupla* i = primeiro; + int j; + for(j = 0; j < pos; j++, i = i->prox); + + CelulaDupla* tmp = novaCelulaDupla(x); + tmp->ant = i; + tmp->prox = i->prox; + tmp->ant->prox = tmp->prox->ant = tmp; + tmp = i = NULL; + } +} + + +/** + * Remove um elemento de uma posicao especifica da lista + * considerando que o primeiro elemento valido esta na posicao 0. + * @param posicao Meio da remocao. + * @return resp int elemento a ser removido. + * @throws Exception Se posicao invalida. + */ +int remover(int pos) { + int resp; + int tam = tamanho(); + + if (primeiro == ultimo){ + errx(1, "Erro ao remover (vazia)!"); + } else if(pos < 0 || pos >= tam){ + errx(1, "Erro ao remover (posicao %d/%d invalida!", pos, tam); + } else if (pos == 0){ + resp = removerInicio(); + } else if (pos == tam - 1){ + resp = removerFim(); + } else { + // Caminhar ate a posicao anterior a insercao + CelulaDupla* i = primeiro->prox; + int j; + for(j = 0; j < pos; j++, i = i->prox); + + i->ant->prox = i->prox; + i->prox->ant = i->ant; + resp = i->elemento; + i->prox = i->ant = NULL; + free(i); + i = NULL; + } + + return resp; +} + + +/** + * Mostra os elementos da lista separados por espacos. + */ +void mostrar() { + CelulaDupla* i; + printf("[ "); + for (i = primeiro->prox; i != NULL; i = i->prox) { + printf("%d ", i->elemento); + } + printf("] \n"); +} + + +/** + * Mostra os elementos da lista de forma invertida + * e separados por espacos. + */ +void mostrarInverso() { + printf("[ "); + CelulaDupla* i; + for (i = ultimo; i != primeiro; i = i->ant){ + printf("%d ", i->elemento); + } + printf("] \n"); // Termina de mostrar. +} + + +/** + * Procura um elemento e retorna se ele existe. + * @param x Elemento a pesquisar. + * @return true se o elemento existir, + * false em caso contrario. + */ +bool pesquisar(int x) { + bool resp = false; + CelulaDupla* i; + + for (i = primeiro->prox; i != NULL; i = i->prox) { + if(i->elemento == x){ + resp = true; + i = ultimo; + } + } + return resp; +} + + +int main(int argc, char** argv) { + start(); + + printf("LISTA DINAMICA DUPLAMENTE ENCADEADA\n\n"); + + inserirInicio(2); + inserirInicio(1); + inserirFim(5); + inserirFim(6); + inserir(3, 2); + inserir(4, 3); + inserir(7, 6); + inserir(0, 0); + inserirFim(8); + inserirFim(9); + + printf("Apos insercoes: "); + mostrar(); + mostrarInverso(); + + remover(3); + remover(2); + removerFim(); + removerInicio(); + remover(0); + remover(4); + + printf("Apos remocoes: "); + mostrar(); + mostrarInverso(); + return 0; +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/c/listasimples/lista.c b/Codigos/u04 Estruturas de dados básicas flexíveis/c/listasimples/lista.c similarity index 95% rename from fonte/u04 Estruturas de dados básicas flexíveis/c/listasimples/lista.c rename to Codigos/u04 Estruturas de dados básicas flexíveis/c/listasimples/lista.c index e92da72..a5d0e25 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/c/listasimples/lista.c +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/c/listasimples/lista.c @@ -1,248 +1,248 @@ -/** - * Lista simples dinamica - * @author Max do Val Machado - * @version 2 01/2015 - */ -#include -#include -#include -#define bool short -#define true 1 -#define false 0 - -//TIPO CELULA =================================================================== -typedef struct Celula { - int elemento; // Elemento inserido na celula. - struct Celula* prox; // Aponta a celula prox. -} Celula; - -Celula* novaCelula(int elemento) { - Celula* nova = (Celula*) malloc(sizeof(Celula)); - nova->elemento = elemento; - nova->prox = NULL; - return nova; -} - -//LISTA PROPRIAMENTE DITA ======================================================= -Celula* primeiro; -Celula* ultimo; - - -/** - * Cria uma lista sem elementos (somente no cabeca). - */ -void start () { - primeiro = novaCelula(-1); - ultimo = primeiro; -} - - -/** - * Insere um elemento na primeira posicao da lista. - * @param x int elemento a ser inserido. - */ -void inserirInicio(int x) { - Celula* tmp = novaCelula(x); - tmp->prox = primeiro->prox; - primeiro->prox = tmp; - if (primeiro == ultimo) { - ultimo = tmp; - } - tmp = NULL; -} - -/** - * Insere um elemento na ultima posicao da lista. - * @param x int elemento a ser inserido. - */ -void inserirFim(int x) { - ultimo->prox = novaCelula(x); - ultimo = ultimo->prox; -} - - -/** - * Remove um elemento da primeira posicao da lista. - * @return resp int elemento a ser removido. - * @throws Exception Se a lista nao contiver elementos. - */ -int removerInicio() { - if (primeiro == ultimo) { - errx(1, "Erro ao remover!"); - } - - Celula* tmp = primeiro; - primeiro = primeiro->prox; - int resp = primeiro->elemento; - tmp->prox = NULL; - free(tmp); - tmp = NULL; - return resp; -} - - -/** - * Remove um elemento da ultima posicao da lista. - * @return resp int elemento a ser removido. - */ -int removerFim() { - if (primeiro == ultimo) { - errx(1, "Erro ao remover!"); - } - - // Caminhar ate a penultima celula: - Celula* i; - for(i = primeiro; i->prox != ultimo; i = i->prox); - - int resp = ultimo->elemento; - ultimo = i; - free(ultimo->prox); - i = ultimo->prox = NULL; - - return resp; -} - - -/** - * Calcula e retorna o tamanho, em numero de elementos, da lista. - * @return resp int tamanho - */ -int tamanho() { - int tamanho = 0; - Celula* i; - for(i = primeiro; i != ultimo; i = i->prox, tamanho++); - return tamanho; -} - - -/** - * Insere um elemento em uma posicao especifica considerando que o - * primeiro elemento valido esta na posicao 0. - * @param x int elemento a ser inserido. - * @param pos int posicao da insercao. - * @throws Exception Se posicao invalida. - */ -void inserir(int x, int pos) { - - int tam = tamanho(); - - if(pos < 0 || pos > tam){ - errx(1, "Erro ao inserir posicao (%d/ tamanho = %d) invalida!", pos, tam); - } else if (pos == 0){ - inserirInicio(x); - } else if (pos == tam){ - inserirFim(x); - } else { - // Caminhar ate a posicao anterior a insercao - int j; - Celula* i = primeiro; - for(j = 0; j < pos; j++, i = i->prox); - - Celula* tmp = novaCelula(x); - tmp->prox = i->prox; - i->prox = tmp; - tmp = i = NULL; - } -} - - -/** - * Remove um elemento de uma posicao especifica da lista - * considerando que o primeiro elemento valido esta na posicao 0. - * @param posicao Meio da remocao. - * @return resp int elemento a ser removido. - * @throws Exception Se posicao invalida. - */ -int remover(int pos) { - int resp; - int tam = tamanho(); - - if (primeiro == ultimo){ - errx(1, "Erro ao remover (vazia)!"); - } else if(pos < 0 || pos >= tam){ - errx(1, "Erro ao remover posicao (%d/ tamanho = %d) invalida!", pos, tam); - } else if (pos == 0){ - resp = removerInicio(); - } else if (pos == tam - 1){ - resp = removerFim(); - } else { - // Caminhar ate a posicao anterior a insercao - Celula* i = primeiro; - int j; - for(j = 0; j < pos; j++, i = i->prox); - - Celula* tmp = i->prox; - resp = tmp->elemento; - i->prox = tmp->prox; - tmp->prox = NULL; - free(tmp); - i = tmp = NULL; - } - return resp; -} - - -/** - * Mostra os elementos da lista separados por espacos. - */ -void mostrar() { - printf("[ "); - Celula* i; - for (i = primeiro->prox; i != NULL; i = i->prox) { - printf("%d ", i->elemento); - } - printf("] \n"); -} - - -/** - * Procura um elemento e retorna se ele existe. - * @param x Elemento a pesquisar. - * @return true se o elemento existir, - * false em caso contrario. - */ -bool pesquisar(int x) { - bool retorno = false; - Celula* i; - - for (i = primeiro->prox; i != NULL; i = i->prox) { - if(i->elemento == x){ - retorno = true; - i = ultimo; - } - } - return retorno; -} - - -int main(int argc, char** argv) { - int x1, x2, x3, x4, x5, x6; - printf("=== LISTA DINAMICA SIMPLESMENTE ENCADEADA === \n\n"); - - start(); - - inserirInicio(1); - inserirInicio(0); - inserirFim(4); - inserirFim(5); - inserir(2, 2); - inserir(3, 3); - inserir(6, 6); - inserir(-1, 0); - inserirFim(7); - inserirFim(8); - - printf("Apos insercoes: "); - mostrar(); - - x1 = remover(3); - x2 = remover(2); - x3 = removerFim(); - x4 = removerInicio(); - x5 = remover(0); - x6 = remover(4); - - printf("Apos remocoes (%d, %d, %d, %d, %d, %d): ", x1, x2, x3, x4, x5, x6); - mostrar(); - return 0; -} +/** + * Lista simples dinamica + * @author Max do Val Machado + * @version 2 01/2015 + */ +#include +#include +#include +#define bool short +#define true 1 +#define false 0 + +//TIPO CELULA =================================================================== +typedef struct Celula { + int elemento; // Elemento inserido na celula. + struct Celula* prox; // Aponta a celula prox. +} Celula; + +Celula* novaCelula(int elemento) { + Celula* nova = (Celula*) malloc(sizeof(Celula)); + nova->elemento = elemento; + nova->prox = NULL; + return nova; +} + +//LISTA PROPRIAMENTE DITA ======================================================= +Celula* primeiro; +Celula* ultimo; + + +/** + * Cria uma lista sem elementos (somente no cabeca). + */ +void start () { + primeiro = novaCelula(-1); + ultimo = primeiro; +} + + +/** + * Insere um elemento na primeira posicao da lista. + * @param x int elemento a ser inserido. + */ +void inserirInicio(int x) { + Celula* tmp = novaCelula(x); + tmp->prox = primeiro->prox; + primeiro->prox = tmp; + if (primeiro == ultimo) { + ultimo = tmp; + } + tmp = NULL; +} + +/** + * Insere um elemento na ultima posicao da lista. + * @param x int elemento a ser inserido. + */ +void inserirFim(int x) { + ultimo->prox = novaCelula(x); + ultimo = ultimo->prox; +} + + +/** + * Remove um elemento da primeira posicao da lista. + * @return resp int elemento a ser removido. + * @throws Exception Se a lista nao contiver elementos. + */ +int removerInicio() { + if (primeiro == ultimo) { + errx(1, "Erro ao remover!"); + } + + Celula* tmp = primeiro; + primeiro = primeiro->prox; + int resp = primeiro->elemento; + tmp->prox = NULL; + free(tmp); + tmp = NULL; + return resp; +} + + +/** + * Remove um elemento da ultima posicao da lista. + * @return resp int elemento a ser removido. + */ +int removerFim() { + if (primeiro == ultimo) { + errx(1, "Erro ao remover!"); + } + + // Caminhar ate a penultima celula: + Celula* i; + for(i = primeiro; i->prox != ultimo; i = i->prox); + + int resp = ultimo->elemento; + ultimo = i; + free(ultimo->prox); + i = ultimo->prox = NULL; + + return resp; +} + + +/** + * Calcula e retorna o tamanho, em numero de elementos, da lista. + * @return resp int tamanho + */ +int tamanho() { + int tamanho = 0; + Celula* i; + for(i = primeiro; i != ultimo; i = i->prox, tamanho++); + return tamanho; +} + + +/** + * Insere um elemento em uma posicao especifica considerando que o + * primeiro elemento valido esta na posicao 0. + * @param x int elemento a ser inserido. + * @param pos int posicao da insercao. + * @throws Exception Se posicao invalida. + */ +void inserir(int x, int pos) { + + int tam = tamanho(); + + if(pos < 0 || pos > tam){ + errx(1, "Erro ao inserir posicao (%d/ tamanho = %d) invalida!", pos, tam); + } else if (pos == 0){ + inserirInicio(x); + } else if (pos == tam){ + inserirFim(x); + } else { + // Caminhar ate a posicao anterior a insercao + int j; + Celula* i = primeiro; + for(j = 0; j < pos; j++, i = i->prox); + + Celula* tmp = novaCelula(x); + tmp->prox = i->prox; + i->prox = tmp; + tmp = i = NULL; + } +} + + +/** + * Remove um elemento de uma posicao especifica da lista + * considerando que o primeiro elemento valido esta na posicao 0. + * @param posicao Meio da remocao. + * @return resp int elemento a ser removido. + * @throws Exception Se posicao invalida. + */ +int remover(int pos) { + int resp; + int tam = tamanho(); + + if (primeiro == ultimo){ + errx(1, "Erro ao remover (vazia)!"); + } else if(pos < 0 || pos >= tam){ + errx(1, "Erro ao remover posicao (%d/ tamanho = %d) invalida!", pos, tam); + } else if (pos == 0){ + resp = removerInicio(); + } else if (pos == tam - 1){ + resp = removerFim(); + } else { + // Caminhar ate a posicao anterior a insercao + Celula* i = primeiro; + int j; + for(j = 0; j < pos; j++, i = i->prox); + + Celula* tmp = i->prox; + resp = tmp->elemento; + i->prox = tmp->prox; + tmp->prox = NULL; + free(tmp); + i = tmp = NULL; + } + return resp; +} + + +/** + * Mostra os elementos da lista separados por espacos. + */ +void mostrar() { + printf("[ "); + Celula* i; + for (i = primeiro->prox; i != NULL; i = i->prox) { + printf("%d ", i->elemento); + } + printf("] \n"); +} + + +/** + * Procura um elemento e retorna se ele existe. + * @param x Elemento a pesquisar. + * @return true se o elemento existir, + * false em caso contrario. + */ +bool pesquisar(int x) { + bool retorno = false; + Celula* i; + + for (i = primeiro->prox; i != NULL; i = i->prox) { + if(i->elemento == x){ + retorno = true; + i = ultimo; + } + } + return retorno; +} + + +int main(int argc, char** argv) { + int x1, x2, x3, x4, x5, x6; + printf("=== LISTA DINAMICA SIMPLESMENTE ENCADEADA === \n\n"); + + start(); + + inserirInicio(1); + inserirInicio(0); + inserirFim(4); + inserirFim(5); + inserir(2, 2); + inserir(3, 3); + inserir(6, 6); + inserir(-1, 0); + inserirFim(7); + inserirFim(8); + + printf("Apos insercoes: "); + mostrar(); + + x1 = remover(3); + x2 = remover(2); + x3 = removerFim(); + x4 = removerInicio(); + x5 = remover(0); + x6 = remover(4); + + printf("Apos remocoes (%d, %d, %d, %d, %d, %d): ", x1, x2, x3, x4, x5, x6); + mostrar(); + return 0; +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/c/matriz/entrada.in b/Codigos/u04 Estruturas de dados básicas flexíveis/c/matriz/entrada.in similarity index 95% rename from fonte/u04 Estruturas de dados básicas flexíveis/c/matriz/entrada.in rename to Codigos/u04 Estruturas de dados básicas flexíveis/c/matriz/entrada.in index ee5a1e2..bf6e3cf 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/c/matriz/entrada.in +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/c/matriz/entrada.in @@ -1,37 +1,37 @@ -quantidade de testes (por exemplo, 3) -linhas da primeira matriz do primeiro teste -colunas da primeira matriz do primeiro teste -x x x x x ... x -x x x x x ... x -... -x x x x x ... x -linhas da segunda matriz do primeiro teste -colunas da segunda matriz do primeiro teste -x x x x x ... x -x x x x x ... x -... -x x x x x ... x -linhas da primeira matriz do segundo teste -colunas da primeira matriz do segundo teste -x x x x x ... x -x x x x x ... x -... -x x x x x ... x -linhas da segunda matriz do segundo teste -colunas da segunda matriz do segundo teste -x x x x x ... x -x x x x x ... x -... -x x x x x ... x -linhas da primeira matriz do terceiro teste -colunas da primeira matriz do terceiro teste -x x x x x ... x -x x x x x ... x -... -x x x x x ... x -linhas da segunda matriz do terceiro teste -colunas da segunda matriz do terceiro teste -x x x x x ... x -x x x x x ... x -... -x x x x x ... x +quantidade de testes (por exemplo, 3) +linhas da primeira matriz do primeiro teste +colunas da primeira matriz do primeiro teste +x x x x x ... x +x x x x x ... x +... +x x x x x ... x +linhas da segunda matriz do primeiro teste +colunas da segunda matriz do primeiro teste +x x x x x ... x +x x x x x ... x +... +x x x x x ... x +linhas da primeira matriz do segundo teste +colunas da primeira matriz do segundo teste +x x x x x ... x +x x x x x ... x +... +x x x x x ... x +linhas da segunda matriz do segundo teste +colunas da segunda matriz do segundo teste +x x x x x ... x +x x x x x ... x +... +x x x x x ... x +linhas da primeira matriz do terceiro teste +colunas da primeira matriz do terceiro teste +x x x x x ... x +x x x x x ... x +... +x x x x x ... x +linhas da segunda matriz do terceiro teste +colunas da segunda matriz do terceiro teste +x x x x x ... x +x x x x x ... x +... +x x x x x ... x diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/c/pilha.h b/Codigos/u04 Estruturas de dados básicas flexíveis/c/pilha.h similarity index 96% rename from fonte/u04 Estruturas de dados básicas flexíveis/c/pilha.h rename to Codigos/u04 Estruturas de dados básicas flexíveis/c/pilha.h index c460f99..03cc4b9 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/c/pilha.h +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/c/pilha.h @@ -1,61 +1,61 @@ -#ifndef PILHA_H -#define PILHA_H -//============================================================================= -#include -#include -#include -#include -#include "celula.h" -//============================================================================= -typedef struct Pilha{ - struct Celula *topo; - int size; -} Pilha; -//============================================================================= -Pilha new_pilha(){ - Pilha temp; - temp.topo = NULL; - temp.size = 0; - return temp; -} -//============================================================================= -int size_pilha(Pilha *p){ - return p->size; -} -//============================================================================= -void push_pilha(Pilha *p, int elemento){ - Celula *temp = new_celula(elemento); - temp->prox = p->topo; - p->topo = temp; - p->size++; -} -//============================================================================= -int pop_pilha(Pilha *p){ - if (p->topo == NULL){ - printf("\nA pilha esta vazia!\n"); - return INT_MIN; - } - int elemento = p->topo->elemento; - Celula *temp = p->topo; - p->topo = p->topo->prox; - p->size--; - free(temp); - return elemento; -} -//============================================================================= -void print_pilha(Pilha *p){ - Celula *i; - printf("["); - for (i = p->topo; i != NULL; i = i->prox) - { - printf("%d, ", i->elemento); - } - printf("] \n"); -} -//============================================================================= -void delete_pilha(Pilha *p){ - while(p->size > 0) - pop_pilha(p); -} -//============================================================================= +#ifndef PILHA_H +#define PILHA_H +//============================================================================= +#include +#include +#include +#include +#include "celula.h" +//============================================================================= +typedef struct Pilha{ + struct Celula *topo; + int size; +} Pilha; +//============================================================================= +Pilha new_pilha(){ + Pilha temp; + temp.topo = NULL; + temp.size = 0; + return temp; +} +//============================================================================= +int size_pilha(Pilha *p){ + return p->size; +} +//============================================================================= +void push_pilha(Pilha *p, int elemento){ + Celula *temp = new_celula(elemento); + temp->prox = p->topo; + p->topo = temp; + p->size++; +} +//============================================================================= +int pop_pilha(Pilha *p){ + if (p->topo == NULL){ + printf("\nA pilha esta vazia!\n"); + return INT_MIN; + } + int elemento = p->topo->elemento; + Celula *temp = p->topo; + p->topo = p->topo->prox; + p->size--; + free(temp); + return elemento; +} +//============================================================================= +void print_pilha(Pilha *p){ + Celula *i; + printf("["); + for (i = p->topo; i != NULL; i = i->prox) + { + printf("%d, ", i->elemento); + } + printf("] \n"); +} +//============================================================================= +void delete_pilha(Pilha *p){ + while(p->size > 0) + pop_pilha(p); +} +//============================================================================= #endif \ No newline at end of file diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/c/pilha/pilha.c b/Codigos/u04 Estruturas de dados básicas flexíveis/c/pilha/pilha.c similarity index 94% rename from fonte/u04 Estruturas de dados básicas flexíveis/c/pilha/pilha.c rename to Codigos/u04 Estruturas de dados básicas flexíveis/c/pilha/pilha.c index 99b17d2..a8af26b 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/c/pilha/pilha.c +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/c/pilha/pilha.c @@ -1,103 +1,103 @@ -/** - * Pilha dinamica - * @author Max do Val Machado - * @version 2 01/2015 - */ -#include -#include -#include - -//TIPO CELULA =================================================================== -typedef struct Celula { - int elemento; // Elemento inserido na celula. - struct Celula* prox; // Aponta a celula prox. -} Celula; - -Celula* novaCelula(int elemento) { - Celula* nova = (Celula*) malloc(sizeof(Celula)); - nova->elemento = elemento; - nova->prox = NULL; - return nova; -} - -//PILHA PROPRIAMENTE DITA ======================================================= -Celula* topo; // Sem celula cabeca. - - -/** - * Cria uma fila sem elementos. - */ -void start () { - topo = NULL; -} - - -/** - * Insere elemento na pilha (politica FILO). - * @param x int elemento a inserir. - */ -void inserir(int x) { - Celula* tmp = novaCelula(x); - tmp->prox = topo; - topo = tmp; - tmp = NULL; -} - -/** - * Remove elemento da pilha (politica FILO). - * @return Elemento removido. - */ -int remover() { - if (topo == NULL) { - errx(1, "Erro ao remover!"); - } - - int resp = topo->elemento; - Celula* tmp = topo; - topo = topo->prox; - tmp->prox = NULL; - free(tmp); - tmp = NULL; - return resp; -} - - -/** - * Mostra os elementos separados por espacos, comecando do topo. - */ -void mostrar() { - Celula* i; - printf("["); - for(i = topo; i != NULL; i = i->prox) { - printf("%d ,", i->elemento); - } - - printf("] \n"); -} - - -//METODO PRINCIPAL ============================================================== -int main(int argc, char** argv){ - int x1, x2, x3; - - printf("==== PILHA FLEXIVEL ====\n"); - - start(); - - inserir(0); - inserir(1); - inserir(2); - inserir(3); - inserir(4); - inserir(5); - - printf("Apos insercoes: \n"); - mostrar(); - - x1 = remover(); - x2 = remover(); - x3 = remover(); - - printf("Apos as remocoes (%d, %d, %d) \n ", x1, x2, x3); - mostrar(); -} +/** + * Pilha dinamica + * @author Max do Val Machado + * @version 2 01/2015 + */ +#include +#include +#include + +//TIPO CELULA =================================================================== +typedef struct Celula { + int elemento; // Elemento inserido na celula. + struct Celula* prox; // Aponta a celula prox. +} Celula; + +Celula* novaCelula(int elemento) { + Celula* nova = (Celula*) malloc(sizeof(Celula)); + nova->elemento = elemento; + nova->prox = NULL; + return nova; +} + +//PILHA PROPRIAMENTE DITA ======================================================= +Celula* topo; // Sem celula cabeca. + + +/** + * Cria uma fila sem elementos. + */ +void start () { + topo = NULL; +} + + +/** + * Insere elemento na pilha (politica FILO). + * @param x int elemento a inserir. + */ +void inserir(int x) { + Celula* tmp = novaCelula(x); + tmp->prox = topo; + topo = tmp; + tmp = NULL; +} + +/** + * Remove elemento da pilha (politica FILO). + * @return Elemento removido. + */ +int remover() { + if (topo == NULL) { + errx(1, "Erro ao remover!"); + } + + int resp = topo->elemento; + Celula* tmp = topo; + topo = topo->prox; + tmp->prox = NULL; + free(tmp); + tmp = NULL; + return resp; +} + + +/** + * Mostra os elementos separados por espacos, comecando do topo. + */ +void mostrar() { + Celula* i; + printf("["); + for(i = topo; i != NULL; i = i->prox) { + printf("%d ,", i->elemento); + } + + printf("] \n"); +} + + +//METODO PRINCIPAL ============================================================== +int main(int argc, char** argv){ + int x1, x2, x3; + + printf("==== PILHA FLEXIVEL ====\n"); + + start(); + + inserir(0); + inserir(1); + inserir(2); + inserir(3); + inserir(4); + inserir(5); + + printf("Apos insercoes: \n"); + mostrar(); + + x1 = remover(); + x2 = remover(); + x3 = remover(); + + printf("Apos as remocoes (%d, %d, %d) \n ", x1, x2, x3); + mostrar(); +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/c/pilha_teste.c b/Codigos/u04 Estruturas de dados básicas flexíveis/c/pilha_teste.c similarity index 95% rename from fonte/u04 Estruturas de dados básicas flexíveis/c/pilha_teste.c rename to Codigos/u04 Estruturas de dados básicas flexíveis/c/pilha_teste.c index 629a4a5..5dc85a0 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/c/pilha_teste.c +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/c/pilha_teste.c @@ -1,27 +1,27 @@ -#include "pilha.h" -//============================================================================= -int main() { - - Pilha p; - int i, x1, x2, x3; - printf("==== PILHA FLEXIVEL ====\n"); - - p = new_pilha(); - - for(i=0; i < 10; i++) - push_pilha(&p, i); - - printf("Apos inserrir os dados: \n"); - print_pilha(&p); - - x1 = pop_pilha(&p); - x2 = pop_pilha(&p); - x3 = pop_pilha(&p); - - printf("Apos as remocoes (%d, %d, %d) \n", x1, x2, x3); - print_pilha(&p); - - delete_pilha(&p); - - return 0; +#include "pilha.h" +//============================================================================= +int main() { + + Pilha p; + int i, x1, x2, x3; + printf("==== PILHA FLEXIVEL ====\n"); + + p = new_pilha(); + + for(i=0; i < 10; i++) + push_pilha(&p, i); + + printf("Apos inserrir os dados: \n"); + print_pilha(&p); + + x1 = pop_pilha(&p); + x2 = pop_pilha(&p); + x3 = pop_pilha(&p); + + printf("Apos as remocoes (%d, %d, %d) \n", x1, x2, x3); + print_pilha(&p); + + delete_pilha(&p); + + return 0; } \ No newline at end of file diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/FilaNativa.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/FilaNativa.java similarity index 95% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/FilaNativa.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/FilaNativa.java index 67d305f..ef7fe31 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/FilaNativa.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/FilaNativa.java @@ -1,16 +1,16 @@ -import java.util.*; - -public class FilaNativa { - public static void main(String[] args) throws Exception { - Queue fila = new LinkedList(); - - fila.add("Atlético-MG"); - fila.add("Cruzeiro"); - fila.add("América"); - - while (!fila.isEmpty()){ - System.out.println("Retirando da fila: " + fila.remove()); - } - } -} - +import java.util.*; + +public class FilaNativa { + public static void main(String[] args) throws Exception { + Queue fila = new LinkedList(); + + fila.add("Atlético-MG"); + fila.add("Cruzeiro"); + fila.add("América"); + + while (!fila.isEmpty()){ + System.out.println("Retirando da fila: " + fila.remove()); + } + } +} + diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/ListaNativa.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/ListaNativa.java similarity index 97% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/ListaNativa.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/ListaNativa.java index 5aeed72..8f0117e 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/ListaNativa.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/ListaNativa.java @@ -1,36 +1,36 @@ -import java.util.Vector; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.Iterator; - -class ListaNativa { - public static void main (String [] args) { - Vector vector = new Vector(); - ArrayList arrayList = new ArrayList(); - LinkedList linkedList = new LinkedList(); - - vector.add("Atlético-MG"); - arrayList.add("Atlético-MG"); - linkedList.add("Atlético-MG"); - vector.add("Cruzeiro"); - arrayList.add("Cruzeiro"); - linkedList.add("Cruzeiro"); - vector.add("América"); - arrayList.add("América"); - linkedList.add("América"); - - System.out.println("Tamanhos:" + vector.size() + " -- " + arrayList.size() + " -- " + linkedList.size()); - System.out.println("get(index): " + (String)vector.get(0) + " -- " + (String)arrayList.get(1) + " -- " + (String)linkedList.get(2)); - - for (Iterator i = vector.iterator(); i.hasNext();){ - System.out.println("Vector: " + (String)i.next()); - } - for (Iterator i = arrayList.iterator(); i.hasNext();){ - System.out.println("ArrayList: " + (String)i.next()); - } - for (Iterator i = linkedList.iterator(); i.hasNext();){ - System.out.println("LinkedList: " + (String)i.next()); - } - } -} - +import java.util.Vector; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.Iterator; + +class ListaNativa { + public static void main (String [] args) { + Vector vector = new Vector(); + ArrayList arrayList = new ArrayList(); + LinkedList linkedList = new LinkedList(); + + vector.add("Atlético-MG"); + arrayList.add("Atlético-MG"); + linkedList.add("Atlético-MG"); + vector.add("Cruzeiro"); + arrayList.add("Cruzeiro"); + linkedList.add("Cruzeiro"); + vector.add("América"); + arrayList.add("América"); + linkedList.add("América"); + + System.out.println("Tamanhos:" + vector.size() + " -- " + arrayList.size() + " -- " + linkedList.size()); + System.out.println("get(index): " + (String)vector.get(0) + " -- " + (String)arrayList.get(1) + " -- " + (String)linkedList.get(2)); + + for (Iterator i = vector.iterator(); i.hasNext();){ + System.out.println("Vector: " + (String)i.next()); + } + for (Iterator i = arrayList.iterator(); i.hasNext();){ + System.out.println("ArrayList: " + (String)i.next()); + } + for (Iterator i = linkedList.iterator(); i.hasNext();){ + System.out.println("LinkedList: " + (String)i.next()); + } + } +} + diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/PilhaNativa.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/PilhaNativa.java similarity index 95% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/PilhaNativa.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/PilhaNativa.java index 7e98569..83db8f2 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/PilhaNativa.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/TADs Nativos em Java/PilhaNativa.java @@ -1,15 +1,15 @@ -import java.util.Stack; - -class PilhaNativa { - public static void main (String [] args) { - Stack pilha = new Stack(); - - pilha.push("Atlético-MG"); - pilha.push("Cruzeiro"); - pilha.push("América"); - - while(pilha.empty() == false){ - System.out.println("Retirando da pilha: " + pilha.pop()); - } - } -} +import java.util.Stack; + +class PilhaNativa { + public static void main (String [] args) { + Stack pilha = new Stack(); + + pilha.push("Atlético-MG"); + pilha.push("Cruzeiro"); + pilha.push("América"); + + while(pilha.empty() == false){ + System.out.println("Retirando da pilha: " + pilha.pop()); + } + } +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/coletalixo/Celula.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/coletalixo/Celula.java similarity index 95% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/coletalixo/Celula.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/coletalixo/Celula.java index 19a6462..0a216ed 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/coletalixo/Celula.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/coletalixo/Celula.java @@ -1,26 +1,26 @@ -/** - * Celula (pilha, lista e fila dinamica) - * @author Max do Val Machado - * @version 2 01/2015 - */ -class Celula { - public int elemento; // Elemento inserido na celula. - public Celula prox; // Aponta a celula prox. - - - /** - * Construtor da classe. - */ - public Celula() { - this(0); - } - - /** - * Construtor da classe. - * @param elemento int inserido na celula. - */ - public Celula(int elemento) { - this.elemento = elemento; - this.prox = null; - } -} +/** + * Celula (pilha, lista e fila dinamica) + * @author Max do Val Machado + * @version 2 01/2015 + */ +class Celula { + public int elemento; // Elemento inserido na celula. + public Celula prox; // Aponta a celula prox. + + + /** + * Construtor da classe. + */ + public Celula() { + this(0); + } + + /** + * Construtor da classe. + * @param elemento int inserido na celula. + */ + public Celula(int elemento) { + this.elemento = elemento; + this.prox = null; + } +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/coletalixo/ColetaLixo.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/coletalixo/ColetaLixo.java similarity index 94% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/coletalixo/ColetaLixo.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/coletalixo/ColetaLixo.java index 902bbcc..10a501c 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/coletalixo/ColetaLixo.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/coletalixo/ColetaLixo.java @@ -1,23 +1,23 @@ - - -class ColetaLixo { - private Celula primeiro; - - public ColetaLixo () { - primeiro = new Celula(); - } - - public void inserir(int x) { - primeiro.prox = new Celula(x); - primeiro = primeiro.prox; - } - - public static void main (String [] args) { - ColetaLixo coletaLixo = new ColetaLixo (); - while(true){ - coletaLixo.inserir(0); - } - } -} - - + + +class ColetaLixo { + private Celula primeiro; + + public ColetaLixo () { + primeiro = new Celula(); + } + + public void inserir(int x) { + primeiro.prox = new Celula(x); + primeiro = primeiro.prox; + } + + public static void main (String [] args) { + ColetaLixo coletaLixo = new ColetaLixo (); + while(true){ + coletaLixo.inserir(0); + } + } +} + + diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/fila/Celula.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/fila/Celula.java similarity index 94% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/fila/Celula.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/fila/Celula.java index 866b654..4a92aef 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/fila/Celula.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/fila/Celula.java @@ -1,26 +1,26 @@ -/** - * Celula (pilha, lista e fila dinamica) - * @author Max do Val Machado - * @version 2 01/2015 - */ -class Celula { - public int elemento; // Elemento inserido na celula. - public Celula prox; // Aponta a celula prox. - - - /** - * Construtor da classe. - */ - public Celula() { - this(0); - } - - /** - * Construtor da classe. - * @param elemento int inserido na celula. - */ - public Celula(int elemento) { - this.elemento = elemento; - this.prox = null; - } -} +/** + * Celula (pilha, lista e fila dinamica) + * @author Max do Val Machado + * @version 2 01/2015 + */ +class Celula { + public int elemento; // Elemento inserido na celula. + public Celula prox; // Aponta a celula prox. + + + /** + * Construtor da classe. + */ + public Celula() { + this(0); + } + + /** + * Construtor da classe. + * @param elemento int inserido na celula. + */ + public Celula(int elemento) { + this.elemento = elemento; + this.prox = null; + } +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/fila/Fila.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/fila/Fila.java similarity index 94% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/fila/Fila.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/fila/Fila.java index 676e37f..b32b83e 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/fila/Fila.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/fila/Fila.java @@ -1,61 +1,61 @@ -/** - * Fila dinamica - * @author Max do Val Machado - * @version 2 01/2015 - */ -public class Fila { - private Celula primeiro; - private Celula ultimo; - - - /** - * Construtor da classe que cria uma fila sem elementos (somente no cabeca). - */ - public Fila() { - primeiro = new Celula(); - ultimo = primeiro; - } - - - /** - * Insere elemento na fila (politica FIFO). - * @param x int elemento a inserir. - */ - public void inserir(int x) { - ultimo.prox = new Celula(x); - ultimo = ultimo.prox; - } - - - /** - * Remove elemento da fila (politica FIFO). - * @return Elemento removido. - * @trhows Exception Se a fila nao tiver elementos. - */ - public int remover() throws Exception { - if (primeiro == ultimo) { - throw new Exception("Erro ao remover!"); - } - - Celula tmp = primeiro; - primeiro = primeiro.prox; - int resp = primeiro.elemento; - tmp.prox = null; - tmp = null; - return resp; - } - - - /** - * Mostra os elementos separados por espacos. - */ - public void mostrar() { - System.out.print("[ "); - - for(Celula i = primeiro.prox; i != null; i = i.prox) { - System.out.print(i.elemento + " "); - } - - System.out.println("] "); - } -} +/** + * Fila dinamica + * @author Max do Val Machado + * @version 2 01/2015 + */ +public class Fila { + private Celula primeiro; + private Celula ultimo; + + + /** + * Construtor da classe que cria uma fila sem elementos (somente no cabeca). + */ + public Fila() { + primeiro = new Celula(); + ultimo = primeiro; + } + + + /** + * Insere elemento na fila (politica FIFO). + * @param x int elemento a inserir. + */ + public void inserir(int x) { + ultimo.prox = new Celula(x); + ultimo = ultimo.prox; + } + + + /** + * Remove elemento da fila (politica FIFO). + * @return Elemento removido. + * @trhows Exception Se a fila nao tiver elementos. + */ + public int remover() throws Exception { + if (primeiro == ultimo) { + throw new Exception("Erro ao remover!"); + } + + Celula tmp = primeiro; + primeiro = primeiro.prox; + int resp = primeiro.elemento; + tmp.prox = null; + tmp = null; + return resp; + } + + + /** + * Mostra os elementos separados por espacos. + */ + public void mostrar() { + System.out.print("[ "); + + for(Celula i = primeiro.prox; i != null; i = i.prox) { + System.out.print(i.elemento + " "); + } + + System.out.println("] "); + } +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/fila/PrincipalFila.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/fila/PrincipalFila.java similarity index 95% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/fila/PrincipalFila.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/fila/PrincipalFila.java index 4847468..52147aa 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/fila/PrincipalFila.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/fila/PrincipalFila.java @@ -1,63 +1,63 @@ -/** - * Fila dinamica - * @author Max do Val Machado - * @version 2 01/2015 - */ -class PrincipalFila { - public static void main(String[] args) throws Exception { - System.out.println("==== FILA FLEXIVEL ===="); - Fila fila = new Fila(); - int x1, x2, x3; - - fila.inserir(5); - fila.inserir(7); - fila.inserir(8); - fila.inserir(9); - - System.out.println("Apos insercoes(5, 7, 8, 9): "); - fila.mostrar(); - - x1 = fila.remover(); - x2 = fila.remover(); - - System.out.println("Apos remocoes (" + x1 + ", " + x2 + "):"); - fila.mostrar(); - - fila.inserir(3); - fila.inserir(4); - - - System.out.println("Apos insercoes(3, 4): "); - fila.mostrar(); - - x1 = fila.remover(); - x2 = fila.remover(); - x3 = fila.remover(); - - System.out.println("Apos remocoes (" + x1 + ", " + x2 + ", " + x3 + "):"); - fila.mostrar(); - - fila.inserir(4); - fila.inserir(5); - - System.out.println("Apos insercoes(4, 5): "); - fila.mostrar(); - - x1 = fila.remover(); - x2 = fila.remover(); - - System.out.println("Apos remocoes (" + x1 + ", " + x2 + "):"); - fila.mostrar(); - - fila.inserir(6); - fila.inserir(7); - - System.out.println("Apos insercoes(6, 7): "); - fila.mostrar(); - - x1 = fila.remover(); - - System.out.println("Apos remocao (" + x1 + "): "); - fila.mostrar(); - } -} +/** + * Fila dinamica + * @author Max do Val Machado + * @version 2 01/2015 + */ +class PrincipalFila { + public static void main(String[] args) throws Exception { + System.out.println("==== FILA FLEXIVEL ===="); + Fila fila = new Fila(); + int x1, x2, x3; + + fila.inserir(5); + fila.inserir(7); + fila.inserir(8); + fila.inserir(9); + + System.out.println("Apos insercoes(5, 7, 8, 9): "); + fila.mostrar(); + + x1 = fila.remover(); + x2 = fila.remover(); + + System.out.println("Apos remocoes (" + x1 + ", " + x2 + "):"); + fila.mostrar(); + + fila.inserir(3); + fila.inserir(4); + + + System.out.println("Apos insercoes(3, 4): "); + fila.mostrar(); + + x1 = fila.remover(); + x2 = fila.remover(); + x3 = fila.remover(); + + System.out.println("Apos remocoes (" + x1 + ", " + x2 + ", " + x3 + "):"); + fila.mostrar(); + + fila.inserir(4); + fila.inserir(5); + + System.out.println("Apos insercoes(4, 5): "); + fila.mostrar(); + + x1 = fila.remover(); + x2 = fila.remover(); + + System.out.println("Apos remocoes (" + x1 + ", " + x2 + "):"); + fila.mostrar(); + + fila.inserir(6); + fila.inserir(7); + + System.out.println("Apos insercoes(6, 7): "); + fila.mostrar(); + + x1 = fila.remover(); + + System.out.println("Apos remocao (" + x1 + "): "); + fila.mostrar(); + } +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/listadupla/CelulaDupla.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/listadupla/CelulaDupla.java similarity index 94% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/listadupla/CelulaDupla.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/listadupla/CelulaDupla.java index 1762b81..53773d5 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/listadupla/CelulaDupla.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/listadupla/CelulaDupla.java @@ -1,27 +1,27 @@ -/** - * Celula Dupla (lista dupla dinamica) - * @author Max do Val Machado - * @version 2 01/2015 - */ -class CelulaDupla { - public int elemento; - public CelulaDupla ant; - public CelulaDupla prox; - - /** - * Construtor da classe. - */ - public CelulaDupla() { - this(0); - } - - - /** - * Construtor da classe. - * @param elemento int inserido na celula. - */ - public CelulaDupla(int elemento) { - this.elemento = elemento; - this.ant = this.prox = null; - } -} +/** + * Celula Dupla (lista dupla dinamica) + * @author Max do Val Machado + * @version 2 01/2015 + */ +class CelulaDupla { + public int elemento; + public CelulaDupla ant; + public CelulaDupla prox; + + /** + * Construtor da classe. + */ + public CelulaDupla() { + this(0); + } + + + /** + * Construtor da classe. + * @param elemento int inserido na celula. + */ + public CelulaDupla(int elemento) { + this.elemento = elemento; + this.ant = this.prox = null; + } +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/listadupla/ListaDupla.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/listadupla/ListaDupla.java similarity index 96% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/listadupla/ListaDupla.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/listadupla/ListaDupla.java index 7b82a0f..a01e5e6 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/listadupla/ListaDupla.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/listadupla/ListaDupla.java @@ -1,204 +1,204 @@ -/** - * Lista dupla dinamica - * @author Max do Val Machado - * @version 2 01/2015 - */ -class ListaDupla { - private CelulaDupla primeiro; - private CelulaDupla ultimo; - - - /** - * Construtor da classe que cria uma lista dupla sem elementos (somente no cabeca). - */ - public ListaDupla() { - primeiro = new CelulaDupla(); - ultimo = primeiro; - } - - - /** - * Insere um elemento na primeira posicao da lista. - * @param x int elemento a ser inserido. - */ - public void inserirInicio(int x) { - CelulaDupla tmp = new CelulaDupla(x); - - tmp.ant = primeiro; - tmp.prox = primeiro.prox; - primeiro.prox = tmp; - if(primeiro == ultimo){ - ultimo = tmp; - }else{ - tmp.prox.ant = tmp; - } - tmp = null; - } - - - /** - * Insere um elemento na ultima posicao da lista. - * @param x int elemento a ser inserido. - */ - public void inserirFim(int x) { - ultimo.prox = new CelulaDupla(x); - ultimo.prox.ant = ultimo; - ultimo = ultimo.prox; - } - - - /** - * Remove um elemento da primeira posicao da lista. - * @return resp int elemento a ser removido. - * @throws Exception Se a lista nao contiver elementos. - */ - public int removerInicio() throws Exception { - if (primeiro == ultimo) { - throw new Exception("Erro ao remover (vazia)!"); - } - - CelulaDupla tmp = primeiro; - primeiro = primeiro.prox; - int resp = primeiro.elemento; - tmp.prox = primeiro.ant = null; - tmp = null; - return resp; - } - - - /** - * Remove um elemento da ultima posicao da lista. - * @return resp int elemento a ser removido. - * @throws Exception Se a lista nao contiver elementos. - */ - public int removerFim() throws Exception { - if (primeiro == ultimo) { - throw new Exception("Erro ao remover (vazia)!"); - } - int resp = ultimo.elemento; - ultimo = ultimo.ant; - ultimo.prox.ant = null; - ultimo.prox = null; - return resp; - } - - - /** - * Insere um elemento em uma posicao especifica considerando que o - * primeiro elemento valido esta na posicao 0. - * @param x int elemento a ser inserido. - * @param pos int posicao da insercao. - * @throws Exception Se posicao invalida. - */ - public void inserir(int x, int pos) throws Exception { - - int tamanho = tamanho(); - - if(pos < 0 || pos > tamanho){ - throw new Exception("Erro ao inserir posicao (" + pos + " / tamanho = " + tamanho + ") invalida!"); - } else if (pos == 0){ - inserirInicio(x); - } else if (pos == tamanho){ - inserirFim(x); - } else { - // Caminhar ate a posicao anterior a insercao - CelulaDupla i = primeiro; - for(int j = 0; j < pos; j++, i = i.prox); - - CelulaDupla tmp = new CelulaDupla(x); - tmp.ant = i; - tmp.prox = i.prox; - tmp.ant.prox = tmp.prox.ant = tmp; - tmp = i = null; - } - } - - - /** - * Remove um elemento de uma posicao especifica da lista - * considerando que o primeiro elemento valido esta na posicao 0. - * @param posicao Meio da remocao. - * @return resp int elemento a ser removido. - * @throws Exception Se posicao invalida. - */ - public int remover(int pos) throws Exception { - int resp; - int tamanho = tamanho(); - - if (primeiro == ultimo){ - throw new Exception("Erro ao remover (vazia)!"); - - } else if(pos < 0 || pos >= tamanho){ - throw new Exception("Erro ao remover (posicao " + pos + " / " + tamanho + " invalida!"); - } else if (pos == 0){ - resp = removerInicio(); - } else if (pos == tamanho - 1){ - resp = removerFim(); - } else { - // Caminhar ate a posicao anterior a insercao - CelulaDupla i = primeiro.prox; - for(int j = 0; j < pos; j++, i = i.prox); - - i.ant.prox = i.prox; - i.prox.ant = i.ant; - resp = i.elemento; - i.prox = i.ant = null; - i = null; - } - - return resp; - } - - - /** - * Mostra os elementos da lista separados por espacos. - */ - public void mostrar() { - System.out.print("[ "); // Comeca a mostrar. - for (CelulaDupla i = primeiro.prox; i != null; i = i.prox) { - System.out.print(i.elemento + " "); - } - System.out.println("] "); // Termina de mostrar. - } - - - /** - * Mostra os elementos da lista de forma invertida - * e separados por espacos. - */ - public void mostrarInverso() { - System.out.print("[ "); - for (CelulaDupla i = ultimo; i != primeiro; i = i.ant){ - System.out.print(i.elemento + " "); - } - System.out.println("] "); // Termina de mostrar. - } - - - /** - * Procura um elemento e retorna se ele existe. - * @param x Elemento a pesquisar. - * @return true se o elemento existir, - * false em caso contrario. - */ - public boolean pesquisar(int x) { - boolean resp = false; - for (CelulaDupla i = primeiro.prox; i != null; i = i.prox) { - if(i.elemento == x){ - resp = true; - i = ultimo; - } - } - return resp; - } - - /** - * Calcula e retorna o tamanho, em numero de elementos, da lista. - * @return resp int tamanho - */ - public int tamanho() { - int tamanho = 0; - for(CelulaDupla i = primeiro; i != ultimo; i = i.prox, tamanho++); - return tamanho; - } -} +/** + * Lista dupla dinamica + * @author Max do Val Machado + * @version 2 01/2015 + */ +class ListaDupla { + private CelulaDupla primeiro; + private CelulaDupla ultimo; + + + /** + * Construtor da classe que cria uma lista dupla sem elementos (somente no cabeca). + */ + public ListaDupla() { + primeiro = new CelulaDupla(); + ultimo = primeiro; + } + + + /** + * Insere um elemento na primeira posicao da lista. + * @param x int elemento a ser inserido. + */ + public void inserirInicio(int x) { + CelulaDupla tmp = new CelulaDupla(x); + + tmp.ant = primeiro; + tmp.prox = primeiro.prox; + primeiro.prox = tmp; + if(primeiro == ultimo){ + ultimo = tmp; + }else{ + tmp.prox.ant = tmp; + } + tmp = null; + } + + + /** + * Insere um elemento na ultima posicao da lista. + * @param x int elemento a ser inserido. + */ + public void inserirFim(int x) { + ultimo.prox = new CelulaDupla(x); + ultimo.prox.ant = ultimo; + ultimo = ultimo.prox; + } + + + /** + * Remove um elemento da primeira posicao da lista. + * @return resp int elemento a ser removido. + * @throws Exception Se a lista nao contiver elementos. + */ + public int removerInicio() throws Exception { + if (primeiro == ultimo) { + throw new Exception("Erro ao remover (vazia)!"); + } + + CelulaDupla tmp = primeiro; + primeiro = primeiro.prox; + int resp = primeiro.elemento; + tmp.prox = primeiro.ant = null; + tmp = null; + return resp; + } + + + /** + * Remove um elemento da ultima posicao da lista. + * @return resp int elemento a ser removido. + * @throws Exception Se a lista nao contiver elementos. + */ + public int removerFim() throws Exception { + if (primeiro == ultimo) { + throw new Exception("Erro ao remover (vazia)!"); + } + int resp = ultimo.elemento; + ultimo = ultimo.ant; + ultimo.prox.ant = null; + ultimo.prox = null; + return resp; + } + + + /** + * Insere um elemento em uma posicao especifica considerando que o + * primeiro elemento valido esta na posicao 0. + * @param x int elemento a ser inserido. + * @param pos int posicao da insercao. + * @throws Exception Se posicao invalida. + */ + public void inserir(int x, int pos) throws Exception { + + int tamanho = tamanho(); + + if(pos < 0 || pos > tamanho){ + throw new Exception("Erro ao inserir posicao (" + pos + " / tamanho = " + tamanho + ") invalida!"); + } else if (pos == 0){ + inserirInicio(x); + } else if (pos == tamanho){ + inserirFim(x); + } else { + // Caminhar ate a posicao anterior a insercao + CelulaDupla i = primeiro; + for(int j = 0; j < pos; j++, i = i.prox); + + CelulaDupla tmp = new CelulaDupla(x); + tmp.ant = i; + tmp.prox = i.prox; + tmp.ant.prox = tmp.prox.ant = tmp; + tmp = i = null; + } + } + + + /** + * Remove um elemento de uma posicao especifica da lista + * considerando que o primeiro elemento valido esta na posicao 0. + * @param posicao Meio da remocao. + * @return resp int elemento a ser removido. + * @throws Exception Se posicao invalida. + */ + public int remover(int pos) throws Exception { + int resp; + int tamanho = tamanho(); + + if (primeiro == ultimo){ + throw new Exception("Erro ao remover (vazia)!"); + + } else if(pos < 0 || pos >= tamanho){ + throw new Exception("Erro ao remover (posicao " + pos + " / " + tamanho + " invalida!"); + } else if (pos == 0){ + resp = removerInicio(); + } else if (pos == tamanho - 1){ + resp = removerFim(); + } else { + // Caminhar ate a posicao anterior a insercao + CelulaDupla i = primeiro.prox; + for(int j = 0; j < pos; j++, i = i.prox); + + i.ant.prox = i.prox; + i.prox.ant = i.ant; + resp = i.elemento; + i.prox = i.ant = null; + i = null; + } + + return resp; + } + + + /** + * Mostra os elementos da lista separados por espacos. + */ + public void mostrar() { + System.out.print("[ "); // Comeca a mostrar. + for (CelulaDupla i = primeiro.prox; i != null; i = i.prox) { + System.out.print(i.elemento + " "); + } + System.out.println("] "); // Termina de mostrar. + } + + + /** + * Mostra os elementos da lista de forma invertida + * e separados por espacos. + */ + public void mostrarInverso() { + System.out.print("[ "); + for (CelulaDupla i = ultimo; i != primeiro; i = i.ant){ + System.out.print(i.elemento + " "); + } + System.out.println("] "); // Termina de mostrar. + } + + + /** + * Procura um elemento e retorna se ele existe. + * @param x Elemento a pesquisar. + * @return true se o elemento existir, + * false em caso contrario. + */ + public boolean pesquisar(int x) { + boolean resp = false; + for (CelulaDupla i = primeiro.prox; i != null; i = i.prox) { + if(i.elemento == x){ + resp = true; + i = ultimo; + } + } + return resp; + } + + /** + * Calcula e retorna o tamanho, em numero de elementos, da lista. + * @return resp int tamanho + */ + public int tamanho() { + int tamanho = 0; + for(CelulaDupla i = primeiro; i != ultimo; i = i.prox, tamanho++); + return tamanho; + } +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/listadupla/PrincipalListaDupla.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/listadupla/PrincipalListaDupla.java similarity index 96% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/listadupla/PrincipalListaDupla.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/listadupla/PrincipalListaDupla.java index f2053bd..bfb50fd 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/listadupla/PrincipalListaDupla.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/listadupla/PrincipalListaDupla.java @@ -1,40 +1,40 @@ -/** - * Lista dupla dinamica - * @author Max do Val Machado - * @version 2 01/2015 - */ -class PrincipalListaDupla { - public static void main(String[] args) { - try { - System.out.println("=== LISTA DINAMICA DUPLAMENTE ENCADEADA ==="); - ListaDupla lista = new ListaDupla(); - - lista.inserirInicio(1); - lista.inserirInicio(0); - lista.inserirFim(4); - lista.inserirFim(5); - lista.inserir(2, 2); - lista.inserir(3, 3); - lista.inserir(6, 6); - lista.inserir(-1, 0); - lista.inserirFim(7); - lista.inserirFim(8); - - System.out.print("Apos insercoes: "); - lista.mostrar(); - - int x1 = lista.remover(3); - int x2 = lista.remover(2); - int x3 = lista.removerFim(); - int x4 = lista.removerInicio(); - int x5 = lista.remover(0); - int x6 = lista.remover(4); - - System.out.print("Apos remocoes (" +x1+ ", " +x2+ ", " +x3+ ", " +x4+ ", " +x5+ ", " +x6+ "): "); - lista.mostrar(); - } - catch(Exception erro) { - System.out.println(erro.getMessage()); - } - } -} +/** + * Lista dupla dinamica + * @author Max do Val Machado + * @version 2 01/2015 + */ +class PrincipalListaDupla { + public static void main(String[] args) { + try { + System.out.println("=== LISTA DINAMICA DUPLAMENTE ENCADEADA ==="); + ListaDupla lista = new ListaDupla(); + + lista.inserirInicio(1); + lista.inserirInicio(0); + lista.inserirFim(4); + lista.inserirFim(5); + lista.inserir(2, 2); + lista.inserir(3, 3); + lista.inserir(6, 6); + lista.inserir(-1, 0); + lista.inserirFim(7); + lista.inserirFim(8); + + System.out.print("Apos insercoes: "); + lista.mostrar(); + + int x1 = lista.remover(3); + int x2 = lista.remover(2); + int x3 = lista.removerFim(); + int x4 = lista.removerInicio(); + int x5 = lista.remover(0); + int x6 = lista.remover(4); + + System.out.print("Apos remocoes (" +x1+ ", " +x2+ ", " +x3+ ", " +x4+ ", " +x5+ ", " +x6+ "): "); + lista.mostrar(); + } + catch(Exception erro) { + System.out.println(erro.getMessage()); + } + } +} diff --git a/fonte/u05 Árvores binárias/matrizDeLista/Celula.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/listasimples/Celula.java similarity index 94% rename from fonte/u05 Árvores binárias/matrizDeLista/Celula.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/listasimples/Celula.java index 866b654..4a92aef 100644 --- a/fonte/u05 Árvores binárias/matrizDeLista/Celula.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/listasimples/Celula.java @@ -1,26 +1,26 @@ -/** - * Celula (pilha, lista e fila dinamica) - * @author Max do Val Machado - * @version 2 01/2015 - */ -class Celula { - public int elemento; // Elemento inserido na celula. - public Celula prox; // Aponta a celula prox. - - - /** - * Construtor da classe. - */ - public Celula() { - this(0); - } - - /** - * Construtor da classe. - * @param elemento int inserido na celula. - */ - public Celula(int elemento) { - this.elemento = elemento; - this.prox = null; - } -} +/** + * Celula (pilha, lista e fila dinamica) + * @author Max do Val Machado + * @version 2 01/2015 + */ +class Celula { + public int elemento; // Elemento inserido na celula. + public Celula prox; // Aponta a celula prox. + + + /** + * Construtor da classe. + */ + public Celula() { + this(0); + } + + /** + * Construtor da classe. + * @param elemento int inserido na celula. + */ + public Celula(int elemento) { + this.elemento = elemento; + this.prox = null; + } +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/listasimples/Lista.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/listasimples/Lista.java similarity index 96% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/listasimples/Lista.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/listasimples/Lista.java index 6df4bf7..417aa5e 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/listasimples/Lista.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/listasimples/Lista.java @@ -1,188 +1,188 @@ -/** - * Lista dinamica - * @author Max do Val Machado - * @version 2 01/2015 - */ -class Lista { - private Celula primeiro; - private Celula ultimo; - - - /** - * Construtor da classe que cria uma lista sem elementos (somente no cabeca). - */ - public Lista() { - primeiro = new Celula(); - ultimo = primeiro; - } - - - /** - * Insere um elemento na primeira posicao da lista. - * @param x int elemento a ser inserido. - */ - public void inserirInicio(int x) { - Celula tmp = new Celula(x); - tmp.prox = primeiro.prox; - primeiro.prox = tmp; - if (primeiro == ultimo) { - ultimo = tmp; - } - tmp = null; - } - - - /** - * Insere um elemento na ultima posicao da lista. - * @param x int elemento a ser inserido. - */ - public void inserirFim(int x) { - ultimo.prox = new Celula(x); - ultimo = ultimo.prox; - } - - - /** - * Remove um elemento da primeira posicao da lista. - * @return resp int elemento a ser removido. - * @throws Exception Se a lista nao contiver elementos. - */ - public int removerInicio() throws Exception { - if (primeiro == ultimo) { - throw new Exception("Erro ao remover (vazia)!"); - } - - Celula tmp = primeiro; - primeiro = primeiro.prox; - int resp = primeiro.elemento; - tmp.prox = null; - tmp = null; - return resp; - } - - - /** - * Remove um elemento da ultima posicao da lista. - * @return resp int elemento a ser removido. - * @throws Exception Se a lista nao contiver elementos. - */ - public int removerFim() throws Exception { - if (primeiro == ultimo) { - throw new Exception("Erro ao remover (vazia)!"); - } - - // Caminhar ate a penultima celula: - Celula i; - for(i = primeiro; i.prox != ultimo; i = i.prox); - - int resp = ultimo.elemento; - ultimo = i; - i = ultimo.prox = null; - - return resp; - } - - - /** - * Insere um elemento em uma posicao especifica considerando que o - * primeiro elemento valido esta na posicao 0. - * @param x int elemento a ser inserido. - * @param pos int posicao da insercao. - * @throws Exception Se posicao invalida. - */ - public void inserir(int x, int pos) throws Exception { - - int tamanho = tamanho(); - - if(pos < 0 || pos > tamanho){ - throw new Exception("Erro ao inserir posicao (" + pos + " / tamanho = " + tamanho + ") invalida!"); - } else if (pos == 0){ - inserirInicio(x); - } else if (pos == tamanho){ - inserirFim(x); - } else { - // Caminhar ate a posicao anterior a insercao - Celula i = primeiro; - for(int j = 0; j < pos; j++, i = i.prox); - - Celula tmp = new Celula(x); - tmp.prox = i.prox; - i.prox = tmp; - tmp = i = null; - } - } - - - /** - * Remove um elemento de uma posicao especifica da lista - * considerando que o primeiro elemento valido esta na posicao 0. - * @param posicao Meio da remocao. - * @return resp int elemento a ser removido. - * @throws Exception Se posicao invalida. - */ - public int remover(int pos) throws Exception { - int resp; - int tamanho = tamanho(); - - if (primeiro == ultimo){ - throw new Exception("Erro ao remover (vazia)!"); - - } else if(pos < 0 || pos >= tamanho){ - throw new Exception("Erro ao remover (posicao " + pos + " / " + tamanho + " invalida!"); - } else if (pos == 0){ - resp = removerInicio(); - } else if (pos == tamanho - 1){ - resp = removerFim(); - } else { - // Caminhar ate a posicao anterior a insercao - Celula i = primeiro; - for(int j = 0; j < pos; j++, i = i.prox); - - Celula tmp = i.prox; - resp = tmp.elemento; - i.prox = tmp.prox; - tmp.prox = null; - i = tmp = null; - } - - return resp; - } - - /** - * Mostra os elementos da lista separados por espacos. - */ - public void mostrar() { - System.out.print("[ "); - for (Celula i = primeiro.prox; i != null; i = i.prox) { - System.out.print(i.elemento + " "); - } - System.out.println("] "); - } - - /** - * Procura um elemento e retorna se ele existe. - * @param x Elemento a pesquisar. - * @return true se o elemento existir, - * false em caso contrario. - */ - public boolean pesquisar(int x) { - boolean resp = false; - for (Celula i = primeiro.prox; i != null; i = i.prox) { - if(i.elemento == x){ - resp = true; - i = ultimo; - } - } - return resp; - } - - /** - * Calcula e retorna o tamanho, em numero de elementos, da lista. - * @return resp int tamanho - */ - public int tamanho() { - int tamanho = 0; - for(Celula i = primeiro; i != ultimo; i = i.prox, tamanho++); - return tamanho; - } -} +/** + * Lista dinamica + * @author Max do Val Machado + * @version 2 01/2015 + */ +class Lista { + private Celula primeiro; + private Celula ultimo; + + + /** + * Construtor da classe que cria uma lista sem elementos (somente no cabeca). + */ + public Lista() { + primeiro = new Celula(); + ultimo = primeiro; + } + + + /** + * Insere um elemento na primeira posicao da lista. + * @param x int elemento a ser inserido. + */ + public void inserirInicio(int x) { + Celula tmp = new Celula(x); + tmp.prox = primeiro.prox; + primeiro.prox = tmp; + if (primeiro == ultimo) { + ultimo = tmp; + } + tmp = null; + } + + + /** + * Insere um elemento na ultima posicao da lista. + * @param x int elemento a ser inserido. + */ + public void inserirFim(int x) { + ultimo.prox = new Celula(x); + ultimo = ultimo.prox; + } + + + /** + * Remove um elemento da primeira posicao da lista. + * @return resp int elemento a ser removido. + * @throws Exception Se a lista nao contiver elementos. + */ + public int removerInicio() throws Exception { + if (primeiro == ultimo) { + throw new Exception("Erro ao remover (vazia)!"); + } + + Celula tmp = primeiro; + primeiro = primeiro.prox; + int resp = primeiro.elemento; + tmp.prox = null; + tmp = null; + return resp; + } + + + /** + * Remove um elemento da ultima posicao da lista. + * @return resp int elemento a ser removido. + * @throws Exception Se a lista nao contiver elementos. + */ + public int removerFim() throws Exception { + if (primeiro == ultimo) { + throw new Exception("Erro ao remover (vazia)!"); + } + + // Caminhar ate a penultima celula: + Celula i; + for(i = primeiro; i.prox != ultimo; i = i.prox); + + int resp = ultimo.elemento; + ultimo = i; + i = ultimo.prox = null; + + return resp; + } + + + /** + * Insere um elemento em uma posicao especifica considerando que o + * primeiro elemento valido esta na posicao 0. + * @param x int elemento a ser inserido. + * @param pos int posicao da insercao. + * @throws Exception Se posicao invalida. + */ + public void inserir(int x, int pos) throws Exception { + + int tamanho = tamanho(); + + if(pos < 0 || pos > tamanho){ + throw new Exception("Erro ao inserir posicao (" + pos + " / tamanho = " + tamanho + ") invalida!"); + } else if (pos == 0){ + inserirInicio(x); + } else if (pos == tamanho){ + inserirFim(x); + } else { + // Caminhar ate a posicao anterior a insercao + Celula i = primeiro; + for(int j = 0; j < pos; j++, i = i.prox); + + Celula tmp = new Celula(x); + tmp.prox = i.prox; + i.prox = tmp; + tmp = i = null; + } + } + + + /** + * Remove um elemento de uma posicao especifica da lista + * considerando que o primeiro elemento valido esta na posicao 0. + * @param posicao Meio da remocao. + * @return resp int elemento a ser removido. + * @throws Exception Se posicao invalida. + */ + public int remover(int pos) throws Exception { + int resp; + int tamanho = tamanho(); + + if (primeiro == ultimo){ + throw new Exception("Erro ao remover (vazia)!"); + + } else if(pos < 0 || pos >= tamanho){ + throw new Exception("Erro ao remover (posicao " + pos + " / " + tamanho + " invalida!"); + } else if (pos == 0){ + resp = removerInicio(); + } else if (pos == tamanho - 1){ + resp = removerFim(); + } else { + // Caminhar ate a posicao anterior a insercao + Celula i = primeiro; + for(int j = 0; j < pos; j++, i = i.prox); + + Celula tmp = i.prox; + resp = tmp.elemento; + i.prox = tmp.prox; + tmp.prox = null; + i = tmp = null; + } + + return resp; + } + + /** + * Mostra os elementos da lista separados por espacos. + */ + public void mostrar() { + System.out.print("[ "); + for (Celula i = primeiro.prox; i != null; i = i.prox) { + System.out.print(i.elemento + " "); + } + System.out.println("] "); + } + + /** + * Procura um elemento e retorna se ele existe. + * @param x Elemento a pesquisar. + * @return true se o elemento existir, + * false em caso contrario. + */ + public boolean pesquisar(int x) { + boolean resp = false; + for (Celula i = primeiro.prox; i != null; i = i.prox) { + if(i.elemento == x){ + resp = true; + i = ultimo; + } + } + return resp; + } + + /** + * Calcula e retorna o tamanho, em numero de elementos, da lista. + * @return resp int tamanho + */ + public int tamanho() { + int tamanho = 0; + for(Celula i = primeiro; i != ultimo; i = i.prox, tamanho++); + return tamanho; + } +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/listasimples/PrincipalLista.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/listasimples/PrincipalLista.java similarity index 96% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/listasimples/PrincipalLista.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/listasimples/PrincipalLista.java index ca719f3..2c7a195 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/listasimples/PrincipalLista.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/listasimples/PrincipalLista.java @@ -1,41 +1,41 @@ -/** - * Lista simples dinamica - * @author Max do Val Machado - * @version 2 01/2015 - */ -class PrincipalLista { - public static void main(String[] args) { - try { - System.out.println("=== LISTA FLEXIVEL SIMPLESMENTE ENCADEADA ==="); - Lista lista = new Lista(); - - lista.inserirInicio(1); - lista.inserirInicio(0); - lista.inserirFim(4); - lista.inserirFim(5); - lista.inserir(2, 2); - lista.inserir(3, 3); - lista.inserir(6, 6); - lista.inserir(-1, 0); - lista.inserirFim(7); - lista.inserirFim(8); - - System.out.print("Apos insercoes: "); - lista.mostrar(); - - int x1 = lista.remover(3); - int x2 = lista.remover(2); - int x3 = lista.removerFim(); - int x4 = lista.removerInicio(); - int x5 = lista.remover(0); - int x6 = lista.remover(4); - lista.inserirFim(9); - - System.out.print("Apos remocoes (" +x1+ ", " +x2+ ", " +x3+ ", " +x4+ ", " +x5+ ", " +x6+ "): "); - lista.mostrar(); - } - catch(Exception erro) { - System.out.println(erro.getMessage()); - } - } -} +/** + * Lista simples dinamica + * @author Max do Val Machado + * @version 2 01/2015 + */ +class PrincipalLista { + public static void main(String[] args) { + try { + System.out.println("=== LISTA FLEXIVEL SIMPLESMENTE ENCADEADA ==="); + Lista lista = new Lista(); + + lista.inserirInicio(1); + lista.inserirInicio(0); + lista.inserirFim(4); + lista.inserirFim(5); + lista.inserir(2, 2); + lista.inserir(3, 3); + lista.inserir(6, 6); + lista.inserir(-1, 0); + lista.inserirFim(7); + lista.inserirFim(8); + + System.out.print("Apos insercoes: "); + lista.mostrar(); + + int x1 = lista.remover(3); + int x2 = lista.remover(2); + int x3 = lista.removerFim(); + int x4 = lista.removerInicio(); + int x5 = lista.remover(0); + int x6 = lista.remover(4); + lista.inserirFim(9); + + System.out.print("Apos remocoes (" +x1+ ", " +x2+ ", " +x3+ ", " +x4+ ", " +x5+ ", " +x6+ "): "); + lista.mostrar(); + } + catch(Exception erro) { + System.out.println(erro.getMessage()); + } + } +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/matriz/Celula.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/matriz/Celula.java similarity index 95% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/matriz/Celula.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/matriz/Celula.java index e5723ff..575a3b9 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/matriz/Celula.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/matriz/Celula.java @@ -1,20 +1,20 @@ -class Celula { - public int elemento; - public Celula inf, sup, esq, dir; - - public Celula(){ - this(0); - } - - public Celula(int elemento){ - this(elemento, null, null, null, null); - } - - public Celula(int elemento, Celula inf, Celula sup, Celula esq, Celula dir){ - this.elemento = elemento; - this.inf = inf; - this.sup = sup; - this.esq = esq; - this.dir = dir; - } -} +class Celula { + public int elemento; + public Celula inf, sup, esq, dir; + + public Celula(){ + this(0); + } + + public Celula(int elemento){ + this(elemento, null, null, null, null); + } + + public Celula(int elemento, Celula inf, Celula sup, Celula esq, Celula dir){ + this.elemento = elemento; + this.inf = inf; + this.sup = sup; + this.esq = esq; + this.dir = dir; + } +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/matriz/Matriz.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/matriz/Matriz.java similarity index 94% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/matriz/Matriz.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/matriz/Matriz.java index 52843ec..d7f9c99 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/matriz/Matriz.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/matriz/Matriz.java @@ -1,58 +1,58 @@ -class Matriz { - private Celula inicio; - private int linha, coluna; - - public Matriz (){ - Matriz(3, 3); - } - - public Matriz (int linha, int coluna){ - this.linha = linha; - this.coluna = coluna; - - //alocar a matriz com this.linha linhas e this.coluna colunas - } - - - public Matriz soma (Matriz m) { - Matriz resp = null; - - if(this.linha == m.linha && this.coluna == m.coluna){ - resp = new Matriz(this.linha, this.coluna); - for(){ - for(){ - //sendo c (pont em resp), a (em this) e b (em m) - c.elemento = a.elemento + b.elemento; - } - } - //... - } - - return resp; - } - - public Matriz multiplicacao (Matriz m) { - Matriz resp = null; - - if(){ - //... - } - - return resp; - } - - public boolean isQuadrada(){ - boolean (this.linha == this.coluna); - } - - public void mostrarDiagonalPrincipal (){ - if(isQuadrada() == true){ - - } - } - - public void mostrarDiagonalSecundaria (){ - if(isQuadrada() == true){ - } - } -} +class Matriz { + private Celula inicio; + private int linha, coluna; + + public Matriz (){ + Matriz(3, 3); + } + + public Matriz (int linha, int coluna){ + this.linha = linha; + this.coluna = coluna; + + //alocar a matriz com this.linha linhas e this.coluna colunas + } + + + public Matriz soma (Matriz m) { + Matriz resp = null; + + if(this.linha == m.linha && this.coluna == m.coluna){ + resp = new Matriz(this.linha, this.coluna); + for(){ + for(){ + //sendo c (pont em resp), a (em this) e b (em m) + c.elemento = a.elemento + b.elemento; + } + } + //... + } + + return resp; + } + + public Matriz multiplicacao (Matriz m) { + Matriz resp = null; + + if(){ + //... + } + + return resp; + } + + public boolean isQuadrada(){ + boolean (this.linha == this.coluna); + } + + public void mostrarDiagonalPrincipal (){ + if(isQuadrada() == true){ + + } + } + + public void mostrarDiagonalSecundaria (){ + if(isQuadrada() == true){ + } + } +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/matriz/Principal.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/matriz/Principal.java similarity index 97% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/matriz/Principal.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/matriz/Principal.java index e9dcb9d..9dfc596 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/matriz/Principal.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/matriz/Principal.java @@ -1,30 +1,30 @@ -class Principal { - - public static void main(String[] args){ - Matriz m1, m2, soma, m3, m4, multiplicao; - - m1 = new Matriz(MyIO.readInt("Digite o numero de linhas (M1): "), MyIO.readInt("Digite o numero de colunas (M1): ")); - m2 = new Matriz(MyIO.readInt("Digite o numero de linhas (M2): "), MyIO.readInt("Digite o numero de colunas (M2): ")); - m3 = new Matriz(MyIO.readInt("Digite o numero de linhas (M3): "), MyIO.readInt("Digite o numero de colunas (M3): ")); - m4 = new Matriz(MyIO.readInt("Digite o numero de linhas (M4): "), MyIO.readInt("Digite o numero de colunas (M4): ")); - - - m1.ler(); - m2.ler(); - m3.ler(); - m4.ler(); - - //Somar as duas matrizes e salvar o resultado na matriz soma - soma = m1.soma(m2); //verifique se eh possivel somar - - //Imprimir a matriz 1 - soma.print(); - - //Multiplicar duas matrizes e salvar o resultado na matriz multiplicacao - multiplicacao = m3.multiplicacao(m4); //verifique se eh possivel multiplicar - - //Imprimir a matriz 1 - multiplicacao.print(); - - } -} +class Principal { + + public static void main(String[] args){ + Matriz m1, m2, soma, m3, m4, multiplicao; + + m1 = new Matriz(MyIO.readInt("Digite o numero de linhas (M1): "), MyIO.readInt("Digite o numero de colunas (M1): ")); + m2 = new Matriz(MyIO.readInt("Digite o numero de linhas (M2): "), MyIO.readInt("Digite o numero de colunas (M2): ")); + m3 = new Matriz(MyIO.readInt("Digite o numero de linhas (M3): "), MyIO.readInt("Digite o numero de colunas (M3): ")); + m4 = new Matriz(MyIO.readInt("Digite o numero de linhas (M4): "), MyIO.readInt("Digite o numero de colunas (M4): ")); + + + m1.ler(); + m2.ler(); + m3.ler(); + m4.ler(); + + //Somar as duas matrizes e salvar o resultado na matriz soma + soma = m1.soma(m2); //verifique se eh possivel somar + + //Imprimir a matriz 1 + soma.print(); + + //Multiplicar duas matrizes e salvar o resultado na matriz multiplicacao + multiplicacao = m3.multiplicacao(m4); //verifique se eh possivel multiplicar + + //Imprimir a matriz 1 + multiplicacao.print(); + + } +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/matriz/entrada.in b/Codigos/u04 Estruturas de dados básicas flexíveis/java/matriz/entrada.in similarity index 95% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/matriz/entrada.in rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/matriz/entrada.in index ee5a1e2..bf6e3cf 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/matriz/entrada.in +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/matriz/entrada.in @@ -1,37 +1,37 @@ -quantidade de testes (por exemplo, 3) -linhas da primeira matriz do primeiro teste -colunas da primeira matriz do primeiro teste -x x x x x ... x -x x x x x ... x -... -x x x x x ... x -linhas da segunda matriz do primeiro teste -colunas da segunda matriz do primeiro teste -x x x x x ... x -x x x x x ... x -... -x x x x x ... x -linhas da primeira matriz do segundo teste -colunas da primeira matriz do segundo teste -x x x x x ... x -x x x x x ... x -... -x x x x x ... x -linhas da segunda matriz do segundo teste -colunas da segunda matriz do segundo teste -x x x x x ... x -x x x x x ... x -... -x x x x x ... x -linhas da primeira matriz do terceiro teste -colunas da primeira matriz do terceiro teste -x x x x x ... x -x x x x x ... x -... -x x x x x ... x -linhas da segunda matriz do terceiro teste -colunas da segunda matriz do terceiro teste -x x x x x ... x -x x x x x ... x -... -x x x x x ... x +quantidade de testes (por exemplo, 3) +linhas da primeira matriz do primeiro teste +colunas da primeira matriz do primeiro teste +x x x x x ... x +x x x x x ... x +... +x x x x x ... x +linhas da segunda matriz do primeiro teste +colunas da segunda matriz do primeiro teste +x x x x x ... x +x x x x x ... x +... +x x x x x ... x +linhas da primeira matriz do segundo teste +colunas da primeira matriz do segundo teste +x x x x x ... x +x x x x x ... x +... +x x x x x ... x +linhas da segunda matriz do segundo teste +colunas da segunda matriz do segundo teste +x x x x x ... x +x x x x x ... x +... +x x x x x ... x +linhas da primeira matriz do terceiro teste +colunas da primeira matriz do terceiro teste +x x x x x ... x +x x x x x ... x +... +x x x x x ... x +linhas da segunda matriz do terceiro teste +colunas da segunda matriz do terceiro teste +x x x x x ... x +x x x x x ... x +... +x x x x x ... x diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/listasimples/Celula.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/pilha/Celula.java similarity index 94% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/listasimples/Celula.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/pilha/Celula.java index 866b654..4a92aef 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/listasimples/Celula.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/pilha/Celula.java @@ -1,26 +1,26 @@ -/** - * Celula (pilha, lista e fila dinamica) - * @author Max do Val Machado - * @version 2 01/2015 - */ -class Celula { - public int elemento; // Elemento inserido na celula. - public Celula prox; // Aponta a celula prox. - - - /** - * Construtor da classe. - */ - public Celula() { - this(0); - } - - /** - * Construtor da classe. - * @param elemento int inserido na celula. - */ - public Celula(int elemento) { - this.elemento = elemento; - this.prox = null; - } -} +/** + * Celula (pilha, lista e fila dinamica) + * @author Max do Val Machado + * @version 2 01/2015 + */ +class Celula { + public int elemento; // Elemento inserido na celula. + public Celula prox; // Aponta a celula prox. + + + /** + * Construtor da classe. + */ + public Celula() { + this(0); + } + + /** + * Construtor da classe. + * @param elemento int inserido na celula. + */ + public Celula(int elemento) { + this.elemento = elemento; + this.prox = null; + } +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/pilha/Pilha.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/pilha/Pilha.java similarity index 94% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/pilha/Pilha.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/pilha/Pilha.java index 66a90fa..38cc07a 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/pilha/Pilha.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/pilha/Pilha.java @@ -1,90 +1,90 @@ -/** - * Pilha dinamica - * - * @author Max do Val Machado - * @version 2 01/2015 - */ -public class Pilha { - private Celula topo; - - /** - * Construtor da classe que cria uma fila sem elementos. - */ - public Pilha() { - topo = null; - } - - /** - * Insere elemento na pilha (politica FILO). - * - * @param x int elemento a inserir. - */ - public void inserir(int x) { - Celula tmp = new Celula(x); - tmp.prox = topo; - topo = tmp; - tmp = null; - } - - /** - * Remove elemento da pilha (politica FILO). - * - * @return Elemento removido. - * @trhows Exception Se a sequencia nao contiver elementos. - */ - public int remover() throws Exception { - if (topo == null) { - throw new Exception("Erro ao remover!"); - } - int resp = topo.elemento; - Celula tmp = topo; - topo = topo.prox; - tmp.prox = null; - tmp = null; - return resp; - } - - /** - * Mostra os elementos separados por espacos, comecando do topo. - */ - public void mostrar() { - System.out.print("[ "); - for (Celula i = topo; i != null; i = i.prox) { - System.out.print(i.elemento + " "); - } - System.out.println("] "); - } - - public int getSoma() { - return getSoma(topo); - } - - private int getSoma(Celula i) { - int resp = 0; - if (i != null) { - resp += i.elemento + getSoma(i.prox); - } - return resp; - } - - public int getMax() { - int max = topo.elemento; - for (Celula i = topo.prox; i != null; i = i.prox) { - if (i.elemento > max) - max = i.elemento; - } - return max; - } - - public void mostraPilha() { - mostraPilha(topo); - } - - private void mostraPilha(Celula i) { - if (i != null) { - mostraPilha(i.prox); - System.out.println("" + i.elemento); - } - } - -} +/** + * Pilha dinamica + * + * @author Max do Val Machado + * @version 2 01/2015 + */ +public class Pilha { + private Celula topo; + + /** + * Construtor da classe que cria uma fila sem elementos. + */ + public Pilha() { + topo = null; + } + + /** + * Insere elemento na pilha (politica FILO). + * + * @param x int elemento a inserir. + */ + public void inserir(int x) { + Celula tmp = new Celula(x); + tmp.prox = topo; + topo = tmp; + tmp = null; + } + + /** + * Remove elemento da pilha (politica FILO). + * + * @return Elemento removido. + * @trhows Exception Se a sequencia nao contiver elementos. + */ + public int remover() throws Exception { + if (topo == null) { + throw new Exception("Erro ao remover!"); + } + int resp = topo.elemento; + Celula tmp = topo; + topo = topo.prox; + tmp.prox = null; + tmp = null; + return resp; + } + + /** + * Mostra os elementos separados por espacos, comecando do topo. + */ + public void mostrar() { + System.out.print("[ "); + for (Celula i = topo; i != null; i = i.prox) { + System.out.print(i.elemento + " "); + } + System.out.println("] "); + } + + public int getSoma() { + return getSoma(topo); + } + + private int getSoma(Celula i) { + int resp = 0; + if (i != null) { + resp += i.elemento + getSoma(i.prox); + } + return resp; + } + + public int getMax() { + int max = topo.elemento; + for (Celula i = topo.prox; i != null; i = i.prox) { + if (i.elemento > max) + max = i.elemento; + } + return max; + } + + public void mostraPilha() { + mostraPilha(topo); + } + + private void mostraPilha(Celula i) { + if (i != null) { + mostraPilha(i.prox); + System.out.println("" + i.elemento); + } + } + +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/pilha/PrincipalPilha.java b/Codigos/u04 Estruturas de dados básicas flexíveis/java/pilha/PrincipalPilha.java similarity index 95% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/pilha/PrincipalPilha.java rename to Codigos/u04 Estruturas de dados básicas flexíveis/java/pilha/PrincipalPilha.java index 6bffa56..3dc7bf1 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/pilha/PrincipalPilha.java +++ b/Codigos/u04 Estruturas de dados básicas flexíveis/java/pilha/PrincipalPilha.java @@ -1,35 +1,35 @@ -/** - * Pilha dinamica - * @author Max do Val Machado - * @version 2 01/2015 - */ -public class PrincipalPilha { - public static void main(String[] args) { - try { - System.out.println(" ==== PILHA FLEXIVEL ===="); - Pilha pilha = new Pilha(); - int x1, x2, x3; - - pilha.inserir(0); - pilha.inserir(1); - pilha.inserir(2); - pilha.inserir(3); - pilha.inserir(4); - pilha.inserir(5); - - System.out.print("Apos insercoes: "); - pilha.mostrar(); - - x1 = pilha.remover(); - x2 = pilha.remover(); - x3 = pilha.remover(); - - System.out.print("Apos as remocoes (" + x1 + "," + x2 + "," + x3 + "): "); - pilha.mostrar(); - - } - catch(Exception erro) { - System.out.println(erro.getMessage()); - } - } -} +/** + * Pilha dinamica + * @author Max do Val Machado + * @version 2 01/2015 + */ +public class PrincipalPilha { + public static void main(String[] args) { + try { + System.out.println(" ==== PILHA FLEXIVEL ===="); + Pilha pilha = new Pilha(); + int x1, x2, x3; + + pilha.inserir(0); + pilha.inserir(1); + pilha.inserir(2); + pilha.inserir(3); + pilha.inserir(4); + pilha.inserir(5); + + System.out.print("Apos insercoes: "); + pilha.mostrar(); + + x1 = pilha.remover(); + x2 = pilha.remover(); + x3 = pilha.remover(); + + System.out.print("Apos as remocoes (" + x1 + "," + x2 + "," + x3 + "): "); + pilha.mostrar(); + + } + catch(Exception erro) { + System.out.println(erro.getMessage()); + } + } +} diff --git a/fonte/u05 Árvores binárias/README.md b/Codigos/u05 Árvores binárias/README.md similarity index 98% rename from fonte/u05 Árvores binárias/README.md rename to Codigos/u05 Árvores binárias/README.md index 60f881b..8f30142 100644 --- a/fonte/u05 Árvores binárias/README.md +++ b/Codigos/u05 Árvores binárias/README.md @@ -1,2 +1,2 @@ -# U6 - Árvores binárias -Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II +# U6 - Árvores binárias +Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II diff --git a/fonte/u05 Árvores binárias/arvoreArvore/ArvoreArvore.java b/Codigos/u05 Árvores binárias/arvoreArvore/ArvoreArvore.java similarity index 95% rename from fonte/u05 Árvores binárias/arvoreArvore/ArvoreArvore.java rename to Codigos/u05 Árvores binárias/arvoreArvore/ArvoreArvore.java index 66949dc..878739a 100644 --- a/fonte/u05 Árvores binárias/arvoreArvore/ArvoreArvore.java +++ b/Codigos/u05 Árvores binárias/arvoreArvore/ArvoreArvore.java @@ -1,223 +1,223 @@ -/** - * Arvore de arvore - * @author Max do Val Machado - */ -public class ArvoreArvore { - private No raiz; // Raiz da arvore. - - /** - * Construtor da classe. - */ - public ArvoreArvore() { - raiz = null; - inserir('M'); - inserir('T'); - inserir('F'); - //os outros 23 caracteres. - } - - public void inserir(char letra){ - //igualzinho (mesmo, de verdade) ao da árvore binária padrão!!! - } - - - public void inserir(String s){ - inserir(s, raiz); - } - - public void inserir(String s, No i) throws Exception { - if (i == null) { - throw new Exception("Erro ao inserir: caractere invalido!"); - - } else if (s.charAt(0) < i.elemento) { - inserir(x, i.esq); - - } else if (s.charAt(0) > i.elemento) { - inserir(x, i.dir); - - } else { - i.outro = inserir(s, i.outro); - } - } - - - private No2 inserir(String s, No2 i) throws Exception { - if (i == null) { - i = new No2(x); - - } else if (s.compareTo(i.elemento) < 0) { - i.esq = inserir(x, i.esq); - - } else if (s.compareTo(i.elemento) > 0) { - i.dir = inserir(x, i.dir); - - } else { - throw new Exception("Erro ao inserir: elemento existente!"); - } - - return i; - } - - - public void mostrar(){ - mostrar(raiz); - } - - public void mostrar(No i){ - if (i != null){ - mostrar(i.esq); - //System.out.println("Letra: " + i.elemento); - mostrar(i.outra); - mostrar(i.dir); - } - } - - public void mostrar(No2 i){ - if (i != null){ - mostrar(i.esq); - System.out.println(i.elemento); - mostrar(i.dir); - } - } - - - - public boolean hasStringTam10(){ - return hasStringTam10(raiz); - } - - public boolean hasStringTam10(No i){ - boolean resp = false; - if(i != null){ - resp = hasStringTam10(i.outro) || hasStringTam10(i.esq) || hasStringTam10(i.dir); - } - return resp; - } - - public boolean hasStringTam10(No2 i){ - boolean resp = false; - if(i != null){ - resp = i.elemento.length() == 10 || hasStringTam10(i.esq) || hasStringTam10(i.dir); - } - return resp; - } - - - public boolean hasStringTam10(char c){ - return hasStringTam10(raiz, c); - } - - public boolean hasStringTam10(No i, char c){ - boolean resp; - if (i == null) { - resp = false; - - } else if (c < i.elemento) { - resp = hasStringTam10(i.esq, c); - - } else if (c > i.elemento) { - resp = hasStringTam10(i.dir, c); - - } else { - resp = hasStringTam10(i.outro); - } - return resp; - } - - - - - - /** - * Metodo publico iterativo para pesquisar elemento. - * @param elemento Elemento que sera procurado. - * @return true se o elemento existir, - * false em caso contrario. - */ - public boolean pesquisar(String elemento) { - return pesquisar(raiz, elemento); - } - - private boolean pesquisar(No no, String x) { - boolean resp; - if (no == null) { - resp = false; - - } else if (x.charAt(0) < no.elemento) { - resp = pesquisar(no.esq, x); - - } else if (x.charAt(0) > no.elemento) { - resp = pesquisar(no.dir, x); - - } else { - resp = pesquisarSegundaArvore(no.outro, x); - } - return resp; - } - - private boolean pesquisarSegundaArvore(No2 no, String x) { - boolean resp; - if (no == null) { - resp = false; - - } else if (x.compareTo(no.elemento) < 0) { - resp = pesquisarSegundaArvore(no.esq, x); - - } else if (x.compareTo(no.elemento) > 0) { - resp = pesquisarSegundaArvore(no.dir, x); - - } else { - resp = true; - } - return resp; - } - - - public int contPalavra(char letra){ - return contPalavra(letra, raiz); - } - - public int contPalavra(char letra, No i) throws Exception { - int resp = 0; - - if (i == null) { - throw new Exception("Erro ao pesquisar: caractere invalido!"); - - } else if (letra < i.elemento) { - resp = contPalavra(letra, i.esq); - - } else if (letra > i.elemento) { - resp = contPalavra(letra, i.dir); - - } else { - resp = contPalavra(i.outro); - } - - return resp; - } - - public int contPalavra(No2 i){ - int resp = 0; - if(i != null){ - resp = 1 + contPalavra(i.esq) + contPalavra(i.dir); - } - return resp; - } -} - - - - - - - - - - - - - - - - - +/** + * Arvore de arvore + * @author Max do Val Machado + */ +public class ArvoreArvore { + private No raiz; // Raiz da arvore. + + /** + * Construtor da classe. + */ + public ArvoreArvore() { + raiz = null; + inserir('M'); + inserir('T'); + inserir('F'); + //os outros 23 caracteres. + } + + public void inserir(char letra){ + //igualzinho (mesmo, de verdade) ao da árvore binária padrão!!! + } + + + public void inserir(String s){ + inserir(s, raiz); + } + + public void inserir(String s, No i) throws Exception { + if (i == null) { + throw new Exception("Erro ao inserir: caractere invalido!"); + + } else if (s.charAt(0) < i.elemento) { + inserir(x, i.esq); + + } else if (s.charAt(0) > i.elemento) { + inserir(x, i.dir); + + } else { + i.outro = inserir(s, i.outro); + } + } + + + private No2 inserir(String s, No2 i) throws Exception { + if (i == null) { + i = new No2(x); + + } else if (s.compareTo(i.elemento) < 0) { + i.esq = inserir(x, i.esq); + + } else if (s.compareTo(i.elemento) > 0) { + i.dir = inserir(x, i.dir); + + } else { + throw new Exception("Erro ao inserir: elemento existente!"); + } + + return i; + } + + + public void mostrar(){ + mostrar(raiz); + } + + public void mostrar(No i){ + if (i != null){ + mostrar(i.esq); + //System.out.println("Letra: " + i.elemento); + mostrar(i.outra); + mostrar(i.dir); + } + } + + public void mostrar(No2 i){ + if (i != null){ + mostrar(i.esq); + System.out.println(i.elemento); + mostrar(i.dir); + } + } + + + + public boolean hasStringTam10(){ + return hasStringTam10(raiz); + } + + public boolean hasStringTam10(No i){ + boolean resp = false; + if(i != null){ + resp = hasStringTam10(i.outro) || hasStringTam10(i.esq) || hasStringTam10(i.dir); + } + return resp; + } + + public boolean hasStringTam10(No2 i){ + boolean resp = false; + if(i != null){ + resp = i.elemento.length() == 10 || hasStringTam10(i.esq) || hasStringTam10(i.dir); + } + return resp; + } + + + public boolean hasStringTam10(char c){ + return hasStringTam10(raiz, c); + } + + public boolean hasStringTam10(No i, char c){ + boolean resp; + if (i == null) { + resp = false; + + } else if (c < i.elemento) { + resp = hasStringTam10(i.esq, c); + + } else if (c > i.elemento) { + resp = hasStringTam10(i.dir, c); + + } else { + resp = hasStringTam10(i.outro); + } + return resp; + } + + + + + + /** + * Metodo publico iterativo para pesquisar elemento. + * @param elemento Elemento que sera procurado. + * @return true se o elemento existir, + * false em caso contrario. + */ + public boolean pesquisar(String elemento) { + return pesquisar(raiz, elemento); + } + + private boolean pesquisar(No no, String x) { + boolean resp; + if (no == null) { + resp = false; + + } else if (x.charAt(0) < no.elemento) { + resp = pesquisar(no.esq, x); + + } else if (x.charAt(0) > no.elemento) { + resp = pesquisar(no.dir, x); + + } else { + resp = pesquisarSegundaArvore(no.outro, x); + } + return resp; + } + + private boolean pesquisarSegundaArvore(No2 no, String x) { + boolean resp; + if (no == null) { + resp = false; + + } else if (x.compareTo(no.elemento) < 0) { + resp = pesquisarSegundaArvore(no.esq, x); + + } else if (x.compareTo(no.elemento) > 0) { + resp = pesquisarSegundaArvore(no.dir, x); + + } else { + resp = true; + } + return resp; + } + + + public int contPalavra(char letra){ + return contPalavra(letra, raiz); + } + + public int contPalavra(char letra, No i) throws Exception { + int resp = 0; + + if (i == null) { + throw new Exception("Erro ao pesquisar: caractere invalido!"); + + } else if (letra < i.elemento) { + resp = contPalavra(letra, i.esq); + + } else if (letra > i.elemento) { + resp = contPalavra(letra, i.dir); + + } else { + resp = contPalavra(i.outro); + } + + return resp; + } + + public int contPalavra(No2 i){ + int resp = 0; + if(i != null){ + resp = 1 + contPalavra(i.esq) + contPalavra(i.dir); + } + return resp; + } +} + + + + + + + + + + + + + + + + + diff --git a/fonte/u05 Árvores binárias/arvoreArvore/No.java b/Codigos/u05 Árvores binárias/arvoreArvore/No.java similarity index 94% rename from fonte/u05 Árvores binárias/arvoreArvore/No.java rename to Codigos/u05 Árvores binárias/arvoreArvore/No.java index 46f20ea..6e51f11 100644 --- a/fonte/u05 Árvores binárias/arvoreArvore/No.java +++ b/Codigos/u05 Árvores binárias/arvoreArvore/No.java @@ -1,35 +1,35 @@ -class No { - public char elemento; // Conteudo do no. - public No esq; // No da esquerda. - public No dir; // No da direita. - public No2 outro; - - /** - * Construtor da classe. - * @param elemento Conteudo do no. - */ - No(char elemento) { - this.elemento = elemento; - this.esq = this.dir = null; - this.outro = null; - } - - /** - * Construtor da classe. - * @param elemento Conteudo do no. - * @param esq No da esquerda. - * @param dir No da direita. - */ - No(char elemento, No esq, No dir) { - this.elemento = elemento; - this.esq = esq; - this.dir = dir; - this.outro = null; - } -} - - - - - - +class No { + public char elemento; // Conteudo do no. + public No esq; // No da esquerda. + public No dir; // No da direita. + public No2 outro; + + /** + * Construtor da classe. + * @param elemento Conteudo do no. + */ + No(char elemento) { + this.elemento = elemento; + this.esq = this.dir = null; + this.outro = null; + } + + /** + * Construtor da classe. + * @param elemento Conteudo do no. + * @param esq No da esquerda. + * @param dir No da direita. + */ + No(char elemento, No esq, No dir) { + this.elemento = elemento; + this.esq = esq; + this.dir = dir; + this.outro = null; + } +} + + + + + + diff --git a/fonte/u05 Árvores binárias/arvoreArvore/No2.java b/Codigos/u05 Árvores binárias/arvoreArvore/No2.java similarity index 95% rename from fonte/u05 Árvores binárias/arvoreArvore/No2.java rename to Codigos/u05 Árvores binárias/arvoreArvore/No2.java index 0f9ad4b..a42206e 100644 --- a/fonte/u05 Árvores binárias/arvoreArvore/No2.java +++ b/Codigos/u05 Árvores binárias/arvoreArvore/No2.java @@ -1,26 +1,26 @@ -class No2 { - public String elemento; // Conteudo do no. - public No2 esq; // No da esquerda. - public No2 dir; // No da direita. - - /** - * Construtor da classe. - * @param elemento Conteudo do no. - */ - No2(String elemento) { - this.elemento = elemento; - this.esq = this.dir = null; - } - - /** - * Construtor da classe. - * @param elemento Conteudo do no. - * @param esq No2 da esquerda. - * @param dir No2 da direita. - */ - No2(String elemento, No2 esq, No2 dir) { - this.elemento = elemento; - this.esq = esq; - this.dir = dir; - } -} +class No2 { + public String elemento; // Conteudo do no. + public No2 esq; // No da esquerda. + public No2 dir; // No da direita. + + /** + * Construtor da classe. + * @param elemento Conteudo do no. + */ + No2(String elemento) { + this.elemento = elemento; + this.esq = this.dir = null; + } + + /** + * Construtor da classe. + * @param elemento Conteudo do no. + * @param esq No2 da esquerda. + * @param dir No2 da direita. + */ + No2(String elemento, No2 esq, No2 dir) { + this.elemento = elemento; + this.esq = esq; + this.dir = dir; + } +} diff --git a/fonte/u05 Árvores binárias/arvoreBinaria/c/arvorebinaria.c b/Codigos/u05 Árvores binárias/arvoreBinaria/c/arvorebinaria.c similarity index 95% rename from fonte/u05 Árvores binárias/arvoreBinaria/c/arvorebinaria.c rename to Codigos/u05 Árvores binárias/arvoreBinaria/c/arvorebinaria.c index b3b2e42..bac4b42 100644 --- a/fonte/u05 Árvores binárias/arvoreBinaria/c/arvorebinaria.c +++ b/Codigos/u05 Árvores binárias/arvoreBinaria/c/arvorebinaria.c @@ -1,203 +1,203 @@ -/** - * Arvore binaria de pesquisa - * @author Max do Val Machado - */ -#include -#include -#include -#include "arvorebinaria.h" - -/* - * Variavel global - */ -No* raiz; - -/** - * Criar arvore binaria. - */ -void start() { - raiz = NULL; -} - -/** - * Metodo publico iterativo para pesquisar elemento. - * @param x Elemento que sera procurado. - * @return true se o elemento existir, - * false em caso contrario. - */ -bool pesquisar(int x) { - return pesquisarRec(x, raiz); -} - -/** - * Metodo privado recursivo para pesquisar elemento. - * @param x Elemento que sera procurado. - * @param i No em analise. - * @return true se o elemento existir, - * false em caso contrario. - */ -bool pesquisarRec(int x, No* i) { - bool resp; - if (i == NULL) { - resp = false; - - } else if (x == i->elemento) { - resp = true; - - } else if (x < i->elemento) { - resp = pesquisarRec(x, i->esq); - - } else { - resp = pesquisarRec(x, i->dir); - } - return resp; -} - -/** - * Metodo publico iterativo para exibir elementos. - */ -void caminharCentral() { - printf("[ "); - caminharCentralRec(raiz); - printf("]\n"); -} - -/** - * Metodo privado recursivo para exibir elementos. - * @param i No em analise. - */ -void caminharCentralRec(No* i) { - if (i != NULL) { - caminharCentralRec(i->esq); - printf("%d ", i->elemento); - caminharCentralRec(i->dir); - } -} - -/** - * Metodo publico iterativo para exibir elementos. - */ -void caminharPre() { - printf("[ "); - caminharPreRec(raiz); - printf("]\n"); -} - -/** - * Metodo privado recursivo para exibir elementos. - * @param i No em analise. - */ -void caminharPreRec(No* i) { - if (i != NULL) { - printf("%d ", i->elemento); - caminharPreRec(i->esq); - caminharPreRec(i->dir); - } -} - -/** - * Metodo publico iterativo para exibir elementos. - */ -void caminharPos() { - printf("[ "); - caminharPosRec(raiz); - printf("]\n"); -} - -/** - * Metodo privado recursivo para exibir elementos. - * @param i No em analise. - */ -void caminharPosRec(No* i) { - if (i != NULL) { - caminharPosRec(i->esq); - caminharPosRec(i->dir); - printf("%d ", i->elemento); - } -} - -/** - * Metodo publico iterativo para inserir elemento. - * @param x Elemento a ser inserido. - */ -void inserir(int x) { - inserirRec(x, &raiz); -} - -/** - * Metodo privado recursivo para inserir elemento. - * @param x Elemento a ser inserido. - * @param i No** endereco do ponteiro No - */ -void inserirRec(int x, No** i) { - if (*i == NULL) { - *i = novoNo(x); - - } else if (x < (*i)->elemento) { - inserirRec(x, &((*i)->esq)); - - } else if (x > (*i)->elemento) { - inserirRec(x, &((*i)->dir)); - - } else { - errx(1, "Erro ao inserir!"); - } -} - -/** - * Metodo publico iterativo para remover elemento. - * @param x Elemento a ser removido. - */ -void remover(int x) { - removerRec(x, &raiz); -} - -/** - * Metodo privado recursivo para remover elemento. - * @param x Elemento a ser removido. - * @param i No** endereco do ponteiro No - */ -void removerRec(int x, No** i) { - if (*i == NULL) { - errx(1, "Erro ao remover!"); - - } else if (x < (*i)->elemento) { - removerRec(x, &((*i)->esq)); - - } else if (x > (*i)->elemento) { - removerRec(x, &((*i)->dir)); - - } else if ((*i)->dir == NULL) { - No* del = *i; - *i = (*i)->esq; - free(del); - - } else if ((*i)->esq == NULL) { - No* del = *i; - *i = (*i)->dir; - free(del); - - } else { - maiorEsq(i, &((*i)->esq)); - } -} - -/** - * Metodo para trocar no removido pelo maiorEsq. - * @param i No** endereco do ponteiro No que contem o elemento removido. - * @param j No** endereco do ponteiro No da subarvore esquerda. - */ -void maiorEsq(No** i, No** j) { - if ((*j)->dir != NULL) { - maiorEsq(i, &((*j)->dir)); - - } else { - No* del = *j; - (*i)->elemento = (*j)->elemento; - (*j) = (*j)->esq; - free(del); - } -} - - - +/** + * Arvore binaria de pesquisa + * @author Max do Val Machado + */ +#include +#include +#include +#include "arvorebinaria.h" + +/* + * Variavel global + */ +No* raiz; + +/** + * Criar arvore binaria. + */ +void start() { + raiz = NULL; +} + +/** + * Metodo publico iterativo para pesquisar elemento. + * @param x Elemento que sera procurado. + * @return true se o elemento existir, + * false em caso contrario. + */ +bool pesquisar(int x) { + return pesquisarRec(x, raiz); +} + +/** + * Metodo privado recursivo para pesquisar elemento. + * @param x Elemento que sera procurado. + * @param i No em analise. + * @return true se o elemento existir, + * false em caso contrario. + */ +bool pesquisarRec(int x, No* i) { + bool resp; + if (i == NULL) { + resp = false; + + } else if (x == i->elemento) { + resp = true; + + } else if (x < i->elemento) { + resp = pesquisarRec(x, i->esq); + + } else { + resp = pesquisarRec(x, i->dir); + } + return resp; +} + +/** + * Metodo publico iterativo para exibir elementos. + */ +void caminharCentral() { + printf("[ "); + caminharCentralRec(raiz); + printf("]\n"); +} + +/** + * Metodo privado recursivo para exibir elementos. + * @param i No em analise. + */ +void caminharCentralRec(No* i) { + if (i != NULL) { + caminharCentralRec(i->esq); + printf("%d ", i->elemento); + caminharCentralRec(i->dir); + } +} + +/** + * Metodo publico iterativo para exibir elementos. + */ +void caminharPre() { + printf("[ "); + caminharPreRec(raiz); + printf("]\n"); +} + +/** + * Metodo privado recursivo para exibir elementos. + * @param i No em analise. + */ +void caminharPreRec(No* i) { + if (i != NULL) { + printf("%d ", i->elemento); + caminharPreRec(i->esq); + caminharPreRec(i->dir); + } +} + +/** + * Metodo publico iterativo para exibir elementos. + */ +void caminharPos() { + printf("[ "); + caminharPosRec(raiz); + printf("]\n"); +} + +/** + * Metodo privado recursivo para exibir elementos. + * @param i No em analise. + */ +void caminharPosRec(No* i) { + if (i != NULL) { + caminharPosRec(i->esq); + caminharPosRec(i->dir); + printf("%d ", i->elemento); + } +} + +/** + * Metodo publico iterativo para inserir elemento. + * @param x Elemento a ser inserido. + */ +void inserir(int x) { + inserirRec(x, &raiz); +} + +/** + * Metodo privado recursivo para inserir elemento. + * @param x Elemento a ser inserido. + * @param i No** endereco do ponteiro No + */ +void inserirRec(int x, No** i) { + if (*i == NULL) { + *i = novoNo(x); + + } else if (x < (*i)->elemento) { + inserirRec(x, &((*i)->esq)); + + } else if (x > (*i)->elemento) { + inserirRec(x, &((*i)->dir)); + + } else { + errx(1, "Erro ao inserir!"); + } +} + +/** + * Metodo publico iterativo para remover elemento. + * @param x Elemento a ser removido. + */ +void remover(int x) { + removerRec(x, &raiz); +} + +/** + * Metodo privado recursivo para remover elemento. + * @param x Elemento a ser removido. + * @param i No** endereco do ponteiro No + */ +void removerRec(int x, No** i) { + if (*i == NULL) { + errx(1, "Erro ao remover!"); + + } else if (x < (*i)->elemento) { + removerRec(x, &((*i)->esq)); + + } else if (x > (*i)->elemento) { + removerRec(x, &((*i)->dir)); + + } else if ((*i)->dir == NULL) { + No* del = *i; + *i = (*i)->esq; + free(del); + + } else if ((*i)->esq == NULL) { + No* del = *i; + *i = (*i)->dir; + free(del); + + } else { + maiorEsq(i, &((*i)->esq)); + } +} + +/** + * Metodo para trocar no removido pelo maiorEsq. + * @param i No** endereco do ponteiro No que contem o elemento removido. + * @param j No** endereco do ponteiro No da subarvore esquerda. + */ +void maiorEsq(No** i, No** j) { + if ((*j)->dir != NULL) { + maiorEsq(i, &((*j)->dir)); + + } else { + No* del = *j; + (*i)->elemento = (*j)->elemento; + (*j) = (*j)->esq; + free(del); + } +} + + + diff --git a/fonte/u05 Árvores binárias/arvoreBinaria/c/arvorebinaria.h b/Codigos/u05 Árvores binárias/arvoreBinaria/c/arvorebinaria.h similarity index 94% rename from fonte/u05 Árvores binárias/arvoreBinaria/c/arvorebinaria.h rename to Codigos/u05 Árvores binárias/arvoreBinaria/c/arvorebinaria.h index c09594d..4385a1a 100644 --- a/fonte/u05 Árvores binárias/arvoreBinaria/c/arvorebinaria.h +++ b/Codigos/u05 Árvores binárias/arvoreBinaria/c/arvorebinaria.h @@ -1,25 +1,25 @@ -/** - * Arvore binaria de pesquisa - * @author Max do Val Machado - */ - -#include "no.h" -#define bool short -#define true 1 -#define false 0 - -bool pesquisarRec(int, No*); -void caminharCentralRec(No*); -void caminharPreRec(No*); -void caminharPosRec(No*); -void inserirRec(int, No**); -void removerRec(int, No**); -void maiorEsq(No**, No**); - -void start(); -bool pesquisar(int); -void caminharCentral(); -void caminharPre(); -void caminharPos(); -void inserir(int); -void remover(int); +/** + * Arvore binaria de pesquisa + * @author Max do Val Machado + */ + +#include "no.h" +#define bool short +#define true 1 +#define false 0 + +bool pesquisarRec(int, No*); +void caminharCentralRec(No*); +void caminharPreRec(No*); +void caminharPosRec(No*); +void inserirRec(int, No**); +void removerRec(int, No**); +void maiorEsq(No**, No**); + +void start(); +bool pesquisar(int); +void caminharCentral(); +void caminharPre(); +void caminharPos(); +void inserir(int); +void remover(int); diff --git a/fonte/u05 Árvores binárias/arvoreBinaria/c/makefile b/Codigos/u05 Árvores binárias/arvoreBinaria/c/makefile similarity index 95% rename from fonte/u05 Árvores binárias/arvoreBinaria/c/makefile rename to Codigos/u05 Árvores binárias/arvoreBinaria/c/makefile index 4a4b21c..2a29e55 100644 --- a/fonte/u05 Árvores binárias/arvoreBinaria/c/makefile +++ b/Codigos/u05 Árvores binárias/arvoreBinaria/c/makefile @@ -1,19 +1,19 @@ -all: exec - -exec: principal.o arvorebinaria.o no.o - gcc -o exec principal.o arvorebinaria.o no.o - -principal.o: principal.c - gcc -o principal.o principal.c -c -W -Wall -ansi -pedantic - -arvorebinaria.o: arvorebinaria.c - gcc -o arvorebinaria.o arvorebinaria.c -c -W -Wall -ansi -pedantic - -no.o: no.c - gcc -o no.o no.c -c -W -Wall -ansi -pedantic - -clean: - rm -rf *.o *~ exec - -limpa: - rm -rf *.o +all: exec + +exec: principal.o arvorebinaria.o no.o + gcc -o exec principal.o arvorebinaria.o no.o + +principal.o: principal.c + gcc -o principal.o principal.c -c -W -Wall -ansi -pedantic + +arvorebinaria.o: arvorebinaria.c + gcc -o arvorebinaria.o arvorebinaria.c -c -W -Wall -ansi -pedantic + +no.o: no.c + gcc -o no.o no.c -c -W -Wall -ansi -pedantic + +clean: + rm -rf *.o *~ exec + +limpa: + rm -rf *.o diff --git a/fonte/u05 Árvores binárias/arvoreBinaria/c/no.c b/Codigos/u05 Árvores binárias/arvoreBinaria/c/no.c similarity index 94% rename from fonte/u05 Árvores binárias/arvoreBinaria/c/no.c rename to Codigos/u05 Árvores binárias/arvoreBinaria/c/no.c index 5325736..40b286c 100644 --- a/fonte/u05 Árvores binárias/arvoreBinaria/c/no.c +++ b/Codigos/u05 Árvores binárias/arvoreBinaria/c/no.c @@ -1,18 +1,18 @@ -/** - * No da arvore binaria - * @author Max do Val Machado - */ -#include -#include "no.h" - -/** - * Criacao do novo no - * @param elemento Conteudo do no. - */ -No* novoNo(int elemento) { - No* novo = (No*) malloc(sizeof(No)); - novo->elemento = elemento; - novo->esq = NULL; - novo->dir = NULL; - return novo; -} +/** + * No da arvore binaria + * @author Max do Val Machado + */ +#include +#include "no.h" + +/** + * Criacao do novo no + * @param elemento Conteudo do no. + */ +No* novoNo(int elemento) { + No* novo = (No*) malloc(sizeof(No)); + novo->elemento = elemento; + novo->esq = NULL; + novo->dir = NULL; + return novo; +} diff --git a/fonte/u05 Árvores binárias/arvoreBinaria/c/no.h b/Codigos/u05 Árvores binárias/arvoreBinaria/c/no.h similarity index 93% rename from fonte/u05 Árvores binárias/arvoreBinaria/c/no.h rename to Codigos/u05 Árvores binárias/arvoreBinaria/c/no.h index 5c64787..39d56b6 100644 --- a/fonte/u05 Árvores binárias/arvoreBinaria/c/no.h +++ b/Codigos/u05 Árvores binárias/arvoreBinaria/c/no.h @@ -1,15 +1,15 @@ -/** - * No da arvore binaria - * @author Max do Val Machado - */ - -typedef struct No { - int elemento; - struct No *esq, *dir; -} No; - -/** - * Criacao do novo no - * @param elemento Conteudo do no. - */ -No* novoNo(int); +/** + * No da arvore binaria + * @author Max do Val Machado + */ + +typedef struct No { + int elemento; + struct No *esq, *dir; +} No; + +/** + * Criacao do novo no + * @param elemento Conteudo do no. + */ +No* novoNo(int); diff --git a/fonte/u05 Árvores binárias/arvoreBinaria/c/principal.c b/Codigos/u05 Árvores binárias/arvoreBinaria/c/principal.c similarity index 94% rename from fonte/u05 Árvores binárias/arvoreBinaria/c/principal.c rename to Codigos/u05 Árvores binárias/arvoreBinaria/c/principal.c index 5e5ba39..c06eaf9 100644 --- a/fonte/u05 Árvores binárias/arvoreBinaria/c/principal.c +++ b/Codigos/u05 Árvores binárias/arvoreBinaria/c/principal.c @@ -1,59 +1,59 @@ -/** - * Principal para Arvore Binaria de Pesquisa - * @author Max do Val Machado - */ -#include "arvorebinaria.h" -#include -#include - -int main(){ - - start(); - - inserir(3); - inserir(5); - inserir(1); - inserir(8); - inserir(2); - inserir(4); - inserir(7); - inserir(6); - - printf("\nInserir: 3, 5, 1, 8, 2, 4, 7 e 6"); - printf("\nCaminhar: central, pre e pos\n"); - caminharCentral(); - caminharPre(); - caminharPos(); - - printf("\nRemover: 2"); - printf("\nCaminhar: central, pre e pos\n"); - remover(2); - - caminharCentral(); - caminharPre(); - caminharPos(); - - printf("\nVoltando com a árvore inicial"); - printf("\nRemover: 1"); - printf("\nCaminhar: central, pre e pos\n"); - inserir(2); - remover(1); - - caminharCentral(); - caminharPre(); - caminharPos(); - - printf("\nVoltando com a árvore inicial"); - printf("\nRemover: 3"); - printf("\nCaminhar: central, pre e pos\n"); - remover(2); - inserir(1); - inserir(2); - remover(3); - - caminharCentral(); - caminharPre(); - caminharPos(); - - return 1; -} +/** + * Principal para Arvore Binaria de Pesquisa + * @author Max do Val Machado + */ +#include "arvorebinaria.h" +#include +#include + +int main(){ + + start(); + + inserir(3); + inserir(5); + inserir(1); + inserir(8); + inserir(2); + inserir(4); + inserir(7); + inserir(6); + + printf("\nInserir: 3, 5, 1, 8, 2, 4, 7 e 6"); + printf("\nCaminhar: central, pre e pos\n"); + caminharCentral(); + caminharPre(); + caminharPos(); + + printf("\nRemover: 2"); + printf("\nCaminhar: central, pre e pos\n"); + remover(2); + + caminharCentral(); + caminharPre(); + caminharPos(); + + printf("\nVoltando com a árvore inicial"); + printf("\nRemover: 1"); + printf("\nCaminhar: central, pre e pos\n"); + inserir(2); + remover(1); + + caminharCentral(); + caminharPre(); + caminharPos(); + + printf("\nVoltando com a árvore inicial"); + printf("\nRemover: 3"); + printf("\nCaminhar: central, pre e pos\n"); + remover(2); + inserir(1); + inserir(2); + remover(3); + + caminharCentral(); + caminharPre(); + caminharPos(); + + return 1; +} diff --git a/fonte/u05 Árvores binárias/arvoreBinaria/cc/arvorebinaria.cc b/Codigos/u05 Árvores binárias/arvoreBinaria/cc/arvorebinaria.cc similarity index 95% rename from fonte/u05 Árvores binárias/arvoreBinaria/cc/arvorebinaria.cc rename to Codigos/u05 Árvores binárias/arvoreBinaria/cc/arvorebinaria.cc index 80978db..8de2acf 100644 --- a/fonte/u05 Árvores binárias/arvoreBinaria/cc/arvorebinaria.cc +++ b/Codigos/u05 Árvores binárias/arvoreBinaria/cc/arvorebinaria.cc @@ -1,200 +1,200 @@ -/** - * Arvore binaria de pesquisa - * @author Max do Val Machado - */ - -#include -#include "arvorebinaria.h" - -/** - * Construtor da classe. - */ -ArvoreBinaria::ArvoreBinaria() { - raiz = NULL; -} - -/** - * Metodo publico iterativo para pesquisar elemento. - * @param x Elemento que sera procurado. - * @return true se o elemento existir, - * false em caso contrario. - */ -bool ArvoreBinaria::pesquisar(int x) { - return pesquisar(x, raiz); -} - -/** - * Metodo privado recursivo para pesquisar elemento. - * @param x Elemento que sera procurado. - * @param i No em analise. - * @return true se o elemento existir, - * false em caso contrario. - */ -bool ArvoreBinaria::pesquisar(int x, No* i) { - bool resp; - if (i == NULL) { - resp = false; - - } else if (x == i->elemento) { - resp = true; - - } else if (x < i->elemento) { - resp = pesquisar(x, i->esq); - - } else { - resp = pesquisar(x, i->dir); - } - return resp; -} - -/** - * Metodo publico iterativo para exibir elementos. - */ -void ArvoreBinaria::caminharCentral() { - cout << "[ "; - caminharCentral(raiz); - cout << "]\n"; -} - -/** - * Metodo privado recursivo para exibir elementos. - * @param i No em analise. - */ -void ArvoreBinaria::caminharCentral(No* i) { - if (i != NULL) { - caminharCentral(i->esq); // Elementos da esquerda. - cout << i->elemento << " "; // Conteudo do no. - caminharCentral(i->dir); // Elementos da direita. - } -} - -/** - * Metodo publico iterativo para exibir elementos. - */ -void ArvoreBinaria::caminharPre() { - cout << "[ "; - caminharPre(raiz); - cout << "]\n"; -} - -/** - * Metodo privado recursivo para exibir elementos. - * @param i No em analise. - */ -void ArvoreBinaria::caminharPre(No* i) { - if (i != NULL) { - cout << i->elemento << " "; // Conteudo do no. - caminharPre(i->esq); // Elementos da esquerda. - caminharPre(i->dir); // Elementos da direita. - } -} - -/** - * Metodo publico iterativo para exibir elementos. - */ -void ArvoreBinaria::caminharPos() { - cout << "[ "; - caminharPos(raiz); - cout << "]\n"; -} - -/** - * Metodo privado recursivo para exibir elementos. - * @param i No em analise. - */ -void ArvoreBinaria::caminharPos(No* i) { - if (i != NULL) { - caminharPos(i->esq); // Elementos da esquerda. - caminharPos(i->dir); // Elementos da direita. - cout << i->elemento << " "; // Conteudo do no. - } -} - -/** - * Metodo publico iterativo para inserir elemento. - * @param x Elemento a ser inserido. - */ -void ArvoreBinaria::inserir(int x) { - inserir(x, raiz); -} - -/** - * Metodo privado recursivo para inserir elemento. - * @param x Elemento a ser inserido. - * @param i No em analise. - */ -void ArvoreBinaria::inserir(int x, No* &i) { - if (i == NULL) { - i = new No(x); - - } else if (x < i->elemento) { - inserir(x, i->esq); - - } else if (x > i->elemento) { - inserir(x, i->dir); - - } else { - errx(1, "Erro ao inserir!"); - } -} - -/** - * Metodo publico iterativo para remover elemento. - * @param x Elemento a ser removido. - */ -void ArvoreBinaria::remover(int x) { - remover(x, raiz); -} - -/** - * Metodo privado recursivo para remover elemento. - * @param x Elemento a ser removido. - * @param i No em analise. - */ -void ArvoreBinaria::remover(int x, No* &i) { - if (i == NULL) { - errx(1, "Erro ao remover!"); - - } else if (x < i->elemento) { - remover(x, i->esq); - - } else if (x > i->elemento) { - remover(x, i->dir); - - // Sem no a direita. - } else if (i->dir == NULL) { - No* del = i; - i = i->esq; - delete del; - - // Sem no a esquerda. - } else if (i->esq == NULL) { - No* del = i; - i = i->dir; - delete del; - - // No a esquerda e no a direita. - } else { - maiorEsq(i, i->esq); - } -} - - -/** - * Metodo para trocar no removido pelo maior elemento da esquerda. - * @param i No que teve o elemento removido. - * @param j No da subarvore esquerda. - */ -void ArvoreBinaria::maiorEsq(No* i, No* &j) { - // Encontrou o maximo da subarvore esquerda. - if (j->dir == NULL) { - No* del = j; - i->elemento = j->elemento; // Substitui i por j. - j = j->esq; // Substitui j por j.ESQ. - delete del; - - // Existe no a direita. - } else { - maiorEsq(i, j->dir); // Caminha para direita. - } -} +/** + * Arvore binaria de pesquisa + * @author Max do Val Machado + */ + +#include +#include "arvorebinaria.h" + +/** + * Construtor da classe. + */ +ArvoreBinaria::ArvoreBinaria() { + raiz = NULL; +} + +/** + * Metodo publico iterativo para pesquisar elemento. + * @param x Elemento que sera procurado. + * @return true se o elemento existir, + * false em caso contrario. + */ +bool ArvoreBinaria::pesquisar(int x) { + return pesquisar(x, raiz); +} + +/** + * Metodo privado recursivo para pesquisar elemento. + * @param x Elemento que sera procurado. + * @param i No em analise. + * @return true se o elemento existir, + * false em caso contrario. + */ +bool ArvoreBinaria::pesquisar(int x, No* i) { + bool resp; + if (i == NULL) { + resp = false; + + } else if (x == i->elemento) { + resp = true; + + } else if (x < i->elemento) { + resp = pesquisar(x, i->esq); + + } else { + resp = pesquisar(x, i->dir); + } + return resp; +} + +/** + * Metodo publico iterativo para exibir elementos. + */ +void ArvoreBinaria::caminharCentral() { + cout << "[ "; + caminharCentral(raiz); + cout << "]\n"; +} + +/** + * Metodo privado recursivo para exibir elementos. + * @param i No em analise. + */ +void ArvoreBinaria::caminharCentral(No* i) { + if (i != NULL) { + caminharCentral(i->esq); // Elementos da esquerda. + cout << i->elemento << " "; // Conteudo do no. + caminharCentral(i->dir); // Elementos da direita. + } +} + +/** + * Metodo publico iterativo para exibir elementos. + */ +void ArvoreBinaria::caminharPre() { + cout << "[ "; + caminharPre(raiz); + cout << "]\n"; +} + +/** + * Metodo privado recursivo para exibir elementos. + * @param i No em analise. + */ +void ArvoreBinaria::caminharPre(No* i) { + if (i != NULL) { + cout << i->elemento << " "; // Conteudo do no. + caminharPre(i->esq); // Elementos da esquerda. + caminharPre(i->dir); // Elementos da direita. + } +} + +/** + * Metodo publico iterativo para exibir elementos. + */ +void ArvoreBinaria::caminharPos() { + cout << "[ "; + caminharPos(raiz); + cout << "]\n"; +} + +/** + * Metodo privado recursivo para exibir elementos. + * @param i No em analise. + */ +void ArvoreBinaria::caminharPos(No* i) { + if (i != NULL) { + caminharPos(i->esq); // Elementos da esquerda. + caminharPos(i->dir); // Elementos da direita. + cout << i->elemento << " "; // Conteudo do no. + } +} + +/** + * Metodo publico iterativo para inserir elemento. + * @param x Elemento a ser inserido. + */ +void ArvoreBinaria::inserir(int x) { + inserir(x, raiz); +} + +/** + * Metodo privado recursivo para inserir elemento. + * @param x Elemento a ser inserido. + * @param i No em analise. + */ +void ArvoreBinaria::inserir(int x, No* &i) { + if (i == NULL) { + i = new No(x); + + } else if (x < i->elemento) { + inserir(x, i->esq); + + } else if (x > i->elemento) { + inserir(x, i->dir); + + } else { + errx(1, "Erro ao inserir!"); + } +} + +/** + * Metodo publico iterativo para remover elemento. + * @param x Elemento a ser removido. + */ +void ArvoreBinaria::remover(int x) { + remover(x, raiz); +} + +/** + * Metodo privado recursivo para remover elemento. + * @param x Elemento a ser removido. + * @param i No em analise. + */ +void ArvoreBinaria::remover(int x, No* &i) { + if (i == NULL) { + errx(1, "Erro ao remover!"); + + } else if (x < i->elemento) { + remover(x, i->esq); + + } else if (x > i->elemento) { + remover(x, i->dir); + + // Sem no a direita. + } else if (i->dir == NULL) { + No* del = i; + i = i->esq; + delete del; + + // Sem no a esquerda. + } else if (i->esq == NULL) { + No* del = i; + i = i->dir; + delete del; + + // No a esquerda e no a direita. + } else { + maiorEsq(i, i->esq); + } +} + + +/** + * Metodo para trocar no removido pelo maior elemento da esquerda. + * @param i No que teve o elemento removido. + * @param j No da subarvore esquerda. + */ +void ArvoreBinaria::maiorEsq(No* i, No* &j) { + // Encontrou o maximo da subarvore esquerda. + if (j->dir == NULL) { + No* del = j; + i->elemento = j->elemento; // Substitui i por j. + j = j->esq; // Substitui j por j.ESQ. + delete del; + + // Existe no a direita. + } else { + maiorEsq(i, j->dir); // Caminha para direita. + } +} diff --git a/fonte/u05 Árvores binárias/arvoreBinaria/cc/arvorebinaria.h b/Codigos/u05 Árvores binárias/arvoreBinaria/cc/arvorebinaria.h similarity index 95% rename from fonte/u05 Árvores binárias/arvoreBinaria/cc/arvorebinaria.h rename to Codigos/u05 Árvores binárias/arvoreBinaria/cc/arvorebinaria.h index bf50f95..4764fc3 100644 --- a/fonte/u05 Árvores binárias/arvoreBinaria/cc/arvorebinaria.h +++ b/Codigos/u05 Árvores binárias/arvoreBinaria/cc/arvorebinaria.h @@ -1,27 +1,27 @@ -/** - * Arvore binaria de pesquisa - * @author Max do Val Machado - */ - -#include "no.h" - -class ArvoreBinaria { - private: - No* raiz; // Raiz da arvore. - bool pesquisar(int, No*); - void caminharCentral(No*); - void caminharPre(No*); - void caminharPos(No*); - void inserir(int, No* &); - void remover(int, No* &); - void maiorEsq(No*, No* &); - - public: - ArvoreBinaria(); - bool pesquisar(int); - void caminharCentral(); - void caminharPre(); - void caminharPos(); - void inserir(int); - void remover(int); -}; +/** + * Arvore binaria de pesquisa + * @author Max do Val Machado + */ + +#include "no.h" + +class ArvoreBinaria { + private: + No* raiz; // Raiz da arvore. + bool pesquisar(int, No*); + void caminharCentral(No*); + void caminharPre(No*); + void caminharPos(No*); + void inserir(int, No* &); + void remover(int, No* &); + void maiorEsq(No*, No* &); + + public: + ArvoreBinaria(); + bool pesquisar(int); + void caminharCentral(); + void caminharPre(); + void caminharPos(); + void inserir(int); + void remover(int); +}; diff --git a/fonte/u05 Árvores binárias/arvoreBinaria/cc/makefile b/Codigos/u05 Árvores binárias/arvoreBinaria/cc/makefile similarity index 96% rename from fonte/u05 Árvores binárias/arvoreBinaria/cc/makefile rename to Codigos/u05 Árvores binárias/arvoreBinaria/cc/makefile index e5e4c9d..cc9a0b4 100644 --- a/fonte/u05 Árvores binárias/arvoreBinaria/cc/makefile +++ b/Codigos/u05 Árvores binárias/arvoreBinaria/cc/makefile @@ -1,16 +1,16 @@ -all: exec - -exec: principal.o arvorebinaria.o no.o - g++ -o exec principal.o arvorebinaria.o no.o - -principal.o: principal.cc arvorebinaria.h no.h - g++ -o principal.o principal.cc -c -W -Wall -ansi -pedantic - -arvorebinaria.o: arvorebinaria.cc arvorebinaria.h no.h - g++ -o arvorebinaria.o arvorebinaria.cc -c -W -Wall -ansi -pedantic - -no.o: no.cc no.h - g++ -o no.o no.cc -c -W -Wall -ansi -pedantic - -clean: - rm -rf *.o *~ exec +all: exec + +exec: principal.o arvorebinaria.o no.o + g++ -o exec principal.o arvorebinaria.o no.o + +principal.o: principal.cc arvorebinaria.h no.h + g++ -o principal.o principal.cc -c -W -Wall -ansi -pedantic + +arvorebinaria.o: arvorebinaria.cc arvorebinaria.h no.h + g++ -o arvorebinaria.o arvorebinaria.cc -c -W -Wall -ansi -pedantic + +no.o: no.cc no.h + g++ -o no.o no.cc -c -W -Wall -ansi -pedantic + +clean: + rm -rf *.o *~ exec diff --git a/fonte/u05 Árvores binárias/arvoreBinaria/cc/no.cc b/Codigos/u05 Árvores binárias/arvoreBinaria/cc/no.cc similarity index 93% rename from fonte/u05 Árvores binárias/arvoreBinaria/cc/no.cc rename to Codigos/u05 Árvores binárias/arvoreBinaria/cc/no.cc index 23b2942..c74a118 100644 --- a/fonte/u05 Árvores binárias/arvoreBinaria/cc/no.cc +++ b/Codigos/u05 Árvores binárias/arvoreBinaria/cc/no.cc @@ -1,16 +1,16 @@ -/** - * No da arvore binaria - * @author Max do Val Machado - */ - -#include "no.h" - -/** - * Construtor da classe. - * @param elemento Conteudo do no. - */ -No::No(int elemento) { - this->elemento = elemento; - this->esq = NULL; - this->dir = NULL; -} +/** + * No da arvore binaria + * @author Max do Val Machado + */ + +#include "no.h" + +/** + * Construtor da classe. + * @param elemento Conteudo do no. + */ +No::No(int elemento) { + this->elemento = elemento; + this->esq = NULL; + this->dir = NULL; +} diff --git a/fonte/u05 Árvores binárias/arvoreBinaria/cc/no.h b/Codigos/u05 Árvores binárias/arvoreBinaria/cc/no.h similarity index 94% rename from fonte/u05 Árvores binárias/arvoreBinaria/cc/no.h rename to Codigos/u05 Árvores binárias/arvoreBinaria/cc/no.h index 31eada6..cb5a3e2 100644 --- a/fonte/u05 Árvores binárias/arvoreBinaria/cc/no.h +++ b/Codigos/u05 Árvores binárias/arvoreBinaria/cc/no.h @@ -1,14 +1,14 @@ -/** - * No da arvore binaria - * @author Max do Val Machado - */ -#include - -using namespace std; - -class No { - public: - int elemento; // Conteudo do no. - No *esq, *dir; // Filhos da esq e dir. - No(int); -}; +/** + * No da arvore binaria + * @author Max do Val Machado + */ +#include + +using namespace std; + +class No { + public: + int elemento; // Conteudo do no. + No *esq, *dir; // Filhos da esq e dir. + No(int); +}; diff --git a/fonte/u05 Árvores binárias/arvoreBinaria/cc/principal.cc b/Codigos/u05 Árvores binárias/arvoreBinaria/cc/principal.cc similarity index 96% rename from fonte/u05 Árvores binárias/arvoreBinaria/cc/principal.cc rename to Codigos/u05 Árvores binárias/arvoreBinaria/cc/principal.cc index 9d73db2..48db146 100644 --- a/fonte/u05 Árvores binárias/arvoreBinaria/cc/principal.cc +++ b/Codigos/u05 Árvores binárias/arvoreBinaria/cc/principal.cc @@ -1,60 +1,60 @@ -/** - * Principal para Arvore Binaria de Pesquisa - * @author Max do Val Machado - */ -#include "arvorebinaria.h" -#include -using namespace std; - -int main(){//int argc, char** argv){ - ArvoreBinaria* arvoreBinaria = new ArvoreBinaria(); - - arvoreBinaria->inserir(3); - arvoreBinaria->inserir(5); - arvoreBinaria->inserir(1); - arvoreBinaria->inserir(8); - arvoreBinaria->inserir(2); - arvoreBinaria->inserir(4); - arvoreBinaria->inserir(7); - arvoreBinaria->inserir(6); - - cout << "\nInserir: 3, 5, 1, 8, 2, 4, 7 e 6"; - cout << "\nCaminhar: central, pre e pos\n"; - arvoreBinaria->caminharCentral(); - arvoreBinaria->caminharPre(); - arvoreBinaria->caminharPos(); - - - cout << "\nRemover: 2"; - cout << "\nCaminhar: central, pre e pos\n"; - arvoreBinaria->remover(2); - - arvoreBinaria->caminharCentral(); - arvoreBinaria->caminharPre(); - arvoreBinaria->caminharPos(); - - cout << "\nVoltando com a árvore inicial"; - cout << "\nRemover: 1"; - cout << "\nCaminhar: central, pre e pos\n"; - arvoreBinaria->inserir(2); - arvoreBinaria->remover(1); - - arvoreBinaria->caminharCentral(); - arvoreBinaria->caminharPre(); - arvoreBinaria->caminharPos(); - - cout << "\nVoltando com a árvore inicial"; - cout << "\nRemover: 3"; - cout << "\nCaminhar: central, pre e pos\n"; - arvoreBinaria->remover(2); - arvoreBinaria->inserir(1); - arvoreBinaria->inserir(2); - arvoreBinaria->remover(3); - - arvoreBinaria->caminharCentral(); - arvoreBinaria->caminharPre(); - arvoreBinaria->caminharPos(); - - - return 1; -} +/** + * Principal para Arvore Binaria de Pesquisa + * @author Max do Val Machado + */ +#include "arvorebinaria.h" +#include +using namespace std; + +int main(){//int argc, char** argv){ + ArvoreBinaria* arvoreBinaria = new ArvoreBinaria(); + + arvoreBinaria->inserir(3); + arvoreBinaria->inserir(5); + arvoreBinaria->inserir(1); + arvoreBinaria->inserir(8); + arvoreBinaria->inserir(2); + arvoreBinaria->inserir(4); + arvoreBinaria->inserir(7); + arvoreBinaria->inserir(6); + + cout << "\nInserir: 3, 5, 1, 8, 2, 4, 7 e 6"; + cout << "\nCaminhar: central, pre e pos\n"; + arvoreBinaria->caminharCentral(); + arvoreBinaria->caminharPre(); + arvoreBinaria->caminharPos(); + + + cout << "\nRemover: 2"; + cout << "\nCaminhar: central, pre e pos\n"; + arvoreBinaria->remover(2); + + arvoreBinaria->caminharCentral(); + arvoreBinaria->caminharPre(); + arvoreBinaria->caminharPos(); + + cout << "\nVoltando com a árvore inicial"; + cout << "\nRemover: 1"; + cout << "\nCaminhar: central, pre e pos\n"; + arvoreBinaria->inserir(2); + arvoreBinaria->remover(1); + + arvoreBinaria->caminharCentral(); + arvoreBinaria->caminharPre(); + arvoreBinaria->caminharPos(); + + cout << "\nVoltando com a árvore inicial"; + cout << "\nRemover: 3"; + cout << "\nCaminhar: central, pre e pos\n"; + arvoreBinaria->remover(2); + arvoreBinaria->inserir(1); + arvoreBinaria->inserir(2); + arvoreBinaria->remover(3); + + arvoreBinaria->caminharCentral(); + arvoreBinaria->caminharPre(); + arvoreBinaria->caminharPos(); + + + return 1; +} diff --git a/fonte/u05 Árvores binárias/arvoreBinaria/java/ArvoreBinaria.java b/Codigos/u05 Árvores binárias/arvoreBinaria/java/ArvoreBinaria.java similarity index 95% rename from fonte/u05 Árvores binárias/arvoreBinaria/java/ArvoreBinaria.java rename to Codigos/u05 Árvores binárias/arvoreBinaria/java/ArvoreBinaria.java index 6c81e02..401371c 100644 --- a/fonte/u05 Árvores binárias/arvoreBinaria/java/ArvoreBinaria.java +++ b/Codigos/u05 Árvores binárias/arvoreBinaria/java/ArvoreBinaria.java @@ -1,410 +1,410 @@ -/** - * Arvore binaria de pesquisa - * @author Max do Val Machado - */ -public class ArvoreBinaria { - private No raiz; // Raiz da arvore. - - /** - * Construtor da classe. - */ - public ArvoreBinaria() { - raiz = null; - } - - /** - * Metodo publico iterativo para pesquisar elemento. - * @param x Elemento que sera procurado. - * @return true se o elemento existir, - * false em caso contrario. - */ - public boolean pesquisar(int x) { - return pesquisar(x, raiz); - } - - /** - * Metodo privado recursivo para pesquisar elemento. - * @param x Elemento que sera procurado. - * @param i No em analise. - * @return true se o elemento existir, - * false em caso contrario. - */ - private boolean pesquisar(int x, No i) { - boolean resp; - if (i == null) { - resp = false; - - } else if (x == i.elemento) { - resp = true; - - } else if (x < i.elemento) { - resp = pesquisar(x, i.esq); - - } else { - resp = pesquisar(x, i.dir); - } - return resp; - } - - /** - * Metodo publico iterativo para exibir elementos. - */ - public void caminharCentral() { - System.out.print("[ "); - caminharCentral(raiz); - System.out.println("]"); - } - - /** - * Metodo privado recursivo para exibir elementos. - * @param i No em analise. - */ - private void caminharCentral(No i) { - if (i != null) { - caminharCentral(i.esq); // Elementos da esquerda. - System.out.print(i.elemento + " "); // Conteudo do no. - caminharCentral(i.dir); // Elementos da direita. - } - } - - /** - * Metodo publico iterativo para exibir elementos. - */ - public void caminharPre() { - System.out.print("[ "); - caminharPre(raiz); - System.out.println("]"); - } - - /** - * Metodo privado recursivo para exibir elementos. - * @param i No em analise. - */ - private void caminharPre(No i) { - if (i != null) { - System.out.print(i.elemento + " "); // Conteudo do no. - caminharPre(i.esq); // Elementos da esquerda. - caminharPre(i.dir); // Elementos da direita. - } - } - - /** - * Metodo publico iterativo para exibir elementos. - */ - public void caminharPos() { - System.out.print("[ "); - caminharPos(raiz); - System.out.println("]"); - } - - /** - * Metodo privado recursivo para exibir elementos. - * @param i No em analise. - */ - private void caminharPos(No i) { - if (i != null) { - caminharPos(i.esq); // Elementos da esquerda. - caminharPos(i.dir); // Elementos da direita. - System.out.print(i.elemento + " "); // Conteudo do no. - } - } - - - /** - * Metodo publico iterativo para inserir elemento. - * @param x Elemento a ser inserido. - * @throws Exception Se o elemento existir. - */ - public void inserir(int x) throws Exception { - raiz = inserir(x, raiz); - } - - /** - * Metodo privado recursivo para inserir elemento. - * @param x Elemento a ser inserido. - * @param i No em analise. - * @return No em analise, alterado ou nao. - * @throws Exception Se o elemento existir. - */ - private No inserir(int x, No i) throws Exception { - if (i == null) { - i = new No(x); - - } else if (x < i.elemento) { - i.esq = inserir(x, i.esq); - - } else if (x > i.elemento) { - i.dir = inserir(x, i.dir); - - } else { - throw new Exception("Erro ao inserir!"); - } - - return i; - } - - /** - * Metodo publico para inserir elemento. - * @param x Elemento a ser inserido. - * @throws Exception Se o elemento existir. - */ - public void inserirPai(int x) throws Exception { - if(raiz == null){ - raiz = new No(x); - } else if(x < raiz.elemento){ - inserirPai(x, raiz.esq, raiz); - } else if(x > raiz.elemento){ - inserirPai(x, raiz.dir, raiz); - } else { - throw new Exception("Erro ao inserirPai!"); - } - } - - /** - * Metodo privado recursivo para inserirPai elemento. - * @param x Elemento a ser inserido. - * @param i No em analise. - * @param pai No superior ao em analise. - * @throws Exception Se o elemento existir. - */ - private void inserirPai(int x, No i, No pai) throws Exception { - if (i == null) { - if(x < pai.elemento){ - pai.esq = new No(x); - } else { - pai.dir = new No(x); - } - } else if (x < i.elemento) { - inserirPai(x, i.esq, i); - } else if (x > i.elemento) { - inserirPai(x, i.dir, i); - } else { - throw new Exception("Erro ao inserirPai!"); - } - } - - - /** - * Metodo publico iterativo para remover elemento. - * @param x Elemento a ser removido. - * @throws Exception Se nao encontrar elemento. - */ - public void remover(int x) throws Exception { - raiz = remover(x, raiz); - } - - /** - * Metodo privado recursivo para remover elemento. - * @param x Elemento a ser removido. - * @param i No em analise. - * @return No em analise, alterado ou nao. - * @throws Exception Se nao encontrar elemento. - */ - private No remover(int x, No i) throws Exception { - - if (i == null) { - throw new Exception("Erro ao remover!"); - - } else if (x < i.elemento) { - i.esq = remover(x, i.esq); - - } else if (x > i.elemento) { - i.dir = remover(x, i.dir); - - // Sem no a direita. - } else if (i.dir == null) { - i = i.esq; - - // Sem no a esquerda. - } else if (i.esq == null) { - i = i.dir; - - // No a esquerda e no a direita. - } else { - i.esq = maiorEsq(i, i.esq); - } - - return i; - } - - /** - * Metodo para trocar o elemento "removido" pelo maior da esquerda. - * @param i No que teve o elemento removido. - * @param j No da subarvore esquerda. - * @return No em analise, alterado ou nao. - */ - private No maiorEsq(No i, No j) { - - // Encontrou o maximo da subarvore esquerda. - if (j.dir == null) { - i.elemento = j.elemento; // Substitui i por j. - j = j.esq; // Substitui j por j.ESQ. - - // Existe no a direita. - } else { - // Caminha para direita. - j.dir = maiorEsq(i, j.dir); - } - return j; - } - - /** - * Metodo que retorna o maior elemento da árvore - * @return int maior elemento da árvore - */ - public int getMaior(){ - int resp = -1; - - if(raiz != null){ - No i; - for(i = raiz; i.dir != null; i = i.dir); - resp = i.elemento; - } - - return resp; - } - - - /** - * Metodo que retorna o menor elemento da árvore - * @return int menor elemento da árvore - */ - public int getMenor(){ - int resp = -1; - - if(raiz != null){ - No i; - for(i = raiz; i.esq != null; i = i.esq); - resp = i.elemento; - } - - return resp; - } - - - /** - * Metodo que retorna a altura da árvore - * @return int altura da árvore - */ - public int getAltura(){ - return getAltura(raiz, 0); - } - - - /** - * Metodo que retorna a altura da árvore - * @return int altura da árvore - */ - public int getAltura(No i, int altura){ - if(i == null){ - altura--; - } else { - int alturaEsq = getAltura(i.esq, altura + 1); - int alturaDir = getAltura(i.dir, altura + 1); - altura = (alturaEsq > alturaDir) ? alturaEsq : alturaDir; - } - return altura; - } - - - /** - * Metodo publico iterativo para remover elemento. - * @param x Elemento a ser removido. - * @throws Exception Se nao encontrar elemento. - */ - public void remover2(int x) throws Exception { - if (raiz == null) { - throw new Exception("Erro ao remover2!"); - } else if(x < raiz.elemento){ - remover2(x, raiz.esq, raiz); - } else if (x > raiz.elemento){ - remover2(x, raiz.dir, raiz); - } else if (raiz.dir == null) { - raiz = raiz.esq; - } else if (raiz.esq == null) { - raiz = raiz.dir; - } else { - raiz.esq = maiorEsq(raiz, raiz.esq); - } - } - - /** - * Metodo privado recursivo para remover elemento. - * @param x Elemento a ser removido. - * @param i No em analise. - * @param pai do No em analise. - * @throws Exception Se nao encontrar elemento. - */ - private void remover2(int x, No i, No pai) throws Exception { - if (i == null) { - throw new Exception("Erro ao remover2!"); - } else if (x < i.elemento) { - remover2(x, i.esq, i); - } else if (x > i.elemento) { - remover2(x, i.dir, i); - } else if (i.dir == null) { - pai = i.esq; - } else if (i.esq == null) { - pai = i.dir; - } else { - i.esq = maiorEsq(i, i.esq); - } - } - - public int getRaiz() throws Exception { - return raiz.elemento; - } - - public static boolean igual (ArvoreBinaria a1, ArvoreBinaria a2){ - return igual(a1.raiz, a2.raiz); - } - - private static boolean igual (No i1, No i2){ - boolean resp; - if(i1 != null && i2 != null){ - resp = (i1.elemento == i2.elemento) && igual(i1.esq, i2.esq) && igual(i1.dir, i2.dir); - } else if(i1 == null && i2 == null){ - resp = true; - } else { - resp = false; - } - return resp; - } - - public int soma(){ - return soma(raiz); - } - - public int soma(No i){ - int resp = 0; - if(i != null){ - resp = i.elemento + soma(i.esq) + soma(i.dir); - } - return resp; - } - - public int quantidadePares(){ - return quantidadePares(raiz); - } - - public int quantidadePares(No i){ - int resp = 0; - if(i != null){ - resp = ((i.elemento % 2 == 0) ? 1 : 0) + quantidadePares(i.esq) + quantidadePares(i.dir); - } - return resp; - } - - public boolean hasDiv11(){ - return hasDiv11(raiz); - } - - public boolean hasDiv11(No i){ - boolean resp = false; - if(i != null){ - resp = (i.elemento % 11 == 0) || hasDiv11(i.esq) || hasDiv11(i.dir); - } - return resp; - } -} - +/** + * Arvore binaria de pesquisa + * @author Max do Val Machado + */ +public class ArvoreBinaria { + private No raiz; // Raiz da arvore. + + /** + * Construtor da classe. + */ + public ArvoreBinaria() { + raiz = null; + } + + /** + * Metodo publico iterativo para pesquisar elemento. + * @param x Elemento que sera procurado. + * @return true se o elemento existir, + * false em caso contrario. + */ + public boolean pesquisar(int x) { + return pesquisar(x, raiz); + } + + /** + * Metodo privado recursivo para pesquisar elemento. + * @param x Elemento que sera procurado. + * @param i No em analise. + * @return true se o elemento existir, + * false em caso contrario. + */ + private boolean pesquisar(int x, No i) { + boolean resp; + if (i == null) { + resp = false; + + } else if (x == i.elemento) { + resp = true; + + } else if (x < i.elemento) { + resp = pesquisar(x, i.esq); + + } else { + resp = pesquisar(x, i.dir); + } + return resp; + } + + /** + * Metodo publico iterativo para exibir elementos. + */ + public void caminharCentral() { + System.out.print("[ "); + caminharCentral(raiz); + System.out.println("]"); + } + + /** + * Metodo privado recursivo para exibir elementos. + * @param i No em analise. + */ + private void caminharCentral(No i) { + if (i != null) { + caminharCentral(i.esq); // Elementos da esquerda. + System.out.print(i.elemento + " "); // Conteudo do no. + caminharCentral(i.dir); // Elementos da direita. + } + } + + /** + * Metodo publico iterativo para exibir elementos. + */ + public void caminharPre() { + System.out.print("[ "); + caminharPre(raiz); + System.out.println("]"); + } + + /** + * Metodo privado recursivo para exibir elementos. + * @param i No em analise. + */ + private void caminharPre(No i) { + if (i != null) { + System.out.print(i.elemento + " "); // Conteudo do no. + caminharPre(i.esq); // Elementos da esquerda. + caminharPre(i.dir); // Elementos da direita. + } + } + + /** + * Metodo publico iterativo para exibir elementos. + */ + public void caminharPos() { + System.out.print("[ "); + caminharPos(raiz); + System.out.println("]"); + } + + /** + * Metodo privado recursivo para exibir elementos. + * @param i No em analise. + */ + private void caminharPos(No i) { + if (i != null) { + caminharPos(i.esq); // Elementos da esquerda. + caminharPos(i.dir); // Elementos da direita. + System.out.print(i.elemento + " "); // Conteudo do no. + } + } + + + /** + * Metodo publico iterativo para inserir elemento. + * @param x Elemento a ser inserido. + * @throws Exception Se o elemento existir. + */ + public void inserir(int x) throws Exception { + raiz = inserir(x, raiz); + } + + /** + * Metodo privado recursivo para inserir elemento. + * @param x Elemento a ser inserido. + * @param i No em analise. + * @return No em analise, alterado ou nao. + * @throws Exception Se o elemento existir. + */ + private No inserir(int x, No i) throws Exception { + if (i == null) { + i = new No(x); + + } else if (x < i.elemento) { + i.esq = inserir(x, i.esq); + + } else if (x > i.elemento) { + i.dir = inserir(x, i.dir); + + } else { + throw new Exception("Erro ao inserir!"); + } + + return i; + } + + /** + * Metodo publico para inserir elemento. + * @param x Elemento a ser inserido. + * @throws Exception Se o elemento existir. + */ + public void inserirPai(int x) throws Exception { + if(raiz == null){ + raiz = new No(x); + } else if(x < raiz.elemento){ + inserirPai(x, raiz.esq, raiz); + } else if(x > raiz.elemento){ + inserirPai(x, raiz.dir, raiz); + } else { + throw new Exception("Erro ao inserirPai!"); + } + } + + /** + * Metodo privado recursivo para inserirPai elemento. + * @param x Elemento a ser inserido. + * @param i No em analise. + * @param pai No superior ao em analise. + * @throws Exception Se o elemento existir. + */ + private void inserirPai(int x, No i, No pai) throws Exception { + if (i == null) { + if(x < pai.elemento){ + pai.esq = new No(x); + } else { + pai.dir = new No(x); + } + } else if (x < i.elemento) { + inserirPai(x, i.esq, i); + } else if (x > i.elemento) { + inserirPai(x, i.dir, i); + } else { + throw new Exception("Erro ao inserirPai!"); + } + } + + + /** + * Metodo publico iterativo para remover elemento. + * @param x Elemento a ser removido. + * @throws Exception Se nao encontrar elemento. + */ + public void remover(int x) throws Exception { + raiz = remover(x, raiz); + } + + /** + * Metodo privado recursivo para remover elemento. + * @param x Elemento a ser removido. + * @param i No em analise. + * @return No em analise, alterado ou nao. + * @throws Exception Se nao encontrar elemento. + */ + private No remover(int x, No i) throws Exception { + + if (i == null) { + throw new Exception("Erro ao remover!"); + + } else if (x < i.elemento) { + i.esq = remover(x, i.esq); + + } else if (x > i.elemento) { + i.dir = remover(x, i.dir); + + // Sem no a direita. + } else if (i.dir == null) { + i = i.esq; + + // Sem no a esquerda. + } else if (i.esq == null) { + i = i.dir; + + // No a esquerda e no a direita. + } else { + i.esq = maiorEsq(i, i.esq); + } + + return i; + } + + /** + * Metodo para trocar o elemento "removido" pelo maior da esquerda. + * @param i No que teve o elemento removido. + * @param j No da subarvore esquerda. + * @return No em analise, alterado ou nao. + */ + private No maiorEsq(No i, No j) { + + // Encontrou o maximo da subarvore esquerda. + if (j.dir == null) { + i.elemento = j.elemento; // Substitui i por j. + j = j.esq; // Substitui j por j.ESQ. + + // Existe no a direita. + } else { + // Caminha para direita. + j.dir = maiorEsq(i, j.dir); + } + return j; + } + + /** + * Metodo que retorna o maior elemento da árvore + * @return int maior elemento da árvore + */ + public int getMaior(){ + int resp = -1; + + if(raiz != null){ + No i; + for(i = raiz; i.dir != null; i = i.dir); + resp = i.elemento; + } + + return resp; + } + + + /** + * Metodo que retorna o menor elemento da árvore + * @return int menor elemento da árvore + */ + public int getMenor(){ + int resp = -1; + + if(raiz != null){ + No i; + for(i = raiz; i.esq != null; i = i.esq); + resp = i.elemento; + } + + return resp; + } + + + /** + * Metodo que retorna a altura da árvore + * @return int altura da árvore + */ + public int getAltura(){ + return getAltura(raiz, 0); + } + + + /** + * Metodo que retorna a altura da árvore + * @return int altura da árvore + */ + public int getAltura(No i, int altura){ + if(i == null){ + altura--; + } else { + int alturaEsq = getAltura(i.esq, altura + 1); + int alturaDir = getAltura(i.dir, altura + 1); + altura = (alturaEsq > alturaDir) ? alturaEsq : alturaDir; + } + return altura; + } + + + /** + * Metodo publico iterativo para remover elemento. + * @param x Elemento a ser removido. + * @throws Exception Se nao encontrar elemento. + */ + public void remover2(int x) throws Exception { + if (raiz == null) { + throw new Exception("Erro ao remover2!"); + } else if(x < raiz.elemento){ + remover2(x, raiz.esq, raiz); + } else if (x > raiz.elemento){ + remover2(x, raiz.dir, raiz); + } else if (raiz.dir == null) { + raiz = raiz.esq; + } else if (raiz.esq == null) { + raiz = raiz.dir; + } else { + raiz.esq = maiorEsq(raiz, raiz.esq); + } + } + + /** + * Metodo privado recursivo para remover elemento. + * @param x Elemento a ser removido. + * @param i No em analise. + * @param pai do No em analise. + * @throws Exception Se nao encontrar elemento. + */ + private void remover2(int x, No i, No pai) throws Exception { + if (i == null) { + throw new Exception("Erro ao remover2!"); + } else if (x < i.elemento) { + remover2(x, i.esq, i); + } else if (x > i.elemento) { + remover2(x, i.dir, i); + } else if (i.dir == null) { + pai = i.esq; + } else if (i.esq == null) { + pai = i.dir; + } else { + i.esq = maiorEsq(i, i.esq); + } + } + + public int getRaiz() throws Exception { + return raiz.elemento; + } + + public static boolean igual (ArvoreBinaria a1, ArvoreBinaria a2){ + return igual(a1.raiz, a2.raiz); + } + + private static boolean igual (No i1, No i2){ + boolean resp; + if(i1 != null && i2 != null){ + resp = (i1.elemento == i2.elemento) && igual(i1.esq, i2.esq) && igual(i1.dir, i2.dir); + } else if(i1 == null && i2 == null){ + resp = true; + } else { + resp = false; + } + return resp; + } + + public int soma(){ + return soma(raiz); + } + + public int soma(No i){ + int resp = 0; + if(i != null){ + resp = i.elemento + soma(i.esq) + soma(i.dir); + } + return resp; + } + + public int quantidadePares(){ + return quantidadePares(raiz); + } + + public int quantidadePares(No i){ + int resp = 0; + if(i != null){ + resp = ((i.elemento % 2 == 0) ? 1 : 0) + quantidadePares(i.esq) + quantidadePares(i.dir); + } + return resp; + } + + public boolean hasDiv11(){ + return hasDiv11(raiz); + } + + public boolean hasDiv11(No i){ + boolean resp = false; + if(i != null){ + resp = (i.elemento % 11 == 0) || hasDiv11(i.esq) || hasDiv11(i.dir); + } + return resp; + } +} + diff --git a/fonte/u05 Árvores binárias/arvoreBinaria/java/No.java b/Codigos/u05 Árvores binárias/arvoreBinaria/java/No.java similarity index 95% rename from fonte/u05 Árvores binárias/arvoreBinaria/java/No.java rename to Codigos/u05 Árvores binárias/arvoreBinaria/java/No.java index 11df066..2e327a2 100644 --- a/fonte/u05 Árvores binárias/arvoreBinaria/java/No.java +++ b/Codigos/u05 Árvores binárias/arvoreBinaria/java/No.java @@ -1,31 +1,31 @@ - -/** - * No da arvore binaria - * @author Max do Val Machado - */ - -class No { - public int elemento; // Conteudo do no. - public No esq, dir; // Filhos da esq e dir. - - /** - * Construtor da classe. - * @param elemento Conteudo do no. - */ - public No(int elemento) { - this(elemento, null, null); - } - - /** - * Construtor da classe. - * @param elemento Conteudo do no. - * @param esq No da esquerda. - * @param dir No da direita. - */ - public No(int elemento, No esq, No dir) { - this.elemento = elemento; - this.esq = esq; - this.dir = dir; - } -} - + +/** + * No da arvore binaria + * @author Max do Val Machado + */ + +class No { + public int elemento; // Conteudo do no. + public No esq, dir; // Filhos da esq e dir. + + /** + * Construtor da classe. + * @param elemento Conteudo do no. + */ + public No(int elemento) { + this(elemento, null, null); + } + + /** + * Construtor da classe. + * @param elemento Conteudo do no. + * @param esq No da esquerda. + * @param dir No da direita. + */ + public No(int elemento, No esq, No dir) { + this.elemento = elemento; + this.esq = esq; + this.dir = dir; + } +} + diff --git a/fonte/u05 Árvores binárias/arvoreBinaria/java/Principal.java b/Codigos/u05 Árvores binárias/arvoreBinaria/java/Principal.java similarity index 97% rename from fonte/u05 Árvores binárias/arvoreBinaria/java/Principal.java rename to Codigos/u05 Árvores binárias/arvoreBinaria/java/Principal.java index 700c137..ea75b65 100644 --- a/fonte/u05 Árvores binárias/arvoreBinaria/java/Principal.java +++ b/Codigos/u05 Árvores binárias/arvoreBinaria/java/Principal.java @@ -1,15 +1,15 @@ -/** - * Principal para Arvore Binaria de Pesquisa - * @author Max do Val Machado - */ -public class Principal { - public static void main(String[] args) throws Exception { - ArvoreBinaria arvoreBinaria = new ArvoreBinaria(); - for(int i=1; i<30; i++){ - arvoreBinaria.inserir(i); - System.out.print("No. nos: " + i); - System.out.print("\t Altura: " + arvoreBinaria.getAltura()); - System.out.println("\t log(2): " + Math.log(i)/Math.log(2)); - } - } -} +/** + * Principal para Arvore Binaria de Pesquisa + * @author Max do Val Machado + */ +public class Principal { + public static void main(String[] args) throws Exception { + ArvoreBinaria arvoreBinaria = new ArvoreBinaria(); + for(int i=1; i<30; i++){ + arvoreBinaria.inserir(i); + System.out.print("No. nos: " + i); + System.out.print("\t Altura: " + arvoreBinaria.getAltura()); + System.out.println("\t log(2): " + Math.log(i)/Math.log(2)); + } + } +} diff --git a/fonte/u05 Árvores binárias/arvoreBinaria/java/Principal2.java b/Codigos/u05 Árvores binárias/arvoreBinaria/java/Principal2.java similarity index 96% rename from fonte/u05 Árvores binárias/arvoreBinaria/java/Principal2.java rename to Codigos/u05 Árvores binárias/arvoreBinaria/java/Principal2.java index 76b27dc..c6801c5 100644 --- a/fonte/u05 Árvores binárias/arvoreBinaria/java/Principal2.java +++ b/Codigos/u05 Árvores binárias/arvoreBinaria/java/Principal2.java @@ -1,28 +1,28 @@ -/** - * Principal para Arvore Binaria de Pesquisa - * @author Max do Val Machado - */ -import java.util.*; - -public class Principal2 { - public static void main(String[] args) throws Exception { - ArvoreBinaria a = new ArvoreBinaria(); - - Random gerador = new Random(); - gerador.setSeed(0); - for(int i = 1; i <= 100000; i++){ - int valor; - do { - valor = Math.abs(gerador.nextInt()); - } while (a.pesquisar(valor) == true); - - a.inserir(valor); - - if(i % 1000 == 0){ - double log2 = (Math.log(i) / Math.log(2)); - log2 *= 1.39; - System.out.println("Número de nós = " + i + " --- log(i,2) = " + log2 + " --- h = " + a.getAltura()); - } - } - } -} +/** + * Principal para Arvore Binaria de Pesquisa + * @author Max do Val Machado + */ +import java.util.*; + +public class Principal2 { + public static void main(String[] args) throws Exception { + ArvoreBinaria a = new ArvoreBinaria(); + + Random gerador = new Random(); + gerador.setSeed(0); + for(int i = 1; i <= 100000; i++){ + int valor; + do { + valor = Math.abs(gerador.nextInt()); + } while (a.pesquisar(valor) == true); + + a.inserir(valor); + + if(i % 1000 == 0){ + double log2 = (Math.log(i) / Math.log(2)); + log2 *= 1.39; + System.out.println("Número de nós = " + i + " --- log(i,2) = " + log2 + " --- h = " + a.getAltura()); + } + } + } +} diff --git a/fonte/u05 Árvores binárias/arvoreBinaria/java/Principal3.java b/Codigos/u05 Árvores binárias/arvoreBinaria/java/Principal3.java similarity index 96% rename from fonte/u05 Árvores binárias/arvoreBinaria/java/Principal3.java rename to Codigos/u05 Árvores binárias/arvoreBinaria/java/Principal3.java index b42bfba..8e2cac8 100644 --- a/fonte/u05 Árvores binárias/arvoreBinaria/java/Principal3.java +++ b/Codigos/u05 Árvores binárias/arvoreBinaria/java/Principal3.java @@ -1,33 +1,33 @@ -/** - * Principal para Arvore Binaria de Pesquisa - * @author Max do Val Machado - */ -import java.util.*; - -public class Principal3 { - public static void main(String[] args) throws Exception { - ArvoreBinaria a1 = new ArvoreBinaria(); - ArvoreBinaria a2 = new ArvoreBinaria(); - - Random gerador = new Random(); - gerador.setSeed(4); - for(int i = 1; i <= 100000; i++){ - int valor = Math.abs(gerador.nextInt()); - if(a1.pesquisar(valor) == false){ - a1.inserir(valor); - a2.inserir(valor); - } - if(i % 100 == 0){ - a1.remover(valor); - a2.remover(valor); - a1.remover(a1.getRaiz()); - a2.remover(a2.getRaiz()); - } - - if(ArvoreBinaria.igual(a1, a2) == false){ - System.out.println("Árvores diferentes..."); - } - - } - } -} +/** + * Principal para Arvore Binaria de Pesquisa + * @author Max do Val Machado + */ +import java.util.*; + +public class Principal3 { + public static void main(String[] args) throws Exception { + ArvoreBinaria a1 = new ArvoreBinaria(); + ArvoreBinaria a2 = new ArvoreBinaria(); + + Random gerador = new Random(); + gerador.setSeed(4); + for(int i = 1; i <= 100000; i++){ + int valor = Math.abs(gerador.nextInt()); + if(a1.pesquisar(valor) == false){ + a1.inserir(valor); + a2.inserir(valor); + } + if(i % 100 == 0){ + a1.remover(valor); + a2.remover(valor); + a1.remover(a1.getRaiz()); + a2.remover(a2.getRaiz()); + } + + if(ArvoreBinaria.igual(a1, a2) == false){ + System.out.println("Árvores diferentes..."); + } + + } + } +} diff --git a/fonte/u05 Árvores binárias/arvoreBinaria/java/TreeSort.java b/Codigos/u05 Árvores binárias/arvoreBinaria/java/TreeSort.java similarity index 95% rename from fonte/u05 Árvores binárias/arvoreBinaria/java/TreeSort.java rename to Codigos/u05 Árvores binárias/arvoreBinaria/java/TreeSort.java index de5ec81..25a1611 100644 --- a/fonte/u05 Árvores binárias/arvoreBinaria/java/TreeSort.java +++ b/Codigos/u05 Árvores binárias/arvoreBinaria/java/TreeSort.java @@ -1,61 +1,61 @@ -import java.util.*; -public class TreeSort { - private No raiz; - private int n; - - public TreeSort() { - raiz = null; - n = 0; - } - - public int[] sort() { - int[] array = new int[n]; - n = 0; - sort(raiz, array); - return array; - } - - private void sort(No i, int[] array) { - if (i != null) { - sort(i.esq, array); - array[n++] = i.elemento; - sort (i.dir, array); - } - } - - public void inserir(int x) { - n++; - raiz = inserir(x, raiz); - } - - private No inserir(int x, No i) { - if (i == null) { - i = new No(x); - - } else if (x < i.elemento) { - i.esq = inserir(x, i.esq); - - } else if (x >= i.elemento) { - i.dir = inserir(x, i.dir); - } - - return i; - } - - public static void main(String[] args){ - TreeSort a = new TreeSort(); - Random gerador = new Random(); - gerador.setSeed(0); - System.out.print("\nArray: "); - for(int i = 1; i <= 100; i++){ - int valor = Math.abs(gerador.nextInt() % 1000); - a.inserir(valor); - System.out.print(valor + " "); - } - System.out.print("\nArray ordenado: "); - int[] array = a.sort(); - for(int i = 0; i < array.length; i++){ - System.out.print(array[i] + " "); - } - } -} +import java.util.*; +public class TreeSort { + private No raiz; + private int n; + + public TreeSort() { + raiz = null; + n = 0; + } + + public int[] sort() { + int[] array = new int[n]; + n = 0; + sort(raiz, array); + return array; + } + + private void sort(No i, int[] array) { + if (i != null) { + sort(i.esq, array); + array[n++] = i.elemento; + sort (i.dir, array); + } + } + + public void inserir(int x) { + n++; + raiz = inserir(x, raiz); + } + + private No inserir(int x, No i) { + if (i == null) { + i = new No(x); + + } else if (x < i.elemento) { + i.esq = inserir(x, i.esq); + + } else if (x >= i.elemento) { + i.dir = inserir(x, i.dir); + } + + return i; + } + + public static void main(String[] args){ + TreeSort a = new TreeSort(); + Random gerador = new Random(); + gerador.setSeed(0); + System.out.print("\nArray: "); + for(int i = 1; i <= 100; i++){ + int valor = Math.abs(gerador.nextInt() % 1000); + a.inserir(valor); + System.out.print(valor + " "); + } + System.out.print("\nArray ordenado: "); + int[] array = a.sort(); + for(int i = 0; i < array.length; i++){ + System.out.print(array[i] + " "); + } + } +} diff --git a/fonte/u05 Árvores binárias/arvoreBinariaDeLista/Agenda.java b/Codigos/u05 Árvores binárias/arvoreBinariaDeLista/Agenda.java similarity index 95% rename from fonte/u05 Árvores binárias/arvoreBinariaDeLista/Agenda.java rename to Codigos/u05 Árvores binárias/arvoreBinariaDeLista/Agenda.java index 97ccba7..cd0573a 100644 --- a/fonte/u05 Árvores binárias/arvoreBinariaDeLista/Agenda.java +++ b/Codigos/u05 Árvores binárias/arvoreBinariaDeLista/Agenda.java @@ -1,96 +1,96 @@ -public class Agenda { - private No raiz; - - public Agenda() { - raiz = new No ('M'); - raiz.esq = new No ('G'); - raiz.dir = new No ('T'); - raiz.esq.esq = new No ('A'); - //inserir todas as 26 letras do alfabeto... - } - - public boolean pesquisarNome(String nome) { - return pesquisarNome(raiz, nome); - } - - private boolean pesquisarNome(No no, String nome) { - boolean resp; - if (no == null) { - resp = false; - } else if (Char.toUpper(nome.charAt(0)) == no.letra) { - resp = false; - for(Celula i = no.primeiro.prox; (!resp && i != null); i = i.prox){ - if(i.contato.nome.equals(nome) == true){ - resp = true; - } - } - } else if (Char.toUpper(nome.charAt(0)) < no.letra) { - resp = pesquisarNome(no.esq, nome); - - } else { - resp = pesquisarNome(no.dir, nome); - } - return resp; - } - - public void inserir(Contato contato) throws Exception { - if(Character.isLetter(contato.nome.charAt(0))){ - raiz = inserir(raiz, contato); - } else { - throw new Exception("Erro ao inserir!"); - } - } - - private No inserir(No no, Contato contato) throws Exception { - // insere o nó com a letra - if (no == null) { - no = new no(Character.toUpperCase(contato.nome.charAt(0))); - no.ultimo.prox = new Celula(contato); - no.ultimo = no.ultimo.prox; - - // insere o contatinho - } else if (Character.toUpperCase(contato.nome.charAt(0)) == no.letra) { - no.ultimo.prox = new Celula(contato); - no.ultimo = no.ultimo.prox; - - // letra menor, caminha para a esquerda - } else if (Character.toUpperCase(contato.nome.charAt(0)) < no.letra) { - no.esq = inserir(no.esq, contato); - - // letra maior, caminha para a direita - } else { - no.dir = inserir(no.dir, contato); - } - return no; - } - - public boolean pesquisar(int cpf) { - return pesquisar(raiz, cpf); - } - - private boolean pesquisar(No no, int cpf) { - boolean resp = false; - if (no != null) { - resp = pesquisar(no.primeiro.prox, cpf); - if(resp == false){ - resp = pesquisar(no.esq, cpf); - if(resp == false){ - resp = pesquisar(no.dir, cpf); - } - } - } - return resp; - } - - private boolean pesquisar(Celula i, int cpf){ - //efeuar a pesquisa na lista a partir do i - } - -} - - - - - - - +public class Agenda { + private No raiz; + + public Agenda() { + raiz = new No ('M'); + raiz.esq = new No ('G'); + raiz.dir = new No ('T'); + raiz.esq.esq = new No ('A'); + //inserir todas as 26 letras do alfabeto... + } + + public boolean pesquisarNome(String nome) { + return pesquisarNome(raiz, nome); + } + + private boolean pesquisarNome(No no, String nome) { + boolean resp; + if (no == null) { + resp = false; + } else if (Char.toUpper(nome.charAt(0)) == no.letra) { + resp = false; + for(Celula i = no.primeiro.prox; (!resp && i != null); i = i.prox){ + if(i.contato.nome.equals(nome) == true){ + resp = true; + } + } + } else if (Char.toUpper(nome.charAt(0)) < no.letra) { + resp = pesquisarNome(no.esq, nome); + + } else { + resp = pesquisarNome(no.dir, nome); + } + return resp; + } + + public void inserir(Contato contato) throws Exception { + if(Character.isLetter(contato.nome.charAt(0))){ + raiz = inserir(raiz, contato); + } else { + throw new Exception("Erro ao inserir!"); + } + } + + private No inserir(No no, Contato contato) throws Exception { + // insere o nó com a letra + if (no == null) { + no = new no(Character.toUpperCase(contato.nome.charAt(0))); + no.ultimo.prox = new Celula(contato); + no.ultimo = no.ultimo.prox; + + // insere o contatinho + } else if (Character.toUpperCase(contato.nome.charAt(0)) == no.letra) { + no.ultimo.prox = new Celula(contato); + no.ultimo = no.ultimo.prox; + + // letra menor, caminha para a esquerda + } else if (Character.toUpperCase(contato.nome.charAt(0)) < no.letra) { + no.esq = inserir(no.esq, contato); + + // letra maior, caminha para a direita + } else { + no.dir = inserir(no.dir, contato); + } + return no; + } + + public boolean pesquisar(int cpf) { + return pesquisar(raiz, cpf); + } + + private boolean pesquisar(No no, int cpf) { + boolean resp = false; + if (no != null) { + resp = pesquisar(no.primeiro.prox, cpf); + if(resp == false){ + resp = pesquisar(no.esq, cpf); + if(resp == false){ + resp = pesquisar(no.dir, cpf); + } + } + } + return resp; + } + + private boolean pesquisar(Celula i, int cpf){ + //efeuar a pesquisa na lista a partir do i + } + +} + + + + + + + diff --git a/fonte/u05 Árvores binárias/arvoreBinariaDeLista/Celula.java b/Codigos/u05 Árvores binárias/arvoreBinariaDeLista/Celula.java similarity index 94% rename from fonte/u05 Árvores binárias/arvoreBinariaDeLista/Celula.java rename to Codigos/u05 Árvores binárias/arvoreBinariaDeLista/Celula.java index 44869b1..cc69e5e 100644 --- a/fonte/u05 Árvores binárias/arvoreBinariaDeLista/Celula.java +++ b/Codigos/u05 Árvores binárias/arvoreBinariaDeLista/Celula.java @@ -1,17 +1,17 @@ -class Celula { - Contato contato; - Celula prox; - - public Celula (){ - this(null, null); - } - - public Celula(Contato contato){ - this(contato, null); - } - - public Celula (Contato contato, Celula prox){ - this.contato = contato; - this.prox = prox; - } -} +class Celula { + Contato contato; + Celula prox; + + public Celula (){ + this(null, null); + } + + public Celula(Contato contato){ + this(contato, null); + } + + public Celula (Contato contato, Celula prox){ + this.contato = contato; + this.prox = prox; + } +} diff --git a/fonte/u05 Árvores binárias/arvoreBinariaDeLista/Contato.java b/Codigos/u05 Árvores binárias/arvoreBinariaDeLista/Contato.java similarity index 95% rename from fonte/u05 Árvores binárias/arvoreBinariaDeLista/Contato.java rename to Codigos/u05 Árvores binárias/arvoreBinariaDeLista/Contato.java index db59215..54cd5cd 100644 --- a/fonte/u05 Árvores binárias/arvoreBinariaDeLista/Contato.java +++ b/Codigos/u05 Árvores binárias/arvoreBinariaDeLista/Contato.java @@ -1,16 +1,16 @@ -class Contato { - public String nome; - public String telefone; - public String email; - public int cpf; - - public Contato(){ - this("","","",-1); - } - public Contato(String nome, String telefone, String email, int cpf){ - this.nome = nome; - this.telefone = telefone; - this.email = email; - this.cpf = cpf; - } -} +class Contato { + public String nome; + public String telefone; + public String email; + public int cpf; + + public Contato(){ + this("","","",-1); + } + public Contato(String nome, String telefone, String email, int cpf){ + this.nome = nome; + this.telefone = telefone; + this.email = email; + this.cpf = cpf; + } +} diff --git a/fonte/u05 Árvores binárias/arvoreBinariaDeLista/No.java b/Codigos/u05 Árvores binárias/arvoreBinariaDeLista/No.java similarity index 94% rename from fonte/u05 Árvores binárias/arvoreBinariaDeLista/No.java rename to Codigos/u05 Árvores binárias/arvoreBinariaDeLista/No.java index f57c276..b46f030 100644 --- a/fonte/u05 Árvores binárias/arvoreBinariaDeLista/No.java +++ b/Codigos/u05 Árvores binárias/arvoreBinariaDeLista/No.java @@ -1,12 +1,12 @@ - -class No { - public char letra; - public No esq, dir; - public Celula primeiro, ultimo; - - public No(char letra) { - this.letra = letra; - this.esq = this.dir = null; - primeiro = ultimo = new Celula(); - } -} + +class No { + public char letra; + public No esq, dir; + public Celula primeiro, ultimo; + + public No(char letra) { + this.letra = letra; + this.esq = this.dir = null; + primeiro = ultimo = new Celula(); + } +} diff --git a/fonte/u04 Estruturas de dados básicas flexíveis/java/pilha/Celula.java b/Codigos/u05 Árvores binárias/matrizDeLista/Celula.java similarity index 94% rename from fonte/u04 Estruturas de dados básicas flexíveis/java/pilha/Celula.java rename to Codigos/u05 Árvores binárias/matrizDeLista/Celula.java index 866b654..4a92aef 100644 --- a/fonte/u04 Estruturas de dados básicas flexíveis/java/pilha/Celula.java +++ b/Codigos/u05 Árvores binárias/matrizDeLista/Celula.java @@ -1,26 +1,26 @@ -/** - * Celula (pilha, lista e fila dinamica) - * @author Max do Val Machado - * @version 2 01/2015 - */ -class Celula { - public int elemento; // Elemento inserido na celula. - public Celula prox; // Aponta a celula prox. - - - /** - * Construtor da classe. - */ - public Celula() { - this(0); - } - - /** - * Construtor da classe. - * @param elemento int inserido na celula. - */ - public Celula(int elemento) { - this.elemento = elemento; - this.prox = null; - } -} +/** + * Celula (pilha, lista e fila dinamica) + * @author Max do Val Machado + * @version 2 01/2015 + */ +class Celula { + public int elemento; // Elemento inserido na celula. + public Celula prox; // Aponta a celula prox. + + + /** + * Construtor da classe. + */ + public Celula() { + this(0); + } + + /** + * Construtor da classe. + * @param elemento int inserido na celula. + */ + public Celula(int elemento) { + this.elemento = elemento; + this.prox = null; + } +} diff --git a/fonte/u05 Árvores binárias/matrizDeLista/CelulaMat.java b/Codigos/u05 Árvores binárias/matrizDeLista/CelulaMat.java similarity index 95% rename from fonte/u05 Árvores binárias/matrizDeLista/CelulaMat.java rename to Codigos/u05 Árvores binárias/matrizDeLista/CelulaMat.java index a1cf246..52f00cf 100644 --- a/fonte/u05 Árvores binárias/matrizDeLista/CelulaMat.java +++ b/Codigos/u05 Árvores binárias/matrizDeLista/CelulaMat.java @@ -1,22 +1,22 @@ -class CelulaMat { - public int elemento; - public CelulaMat inf, sup, esq, dir; - public Celula primeiro, ultimo; - - public CelulaMat(){ - this(0); - } - - public CelulaMat(int elemento){ - this(elemento, null, null, null, null); - } - - public CelulaMat(int elemento, CelulaMat inf, CelulaMat sup, CelulaMat esq, CelulaMat dir){ - this.elemento = elemento; - this.inf = inf; - this.sup = sup; - this.esq = esq; - this.dir = dir; - this.primeiro = this.ultimo = new Celula(); - } -} +class CelulaMat { + public int elemento; + public CelulaMat inf, sup, esq, dir; + public Celula primeiro, ultimo; + + public CelulaMat(){ + this(0); + } + + public CelulaMat(int elemento){ + this(elemento, null, null, null, null); + } + + public CelulaMat(int elemento, CelulaMat inf, CelulaMat sup, CelulaMat esq, CelulaMat dir){ + this.elemento = elemento; + this.inf = inf; + this.sup = sup; + this.esq = esq; + this.dir = dir; + this.primeiro = this.ultimo = new Celula(); + } +} diff --git a/fonte/u05 Árvores binárias/matrizDeLista/MatrizDeLista.java b/Codigos/u05 Árvores binárias/matrizDeLista/MatrizDeLista.java similarity index 100% rename from fonte/u05 Árvores binárias/matrizDeLista/MatrizDeLista.java rename to Codigos/u05 Árvores binárias/matrizDeLista/MatrizDeLista.java diff --git a/fonte/u06 Balanceamento de árvores/README.md b/Codigos/u06 Balanceamento de árvores/README.md similarity index 98% rename from fonte/u06 Balanceamento de árvores/README.md rename to Codigos/u06 Balanceamento de árvores/README.md index 21444f8..911c94f 100644 --- a/fonte/u06 Balanceamento de árvores/README.md +++ b/Codigos/u06 Balanceamento de árvores/README.md @@ -1,2 +1,2 @@ -# U7 - Balanceamento de árvores -Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II +# U7 - Balanceamento de árvores +Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II diff --git a/fonte/u06 Balanceamento de árvores/java/alvinegra/Alvinegra.java b/Codigos/u06 Balanceamento de árvores/java/alvinegra/Alvinegra.java similarity index 97% rename from fonte/u06 Balanceamento de árvores/java/alvinegra/Alvinegra.java rename to Codigos/u06 Balanceamento de árvores/java/alvinegra/Alvinegra.java index a41f465..335cf3f 100644 --- a/fonte/u06 Balanceamento de árvores/java/alvinegra/Alvinegra.java +++ b/Codigos/u06 Balanceamento de árvores/java/alvinegra/Alvinegra.java @@ -1,285 +1,285 @@ -/** - * Arvore binaria de pesquisa - * - * @author Max do Val Machado - */ -public class Alvinegra { - private NoAN raiz; // Raiz da arvore. - - /** - * Construtor da classe. - */ - public Alvinegra() { - raiz = null; - } - - /** - * Metodo publico iterativo para pesquisar elemento. - * - * @param elemento Elemento que sera procurado. - * @return true se o elemento existir, - * false em caso contrario. - */ - public boolean pesquisar(int elemento) { - return pesquisar(elemento, raiz); - } - - /** - * Metodo privado recursivo para pesquisar elemento. - * - * @param elemento Elemento que sera procurado. - * @param i NoAN em analise. - * @return true se o elemento existir, - * false em caso contrario. - */ - private boolean pesquisar(int elemento, NoAN i) { - boolean resp; - if (i == null) { - resp = false; - } else if (elemento == i.elemento) { - resp = true; - } else if (elemento < i.elemento) { - resp = pesquisar(elemento, i.esq); - } else { - resp = pesquisar(elemento, i.dir); - } - return resp; - } - - /** - * Metodo publico iterativo para exibir elementos. - */ - public void caminharCentral() { - System.out.print("[ "); - caminharCentral(raiz); - System.out.println("]"); - } - - /** - * Metodo privado recursivo para exibir elementos. - * - * @param i NoAN em analise. - */ - private void caminharCentral(NoAN i) { - if (i != null) { - caminharCentral(i.esq); // Elementos da esquerda. - System.out.print(i.elemento + ((i.cor) ? "(p) " : "(b) ")); // Conteudo do no. - caminharCentral(i.dir); // Elementos da direita. - } - } - - /** - * Metodo publico iterativo para exibir elementos. - */ - public void caminharPre() { - System.out.print("[ "); - caminharPre(raiz); - System.out.println("]"); - } - - /** - * Metodo privado recursivo para exibir elementos. - * - * @param i NoAN em analise. - */ - private void caminharPre(NoAN i) { - if (i != null) { - System.out.print(i.elemento + ((i.cor) ? "(p) " : "(b) ")); // Conteudo do no. - caminharPre(i.esq); // Elementos da esquerda. - caminharPre(i.dir); // Elementos da direita. - } - } - - /** - * Metodo publico iterativo para exibir elementos. - */ - public void caminharPos() { - System.out.print("[ "); - caminharPos(raiz); - System.out.println("]"); - } - - /** - * Metodo privado recursivo para exibir elementos. - * - * @param i NoAN em analise. - */ - private void caminharPos(NoAN i) { - if (i != null) { - caminharPos(i.esq); // Elementos da esquerda. - caminharPos(i.dir); // Elementos da direita. - System.out.print(i.elemento + ((i.cor) ? "(p) " : "(b) ")); // Conteudo do no. - } - } - - /** - * Metodo publico iterativo para inserir elemento. - * - * @param elemento Elemento a ser inserido. - * @throws Exception Se o elemento existir. - */ - public void inserir(int elemento) throws Exception { - // Se a arvore estiver vazia - if (raiz == null) { - raiz = new NoAN(elemento); - System.out.println("Antes, zero elementos. Agora, raiz(" + raiz.elemento + ")."); - - // Senao, se a arvore tiver um elemento - } else if (raiz.esq == null && raiz.dir == null) { - if (elemento < raiz.elemento) { - raiz.esq = new NoAN(elemento); - System.out.println("Antes, um elemento. Agora, raiz(" + raiz.elemento + ") e esq(" + raiz.esq.elemento + ")."); - } else { - raiz.dir = new NoAN(elemento); - System.out.println("Antes, um elemento. Agora, raiz(" + raiz.elemento + ") e dir(" + raiz.dir.elemento + ")."); - } - - // Senao, se a arvore tiver dois elementos (raiz e dir) - } else if (raiz.esq == null) { - if (elemento < raiz.elemento) { - raiz.esq = new NoAN(elemento); - System.out.println("Antes, dois elementos(A). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento + ") e dir(" + raiz.dir.elemento + ")."); - - } else if (elemento < raiz.dir.elemento) { - raiz.esq = new NoAN(raiz.elemento); - raiz.elemento = elemento; - System.out.println("Antes, dois elementos(B). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento + ") e dir(" + raiz.dir.elemento + ")."); - - } else { - raiz.esq = new NoAN(raiz.elemento); - raiz.elemento = raiz.dir.elemento; - raiz.dir.elemento = elemento; - System.out.println("Antes, dois elementos(C). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento + ") e dir(" + raiz.dir.elemento + ")."); - } - raiz.esq.cor = raiz.dir.cor = false; - - // Senao, se a arvore tiver dois elementos (raiz e esq) - } else if (raiz.dir == null) { - if (elemento > raiz.elemento) { - raiz.dir = new NoAN(elemento); - System.out.println("Antes, dois elementos(D). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento + ") e dir(" + raiz.dir.elemento + ")."); - - } else if (elemento > raiz.esq.elemento) { - raiz.dir = new NoAN(raiz.elemento); - raiz.elemento = elemento; - System.out.println("Antes, dois elementos(E). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento + ") e dir(" + raiz.dir.elemento + ")."); - - } else { - raiz.dir = new NoAN(raiz.elemento); - raiz.elemento = raiz.esq.elemento; - raiz.esq.elemento = elemento; - System.out.println("Antes, dois elementos(F). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento + ") e dir(" + raiz.dir.elemento + ")."); - } - raiz.esq.cor = raiz.dir.cor = false; - - // Senao, a arvore tem tres ou mais elementos - } else { - System.out.println("Arvore com tres ou mais elementos..."); - inserir(elemento, null, null, null, raiz); - } - raiz.cor = false; - } - - private void balancear(NoAN bisavo, NoAN avo, NoAN pai, NoAN i) { - // Se o pai tambem e preto, reequilibrar a arvore, rotacionando o avo - if (pai.cor == true) { - // 4 tipos de reequilibrios e acoplamento - if (pai.elemento > avo.elemento) { // rotacao a esquerda ou direita-esquerda - if (i.elemento > pai.elemento) { - avo = rotacaoEsq(avo); - } else { - avo = rotacaoDirEsq(avo); - } - } else { // rotacao a direita ou esquerda-direita - if (i.elemento < pai.elemento) { - avo = rotacaoDir(avo); - } else { - avo = rotacaoEsqDir(avo); - } - } - if (bisavo == null) { - raiz = avo; - } else if (avo.elemento < bisavo.elemento) { - bisavo.esq = avo; - } else { - bisavo.dir = avo; - } - // reestabelecer as cores apos a rotacao - avo.cor = false; - avo.esq.cor = avo.dir.cor = true; - System.out.println("Reestabeler cores: avo(" + avo.elemento + "->branco) e avo.esq / avo.dir(" - + avo.esq.elemento + "," + avo.dir.elemento + "-> pretos)"); - } // if(pai.cor == true) - } - - /** - * Metodo privado recursivo para inserir elemento. - * - * @param elemento Elemento a ser inserido. - * @param avo NoAN em analise. - * @param pai NoAN em analise. - * @param i NoAN em analise. - * @throws Exception Se o elemento existir. - */ - private void inserir(int elemento, NoAN bisavo, NoAN avo, NoAN pai, NoAN i) throws Exception { - if (i == null) { - if (elemento < pai.elemento) { - i = pai.esq = new NoAN(elemento, true); - } else { - i = pai.dir = new NoAN(elemento, true); - } - if (pai.cor == true) { - balancear(bisavo, avo, pai, i); - } - } else { - // Achou um 4-no: eh preciso fragmeta-lo e reequilibrar a arvore - if (i.esq != null && i.dir != null && i.esq.cor == true && i.dir.cor == true) { - i.cor = true; - i.esq.cor = i.dir.cor = false; - if (i == raiz) { - i.cor = false; - } else if (pai.cor == true) { - balancear(bisavo, avo, pai, i); - } - } - if (elemento < i.elemento) { - inserir(elemento, avo, pai, i, i.esq); - } else if (elemento > i.elemento) { - inserir(elemento, avo, pai, i, i.dir); - } else { - throw new Exception("Erro inserir (elemento repetido)!"); - } - } - } - - private NoAN rotacaoDir(NoAN no) { - System.out.println("Rotacao DIR(" + no.elemento + ")"); - NoAN noEsq = no.esq; - NoAN noEsqDir = noEsq.dir; - - noEsq.dir = no; - no.esq = noEsqDir; - - return noEsq; - } - - private NoAN rotacaoEsq(NoAN no) { - System.out.println("Rotacao ESQ(" + no.elemento + ")"); - NoAN noDir = no.dir; - NoAN noDirEsq = noDir.esq; - - noDir.esq = no; - no.dir = noDirEsq; - return noDir; - } - - private NoAN rotacaoDirEsq(NoAN no) { - no.dir = rotacaoDir(no.dir); - return rotacaoEsq(no); - } - - private NoAN rotacaoEsqDir(NoAN no) { - no.esq = rotacaoEsq(no.esq); - return rotacaoDir(no); - } -} +/** + * Arvore binaria de pesquisa + * + * @author Max do Val Machado + */ +public class Alvinegra { + private NoAN raiz; // Raiz da arvore. + + /** + * Construtor da classe. + */ + public Alvinegra() { + raiz = null; + } + + /** + * Metodo publico iterativo para pesquisar elemento. + * + * @param elemento Elemento que sera procurado. + * @return true se o elemento existir, + * false em caso contrario. + */ + public boolean pesquisar(int elemento) { + return pesquisar(elemento, raiz); + } + + /** + * Metodo privado recursivo para pesquisar elemento. + * + * @param elemento Elemento que sera procurado. + * @param i NoAN em analise. + * @return true se o elemento existir, + * false em caso contrario. + */ + private boolean pesquisar(int elemento, NoAN i) { + boolean resp; + if (i == null) { + resp = false; + } else if (elemento == i.elemento) { + resp = true; + } else if (elemento < i.elemento) { + resp = pesquisar(elemento, i.esq); + } else { + resp = pesquisar(elemento, i.dir); + } + return resp; + } + + /** + * Metodo publico iterativo para exibir elementos. + */ + public void caminharCentral() { + System.out.print("[ "); + caminharCentral(raiz); + System.out.println("]"); + } + + /** + * Metodo privado recursivo para exibir elementos. + * + * @param i NoAN em analise. + */ + private void caminharCentral(NoAN i) { + if (i != null) { + caminharCentral(i.esq); // Elementos da esquerda. + System.out.print(i.elemento + ((i.cor) ? "(p) " : "(b) ")); // Conteudo do no. + caminharCentral(i.dir); // Elementos da direita. + } + } + + /** + * Metodo publico iterativo para exibir elementos. + */ + public void caminharPre() { + System.out.print("[ "); + caminharPre(raiz); + System.out.println("]"); + } + + /** + * Metodo privado recursivo para exibir elementos. + * + * @param i NoAN em analise. + */ + private void caminharPre(NoAN i) { + if (i != null) { + System.out.print(i.elemento + ((i.cor) ? "(p) " : "(b) ")); // Conteudo do no. + caminharPre(i.esq); // Elementos da esquerda. + caminharPre(i.dir); // Elementos da direita. + } + } + + /** + * Metodo publico iterativo para exibir elementos. + */ + public void caminharPos() { + System.out.print("[ "); + caminharPos(raiz); + System.out.println("]"); + } + + /** + * Metodo privado recursivo para exibir elementos. + * + * @param i NoAN em analise. + */ + private void caminharPos(NoAN i) { + if (i != null) { + caminharPos(i.esq); // Elementos da esquerda. + caminharPos(i.dir); // Elementos da direita. + System.out.print(i.elemento + ((i.cor) ? "(p) " : "(b) ")); // Conteudo do no. + } + } + + /** + * Metodo publico iterativo para inserir elemento. + * + * @param elemento Elemento a ser inserido. + * @throws Exception Se o elemento existir. + */ + public void inserir(int elemento) throws Exception { + // Se a arvore estiver vazia + if (raiz == null) { + raiz = new NoAN(elemento); + System.out.println("Antes, zero elementos. Agora, raiz(" + raiz.elemento + ")."); + + // Senao, se a arvore tiver um elemento + } else if (raiz.esq == null && raiz.dir == null) { + if (elemento < raiz.elemento) { + raiz.esq = new NoAN(elemento); + System.out.println("Antes, um elemento. Agora, raiz(" + raiz.elemento + ") e esq(" + raiz.esq.elemento + ")."); + } else { + raiz.dir = new NoAN(elemento); + System.out.println("Antes, um elemento. Agora, raiz(" + raiz.elemento + ") e dir(" + raiz.dir.elemento + ")."); + } + + // Senao, se a arvore tiver dois elementos (raiz e dir) + } else if (raiz.esq == null) { + if (elemento < raiz.elemento) { + raiz.esq = new NoAN(elemento); + System.out.println("Antes, dois elementos(A). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento + ") e dir(" + raiz.dir.elemento + ")."); + + } else if (elemento < raiz.dir.elemento) { + raiz.esq = new NoAN(raiz.elemento); + raiz.elemento = elemento; + System.out.println("Antes, dois elementos(B). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento + ") e dir(" + raiz.dir.elemento + ")."); + + } else { + raiz.esq = new NoAN(raiz.elemento); + raiz.elemento = raiz.dir.elemento; + raiz.dir.elemento = elemento; + System.out.println("Antes, dois elementos(C). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento + ") e dir(" + raiz.dir.elemento + ")."); + } + raiz.esq.cor = raiz.dir.cor = false; + + // Senao, se a arvore tiver dois elementos (raiz e esq) + } else if (raiz.dir == null) { + if (elemento > raiz.elemento) { + raiz.dir = new NoAN(elemento); + System.out.println("Antes, dois elementos(D). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento + ") e dir(" + raiz.dir.elemento + ")."); + + } else if (elemento > raiz.esq.elemento) { + raiz.dir = new NoAN(raiz.elemento); + raiz.elemento = elemento; + System.out.println("Antes, dois elementos(E). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento + ") e dir(" + raiz.dir.elemento + ")."); + + } else { + raiz.dir = new NoAN(raiz.elemento); + raiz.elemento = raiz.esq.elemento; + raiz.esq.elemento = elemento; + System.out.println("Antes, dois elementos(F). Agora, raiz(" + raiz.elemento + "), esq (" + raiz.esq.elemento + ") e dir(" + raiz.dir.elemento + ")."); + } + raiz.esq.cor = raiz.dir.cor = false; + + // Senao, a arvore tem tres ou mais elementos + } else { + System.out.println("Arvore com tres ou mais elementos..."); + inserir(elemento, null, null, null, raiz); + } + raiz.cor = false; + } + + private void balancear(NoAN bisavo, NoAN avo, NoAN pai, NoAN i) { + // Se o pai tambem e preto, reequilibrar a arvore, rotacionando o avo + if (pai.cor == true) { + // 4 tipos de reequilibrios e acoplamento + if (pai.elemento > avo.elemento) { // rotacao a esquerda ou direita-esquerda + if (i.elemento > pai.elemento) { + avo = rotacaoEsq(avo); + } else { + avo = rotacaoDirEsq(avo); + } + } else { // rotacao a direita ou esquerda-direita + if (i.elemento < pai.elemento) { + avo = rotacaoDir(avo); + } else { + avo = rotacaoEsqDir(avo); + } + } + if (bisavo == null) { + raiz = avo; + } else if (avo.elemento < bisavo.elemento) { + bisavo.esq = avo; + } else { + bisavo.dir = avo; + } + // reestabelecer as cores apos a rotacao + avo.cor = false; + avo.esq.cor = avo.dir.cor = true; + System.out.println("Reestabeler cores: avo(" + avo.elemento + "->branco) e avo.esq / avo.dir(" + + avo.esq.elemento + "," + avo.dir.elemento + "-> pretos)"); + } // if(pai.cor == true) + } + + /** + * Metodo privado recursivo para inserir elemento. + * + * @param elemento Elemento a ser inserido. + * @param avo NoAN em analise. + * @param pai NoAN em analise. + * @param i NoAN em analise. + * @throws Exception Se o elemento existir. + */ + private void inserir(int elemento, NoAN bisavo, NoAN avo, NoAN pai, NoAN i) throws Exception { + if (i == null) { + if (elemento < pai.elemento) { + i = pai.esq = new NoAN(elemento, true); + } else { + i = pai.dir = new NoAN(elemento, true); + } + if (pai.cor == true) { + balancear(bisavo, avo, pai, i); + } + } else { + // Achou um 4-no: eh preciso fragmeta-lo e reequilibrar a arvore + if (i.esq != null && i.dir != null && i.esq.cor == true && i.dir.cor == true) { + i.cor = true; + i.esq.cor = i.dir.cor = false; + if (i == raiz) { + i.cor = false; + } else if (pai.cor == true) { + balancear(bisavo, avo, pai, i); + } + } + if (elemento < i.elemento) { + inserir(elemento, avo, pai, i, i.esq); + } else if (elemento > i.elemento) { + inserir(elemento, avo, pai, i, i.dir); + } else { + throw new Exception("Erro inserir (elemento repetido)!"); + } + } + } + + private NoAN rotacaoDir(NoAN no) { + System.out.println("Rotacao DIR(" + no.elemento + ")"); + NoAN noEsq = no.esq; + NoAN noEsqDir = noEsq.dir; + + noEsq.dir = no; + no.esq = noEsqDir; + + return noEsq; + } + + private NoAN rotacaoEsq(NoAN no) { + System.out.println("Rotacao ESQ(" + no.elemento + ")"); + NoAN noDir = no.dir; + NoAN noDirEsq = noDir.esq; + + noDir.esq = no; + no.dir = noDirEsq; + return noDir; + } + + private NoAN rotacaoDirEsq(NoAN no) { + no.dir = rotacaoDir(no.dir); + return rotacaoEsq(no); + } + + private NoAN rotacaoEsqDir(NoAN no) { + no.esq = rotacaoEsq(no.esq); + return rotacaoDir(no); + } +} diff --git a/fonte/u06 Balanceamento de árvores/java/alvinegra/NoAN.java b/Codigos/u06 Balanceamento de árvores/java/alvinegra/NoAN.java similarity index 94% rename from fonte/u06 Balanceamento de árvores/java/alvinegra/NoAN.java rename to Codigos/u06 Balanceamento de árvores/java/alvinegra/NoAN.java index 95b0fa7..0843870 100644 --- a/fonte/u06 Balanceamento de árvores/java/alvinegra/NoAN.java +++ b/Codigos/u06 Balanceamento de árvores/java/alvinegra/NoAN.java @@ -1,29 +1,29 @@ -/** - * NoAN da arvore binaria - * - * @author Max do Val Machado - */ -class NoAN { - public boolean cor; - public int elemento; - public NoAN esq, dir; - - public NoAN() { - this(-1); - } - - public NoAN(int elemento) { - this(elemento, false, null, null); - } - - public NoAN(int elemento, boolean cor) { - this(elemento, cor, null, null); - } - - public NoAN(int elemento, boolean cor, NoAN esq, NoAN dir) { - this.cor = cor; - this.elemento = elemento; - this.esq = esq; - this.dir = dir; - } -} +/** + * NoAN da arvore binaria + * + * @author Max do Val Machado + */ +class NoAN { + public boolean cor; + public int elemento; + public NoAN esq, dir; + + public NoAN() { + this(-1); + } + + public NoAN(int elemento) { + this(elemento, false, null, null); + } + + public NoAN(int elemento, boolean cor) { + this(elemento, cor, null, null); + } + + public NoAN(int elemento, boolean cor, NoAN esq, NoAN dir) { + this.cor = cor; + this.elemento = elemento; + this.esq = esq; + this.dir = dir; + } +} diff --git a/fonte/u06 Balanceamento de árvores/java/alvinegra/Oi.java b/Codigos/u06 Balanceamento de árvores/java/alvinegra/Oi.java similarity index 100% rename from fonte/u06 Balanceamento de árvores/java/alvinegra/Oi.java rename to Codigos/u06 Balanceamento de árvores/java/alvinegra/Oi.java diff --git a/fonte/u06 Balanceamento de árvores/java/alvinegra/Principal.java b/Codigos/u06 Balanceamento de árvores/java/alvinegra/Principal.java similarity index 96% rename from fonte/u06 Balanceamento de árvores/java/alvinegra/Principal.java rename to Codigos/u06 Balanceamento de árvores/java/alvinegra/Principal.java index 4f7e49e..1781791 100644 --- a/fonte/u06 Balanceamento de árvores/java/alvinegra/Principal.java +++ b/Codigos/u06 Balanceamento de árvores/java/alvinegra/Principal.java @@ -1,83 +1,83 @@ -/** - * Principal para Arvore Binaria de Pesquisa - * - * @author Max do Val Machado - */ -public class Principal { - public static void main(String[] args) throws Exception { - Alvinegra arvore = new Alvinegra(); - - /* - * arvore.inserir(1); - * arvore.inserir(2); - * arvore.inserir(3); - * arvore.mostrarPre(); - * - * arvore = new Alvinegra(); - * arvore.inserir(1); - * arvore.inserir(3); - * arvore.inserir(2); - * arvore.mostrarPre(); - * - * arvore = new Alvinegra(); - * arvore.inserir(2); - * arvore.inserir(1); - * arvore.inserir(3); - * arvore.mostrarPre(); - * - * arvore = new Alvinegra(); - * arvore.inserir(2); - * arvore.inserir(3); - * arvore.inserir(1); - * arvore.mostrarPre(); - * - * arvore = new Alvinegra(); - * arvore.inserir(3); - * arvore.inserir(1); - * arvore.inserir(2); - * arvore.mostrarPre(); - * - * arvore = new Alvinegra(); - * arvore.inserir(3); - * arvore.inserir(2); - * arvore.inserir(1); - * arvore.mostrarPre(); - */ - arvore.inserir(4); - arvore.caminharPre(); - arvore.inserir(35); - arvore.caminharPre(); - arvore.inserir(10); - arvore.caminharPre(); - arvore.inserir(13); - arvore.caminharPre(); - arvore.inserir(3); - arvore.caminharPre(); - arvore.inserir(30); - arvore.caminharPre(); - arvore.inserir(15); - arvore.caminharPre(); - arvore.inserir(12); - arvore.caminharPre(); - arvore.inserir(7); - arvore.caminharPre(); - arvore.inserir(40); - arvore.caminharPre(); - arvore.inserir(20); - arvore.caminharPre(); - - /* - * arvore = new Alvinegra(); - * Random gerador = new Random(); - * gerador.setSeed(4); - * for(int i = 0; i < 4000; i++){ - * int elemento; - * do { - * elemento = ((int)Math.abs(gerador.nextInt())) % 100000; - * } while (arvore.pesquisar(elemento) == true); - * arvore.inserir(elemento); - * arvore.mostrarPre(); - * } - */ - } -} +/** + * Principal para Arvore Binaria de Pesquisa + * + * @author Max do Val Machado + */ +public class Principal { + public static void main(String[] args) throws Exception { + Alvinegra arvore = new Alvinegra(); + + /* + * arvore.inserir(1); + * arvore.inserir(2); + * arvore.inserir(3); + * arvore.mostrarPre(); + * + * arvore = new Alvinegra(); + * arvore.inserir(1); + * arvore.inserir(3); + * arvore.inserir(2); + * arvore.mostrarPre(); + * + * arvore = new Alvinegra(); + * arvore.inserir(2); + * arvore.inserir(1); + * arvore.inserir(3); + * arvore.mostrarPre(); + * + * arvore = new Alvinegra(); + * arvore.inserir(2); + * arvore.inserir(3); + * arvore.inserir(1); + * arvore.mostrarPre(); + * + * arvore = new Alvinegra(); + * arvore.inserir(3); + * arvore.inserir(1); + * arvore.inserir(2); + * arvore.mostrarPre(); + * + * arvore = new Alvinegra(); + * arvore.inserir(3); + * arvore.inserir(2); + * arvore.inserir(1); + * arvore.mostrarPre(); + */ + arvore.inserir(4); + arvore.caminharPre(); + arvore.inserir(35); + arvore.caminharPre(); + arvore.inserir(10); + arvore.caminharPre(); + arvore.inserir(13); + arvore.caminharPre(); + arvore.inserir(3); + arvore.caminharPre(); + arvore.inserir(30); + arvore.caminharPre(); + arvore.inserir(15); + arvore.caminharPre(); + arvore.inserir(12); + arvore.caminharPre(); + arvore.inserir(7); + arvore.caminharPre(); + arvore.inserir(40); + arvore.caminharPre(); + arvore.inserir(20); + arvore.caminharPre(); + + /* + * arvore = new Alvinegra(); + * Random gerador = new Random(); + * gerador.setSeed(4); + * for(int i = 0; i < 4000; i++){ + * int elemento; + * do { + * elemento = ((int)Math.abs(gerador.nextInt())) % 100000; + * } while (arvore.pesquisar(elemento) == true); + * arvore.inserir(elemento); + * arvore.mostrarPre(); + * } + */ + } +} diff --git a/fonte/u06 Balanceamento de árvores/java/avl/AVL.java b/Codigos/u06 Balanceamento de árvores/java/avl/AVL.java similarity index 96% rename from fonte/u06 Balanceamento de árvores/java/avl/AVL.java rename to Codigos/u06 Balanceamento de árvores/java/avl/AVL.java index f8236e0..9558c34 100644 --- a/fonte/u06 Balanceamento de árvores/java/avl/AVL.java +++ b/Codigos/u06 Balanceamento de árvores/java/avl/AVL.java @@ -1,249 +1,249 @@ -/** - * Arvore binaria de pesquisa - * @author Max do Val Machado - */ - -public class AVL { - private No raiz; // Raiz da arvore. - - /** - * Construtor da classe. - */ - public AVL() { - raiz = null; - } - - /** - * Metodo publico iterativo para pesquisar elemento. - * @param x Elemento que sera procurado. - * @return true se o elemento existir, false em caso - * contrario. - */ - public boolean pesquisar(int x) { - return pesquisar(x, raiz); - } - - /** - * Metodo privado recursivo para pesquisar elemento. - * @param x Elemento que sera procurado. - * @param i No em analise. - * @return true se o elemento existir, false em caso - * contrario. - */ - private boolean pesquisar(int x, No i) { - boolean resp; - if (i == null) { - resp = false; - } else if (x == i.elemento) { - resp = true; - } else if (x < i.elemento) { - resp = pesquisar(x, i.esq); - } else { - resp = pesquisar(x, i.dir); - } - return resp; - } - - /** - * Metodo publico iterativo para exibir elementos. - */ - public void caminharCentral() { - System.out.print("[ "); - caminharCentral(raiz); - System.out.println("]"); - } - - /** - * Metodo privado recursivo para exibir elementos. - * @param i No em analise. - */ - private void caminharCentral(No i) { - if (i != null) { - caminharCentral(i.esq); // Elementos da esquerda. - System.out.print(i.elemento + " "); // Conteudo do no. - caminharCentral(i.dir); // Elementos da direita. - } - } - - /** - * Metodo publico iterativo para exibir elementos. - */ - public void caminharPre() { - System.out.print("[ "); - caminharPre(raiz); - System.out.println("]"); - } - - /** - * Metodo privado recursivo para exibir elementos. - * @param i No em analise. - */ - private void caminharPre(No i) { - if (i != null) { - System.out.print(i.elemento + "(fator " + (No.getNivel(i.dir) - No.getNivel(i.esq)) + ") "); // Conteudo do no. - caminharPre(i.esq); // Elementos da esquerda. - caminharPre(i.dir); // Elementos da direita. - } - } - - /** - * Metodo publico iterativo para exibir elementos. - */ - public void caminharPos() { - System.out.print("[ "); - caminharPos(raiz); - System.out.println("]"); - } - - /** - * Metodo privado recursivo para exibir elementos. - * @param i No em analise. - */ - private void caminharPos(No i) { - if (i != null) { - caminharPos(i.esq); // Elementos da esquerda. - caminharPos(i.dir); // Elementos da direita. - System.out.print(i.elemento + " "); // Conteudo do no. - } - } - - /** - * Metodo publico iterativo para inserir elemento. - * @param x Elemento a ser inserido. - * @throws Exception Se o elemento existir. - */ - public void inserir(int x) throws Exception { - raiz = inserir(x, raiz); - } - - /** - * Metodo privado recursivo para inserir elemento. - * @param x Elemento a ser inserido. - * @param i No em analise. - * @return No em analise, alterado ou nao. - * @throws Exception Se o elemento existir. - */ - private No inserir(int x, No i) throws Exception { - if (i == null) { - i = new No(x); - } else if (x < i.elemento) { - i.esq = inserir(x, i.esq); - } else if (x > i.elemento) { - i.dir = inserir(x, i.dir); - } else { - throw new Exception("Erro ao inserir!"); - } - return balancear(i); - } - - /** - * Metodo publico iterativo para remover elemento. - * @param x Elemento a ser removido. - * @throws Exception Se nao encontrar elemento. - */ - public void remover(int x) throws Exception { - raiz = remover(x, raiz); - } - - /** - * Metodo privado recursivo para remover elemento. - * @param x Elemento a ser removido. - * @param i No em analise. - * @return No em analise, alterado ou nao. - * @throws Exception Se nao encontrar elemento. - */ - private No remover(int x, No i) throws Exception { - if (i == null) { - throw new Exception("Erro ao remover!"); - } else if (x < i.elemento) { - i.esq = remover(x, i.esq); - } else if (x > i.elemento) { - i.dir = remover(x, i.dir); - // Sem no a direita. - } else if (i.dir == null) { - i = i.esq; - // Sem no a esquerda. - } else if (i.esq == null) { - i = i.dir; - // No a esquerda e no a direita. - } else { - i.esq = maiorEsq(i, i.esq); - } - return balancear(i); - } - - /** - * Metodo para trocar o elemento "removido" pelo maior da esquerda. - * @param i No que teve o elemento removido. - * @param j No da subarvore esquerda. - * @return No em analise, alterado ou nao. - */ - private No maiorEsq(No i, No j) { - // Encontrou o maximo da subarvore esquerda. - if (j.dir == null) { - i.elemento = j.elemento; // Substitui i por j. - j = j.esq; // Substitui j por j.ESQ. - // Existe no a direita. - } else { - // Caminha para direita. - j.dir = maiorEsq(i, j.dir); - } - return j; - } - - private No balancear(No no) throws Exception { - if (no != null) { - int fator = No.getNivel(no.dir) - No.getNivel(no.esq); - // Se balanceada - if (Math.abs(fator) <= 1) { - no.setNivel(); - // Se desbalanceada para a direita - } else if (fator == 2) { - int fatorFilhoDir = No.getNivel(no.dir.dir) - No.getNivel(no.dir.esq); - // Se o filho a direita tambem estiver desbalanceado - if (fatorFilhoDir == -1) { - no.dir = rotacionarDir(no.dir); - } - no = rotacionarEsq(no); - // Se desbalanceada para a esquerda - } else if (fator == -2) { - int fatorFilhoEsq = No.getNivel(no.esq.dir) - No.getNivel(no.esq.esq); - // Se o filho a esquerda tambem estiver desbalanceado - if (fatorFilhoEsq == 1) { - no.esq = rotacionarEsq(no.esq); - } - no = rotacionarDir(no); - } else { - throw new Exception( - "Erro no No(" + no.elemento + ") com fator de balanceamento (" + fator + ") invalido!"); - } - } - return no; - } - - private No rotacionarDir(No no) { - System.out.println("Rotacionar DIR(" + no.elemento + ")"); - No noEsq = no.esq; - No noEsqDir = noEsq.dir; - - noEsq.dir = no; - no.esq = noEsqDir; - no.setNivel(); // Atualizar o nivel do no - noEsq.setNivel(); // Atualizar o nivel do noEsq - - return noEsq; - } - - private No rotacionarEsq(No no) { - System.out.println("Rotacionar ESQ(" + no.elemento + ")"); - No noDir = no.dir; - No noDirEsq = noDir.esq; - - noDir.esq = no; - no.dir = noDirEsq; - - no.setNivel(); // Atualizar o nivel do no - noDir.setNivel(); // Atualizar o nivel do noDir - return noDir; - } -} +/** + * Arvore binaria de pesquisa + * @author Max do Val Machado + */ + +public class AVL { + private No raiz; // Raiz da arvore. + + /** + * Construtor da classe. + */ + public AVL() { + raiz = null; + } + + /** + * Metodo publico iterativo para pesquisar elemento. + * @param x Elemento que sera procurado. + * @return true se o elemento existir, false em caso + * contrario. + */ + public boolean pesquisar(int x) { + return pesquisar(x, raiz); + } + + /** + * Metodo privado recursivo para pesquisar elemento. + * @param x Elemento que sera procurado. + * @param i No em analise. + * @return true se o elemento existir, false em caso + * contrario. + */ + private boolean pesquisar(int x, No i) { + boolean resp; + if (i == null) { + resp = false; + } else if (x == i.elemento) { + resp = true; + } else if (x < i.elemento) { + resp = pesquisar(x, i.esq); + } else { + resp = pesquisar(x, i.dir); + } + return resp; + } + + /** + * Metodo publico iterativo para exibir elementos. + */ + public void caminharCentral() { + System.out.print("[ "); + caminharCentral(raiz); + System.out.println("]"); + } + + /** + * Metodo privado recursivo para exibir elementos. + * @param i No em analise. + */ + private void caminharCentral(No i) { + if (i != null) { + caminharCentral(i.esq); // Elementos da esquerda. + System.out.print(i.elemento + " "); // Conteudo do no. + caminharCentral(i.dir); // Elementos da direita. + } + } + + /** + * Metodo publico iterativo para exibir elementos. + */ + public void caminharPre() { + System.out.print("[ "); + caminharPre(raiz); + System.out.println("]"); + } + + /** + * Metodo privado recursivo para exibir elementos. + * @param i No em analise. + */ + private void caminharPre(No i) { + if (i != null) { + System.out.print(i.elemento + "(fator " + (No.getNivel(i.dir) - No.getNivel(i.esq)) + ") "); // Conteudo do no. + caminharPre(i.esq); // Elementos da esquerda. + caminharPre(i.dir); // Elementos da direita. + } + } + + /** + * Metodo publico iterativo para exibir elementos. + */ + public void caminharPos() { + System.out.print("[ "); + caminharPos(raiz); + System.out.println("]"); + } + + /** + * Metodo privado recursivo para exibir elementos. + * @param i No em analise. + */ + private void caminharPos(No i) { + if (i != null) { + caminharPos(i.esq); // Elementos da esquerda. + caminharPos(i.dir); // Elementos da direita. + System.out.print(i.elemento + " "); // Conteudo do no. + } + } + + /** + * Metodo publico iterativo para inserir elemento. + * @param x Elemento a ser inserido. + * @throws Exception Se o elemento existir. + */ + public void inserir(int x) throws Exception { + raiz = inserir(x, raiz); + } + + /** + * Metodo privado recursivo para inserir elemento. + * @param x Elemento a ser inserido. + * @param i No em analise. + * @return No em analise, alterado ou nao. + * @throws Exception Se o elemento existir. + */ + private No inserir(int x, No i) throws Exception { + if (i == null) { + i = new No(x); + } else if (x < i.elemento) { + i.esq = inserir(x, i.esq); + } else if (x > i.elemento) { + i.dir = inserir(x, i.dir); + } else { + throw new Exception("Erro ao inserir!"); + } + return balancear(i); + } + + /** + * Metodo publico iterativo para remover elemento. + * @param x Elemento a ser removido. + * @throws Exception Se nao encontrar elemento. + */ + public void remover(int x) throws Exception { + raiz = remover(x, raiz); + } + + /** + * Metodo privado recursivo para remover elemento. + * @param x Elemento a ser removido. + * @param i No em analise. + * @return No em analise, alterado ou nao. + * @throws Exception Se nao encontrar elemento. + */ + private No remover(int x, No i) throws Exception { + if (i == null) { + throw new Exception("Erro ao remover!"); + } else if (x < i.elemento) { + i.esq = remover(x, i.esq); + } else if (x > i.elemento) { + i.dir = remover(x, i.dir); + // Sem no a direita. + } else if (i.dir == null) { + i = i.esq; + // Sem no a esquerda. + } else if (i.esq == null) { + i = i.dir; + // No a esquerda e no a direita. + } else { + i.esq = maiorEsq(i, i.esq); + } + return balancear(i); + } + + /** + * Metodo para trocar o elemento "removido" pelo maior da esquerda. + * @param i No que teve o elemento removido. + * @param j No da subarvore esquerda. + * @return No em analise, alterado ou nao. + */ + private No maiorEsq(No i, No j) { + // Encontrou o maximo da subarvore esquerda. + if (j.dir == null) { + i.elemento = j.elemento; // Substitui i por j. + j = j.esq; // Substitui j por j.ESQ. + // Existe no a direita. + } else { + // Caminha para direita. + j.dir = maiorEsq(i, j.dir); + } + return j; + } + + private No balancear(No no) throws Exception { + if (no != null) { + int fator = No.getNivel(no.dir) - No.getNivel(no.esq); + // Se balanceada + if (Math.abs(fator) <= 1) { + no.setNivel(); + // Se desbalanceada para a direita + } else if (fator == 2) { + int fatorFilhoDir = No.getNivel(no.dir.dir) - No.getNivel(no.dir.esq); + // Se o filho a direita tambem estiver desbalanceado + if (fatorFilhoDir == -1) { + no.dir = rotacionarDir(no.dir); + } + no = rotacionarEsq(no); + // Se desbalanceada para a esquerda + } else if (fator == -2) { + int fatorFilhoEsq = No.getNivel(no.esq.dir) - No.getNivel(no.esq.esq); + // Se o filho a esquerda tambem estiver desbalanceado + if (fatorFilhoEsq == 1) { + no.esq = rotacionarEsq(no.esq); + } + no = rotacionarDir(no); + } else { + throw new Exception( + "Erro no No(" + no.elemento + ") com fator de balanceamento (" + fator + ") invalido!"); + } + } + return no; + } + + private No rotacionarDir(No no) { + System.out.println("Rotacionar DIR(" + no.elemento + ")"); + No noEsq = no.esq; + No noEsqDir = noEsq.dir; + + noEsq.dir = no; + no.esq = noEsqDir; + no.setNivel(); // Atualizar o nivel do no + noEsq.setNivel(); // Atualizar o nivel do noEsq + + return noEsq; + } + + private No rotacionarEsq(No no) { + System.out.println("Rotacionar ESQ(" + no.elemento + ")"); + No noDir = no.dir; + No noDirEsq = noDir.esq; + + noDir.esq = no; + no.dir = noDirEsq; + + no.setNivel(); // Atualizar o nivel do no + noDir.setNivel(); // Atualizar o nivel do noDir + return noDir; + } +} diff --git a/fonte/u06 Balanceamento de árvores/java/avl/No.java b/Codigos/u06 Balanceamento de árvores/java/avl/No.java similarity index 95% rename from fonte/u06 Balanceamento de árvores/java/avl/No.java rename to Codigos/u06 Balanceamento de árvores/java/avl/No.java index 5830c79..6f05fd8 100644 --- a/fonte/u06 Balanceamento de árvores/java/avl/No.java +++ b/Codigos/u06 Balanceamento de árvores/java/avl/No.java @@ -1,45 +1,45 @@ -/** - * No da arvore binaria - * @author Max do Val Machado - */ -class No { - public int elemento; // Conteudo do no. - public No esq, dir; // Filhos da esq e dir. - public int nivel; // Numero de niveis abaixo do no - - /** - * Construtor da classe - * @param elemento Conteudo do no. - */ - public No(int elemento) { - this(elemento, null, null, 1); - } - - /** - * Construtor da classe. - * @param elemento Conteudo do no. - * @param esq No da esquerda. - * @param dir No da direita. - */ - public No(int elemento, No esq, No dir, int nivel) { - this.elemento = elemento; - this.esq = esq; - this.dir = dir; - this.nivel = nivel; - } - - /** - * Cálculo do número de níveis a partir de um vértice - */ - public void setNivel() { - this.nivel = 1 + Math.max(getNivel(esq), getNivel(dir)); - } - - /** - * Retorna o número de níveis a partir de um vértice - * @param no nó que se deseja o nível. - */ - public static int getNivel(No no) { - return (no == null) ? 0 : no.nivel; - } -} +/** + * No da arvore binaria + * @author Max do Val Machado + */ +class No { + public int elemento; // Conteudo do no. + public No esq, dir; // Filhos da esq e dir. + public int nivel; // Numero de niveis abaixo do no + + /** + * Construtor da classe + * @param elemento Conteudo do no. + */ + public No(int elemento) { + this(elemento, null, null, 1); + } + + /** + * Construtor da classe. + * @param elemento Conteudo do no. + * @param esq No da esquerda. + * @param dir No da direita. + */ + public No(int elemento, No esq, No dir, int nivel) { + this.elemento = elemento; + this.esq = esq; + this.dir = dir; + this.nivel = nivel; + } + + /** + * Cálculo do número de níveis a partir de um vértice + */ + public void setNivel() { + this.nivel = 1 + Math.max(getNivel(esq), getNivel(dir)); + } + + /** + * Retorna o número de níveis a partir de um vértice + * @param no nó que se deseja o nível. + */ + public static int getNivel(No no) { + return (no == null) ? 0 : no.nivel; + } +} diff --git a/fonte/u06 Balanceamento de árvores/java/avl/Principal.java b/Codigos/u06 Balanceamento de árvores/java/avl/Principal.java similarity index 95% rename from fonte/u06 Balanceamento de árvores/java/avl/Principal.java rename to Codigos/u06 Balanceamento de árvores/java/avl/Principal.java index 12b7117..e385cba 100644 --- a/fonte/u06 Balanceamento de árvores/java/avl/Principal.java +++ b/Codigos/u06 Balanceamento de árvores/java/avl/Principal.java @@ -1,20 +1,20 @@ -/** - * Principal para Arvore Binaria de Pesquisa - * @author Max do Val Machado - */ -public class Principal { - public static void main(String[] args) { - try { - AVL avl = new AVL(); - //int array[] = {4,35,10,13,3,30,15,12,7,40,20}; - int array[] = {1,2,3,4,5,6,7,8,9,10}; - for(int item: array){ - System.out.println("Inserindo -> " + item); - avl.inserir(item); - avl.caminharPre(); - } - } catch (Exception erro) { - System.out.println(erro.getMessage()); - } - } -} +/** + * Principal para Arvore Binaria de Pesquisa + * @author Max do Val Machado + */ +public class Principal { + public static void main(String[] args) { + try { + AVL avl = new AVL(); + //int array[] = {4,35,10,13,3,30,15,12,7,40,20}; + int array[] = {1,2,3,4,5,6,7,8,9,10}; + for(int item: array){ + System.out.println("Inserindo -> " + item); + avl.inserir(item); + avl.caminharPre(); + } + } catch (Exception erro) { + System.out.println(erro.getMessage()); + } + } +} diff --git a/fonte/u07 Tabelas e dicionários/README.md b/Codigos/u07 Tabelas e dicionários/README.md similarity index 98% rename from fonte/u07 Tabelas e dicionários/README.md rename to Codigos/u07 Tabelas e dicionários/README.md index f0804de..828ff5e 100644 --- a/fonte/u07 Tabelas e dicionários/README.md +++ b/Codigos/u07 Tabelas e dicionários/README.md @@ -1,2 +1,2 @@ -# U8 - Tabelas e dicionários -Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II +# U8 - Tabelas e dicionários +Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II diff --git a/fonte/u07 Tabelas e dicionários/java/doidona/DoidonaComTADsProntas.java b/Codigos/u07 Tabelas e dicionários/java/doidona/DoidonaComTADsProntas.java similarity index 95% rename from fonte/u07 Tabelas e dicionários/java/doidona/DoidonaComTADsProntas.java rename to Codigos/u07 Tabelas e dicionários/java/doidona/DoidonaComTADsProntas.java index fe4571a..2323645 100644 --- a/fonte/u07 Tabelas e dicionários/java/doidona/DoidonaComTADsProntas.java +++ b/Codigos/u07 Tabelas e dicionários/java/doidona/DoidonaComTADsProntas.java @@ -1,117 +1,117 @@ -class DoidonaComTADsProntas { - final int TAMT1 = 100; - final int TAMT3 = 100; - final int NULO = -0x7FFFFF; - - int[] t1; - int[] t3; - - ArvoreBinaria arvoreBinaria; - ListaSimples lista; - AVL arvoreAVL; - - public Doidona(){ - t1 = new int [TAMT1]; - t3 = new int [TAMT3]; - - for(int i = 0; i < TAMT1; i++){ - t1[i] = NULO; - } - for(int i = 0; i < TAMT3; i++){ - t3[i] = NULO; - } - - arvoreBinaria = new ArvoreBinaria(); - arvoreAVL = new AVL(); - lista = new ListaSimples(); - } - - public int hashT1(int elemento){ - } - - public int hashT2(int elemento){ - return elemento % 3; - } - - public int hashT3(int elemento){ - } - - public int rehashT3(int elemento){ - } - - public void inserir(int elemento){ - int i = hashT1(elemento); - if(elemento == NULO) { - //gerar msg de erro para o usuario... - } else if(t1[i] == NULO){ - t1[i] = elemento; - }else if(hashT2(elemento) == 0){ - i = hashT3(elemento); - if(t3[i] == NULO){ - t3[i] = elemento; - } else { - i = rehashT3(elemento); - if(t3[i] == NULO){ - t3[i] = elemento; - } else { - arvoreBinaria.inserir(elemento); - } - } - }else if (hashT2(elemento) == 1){ - lista.inserirFim(elemento); - }else if (hashT2(elemento) == 2){ - arvoreAVL.inserir(elemento); - } else { - System.out.println("ERRO!!!!"); - } - } - void remover (int elemento){ - } - - boolean pesquisar (int elemento){ - boolean resp = false; - int pos = hashT1(elemento); - if(elemento == NULO){ - resp = false; - } else if(t1[pos] == elemento){ - resp = true; - }else { - pos = hashT2(elemento); - if (pos == 0){ - pos = hashT3(elemento); - if(t3[pos] == elemento){ - resp = true; - }else{ - pos = rehashT3(elemento); - if(t3[pos] == elemento){ - resp = true; - }else{ - resp = arvoreBinaria.pesquisar(elemento); - } - } - }else if (pos == 1){ - resp = lista.pesquisar(elemento); - } else { - resp = arvoreAVL.pesquisar(elemento); - } - } - return resp; - } - - void mostrar(){ - //t1, t3, arvoreBinaria, lista, arvoreAVL - for(int i = 0; i < TAMT1; i++){ - if(t1[i] != NULO){ - System.out.println(t1[i]); - } - } - for(int i = 0; i < TAMT3; i++){ - if(t3[i] != NULO){ - System.out.println(t3[i]); - } - } - arvoreBinaria.mostrar(); - lista.mostrar(); - arvoreAVL.mostrar(); - } -} +class DoidonaComTADsProntas { + final int TAMT1 = 100; + final int TAMT3 = 100; + final int NULO = -0x7FFFFF; + + int[] t1; + int[] t3; + + ArvoreBinaria arvoreBinaria; + ListaSimples lista; + AVL arvoreAVL; + + public Doidona(){ + t1 = new int [TAMT1]; + t3 = new int [TAMT3]; + + for(int i = 0; i < TAMT1; i++){ + t1[i] = NULO; + } + for(int i = 0; i < TAMT3; i++){ + t3[i] = NULO; + } + + arvoreBinaria = new ArvoreBinaria(); + arvoreAVL = new AVL(); + lista = new ListaSimples(); + } + + public int hashT1(int elemento){ + } + + public int hashT2(int elemento){ + return elemento % 3; + } + + public int hashT3(int elemento){ + } + + public int rehashT3(int elemento){ + } + + public void inserir(int elemento){ + int i = hashT1(elemento); + if(elemento == NULO) { + //gerar msg de erro para o usuario... + } else if(t1[i] == NULO){ + t1[i] = elemento; + }else if(hashT2(elemento) == 0){ + i = hashT3(elemento); + if(t3[i] == NULO){ + t3[i] = elemento; + } else { + i = rehashT3(elemento); + if(t3[i] == NULO){ + t3[i] = elemento; + } else { + arvoreBinaria.inserir(elemento); + } + } + }else if (hashT2(elemento) == 1){ + lista.inserirFim(elemento); + }else if (hashT2(elemento) == 2){ + arvoreAVL.inserir(elemento); + } else { + System.out.println("ERRO!!!!"); + } + } + void remover (int elemento){ + } + + boolean pesquisar (int elemento){ + boolean resp = false; + int pos = hashT1(elemento); + if(elemento == NULO){ + resp = false; + } else if(t1[pos] == elemento){ + resp = true; + }else { + pos = hashT2(elemento); + if (pos == 0){ + pos = hashT3(elemento); + if(t3[pos] == elemento){ + resp = true; + }else{ + pos = rehashT3(elemento); + if(t3[pos] == elemento){ + resp = true; + }else{ + resp = arvoreBinaria.pesquisar(elemento); + } + } + }else if (pos == 1){ + resp = lista.pesquisar(elemento); + } else { + resp = arvoreAVL.pesquisar(elemento); + } + } + return resp; + } + + void mostrar(){ + //t1, t3, arvoreBinaria, lista, arvoreAVL + for(int i = 0; i < TAMT1; i++){ + if(t1[i] != NULO){ + System.out.println(t1[i]); + } + } + for(int i = 0; i < TAMT3; i++){ + if(t3[i] != NULO){ + System.out.println(t3[i]); + } + } + arvoreBinaria.mostrar(); + lista.mostrar(); + arvoreAVL.mostrar(); + } +} diff --git a/fonte/u07 Tabelas e dicionários/java/doidona/DoidonaSemTADsProntas.java b/Codigos/u07 Tabelas e dicionários/java/doidona/DoidonaSemTADsProntas.java similarity index 95% rename from fonte/u07 Tabelas e dicionários/java/doidona/DoidonaSemTADsProntas.java rename to Codigos/u07 Tabelas e dicionários/java/doidona/DoidonaSemTADsProntas.java index 3d91bdb..ad2dfb5 100644 --- a/fonte/u07 Tabelas e dicionários/java/doidona/DoidonaSemTADsProntas.java +++ b/Codigos/u07 Tabelas e dicionários/java/doidona/DoidonaSemTADsProntas.java @@ -1,159 +1,159 @@ -class DoidonaSemTADsProntas { - final int TAMT1 = 100; - final int TAMT3 = 100; - final int NULO = -0x7FFFFF; - - int[] t1; - int[] t3; - - Celula primeiroListaT2, ultimoListaT2; - No raizArvoreT2, raizArvoreT3; - - public Doidona (){ - t1 = new int[TAMT1]; - t3 = new int[TAMT3]; - - for(int i = 0; i < TAMT1; i++){ - t1[i] = NULO; - } - for(int i = 0; i < TAMT3; i++){ - t3[i] = NULO; - } - - primeiroListaT2 = ultimoListaT2 = new Celula(); - - raizArvoreT2 = raizArvoreT3 = null; - } - - public int hashT1(int elemento){ - } - - public int hashT2(int elemento){ - } - - public int hashT3(int elemento){ - } - - public int rehashT3(int elemento){ - } - - public void inserir(int elemento){ - int i = hashT1(elemento); - - if(elemento == NULO){ - // gerar msg de erro!!!! - } else if(t1[i] == NULO){ - t1[i] = elemento; - }else if(hashT2(elemento) == 0){ - inserirT3(elemento); - }else if (hashT2(elemento) == 1){ - inserirLista(elemento); - }else if (hashT2(elemento) == 2){ - raizArvoreT2 = inserirArvore(raizArvoreT2, elemento); - } else { - System.out.println("ERRO!!!!"); - } - } - - public void inserirT3(int elemento){ - int i = hashT3(elemento); - - if(t3[i] == NULO){ - t3[i] = elemento; - } else { - i = rehashT3(elemento); - - if(t3[i] == NULO){ - t3[i] = elemento; - } else { - raizArvoreT3 = inserirArvore(raizArvoreT3, elemento); - } - } - } - - public void inserirLista(int elemento){ - ultimoListaT2.prox = new Celula(elemento); - ultimoListaT2 = ultimoListaT2.prox; - } - - public No inserirArvore(No no, int elemento){ - if(no == null){ - no = new No (elemento); - } else if (no.elemento < elemento){ - no.esq = inserirArvore(no.esq, elemento); - } else if (no.elemento > elemento){ - no.dir = inserirArvore(no.dir, elemento); - } else { - System.out.println("Erro de Insercao"); - } - return no; - } - - public boolean pesquisar(int elemento){ - boolean resp; - int i = hashT1(elemento); - if(t1[i] == NULO){ - resp = false; - }else if(t1[i] == elemento){ - resp = true; - }else if(hashT2(elemento) == 0){ - resp = pesquisarT3(elemento); - }else if (hashT2(elemento) == 1){ - resp = pesquisarLista(elemento); - }else if (hashT2(elemento) == 2){ - resp = pesquisarArvore(raizArvoreT2, elemento); - } else { - resp = false; - System.out.println("ERRO!!!!"); - } - return resp; - } - - public boolean pesquisarT3(int elemento){ - int i = hashT3(elemento); - - if(t3[i] == NULO){ - resp = false; - }else if(t3[i] == elemento){ - resp = true; - } else { - i = rehashT3(elemento); - - if(t3[i] == NULO){ - resp = false; - } else if(t3[i] == elemento){ - resp = true; - } else { - resp = pesquisarArvore(raizArvoreT3, elemento); - } - } - - return resp; - } - - public boolean pesquisarLista(int elemento){ - boolean resp = false; - for(Celula i = primeiroListaT2.prox; i != null; i = i.prox){ - if(i.elemento == elemento){ - resp = true; - i = ultimoListaT2; - } - } - return resp; - } - - public boolean pesquisarArvore(No no, int elemento){ - boolean resp; - - if(no == null){ - resp = false; - } else if (no.elemento < elemento){ - resp = pesquisarArvore(no.esq, elemento); - } else if (no.elemento > elemento){ - resp = pesquisarArvore(no.dir, elemento); - } else { - resp = true; - } - return resp; - } -} +class DoidonaSemTADsProntas { + final int TAMT1 = 100; + final int TAMT3 = 100; + final int NULO = -0x7FFFFF; + + int[] t1; + int[] t3; + + Celula primeiroListaT2, ultimoListaT2; + No raizArvoreT2, raizArvoreT3; + + public Doidona (){ + t1 = new int[TAMT1]; + t3 = new int[TAMT3]; + + for(int i = 0; i < TAMT1; i++){ + t1[i] = NULO; + } + for(int i = 0; i < TAMT3; i++){ + t3[i] = NULO; + } + + primeiroListaT2 = ultimoListaT2 = new Celula(); + + raizArvoreT2 = raizArvoreT3 = null; + } + + public int hashT1(int elemento){ + } + + public int hashT2(int elemento){ + } + + public int hashT3(int elemento){ + } + + public int rehashT3(int elemento){ + } + + public void inserir(int elemento){ + int i = hashT1(elemento); + + if(elemento == NULO){ + // gerar msg de erro!!!! + } else if(t1[i] == NULO){ + t1[i] = elemento; + }else if(hashT2(elemento) == 0){ + inserirT3(elemento); + }else if (hashT2(elemento) == 1){ + inserirLista(elemento); + }else if (hashT2(elemento) == 2){ + raizArvoreT2 = inserirArvore(raizArvoreT2, elemento); + } else { + System.out.println("ERRO!!!!"); + } + } + + public void inserirT3(int elemento){ + int i = hashT3(elemento); + + if(t3[i] == NULO){ + t3[i] = elemento; + } else { + i = rehashT3(elemento); + + if(t3[i] == NULO){ + t3[i] = elemento; + } else { + raizArvoreT3 = inserirArvore(raizArvoreT3, elemento); + } + } + } + + public void inserirLista(int elemento){ + ultimoListaT2.prox = new Celula(elemento); + ultimoListaT2 = ultimoListaT2.prox; + } + + public No inserirArvore(No no, int elemento){ + if(no == null){ + no = new No (elemento); + } else if (no.elemento < elemento){ + no.esq = inserirArvore(no.esq, elemento); + } else if (no.elemento > elemento){ + no.dir = inserirArvore(no.dir, elemento); + } else { + System.out.println("Erro de Insercao"); + } + return no; + } + + public boolean pesquisar(int elemento){ + boolean resp; + int i = hashT1(elemento); + if(t1[i] == NULO){ + resp = false; + }else if(t1[i] == elemento){ + resp = true; + }else if(hashT2(elemento) == 0){ + resp = pesquisarT3(elemento); + }else if (hashT2(elemento) == 1){ + resp = pesquisarLista(elemento); + }else if (hashT2(elemento) == 2){ + resp = pesquisarArvore(raizArvoreT2, elemento); + } else { + resp = false; + System.out.println("ERRO!!!!"); + } + return resp; + } + + public boolean pesquisarT3(int elemento){ + int i = hashT3(elemento); + + if(t3[i] == NULO){ + resp = false; + }else if(t3[i] == elemento){ + resp = true; + } else { + i = rehashT3(elemento); + + if(t3[i] == NULO){ + resp = false; + } else if(t3[i] == elemento){ + resp = true; + } else { + resp = pesquisarArvore(raizArvoreT3, elemento); + } + } + + return resp; + } + + public boolean pesquisarLista(int elemento){ + boolean resp = false; + for(Celula i = primeiroListaT2.prox; i != null; i = i.prox){ + if(i.elemento == elemento){ + resp = true; + i = ultimoListaT2; + } + } + return resp; + } + + public boolean pesquisarArvore(No no, int elemento){ + boolean resp; + + if(no == null){ + resp = false; + } else if (no.elemento < elemento){ + resp = pesquisarArvore(no.esq, elemento); + } else if (no.elemento > elemento){ + resp = pesquisarArvore(no.dir, elemento); + } else { + resp = true; + } + return resp; + } +} diff --git a/fonte/u07 Tabelas e dicionários/java/hashDiretoRehash/Hash.java b/Codigos/u07 Tabelas e dicionários/java/hashDiretoRehash/Hash.java similarity index 95% rename from fonte/u07 Tabelas e dicionários/java/hashDiretoRehash/Hash.java rename to Codigos/u07 Tabelas e dicionários/java/hashDiretoRehash/Hash.java index cd1cd28..4114f35 100644 --- a/fonte/u07 Tabelas e dicionários/java/hashDiretoRehash/Hash.java +++ b/Codigos/u07 Tabelas e dicionários/java/hashDiretoRehash/Hash.java @@ -1,64 +1,64 @@ - -public class Hash { - int tabela[]; - int m; - final int NULO = -1; - - public Hash() { - this(13); - } - - public Hash(int m) { - this.m = m; - this.tabela = new int[this.m]; - for (int i = 0; i < m; i++) { - tabela[i] = NULO; - } - } - - public int h(int elemento) { - return elemento % m; - } - - public int reh(int elemento) { - return ++elemento % m; - } - - public boolean inserir(int elemento) { - boolean resp = false; - if (elemento != NULO) { - int pos = h(elemento); - if (tabela[pos] == NULO) { - tabela[pos] = elemento; - resp = true; - } else { - pos = reh(elemento); - if (tabela[pos] == NULO) { - tabela[pos] = elemento; - resp = true; - } - } - } - return resp; - } - - public boolean pesquisar(int elemento) { - boolean resp = false; - int pos = h(elemento); - if (tabela[pos] == elemento) { - resp = true; - } else if (tabela[pos] != NULO) { - pos = reh(elemento); - if (tabela[pos] == elemento) { - resp = true; - } - } - return resp; - } - - boolean remover(int elemento) { - boolean resp = false; - // ... - return resp; - } -} + +public class Hash { + int tabela[]; + int m; + final int NULO = -1; + + public Hash() { + this(13); + } + + public Hash(int m) { + this.m = m; + this.tabela = new int[this.m]; + for (int i = 0; i < m; i++) { + tabela[i] = NULO; + } + } + + public int h(int elemento) { + return elemento % m; + } + + public int reh(int elemento) { + return ++elemento % m; + } + + public boolean inserir(int elemento) { + boolean resp = false; + if (elemento != NULO) { + int pos = h(elemento); + if (tabela[pos] == NULO) { + tabela[pos] = elemento; + resp = true; + } else { + pos = reh(elemento); + if (tabela[pos] == NULO) { + tabela[pos] = elemento; + resp = true; + } + } + } + return resp; + } + + public boolean pesquisar(int elemento) { + boolean resp = false; + int pos = h(elemento); + if (tabela[pos] == elemento) { + resp = true; + } else if (tabela[pos] != NULO) { + pos = reh(elemento); + if (tabela[pos] == elemento) { + resp = true; + } + } + return resp; + } + + boolean remover(int elemento) { + boolean resp = false; + // ... + return resp; + } +} diff --git a/fonte/u07 Tabelas e dicionários/java/hashDiretoReserva/Hash.java b/Codigos/u07 Tabelas e dicionários/java/hashDiretoReserva/Hash.java similarity index 95% rename from fonte/u07 Tabelas e dicionários/java/hashDiretoReserva/Hash.java rename to Codigos/u07 Tabelas e dicionários/java/hashDiretoReserva/Hash.java index b976952..c11d473 100644 --- a/fonte/u07 Tabelas e dicionários/java/hashDiretoReserva/Hash.java +++ b/Codigos/u07 Tabelas e dicionários/java/hashDiretoReserva/Hash.java @@ -1,63 +1,63 @@ - -public class Hash { - int tabela[]; - int m1, m2, m, reserva; - final int NULO = -1; - - public Hash() { - this(13, 7); - } - - public Hash(int m1, int m2) { - this.m1 = m1; - this.m2 = m2; - this.m = m1 + m2; - this.tabela = new int[this.m]; - for (int i = 0; i < m1; i++) { - tabela[i] = NULO; - } - reserva = 0; - } - - public int h(int elemento) { - return elemento % m1; - } - - public boolean inserir(int elemento) { - boolean resp = false; - if (elemento != NULO) { - int pos = h(elemento); - if (tabela[pos] == NULO) { - tabela[pos] = elemento; - resp = true; - } else if (reserva < m2) { - tabela[m1 + reserva] = elemento; - reserva++; - resp = true; - } - } - return resp; - } - - public boolean pesquisar(int elemento) { - boolean resp = false; - int pos = h(elemento); - if (tabela[pos] == elemento) { - resp = true; - } else if (tabela[pos] != NULO) { - for (int i = 0; i < reserva; i++) { - if (tabela[m1 + i] == elemento) { - resp = true; - i = reserva; - } - } - } - return resp; - } - - boolean remover(int elemento) { - boolean resp = false; - // ... - return resp; - } -} + +public class Hash { + int tabela[]; + int m1, m2, m, reserva; + final int NULO = -1; + + public Hash() { + this(13, 7); + } + + public Hash(int m1, int m2) { + this.m1 = m1; + this.m2 = m2; + this.m = m1 + m2; + this.tabela = new int[this.m]; + for (int i = 0; i < m1; i++) { + tabela[i] = NULO; + } + reserva = 0; + } + + public int h(int elemento) { + return elemento % m1; + } + + public boolean inserir(int elemento) { + boolean resp = false; + if (elemento != NULO) { + int pos = h(elemento); + if (tabela[pos] == NULO) { + tabela[pos] = elemento; + resp = true; + } else if (reserva < m2) { + tabela[m1 + reserva] = elemento; + reserva++; + resp = true; + } + } + return resp; + } + + public boolean pesquisar(int elemento) { + boolean resp = false; + int pos = h(elemento); + if (tabela[pos] == elemento) { + resp = true; + } else if (tabela[pos] != NULO) { + for (int i = 0; i < reserva; i++) { + if (tabela[m1 + i] == elemento) { + resp = true; + i = reserva; + } + } + } + return resp; + } + + boolean remover(int elemento) { + boolean resp = false; + // ... + return resp; + } +} diff --git a/fonte/u07 Tabelas e dicionários/java/hashIndiretoLista/Hash.java b/Codigos/u07 Tabelas e dicionários/java/hashIndiretoLista/Hash.java similarity index 95% rename from fonte/u07 Tabelas e dicionários/java/hashIndiretoLista/Hash.java rename to Codigos/u07 Tabelas e dicionários/java/hashIndiretoLista/Hash.java index 666b53e..a15b0d7 100644 --- a/fonte/u07 Tabelas e dicionários/java/hashIndiretoLista/Hash.java +++ b/Codigos/u07 Tabelas e dicionários/java/hashIndiretoLista/Hash.java @@ -1,43 +1,43 @@ - -public class HashIndiretoLista { - Lista tabela[]; - int tamanho; - final int NULO = -1; - - public HashIndiretoLista() { - this(7); - } - - public HashIndiretoLista(int tamanho) { - this.tamanho = tamanho; - tabela = new Lista[tamanho]; - for (int i = 0; i < tamanho; i++) { - tabela[i] = new Lista(); - } - } - - public int h(int elemento) { - return elemento % tamanho; - } - - boolean pesquisar(int elemento) { - int pos = h(elemento); - return tabela[pos].pesquisar(elemento); - } - - public void inserirInicio(int elemento) { - int pos = h(elemento); - tabela[pos].inserirInicio(elemento); - } - - public int remover(int elemento) { - int resp = NULO; - if (pesquisar(elemento) == false) { - throw new Exception("Erro ao remover!"); - } else { - int pos = h(elemento); - resp = tabela[pos].remover(elemento); - } - return resp; - } -} + +public class HashIndiretoLista { + Lista tabela[]; + int tamanho; + final int NULO = -1; + + public HashIndiretoLista() { + this(7); + } + + public HashIndiretoLista(int tamanho) { + this.tamanho = tamanho; + tabela = new Lista[tamanho]; + for (int i = 0; i < tamanho; i++) { + tabela[i] = new Lista(); + } + } + + public int h(int elemento) { + return elemento % tamanho; + } + + boolean pesquisar(int elemento) { + int pos = h(elemento); + return tabela[pos].pesquisar(elemento); + } + + public void inserirInicio(int elemento) { + int pos = h(elemento); + tabela[pos].inserirInicio(elemento); + } + + public int remover(int elemento) { + int resp = NULO; + if (pesquisar(elemento) == false) { + throw new Exception("Erro ao remover!"); + } else { + int pos = h(elemento); + resp = tabela[pos].remover(elemento); + } + return resp; + } +} diff --git a/fonte/u07 Tabelas e dicionários/java/hashIndiretoLista/Lista.java b/Codigos/u07 Tabelas e dicionários/java/hashIndiretoLista/Lista.java similarity index 96% rename from fonte/u07 Tabelas e dicionários/java/hashIndiretoLista/Lista.java rename to Codigos/u07 Tabelas e dicionários/java/hashIndiretoLista/Lista.java index 6311670..847bb87 100644 --- a/fonte/u07 Tabelas e dicionários/java/hashIndiretoLista/Lista.java +++ b/Codigos/u07 Tabelas e dicionários/java/hashIndiretoLista/Lista.java @@ -1,206 +1,206 @@ -/** - * Celula simplesmente encadeada - * @author Joao Paulo Domingos Silva - * @version 1.1 02/2012 - */ -class Celula { - public int elemento; // Elemento inserido na celula. - public Celula prox; // Aponta a celula prox. - - /** - * Construtor da classe. - * @param elemento Elemento inserido na celula. - */ - Celula(int elemento) { - this.elemento = elemento; - this.prox = null; - } - - /** - * Construtor da classe. - * @param elemento Elemento inserido na celula. - * @param prox Aponta a celula prox. - */ - Celula(int elemento, Celula prox) { - this.elemento = elemento; - this.prox = prox; - } -} - -/** - * Lista dinamica simplesmente encadeada - * @author Joao Paulo Domingos Silva - * @version 1.1 02/2012 - */ -public class Lista { - private Celula primeiro; // Primeira celula: SEM elemento valido. - private Celula ultimo; // Ultima celula: COM elemento valido. - - /** - * Construtor da classe: Instancia uma celula (primeira e ultima). - */ - public Lista() { - primeiro = new Celula(-1); - ultimo = primeiro; - } - - /** - * Mostra os elementos separados por espacos. - */ - public void mostrar() { - System.out.print("[ "); // Comeca a mostrar. - for (Celula i = primeiro.prox; i != null; i = i.prox) { - System.out.print(i.elemento + " "); - } - System.out.println("] "); // Termina de mostrar. - } - - /** - * Procura um elemento e retorna se ele existe. - * @param x Elemento a pesquisar. - * @return true se o elemento existir, - * false em caso contrario. - */ - public boolean pesquisar(int x) { - boolean retorno = false; - for (Celula i = primeiro.prox; i != null; i = i.prox) { - if(i.elemento == x){ - retorno = true; - i = ultimo; - } - } - return retorno; - } - - /** - * Insere um elemento na primeira posicao da sequencia. - * @param elemento Elemento a inserir. - */ - public void inserirInicio(int elemento) { - Celula tmp = new Celula(elemento); - tmp.prox = primeiro.prox; - primeiro.prox = tmp; - if (primeiro == ultimo) { - ultimo = tmp; - } - tmp = null; - } - - /** - * Insere um elemento na ultima posicao da sequencia. - * @param elemento Elemento a inserir. - */ - public void inserirFim(int elemento) { - Celula tmp = new Celula(elemento); - ultimo.prox = tmp; - ultimo = ultimo.prox; - tmp = null; - } - - /** - * Insere elemento em um indice especifico. - * Considera que primeiro elemento esta no indice 0. - * @param x Elemento a inserir. - * @param posicao Meio da insercao. - * @throws Exception Se posicao for incorreta. - */ - public void inserirMeio(int x, int posicao) throws Exception { - Celula i; - int cont; - - // Caminhar ate chegar na posicao anterior a insercao - for(i = primeiro, cont = 0; (i.prox != ultimo && cont < posicao); i = i.prox, cont++); - - // Se indice for incorreto: - if (posicao < 0 || posicao > cont + 1) { - throw new Exception("Erro ao inserir (posicao " + posicao + "(cont = " + cont + ") invalida)!"); - - } else if (posicao == cont + 1) { - inserirFim(x); - }else{ - Celula tmp = new Celula(x); - tmp.prox = i.prox; - i.prox = tmp; - tmp = i = null; - } - } - - /** - * Remove um elemento da primeira posicao da sequencia. - * @return Elemento removido. - * @throws Exception Se a sequencia nao contiver elementos. - */ - public int removerInicio() throws Exception { - int resp = -1; - - if (primeiro == ultimo) { - throw new Exception("Erro ao remover (vazia)!"); - }else{ - primeiro = primeiro.prox; - resp = primeiro.elemento; - } - - return resp; - } - - /** - * Remove um elemento da ultima posicao da sequencia. - * @return Elemento removido. - * @throws Exception Se a sequencia nao contiver elementos. - */ - public int removerFim() throws Exception { - int resp = -1; - Celula i = null; - - if (primeiro == ultimo) { - throw new Exception("Erro ao remover (vazia)!"); - } else { - - resp = ultimo.elemento; - - // Caminhar ate a penultima celula: - for(i = primeiro; i.prox != ultimo; i = i.prox); - - ultimo = i; - i = ultimo.prox = null; - } - - return resp; - } - - /** - * Remove elemento de um indice especifico. - * Considera que primeiro elemento esta no indice 0. - * @param posicao Meio da remocao. - * @return Elemento removido. - * @throws Exception Se posicao for incorreta. - */ - public int removerMeio(int posicao) throws Exception { - Celula i; - int resp = -1, cont; - - if (primeiro == ultimo){ - throw new Exception("Erro ao remover (vazia)!"); - }else{ - - // Caminhar ate chegar na posicao anterior a insercao - for(i = primeiro, cont = 0; (i.prox != ultimo && cont < posicao); i = i.prox, cont++); - - // Se indice for incorreto: - if (posicao < 0 || posicao > cont + 1) { - throw new Exception("Erro ao remover (posicao " + posicao + " invalida)!"); - - } else if (posicao == cont + 1) { - resp = removerFim(); - }else{ - Celula tmp = i.prox; - resp = tmp.elemento; - i.prox = tmp.prox; - tmp.prox = null; - i = tmp = null; - } - } - - return resp; - } -} +/** + * Celula simplesmente encadeada + * @author Joao Paulo Domingos Silva + * @version 1.1 02/2012 + */ +class Celula { + public int elemento; // Elemento inserido na celula. + public Celula prox; // Aponta a celula prox. + + /** + * Construtor da classe. + * @param elemento Elemento inserido na celula. + */ + Celula(int elemento) { + this.elemento = elemento; + this.prox = null; + } + + /** + * Construtor da classe. + * @param elemento Elemento inserido na celula. + * @param prox Aponta a celula prox. + */ + Celula(int elemento, Celula prox) { + this.elemento = elemento; + this.prox = prox; + } +} + +/** + * Lista dinamica simplesmente encadeada + * @author Joao Paulo Domingos Silva + * @version 1.1 02/2012 + */ +public class Lista { + private Celula primeiro; // Primeira celula: SEM elemento valido. + private Celula ultimo; // Ultima celula: COM elemento valido. + + /** + * Construtor da classe: Instancia uma celula (primeira e ultima). + */ + public Lista() { + primeiro = new Celula(-1); + ultimo = primeiro; + } + + /** + * Mostra os elementos separados por espacos. + */ + public void mostrar() { + System.out.print("[ "); // Comeca a mostrar. + for (Celula i = primeiro.prox; i != null; i = i.prox) { + System.out.print(i.elemento + " "); + } + System.out.println("] "); // Termina de mostrar. + } + + /** + * Procura um elemento e retorna se ele existe. + * @param x Elemento a pesquisar. + * @return true se o elemento existir, + * false em caso contrario. + */ + public boolean pesquisar(int x) { + boolean retorno = false; + for (Celula i = primeiro.prox; i != null; i = i.prox) { + if(i.elemento == x){ + retorno = true; + i = ultimo; + } + } + return retorno; + } + + /** + * Insere um elemento na primeira posicao da sequencia. + * @param elemento Elemento a inserir. + */ + public void inserirInicio(int elemento) { + Celula tmp = new Celula(elemento); + tmp.prox = primeiro.prox; + primeiro.prox = tmp; + if (primeiro == ultimo) { + ultimo = tmp; + } + tmp = null; + } + + /** + * Insere um elemento na ultima posicao da sequencia. + * @param elemento Elemento a inserir. + */ + public void inserirFim(int elemento) { + Celula tmp = new Celula(elemento); + ultimo.prox = tmp; + ultimo = ultimo.prox; + tmp = null; + } + + /** + * Insere elemento em um indice especifico. + * Considera que primeiro elemento esta no indice 0. + * @param x Elemento a inserir. + * @param posicao Meio da insercao. + * @throws Exception Se posicao for incorreta. + */ + public void inserirMeio(int x, int posicao) throws Exception { + Celula i; + int cont; + + // Caminhar ate chegar na posicao anterior a insercao + for(i = primeiro, cont = 0; (i.prox != ultimo && cont < posicao); i = i.prox, cont++); + + // Se indice for incorreto: + if (posicao < 0 || posicao > cont + 1) { + throw new Exception("Erro ao inserir (posicao " + posicao + "(cont = " + cont + ") invalida)!"); + + } else if (posicao == cont + 1) { + inserirFim(x); + }else{ + Celula tmp = new Celula(x); + tmp.prox = i.prox; + i.prox = tmp; + tmp = i = null; + } + } + + /** + * Remove um elemento da primeira posicao da sequencia. + * @return Elemento removido. + * @throws Exception Se a sequencia nao contiver elementos. + */ + public int removerInicio() throws Exception { + int resp = -1; + + if (primeiro == ultimo) { + throw new Exception("Erro ao remover (vazia)!"); + }else{ + primeiro = primeiro.prox; + resp = primeiro.elemento; + } + + return resp; + } + + /** + * Remove um elemento da ultima posicao da sequencia. + * @return Elemento removido. + * @throws Exception Se a sequencia nao contiver elementos. + */ + public int removerFim() throws Exception { + int resp = -1; + Celula i = null; + + if (primeiro == ultimo) { + throw new Exception("Erro ao remover (vazia)!"); + } else { + + resp = ultimo.elemento; + + // Caminhar ate a penultima celula: + for(i = primeiro; i.prox != ultimo; i = i.prox); + + ultimo = i; + i = ultimo.prox = null; + } + + return resp; + } + + /** + * Remove elemento de um indice especifico. + * Considera que primeiro elemento esta no indice 0. + * @param posicao Meio da remocao. + * @return Elemento removido. + * @throws Exception Se posicao for incorreta. + */ + public int removerMeio(int posicao) throws Exception { + Celula i; + int resp = -1, cont; + + if (primeiro == ultimo){ + throw new Exception("Erro ao remover (vazia)!"); + }else{ + + // Caminhar ate chegar na posicao anterior a insercao + for(i = primeiro, cont = 0; (i.prox != ultimo && cont < posicao); i = i.prox, cont++); + + // Se indice for incorreto: + if (posicao < 0 || posicao > cont + 1) { + throw new Exception("Erro ao remover (posicao " + posicao + " invalida)!"); + + } else if (posicao == cont + 1) { + resp = removerFim(); + }else{ + Celula tmp = i.prox; + resp = tmp.elemento; + i.prox = tmp.prox; + tmp.prox = null; + i = tmp = null; + } + } + + return resp; + } +} diff --git a/fonte/u08 Árvores TRIE/README.md b/Codigos/u08 Árvores TRIE/README.md similarity index 98% rename from fonte/u08 Árvores TRIE/README.md rename to Codigos/u08 Árvores TRIE/README.md index a193cbf..d229d7a 100644 --- a/fonte/u08 Árvores TRIE/README.md +++ b/Codigos/u08 Árvores TRIE/README.md @@ -1,2 +1,2 @@ -# U9 - Árvores TRIE -Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II +# U9 - Árvores TRIE +Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II diff --git a/fonte/u08 Árvores TRIE/java/patricia/No.java b/Codigos/u08 Árvores TRIE/java/patricia/No.java similarity index 94% rename from fonte/u08 Árvores TRIE/java/patricia/No.java rename to Codigos/u08 Árvores TRIE/java/patricia/No.java index 2ddecec..494150e 100644 --- a/fonte/u08 Árvores TRIE/java/patricia/No.java +++ b/Codigos/u08 Árvores TRIE/java/patricia/No.java @@ -1,31 +1,31 @@ -class No { - public int i, j, k; - public int tamanho = 255; - public No[] prox; - public boolean folha; - - public No (){ - this(-1, -1, -1); - } - - public No (int i, int j, int k){ - this(i, j, k, false); - } - - public No (int i, int j, int k, boolean folha){ - this.i = i; - this.j = j; - this.k = k; - this.folha = folha; - - prox = new No [tamanho]; - - for (int l = 0; l < tamanho; l++){ - prox[l] = null; - } - } - - public static int hash (char x){ - return (int)x; - } -} +class No { + public int i, j, k; + public int tamanho = 255; + public No[] prox; + public boolean folha; + + public No (){ + this(-1, -1, -1); + } + + public No (int i, int j, int k){ + this(i, j, k, false); + } + + public No (int i, int j, int k, boolean folha){ + this.i = i; + this.j = j; + this.k = k; + this.folha = folha; + + prox = new No [tamanho]; + + for (int l = 0; l < tamanho; l++){ + prox[l] = null; + } + } + + public static int hash (char x){ + return (int)x; + } +} diff --git a/fonte/u08 Árvores TRIE/java/patricia/Patricia.java b/Codigos/u08 Árvores TRIE/java/patricia/Patricia.java similarity index 97% rename from fonte/u08 Árvores TRIE/java/patricia/Patricia.java rename to Codigos/u08 Árvores TRIE/java/patricia/Patricia.java index a4cce07..7228527 100644 --- a/fonte/u08 Árvores TRIE/java/patricia/Patricia.java +++ b/Codigos/u08 Árvores TRIE/java/patricia/Patricia.java @@ -1,141 +1,141 @@ -class Patricia { - No raiz; - String[] array; //ignorar questão de tamanho do array - - public Patricia(){ - raiz = new No(); - array = null; - } - - public void setArray(String[] array) throws Exception { - this.array = array; - for(int i = 0; i < array.length; i++){ - inserir(i); - } - } - - private String string(No no){ - return (no == raiz) ? " " : string(no.i, no.j, no.k); - } - private String string(int i, int j, int k){ - //System.out.println("i("+i+") j("+j+") k("+k+") array(i)("+array[i]+") ijk(" + array[i].substring(j,k+1) + ")"); - return array[i].substring(j,k+1); - } - - public void inserir(int i) throws Exception { - System.out.print("\n==================================================== INSERINDO : " + array[i]); - inserir(raiz, i, 0); - mostrar(); - } - private void inserir(No no, int i, int j) throws Exception { - - System.out.println("\nEM NO(" + string(no) + ") i("+ i +") j(" + j + ")"); - - if(no.prox[array[i].charAt(j)] == null){ - no.prox[array[i].charAt(j)] = new No(i, j, array[i].length()-1, true); - System.out.print("--> criando folha(" + array[i].charAt(j) + "/" + string(no.prox[array[i].charAt(j)]) + ")"); - - } else { - String prox = string(no.prox[array[i].charAt(j)]); - String inserindo = array[i].substring(j); - System.out.println("prox(" + prox + ") e inserindo(" + inserindo + ")"); - - int k; - for(k = 1; k < prox.length() && k < inserindo.length() && prox.charAt(k) == inserindo.charAt(k); k++); - System.out.println("k (" + k + ")"); - - if(k == prox.length()){ - if(no.prox[array[i].charAt(j)].folha == true){ - throw new Exception("Erro: exite um prefixo de [" + array[i] + "] na arvore"); - } else { - inserir(no.prox[array[i].charAt(j)], i, j + k); - } - } else if (k == inserindo.length()){ - throw new Exception("Erro: [" + array[i] + "] é prefixo de outra palavra da árvore"); - } else { - No novo = new No(i, j, j + k - 1, false); - novo.prox[prox.charAt(k)] = no.prox[array[i].charAt(j)]; - novo.prox[prox.charAt(k)].j = j + k; - novo.prox[inserindo.charAt(k)] = new No(i, j + k, array[i].length()-1, true); - no.prox[array[i].charAt(j)] = novo; - System.out.println("no(" + string(no) + ") e filhoNOVO(" + string(novo) + ") neto1(" + string(novo.prox[inserindo.charAt(k)]) + ") neto2(" + string(novo.prox[prox.charAt(k)]) + ")"); - } - } - } - - - public boolean pesquisar(String s){ - System.out.println("\n==================================================== PESQUISAR: " + s); - return pesquisar (raiz, s, 0); - } - public boolean pesquisar (No no, String s, int cont){ - boolean resp; - - System.out.println("EM NO(" + string(no) + ") s("+ s +") cont(" + cont + ") prox(" + no.prox[s.charAt(cont)] + ")"); - - if(no.prox[s.charAt(cont)] == null){ - System.out.println("não existe filho para [" + s.charAt(cont) + "]"); - resp = false; - } else { - String prox = string(no.prox[s.charAt(cont)]); - System.out.println("prox: " + prox); - - int i1, i2; - for(i1 = 0, i2 = cont; i1 < prox.length() && i2 < s.length() && prox.charAt(i1) == s.charAt(i2); i1++, i2++); - - if(i2 == s.length()){ - System.out.println("resp = consumiuTodosOsCaracteresDeProx(" + (i1 == prox.length()) + ") and proxFolha(" + (no.prox[s.charAt(cont)].folha) + ")"); - resp = i1 == prox.length() && no.prox[s.charAt(cont)].folha; - } else { - resp = pesquisar(no.prox[s.charAt(cont)], s, i2); - } - } - - return resp; - } - - public void mostrar(){ - System.out.println("\n==================================================== MOSTRAR: "); - mostrar("", raiz); - } - - public void mostrar(String s, No no) { - if(no.folha == true){ - System.out.println("Palavra: " + (s + string(no))); - } else { - for(int i = 0; i < no.prox.length; i++){ - if(no.prox[i] != null){ - System.out.println("ESTOU EM (" + string(no) + ") E VOU PARA (" + string(no.prox[i]) + ")"); - mostrar(s + string(no), no.prox[i]); - } - } - } - } - public int contarAs(){ - int resp = 0; - if(raiz != null){ - resp = contarAs(raiz); - } - return resp; - } - - public int contarAs(No no) { - int resp = 0; - String palavra = string(no); - - for(int i = 0; i < palavra.length(); i++){ - if(palavra.charat(i) == 'A'){ - resp++; - } - } - - if(no.folha == false){ - for(int i = 0; i < no.prox.length; i++){ - if(no.prox[i] != null){ - resp += contarAs(no.prox[i]); - } - } - } - return resp; - } -} +class Patricia { + No raiz; + String[] array; //ignorar questão de tamanho do array + + public Patricia(){ + raiz = new No(); + array = null; + } + + public void setArray(String[] array) throws Exception { + this.array = array; + for(int i = 0; i < array.length; i++){ + inserir(i); + } + } + + private String string(No no){ + return (no == raiz) ? " " : string(no.i, no.j, no.k); + } + private String string(int i, int j, int k){ + //System.out.println("i("+i+") j("+j+") k("+k+") array(i)("+array[i]+") ijk(" + array[i].substring(j,k+1) + ")"); + return array[i].substring(j,k+1); + } + + public void inserir(int i) throws Exception { + System.out.print("\n==================================================== INSERINDO : " + array[i]); + inserir(raiz, i, 0); + mostrar(); + } + private void inserir(No no, int i, int j) throws Exception { + + System.out.println("\nEM NO(" + string(no) + ") i("+ i +") j(" + j + ")"); + + if(no.prox[array[i].charAt(j)] == null){ + no.prox[array[i].charAt(j)] = new No(i, j, array[i].length()-1, true); + System.out.print("--> criando folha(" + array[i].charAt(j) + "/" + string(no.prox[array[i].charAt(j)]) + ")"); + + } else { + String prox = string(no.prox[array[i].charAt(j)]); + String inserindo = array[i].substring(j); + System.out.println("prox(" + prox + ") e inserindo(" + inserindo + ")"); + + int k; + for(k = 1; k < prox.length() && k < inserindo.length() && prox.charAt(k) == inserindo.charAt(k); k++); + System.out.println("k (" + k + ")"); + + if(k == prox.length()){ + if(no.prox[array[i].charAt(j)].folha == true){ + throw new Exception("Erro: exite um prefixo de [" + array[i] + "] na arvore"); + } else { + inserir(no.prox[array[i].charAt(j)], i, j + k); + } + } else if (k == inserindo.length()){ + throw new Exception("Erro: [" + array[i] + "] é prefixo de outra palavra da árvore"); + } else { + No novo = new No(i, j, j + k - 1, false); + novo.prox[prox.charAt(k)] = no.prox[array[i].charAt(j)]; + novo.prox[prox.charAt(k)].j = j + k; + novo.prox[inserindo.charAt(k)] = new No(i, j + k, array[i].length()-1, true); + no.prox[array[i].charAt(j)] = novo; + System.out.println("no(" + string(no) + ") e filhoNOVO(" + string(novo) + ") neto1(" + string(novo.prox[inserindo.charAt(k)]) + ") neto2(" + string(novo.prox[prox.charAt(k)]) + ")"); + } + } + } + + + public boolean pesquisar(String s){ + System.out.println("\n==================================================== PESQUISAR: " + s); + return pesquisar (raiz, s, 0); + } + public boolean pesquisar (No no, String s, int cont){ + boolean resp; + + System.out.println("EM NO(" + string(no) + ") s("+ s +") cont(" + cont + ") prox(" + no.prox[s.charAt(cont)] + ")"); + + if(no.prox[s.charAt(cont)] == null){ + System.out.println("não existe filho para [" + s.charAt(cont) + "]"); + resp = false; + } else { + String prox = string(no.prox[s.charAt(cont)]); + System.out.println("prox: " + prox); + + int i1, i2; + for(i1 = 0, i2 = cont; i1 < prox.length() && i2 < s.length() && prox.charAt(i1) == s.charAt(i2); i1++, i2++); + + if(i2 == s.length()){ + System.out.println("resp = consumiuTodosOsCaracteresDeProx(" + (i1 == prox.length()) + ") and proxFolha(" + (no.prox[s.charAt(cont)].folha) + ")"); + resp = i1 == prox.length() && no.prox[s.charAt(cont)].folha; + } else { + resp = pesquisar(no.prox[s.charAt(cont)], s, i2); + } + } + + return resp; + } + + public void mostrar(){ + System.out.println("\n==================================================== MOSTRAR: "); + mostrar("", raiz); + } + + public void mostrar(String s, No no) { + if(no.folha == true){ + System.out.println("Palavra: " + (s + string(no))); + } else { + for(int i = 0; i < no.prox.length; i++){ + if(no.prox[i] != null){ + System.out.println("ESTOU EM (" + string(no) + ") E VOU PARA (" + string(no.prox[i]) + ")"); + mostrar(s + string(no), no.prox[i]); + } + } + } + } + public int contarAs(){ + int resp = 0; + if(raiz != null){ + resp = contarAs(raiz); + } + return resp; + } + + public int contarAs(No no) { + int resp = 0; + String palavra = string(no); + + for(int i = 0; i < palavra.length(); i++){ + if(palavra.charat(i) == 'A'){ + resp++; + } + } + + if(no.folha == false){ + for(int i = 0; i < no.prox.length; i++){ + if(no.prox[i] != null){ + resp += contarAs(no.prox[i]); + } + } + } + return resp; + } +} diff --git a/fonte/u08 Árvores TRIE/java/patricia/Principal.java b/Codigos/u08 Árvores TRIE/java/patricia/Principal.java similarity index 96% rename from fonte/u08 Árvores TRIE/java/patricia/Principal.java rename to Codigos/u08 Árvores TRIE/java/patricia/Principal.java index 7103f23..634cee0 100644 --- a/fonte/u08 Árvores TRIE/java/patricia/Principal.java +++ b/Codigos/u08 Árvores TRIE/java/patricia/Principal.java @@ -1,47 +1,47 @@ -class Principal { - public static void main (String[] args) throws Exception { - Patricia arv = new Patricia(); - - String array[] = new String[18]; - - array[0] = "bear"; - array[1] = "bell"; - array[2] = "bid"; - array[3] = "bull"; - array[4] = "buy"; - array[5] = "sell"; - array[6] = "stock"; - array[7] = "stop"; - array[8] = "sapo"; - array[9] = "sapato"; - array[10] = "ABACAXI"; - array[11] = "BALA"; - array[12] = "BOLO"; - array[13] = "ABACATE"; - array[14] = "galo"; - array[15] = "pata"; - array[16] = "pato"; - array[17] = "gato"; - //array[17] = "ABAC"; - //array[17] = "ABACAXIS"; - arv.setArray(array); - - arv.mostrar(); - for(int i = 0; i < array.length; i++){ - System.out.println("Pesquisar(" + array[i] + "):" + arv.pesquisar(array[i])); - } - - String s = "ABACA"; - System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); - - s = "ABACAXIS"; - System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); - - s = "gaga"; - System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); - - s = "ABAC"; - System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); - - } -} +class Principal { + public static void main (String[] args) throws Exception { + Patricia arv = new Patricia(); + + String array[] = new String[18]; + + array[0] = "bear"; + array[1] = "bell"; + array[2] = "bid"; + array[3] = "bull"; + array[4] = "buy"; + array[5] = "sell"; + array[6] = "stock"; + array[7] = "stop"; + array[8] = "sapo"; + array[9] = "sapato"; + array[10] = "ABACAXI"; + array[11] = "BALA"; + array[12] = "BOLO"; + array[13] = "ABACATE"; + array[14] = "galo"; + array[15] = "pata"; + array[16] = "pato"; + array[17] = "gato"; + //array[17] = "ABAC"; + //array[17] = "ABACAXIS"; + arv.setArray(array); + + arv.mostrar(); + for(int i = 0; i < array.length; i++){ + System.out.println("Pesquisar(" + array[i] + "):" + arv.pesquisar(array[i])); + } + + String s = "ABACA"; + System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); + + s = "ABACAXIS"; + System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); + + s = "gaga"; + System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); + + s = "ABAC"; + System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); + + } +} diff --git a/fonte/u08 Árvores TRIE/java/trie/ArvoreTrie.java b/Codigos/u08 Árvores TRIE/java/trie/ArvoreTrie.java similarity index 96% rename from fonte/u08 Árvores TRIE/java/trie/ArvoreTrie.java rename to Codigos/u08 Árvores TRIE/java/trie/ArvoreTrie.java index e5708fa..4029724 100644 --- a/fonte/u08 Árvores TRIE/java/trie/ArvoreTrie.java +++ b/Codigos/u08 Árvores TRIE/java/trie/ArvoreTrie.java @@ -1,90 +1,90 @@ -class ArvoreTrie { - private No raiz; - - public ArvoreTrie(){ - raiz = new No(); - } - - - public boolean pesquisar(String s) throws Exception { - return pesquisar(s, raiz, 0); - } - - public boolean pesquisar(String s, No no, int i) throws Exception { - boolean resp; - if(no.prox[s.charAt(i)] == null){ - resp = false; - } else if(i == s.length() - 1){ - resp = (no.prox[s.charAt(i)].folha == true); - } else if(i < s.length() - 1 ){ - resp = pesquisar(s, no.prox[s.charAt(i)], i + 1); - } else { - throw new Exception("Erro ao pesquisar!"); - } - return resp; - } - - public void inserir(String s) throws Exception { - inserir(s, raiz, 0); - } - - private void inserir(String s, No no, int i) throws Exception { - System.out.print("\nEM NO(" + no.elemento + ") (" + i + ")"); - if(no.prox[s.charAt(i)] == null){ - System.out.print("--> criando filho(" + s.charAt(i) + ")"); - no.prox[s.charAt(i)] = new No(s.charAt(i)); - - if(i == s.length() - 1){ - System.out.print("(folha)"); - no.prox[s.charAt(i)].folha = true; - }else{ - inserir(s, no.prox[s.charAt(i)], i + 1); - } - - } else if (no.prox[s.charAt(i)].folha == false && i < s.length() - 1){ - inserir(s, no.prox[s.charAt(i)], i + 1); - - } else { - throw new Exception("Erro ao inserir!"); - } - } - - public void mostrar(){ - mostrar("", raiz); - } - - public void mostrar(String s, No no) { - if(no.folha == true){ - System.out.println("Palavra: " + (s + no.elemento)); - } else { - for(int i = 0; i < no.prox.length; i++){ - if(no.prox[i] != null){ - System.out.println("ESTOU EM (" + no.elemento + ") E VOU PARA (" + no.prox[i].elemento + ")"); - mostrar(s + no.elemento, no.prox[i]); - } - } - } - } - - public int contarAs(){ - int resp = 0; - if(raiz != null){ - resp = contarAs(raiz); - } - return resp; - } - - public int contarAs(No no) { - int resp = (no.elemento == 'A') ? 1 : 0; - - if(no.folha == false){ - for(int i = 0; i < no.prox.length; i++){ - if(no.prox[i] != null){ - resp += contarAs(no.prox[i]); - } - } - } - return resp; - } -} - +class ArvoreTrie { + private No raiz; + + public ArvoreTrie(){ + raiz = new No(); + } + + + public boolean pesquisar(String s) throws Exception { + return pesquisar(s, raiz, 0); + } + + public boolean pesquisar(String s, No no, int i) throws Exception { + boolean resp; + if(no.prox[s.charAt(i)] == null){ + resp = false; + } else if(i == s.length() - 1){ + resp = (no.prox[s.charAt(i)].folha == true); + } else if(i < s.length() - 1 ){ + resp = pesquisar(s, no.prox[s.charAt(i)], i + 1); + } else { + throw new Exception("Erro ao pesquisar!"); + } + return resp; + } + + public void inserir(String s) throws Exception { + inserir(s, raiz, 0); + } + + private void inserir(String s, No no, int i) throws Exception { + System.out.print("\nEM NO(" + no.elemento + ") (" + i + ")"); + if(no.prox[s.charAt(i)] == null){ + System.out.print("--> criando filho(" + s.charAt(i) + ")"); + no.prox[s.charAt(i)] = new No(s.charAt(i)); + + if(i == s.length() - 1){ + System.out.print("(folha)"); + no.prox[s.charAt(i)].folha = true; + }else{ + inserir(s, no.prox[s.charAt(i)], i + 1); + } + + } else if (no.prox[s.charAt(i)].folha == false && i < s.length() - 1){ + inserir(s, no.prox[s.charAt(i)], i + 1); + + } else { + throw new Exception("Erro ao inserir!"); + } + } + + public void mostrar(){ + mostrar("", raiz); + } + + public void mostrar(String s, No no) { + if(no.folha == true){ + System.out.println("Palavra: " + (s + no.elemento)); + } else { + for(int i = 0; i < no.prox.length; i++){ + if(no.prox[i] != null){ + System.out.println("ESTOU EM (" + no.elemento + ") E VOU PARA (" + no.prox[i].elemento + ")"); + mostrar(s + no.elemento, no.prox[i]); + } + } + } + } + + public int contarAs(){ + int resp = 0; + if(raiz != null){ + resp = contarAs(raiz); + } + return resp; + } + + public int contarAs(No no) { + int resp = (no.elemento == 'A') ? 1 : 0; + + if(no.folha == false){ + for(int i = 0; i < no.prox.length; i++){ + if(no.prox[i] != null){ + resp += contarAs(no.prox[i]); + } + } + } + return resp; + } +} + diff --git a/fonte/u08 Árvores TRIE/java/trie/No.java b/Codigos/u08 Árvores TRIE/java/trie/No.java similarity index 95% rename from fonte/u08 Árvores TRIE/java/trie/No.java rename to Codigos/u08 Árvores TRIE/java/trie/No.java index ca8dc81..ef6a973 100644 --- a/fonte/u08 Árvores TRIE/java/trie/No.java +++ b/Codigos/u08 Árvores TRIE/java/trie/No.java @@ -1,21 +1,21 @@ -class No { - public char elemento; - public final int tamanho = 255; - public No[] prox; - public boolean folha; - - public No (){ - this(' '); - } - - public No (char elemento){ - this.elemento = elemento; - prox = new No [tamanho]; - for (int i = 0; i < tamanho; i++) prox[i] = null; - folha = false; - } - - public static int hash (char x){ - return (int)x; - } -} +class No { + public char elemento; + public final int tamanho = 255; + public No[] prox; + public boolean folha; + + public No (){ + this(' '); + } + + public No (char elemento){ + this.elemento = elemento; + prox = new No [tamanho]; + for (int i = 0; i < tamanho; i++) prox[i] = null; + folha = false; + } + + public static int hash (char x){ + return (int)x; + } +} diff --git a/fonte/u08 Árvores TRIE/java/trie/Principal.java b/Codigos/u08 Árvores TRIE/java/trie/Principal.java similarity index 96% rename from fonte/u08 Árvores TRIE/java/trie/Principal.java rename to Codigos/u08 Árvores TRIE/java/trie/Principal.java index 7b18df7..a31c20f 100644 --- a/fonte/u08 Árvores TRIE/java/trie/Principal.java +++ b/Codigos/u08 Árvores TRIE/java/trie/Principal.java @@ -1,35 +1,35 @@ -class Principal { - public static void main (String[] args) throws Exception { - ArvoreTrie arv = new ArvoreTrie(); - - String array[] = new String[8]; - array[0] = "ABACAXI"; - array[1] = "BALA"; - array[2] = "BOLO"; - array[3] = "ABACATE"; - array[4] = "galo"; - array[5] = "pata"; - array[6] = "pato"; - array[7] = "gato"; - - for(int i = 0; i < array.length; i++){ - arv.inserir(array[i]); - } - arv.mostrar(); - /* - for(int i = 0; i < array.length; i++){ - System.out.println("Pesquisar(" + array[i] + "):" + arv.pesquisar(array[i])); - } - - String s = "ABACA"; - System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); - - s = "ABACAXIS"; - System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); - - s = "gaga"; - System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); - */ - - } -} +class Principal { + public static void main (String[] args) throws Exception { + ArvoreTrie arv = new ArvoreTrie(); + + String array[] = new String[8]; + array[0] = "ABACAXI"; + array[1] = "BALA"; + array[2] = "BOLO"; + array[3] = "ABACATE"; + array[4] = "galo"; + array[5] = "pata"; + array[6] = "pato"; + array[7] = "gato"; + + for(int i = 0; i < array.length; i++){ + arv.inserir(array[i]); + } + arv.mostrar(); + /* + for(int i = 0; i < array.length; i++){ + System.out.println("Pesquisar(" + array[i] + "):" + arv.pesquisar(array[i])); + } + + String s = "ABACA"; + System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); + + s = "ABACAXIS"; + System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); + + s = "gaga"; + System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); + */ + + } +} diff --git a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/ArvoreTrie.java b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieAB/ArvoreTrie.java similarity index 96% rename from fonte/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/ArvoreTrie.java rename to Codigos/u08 Árvores TRIE/java/trieVariacoes/trieAB/ArvoreTrie.java index cb00612..0527cbd 100644 --- a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/ArvoreTrie.java +++ b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieAB/ArvoreTrie.java @@ -1,71 +1,71 @@ -class ArvoreTrie { - private No raiz; - - public ArvoreTrie(){ - raiz = new No(); - } - - public void inserir(String s) throws Exception { - inserir(s, raiz, 0); - } - - private void inserir(String s, No no, int i) throws Exception { - System.out.print("\nEM NO(" + no.elemento + ") (" + i + ")"); - No filho = no.pesquisar(s.charAt(i)); - if(filho == null){ - System.out.print("--> criando filho(" + s.charAt(i) + ")"); - filho = no.inserir(s.charAt(i)); - - if(i == s.length() - 1){ - System.out.print("(folha)"); - no.setFilhoFolha(s.charAt(i)); - }else{ - inserir(s, filho, i + 1); - } - - } else if (filho.folha == false && i < s.length() - 1){ - inserir(s, filho, i + 1); - - } else { - throw new Exception("Erro ao inserir!"); - } - } - - - public boolean pesquisar(String s) throws Exception { - return pesquisar(s, raiz, 0); - } - - public boolean pesquisar(String s, No no, int i) throws Exception { - boolean resp; - No filho = no.pesquisar(s.charAt(i)); - if(filho == null){ - resp = false; - } else if(i == s.length() - 1){ - resp = (filho.folha == true); - } else if(i < s.length() - 1 ){ - resp = pesquisar(s, filho, i + 1); - } else { - throw new Exception("Erro ao pesquisar!"); - } - return resp; - } - - - public void mostrar(){ - mostrar("", raiz); - } - - public void mostrar(String s, No no) { - if(no.folha == true){ - System.out.println("Palavra: " + (s + no.elemento)); - } else { - No[] filho = no.getFilho(); - for(int i = 0; i < filho.length; i++){ - System.out.println("ESTOU EM (" + no.elemento + ") E VOU PARA (" + filho[i].elemento + ")"); - mostrar(s + no.elemento, filho[i]); - } - } - } -} - +class ArvoreTrie { + private No raiz; + + public ArvoreTrie(){ + raiz = new No(); + } + + public void inserir(String s) throws Exception { + inserir(s, raiz, 0); + } + + private void inserir(String s, No no, int i) throws Exception { + System.out.print("\nEM NO(" + no.elemento + ") (" + i + ")"); + No filho = no.pesquisar(s.charAt(i)); + if(filho == null){ + System.out.print("--> criando filho(" + s.charAt(i) + ")"); + filho = no.inserir(s.charAt(i)); + + if(i == s.length() - 1){ + System.out.print("(folha)"); + no.setFilhoFolha(s.charAt(i)); + }else{ + inserir(s, filho, i + 1); + } + + } else if (filho.folha == false && i < s.length() - 1){ + inserir(s, filho, i + 1); + + } else { + throw new Exception("Erro ao inserir!"); + } + } + + + public boolean pesquisar(String s) throws Exception { + return pesquisar(s, raiz, 0); + } + + public boolean pesquisar(String s, No no, int i) throws Exception { + boolean resp; + No filho = no.pesquisar(s.charAt(i)); + if(filho == null){ + resp = false; + } else if(i == s.length() - 1){ + resp = (filho.folha == true); + } else if(i < s.length() - 1 ){ + resp = pesquisar(s, filho, i + 1); + } else { + throw new Exception("Erro ao pesquisar!"); + } + return resp; + } + + + public void mostrar(){ + mostrar("", raiz); + } + + public void mostrar(String s, No no) { + if(no.folha == true){ + System.out.println("Palavra: " + (s + no.elemento)); + } else { + No[] filho = no.getFilho(); + for(int i = 0; i < filho.length; i++){ + System.out.println("ESTOU EM (" + no.elemento + ") E VOU PARA (" + filho[i].elemento + ")"); + mostrar(s + no.elemento, filho[i]); + } + } + } +} + diff --git a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieAB/No.java b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieAB/No.java similarity index 94% rename from fonte/u08 Árvores TRIE/java/trieVariacoes/trieAB/No.java rename to Codigos/u08 Árvores TRIE/java/trieVariacoes/trieAB/No.java index 2bf5dad..b332e7b 100644 --- a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieAB/No.java +++ b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieAB/No.java @@ -1,103 +1,103 @@ -class No { - public char elemento; - private NoAB raiz; - public boolean folha; - - public No (){ - this(' '); - } - - public No (char elemento){ - this.elemento = elemento; - raiz = null; - folha = false; - } - - public No inserir(char x) throws Exception { - raiz = inserir(x, raiz); - return pesquisar(x); - } - - private NoAB inserir(char x, NoAB i) throws Exception { - if (i == null) { - i = new NoAB(x); - - } else if (x < i.elemento) { - i.esq = inserir(x, i.esq); - - } else if (x > i.elemento) { - i.dir = inserir(x, i.dir); - - } else { - throw new Exception("Erro ao inserir!"); - } - - return i; - } - - public No pesquisar(char x) { - return pesquisar(x, raiz); - } - - private No pesquisar(int x, NoAB i) { - No resp; - if (i == null) { - resp = null; - - } else if (x == i.elemento) { - resp = i.no; - - } else if (x < i.elemento) { - resp = pesquisar(x, i.esq); - - } else { - resp = pesquisar(x, i.dir); - } - return resp; - } - - public void setFilhoFolha(char x){ - setFilhoFolha(x, raiz); - } - public void setFilhoFolha(char x, NoAB i){ - if (i == null) { - //nada... - - } else if (x == i.elemento) { - i.no.folha = true; - - } else if (x < i.elemento) { - setFilhoFolha(x, i.esq); - - } else { - setFilhoFolha(x, i.dir); - } - } - - public int getN() { - return getN(raiz); - } - private int getN(NoAB i) { - int resp = 0; - if (i != null) { - resp = 1 + getN(i.esq) + getN(i.dir); - } - return resp; - } - - public No[] getFilho(){ - int n = getN(); - No[] vet = new No[n]; - getFilho(vet, 0, raiz); - return vet; - } - - public int getFilho(No[] vet, int pos, NoAB i){ - if(i != null){ - vet[pos++] = i.no; - pos = getFilho(vet, pos, i.esq); - pos = getFilho(vet, pos, i.dir); - } - return pos; - } -} +class No { + public char elemento; + private NoAB raiz; + public boolean folha; + + public No (){ + this(' '); + } + + public No (char elemento){ + this.elemento = elemento; + raiz = null; + folha = false; + } + + public No inserir(char x) throws Exception { + raiz = inserir(x, raiz); + return pesquisar(x); + } + + private NoAB inserir(char x, NoAB i) throws Exception { + if (i == null) { + i = new NoAB(x); + + } else if (x < i.elemento) { + i.esq = inserir(x, i.esq); + + } else if (x > i.elemento) { + i.dir = inserir(x, i.dir); + + } else { + throw new Exception("Erro ao inserir!"); + } + + return i; + } + + public No pesquisar(char x) { + return pesquisar(x, raiz); + } + + private No pesquisar(int x, NoAB i) { + No resp; + if (i == null) { + resp = null; + + } else if (x == i.elemento) { + resp = i.no; + + } else if (x < i.elemento) { + resp = pesquisar(x, i.esq); + + } else { + resp = pesquisar(x, i.dir); + } + return resp; + } + + public void setFilhoFolha(char x){ + setFilhoFolha(x, raiz); + } + public void setFilhoFolha(char x, NoAB i){ + if (i == null) { + //nada... + + } else if (x == i.elemento) { + i.no.folha = true; + + } else if (x < i.elemento) { + setFilhoFolha(x, i.esq); + + } else { + setFilhoFolha(x, i.dir); + } + } + + public int getN() { + return getN(raiz); + } + private int getN(NoAB i) { + int resp = 0; + if (i != null) { + resp = 1 + getN(i.esq) + getN(i.dir); + } + return resp; + } + + public No[] getFilho(){ + int n = getN(); + No[] vet = new No[n]; + getFilho(vet, 0, raiz); + return vet; + } + + public int getFilho(No[] vet, int pos, NoAB i){ + if(i != null){ + vet[pos++] = i.no; + pos = getFilho(vet, pos, i.esq); + pos = getFilho(vet, pos, i.dir); + } + return pos; + } +} diff --git a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieAB/NoAB.java b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieAB/NoAB.java similarity index 94% rename from fonte/u08 Árvores TRIE/java/trieVariacoes/trieAB/NoAB.java rename to Codigos/u08 Árvores TRIE/java/trieVariacoes/trieAB/NoAB.java index 0357757..8945997 100644 --- a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieAB/NoAB.java +++ b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieAB/NoAB.java @@ -1,27 +1,27 @@ -class NoAB { - public char elemento; - public NoAB esq, dir; - public No no; - - - /** - * Construtor da classe. - */ - public NoAB() { - this.elemento = 0; - this.esq = null; - this.dir = null; - this.no = null; - } - - /** - * Construtor da classe. - * @param elemento char inserido na celula. - */ - public NoAB(char elemento) { - this.elemento = elemento; - this.esq = null; - this.dir = null; - this.no = new No(elemento); - } -} +class NoAB { + public char elemento; + public NoAB esq, dir; + public No no; + + + /** + * Construtor da classe. + */ + public NoAB() { + this.elemento = 0; + this.esq = null; + this.dir = null; + this.no = null; + } + + /** + * Construtor da classe. + * @param elemento char inserido na celula. + */ + public NoAB(char elemento) { + this.elemento = elemento; + this.esq = null; + this.dir = null; + this.no = new No(elemento); + } +} diff --git a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieAB/Principal.java b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieAB/Principal.java similarity index 96% rename from fonte/u08 Árvores TRIE/java/trieVariacoes/trieAB/Principal.java rename to Codigos/u08 Árvores TRIE/java/trieVariacoes/trieAB/Principal.java index d65178f..6944759 100644 --- a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieAB/Principal.java +++ b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieAB/Principal.java @@ -1,34 +1,34 @@ -class Principal { - public static void main (String[] args) throws Exception { - ArvoreTrie arv = new ArvoreTrie(); - - String array[] = new String[8]; - array[0] = "ABACAXI"; - array[1] = "BALA"; - array[2] = "BOLO"; - array[3] = "ABACATE"; - array[4] = "galo"; - array[5] = "pata"; - array[6] = "pato"; - array[7] = "gato"; - - for(int i = 0; i < array.length; i++){ - arv.inserir(array[i]); - } - - arv.mostrar(); - for(int i = 0; i < array.length; i++){ - System.out.println("Pesquisar(" + array[i] + "):" + arv.pesquisar(array[i])); - } - - String s = "ABACA"; - System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); - - s = "ABACAXIS"; - System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); - - s = "gaga"; - System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); - - } -} +class Principal { + public static void main (String[] args) throws Exception { + ArvoreTrie arv = new ArvoreTrie(); + + String array[] = new String[8]; + array[0] = "ABACAXI"; + array[1] = "BALA"; + array[2] = "BOLO"; + array[3] = "ABACATE"; + array[4] = "galo"; + array[5] = "pata"; + array[6] = "pato"; + array[7] = "gato"; + + for(int i = 0; i < array.length; i++){ + arv.inserir(array[i]); + } + + arv.mostrar(); + for(int i = 0; i < array.length; i++){ + System.out.println("Pesquisar(" + array[i] + "):" + arv.pesquisar(array[i])); + } + + String s = "ABACA"; + System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); + + s = "ABACAXIS"; + System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); + + s = "gaga"; + System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); + + } +} diff --git a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/ArvoreTrie.java b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/ArvoreTrie.java similarity index 96% rename from fonte/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/ArvoreTrie.java rename to Codigos/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/ArvoreTrie.java index eae4142..0e1e3e7 100644 --- a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/ArvoreTrie.java +++ b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/ArvoreTrie.java @@ -1,72 +1,72 @@ -class ArvoreTrie { - private No raiz; - - public ArvoreTrie(){ - raiz = new No(); - } - - public void inserir(String s) throws Exception { - inserir(s, raiz, 0); - } - - private void inserir(String s, No no, int i) throws Exception { - System.out.print("\nEM NO(" + no.elemento + ") (" + i + ")"); - if(no.prox[s.charAt(i)] == null){ - System.out.print("--> criando filho(" + s.charAt(i) + ")"); - no.prox[s.charAt(i)] = new No(s.charAt(i)); - - if(i == s.length() - 1){ - System.out.print("(folha)"); - no.prox[s.charAt(i)].folha = true; - }else{ - inserir(s, no.prox[s.charAt(i)], i + 1); - } - - } else if (i < s.length() - 1){ - inserir(s, no.prox[s.charAt(i)], i + 1); - - } else if(i == s.length() - 1){ - System.out.print("(folha)"); - no.prox[s.charAt(i)].folha = true; - } - } - - - public boolean pesquisar(String s) throws Exception { - return pesquisar(s, raiz, 0); - } - - public boolean pesquisar(String s, No no, int i) throws Exception { - boolean resp; - if(no.prox[s.charAt(i)] == null){ - resp = false; - } else if(i == s.length() - 1){ - resp = (no.prox[s.charAt(i)].folha == true); - } else if(i < s.length() - 1 ){ - resp = pesquisar(s, no.prox[s.charAt(i)], i + 1); - } else { - throw new Exception("Erro ao pesquisar!"); - } - return resp; - } - - - public void mostrar(){ - mostrar("", raiz); - } - - public void mostrar(String s, No no) { - if(no.folha == true){ - System.out.println("Palavra: " + (s + no.elemento)); - } - - for(int i = 0; i < no.prox.length; i++){ - if(no.prox[i] != null){ - System.out.println("ESTOU EM (" + no.elemento + ") E VOU PARA (" + no.prox[i].elemento + ")"); - mostrar(s + no.elemento, no.prox[i]); - } - } - - } -} - +class ArvoreTrie { + private No raiz; + + public ArvoreTrie(){ + raiz = new No(); + } + + public void inserir(String s) throws Exception { + inserir(s, raiz, 0); + } + + private void inserir(String s, No no, int i) throws Exception { + System.out.print("\nEM NO(" + no.elemento + ") (" + i + ")"); + if(no.prox[s.charAt(i)] == null){ + System.out.print("--> criando filho(" + s.charAt(i) + ")"); + no.prox[s.charAt(i)] = new No(s.charAt(i)); + + if(i == s.length() - 1){ + System.out.print("(folha)"); + no.prox[s.charAt(i)].folha = true; + }else{ + inserir(s, no.prox[s.charAt(i)], i + 1); + } + + } else if (i < s.length() - 1){ + inserir(s, no.prox[s.charAt(i)], i + 1); + + } else if(i == s.length() - 1){ + System.out.print("(folha)"); + no.prox[s.charAt(i)].folha = true; + } + } + + + public boolean pesquisar(String s) throws Exception { + return pesquisar(s, raiz, 0); + } + + public boolean pesquisar(String s, No no, int i) throws Exception { + boolean resp; + if(no.prox[s.charAt(i)] == null){ + resp = false; + } else if(i == s.length() - 1){ + resp = (no.prox[s.charAt(i)].folha == true); + } else if(i < s.length() - 1 ){ + resp = pesquisar(s, no.prox[s.charAt(i)], i + 1); + } else { + throw new Exception("Erro ao pesquisar!"); + } + return resp; + } + + + public void mostrar(){ + mostrar("", raiz); + } + + public void mostrar(String s, No no) { + if(no.folha == true){ + System.out.println("Palavra: " + (s + no.elemento)); + } + + for(int i = 0; i < no.prox.length; i++){ + if(no.prox[i] != null){ + System.out.println("ESTOU EM (" + no.elemento + ") E VOU PARA (" + no.prox[i].elemento + ")"); + mostrar(s + no.elemento, no.prox[i]); + } + } + + } +} + diff --git a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/No.java b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/No.java similarity index 94% rename from fonte/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/No.java rename to Codigos/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/No.java index e4754ec..d36263c 100644 --- a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/No.java +++ b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/No.java @@ -1,21 +1,21 @@ -class No { - public char elemento; - public int tamanho = 255; - public No[] prox; - public boolean folha; - - public No (){ - this(' '); - } - - public No (char elemento){ - this.elemento = elemento; - prox = new No [tamanho]; - for (int i = 0; i < tamanho; i++) prox[i] = null; - folha = false; - } - - public static int hash (char x){ - return (int)x; - } -} +class No { + public char elemento; + public int tamanho = 255; + public No[] prox; + public boolean folha; + + public No (){ + this(' '); + } + + public No (char elemento){ + this.elemento = elemento; + prox = new No [tamanho]; + for (int i = 0; i < tamanho; i++) prox[i] = null; + folha = false; + } + + public static int hash (char x){ + return (int)x; + } +} diff --git a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/Principal.java b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/Principal.java similarity index 96% rename from fonte/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/Principal.java rename to Codigos/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/Principal.java index d90212a..6541d76 100644 --- a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/Principal.java +++ b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieHashAceitandoPrefixo/Principal.java @@ -1,36 +1,36 @@ -class Principal { - public static void main (String[] args) throws Exception { - ArvoreTrie arv = new ArvoreTrie(); - - String array[] = new String[11]; - array[0] = "ABACAXI"; - array[1] = "BALA"; - array[2] = "BOLO"; - array[3] = "ABACATE"; - array[4] = "galo"; - array[5] = "pata"; - array[6] = "pato"; - array[7] = "gato"; - array[8] = "BAL"; - array[9] = "BA"; - array[10] = "BALAS"; - - for(int i = 0; i < array.length; i++){ - arv.inserir(array[i]); - } - arv.mostrar(); - for(int i = 0; i < array.length; i++){ - System.out.println("Pesquisar(" + array[i] + "):" + arv.pesquisar(array[i])); - } - - String s = "ABACA"; - System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); - - s = "ABACAXIS"; - System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); - - s = "gaga"; - System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); - - } -} +class Principal { + public static void main (String[] args) throws Exception { + ArvoreTrie arv = new ArvoreTrie(); + + String array[] = new String[11]; + array[0] = "ABACAXI"; + array[1] = "BALA"; + array[2] = "BOLO"; + array[3] = "ABACATE"; + array[4] = "galo"; + array[5] = "pata"; + array[6] = "pato"; + array[7] = "gato"; + array[8] = "BAL"; + array[9] = "BA"; + array[10] = "BALAS"; + + for(int i = 0; i < array.length; i++){ + arv.inserir(array[i]); + } + arv.mostrar(); + for(int i = 0; i < array.length; i++){ + System.out.println("Pesquisar(" + array[i] + "):" + arv.pesquisar(array[i])); + } + + String s = "ABACA"; + System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); + + s = "ABACAXIS"; + System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); + + s = "gaga"; + System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); + + } +} diff --git a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieAB/ArvoreTrie.java b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/ArvoreTrie.java similarity index 96% rename from fonte/u08 Árvores TRIE/java/trieVariacoes/trieAB/ArvoreTrie.java rename to Codigos/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/ArvoreTrie.java index cb00612..0527cbd 100644 --- a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieAB/ArvoreTrie.java +++ b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/ArvoreTrie.java @@ -1,71 +1,71 @@ -class ArvoreTrie { - private No raiz; - - public ArvoreTrie(){ - raiz = new No(); - } - - public void inserir(String s) throws Exception { - inserir(s, raiz, 0); - } - - private void inserir(String s, No no, int i) throws Exception { - System.out.print("\nEM NO(" + no.elemento + ") (" + i + ")"); - No filho = no.pesquisar(s.charAt(i)); - if(filho == null){ - System.out.print("--> criando filho(" + s.charAt(i) + ")"); - filho = no.inserir(s.charAt(i)); - - if(i == s.length() - 1){ - System.out.print("(folha)"); - no.setFilhoFolha(s.charAt(i)); - }else{ - inserir(s, filho, i + 1); - } - - } else if (filho.folha == false && i < s.length() - 1){ - inserir(s, filho, i + 1); - - } else { - throw new Exception("Erro ao inserir!"); - } - } - - - public boolean pesquisar(String s) throws Exception { - return pesquisar(s, raiz, 0); - } - - public boolean pesquisar(String s, No no, int i) throws Exception { - boolean resp; - No filho = no.pesquisar(s.charAt(i)); - if(filho == null){ - resp = false; - } else if(i == s.length() - 1){ - resp = (filho.folha == true); - } else if(i < s.length() - 1 ){ - resp = pesquisar(s, filho, i + 1); - } else { - throw new Exception("Erro ao pesquisar!"); - } - return resp; - } - - - public void mostrar(){ - mostrar("", raiz); - } - - public void mostrar(String s, No no) { - if(no.folha == true){ - System.out.println("Palavra: " + (s + no.elemento)); - } else { - No[] filho = no.getFilho(); - for(int i = 0; i < filho.length; i++){ - System.out.println("ESTOU EM (" + no.elemento + ") E VOU PARA (" + filho[i].elemento + ")"); - mostrar(s + no.elemento, filho[i]); - } - } - } -} - +class ArvoreTrie { + private No raiz; + + public ArvoreTrie(){ + raiz = new No(); + } + + public void inserir(String s) throws Exception { + inserir(s, raiz, 0); + } + + private void inserir(String s, No no, int i) throws Exception { + System.out.print("\nEM NO(" + no.elemento + ") (" + i + ")"); + No filho = no.pesquisar(s.charAt(i)); + if(filho == null){ + System.out.print("--> criando filho(" + s.charAt(i) + ")"); + filho = no.inserir(s.charAt(i)); + + if(i == s.length() - 1){ + System.out.print("(folha)"); + no.setFilhoFolha(s.charAt(i)); + }else{ + inserir(s, filho, i + 1); + } + + } else if (filho.folha == false && i < s.length() - 1){ + inserir(s, filho, i + 1); + + } else { + throw new Exception("Erro ao inserir!"); + } + } + + + public boolean pesquisar(String s) throws Exception { + return pesquisar(s, raiz, 0); + } + + public boolean pesquisar(String s, No no, int i) throws Exception { + boolean resp; + No filho = no.pesquisar(s.charAt(i)); + if(filho == null){ + resp = false; + } else if(i == s.length() - 1){ + resp = (filho.folha == true); + } else if(i < s.length() - 1 ){ + resp = pesquisar(s, filho, i + 1); + } else { + throw new Exception("Erro ao pesquisar!"); + } + return resp; + } + + + public void mostrar(){ + mostrar("", raiz); + } + + public void mostrar(String s, No no) { + if(no.folha == true){ + System.out.println("Palavra: " + (s + no.elemento)); + } else { + No[] filho = no.getFilho(); + for(int i = 0; i < filho.length; i++){ + System.out.println("ESTOU EM (" + no.elemento + ") E VOU PARA (" + filho[i].elemento + ")"); + mostrar(s + no.elemento, filho[i]); + } + } + } +} + diff --git a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/Celula.java b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/Celula.java similarity index 95% rename from fonte/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/Celula.java rename to Codigos/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/Celula.java index 99db8a8..5d360c9 100644 --- a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/Celula.java +++ b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/Celula.java @@ -1,30 +1,30 @@ -/** - * Celula (pilha, lista e fila flexivel) - * @author Max do Val Machado - * @version 2 01/2015 - */ -class Celula { - public char elemento; // Elemento inserido na celula. - public Celula prox; // Aponta a celula prox. - public No no; - - - /** - * Construtor da classe. - */ - public Celula() { - this.elemento = 0; - this.prox = null; - this.no = null; - } - - /** - * Construtor da classe. - * @param elemento char inserido na celula. - */ - public Celula(char elemento) { - this.elemento = elemento; - this.prox = null; - this.no = new No(elemento); - } -} +/** + * Celula (pilha, lista e fila flexivel) + * @author Max do Val Machado + * @version 2 01/2015 + */ +class Celula { + public char elemento; // Elemento inserido na celula. + public Celula prox; // Aponta a celula prox. + public No no; + + + /** + * Construtor da classe. + */ + public Celula() { + this.elemento = 0; + this.prox = null; + this.no = null; + } + + /** + * Construtor da classe. + * @param elemento char inserido na celula. + */ + public Celula(char elemento) { + this.elemento = elemento; + this.prox = null; + this.no = new No(elemento); + } +} diff --git a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/No.java b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/No.java similarity index 95% rename from fonte/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/No.java rename to Codigos/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/No.java index 37e5837..50204fd 100644 --- a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/No.java +++ b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/No.java @@ -1,63 +1,63 @@ -class No { - public char elemento; - private Celula primeiro; - private Celula ultimo; - public boolean folha; - - public No (){ - this(' '); - } - - public No (char elemento){ - this.elemento = elemento; - ultimo = primeiro = new Celula(); - folha = false; - } - - public No inserir(char x){ - ultimo.prox = new Celula(x); - ultimo = ultimo.prox; - return ultimo.no; - } - - public No pesquisar(char x){ - No resp = null; - for (Celula i = primeiro.prox; i != null; i = i.prox) { - if(i.elemento == x){ - resp = i.no; - i = ultimo; - } - } - return resp; - } - - public void setFilhoFolha(char x){ - for (Celula i = primeiro.prox; i != null; i = i.prox) { - if(i.elemento == x){ - i.no.folha = true; - i = ultimo; - } - } - } - - public No[] getFilho(){ - int n = 0; - for (Celula i = primeiro.prox; i != null; i = i.prox, n++); - No[] vet = new No[n]; - - n = 0; - for (Celula i = primeiro.prox; i != null; i = i.prox){ - vet[n++] = i.no; - } - - return vet; - } - - public void mostrar() { - System.out.print("[ "); - for (Celula i = primeiro.prox; i != null; i = i.prox) { - System.out.print(i.elemento + " "); - } - System.out.println("] "); - } -} +class No { + public char elemento; + private Celula primeiro; + private Celula ultimo; + public boolean folha; + + public No (){ + this(' '); + } + + public No (char elemento){ + this.elemento = elemento; + ultimo = primeiro = new Celula(); + folha = false; + } + + public No inserir(char x){ + ultimo.prox = new Celula(x); + ultimo = ultimo.prox; + return ultimo.no; + } + + public No pesquisar(char x){ + No resp = null; + for (Celula i = primeiro.prox; i != null; i = i.prox) { + if(i.elemento == x){ + resp = i.no; + i = ultimo; + } + } + return resp; + } + + public void setFilhoFolha(char x){ + for (Celula i = primeiro.prox; i != null; i = i.prox) { + if(i.elemento == x){ + i.no.folha = true; + i = ultimo; + } + } + } + + public No[] getFilho(){ + int n = 0; + for (Celula i = primeiro.prox; i != null; i = i.prox, n++); + No[] vet = new No[n]; + + n = 0; + for (Celula i = primeiro.prox; i != null; i = i.prox){ + vet[n++] = i.no; + } + + return vet; + } + + public void mostrar() { + System.out.print("[ "); + for (Celula i = primeiro.prox; i != null; i = i.prox) { + System.out.print(i.elemento + " "); + } + System.out.println("] "); + } +} diff --git a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/Principal.java b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/Principal.java similarity index 96% rename from fonte/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/Principal.java rename to Codigos/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/Principal.java index d65178f..6944759 100644 --- a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/Principal.java +++ b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/Principal.java @@ -1,34 +1,34 @@ -class Principal { - public static void main (String[] args) throws Exception { - ArvoreTrie arv = new ArvoreTrie(); - - String array[] = new String[8]; - array[0] = "ABACAXI"; - array[1] = "BALA"; - array[2] = "BOLO"; - array[3] = "ABACATE"; - array[4] = "galo"; - array[5] = "pata"; - array[6] = "pato"; - array[7] = "gato"; - - for(int i = 0; i < array.length; i++){ - arv.inserir(array[i]); - } - - arv.mostrar(); - for(int i = 0; i < array.length; i++){ - System.out.println("Pesquisar(" + array[i] + "):" + arv.pesquisar(array[i])); - } - - String s = "ABACA"; - System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); - - s = "ABACAXIS"; - System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); - - s = "gaga"; - System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); - - } -} +class Principal { + public static void main (String[] args) throws Exception { + ArvoreTrie arv = new ArvoreTrie(); + + String array[] = new String[8]; + array[0] = "ABACAXI"; + array[1] = "BALA"; + array[2] = "BOLO"; + array[3] = "ABACATE"; + array[4] = "galo"; + array[5] = "pata"; + array[6] = "pato"; + array[7] = "gato"; + + for(int i = 0; i < array.length; i++){ + arv.inserir(array[i]); + } + + arv.mostrar(); + for(int i = 0; i < array.length; i++){ + System.out.println("Pesquisar(" + array[i] + "):" + arv.pesquisar(array[i])); + } + + String s = "ABACA"; + System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); + + s = "ABACAXIS"; + System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); + + s = "gaga"; + System.out.println("Pesquisar(" + s + "):" + arv.pesquisar(s)); + + } +} diff --git a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/oi b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/oi similarity index 96% rename from fonte/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/oi rename to Codigos/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/oi index 36596de..7204d70 100644 --- a/fonte/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/oi +++ b/Codigos/u08 Árvores TRIE/java/trieVariacoes/trieListaFlexivel/oi @@ -1,84 +1,84 @@ - -EM NO( ) (0)--> criando filho(A) -EM NO(A) (1)--> criando filho(B) -EM NO(B) (2)--> criando filho(A) -EM NO(A) (3)--> criando filho(C) -EM NO(C) (4)--> criando filho(A) -EM NO(A) (5)--> criando filho(X) -EM NO(X) (6)--> criando filho(I)(folha) -EM NO( ) (0)--> criando filho(B) -EM NO(B) (1)--> criando filho(A) -EM NO(A) (2)--> criando filho(L) -EM NO(L) (3)--> criando filho(A)(folha) -EM NO( ) (0) -EM NO(B) (1)--> criando filho(O) -EM NO(O) (2)--> criando filho(L) -EM NO(L) (3)--> criando filho(O)(folha) -EM NO( ) (0) -EM NO(A) (1) -EM NO(B) (2) -EM NO(A) (3) -EM NO(C) (4) -EM NO(A) (5)--> criando filho(T) -EM NO(T) (6)--> criando filho(E)(folha) -EM NO( ) (0)--> criando filho(g) -EM NO(g) (1)--> criando filho(a) -EM NO(a) (2)--> criando filho(l) -EM NO(l) (3)--> criando filho(o)(folha) -EM NO( ) (0)--> criando filho(p) -EM NO(p) (1)--> criando filho(a) -EM NO(a) (2)--> criando filho(t) -EM NO(t) (3)--> criando filho(a)(folha) -EM NO( ) (0) -EM NO(p) (1) -EM NO(a) (2) -EM NO(t) (3)--> criando filho(o)(folha) -EM NO( ) (0) -EM NO(g) (1) -EM NO(a) (2)--> criando filho(t) -EM NO(t) (3)--> criando filho(o)(folha)ESTOU EM ( ) E VOU PARA (A) -ESTOU EM (A) E VOU PARA (B) -ESTOU EM (B) E VOU PARA (A) -ESTOU EM (A) E VOU PARA (C) -ESTOU EM (C) E VOU PARA (A) -ESTOU EM (A) E VOU PARA (X) -ESTOU EM (X) E VOU PARA (I) -Palavra: ABACAXI -ESTOU EM (A) E VOU PARA (T) -ESTOU EM (T) E VOU PARA (E) -Palavra: ABACATE -ESTOU EM ( ) E VOU PARA (B) -ESTOU EM (B) E VOU PARA (A) -ESTOU EM (A) E VOU PARA (L) -ESTOU EM (L) E VOU PARA (A) -Palavra: BALA -ESTOU EM (B) E VOU PARA (O) -ESTOU EM (O) E VOU PARA (L) -ESTOU EM (L) E VOU PARA (O) -Palavra: BOLO -ESTOU EM ( ) E VOU PARA (g) -ESTOU EM (g) E VOU PARA (a) -ESTOU EM (a) E VOU PARA (l) -ESTOU EM (l) E VOU PARA (o) -Palavra: galo -ESTOU EM (a) E VOU PARA (t) -ESTOU EM (t) E VOU PARA (o) -Palavra: gato -ESTOU EM ( ) E VOU PARA (p) -ESTOU EM (p) E VOU PARA (a) -ESTOU EM (a) E VOU PARA (t) -ESTOU EM (t) E VOU PARA (a) -Palavra: pata -ESTOU EM (t) E VOU PARA (o) -Palavra: pato -Pesquisar(ABACAXI):true -Pesquisar(BALA):true -Pesquisar(BOLO):true -Pesquisar(ABACATE):true -Pesquisar(galo):true -Pesquisar(pata):true -Pesquisar(pato):true -Pesquisar(gato):true -Pesquisar(ABACA):false -Pesquisar(ABACAXIS):false -Pesquisar(gaga):false + +EM NO( ) (0)--> criando filho(A) +EM NO(A) (1)--> criando filho(B) +EM NO(B) (2)--> criando filho(A) +EM NO(A) (3)--> criando filho(C) +EM NO(C) (4)--> criando filho(A) +EM NO(A) (5)--> criando filho(X) +EM NO(X) (6)--> criando filho(I)(folha) +EM NO( ) (0)--> criando filho(B) +EM NO(B) (1)--> criando filho(A) +EM NO(A) (2)--> criando filho(L) +EM NO(L) (3)--> criando filho(A)(folha) +EM NO( ) (0) +EM NO(B) (1)--> criando filho(O) +EM NO(O) (2)--> criando filho(L) +EM NO(L) (3)--> criando filho(O)(folha) +EM NO( ) (0) +EM NO(A) (1) +EM NO(B) (2) +EM NO(A) (3) +EM NO(C) (4) +EM NO(A) (5)--> criando filho(T) +EM NO(T) (6)--> criando filho(E)(folha) +EM NO( ) (0)--> criando filho(g) +EM NO(g) (1)--> criando filho(a) +EM NO(a) (2)--> criando filho(l) +EM NO(l) (3)--> criando filho(o)(folha) +EM NO( ) (0)--> criando filho(p) +EM NO(p) (1)--> criando filho(a) +EM NO(a) (2)--> criando filho(t) +EM NO(t) (3)--> criando filho(a)(folha) +EM NO( ) (0) +EM NO(p) (1) +EM NO(a) (2) +EM NO(t) (3)--> criando filho(o)(folha) +EM NO( ) (0) +EM NO(g) (1) +EM NO(a) (2)--> criando filho(t) +EM NO(t) (3)--> criando filho(o)(folha)ESTOU EM ( ) E VOU PARA (A) +ESTOU EM (A) E VOU PARA (B) +ESTOU EM (B) E VOU PARA (A) +ESTOU EM (A) E VOU PARA (C) +ESTOU EM (C) E VOU PARA (A) +ESTOU EM (A) E VOU PARA (X) +ESTOU EM (X) E VOU PARA (I) +Palavra: ABACAXI +ESTOU EM (A) E VOU PARA (T) +ESTOU EM (T) E VOU PARA (E) +Palavra: ABACATE +ESTOU EM ( ) E VOU PARA (B) +ESTOU EM (B) E VOU PARA (A) +ESTOU EM (A) E VOU PARA (L) +ESTOU EM (L) E VOU PARA (A) +Palavra: BALA +ESTOU EM (B) E VOU PARA (O) +ESTOU EM (O) E VOU PARA (L) +ESTOU EM (L) E VOU PARA (O) +Palavra: BOLO +ESTOU EM ( ) E VOU PARA (g) +ESTOU EM (g) E VOU PARA (a) +ESTOU EM (a) E VOU PARA (l) +ESTOU EM (l) E VOU PARA (o) +Palavra: galo +ESTOU EM (a) E VOU PARA (t) +ESTOU EM (t) E VOU PARA (o) +Palavra: gato +ESTOU EM ( ) E VOU PARA (p) +ESTOU EM (p) E VOU PARA (a) +ESTOU EM (a) E VOU PARA (t) +ESTOU EM (t) E VOU PARA (a) +Palavra: pata +ESTOU EM (t) E VOU PARA (o) +Palavra: pato +Pesquisar(ABACAXI):true +Pesquisar(BALA):true +Pesquisar(BOLO):true +Pesquisar(ABACATE):true +Pesquisar(galo):true +Pesquisar(pata):true +Pesquisar(pato):true +Pesquisar(gato):true +Pesquisar(ABACA):false +Pesquisar(ABACAXIS):false +Pesquisar(gaga):false diff --git a/aula/u00 Nivelamento/unidade00a_nivelamento_gitHub.pdf b/PowerPoints/u00 Nivelamento/unidade00a_nivelamento_gitHub.pdf similarity index 100% rename from aula/u00 Nivelamento/unidade00a_nivelamento_gitHub.pdf rename to PowerPoints/u00 Nivelamento/unidade00a_nivelamento_gitHub.pdf diff --git a/aula/u00 Nivelamento/unidade00b_exercicios.pdf b/PowerPoints/u00 Nivelamento/unidade00b_exercicios.pdf similarity index 100% rename from aula/u00 Nivelamento/unidade00b_exercicios.pdf rename to PowerPoints/u00 Nivelamento/unidade00b_exercicios.pdf diff --git a/aula/u00 Nivelamento/unidade00c_roteiroLab.pdf b/PowerPoints/u00 Nivelamento/unidade00c_roteiroLab.pdf similarity index 100% rename from aula/u00 Nivelamento/unidade00c_roteiroLab.pdf rename to PowerPoints/u00 Nivelamento/unidade00c_roteiroLab.pdf diff --git a/aula/u00 Nivelamento/unidade00d_nivelamento_MyIO.pdf b/PowerPoints/u00 Nivelamento/unidade00d_nivelamento_MyIO.pdf similarity index 100% rename from aula/u00 Nivelamento/unidade00d_nivelamento_MyIO.pdf rename to PowerPoints/u00 Nivelamento/unidade00d_nivelamento_MyIO.pdf diff --git a/aula/u00 Nivelamento/unidade00e_nivelamento_redirecionamento.pdf b/PowerPoints/u00 Nivelamento/unidade00e_nivelamento_redirecionamento.pdf similarity index 100% rename from aula/u00 Nivelamento/unidade00e_nivelamento_redirecionamento.pdf rename to PowerPoints/u00 Nivelamento/unidade00e_nivelamento_redirecionamento.pdf diff --git a/aula/u00 Nivelamento/unidade00f_nivelamento_arquivo.pdf b/PowerPoints/u00 Nivelamento/unidade00f_nivelamento_arquivo.pdf similarity index 100% rename from aula/u00 Nivelamento/unidade00f_nivelamento_arquivo.pdf rename to PowerPoints/u00 Nivelamento/unidade00f_nivelamento_arquivo.pdf diff --git a/aula/u00 Nivelamento/unidade00g_nivelamento_IntroduçãoAoJava.pdf b/PowerPoints/u00 Nivelamento/unidade00g_nivelamento_IntroduçãoAoJava.pdf similarity index 100% rename from aula/u00 Nivelamento/unidade00g_nivelamento_IntroduçãoAoJava.pdf rename to PowerPoints/u00 Nivelamento/unidade00g_nivelamento_IntroduçãoAoJava.pdf diff --git a/aula/u00 Nivelamento/unidade00h_conceitosBasicos_recursividade.pdf b/PowerPoints/u00 Nivelamento/unidade00h_conceitosBasicos_recursividade.pdf similarity index 100% rename from aula/u00 Nivelamento/unidade00h_conceitosBasicos_recursividade.pdf rename to PowerPoints/u00 Nivelamento/unidade00h_conceitosBasicos_recursividade.pdf diff --git a/aula/u00 Nivelamento/unidade00i_conceitosBasicos_ponteiros.pdf b/PowerPoints/u00 Nivelamento/unidade00i_conceitosBasicos_ponteiros.pdf similarity index 100% rename from aula/u00 Nivelamento/unidade00i_conceitosBasicos_ponteiros.pdf rename to PowerPoints/u00 Nivelamento/unidade00i_conceitosBasicos_ponteiros.pdf diff --git a/aula/u00 Nivelamento/unidade00j_conceitosBasicos_formatacao.pdf b/PowerPoints/u00 Nivelamento/unidade00j_conceitosBasicos_formatacao.pdf similarity index 100% rename from aula/u00 Nivelamento/unidade00j_conceitosBasicos_formatacao.pdf rename to PowerPoints/u00 Nivelamento/unidade00j_conceitosBasicos_formatacao.pdf diff --git a/aula/u00 Nivelamento/unidade00k_nivelamento_tratamentoExcecao.pdf b/PowerPoints/u00 Nivelamento/unidade00k_nivelamento_tratamentoExcecao.pdf similarity index 100% rename from aula/u00 Nivelamento/unidade00k_nivelamento_tratamentoExcecao.pdf rename to PowerPoints/u00 Nivelamento/unidade00k_nivelamento_tratamentoExcecao.pdf diff --git a/aula/u00 Nivelamento/unidade00l_nivelamento_introducaoOO.pdf b/PowerPoints/u00 Nivelamento/unidade00l_nivelamento_introducaoOO.pdf similarity index 100% rename from aula/u00 Nivelamento/unidade00l_nivelamento_introducaoOO.pdf rename to PowerPoints/u00 Nivelamento/unidade00l_nivelamento_introducaoOO.pdf diff --git a/aula/u00 Nivelamento/unidade00m_linguagemCparaProgramadoresJava.pdf b/PowerPoints/u00 Nivelamento/unidade00m_linguagemCparaProgramadoresJava.pdf similarity index 100% rename from aula/u00 Nivelamento/unidade00m_linguagemCparaProgramadoresJava.pdf rename to PowerPoints/u00 Nivelamento/unidade00m_linguagemCparaProgramadoresJava.pdf diff --git a/aula/u00 Nivelamento/unidade00n_conceitosCLASSPATH.pdf b/PowerPoints/u00 Nivelamento/unidade00n_conceitosCLASSPATH.pdf similarity index 100% rename from aula/u00 Nivelamento/unidade00n_conceitosCLASSPATH.pdf rename to PowerPoints/u00 Nivelamento/unidade00n_conceitosCLASSPATH.pdf diff --git a/aula/u00 Nivelamento/unidade00o_processoAEDsIIExercício.pdf b/PowerPoints/u00 Nivelamento/unidade00o_processoAEDsIIExercício.pdf similarity index 100% rename from aula/u00 Nivelamento/unidade00o_processoAEDsIIExercício.pdf rename to PowerPoints/u00 Nivelamento/unidade00o_processoAEDsIIExercício.pdf diff --git a/aula/u01 Fundamentos de Análise de Algoritmos/unidade01-planoEnsino.pdf b/PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01-planoEnsino.pdf similarity index 100% rename from aula/u01 Fundamentos de Análise de Algoritmos/unidade01-planoEnsino.pdf rename to PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01-planoEnsino.pdf diff --git a/aula/u01 Fundamentos de Análise de Algoritmos/unidade01a-noções-complexidade-gabarito.pdf b/PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01a-noções-complexidade-gabarito.pdf similarity index 100% rename from aula/u01 Fundamentos de Análise de Algoritmos/unidade01a-noções-complexidade-gabarito.pdf rename to PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01a-noções-complexidade-gabarito.pdf diff --git a/aula/u01 Fundamentos de Análise de Algoritmos/unidade01a-noções-complexidade.pdf b/PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01a-noções-complexidade.pdf similarity index 100% rename from aula/u01 Fundamentos de Análise de Algoritmos/unidade01a-noções-complexidade.pdf rename to PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01a-noções-complexidade.pdf diff --git a/aula/u01 Fundamentos de Análise de Algoritmos/unidade01a2_algoritmosPesquisa.pdf b/PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01a2_algoritmosPesquisa.pdf similarity index 100% rename from aula/u01 Fundamentos de Análise de Algoritmos/unidade01a2_algoritmosPesquisa.pdf rename to PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01a2_algoritmosPesquisa.pdf diff --git a/aula/u01 Fundamentos de Análise de Algoritmos/unidade01a3_ordenacaoInterna_selecao.pdf b/PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01a3_ordenacaoInterna_selecao.pdf similarity index 100% rename from aula/u01 Fundamentos de Análise de Algoritmos/unidade01a3_ordenacaoInterna_selecao.pdf rename to PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01a3_ordenacaoInterna_selecao.pdf diff --git a/aula/u01 Fundamentos de Análise de Algoritmos/unidade01a3_ordenacaoInterna_selecao_estruturaCodigo.pdf b/PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01a3_ordenacaoInterna_selecao_estruturaCodigo.pdf similarity index 100% rename from aula/u01 Fundamentos de Análise de Algoritmos/unidade01a3_ordenacaoInterna_selecao_estruturaCodigo.pdf rename to PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01a3_ordenacaoInterna_selecao_estruturaCodigo.pdf diff --git a/aula/u01 Fundamentos de Análise de Algoritmos/unidade01b1_somatorios_introdução.pdf b/PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01b1_somatorios_introdução.pdf similarity index 100% rename from aula/u01 Fundamentos de Análise de Algoritmos/unidade01b1_somatorios_introdução.pdf rename to PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01b1_somatorios_introdução.pdf diff --git a/aula/u01 Fundamentos de Análise de Algoritmos/unidade01b2_somatorios_manipulação.pdf b/PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01b2_somatorios_manipulação.pdf similarity index 100% rename from aula/u01 Fundamentos de Análise de Algoritmos/unidade01b2_somatorios_manipulação.pdf rename to PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01b2_somatorios_manipulação.pdf diff --git a/aula/u01 Fundamentos de Análise de Algoritmos/unidade01b3_somatorios_metodos.pdf b/PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01b3_somatorios_metodos.pdf similarity index 100% rename from aula/u01 Fundamentos de Análise de Algoritmos/unidade01b3_somatorios_metodos.pdf rename to PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01b3_somatorios_metodos.pdf diff --git a/aula/u01 Fundamentos de Análise de Algoritmos/unidade01b4_somatorios_gabarito.pdf b/PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01b4_somatorios_gabarito.pdf similarity index 100% rename from aula/u01 Fundamentos de Análise de Algoritmos/unidade01b4_somatorios_gabarito.pdf rename to PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01b4_somatorios_gabarito.pdf diff --git a/aula/u01 Fundamentos de Análise de Algoritmos/unidade01c-fundamentos-analise-complexidade-gabarito.pdf b/PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01c-fundamentos-analise-complexidade-gabarito.pdf similarity index 100% rename from aula/u01 Fundamentos de Análise de Algoritmos/unidade01c-fundamentos-analise-complexidade-gabarito.pdf rename to PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01c-fundamentos-analise-complexidade-gabarito.pdf diff --git a/aula/u01 Fundamentos de Análise de Algoritmos/unidade01c-fundamentos-analise-complexidade.pdf b/PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01c-fundamentos-analise-complexidade.pdf similarity index 100% rename from aula/u01 Fundamentos de Análise de Algoritmos/unidade01c-fundamentos-analise-complexidade.pdf rename to PowerPoints/u01 Fundamentos de Análise de Algoritmos/unidade01c-fundamentos-analise-complexidade.pdf diff --git a/aula/u02 Estruturas de dados básicas lineares/unidade02a_tadLinear_lista.pdf b/PowerPoints/u02 Estruturas de dados básicas lineares/unidade02a_tadLinear_lista.pdf similarity index 100% rename from aula/u02 Estruturas de dados básicas lineares/unidade02a_tadLinear_lista.pdf rename to PowerPoints/u02 Estruturas de dados básicas lineares/unidade02a_tadLinear_lista.pdf diff --git a/aula/u02 Estruturas de dados básicas lineares/unidade02b_tadLinear_pilha.pdf b/PowerPoints/u02 Estruturas de dados básicas lineares/unidade02b_tadLinear_pilha.pdf similarity index 100% rename from aula/u02 Estruturas de dados básicas lineares/unidade02b_tadLinear_pilha.pdf rename to PowerPoints/u02 Estruturas de dados básicas lineares/unidade02b_tadLinear_pilha.pdf diff --git a/aula/u02 Estruturas de dados básicas lineares/unidade02c_tadLinear_fila.pdf b/PowerPoints/u02 Estruturas de dados básicas lineares/unidade02c_tadLinear_fila.pdf similarity index 100% rename from aula/u02 Estruturas de dados básicas lineares/unidade02c_tadLinear_fila.pdf rename to PowerPoints/u02 Estruturas de dados básicas lineares/unidade02c_tadLinear_fila.pdf diff --git a/aula/u03 Ordenação em memória principal/unidade03a_ordenacaoInterna_bolha.pdf b/PowerPoints/u03 Ordenação em memória principal/unidade03a_ordenacaoInterna_bolha.pdf similarity index 100% rename from aula/u03 Ordenação em memória principal/unidade03a_ordenacaoInterna_bolha.pdf rename to PowerPoints/u03 Ordenação em memória principal/unidade03a_ordenacaoInterna_bolha.pdf diff --git a/aula/u03 Ordenação em memória principal/unidade03b_ordenacaoInterna_insercao.pdf b/PowerPoints/u03 Ordenação em memória principal/unidade03b_ordenacaoInterna_insercao.pdf similarity index 100% rename from aula/u03 Ordenação em memória principal/unidade03b_ordenacaoInterna_insercao.pdf rename to PowerPoints/u03 Ordenação em memória principal/unidade03b_ordenacaoInterna_insercao.pdf diff --git a/aula/u03 Ordenação em memória principal/unidade03c_ordenacaoInterna_shellsort.pdf b/PowerPoints/u03 Ordenação em memória principal/unidade03c_ordenacaoInterna_shellsort.pdf similarity index 100% rename from aula/u03 Ordenação em memória principal/unidade03c_ordenacaoInterna_shellsort.pdf rename to PowerPoints/u03 Ordenação em memória principal/unidade03c_ordenacaoInterna_shellsort.pdf diff --git a/aula/u03 Ordenação em memória principal/unidade03d_ordenacaoInterna_quicksort.pdf b/PowerPoints/u03 Ordenação em memória principal/unidade03d_ordenacaoInterna_quicksort.pdf similarity index 100% rename from aula/u03 Ordenação em memória principal/unidade03d_ordenacaoInterna_quicksort.pdf rename to PowerPoints/u03 Ordenação em memória principal/unidade03d_ordenacaoInterna_quicksort.pdf diff --git a/aula/u03 Ordenação em memória principal/unidade03e_ordenacaoInterna_mergesort.pdf b/PowerPoints/u03 Ordenação em memória principal/unidade03e_ordenacaoInterna_mergesort.pdf similarity index 100% rename from aula/u03 Ordenação em memória principal/unidade03e_ordenacaoInterna_mergesort.pdf rename to PowerPoints/u03 Ordenação em memória principal/unidade03e_ordenacaoInterna_mergesort.pdf diff --git a/aula/u03 Ordenação em memória principal/unidade03f_ordenacaoInterna_heapsort.pdf b/PowerPoints/u03 Ordenação em memória principal/unidade03f_ordenacaoInterna_heapsort.pdf similarity index 100% rename from aula/u03 Ordenação em memória principal/unidade03f_ordenacaoInterna_heapsort.pdf rename to PowerPoints/u03 Ordenação em memória principal/unidade03f_ordenacaoInterna_heapsort.pdf diff --git a/aula/u03 Ordenação em memória principal/unidade03g_ordenacaoInterna_countingsort.pdf b/PowerPoints/u03 Ordenação em memória principal/unidade03g_ordenacaoInterna_countingsort.pdf similarity index 100% rename from aula/u03 Ordenação em memória principal/unidade03g_ordenacaoInterna_countingsort.pdf rename to PowerPoints/u03 Ordenação em memória principal/unidade03g_ordenacaoInterna_countingsort.pdf diff --git a/aula/u03 Ordenação em memória principal/unidade03h_ordenacaoInterna_radixsort.pdf b/PowerPoints/u03 Ordenação em memória principal/unidade03h_ordenacaoInterna_radixsort.pdf similarity index 100% rename from aula/u03 Ordenação em memória principal/unidade03h_ordenacaoInterna_radixsort.pdf rename to PowerPoints/u03 Ordenação em memória principal/unidade03h_ordenacaoInterna_radixsort.pdf diff --git a/aula/u03 Ordenação em memória principal/unidade03i_ordenacaoInterna_conclusao.pdf b/PowerPoints/u03 Ordenação em memória principal/unidade03i_ordenacaoInterna_conclusao.pdf similarity index 100% rename from aula/u03 Ordenação em memória principal/unidade03i_ordenacaoInterna_conclusao.pdf rename to PowerPoints/u03 Ordenação em memória principal/unidade03i_ordenacaoInterna_conclusao.pdf diff --git a/aula/u03 Ordenação em memória principal/unidade03j_ordenacaoParcial.pdf b/PowerPoints/u03 Ordenação em memória principal/unidade03j_ordenacaoParcial.pdf similarity index 100% rename from aula/u03 Ordenação em memória principal/unidade03j_ordenacaoParcial.pdf rename to PowerPoints/u03 Ordenação em memória principal/unidade03j_ordenacaoParcial.pdf diff --git a/aula/u03 Ordenação em memória principal/unidade03k_ordenacaoParalela.pdf b/PowerPoints/u03 Ordenação em memória principal/unidade03k_ordenacaoParalela.pdf similarity index 100% rename from aula/u03 Ordenação em memória principal/unidade03k_ordenacaoParalela.pdf rename to PowerPoints/u03 Ordenação em memória principal/unidade03k_ordenacaoParalela.pdf diff --git a/aula/u04 Estruturas de dados básicas flexíveis/unidade04a_tadFlexivel_introducao.pdf b/PowerPoints/u04 Estruturas de dados básicas flexíveis/unidade04a_tadFlexivel_introducao.pdf similarity index 100% rename from aula/u04 Estruturas de dados básicas flexíveis/unidade04a_tadFlexivel_introducao.pdf rename to PowerPoints/u04 Estruturas de dados básicas flexíveis/unidade04a_tadFlexivel_introducao.pdf diff --git a/aula/u04 Estruturas de dados básicas flexíveis/unidade04b_tadFlexivel_pilha.pdf b/PowerPoints/u04 Estruturas de dados básicas flexíveis/unidade04b_tadFlexivel_pilha.pdf similarity index 100% rename from aula/u04 Estruturas de dados básicas flexíveis/unidade04b_tadFlexivel_pilha.pdf rename to PowerPoints/u04 Estruturas de dados básicas flexíveis/unidade04b_tadFlexivel_pilha.pdf diff --git a/aula/u04 Estruturas de dados básicas flexíveis/unidade04b_tadLinear_pilha.pdf b/PowerPoints/u04 Estruturas de dados básicas flexíveis/unidade04b_tadLinear_pilha.pdf similarity index 100% rename from aula/u04 Estruturas de dados básicas flexíveis/unidade04b_tadLinear_pilha.pdf rename to PowerPoints/u04 Estruturas de dados básicas flexíveis/unidade04b_tadLinear_pilha.pdf diff --git a/aula/u04 Estruturas de dados básicas flexíveis/unidade04c_tadFlexivel_fila.pdf b/PowerPoints/u04 Estruturas de dados básicas flexíveis/unidade04c_tadFlexivel_fila.pdf similarity index 100% rename from aula/u04 Estruturas de dados básicas flexíveis/unidade04c_tadFlexivel_fila.pdf rename to PowerPoints/u04 Estruturas de dados básicas flexíveis/unidade04c_tadFlexivel_fila.pdf diff --git a/aula/u04 Estruturas de dados básicas flexíveis/unidade04c_tadLinear_fila.pdf b/PowerPoints/u04 Estruturas de dados básicas flexíveis/unidade04c_tadLinear_fila.pdf similarity index 100% rename from aula/u04 Estruturas de dados básicas flexíveis/unidade04c_tadLinear_fila.pdf rename to PowerPoints/u04 Estruturas de dados básicas flexíveis/unidade04c_tadLinear_fila.pdf diff --git a/aula/u04 Estruturas de dados básicas flexíveis/unidade04d_tadFlexivel_listasimples.pdf b/PowerPoints/u04 Estruturas de dados básicas flexíveis/unidade04d_tadFlexivel_listasimples.pdf similarity index 100% rename from aula/u04 Estruturas de dados básicas flexíveis/unidade04d_tadFlexivel_listasimples.pdf rename to PowerPoints/u04 Estruturas de dados básicas flexíveis/unidade04d_tadFlexivel_listasimples.pdf diff --git a/aula/u04 Estruturas de dados básicas flexíveis/unidade04e_tadFlexivel_listadupla.pdf b/PowerPoints/u04 Estruturas de dados básicas flexíveis/unidade04e_tadFlexivel_listadupla.pdf similarity index 100% rename from aula/u04 Estruturas de dados básicas flexíveis/unidade04e_tadFlexivel_listadupla.pdf rename to PowerPoints/u04 Estruturas de dados básicas flexíveis/unidade04e_tadFlexivel_listadupla.pdf diff --git a/aula/u04 Estruturas de dados básicas flexíveis/unidade04f_tadFlexivel_matriz.pdf b/PowerPoints/u04 Estruturas de dados básicas flexíveis/unidade04f_tadFlexivel_matriz.pdf similarity index 100% rename from aula/u04 Estruturas de dados básicas flexíveis/unidade04f_tadFlexivel_matriz.pdf rename to PowerPoints/u04 Estruturas de dados básicas flexíveis/unidade04f_tadFlexivel_matriz.pdf diff --git a/aula/u04 Estruturas de dados básicas flexíveis/unidade04h_tadFlexivel_emC.pdf b/PowerPoints/u04 Estruturas de dados básicas flexíveis/unidade04h_tadFlexivel_emC.pdf similarity index 100% rename from aula/u04 Estruturas de dados básicas flexíveis/unidade04h_tadFlexivel_emC.pdf rename to PowerPoints/u04 Estruturas de dados básicas flexíveis/unidade04h_tadFlexivel_emC.pdf diff --git a/aula/u05 Árvores binárias/unidade05a_árvoreBinaria_introdução.pdf b/PowerPoints/u05 Árvores binárias/unidade05a_árvoreBinaria_introdução.pdf similarity index 100% rename from aula/u05 Árvores binárias/unidade05a_árvoreBinaria_introdução.pdf rename to PowerPoints/u05 Árvores binárias/unidade05a_árvoreBinaria_introdução.pdf diff --git a/aula/u05 Árvores binárias/unidade05b_ordenacaoInterna_insercao.pdf b/PowerPoints/u05 Árvores binárias/unidade05b_ordenacaoInterna_insercao.pdf similarity index 100% rename from aula/u05 Árvores binárias/unidade05b_ordenacaoInterna_insercao.pdf rename to PowerPoints/u05 Árvores binárias/unidade05b_ordenacaoInterna_insercao.pdf diff --git a/aula/u05 Árvores binárias/unidade05b_árvoreBinaria_inserção.pdf b/PowerPoints/u05 Árvores binárias/unidade05b_árvoreBinaria_inserção.pdf similarity index 100% rename from aula/u05 Árvores binárias/unidade05b_árvoreBinaria_inserção.pdf rename to PowerPoints/u05 Árvores binárias/unidade05b_árvoreBinaria_inserção.pdf diff --git a/aula/u05 Árvores binárias/unidade05c_ordenacaoInterna_shellsort.pdf b/PowerPoints/u05 Árvores binárias/unidade05c_ordenacaoInterna_shellsort.pdf similarity index 100% rename from aula/u05 Árvores binárias/unidade05c_ordenacaoInterna_shellsort.pdf rename to PowerPoints/u05 Árvores binárias/unidade05c_ordenacaoInterna_shellsort.pdf diff --git a/aula/u05 Árvores binárias/unidade05c_árvoreBinaria_pesquisa e caminhamento.pdf b/PowerPoints/u05 Árvores binárias/unidade05c_árvoreBinaria_pesquisa e caminhamento.pdf similarity index 100% rename from aula/u05 Árvores binárias/unidade05c_árvoreBinaria_pesquisa e caminhamento.pdf rename to PowerPoints/u05 Árvores binárias/unidade05c_árvoreBinaria_pesquisa e caminhamento.pdf diff --git a/aula/u05 Árvores binárias/unidade05d_ordenacaoInterna_quicksort.pdf b/PowerPoints/u05 Árvores binárias/unidade05d_ordenacaoInterna_quicksort.pdf similarity index 100% rename from aula/u05 Árvores binárias/unidade05d_ordenacaoInterna_quicksort.pdf rename to PowerPoints/u05 Árvores binárias/unidade05d_ordenacaoInterna_quicksort.pdf diff --git a/aula/u05 Árvores binárias/unidade05d_árvoreBinaria_remoção.pdf b/PowerPoints/u05 Árvores binárias/unidade05d_árvoreBinaria_remoção.pdf similarity index 100% rename from aula/u05 Árvores binárias/unidade05d_árvoreBinaria_remoção.pdf rename to PowerPoints/u05 Árvores binárias/unidade05d_árvoreBinaria_remoção.pdf diff --git a/aula/u05 Árvores binárias/unidade05e_árvoreBinaria_em_C.pdf b/PowerPoints/u05 Árvores binárias/unidade05e_árvoreBinaria_em_C.pdf similarity index 100% rename from aula/u05 Árvores binárias/unidade05e_árvoreBinaria_em_C.pdf rename to PowerPoints/u05 Árvores binárias/unidade05e_árvoreBinaria_em_C.pdf diff --git a/aula/u05 Árvores binárias/unidade05f_ordenacaoInterna_heapsort.pdf b/PowerPoints/u05 Árvores binárias/unidade05f_ordenacaoInterna_heapsort.pdf similarity index 100% rename from aula/u05 Árvores binárias/unidade05f_ordenacaoInterna_heapsort.pdf rename to PowerPoints/u05 Árvores binárias/unidade05f_ordenacaoInterna_heapsort.pdf diff --git a/aula/u05 Árvores binárias/unidade05f_árvoreBinaria_em_C++.pdf b/PowerPoints/u05 Árvores binárias/unidade05f_árvoreBinaria_em_C++.pdf similarity index 100% rename from aula/u05 Árvores binárias/unidade05f_árvoreBinaria_em_C++.pdf rename to PowerPoints/u05 Árvores binárias/unidade05f_árvoreBinaria_em_C++.pdf diff --git a/aula/u05 Árvores binárias/unidade05g_ordenacaoInterna_countingsort.pdf b/PowerPoints/u05 Árvores binárias/unidade05g_ordenacaoInterna_countingsort.pdf similarity index 100% rename from aula/u05 Árvores binárias/unidade05g_ordenacaoInterna_countingsort.pdf rename to PowerPoints/u05 Árvores binárias/unidade05g_ordenacaoInterna_countingsort.pdf diff --git a/aula/u05 Árvores binárias/unidade05g_árvoreBinaria_Estruturas Híbridas.pdf b/PowerPoints/u05 Árvores binárias/unidade05g_árvoreBinaria_Estruturas Híbridas.pdf similarity index 100% rename from aula/u05 Árvores binárias/unidade05g_árvoreBinaria_Estruturas Híbridas.pdf rename to PowerPoints/u05 Árvores binárias/unidade05g_árvoreBinaria_Estruturas Híbridas.pdf diff --git a/aula/u05 Árvores binárias/unidade05h_ordenacaoInterna_radixsort.pdf b/PowerPoints/u05 Árvores binárias/unidade05h_ordenacaoInterna_radixsort.pdf similarity index 100% rename from aula/u05 Árvores binárias/unidade05h_ordenacaoInterna_radixsort.pdf rename to PowerPoints/u05 Árvores binárias/unidade05h_ordenacaoInterna_radixsort.pdf diff --git a/aula/u05 Árvores binárias/unidade05i_ordenacaoInterna_conclusao.pdf b/PowerPoints/u05 Árvores binárias/unidade05i_ordenacaoInterna_conclusao.pdf similarity index 100% rename from aula/u05 Árvores binárias/unidade05i_ordenacaoInterna_conclusao.pdf rename to PowerPoints/u05 Árvores binárias/unidade05i_ordenacaoInterna_conclusao.pdf diff --git a/aula/u05 Árvores binárias/unidade05j_ordenacaoParcial.pdf b/PowerPoints/u05 Árvores binárias/unidade05j_ordenacaoParcial.pdf similarity index 100% rename from aula/u05 Árvores binárias/unidade05j_ordenacaoParcial.pdf rename to PowerPoints/u05 Árvores binárias/unidade05j_ordenacaoParcial.pdf diff --git a/aula/u05 Árvores binárias/unidade05k_ordenacaoParalela.pdf b/PowerPoints/u05 Árvores binárias/unidade05k_ordenacaoParalela.pdf similarity index 100% rename from aula/u05 Árvores binárias/unidade05k_ordenacaoParalela.pdf rename to PowerPoints/u05 Árvores binárias/unidade05k_ordenacaoParalela.pdf diff --git a/aula/u06 Balanceamento de árvores/unidade06a_balanceamento.pdf b/PowerPoints/u06 Balanceamento de árvores/unidade06a_balanceamento.pdf similarity index 100% rename from aula/u06 Balanceamento de árvores/unidade06a_balanceamento.pdf rename to PowerPoints/u06 Balanceamento de árvores/unidade06a_balanceamento.pdf diff --git a/aula/u06 Balanceamento de árvores/unidade06b_avl.pdf b/PowerPoints/u06 Balanceamento de árvores/unidade06b_avl.pdf similarity index 100% rename from aula/u06 Balanceamento de árvores/unidade06b_avl.pdf rename to PowerPoints/u06 Balanceamento de árvores/unidade06b_avl.pdf diff --git a/aula/u06 Balanceamento de árvores/unidade06c_2_3_4.pdf b/PowerPoints/u06 Balanceamento de árvores/unidade06c_2_3_4.pdf similarity index 100% rename from aula/u06 Balanceamento de árvores/unidade06c_2_3_4.pdf rename to PowerPoints/u06 Balanceamento de árvores/unidade06c_2_3_4.pdf diff --git a/aula/u06 Balanceamento de árvores/unidade06d_alvinegra.pdf b/PowerPoints/u06 Balanceamento de árvores/unidade06d_alvinegra.pdf similarity index 100% rename from aula/u06 Balanceamento de árvores/unidade06d_alvinegra.pdf rename to PowerPoints/u06 Balanceamento de árvores/unidade06d_alvinegra.pdf diff --git a/aula/u06 Balanceamento de árvores/unidade06g_coletaDeLixo.pdf b/PowerPoints/u06 Balanceamento de árvores/unidade06g_coletaDeLixo.pdf similarity index 100% rename from aula/u06 Balanceamento de árvores/unidade06g_coletaDeLixo.pdf rename to PowerPoints/u06 Balanceamento de árvores/unidade06g_coletaDeLixo.pdf diff --git a/aula/u07 Tabelas e dicionários/unidade07a_tabelaHash.pdf b/PowerPoints/u07 Tabelas e dicionários/unidade07a_tabelaHash.pdf similarity index 100% rename from aula/u07 Tabelas e dicionários/unidade07a_tabelaHash.pdf rename to PowerPoints/u07 Tabelas e dicionários/unidade07a_tabelaHash.pdf diff --git a/aula/u08 Árvores TRIE/unidade08a_trie.pdf b/PowerPoints/u08 Árvores TRIE/unidade08a_trie.pdf similarity index 100% rename from aula/u08 Árvores TRIE/unidade08a_trie.pdf rename to PowerPoints/u08 Árvores TRIE/unidade08a_trie.pdf diff --git a/aula/u08 Árvores TRIE/unidade08b_patricia.pdf b/PowerPoints/u08 Árvores TRIE/unidade08b_patricia.pdf similarity index 100% rename from aula/u08 Árvores TRIE/unidade08b_patricia.pdf rename to PowerPoints/u08 Árvores TRIE/unidade08b_patricia.pdf diff --git a/README.md b/README.md index 66cb1ee..d5e5cb1 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,29 @@ # 💻 AEDS II Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II -## ❓ Ajuda -[Guia com os principais comandos](fonte/ajuda/README.md) +## 🏋️ Prática +[CodeWars para treino de provas práticas](https://www.codewars.com/dashboard) -## 📁 Fonte -[Pasta com as bibliotecas usadas na disciplina](fonte/ajuda/java) + +## ❓ Ajuda +[Guia com os principais comandos](Codigos/ajuda/README.md) + + +## 👨‍⚕️ Slides +[Pasta com powerpoints usados em aula](Powerpoints) + + +## 📁 Bibliotecas +[Pasta com as bibliotecas usadas na disciplina](Codigos/ajuda/java) + + +## 💡 Codigos +[Pasta com os codigos de exemplo](Codigos) ## ⚙️ Labs -[Pasta com os exercícios de treinamento do laboratório](labs) +[Pasta com os exercícios de treinamento do laboratório](Labs) ## 🔥 TPS -[Pasta com os trabalhos práticos do laboratório](tps) - - +[Pasta com os trabalhos práticos do laboratório](Tps) \ No newline at end of file diff --git a/aula/u03 Ordenação em memória principal/unidade03a_ordenacaoInterna_bolha (1).pdf b/aula/u03 Ordenação em memória principal/unidade03a_ordenacaoInterna_bolha (1).pdf deleted file mode 100644 index 8d713900760568ab4a6d88da96bb31c7583096ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314436 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

As{bI2 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≥Nb`7LpX{3s4N)CETS!j8N>XIMMMRKlU$2Ey*vzo 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 icfR66y|GE diff --git a/oiii b/oiii deleted file mode 100644 index 32cc118..0000000 --- a/oiii +++ /dev/null @@ -1,18 +0,0 @@ -Prezados, boa noite! Amanhã, 11 de agosto (sexta), teremos nossa primeira aula de TRABALHO INTERDISCIPLINAR II: BACK-END. Esta disciplina tem somente 10 encontros semestrais que acontecerão nos dias informados na página incial da disciplina. - - -No TI2, os alunos criam grupos de exatamente quatro alunos e desenvolvem uma aplicação back-end usando obrigatoriamente Java, PostgreSQL, Eclipse e a Spark Framework. - -1) A 1a tarefa da disciplina é criar o grupo no qual os alunos fazem seu auto-registro no Canvas através da opção "Pessoas". - -2) A 2a tarefa é estudar o plano de ensino da disciplina disponível na opção Módulos / Apresentação da disciplina. - -3) A 3a tarefa é estudar o ambiente de desenvolvimento da disciplina disponível na opção Módulos / Ambiente de Desenvolvimento. Nesse caso, o aluno deve assistir do vídeos 1 (Introdução) ao 6 (Exemplo Conexão PostgreSQL). Os demais vídeos serão solicitados posteriormente. - -4) A 4a tarefa é fazer os exercícios 1 e 2 (individuais) até o dia 25 de agosto. - -5) A 5a tarefa é fazer a Sprint 1 (em grupo) até o dia 25 de agosto. - -Para ajudar na disciplina criamos o grupo de zap abaixo. Todos os alunos terão acesso de escrita no mesmo até a próxima aula, facilitando a comunicação entre vocês. - -- Grupo de zap: https://chat.whatsapp.com/Iz0lokIMeYv9p9ebvItA11 From ca349ba5b55139c5178074eda456c4adcf94bc85 Mon Sep 17 00:00:00 2001 From: nietus Date: Sat, 16 Sep 2023 12:32:52 -0300 Subject: [PATCH 2/6] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d5e5cb1..47159e0 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II ## 👨‍⚕️ Slides -[Pasta com powerpoints usados em aula](Powerpoints) +[Pasta com powerpoints usados em aula](PowerPoints) ## 📁 Bibliotecas @@ -22,8 +22,8 @@ Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II ## ⚙️ Labs -[Pasta com os exercícios de treinamento do laboratório](Labs) +[Pasta com os exercícios de treinamento do laboratório](labs) ## 🔥 TPS -[Pasta com os trabalhos práticos do laboratório](Tps) \ No newline at end of file +[Pasta com os trabalhos práticos do laboratório](tps) From 3a7091d5bac9a613dfdfd41f0068eb6f454345f1 Mon Sep 17 00:00:00 2001 From: Antonio Neto Date: Sat, 16 Sep 2023 12:38:50 -0300 Subject: [PATCH 3/6] add(README.md): Pratica --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d5e5cb1..31bf5f3 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,8 @@ Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II ## 🏋️ Prática -[CodeWars para treino de provas práticas](https://www.codewars.com/dashboard) +[CodeWars](https://www.codewars.com/dashboard) +[OBI](https://olimpiada.ic.unicamp.br/pratique/pu/) ## ❓ Ajuda @@ -26,4 +27,4 @@ Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II ## 🔥 TPS -[Pasta com os trabalhos práticos do laboratório](Tps) \ No newline at end of file +[Pasta com os trabalhos práticos do laboratório](Tps) From 55a0aa9ba353ea8a9ead52c37e18f29574664bc2 Mon Sep 17 00:00:00 2001 From: Antonio Neto Date: Sat, 16 Sep 2023 12:46:30 -0300 Subject: [PATCH 4/6] update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 75fb853..6072041 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II ## 🏋️ Prática -[CodeWars](https://www.codewars.com/dashboard) +[CodeWars](https://www.codewars.com/dashboard)
[OBI](https://olimpiada.ic.unicamp.br/pratique/pu/) From af367104b3c843c1814809bbbd6cc01792c21629 Mon Sep 17 00:00:00 2001 From: Antonio Neto Date: Sun, 17 Sep 2023 20:08:46 -0300 Subject: [PATCH 5/6] add: MyIO lib to Codigos --- .../java/MyIO.java | 252 ++++++++++++++++++ 1 file changed, 252 insertions(+) create mode 100644 Codigos/u03 Ordenação em memória principal/java/MyIO.java diff --git a/Codigos/u03 Ordenação em memória principal/java/MyIO.java b/Codigos/u03 Ordenação em memória principal/java/MyIO.java new file mode 100644 index 0000000..a5308ab --- /dev/null +++ b/Codigos/u03 Ordenação em memória principal/java/MyIO.java @@ -0,0 +1,252 @@ +import java.io.*; +import java.nio.charset.*; + +class MyIO { + + private static BufferedReader in = new BufferedReader(new InputStreamReader(System.in, Charset.forName("ISO-8859-1"))); + private static String charset = "ISO-8859-1"; + + public static void setCharset(String charset_){ + charset = charset_; + in = new BufferedReader(new InputStreamReader(System.in, Charset.forName(charset))); + } + + public static void print(){ + } + + public static void print(int x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void print(float x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void print(double x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void print(String x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void print(boolean x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void print(char x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void println(){ + } + + public static void println(int x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.println(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void println(float x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.println(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void println(double x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.println(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void println(String x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.println(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void println(boolean x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.println(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void println(char x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.println(x); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static void printf(String formato, double x){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.printf(formato, x);// "%.2f" + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + } + + public static double readDouble(){ + double d = -1; + try{ + d = Double.parseDouble(readString().trim().replace(",",".")); + }catch(Exception e){} + return d; + } + + public static double readDouble(String str){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(str); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + return readDouble(); + } + + public static float readFloat(){ + return (float) readDouble(); + } + + public static float readFloat(String str){ + return (float) readDouble(str); + } + + public static int readInt(){ + int i = -1; + try{ + i = Integer.parseInt(readString().trim()); + }catch(Exception e){} + return i; + } + + public static int readInt(String str){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(str); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + return readInt(); + } + + public static String readString(){ + String s = ""; + char tmp; + try{ + do{ + tmp = (char)in.read(); + if(tmp != '\n' && tmp != ' ' && tmp != 13){ + s += tmp; + } + }while(tmp != '\n' && tmp != ' '); + }catch(IOException ioe){ + System.out.println("lerPalavra: " + ioe.getMessage()); + } + return s; + } + + public static String readString(String str){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(str); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + return readString(); + } + + public static String readLine(){ + String s = ""; + char tmp; + try{ + do{ + tmp = (char)in.read(); + if(tmp != '\n' && tmp != 13){ + s += tmp; + } + }while(tmp != '\n'); + }catch(IOException ioe){ + System.out.println("lerPalavra: " + ioe.getMessage()); + } + return s; + } + + public static String readLine(String str){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(str); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + return readLine(); + } + + public static char readChar(){ + char resp = ' '; + try{ + resp = (char)in.read(); + }catch(Exception e){} + return resp; + } + + public static char readChar(String str){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(str); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + return readChar(); + } + + public static boolean readBoolean(){ + boolean resp = false; + String str = ""; + + try{ + str = readString(); + }catch(Exception e){} + + if(str.equals("true") || str.equals("TRUE") || str.equals("t") || str.equals("1") || + str.equals("verdadeiro") || str.equals("VERDADEIRO") || str.equals("V")){ + resp = true; + } + + return resp; + } + + public static boolean readBoolean(String str){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(str); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + return readBoolean(); + } + + public static void pause(){ + try{ + in.read(); + }catch(Exception e){} + } + + public static void pause(String str){ + try { + PrintStream out = new PrintStream(System.out, true, charset); + out.print(str); + }catch(UnsupportedEncodingException e){ System.out.println("Erro: charset invalido"); } + pause(); + } +} \ No newline at end of file From 3c65e7f2452c1e5350c3f5949a52d2eadc4ae822 Mon Sep 17 00:00:00 2001 From: Antonio Neto Date: Wed, 20 Sep 2023 17:03:56 -0300 Subject: [PATCH 6/6] add: hackerrank to README --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 6072041..37c4868 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,6 @@ # 💻 AEDS II Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II -## 🏋️ Prática -[CodeWars](https://www.codewars.com/dashboard)
-[OBI](https://olimpiada.ic.unicamp.br/pratique/pu/) - - ## ❓ Ajuda [Guia com os principais comandos](Codigos/ajuda/README.md) @@ -28,3 +23,9 @@ Repositório de códigos da disciplina de Algoritmos e Estrutura de Dados II ## 🔥 TPS [Pasta com os trabalhos práticos do laboratório](tps) + + +## 🏋️ Prática +[OBI](https://olimpiada.ic.unicamp.br/pratique/pu/)
+[CodeWars](https://www.codewars.com/dashboard)
+[HackerRank](https://www.hackerrank.com/dashboard) \ No newline at end of file