Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 141

Свой класс string, нужна помощь с перегрузкой операторов

15.01.2024, 17:03. Показов 6786. Ответов 99

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Создал свой класс string. Цель создания своего класса строк - это скорость работы со строками и второе в образовательных целях. Если реализация получится удачной сделаю библиотеку для личного использования. Сейчас реализованы строки типа char потом добавлю wchar_t. new и delete решил не использовать, так как использую простой тип char. Вроде утечек памяти нет, а работать в теории должно быстрее. Прошу просмотреть код и дать рекомендации по оптимизации или указать на ошибки в коде, буду очень признателен. У меня возник вопрос с перегрузкой операторов, не понимаю как их сделать правильно, представленная реализация вроде работает правильно. Подскажите как правильно перегрузить [], +=, =, +. За ранее благодарю за ответы.

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
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <locale.h>
#include <malloc.h>
 
namespace str
{ 
struct string
{
private:
#pragma region ========================== Variable ==============================
    typedef struct 
    { 
        char *p_str; 
        size_t length;
    }stringA;
 
    stringA str{};
    const type_info& ti_c = typeid(const_cast<const char * >(str.p_str));
 
#pragma endregion 
 
#pragma region ========================== Private Function ==============================
_inline void clr()
{
    if(str.p_str)           free(str.p_str);    
    str.p_str = nullptr;    str.length = 0U;  
}
//------------------------------------------------------------------
_inline bool __type_c(const type_info& ti){return ti_c == ti;}
 
#pragma endregion 
 
 
public:
 
#pragma region ==================================== Constructor ======================================
/* Конструктор однобайтовые символы */
string(const char *p_str)
{   
    clr();
 
   // if(p_str){
        if((str.length = strnlen_s(p_str, SIZE_MAX) ) > 0U)
        { 
            if(str.p_str  = static_cast<char *>(malloc(sizeof(char) * (str.length + 1) ) ) ) 
            {
                strncpy_s(str.p_str, str.length + 1, p_str, _TRUNCATE); 
                str.p_str[str.length] = '\0'; 
                
            }
        }else{  str.p_str   = static_cast<char *>       (calloc(1, sizeof(char) ) );}
                
   // }
}
//------------------------------------------------------------------
 
/* Конструктор по умолчанию */
explicit string(){     
    clr();
    str.p_str   = static_cast<char *>       (calloc(1, sizeof(char) ) ); 
}
 
//------------------------------------------------------------------
/* Конструктор копирования */
string(const string& s) 
{
   // if(s.c_str() == ""){  str.p_str   = static_cast<char *>       (calloc(1, sizeof(char) ) );}else{
 
    clr();
 
    if ((str.length = strnlen_s(s.c_str(), SIZE_MAX)) > 0U) {
        if ((str.p_str = static_cast<char *>    (malloc(sizeof(char) * (str.length + 1) ) ) ) != nullptr) {
    
                strncpy_s(str.p_str, str.length + 1, s.c_str(), _TRUNCATE);
                str.p_str[str.length] = '\0';    
         }
     }
    //}     
}
 
//------------------------------------------------------------------
/* Конструктор перемещения */
string(string &&moved)  noexcept  // ссылка rvalue       
{
    str.p_str = moved.str.p_str;   
    str.length = moved.str.length;
    moved.str.p_str = nullptr;
     
  //  if(str.p_str == nullptr){  str.p_str   = static_cast<char *>       (calloc(1, sizeof(char) ) ); str.length=0U;}
}
 
//------------------------------------------------------------------
~string(){  clr();  }
 
#pragma endregion
 
#pragma region ====================================== Class Members =======================================
//------------------------------------------------------------------
_inline size_t length() const { return str.length ; }
 
//------------------------------------------------------------------
_inline size_t string_size() const  {   
       return (str.p_str == nullptr) ? 0U : ((str.length +  1) * sizeof(char));    
}
 
//------------------------------------------------------------------
/* Добавляем строку с реолакацией памяти */
void add(const char *p_str_in)
{   
    size_t l = 0U;
   // if(str.p_str == nullptr) return;    
   
    if ((l = strnlen_s(p_str_in, SIZE_MAX)) != 0U) {
        if ((str.p_str = static_cast<char *> (realloc(str.p_str, (str.length + l + 1) * sizeof(char) ) ) ) != nullptr) {
            
            if(!strcat_s(str.p_str, str.length + l + 1, p_str_in)) str.length += l;
            str.p_str[str.length] = '\0';
        }//else{  str.p_str   = static_cast<char *>       (calloc(1, sizeof(char) ) ); str.length=0U;}
    }
}
 
//------------------------------------------------------------------
_inline const char* c_str() const {
    return ((str.p_str != nullptr) ? str.p_str : const_cast< char * >(""));
}
 
//------------------------------------------------------------------
/* Вывести символ в строке по индексу от нуля до str.length - 1 */
_inline char ch_at(size_t index) const  {
        return (/*(str.p_str != nullptr) && */(index < str.length)) ? str.p_str[index] : '\0';
}
 
//------------------------------------------------------------------
/* Заменить символ встроке по индексу от нуля до str.length - 1 */
_inline void ch_set_at(size_t index, char ch)   {
            if(/*(str.p_str != nullptr) && */(index < str.length))  str.p_str[index] = ch;
}
//------------------------------------------------------------------
_inline void clear(){ str.p_str   = static_cast<char *>       (calloc(1, sizeof(char) ) ); str.length = 0U;}
 
 
#pragma endregion
 
#pragma region ====================================== Operator Reload ============================================
//------------------------------------------------------------------
 string& operator +=(string const &s )  {      
            this->add(const_cast<char *>(s.c_str()));
            return  *this;
}
 
//------------------------------------------------------------------
  string& operator +=(char *s )    {      
        this->add(static_cast<char *>(s));  
        return  *this;
}
 
//------------------------------------------------------------------
const auto& operator = (const string& s)
{      
   // if (s.c_str() == "")return this;
    clr();
    if ((str.length = strnlen_s(s.c_str(), SIZE_MAX)) != 0U) {
        if ((str.p_str = static_cast<char *>(malloc(sizeof(char) * (str.length + 1) ) ) ) != nullptr) {
    
                strncpy_s(str.p_str, str.length + 1, s.c_str(), _TRUNCATE);
                str.p_str[str.length] = '\0'; 
         }
     }                  
return this;
 
}
 
#pragma endregion
 
//------------------------------------------------------------------ 
 friend std::ostream &operator <<(std::ostream &ostr, string const &point) { ostr << point.c_str(); return ostr; }
 
/* Конец string  */
};
 
//------------------------------------------------------------------
const string operator + (const string &L, const string &R){ return string(L) += R;}    
 
/* Конец области str:: */
};
 
