англійськафранцузькаіспанська

Ad


Значок OnWorks

funcalc - онлайн у хмарі

Запустіть funcalc у постачальника безкоштовного хостингу OnWorks через Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS

Це команда funcalc, яку можна запустити в постачальнику безкоштовного хостингу OnWorks за допомогою однієї з наших численних безкоштовних робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн емулятор Windows або онлайн емулятор MAC OS

ПРОГРАМА:

ІМ'Я


funcalc - калькулятор Funtools (для двійкових таблиць)

СИНТАКСИС


funcalc [-n] [-a argstr] [-e expr] [-f файл] [-l посилання] [-p prog] [oname [стовпці]]

ВАРІАНТИ


-a argstr # аргументи користувача для передачі скомпільованій програмі
-e expr # функціональний вираз
-f файл # файл, що містить вираз funcalc
-l libs # бібліотеки для додавання до команди посилання
-n # виводить згенерований код замість компіляції та виконання
-p prog # генерувати іменовану програму, без виконання
-u # die, якщо будь-яка змінна не оголошена (не оголошувати автоматично)

ОПИС


funcalc це програма-калькулятор, яка дозволяє будувати довільні вирази,
компілюється та виконується на стовпцях таблиці Funtools (FITS двійкова таблиця або необроблена подія
файл). Потім він працює шляхом інтеграції наданих користувачем виразів у шаблонну програму C
складання та виконання програми. funcalc вирази є операторами C, хоча деякі
підтримуються важливі спрощення (наприклад, автоматичне оголошення змінних).

funcalc Вирази можна вказати трьома способами: у командному рядку за допомогою -e
[вираз] switch, у файлі за допомогою -f [файл] switch або зі стандартного входу (якщо ні -e
ні -f вказано). Звичайно файл, що містить funcalc вирази можна читати
stdin.

Кожен виклик funcalc вимагає, щоб вхідний файл таблиці Funtools був вказаний як
перший аргумент командного рядка. Вихідний файл таблиці Funtools є другим необов’язковим
аргумент. Він потрібен лише у випадку, якщо створюється вихідний файл FITS (тобто у випадках, коли
funcalc вираз друкує лише значення, вихідний файл не потрібен). Якщо вхід і вихід
Обидва файли вказані, третій необов’язковий аргумент може вказати список стовпців для
активувати (за допомогою FunColumnActivate()). Зауважте, що funcalc визначає чи ні
генерувати код для запису вихідного файлу на основі наявності чи відсутності виводу
аргумент файлу.

A funcalc Вираз виконується в кожному рядку таблиці і складається з одного або кількох C
оператори, які діють над стовпцями цього рядка (можливо, з використанням тимчасових змінних).
У виразі робиться посилання на стовпець ток рядок за допомогою структури C
синтаксис курс-[colname]>, наприклад cur->x, cur->pha тощо. Можна визначити локальні скалярні змінні
використовуючи оголошення C на самому початку виразу, інакше їх можна визначити
автоматично funcalc (бути типу подвійного). Таким чином, наприклад, заміна стовпців x
і y в таблиці можна виконати за допомогою будь-якого з наступних еквівалентів funcalc
вирази:

подвійна температура;
temp = cur->x;
cur->x = cur->y;
cur->y = temp;

або:

temp = cur->x;
cur->x = cur->y;
cur->y = temp;

Коли цей вираз виконується за допомогою такої команди, як:

funcalc -f swap.expr itest.ev otest.ev

в отриманому файлі значення стовпців x і y будуть змінені місцями.

За замовчуванням тип даних змінної для стовпця такий самий, як і тип даних
стовпець, який зберігається у файлі. Це можна змінити, додавши ":[dtype]" до першого
посилання на цю колонку. У наведеному вище прикладі, щоб змусити x і y вивести як подвійні,
вкажіть тип 'D' явно:

temp = cur->x:D;
cur->x = cur->y:D;
cur->y = temp;

Специфікатори типу даних відповідають стандартному синтаксису таблиці FITS для визначення стовпців за допомогою TFORM:

· A: символи ASCII

· B: беззнаковий 8-розрядний символ

· I: підписаний 16-розрядний int

· U: 16-бітовий int без знака (не стандартний FITS)

· J: підписаний 32-розрядний int

· V: беззнаковий 32-бітовий int (не стандартний FITS)

· E: 32-розрядний float

· D: 64-розрядний float

