Форум программистов, компьютерный форум CyberForum.ru

ООП - не получается разобраться в задании - C++

Восстановить пароль Регистрация
 
Настёна
3 / 3 / 1
Регистрация: 08.02.2009
Сообщений: 15
26.04.2011, 22:41     ООП - не получается разобраться в задании #1
Добрый день!
Не могу понять некоторые моменты в задании по ООП.
Вот само задание:

"Процессор (тип TProc) выполняет двухоперандные операции TOprtn = (None, Add, Sub, Mul, Dvd) и однооперандные операции - функции TFunc = (Rev, Sqr) над значениями типа T. Левый операнд и результат операции хранится в поле Lop_Res, правый - в поле Rop. Оба поля имеют тип T. Процессор может находиться в состояниях: «операция установлена» - поле Operation не равно None (значение типа TOprtn) или в состоянии «операция не установлена» - поле Operation = None. Значения типа TProc - изменяемые. Они изменяются операциями: «Сброс операции» (OprtnClear), «Выполнить операцию» (OprtnRun), «Вычислить функцию» (FuncRun), «Установить операцию» (OprtnSet), «Установить левый операнд» (Lop_Res_Set), «Установить правый операнд» (Rop_Set), «Сброс калькулятора» (ReSet). На значениях типа T должны быть определены указанные выше операции и функции".
Собственно, не понятно то, что выделено зелёным. Я так понимаю, тип данных TOprtn - это класс, но что означает TOprtn = (None, Add, Sub, Mul, Dvd) и как это реализовать - не ясно. Сами эти операции уже реализованы в другом классе (в моём случае это класс p-ичных чисел). Вот ещё кусочек спецификации:

ВыполнитьОперацию
Вход: Нет.
Предусловия: Нет.
Процесс Вызывает выполнение текущей операции (записанной в поле Operation). Операция (Operation) выполняется над значениями, хранящимися в полях Rop и Lop_Res. Результат сохраняется в поле Lop_Res. Если Operation = None, никакие действия не выполняются. Состояние объекта не изменяется.
Выход: Нет.
Постусловия: Состояние процессора не изменяется.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nikk320
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 6
25.10.2011, 21:09     ООП - не получается разобраться в задании #2
Точно такое же задание. Если разобрались. Отпишитесь пожалуйста.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
25.10.2011, 21:14     ООП - не получается разобраться в задании #3
Если на пальцах, то вам надо создать - реализовать простую виртуальную машину с набором из 7 команд.
Или процессор этой виртуальной машины. В виде одного или нескольких классов (шаблонов?).
Настёна
3 / 3 / 1
Регистрация: 08.02.2009
Сообщений: 15
25.10.2011, 21:52  [ТС]     ООП - не получается разобраться в задании #4
Цитата Сообщение от Nikk320 Посмотреть сообщение
Точно такое же задание. Если разобрались. Отпишитесь пожалуйста.
В h-файле перед описанием класса TProc нужно добавить:

enum TOprtn {None, Add, Sub, Mul, Dvd};
enum TFunc {Rev, Sqr};

То есть переменная типа TOprtn может принимать только значения, перечисленные в скобках, аналогично для переменной типа TFunc.
В классе TProc объявляется переменная типа TOperation, в зависимости от того, какое значение лежит в этой переменной, будет выполняться один из методов - сложение, умножение, вычитание, деление.

Если что, спрашивайте ещё, в этом задании я полностью разобралась.

Добавлено через 18 минут
Цитата Сообщение от Настёна Посмотреть сообщение
В классе TProc объявляется переменная типа TOperation
Очепятка, переменная типа TOprtn
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
25.10.2011, 21:58     ООП - не получается разобраться в задании #5
Настёна, а что за значение Rev? Что должна вычислять эта функция? И Не нужно ли для функции также значение, подобное None для операции?
Настёна
3 / 3 / 1
Регистрация: 08.02.2009
Сообщений: 15
25.10.2011, 22:09  [ТС]     ООП - не получается разобраться в задании #6
Цитата Сообщение от silent_1991 Посмотреть сообщение
а что за значение Rev? Что должна вычислять эта функция?
Rev - это вычисление обратного значения, 1/х.

Цитата Сообщение от silent_1991 Посмотреть сообщение
И Не нужно ли для функции также значение, подобное None для операции?
Нет, не нужно. Функция выполняется над операндом, который в данный момент лежит в поле Rop, в эту же переменную записывается результат. Всё просто - вызвали функцию, и она тут же выполнилась.

Операции же выполняются над двумя операндами, и тут уже можно придумать случаи, когда необходимо значение None для операции (то есть когда никакую операцию над ними выполнять не нужно).
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.10.2011, 23:53     ООП - не получается разобраться в задании #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <iostream>
#include <cstdlib>
#include <cmath>
 
template< typename T >
class Processor {
public:
    typedef enum { NONE, ADD, SUB, MUL, DIV } state_type;
public:
    Processor() : state(NONE), left_result(T()), right_(T()) {}
    ~Processor() {}
 
    void resetState()
    {
        state = NONE;
    }
 
    void operate()
    {
        switch (state)
        {
        case ADD:
            left_result += right_;
            break;
        case SUB:
            left_result -= right_;
            break;
        case MUL:
            left_result *= right_;
            break;
        case DIV:
            if (right_)
                left_result /= right_;
            break;
        default:
            break;
        }
    }
 
    void calculate(T (*func)(T))
    {
        left_result = func(right_);
    }
 
    state_type operation() const
    {
        return state;
    }
 
    void setOperation (state_type st)
    {
        state = st;
    }
 
    T result() const
    {
        return left_result;
    }
 
    void setLeft(const T& val)
    {
        left_result = val;
    }
 
    T right() const
    {
        return right_;
    }
 
    void setRight(const T& val)
    {
        right_ = val;
    }
 
    void reset()
    {
        state       = NONE;
        left_result = T();
        right_      = T();
    }
private:
    state_type state;
    T          left_result;
    T          right_;
};
 
 
int main()
{
    typedef Processor<float> FPCPU;
    FPCPU proc;
    proc.setRight(4.0f);
    proc.setLeft(12.0f);
    proc.setOperation(FPCPU::ADD);
    proc.operate();
    std::cout << ">>> " << proc.result() << '\n';
    proc.setOperation(FPCPU::SUB);
    proc.operate();
    std::cout << ">>> " << proc.result() << '\n';
    proc.setOperation(FPCPU::MUL);
    proc.operate();
    std::cout << ">>> " << proc.result() << '\n';
    proc.setOperation(FPCPU::DIV);
    proc.operate();
    std::cout << ">>> " << proc.result() << '\n';
    proc.calculate(std::sqrt);
    std::cout << ">>> " << proc.result() << '\n';
    std::system("pause");
    return 0;
}
Nikk320
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 6
26.10.2011, 10:35     ООП - не получается разобраться в задании #8
Спасибо огромное за ответы.
Nikk320
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 6
30.10.2011, 13:02     ООП - не получается разобраться в задании #9
Настёна, а не могли бы выложить класс TEditor. Очень хочется взглянуть на вашу реализацию
Настёна
3 / 3 / 1
Регистрация: 08.02.2009
Сообщений: 15
30.10.2011, 13:56  [ТС]     ООП - не получается разобраться в задании #10
Цитата Сообщение от Nikk320 Посмотреть сообщение
Настёна, а не могли бы выложить класс TEditor. Очень хочется взглянуть на вашу реализацию
Выдернула из отчёта к программе, поэтому с комментами и немного отформатировано под ворд

“UEditor.h”
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <vcl.h>
#ifndef EDITOR_ERROR_H
#define EDITOR_ERROR_H
class TEditor
{   String Line;
   bool fraction;
   static const String NullChar;
   static const String Comma;
   String GetLineStr();
   void SetLineStr(String a);
   bool GetFract();
   void SetFract(bool a);
   String Change(String str);
   public:
      TEditor();
      ~TEditor();
      bool NullNumber();
      String AddSign();
      String AddComma();
      String AddPNum(int a);
      String AddNull();
      String BaskSpace();
      String Clear();
      String Edit(int a);
      String Display();
      String AddSpace(String str);
      String DelSpace(String str); 
      __property String PLine = {read = GetLineStr, write = SetLineStr};
      __property bool PFract = {read = GetFract, write = SetFract};
};#endif //EDITOR_ERROR_H

“UEditor.cpp”
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
#include <UEditor.h>
//---------------------------------------------------------------------------
const String TEditor::NullChar = "0,";
const String TEditor::Comma = ",";
//---------------------------------------------------------------------------
TEditor::TEditor()
{   Line =  NullChar;
   fraction = false;};
//---------------------------------------------------------------------------
TEditor::~TEditor(){};
//---------------------------------------------------------------------------
bool TEditor::NullNumber()
{   if (PLine == NullChar)
   {      return true;   }
   else
   {      return false;   };};
//---------------------------------------------------------------------------
String TEditor::AddSign()
{   if (NullNumber())
   {      return PLine;   };
   String Result;
   Result = PLine;
   if (Result[1]=='-')
   {      Result.Delete(1,1);
      PLine = Result;   }
   else
   {       Result.Insert("-",1);
       PLine = Result;   };
   return PLine;};
//---------------------------------------------------------------------------
String TEditor::AddPNum(int a)
{   switch (a)
   {   case 1: case 2:case 3: case 4: case 5: case 6: case 7: case 8:  case 9:
         PLine = Change(IntToStr(a));  break;
      case 10:    PLine = Change("A");     break;
      case 11:    PLine = Change("B");      break;
      case 12:   PLine = Change("C");     break;
      case 13:     PLine = Change("D");     break;
      case 14:     PLine = Change("E");      break;
      case 15:      PLine = Change("F");      break;
      default: ShowMessage("Передан неверный числовой код "+IntToStr(a) +". Строка не изменилась");  break;
   };   return PLine;};
//---------------------------------------------------------------------------
String TEditor::AddNull()
{   if ( !NullNumber() || (fraction == true)  )
   {      PLine = Change("0");   }
   return PLine;};
//---------------------------------------------------------------------------
String TEditor::AddComma()
{   //знак разделителя заведомо входит в строку.
   PFract = true;
   return PLine;};
//---------------------------------------------------------------------------
String TEditor::BaskSpace()
{    int len;
    String Result;
    Result = PLine;
    len = Result.Length(); //здесь длина строки, включяя пробелы
    //если число представляет собой начальное значение "0,", ничего не делаем
    //пробелы удалять не нужно - их нет
    if (Result == NullChar)
    {       return PLine;    };
    //если сейчас записано дробное число /и последний символ - разделитель,
    //то при нажатии BaskSpace необходимо, чтобы число стало целым, но разделитель остался.
    //пробелы удалять не нужно - строковое представление не меняется
    //при этом, если до этого дробное число было "-0,", то целое должно стать "0," без знака.
    if ((Result[len] == ',') && (PFract))
    {       PFract = false;     //показали, что число теперь имеет только целую часть
       if (Result == "-0,")
       {          Result = "0,";
          PLine = Result;       };
       return PLine;       //строковое представление осталось прежним    };
    //если число дробное, то его строковое представление заканчивается цифрой. Удалим её и проверим на
     // "-0,"пробелы удалять не нужно - в дробной части их нет
    if (PFract)
    {    Result.Delete(len,1);
       PLine = Result;
       return Result;   };
   //если число целое, нужно удалить предыдущий символ перед разделителем и в случае, если это была
    //последняя цифра, установить "0,". пробелы удалим, потом вновь добавим.
    //кроме того, "-5," должно преврытиться в "0,"
    Result = DelSpace(Result); //удалили пробелы
    len = Result.Length();
    if (!PFract)
    {       Result.Delete(len-1,1); //удалили число перед разделителем
       if (Result.Length() == 1)   //осталось ","
       {          Result = NullChar;       }
       else
       {          Result = AddSpace(Result);       };
       PLine = Result;
       return Result;    };
    ShowMessage("Функция BaskSpace: возникла непредвиденная ситуация. Символ не может быть удалён.");
    return PLine;};
//---------------------------------------------------------------------------
String TEditor::Clear()
{   PLine = NullChar;
   PFract = false;
   return PLine;};
//---------------------------------------------------------------------------
String TEditor::GetLineStr()
{   return Line;};
//--------------------------------------------------------------------------
void TEditor::SetLineStr(String a)
{   int i;
   int len;
   int com_count;
   String Result;
   Result = DelSpace(a);
   len = Result.Length();
   //1. В строке должны быть минимум два символа.
   if (len<2)
   {      ShowMessage("Строка должна содержать хотя бы одну цифру и знак-разделитель.");
      return;   };
   //2. Если первая - запятая, число задано неверно.
   if (Result[1] == ',')
   {      ShowMessage("Строка задана некорректно. Возможно, пропущена первая цифра.");
      return;   };
   //3. Проверим, нет ли лишних нулей в начале.
   //Если первый минус, то второй может быть нулём, только если  число дробное и третий знак - запятая.
   if (Result[1]=='-')
   {      //если первый минус, то в строке д.быть минимум 3 символа "-x,"
      if(len<3)
      {         ShowMessage("Строка должна содержать хотя бы одну цифру и знак-разделитель.");
         return;      };
      //если второй '0' и третий не ',' - ошибка.
      if ((Result[2] == '0') && (Result[3] != ','))
      {         ShowMessage("Строка задана некорректно. Возможно, пропущена первая цифра.");
         return;      };
      //кроме того, комбинация "-0," допустима, только если число дробное
      //на данный момент известно, что если второй '0', то третий точно ','
      if ((Result[2] == '0') && (len<4))
      {             if (!fraction) //если число целое, обнулим строку
         {            Result = NullChar;         }; //если дробное, оставим "-0," без изменений
         Line =  Result;         return;      };
   }
   else
   //проверим лишние нули в начале для положительных.
   {      //если первый '0' и второй не ',' - ошибка.
      if ((Result[1] == '0') && (Result[2]) != ',')
      {         ShowMessage("Строка задана некорректно. Возможно, пропущена первая цифра.");
         return;      };
    }; //end проверка лишних нулей
   //4. Проверим строку на число разделителей и лишние -.
   com_count = 0; //подсчёт числа разделителей в строке
   for (i=1; i<=len; i++)
   {      //если найдём минус и он не первый
      if ((Result[i]=='-') && (i>1))
      {         ShowMessage("Заданная строка содержит более одного знака '-'. Строка не записана.");
         return;      };
      //если разделитель встречается больше 1 раза
      if (Result[i]==',')
      {com_count+=1;};
      if (com_count > 1)
      {         ShowMessage("Заданная строка содержит более одного разделителя. Строка не записана.");
         return;      };
      //проверим тек. символ на принадлежность допустимым числам в с/с
      if ((Result[i] != ',') && (Result[i]) != '-')
      {         switch(Result[i])
         { case '0': case '1': case '2': case '3':  case '4':  case '5':  case '6': case '7': case '8': case '9': case 'A':
            case 'B':  case 'C':  case 'D':case 'E':    case 'F':          break;
            default:
               ShowMessage("Строка содержит недопустимый символ.\r\nДопускаются знак '-', разделитель ',', цифры 1..9 и буквы A..F");        return;
         }; //end switch
      };//end if - проверка на принадлежность символа данным с/с
   };//end for
   //если ни разу не встретился разделитель
   if (com_count == 0)
   {      ShowMessage("Строка должна содержать хотя бы одну цифру и знак-разделитель.");
      return;   };
   //5. Итак, в строке присутсвует 1 разделитель, она содержит только допустимые символы, нет лишних 
   //нолей впереди. определим, целое число или дробное. если последний символ строки - не разделитель, 
  //значит, она задаёт дробное число.
//Есть дробное число 5,5 , сделали BackSpace, получилось 5, - но оно должно остаться дробным
   //при добавлении 6 получится 5,6 - но не 56. поэтому однозначно можно сказать, дробное число или нет,
   //только если последний знак  - не , если последний знак , - число может быть и целым, и дробным
   //в этом случае оставляем старое значение fraction ,оно изменится, если нажать , или ещё раз backspace
   if (Result[len] != ',')
   {      PFract = true;   };
   a=AddSpace(Result);
   Line = a;};
//---------------------------------------------------------------------------
String TEditor::Edit(int a)
{   String Result;
   switch(a)
   {      case 0:    Result = AddNull();   break;
      case 1:   case 2: case 3:case 4:case 5: case 6:  case 7: case 8:case 9: case 10: case 11: case 12:  case 13:
      case 14:   case 15:   Result = AddPNum(a);  break;
      case 20:    //+/-
         Result = AddSign();   break;
      case 21:    //,
         Result = AddComma();    break;
      case 22:    //BaskSpace
         Result = BaskSpace();    break;
      case 23:    //CE
         Result = Clear();   break;
      default:     ShowMessage("Задана некорректная команда.");
         Result = PLine;      break;  };
   return Result;};
//---------------------------------------------------------------------------
String TEditor::Change(String str)
{   String Result;
   int len;
   Result = PLine;
   //если число 0, уберём 0 и введём первую цифру
   if ((Result == NullChar) && (PFract == false))
   {       Result = str + Comma;
       Result = DelSpace(Result);
       Result = AddSpace(Result);
       return Result;   };
   //если число не 0 и целое
   if (!fraction)
   {       //удалим последнюю запятую
       len = Result.Length();
       Result.Delete(len,1);
       Result = Result + str + Comma; //добавим цифру и вернём запятую
       Result = DelSpace(Result);
       Result = AddSpace(Result);
       return Result;   };
   //если число дробное, просто добавим цифру в конец строки
   if (fraction)
   {      Result = Result + str;
      Result = DelSpace(Result);
      Result = AddSpace(Result);
      return Result;   };
 
   ShowMessage("Функция Change(): возникла непредвиденная ситуация. Строка не изменена.");
   return PLine;};
//---------------------------------------------------------------------------
String TEditor::AddSpace(String str)
{   int i;
   int pos; //позиция разделителя
   int len;
   String Result;
   len = str.Length(); //посчитали длину строки
   for(i=1;i<=len;i++)
   {      if (str[i] == ',' ) //нашли позицию разделителя
      {    pos = i;
         break;     };   };
   //поставим пробелы в целой части числа
   for (i=pos-3;i>1;i=i-3)
   {      if (str[pos-3-1] != '-')
      {str.Insert(" ",i);};   };
   return str;};
//---------------------------------------------------------------------------
String TEditor::DelSpace(String str)
{   int i;
   int len;
   len = str.Length();
   for (i=1;i<=len;i++)
   {      if (str[i] == ' ')
      {         str.Delete(i,1);
         len = str.Length();      };   };
      return str;};
//---------------------------------------------------------------------------
bool TEditor::GetFract()
{   return fraction;};
//---------------------------------------------------------------------------
void TEditor::SetFract(bool a)
{   fraction = a;};
//---------------------------------------------------------------------------
String TEditor::Display()
{   String Result;
   Result = PLine+"\r\n\Дробь "+BoolToStr(PFract);
   return Result; };
Nikk320
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 6
08.11.2011, 21:20     ООП - не получается разобраться в задании #11
Настёна, а на класс TCtrl можно взглянуть?
Настёна
3 / 3 / 1
Регистрация: 08.02.2009
Сообщений: 15
08.11.2011, 23:02  [ТС]     ООП - не получается разобраться в задании #12
Nikk320, какой конкретно метод вас интересует?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.11.2011, 03:44     ООП - не получается разобраться в задании #13
Цитата Сообщение от Настёна
но что означает TOprtn = (None, Add, Sub, Mul, Dvd) и как это реализовать - не ясно
это не псевдокод
это больше похоже на грамматику
ты её читаешь, понимаешь, а потом уже пишешь код, который может быть совершенно другим
Настёна
3 / 3 / 1
Регистрация: 08.02.2009
Сообщений: 15
09.11.2011, 09:14  [ТС]     ООП - не получается разобраться в задании #14
accept, я уже с этим разобралась, там выше написано.)
Это перечисление, то есть переменные типа ТOprtn могут принимать только значения, перечисленные в фигурных скобках.
Nikk320
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 6
09.11.2011, 11:15     ООП - не получается разобраться в задании #15
Цитата Сообщение от Настёна Посмотреть сообщение
Nikk320, какой конкретно метод вас интересует?
выполнитьКомандуКалькулятора(a: Integer; var b, MState: String): String
выполнитьКомандуБуфераОбмена(a: Integer; var b: String): String
Настёна
3 / 3 / 1
Регистрация: 08.02.2009
Сообщений: 15
09.11.2011, 17:01  [ТС]     ООП - не получается разобраться в задании #16
Цитата Сообщение от Nikk320 Посмотреть сообщение
выполнитьКомандуКалькулятора(a: Integer; var b, MState: String): String
выполнитьКомандуБуфераОбмена(a: Integer; var b: String): String
Буфер обмена я не реализовывала.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//выполнить команду калькулятора
String TCtrl::CltrOprtnRun(int a, String* MState, String* Error)
{   String Result;
   try
   {      if (PCState == cError)
      {         if ((a != 23) && (a != 50))
         return "Err";      };
      if (Error)
      {         *Error = "";      };
      switch (a)
      {  case 0:case 1: case 2: case 3: case 4: case 5: case 6: case 7:case 8:case 9: case 10: case 11:  case 12:
         case 13:  case 14:   case 15:
         case 20:   // +/-
         case 21:   // ,
         case 22:   // BaskSpace
         case 23:   // CE
            Result = EditorOprtnRun(a, & *Error);           break;
         case 30: // =  !!!!!!!
            Result = GetResult(a, & *Error);           break;
         case 31: // /  9+-=   9-=
         case 32: // *
         case 33: // -
         case 34: // +
            Result = OprtnRun(a, &  *Error);            break;
         case 35:  // sqr
         case 36:  // 1/x
            Result = FunRun(a, &  *Error);            break;
         case 40:  //M+ прибавить к содержимому памяти
         case 41:  //MC очистить память
         case 42:  //MR получить содержимое памяти
         case 43:  //MS записать число в память
            Result = MemoryOprtnRun(a,& *MState);            break;
         case 50: //C
            Result = GetStartCtrlState(a, &  *Error);            break;
         default:
            if (Error)
            {               *Error = "Недопустимая команда";            };
            PCState = cError;            return 0;
      };//end switch
   }//end try
   catch(...)
   {      if (Proc.PError != "")
      {         if (Error)         {            *Error = Proc.PError;         };
         PCState = cError;         return 0;
      }
      else
      {         if (Error)
         {            *Error = "Команда не выполнена";         };
         PCState = cError;         return 0;      };
   }; //end catch
   if (MState)
   {      *MState = Memory.PMState;   };
   //уберём лишние 0 вконце дробного числа
   int len;
   if (PCState != cEditing) //если строка не в состоянии редактирования
   {      String line = Editor.PLine;
      len = line.Length();
      if (line[len] == '0')
      {         while(line[len] == '0')
        {            line.Delete(len,1);
            len = line.Length();        };      };
      //убрали все крайние нули в дробной части
      //если теперь строка заканчивается , - число стало целым
      if(line[len] == ',')
      {         Editor.PFract = false;      };
      Editor.PLine = line;
   };//end if (PCState != cEditing)
   len = Editor.PLine.Length();
   if (len>29)
   {      PCState = cError;      return "Превышена длина строки";   }
   return Editor.PLine;};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2011, 14:29     ООП - не получается разобраться в задании
Еще ссылки по теме:

C++ Не могу разобраться с ООП
Помогите разобраться как получается при этом в результате -5,-5,-23? C++
не получается разобраться C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Nikk320
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 6
16.11.2011, 14:29     ООП - не получается разобраться в задании #17
Цитата Сообщение от Настёна Посмотреть сообщение
Буфер обмена я не реализовывала.
и этот метод тоже непонятен... не подскажете?

“вычислитьВыражение” (управляет вызовом методов объекта процессор (поле TProc)), операция получает целое число (номер команды пользователя и возвращает строку результата;
Yandex
Объявления
16.11.2011, 14:29     ООП - не получается разобраться в задании
Ответ Создать тему
Опции темы

Текущее время: 04:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru