Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
 Аватар для rfl
14 / 10 / 7
Регистрация: 13.06.2020
Сообщений: 260
.NET 5

Шифратор и дешифратор, проблема с потоками

19.04.2021, 15:14. Показов 3679. Ответов 25

Студворк — интернет-сервис помощи студентам
Приветствую всех, написал прогу для шифрование и дешифрование файлов. Все окей был до того момента когда я решил добавить ProgressBar. Теперь ничего не работает. При запуске с отладчиком там он у меня показал эксепшн "The calling thread cannot access this object because a different thread owns it.'". И в конечном итоге не работет ни прогресс бар ни шифратор ни дешифратор. Это был у меня первым вопросом, а второй заключается в том что, там допустим вовремя шифрование или дешифрование огромного файла(на него уходит много времени) я там хочу реализовать функцию пауза, типо нажал на него и все остановилась нажал обратно и продолжает с того момента где я остановил, как я это могу реализовать?

XML
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
<Window x:Class="EncryptDecryptApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:EncryptDecryptApp"
        mc:Ignorable="d"
        xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
        Title="MainWindow" Height="400" Width="800"
        Background="#2b2e4a" ResizeMode="NoResize" WindowStartupLocation="CenterScreen"
        FontFamily="Microsoft YaHei Light">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="3*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBox x:Name="directoryTxtBox" Grid.Row="1" Style="{StaticResource MaterialDesignOutlinedTextBox}"
                     Padding="10" VerticalAlignment="Center" BorderBrush="#e84545"
                     Margin="10 0 10 0" Foreground="White" FontSize="20"/>
            <Button Grid.Column="1" VerticalAlignment="Center" MinHeight="45" Click="OpenFileButton_Click"
                    Background="#e84545" BorderBrush="#e84545" Margin="10 0 10 0">
                <md:PackIcon Kind="Upload" MinHeight="30" MinWidth="30" Foreground="#f6f5f5"/>
            </Button>
        </Grid>
        <Grid Grid.Row="2">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Button Name="encryptButton" Grid.Column="0" VerticalAlignment="Center" MinHeight="45" MaxWidth="200"
                    Background="#e84545" BorderBrush="#e84545" Margin="10 0 10 0" IsEnabled="False" Click="encryptButton_Click">
                <StackPanel Orientation="Horizontal">
                    <md:PackIcon Kind="Encryption" MinHeight="30" MinWidth="30" Foreground="#f6f5f5"/>
                    <TextBlock Text="Encrypt" Foreground="#f6f5f5" FontSize="25"/>
                </StackPanel>
            </Button>
            
            <Button Name="decryptButton" Grid.Column="1" VerticalAlignment="Center" MinHeight="45" MaxWidth="200"
                    Background="#e84545" BorderBrush="#e84545" Margin="10 0 10 0" IsEnabled="False" Click="decryptButton_Click">
                <StackPanel Orientation="Horizontal">
                    <md:PackIcon Kind="Decrypted" MinHeight="30" MinWidth="30" Foreground="#f6f5f5"/>
                    <TextBlock Text="Decrypt" Foreground="#f6f5f5" FontSize="25"/>
                </StackPanel>
            </Button>
 
            <Button Name="pauseButton" Grid.Column="2" VerticalAlignment=   "Center" MinHeight="45" MaxWidth="200"
                    Background="#e84545" BorderBrush="#e84545" Margin="10 0 10 0" IsEnabled="False" Click="pauseButton_Click">
                <md:PackIcon Kind="Pause" MinHeight="30" MinWidth="30" Foreground="#f6f5f5"/>
            </Button>
        </Grid>
        <Grid Grid.Row="3">
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="2*"/>
            </Grid.RowDefinitions>
            <TextBlock Name="percentageTextBlock" Visibility="Hidden" Text="100%" Foreground="White" FontSize="15" VerticalAlignment="Bottom" Margin="20 0 0 0"/>
            <ProgressBar Name="progressBar" BorderBrush="#903749" Foreground="#903749" Value="100" Padding="0" MinWidth="50" MinHeight="25" Style="{StaticResource MaterialDesignLinearProgressBar}"
                         VerticalAlignment="Top" Grid.Row="3" Visibility="Hidden" Margin="20 0 20 0"/>
        </Grid>
    </Grid>
</Window>
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
using System.ComponentModel;
using System.IO;
using System.Windows;
 
namespace EncryptDecryptApp
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        BackgroundWorker backgroundWorkerEncrypt = new BackgroundWorker();
        BackgroundWorker backgroundWorkerDecrypt = new BackgroundWorker();
        public MainWindow()
        {
            InitializeComponent();
 
            backgroundWorkerEncrypt.WorkerSupportsCancellation = true;
            backgroundWorkerEncrypt.WorkerReportsProgress = true;
 
            backgroundWorkerEncrypt.ProgressChanged += BackgroundWorker_ProgressChanged;
            backgroundWorkerEncrypt.DoWork += BackgroundWorker_DoWork;
 
            backgroundWorkerDecrypt.WorkerSupportsCancellation = true;
            backgroundWorkerDecrypt.WorkerReportsProgress = true;
 
            backgroundWorkerDecrypt.ProgressChanged += BackgroundWorkerDecrypt_ProgressChanged;
            backgroundWorkerDecrypt.DoWork += BackgroundWorkerDecrypt_DoWork;
        }
 
        private void BackgroundWorkerDecrypt_DoWork(object sender, DoWorkEventArgs e)
        {
            Decryption(directoryTxtBox.Text);
        }
 
        private void BackgroundWorkerDecrypt_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar.Value = e.ProgressPercentage;
            percentageTextBlock.Text = progressBar.Value.ToString() + "%";
        }
 
        private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
                Encryption(directoryTxtBox.Text);
 
        }
 
        private void BackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
                progressBar.Value = e.ProgressPercentage;
                percentageTextBlock.Text = progressBar.Value.ToString() + "%";
 
        }
 
        private void OpenFileButton_Click(object sender, RoutedEventArgs e)
        {
            var fdlg = new System.Windows.Forms.OpenFileDialog();
            fdlg.Title = "Browse";
            fdlg.InitialDirectory = @"c:\";
            fdlg.Filter = "All files (*.*)|*.*";
            fdlg.FilterIndex = 2;
            fdlg.RestoreDirectory = true;
            if (fdlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                directoryTxtBox.Text = fdlg.FileName;
            }
            else
            {
                return;
            }
                encryptButton.IsEnabled = true;
                decryptButton.IsEnabled = true;
 
        }
 
        private void encryptButton_Click(object sender, RoutedEventArgs e)
        {
            progressBar.Visibility = Visibility.Visible;
            percentageTextBlock.Visibility = Visibility.Visible;
            backgroundWorkerEncrypt.RunWorkerAsync();
 
        }
 
        private void decryptButton_Click(object sender, RoutedEventArgs e)
        {
 
            progressBar.Visibility = Visibility.Visible;
            percentageTextBlock.Visibility = Visibility.Visible;
            backgroundWorkerDecrypt.RunWorkerAsync();
        }
 
        private void pauseButton_Click(object sender, RoutedEventArgs e)
        {
 
        }
 
        private  void Encryption(string filePath)
        {
            FileStream readFile = null;
            FileStream writeFile = null;
 
            readFile = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite);
            string newFile = filePath + ".slave";
            writeFile = new FileStream(newFile, FileMode.Create, FileAccess.ReadWrite);
            for (int i = 0; i < readFile.Length; i++)
            {
                byte b = (byte)readFile.ReadByte();
                b = (byte)~b;
                writeFile.WriteByte(b);
                backgroundWorkerEncrypt.ReportProgress((int)(readFile.Position * 100 / readFile.Length));
 
            }
 
            readFile.Close();
            writeFile.Close();
 
        }
 
        private  void Decryption(string filePath)
        {
            FileStream readFile = null;
            FileStream writeFile = null;
 
            readFile = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite);
            string newFile = filePath.Substring(0, filePath.Length - 5);
 
            writeFile = new FileStream(newFile, FileMode.Create, FileAccess.ReadWrite);
            for (int i = 0; i < readFile.Length; i++)
            {
                byte b = (byte)readFile.ReadByte();
                b = (byte)~b;
                writeFile.WriteByte(b);
                backgroundWorkerDecrypt.ReportProgress((int)(readFile.Position * 100 / readFile.Length));
            }
            readFile.Close();
            writeFile.Close();
        }
 
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.04.2021, 15:14
Ответы с готовыми решениями:

Шифратор/дешифратор
Всем привет! Помогите пожалуйста! Описываю задачу: Есть зашифрованный файл. Его текст примерно такой: А Б В ... 0 1 ... 9

Шифратор и дешифратор текста в richtextbox
Помогите зашифровать файл, который открыт в richTextBox1, не могу разобраться как

Шифратор и дешифратор. Плагинная система.
Немогу понять как ето сделать:Программа для шифрования / дешифрования текста. Должна быть возможность шифровать различными способами ( все...

25
 Аватар для rfl
14 / 10 / 7
Регистрация: 13.06.2020
Сообщений: 260
20.04.2021, 08:51  [ТС]
Студворк — интернет-сервис помощи студентам
Элд Хасп, Простите но я совсем запутался в вашем диалоге с другим челом, потом у меня вопрос что мне совать в проперти
C#
1
public double Progress {get => ...; private set => ...;}
а дальше я не до конца понимаю принцип работы await/async/task и юзать их в этом задании, а нельзя немного проще или не знаю у меня голова кружится от этого. Я просто новичок попавщий в ад, помилуйте лол
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
20.04.2021, 09:31
Цитата Сообщение от rfl Посмотреть сообщение
Простите но я совсем запутался в вашем диалоге с другим челом, потом у меня вопрос что мне совать в проперти
Посмотрите Простые реализации для тем на форуме.
Перенесите оттуда себе в проект базовые реализации INPC и ICommand.
Там же есть примеры реализации свойств с INPC.

Для одного свойства это будет:
C#
1
2
private double _progress;
public double Progress {get => _progress; private set => Set(ref _progress, value);}
Добавлено через 2 минуты
Цитата Сообщение от rfl Посмотреть сообщение
а дальше я не до конца понимаю принцип работы await/async/task и юзать их в этом задании
Объясню позже.
Пока надо сделать синхронные методы которые будут вызываться в асинхронных.
1
 Аватар для rfl
14 / 10 / 7
Регистрация: 13.06.2020
Сообщений: 260
24.04.2021, 12:20  [ТС]
Элд Хасп, уже прошло времени, отвлекся хорошенько, знаю, но я сделал так и все работает(кроме паузы в этом пока не разобрался):

для отображение процентности в .xaml свойство текст поменял на это:
XML
1
Text="{Binding ElementName=progressBar, Path=Value, StringFormat={}{0:0}%}"
потом уже в .xaml.cs как вы и сказали сделал через async/await/Task (знаю без паттерна, просто морока все это через паттерн сделать):
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
using System.ComponentModel;
using System.IO;
using System.Threading.Tasks;
using System.Windows;
 
namespace EncryptDecryptApp
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
 
        public MainWindow()
        {
            InitializeComponent();
            DataContext = this;
        }
 
 
 
 
        private void OpenFileButton_Click(object sender, RoutedEventArgs e)
        {
            var fdlg = new System.Windows.Forms.OpenFileDialog();
            fdlg.Title = "Browse";
            fdlg.InitialDirectory = @"c:\";
            fdlg.Filter = "All files (*.*)|*.*";
            fdlg.FilterIndex = 2;
            fdlg.RestoreDirectory = true;
            if (fdlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                directoryTxtBox.Text = fdlg.FileName;
            }
            else
            {
                return;
            }
            encryptButton.IsEnabled = true;
            decryptButton.IsEnabled = true;
 
        }
 
        private async void encryptButton_Click(object sender, RoutedEventArgs e)
        {
            
            progressBar.Visibility = Visibility.Visible;
            percentageTextBlock.Visibility = Visibility.Visible;
            await Encryption(directoryTxtBox.Text);
 
        }
 
        private async void decryptButton_Click(object sender, RoutedEventArgs e)
        {
 
            progressBar.Visibility = Visibility.Visible;
            percentageTextBlock.Visibility = Visibility.Visible;
            await Decryption(directoryTxtBox.Text);
 
        }
 
        private void pauseButton_Click(object sender, RoutedEventArgs e)
        {
           
        }
 
        private async Task Encryption(string filePath)
        {
            await Task.Run(() => {
                FileStream readFile = null;
                FileStream writeFile = null;
 
                readFile = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite);
                string newFile = filePath + ".slave";
                writeFile = new FileStream(newFile, FileMode.Create, FileAccess.ReadWrite);
                for (int i = 0; i < readFile.Length; i++)
                {
                    byte b = (byte)readFile.ReadByte();
                    b = (byte)~b;
                    writeFile.WriteByte(b);
                    Dispatcher.Invoke(() =>
                    {
                        progressBar.Value = ((int)(readFile.Position * 100 / readFile.Length));
                    });
                    
 
                }
 
                readFile.Close();
                writeFile.Close();
            });
            
 
        }
 
        private async Task Decryption(string filePath)
        {
            await Task.Run(() => {
                FileStream readFile = null;
                FileStream writeFile = null;
 
                readFile = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite);
                string newFile = filePath.Substring(0, filePath.Length - 5);
 
                writeFile = new FileStream(newFile, FileMode.Create, FileAccess.ReadWrite); 
                for (int i = 0; i < readFile.Length; i++)
                {
                    byte b = (byte)readFile.ReadByte();
                    b = (byte)~b;
                    writeFile.WriteByte(b);
                    Dispatcher.Invoke(() =>
                    {
                        progressBar.Value = ((int)(readFile.Position * 100 / readFile.Length));
                    });
                }
                readFile.Close();
                writeFile.Close();
            });
            
        }
 
    }
}
А вот уже паузу не знаю как сделать...
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
24.04.2021, 13:13
Цитата Сообщение от rfl Посмотреть сообщение
А вот уже паузу не знаю как сделать...
Нужен какой-то флаг в поле для паузы.
В цикле проверять установку этого флага.
Если установлен, то небольшое ожидание и ещё раз проверка.
Я же показывал как это надо делать.

