Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

Problem in finding the mode of a number in an array

adeydasadeydas Posts: 43Member
Hi, I have got a problem as follows:

[b]The mode of an array of numbers is the number [i]m[/i] in the array that is repeated most frequently. If more than one number is repeated with equal maximal frequencies, there is no mode. Write a program that accepts an array of numbers and returns the mode or an indication that the mode does not exist[/b]

For this I have written the following code:

[code]
/* Question C.c (too long to write)
Compiler: Turbo C++ 3 */

#include
#define MAX 5

int mode (int arr[MAX])
{
int i=0, j, t=0, p=1;

while (i!=MAX)
{

for (j=1; j<=MAX; j++)
{
if (arr[i]==arr[j])
t++;
}

if (p<t)
{
p=t;
t=0;
}
/*else if (p==t)
{
return 0;
} */
else
{
t=0;
}

i++;
}
return p;
}

void main()
{
int arr[MAX];
int i, f;

for (i=1; i<=MAX; i++)
{
printf("Enter a number: ");
scanf("%d", &arr[i]);
}

f=mode(arr);

printf("The maximal frequency of the inputted array is: %d", f);

getch();
}
[/code]

However, in case of
[code] if (p==t) [/code]
it always comes true and the return value is termed 0. However, without that statement and the condition that there cannot be a '0 mode' the program works fine.

Thanks in advance.
Abhishek.

Comments

  • stoberstober Posts: 9,765Member ✭✭✭
    : Hi, I have got a problem as follows:
    :
    : [b]The mode of an array of numbers is the number [i]m[/i] in the array that is repeated most frequently. If more than one number is repeated with equal maximal frequencies, there is no mode. Write a program that accepts an array of numbers and returns the mode or an indication that the mode does not exist[/b]
    :
    : For this I have written the following code:
    :
    : [code]
    : /* Question C.c (too long to write)
    : Compiler: Turbo C++ 3 */
    :
    : #include
    : #define MAX 5
    :
    : int mode (int arr[MAX])
    : {
    : int i=0, j, t=0, p=1;
    :
    : while (i!=MAX)
    : {
    :
    : for (j=1; j<=MAX; j++)
    : {
    : if (arr[i]==arr[j])
    : t++;
    : }
    :
    : if (p<t)
    : {
    : p=t;
    : t=0;
    : }
    : /*else if (p==t)
    : {
    : return 0;
    : } */
    : else
    : {
    : t=0;
    : }
    :
    : i++;
    : }
    : return p;
    : }
    :
    : void main()
    : {
    : int arr[MAX];
    : int i, f;
    :
    : for (i=1; i<=MAX; i++)
    : {
    : printf("Enter a number: ");
    : scanf("%d", &arr[i]);
    : }
    :
    : f=mode(arr);
    :
    : printf("The maximal frequency of the inputted array is: %d", f);
    :
    : getch();
    : }
    : [/code]
    :
    : However, in case of
    : [code] if (p==t) [/code]
    : it always comes true and the return value is termed 0. However, without that statement and the condition that there cannot be a '0 mode' the program works fine.
    :
    : Thanks in advance.
    : Abhishek.
    :

    >>the program works fine.
    no it doesn't. It contains some buffer overflows.
    >>for (i=1; i<=MAX; i++)
    above is example of buffer overflow. arrays are numbered from 0 to but not including MAX. should be coded like this
    [code]for (i=0; i < MAX; i++)[/code]


    In function mode(), why not just create a 2-dimensional array that contains the value in the original array and the count of the number of times it appears in the original array.
    [code]
    int mode (int arr[MAX])
    {
    int totals[2][MAX] = {0};
    int i, nItemsAdded = 0;
    for(i = 0; i < MAX; i++)
    {
    // search totals to see if the value is already there. If not, then
    // add it. If its already in totals array then just increment
    // the counter for it.
    int j;
    int found = 0;
    for(j = 0; found == 0 && j < nItemsAdded; ++j)
    {
    if( totals[0][j] == arr[j])
    {
    found = 1; // set flag indicating value found
    ++totals[1][j]; // bump count
    }
    }
    if( found == 0)
    {
    totals[0][nItemsAdded] = arr[i];
    totals[1][nItemsAdded] = 1;
    ++nItemsAdded;
    }
    }

    [/code]

    After the above is finished, it is a trivel matter to check the totals array for max count.
  • adeydasadeydas Posts: 43Member
    Ya that could be it but I was trying to reduce memory usuage. Anyways thanks for the reply...


    : : Hi, I have got a problem as follows:
    : :
    : : [b]The mode of an array of numbers is the number [i]m[/i] in the array that is repeated most frequently. If more than one number is repeated with equal maximal frequencies, there is no mode. Write a program that accepts an array of numbers and returns the mode or an indication that the mode does not exist[/b]
    : :
    : : For this I have written the following code:
    : :
    : : [code]
    : : /* Question C.c (too long to write)
    : : Compiler: Turbo C++ 3 */
    : :
    : : #include
    : : #define MAX 5
    : :
    : : int mode (int arr[MAX])
    : : {
    : : int i=0, j, t=0, p=1;
    : :
    : : while (i!=MAX)
    : : {
    : :
    : : for (j=1; j<=MAX; j++)
    : : {
    : : if (arr[i]==arr[j])
    : : t++;
    : : }
    : :
    : : if (p<t)
    : : {
    : : p=t;
    : : t=0;
    : : }
    : : /*else if (p==t)
    : : {
    : : return 0;
    : : } */
    : : else
    : : {
    : : t=0;
    : : }
    : :
    : : i++;
    : : }
    : : return p;
    : : }
    : :
    : : void main()
    : : {
    : : int arr[MAX];
    : : int i, f;
    : :
    : : for (i=1; i<=MAX; i++)
    : : {
    : : printf("Enter a number: ");
    : : scanf("%d", &arr[i]);
    : : }
    : :
    : : f=mode(arr);
    : :
    : : printf("The maximal frequency of the inputted array is: %d", f);
    : :
    : : getch();
    : : }
    : : [/code]
    : :
    : : However, in case of
    : : [code] if (p==t) [/code]
    : : it always comes true and the return value is termed 0. However, without that statement and the condition that there cannot be a '0 mode' the program works fine.
    : :
    : : Thanks in advance.
    : : Abhishek.
    : :
    :
    : >>the program works fine.
    : no it doesn't. It contains some buffer overflows.
    : >>for (i=1; i<=MAX; i++)
    : above is example of buffer overflow. arrays are numbered from 0 to but not including MAX. should be coded like this
    : [code]for (i=0; i < MAX; i++)[/code]
    :
    :
    : In function mode(), why not just create a 2-dimensional array that contains the value in the original array and the count of the number of times it appears in the original array.
    : [code]
    : int mode (int arr[MAX])
    : {
    : int totals[2][MAX] = {0};
    : int i, nItemsAdded = 0;
    : for(i = 0; i < MAX; i++)
    : {
    : // search totals to see if the value is already there. If not, then
    : // add it. If its already in totals array then just increment
    : // the counter for it.
    : int j;
    : int found = 0;
    : for(j = 0; found == 0 && j < nItemsAdded; ++j)
    : {
    : if( totals[0][j] == arr[j])
    : {
    : found = 1; // set flag indicating value found
    : ++totals[1][j]; // bump count
    : }
    : }
    : if( found == 0)
    : {
    : totals[0][nItemsAdded] = arr[i];
    : totals[1][nItemsAdded] = 1;
    : ++nItemsAdded;
    : }
    : }
    :
    : [/code]
    :
    : After the above is finished, it is a trivel matter to check the totals array for max count.
    :


    Thank you.
    Abhishek
    http://freepgs.com/abhishek/pages/home.php

Sign In or Register to comment.