Ir ao conteúdo

Posts recomendados

Postado

Oi, o meu professor pediu para que usássemos a biblioteca time.h, mas eu nunca usei e não faço ideia como usar, pesquisei e só encontrei em vetores e outros exemplos no qual não me ajudou. Queria saber como implementar ela em Struct e colocar no Bubble Sort(Preciso comparar o tempo de execução). 

  • Curtir 1
Postado
7 horas atrás, Marco Antônio Braga Sacram disse:

o meu professor pediu para que usássemos a biblioteca time.h, mas eu nunca usei e não faço ideia como usar, pesquisei e só encontrei em vetores e outros exemplos no qual não me ajudou. 

 

Seu professor não fez aquilo que ele devia fazer, ensinar? Não deu nenhum detalhe, nada?

O que você encontrou em vetores?

 

7 horas atrás, Marco Antônio Braga Sacram disse:

Queria saber como implementar ela em Struct

 

Você não vai implementar. Já é uma biblioteca. As funções estão lá. Apenas use o #include e chame as funções.

 

Esta usando Windows ou Unix/Linux/Mac? 
 

Vai programar em C++ como marcou no tópico?

 

Num exercício de adivinhação, imagino que seu professor apenas queira que você use funções e estruturas declaradas em time.h para medir os tempos de execução do sort

 

Windows

 

Pode usar clock() que devolve o tempo desde o início do processo, em unidades de CLOCKS_PER_SEC. É o mais simples.

	clock_t antes = clock();
...
    clock_t agora = clock();

E aí para saber o tempo em segundos divida o valor por essa constante: (agora-antes) / CLOCKS_PER_SEC 

 

Ou ainda se estiver usando windows, use a estrutura timespec que é isso

    struct timespec
    {
        time_t tv_sec;  // Seconds - >= 0
        long   tv_nsec; // Nanoseconds - [0, 999999999]
    };

e as rotinas como timespec_get() documentada em https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1?view=vs-2019

 

Declaradas assim

int timespec_get(
    struct timespec* const time_spec,
    int const base
);
int _timespec32_get(
    struct _timespec32* const time_spec,
    int const base
);
int _timespec64_get(
    struct _timespec64* const time_spec,
    int const base
);

 

Se usa Windows, considere usar a documentação da Microsoft, que eu acho muito boa. 

 

Sobre as rotinas de tempo a documentação está em https://docs.microsoft.com/en-us/cpp/c-runtime-library/time-management?view=vs-2019 e acho muito bem escrita. E você pode baixar um PDF.

 

E vi agora https://docs.microsoft.com/pt-br/cpp/c-runtime-library/time-management?view=vs-2019 que tem em português do Brasil esse tópico

 

Importante MESMO
 

Esse tema em Windows/Unix/C/C++ é um inferno porque aqui o Windows e o Unix diferem e algumas estruturas são o diabo para portar de uma plataforma para outra. Espere problemas se vai portar algo de um sistema para outro. E se vai escrever pros dois simplesmente recomendo esquecer e escrever duas versões.

 

Mais ainda: se usa o compilador gcc em Windows pode ter os mesmos problemas. A ponto de ser melhor, se usa Windows e bater com algum problema, simplesmente instalar o compilador da Microsoft e escrever seu programa, gerar o EXE e esquecer o assunto. Believe me.

 

 

 

 

 

Postado

@arfneto Boa noite, obrigado pela resposta. Primeiramente peço desculpas por não ter sido muito claro. 

Pois é, o professor não explicou nada, absolutamente nada kkkk. Uso windows, e sim é no Dev C++.

Obrigado pelos links, estou lendo e até fiz o código (mais ou menos), mas o resultado continua dando 0,00000000 (botei %.8f) para ver se achava algum número, mas nada...

Acredito que tenha mais coisas para fazer, mas se pudesse ver meu código agradeceria.

Segue abaixo:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

struct cadastro{	 
	int cod;
	struct cadastro *prox, *ant;
};

typedef struct cadastro cadastro;
int opcao;

void bubblesort(cadastro *lista);
void selectionsort(cadastro *lista);
void quicksort(cadastro *lista);
void insertionsort(cadastro *lista);


main()
{
	cadastro *lista = (cadastro*) malloc(sizeof(cadastro));
	if(!lista){
		printf("\nErro.\n");
		exit(1);
	}else
	{
		lista->cod = 0;
		lista->prox = NULL;
		lista->ant = NULL;
	}	
	
	do
	{
		printf("\nMenu de Selecao\n");
		printf("\n1 - Insercao.");
		printf("\n2 - Imprimir lista de clientes.");
		printf("\n3 - Bubble Sort.");
		printf("\n4 - Selection Sort.");	
		printf("\n5 - Quick Sort.");
		printf("\n6 - Insertion Sort.");
		printf("\n7 - Sair do programa de cadastro.");
		printf("\nEscolha uma das opções acima (1 a 7): ");						
		scanf("%i", &opcao);
		system("cls");	
		switch(opcao)
		{
			case 1:
				{
					cadastro *inser = (cadastro*) malloc(sizeof(cadastro));
					cadastro *temp;
					if(!inser)
					{
						printf("\nErro.\n");
						exit(0);
					}					
					inser->prox = NULL;
					inser->ant = NULL;	
					printf("Digite um numero: ");
					scanf("%i", &inser->cod);			
									
					if(lista->prox == NULL)
					{
						lista->prox = inser;
						inser->ant = lista;
						inser->prox = lista;
						lista->ant = inser;
					}
					else
					{
						temp = lista->prox;						
						while(temp->prox != lista)
						{
							temp = temp->prox;	
						}
						temp->prox = inser;
						inser->ant = temp;
						inser->prox = lista;
						lista->ant = inser;
					}
					system("cls");					
					break;
				}
			case 2:
				{
					cadastro *temp;
					temp = lista;
					if(lista->prox == NULL)
					{	
						printf("\nErro. Nao ha registro nos arquivos.\n\n");					
					}
					else
					{
						while(temp->prox != lista)
						{	
							temp = temp->prox;										
							printf("\nNumero: %i\n", temp->cod);						
						}						
					}							
					break;
				}
			case 3:
				{
					bubblesort(lista);
					break;
				}
			case 4:
				{
					selectionsort(lista);
					break;
				}
			case 5:
				{
					
					break;
				}
			case 6:
				{
					insertionsort(lista);
					break;
				}			
		}
	}while(opcao != 7);			
}

void bubblesort(cadastro *lista)
{
	cadastro *temp, *aux, *comp;
	temp = lista;
	aux = lista;
	comp = lista;
	float tempo;
	clock_t antes = clock();
	
	if(lista->prox == NULL)
	{
		printf("\nErro. Nao ha registro nos arquivos.\n\n");					
	}else
	{
		while(comp->prox != lista)
		{
			if(temp->prox == lista)
			{
				temp = lista->prox;
				aux = temp->prox;
			}else
			{
				temp = temp->prox;
				aux = temp->prox;								
			}
			
			if(temp->cod > aux->cod)
			{
				temp->ant->prox = aux;
				aux->ant = temp->ant;								
				temp->ant = aux;
				aux->prox->ant = temp;																	
				temp->prox = aux->prox;							
				aux->prox = temp;
				comp = temp->ant;
				temp = lista;
				aux = lista;
				while(comp->ant != lista)
				{
					comp = comp->ant;
				}																		
			}else
			{
				comp = comp->prox;				
			}
		}
	}
	clock_t depois = clock();
	
	tempo = (depois - antes)/ CLOCKS_PER_SEC;
	printf("Tempo gasto: %.8f", tempo);	
	printf("\nRegistros ordenados.");			
}

void selectionsort(cadastro *lista)
{
	cadastro *temp, *ref, *menor, *aux;
	ref = lista->prox;
	menor = ref;
	temp = ref->prox;
	if(lista->prox == NULL)
	{
		printf("\nErro. Nao ha registro nos arquivos.\n\n");	
	}else
	{
		while(ref->prox != lista)
		{
			while(temp != lista)
			{
				if(menor->cod > temp->cod)
				{
					menor = temp;
					temp = temp->prox;
				}else
				{
					temp = temp->prox;
				}
			}
			
			if(menor == ref)
			{
				ref = ref->prox;
				menor = ref;
				temp = ref->prox;
			}else
			{
				aux = menor->prox;
				if(menor->ant != ref) 
				{
					temp = menor->ant;
					ref->ant->prox = menor;
					menor->ant = ref->ant;						
					ref->ant = temp;	
					ref->prox->ant = menor;
					menor->prox = ref->prox;
					temp->prox = ref;
					ref->prox = aux;
					aux->ant = ref;		
				}else
				{
					temp = ref->ant;									
					ref->prox = aux;									
					temp->prox = menor;										
					ref->ant = menor;
					menor->ant = temp;
					menor->prox = ref;
					aux->ant = ref;
				}		
				
				ref = menor->prox;
				menor = ref;
				temp = ref->prox;	
				aux = lista;									
			}
		}
		printf("Lista ordenada.");		
	}	
}

void insertionsort(cadastro *lista)
{
	cadastro *temp, *ref, *aux;
	ref = lista->prox;
	temp = ref->prox; 
	if(lista->prox == NULL)
	{
		printf("\nErro. Nao ha registro nos arquivos.\n\n");	
	}else
	{
		while(ref->prox != lista)
		{
			if(ref->cod > temp->cod)
			{
				temp->ant = ref->ant;
				ref->ant->prox = temp;
				ref->ant = temp;
				temp->prox->ant = ref;									
				ref->prox = temp->prox;
				temp->prox = ref;
				while(temp->ant != lista)
				{
					if(temp->cod < temp->ant->cod)
					{
						aux = temp->ant;
						temp->ant = aux->ant;											
						aux->ant->prox = temp;
						aux->ant = temp;
						temp->prox->ant = aux;
						aux->prox = temp->prox;
						temp->prox = aux;
					}else
					{
						temp = temp->ant;
					}
				}
				temp = ref->prox;
			}else
			{
				ref = ref->prox;
				temp = temp->prox;
			}
		}
		printf("Lista Ordenada.");
	}	
}

 

Postado
agora, Marco Antônio Braga Sacram disse:

@arfneto Boa noite, obrigado pela resposta. Primeiramente peço desculpas por não ter sido muito claro. 

Pois é, o professor não explicou nada, absolutamente nada kkkk. Uso windows, e sim é no Dev C++.

Obrigado pelos links, estou lendo e até fiz o código (mais ou menos), mas o resultado continua dando 0,00000000 (botei %.8f) para ver se achava algum número, mas nada...

 

Acho que sabe que não sei de que resultado está falando...

 

Leu até o final o que eu escrevi? Inclusive a parte sobre o gcc? ;) 

Postado

Esse IDE que você usa, Dev-C++, não tem um compilador. É só uma capa em torno de um compilador e de de um debugger, ou de vários deles e outras ferramentas também.

 

gcc é o compilador C padrão do Linux mas esse Dev-C++ instala uma versão para Windows desse tal gcc. E em geral pode usar perfeitamente para escrever programas para Windows e pro Linux/Unix/MacOS.

 

A Microsoft, que escreveu o Windows, tem seu próprio compilador. E em alguns poucos casos um iniciante pode bater em alguma diferença entre esses compiladores. 

 

E essas estruturas em torno de time.h são exemplo disso.

 

Como você não postou qualquer código, entenda que por isso disse que não sei do que você está falando quando cita %.8f por exemplo...

 

Postado
//https://pt.wikipedia.org/wiki/Time.h
#include <stdio.h>
#include <windows.h>
#include <time.h>

int main () {
   time_t start_t, end_t;
   double diff_t;

   printf("Starting of the program...\n");
   time(&start_t);

   printf("Sleeping for 5 seconds...\n");
   Sleep(5000);

   time(&end_t);
   diff_t = difftime(end_t, start_t);

   printf("Execution time = %f\n", diff_t);
   printf("Exiting of the program...\n");

   return(0);
}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!