Ir ao conteúdo

Posts recomendados

Postado

Galera eu to começando a aprender pascal e to com um problema aqui em uma questão de um trabalho. Eu precisaria fazer a  conjectura de Goldbach onde 2 números primos somados poderia dar um número par maior que 4, porém meu codigo está fazendo a soma de dois números pares em vez de números primos. Eu sei que tem muitas coisas erradas ai, o problema é que eu não sei onde estão kkk

Program Pzim ;
uses crt;
var 
		num,num1, num3, num4, cont, cont2, cont3, num2, i:Integer; 
Begin
cont:= 0;
cont2:=0;
cont3:=0;
clrscr; 
write('Digite um número par entre [4, 1000]: ');
readln(num);
	if (num < 4 ) then 
	begin 
		writeln('O número digitado deve ser maior que 4! ');
	end
else
	if (num > 1000 ) then 
	begin 
 		writeln('O número digitado deve ser menor que 1000! ');
  end
else
	if ((num mod 2) <> 0 ) then 
	begin 
		writeln('O número digitado deve ser Par! ');
  end;
		for i:=2 to (num div 2) do
		begin
			num1:= i;
			num2:= num - i;
			if (num1 mod 2 <> 0) and (num2 mod 2 <> 0) then
			begin
				 for i:=1 to num1 do                         
				 begin
				 	if (num1 mod i = 0) then
				 	cont:= cont + 1;
				 end;
         	if (cont = 2) then
         	num3:= num1;
         	
				 for i:=1 to num2 do
				 begin
				 	if (num2 mod i = 0) then
				 	cont2:= cont2 + 1;
         	if (cont2 = 2) then
         	num4:= num2;
				 end;
					if (num3 + num4 = num) then
					writeln(num3,'+',num4);
			end;
		end;		               
End.

 

  • Amei 1
  • Membro VIP
Postado
  Em 01/06/2020 às 23:12, FredonVendrusk disse:

Eu precisaria fazer a conjectura de Goldbach onde 2 números primos somados poderia dar um número par maior que 4

Expandir  

 

@FredonVendrusk, matematicamente toda e qualquer soma de 2 números primos vai dar par, afinal praticamente 100% dos primos são ímpares!!! A única exceção será a soma do 2 com outro primo qualquer (diferente de 2)... Veja: até 2 + 2 dá par!, ou seja: das infinitas possibilidades, apenas pode não dar certo se tiver o 2 envolvido... no resto, sempre será par.

 

Outro ponto é: a conjectura já está feita, não precisa novamente 😅. O problema todo está em demonstrar se a conjectura é verdadeira ou não...

 

 

 

  Em 01/06/2020 às 23:12, FredonVendrusk disse:

porém meu código está fazendo a soma de dois números pares em vez de números primos

Expandir  

 

Testei o código e na verdade ele está somando número ímpares... "apenas" nem sempre são ímpares...

 

 

Mas vamos lá:

 

Sempre mantenha o código bem identado. Só de identar, já aparece um erro:

Program Pzim ;
uses
  CRT;
var 
	num, num1, num2, num3, num4,
	cont, cont2, cont3, i :integer; 

begin
cont:= 0;
cont2:=0;
cont3:=0;
clrscr; 
write('Digite um número par entre [4, 1000]: ');
readln(num);
if (num < 4 ) then 
begin 
	writeln('O número digitado deve ser maior que 4! ');
end
else
	if (num > 1000 ) then 
	begin 
		writeln('O número digitado deve ser menor que 1000! ');
	end
else
	if ((num mod 2) <> 0 ) then 
	begin 
		writeln('O número digitado deve ser Par! ');
	end;
for i:=2 to (num div 2) do
begin
	num1:= i;
	num2:= num - i;
	if (num1 mod 2 <> 0) and (num2 mod 2 <> 0) then
	begin
		for i:=1 to num1 do                         
		begin
			if (num1 mod i = 0) then
			cont:= cont + 1;
		end;
		if (cont = 2) then
			num3:= num1;

		for i:=1 to num2 do
		begin
			if (num2 mod i = 0) then
				cont2:= cont2 + 1;
			if (cont2 = 2) then
				num4:= num2;
		end;
	
		if (num3 + num4 = num) then
			writeln(num3,'+',num4);
		end;
	end;		               
end.

 

Ali no último for, você colocou o segundo if dentro, mas deveria ficar fora. Assim como está na verificação do num1.

		for i:=1 to num2 do
		begin
			if (num2 mod i = 0) then
				cont2 := cont2 + 1;
		end;
		if (cont2 = 2) then
			num4 := num2;

 

 

Outro ponto que você está utilizando a mesma variável para o 3 for... não poderia, pois os 2 últimos está dentro do primeiro, ou seja: está sobrepondo o controle da variável... no compilador Free Pascal o código nem compila. Deixe o primeiro for com a variável i mesmo e os 2 últimos for com j, em vez de i.

 

Por aí vai...

 

Faça esses 2 ajustes iniciais, depois dê uma revisada para tentar fazer os outros ajustes.

 

PS: por favor, poste logo também o enunciado completo para analisarmos melhor.

 

  • Curtir 1
Postado

@Simon Viegas Olá, desculpa a demora. Eu fiz os ajustes que você disse, troquei os I's que estavam no For, por j, k. agora o programa n me retorna nem um valor. Desculpe eu escrevi errado aquela hr, queria dizer que ele estava me retornando numeros IMPARES, mas falei PAR. Veja como está agr:

Program Pzim ;
uses
  CRT;
var 
	j, num, num1, num2, num3, num4,
	k, cont, cont2, cont3, i :integer; 

begin
cont:= 0;
cont2:=0;
cont3:=0;
clrscr; 
write('Digite um número par entre [4, 1000]: ');
readln(num);
if (num < 4 ) then 
begin 
	writeln('O número digitado deve ser maior que 4! ');
end
else
	if (num > 1000 ) then 
	begin 
		writeln('O número digitado deve ser menor que 1000! ');
	end
else
	if ((num mod 2) <> 0 ) then 
	begin 
		writeln('O número digitado deve ser Par! ');
	end;
	for i:=2 to (num div 2) do
	begin
		num1:= i;
		num2:= num - i;
		if (num1 mod 2 <> 0) and (num2 mod 2 <> 0) then
		begin
			for j:=1 to num1 do                         
			begin
				if (num1 mod j = 0) then
				cont:= cont + 1;
			end;
			if (cont = 2) then
				num3:= num1;
			for k:=1 to num2 do
			begin
				if (num2 mod k = 0) then
					cont2 := cont2 + 1;
			end;
			if (cont2 = 2) then
				num4 := num2;
			if (num3 + num4 = num) then
				writeln(num3,'+',num4);
		end;
	end;		               
end.

 

adicionado 1 minuto depois

O enunciado é esse aqui: 

 

 

Sem título3.png

  • Curtir 1
  • Membro VIP
Postado

@FredonVendrusk, o ponto que eu tento sempre levantar é: se atente ao problema, e não a solução.

 

Vamos lá:

  1. O enunciado diz que 1 é primo. Você não o está considerando o que ele diz;
  2. O enunciado diz que a Conjectura de Goldbach é apenas para pares maiores que 4. Aqui você está considerando.

Então... estou pressupondo que 1 não é primo (já faz mais de um século); assim como a Conjectura de Goldbach é para pares acima de 2, e não de 4... Ou seja: OU você considera apenas o enunciado, OU você apenas considera as definições reais. Não é interessante misturar.  (Ou me corrija se estiver engano, é claro.)

 

 

Sobre o código:

  1. Você alinhou o primeiro for como se tivesse dentro do else, mas ele não está! OU corrija a identação, OU corrija o lógica do código;
  2. Você esqueceu de ficar zerando os valores contcont2.
  3. Por aí vai.
adicionado 5 minutos depois

Sobre números primos:

 

 

Obs.: não! Ele não é meu parente (pode até ser. Eu não sei, mas de qualquer forma é afastado, rs)

 

 

 

Sobre a Conjectura de Goldbach (e sobre conjecturas em geral):

 

 

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...