diff --git a/Quadra.c b/Quadra.c index 221ee1511c8e49b18dc9bc259110a6fb9233838f..b3877f93c6a97d2f0c010261f39c74ef2ebc72eb 100644 --- a/Quadra.c +++ b/Quadra.c @@ -35,8 +35,10 @@ void jogar (int *vet, int *vet_ord, int N) } if (i == 4) printf ("Sucesso!!\n"); - else if (i > 0) + else if (i > 1) printf ("%d valores encontrados!\n", i); + else if (i == 1) + printf ("1 valor encontrado!\n"); else printf ("Nenhum valor encontrado!\n"); } @@ -48,7 +50,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); @@ -69,7 +71,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); for (i = 0; i < 10000; i++) @@ -78,7 +80,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); for (i = 0; i < 10000; i++) @@ -87,7 +89,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); for (i = 0; i < 10000; i++) @@ -96,7 +98,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); } 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 +