Thursday 11 April 2013

Checked



Can anyone give me a hint as to why there are garbage symbols after checked option?

Tuesday 9 April 2013

double CoinStack::value()


double CoinStack::value(){
  double value = 0.0;
  Coin C;
  open(_fname, ios::out|ios::binary);
  if(!fail()){
    while(!IsEmpty()){
      C = pop();
      value += (int)C;
      write((const char*)&C, sizeof(C));
    }
  }
  close();
  open(_fname, ios::in|ios::binary);
  if(!fail()){
    seekg(0, ios::end);
    int curloc = (int)tellg() - sizeof(Coin);
    while(curloc >= 0){
      seekg((ios::pos_type)curloc);
      read((char*)&C, sizeof(C));
      push(C);
      curloc -= sizeof(C);
    }
  }
  close();
  clear();
  open(_fname, ios::out|ios::trunc);
  close();
  return value;
}

Backward Binary Print with seekg and ios::cur


#include <iostream>
#include <fstream>
using namespace std;

int main(){
  int i;
  int loc;
  fstream file("output.bin", ios::in|ios::binary);
  while(!file.fail()){
    file.read((char*)&i, sizeof(i));
    if(!file.fail()){
      cout<<i<<", ";
    }
  }
  cout<<endl;
  file.clear();
  cout<<(loc = file.tellg())<<endl;
  loc -= sizeof(int);
  while (loc >= 0){
    file.seekg((ios::pos_type)loc);
    file.read((char*)&i, sizeof(i));
    cout<<i<<", ";
    loc -= sizeof(int);
  }
  file.seekg((ios::off_type)0, ios::end);
  while(file.tellg()) {
    file.seekg((ios::off_type)-(signed)sizeof(int), ios::cur);
    file.read((char*)&i, sizeof(i));
    cout<<i<<", ";
    file.seekg((ios::off_type)-(signed)sizeof(int), ios::cur);
  }
  return 0;
}

DLL Template


#ifndef __DLLTemp_H__
#define __DLLTemp_H__

template <class T>
class DLL;

template <class T>
class Node{
  T _data;
  Node<T>* _prev;
  Node<T>* _next;
  Node(T data, Node<T>* prev=(Node<T>*)0, Node<T>* next=(Node<T>*)0);// just incase, review later
  friend class DLL<T>;
};

template <class T>
class DLL{
  Node<T>* _head;
  Node<T>* _curr;
  Node<T>* _tail;
  void copy(DLL<T>& D);
public:
  DLL();
  DLL(DLL<T>& D);
  virtual ~DLL();
  bool isEmpty();
  void append(T data);
  DLL<T>& operator=(DLL<T>& D);
  T remove();   // removes the current node and returns the data
  bool del();     // removes the current node returns false if is empty
  void insert(T data); // insterts before current
  bool goHead();
  bool goTail();
  bool goNext();
  bool goPrev();
  T visit();    // returns the current data
};

template <class T>
Node<T>::Node(T data, Node<T>* prev, Node<T>* next){
  _data = data;
  _prev = prev;
  _next = next;
}

template <class T>
DLL<T>::DLL(){
  _head = _tail = _curr = 0;
}

template <class T>
DLL<T>::~DLL(){
  while(del());
}

template <class T>
void DLL<T>::copy(DLL<T>& D){
  int curpos;
  for(curpos=0;D.goPrev();curpos++); // findout where is current
  if(!D.isEmpty()){
    do{
      this->append(D.visit());
    }while(D.goNext());
  }
  for(D.goHead(), this->goHead();curpos;D.goNext(), this->goNext(),curpos--);
}

template <class T>
DLL<T>::DLL(DLL<T>& D){
  _head = _tail = _curr = 0;
  copy(D);
}

template <class T>
DLL<T>& DLL<T>::operator=(DLL<T>& D){
  while(del());
  copy(D);
  return *this;
}

template <class T>
void DLL<T>::append(T data){
  Node<T>* newnode = new Node<T>(data);
  if(_tail){  // ! empty
    _tail->_next = newnode;
    newnode->_prev = _tail;
    _tail = _curr = newnode;
  }
  else{
    _tail = _curr = _head = newnode;
  }
}

template <class T>
T DLL<T>::remove(){
  T data = visit();
  del();
  return data;
}

template <class T>
bool DLL<T>::del(){
  bool ok = false;
  if(_curr){
    ok = true;
    Node<T>* todel = _curr;
    if(_curr->_next){
      _curr->_next->_prev = _curr->_prev;
    }
    else{
      _tail = _tail->_prev;
    }
    if(_curr->_prev){
      _curr->_prev->_next = _curr->_next;
    }
    else{
      _head = _head->_next;
    }
    _curr = _curr->_next;
    delete todel;
  }
  return ok;
}

template <class T>
void DLL<T>::insert(T data){
  if(_head == _curr){
    _head = new Node<T>(data, (Node<T>*)0, _head);
    _curr->_prev = _head;
  }
  else {
    _curr->_prev = new Node<T>(data, _curr->_prev, _curr);
    _curr->_prev->_prev->_next = _curr->_prev;
  }
}

template <class T>
T DLL<T>::visit(){               // retruns data of current
return _curr->_data;
}

template <class T>
bool DLL<T>::goHead(){
  _curr = _head;
  return (_curr != 0);
}

template <class T>
bool DLL<T>::goTail(){
  _curr = _tail;
  return (_curr != 0);
}

template <class T>
bool DLL<T>::goNext(){
  bool rt = false;
  if(_curr->_next){
    rt = true;
    _curr = _curr->_next;
  }
  return rt;
}

template <class T>
bool DLL<T>::goPrev(){
bool rt = false;
  if(_curr->_prev){
    rt = true;
    _curr = _curr->_prev;
  }
  return rt;
}

template <class T>
bool DLL<T>::isEmpty(){
return !_head;
}



#endif

Saturday 6 April 2013

CCheckList Constructors

Hi,

the web documentation for CCheckList Constructor says:

Passes corresponding values to the Base class (CField)

The constructor for CField is:


CField::CField(int Row, int Col,int Width, int Height,
    void* Data,bool Bordered,const char* Border)

but I'm not sure what I'm suppose to pass to Height and Data

so I put


CCheckList::CCheckList(const char* Format, int Row, int Col, 
        int Width,bool radio, bool Bordered,
        const char* Border) :CField(Row, Col, Width, 0, 0, Bordered, Border){


Should I pass the two zeroes for Height and Data? If not, what am I suppose to pass?




Thursday 4 April 2013

DLL implemented


#include "dll.h"
Node::Node(int data, Node* prev, Node* next){
  _data = data;
  _prev = prev;
  _next = next;
}

DLL::DLL(){
  _head = _tail = _curr = 0;
}
DLL::~DLL(){
  while(del());
}
void DLL::copy(DLL& D){
  int curpos;
  for(curpos=0;D.goPrev();curpos++); // findout where is current
  if(!D.isEmpty()){
    do{
      this->append(D.visit());
    }while(D.goNext());
  }
  for(D.goHead(), this->goHead();curpos;D.goNext(), this->goNext(),curpos--);
}
DLL::DLL(DLL& D){
  _head = _tail = _curr = 0;
  copy(D);
}
DLL& DLL::operator=(DLL& D){
  while(del());
  copy(D);
  return *this;
}

void DLL::append(int data){
  Node* newnode = new Node(data);
  if(_tail){  // ! empty
    _tail->_next = newnode;
    newnode->_prev = _tail;
    _tail = _curr = newnode;
  }
  else{
    _tail = _curr = _head = newnode;
  }

}
int DLL::remove(){
  int data = visit();
  del();
  return data;
}
bool DLL::del(){
  bool ok = false;
  if(_curr){
    ok = true;
    Node* todel = _curr;
    if(_curr->_next){
      _curr->_next->_prev = _curr->_prev;
    }
    else{
      _tail = _tail->_prev;
    }
    if(_curr->_prev){
      _curr->_prev->_next = _curr->_next;
    }
    else{
      _head = _head->_next;
    }
    _curr = _curr->_next;
    delete todel;
  }
  return ok;
}
void DLL::insert(int data){
  if(_head == _curr){
    _head = new Node(data, (Node*)0, _head);
    _curr->_prev = _head;
  }
  else {
    _curr->_prev = new Node(data, _curr->_prev, _curr);
    _curr->_prev->_prev->_next = _curr->_prev;
  }
}

int DLL::visit(){               // retruns data of current
return _curr->_data;
}
bool DLL::goHead(){
  _curr = _head;
  return (_curr != 0);
}
bool DLL::goTail(){
  _curr = _tail;
  return (_curr != 0);
}
bool DLL::goNext(){
  bool rt = false;
  if(_curr->_next){
    rt = true;
    _curr = _curr->_next;
  }
  return rt;
}
bool DLL::goPrev(){
bool rt = false;
  if(_curr->_prev){
    rt = true;
    _curr = _curr->_prev;
  }
  return rt;
}
bool DLL::isEmpty(){
return !_head;
}