Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Convidado

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

Mensagens Recomendadas

Convidado

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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!

Editado por PsySc0rpi0n
  • Voto 1

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Convidado

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;
}
Editado por Convidado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Convidado
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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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ê ?

  • Voto 1

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Convidado
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. 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Convidado
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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Convidado
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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por HappyHippyHippo

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PsySc0rpi0n

@speak, o @HappyHippyHippo tem razão. Ao fazerem-te o código não te estão a ajudar. Pelo contrário. Estão a alimentar a tua falta de estímulo. 

E eu acabei por não ajudar nada porque pensei que tinhas desistido e postei a minha versão simplificada do código para o problema. 

Já testaste esse código? Funciona? 

 


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Convidado
21 horas atrás, PsySc0rpi0n disse:

@speak, o @HappyHippyHippo tem razão. Ao fazerem-te o código não te estão a ajudar. Pelo contrário. Estão a alimentar a tua falta de estímulo. 

E eu acabei por não ajudar nada porque pensei que tinhas desistido e postei a minha versão simplificada do código para o problema. 

Já testaste esse código? Funciona? 

 

Já está a funcionar 100%

Pelo contrario só queria saber onde era o erro, eu aprendo a ver o códio e como funciona e o que faz

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PsySc0rpi0n
2 hours ago, speak said:

Já está a funcionar 100%

Pelo contrario só queria saber onde era o erro, eu aprendo a ver o códio e como funciona e o que faz

Sim, mas aposto que não foste tu que fizeste esse código. Fizeram-te o código e tu simplesmente aceitaste-o.

E aqui nestes posts, tu nem o mais fácil estavas a fazer, que era ler as mensagens de erro, localizá-los e tentar corrigi-los, quanto mais fazeres o código dessa maneira!


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo
11 hours ago, speak said:

Pelo contrario só queria saber onde era o erro

se tivesses respondido à minha pergunta saberias onde estava o erro


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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PsySc0rpi0n
10 hours ago, HappyHippyHippo said:

se tivesses respondido à minha pergunta saberias onde estava o erro

Até se tivesse lido as mensagens de erro, teria provavelmente descoberto os erros!


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.