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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Массив на С http://www.cyberforum.ru/cpp-beginners/thread284067.html
#include <stdio.h> #include <conio.h> #include <math.h> void main(){ int a; int i; for(i=0;i<8;i++){ int j; for(j=0;j<8;j++) printf("%d\t",(a=i+j));
C++ Как записывать данные в конец файла. Как с помощью ofstream или fstream записывать данные в конец файла, а не заново? вот мой текущий код. #include "stdafx.h" #include <fstream> #include <iostream> #include <windows.h> #include <time.h> std::ofstream out("test.txt",std::ios::eofbit); http://www.cyberforum.ru/cpp-beginners/thread284061.html
C++ Builder Связывание файла в С++ Builder с Memo
Всем привет!! У меня проблема, не знаю как сделать чтобы текст из фаила выводился в Memo!!Файл находится на диске С. допустим называется file.txt. Помогите пожалуйста!!!
название темы: разработка программ обработки массивов с динамическим выделением памяти C++
помогите решить задачу С++ сама задача: заполнить одномерный массив Х размерностью N (где N-натуральное число) случайными числами в диапозоне . Из элементов заданного массива сформировать массив Y,в который войдут элементы массива Х,по модулю не привыщающте заданного элемента А. БУДУ ОЧЕНЬ БЛАГОДАРЕН!ЗАРАНЕЕ СПАСИБО!
C++ Рекурсивный обход каталога http://www.cyberforum.ru/cpp-beginners/thread284051.html
Здравствуйте. Стоит следующая задача. Необходимо выполнить рекурсивный обход директорий находящихся в корневом каталоге. При этом занести имя каждого файла, находящегося в этих каталогах включая его относительный путь в массив.
C++ Опять интегралы.... Написать программу для вычисления значения определенного интеграла вида с заданной точностью R=0.0001. Для вычислений используется метод трапеций. Значения a,b,R должны вводиться в программу как параметры в командной строке. sin(x)+x, подробнее

Показать сообщение отдельно
Настёна
3 / 3 / 1
Регистрация: 08.02.2009
Сообщений: 15
30.10.2011, 13:56  [ТС]     ООП - не получается разобраться в задании
Цитата Сообщение от 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; };
 
Текущее время: 01:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru