Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
CI056 - Trabalho 1
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Harbor Registry
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Matheus Horstmann
CI056 - Trabalho 1
Commits
72729b6b
Commit
72729b6b
authored
9 years ago
by
clm15@inf.ufpr.br
Browse files
Options
Downloads
Patches
Plain Diff
relatorio
Signed-off-by:
Cristopher
<
clm15@inf.ufpr.br
>
parent
e4de54b7
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
Quadra.c
+8
-6
8 additions, 6 deletions
Quadra.c
Relatorio.txt
+39
-0
39 additions, 0 deletions
Relatorio.txt
with
47 additions
and
6 deletions
Quadra.c
+
8
−
6
View file @
72729b6b
...
...
@@ -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
tempoEmMi
li
(
clock_t
inicio
,
clock_t
fim
)
int
tempoEmMi
c
(
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
=
tempoEmMi
li
(
ti
,
tf
);
tt
=
tempoEmMi
c
(
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
=
tempoEmMi
li
(
ti
,
tf
);
tt
=
tempoEmMi
c
(
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
=
tempoEmMi
li
(
ti
,
tf
);
tt
=
tempoEmMi
c
(
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
=
tempoEmMi
li
(
ti
,
tf
);
tt
=
tempoEmMi
c
(
ti
,
tf
);
printf
(
"QuickSort Iterativo: %d micro-segundos
\n
"
,
tt
);
}
...
...
This diff is collapsed.
Click to expand it.
Relatorio.txt
0 → 100644
+
39
−
0
View file @
72729b6b
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
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment