Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
1 / 1 / 3
Регистрация: 25.03.2013
Сообщений: 119

Разбить программу на 2 части

02.01.2015, 11:58. Показов 1778. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Входной язык содержит логические выражения, разделенные символом ; (точка с запятой). Логические выражения состоят из идентификаторов, констант true и false, знака присваивания (:=), знаков операций or, xor, and, not и круглых скобок.

Проблема в следующем: бывают ситуации когда нужно забить сразу две лексемы, на одной итерации этого сделать нельзя. Приходится откатывать на одну назад.
Как мне сделать так чтобы не откатываться?
Если разбить на две части программы, но не знаю как это сделать в коде. Понимаю что первая часть программы - просматривающая текстовый поток и отделяющая лексемы, а другая - распознающая их.

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
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        string text=""; //хранится обрабатывемый код
       
 
        public struct Lexem
        {            
            public string type;         //тип лексемы             
        }
 
        public struct LexemResult
        {           
            public string type;         //тип лексемы 
            public string description;  //описание
        }         
       
        private void button3_Click(object sender, EventArgs e)
        {
            String Buff = "";
            text = "";
 
 
            Buff = richTextBox1.Text;
 
            for (int i = 0; i < Buff.Length; i++)
            {
                if (Buff[i] == '\n')                
                    text+=' ';
                else
                    text += Buff[i];
            }
            text += ' ';
            ArrayList ListLex = new ArrayList();//результат
 
            ListLex.Clear();
 
            LexemResult temp = new LexemResult();
            
            temp.type = "";
            
            string znachenie = "";
            string slovo = "";        
 
            for (int i = 0; i < text.Length; i++)
            {
                if (znachenie == "" & text[i] == 't' )
                    znachenie = "l1";
                else if (znachenie == "l1" & text[i] == 'r')
                    znachenie = "l2";
                else if (znachenie == "l2" & text[i] == 'u')
                    znachenie = "l3";
                else if (znachenie == "l3" & text[i] == 'e')
                    znachenie = "l4";
                //////////////////////////false               
                else if (znachenie == "" & text[i] == 'f')
                    znachenie = "l5";
                else if (znachenie == "l5" & text[i] == 'a')
                    znachenie = "l6";
                else if (znachenie == "l6" & text[i] == 'l')
                    znachenie = "l7";
                else if (znachenie == "l7" & text[i] == 's')
                    znachenie = "l8";
                else if (znachenie == "l8" & text[i] == 'e')
                    znachenie = "l10";
                //////////////////////////or
                else if (znachenie == "" & text[i] == 'o')
                    znachenie = "l12";
                else if (znachenie == "l12" & text[i] == 'r')
                    znachenie = "l13";
                //////////////////////////xor
                else if (znachenie == "" & text[i] == 'x')
                    znachenie = "l15";
                else if (znachenie == "l15" & text[i] == 'o')
                    znachenie = "l16";
                else if (znachenie == "l16" & text[i] == 'r')
                    znachenie = "l17";
                //////////////////////////and
                else if (znachenie == "" & text[i] == 'a')
                    znachenie = "l19";
                else if (znachenie == "l19" & text[i] == 'n')
                    znachenie = "l20";
                else if (znachenie == "l20" & text[i] == 'd')
                    znachenie = "l21";
                //////////////////////////not
                else if (znachenie == "" & text[i] == 'n')
                    znachenie = "l23";
                else if (znachenie == "l23" & text[i] == 'o')
                    znachenie = "l24";
                else if (znachenie == "l24" & text[i] == 't')
                    znachenie = "l25";
                //////////////////////////присваивание
                else if (znachenie == "" & text[i] == ':')
                    znachenie = "r1";
                else if (znachenie == "r1" & text[i] == '=')
                    znachenie = "r2";
                /////////////////////////разделение
                else if (znachenie == "" & text[i] == ';')
                    znachenie = "e1";
                /////////////////////////скобка открытие
                else if (znachenie == "" & text[i] == '(')
                    znachenie = "n1";
                /////////////////////////скобка закрытие
                else if (znachenie == "" & text[i] == ')')
                    znachenie = "m1";                
                else if (znachenie == "" && Char.IsLetter(text[i]) || text[i] == '_')//если символ или прочерк и у нас значение еще пустое то тогда это идентификатор
                    znachenie = "id1";
                else if (!(znachenie == "" || znachenie == "r1" || znachenie == "e1" || znachenie == "n1" || znachenie == "m1") && 
                    ((Char.IsLetter(text[i])) || text[i] == '_' || Char.IsDigit(text[i])))//Б/Ц/_ к уже имеющемуся идентификатору
                    znachenie = "id2";
 
                if (text[i] == ' ' || text[i] == '(' || text[i] == ')' || text[i] == ';' || (text[i] == ':' && slovo != "" ) || text[i] == '=')
                {                   
                    if (znachenie == "l4")
                        znachenie = "1";
                    else if (znachenie == "l10")
                        znachenie = "2";
                    else if (znachenie == "l13")
                        znachenie = "3";
                    else if (znachenie == "l17")
                        znachenie = "4";
                    else if (znachenie == "l21")
                        znachenie = "5";
                    else if (znachenie == "l25")
                        znachenie = "6";
                    else if (znachenie == "r2")
                    {
                        znachenie = "7";
                    }
                    else if (znachenie == "e1")
                        znachenie = "8";
                    else if (znachenie == "n1")
                        znachenie = "9";
                    else if (znachenie == "m1")
                        znachenie = "10";
                    else if (znachenie == "id2")
                        znachenie = "12";
                    else znachenie = "13";
                   
                }
 
                if ((text[i] == '(' || text[i] == ')' || text[i] == ';' || text[i] == ':' ) && slovo != "")
                {
                    i--;
                }
                else
                {
                    slovo += text[i];
                }
 
                if (znachenie == "1" || znachenie == "2" || znachenie == "3"  || znachenie == "4"  || znachenie == "5"  || znachenie == "6" || znachenie == "7"||
                    znachenie == "8" || znachenie == "9" || znachenie == "10" || znachenie == "11" || znachenie == "12" || znachenie == "13")             
                {
                    temp.description = slovo;
 
                    if (znachenie == "1")
                    {
                        temp.type = "Логическое выражение";
                    }
                    if (znachenie == "2")
                    {
                        temp.type = "Логическое выражение";
                    }
                    if (znachenie == "3")
                    {
                        temp.type = "Ключевое слово";
                    }
                    if (znachenie == "4")
                    {
                        temp.type = "Ключевое слово";
                    }
                    if (znachenie == "5")
                    {
                        temp.type = "Ключевое слово";
                    }
                    if (znachenie == "6")
                    {
                        temp.type = "Ключевое слово";
                    }
                    if (znachenie == "7")
                    {
                        temp.type = "Присваивание";
                    }
                    if (znachenie == "8")
                    {
                        temp.type = "Разделение";
                    }
                    if (znachenie == "9")
                    {
                        temp.type = "Скобка";
                    }
                    if (znachenie == "10")
                    {
                        temp.type = "Скобка";
                    }
                    if (znachenie == "12")
                    {
                        //if (text[i] != ' ')
                        temp.type = "Идентификатор";
                    }
                    if (znachenie == "13")
                        temp.type = "Ошибка";
                                      
                    if (temp.description != " ")
                        ListLex.Add(temp);
 
                    znachenie = "";
                    slovo = "";
                    temp.description = "";                  
                    temp.type = "";
                }
            }               
            
            int j=0;
 
            dataGridView2.Rows.Clear();
 
            foreach (LexemResult result in ListLex)
            {
                dataGridView2.Rows.Add();
                dataGridView2.Rows[j].Cells[0].Value = result.description;
                dataGridView2.Rows[j].Cells[1].Value = result.type;
              
                j++;
            }
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.01.2015, 11:58
Ответы с готовыми решениями:

Разбить файл на части
У меня есть текстовый документ весом 2.5 ГБ, можно ли разбить его на части не загружая его полностью в какую-либо переменную либо загружая...

Разбить строку на части
Считываю конфиг файл и получаю вот такую строку - &quot;BuildID=20160407164938&quot;. Подскажите как разбить ее на две переменные? В первую должно...

Разбить массив на равные части
Пользователь вводит массив целых чисел, состоящий из последовательных групп из 4 чисел. Как можно разбить массив на отдельные массивы...

11
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
02.01.2015, 21:16
Дайте пример логического выражения.

Добавлено через 3 минуты
Мне кажется, никто кроме вас не разберется в ваших хитрых конструкциях.
0
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
02.01.2015, 21:53
mr_ruffer, то, что вы делаете, не называется программированием. Почитайте литературу, попробуйте себя в простейших задачах, пожалуйста!
1
1 / 1 / 3
Регистрация: 25.03.2013
Сообщений: 119
03.01.2015, 06:29  [ТС]
Вот пример логического выражения
C#
1
2
3
:=xhor or for : =true()false
not:=notf
true
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
03.01.2015, 20:27
Однако. И что нужно получить из него?
0
1 / 1 / 3
Регистрация: 25.03.2013
Сообщений: 119
04.01.2015, 05:57  [ТС]
Программа в принципе работает и работает правильно, единственное что хотел сделать или переделать так это разбить ее на 2 части чтобы не откатывать итерации назад
Потому что бывают ситуации когда нужно забить сразу две лексемы, на одной итерации этого сделать нельзя.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
:=  Присваивание
xhor    Идентификатор
or  Ключевое слово
for     Идентификатор
:   Ошибка
=   Ошибка
true    Логическое выражение
(   Скобка
)   Скобка
false   Логическое выражение
not Ключевое слово
:=  Присваивание
notf    Идентификатор
true    Логическое выражение
2 части из которых:
Одна - просматривающая текстовый поток и отделяющая лексемы, а другая - распознающая их.
Тогда не нужен был бы следующий код
C#
1
2
3
4
     if ((text[i] == '(' || text[i] == ')' || text[i] == ';' || text[i] == ':' ) && slovo != "")
                {
                    i--;
                }
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
04.01.2015, 08:40
mr_ruffer, Что то я тоже не могу въехать в ваши хитроумные алгоритмы )))
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
05.01.2015, 23:00
Вместо тысячи ифов..
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
 
namespace ConsoleApplication2
    
{
    class Program
    {
 
        public static int Mathces(string str, string[] keys)
        {
            int matches = 0;
            //количество возможных соответствий из keys для str
            foreach (string key in keys) {
                if(key.StartsWith(str))
                    matches++;
            }
            //может ли str являтся идентификатором
            if(Regex.IsMatch(str,"^[a-zA-Z]{1,}$"))
                matches++;
            return matches;
        }
        public static string GetValue(string key,Dictionary<string,string> dictionary)
        {
            string result;
            if(dictionary.TryGetValue(key.Trim(), out result))
                return result;
            if(Regex.IsMatch(key,"^[a-zA-Z]{1,}$"))
            {
                return "Идентификатор";
            }
            return "Ошибка";
        }
        public static void Main()
        {
            //Список ключевых слов
            Dictionary<string,string> keyWords = new Dictionary<string, string>
            {
                {":=", "Присваивание"},
                {"true","Логическое выражение"},
                {"false", "Логическое выражение"},
                {"(", "Скобка"},
                {")", "Скобка"},
                {"or", "Ключевое слово"},
                {"xor", "Ключевое слово"},
                {"and", "Ключевое слово"},
                {"not", "Ключевое слово"}
            };
            //Выражение для анализа
            string expression = "notf :=xhor or for : =true()false not:=notf true";
            //Анализируемая часть выражения
            string currentExpr = string.Empty;
            //Совпадений на предыдущей итерации
            int lastMatches = 0;
            for (int i = 0; i < expression.Length; i++) {
                //Добавляем к анализуруемой строке след. символ
                currentExpr+=expression[i];
                //Получаем количество совпадений
                int matces = Mathces(currentExpr, keyWords.Keys.ToArray());
                //если совпадений нет...
                if(matces == 0 && currentExpr != " ")
                {
                    //..но были на прошлой итерации
                    if(lastMatches > 0)
                    {
                        //возвращам состояние
                        currentExpr = currentExpr.Remove(currentExpr.Length - 1);
                        i--;
                    }
                    Console.WriteLine("{0} {1}",currentExpr,GetValue(currentExpr, keyWords));
                    currentExpr = string.Empty;
                }
                //если выражение пустое - сбрасываем currentExpr
                if(currentExpr == " ")
                {
                    currentExpr = string.Empty;
                }
                lastMatches = matces;
            }
            //если осталась непроанализированная часть - анализируем
            if (currentExpr != string.Empty)
            {
                Console.WriteLine("{0} {1}",currentExpr,GetValue(currentExpr, keyWords));
            }
 
            Console.ReadKey();
            
        }
    }
}
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
06.01.2015, 06:24
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
public static void Main()
{
    Regex all = new Regex(@"(
                                (?<KeyWord>  \b ( or | xor | and | not ) \b )
                                |            
                                (?<Boolean>  \b ( true | false )         \b )
                                |            
                                (?<Word>     \b \w+                      \b )                                    
                                |
                                (?<Brackets> [()]                           )
                                |                                           
                                (?<Error>    : (?=[^=]|$)                   )
                                |                                           
                                (?<Error>    (?<=[^:]|^) =                  )
                                |                                           
                                (?<Set>      :=                             )
                                |
                                .                                    
                            )+"
             , RegexOptions.IgnorePatternWhitespace | RegexOptions.ExplicitCapture | RegexOptions.Multiline | RegexOptions.Singleline);
 
 
    string expression = "notf :=xhor or # for : =true()false not:=notf ";
 
    Match mc = all.Match(expression);
 
    Console.WriteLine("\n-Ключевые слова-");
    foreach (Capture g in mc.Groups["KeyWord"].Captures)
        Console.WriteLine(g.Value);
 
    Console.WriteLine("\n-Скобки-");
    foreach (Capture g in mc.Groups["Brackets"].Captures)
        Console.WriteLine(g.Value);
 
    Console.WriteLine("\n-Логические выражения-");
    foreach (Capture g in mc.Groups["Boolean"].Captures)
        Console.WriteLine(g.Value);
 
    Console.WriteLine("\n-Идентификаторы-");
    foreach (Capture g in mc.Groups["Word"].Captures)
        Console.WriteLine(g.Value);
 
    Console.WriteLine("\n-Присваивание-");
    foreach (Capture g in mc.Groups["Set"].Captures)
        Console.WriteLine(g.Value);
 
    Console.WriteLine("\n-Ошибки-");
    foreach (Capture g in mc.Groups["Error"].Captures)
        Console.WriteLine(g.Value);
 
    Console.ReadKey();
}
0
1 / 1 / 3
Регистрация: 25.03.2013
Сообщений: 119
06.01.2015, 14:23  [ТС]
мне нужно без использования регекса, было бы регекс я бы сделал сам за 2 минуты
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
06.01.2015, 20:32
Без регекса:
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
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ConsoleApplication2
    
{
    class Program
    {
        //является ли строка допустимым идентификатором
        public static bool IsCorrectIdentifier(string ident)
        {
            foreach (char ch in ident) {
                if(!char.IsLetter(ch))
                    return false;
            }
            return true;
        }
        public static int Mathces(string str, string[] keys)
        {
            int matches = 0;
            //количество возможных соответствий из keys для str
            foreach (string key in keys) {
                if(key.StartsWith(str))
                    matches++;
            }
            //может ли str являтся идентификатором
            if(IsCorrectIdentifier(str))
                matches++;
            return matches;
        }
        public static string GetValue(string key,Dictionary<string,string> dictionary)
        {
            string result;
            if(dictionary.TryGetValue(key.Trim(), out result))
                return result;
            if(IsCorrectIdentifier(key))
                return "Идентификатор";
            return "Ошибка";
        }
        public static void Main()
        {
            //Список ключевых слов
            Dictionary<string,string> keyWords = new Dictionary<string, string>
            {
                {":=", "Присваивание"},
                {"true","Логическое выражение"},
                {"false", "Логическое выражение"},
                {"(", "Скобка"},
                {")", "Скобка"},
                {"or", "Ключевое слово"},
                {"xor", "Ключевое слово"},
                {"and", "Ключевое слово"},
                {"not", "Ключевое слово"}
            };
            //Выражение для анализа
            string expression = "notf :=xhor or for : =true()false not:=notf true";
            //Анализируемая часть выражения
            string currentExpr = string.Empty;
            //Совпадений на предыдущей итерации
            int lastMatches = 0;
            for (int i = 0; i < expression.Length; i++) {
                //Добавляем к анализуруемой строке след. символ
                currentExpr+=expression[i];
                //Получаем количество совпадений
                int matces = Mathces(currentExpr, keyWords.Keys.ToArray());
                //если совпадений нет...
                if(matces == 0 && currentExpr != " ")
                {
                    //..но были на прошлой итерации
                    if(lastMatches > 0)
                    {
                        //возвращам состояние
                        currentExpr = currentExpr.Remove(currentExpr.Length - 1);
                        i--;
                    }
                    Console.WriteLine("{0} {1}",currentExpr,GetValue(currentExpr, keyWords));
                    currentExpr = string.Empty;
                }
                //если выражение пустое - сбрасываем currentExpr
                if(currentExpr == " ")
                {
                    currentExpr = string.Empty;
                }
                lastMatches = matces;
            }
            //если осталась непроанализированная часть - анализируем
            if (currentExpr != string.Empty)
            {
                Console.WriteLine("{0} {1}",currentExpr,GetValue(currentExpr, keyWords));
            }
 
            Console.ReadKey();
            
        }
    }
}
1
1 / 1 / 3
Регистрация: 25.03.2013
Сообщений: 119
11.01.2015, 11:10  [ТС]
а конечный автомат же ведь не может делать ход назад?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.01.2015, 11:10
Помогаю со студенческими работами здесь

Разбить массив на равные N части
Есть массив, например: int lines = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; мне надо разбить массив на 4 равных...

Разбить массив на равные части
Всем привет! Нужно разбить массив А на m массивов равной длинны. как лучше это сделать? далее мне нужно Потом c помощью потоков (...

Разбить текст в одной строке на 2 части
Здравствуйте! Нужно разбить текст в одной строке на 2 части. Как это сделать в C# не могу понять к сожалению. string text =...

Разбить массив на две части по четности индекса
Задан массив с количество элементов N. Сформировать два массива: в первый включить элементы исходного массива с четными номерами, а во...

Не могу разбить массив на части
Забираю массив из файла (*.txt) (их ищет в папке и из внутренних данных должен собрать большой массив) сл вида: Двутавр СТО АСЧМ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru