Ignore:
Timestamp:
Feb 23, 2012, 12:33:51 PM (9 years ago)
Author:
roman
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Utilities/GenerateMathProblem01/GenerateMathProblem01.cpp

    r53 r54  
    66
    77#include "stdafx.h"
     8#include <assert.h>
    89
    910class Item
     
    6263        OperationItem() :
    6364                m_pItem1(NULL),
     65                m_nSymbol(0),
    6466                m_pItem2(NULL)
    6567        {
     68        }
     69        OperationItem(Item* pItem1, CHAR nSymbol, Item* pItem2) :
     70                m_pItem1(pItem1),
     71                m_nSymbol(nSymbol),
     72                m_pItem2(pItem2)
     73        {
     74                assert(pItem1 && IsValidSymbol(nSymbol) && pItem2);
     75        }
     76        static BOOL IsValidSymbol(CHAR nSymbol)
     77        {
     78                return nSymbol && strchr("+-*:", nSymbol) != NULL;
    6679        }
    6780        INT GetPriority()
     
    7386                        return 2;
    7487                case '*':
    75                 case '/':
     88                case ':':
    7689                        return 1;
    7790                }
     
    8396                {
    8497                case '-':
    85                 case '/':
     98                case ':':
    8699                        return FALSE;
    87100                }
     
    95108                else
    96109                        sString.Append(m_pItem1->AsString());
     110                assert(IsValidSymbol(m_nSymbol));
    97111                sString.AppendFormat(_T(" %c "), m_nSymbol);
    98112                if(m_pItem2->GetPriority() > GetPriority() || m_pItem2->IsOperation() && m_pItem2->GetPriority() == GetPriority() && !IsCommutative())
     
    212226int _tmain(int argc, _TCHAR* argv[])
    213227{
     228        #pragma region Special Case
     229        #if defined(_DEBUG)
     230        {
     231                // NOTE:
     232                //   Actual: (77 + 53503) : 8360 : 88 : 12
     233                //   Correct: (77 + 53503) : (8360 : 88) : 12
     234                OperationItem* pA = new OperationItem(new ValueItem(77), '+', new ValueItem(53503));
     235                OperationItem* pB = new OperationItem(new ValueItem(8630), ':', new ValueItem(88));
     236                OperationItem* pC = new OperationItem(pA, ':', pB);
     237                OperationItem* pD = new OperationItem(pC, ':', new ValueItem(12));
     238                _tprintf(_T("pD->AsString() %s\n"), pD->AsString());
     239                pD->AsString();
     240        }
     241        #endif // defined(_DEBUG)
     242        #pragma endregion
    214243        srand(1);
    215244        for(INT nCount = 0; nCount < 1000; nCount++)
Note: See TracChangeset for help on using the changeset viewer.