user2053173
user2053173

Reputation: 11

logic error in prime # program. The program just ends after I answer the prompt so I can't see the numbers

//Purpose: Display first 'n' (user chosen) number if emirps to the console, five per line. //Note: An "emirp" is a prime number that is also prime when reversed.

#include <iostream>
using namespace std;
bool isPrime(int value); //Prototyle for "prime number function"
int reverse (int value2); //Prototype for "emirp function"

int main()
{

//Ask the user for a positive number

    cout << "Please enter a positive number:  ";
    int n;
    cin >> n;

//Reject negative value input

    if ( n < 1) 
    {
        cout << "INVALID NUMBER \n"; 
    }
    else
    {

//Calculate all emirps up to 'n'.

    int test = 0;
    int number = 2;
    while (test < n)
    {

   if (isPrime(number) && reverse(number))
   {
        cout << "\n" << reverse(number) << "\t\t\t";
        test++;
    }
   else
   {
        test++;
   }
    }
    }
    system("pause");
    return 0;
}

bool isPrime(int value)
{

//If value is prime, the remainder (count) will be zero twice--for 1 and itself.

    int divisor = 1;
    int count = 0;
    int prime = 0;
    if (value % divisor == 0)
    {
        count++;
        ++divisor;
    }
    if (count = 2)
    {
        return true;
    }
    else
    {
        return false;
    }
}


int reverse(int value2)
{
    //reverse the number
    value2*=10;
    value2 = value2 %10;
    value2/=10;

//same procedure as prime function

    int divisor2 = 1;   
    int count2 = 0;
    int emirp = 0;
    if (value2 % divisor2 == 0)
    {
        count2++;
        ++divisor2;
    }
    if (count2 = 2)
    {
    int emirp = value2;
    }
    return emirp;
}

Upvotes: 0

Views: 141

Answers (2)

user2166576
user2166576

Reputation:

If it is just about viewing the console output :

  1. Press CTRL+F5 to run application in Visual studio.

  2. just provide a getch()in main() function

And your code syntax is not in a right way :

  1.  if (count = 2) //count ==2
     {
       return true;
      }
    
  2.  if (isPrime(number) && reverse(number))
     { 
      cout << "\n" << reverse(number) << "\t\t\t";
      test++;
      }
    

will call reverse() 2 times.

modify it something like ;

int RevNum = reverse(number);

if (isPrime(number) &&RevNum)
  {
    cout << "\n" << RevNum << "\t\t\t";
    test++;
   }

Upvotes: 1

Lacrima
Lacrima

Reputation: 21

How does this even build? if (count = 2) { ... }

Also: your reverse function just returns an int, what do you expect if (isPrime(number) && reverse(number)) to do with that result?

It's not a good way of working to do the whole calculation again btw:

 cout << "\n" << reverse(number) << "\t\t\t"; //you already did this in your "check" 

Edit: And no wonder it doesn't work. You check the number-value (2) every time, not n

Upvotes: 1

Related Questions