Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.84/58: Рейтинг темы: голосов - 58, средняя оценка - 4.84
2 / 2 / 1
Регистрация: 23.11.2011
Сообщений: 87

Проверка существования структуры

17.12.2011, 21:32. Показов 12767. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Гугл ничего не дал так, что думаю будет многим полезно.

Язык си,

как проверить существует ли структура по данному адресу (была ли она задана)?

В других языках есть try/catche на си вроде нет, только на си++.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.12.2011, 21:32
Ответы с готовыми решениями:

Проверка существования файла
Всем привет! Как можно реализовать проверку существования файла (если файл не существует, то при чтении выдается ошибка, при а при записи...

Проверка существования файла
Надо сбросить массив char в файл. Если файл уже существует - ждать, пока его не удалят. Вот этот код не компилируется, выдаёт error C2664:...

Проверка существования логина
Помогите пожалуйста, нужно сделать проверку на логин, т.е. если при регистрации нового аккаунта с уже существующим логином, выводило, что...

46
2 / 2 / 1
Регистрация: 23.11.2011
Сообщений: 87
17.12.2011, 22:39  [ТС]
Студворк — интернет-сервис помощи студентам
Надо calloc использовать!)

Добавлено через 33 секунды
Спасибо! Разобрался - зациклился на malloc...
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
17.12.2011, 22:40
Цитата Сообщение от awpe Посмотреть сообщение
меня dev c++ на win7, может поэтому там мусор в malloc?
Цитата Сообщение от awpe Посмотреть сообщение
мне под *NIX надо

соберите последнюю версию mingw. Там должно быть точно так же как и под юникс. Я был приятно удивлен когда поставил последнюю версию gcc и по случаю замечал что память с нулями, потом проверил - да так.
Вы просто немного не так понимаете задачу, ну или подход к решению.
0
2 / 2 / 1
Регистрация: 23.11.2011
Сообщений: 87
17.12.2011, 22:42  [ТС]
Ну первый подход - чтобы работало, потом оптимизация и изменения - сдать надо через сутки
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
17.12.2011, 22:45
вот это кстати сомнительно. Получается что поле структуры не может содержать данные в виде нуля. Ограничение.
Цитата Сообщение от awpe Посмотреть сообщение
нули бы все поставили на свои места...
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
17.12.2011, 22:51
Цитата Сообщение от alkagolik Посмотреть сообщение
соберите последнюю версию mingw. Там должно быть точно так же как и под юникс. Я был приятно удивлен когда поставил последнюю версию gcc и по случаю замечал что память с нулями, потом проверил - да так.
Типичный пример того, как писать непереносимый код.
Цитата Сообщение от alkagolik Посмотреть сообщение
Получается что поле структуры не может содержать данные в виде нуля. Ограничение.
Обнулятся указатели на потомков и родителя.
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
17.12.2011, 22:54
Цитата Сообщение от fasked Посмотреть сообщение
Типичный пример того, как писать непереносимый код.
где пример? покажите. Я как раз против того чтобы полагаться на нули в выделенной памяти.
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
17.12.2011, 22:57
Цитата Сообщение от alkagolik Посмотреть сообщение
где пример? покажите. Я как раз против того чтобы полагаться на нули в выделенной памяти.
Что ж Вы тогда такие советы даете?
Цитата Сообщение от alkagolik Посмотреть сообщение
соберите последнюю версию mingw. Там должно быть точно так же как и под юникс.
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
17.12.2011, 23:07
Надо ему вот и говорю что и как. Между прочим с оговоркой. Полагаться на особенности компилятора это очень сомнительная мысль. Ладно, вода, проехали.
0
2 / 2 / 1
Регистрация: 23.11.2011
Сообщений: 87
17.12.2011, 23:12  [ТС]
Ладно сдаюсь - ничего не получается, как ни крути, а не знаю как сделать функцию, которая не затрет дерево при следующем вызове.

Добавлено через 1 минуту
в задании в функцию передается только адрес корня и все, менять устройство структуры нельзя, как сделать это дерево?
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
17.12.2011, 23:18
Цитата Сообщение от awpe Посмотреть сообщение
как сделать это дерево?
у вас есть вообще функция добавления ветки к дереву? в ней надо при создании ветки обнулять указатели на потомков. Так же и при удалении ветки.
0
2 / 2 / 1
Регистрация: 23.11.2011
Сообщений: 87
17.12.2011, 23:29  [ТС]
Разве ошибочным будет утверждение, что для добавления ветки к дереву необходимо чтобы корень в массиве указателей на эти ветки имел везде NULL на первом проходе?

Добавлено через 1 минуту
Иначе как в дальнейшем определять существует ветка или нет, потому что мусор будет расцениваться как существующая ветка.

Добавлено через 12 секунд
А при проверке вызывать ошибку.
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
17.12.2011, 23:31
awpe, нулевыми указателями должны обладать только листья дерева.
0
2 / 2 / 1
Регистрация: 23.11.2011
Сообщений: 87
17.12.2011, 23:55  [ТС]
на картинке есть узел 021 допустим он получился когда я первый раз вызвал функцию setDecoration, корень был пуст, были созданы узлы 0,02,021 теперь я хочу в это дерево записать узел в 012 функция при выделении памяти для узла 0 затрет значение адреса для узла 021, если этого не делать то к узлу 0211 доступа не будет так как память под конечную структуру никто не выделял и при попытке туда обратится будет access violation. Ничего кроме как проверки на существование узла я не могу придумать.

Подскажите пожалуйста, я не так задачу понял или что то упускаю?
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
18.12.2011, 00:21
Цитата Сообщение от awpe Посмотреть сообщение
Подскажите пожалуйста, я не так задачу понял или что то упускаю?
упускаете. Значит мыслим так.
Цитата Сообщение от awpe Посмотреть сообщение
на картинке есть узел 021 допустим он получился когда я первый раз вызвал функцию setDecoration, корень был пуст, были созданы узлы 0,02,021
это неверное. Когда вы вызываете функцию вставки, то, добавляете по одной ветке. и только в том случае когда указатель == NULL. Для этого вам нужно зделать обход дерева. т.е. двигаться по нужным потомкам пока указатель на потомка != NULL. Вот небольшой пример
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
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
typedef struct tree
{
    int x;
    struct tree *left;
    struct tree *right;
} tree_t;
 
void add( tree_t **current, int value, char *path )
{
    tree_t *t = ( tree_t* ) malloc ( sizeof ( tree_t ) );
    t->x = value;
    t->left = NULL;
    t->right = NULL;
 
    if ( !( *current ) ) // если создаем корень, т.е. если дерево пусто
    {
        *current = t;
    }
    else{
        //обход дерева
        while ( *path )
        {
            if ( *path - '0' )
                *current = *current->left;
            else
                *current = *current->right;
            ++path;
        }
        *current = t;
    }
}
 
int main(void)
{
    tree_t *root = NULL;
    add(&root, 5, "");
    printf("%i %i %i", root->x, root->right, root->left );
    free( root );
    exit(0);
}
Добавлено через 6 минут
вот косой пример двоичного дерева. функция вставки

Добавлено через 11 минут
обход дерева надо переделать, так же кинуть исключение. Думаю что суть вы уловили.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
18.12.2011, 00:45
awpe, Вы не совсем понимаете как строятся деревья. На википедии есть неплохие статьи по двоичным деревьям. Вот пример дерева поиска с функцией вставки и обхода, реализованных посредством рекурсии:
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
#include <stdlib.h>
#include <stdio.h>
 
typedef struct tree {
    int data;
    struct tree* left;
    struct tree* right;
} tree_t;
 
tree_t* create(int data) {
  tree_t* result = (tree_t*)malloc(sizeof(tree_t));
 
  result->data = data;
  result->left = NULL;
  result->right = NULL;
 
  return result;
}
 
void destroy(tree_t* tree) {
  if (tree == NULL)
    return;
 
  destroy(tree->left);
  destroy(tree->right);
  free(tree);
}
 
tree_t* insert(tree_t* tree, int data) {
  if (tree == NULL)
    return create(data);
 
  if (tree->data < data)
    tree->left = insert(tree->left, data);
  else if (tree->data > data)
    tree->right = insert(tree->right, data);
  
  return tree;
}
 
void traverse(tree_t* tree, void (*function)(int)) {
  if (tree == NULL)
    return;
 
  traverse(tree->left, function);
  function(tree->data);
  traverse(tree->right, function);
}
 
void print(int number) {
  printf("%d\n", number);
}
 
int main() {
  tree_t* tree = create(5);
 
  insert(tree, 4);
  insert(tree, 6);
  insert(tree, 3);
  insert(tree, 7);
  insert(tree, 2);
  insert(tree, 8);
  insert(tree, 1);
  insert(tree, 9);
  insert(tree, 0);
  insert(tree, 10);
 
  traverse(tree, print);
 
  destroy(tree);
 
  return 0;
}
Результат: http://liveworkspace.org/code/... 831d1145a9
1
2 / 2 / 1
Регистрация: 23.11.2011
Сообщений: 87
18.12.2011, 13:03  [ТС]
вроде так должно работать согласно заданию
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAX_BRANCHES             3
#define DECORATION_NONE          0
#define DECORATION_CANDLE        1
#define DECORATION_SPARKLER      2
 
typedef struct TNode{
        struct TNode   * m_Parent;
        struct TNode   * m_Branches[MAX_BRANCHES];
        int              m_Decoration;
} TNODE;
 
void InitializeNewStruct(TNODE ** st)
{
     printf("%p\n",(*st));
                               int i;
                               *st=(TNODE *) malloc(sizeof(TNODE *));
                               (*(*st)).m_Decoration=-1;
                               (*(*st)).m_Parent=NULL;
                               for(i=0;i<MAX_BRANCHES;i++){
                                     (*(*st)).m_Branches[i]=NULL;
                               }
                               printf("%p\n",(*st));
}
 
int  setDecoration   ( TNODE ** root, char * path, int decor )
{
     TNODE *tmp;
     int i,j,l,q=0;
     char *str;
     if((*root)==NULL){
                               (*root)=(TNODE *) malloc(sizeof(TNODE *));
                               (*((*root))).m_Decoration=-1;
                               (*((*root))).m_Parent=NULL;
                               for(i=0;i<MAX_BRANCHES;i++){
                                     (*((*root))).m_Branches[i]=NULL;
                               }
     }
     
     l=((int)path[0])-48;
     printf("%d\n",l);
    if((*((*root))).m_Branches[l]==NULL){
                     tmp=(TNODE *) malloc(sizeof(TNODE *));
                     (*(tmp)).m_Decoration=-1;
                     for(i=0;i<MAX_BRANCHES;i++){
                                                 (*(tmp)).m_Branches[i]=NULL;
                     }
                     (*tmp).m_Parent=(*root);
                     (*(*root)).m_Branches[l]=tmp;
     }else{
           tmp=(*((*root))).m_Branches[l];
           }
     q=strlen(path);
     printf("v stroke %s - %d simvolov\n",path, q);
     str=(char *) malloc(q*sizeof(char*));
     printf("1\n");
     for(i=1;i<=q;i++){
                      str[i-1]=path[i];
           printf("prohod %d, str[%d]=path[%d]; %c=%c\n",i , i-1, i, str[i-1], path[i]);
           
     }
     printf("   =>%s\n",str);
     printf("suka\n");
     printf("4\n");
     if(path[0]=='\0'){
            printf("zzsuka 1\n");
            (*(tmp)).m_Decoration=decor;
            return 1;
     }
     printf("suka\n");
     return setDecoration( &tmp, str, decor );
}
 
int main ( int argc, char * argv [] ){
    int x;
    TNODE *n;
    n=NULL;
    //n=(TNODE *) malloc(5*sizeof(int *));
    
    //printf("%d",(*n).m_Parent);
    
    x = setDecoration ( &n, (char*) "012001", DECORATION_SPARKLER );
    system("PAUSE");
    return (0);
}


не понимаю в чем ошибка, если убрать работу со строками то ошибок нет, если убрать создание структур то тоже ошибок нет, вместе они не работают...

Добавлено через 19 секунд
Я про функцию setDecoration

Добавлено через 30 минут
ага понял, нельзя так присваивать значение для path[n], ладно буду передавать str, но там снова ошибка, программа вылетает причем каждый раз на новом месте...

Добавлено через 45 секунд
Заметил что место вылета зависит от того где стоят контрольные printf... В чем может быть проблема?

Сейчас вылетает на str=(char *) malloc(q*sizeof(char*));

Добавлено через 9 минут
Пожалуйста скажите где ошибка?
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
18.12.2011, 13:21
awpe, пройдитесь с дебаггером по программе и все станет ясно. Не поможет - дайте задание, лучше переписать с нуля, чем пытатся разобратся.
0
2 / 2 / 1
Регистрация: 23.11.2011
Сообщений: 87
18.12.2011, 13:35  [ТС]
задание

новый код
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAX_BRANCHES             3
#define DECORATION_NONE          0
#define DECORATION_CANDLE        1
#define DECORATION_SPARKLER      2
 
typedef struct TNode{
        struct TNode   * m_Parent;
        struct TNode   * m_Branches[MAX_BRANCHES];
        int              m_Decoration;
} TNODE;
 
void InitializeNewStruct(TNODE ** st)
{
     printf("%p\n",(*st));
                               int i;
                               *st=(TNODE *) malloc(sizeof(TNODE *));
                               (*(*st)).m_Decoration=-1;
                               (*(*st)).m_Parent=NULL;
                               for(i=0;i<MAX_BRANCHES;i++){
                                     (*(*st)).m_Branches[i]=NULL;
                               }
                               printf("%p\n",(*st));
}
 
 
 
 
int CreateTree( TNODE ** root, char * str, int decor ){
     TNODE *tmp;
     int i,j,k,l,q;
     
     if( ( 2 < (((int)str[0])-48) ) ||  ( 0 > (((int)str[0])-48) ) ){return 0;}
     printf("%s\n",str);
     l=((int)str[0])-48;
     printf("%d\n",l);
    
     if((*((*root))).m_Branches[l]==NULL){
        printf("sozdanie uzla\n",l);
        tmp=(TNODE *) malloc(sizeof(TNODE *));
        printf("vydelenie pameti\n",l);
        (*(tmp)).m_Decoration=-1;
        for(i=0;i<MAX_BRANCHES;i++){
            (*(tmp)).m_Branches[i]=NULL;
        }
        (*tmp).m_Parent=(*root);
        (*(*root)).m_Branches[l]=tmp;
     }else{
         printf("uzel uze est\n",l);
         tmp=(*((*root))).m_Branches[l];
     }
     
     q=(int)(strlen(str));
     printf("v stroke %s - %d simvolov\n",str, q);
     
     
     printf("1\n");
     
     for(i=0;str[i+1]!='\0';i++){
        str[i]=str[i+1];
        printf("prohod %d, str[%d]=str[%d]; %c=%c\n",i , i+1, i, str[i], str[i+1]);
     }
     str[i]='\0';
     
     printf("   =>%s\n",str);
     printf("4\n");
     
     if(str[0]=='\0'){
          printf("zzsuka 1\n");
          (*(tmp)).m_Decoration=decor;
          return 1;
     }
     
     
     printf("suka\n");
     
     
     return CreateTree( &tmp, str, decor );
    }
 
 
 
 
 
 
int  setDecoration   ( TNODE ** root, char * path, int decor )
{
     TNODE *tmp;
     int i,q,x;
     char *str;
     
     q=strlen(path)*sizeof(char*);
     printf("%d\n",q);
     
     str = (char*) malloc(q);
     
     strcpy(str, path);
     printf("%s\n",str);
     
     
     if((*root)==NULL){
                               (*root)=(TNODE *) malloc(sizeof(TNODE *));
                               (*((*root))).m_Decoration=-1;
                               (*((*root))).m_Parent=NULL;
                               for(i=0;i<MAX_BRANCHES;i++){
                                     (*((*root))).m_Branches[i]=NULL;
                               }
     }
     x= CreateTree(root, str, decor);
     free(str);
     return x;
}
 
int main ( int argc, char * argv [] ){
    int x;
    TNODE *n;
    n=NULL;
    x = setDecoration ( &n, (char*) "012001", DECORATION_SPARKLER );
    system("PAUSE");
    return (0);
}


Добавлено через 50 секунд
Решил проблему со строками, теперь при вызове tmp=(TNODE *) malloc(sizeof(TNODE *)); программа рушится, дебаггер в dev c++ какой -то странный, нет времени разбираться.
0
237 / 210 / 29
Регистрация: 08.06.2011
Сообщений: 467
18.12.2011, 13:43
Цитата Сообщение от awpe Посмотреть сообщение
TNODE *tmp;
вам нужен объект структуры, а память вы выделяете под указатель

C
1
tmp=(TNODE *) malloc(sizeof(TNODE));
0
2 / 2 / 1
Регистрация: 23.11.2011
Сообщений: 87
18.12.2011, 13:55  [ТС]
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
int  setDecoration   ( TNODE ** root, char * path, int decor )
{
     int i,q,x;
     char *str;
     
     q=strlen(path)*sizeof(char*);
     printf("%d\n",q);
     
     str = (char*) malloc(q);
     
     strcpy(str, path);
     printf("%s\n",str);
     
     
     if((*root)==NULL){
                               (*root)=(TNODE *) malloc(sizeof(TNODE *));
                               (*((*root))).m_Decoration=-1;
                               (*((*root))).m_Parent=NULL;
                               for(i=0;i<MAX_BRANCHES;i++){
                                     (*((*root))).m_Branches[i]=NULL;
                               }
     }
     x= CreateTree(root, str, decor);
     free(str);
     return x;
}
 
int main ( int argc, char * argv [] ){
    int x;
    TNODE *n;
    n=NULL;
    x = setDecoration ( &n, (char*) "012001", DECORATION_SPARKLER );
    system("PAUSE");
    return (0);
}
А здесь разве не то же самое - (*root)=(TNODE *) malloc(sizeof(TNODE *)); где в функцию был передан адрес на указатель поэтому (*root) даст указатель на объект?

аналогично здесь - int CreateTree( TNODE ** root, char * str, int decor ): TNODE *tmp; создаст указатель на объект типа TNODE

потом (TNODE *) malloc(sizeof(TNODE *)) вернет указатель на область памяти для объекта типа TNODE этот указатель я приравниваю к tmp: "tmp=(TNODE *) malloc(sizeof(TNODE *));"

Я где то запутался в указателях?

Добавлено через 34 секунды
Как правильно тогда?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.12.2011, 13:55

Проверка на существования файла
Можно ли проверять файл на существование таким образом: ifstream file(&quot;file.txt&quot;); if (file.is_open()) {} //Если файл...

Проверка условия существования треугольника
нужно написать программу Даны 3 числа, определить могут ли эти числа являться сторонами треугольника

Проверка существования файла с использованием ifstream()
гуглил, но ничего там так и не нашел. Собственно как?

Проверка существования трехугольника с заданными сторонами, и определение его типа
В консольном режиме создать программу для проверки существования трехугольника с задаными сторонами. Если трехугольник существует,указать...

Проверка на существования ID
Всем привет !!! :) У меня такой вопрос можно ли вообще проверить в PHP существует ли определенный ID в базе данных ? То есть у меня...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Как замкнутый ядерный цикл решит проблему недостатки фосфора? Био миграция фосфора со дна океана
anaschu 26.06.2026
Биологический лифт: Концепция подъема фосфора со дна океана с помощью ЗЯТЦ Предлагаю на обсуждение альтернативу тяжелому промышленному бурению океанического дна. Вместо сложной инженерии мы можем. . .
сукцессия 5
anaschu 26.06.2026
ПЛАН РАЗРАБОТКИ математической модели сукцессии микоризных систем Переход AM → EcM (Endo + ErM) · Шумилов А. С. · ИФХиБПП РАН · Пущино · 2026 . . .
сукцессия 4
anaschu 25.06.2026
Более детализированный план разработки План доработки модели динамики микоризных симбиозов (EcM с гистерезисом) Цель: Реализовать логику переключения между эрикоидным (ErM) и эктомикоризным. . .
сукцессия 3
anaschu 25.06.2026
Примерный план работ по модели
сукцессия 2
anaschu 25.06.2026
параметризировочная калибровочная таблица будущей модели
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал Материалы для обсуждения с МГСУ · 2026 Рисунки внутри приложенного ворд файла. Что за. . .
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования? Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная. Где разрыв . . .
27. Планы на разработку функциональных требований к строительству внутри модели пищеблока (или не только его?)
anaschu 22.06.2026
Что уже реализовано и даёт конфликты «бесплатно» Самый простой конфликт уже работает — конфликт за ресурс-работника. Заданий больше, чем доступных поваров → очередь в queue1. Это прямое отражение. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru