Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.59/37: Рейтинг темы: голосов - 37, средняя оценка - 4.59
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842

Предмет "Надежность информационных систем". Нужно ваше мнение.

12.09.2009, 19:36. Показов 7492. Ответов 66
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, выполняю курсовую работу по надежности информационных систем. Дана схема системы с 20 элементами (см. рисунок). Необходимо выделить группы элементов, отказ которых приведет к отказу системы. У меня получилось 48 групп. Интересно, что выйдет у вас?

PS: Необходимо для собственной проверки.

PPS: Возможно запостил не в тот раздел. Модераторы, если что, поправьте пожалуйста.
Миниатюры
Предмет "Надежность информационных систем". Нужно ваше мнение.  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.09.2009, 19:36
Ответы с готовыми решениями:

Надежность информационных систем
Ребята, помогите с задачкой. Нужно найти вероятности безотказной работы системы p1,p2,p3,p4 любым методом. Задача по дисциплине...

Надежность информационных систем
Помогите пожалуйста с решением задания. Для каждого из трёх последовательно соединённых элементов известен закон распределения времени...

Надежность информационных систем
(Расчет характеристик надежности невосстанавливаемых резервируемых изделий с двумя видами отказов) Для повышения надежности схемы...

66
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
13.09.2009, 17:34
Что такое "группы элементов" ?
Совсем не интересно сидить и пересчитывать варианты.
Вот если программу для этого написать
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
13.09.2009, 17:46  [ТС]
Цитата Сообщение от odip Посмотреть сообщение
Что такое "группы элементов" ?
Допустим, при неисправности элементов 3 и 20 система работать не будет, при неисправности 2, 7, 18 система работать не будет и т.д.
Написание программы в данном предмете не предусмотрена. Данное задание - это только самое начало курсовой. Хотелось провериться перед выполнением основной части, чтобы косяков не напороть. Для поиска групп мне потребовалось 1,5 часа.
Вот что думаю - если в течение нескольких дней вариантов (у кого сколько получилось) не последует, можно эту тему удалить (съезжу в институт - у препода проконсультируюсь).
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
13.09.2009, 17:54
То есть группа элементов - это любое кол-во от 0 до 20 любых элементов ?
И нужно напечатать все такие группы ?
Их будет намного больше 48
Написание программы в данном предмете не предусмотрена.
И чего ?
Нет лучше руками перебирать

Добавлено через 1 минуту
Еще вопрос - что такое "отказ системы" ?

Добавлено через 1 минуту
Это если сигнал приходящий на левый вход не сможет пройти на правый выход ?
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
13.09.2009, 18:05  [ТС]
Это если сигнал приходящий на левый вход не сможет пройти на правый выход ?
Да.
То есть группа элементов - это любое кол-во от 0 до 20 любых элементов ?
минимальное количество элементов.

Добавлено через 2 минуты
Цитата Сообщение от odip Посмотреть сообщение
Нет лучше руками перебирать
В том то вся суть, что необходимо будет рассчитать надежность системы самому вручную.
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
13.09.2009, 21:22
У меня получилось 25 вариантов.
Программа

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
/* Thread 50620 */
 
#include <stdio.h>
 
 
/************************************************/
#define SW_SIZE             20
#define INDEX_SIZE          (1<<SW_SIZE)
 
#define STATE_UNKNOWN       0
#define STATE_WORK          1
#define STATE_BLOCK         2
#define STATE_BLOCK_MIN     3
#define STATE_BLOCK_DERIV   4
 
 
/************************************************/
int is_schema_work( unsigned sw );
void calc_state( unsigned char *st );
void print_state( unsigned char *st );
void print_state_result( unsigned char *st );
 
 
/************************************************/
static unsigned mask[]= {
    0x00000001, 0x00000002, 0x00000004, 0x00000008,
    0x00000010, 0x00000020, 0x00000040, 0x00000080,
    0x00000100, 0x00000200, 0x00000400, 0x00000800,
    0x00001000, 0x00002000, 0x00004000, 0x00008000,
    0x00010000, 0x00020000, 0x00040000, 0x00080000,
    0x00100000, 0x00200000, 0x00400000, 0x00800000,
    0x01000000, 0x02000000, 0x04000000, 0x08000000,
    0x10000000, 0x20000000, 0x40000000, 0x80000000
};
 
static char *state_str[]= {
    "unknown",
    "work",
    "block",
    "block_min",
    "block_deriv",
};
 
 
/************************************************/
int main( void ) {
 
unsigned char st[INDEX_SIZE];
 
 
calc_state( st );
 
/* print_state( st ); */
 
print_state_result( st );
 
return 0;
 
} /* main() */
 
 
#define SW(argi) ((state & mask[(argi)-1])!=0)
 
 
/************************************************/
int is_schema_work( unsigned state ) {
 
if ( SW(1) || SW(6) || SW(11) ) {
    if ( SW(2) || SW(7) ) {
        if ( SW(3) && SW(4) && ( SW(5) || SW(10) || SW(15) ) ) {
            return 1;
        }
        if ( SW(8) || SW(13) ) {
            if ( ( SW(9) || SW(14) || SW(19) ) && SW(20) ) {
                return 1;
            }
        }
    }
}
if ( SW(16) && ( SW(12) || SW(17) ) && SW(18) ) {
    if ( ( SW(9) || SW(14) || SW(19) ) && SW(20) ) {
        return 1;
    }
}
 
return 0;
 
} /* is_schema_work() */
 
 
/************************************************/
void calc_state( unsigned char *st ) {
 
int ind, ind2, i, min_flag;
 
 
/* Loop 1 */
for ( ind= 0; ind<INDEX_SIZE; ind++ ) {
    st[ind]= (is_schema_work( ind ) ? STATE_WORK : STATE_BLOCK);
}
 
/* Loop 2 */
for ( ind= 0; ind<INDEX_SIZE; ind++ ) {
    if ( st[ind] == STATE_BLOCK ) {
        min_flag= 1;
        for ( i= 0; i<SW_SIZE; i++ ) {
            ind2= ind|mask[i]; if ( ind2 == ind ) { continue; }
            if ( st[ind2] == STATE_WORK ) {
            } else {
                min_flag= 0; break;
            }
        }
        st[ind]= (min_flag ? STATE_BLOCK_MIN : STATE_BLOCK_DERIV);
    }
}
 
} /* calc_state() */
 
 
/************************************************/
void print_state( unsigned char *st ) {
 
int ind, i, len;
char buf[80], *p;
 
 
for ( ind= 0; ind<INDEX_SIZE; ind++ ) {
    p= buf;
    for ( i= 0; i<SW_SIZE; i++ ) {
        if ( (ind&mask[i]) != 0 ) {
            len= snprintf( p, buf+sizeof(buf)-p, "%d,", i+1 );
            p+= len;
        }
    }
    *p= '\0';
    printf( "%05x %-54s %-10s\n", ind, buf, state_str[st[ind]] );
}
 
} /* print_state() */
 
 
/************************************************/
void print_state_result( unsigned char *st ) {
 
int num, ind, i, len;
char buf[80], *p;
 
 
num= 0;
for ( ind= 0; ind<INDEX_SIZE; ind++ ) {
    if ( st[ind] != STATE_BLOCK_MIN ) { continue; }
    num++;
    p= buf;
    for ( i= 0; i<SW_SIZE; i++ ) {
        if ( (ind&mask[i]) == 0 ) {
            len= snprintf( p, buf+sizeof(buf)-p, "%d,", i+1 );
            p+= len;
        }
    }
    *p= '\0';
    printf( "%-2d  %06x  ^%-54s\n", num, ind, buf );
}
 
} /* print_state_result() */


Вывод:
Code
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
1   07bdef  ^5,10,15,20,                                           
2   07fbde  ^1,6,11,20,                                            
3   07ffbd  ^2,7,20,                                               
4   07fff7  ^4,20,                                                 
5   07fffb  ^3,20,                                                 
6   0b9cef  ^5,9,10,14,15,19,                                      
7   0bdade  ^1,6,9,11,14,19,                                       
8   0bdebd  ^2,7,9,14,19,                                          
9   0bdef7  ^4,9,14,19,                                            
10  0bdefb  ^3,9,14,19,                                            
11  0dad6f  ^5,8,10,13,15,18,                                      
12  0def77  ^4,8,13,18,                                            
13  0def7b  ^3,8,13,18,                                            
14  0dfbde  ^1,6,11,18,                                            
15  0dffbd  ^2,7,18,                                               
16  0ea56f  ^5,8,10,12,13,15,17,                                   
17  0ee777  ^4,8,12,13,17,                                         
18  0ee77b  ^3,8,12,13,17,                                         
19  0ef3de  ^1,6,11,12,17,                                         
20  0ef7bd  ^2,7,12,17,                                            
21  0f2d6f  ^5,8,10,13,15,16,                                      
22  0f6f77  ^4,8,13,16,                                            
23  0f6f7b  ^3,8,13,16,                                            
24  0f7bde  ^1,6,11,16,                                            
25  0f7fbd  ^2,7,16,
1
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
13.09.2009, 22:42  [ТС]
odip, спасибо за то, что откликнулся. Интересная программа - только результаты дает не все верные. Допустим:
Code
1
2
3
2   07fbde  ^1,6,11,20, 
3   07ffbd  ^2,7,20, 
8   0bdebd  ^2,7,9,14,19,
При этих значениях система остается рабочей.
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
13.09.2009, 22:56
Так как не было сказано что есть "отказ системы",
то я считаю что течение идет всегда слева направо или по вертикали,
но обратно (справа налево) не идет.
При этом условии все указано правильно - данные варианты блокируют течение.

Если же "отказ системы" - это что-то другое,
то нужно изменить функцию is_schema_work().
0
Пробующий
 Аватар для galileopro
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
13.09.2009, 22:59
А эту структуру нельзя представить в виде предиката(логического выражения, зависящего от 1,2,3...20) там or,end и все, я имею в виду логические связи. А потом перебор сделать, сначала все елементы true, однин - false типа отказал, и смотрим результат. Если предикат равен false для некоторого элемента, то этот елемент образует группу. Далее 2 элемента, 3, 4. Больше наверно перебирать нецелесообразно.) Просто никто не захочет 1,5 часа это считать, это ж долго)
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
13.09.2009, 23:05
2galileopro: три раза перечитал текст, НИЧЕГО НЕ ПОНЯЛ.
И знаки препинания без ошибок расставляй.
Программу я уже написал, нужно только исправить одну функцию.
0
Пробующий
 Аватар для galileopro
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
14.09.2009, 00:04
Я хотел вот так, просто выражаться не умею(
Delphi
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
program Project2;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
type   mass=array[1..20]of boolean;
function P(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20:boolean):boolean;
var p1,p2,p3,p4,p5,p6,p7,p8,p9:boolean;
begin
p1:=a1 or a6;
p2:=a2 or a7;
p3:=a8 or a13;
p4:=a9 or a14 or a19;
p5:=a17 or a12;
p6:=a5 or a10 or a15;
 
P7:=(p2 and p3 and p4 and a20)or(p2 and a3 and a4 and p6);
P8:=a16 and p5 and a18 and p4 and a20;
p9:=p1 and p7;
 
P:=p8 or (a11 and p7) or p9;
end;
var a:mass;
    i:integer;
begin
 for i:=1 to 20 do a[i]:=true;
 
 for i:=1 to 20 do begin
  a[i-1]:=true;
  a[i]:=false;
  if(P(a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15],a[16],a[17],a[18],a[19],a[20])=false)then write('element',i);
  end;
 readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Добавлено через 7 минут
Для подтверждения такой код
Delphi
1
2
3
4
for i:=1 to 20 do a[i]:=true;
a[4]:=false;
a[20]:=false;
if(P(a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15],a[16],a[17],a[18],a[19],a[20])=false)then write('element');
Выдаёт на консоль слово element, а значит если исключить 4 и 20 элементы схемы, то она выйдет из строя, что соответствует реальности. Значит этот логический предикат работает(я не ошибся). Теперь нужно перебрать не только по одному символу, а еще и по 2, по 3, и по 4.

Добавлено через 27 минут
Теперь бы грамотно перебор сделать

Добавлено через 3 минуты
kirill29
, хотелось бы узнать, суть моего подхода уловили, или я выражаюсь плохо?) Кстати я вручную пока все группы из 3 ячеек пересчитал, уже 25 минут убил) Так что 1,5 часа - это еще быстро)
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
14.09.2009, 00:22  [ТС]
В делфи не силен, но судя по второму куску кода, если в перечисленных элементах присутствуют элементы со значением false, то программа выведет на экран слово element (если я правильно понял).
Пример групп элементов: 1,6,11,18; 3,20; 2,7,8,13,20; и т.д.
0
Пробующий
 Аватар для galileopro
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
14.09.2009, 00:32
Цитата Сообщение от kirill29 Посмотреть сообщение
В делфи не силен, но судя по второму куску кода, если в перечисленных элементах присутствуют элементы со значением false, то программа выведет на экран слово element (если я правильно понял).
Не совсем. Я заметил, что если исключить из цепи 4 и 20 элементы, то цепь работать не будет. Поэтому я обозначил
Delphi
1
2
a[4]:=false;
a[20]:=false;
И предикат P(...) стал ложью(false) значит цепь разомкнута.
Теперь я пытаюсь сделать перебор из 20 символов по 3 без повторений, чтобы выделить группы из 3-х символов, но что-то оно оказалось геморно)
0
Пробующий
 Аватар для galileopro
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
14.09.2009, 00:59
Вот чтоб понятней было для групп из 2-х символов:
Delphi
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
program Project2;
{$APPTYPE CONSOLE}
uses
  SysUtils;
 
type  mass=array[1..20]of boolean;
 
function P(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20:boolean):boolean;
var p1,p2,p3,p4,p5,p6,p7,p8,p9:boolean;
begin
p1:=a1 or a6;
p2:=a2 or a7;
p3:=a8 or a13;
p4:=a9 or a14 or a19;
p5:=a17 or a12;
p6:=a5 or a10 or a15;
 
P7:=(p2 and p3 and p4 and a20)or(p2 and a3 and a4 and p6);
P8:=a16 and p5 and a18 and p4 and a20;
p9:=p1 and p7;
 
P:=p8 or (a11 and p7) or p9;
end;
 
var a:mass;
    i:integer;
    _i,_j:integer;
begin
//ищем группы из двух символов
for _i:=1 to 20 do
 for _j:=_i to 20 do begin
   for i:=1 to 20 do a[i]:=true;//сначала все елементы рабочие
 if(_i<>_j)then begin
             a[_i]:=false;
             a[_j]:=false;
                end;
if(P(a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15],a[16],a[17],a[18],a[19],a[20])=false)then writeln('element: ',_i,' ',_j);
    end;
 
readln;
end.
Скрин(вроде правильно нашло).
0
Пробующий
 Аватар для galileopro
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
14.09.2009, 01:00
Если плохо видно, то нашло 2 комбинации: 3 и 20, а также 4 и 20.))
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
14.09.2009, 02:00
Я что-то не понимаю, вы плохо знаете теорию графов?

С этой теорией можно легко решить даную задачу (относительно ручного перебора).

А ты уже разобрался с графом??

Для кодеров перевожу условие задачи: ножно вести 20 вершин и указать с какими вершинами они соедены. На выходе должно быть: комбинации и общее количество комбинаций, при которых является невозможным перейти с 0-ой (начальной) вершины на 21-ую (конечную)

Единственная, на мой взгляд неточность: отключать все 20 вершин можно, или надо минимальное количество?
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
14.09.2009, 07:49
Надо минимальное кол-во, но это просто
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
14.09.2009, 13:26
Переделал функцию.
Теперь считает что это сеть - то есть движение траффика может быть не только слева направо, но и справа налево.
Варианты изменились, но кол-во их осталось такое же - 25.
Программа

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
/* Thread 50620 */
 
#include <stdio.h>
 
 
/************************************************/
#define SW_SIZE             20
#define INDEX_SIZE          (1<<SW_SIZE)
 
#define STATE_UNKNOWN       0
#define STATE_WORK          1
#define STATE_BLOCK         2
#define STATE_BLOCK_MIN     3
#define STATE_BLOCK_DERIV   4
 
 
/************************************************/
int is_schema_work( unsigned sw );
void calc_state( unsigned char *st );
void print_state( unsigned char *st );
void print_state_result( unsigned char *st );
void print_p( int n, int *p, const char *title );
 
 
/************************************************/
static unsigned mask[]= {
    0x00000001, 0x00000002, 0x00000004, 0x00000008,
    0x00000010, 0x00000020, 0x00000040, 0x00000080,
    0x00000100, 0x00000200, 0x00000400, 0x00000800,
    0x00001000, 0x00002000, 0x00004000, 0x00008000,
    0x00010000, 0x00020000, 0x00040000, 0x00080000,
    0x00100000, 0x00200000, 0x00400000, 0x00800000,
    0x01000000, 0x02000000, 0x04000000, 0x08000000,
    0x10000000, 0x20000000, 0x40000000, 0x80000000
};
 
static char *state_str[]= {
    "unknown",
    "work",
    "block",
    "block_min",
    "block_deriv",
};
 
 
/************************************************/
int main( void ) {
 
unsigned char st[INDEX_SIZE];
 
 
calc_state( st );
 
/* print_state( st ); */
 
print_state_result( st );
 
return 0;
 
} /* main() */
 
 
#define SW(argi)        ((state & mask[(argi)-1])!=0)
#define PFINAL(argi)    { p[argi]= 2; }
#define P_IS_ON(argi)   ( p[argi] == 1 )
#define PON(argi)       { if ( p[argi]==0 ) { p[argi]= 1; count1++; } }
 
 
/************************************************/
int is_schema_work( unsigned state ) {
 
#if 1
 
int count1;
int p[10]= { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 
 
for ( ; ; ) {
    count1= 0;
    if ( P_IS_ON(0) ) {
        PFINAL(0);
        if ( SW(1) || SW(6) || SW(11) ) { PON(1); }
        if ( SW(16) ) { PON(2); }
    }
    if ( P_IS_ON(1) ) {
        PFINAL(1);
        if ( SW(1) || SW(6) || SW(11) ) { PON(0); }
        if ( SW(2) || SW(7) ) { PON(3); }
    }
    if ( P_IS_ON(2) ) {
        PFINAL(2);
        if ( SW(16) ) { PON(0); }
        if ( SW(12) || SW(17) ) { PON(4); }
    }
    if ( P_IS_ON(3) ) {
        PFINAL(3);
        if ( SW(2) || SW(7) ) { PON(1); }
        if ( SW(3) ) { PON(5); }
        if ( SW(8) || SW(13) ) { PON(6); }
    }
    if ( P_IS_ON(4) ) {
        PFINAL(4);
        if ( SW(12) || SW(17) ) { PON(2); }
        if ( SW(18) ) { PON(6); }
    }
    if ( P_IS_ON(5) ) {
        PFINAL(5);
        if ( SW(3) ) { PON(3); }
        if ( SW(4) ) { PON(7); }
    }
    if ( P_IS_ON(6) ) {
        PFINAL(6);
        if ( SW(8) || SW(13) ) { PON(3); }
        if ( SW(9) || SW(14) || SW(19) ) { PON(8); }
        if ( SW(18) ) { PON(4); }
    }
    if ( P_IS_ON(7) ) {
        PFINAL(7);
        if ( SW(4) ) { PON(5); }
        if ( SW(5) || SW(10) || SW(15) ) { PON(9); }
    }
    if ( P_IS_ON(8) ) {
        PFINAL(8);
        if ( SW(9) || SW(14) || SW(19) ) { PON(6); }
        if ( SW(20) ) { PON(9); }
    }
    if ( P_IS_ON(9) ) {
        PFINAL(9);
        if ( SW(5) || SW(10) || SW(15) ) { PON(7); }
        if ( SW(20) ) { PON(8); }
        break;
    }
    if ( count1 == 0 ) { break; }
}
 
return (p[9] != 0);
 
#else
 
if ( SW(1) || SW(6) || SW(11) ) {
    if ( SW(2) || SW(7) ) {
        if ( SW(3) && SW(4) && ( SW(5) || SW(10) || SW(15) ) ) {
            return 1;
        }
        if ( SW(8) || SW(13) ) {
            if ( ( SW(9) || SW(14) || SW(19) ) && SW(20) ) {
                return 1;
            }
        }
    }
}
if ( SW(16) && ( SW(12) || SW(17) ) && SW(18) ) {
    if ( ( SW(9) || SW(14) || SW(19) ) && SW(20) ) {
        return 1;
    }
}
 
return 0;
 
#endif
 
} /* is_schema_work() */
 
 
/************************************************/
void calc_state( unsigned char *st ) {
 
int ind, ind2, i, min_flag;
 
 
/* Loop 1 */
for ( ind= 0; ind<INDEX_SIZE; ind++ ) {
    st[ind]= (is_schema_work( ind ) ? STATE_WORK : STATE_BLOCK);
}
 
/* Loop 2 */
for ( ind= 0; ind<INDEX_SIZE; ind++ ) {
    if ( st[ind] == STATE_BLOCK ) {
        min_flag= 1;
        for ( i= 0; i<SW_SIZE; i++ ) {
            ind2= ind|mask[i]; if ( ind2 == ind ) { continue; }
            if ( st[ind2] == STATE_WORK ) {
            } else {
                min_flag= 0; break;
            }
        }
        st[ind]= (min_flag ? STATE_BLOCK_MIN : STATE_BLOCK_DERIV);
    }
}
 
} /* calc_state() */
 
 
/************************************************/
void print_state( unsigned char *st ) {
 
int ind, i, len;
char buf[80], *p;
 
 
for ( ind= 0; ind<INDEX_SIZE; ind++ ) {
    p= buf;
    for ( i= 0; i<SW_SIZE; i++ ) {
        if ( (ind&mask[i]) != 0 ) {
            len= snprintf( p, buf+sizeof(buf)-p, "%d,", i+1 );
            p+= len;
        }
    }
    *p= '\0';
    printf( "%05x %-54s %-10s\n", ind, buf, state_str[st[ind]] );
}
 
} /* print_state() */
 
 
/************************************************/
void print_state_result( unsigned char *st ) {
 
int num, ind, i, len;
char buf[80], *p;
 
 
num= 0;
for ( ind= 0; ind<INDEX_SIZE; ind++ ) {
    if ( st[ind] != STATE_BLOCK_MIN ) { continue; }
    num++;
    p= buf;
    for ( i= 0; i<SW_SIZE; i++ ) {
        if ( (ind&mask[i]) == 0 ) {
            len= snprintf( p, buf+sizeof(buf)-p, "%d,", i+1 );
            p+= len;
        }
    }
    *p= '\0';
    printf( "%-2d  %06x  ^%-54s\n", num, ind, buf );
}
 
} /* print_state_result() */
 
 
/************************************************/
void print_p( int n, int *p, const char *title ) {
 
int i;
 
 
printf( "%s {", title );
for ( i= 0; i<n; i++ ) {
    printf( " %d", p[i] );
}
printf( " }\n" );
 
} /* print_p() */


Ответ:
Code
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
1   07bdef  ^5,10,15,20,                                           
2   07eb5e  ^1,6,8,11,13,20,                                       
3   07ef3d  ^2,7,8,13,20,                                          
4   07fff7  ^4,20,                                                 
5   07fffb  ^3,20,                                                 
6   0b9cef  ^5,9,10,14,15,19,                                      
7   0bca5e  ^1,6,8,9,11,13,14,19,                                  
8   0bce3d  ^2,7,8,9,13,14,19,                                     
9   0bdef7  ^4,9,14,19,                                            
10  0bdefb  ^3,9,14,19,                                            
11  0dad6f  ^5,8,10,13,15,18,                                      
12  0def77  ^4,8,13,18,                                            
13  0def7b  ^3,8,13,18,                                            
14  0dfbde  ^1,6,11,18,                                            
15  0dffbd  ^2,7,18,                                               
16  0ea56f  ^5,8,10,12,13,15,17,                                   
17  0ee777  ^4,8,12,13,17,                                         
18  0ee77b  ^3,8,12,13,17,                                         
19  0ef3de  ^1,6,11,12,17,                                         
20  0ef7bd  ^2,7,12,17,                                            
21  0f2d6f  ^5,8,10,13,15,16,                                      
22  0f6f77  ^4,8,13,16,                                            
23  0f6f7b  ^3,8,13,16,                                            
24  0f7bde  ^1,6,11,16,                                            
25  0f7fbd  ^2,7,16,
Добавлено через 1 минуту
Вот этих вариантов теперь нет:
Code
1
2
3
2   07fbde  ^1,6,11,20, 
3   07ffbd  ^2,7,20, 
8   0bdebd  ^2,7,9,14,19,
Миниатюры
Предмет "Надежность информационных систем". Нужно ваше мнение.  
1
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
14.09.2009, 13:36
Для вычисления работает схема или нет мне пришлось добавить 10 вершин - массив p[].
Значение p[i] == 0 обозначает что сеть в этом месте не работает (тока воды нет).
p[i] == 1 обозначает, что сеть в этом месте работает, но еще требуется обработка (которая будет сделана на этом или следующем цикле).
p[i] == 2 обозначает, что сеть в этом месте работает, обработка не требуется.

Сеть работает, если p[9] != 0.

Добавлено через 6 минут
А эту структуру нельзя представить в виде предиката
Подробнее - какую именно структуру нельзя представить в виде предиката ?
Булева функция от переменных SW1, ..., SW20 - это предикат ?
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
14.09.2009, 21:57
Я тут поразмышлял, для меня более понятный следующий алгоритм: создаем масив 20х20 елементы масива - булевые значения. Если елемент со значением тру, значит сервер, к примеру, 1 имеет прямой контакт с сервером 2 если индексы масива 1, 2 или 2, 1 задав таким образом масив можно сказать что задача сводится к задаче поиска пути, где ити можно только вверх-вниз, вправо-влево, при условии что на пути есть сервер, к которому есть прямой доступ, если при опреденленном варианте нерабочих серверов пути от 0 до 21 серверов (елементов масива) нет - вывести на экран последовательность нерабочих серверов..

В условиях даной задачи реализируя полный перебор можно спокойно вложится в минуту (работы алгоритма)..

Только вот проблема, я сам его хотя и понимаю, но реализировать не могу, недорос неверное
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.09.2009, 21:57
Помогаю со студенческими работами здесь

Нужно сделать дубликат жесткого диска - нужно ваше мнение!
Здравствуйте! Ситуация такая... Я уже довольно давно успешно юзаю жесткий диск и на нем у меня установлена графическая Убунта с...

Нужно ваше мнение
Кто-нибудь оцените сайт, чего не хватает подскажите, какие недочёты по дизайну, кто то точно лучше нашего разбирается :-)

Нужно ваше мнение
Здравствуйте! Оцените, пожалуйста, дизайн и функциональность сайта - бесплатная система для трекинга рабочего времени - Anuko Time...

Нужно ваше мнение..
Всем добрый вечер. Появилась на днях следующая проблема. У меня перестали индексировать сайт поисковики, я не могу найти причины кроме...

Нужно Ваше мнение
Доброе утро!!! С недавнего времени решил заняться написанием сайта. В СЕО я полный НУБ. ЧИТАЮ, ЧИТАЮ, ЧИТАЮ книги и материалы по раскрутке...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru