diff --git a/Quadra.c b/Quadra.c index aefaccb21efa13b665ff1e55819214a39deec570..e0da21d1f9d96087be5ff84d8190e110bc82735b 100644 --- a/Quadra.c +++ b/Quadra.c @@ -41,9 +41,12 @@ void jogar (int *vet, int *vet_ord, int N) if (i == 4) printf ("Sucesso!!\n"); fprintf(log,"Sucesso! Os numero inseridos estao contidos no vetor\n"); - else if (i > 0) + else if (i > 1) printf ("%d valores encontrados!\n", i); - fprintf(log,"nem todos oss numero inseridos estao contidos no vetor\n"); + fprintf (log,"%d valores encontrados!\n", i); + else if (i == 1) + printf ("1 valor encontrado!\n"); + fprintf (log,"1 valor encontrado!\n"); else printf ("Nenhum valor encontrado!\n"); fprintf (log,"Nenhum valor encontrado!\n"); @@ -56,7 +59,7 @@ void vetcpy (int *v1, int *v2, int N) v2[i] = v1[i]; } -int tempoEmMili(clock_t inicio, clock_t fim) +int tempoEmMic(clock_t inicio, clock_t fim) { double tt; tt = (((fim-inicio)*1000000)/CLOCKS_PER_SEC); @@ -77,7 +80,7 @@ void jornada(int Tam, int max) for (i = 0; i < 10000; i++) SelectSort(mat_ord[i], Tam); tf = clock(); - tt = tempoEmMili(ti,tf); + tt = tempoEmMic(ti,tf); printf("SelectSort: %d micro-segundos\n", tt); fprintf(log,"SelectSort: %d micro-segundos\n", tt); @@ -87,7 +90,7 @@ void jornada(int Tam, int max) for (i = 0; i < 10000; i++) BubbleSort(mat_ord[i], Tam); tf = clock(); - tt = tempoEmMili(ti,tf); + tt = tempoEmMic(ti,tf); printf("BubbleSort: %d micro-segundos\n", tt); fprintf(log,"BubbleSort: %d micro-segundos\n", tt); @@ -97,7 +100,7 @@ void jornada(int Tam, int max) for (i = 0; i < 10000; i++) QuickSort_rec(mat_ord[i], 1, Tam); tf = clock(); - tt = tempoEmMili(ti,tf); + tt = tempoEmMic(ti,tf); printf("QuickSort Recursivo: %d micro-segundos\n", tt); fprintf(log,"QuickSort Recursivo: %d micro-segundos\n", tt); @@ -107,7 +110,7 @@ void jornada(int Tam, int max) for (i = 0; i < 10000; i++) QuickSort_it(mat_ord[i], Tam); tf = clock(); - tt = tempoEmMili(ti,tf); + tt = tempoEmMic(ti,tf); printf("QuickSort Iterativo: %d micro-segundos\n", tt); fprintf(log,"QuickSort Iterativo: %d micro-segundos\n", tt); } diff --git a/Relatorio.txt b/Relatorio.txt new file mode 100644 index 0000000000000000000000000000000000000000..da29ac038c8be93fcfa3483876fffc482ccff67a --- /dev/null +++ b/Relatorio.txt @@ -0,0 +1,39 @@ +Uma das primeiras coisas que fizemos foi a biblioteca busca.h +A principio implementamos os dois tipos de buscas necessários +pesqseq e pesqbin +Como pesqbin só pode ser utilizada em vetores ordenados, colocamos +na mesma biblioteca os algoritmos de ordenacao +O algoritmo para encontrar a mediana foi mais complicado do que parecia a principio +Isso ocorreu porque tentamos fazer o algoritmo usando menos condicionais + +Ocorreram varios problemas na particao: na primeira versao do algoritmo, se +a mediana nao fosse o primeiro elemento da esquerda, por algum motivo alguns valores ficavam no lugar errado +na segunda versao novamente tivemos problemas com valores ficando no lugar errado, +dessa vez descobrimos ser um problema com a escolha de índices para i +Ambos os quicksorts foram simplese de fazer, assim que a particao ficou certa + +Um dos maiores problemas encontrados no programa principal foi com o tratamento de vetores +Por algum motivo, ainda desconhecido por nós, se alocavamos memoria +para o vetor dentro de uma funcao (por exemplo na vetSort), seus valores voltavam para a o main() +com lixo na memoria, ao inves dos valores atribuidos a eles, e em algum momento +tinhamos uma falha de segmentacao. +Demoramos muito para encontrar esse erro, tivemos que fazer varios testes +com vetores nao dinamicamente alocados, ate que por fim, descobrimos que +se alocavamos memoria para o vetor no proprio main(), os valores dentro das funcoes +alteravam os valores do vetor em main() normalmente. + +O problema com a alocacao de memoria para o vetor foi tao grande que chegamos a pensar que o problema estava +em outras funcoes que nao eram a real fonte do problema. +Contudo, foi assim tambem que pudemos perceber que havia um problema +com a primeira versao da particao. + +A biblioteca time.h foi necessária para ter numeors randomicos, utilizando como sementes (seeds) o proprio tempo da maquina +Mais tarde pudemos utiliza-la tambem para contarmos, efetivamente, o tempo passado no uso das 10 mil ordenacoes +CLOCKS_PER_SEC no divisor, dentro da funcao tempoEmMic, serve para transformar os clocks em segundos +porem, em segundos possivelmente nao teriamos grande diferenca de tempo, portanto multiplicamos por +1000000 para obter MicroSegundos + +No jogar() decidimos usar ambas as pesquisas para procurar os valores dados pelo jogador +pelo motivo de simplesmente dar uso a ambas as pesquisas (e mostrar que ambas funcionam normalmente) +A parte de impressao é simples e tem apenas funcao de mostrar ao usuario, de forma direta, o resultado +