Ir ao conteúdo
  • Cadastre-se

Programa números primos


Speaner
Ir à solução Resolvido por Speaner,

Posts recomendados

Preciso da ajuda de vocês para modificar o seguinte programa que ja fiz:

 

#include <iostream>
using namespace std;
main ()
{
int I,J,RZERO,DIVISOES,PRIMO;
float RESTO;
 
RZERO = 0;
PRIMO = 0;
for (I=2;I<=12;I++)
{
DIVISOES = 0;
for (J=1;J<=I;J++)
{
RESTO = I % J;
if (RESTO == RZERO)
{
DIVISOES ++;
cout << "\n" << I << " E DIVISIVEL POR " << J
<< " O RESTO E " << RESTO << "\n";
}
else
{
cout << "\n" << I << " NAO E DIVISIVEL POR " << J
<< " O RESTO E " << RESTO << "\n";
}
}
if (DIVISOES == 2)
{
cout << "\n" << I << " E PRIMO PORQUE E DIVISIVEL POR 1 E POR " 
<< I << " PORTANTO DUAS DIVISOES EXATAS " << "\n" ;
PRIMO ++ ; 
}
else 
{
cout << "\n" << I << " NAO E PRIMO PORQUE HA " << DIVISOES
<< " DIVISOES EXATAS " << "\n" ;
}
cout << "\n --------------------------------------------------- ";
cin.get (); 
}
cout << "\nFORAM ENCONTRADOS " << PRIMO << " NUMEROS PRIMOS "; 
 
cin.get ();
return 0;
}
 
No programa acima o mesmo vai aparecendo na tela de 2 até 12 quais são os primos conforme aperto enter. Agora preciso estabelecer um intervalo para o programa demonstrar inserindo dois números, tipo o programa pede um número e verifica se este é maior que zero, depois pede outro número verificando se também é maior que zero e se é maior que o primeiro número digitado. A partir desses dois números o programa mostra na tela quais são primos.
Ex: Digitando 1 e 25 o programa mostrará de 1 até 25 dizendo quem é primo e quem não é...
 
Desde já agradeço a ajuda de vocês brothers!!!
Link para o comentário
Compartilhar em outros sites

    int a;    int b;    std::cin >> a;        if( a <= 0)     //Se a for menor ou igual a 0 termina o programa        return -1;    std::cin>>b;    if( b <= 0 || b < a)     //Se for 0 ou menor que a,termina o programa        return -1;    for (I=a;I<=b;I++)   //substitui os valores para contagem no loop 

só corrigindo aqui..

Link para o comentário
Compartilhar em outros sites

difícil eu conseguir explicar bem alguma coisa ts..mas vou tentar,esse seria o programa inteiro

#include <iostream>using namespace std;int main (){    int I,J,RZERO,DIVISOES,PRIMO;    float RESTO;    RZERO = 0;    PRIMO = 0;    int a;    int b;    std::cin >> a;        if( a <= 0)     //Se for 0 ou igual a 0 termina o programa        return -1;    std::cin>>b;    if( b <= 0 || b < a)     //Se for 0 ou menor que a,termina o programa        return -1;    for (I=a;I<=b;I++)    {        DIVISOES = 0;        for (J=1;J<=I;J++)        {            RESTO = I % J;            if (RESTO == RZERO)            {                DIVISOES ++;                cout << "\n" << I << " E DIVISIVEL POR " << J                    << " O RESTO E " << RESTO << "\n";            }            else            {                cout << "\n" << I << " NAO E DIVISIVEL POR " << J                    << " O RESTO E " << RESTO << "\n";            }        }        if (DIVISOES == 2)        {            cout << "\n" << I << " E PRIMO PORQUE E DIVISIVEL POR 1 E POR "                << I << " PORTANTO DUAS DIVISOES EXATAS " << "\n" ;            PRIMO ++ ;        }        else        {            cout << "\n" << I << " NAO E PRIMO PORQUE HA " << DIVISOES                << " DIVISOES EXATAS " << "\n" ;        }        cout << "\n --------------------------------------------------- ";        cin.get ();    }    cout << "\nFORAM ENCONTRADOS " << PRIMO << " NUMEROS PRIMOS ";    cin.get ();        return 0;}

o que acontece é que se o usuario digitar o valor 0 para a variavel "a",o programa termina(return -1),se o usuario digitar o valor 0 para a variavel "b" ou um valor menor que foi digitado para a variavel "a" o programa tambem termina(era isso que voce queria,certo?)

depois no contador do loop em vez de voce começar a partir dos valores predeterminados(2 ate 12)voce pode começar a contar a partir dos valores passados para a variavel "a" ate "b"

Link para o comentário
Compartilhar em outros sites

Ai sim hein, mas teria a opção de ao invés de terminar o programa ele pedir para o usuário digitar um número válido novamente.

Ex: Usuário digita 0 ou menos - O programa informa que o numero é invalido e solicita para que ele digite novamente.

 

