HiveBrain v1.2.0
Get Started
← Back to all entries
patterncppMinor

Mapping & Sorting Randomly Generated Numbers

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
sortinggeneratednumbersrandomlymapping

Problem

Below is the assignment I was given and the coding is what I have came up with. I would appreciate criticism on how I did and on ways to have gone differently about it.


You want to number your random list numbers, so use an iterator to put the list numbers into a map (but keep the list). The key will be the number the random number was generated in starting at 1 (ex. 1, 2, 3, etc., since these are not just index numbers). The value will be the random number. Use an iterator to print the two fields lined up on the right with field widths in two columns with the numbers labeled with centered column headings of Key and Value.


Since the list is easier to work with, lets work with the list to perform some calculations. You will sort the numbers in your list. Then use iterators, algorithms, and list functions (not the user's input variable) to find the sum, mean (average), median (middle value - find the size and move up half way), range (difference between highest and lowest), and a random number from a random spot from your list of random number (get a random number (in the proper range) with rand() and move up that many spots in your list). Then print the labeled values (with the mean to three decimal places).


Now, use your iterator to put the now sorted list numbers back into the map (which will change the original map's order). The key will still be numbers starting at 1. The value will now be the random number in their sorted order. Again, use an iterator to print the two fields lined up on the right with field widths in two columns with the numbers labeled with column headings of Key and Value.

```
#include
using namespace std;

int main() {

cout > n;

std::vector v(n);

cout << "The random generated numbers are: \n";

for (int i = 0; i < n; i++) {
int x = rand() % 151;
cout << std::setw(10);
cout << i << " ";
cout << std::setw(10);
cout << x << endl;
v[i] = x;
}
int

Solution

Include the right things

You're starting with:

#include 
using namespace std;


The second line is bad practice; avoid it. Typing std:: is not a burden. The former is definitely unacceptable - that's a compiler-specific file that you don't want to be including. Just include the actual headers you need:

#include 
#include 
#include 


Use algorithms and iterators

Rather than writing your own loop to perform a sum, you could use the standard algorithm for this: std::accumulate:

int sum = std::accumulate(v.begin(), v.end(), 0);


Also they wanted you to use iterators to find the median, which would be:

auto median_it = std::next(
    v.begin(),
    std::distance(v.begin(), v.end()) / 2);


Where's the rest?

There's a lot of text in that question that I don't think you addressed in your code. Looks like we need a std::map or something.

Code Snippets

#include <bits/stdc++.h>
using namespace std;
#include <iostream>
#include <algorithm>
#include <vector>
int sum = std::accumulate(v.begin(), v.end(), 0);
auto median_it = std::next(
    v.begin(),
    std::distance(v.begin(), v.end()) / 2);

Context

StackExchange Code Review Q#114092, answer score: 7

Revisions (0)

No revisions yet.