Can someone help me with my computer programming homework? My mind is really blown and I'm really new to all of this!

I need help finding and fixing 6 errors in this thing that I can't find as soon as possible, thanks!


/*
calculator08buggy.cpp

We have inserted 3 bugs that the compiler will catch and 3 that it won't.
*/ //This is what my teacher put on it

#include "std_lib_facilities.h"

struct Token {
char kind;
double value;
string name;
Token(char ch) :kind(ch), value(0) { }
Token(char ch, double val) :kind(ch), value(val) { }
};

class Token_stream {
bool full;
Token buffer;
public:
Token_stream() :full(0), buffer(0) { }

Token get();
void unget(Token t) { buffer=t; full=true; }

void ignore(char);
};

const char let = 'L';
const char quit = 'Q';
const char print = ';';
const char number = '8';
const char name = 'a';

Token Token_stream::get()
{
if (full) { full=false; return buffer; }
char ch;
cin >> ch;
switch (ch) {
case '(':
case ')':
case '+':
case '-':
case '*':
case '/':
case '%':
case ';':
case '=':
return Token(ch);
case '.':
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
{ cin.unget();
double val;
cin >> val;
return Token(number,val);
}
default:
if (isalpha(ch)) {
string s;
s += ch;
while(cin.get(ch) && (isalpha(ch) || isdigit(ch))) s=ch;
cin.unget();
if (s == "let") return Token(let);
if (s == "quit") return Token(name);
return Token(name,s);
}
error("Bad token");
}
}

void Token_stream::ignore(char c)
{
if (full && c==buffer.kind) {
full = false;
return;
}
full = false;

char ch;
while (cin>>ch)
if (ch==c) return;
}

struct Variable {
string name;
double value;
Variable(string n, double v) :name(n), value(v) { }
};

vector<Variable> names;

double get_value(string s)
{
for (int i = 0; i<names.size(); ++i)
if (names[i].name == s) return names[i].value;
error("get: undefined name ",s);
}

void set_value(string s, double d)
{
for (int i = 0; i<=names.size(); ++i)
if (names[i].name == s) {
names[i].value = d;
return;
}
error("set: undefined name ",s);
}

bool is_declared(string s)
{
for (int i = 0; i<names.size(); ++i)
if (names[i].name == s) return true;
return false;
}

Token_stream ts;

double expression();

double primary()
{
Token t = ts.get();
switch (t.kind) {
case '(':
{ double d = expression();
t = ts.get();
if (t.kind != ')') error("'(' expected");
}
case '-':
return - primary();
case number:
return t.value;
case name:
return get_value(t.name);
default:
error("primary expected");
}
}

double term()
{
double left = primary();
while(true) {
Token t = ts.get();
switch(t.kind) {
case '*':
left *= primary();
break;
case '/':
{ double d = primary();
if (d == 0) error("divide by zero");
left /= d;
break;
}
default:
ts.unget(t);
return left;
}
}
}

double expression()
{
double left = term();
while(true) {
Token t = ts.get();
switch(t.kind) {
case '+':
left += term();
break;
case '-':
left -= term();
break;
default:
ts.unget(t);
return left;
}
}
}

double declaration()
{
Token t = ts.get();
if (t.kind != 'a') error ("name expected in declaration");
string name = t.name;
if (is_declared(name)) error(name, " declared twice");
Token t2 = ts.get();
if (t2.kind != '=') error("= missing in declaration of " ,name);
double d = expression();
names.push_back(Variable(name,d));
return d;
}

double statement()
{
Token t = ts.get();
switch(t.kind) {
case let:
return declaration();
default:
ts.unget(t);
return expression();
}
}

void clean_up_mess()
{
ts.ignore(print);
}

const string prompt = "> ";
const string result = "= ";

void calculate()
{
while(true) try {
cout << prompt;
Token t = ts.get();
while (t.kind == print) t=ts.get();
if (t.kind == quit) return;
ts.unget(t);
cout << result << statement() << endl;
}
catch(runtime_error& e) {
cerr << e.what() << endl;
clean_up_mess();
}
}

int main()

try {
calculate();
return 0;
}
catch (exception& e) {
cerr << "exception: " << e.what() << endl;
char c;
while (cin >>c&& c!=';') ;
return 1;
}
catch (...) {
cerr << "exception\n";
char c;
while (cin>>c && c!=';');
return 2;
}

I am really lost with all of this, it wasn't properly explained and no matter how much I ask for help it just seems like words dig me into a deeper misunderstanding hole..

Thank You in advance.
#include "std_lib_facilities.h"


Are you using bjarne stroustrup's book? Principles and Practice Using C++
;D
Yes indeed I am! But, unfortunately, it's just not clicking in my head x/ Like I no matter how many times I read the book, the chapters, they're just not making any sense in my head.. Is programming somewhat like an either you get it or you don't type/deal situation? lol
*-* is he your teacher?
Yes.. why?
Are you kidding me? :O
you're a lucky guy!!! :'( ...snif!!!
Well I would believe I was lucky if I actually understood the guy haha he is indeed very intellectual and has a vast experience in the computer world, though the problem is I have none, zero experience with programming but is something I would like to do, it is why I'm in the Introduction to C++ course but it seems that everyone else in the class has had some programming experience and knowledge prior to enrolling in the course so to me it feels as if though they're making me jump from the bird's nest with no wings.. Like I guess even though it's an "Introductory" course they're assuming everyone knows most of the things (and most people do) but they (I say they because Dr. Stroustrup teaches the course with Dr. Daughterity) simply go on with terms I have never ever used before and what not.. So I'm pretty darn lost heh xP.
So..what are you doing here? xD e-mail him!!!! ask for extra classes!!!!!!! >.<
This book begins making cakes -no joke you know it-,it's aimed to beginners! -really beginners-.
You have to be emailing him!!!! asking questions every day!!!!!
You are the luckiest C++ beginner programmer in the world! >.<!!!
Last edited on
Topic archived. No new replies allowed.