2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1 ... 6, 7, 8, 9, 10, 11, 12 ... 47  След.
 
 Re: Модифицировать программу (практическая помощь)
Сообщение11.03.2015, 11:05 
Заслуженный участник


20/08/14
11063
Россия, Москва
Проверены все числа до $1.78\cdot10^{16}$, покажу все известные КПППЧ длиной 22 (если не ошибаюсь все они найдены мной):
633925574060671: 0 16 40 48 58 112 118 148 156 198 216 232 250 292 300 330 336 390 400 408 432 448
2235053194261739: 0 54 68 78 92 122 150 192 200 210 224 228 242 252 260 302 330 360 374 384 398 452
3693434256575461: 0 28 46 60 112 118 156 166 178 180 186 292 298 300 312 322 360 366 418 432 450 478
6244996197964523: 0 6 26 48 74 98 110 146 198 200 230 234 264 266 318 354 366 390 416 438 458 464
7312449941282693: 0 6 18 50 56 96 116 180 204 210 260 264 314 320 344 408 428 468 474 506 518 524
11768508587048027: 0 20 96 122 132 152 176 216 222 246 272 294 320 344 350 390 414 434 444 470 546 566
12241378636561883: 0 44 54 98 110 168 200 224 264 308 330 344 366 410 450 474 506 564 576 620 630 674
12696156429346387: 0 30 100 114 132 162 166 184 204 226 232 264 270 292 312 330 334 364 382 396 466 496
13388148635660387: 0 2 66 72 84 96 140 150 176 180 186 260 266 270 296 306 350 362 374 380 444 446
14052415423668901: 0 70 88 96 100 136 142 166 178 180 226 252 298 300 312 336 342 378 382 390 408 478
КПППЧ длиной 17 или 24 (и более) не найдены.
О квадратах информация выложена рядом.

 Профиль  
                  
 
 Re: Модифицировать программу (практическая помощь)
Сообщение21.03.2015, 05:32 
Заслуженный участник


20/08/14
11063
Россия, Москва
Nataly-Mak в сообщении #939614 писал(а):
Замечу очень хорошую особенность программы: она может быть прервана в любой момент любым способом (даже отключением электричества) и при этом все данные будут сохранены, в том числе и последний проверенный интервал. После вы просто запускаете программу и она начнёт работать с прерванного места.
Все решения записываются в файл постоянно, ничего не теряется.

Столкнулся с неприятным эффектом, вчера дважды вырубалось электричество, и оба раза программа не смогла продолжить счёт с точки останова. Файл start.txt был правильного размера, но абсолютно пустым. Из запущенных 4-х копий впараллель, т.е. 8 событий, продолжила счёт лишь одна, остальные 7 начали снова с 0. Хорошо что assocprim16.txt остались правильными и не потерялись вообще все результаты. Пришлось руками последнее число из assocprim16.txt вносить в start.txt и перезапускать счёт. Так что утверждение "(даже отключением электричества) и при этом все данные будут сохранены, в том числе и последний проверенный интервал. После вы просто запускаете программу и она начнёт работать с прерванного места." излишне смелое и не подтверждается фактами. Но это и не является недостатком именно программы, всё же ситуация аварийная.

 Профиль  
                  
 
 Re: Модифицировать программу (практическая помощь)
Сообщение21.03.2015, 05:58 


23/05/12

1245
можно делать запись в новый файл каждый раз, потом переименовывать можно последние 1-2-3 копии.

 Профиль  
                  
 
 Re: Модифицировать программу (практическая помощь)
Сообщение21.03.2015, 08:58 
Заслуженный участник
Аватара пользователя


19/12/10
1546
Dmitriy40 в сообщении #993378 писал(а):
Столкнулся с неприятным эффектом, вчера дважды вырубалось электричество, и оба раза программа не смогла продолжить счёт с точки останова. Файл start.txt был правильного размера, но абсолютно пустым. Из запущенных 4-х копий впараллель, т.е. 8 событий, продолжила счёт лишь одна, остальные 7 начали снова с 0.

Файл start.txt открывается на запись в конце проверки текущего интервала, и сразу же закрывается после записи одного единственного числа:
Используется синтаксис C++
ofstream fout("start.txt");
fout << start;
fout.close();

Вряд ли на это уходит много времени, но если в этот момент произойдет отключение электричества, файл будет испорчен. Ввиду краткости этого момента, совершенно невероятным выглядит факт точного попадания в семи случаях из восьми. Даже не могу предположить в чём тут дело.

-- 21 мар 2015, 09:19 --

Dmitriy40 в сообщении #993378 писал(а):
Пришлось руками последнее число из assocprim16.txt вносить в start.txt и перезапускать счёт.

Правильнее было бы не последнее, а 23-е с конца. Вот как это делается в программе:
Используется синтаксис C++
const int shablon24 = 23;
// . . .
start = primes[primes.size() - shablon24];

То есть последние 23 простых из предыдущего интервала включаются в новый.

 Профиль  
                  
 
 Re: Модифицировать программу (практическая помощь)
Сообщение21.03.2015, 09:37 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов
Dmitriy40 в сообщении #993378 писал(а):
Так что утверждение "(даже отключением электричества) и при этом все данные будут сохранены, в том числе и последний проверенный интервал. После вы просто запускаете программу и она начнёт работать с прерванного места." излишне смелое и не подтверждается фактами. Но это и не является недостатком именно программы, всё же ситуация аварийная.

whitefox
не переживайте и не ломайте голову.
Вашу программу Dmitriy40 реабилитировал (см. конец цитаты).
А теперь насчёт неподтверждения фактами моего "излишне смелого утверждения".
Во-первых, в 1 событии из 8 утверждение всё-таки подтвердилось!
Во-вторых, Dmitriy40 забыл (по невнимательности или умышленно), что я никогда не крутила вашу программу более чем в одном экземпляре. У меня всего 2 ядра в процессоре, при этом одно занимала ваша программа, а на другом я работала по своим программам.
(Об этом я писала не раз и здесь, и на форуме ПЕН.)
Так вот, у меня подтверждение моего утверждения было стопроцентное, то есть при каждом отключении электричества (а у нас его очень часто отключают) информация в файле start.txt записывалась верная.
Программу я покрутила-таки вполне достаточно (месяца два), чтобы набрать статистику отключений и поведения программы.

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

Кстати, продолжая утверждать, что скорость генерации простых чисел не имеет никакого значения, Dmitriy40, однако, отложил программу со своим генератором простых чисел и перешёл на использование вашей программы, в которой задействован генератор primesieve.
Смею предположить, что скорость генерации имеет-таки значение и не малое. А иначе зачем бросать родную программу и переходить на чужую?

Dmitriy40
вместо того чтобы выискивать на мне блох (я не собака, и блох на мне нет), займитесь лучше делом.
Например, освойте OEIS или сделайте генератор простых чисел лучше, чем primesieve.

Вчера, на правах автора проекта, я опубликовала в OEIS вашу последовательность магических констант пандиагональных квадратов 4-го порядка из последовательных простых чисел (номер сообщу ниже).
[благодарить не надо; я это сделала не для вас, а для пользователей Энциклопедии]
Согласовала вопрос авторства с maxal. Он последовательность утвердил.
Так что, если найдёте ещё решения, вводите их в вашу последовательность.

-- Сб мар 21, 2015 10:46:26 --

Последовательность A256234.

 Профиль  
                  
 
 Re: Модифицировать программу (практическая помощь)
Сообщение21.03.2015, 10:40 
Заслуженный участник


20/08/14
11063
Россия, Москва
whitefox в сообщении #993394 писал(а):
Правильнее было бы не последнее, а 23-е с конца.
То есть последние 23 простых из предыдущего интервала включаются в новый.
В принципе да, Вы правы. Но практика показывает, что соседние последовательности обычно разделены достаточно большими интервалами (миллиарды чисел!), потому вместо 23-го простого числа "назад" можно смело брать и начало (и конец) предыдущей последовательности. Вероятность пропуска остаётся ненулевой, но слишком маленькой.
К тому же я перепроверяю ВСЕ найденные последовательности своей программой (она выдаёт ВСЕ КПППЧ, а не только длины 16) с большим перекрытием (плюс-минус миллионный интервал), все пропуски этой проверкой будут гарантированно найдены.

Насчёт краткости открытия и закрытия файла, возможно стоит после закрытия добавить операцию flush() (извините, не помню как она правильно называется в C) для гарантированного сброса записанных данных на физический носитель? Или она выполняется автоматом при закрытии файла? Я в своих программах это делаю. Но не уверен что это заметно добавит надёжности при авариях.

-- 21.03.2015, 11:04 --

Nataly-Mak в сообщении #993407 писал(а):
Так вот, у меня подтверждение моего утверждения было стопроцентное, то есть при каждом отключении электричества (а у нас его очень часто отключают) информация в файле start.txt записывалась верная.
А у меня вот так вот. А наличие даже одного "отрицательного" факта говорит что надежность не 100%, что я и сказал. У Вас раньше не было, а у меня вот появилась новая информация, о чём и сообщил, возможно кому-то это будет важным.
И да, в общем поведение от количества запущенных копий зависит не сильно, они все запущены из разных папок и обращаются к разным файлам.
Я и сам был удивлён что 7 из 8 вылетели, понятнее было бы 1-2. Возможно это связано с частотой перезаписи файлов, почти раз в две секунды каждый из 4-х.

Nataly-Mak в сообщении #993407 писал(а):
Кстати, продолжая утверждать, что скорость генерации простых чисел не имеет никакого значения, Dmitriy40, однако, отложил программу со своим генератором простых чисел и перешёл на использование вашей программы, в которой задействован генератор primesieve.
Смею предположить, что скорость генерации имеет-таки значение и не малое. А иначе зачем бросать родную программу и переходить на чужую?
Вот Вам не надоело одно и тоже повторять снова? Вам ведь уже ещё двое тут кроме меня сказали что вы не правы в этом утверждении. И я ведь просил не поднимать эту тему опять.
Да, мне некогда довести свою программу до ума, а эта работает быстрее и её дали всем желающим. Я воспользовался. Ваши выдумки о причинах тут неуместны.
В задаче поиска КПППЧ разумеется важна скорость генерации простых чисел.
А вот в задаче поиска квадрата 5х5 (да и 4х4 если не слишком оптимизировано составление квадрата) на генерацию простых чисел по Вашим же оценкам уходит всего около 5% общего времени. И в ЭТОЙ задаче ЛЮБАЯ оптимизация генератора простых чисел не ускорит счёт более чем на 5%. Важнее ускорять построение квадрата.
И не приписывайте мне слов, что я не говорил. И не искажайте смысл.
И не продолжайте полемику на эту тему!!

Nataly-Mak в сообщении #993407 писал(а):
Dmitriy40
вместо того чтобы выискивать на мне блох (я не собака, и блох на мне нет), займитесь лучше делом.
Я не блох ищу, и не на вас, а всего лишь проинформировал общественность о слишком оптимистичных (или даже некорректных) высказываниях.
А делом у меня есть каким заняться, работы полно. И поиск КПППЧ, магических квадратов или кубов, или простых чисел или работа с OEIS в их число не входит. Это всё делается "на общественных началах", бесплатно. И Ваши советы в такой форме излишни.

-- 21.03.2015, 11:09 --

Nataly-Mak в сообщении #993407 писал(а):
Так что, если найдёте ещё решения, вводите их в вашу последовательность.
Ещё один квадрат уже есть, но подожду пока допроверятся всё пропуски и станет ясно каков он по счёту и нет ли рядом ещё.

 Профиль  
                  
 
 Re: Модифицировать программу (практическая помощь)
Сообщение21.03.2015, 11:11 
Заслуженный участник
Аватара пользователя


19/12/10
1546
Dmitriy40 в сообщении #993422 писал(а):
Насчёт краткости открытия и закрытия файла, возможно стоит после закрытия добавить операцию flush() (извините, не помню как она правильно называется в C) для гарантированного сброса записанных данных на физический носитель? Или она выполняется автоматом при закрытии файла?

Согласно стандарту C++, функция ofstream::close() сбрасывает все буфера на диск. Более того, Страуструп (автор C++) рекомендует вообще не закрывать файлы без особой необходимости, это сделает деструктор класса ofstream при выходе из области видимости.

Я использую компилятор Visual C++, а он, вроде как, в этом пункте соответствует стандарту. Может здесь как-то чудит ОС?

Впрочем, код можно переписать так:
Используется синтаксис C++
ofstream fout("start.txt");
fout << start << flush;
fout.close();

Но вряд ли дело в этом.

 Профиль  
                  
 
 Re: Модифицировать программу (практическая помощь)
Сообщение21.03.2015, 11:15 
Заслуженный участник


20/08/14
11063
Россия, Москва
КПППЧ длины 22 кстати тоже ещё 2 новых нашлось уже.

-- 21.03.2015, 11:21 --

whitefox в сообщении #993431 писал(а):
Но вряд ли дело в этом.
Согласен.
И ещё раз повторю, это не является недостатком программы.
Задачи корректного сохранения данных очевидно не ставилось вообще, это совершенно отдельная непростая задача. И я её перед собой не ставлю в своих программах, это дело ОС. Я и не требую её решения, я лишь обращаю внимание если кто будет пользоваться программой, после сбоя не перезапускать автоматом, а сначала проверить какое число записано в файле start.txt.

-- 21.03.2015, 11:24 --

А, дошло почему вспомнил про flush: я обычно рабочие файлы вообще не закрываю до конца программы, вот и пользуюсь flush после записи очередной порции данных для сброса буферов на диск. Как это влияет в аварийных ситуациях сходу не соображу. Во всяком случае не припомню потерь данных.
Или может быть дело ещё в том, что у меня все файлы дополняются, а не перезаписываются целиком, вдруг для ОС первое проще (и получается надёжнее).

 Профиль  
                  
 
 Re: Модифицировать программу (практическая помощь)
Сообщение24.03.2015, 23:17 
Заслуженный участник


20/08/14
11063
Россия, Москва
Закончена проверка до $2\cdot10^{16}$, найдены ещё две КПППЧ длины 22:
18620445306703861: 0 10 36 46 66 76 82 96 102 130 136 162 168 196 202 216 222 232 252 262 288 298
19802687937976219: 0 40 52 82 112 118 124 132 154 180 202 210 232 258 280 288 294 300 330 360 372 412
Таким образом всего их известно уже 12шт.
КПППЧ длиной 24 и более до $2\cdot10^{16}$ не обнаружена. КПППЧ нечётной длины 17 и более также не обнаружена.

-- 25.03.2015, 00:01 --

Интересное наблюдение, на интервале $[1\cdot10^{16},2\cdot10^{16}]$ расстояние между соседними КПППЧ чётной длины 16 (и более) не менее $12$млн и не более $2.56$трлн. Около $14\cdot10^{15}$ и $18\cdot10^{15}$ минимальное расстояние превышает $148$млн.
Это типа косвенное обоснование моим словам выше, что не обязательно искать точно 23-е предыдущее простое число, можно взять вообще любое число в пределах нескольких миллионов, всё равно ближайшая КПППЧ скорее всего намного дальше.

 Профиль  
                  
 
 Re: Модифицировать программу (практическая помощь)
Сообщение30.03.2015, 14:19 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов
Чтобы не открывать новую тему, помещу сюда.
Просьба уже была озвучена в теме "Дьявольские магические квадраты из простых чисел", но никакого действия на форумное общество не возымела :-)

Есть программа поиска идеального квадрата 7-го порядка, написанная на QBASIC.
Просьба простая, как пареная репа: прошу просто переписать программу на C++ один в один, не вникая и ничего не изменяя.

Опыт такой у меня был давно. Тогда я искала пандиагональные квадраты 5-го порядка из простых чисел. Попросила переписать программу итальянского коллегу ice00. Он это сразу же сделал. Программа стала работать в разы быстрее. Подчеркну, что переписывал он один в один.

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

Итак, код программы:

(Оффтоп)

Код:
#COMPILE EXE
#DIM NONE

FUNCTION PBMAIN () AS LONG
LOCAL D,I,J,N,K,L,S,I5,I14,I23,I24,I16,I20,I12,I15,I21,I6,I18 AS LONG

N=46
DIM P(N) AS LONG, X(49) AS LONG, B(49) AS LONG, H(7,7) AS LONG

OPEN "A17.TXT" FOR INPUT AS #1
FOR I=1 TO N
INPUT #1,P(I)
NEXT I
CLOSE #1

OPEN "A18.TXT" FOR OUTPUT AS #1

K=P(1)+P(N):S=7*K/2:H(4,4)=K/2
PRINT "konstanta associativnosti";K
PRINT

PRINT "VVEDITE X(3)"
INPUT D

X(3)=D:H(1,3)=X(3):H(7,5)=K-X(3)

FOR I5=1 TO N
PRINT "I5=";I5
X(5)=P(I5):H(1,5)=X(5):B(1)=X(5)
B(2)=K-X(5):H(7,3)=B(2)

FOR I14=1 TO N
FOR I=1 TO 2
IF P(I14)=B(I) THEN 998
NEXT I
X(14)=P(I14):B(3)=X(14):H(2,7)=X(14):B(4)=K-X(14):H(6,1)=B(4)

FOR I23=1 TO N
FOR I=1 TO 4
IF P(I23)=B(I) THEN 996
NEXT I
X(23)=P(I23):B(5)=X(23):H(4,2)=X(23):B(6)=K-X(23):H(4,6)=B(6)

FOR I24=1 TO N
FOR I=1 TO 6
IF P(I24)=B(I) THEN 994
NEXT I
X(24)=P(I24):B(7)=X(24):H(4,3)=X(24):B(8)=K-X(24):H(4,5)=B(8)

X(8) = - X(3)+ X(5)+ X(23)+ X(14)- X(24)
IF X(8)>=P(1) THEN IF X(8)<=P(N) THEN 10
GOTO 994

10 FOR I=1 TO 8
IF X(8)=B(I) THEN 994
NEXT I
FOR I=1 TO N
IF X(8)=P(I) THEN 12
NEXT I
GOTO 994

12 H(2,1)=X(8):B(9)=X(8):B(10)=K-X(8):H(6,7)=B(10)

FOR I16=1 TO N
FOR I=1 TO 10
IF P(I16)=B(I) THEN 992
NEXT I
X(16)=P(I16):B(11)=X(16):H(3,2)=X(16):B(12)=K-X(16):H(5,6)=B(12)

FOR I20=1 TO N
FOR I=1 TO 12
IF P(I20)=B(I) THEN 990
NEXT I
X(20)=P(I20):B(13)=X(20):H(3,6)=X(20):B(14)=K-X(20):H(5,2)=B(14)

X(22) = - X(16)+ X(3)- X(5)+ X(20)+ K- X(23)
IF X(22)>=P(1) THEN IF X(22)<=P(N) THEN 14
GOTO 990

14 FOR I=1 TO 14
IF X(22)=B(I) THEN 990
NEXT I
FOR I=1 TO N
IF X(22)=P(I) THEN 16
NEXT I
GOTO 990

16 H(4,1)=X(22):B(15)=X(22):B(16)=K-X(22):H(4,7)=B(16)

FOR I12=1 TO N
FOR I=1 TO 16
IF P(I12)=B(I) THEN 988
NEXT I
X(12)=P(I12):B(17)=X(12):H(2,5)=X(12):B(18)=K-X(12):H(6,3)=B(18)

FOR I15=1 TO N
FOR I=1 TO 18
IF P(I15)=B(I) THEN 986
NEXT I
X(15)=P(I15):B(19)=X(15):H(3,1)=X(15):B(20)=K-X(15):H(5,7)=B(20)

X(9) = - X(16)+2*X(3)- X(5)+3*K-2*X(23)- X(12)-2*X(14)- X(15)+ X(24)
IF X(9)>=P(1) THEN IF X(9)<=P(N) THEN 18
GOTO 986

18 FOR I=1 TO 20
IF X(9)=B(I) THEN 986
NEXT I
FOR I=1 TO N
IF X(9)=P(I) THEN 20
NEXT I
GOTO 986

20 H(2,2)=X(9):B(21)=X(9):B(22)=K-X(9):H(6,6)=B(22)

FOR I21=1 TO N
FOR I=1 TO 22
IF P(I21)=B(I) THEN 984
NEXT I
X(21)=P(I21):B(23)=X(21):H(3,7)=X(21):B(24)=K-X(21):H(5,1)=B(24)

X(11) = -(-2*X(16)+4*X(3)-2*X(20)-2*X(21)+3*K-2*X(23)-4*X(14)-2*X(15)+2*X(24))/2
IF X(11)>=P(1) THEN IF X(11)<=P(N) THEN 22
GOTO 984

22 FOR I=1 TO 24
IF X(11)=B(I) THEN 984
NEXT I
FOR I=1 TO N
IF X(11)=P(I) THEN 24
NEXT I
GOTO 984

24 H(2,4)=X(11):B(25)=X(11):B(26)=K-X(11):H(6,4)=B(26)

FOR I6=1 TO N
FOR I=1 TO 26
IF P(I6)=B(I) THEN 982
NEXT I
X(6)=P(I6):B(27)=X(6):H(1,6)=X(6):B(28)=K-X(6):H(7,2)=B(28)

X(19) = - X(16)+ X(3)- X(20)- X(21)+ K+ X(6)- X(14)+ X(24)
IF X(19)>=P(1) THEN IF X(19)<=P(N) THEN 26
GOTO 982

26 FOR I=1 TO 28
IF X(19)=B(I) THEN 982
NEXT I
FOR I=1 TO N
IF X(19)=P(I) THEN 28
NEXT I
GOTO 982

28 H(3,5)=X(19):B(29)=X(19):B(30)=K-X(19):H(5,3)=B(30)

FOR I18=1 TO N
FOR I=1 TO 30
IF P(I18)=B(I) THEN 980
NEXT I
X(18)=P(I18):B(31)=X(18):H(3,4)=X(18):B(32)=K-X(18):H(5,4)=B(32)

X(1) = (2*X(18)-2*X(20)- K+2*X(12)+2*X(6)-2*X(14)+2*X(24))/2
IF X(1)>=P(1) THEN IF X(1)<=P(N) THEN 30
GOTO 980

30 FOR I=1 TO 32
IF X(1)=B(I) THEN 980
NEXT I
FOR I=1 TO N
IF X(1)=P(I) THEN 32
NEXT I
GOTO 980

32 H(1,1)=X(1):B(33)=X(1):B(34)=K-X(1):H(7,7)=B(34)

X(2) = -(-2*X(16)+4*X(3)+2*X(18)-2*X(20)- K-2*X(23)+2*X(6)-4*X(14)+2*X(24))/2
IF X(2)>=P(1) THEN IF X(2)<=P(N) THEN 34
GOTO 980

34 FOR I=1 TO 34
IF X(2)=B(I) THEN 980
NEXT I
FOR I=1 TO N
IF X(2)=P(I) THEN 36
NEXT I
GOTO 980

36 H(1,2)=X(2):B(35)=X(2):B(36)=K-X(2):H(7,6)=B(36)

X(4) = -(-2*X(3)+2*X(18)+2*X(5)-2*X(21)-7*K+2*X(23)+4*X(12)+4*X(6)+2*X(15))/2
IF X(4)>=P(1) THEN IF X(4)<=P(N) THEN 38
GOTO 980

38 FOR I=1 TO 36
IF X(4)=B(I) THEN 980
NEXT I
FOR I=1 TO N
IF X(4)=P(I) THEN 40
NEXT I
GOTO 980

40 H(1,4)=X(4):B(37)=X(4):B(38)=K-X(4):H(7,4)=B(38)

X(7) = - X(16)+ X(18)- X(21)+ X(12)+ X(6)- X(14)+ X(15)
IF X(7)>=P(1) THEN IF X(7)<=P(N) THEN 42
GOTO 980

42 FOR I=1 TO 38
IF X(7)=B(I) THEN 980
NEXT I
FOR I=1 TO N
IF X(7)=P(I) THEN 44
NEXT I
GOTO 980

44 H(1,7)=X(7):B(39)=X(7):B(40)=K-X(7):H(7,1)=B(40)

X(10) = - X(16)+ X(3)+ X(18)+ X(5)- X(20)- X(21)- K+ X(12)+2*X(6)-2*X(14)+ X(15)+ X(24)
IF X(10)>=P(1) THEN IF X(10)<=P(N) THEN 46
GOTO 980

46 FOR I=1 TO 40
IF X(10)=B(I) THEN 980
NEXT I
FOR I=1 TO N
IF X(10)=P(I) THEN 48
NEXT I
GOTO 980

48 H(2,3)=X(10):B(41)=X(10):B(42)=K-X(10):H(6,5)=B(42)

X(13) = X(16)- X(18)- X(5)+3*K- X(12)-2*X(6)- X(15)
IF X(13)>=P(1) THEN IF X(13)<=P(N) THEN 50
GOTO 980

50 FOR I=1 TO 42
IF X(13)=B(I) THEN 980
NEXT I
FOR I=1 TO N
IF X(13)=P(I) THEN 52
NEXT I
GOTO 980

52 H(2,6)=X(13):B(43)=X(13):B(44)=K-X(13):H(6,2)=B(44)
PRINT "X(13)=";X(13)

X(17) = -(2*X(3)+2*X(18)-5*K+2*X(6)-2*X(14)+2*X(15)+2*X(24))/2
IF X(17)>=P(1) THEN IF X(17)<=P(N) THEN 54
GOTO 980

54 FOR I=1 TO 44
IF X(17)=B(I) THEN 980
NEXT I

H(3,3)=X(17):B(45)=X(17):B(46)=K-X(17):H(5,5)=B(46)
PRINT "X(17)nepr=";X(17)

GOTO 300

980 NEXT I18
982 NEXT I6
984 NEXT I21
986 NEXT I15
988 NEXT I12
990 NEXT I20
992 NEXT I16
994 NEXT I24
996 NEXT I23
998 NEXT I14
1000 NEXT I5

GOTO 1200

300 FOR I=1 TO 7
FOR J=1 TO 7
PRINT H(I,J);
NEXT J
PRINT
NEXT I
PRINT

FOR I=1 TO 7
FOR J=1 TO 7
PRINT #1,H(I,J);
NEXT J
PRINT #1,
NEXT I
PRINT #1,:PRINT #1,"X(22)=";X(22);"X(9)=";X(9);"X(11)=";X(11);"X(19)=";X(19);"X(1)=";X(1);"X(2)=";X(2);"X(4)=";X(4);"X(7)=";X(7);"X(10)=";X(10)
PRINT #1,:PRINT #1,"X(13)=";X(13);"X(17)nepr=";X(17)
PRINT #1,

FOR I=1 TO N
IF X(17)=P(I) THEN 1200
NEXT I
GOTO 980

1200 CLOSE #1
END

END FUNCTION

Разумеется, программу надо после переписывания скомпилировать и выдать исполняемую версию, которая будет у меня работать (ОС Windows 7 64-bit).

Было даже и продолжение истории с первой переписанной ice00 программой. Я сделала потом ещё одну программу по новой формуле, по образцу кода, присланного мне ice00, переписала вторую программу сама, отправила код ice00, он скомпилировал и прислал мне исполняемую программу.
Вот сейчас в компьютере не могу найти этот код на C++.
Надо порыться в бумажных черновиках, может быть, сохранилась распечатка.
Переписать-то - дело абсолютно ерундовое, только я забыла напрочь синтаксис языка, так как имела дело с ним всего один раз и очень давно.

 Профиль  
                  
 
 Re: Модифицировать программу (практическая помощь)
Сообщение30.03.2015, 16:49 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов
Кстати, могу выложить свою исполняемую программу, если кто захочет посмотреть её в работе.
Работает, пыхтит :-) Сегодня вот уже заканчивают работу две копии, запущенные второй раз.
Таким образом, за рабочий день мне удаётся выполнить 4 прохода внешнего цикла. Это очень неплохо.
Вот уже осталось всего 19 проходов (из 24).

 Профиль  
                  
 
 Re: Модифицировать программу (практическая помощь)
Сообщение30.03.2015, 17:02 
Заслуженный участник


20/08/14
11063
Россия, Москва
Вот переписанная почти без всякой отсебятины на дельфи, надеюсь нигде не ошибся: http://tempfile.ru/file/3120842
Изменения коснулись лишь формата вывода результатов, в Паскале/Дельфи нет точного аналога оператора "PRINT ,", заменил похожим по смыслу.
Вычисления полностью без изменений.
Комментировать стиль не буду ибо бесполезно, но отмечу, что неиспользование функций для проверки допустимости вычисленного значения увеличило время переписывания втрое.
Не помню чему в бейсике равен тип long, сделал все переменные и массивы типа int32, т.е. допустимы числа примерно до 150млн (из-за умножений и сложений в формулах).

 Профиль  
                  
 
 Re: Модифицировать программу (практическая помощь)
Сообщение30.03.2015, 17:21 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов
Dmitriy40 в сообщении #998010 писал(а):
Вот переписанная почти без всякой отсебятины на дельфи, надеюсь нигде не ошибся: http://tempfile.ru/file/3120842

Спасибо. Попробую испытать вашу программу.

Цитата:
Комментировать стиль не буду ибо бесполезно, но отмечу, что неиспользование функций для проверки допустимости вычисленного значения увеличило время переписывания втрое.

Так, а вам что помешало использовать эту функцию?

Я не понимаю, о какой функции вы говорите. У меня проверяется:
1) принадлежность вычисленного значения нужному диапазону;
2) принадлежность вычисленного значения заданному массиву простых чисел.

Как тут применить какую-то функцию, я просто не знаю. Вот и все дела.

 Профиль  
                  
 
 Re: Модифицировать программу (практическая помощь)
Сообщение30.03.2015, 17:25 
Заслуженный участник


20/08/14
11063
Россия, Москва
Именно эти две (точнее там их три) проверки и можно убрать в функцию и не дублировать код каждый раз для проверки каждого нового вычисленного X().
Я менять не стал чтобы не изменилась логика работы и чтобы программа осталась максимально похожа на Вашу исходную. На скорость работы программы это практически не влияет.

 Профиль  
                  
 
 Re: Модифицировать программу (практическая помощь)
Сообщение30.03.2015, 17:29 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов
Dmitriy40 в сообщении #998026 писал(а):
Именно эти две (точнее там их три) проверки и можно убрать в функцию и не дублировать код каждый раз для проверки каждого нового вычисленного X().

Ах, вот вы о чём. Функцию написать для проверки. Ну, мне это как-то без надобности. У меня времени много, я могу и 10 раз написать проверку, вместо того, чтобы писать функцию, а потом её вызывать.

Цитата:
Я менять не стал чтобы не изменилась логика работы и чтобы программа осталась максимально похожа на Вашу исходную. На скорость работы программы это практически не влияет.

А вот это что-то не дошло. От использования такой функции логика программы никак не может измениться. Ну никак!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 695 ]  На страницу Пред.  1 ... 6, 7, 8, 9, 10, 11, 12 ... 47  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group