2014 dxdy logo

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

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




 
 Как сделать циклический прогон по функции в PARI\GP ?
Сообщение15.08.2021, 19:11 
Решил не сваливать все в одну тему, хотя отдельного раздела по PARI\GP здесь как я понял нет.

Есть задача проверить через функцию FUNC(n), все числа x от 1 до 100, для n=x^2+2. Функция возвращает 0 или 1. Мне нужно знать для какого именного значения x, она вернет 1. То есть вывести на печать те значения x при котором FUNC(n) вернет 1.

Саму FUNC(n) я здесь описывать не буду, она отлично работает для переданного ей значения n. Но мне нужно сгенерировать сотню значений по формуле n=x^2+2 и прогнать ее через функцию FUNC(n). Как это можно сделать?

 
 
 
 Re: Как сделать циклический прогон по функции в PARI\GP ?
Сообщение15.08.2021, 21:04 
uzlprog в сообщении #1528785 писал(а):
Есть задача проверить через функцию FUNC(n), все числа x от 1 до 100, для n=x^2+2. Функция возвращает 0 или 1. Мне нужно знать для какого именного значения x, она вернет 1. То есть вывести на печать те значения x при котором FUNC(n) вернет 1.
Банально же:
Код:
for(x=1,100, if(FUNC(x^2+2)==1, print("x=", x); ); );
for(x=1,100, n=x^2+2; if(FUNC(n)==1, print("x=", x); ); );\\Другой вариант, через промежуточную переменную.

Можно и не только по x=1...100, а по любому списку x:
Код:
vx=[1,3,5,7,11,17,199]; for(i=1,#vx, if(FUNC(vx[i]^2+2)==1, print("x=", vx[i]); ); );
Вектор значений vx можно задать и по любому другому.

Вы бы таки прочитали всю тему «интерактивный курс: введение в программирование на PARI/GP», там много простого и полезного.

 
 
 
 Re: Как сделать циклический прогон по функции в PARI\GP ?
Сообщение19.08.2021, 21:51 
Dmitriy40, спасибо!

Я примерно сам уже догадался, но видимо запутался в запятых, точках и скобочках. Короче, ни как не привыкну к синтаксису :facepalm:

 
 
 
 Re: Как сделать циклический прогон по функции в PARI\GP ?
Сообщение19.08.2021, 23:19 
Ну точек там нет (кроме диапазона индексов в векторах), скобочки всегда парные, а вот с запятыми и ";" проблема, факт. Хотя тут они и более логичные чем в С, что впрочем как раз и создаёт лишние проблемы знающим тот синтаксис.
Пожалуй поясню коротко.
Запятые почти всегда (навскидку не помню исключений) разделяют параметры между собой. Например индексы в массивах, параметры в функциях. В отличие от С тело того же цикла или условного оператора является одним из параметров (обычно последним) и подставляется до закрывающей скобки и отделяется тоже запятой.
Точка с запятой используется для объединения двух (и более) операторов в один блок, примерно как {...} в С, только здесь она ставится между объединяемыми операторами. Есть и исключение: точка с запятой в конце строки подавляет вывод в консоль результата вычислений.
Фигурные скобки объединяют несколько строк внутри себя как бы в одну большую и длинную строку перед выполнением команд из неё. Удобно для длинных циклов, условий. Особенно из текстовых файлов.

Рекомендую при любых сомнениях набирать ? for для получения короткой справки по любой команде (например for). Кстати удобно пользоваться двойным tab для получения списка функций с таким началом (вариант автодополнения по tab). Смысл функций не всегда ясен, но хотя бы формат вызова виден. А подробнее смотреть в Users' Guide to PARI/GP с родного сайта. Для беглого обзора имеющихся функций удобен Quick Reference Cards (Basic GP) оттуда же. Или онлайн всё есть.

 
 
 
 Re: Как сделать циклический прогон по функции в PARI\GP ?
Сообщение20.08.2021, 09:04 
Dmitriy40, огромное спасибо за краткое пояснение!!!

Цитата:
В отличие от С тело того же цикла или условного оператора является одним из параметров (обычно последним) и подставляется до закрывающей скобки и отделяется тоже запятой.


Вот это очень напрягает. Честно говоря... Сразу начинаю путаться, но это дело привычки. :wink:

 
 
 [ Сообщений: 5 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group