Добавлено через 1 минуту
Нужно (псевдо код)
1
 Аватар для rfl
14 / 10 / 7
Регистрация: 13.06.2020
Сообщений: 260
24.04.2021, 13:47  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я же показывал как это надо делать.
Да, но
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я же показывал как это надо делать.
Такс у меня проблема, сделал его но заморозилась весь поток, следовательно вся прога
вот как делал:

добавил новый button(resumeButton сделал его скрытым чтобы потом при нажатии на кнопку pauseButton он активировался бы. потом уже в коде сделал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        private void pauseButton_Click(object sender, RoutedEventArgs e)
        {
            isPause = true;
            while (isPause)
                Task.Delay(100);
            resumeButton.Visibility = Visibility.Visible;
            pauseButton.Visibility = Visibility.Hidden;
        }
 
        private void resumeButton_Click(object sender, RoutedEventArgs e)
        {
            isPause = false;
            resumeButton.Visibility = Visibility.Hidden;
            pauseButton.Visibility = Visibility.Visible;
        }
isBreak мне не понадобился потому что нет необходимости прервать процесс. И как по мне то что я сделал выглядит полнейщим бредом, может я так не понял вас
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
24.04.2021, 14:38
Лучший ответ Сообщение было отмечено rfl как решение

Решение

Цитата Сообщение от rfl Посмотреть сообщение
Такс у меня проблема, сделал его но заморозилась весь поток, следовательно вся прога
вот как делал:
Вы не поняли.
В кнопках должна быть просто установка и сброс:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        private bool isPause;
        private void pauseButton_Click(object sender, RoutedEventArgs e)
        {
            isPause = true;
            resumeButton.Visibility = Visibility.Visible;
            pauseButton.Visibility = Visibility.Hidden;
        }
 
        private void resumeButton_Click(object sender, RoutedEventArgs e)
        {
            isPause = false;
            resumeButton.Visibility = Visibility.Hidden;
            pauseButton.Visibility = Visibility.Visible;
        }
А цикл с проверкой должен быть в методах шифровки/дешифоровки:
C#
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
        private async Task Decryption(string filePath)
        {
            await Task.Run(() => {
                FileStream readFile = null;
                FileStream writeFile = null;
 
                readFile = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite);
                string newFile = filePath.Substring(0, filePath.Length - 5);
 
                writeFile = new FileStream(newFile, FileMode.Create, FileAccess.ReadWrite); 
                for (int i = 0; i < readFile.Length; i++)
                {
 
                   while (isPause)
                      await Task.Delay(100);
 
                    byte b = (byte)readFile.ReadByte();
                    b = (byte)~b;
                    writeFile.WriteByte(b);
                    Dispatcher.Invoke(() =>
                    {
                        progressBar.Value = ((int)(readFile.Position * 100 / readFile.Length));
                    });
                }
                readFile.Close();
                writeFile.Close();
            });
Добавлено через 3 минуты
rfl, и лучше сделать одну кнопку.
Когда флаг поднят она Resume.
Когда сброшен - Pause.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.04.2021, 14:38

Нужно создать Шифратор\Дешифратор
сам очень мало что понимаю в програмировании!

Шифратор/дешифратор с случайным ключем
Необходимо реализовать шифратор\дешифратор с рандомным ключем. Я его реализовал. Вот код: void codePhrase() //шифрую { ...

Не получается создать шифратор-дешифратор текста
Новичок в c# но уже изучил массивы, но не могу осмыслить как сдвинуть элементы на определённое кол-во символов, на форме создал 4...

Ищу готовый шифратор и дешифратор текстового файла
Скиньте плиз кто - нибудь прогу, которая шифрует и дешифрует текстовый файл! Очень нужно

шифратор/дешифратор С++
Здравствуйте, случайно ни у кого не имеются сурцы программы-шифратора/дешифратора введенных слов с GUI?(алгоритм хэширования не важен)


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru