AprendizC 0 Denunciar post Postado Novembro 17, 2008 Bom dia Pessoal, Novo exercício nova dúvida, se alguém puder me ajudar eu agradeço. Meu SO é o Windows XP e meu Compilador é o DEV C++ 4.9.9.2. Aqui está o problema: Função que receba como parâmetro um número inteiro e retorne o maior número primo existente entre 1 e este número. Segue o que eu já tentei fazer: #include <stdio.h> #include <stdlib.h> int Primo(int n){ int i=1,j=1, cont =0, primo; for(i; i<=n; i++) for(j; j<=n; j++) if(i%j ==0){ cont =cont+1; if(cont <=2) primo=i; } n=primo; } int main(){ int num, P; printf("Digite um numero:"); scanf("%d",&num); P =Primo(num); printf("\n\n"); printf("O maior numero Primo entre 1 e %d",P); printf("\n\n"); system("PAUSE"); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 17, 2008 int i,j; int maior = 2; for(i=2; i<=n; i++) { for(j=2; j<i; j++) if(i%j == 0) break; if (j==i && i > maior) maior = i; } return maior; Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Novembro 17, 2008 Nunca faça isto: for(i; i<=n; i++) for(j; j<=n; j++) Inicie as variáveis. No caso do "i", funciona (apesar de ser feio :P ), mas o "j", não. Na primeira execução do loop com o "i", j vai até (n+1). Na segunda execução do loop "i", "j" está com o antigo valor (n+1) e não é executado. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 17, 2008 Inicie as variáveis. Ele iniciou. Dá uma olhada no início. Uma coisa que dá p/ tirar (mas não fiz antes porque senão vai encher de nego procurando maior sem fazer comparação em outros casos também) é o i > maior e maior = 2: como o maior primo entre 1 e 2, inclusive é 2, se você possui um intervalo maior e o número for primo, então ele é maior ou igual a 2. E o if fica if (i == j) maior = i; Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Novembro 17, 2008 Inicie as variáveis. Ele iniciou. Dá uma olhada no início. Sim. Eu vi.Escrevi rápido e me expressei mal. O que eu quis explicitar é que o loop com "j" não seria executado o número de vezes desejado, já que essa variável não estava sendo iniciada a cada execução do loop principal ("i"). Compartilhar este post Link para o post Compartilhar em outros sites
AprendizC 0 Denunciar post Postado Novembro 17, 2008 http://forum.imasters.com.br/public/style_emoticons/default/blush.gif Obrigado pelas as ajudas até agora, mas ainda não consegui fazer rodar não. Compartilhar este post Link para o post Compartilhar em outros sites
AprendizC 0 Denunciar post Postado Novembro 17, 2008 :wacko: Estou tentando outra maneira de incrementar o j, mas dessa maneira que eu fiz o resultado não tem nada haver, podem me orientar então em como incrementar o j ? int Primo(int n){ int i=1,j=0, cont =0, primo; for(i; i<=n; i++) j++; if(i%j ==0){ cont =cont+1; if(cont <=2) primo=i; } return primo; } Compartilhar este post Link para o post Compartilhar em outros sites
AprendizC 0 Denunciar post Postado Novembro 17, 2008 http://forum.imasters.com.br/public/style_emoticons/default/grin.gif Opss ! Não tinha prestado atenção suficiente no comentário do Java.Isis. Conforme a orientação dele, meu código ficou assim: #include <stdio.h> #include <stdlib.h> int Primo(int n) { int i,j; int maior = 2; for(i=2; i<=n; i++) { for(j=2; j<i; j++) if(i%j == 0) break; if (j==i && i > maior) maior = i; } return maior; } int main(){ int num, P; printf("Digite um numero:"); scanf("%d",&num); P =Primo(num); printf("\n\n"); printf("O maior numero Primo entre 1 e %d = %d",num,P); printf("\n\n"); system("PAUSE"); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
AprendizC 0 Denunciar post Postado Novembro 17, 2008 http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Valeu Pessoal mais uma vez pela ajuda, aqui a galera é 10 ! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Obrigado memo. :rolleyes: Compartilhar este post Link para o post Compartilhar em outros sites