//
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.01.2024, 17:03
Ответы с готовыми решениями:

Класс "Массив дробных чисел" с перегрузкой операторов
Создание консольной программы реализующей перегрузку функции Помогите пожалуйста сделать лабу! Создать проект консольной программы. ...

Класс "Длинные числа" с перегрузкой операторов
только-только начал изучение классов, задание написать класс длинных чисел с перегрузкой операторов если честно, еще очень смутно...

Создать класс "деньги" с перегрузкой операторов
Создать класс деньги поля- гривны, копейки 2 конструктора перегрузить операторы: деньги+деньги деньги-деньги деньги*int ...

99
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 141
16.01.2024, 21:41  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от KSergey9 Посмотреть сообщение
А зачем структура внутри класс? почему не сразу в классе нужные поля?
Просто любопытствую
Ну "Вроде как свой тип" - строка Все, что относится к строке инкапсулировано и как бы в теории в памяти рядышком.
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
16.01.2024, 21:53
У вас уже есть класс string
В него всё и инкапсулируйте.

Вложенные структуры имеют смысл если их много и какие-то данные хочется отдельно логически структурировать (или хранить в контейнерах).
А тут - ничего не изменится, если stringA вовсе убрать. Будет просто и понятно: вот данные класса string, вот его методы работы с этими данными.

Если хочется визуально отделить данные от методов - просто сгруппировать их:

C++
1
2
3
4
5
6
7
8
class xxx {
  public:
      public-методы
  private:
      private-методы
  private:
      private-данные (члены класса)
}
Или private-данные вынести выше всего - тут дело вкуса и привычки.

Добавлено через 1 минуту
Цитата Сообщение от Signum7 Посмотреть сообщение
и как бы в теории в памяти рядышком.
В памяти оно и так рядышком будет, даже если объявлять вперемешку методы и данные-члены.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13226 / 6858 / 1827
Регистрация: 18.10.2014
Сообщений: 17,381
16.01.2024, 22:05
Цитата Сообщение от Signum7 Посмотреть сообщение
Ну "Вроде как свой тип" - строка Все, что относится к строке инкапсулировано и как бы в теории в памяти рядышком.
Ну так для этого вы и завели свой класс string. Вопрос в том, зачем внутри еще заведен некий stringA?
0
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 141
16.01.2024, 22:44  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Ну так для этого вы и завели свой класс string. Вопрос в том, зачем внутри еще заведен некий stringA?
Для ясности изначально было stringA stringW и два конструктора string(const char*) string(const wchar_t*)

В коде
C++
1
2
str::string cstr("fgfddf");
str::string wstr(L"fgfddf");
от туда и артефакт __type_c(const type_info& ti) потом от этой идеи отказался. Решил делать либо два класса либо переделать потом в шаблонный

Добавлено через 10 минут
Да а перед этим хотел написать на чистом си, но где-то через полчаса резко передумал.

Добавлено через 4 минуты
некоторые странности можно видеть в реализации первого класса в топике из-за изначальной
C
1
си
задумки если внимательно на него взглянуть.

Добавлено через 3 минуты
В си нет классов и там структуры просто структуры а функции просто функции. поэтому выглядит это более громоздко и некрасиво. А с++ как искусство
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
16.01.2024, 22:46
Цитата Сообщение от Signum7 Посмотреть сообщение
Для ясности изначально было stringA stringW
Не надо так. Настраивайтесь сразу шаблонный класс для этого делать.
Вам же для учебы - вот и потренируетесь с шаблонами, дело полезное.

Добавлено через 1 минуту
Цитата Сообщение от Signum7 Посмотреть сообщение
на чистом си
Перегрузка операторов. Ага, Си
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
16.01.2024, 23:03
Signum7, ваши основные ошибки : (проектирование) отсутствие четкой задачи,
(реализация) отсутствие АТД(абстрактный тип данных).
То есть, вы пишите не последовательно.
Вам нужно пересмотреть необходимые уровни абстракций для данной задачи.
0
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 141
16.01.2024, 23:15  [ТС]
Цитата Сообщение от KSergey9 Посмотреть сообщение
Не надо так. Настраивайтесь сразу шаблонный класс для этого делать.
Вам же для учебы - вот и потренируетесь с шаблонами, дело полезное.

Добавлено через 1 минуту

Перегрузка операторов. Ага, Си
В общем вытянули меня на откровенный разговор, дело было так: В одном проекте на Борланде столкнулся с тормознутостью String и TStringList. Почесав репу в голову не пришло ничего более тупого чем написать библиотеку на си (потом просто мне стало интересно самому разобраться. На данный момент в образовательных целях не более, тащить в Борланд не буду ну его в жопу). Так вот запустил Visual studio code c gcc и начал писать реализацию строк на си, где-то через полчаса перекинул в mvso сделал свой класс и понеслась....

Добавлено через 7 минут
Цитата Сообщение от KSergey9 Посмотреть сообщение
Не надо так. Настраивайтесь сразу шаблонный класс для этого делать.
Вам же для учебы - вот и потренируетесь с шаблонами, дело полезное.

Добавлено через 1 минуту

Перегрузка операторов. Ага, Си
Так как в си нету перегрузки тем он громоздкий. В шаблонах я очень плохо разбираюсь для меня это сложная тема я и в с++ толко недавно стал вникать после си сложновато
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
16.01.2024, 23:24
Цитата Сообщение от SmallEvil Посмотреть сообщение
Вам нужно пересмотреть необходимые уровни абстракций для данной задачи.
ТС:
Цитата Сообщение от Signum7 Посмотреть сообщение
В одном проекте на Борланде столкнулся
Цитата Сообщение от Signum7 Посмотреть сообщение
запустил Visual studio code c gcc и начал писать реализацию строк на си
Цитата Сообщение от Signum7 Посмотреть сообщение
перекинул в mvso сделал свой класс
Цитата Сообщение от Signum7 Посмотреть сообщение
тащить в Борланд не буду ну его
Как говорит SmallEvil,
Цитата Сообщение от SmallEvil Посмотреть сообщение
вы пишите не последовательно.


Пересмотром "уровней абстракций" тут не отделаться
0
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 141
16.01.2024, 23:37  [ТС]
Цитата Сообщение от KSergey9 Посмотреть сообщение
ТС:




Как говорит SmallEvil,



Пересмотром "уровней абстракций" тут не отделаться
Ну я свой выбор сделал хочу доделать класс строк до логического конца, который работает правильно, без утечек и желательно быстро. Задачу себе поставил. Сейчас немного завис, но план такой доделываю класс с типом char Тестирую его если все хорошо, открываю матан по шаблонам и переделываю под шаблонный. Все равно их нужно понимать если писать на с++. Да и тренировка в написании своего класса строк мне уже дала некоторое понимание перегрузки операторов, которые я ни мог догнать до этого.
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
16.01.2024, 23:44
Signum7, я без надсмехательств совершенно.
Вы все делаете верно, надо учиться, на кошках.
0
фрилансер
 Аватар для Алексей1153
6504 / 5748 / 1134
Регистрация: 11.10.2019
Сообщений: 15,392
17.01.2024, 07:27
Цитата Сообщение от Signum7 Посмотреть сообщение
const size_t size_string = _MAX_PATH * sizeof(char);
зачем нужнО это константное поле в классе? Тогда уж constexpr static
И почему именно к _MAX_PATH привязка (макрос не относится к стандартным)

тут вообще много лишнего написано. А про правило пяти забыто
Цитата Сообщение от Signum7 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
namespace str
{
class string
{
private:
const size_t size_string = _MAX_PATH * sizeof(char);
struct stringA
    { 
    private:    
        explicit    stringA(const stringA&)     = delete;    
        stringA&    operator=(const stringA&)   = delete;        
    public:  
        ~stringA(){;}
         stringA(void) : length(0U), size_str(0U), p_str(nullptr) {} 
size_t length;      /* Количество символов в строке */
        size_t size_str;    /* Размер выделенной памяти для строки */     
        char *p_str;        
};  stringA str;

Цитата Сообщение от Signum7 Посмотреть сообщение
хотел написать на чистом си
с компилятором для C++ не получится писать на чистом Си по техническим причинам

Цитата Сообщение от Signum7 Посмотреть сообщение
Ну я свой выбор сделал хочу доделать класс строк до логического конца, который работает правильно, без утечек и желательно быстро. Задачу себе поставил.
это всё верно, хорошая тренировка.
Но потом всё равно сжечь (с) (это неприличный анекдот )
0
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 141
17.01.2024, 14:42  [ТС]
для интереса сравнил скорость выделения памяти для new malloc calloc для debug x86, mvso 22 с обновлениями.
такие результаты получились
C++
1
2
3
4
5
6
7
8
9
10
11
12
StartCounter();
for(size_t i = 0;i< 60000;i++){ 
  // p_str = new char [i+1];        // 73.5773 74.4281 74.1707 73.6759 73.9796 74.3846   ~74,036 033
 // if(p_str)delete[] p_str;      // 
  
 // p_str = (char*)malloc(i+1);// 72.7849 73.1197 72.6492 72.6573 72.9728 72.8212  ~72,834 183
 // if(p_str)free(p_str);
 
  //    p_str = (char*)calloc(i+1,  sizeof(char));// 100.52 100.261 99.7913 100.1 100.129 100.352  ~100,192 217
  //if(p_str)free(p_str); 
}
std::cout << GetCounter() << std::endl;
функция теста такая засунул первую какую нашёл в нете
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <windows.h>
double PCFreq = 0.0;
LONGLONG CounterStart{};
void StartCounter()
{
    LARGE_INTEGER li;
    if(!QueryPerformanceFrequency(&li))
    std::cout << "QueryPerformanceFrequency failed!\n";
 
    PCFreq = double(li.QuadPart)/1000.0;
 
    QueryPerformanceCounter(&li);
    CounterStart = li.QuadPart;
}
double GetCounter()
{
    LARGE_INTEGER li;
    QueryPerformanceCounter(&li);
    return double(li.QuadPart-CounterStart)/PCFreq;
}
Добавлено через 19 минут
Цитата Сообщение от Алексей1153 Посмотреть сообщение
А про правило пяти забыто
что за правило

Добавлено через 2 минуты
C++
1
2
3
4
5
6
private:
 
    size_t leng;        /* Количество символов в строке */
    size_t size_str;    /* Размер выделенной памяти для строки */     
    char *p_str;        /* Строка */
//------------------------------------------------------------------
Структуру убрал если верить форуму на размещение в памяти это не повредит

Добавлено через 8 минут
более честный тест наверное был бы на чистой винде с зафиксированной частотой процессора. Если у кого есть возможность сравнить разницу в скорости на линуксе или старые реализации new malloc calloc буду признателен очень интересно
0
фрилансер
 Аватар для Алексей1153
6504 / 5748 / 1134
Регистрация: 11.10.2019
Сообщений: 15,392
17.01.2024, 15:36
Цитата Сообщение от Signum7 Посмотреть сообщение
что за правило
Правило пяти
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
17.01.2024, 15:43
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Правило пяти
Кстати сразу получаем профессиональный (надеюсь) пример класса "строка" внезапно.
Он попроще, чем задумка ТС, но уже готовая болванка.
0
фрилансер
 Аватар для Алексей1153
6504 / 5748 / 1134
Регистрация: 11.10.2019
Сообщений: 15,392
17.01.2024, 15:48
KSergey9, но у него есть тотальный недостаток
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
17.01.2024, 16:02
Алексей1153
Да!!
0
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 141
17.01.2024, 16:19  [ТС]
Цитата Сообщение от Signum7 Посмотреть сообщение
правило пяти
Я понял что это за правило у меня в классе все есть:
-Деструктор
-Конструктор копирования
-Оператор присваивания копированием
-Конструктор перемещения
-Оператор присваивания перемещением
0
фрилансер
 Аватар для Алексей1153
6504 / 5748 / 1134
Регистрация: 11.10.2019
Сообщений: 15,392
17.01.2024, 16:27
Signum7, пост 39 - где там перемещение ?
0
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 141
17.01.2024, 16:35  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Signum7, пост 39 - где там перемещение ?
там показана внутренняя структура stringA которой нет уже в моем коде класс str::string все это имеет
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
17.01.2024, 16:56
Цитата Сообщение от Signum7 Посмотреть сообщение
скорость выделения памяти для new malloc calloc для debug x86,
Нет смысла замерять скорость в debug.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.01.2024, 16:56

Разработать класс "Сотрудник" (с перегрузкой операторов)
задание следующее Разработать класс для хранения информации о сотруднике, включая ФИО, зарплату, должность (определяемую значениями...

Написать класс "Дата" с перегрузкой операторов
Здравствуйте, задание: написать класс Дата с перегрузкой операторов. Вот мой код. Почему-то компилятор выбивает, что в main Data и d1 не...

Создать класс "Полином" с перегрузкой операторов
Помимо функций, указанных в задании, включить в реализацию класса конструкторы всех типов, функции ввода-вывода. Необходимо также...

Перегрузка операторов. Класс String
Зравствуйте! У меня есть вопрос. Реализовать класс String для работы со строками символов. Память под строку выделять автоматически....

Свой класс String
Небольшой набросок на класс String #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; class String { struct...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru