Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/76: Рейтинг темы: голосов - 76, средняя оценка - 4.92
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516

BigInteger в For

23.07.2019, 17:26. Показов 16684. Ответов 74
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Столкнулся с проблемой того, что в цикле for нельзя использовать BigInteger, не смотря на то, что это целочисленный тип. Кто-нибудь знает решение?
Пример:
Pascal
1
2
3
4
begin
  for i: BigInteger := 1 to 2 do //Ошибка: ожидался порядковый тип
    i.print;
end.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.07.2019, 17:26
Ответы с готовыми решениями:

Преобразовать Integer в BigInteger
Как преобразовать Integer в BigInteger?

Корень из числа типа BigInteger;
Доброго времени суток! Возник такой вопрос, у нас есть число типа BigInteger, а как из него извлечь корень? Можно ли это вообще сделать?...

Процедура Val/StrToInt, выводящая BigInteger
Я написал в дизайнере форм рабочий "переводчик периодической в десятичную дробь". Программа использует Val() для получения числа из...

74
79 / 49 / 23
Регистрация: 15.07.2018
Сообщений: 255
27.07.2019, 12:42
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Sun Serega Посмотреть сообщение
Наверно, как то так:
Можно ещё проще(по .net-овски):
Pascal
1
System.Environment.ProcessorCount
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
27.07.2019, 12:56
Цитата Сообщение от Get_Over_Here Посмотреть сообщение
Можно ещё проще(по .net-овски):
Это для CPU. А мы говорим про GPU.
0
79 / 49 / 23
Регистрация: 15.07.2018
Сообщений: 255
27.07.2019, 13:00
Цитата Сообщение от Sun Serega Посмотреть сообщение
Это для CPU. А мы говорим про GPU.
Ясно, понятно
0
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
27.07.2019, 13:38  [ТС]
Что делать с ошибкой времени выполнения: Unable to load DLL 'opencl.dll': Не найден указанный модуль?
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
27.07.2019, 14:43
Это значит что у вас драйверов OpenCL нету. Что делать - зависит от железа. Если есть видеокарта (не встройка) - ставьте драйверы для неё. Если нету - ставьте драйверы для CPU. Должен быть обязательно полный комплект и с подходящей версией.

Легче поставить драйверы NVidia, у них на сайте, на главной странице - автоматически сканируется железо и подбирается нужный установщик. Он, вроде, стабильно работает даже в обычном режиме, но лучше как и для любых других драйверов - перейти в безопасный режим на время установки.

А сложнее всего с AMD, с его дровами я и сам не справился недавно, мастера вызывал... На сайте AMD ужас творится, есть дофига страниц со скачиванием драйверов и каждая из них для той же видеокарты даёт разные установщики. А то что мне мастер в итоге поставил - вроде вообще было на странице, на которую можно попасть только с поисковика (то есть с самого сайта, с главной страницы - фиг что найдёшь).
0
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
27.07.2019, 15:51  [ТС]
Можете, пожалуйста, перечислить основные команды *.cl?
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
27.07.2019, 17:52
Основные вот:
https://www.khronos.org/regist... tions.html

Но это далеко не все. Я сам не знаю где полный список искать, наверное они просто разбросаны по всей спецификации... Вот ещё из полезных:
https://www.khronos.org/regist... tions.html

P.S. Только это не команды а подпрограммы. Команды это или какие то запросы на выполнение чего то, или строчки в почти любом скриптовом языке.
0
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
27.07.2019, 18:48  [ТС]
Я про то, что пишется в *.cl файле.
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
27.07.2019, 19:12
Вы ссылки то открывали?
0
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
28.07.2019, 12:52  [ТС]
Открывал - проще не стало.
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
28.07.2019, 13:24
Тогда остаётся только примеры искать и тестировать самому.
0
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
28.07.2019, 13:28  [ТС]
Я в примерах *.cl файлов не видел.
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
28.07.2019, 14:16
Это в каких? В C:\PABCWork.NET\Samples .cl файлы точно есть.
Но я вообще говорил про поиск примеров в интернете.
0
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
28.07.2019, 14:22  [ТС]
А, понял.
0
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
30.07.2019, 15:31  [ТС]
А если на компьютере уже находится opencl.dll без дров никак?
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
30.07.2019, 15:46
opencl.dll это и есть драйвер (1 из них), если я всё правильно понимаю. Если ошибка чтения (но эта .dll точно есть) - значит есть 2 варианта:

1. Функция, на которой сломалось - устаревшая или наоборот не реализована в данной версии (но в той программе что я вам кидал - есть только самые основные функции)

2. Эта .dll сломана и надо переустановить драйверы.

Но если что - я типа не эксперт, я сам ещё разбираюсь. Лучше найдите того кто знает точно.

Добавлено через 2 минуты
Главное - не пытайтесь скачать OpenCL.dll из интернета. Для каждой видеокарты нужна своя .dll, и ставить её должен установщик драйверов, который сделали производители вашей видеокарты. Иначе скорее всего встанет криво.
0
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
30.07.2019, 16:21  [ТС]
А если она рабочая - имеет значение место нахождения?
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
30.07.2019, 17:40
Если она рабочая - она уже лежит в 1 из системных папок, откуда всегда успешно достанет.
0
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
31.07.2019, 13:36  [ТС]
Спасибо.

Добавлено через 8 минут
Решил проверить паскалевские программы, и обнаружил, что клиент с сервером входят в передачу данных, но передать не могут и встают. Можете помочь?
Сервер:
Pascal
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
program ServerLife;
 
uses System.Net, System.Net.Sockets, System.IO;
 
var
  server: TcpListener := new TcpListener(IPAddress.Any, 5000);
  BreakPr := True;
  f: text;
  pow := biginteger.pow(2, 400);
 
begin
  assign(f, 'Data.txt');
  var BestRes, BestComb: BigInteger;
  
  //Ввод данных с файла
  writeln('Ввод данных с файла');
  var i := 0;
  var NotProcessed := new BigInteger[1, 2];
  foreach var s: string in readlines('Data.txt') do
  begin
    if i = 0 then
    begin
      BestRes := s.ToWords.ElementAt(0).ToBiginteger;
      BestComb := s.ToWords.ElementAt(1).ToBiginteger;
    end
    else
    begin
      SetLength(NotProcessed, (NotProcessed.Length div 2) + 1, 2);
      NotProcessed[i, 0] := s.ToWords.ElementAt(0).ToBiginteger;
    end;
    inc(i);
  end;
  
  //Тело программы
  writeln('Тело программы');
  server.Start();
  while BreakPr do
  begin
    
    //Вычисление обработанного количества данных в процентах:
    writeln('Вычисление обработанного количества данных в процентах:');
    //Введение переменных;
    writeln('Введение переменных;');
    var percent := '';
    var delit := biginteger.Pow(2, 400);
    var delim := NotProcessed[0, 0] * 100;
    
    //Вычисление целой части;
    writeln('Вычисление целой части;');
    repeat
      percent += (delim div delit).ToString;
      delim := delim mod delit;
    until delim div delit = 0;
    
    //Вычисление дробной части.
    writeln('Вычисление дробной части.');
    percent += '.';
    loop 120 do
    begin
      percent += (delim div delit).ToString;
      delim := (delim mod delit) * 10;
    end;
    
    
    //Запуск сервера
    writeln('Запуск сервера');
    var client := server.AcceptTcpClient();
    var stream := client.GetStream();
    
    //Получение данных
    writeln('Получение данных');
    var br := new BinaryReader(stream);
    var data := br.ReadString();
    
    //Проверка наличия ответа в запросе на данные:
    writeln('Проверка наличия ответа в запросе на данные:');
    if data <> 'R' then
    begin
      
      //Нахождение лучшего результата;
      writeln('Нахождение лучшего результата;');
      if data.ToWords.ElementAt(1).ToBiginteger > BestRes then
      begin
        BestRes := data.ToWords.ElementAt(2).ToBiginteger;
        BestComb := data.ToWords.ElementAt(1).ToBiginteger;
      end;
      
      //Удаление обработанных данных из списка необработанных.
      writeln('Удаление обработанных данных из списка необработанных.');
      for i := 0 to (NotProcessed.Length div 2) - 1 do
        if data.ToWords.ElementAt(0).ToBiginteger = NotProcessed[i, 0] then
        begin
          if i = 0 then
          begin
            NotProcessed[0, 0] := (NotProcessed[0, 0] + 1000000 > pow) ? pow : NotProcessed[0, 0] + 1000000;
            NotProcessed[0, 1] := 0;
          end
          else
          begin
            for var k := i to (NotProcessed.Length div 2) - 2 do
            begin
              NotProcessed[i, 0] := NotProcessed[i + 1, 0];
              NotProcessed[i, 1] := NotProcessed[i + 1, 1];
            end;
            SetLength(NotProcessed, (NotProcessed.Length div 2) - 1, 2);
          end;
        end;
      
    end;
    
      //Проверка на наличие данных с просроченным ответом;
      writeln('Проверка на наличие данных с просроченным ответом;');
    data := '';
    var seconds := True;
    for i := 0 to (NotProcessed.Length div 2) - 1 do
      if ((milliseconds - NotProcessed[i, 1] > 400000) or (NotProcessed[i, 1] = 0)) and Seconds then
      begin
        data := NotProcessed[i, 0].ToString;
        NotProcessed[i, 1] := milliseconds;
        Seconds := False;
      end;
    
    if NotProcessed[0, 0] = pow then
      if data <> '' then
        data := '0'
      else
    else
    begin
      
        //Добавление нового элемента в массив.
        writeln('Добавление нового элемента в массив.');
      if Seconds then
      begin
        SetLength(NotProcessed, (NotProcessed.Length div 2) + 1, 2);
        NotProcessed[(NotProcessed.Length div 2) - 1, 0] := NotProcessed[0, 0];
        NotProcessed[(NotProcessed.Length div 2) - 1, 1] := NotProcessed[0, 1];
        NotProcessed[0, 0] := (NotProcessed[(NotProcessed.Length div 2) - 1, 0] + 1000000 > pow) ? pow : NotProcessed[(NotProcessed.Length div 2) - 1, 0] + 1000000;
        NotProcessed[0, 1] := milliseconds;
        data += NotProcessed[0, 0].ToString;
      end;
    end;
    
    //Передача данных
    writeln('Передача данных');
    var bw := new BinaryWriter(stream);
    bw.Write(data);
    bw.Flush();
    
    //Остановка сервера
    writeln('Остановка сервера');
    stream.Close();
    client.Close();
    
    //Запись данных в файл
    writeln('Запись данных в файл');
    rewrite(f);
    println(f, BestRes, BestComb);
    for i := 0 to (NotProcessed.Length div 2) - 1 do
      Println(f, NotProcessed[i, 0]);
    close(f);
    BreakPr := (NotProcessed.Length = 2) and (NotProcessed[0, 0] = pow) ? False : True;
  end;
end.
На комментарии "Получение данных".
Клиент:
Pascal
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
program ClientLife;
 
uses System.Net, System.Net.Sockets, System.IO;
 
begin
  var (Field, Field1) := (new byte[42, 42], new byte[42, 42]);
  var BestField: BigInteger;
  var i, j, sum, bestsum: integer;
  
  var client := new TcpClient('192.168.1.2', 5000);
  var stream := client.GetStream();
  
  //Получение задачи от сервера
  writeln('Получение задачи от сервера');
  var bw := new BinaryWriter(stream);
  bw.Write('R');
  bw.Flush();
  
  var br := new BinaryReader(stream);
  var c := br.ReadString();
  
  stream.Close();
  client.Close();
  
  while True do
  begin
    
    //Перебор 1000000 вариантов (~5 мин)
    writeln('Перебор 1000000 вариантов (~5 мин)');
    var n := c.ToBigInteger;
    loop 1000000 do
    begin
      
      //Перевод числа BigInteger в двумерный бинарный(из нулей и единичек) массив
      var duo := '';
      var delim := n;
      while not (delim = 0) do
      begin
        duo := (delim mod 2).ToString + duo;
        delim := delim div 2;
      end;
      duo += '0' * (400 - duo.Length);
      for i := 1 to 40 do
        for j := 1 to 40 do
          Field[i, j] := 0;
      var k := 1;
      for i := 11 to 30 do
        for j := 11 to 30 do
        begin
          Field[i, j] := StrToInt(Duo[k]);
          Inc(k);
        end;
      
      //Симуляция игры (10 ходов)
      loop 10 do
      begin
        for i := 1 to 40 do
          for j := 1 to 40 do
            case Field[i - 1, j - 1] + Field[i - 1, j] + Field[i - 1, j + 1] + Field[i, j - 1]
            + Field[i, j + 1] + Field[i + 1, j - 1] + Field[i + 1, j] + Field[i + 1, j + 1] of
              0, 1, 4..8: Field1[i, j] := 0;
              2: Field1[i, j] := Field[i, j];
              3: Field1[i, j] := 1;
            end;
        
        Field.CopyTo(Field1, 0);
      end;
      
      //Нахождение лучшей комбинации
      for i := 1 to 40 do
        for j := 1 to 40 do
          if Field[i, j] = 1 then
            sum += 1;
      if sum > bestsum then
      begin
        bestField := n;
        bestsum := sum;
      end;
      n += 1;
      
    end;
    
    var clientCycle := new TcpClient('192.168.1.2', 5000);
    var streamCycle := client.GetStream();
    
    var data := c + ' ' + BestField.ToString + ' ' + BestSum.ToString;
    
    //Отправка результатов на сервер и получение новой задачи
    writeln('Отправка результатов на сервер и получение новой задачи');
    var bwCycle := new BinaryWriter(streamCycle);
    bwCycle.Write(data);
    bwCycle.Flush();
    
    var brCycle := new BinaryReader(streamCycle);
    c := brCycle.ReadString();
    
    streamCycle.Close();
    clientCycle.Close();
    (BestSum, BestField) := (0, 0);
  end;
end.
На комментарии "Получение задачи от сервера".

Добавлено через 17 секунд
Решил проверить паскалевские программы, и обнаружил, что клиент с сервером входят в передачу данных, но передать не могут и встают. Можете помочь?
Сервер:
Pascal
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
program ServerLife;
 
uses System.Net, System.Net.Sockets, System.IO;
 
var
  server: TcpListener := new TcpListener(IPAddress.Any, 5000);
  BreakPr := True;
  f: text;
  pow := biginteger.pow(2, 400);
 
begin
  assign(f, 'Data.txt');
  var BestRes, BestComb: BigInteger;
  
  //Ввод данных с файла
  writeln('Ввод данных с файла');
  var i := 0;
  var NotProcessed := new BigInteger[1, 2];
  foreach var s: string in readlines('Data.txt') do
  begin
    if i = 0 then
    begin
      BestRes := s.ToWords.ElementAt(0).ToBiginteger;
      BestComb := s.ToWords.ElementAt(1).ToBiginteger;
    end
    else
    begin
      SetLength(NotProcessed, (NotProcessed.Length div 2) + 1, 2);
      NotProcessed[i, 0] := s.ToWords.ElementAt(0).ToBiginteger;
    end;
    inc(i);
  end;
  
  //Тело программы
  writeln('Тело программы');
  server.Start();
  while BreakPr do
  begin
    
    //Вычисление обработанного количества данных в процентах:
    writeln('Вычисление обработанного количества данных в процентах:');
    //Введение переменных;
    writeln('Введение переменных;');
    var percent := '';
    var delit := biginteger.Pow(2, 400);
    var delim := NotProcessed[0, 0] * 100;
    
    //Вычисление целой части;
    writeln('Вычисление целой части;');
    repeat
      percent += (delim div delit).ToString;
      delim := delim mod delit;
    until delim div delit = 0;
    
    //Вычисление дробной части.
    writeln('Вычисление дробной части.');
    percent += '.';
    loop 120 do
    begin
      percent += (delim div delit).ToString;
      delim := (delim mod delit) * 10;
    end;
    
    
    //Запуск сервера
    writeln('Запуск сервера');
    var client := server.AcceptTcpClient();
    var stream := client.GetStream();
    
    //Получение данных
    writeln('Получение данных');
    var br := new BinaryReader(stream);
    var data := br.ReadString();
    
    //Проверка наличия ответа в запросе на данные:
    writeln('Проверка наличия ответа в запросе на данные:');
    if data <> 'R' then
    begin
      
      //Нахождение лучшего результата;
      writeln('Нахождение лучшего результата;');
      if data.ToWords.ElementAt(1).ToBiginteger > BestRes then
      begin
        BestRes := data.ToWords.ElementAt(2).ToBiginteger;
        BestComb := data.ToWords.ElementAt(1).ToBiginteger;
      end;
      
      //Удаление обработанных данных из списка необработанных.
      writeln('Удаление обработанных данных из списка необработанных.');
      for i := 0 to (NotProcessed.Length div 2) - 1 do
        if data.ToWords.ElementAt(0).ToBiginteger = NotProcessed[i, 0] then
        begin
          if i = 0 then
          begin
            NotProcessed[0, 0] := (NotProcessed[0, 0] + 1000000 > pow) ? pow : NotProcessed[0, 0] + 1000000;
            NotProcessed[0, 1] := 0;
          end
          else
          begin
            for var k := i to (NotProcessed.Length div 2) - 2 do
            begin
              NotProcessed[i, 0] := NotProcessed[i + 1, 0];
              NotProcessed[i, 1] := NotProcessed[i + 1, 1];
            end;
            SetLength(NotProcessed, (NotProcessed.Length div 2) - 1, 2);
          end;
        end;
      
    end;
    
      //Проверка на наличие данных с просроченным ответом;
      writeln('Проверка на наличие данных с просроченным ответом;');
    data := '';
    var seconds := True;
    for i := 0 to (NotProcessed.Length div 2) - 1 do
      if ((milliseconds - NotProcessed[i, 1] > 400000) or (NotProcessed[i, 1] = 0)) and Seconds then
      begin
        data := NotProcessed[i, 0].ToString;
        NotProcessed[i, 1] := milliseconds;
        Seconds := False;
      end;
    
    if NotProcessed[0, 0] = pow then
      if data <> '' then
        data := '0'
      else
    else
    begin
      
        //Добавление нового элемента в массив.
        writeln('Добавление нового элемента в массив.');
      if Seconds then
      begin
        SetLength(NotProcessed, (NotProcessed.Length div 2) + 1, 2);
        NotProcessed[(NotProcessed.Length div 2) - 1, 0] := NotProcessed[0, 0];
        NotProcessed[(NotProcessed.Length div 2) - 1, 1] := NotProcessed[0, 1];
        NotProcessed[0, 0] := (NotProcessed[(NotProcessed.Length div 2) - 1, 0] + 1000000 > pow) ? pow : NotProcessed[(NotProcessed.Length div 2) - 1, 0] + 1000000;
        NotProcessed[0, 1] := milliseconds;
        data += NotProcessed[0, 0].ToString;
      end;
    end;
    
    //Передача данных
    writeln('Передача данных');
    var bw := new BinaryWriter(stream);
    bw.Write(data);
    bw.Flush();
    
    //Остановка сервера
    writeln('Остановка сервера');
    stream.Close();
    client.Close();
    
    //Запись данных в файл
    writeln('Запись данных в файл');
    rewrite(f);
    println(f, BestRes, BestComb);
    for i := 0 to (NotProcessed.Length div 2) - 1 do
      Println(f, NotProcessed[i, 0]);
    close(f);
    BreakPr := (NotProcessed.Length = 2) and (NotProcessed[0, 0] = pow) ? False : True;
  end;
end.
На комментарии "Получение данных".
Клиент:
Pascal
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
program ClientLife;
 
uses System.Net, System.Net.Sockets, System.IO;
 
begin
  var (Field, Field1) := (new byte[42, 42], new byte[42, 42]);
  var BestField: BigInteger;
  var i, j, sum, bestsum: integer;
  
  var client := new TcpClient('192.168.1.2', 5000);
  var stream := client.GetStream();
  
  //Получение задачи от сервера
  writeln('Получение задачи от сервера');
  var bw := new BinaryWriter(stream);
  bw.Write('R');
  bw.Flush();
  
  var br := new BinaryReader(stream);
  var c := br.ReadString();
  
  stream.Close();
  client.Close();
  
  while True do
  begin
    
    //Перебор 1000000 вариантов (~5 мин)
    writeln('Перебор 1000000 вариантов (~5 мин)');
    var n := c.ToBigInteger;
    loop 1000000 do
    begin
      
      //Перевод числа BigInteger в двумерный бинарный(из нулей и единичек) массив
      var duo := '';
      var delim := n;
      while not (delim = 0) do
      begin
        duo := (delim mod 2).ToString + duo;
        delim := delim div 2;
      end;
      duo += '0' * (400 - duo.Length);
      for i := 1 to 40 do
        for j := 1 to 40 do
          Field[i, j] := 0;
      var k := 1;
      for i := 11 to 30 do
        for j := 11 to 30 do
        begin
          Field[i, j] := StrToInt(Duo[k]);
          Inc(k);
        end;
      
      //Симуляция игры (10 ходов)
      loop 10 do
      begin
        for i := 1 to 40 do
          for j := 1 to 40 do
            case Field[i - 1, j - 1] + Field[i - 1, j] + Field[i - 1, j + 1] + Field[i, j - 1]
            + Field[i, j + 1] + Field[i + 1, j - 1] + Field[i + 1, j] + Field[i + 1, j + 1] of
              0, 1, 4..8: Field1[i, j] := 0;
              2: Field1[i, j] := Field[i, j];
              3: Field1[i, j] := 1;
            end;
        
        Field.CopyTo(Field1, 0);
      end;
      
      //Нахождение лучшей комбинации
      for i := 1 to 40 do
        for j := 1 to 40 do
          if Field[i, j] = 1 then
            sum += 1;
      if sum > bestsum then
      begin
        bestField := n;
        bestsum := sum;
      end;
      n += 1;
      
    end;
    
    var clientCycle := new TcpClient('192.168.1.2', 5000);
    var streamCycle := client.GetStream();
    
    var data := c + ' ' + BestField.ToString + ' ' + BestSum.ToString;
    
    //Отправка результатов на сервер и получение новой задачи
    writeln('Отправка результатов на сервер и получение новой задачи');
    var bwCycle := new BinaryWriter(streamCycle);
    bwCycle.Write(data);
    bwCycle.Flush();
    
    var brCycle := new BinaryReader(streamCycle);
    c := brCycle.ReadString();
    
    streamCycle.Close();
    clientCycle.Close();
    (BestSum, BestField) := (0, 0);
  end;
end.
На комментарии "Получение задачи от сервера".
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
31.07.2019, 14:14
Я не работал с TcpClient напрямую, всё делал через сокеты... Но Если у вас программы встают обе на чтении данных - чего собственно вы ожидаете? Надо ведь чтоб они по очереди отправляли друг другу данные.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.07.2019, 14:14

Метод BigInteger.GreatestCommonDivisor (BigInteger, BigInteger)
Как использовать в C# windowsforms метод BigInteger.GreatestCommonDivisor (BigInteger, BigInteger)? Пример кода.

Как делить одно число BigInteger на другое BigInteger, при чем не теряя остаток
Помогите пожалуйста. Надо поделить одно число BigInteger на другое, при чем в результате сохранить весь остаток

Бинарное возведение в степень числа типа BigInteger в степень Biginteger
Здравствуйте. Не могу реализовать алгоритм бинарного возведения в степень. Есть 2 экземпляра BigInteger p,q. По методу Pow не...

BigInteger в степени BigInteger
Возможно ли возвести переменную типа BigInteger в такую же? Метод ModPow отпадает из-за необходимости mod'a. Спасибо.

BigInteger в степени BigInteger
Имеются переменные y,r,s,p типа BigInteger. Необходимо вычислить (y^r*r^s) % p. Какие предложения по поводу вычисления данной формулы? ...


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

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