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

Started by
6 comments, last by SiCrane 15 years, 8 months ago
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.
-----------------------------------------"With the mind, anything is possible"
Advertisement
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?
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.
-----------------------------------------"With the mind, anything is possible"
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.
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.

-----------------------------------------"With the mind, anything is possible"
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.
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.
-----------------------------------------"With the mind, anything is possible"
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  }}

This topic is closed to new replies.

Advertisement