· X: біти (обробляються як масив символів)

Зауважте, що лише перше посилання на стовпець має містити явний тип даних
специфікатор.

Звичайно, важливо правильно обробляти тип даних стовпців. Один з
найчастіша причина помилки в funcalc програмування - це неявне використання неправильних даних
тип для стовпця у виразі. Наприклад, розрахунок:

dx = (cur->x - cur->y)/(cur->x + cur->y);

зазвичай потрібно виконувати за допомогою арифметики з плаваючою комою. У випадках, коли x і y
стовпці є цілими числами, це можна зробити, прочитавши стовпці як подвійні, використовуючи явний
специфікація типу:

dx = (cur->x:D - cur->y:D)/(cur->x + cur->y);

Крім того, це можна зробити за допомогою приведення типу C у виразі:

dx = ((подвійний)cur->x - (подвійний)cur->y)/((подвійний)cur->x + (подвійний)cur->y);

Окрім доступу до стовпців у поточному рядку, можна також посилатися на
попередній рядок, використовуючи попередній-[colname]> та до наступний рядок, використовуючи наступний-[назва стовпця]>. Зауважте, що
if попередній-[colname]> вказано в funcalc вираз, самий перший рядок не є
оброблено. Якщо наступний-[colname]> вказано в funcalc вираз, останній рядок
не обробляється. Таким чином, Попередня та наступний гарантовано завжди вказують на дійсні рядки.
Наприклад, щоб роздрукувати значення поточного стовпця x і попереднього стовпця y,
використовуйте функцію C fprintf в a funcalc вираз:

fprintf(stdout, "%d %d\n", cur->x, prev->y);

Нові стовпці можна вказати, використовуючи те саме курс-[colname]> синтаксис шляхом додавання стовпця
тип (і необов'язкові специфікатори tlmin/tlmax/binsiz), розділені двокрапками. Наприклад,
cur->avg:D визначить новий стовпець типу double. Специфікатори типу такі ж
використовувався вище для визначення нових типів даних для існуючих стовпців.

Наприклад, щоб створити та вивести новий стовпець із середнім значенням x і y
стовпців, можна визначити новий стовпець «сер.»:

cur->avg:D = (cur->x + cur->y)/2.0

Зверніть увагу, що кінцевий ';' не потрібно для однорядкових виразів.

Як і зі специфікацією типу даних FITS TFORM, можна передувати специфікатору типу даних стовпця
за допомогою числового підрахунку для визначення масиву, наприклад, "10I" означає вектор з 10 коротких ints, "2E"
означає два одинарних точних float тощо. Новий стовпець потрібно визначити лише один раз у a
funcalc вираз, після чого його можна використовувати без повторного вказування типу. Це
включає посилання на елементи масиву стовпців:

cur->avg[0]:2D = (cur->x + cur->y)/2.0;
cur->avg[1] = (cur->x - cur->y)/2.0;

Тип даних "X" (біти) розглядається як масив символів розмірності (число_число/8), тобто
16X обробляється як 2-байтовий масив символів. Кожен 8-бітовий елемент масиву доступний окремо:

cur->stat[0]:16X = 1;
cur->stat[1] = 2;

Тут створюється 16-бітовий стовпець, де MSB встановлено на 1, а LSB — на 2.

За замовчуванням усі оброблені рядки записуються у вказаний вихідний файл. Якщо ти хочеш
пропустите запис певних рядків, просто виконайте оператор C "continue" в кінці
funcalc вираз, оскільки запис рядка виконується відразу після
вираз виконується. Наприклад, щоб пропустити запис рядків, середнє значення яких дорівнює
поточне значення х:

cur->avg[0]:2D = (cur->x + cur->y)/2.0;
cur->avg[1] = (cur->x - cur->y)/2.0;
if( cur->avg[0] == cur->x )
continue;

Якщо аргумент вихідного файлу не вказано на funcalc командного рядка, вихідного файлу немає
відкрито і рядки не записані. Це корисно у виразах, які просто друкують вихідні дані
результати замість створення нового файлу:

fpv = (cur->av3:D-cur->av1:D)/(cur->av1+cur->av2:D+cur->av3);
fbv = cur->av2/(cur->av1+cur->av2+cur->av3);
fpu = ((double)cur->au3-cur->au1)/((double)cur->au1+cur->au2+cur->au3);
fbu = cur->au2/(подвійний)(cur->au1+cur->au2+cur->au3);
fprintf(stdout, "%f\t%f\t%f\t%f\n", fpv, fbv, fpu, fbu);

У наведеному вище прикладі ми використовуємо як явну специфікацію типу (для стовпців "av"), так і тип
лиття (для стовпців «au») для того, щоб усі операції виконувались подвійно
точність.

Коли вказано вихідний файл, вибрана вхідна таблиця обробляється і виводяться рядки
копіюються у вихідний файл. Зауважте, що вихідний файл можна вказати як "stdout".
щоб записати вихідні рядки в стандартний вихід. Якщо аргумент вихідного файлу є
передано, необов’язковий третій аргумент також можна передати, щоб указати, які стовпці обробляти.

У двійковій таблиці FITS іноді бажано скопіювати всі інші розширення FITS
також у вихідний файл. Це можна зробити, додавши знак «+» до назви
розширення у назві вхідного файлу. Побачити веселий для відповідного прикладу.

funcalc працює шляхом інтеграції визначеного користувачем виразу в шаблонну програму C
називається tabcalc.c. Завершена програма потім компілюється і виконується. Змінна
декларації, які починаються funcalc вирази розміщуються в розділі локального оголошення
основної програми шаблону. Всі інші рядки розміщуються в головній програмі шаблону
внутрішній цикл обробки. Інші деталі генерації програми обробляються автоматично. Для
Наприклад, специфікатори стовпців аналізуються для створення структури C для обробки рядків, тобто
перейшов до FunColumnSelect() і використовується в FunTableRowGet(). Якщо використовується невідома змінна
у виразі, що призводить до помилки компіляції, після цього повторюється збірка програми
визначення невідомої змінної типу double.

Зазвичай funcalc код виразу додається до funcalc цикл обробки ряду. Можливо
щоб додати код до інших частин програми, помістивши цей код всередині спеціальних директив
форми:

[назва директиви]
... код йде сюди ...
кінець

Директиви такі:

· в цілому додати код і оголошення в глобальний простір перед основною процедурою.

· місцевий додати оголошення (і код) відразу після локальних декларацій у main

· перед тим додати код безпосередньо перед входом в цикл обробки основного рядка

· після додати код відразу після виходу з циклу обробки основного рядка

Таким чином, наступне funcalc вираз оголошує глобальні змінні та створює підпрограму
виклики безпосередньо перед і відразу після основного циклу обробки:

в цілому
подвійний v1, v2;
подвійний init(void);
подвійна обробка (подвійна v);
кінець
перед тим
v1 = init();
кінець
... обробити рядки з обчисленнями за допомогою v1 ...
після
v2 = закінчити (v1);
if( v2 < 0.0 ){
fprintf(stderr, "помилка обробки %g -> %g\n", v1, v2);
вихід(1);
}
кінець

Рутини, такі як у цьому() та закінчити () вище передаються створеній програмі для зв'язування
використання -l [посилання директиви ...] перемикач. Рядок, визначений цим перемикачем, буде
додано до рядка посилань, що використовується для побудови програми (до бібліотеки funtools). Для
наприклад, якщо припустити, що у цьому() та закінчити () знаходяться в бібліотеці libmysubs.a в
/opt/special/lib каталог, використовуйте:

funcalc -l "-L/opt/special/lib -lmysubs" ...

Аргументи користувача можна передати скомпільованій програмі funcalc за допомогою рядкового аргументу
перемикач "-a". Рядок повинен містити всі аргументи користувача. Наприклад, пройти
цілі числа 1 і 2, використовуйте:

funcalc -a "1 2" ...

Аргументи зберігаються у внутрішньому масиві та доступні як рядки через ARGV(n)
макрос. Наприклад, розглянемо такий вираз:

місцевий
int pmin, pmax;
кінець

перед тим
pmin=atoi(ARGV(0));
pmax=atoi(ARGV(1));
кінець

if( (cur->pha >= pmin) && (cur->pha <= pmax) )
fprintf(stderr, "%d %d %d\n", cur->x, cur->y, cur->pha);

Цей вираз виведе значення x, y і pha для всіх рядків, у яких є значення pha
між двома введеними користувачами значеннями:

funcalc -a '1 12' -f foo snr.ev'[cir 512 512 .1]'
512 512 6
512 512 8
512 512 5
512 512 5
512 512 8

funcalc -a '5 6' -f foo snr.ev'[cir 512 512 .1]'
512 512 6
512 512 5
512 512 5

Зауважте, що користувач несе відповідальність за забезпечення правильної кількості аргументів
проходять. Макрос ARGV(n) повертає значення NULL, якщо запитуваний аргумент виходить за межі обмежень
фактичної кількості аргументів, що зазвичай призводить до SEGV, якщо обробляється наосліп. Перевіряти
кількість аргументів, використовуйте макрос ARGC:

місцевий
long int seed=1;
подвійна межа=0.8;
кінець

перед тим
if( ARGC >= 1) seed = atol(ARGV(0));
if( ARGC >= 2 ) межа = atof(ARGV(1));
srand48 (насіння);
кінець

if ( drand48() > limit) продовжувати;

Макрос WRITE_ROW розгортається до FunTableRowPut() виклик, який записує поточний рядок. Це
можна використовувати для запису рядка більше одного разу. Крім того, макрос NROW розгортається до
номер рядка, який зараз обробляється. Використання цих двох макросів показано нижче
приклад:

if( cur->pha:I == cur->pi:I ) продовжувати;
a = cur->pha;
cur->pha = cur->pi;
cur->pi = a;
cur->AVG:E = (cur->pha+cur->pi)/2.0;
cur->NR:I = NROW;
if( NROW < 10 ) WRITE_ROW;

Якщо -p [програма] вказано перемикач, вираз не виконується. Швидше,
згенерований виконуваний файл зберігається з вказаною назвою програми для подальшого використання.

Якщо -n вказано перемикач, вираз не виконується. Швидше, згенерований код
записується в стандартний вихід. Це особливо корисно, якщо ви хочете створити каркасний файл
і додайте свій власний код, або якщо вам потрібно перевірити помилки компіляції. Зверніть увагу, що коментар
на початку виводу дає команду компілятора, необхідну для побудови програми на цьому
платформа. (Команда може змінюватися від платформи до платформи через використання
різні бібліотеки, перемикачі компілятора тощо)

Як згадувалося раніше, funcalc автоматично оголошує скалярну змінну (як a
double), якщо ця змінна була використана, але не оголошена. Цей об’єкт реалізований
за допомогою сценарію sed з назвою funcalc.sed, який обробляє вихідні дані компілятора для визначення an
помилка неоголошеної змінної. Цей сценарій був засіяний відповідною помилкою
інформація для gcc та cc на платформах Solaris, DecAlpha та SGI. Якщо ви знайдете це
автоматичне оголошення скалярів не працює на вашій платформі, перевірте цей скрипт sed;
може знадобитися додати або відредагувати деякі повідомлення про помилки, які він відчуває.

З метою збереження лексичного аналізу funcalc вирази (розумно) прості, ми обрали
прийняти деякі обмеження щодо точності розміщення коментарів, пробілів та нових рядків C
у створеній програмі. Зокрема, оголошені коментарі, пов'язані з локальними змінними
на початку виразу (тобто не в a місцевий...кінець блоку) зазвичай закінчується
у внутрішньому циклі, а не з локальними оголошеннями:

/* цей коментар опиниться не в тому місці (тобто у внутрішньому циклі) */
подвійний а; /* також не в тому місці */
/* це буде в потрібному місці (внутрішній цикл) */
if( cur->x:D == cur->y:D ) продовжувати; /* також у потрібному місці */
a = cur->x;
cur->x = cur->y;
cur->y = a;
cur->avg:E = (cur->x+cur->y)/2.0;

Аналогічно, пробіли та нові рядки іноді опускаються або додаються в, здавалося б, довільному
манера. Звичайно, жоден із цих стилістичних недоліків не впливає на правильність
згенерований код.

Тому що funcalc має проаналізувати вираз користувача, використовуючи файли даних, передані на
командному рядку вхідний(і) файл(и) потрібно відкривати та читати двічі: один раз під час програми
генерації та один раз під час виконання. Як наслідок, неможливо використовувати stdin для
вхідний файл: funcalc не можна використовувати як фільтр. Ми розглянемо зняття цього обмеження
пізніше.

Поряд із коментарями C, funcalc вирази можуть мати однорядкові внутрішні коментарі, які є
не передається створеній програмі C. Ці внутрішні коментарі починаються з #
символ і продовжити до нового рядка:

подвійний а; # це не передається до згенерованого файлу C
# не це
a = cur->x;
cur->x = cur->y;
cur->y = a;
/* цей коментар передається до файлу C */
cur->avg:E = (cur->x+cur->y)/2.0;

Як згадувалося раніше, вхідні стовпці зазвичай ідентифікуються за тим, як вони використовуються в них
внутрішній цикл подій. Існують рідкісні випадки, коли ви можете прочитати колонку і
обробити його поза основним циклом. Наприклад, qsort може використовувати стовпець у своєму сортуванні
процедура порівняння, яка не обробляється всередині внутрішнього циклу (і, отже, ні
неявно вказано як стовпець для читання). Щоб переконатися, що така колонка прочитана
цикл подій, використовуйте явний ключове слово. Аргументи цього ключового слова вказують стовпці, що
повинні бути прочитані в структурі вхідного запису, навіть якщо вони не згадуються в
внутрішня петля. Наприклад:

явний pi pha

забезпечить читання стовпців pi і pha для кожного рядка, навіть якщо це не так
обробляється у внутрішньому циклі подій. The явний заяву можна розмістити де завгодно.

Нарешті, зауважте, що funcalc наразі працює над виразами, що включають двійкові таблиці FITS і
необроблені файли подій. Ми розглянемо можливість додавання підтримки виразів зображень пізніше,
якщо є попит на таку підтримку з боку громади.

Використовуйте funcalc онлайн за допомогою служб onworks.net


Безкоштовні сервери та робочі станції

Завантажте програми для Windows і Linux

  • 1
    ЛАГІТ
    ЛАГІТ
    SWIG – це інструмент розробки програмного забезпечення
    що з'єднує програми, написані на C і
    C++ з різноманітними високорівневими
    мови програмування. SWIG використовується з
    інший...
    Завантажити SWIG
  • 2
    Тема WooCommerce Nextjs React
    Тема WooCommerce Nextjs React
    Тема React WooCommerce, створена за допомогою
    Next JS, Webpack, Babel, Node і
    Express, використовуючи GraphQL і Apollo
    Клієнт. Магазин WooCommerce в React(
    містить: Продукти...
    Завантажте тему WooCommerce Nextjs React
  • 3
    archlabs_repo
    archlabs_repo
    Сховище пакетів для ArchLabs Це
    додаток, який також можна отримати
    від
    https://sourceforge.net/projects/archlabs-repo/.
    Його розміщено в OnWorks у...
    Завантажити archlabs_repo
  • 4
    Проект Зефір
    Проект Зефір
    Проект Zephyr – це нове покоління
    операційна система реального часу (RTOS).
    підтримує декілька апаратних засобів
    архітектури. Він заснований на а
    ядро малої площі...
    Завантажити Zephyr Project
  • 5
    SCONS
    SCONS
    SCons - це інструмент для створення програмного забезпечення
    що є кращою альтернативою
    класичний інструмент "Make" для створення
    ми всі знаємо і любимо. SCons є
    впроваджено...
    Завантажити SCons
  • 6
    PSeInt
    PSeInt
    PSeInt - це інтерпретатор псевдокоду для
    іспаномовні студенти програмування.
    Його головне призначення – бути інструментом для
    навчання та розуміння основ
    концепція...
    Завантажити PSeInt
  • Детальніше »

Команди Linux

  • 1
    7z
    7z
    7z - файловий архіватор з найвищими
    ступінь стиснення...
    Запустіть 7z
  • 2
    7за
    7за
    7za - файловий архіватор з найвищими
    ступінь стиснення...
    Виконати 7za
  • 3
    плазуни
    плазуни
    CREEPY - інформація про геолокацію
    агрегатор ОПИС: creepy is an
    додаток, що дозволяє збирати
    інформація про геолокацію
    користувачі з...
    Біг моторошно
  • 4
    cricket-compile
    cricket-compile
    cricket - програма для керування
    збір і відображення часових рядів
    дані ...
    Запустіть cricket-compile
  • 5
    g-wrap-config
    g-wrap-config
    g-wrap-config - скрипт для отримання
    інформація про встановлену версію
    G-Wrap ...
    Запустіть g-wrap-config
  • 6
    g.accessgrass
    g.accessgrass
    g.access – контролює доступ до
    поточний набір карт для інших користувачів на
    система. Якщо опції немає, друкує
    поточний стан. КЛЮЧОВІ СЛОВА: загальне, карта
    управління, п...
    Запустіть g.accessgrass
  • Детальніше »

Ad