valeu pela ajuda brother!!! você é o cara...

Link para o comentário
Compartilhar em outros sites

é só fazer um loop,enquanto o numero digitado for menor que 0 ou 0,ele nao sai do loop,POR EXEMPLO

while(std::cin >> a)    {        if(a > 0)       //Se a for maior que 0            break;      //Sai do loop        std::cout<<"Digite um valor valido"<<std::endl;    }

na verdade em em "b" voce nem precisaria testar se o numero é 0,porque se "a" for maior que 0,e "b" só pode ser maior que "a" então nao tem porque testar se "b" é 0,POR EXEMPLO

while(std::cin >>  {        if(b > a)                 break;        std::cout<<"Digite um valor valido"<<std::endl; }
Link para o comentário
Compartilhar em outros sites

Nossa agora o programa ta bala mas... Prometo que é a última pergunta rsrsrs

 

Quando digito o segundo numero e aperto enter o programa imediatamente mostra duas ocasiões e após isso vai aparecendo conforme vou dando enter.

Ex: Se coloco um intervalo de 5 a 10 ao apertar enter após o 10 o programa de imediato mostra nos casos 5 e 6 e, após isso vai mostrando na sequencia até conforme vou teclando enter. Tem como eu fazer isso desde o começo tipo, coloco um intervalo de 5 a 10 e ai aperto enter aparece 5, aperto enter de novo 6, aperto enter 7... Ir executando assim até o fim da instrução.

 

Grande abraço amigão!!! E prometo que agora chega de perguntas, sacomé prof. ruim pakas zoa o barraco...  

Link para o comentário
Compartilhar em outros sites

Cara to alterando colocando seu comando no meu programa mas parou de funcionar legal... Pode por gentileza alterar e postar para eu ver pois olha o meu:

 

#include <stdio.h>
#include <iostream>
using namespace std;
 
int main ()
{
    int I,J,RZERO,DIVISOES,PRIMO;
    float RESTO;
 
RZERO = 0;
    PRIMO = 0;
 
    int NUM1;
    int NUM2;
    
printf("\nDIGITE UM NUMERO INTEIRO MAIOR QUE ZERO %");
    
    while(std::cin >> NUM1)
    {
        if(NUM1 > 0)       
           break;      
        std::cout << "\nDIGITE UM NUMERO MAIOR QUE ZERO %" << std::endl;
    }
while(std::cin >> NUM2)
  {
        if(NUM2 <= NUM1)     
            break;
        std::cout << "\n\nDIGITE UM NUMERO MAIOR QUE O PRIMEIRO %" << std::endl;
  }
 
      std::cin.ignore();
     
for (I=NUM1;I<=NUM2;I++)
    {
        DIVISOES = 0;
        for (J=1;J<=I;J++)
        {
            RESTO = I % J;
            if (RESTO == RZERO)
            {
                DIVISOES ++;
                cout << "\n" << I << " E DIVISIVEL POR " << J
                    << " O RESTO E " << RESTO << "\n";
            }
            else
            {
                cout << "\n" << I << " NAO E DIVISIVEL POR " << J
                    << " O RESTO E " << RESTO << "\n";
            }
        }
        if (DIVISOES == 2)
        {
            cout << "\n" << I << " E PRIMO PORQUE E DIVISIVEL POR 1 E POR "
                << I << " PORTANTO DUAS DIVISOES EXATAS " << "\n" ;
            PRIMO ++ ;
        }
        else
        {
            cout << "\n" << I << " NAO E PRIMO PORQUE HA " << DIVISOES
                << " DIVISOES EXATAS " << "\n" ;
        }
        cout << "\n --------------------------------------------------- ";
        cin.get ();
    }
    cout << "\nFORAM ENCONTRADOS " << PRIMO << " NUMEROS PRIMOS ";
 
    cin.get ();
    
    return 0;
}

 

O que tem errado aí?

Link para o comentário
Compartilhar em outros sites

beleza tinha alterado essa parte já e agora ta rodando 99%, única coisa que está me encucando é que pra inserir o primeiro número tenho que colocar duas vezes, tipo se eu quero digitar o número 1,digito 1 e dou enter ele não faz nada ai coloco novamente e ai sim ele roda como deveria...

Sabe o porque? Já reli o programa umas 10x e não achei nada errado... 

Link para o comentário
Compartilhar em outros sites

  • Solução

Parcero olhei com calma e não ví nada que possa estar fazendo o que comentei acima. O programa ta rodando blzinha do jeitinho que preciso porém, fica estranho esse início tendo que digitar duas vezes um número para ele começar a rodar.

Consegue me explicar o porque ocorre isso se está certo a estrutura? Ou há algo um algo a mais que não estou conseguindo visualizar...

 

Foi mallz esse monte de perguntas mas semana de prova na facul destrói os neurônios  :eek:

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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

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

×
×
  • Criar novo...