0

I am having trouble with an exercise of finding how many times a number appears in an array and display the value and the count of times it appears in the list. The array can be the size of 100.

3
Contributors
6
Replies
8
Views
11 Years
Discussion Span
Last Post by xjim72
0

Let me be more detailed. I have the program enter a list of numbers all integers and positive. The program then list the numbers in accending order and the number of times that number is in the list. Thanks.

0

1. put all the numbers in an array and short it.
2. create a 2d array, the first dimension contains the number and the second dimension contains a count of the number of times the number appears. The program will have to iterate through the original array (#1 above) and maintain each array in #2.

c++ <map> will facilitate #2 above, but I'm not familiar enough with it to demonstrate its use.

0

Well here is what I have so far but the results are not great.
I get repeat info and it prints out -999.
Any ideas?

// Description: Program that reads in a set of positive integers
//              and out puts how many times a number appears in the list.


#include<iostream>
#include<iomanip>
using namespace std;


//function prototypes
void initialize (int numbers[], int listSize);
void readNum (int numbers[], int& listSize);
void selectSort (int numbers[], int listSize);


int main()
{
int Numbers [100];
int count= 0;
int listsize = 100;
int temp;



initialize (Numbers, listsize);


cout <<"Enter a maximum of 100 positive integers ending with -999"<<endl;
readNum (Numbers, listsize);
cout <<endl;
cout <<fixed<<showpoint<<setw(7)<<"Number"<<setw(9)<<"Count"<<endl;


selectSort(Numbers, listsize);


for (int t=0; t< listsize; t++)
{
temp = Numbers[t];
for (int i=0; i < listsize;i++)
{
if (Numbers == temp)
count ++;
}
cout <<setw(5)<<Numbers[t]<<setw(9)<<count<<endl;
count = 0;
}
return 0;
}


void initialize (int numbers[], int listSize)
{
int index;
int Num = 0;
for (index=0; index < 100; index++)
numbers[index] = 0;
}


void readNum (int numbers[], int&listSize)
{
int index =0;
int num =0;
listSize=0;


while (num != -999)
{
cin >>num;
numbers[index] = num;
index++;
listSize++;
}
}


void selectSort (int numbers[], int listSize)
{
int index, minIndex, smallestIndex, temp;


for (index=0; index < listSize - 1;index++)
{
smallestIndex = index;
for (minIndex = index + 1; minIndex < listSize; minIndex++)
if (numbers[minIndex] < numbers[smallestIndex])
smallestIndex = minIndex;


temp = numbers[smallestIndex];
numbers[smallestIndex] = numbers[index];
numbers[index] = temp;


}
}

Edited by happygeek: fixed formatting

Attachments
// Name: James Cabrera

// File: Ex11_Cabrera.cpp 

// Date: 2-9-06

// Description: Program that reads in a set of positive integers 
//				and out puts how many times a number appears in the list.

#include<iostream>
#include<iomanip>
using namespace std;

	//function prototypes
void initialize (int numbers[], int listSize);
void readNum (int numbers[], int& listSize);
void selectSort (int numbers[], int listSize);

int main()
{
	int Numbers [100];
	int count= 0;
	int listsize = 100;
	int temp;
	

	initialize (Numbers, listsize);

	cout <<"Enter a maximum of 100 positive integers ending with -999"<<endl;
	readNum (Numbers, listsize);
	cout <<endl;
	cout <<fixed<<showpoint<<setw(7)<<"Number"<<setw(9)<<"Count"<<endl;

	selectSort(Numbers, listsize);

	for (int t=0; t< listsize; t++)
	{
		temp = Numbers[t];
		for (int i=0; i < listsize;i++)
		{
			if (Numbers[i] == temp)
				count ++;
		}
		cout <<setw(5)<<Numbers[t]<<setw(9)<<count<<endl;
		count = 0;
	}
	return 0;
}

void initialize (int numbers[], int listSize)
{
	int index;
	int Num = 0;
	for (index=0; index < 100; index++)
		numbers[index] = 0;
}

void readNum (int numbers[], int&listSize)
{
	int index =0;
	int num =0;
	listSize=0;

	while (num != -999)
	{
		cin >>num;
		numbers[index] = num;
		index++;
		listSize++;
	}
}

void selectSort (int numbers[], int listSize)
{
	int index, minIndex, smallestIndex, temp;

	for (index=0; index < listSize - 1;index++)
	{
		smallestIndex = index;
		for (minIndex = index + 1; minIndex < listSize; minIndex++)
			if (numbers[minIndex] < numbers[smallestIndex])
				smallestIndex = minIndex;
			
			temp = numbers[smallestIndex];
			numbers[smallestIndex] = numbers[index];
			numbers[index] = temp;
			
	}
}
0

suggestion: read the 100 numbers from a file instead of entering them from the keyboard.

#include<iostream>
#include<iomanip>
using namespace std;

	//function prototypes
void initialize (int numbers[], int listSize);
void readNum (int numbers[], int& listSize);
void selectSort (int numbers[], int listSize);

int main()
{
	int Numbers [100];
	int count= 0;
	int listsize = 100;
	int temp;
	

	initialize (Numbers, listsize);

	cout <<"Enter a maximum of 100 positive integers ending with -999"<<endl;
	readNum (Numbers, listsize);
	cout <<endl;
	cout <<fixed<<showpoint<<setw(7)<<"Number"<<setw(9)<<"Count"<<endl;

	selectSort(Numbers, listsize);

        temp = Numbers[0];
        count = 1;
	for (int t=1; t< listsize; t++)
	{
               if(Numbers[t] == temp)
                  count++;
              else
              {
                   cout << "temp = " << temp << " total = " << count;
                  temp = Numbers[t];
                   count = 1;
              }
	}
        // display count of final number
        cout << "temp = " << temp << " total = " << count;

	return 0;
}

void initialize (int numbers[], int listSize)
{
	int index;
	int Num = 0;
	for (index=0; index < 100; index++)
use listSize in above loop
		numbers[index] = 0;
}

void readNum (int numbers[], int&listSize)
{
	int index =0;
	int num =0;
	listSize=0;
You don't need variable index.  use listSize instead
	while (num != -999)
	{
		cin >>num;
		numbers[index] = num;
		index++;
		listSize++;
	}
}

void selectSort (int numbers[], int listSize)
{
	int index, minIndex, smallestIndex, temp;

	for (index=0; index < listSize - 1;index++)
	{
		smallestIndex = index;
		for (minIndex = index + 1; minIndex < listSize; minIndex++)
			if (numbers[minIndex] < numbers[smallestIndex])
				smallestIndex = minIndex;
			
			temp = numbers[smallestIndex];
			numbers[smallestIndex] = numbers[index];
			numbers[index] = temp;
			
	}
}
0

You have to decrement listSize if you don't want it to print -999. eg

cout <<"Enter a maximum of 100 positive integers ending with -999"<<endl;
	readNum (Numbers, listsize);
             [b]listSize--;[/b]
	cout <<endl;
	cout <<fixed<<showpoint<<setw(7)<<"Number"<<setw(9)<<"Count"<<endl;

I get repeat info

Show the output.

suggestion: read the 100 numbers from a file instead of entering them from the keyboard.

Or store the numbers in a file and use your OS's redirection capabilities:

C:\>count_numbers <numbers.txt
0

Thanks guys. Your ideas worked.


You have to decrement listSize if you don't want it to print -999. eg

cout <<"Enter a maximum of 100 positive integers ending with -999"<<endl;
	readNum (Numbers, listsize);
             [b]listSize--;[/b]
	cout <<endl;
	cout <<fixed<<showpoint<<setw(7)<<"Number"<<setw(9)<<"Count"<<endl;

Show the output.

Or store the numbers in a file and use your OS's redirection capabilities:

C:\>count_numbers <numbers.txt
This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.