Форум программистов, компьютерный форум, киберфорум
Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
8 / 8 / 2
Регистрация: 24.11.2020
Сообщений: 80

Перевод полутора десятков строк с Питона на Free Basic

11.02.2023, 00:26. Показов 8483. Ответов 50
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Хочу в бейсике повторить программу написанную на питоне.
Не уверен, что стоит погружаться в изучение последнего, ради пятнадцати строк.
Приведу ниже всю программу и начну с малого ... надеюсь постепенно, с вашей помощью осилить эту непростую задачу.
Заранее спасибо.

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

Python
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
sk = 0x28E14A7B6A307F426A94F8114701E7C8E77AE7F9A47E2C2035DB29A20632172D
    # base point (generator)
G = (0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798,
    0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8)
 
    # field prime
P = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
 
    # order
N = (1 << 256) - 0x14551231950B75FC4402DA1732FC9BEBF
 
    # операция сложения на эллиптической кривой
    # обратите внимание, что координаты должны быть заданы по модулю P и что деление равно
    # выполняется путем вычисления мультипликативного обратного, что может быть сделано с
    # x ^-1 = x ^ (P-2) mod P с использованием малой теоремы Ферма (степенная функция
    # python может сделать это эффективно даже для очень большого P)
 
def add(p, q):
        px, py = p
        qx, qy = q
        if p == q:
            lam = (3 * px * px) * pow(2 * py, P - 2, P)
        else:
            lam = (qy - py) * pow(qx - px, P - 2, P)
        rx = lam**2 - px - qx
        ry = lam * (px - rx) - py
        return rx % P, ry % P
 
    # вычислить G * sk с повторным сложением
    # используя двоичное представление sk, это можно сделать в 256
    # итерации (удвоение и добавление)
    
ret = None
 
for i in range(256):
        if sk & (1 << i):
            if ret is None:
                ret = G
            else:
                ret = add(ret, G)
        G = add(G, G)
 
print (ret)
А вот цикл, с которым хочется разобраться в первую очередь:

Python
1
2
3
4
5
6
7
for i in range(256):
        if sk & (1 << i):
            if ret is None:
                ret = G
            else:
                ret = add(ret, G)
        G = add(G, G)
Насколько мне подсказывают практически утерянные знания бейсика из школьной программы, тут написано следующее:

- создаётся цикл на 256 итераций, но не понимаю, почему нет закрывающего оператора NEXT, как и END IF в ниже следующих условиях
- далее условие, если sk &, красным непонятное, что делает этот оператор? 1 << i это как я понял сдвиг влево на i раз, фактически умножение i раз на 2. Т.е. я не понимаю в чем заключается условие.
- далее, как я понял, если в первой итерации, то ret не определён, присваиваем ему G
- после else идем в процедуру, которая тоже вызывает множество вопросов
- далее все ясно

Главный вопрос в этом кусочке кода, тут - if sk & (1 << i), это что, логическое И с 1 << i, не понимаю, какой смысл условия .....
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.02.2023, 00:26
Ответы с готовыми решениями:

Перевод решенной задачи с Free Basic на Turbo Pascal
Доброго времени суток! Есть решенная задача, но вся проблема в том что задача эта решена на языке Basic. Попробовал сам переписать с...

Библиотека для Free Basic, аналог функций Pure Basic
Просматривая форумы FreeBasic'a наткнулся на библиотеку, которая ставит своей целью дублирование функций языка Pure Basic, дублирование...

Перевод из питона
Помогите перевести эту фигню из питона на паскаль, с похожим функционалом. Заранее благодарен. f = open(&quot;testA.txt&quot;,...

50
16 / 16 / 0
Регистрация: 10.04.2022
Сообщений: 16
16.10.2023, 00:25
Студворк — интернет-сервис помощи студентам
И как в бейсике к ней путь прописывать ?
Это .bi файл... Путь к нему надо прописывать в исходнике.
Или, тупо, поместить свой .bas файл в директорию (папку), где лежит big_integer.bi
...и написать в начале своего файла:

QBasic/QuickBASIC
1
#include "big_integer.bi"
Инструкции по использованию на английском, в файле Readme.md
Вложения
Тип файла: zip big_integer-master.zip (24.3 Кб, 6 просмотров)
1
8 / 8 / 2
Регистрация: 24.11.2020
Сообщений: 80
16.10.2023, 09:59  [ТС]
Цитата Сообщение от Old_Demon Посмотреть сообщение
Это .bi файл... Путь к нему надо прописывать в исходнике.
Или, тупо, поместить свой .bas файл в директорию (папку), где лежит big_integer.bi
...и написать в начале своего файла:
Спасибо, я уже допёр. Извиняюсь, что здесь не отписался об этом.
Очень понравилась библиотека, описание интуитивно понятное.
Еще раз спасибо.
Вернулся к так и не доделанному переводу с Питона =) Кому-то это 20 минут, а я уже год =))))))
Постараюсь успеть до 2024-го.

Добавлено через 48 секунд
Цитата Сообщение от Old_Demon Посмотреть сообщение
Это .bi файл... Путь к нему надо прописывать в исходнике.
Или, тупо, поместить свой .bas файл в директорию (папку), где лежит big_integer.bi
...и написать в начале своего файла:

QBasic/QuickBASIC
1
#include "big_integer.bi"
Инструкции по использованию на английском, в файле Readme.md
Спасибо, кое как нашел =) Вроде работает корректно библиотека.
1
8 / 8 / 2
Регистрация: 24.11.2020
Сообщений: 80
30.03.2024, 20:18  [ТС]
Снова здравствуйте.
Есть в программе на питоне из первого поста такая строчка:
Python
1
lam = (3 * px * px) * pow(2 * py, P - 2, P)
Почитал про функцию POW, она возводит первый аргумент в степень второго аргумента.
Бейсик не может возвести 0x483ada7726a3c4655da4fbfc0e1108a8fd17b4 48a68554199c47d08ffb10d4b8 в степень 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFFFFFC2F.
Я попробовал возвести в степень 25666, комп задумался и завис, пришлось завершать задачу.
Или я что-то не понял в работе этой функции ?
Как питон возводит огромное число в такую огромную степень ?

Добавлено через 15 минут
Попробовал в питоне возвести в огромную степень, тоже не работает.
Значит в функции POW третий аргумент очень важен и результат короткий получается с третьим аргументом.

Добавлено через 58 секунд
Как в Фрибейсике реализовать это возведение в степень с модулем ?
0
8 / 8 / 2
Регистрация: 24.11.2020
Сообщений: 80
02.04.2024, 09:36  [ТС]
Похоже для бейсика это неразрешимая задача ((((
0
Эксперт по электронике
7225 / 3404 / 347
Регистрация: 28.10.2011
Сообщений: 13,383
Записей в блоге: 7
02.04.2024, 12:28
putman, это не так. Напишите на FB функцию вычисляющую степень больших чисел.
1
8 / 8 / 2
Регистрация: 24.11.2020
Сообщений: 80
02.04.2024, 12:35  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
putman, это не так. Напишите на FB функцию вычисляющую степень больших чисел.
Надо найти алгоритм, немного поискал и не найдя его вернулся к работе. Начальство криво посматривает когда вместо работы бейсиком занимаюсь =)))
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
03.04.2024, 07:13
Цитата Сообщение от putman Посмотреть сообщение
Как в Фрибейсике реализовать это возведение в степень с модулем ?
Возведите в степень и возьмите остаток от деления:
PureBasic
1
Dim result As Integer = (x ^ y) Mod z
0
8 / 8 / 2
Регистрация: 24.11.2020
Сообщений: 80
03.04.2024, 09:28  [ТС]
Цитата Сообщение от Замабувараев Посмотреть сообщение
Возведите в степень и возьмите остаток от деления:
PureBasicВыделить код
1
Dim result As Integer = (x ^ y) Mod z
Это число - 0x483ada7726a3c4655da4fbfc0e1108a8fd17b4 48a68554199c47d08ffb10d4b8
, возвести в эту степень - 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFFFFFC2F
не получается, вычисления зависают.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
03.04.2024, 09:34
Цитата Сообщение от putman Посмотреть сообщение
не получается, вычисления зависают.
Берите компьютер побыстрее.
0
8 / 8 / 2
Регистрация: 24.11.2020
Сообщений: 80
03.04.2024, 09:35  [ТС]
Цитата Сообщение от Замабувараев Посмотреть сообщение
Берите компьютер побыстрее.
Понял, спасибо.
0
0 / 0 / 0
Регистрация: 24.05.2025
Сообщений: 1
27.05.2025, 12:52
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
На Fortran!
На ассемблер!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.05.2025, 12:52

Перевод с питона в с++
Доброго времени суток,помогите перевести код из питона в с++ for i in (i for i in range(1, 1001) if i % sum(map(int, str(i))) == 0): ...

Перевод из Питона на С++
S = input(&quot;Bвeдитe строку:\n&quot;) s1 = &quot;&quot; for i in range(0,len(s)): if s == &quot;а&quot;: s1 = s1+&quot;б&quot; elif s == &quot;б&quot;: s1 = s1+&quot;а&quot; elif s ==...

Перевод с питона на С++
a= s= f=float (input(&quot;Введите число: &quot;)) l=1 r=8 z=0 x=int(input('Введите число: ')) print (f) while l&lt;r: ...

Перевод из Питона на С++

Перевод из Питона на С++
Постройте структуру, которая работает с базой данных в виде двоичного файла. Ваша СУБД должна иметь следующие возможности: • Просмотр...


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

Или воспользуйтесь поиском по форуму:
51
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru