From 014302c1efdfa3a106dab18aa3265e31a7814d94 Mon Sep 17 00:00:00 2001 From: vfa20 <vfa20@inf.ufpr.br> Date: Sat, 16 Jul 2022 22:03:44 -0300 Subject: [PATCH] insertion sort fixed --- t1/main.c | 255 ++++++++++++++++++++++++++++--------------------- t1/main.o | Bin 12888 -> 14936 bytes t1/makefile | 2 +- t1/ordenacao.c | 52 ++++++++-- t1/ordenacao.o | Bin 6872 -> 7328 bytes t1/trab | Bin 0 -> 26160 bytes 6 files changed, 192 insertions(+), 117 deletions(-) create mode 100755 t1/trab diff --git a/t1/main.c b/t1/main.c index 3848683..a7d6169 100644 --- a/t1/main.c +++ b/t1/main.c @@ -6,7 +6,7 @@ void imprimeVetor(int v[], int tam) { printf("\n["); - for (int i=0;i<10;i++) { + for (int i=0;i<20;i++) { printf("%d ", v[i]); } printf("...%d]\n", v[tam-1]); @@ -14,7 +14,7 @@ void imprimeVetor(int v[], int tam) { void geraVetorAleatorio(int v[], int tam) { for (int i=0;i<tam;i++) { - v[i] = rand() % 100000 + 1; + v[i] = rand() % 100 + 1; } } @@ -34,8 +34,8 @@ int main(){ //Dica: somente é posśivel criar vetores grandes utilizando alocação dinâmica de memória //Veja um exemplo de alocação dinâmica a seguir - int tamVetor = 10000; - int* vetor = malloc(tamVetor * sizeof(int)); + int tam = 10; + int* vetor = malloc(10000 * sizeof(int)); getNome(nome); printf("Trabalho de %s\n", nome); printf("GRR %u\n", getGRR()); @@ -45,11 +45,6 @@ int main(){ return 1; } - int* vetor1 = malloc(tamVetor * sizeof(int)); - if(vetor1 == NULL){ - printf("Falha fatal. Impossível alocar memoria."); - return 1; - } printf("----------------------------------------------------\n"); printf("Comecando os teste com os vetores de busca...\n"); @@ -59,79 +54,79 @@ int main(){ //TESTE 1 numComp=0; - printf("\nbuscando o valor -6 no vetor..."); - geraVetor(vetor,100); - imprimeVetor(vetor, 100); + printf("\nbuscando o valor -5 no vetor..."); + geraVetor(vetor,tam); + imprimeVetor(vetor, tam); start = clock();//start recebe o "ciclo" corrente - idxBusca = buscaSequencial(vetor,100, -6, &numComp); + idxBusca = buscaSequencial(vetor,tam, -5, &numComp); end = clock();//end recebe o "ciclo" corrente total = ((double)end - start)/CLOCKS_PER_SEC; printf("(Encontrado no indice: %d | Nº de comp: %d | Tempo total: %f)\n", idxBusca, numComp, total); - + //TESTE 2 numComp=0; - printf("\nbuscando o valor 100 no vetor..."); - geraVetor(vetor,1000); - imprimeVetor(vetor, 1000); + printf("\nbuscando o valor 14 no vetor..."); + geraVetor(vetor,5*tam); + imprimeVetor(vetor, 5*tam); start = clock();//start recebe o "ciclo" corrente - idxBusca = buscaSequencial(vetor,1000, 100, &numComp); + idxBusca = buscaSequencial(vetor,5*tam, 14, &numComp); end = clock();//end recebe o "ciclo" corrente total = ((double)end - start)/CLOCKS_PER_SEC; printf("(Encontrado no indice: %d | Nº de comp: %d | Tempo total: %f)\n", idxBusca, numComp, total); - + //TESTE 3 numComp=0; - printf("\nbuscando o valor 7500 no vetor..."); - geraVetor(vetor,10000); - imprimeVetor(vetor, 10000); + printf("\nbuscando o valor 43 no vetor..."); + geraVetor(vetor,10*tam); + imprimeVetor(vetor, 10*tam); start = clock();//start recebe o "ciclo" corrente - idxBusca = buscaSequencial(vetor,10000, 7500, &numComp); + idxBusca = buscaSequencial(vetor,10*tam, 43, &numComp); end = clock();//end recebe o "ciclo" corrente total = ((double)end - start)/CLOCKS_PER_SEC; printf("(Encontrado no indice: %d | Nº de comp: %d | Tempo total: %f)\n", idxBusca, numComp, total); - + printf("\n--->BUSCA BINARIA\n"); - geraVetor(vetor,100); + geraVetor(vetor,tam); //TESTE 1 numComp=0; printf("\nbuscando o valor -6 no vetor..."); - imprimeVetor(vetor, 100); + imprimeVetor(vetor, tam); start = clock();//start recebe o "ciclo" corrente - idxBusca = buscaBinaria(vetor,100, -6, &numComp); + idxBusca = buscaBinaria(vetor,tam, -6, &numComp); end = clock();//end recebe o "ciclo" corrente total = ((double)end - start)/CLOCKS_PER_SEC; printf("(Encontrado no indice: %d | Nº de comp: %d | Tempo total: %f)\n", idxBusca, numComp, total); - + //TESTE 2 numComp=0; - printf("\nbuscando o valor 100 no vetor..."); - geraVetor(vetor,1000); - imprimeVetor(vetor, 1000); + printf("\nbuscando o valor 14 no vetor..."); + geraVetor(vetor,5*tam); + imprimeVetor(vetor, 5*tam); start = clock();//start recebe o "ciclo" corrente - idxBusca = buscaBinaria(vetor,1000, 100, &numComp); + idxBusca = buscaBinaria(vetor,5*tam, 14, &numComp); end = clock();//end recebe o "ciclo" corrente total = ((double)end - start)/CLOCKS_PER_SEC; printf("(Encontrado no indice: %d | Nº de comp: %d | Tempo total: %f)\n", idxBusca, numComp, total); - + //TESTE 3 numComp=0; - printf("\nbuscando o valor 2500 no vetor..."); - geraVetor(vetor,10000); - imprimeVetor(vetor, 10000); + printf("\nbuscando o valor 43 no vetor..."); + geraVetor(vetor,10*tam); + imprimeVetor(vetor, 10*tam); start = clock();//start recebe o "ciclo" corrente - idxBusca = buscaBinaria(vetor,10000, 2500, &numComp); + idxBusca = buscaBinaria(vetor,10*tam, 43, &numComp); end = clock();//end recebe o "ciclo" corrente total = ((double)end - start)/CLOCKS_PER_SEC; printf("(Encontrado no indice: %d | Nº de comp: %d | Tempo total: %f)\n", idxBusca, numComp, total); - + printf("\n----------------------------------------------------\n"); printf("Comecando os teste com os vetores de ordenacao...\n"); @@ -140,38 +135,50 @@ int main(){ printf("\n--->INSERTION SORT\n"); //TESTE 1 - geraVetorAleatorio(vetor,10); - printf("\nOrdenando um vetor tam = 100"); - imprimeVetor(vetor, 10); + geraVetorAleatorio(vetor,tam); + numComp=0; + printf("\nOrdenando um vetor de tam = 10"); + imprimeVetor(vetor, tam); start = clock();//start recebe o "ciclo" corrente - numComp = insertionSort(vetor,10); + numComp = insertionSort(vetor,tam); end = clock();//end recebe o "ciclo" corrente total = ((double)end - start)/CLOCKS_PER_SEC; - imprimeVetor(vetor, 10); + imprimeVetor(vetor, tam); printf("(Nº de comp: %d | Tempo total: %f)\n",numComp, total); - + //TESTE 2 - geraVetorAleatorio(vetor,1000); - printf("\nOrdenando um vetor tam = 1000"); - imprimeVetor(vetor, 1000); + geraVetorAleatorio(vetor,5*tam); + printf("\nOrdenando um vetor tam = 50"); + imprimeVetor(vetor, 5*tam); start = clock();//start recebe o "ciclo" corrente - numComp = insertionSort(vetor,1000); + numComp = insertionSort(vetor,5*tam); end = clock();//end recebe o "ciclo" corrente total = ((double)end - start)/CLOCKS_PER_SEC; - imprimeVetor(vetor, 1000); + imprimeVetor(vetor, 5*tam); printf("(Nº de comp: %d | Tempo total: %f)\n",numComp, total); - + //TESTE 3 - geraVetorAleatorio(vetor,10000); - printf("\nOrdenando um vetor tam = 10000"); - imprimeVetor(vetor, 10000); + geraVetorAleatorio(vetor,10*tam); + printf("\nOrdenando um vetor tam = 100"); + imprimeVetor(vetor, 10*tam); start = clock();//start recebe o "ciclo" corrente - numComp = insertionSort(vetor,10000); + numComp = insertionSort(vetor,10*tam); end = clock();//end recebe o "ciclo" corrente total = ((double)end - start)/CLOCKS_PER_SEC; - imprimeVetor(vetor, 10000); + imprimeVetor(vetor, 10*tam); + printf("(Nº de comp: %d | Tempo total: %f)\n",numComp, total); + + //TESTE 4 + geraVetorAleatorio(vetor,50*tam); + printf("\nOrdenando um vetor tam = 500"); + imprimeVetor(vetor, 50*tam); + start = clock();//start recebe o "ciclo" corrente + numComp = insertionSort(vetor,50*tam); + end = clock();//end recebe o "ciclo" corrente + total = ((double)end - start)/CLOCKS_PER_SEC; + imprimeVetor(vetor, 50*tam); printf("(Nº de comp: %d | Tempo total: %f)\n",numComp, total); printf("\n"); @@ -180,38 +187,49 @@ int main(){ printf("\n--->SELECTION SORT\n"); //TESTE 1 - geraVetorAleatorio(vetor,100); - printf("\nOrdenando um vetor tam = 100"); - imprimeVetor(vetor, 100); + geraVetorAleatorio(vetor,tam); + printf("\nOrdenando um vetor tam = 10"); + imprimeVetor(vetor, tam); start = clock();//start recebe o "ciclo" corrente - numComp = selectionSort(vetor,100); + numComp = selectionSort(vetor,tam); end = clock();//end recebe o "ciclo" corrente total = ((double)end - start)/CLOCKS_PER_SEC; - imprimeVetor(vetor, 100); + imprimeVetor(vetor, tam); printf("(Nº de comp: %d | Tempo total: %f)\n",numComp, total); - + //TESTE 2 - geraVetorAleatorio(vetor,1000); - printf("\nOrdenando um vetor tam = 1000"); - imprimeVetor(vetor, 1000); + geraVetorAleatorio(vetor,5*tam); + printf("\nOrdenando um vetor tam = 50"); + imprimeVetor(vetor, 5*tam); start = clock();//start recebe o "ciclo" corrente - numComp = selectionSort(vetor,1000); + numComp = selectionSort(vetor,5*tam); end = clock();//end recebe o "ciclo" corrente total = ((double)end - start)/CLOCKS_PER_SEC; - imprimeVetor(vetor, 1000); + imprimeVetor(vetor, 5*tam); printf("(Nº de comp: %d | Tempo total: %f)\n",numComp, total); - + //TESTE 3 - geraVetorAleatorio(vetor,10000); - printf("\nOrdenando um vetor tam = 10000"); - imprimeVetor(vetor, 10000); + geraVetorAleatorio(vetor,10*tam); + printf("\nOrdenando um vetor tam = 100"); + imprimeVetor(vetor, 10*tam); + start = clock();//start recebe o "ciclo" corrente + numComp = selectionSort(vetor,10*tam); + end = clock();//end recebe o "ciclo" corrente + total = ((double)end - start)/CLOCKS_PER_SEC; + imprimeVetor(vetor, 10*tam); + printf("(Nº de comp: %d | Tempo total: %f)\n",numComp, total); + + //TESTE 4 + geraVetorAleatorio(vetor,50*tam); + printf("\nOrdenando um vetor tam = 500"); + imprimeVetor(vetor, 50*tam); start = clock();//start recebe o "ciclo" corrente - numComp = selectionSort(vetor,10000); + numComp = selectionSort(vetor,50*tam); end = clock();//end recebe o "ciclo" corrente total = ((double)end - start)/CLOCKS_PER_SEC; - imprimeVetor(vetor, 10000); + imprimeVetor(vetor, 50*tam); printf("(Nº de comp: %d | Tempo total: %f)\n",numComp, total); printf("\n"); @@ -219,84 +237,105 @@ int main(){ printf("\n--->MERGE SORT\n"); //TESTE 1 - geraVetorAleatorio(vetor,100); - printf("\nOrdenando um vetor tam = 100"); - imprimeVetor(vetor, 100); + geraVetorAleatorio(vetor,tam); + printf("\nOrdenando um vetor tam = 10"); + imprimeVetor(vetor, tam); start = clock();//start recebe o "ciclo" corrente - numComp = mergeSort(vetor,100); + numComp = mergeSort(vetor,tam); end = clock();//end recebe o "ciclo" corrente total = ((double)end - start)/CLOCKS_PER_SEC; - imprimeVetor(vetor, 100); + imprimeVetor(vetor, tam); printf("(Nº de comp: %d | Tempo total: %f)\n",numComp, total); - + //TESTE 2 - geraVetorAleatorio(vetor,1000); - printf("\nOrdenando um vetor tam = 1000"); - imprimeVetor(vetor, 1000); + geraVetorAleatorio(vetor,5*tam); + printf("\nOrdenando um vetor tam = 50"); + imprimeVetor(vetor, 5*tam); start = clock();//start recebe o "ciclo" corrente - numComp = mergeSort(vetor,1000); + numComp = mergeSort(vetor,5*tam); end = clock();//end recebe o "ciclo" corrente total = ((double)end - start)/CLOCKS_PER_SEC; - imprimeVetor(vetor, 1000); + imprimeVetor(vetor, 5*tam); printf("(Nº de comp: %d | Tempo total: %f)\n",numComp, total); - + //TESTE 3 - geraVetorAleatorio(vetor,10000); - printf("\nOrdenando um vetor tam = 10000"); - imprimeVetor(vetor, 10000); + geraVetorAleatorio(vetor,10*tam); + printf("\nOrdenando um vetor tam = 100"); + imprimeVetor(vetor, 10*tam); start = clock();//start recebe o "ciclo" corrente - numComp = mergeSort(vetor,10000); + numComp = mergeSort(vetor,10*tam); end = clock();//end recebe o "ciclo" corrente total = ((double)end - start)/CLOCKS_PER_SEC; - imprimeVetor(vetor, 10000); + imprimeVetor(vetor, 10*tam); printf("(Nº de comp: %d | Tempo total: %f)\n",numComp, total); + //TESTE 4 + geraVetorAleatorio(vetor,50*tam); + printf("\nOrdenando um vetor tam = 500"); + imprimeVetor(vetor, 50*tam); + start = clock();//start recebe o "ciclo" corrente + numComp = mergeSort(vetor,50*tam); + end = clock();//end recebe o "ciclo" corrente + total = ((double)end - start)/CLOCKS_PER_SEC; + imprimeVetor(vetor, 50*tam); + printf("(Nº de comp: %d | Tempo total: %f)\n",numComp, total); + printf("\n"); printf("\n--->QUICK SORT\n"); //TESTE 1 - geraVetorAleatorio(vetor,100); - printf("\nOrdenando um vetor tam = 100"); - imprimeVetor(vetor, 100); + geraVetorAleatorio(vetor, tam); + printf("\nOrdenando um vetor tam = 10"); + imprimeVetor(vetor, tam); start = clock();//start recebe o "ciclo" corrente - numComp = quickSort(vetor,100); + numComp = quickSort(vetor, tam); end = clock();//end recebe o "ciclo" corrente total = ((double)end - start)/CLOCKS_PER_SEC; - imprimeVetor(vetor, 100); + imprimeVetor(vetor, tam); printf("(Nº de comp: %d | Tempo total: %f)\n",numComp, total); - + //TESTE 2 - geraVetorAleatorio(vetor,1000); - printf("\nOrdenando um vetor tam = 1000"); - imprimeVetor(vetor, 1000); + geraVetorAleatorio(vetor,5*tam); + printf("\nOrdenando um vetor tam = 50"); + imprimeVetor(vetor, 5*tam); start = clock();//start recebe o "ciclo" corrente - numComp = quickSort(vetor,1000); + numComp = quickSort(vetor,5*tam); end = clock();//end recebe o "ciclo" corrente total = ((double)end - start)/CLOCKS_PER_SEC; - imprimeVetor(vetor, 1000); + imprimeVetor(vetor, 5*tam); printf("(Nº de comp: %d | Tempo total: %f)\n",numComp, total); - - + + //TESTE 3 - geraVetorAleatorio(vetor,10000); - printf("\nOrdenando um vetor tam = 10000"); - imprimeVetor(vetor, 10000); + geraVetorAleatorio(vetor,10*tam); + printf("\nOrdenando um vetor tam = 100"); + imprimeVetor(vetor, 10*tam); start = clock();//start recebe o "ciclo" corrente - numComp = quickSort(vetor,10000); + numComp = quickSort(vetor,10*tam); end = clock();//end recebe o "ciclo" corrente total = ((double)end - start)/CLOCKS_PER_SEC; - imprimeVetor(vetor, 10000); + imprimeVetor(vetor, 10*tam); printf("(Nº de comp: %d | Tempo total: %f)\n",numComp, total); + //TESTE 4 + geraVetorAleatorio(vetor,50*tam); + printf("\nOrdenando um vetor tam = 500"); + imprimeVetor(vetor, 50*tam); + start = clock();//start recebe o "ciclo" corrente + numComp = quickSort(vetor,50*tam); + end = clock();//end recebe o "ciclo" corrente + total = ((double)end - start)/CLOCKS_PER_SEC; + imprimeVetor(vetor, 50*tam); + printf("(Nº de comp: %d | Tempo total: %f)\n",numComp, total); + printf("\n"); //É obrigatório que você libere a memória alocada dinâmicamente via fee free(vetor); - free(vetor1); return 0; } diff --git a/t1/main.o b/t1/main.o index 324e61451b6ea13fa7d561eb207846e763003ac6..74333eb9a7492ad220eaee0324cafd606e7e546b 100644 GIT binary patch literal 14936 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 literal 12888 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 b2m@pvgasi%b4A$nCqUg_0#ODh(e(oWHyS|} diff --git a/t1/makefile b/t1/makefile index 2ed9e7f..9d28825 100644 --- a/t1/makefile +++ b/t1/makefile @@ -1,5 +1,5 @@ parametrosCompilacao=-Wall #-Wshadow -nomePrograma=trab1grr20206873 +nomePrograma=trab all: $(nomePrograma) diff --git a/t1/ordenacao.c b/t1/ordenacao.c index 9ce1ed0..b5a20d1 100644 --- a/t1/ordenacao.c +++ b/t1/ordenacao.c @@ -6,7 +6,7 @@ void getNome(char nome[]){ //substitua por seu nome - strncpy(nome, "Vinicius Fontoura de Abreu", MAX_CHAR_NOME); + strncpy(nome, "Vinicius Fontoura & Carla Capurro", MAX_CHAR_NOME); nome[MAX_CHAR_NOME-1] = '\0';//adicionada terminação manual para caso de overflow } @@ -41,11 +41,14 @@ int buscaSequencial(int vetor[], int tam, int valor, int* numComparacoes){ //usada para processar a busca binaria corretamente int buscaBinariaCompleta(int vetor[], int tam, int inicio, int valor, int* numComparacoes) { int meio; + + //caso base if (inicio > tam) return -1; meio = (tam+inicio)/2; + //confere no meio if (vetor[meio] == valor) { *numComparacoes+=1; return meio; @@ -66,10 +69,12 @@ int buscaBinaria(int vetor[], int tam, int valor, int* numComparacoes){ a = 0; b = tam; meio = tam/2; + //caso base if (a > b) { return -1; } + //confere no meio if (vetor[meio] == valor) { *numComparacoes+=1; return meio; @@ -85,22 +90,52 @@ int buscaBinaria(int vetor[], int tam, int valor, int* numComparacoes){ return buscaBinariaCompleta(vetor,b,meio+1,valor,numComparacoes); } +int busca(int vetor[], int a, int b, int valor, int* numComparacoes) { + int meio; + //caso base + if (a>b) { + if (valor > vetor[a]) { + *numComparacoes+=1; + return a+1; + } + return a; + } + + meio = (a+b)/2; + //confere no meio + if (vetor[meio] == valor) { + *numComparacoes+=1; + return meio+1; + } + + // busca a esquerda + if (vetor[meio] > valor) { + *numComparacoes+=1; + return busca(vetor,a,meio-1,valor,numComparacoes); + } + //busca a direita + *numComparacoes+=1; + return busca(vetor,meio+1,b,valor,numComparacoes); + +} void troca(int vetor[], int a, int b) { int x; x = vetor[a]; vetor[a] = vetor[b]; vetor[b] = x; + //printf("troca de %d com %d\n", vetor[a], vetor[b]); } void insere(int vetor[], int a, int b,int* numComparacoes) { int posicao,i; //busca a posicao correta do ultimo elemento - posicao = buscaSequencial(vetor,b-1,vetor[b],numComparacoes); + posicao = busca(vetor, a, b, vetor[b], numComparacoes); + //printf("a posição correta de %d é no indice %d\n", vetor[b], posicao); i = b; //enquanto o ultimo elemento for maior que o elemento na sua posicao correta - while (i > posicao+1) { + while (i > posicao) { //faz a troca ate chegar na posicao correta troca(vetor,i,i-1); i--; @@ -109,11 +144,11 @@ void insere(int vetor[], int a, int b,int* numComparacoes) { int insertionSortCompleto(int vetor[], int a, int b, int* numComparacoes) { if (a >= b) - return b; + return a; //vai ser chamado ate chegar no vetor de tamanho 1 insertionSortCompleto(vetor,a,b-1,numComparacoes); //insere cada elemento na posicao correta - insere(vetor,a,b,numComparacoes); + insere(vetor,a,b-1,numComparacoes); return *numComparacoes; } @@ -121,11 +156,12 @@ int insertionSortCompleto(int vetor[], int a, int b, int* numComparacoes) { int insertionSort(int vetor[], int tam){ int numComparacoes; numComparacoes = 0; + int a = 0; //caso base - if (0 >= tam) - return tam; + if (a >= tam) + return a; //faz a primeira chamada - insertionSortCompleto(vetor,0,tam,&numComparacoes); + insertionSortCompleto(vetor, a, tam, &numComparacoes); return numComparacoes; } diff --git a/t1/ordenacao.o b/t1/ordenacao.o index 274fefcd09e92e1a11fac79618779b8ff9bfbae3..3c330f3c4de1b12bd427ff85e0a85936f811e7b1 100644 GIT binary patch delta 1797 zcmca%y1;UR29tv1MlEIL$^4AGo}IpTd^%k(bh|#Wc70H1+wJ<qV}?hsNGk&a1A|Am z>kALY3*8Ksu6OFBJi1*kbTjk@FoGDJ0^P1pnh!9(Jk7ws(Czx<<>ASljD`~8AUPC8 zf0_?4zOJ3TfKgJs)&x_wx8na~eI{A)*Lqmw3K%E<XOx`m#Jp69!=t<QMtA6g?$Re9 zS9x~+nEZ{|fbEC1>!13&ll56Nn7_PsnjFO<H#v$$Ve$kPt;vsB11Iw{3QnHD!M<6B z^(w0pLs({BW^!g}v4UHEUP*pwQKEvHf^%X~PNITyVnJz9QT}9ZZe2!(&F0*!jFRe% z3=9med;)Du&b(~Qa*RCe91JoH3=DrJoASsr$uLe1<B?Oc0V!f&V8{lA7ECcy5=bpr zaSY?+eY{eWKk%?H)=b{YBhNGkA+TriR~~uBJCj9u)tOkBCfo7KF{(_C<&|f2nOw^& z&zLfKF0VXe%jUhjw;40Rj$vS6=we`C5Mp3t&}IQy$iPqnp%^AW#pgrCtD)l4q2f}k z5CO0|85kJWLd9F5;yDm$hTW4N@`=}<fy#b_${vBrK7xvGWrGO7bbWw|E3!kxlOYtt zcc^#^RQv@rwEjZHb2uRi`ydnpKO@+8-VDE>5>ZeINr(hP2p2?P1%zTyg^K@yiq}KM z&7tDe+>=iUOkznYEl!>sCAe?0n9w1{uaiFtiPx(_0}4b5fnxPP1Uvx=FfcHHC}eRq zXi$K}g^|=pBZ-S5iB}?tiy(<#frtx%EkM@rdUB(%c>OeJ$f8@b9!XpR$v75h$b!@( zi%TPkizBIbh6XH1y%dsoEJWN1>?~vrJ0TKaad7H~1k?XZIK<ygb`%k>H;2Xt$Qoo_ zen{fTwwy;2M-JW3IK)l4ArTESUk=F|VGwaYuyf^+B=R8=7~-dJh(AOU7oW^4dN>i5 z;}oE2n2CXb0fb>W&H+svmg5r8#9=wE0ZshlWJ59WdRWdnfF=veSr5>}VL6Kf<P@lj zKulQ9(g1Og#9<lB15F&7v9uX7&?I0vs{>8EntSpsv3pF<xhL-uH{+ZEiZliW27}2z z#m$-2c_t@{i%tH(%QD$VLIs)IBcZ~n!2^jqrOB0&@{?~!NN{>VMRX=V<Q1OGBdNkv zhGc@I3R4Bo<RVEs&KXd33nuTBH0L}a1~KQs<e!q}oEH2Lp2TEJDRa&MP}XH&U~rsV VDP_*N0+cft7#K>x=ARMg0RZ%Quu%X2 delta 1544 zcmZ2rdBb#q22+IiMlEIL$t5ha_yxLMAM_Ud_vrS$;nD5-VzL6O0q39Q1B{lgKk9Ey z4rA3|{_xsrawDr8pGUXvi|)`5-KAeVx?O)v-pXns@P&bafuXtf2}3<=x9gMF(vy?9 zY$p3Nb8mKMd%!9cmYJ8CoLO3|;Fh0Pl3!YssF0GX;FwgDS~}U2M|X1t4-4buIlK}~ ze;6ij<CSxiVFa1Rz>o~0T=@jrn4Edpn4);tIT#pZ7#J9Apz^6G@-cAvn8~7i@=P_1 zljZoOCJXSfFwU7A$|ujbXL2c@I@1%z$@BQ+7+EIo<&$SrnS7T|p3!CUUp{%pl+CjI zw;2OVK!!3fFmy36FbFX)GE^`_1gaqv!$hd~XQ(*XkqitB%c0_7ED(iY$1yN4Y@O^V zAYOkAD!Ushdjz70;SN;1o)sdH1ECmRLB(G~#bLI5go^vIK@`4#2E})%xETjTybnS# za592@;mvRaDiH;h5Qa!F$Z<jhRzN5Qd8qg?sCYe8+z=}6$~D<ZXwu|cLVG695I#`9 z3mOU_Z}BrQF#P!s0e6tZg^<KeKnfWc7(kQ=lDHR004gqwBt8#G99jKVh`1KmATcBj z3D5uo$s=1_Ihj#ZobeoptbdB623apJG>kxcC6UZjM-oR?-;5+Kjii1K4)Glj@p`bM zrI0i*LIWFQF|t7tNaDyA&qNYO_T*k1;{TDvWf|fT(WJlyiC&P!a!3xc#34QfhxlqF zak0sJ#SSOJvW)^Xfif{LFn};D+c=<!!?H~Rnm8=OG@yysPktyaUJuJ22he2Evj@m# z5Qb$B4iE?GA`lanJ2XHXBym{o@IVuX<_=+o3^WN>uE~oe?(uGfh6gxwCqI-Dp1eR( zf>Qz%S0JIu2PMs!K5|V~loXpRAf*9g21sdeeuV0jp3EpEKY4+a1QQSU<XuvBOcvY_ z<<c4;rj@iEX9PFMECz;#$&J$HoD!lC-igTvrOi2S@IrVDlNn{qId2F+c-E60Wz0Dr NfRYje149YO3IN82SZ4qL diff --git a/t1/trab b/t1/trab new file mode 100755 index 0000000000000000000000000000000000000000..2c2f2482cccf472f2cd9ee7474170f07893d1485 GIT binary patch literal 26160 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 Xgai$1p(z1N1Vhi^mqOEk#$^BiKQzJ! literal 0 HcmV?d00001 -- GitLab