Part B: Character data play an important part in many computer problems. It is i
ID: 3777066 • Letter: P
Question
Part B: Character data play an important part in many computer problems. It is important to get used to working with character data even though you will find that character data is slightly more difficult to work with in C++ than other high level programming languages.
You are to write a C++ program that should read in four words at a time, each word being no longer than 9 characters. The program is to print out each set of words on a separate line, in alphabetical order. After the last set of words has been processed the program is to print out:
a) the number of sets processed
b) the number of sets that were in alphabetical order to start with, and needed no rearranging.
In order to simplify the reading in of the input data, a "procedure" (or subprogram) should be prepared to do most of the work for you.
NOTES ON LOGIC
The basic algorithm for this problem is a sort routine.
1) You simply get the "largest" word into WORD4 position first. (The first three decision steps do this.)
2) You then get the "second largest" word into WORD3 position. (The fourth and fifth decision steps do this.)
3) And then you will get the first and second words into their proper positions. (The sixth decision step does this.)
4) Swapping is accomplished by three steps: a) move "high value word" to TEMP b) move "low value word" to "low value box" c) move "TEMP" word to "high value box"
5) The SWITCH variable is used to record the occurrence of a "swap". Since SWITCH and "swap" means rearranging was needed, the INORDER counter is not increased by 1 when SWITCH is still = `YES`.
If you understand the improved "bubble sort" method you can go ahead and use it. You must enter the strings one character at a time and insert a null character at the end of each word so that you can use the string library functions.
USE THE FOLLOWING INPUT DATA TO TEST YOUR PROGRAM: Note that the data is left justified, that is, if a word is not exactly 9 characters in length, blank spaces are filled in on the right. This is done because blanks are less than any letter.
SAMPLE INPUT
SALESMAN MONTH PROGRAM WRITE
SEE THE BLUE SKY
CAT THROUGH A RAN
THE TOP TUMBLED TO
WHENEVER WATER WAS WHITE
A BLUE CLEAR SKY
SAMPLE OUTPUT Check your answers against the following before handing in or finishing your lab. The spacing of the output must be as shown below.
MONTH PROGRAM SALESMAN WRITE
BLUE SEE SKY THE
A CAT RAN THROUGH
THE TO TOP TUMBLED
WAS WATER WHENEVER WHITE
A BLUE CLEAR SKY
NUMBER OF CARDS = 6
NUMBER IN ORDER = 1
Explanation / Answer
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <conio.h>
#define in_file "data.txt"
using namespace std;
void in_string(char[],char[],char[],char[]);
void sort_string(char[],char[],char[],char[]);
void exchange(char[],char[]);
void output_string(char[],char[],char[],char[]);
ifstream ins;
const int limit = 10;
int set = 0, INORDER;
void main()
{
char word1[limit],word2[limit],word3[limit],word4[limit];
char next_char;
ins.open(in_file);
while(!ins.eof())
{
INORDER = set;
in_string(word1,word2,word3,word4);
sort_string(word1,word2,word3,word4);
output_string(word1,word2,word3,word4);
cout << endl;
ins.get(next_char);
set++;
}
cout << " NUMBER OF CARDS = " << set;
cout << " NUMBER IN ORDER = " << INORDER;
getch();
ins.close();
}
void in_string(char st1[],char st2[],char st3[],char st4[])
{
ins >> st1;
ins >> st2;
ins >> st3;
ins >> st4;
}
void sort_string(char a[],char b[],char c[],char d[])
{
if(strcmp(a,b) > 0) exchange(a,b);
else INORDER--;
if(strcmp(b,c) > 0) exchange(b,c);
else INORDER--;
if(strcmp(c,d) > 0) exchange(c,d);
if(strcmp(a,b) > 0) exchange(a,b);
else INORDER--;
if(strcmp(b,c) > 0) exchange(b,c);
if(strcmp(a,b) > 0) exchange(a,b);
else INORDER--;
}
void exchange(char A[],char B[])
{
char temp[limit];
strcpy(temp,A);
strcpy(A,B);
strcpy(B,temp);
}
void output_string(char w1[],char w2[],char w3[],char w4[])
{
cout << w1 << " " << setw(4);
cout << setw(4) << w2 << " ";
cout << setw(4) << w3 << " ";
cout << setw(4) << w4 << " ";
}