Sign in to follow this  
Kaycon11

rgeC++ - Help with finding 2 last number of 10 numbers

Recommended Posts

Kaycon11    122
NOTICE: I typed my topic wrong, I'm trying to find the 2 highest numbers of 10 numbers. Hello, I'm doing an exercise in a book and I'm currently trying to make a program using a while loop to find the two highest numbers of 10 numbers. I can make it find the highest number, but I don't know how to make it find the second highest. Also, in the book it has a hint that says "You must input each number only once."
int main()
{
	int counter; // control loop
	int number; // number of items sold
	int largest; // largest number
	int secondLargest; // second largest number

	// pre-processing stage
	counter = 1; 
	largest = 0;
	secondLargest = 0;

	// processing stage
	while ( counter <= 10 )
	{
		cout << "Enter quantity sold: ";
		cin >> number;

		if ( number > largest )
			largest = number;

		// This is where i'm stuck          
                if ( largest != number )
	        secondLargest = number;

		counter++; // increment counter by 1
	}

	// termination phase
	cout << "The largest number is " << largest << endl;
	cout << "The second largest number is " << secondLargest
		<< endl;

	system( "pause" );
	return 0;
} 


The part where I'm stuck is the fact that I have no Idea how to make it check to see if it is not greater than the largest but also greater than the second largest.

Share this post


Link to post
Share on other sites
SiCrane    11839
Well think about it. If you keep track of the largest and second largest numbers you've seen so far, what happens when you process a new number? There are three situations: 1) the number is bigger than both the largest and the second largest you've seen so far, 2) the number is in between those two numbers and 3) the number is less than both numbers. What should you do in each of those cases?

Share this post


Link to post
Share on other sites
Kaycon11    122
Quote:
Original post by SiCrane
Well think about it. If you keep track of the largest and second largest numbers you've seen so far, what happens when you process a new number? There are three situations: 1) the number is bigger than both the largest and the second largest you've seen so far, 2) the number is in between those two numbers and 3) the number is less than both numbers. What should you do in each of those cases?

well, for 1) The number would be set to largest, for 2) the number would be set to secondLargest, and 3) nothing, could set number to itself. I think....

But, for something like 2), could you use an in between statement in C++ or any programming language ( 1 < X < 10 )????

I tryed this...

if ( number > largest )
largest = number;

else if ( secondLargest < number < largest )
secondLargest = number;

else
number = number;


and it did not work, the highest number worked but again for the second highest it gave me the last number inputted that did not equal the highest.

Share this post


Link to post
Share on other sites
SiCrane    11839
For 1) you also need to think about what happens to the second largest number.

In C++ you need to do something like (secondLargest < number) && (number < largest). However, in Python, secondLargest < number < largest would work like you expect.

Share this post


Link to post
Share on other sites
Kaycon11    122
Quote:
Original post by SiCrane
For 1) you also need to think about what happens to the second largest number.

In C++ you need to do something like (secondLargest < number) && (number < largest). However, in Python, secondLargest < number < largest would work like you expect.

I got it!!!!! The solution was

if ( number > largest )
{
largest = number;
secondLargest = secondLargest;
}

else if ( (secondLargest < number) && (number < largest) )
secondLargest = number;

else
number = number;


Thank you very much! One more thing, I don't really care but, I don't think that was the way the book wanted me to solve it because the book has not taught the && thing yet, but this probably makes it work better anyways.

Share this post


Link to post
Share on other sites
Morrandir    304
The answer you posted isn't correct. Maybe just a typo, but:

if ( number >= largest ) // notice I used greater-or-equal here
{
// this is wrong:
// largest = number;
// secondLargest = secondLargest;

secondLargest = largest;
largest = number;
}

else if ( (secondLargest < number) && (number < largest) )
secondLargest = number;

else
number = number; // this is not wrong per se, but doesn't do anything





At the first comment, I used greater-or-equal, this is needed for the case that the largest and second largest numbers are the same number. When you are checking for ranges, never forget the border values!

At the second comment, your code would find the largest number, but you don't set the secondLargest correctly. It has to become the former largest number.

At the third comment, that code is meaningless. Why assign 'number' to 'number', you can just leave it be and do nothing.

Share this post


Link to post
Share on other sites
Kaycon11    122
Quote:
Original post by Morrandir
The answer you posted isn't correct. Maybe just a typo, but:
*** Source Snippet Removed ***

At the first comment, I used greater-or-equal, this is needed for the case that the largest and second largest numbers are the same number. When you are checking for ranges, never forget the border values!

At the second comment, your code would find the largest number, but you don't set the secondLargest correctly. It has to become the former largest number.

At the third comment, that code is meaningless. Why assign 'number' to 'number', you can just leave it be and do nothing.

ahh... I understand. Thank you very much.

Share this post


Link to post
Share on other sites
SiCrane    11839

if ( number >= largest ) {
// if code is executed here then number is greater than or equal to largest
} else {
// so if code is executed here then the number must be less than largest
// this means all you need is:
if (secondLargest < number) {
// so then we have code executing for case 2 here without
// needing to use two comparisons, since we already performed
// one of them
} else {
// and of course case 3 doesn't need any additional comparisons either
}
}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this