Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

This homework tests your understanding of the topics related to C++ Programming and more practice using Pointers and Arrays. The program processes an input file

This homework tests your understanding of the topics related to C++ Programming and more practice using Pointers and Arrays.

The program processes an input file of data for a personality test known as the Keirsey Temperament Sorter. The Keirsey personality test involves answering 70 questions each of which have two answers. We will refer to them as the A answer and the B answer. People taking the test are allowed to leave a question blank, in which case their answer will be recorded with a dash (-).

The input file will contain a series of line pairs, one per person. The first line will have the persons name (possibly including spaces) and the second line will have a series of 70 letters all in a row (all either A, B or -). Your job is to compute the scores and overall result for each person and to report this information to an output file.

The Keirsey test measures four independent dimensions of personality:

Extrovert versus Introvert (E vs I): what energizes you Sensation versus iNtuition (S vs N): what you focus on Thinking versus Feeling (T vs F): how you interpret what you focus on Judging versus Perceiving (J vs P): how you approach life

Individuals are categorized as being on one side or the other of each of these dimensions. The corresponding letters are put together to form a personality type. For example, if you are an extravert, intuitive, thinking, perceiving person then you are referred to as an ENTP. Usually the letter used is the first letter of the corresponding word, but notice that because the letter I is used for Introvert, the letter N is used for iNtuition.

Remember that the Keirsey test involves 70 questions answered either A or B. The A answers correspond to extravert, sensation, thinking and judging (the left-hand answers in the list above). The B answers correspond to introvert, intuition, feeling and perceiving (the right-hand answers in the list above). For each of these dimensions, we determine a number between 0 and 100 and indicate whether they were closer to the A side or the B side. The number is computed by figuring out what percentage of B answers the user gave for that dimension (rounded to the nearest integer).

Lets look at a specific example. Suppose that someones answers divide up as follows:

These numbers correspond to the answers given by the first person in the sample input file (Betty Boop). We add up how many of each type of answer we got for each of the four dimensions. Then we compute the percentage of B answers for each dimension. Then we assign letters based on which side the person ends up on for each dimension. In the Extrovert/Introvert dimension, for example, the person gave 9 B answers out of 10 total, which is 90%, which means they end up on the B side which is Introvert or I. In the Sensing/iNtuition dimension the person gave 3 B answers out of 20 total, which is 15%, which means they end up on the A side with is Sensing or S. The overall scores for this person are the percentages (90, 15, 10, 10) which works out to a personality type of ISTJ.

Some people will end up with a percentage of 50 in one or more dimensions. This represents a tie, where the person doesnt clearly fall on either side. In this case we use the letter X to indicate that the person is in the middle for this particular dimension. The last two entries in the sample input file end up with Xs in their personality type.

Take a moment to compare the sample input file and the sample output file and you will see that each pair of lines in the input file is turned into a single line of output in the output file that reports the persons name, the list of percentages and the personality type. You are required to exactly reproduce the format of this output file.

To count the number of A and B answers for each dimension, you need to know something about the structure of the test. You will get the best results if you take the test without knowing about the structure, so you might want to take the test first before you read what follows. The test has 10 groups of 7 questions with a repeating pattern in each group of 7 questions. The first question in each group is an Introvert/Extrovert question (questions 1, 8, 15, 22, etc). The next two questions are for Sensing/iNtuition (questions 2, 3, 9, 10, 16, 17, 23, 24, etc). The next two questions are for Thinking/Feeling (questions 4, 5, 11, 12, 18, 19, 25, 26, etc). And the final two questions in each group are for Judging/Perceiving (questions 6, 7, 13, 14, 20, 21, 27, 28, etc). Notice that there are half as many Introvert/Extrovert questions as there are for the other three dimensions. The seventy letters in the input file appear in question order (first letter for question 1, second letter for question 2, third letter for question 3, etc).

Remember that the user might leave a question blank, in which case you will find a dash in the input file for that question. Dash answers are not included in computing the percentages. For example, if for one of the dimensions you have 6 A answers, 9 B answers and 5 dashes, you would compute the percentage of B answers as 9 of 15, or 60%.

For this assignment you are to read from a file called personality.txt and write your results to a file called personality.out.

One of the things to keep in mind for this program is that you are transforming data from one form to another. You start with a string that has 70 characters in it. You convert that into two sets of counters (how many A answers for each dimension, how many B answers for each dimension). You convert that into a set of percentages. And you finally convert that into a String that represents the personality type. If you work through this step by step, the problem will be easier to solve.

Notice that the letters A and B in the sample input file sometimes appear as uppercase letters and sometimes appear as lowercase letters. Your program must recognize them in either case.

You may assume that the input file has no errors. In particular, you may assume that the file is composed of pairs of lines and that the second line in each pair will have exactly 70 characters that are either A, B or dash (although the As and Bs might be in either uppercase form or lowercase form or a combination). You may also assume that nobody has zero answers for a given dimension (it would be impossible to determine a percentage in that case).

Your program is likely to have the number 4 in several places because of the four dimensions of this test. You should introduce a constant to make this more readable instead of using 4 itself. It wont be possible, however, to change this constant to some other number and have the program function properly. The constant is helpful for documentation purposes, but it wont make the program particularly flexible.

Your functions should be defined in a file called personality.cpp.

You can find out more about the Keirsey Temperament Sorter at http://www.keirsey.com.

Input file personality.txt

Betty Boop

BABAAAABAAAAAAABAAAABBAAAAAABAAAABABAABAAABABABAABAAAAAABAAAAAABAAAAAA

Snoopy

AABBAABBBBBABABAAAAABABBAABBAAAABBBAAABAABAABABAAAABAABBBBAAABBAABABBB

Bugs Bunny

aabaabbabbbaaaabaaaabaaaaababbbaabaaaabaabbbbabaaaabaabaaaaaabbaaaaabb

Daffy Duck

BAAAAA-BAAAABABAAAAAABA-AAAABABAAAABAABAA-BAAABAABAAAAAABA-BAAABA-BAAA

The frumious bandersnatch

-BBaBAA-BBbBBABBBBA-BaBBBBBbbBBABBBBBBABB-BBBaBBABBBBBBB-BABBBBBBBBBBB

Minnie Mouse

BABA-AABABBBAABAABA-ABABAAAB-ABAAAAAA-AAAABAAABAAABAAAAAB-ABBAAAAAAAAA

Luke Skywalker

bbbaaabbbbaaba-BAAAABBABBAAABBAABAAB-AAAAABBBABAABABA-ABBBABBABAA-AAAA

Han Solo

BA-ABABBB-bbbaababaaaabbaaabbaaabbabABBAAABABBAAABABAAAABBABAAABBABAAB

Princess Leia

BABBAAABBBBAAABBA-AAAABABBABBABBAAABAABAAABBBA-AABAABAAAABAAAAABABBBAA

Output file personality.out (Checkpoint output)

Betty Boop: 1 17 18 18 9 3 2 2

Snoopy: 7 11 14 6 3 9 6 14

Bugs Bunny: 8 11 17 9 2 9 3 11

Daffy Duck: 0 16 16 17 10 1 4 1

The frumious bandersnatch: 1 1 5 4 6 19 15 14

Minnie Mouse: 3 13 13 18 6 5 6 1

Luke Skywalker: 1 7 14 15 8 11 5 5

Han Solo: 2 9 11 15 8 9 9 5

Princess Leia: 2 10 9 19 8 10 9 1

Output file personality.out (Final output)

Betty Boop: [90, 15, 10, 10] = ISTJ

Snoopy: [30, 45, 30, 70] = ESTP

Bugs Bunny: [20, 45, 15, 55] = ESTP

Daffy Duck: [100, 6, 20, 6] = ISTJ

The frumious bandersnatch: [86, 95, 75, 78] = INFP

Minnie Mouse: [67, 28, 32, 5] = ISTJ

Luke Skywalker: [89, 61, 26, 25] = INTJ

Han Solo: [80, 50, 45, 25] = IXTJ

Princess Leia: [80, 50, 50, 5] = IXXJ

#include

#include

/*

* Personality test to keep tally of answers,

* percentages and the result for a person.

*/

const int SIZE = 4;

const int Q_SIZE = 70;

const int N_SIZE = 80;

const char LETTERS[] = "ESTJINFP";

const char X = 'X';

/*

* A structure that stores the name of each person, their answers

* their answer counts, their percentages for the four

* categories and the final result (ISTJ)

*/

struct personality {

char name[N_SIZE];

char answers[Q_SIZE];

int counts[SIZE * 2];

int percentages[SIZE];

char result[SIZE];

};

typedef struct personality Personality;

// Populates their corresponding name and answers.

void processData(Personality *, char *name, char answers[]);

// Iterates through the personality answers and tallies

// up the counts for the answers.

void processCounts(Personality *);

// Iterates through the personality counts and calculates

// the percentages based on the counts.

void calculatePercentages(Personality *);

// Determines the personality and sets the result for the person.

void determinePersonality(Personality *);

int main(){

return 0;

}

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

More Books

Students also viewed these Databases questions