Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Print an exponential

I’m creating a program that compares numbers with their respective exponents, and indicates which of the three is the smallest. The problem is that I wouldn’t want it to perform the operation, for example:

Let’s say the smallest number was $4^{8}$, so it would calculate that value, but I want it to just print "4^8" on the screen, or related things, but without doing that operation (in this case, it prints 65536).

int main()
{
    int a, b, c, smaller, x, y, z, for_a, for_b, for_c;

    printf("first value: ");
    scanf("%d", &a);
    printf("Second value: ");
    scanf("%d", &b);
    printf("Third value: ");
    scanf("%d", &c);

    printf("Value of x: ");
    scanf("%d", &x);
    printf("Value of y: ");
    scanf("%d", &y);
    printf("Value of z: ");
    scanf("%d", &z);

    for_a= pow(a, x);
    for_b= pow(b, y);
    for_c= pow(c, z);

    if (for_a< for_b && for_a < for_c){
        smaller= for_a;
    }
    else if (for_b < for_c){
        smaller = for_b;
    }
    else {
        smaller = for_c;
    }

    printf("Smaller= %d\n", smaller);

    return 0;
}

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

You need to identify the set of data that corresponds to your result. Storing the result only is not enough.

You could do this as follows:

#include <stdio.h>

#typedef struct values_s{
  int base;
  int exponent;
  int result;
} values_t;

#define NUMBER_OF_VALUES 3

int main(void)
{
    values_t values[NUMBER_OF_VALUES];

    for (int i = 0; i < NUMBER_OF_VALUES; i++)
    {
        printf("Base value #%d: ", i+1);
        fflush(stdout);
        int result = scanf("%d", &values[i].base);
        // TODO: Error handling in case result != 1
    }

    for (int i = 0; i < NUMBER_OF_VALUES; i++)
    {
        printf("Exponent #%d: ", i+1);
        fflush(stdout);
        int result = scanf("%d", &values[i].exponent);
        // TODO: Error handling in case result != 1
    }


    for (int i = 0; i < NUMBER_OF_VALUES; i++)
    {
        values[i].result = pow(values[i].base, values[i].exponent);
    }

    int smallest = 0;
    for (int i = 1; i < NUMBER_OF_VALUES; i++)
    {
        if (values[i].result < values[smallest].result)
        {
            smallest = i;
        }
    }

    printf("Smallest: %d^%d = %d\n", values[smallest].base, values[smallest].exponent, values[smallest].result);

    return 0;
}

This is based on the assumptions that your variables of type int are large enough to hold the values you are dealing with. Otherwise you need to adjust accordingly.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading