Velocity Reviews > comparing numbers

# comparing numbers

Tweaxor
Guest
Posts: n/a

 09-23-2003
I stuck with exerise in a Learning C book that I got. If I have the
numbers as input. How can I determine which of the three is the
smallest number, largest number and the range. Or would it be simpler
to just find the range of the three numbers.

Steve Zimmerman
Guest
Posts: n/a

 09-23-2003
Tweaxor wrote:

> I stuck with exerise in a Learning C book that I got. If I have the
> numbers as input. How can I determine which of the three is the
> smallest number, largest number and the range. Or would it be simpler
> to just find the range of the three numbers.
>
>

#include <stdio.h>

int min(int num1, int num2);
int max(int num1, int num2);

int main()
{
int int1, int2, int3;

printf("Enter three integers, separated by spaces: ");
scanf("%d%d%d", &int1, &int2, &int3);

printf("The minimum is %d\n", min (int1, (min (int2, int3))));
printf("The maximum is %d\n", max (int1, (max (int2, int3))));

printf("The range is %d\n", max (int1, (max (int2, int3)))
- min (int1, (min (int2, int3))));

return 0;
}

int min(int num1, int num2)
{
if (num1 < num2)
return num1;
else
return num2;
}

int max(int num1, int num2)
{
if (num1 > num2)
return num1;
else
return num2;
}

Richard Heathfield
Guest
Posts: n/a

 09-23-2003
Steve Zimmerman wrote:

> Tweaxor wrote:
>
>> I stuck with exerise in a Learning C book that I got. If I have the
>> numbers as input. How can I determine which of the three is the
>> smallest number, largest number and the range. Or would it be simpler
>> to just find the range of the three numbers.
>>
>>

Homework solution snipped. Are you going to do this guy's day-job for him

> printf("The range is %d\n", max (int1, (max (int2, int3)))
> - min (int1, (min (int2, int3))));

Sloppy, but not sloppy enough to get the guy a low mark if that's what you

OP: now that Mr Zimmerman has trashed any value that might have remained in
your homework assignment, see if you can work out ON YOUR OWN why the above
printf assumes too much.

--
Richard Heathfield : http://www.velocityreviews.com/forums/(E-Mail Removed)
"Usenet is a strange place." - Dennis M Ritchie, 29 July 1999.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
K&R answers, C books, etc: http://users.powernet.co.uk/eton

Mark McIntyre
Guest
Posts: n/a

 09-23-2003
On Tue, 23 Sep 2003 07:00:46 +0000 (UTC), in comp.lang.c , Richard
Heathfield <(E-Mail Removed)> wrote:

>Homework solution snipped. Are you going to do this guy's day-job for him

As long as I also get his pay cheque...

--
Mark McIntyre
CLC FAQ <http://www.eskimo.com/~scs/C-faq/top.html>

Mike Wahler
Guest
Posts: n/a

 09-25-2003
"Tweaxor" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) om...
> I stuck with exerise in a Learning C book that I got. If I have the
> numbers as input. How can I determine which of the three is the
> smallest number, largest number

Use the comparison operators: '<' means 'less than',
'>' means 'greater than.

if(a < b)
printf("%d is less than %d\n", a, b);

>and the range. Or would it be simpler
> to just find the range of the three numbers.

Not sure what you mean by 'range'. The range of
numbers between the highest and lowest consists
of all values between them (and including them if
your definition of 'range' means 'inclusive').

The range of possible values for a given numeric
type can be obtained from a macro of <limits.h>:

printf("Range of type 'int' is from %d to %d inclusive.\n",
INT_MIN, INT_MAX);

-Mike

Christopher Benson-Manica
Guest
Posts: n/a

 09-25-2003
Richard Heathfield <(E-Mail Removed)> spoke thus:

>> printf("The range is %d\n", max (int1, (max (int2, int3)))
>> - min (int1, (min (int2, int3))));

> OP: now that Mr Zimmerman has trashed any value that might have remained in
> your homework assignment, see if you can work out ON YOUR OWN why the above
> printf assumes too much.

I'm having a tough time figuring out what it assumes that's inadvisable. max
and min always return integers, so the program will never crash. And as far
as I can tell, it always produces correct results... so help me out here...

--
Christopher Benson-Manica | Jumonji giri, for honour.
ataru(at)cyberspace.org |

Mike Wahler
Guest
Posts: n/a

 09-26-2003
"Christopher Benson-Manica" <(E-Mail Removed)> wrote in message
news:bkv4bb\$pvl\$(E-Mail Removed)...
> Richard Heathfield <(E-Mail Removed)> spoke thus:
>
> >> printf("The range is %d\n", max (int1, (max (int2, int3)))
> >> - min (int1, (min (int2, int3))));

>
> > OP: now that Mr Zimmerman has trashed any value that might have remained

in
> > your homework assignment, see if you can work out ON YOUR OWN why the

above
> > printf assumes too much.

>
> I'm having a tough time figuring out what it assumes that's inadvisable.

max
> and min always return integers, so the program will never crash.

It might not crash (actually nobody said it would, but it could),
but will it always give accurate results even when 'int1', 'int2'
and 'int3' each have a valid value? What output do you get from
the following (at the risk of further annoying Richard ) :

[compile with implementation where sizeof(int) >= 4]

#include <limits.h>
#include <stdio.h>

int min(int lhs, int rhs)
{
return lhs < rhs ? lhs : rhs;
}

int max(int lhs, int rhs)
{
return lhs > rhs ? lhs : rhs;
}

int main()
{

int int1 = 500000000;
int int2 = -1000000000;
int int3 = -2000000000;

double dmin = int3; /* used below */
double dmax = int1; /* " " */

printf("INT_MIN == %11d\n", INT_MIN);
printf("INT_MAX == %11d\n", INT_MAX);

printf("int1 == %11d\n"
"int2 == %11d\n"
"int3 == %11d\n",
int1, int2, int3);

printf("max(%11d, (max(%11d, %11d))) == %11d\n"
"min(%11d, (min(%11d, %11d))) == %11d\n",
int1, int2, int3, max(int1, (max(int2, int3))),
int1, int2, int3, min(int1, (min(int2, int3))));

printf("The range is %11d\n", max (int1, (max (int2, int3)))
- min (int1, (min (int2, int3))));

printf("%.0f - %.0f == %.0f\n", dmax, dmin, dmax - dmin);
return 0;
}

-Mike

.. And as far
> as I can tell,

How far did you test?

>it always produces correct results...

Not *always*.

>so help me out here...

See above.

-Mike

Christopher Benson-Manica
Guest
Posts: n/a

 09-26-2003
Mike Wahler <(E-Mail Removed)> spoke thus:

> How far did you test?

Okay, I didn't Boy, that was more subtle than I thought, but I probably
still should have seen it... *sheepish*

> Not *always*.

Just put in the documentation not to use MAX_INT

--
Christopher Benson-Manica | Jumonji giri, for honour.
ataru(at)cyberspace.org |