I rea......lly need your help ( C++ )

Discussion in 'C++' started by ashmangat@yahoo.com, Nov 12, 2005.

  1. Guest

    Hey I am new, but I don't have time to intruduce myself yet.
    I am intro to C++
    and this is a programme I have to write.
    all the direction are here, It will be very nice of someone to figure
    this out.
    note: I only in intro C++ which is about to be finished by the next two
    weeks.
    The topic which I am on in my book is "POINTERS"

    Text from the book:

    Write a program that can be used to gather statistical data about the
    number
    of movies college students see in a month. The program should perform
    the
    following steps:
    Ask the user how many students were surveyed. An array of
    integers with this many elements should be dynamically allocated.
    Allow the user to enter the number of movies each student saw into the
    array.
    Calculate and display the average, median, and mode of the values
    entered.
    (Use the functions you wrote in problem 6 and 7 to calculate the median
    and mode.)

    Input Validation: Do not accept negative numbers for input.


    Additional Notes:

    Use the following skeleton for the main program:

    void main(void)
    {
    int *dyn_array;
    int mode, students;
    float avrg;

    do
    {
    cout << "How many students will you enter? ";
    cin >> students;
    }while ( students <= 0 );

    dyn_array = create_array( students );
    //this funtion creates a dynamic array
    //and is found in the book
    enter_data( dyn_array, students );
    //use 'pointer' notation in this function to
    //access array elements
    mode = get_mode( dyn_array, students );
    //check out pc6 for an explanation of 'mode'
    //median = median( dyn_array, students );
    //don't do median in this exercise
    avrg = average( dyn_array, students );
    //should be trivial


    cout << "The array is: ";
    showArray( dyn_array, students);
    //you should already have this function
    cout << endl;
    cout << "The Mode is " << mode << ".\n";
    cout << "The average is " << avrg << ".\n";

    delete [] dyn_array;
    return 0;
    }

    Some help (and requirements) for the mode function:

    'mode' as explained in pc6: "In Statistics, the 'mode' of a set of
    value is the
    value, which occurs most often or with the greatest frequency".

    Note: Very important to completely understand the explanation below.
    Get
    on the discussion board if there is any confusion.

    The call:
    mode = get_mode(dyn_array, student);

    The function header:
    int get_mode(int *student_data, int num_students)

    get_mode should do the following:

    create an array 'frequency' of 1000 integers. 1000 is arbitrarily
    chosen as
    the absolute maximum of movies a college student could see in a week.
    This array
    will keep track of frequencies of weekly movie watching values.

    Intialize array 'frequency' elements to zeros (use a loop)

    Populate the 'frequency' array with the data (how many students see 1,
    2, 3,
    etc. movies a week)

    The following algorithm is a useful method to easily increment random
    values:

    Run a loop on 'student_data' from 0 to 'num_students'.

    The content of 'student_data' array becomes the
    index of the 'frequency' array and the content of that 'frequency'
    array
    element gets incremented. Very important to understand this process.

    Here is a little animation help for
    the sentence content of 'student_data' array becomes the index of the
    'frequency' array'.

    In subscript notation, it would look like this:

    frequency [ student_data[index] ] ++

    However, a requirement for the code above is to implement
    student_data[index]' in pointer notation and leave frequency[] in
    subscript
    notation.

    Example of processing the mode with 'frequency' and 'student_array':

    If, at the beginning, the frequency array contains:

    0 0 0 0 0 0 ...
    and 'student_data' contains:

    2 4 1 2 ...

    In the loop the first element '2' points to the third element (index 2)
    in the
    'frequency' array and increments it. So now 'frequency' looks like
    this:

    0 0 1 0 0 0 ...

    By the time the loop runs through all 4 elements of 'student_data',
    'frequency'
    will look like this:

    0 1 2 0 1 0 ...

    Notice that the 'frequency' array above now contains the mode: 2 movies
    a week
    (the third element, but index 2) contains the biggest number. Makes
    sense? If
    you aggree with the process described above, then you can write the
    program to
    accomplish it.


    After the 'frequency' array is updated with frequencies of all data,
    make a
    new loop with the 'frequency' array to pick out the largest value. Use
    the same
    function used in earlier assignment. It should look something like:

    for(i = 0; i < 1000; i++)
    {
    if(max < frequency)
    { max = frequency;
    maxi = i;
    }
    }
    return maxi -- remember that the index corresponds to the movies seen
    per week!


    Note: Do not worry about making the program handle bimodal values (mode
    having
    two values).
    Don't forget to block-comment every function definition. Example:

    //*******************************************
    // enter_data()
    // This function inputs data for all students
    // into dynimacally created array
    //*******************************************
     
    , Nov 12, 2005
    #1
    1. Advertising

  2. wrote:
    > Hey I am new, but I don't have time to intruduce myself yet.
    > I am intro to C++
    > and this is a programme I have to write.


    And what is your standard C++ question?

    > all the direction are here, It will be very nice of someone to figure
    > this out.
    > note: I only in intro C++ which is about to be finished by the next two
    > weeks.
    > The topic which I am on in my book is "POINTERS"
    >
    > Text from the book:
    >
    > Write a program that can be used to gather statistical data about the
    > number
    > of movies college students see in a month. The program should perform
    > the
    > following steps:
    > Ask the user how many students were surveyed. An array of
    > integers with this many elements should be dynamically allocated.


    That is very unfortunate. This is not an application of dynamic memory
    in C++. Usually, you'll want to allocate objects on the heap when you
    deal with polymorphism (class hierarchies). You *don't* want to use
    dynamic memory for collections. C++ already has classes that do the
    job.

    Here's a modification to this exercise:

    Create a program which

    1) has a list of predefined movies
    2) asks X students to pick their favorite
    3) display statistical data about the results (whatever you want,
    that's not the point)

    Use this skeleton:

    # include <string>
    # include <vector>

    int main() // main() returns an int. Always.
    {
    typedef std::vector<string> Movies;

    Movies movie_list;
    movie_list.push_back("Star wars");
    movie_list.push_back("Harry potter");
    movie_list.push_back("Pulp Fiction");

    Movies picked;

    while (true)
    {
    // display the list of predefined movies as a menu
    // display a prompt for a student to select their favorite movie

    // get input from user
    // validate input

    // if input is "0" or "", break the loop

    // add the selected movie name to the vector "picked"
    }

    // get statistics about the results
    // display statistics
    }

    Hints:

    1) use iterators

    for (Movie::iterator itor=movie_list.begin(); itor!=movie_list.end();
    ++itor)
    {
    std::cout << *itor;
    }

    2) use std::string

    std::string input;
    std::cin >> input;

    std::cout << "Your choice is: " << input;

    3) don't use "new"

    <snip>

    4) do not hardcode any numbers else than 0.

    5) change the book


    Jonathan
     
    Jonathan Mcdougall, Nov 12, 2005
    #2
    1. Advertising

  3. wrote:
    > Hey I am new, but I don't have time to intruduce myself yet.
    > I am intro to C++
    > and this is a programme I have to write.


    Tell us what part you don't understand and we'll help. No-one is going
    to figure it out for you, or do your homework for you.

    Try postings some of the code you've written already and we'll help.

    The most important piece of advice is to take things slowly.

    Start with the skeleton code, and do *one* function at a time. Do *not*
    try it all at once, you *will* fail if you do it that way. Start with
    the create_array function and don't go any firther until you have got
    that tested and working. The try the enter_data function and don't got
    any further until you have got that tested and working. etc. This is the
    most important piece of advice I can give, and one I've seen newbie and
    newbie like yourself ignore.

    john
     
    John Harrison, Nov 12, 2005
    #3
  4. ben Guest

    > That is very unfortunate. This is not an application of dynamic memory
    > in C++. Usually, you'll want to allocate objects on the heap when you
    > deal with polymorphism (class hierarchies). You *don't* want to use
    > dynamic memory for collections. C++ already has classes that do the
    > job.


    Please note that you don't need dynamic memory to facilitate
    polymorphism. In fact, you shouldn't use dynamic memory unless the logic
    of your program requires your object to live beyond the scope where it
    is created.

    Ben
     
    ben, Nov 12, 2005
    #4
  5. ben wrote:
    > > That is very unfortunate. This is not an application of dynamic memory
    > > in C++. Usually, you'll want to allocate objects on the heap when you
    > > deal with polymorphism (class hierarchies). You *don't* want to use
    > > dynamic memory for collections. C++ already has classes that do the
    > > job.

    >
    > Please note that you don't need dynamic memory to facilitate
    > polymorphism. In fact, you shouldn't use dynamic memory unless the logic
    > of your program requires your object to live beyond the scope where it
    > is created.


    Many of the techniques often used in conjunction with polymorphism
    imply dynamic memory, such as object factories and heterogeneous
    (pointer-to-base) collections. Actually, except for the most trivial
    uses (such as an argument to a function), polymorphism usually requires
    dynamic memory.


    Jonathan
     
    Jonathan Mcdougall, Nov 12, 2005
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    0
    Views:
    308
  2. Yucky Corpulent
    Replies:
    5
    Views:
    412
  3. ash

    I rea......lly need your help ( C++ )

    ash, Nov 12, 2005, in forum: C Programming
    Replies:
    3
    Views:
    627
    Martin Ambuhl
    Nov 12, 2005
  4. Allan Ebdrup
    Replies:
    1
    Views:
    450
    Allan Ebdrup
    May 14, 2007
  5. Replies:
    7
    Views:
    141
    Ara.T.Howard
    Nov 12, 2005
Loading...

Share This Page