Question

Program 7 Arrays: building and sorting (100 points) Due: Friday, October 30 by 11:59 PM Overview...

Program 7
Arrays: building and sorting
(100 points)

Due: Friday, October 30 by 11:59 PM

Overview

For this assignment, write a program that will calculate the quiz average for a student in the CSCI 240 course. The student's quiz information will be needed for later processing, so it will be stored in an array.

For the assignment, declare one array that will hold a maximum of 12 integer elements (ie. the quiz scores).

It is recommended that this program be written in two versions. The first version of the program will read a set of quiz scores from standard input (the keyboard), as has been done since the start of the semester. The second version of the program will alter the first version so that the program reads from an input file, rather than standard input. The second version is the only one that will be handed in for grading.

Version 1

As mentioned above, this version of the program will read the set of quiz scores from standard input. A quiz score of -1 will signal the end data.

NOTE: all of the functions mentioned in this logic are described below.

Declare an array of integers and an integer variable to hold the number of quizzes that have been completed. If any other variables are needed, those should also be declared.

Fill the array by calling the buildQuizArray() function. The buildQuizArray() function returns the number of quiz scores that it read. This returned value should be saved in the the integer variable that holds the number of quizzes that have been completed.

Call the calcQuizAverage() function to calculate the student's quiz average. The calculated quiz average that is returned from the calcQuizAverage() function should be displayed with 2 digits after the decimal point and an appropriate label.

Display the student's quiz scores by calling the printQuizArray() function. Use a title such as "Quiz Scores".

Functions to write and use

Write and use the following 5 functions in the program.

int buildQuizArray( int quizArray[] )

This function will fill the array with the quiz scores.

It takes as its arguments an array of integers that will hold the quiz scores. It returns an integer that is equal to the number of quiz scores that were read. Note about the return value: this value is important because it's possible that the student has not completed the semester and therefore has not taken all 12 quizzes yet.

The function should start by declaring any variables that are needed. At a minimum, there should be two integers: a subscript and another to hold the quiz score that is entered by the user.

Initialize the subscript to the beginning of the array.

Get the first quiz score from the user. Make sure to indicate that a quiz score of -1 will end the input.

In a loop that will execute as long as the quiz score is not -1, put the quiz score into the array at the subscript position, increment the subscript to the next spot in the array, and get the next quiz score from the user.

Finally, return the number of quizzes that were placed in the array (think about the subscript).

void printQuizArray( string title, int quizArray[], int numberOfQuizzes )

This function will display the information for the quizzes that have been completed.

It takes three arguments: the first argument is a string that holds the title for the report that is being displayed, the second argument is an array of integers that holds the quiz scores, and the third argument is an integer that holds the number of quiz scores in the array.

It returns nothing.

The function should first display the string argument followed by a line of dashes on the next line.

In a loop that executes numberOfQuizzes number of times, display the quiz number and quiz score out of 10 points.

Use the following as a basic format for the output (this assumes that the string argument holds "Quiz Scores" and that numberOfQuizzes holds the value 5):

Quiz Scores
----------------
Quiz 1:     4/10
Quiz 2:    10/10
Quiz 3:     5/10
Quiz 4:    10/10
Quiz 5:     8/10

double calcQuizAverage( int quizArray[], int numberOfQuizzes )

This function will calculate a student's quiz average.

It takes two arguments: the first argument is an array of integers that holds the quiz scores, and the second argument is an integer that holds the number of quiz scores in the array.

It returns a double: the calculated quiz average.

The function should start by executing a loop that will calculate the sum of the quiz scores in the array.

If the student has taken more than two quizzes, the quiz average is calculated as follows (NOTE: the formula is long. Make sure you're getting the entire formula):

(sum of quiz scores - sum of 2 lowest quiz scores) / (10 * (number of quizzes - 2)) * 100

Notice that the sum of the two lowest quiz scores is part of the formula. This sum can easily be found by sorting the quiz scores in ascending order and then adding up the values at positions [0] and [1] of the array. However, avoid changing the array argument that is passed to the function because the order that the quiz scores were entered by the user must be maintained. Instead, create an array of twelve integers and call the copyArray() function that is described below to copy the original values from the array argument into the new array. Call the sortArray() function to sort the new array and then calculate the sum of the two lowest quiz scores using the new array.

If the student has taken two quizzes or fewer, the quiz average is calculated as follows:

sum of quiz scores / (10 * number of quizzes) * 100

Once the quiz average has been calculated, it should be returned.

void sortArray( int array[], int numberOfQuizzes )

This function will use the selection sort algorithm that was presented in lecture to sort the array in ASCENDING order.

It takes two arguments: the first argument is an array of integers that holds the quiz scores, and the second argument is an integer that holds the number of quiz scores in the array.

It returns nothing.

void copyArray( int destination[], int source[], int numberOfValues )

This function will copy a specific number of values from one array into another array.

It takes three arguments: the first argument is an array of integers that values will be copied into, the second argument is an array of integers that values will be copied from, and the third argument is an integer that holds the number of values to be copied.

It returns nothing.

In a loop that executes numberOfValues number of times, copy a value from the source array into the corresponding location in the destination array.

Version 1 Program Requirements:

  1. The array should be able to hold 12 elements. Use a symbolic constant to represent the maximum size of the array.

  2. The array has the capability to hold 12 elements, however, that does not mean that it will all be used. This is the reason that the number of elements in the array is being passed to the printQuizArray, calcQuizAverage, sortArray, and copyArray functions. This value is the return value from buildQuizArray.

Version 1 Output:

Run 1

Enter your score for quiz 1 (-1 to quit): 10
Enter your score for quiz 2 (-1 to quit): 0
Enter your score for quiz 3 (-1 to quit): 8
Enter your score for quiz 4 (-1 to quit): 6
Enter your score for quiz 5 (-1 to quit): 9
Enter your score for quiz 6 (-1 to quit): -1

Your quiz average is 90.00%

Quiz Scores
----------------
Quiz  1:   10/10
Quiz  2:    0/10
Quiz  3:    8/10
Quiz  4:    6/10
Quiz  5:    9/10

Run 2

Enter your score for quiz 1 (-1 to quit): 6
Enter your score for quiz 2 (-1 to quit): 7
Enter your score for quiz 3 (-1 to quit): -1

Your quiz average is 65.00%

Quiz Scores
----------------
Quiz  1:    6/10
Quiz  2:    7/10

Run 3

Enter your score for quiz 1 (-1 to quit): 10
Enter your score for quiz 2 (-1 to quit): 10
Enter your score for quiz 3 (-1 to quit): 0
Enter your score for quiz 4 (-1 to quit): 6
Enter your score for quiz 5 (-1 to quit): 7
Enter your score for quiz 6 (-1 to quit): 8
Enter your score for quiz 7 (-1 to quit): 6
Enter your score for quiz 8 (-1 to quit): 0
Enter your score for quiz 9 (-1 to quit): 10
Enter your score for quiz 10 (-1 to quit): 8
Enter your score for quiz 11 (-1 to quit): 10
Enter your score for quiz 12 (-1 to quit): 8
Enter your score for quiz 13 (-1 to quit): -1

Your quiz average is 83.00%

Quiz Scores
----------------
Quiz  1:   10/10
Quiz  2:   10/10
Quiz  3:    0/10
Quiz  4:    6/10
Quiz  5:    7/10
Quiz  6:    8/10
Quiz  7:    6/10
Quiz  8:    0/10
Quiz  9:   10/10
Quiz 10:    8/10
Quiz 11:   10/10
Quiz 12:    8/10

Version 2

This is the version of the program that will be submitted for grading. It does the same thing as Version 1 of the program, but the data will be read from an input file rather than standard input.

The majority of the changes for this version of the program will be made in the buildQuizArray function. The two changes that are not in buildQuizArray are to add #include <fstream> and #include <cstdlib> to the top of the code. The #includes are needed so that files can be used in the program.

Input File

The input for this version of the program will be read from a file named quizscores.txt. The file consists of a set of records that contain the quiz score that a student earned on a quiz in CSCI 240. Each record represents one quiz. The file resembles the following:

10
0
8
6
9

Changes to buildQuizArray

  1. Add a declaration for an input file stream to the variable declarations within buildQuizArray. For example:

ifstream infile;

Before getting the first quiz score from the user, open the input file. This will connect a variable in the program with the file of quiz scores.

infile.open( "quizscores.txt" );

The open statement will open a file named quizscores.txt.

Windows Users: the quizscores.txt file MUST be located in the same directory as the CPP file.

Mac Users: there are two options available to handle the input file.

  • Option 1: put in the set of double quotes ("") between the parenthesis for the open command, find where the file has been saved on your Mac, and then drag and drop the file in between the quotes. It should place the name of the file, including the complete path of where it is located on your Mac, between the quotes. If you use this option, before handing in the CPP file, remove the path name from the file name so that it only has quizscores.txt between the double quotes.

  • Option 2: Build the Program one time. In the Project Navigator (it's on the left side of the screen on my version of XCode), there should be two folders: one with the name of the project and another with the name Products. Click on the Products folder. There should be a file with the name of the project. Click on the file in the Products folder. In the File Inspector (it's on the right side of the screen on my version of XCode), there should be a "Full Path" label that is followed by the complete path where the executable for the project will be saved. Open this path in Finder by clicking on the small arrow after the path name. Put the quizscores.txt file in the location that opens in Finder. If you use this option, the open statement can be used as shown above.

Once the file has been opened, make sure that it opened correctly. This is an important step because a file cannot be processed if it doesn't exist or open correctly. To test if the file opened correctly:

if ( infile.fail() )
   {
   cout << "The quizscores.txt input file did not open";
   exit(-1);
   }

In version 1 of the program, cin was used to get data from standard input (the keyboard). Since this version of the program is reading input from a file rather than standard input, substitute the name of the input file stream (infile in the example above) in place of cin. The cout statements that display a prompt for the user are not needed with the data being read from a file.

If version 1 of the program had something like:

cout << "Enter the quiz score (-1 to quit): ";
cin >> num;
  

In version 2 of the program, it should now be:

infile >> num;

The input file does not have a quiz score -1 to indicate the end of data. Instead, the loop should test to see if there is data in the file. One way to do this is to use the input file stream variable as a boolean variable:

while( infile )

As long as there is information in the file, the input file stream variable will remain valid (or true). Once the end of the data has been reached, the stream will become invalid (or false). Note: this test is only successful AFTER an attempt has been made to read data from the file. This means that a standard read loop pattern with a priming and secondary read should be followed.

Finally, once all the data has been read from the file, the file should be closed. This should be placed after the closing curly brace for the loop but before the return statement for the function. To do this, execute the following:

infile.close();

Version 2 Output

The output that is produced with the quizscores.txt input file:

Your quiz average is 87.00%

Quiz Scores
----------------
Quiz  1:    9/10
Quiz  2:   10/10
Quiz  3:   10/10
Quiz  4:    9/10
Quiz  5:    0/10
Quiz  6:    4/10
Quiz  7:   10/10
Quiz  8:    8/10
Quiz  9:   10/10
Quiz 10:    0/10
Quiz 11:    7/10
Quiz 12:   10/10

0 0
Add a comment Improve this question Transcribed image text
Answer #1
#include<bits/stdc++.h>
using namespace std;
void buildarray(int *quiz,int n)
{
   for(int i=0;i<n;i++)
   {
      cin>>quiz[i];
   }
}
void printarray(int *quiz,int n)
{
   for(int i=0;i<n;i++)
   {
      cout<<quiz[i]<<" ";
   }
}
int quizaverage(int *quiz,int n)
{
   int sum=0;
   for(int i=0;i<n;i++)
   {
      sum=sum+quiz[i];
   }
   return sum/n;
}
void sortquiz(int *quiz,int n)
{
   sort(quiz,quiz+n);
}
int main()
{
   int n;
   cin>>n;
   int quiz[n];
   buildarray(quiz,n);
   printarray(quiz,n);
   quizaverage(quiz,n);
   sortquiz(quiz,n);
}

this is the optimized solution for above code in complexity nlogn.....just go through it and you will get to know .....


I hope this helps.

----

Your thumbs up means a lot to the expert.

Please leave a thumbs up if you are satisfied with the answer, and if you still have any queries regarding the solution, please feel free to ask in the comments section below. We will get back to you ASAP and would love to help you out. Thanks! Keep Learning, Keep Chegging!! :)

Add a comment
Know the answer?
Add Answer to:
Program 7 Arrays: building and sorting (100 points) Due: Friday, October 30 by 11:59 PM Overview...
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Similar Homework Help Questions
  • Program 7 File Processing and Arrays (100 points) Overview: For this assignment, write a program that...

    Program 7 File Processing and Arrays (100 points) Overview: For this assignment, write a program that will process monthly sales data for a small company. The data will be used to calculate total sales for each month in a year. The monthly sales totals will be needed for later processing, so it will be stored in an array. Basic Logic for main() Note: all of the functions mentioned in this logic are described below. Declare an array of 12 float/doubles...

  • IN C++ ADD COMMENTS AS MUCH AS POSSIBLE Exercise 1: Duplicate the Arrays Suppose you are...

    IN C++ ADD COMMENTS AS MUCH AS POSSIBLE Exercise 1: Duplicate the Arrays Suppose you are developing a program that works with arrays of integers, and you find that you frequently need to duplicate the arrays. Rather than rewriting the array-duplicating code each time you need it, you decide to write a function that accepts an array and its size as arguments. Creates a new array that is a copy of the argument array, and returns a pointer to the...

  • For this c++ assignment, Overview write a program that will process two sets of numeric information....

    For this c++ assignment, Overview write a program that will process two sets of numeric information. The information will be needed for later processing, so it will be stored in two arrays that will be displayed, sorted, and displayed (again). One set of numeric information will be read from a file while the other will be randomly generated. The arrays that will be used in the assignment should be declared to hold a maximum of 50 double or float elements....

  • Write a program that dynamically allocates an array in the freestore large enough to hold a...

    Write a program that dynamically allocates an array in the freestore large enough to hold a user defined number of test scores as doubles. Once all the scores are entered, the array should be passed to a function that finds the highest score. Another function the array should be passed to a function that finds the lowest score. Another function should be called that calculates the average score. The program should show the highest, lowest and average scores. Must use...

  • Write a program that dynamically allocates an array in the freestore large enough to hold a...

    Write a program that dynamically allocates an array in the freestore large enough to hold a user defined number of test scores as doubles. Once all the scores are entered, the array should be passed to a function that finds the highest score. Another function the array should be passed to a function that finds the lowest score. Another function should be called that calculates the average score. The program should show the highest, lowest and average scores. Must use...

  • Write a complete C++ program that reads students names and their test scores from an input...

    Write a complete C++ program that reads students names and their test scores from an input text file. The program should output each student’s name followed by the test scores and the relevant grade in an output text file. It should also find and display on screen the highest/lowest test score and the name of the students having the highest/lowest test score, average and variance of all test scores. Student data obtained from the input text file should be stored...

  • C++ Write a function parseScores which takes a single input argument, a file name, as a string. Your function should read each line from the given filename, parse and process the data, and print the r...

    C++ Write a function parseScores which takes a single input argument, a file name, as a string. Your function should read each line from the given filename, parse and process the data, and print the required information. Your function should return the number of student entries read from the file. Empty lines do not count as entries, and should be ignored. If the input file cannot be opened, return -1 and do not print anything.     Your function should be named...

  • CIS 22A C++ Project Exam Statistics Here is what your program will do: first it welcomes...

    CIS 22A C++ Project Exam Statistics Here is what your program will do: first it welcomes the user and displays the purpose of the program. It then prompts the user to enter the name of an input file (such as scores.txt). Assume the file contains the scores of the final exams; each score is preceded by a 5 characters student id. Create the input file: copy and paste the following data into a new text file named scores.txt DH232 89...

  • Use c++ as programming language. The file needs to be created ourselves (ARRAYS) Write a program...

    Use c++ as programming language. The file needs to be created ourselves (ARRAYS) Write a program that contains the following functions: 1. A function to read integer values into a one-dimensional array of size N. 2. A function to sort a one-dimensional array of size N of integers in descending order. 3. A function to find and output the average of the values in a one dimensional array of size N of integers. 4. A function to output a one-dimensional...

  • Using basic c++ write 2 separate codes for this assignment. Program #1 Write a program that...

    Using basic c++ write 2 separate codes for this assignment. Program #1 Write a program that calculates the average of a group of test scores, where the lowest score in the group is dropped. It should use the following functions. • void getScore() should ask the user for a test score, store it in the reference parameter variable, and validate it. This function should be called by the main once for each of the five scores to be entered. •...

ADVERTISEMENT
Free Homework Help App
Download From Google Play
Scan Your Homework
to Get Instant Free Answers
Need Online Homework Help?
Ask a Question
Get Answers For Free
Most questions answered within 3 hours.
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT