|
ex2-3.cpp - Example 2-3 Reference Variables - function parameters (2) |
// File: ex2-3.cpp Reference Variables - function parameters
#include <iostream>
#include <string>
using namespace std;
const int NumTeams = 5;
const int NumScores = 11;
struct team {
char name[10];
unsigned won;
unsigned lost;
unsigned tied;
};
struct league {
team teams[NumTeams];
};
struct score {
char teamname[2][10];
unsigned points[2];
};
// function prototypes
void initializeLeague(league& L);
void enterScores(score S[]);
int getTeamNumFromName(league& L, const char* Name);
void updateWonLostTied(league& L, score* S);
void printLeagueStats(league& L);
int main (void) {
league Birds;
score Scores[NumScores];
initializeLeague(Birds);
enterScores(Scores);
updateWonLostTied(Birds,Scores);
printLeagueStats(Birds);
return 0;
}
// Assign team names and zero out won, lost, tied
void initializeLeague(league& L) {
for (int i = 0; i < NumTeams; i++)
{
cout << "Enter team name => ";
cin >> L.teams[i].name;
L.teams[i].won = 0;
L.teams[i].lost = 0;
L.teams[i].tied = 0;
}
cout << endl << NumTeams << " teams initialized\n\n";
}
void enterScores(score S[]) {
cout << "Enter " << NumScores << " scores:\n";
for (int i = 0; i < NumScores; i++)
{
cout << "<team #1> <score #1> <team #2> <score #2> => ";
cin >> S[i].teamname[0] >> S[i].points[0]
>> S[i].teamname[1] >> S[i].points[1];
}
cout << endl << NumScores << " scores entered\n\n";
}
// lookup and return the teamno
int getTeamNumFromName(league& L, const char* Name) {
for (int i = 0; i < NumTeams; i++)
{
if (strcmp(L.teams[i].name,Name) == 0) return i;
}
cerr << "Error: unable to find team: " << Name << endl;
return -1; // team name not found
}
void updateWonLostTied(league& L, score* S)
{
int i,
team0,
team1;
for (i = 0; i < NumScores; i++)
{
team0 = getTeamNumFromName(L,S[i].teamname[0]);
team1 = getTeamNumFromName(L,S[i].teamname[1]);
// if team name is bad, don't use the score
if (team0 == -1 || team1 == -1) continue;
if (S[i].points[0] > S[i].points[1]) { // team0 won
L.teams[team0].won++;
L.teams[team1].lost++;
}
if (S[i].points[0] < S[i].points[1]) { // team1 won
L.teams[team1].won++;
L.teams[team0].lost++;
}
if (S[i].points[0] == S[i].points[1]) { // tie game
L.teams[team0].tied++;
L.teams[team1].tied++;
}
}
}
void printLeagueStats(league& L) {
int i;
cout << "\nName\tWon\tLost\tTied\n";
for (i = 0; i < NumTeams; i++)
{
cout << L.teams[i].name << '\t'
<< L.teams[i].won << '\t'
<< L.teams[i].lost << '\t'
<< L.teams[i].tied << '\n';
}
}
/************************ Sample Run ****************************
Enter team name => coots
Enter team name => ducks
Enter team name => eagles
Enter team name => finches
Enter team name => geese
5 teams initialized
Enter 11 scores:
<team #1> <score #1> <team #2> <score #2> => coots 5 ducks 2
<team #1> <score #1> <team #2> <score #2> => coots 3 eagles 7
<team #1> <score #1> <team #2> <score #2> => coots 1 finches 0
<team #1> <score #1> <team #2> <score #2> => coots 0 geese 0
<team #1> <score #1> <team #2> <score #2> => ducks 1 eagles 4
<team #1> <score #1> <team #2> <score #2> => ducks 5 finches 2
<team #1> <score #1> <team #2> <score #2> => ducks 2 geese 1
<team #1> <score #1> <team #2> <score #2> => eagles 7 finches 7
<team #1> <score #1> <team #2> <score #2> => eagles 8 geese 5
<team #1> <score #1> <team #2> <score #2> => finches 3 geese 2
<team #1> <score #1> <team #2> <score #2> => gooses 9 ducks 2
11 scores entered
Error: unable to find team: gooses
Name Won Lost Tied
coots 2 1 1
ducks 2 2 0
eagles 3 0 1
finches 1 2 1
geese 0 3 1
******************************************************************/
CIS27: Programming in C++ Instructor: Joe Bentley