The only error I get in this code is in line 6. i\'m using Dev C++ compiler. It
ID: 3634313 • Letter: T
Question
The only error I get in this code is in line 6. i'm using Dev C++ compiler. It says expected identifier before "false", expected '{' before "false", expected unqualified-id before "false", expected ',' or ';' before "false", expected declaration before '}' token. everything else shows no error. i don't get it thanks in advance. program supposed to output:
s1 = {10,20,30,40} // Added Elements in set
s2 = {30,50,10,60} // Added Elements in set
s2 - {50} = {30,10,60} // Function call to remove 50
20 is in s1 // printing if 20 belongs to s1 as text
s1 intsec s2 = {10,30} // S1 N S2
s1 union s2 = {30,10,60,20,40} //S1 U S
2s1 /= s2 // print a cout statement if two sets are not equal
/*****************************************************************************/
#include <iostream>
#include <cstdlib>
const int maxCard = 100;
enum Bool {false, true};
class Set
{
public:
void EmptySet (void) {card = 0;}
Bool Member (const int);
void AddElem (const int);
void RmvElem (const int);
void Copy (Set&);
Bool Equal (Set&);
void Intersect (Set&, Set&);
void Union (Set&, Set&);
void Print (void);
private:
int elems[maxCard]; //set elements
int card; //set cardinality
};
//Implementation file
Bool Set::Member (const int elem)
{
for (register i = 0; i < card; ++i)
if (elems[i] == elem)
return true;
return false
}
void Set::AddElem (const int elem)
{
if (Member(elem))
return;
if (card < maxCard)
elems[card++] = elem;
else
cout << "Set overflow ";
}
void Set::RmvElem (const int elem)
{
for (register i = 0; i < card; ++i)
if (elems[i] == elem)
{
for (; i < card-1; ++i)
elems[i]-elems[i+1];
--card;
}
}
void Set::Copy (Set &set)
{
for (register i = 0; i < card; ++i)
set.elems[i] = elems[i];
set.card = card
}
Bool Set::Equal (Set &set)
{
if (card != set.card)
return false;
for (register i = 0; i < card; ++i)
if (!set.Member(elems[i]))
return false;
return true;
}
void Set::Intersect (Set &set, Set &res)
{
res.card = 0;
for (register i = 0; i < card; ++i)
if (set.Member(elems[i]))
res.elems[res.card++] = elems[i];
}
void Set::Union (Set &set, Set &res)
{
set.Copy(res);
for (register i = 0; i < card; ++i)
res.AddElem(elems[i]);
}
void Set::Print (void)
{
cout << "{";
for (int i = 0; i < card-1; ++i)
cout << elems[i] << ",";
if (card > 0)
cout << elems[card-1];
cout << "} ";
}
//Main Program
int main()
{
Set s1, s2, s3;
s1.EmptySet();
s2.EmptySet();
s3.EmptySet();
s1.AddElem(10);
s1.AddElem(20);
s1.AddElem(30);
s1.AddElem(40);
s2.AddElem(30);
s2.AddElem(50);
s2.AddElem(10);
s2.AddElem(60);
cout << "s1 = ";s1.Print();
cout << "s2 = ";s2.Print();
s2.RmvElem(50);cout << "s2 - {50} = ";
s2.Print();
if (s1.Member(20))
cout << "20 is in s1 ";
s1.Intersect(s2,s3);
cout << "s1 intsec s2 = ";
s3.Print();s1.Union(s2,s3);
cout << "s1 union s2 = ";
s3.Print();
if (!s1.Equal(s2))
cout << "s1 /= s2 ";
system("PAUSE");
return 0;
}
Explanation / Answer
please rate - thanks
true and false are keywords (reserved words) in C++ and can only be used as such. I changes them to mytrue and myfalse.
you were missing using namespace std
and I changed all register to int. I didn't understand that
it now compiles and runs, and just needs a little debugging
/*****************************************************************************/
#include <iostream>
#include <cstdlib>
using namespace std;
const int maxCard = 100;
enum Bool {myfalse,mytrue};
class Set
{
public:
void EmptySet (void) {card = 0;}
Bool Member (const int);
void AddElem (const int);
void RmvElem (const int);
void Copy (Set&);
Bool Equal (Set&);
void Intersect (Set&, Set&);
void Union (Set&, Set&);
void Print (void);
private:
int elems[maxCard]; //set elements
int card; //set cardinality
};
//Implementation file
Bool Set::Member (const int elem)
{
for (int i = 0; i < card; ++i)
if (elems[i] == elem)
return mytrue;
return myfalse;
}
void Set::AddElem (const int elem)
{
if (Member(elem))
return;
if (card < maxCard)
elems[card++] = elem;
else
cout << "Set overflow ";
}
void Set::RmvElem (const int elem)
{
for (int i = 0; i < card; ++i)
if (elems[i] == elem)
{
for (; i < card-1; ++i)
elems[i]-elems[i+1];
--card;
}
}
void Set::Copy (Set &set)
{
for (int i = 0; i < card; ++i)
set.elems[i] = elems[i];
set.card = card;
}
Bool Set::Equal (Set &set)
{
if (card != set.card)
return myfalse;
for (int i = 0; i < card; ++i)
if (!set.Member(elems[i]))
return myfalse;
return mytrue;
}
void Set::Intersect (Set &set, Set &res)
{
res.card = 0;
for (int i = 0; i < card; ++i)
if (set.Member(elems[i]))
res.elems[res.card++] = elems[i];
}
void Set::Union (Set &set, Set &res)
{
set.Copy(res);
for (int i = 0; i < card; ++i)
res.AddElem(elems[i]);
}
void Set::Print (void)
{
cout << "{";
for (int i = 0; i < card-1; ++i)
cout << elems[i] << ",";
if (card > 0)
cout << elems[card-1];
cout << "} ";
}
//Main Program
int main()
{
Set s1, s2, s3;
s1.EmptySet();
s2.EmptySet();
s3.EmptySet();
s1.AddElem(10);
s1.AddElem(20);
s1.AddElem(30);
s1.AddElem(40);
s2.AddElem(30);
s2.AddElem(50);
s2.AddElem(10);
s2.AddElem(60);
cout << "s1 = ";s1.Print();
cout << "s2 = ";s2.Print();
s2.RmvElem(50);cout << "s2 - {50} = ";
s2.Print();
if (s1.Member(20))
cout << "20 is in s1 ";
s1.Intersect(s2,s3);
cout << "s1 intsec s2 = ";
s3.Print();s1.Union(s2,s3);
cout << "s1 union s2 = ";
s3.Print();
if (!s1.Equal(s2))
cout << "s1 /= s2 ";
system("PAUSE");
return 0;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.