Jump to content
Guest

Gerar números aleatórios, filtrar números primos e calcular média

Recommended Posts

Guest

Não consigo desenvolver mais deste ponto.

Objectivo do programa é gerar números 0 - 1000 aleatoriamente e depois somar os números primos e depois fazer a média dos números primos.

void geraNumeros (int * numeros, int tamanho){
	int i;
	srand(time(NULL));
	for(i = 0; i < tamanho; i++){
		numeros[i]= rand()%1001;
	}
	
}
typedef enum {false, true} bool;
bool primo (int numero){
	bool primo = true;
	int i;
	
	if(numero == 0 || numero == 1){
		primo = false;
		return primo;
	}
	
	for(i = 2; i < numero; i++){
		if(numero %i == 0){
			primo = false;
			break;
		}
	}
	return primo;
}

int main(int argc, char *argv[]) {
	int numeros[100];
	int i;
	double soma, media;
	
	geraNumeros(numeros, 100);
	
	for(i = 0; i < 100; i++){
		printf("%d\n", numeros[i]);		
	}
	return 0;
}

Ele neste momento gera os numeros de 0 - 1000 aleatoriamente e acho que a função que fiz para os numeros primos deve funcionar;

Falta agora implementar para que nesses numeros aleatorios ache os primos e imprima  a soma deles e imprima outro com a media dos nrs primos tambem

Share this post


Link to post
Share on other sites
PsySc0rpi0n

Em relação as números primos, em primeiro lugar é necessário saber o que são números primos e como se detectam.

Números primos são números que apenas se dividem por 1 e por eles próprios. Como passar isto para código???? Então quando se diz que um número é divisível por outro, significa que o resto da divisão é 0, certo? Pronto, este é o truque para detectar números primos.

O resto penso que será mais fácil, não?

Edited;

Acho que o que tu estás a fazer é detectar números pares. Não é isso que se pretende! Só reparei no resto do código depois!

Depois também tens que declarar um vector de tamanho suficiente para guardar todos os valores gerados!

De seguida, percorres o vector, verificas se o valor é primo, se for, adicionas a uma variável previamente definida e imprimes essa variável. Guarda também a quantidade de números primos encontrados!

Finalmente, imprime a média da soma dos números primos presentes no vector, usando a variável que contém a quantidade de números primos encontrados!

Edited by PsySc0rpi0n
  • Vote 1

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
PsySc0rpi0n

Fonix, a malta desiste.

Fica a minha sugestão:

#include <stdio.h>

#define MAX 10

int main(void){
   int contador = 0, soma_primos = 0;
   float media_primos = 0.0, quant_primos = 0.0;
   int vector[MAX] = {0};

   for(int i = 0; i < MAX; i++){
      printf(" Insira o %dº valor:\n", i + 1);
      scanf(" %d", &vector[i]);

      //obter o resto da divisão inteira do número actual por todos os números entre 1 e o número actual
      for(int j = 1; j <= vector[i]; j++){
         if(vector[i] % j == 0)
            contador++;
      }

      //se houver apenas 2 números cujos restos das divisões dão 0, então o número actual é primo
      if(contador == 2){
         soma_primos += vector[i];
         quant_primos++;
      }

      //reset ao contador
      contador = 0;
   }

   printf("A soma dos números primos é: %d!\n", soma_primos);
   printf("A média da soma dos números primos é: %.2f\n", media_primos = soma_primos / quant_primos);
   return 0;
}

 


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
Guest

Não infelizmente ainda não consegui, pois ainda não consigo mostrar os valores da soma dos números primos nem a media dos mesmos...

Se me puder ajudar agradecia imenso... 

Neste Momento o código está a assim

@PsySc0rpi0n

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

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void geraNumeros (int * numeros, int tamanho){
	int i;
	srand(time(NULL));
	for(i = 0; i < tamanho; i++){
		numeros[i]= rand()%1001;
	}
	
}

int main(int argc, char *argv[]) {
	int numeros[100], contador = 0, soma_primos = 0, i, j;
	double mediaPrimos = 0, quantPrimos = 0, somaPrimos = 0;
	
	geraNumeros(numeros, 100);
	
	for(i = 0; i < 100; i++){
		printf("%d\n", numeros[i]);		
	}
	
      //obter o resto da divisão inteira do número actual por todos os números entre 1 e o número actual
      for(j = 1; j <= numeros[i]; j++){
         if(numeros[i] % j == 0)
            contador++;
      }

      //se houver apenas 2 números cujos restos das divisões dão 0, então o número actual é primo
      if(contador == 2){
         somaPrimos += 	numeros[i];
         quantPrimos++;
      }

      //reset ao contador
      contador = 0;


   printf("\nA soma dos numeros primos e: %d\n", somaPrimos);
   printf("A media da soma dos numeros primos e: %.2f\n", mediaPrimos = somaPrimos / quantPrimos);
   
	return 0;
}
Edited by Guest

Share this post


Link to post
Share on other sites
HappyHippyHippo

@speak

não vou comentar os algoritmos implementados ou a estrutura do código (só para referência o problema resolvesse com uma dúzia de linhas de código)

 

eu não percebo é quando dizes que não consegues calcular a soma e a média, mas o código apresentado por ti, parece fazer-lo ?!?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Guest
19 horas atrás, HappyHippyHippo disse:

@speak

não vou comentar os algoritmos implementados ou a estrutura do código (só para referência o problema resolvesse com uma dúzia de linhas de código)

 

eu não percebo é quando dizes que não consegues calcular a soma e a média, mas o código apresentado por ti, parece fazer-lo ?!?

@HappyHippyHippo Lá está... eu estou a pedir ajuda para alguma coisa.

Share this post


Link to post
Share on other sites
HappyHippyHippo
28 minutes ago, speak said:

@HappyHippyHippo Lá está... eu estou a pedir ajuda para alguma coisa.

o que estou a questionar é o que "essa coisa realmente é"

ler código só é solução para problemas de sintaxe e nunca problemas de semântica.

onde quero chegar é "se o código que dizes pretender fazer se encontra lá, o que acontece que te diz que não está correcto" ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
HappyHippyHippo

no teu código, estás a ver este comentário ?

//obter o resto da divisão inteira do número actual por todos os números entre 1 e o número actual

qual é o número actual ?

porquê ?

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Guest
1 hora atrás, HappyHippyHippo disse:

no teu código, estás a ver este comentário ?


//obter o resto da divisão inteira do número actual por todos os números entre 1 e o número actual

qual é o número actual ?

porquê ?

supostamente é o numero que ele guardou.

 

Mas pode estar errado

Queria que corrigisses se faz favor. 

Share this post


Link to post
Share on other sites
HappyHippyHippo

vais fazer este exercício, em vez de gerares 100 números, gera dois, agora volta a tentar responser à minha questão

qual o número actual ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Rui Carlos
23 horas atrás, speak disse:

supostamente é o numero que ele guardou.

 

Mas pode estar errado

Assumindo que era efectivamente "o número que ele guardou", havia logo aí o problema de ser só "um", certo?

Share this post


Link to post
Share on other sites
Guest
4 horas atrás, Rui Carlos disse:

Assumindo que era efectivamente "o número que ele guardou", havia logo aí o problema de ser só "um", certo?

certo, o objetivo é correr os 100 numeros e guardar os que são primos

Share this post


Link to post
Share on other sites
PsySc0rpi0n
1 hour ago, speak said:

certo, o objetivo é correr os 100 numeros e guardar os que são primos

 

Eu já me perdi.

Qual é a dúvida neste momento?


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
Rui Carlos
1 hora atrás, speak disse:

certo, o objetivo é correr os 100 numeros e guardar os que são primos

Ou seja, precisas de outro ciclo à volta do que tens.

41 minutos atrás, PsySc0rpi0n disse:

Eu já me perdi.

Qual é a dúvida neste momento?

É o por quê do código desta mensagem não funcionar.

Share this post


Link to post
Share on other sites
PsySc0rpi0n
19 minutes ago, Rui Carlos said:

Ou seja, precisas de outro ciclo à volta do que tens.

É o por quê do código desta mensagem não funcionar.

Ah ok. Eu já não me recordo porque é que fiz um código para 10 valores apenas.

Não me recordo de ter visto no post inicial original, para gerar valores aleatórios entre 0 e 1000.


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
PsySc0rpi0n

@speak, sugestão:

Abusa dos printfs() para fazeres um tracking do valor das variáveis à medida que o programa corre!

Por exemplo, o loop for(...) que usaste para imprimir os valores guardados no vector, serviu para confirmares se os valores aleatórios estavam a ser gerados como esperado, certo?

Então usa o mesmo método para verificar o valor de outras variáveis (ou da mesma) durante o resto do código, nomeadamente onde possas eventualmente desconfiar que algo possa estar mal! Vais acabar por chegar lá!


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
Guest
Em 05/12/2018 às 23:35, PsySc0rpi0n disse:

@speak, sugestão:

Abusa dos printfs() para fazeres um tracking do valor das variáveis à medida que o programa corre!

Por exemplo, o loop for(...) que usaste para imprimir os valores guardados no vector, serviu para confirmares se os valores aleatórios estavam a ser gerados como esperado, certo?

Então usa o mesmo método para verificar o valor de outras variáveis (ou da mesma) durante o resto do código, nomeadamente onde possas eventualmente desconfiar que algo possa estar mal! Vais acabar por chegar lá!

@HappyHippyHippo

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

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
	int i, j, numero, somaP = 0, quantP = 0, primo = 0;
	double mediaP;
	
	srand(time(NULL));
	for (i = 0; i <= 100; i++) {
		numero = rand() % 1000;

		for (j = 2; j < numero; j++)
   		{
   			if (numero % j == 0)
      		{
				primo++;
      		}
		 }

   		if (primo == 0)
   		{
   			quantP++;
   			
   			somaP = somaP + numero; 
      		printf("||= Numero: %d\t~ PRIMO\n", numero);
  		 }
  		else
 		{
   			printf("||= Numero: %d\t~ Nao e' Primo\n", numero);
   			
   			primo = 0;
  		 }
	}
	
	mediaP = (somaP / quantP);
	
	printf("\n||= Nos 100 numeros gerados %d eram primos", quantP);
	printf("\n||= A soma dos numeros primos e: %d", somaP);
	printf("\n||= A media dos numeros primos e: %.2lf", mediaP);
	
	getchar();
	
	return 0;
}

Trabalho feito.

Com ajuda da plataforma stackoverflowpt.

@HappyHippyHippo assim não ajudas ninguém.

PsySc0rpion obrigado pela tua tentativa de ajudar a desenvolver ajudas-te numa parte, continua assim.

Share this post


Link to post
Share on other sites
HappyHippyHippo
6 minutes ago, speak said:

@HappyHippyHippo assim não ajudas ninguém.

de certeza ?

sabes ao menos porque fiz a pergunta que fiz ?

 

existe uma diferença muito significativa entre ajudar e fazer-te o exercício

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.