Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Guilherme Guimarães97

C++ Tempo de execução C++ (RESOLVIDO)

Recommended Posts

Preciso fazer um trabalho que consiste no seguinte, devo criar um programa pra calcular numeros primos utilizando dois metodos diferentes, calcular o tempo de execução de cada um e imprimir os resultados em um arquivo de texto, o arquivo ta sendo criado, porém dentro do arquivo não tem nada. E so ta fazendo os calculos do metodo 1, 

Meu codigo:

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

main() {
    clock_t tempo_inicial, tempo_final;
    double t1, t2;
    long i, X;
    int  y, j, ehPrimo, r, w;
    
                        int div;
                    
                        int g;
    
    FILE *arq;
    
    arq = fopen("arquivo.txt", "w");
    if(arq != NULL){
        X = 10000;
        
        //metodo 1...
        tempo_inicial = clock();
        //codigo metodo 1
                        printf("\n");
                    
                    y = 2;
                    
                    while(y < X)
                    {
                            ehPrimo = 1;
                            
                            j = 2;
                            r = (int)sqrt(y);
                            
                            while (j <= r)
                            {
                                if (y % j == 0)
                                {
                                    ehPrimo = 0;
                                    break;
                                }
                                j++;
                            }
                            if (ehPrimo == 1)
                            {
                                printf("%d ", y);
                            }
                            y++;
                    }
                    printf("\n");
                    return 0;
        tempo_final = clock();
        t1 = (tempo_final - tempo_inicial)/(double)CLOCKS_PER_SEC;
        
        
        //METODO 2...
        tempo_inicial = clock();
        //codigo metodo 2...
                            printf("\n");
                    
                    
                        w = 1;
                    
                        while (w < X)
                        {
                            div = 0;
                    
                            g = 1;
                    
                            while (g <= w)
                            {
                                if (w % g == 0)
                                {
                                    div = div + 1;
                                }
                                g = g + 1;
                            }
                    
                            if (div == 2 && w > 1)
                            {
                                printf("%d ", w);
                            }
                            w = w + 1;
                        }
                    
                        printf("\n");
                    
                        return 0;
        tempo_final = clock();
        t2 = (tempo_final - tempo_inicial)/(double)CLOCKS_PER_SEC;
        
        fprintf(arq, "%d %f %f\n", X, t1, t2);
    
    }else{
        printf("erro...");
    }
}

 


    (Ja consegui, mas nao sei como deletar um topico kk)

Editado por Guilherme Guimarães97
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, Guilherme Guimarães97 disse:

 w = 1;
                    
                        while (w < X)
                        {
                            div = 0;
                    
                            g = 1;
                    
                            while (g <= w)
                            {
                                if (w % g == 0)
                                {
                                    div = div + 1;
                                }
                                g = g + 1;
                            }
                    
                            if (div == 2 && w > 1)
                            {
                                printf("%d ", w);
                            }
                            w = w + 1;
                        }

Poderia me explicar o que isso faz ? 

 

adicionado 9 minutos depois

Eu confesso que tive alguma dificuldade de entender o código.


Aí eu fiz esse aqui para inspirar você. Dá uma olhada. (Não tem a parte de escrever em arquivo)
 

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

int primofast(int numero) {
	if (numero == 2)
		return 1;
	if (numero % 2) {
		for (int i = 3; i < numero / i + 1; i += 2) {
			if (numero % i == 0)
				return 0;
		}
		return 1;
	}
}

int ehprimo(int numero) {
  int limite = (int)sqrt(numero);
	for (int i = 2; limite ; i++) {
		if (numero % i == 0)
			return 0;
	}
	return 1;
}

int coisa() {
	int w = 1, g, div ;
	while (w < 10000 ) {
		div = 0;
		g = 1;
		while (g <= w) {
			if (w % g == 0) {
				div = div + 1;
			}
			g = g + 1;
		}
		if (div == 2 && w > 1) {
		}
		w = w + 1;
	}
}


int main(void) {
	clock_t tempo_inicial, tempo_final;
	int x;
	printf("Começou\n");
	tempo_inicial = clock();
	for (int i = 1; i < 10000; i++) {
		for (int j = 2; j < 1000; j++)
			x = primofast(j);
	}
	tempo_final = clock();
	printf("%f\n", (tempo_final - tempo_inicial) / (double)CLOCKS_PER_SEC);

	printf("Começou\n");
	tempo_inicial = clock();
	for (int i = 1; i < 10000; i++) {
		for (int j = 2; j < 1000; j++)
			x = ehprimo(j);
	}
	tempo_final = clock();
	printf("%f\n", (tempo_final - tempo_inicial) / (double)CLOCKS_PER_SEC);

	return 0;
}

 

adicionado 13 minutos depois


Você pode tentar algo assim 

3 horas atrás, Guilherme Guimarães97 disse:

 r = (int)sqrt(y);

você poderia trocar no loop por 

while ( j < (y/j) )  ... experimenta e diz pra gente se ficou mais rápido.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×