Angielskifrancuskihiszpański

Ad


Ulubiona usługa OnWorks

funcalc — online w chmurze

Uruchom funcalc w darmowym dostawcy hostingu OnWorks przez Ubuntu Online, Fedora Online, emulator online Windows lub emulator online MAC OS

Jest to polecenie funcalc, które można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z wielu naszych bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online MAC OS

PROGRAM:

IMIĘ


funcalc - Kalkulator Funtools (dla tabel binarnych)

STRESZCZENIE


funkalc [-n] [-a argument] [-e wyrażenie] [-f plik] [-l dowiązanie] [-p prog] [nazwa [kolumny]]

OPCJE


-a argstr # argumenty użytkownika do przekazania do skompilowanego programu
-e wyrażenie # funcalc wyrażenie
-f plik # plik zawierający wyrażenie funcalc
-l libs # libs do dodania do komendy link
-n # wyświetla wygenerowany kod zamiast kompilowania i wykonywania
-p prog # generuje nazwany program, bez wykonywania
-u # umiera, jeśli jakakolwiek zmienna jest niezadeklarowana (nie deklaruj automatycznie)

OPIS


funkalc to program kalkulatora, który umożliwia konstruowanie dowolnych wyrażeń,
skompilowane i wykonane na kolumnach w tabeli Funtools (tabela binarna FITS lub surowe zdarzenie
plik). Działa więc poprzez integrację wyrażeń dostarczonych przez użytkownika z szablonem programu C
skompilowanie i wykonanie programu. funkalc wyrażenia są instrukcjami C, chociaż niektóre
obsługiwane są ważne uproszczenia (takie jak automatyczne deklarowanie zmiennych).

funkalc wyrażenia można określić na trzy sposoby: w wierszu poleceń za pomocą -e
[wyrażenie] switch, w pliku używającym -f [plik] switch lub ze stdin (jeśli nie -e
ani -f jest specyficzne). Oczywiście plik zawierający funkalc wyrażenia można odczytać
std.

Każde wywołanie funkalc wymaga określenia wejściowego pliku tabeli Funtools jako
pierwszy argument wiersza poleceń. Wyjściowy plik tabeli Funtools jest drugim opcjonalnym
argument. Jest potrzebny tylko wtedy, gdy tworzony jest wyjściowy plik FITS (tj
dotychczasowy funkalc wyrażenie wyświetla tylko wartości, nie jest potrzebny plik wyjściowy). Jeśli wejście i wyjście
file są określone, trzeci opcjonalny argument może określić listę kolumn
aktywować (za pomocą ZabawaKolumnaAktywuj()). Zauważ, że funkalc decyduje o tym, czy nie
wygenerować kod do zapisu pliku wyjściowego na podstawie obecności lub braku danych wyjściowych
argument pliku.

A funkalc wyrażenie jest wykonywane w każdym wierszu tabeli i składa się z jednego lub więcej C
instrukcje, które działają na kolumnach tego wiersza (ewentualnie przy użyciu zmiennych tymczasowych).
W wyrażeniu następuje odwołanie do kolumny elementu aktualne wiersz przy użyciu struktury C
składnia kundel-[nazwa_kolumny]>, np. cur->x, cur->pha itp. Można zdefiniować lokalne zmienne skalarne
używając deklaracji C na samym początku wyrażenia, w przeciwnym razie można je zdefiniować
automatycznie przez funkalc (być typu double). Tak więc na przykład zamiana kolumn x
i y w tabeli można wykonać przy użyciu jednego z następujących odpowiedników funkalc
wyrażenia:

podwójna temperatura;
temp = bieżąca->x;
bież->x = bież->y;
cur->y = temp;

lub:

temp = bieżąca->x;
bież->x = bież->y;
cur->y = temp;

Gdy to wyrażenie jest wykonywane za pomocą polecenia takiego jak:

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

wynikowy plik będzie miał zamienione wartości kolumn x i y.

Domyślnie typ danych zmiennej dla kolumny jest taki sam jak typ danych dla kolumny
kolumna zapisana w pliku. Można to zmienić, dodając „:[dtype]” do pierwszego
odniesienie do tej kolumny. W powyższym przykładzie, aby wymusić wyświetlanie x i y jako podwójnych,
wyraźnie określić typ „D”:

temp = bieżąca->x:D;
kurs->x = kurs->y:D;
cur->y = temp;

Specyfikatory typu danych są zgodne ze standardową składnią tabeli FITS do definiowania kolumn przy użyciu TFORM:

· O: Znaki ASCII

· B: 8-bitowy znak bez znaku

· I: podpisane 16-bitowe int

· U: unsigned 16-bit int (nie standardowe PASUJE)

· J: podpisane 32-bitowe int

· V: unsigned 32-bit int (nie standardowe FITS)

· E: 32-bitowy zmiennoprzecinkowy

· D: 64-bitowy zmiennoprzecinkowy

· X: bity (traktowane jako tablica znaków)

Należy zauważyć, że tylko pierwsze odwołanie do kolumny powinno zawierać jawny typ danych
specyficzny.

Oczywiście ważne jest, aby poprawnie obsługiwać typ danych w kolumnach. Jeden z
najczęstsza przyczyna błędów w funkalc programowanie polega na niejawnym wykorzystaniu błędnych danych
wpisz dla kolumny w wyrażeniu. Na przykład obliczenie:

dx = (bież->x - bież->y)/(bież->x + bież->y);

zwykle należy wykonać przy użyciu arytmetyki zmiennoprzecinkowej. W przypadkach, gdy x i y
kolumny są liczbami całkowitymi, można to zrobić, czytając kolumny jako podwójne, używając jawnego
specyfikacja typu:

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

Alternatywnie można to zrobić za pomocą rzutowania typu C w wyrażeniu:

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

Oprócz dostępu do kolumn w bieżącym wierszu można również odnieść się do pliku
poprzedni wiersz za pomocą poprzedni-[nazwa_kolumny]> i do Następny wiersz za pomocą Następny-[nazwa kolumny]>. Zauważ to
if poprzedni-[nazwa_kolumny]> jest określony w pliku funkalc wyrażenie, pierwszy wiersz nie jest
obrobiony. Jeśli Następny-[nazwa_kolumny]> jest określony w pliku funkalc wyrażenie, ostatni wiersz
nie jest przetwarzany. W ten sposób, prev i Następny są gwarantowane, że zawsze wskazują prawidłowe wiersze.
Na przykład, aby wydrukować wartości z bieżącej kolumny x i poprzedniej kolumny y,
użyj funkcji C fprintf w a funkalc wyrażenie:

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

Nowe kolumny można określić przy użyciu tego samego kundel-[nazwa_kolumny]> przez dołączenie kolumny
type (oraz opcjonalne specyfikatory tlmin/tlmax/binsiz), oddzielone dwukropkami. Na przykład,
cur->avg:D zdefiniuje nową kolumnę typu double. Specyfikatory typu są takie same
użyte powyżej do określenia nowych typów danych dla istniejących kolumn.

Na przykład, aby utworzyć i wyprowadzić nową kolumnę, która jest średnią wartością x i y
kolumn, można zdefiniować nową kolumnę „avg”:

bieżąca->średnia:D = (bieżąca->x + bieżąca->y)/2.0

Zauważ, że końcowe „;” nie jest wymagane dla wyrażeń jednowierszowych.

Podobnie jak w przypadku specyfikacji typu danych FITS TFORM, specyfikator typu danych kolumny może być poprzedzony
przez liczbę numeryczną w celu zdefiniowania tablicy, np. „10I” oznacza wektor o długości 10 krótkich intów, „2E”
oznacza dwa zmiennoprzecinkowe pojedynczej precyzji itp. Nowa kolumna musi być zdefiniowana tylko raz w a
funkalc wyrażenie, po czym można go użyć bez ponownego określania typu. Ten
zawiera odwołanie do elementów tablicy kolumn:

bieżąca->średnia[0]:2D = (bieżąca->x + bieżąca->y)/2.0;
bieżąca->śr[1] = (bieżąca->x - bieżąca->y)/2.0;

Typ danych „X” (bity) jest traktowany jako tablica znaków o wymiarze (numeric_count/8), tj.
16X jest przetwarzany jako 2-bajtowa tablica znaków. Każdy 8-bitowy element tablicy jest dostępny osobno:

bieżący->stat[0]:16X = 1;
bieżąca->stat[1] = 2;

Tutaj tworzona jest 16-bitowa kolumna z MSB ustawionym na 1 i LSB ustawionym na 2.

Domyślnie wszystkie przetworzone wiersze są zapisywane do określonego pliku wyjściowego. Jeśli chcesz
pomiń pisanie niektórych wierszy, po prostu wykonaj instrukcję C „continue” na końcu pliku
funkalc wyrażenie, ponieważ zapis wiersza jest wykonywany natychmiast po
wykonywane jest wyrażenie. Na przykład, aby pominąć pisanie wierszy, których średnia jest taka sama jak
aktualna wartość x:

bieżąca->średnia[0]:2D = (bieżąca->x + bieżąca->y)/2.0;
bieżąca->śr[1] = (bieżąca->x - bieżąca->y)/2.0;
if( bieżąca->średnia[0] == bieżąca->x )
kontyntynuj;

Jeśli nie określono żadnego argumentu pliku wyjściowego w pliku funkalc linii poleceń, nie ma pliku wyjściowego
otwarte i nie są zapisywane żadne wiersze. Jest to przydatne w wyrażeniach, które po prostu wyświetlają dane wyjściowe
Results zamiast generować nowy plik:

fpv = (cur->av3:D-cur->av1:D)/(cur->av1+cur->av2:D+cur->av3);
fbv = bieżąca->średnia2/(bieżąca->średnia1+bieżąca->średnia2+bieżąca->średnia3);
fpu = ((double)cur->au3-cur->au1)/((double)cur->au1+cur->au2+cur->au3);
fbu = cur->au2/(double)(cur->au1+cur->au2+cur->au3);
fprintf(stdout, "%f\t%f\t%f\t%f\n", fpv, fbv, fpu, fbu);

W powyższym przykładzie używamy zarówno jawnej specyfikacji typu (dla kolumn „av”), jak i typu
rzutowanie (dla kolumn „au”), aby zapewnić, że wszystkie operacje są wykonywane podwójnie
precyzja.

Po określeniu pliku wyjściowego wybrana tabela wejściowa jest przetwarzana i wyprowadzane są wiersze
są kopiowane do pliku wyjściowego. Zauważ, że plik wyjściowy można określić jako „stdout” w
w celu zapisania wierszy wyjściowych na standardowe wyjście. Jeśli argumentem pliku wyjściowego jest
przekazany, można również przekazać opcjonalny trzeci argument, aby określić, które kolumny mają zostać przetworzone.

W tabeli binarnej FITS czasami pożądane jest skopiowanie wszystkich innych rozszerzeń FITS
również do pliku wyjściowego. Można to zrobić, dodając znak „+” do nazwy pliku
rozszerzenie w nazwie pliku wejściowego. Widzieć zabawny pokrewny przykład.

funkalc działa poprzez integrację wyrażenia określonego przez użytkownika z szablonem programu C
o nazwie tabcalc.c. Gotowy program jest następnie kompilowany i wykonywany. Zmienny
deklaracje, które rozpoczynają funkalc wyrażenie są umieszczane w lokalnej sekcji deklaracji
szablonu programu głównego. Wszystkie pozostałe wiersze są umieszczane w programie głównym szablonu
wewnętrzna pętla przetwarzania. Inne szczegóły generowania programu są obsługiwane automatycznie. Dla
na przykład specyfikatory kolumn są analizowane w celu zbudowania struktury C do przetwarzania wierszy, czyli
przekazany do ZabawaKolumnaWybierz() i używane w FunTableRowGet(). Jeśli używana jest nieznana zmienna
w wyrażeniu, co powoduje błąd kompilacji, kompilacja programu jest ponawiana
zdefiniowanie nieznanej zmiennej jako typu double.

Zazwyczaj funkalc dodawany jest kod wyrażenia funkalc pętla przetwarzania wierszy. To jest możliwe
dodać kod do innych części programu poprzez umieszczenie tego kodu w specjalnych dyrektywach
postaci:

[nazwa dyrektywy]
... kod idzie tutaj ...
zakończenia

Dyrektywy to:

· światowy dodaj kod i deklaracje w przestrzeni globalnej, przed główną procedurą.

· miejscowy dodaj deklaracje (i kod) tuż po lokalnych deklaracjach w main

· zanim dodaj kod tuż przed wejściem do pętli przetwarzania głównego wiersza

· po dodaj kod tuż po wyjściu z pętli przetwarzania głównego wiersza

W związku z tym następujące funkalc wyrażenie zadeklaruje zmienne globalne i wykona podprogram
wywołania tuż przed i tuż po głównej pętli przetwarzania:

światowy
podwójne v1, v2;
podwójna inicjacja (pusta);
podwójne wykończenie (podwójne v);
zakończenia
zanim
v1 = początek();
zakończenia
... rzędy procesów, z obliczeniami przy użyciu v1 ...
po
v2 = koniec (v1);
jeśli( v2 < 0.0 ){
fprintf(stderr, "przetwarzanie nie powiodło się %g -> %g\n", v1, v2);
wyjście(1);
}
zakończenia

Rutyny takie jak w tym() i koniec() powyżej są przekazywane do wygenerowanego programu w celu połączenia
używając -l [połączyć Dyrektywy ...] przełącznik. Ciąg określony przez ten przełącznik będzie
dodany do linii linków użytych do zbudowania programu (przed biblioteką funtools). Dla
przykład, zakładając, że w tym() i koniec() znajdują się w bibliotece libmysubs.a w
/opt/special/lib katalog, użyj:

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

Argumenty użytkownika mogą być przekazywane do skompilowanego programu funcalc za pomocą argumentu łańcuchowego
"-przełącznik. Ciąg powinien zawierać wszystkie argumenty użytkownika. Na przykład przejść
liczby całkowite 1 i 2, użyj:

funcalc -a "1 2"...

Argumenty są przechowywane w wewnętrznej tablicy i są dostępne jako łańcuchy poprzez ARGV(n)
makro. Rozważmy na przykład następujące wyrażenie:

miejscowy
int pmin, pmax;
zakończenia

zanim
pmin=atoi(ARGV(0);
pmax=atoi(ARGV(1);
zakończenia

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

To wyrażenie wypisze wartości x, y i pha dla wszystkich wierszy, w których znajduje się wartość pha
między dwiema wartościami wprowadzonymi przez użytkownika:

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

Należy pamiętać, że obowiązkiem użytkownika jest upewnienie się, że podana jest poprawna liczba argumentów
Są przekazywane. Makro ARGV(n) zwraca NULL, jeśli żądany argument wykracza poza limity
rzeczywistej liczby argumentów, co zwykle skutkuje SEGV, jeśli jest przetwarzane na ślepo. Sprawdzić
liczbę argumentów, użyj makra ARGC:

miejscowy
długie int ziarno=1;
podwójny limit = 0.8;
zakończenia

zanim
if( ARGC >= 1 ) ziarno = atol(ARGV(0);
if( ARGC >= 2 ) granica = atof(ARGV(1);
srand48(ziarno);
zakończenia

if ( drand48() > limit ) kontynuuj;

Makro WRITE_ROW rozwija się do FunTableRowPut() wywołanie, które zapisuje bieżący wiersz. To
można użyć do zapisania wiersza więcej niż jeden raz. Dodatkowo makro NROW rozszerza się do
aktualnie przetwarzany numer wiersza. Użycie tych dwóch makr pokazano poniżej
przykład:

if( cur->pha:I == cur->pi:I ) kontynuuj;
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;

Jeśli -p [wałówka] przełącznik jest określony, wyrażenie nie jest wykonywane. Raczej
wygenerowany plik wykonywalny jest zapisywany pod określoną nazwą programu do późniejszego wykorzystania.

Jeśli -n przełącznik jest określony, wyrażenie nie jest wykonywane. Raczej wygenerowany kod
jest zapisany na stdout. Jest to szczególnie przydatne, jeśli chcesz wygenerować plik szkieletu
i dodaj własny kod lub jeśli chcesz sprawdzić błędy kompilacji. Uwaga, komentarz
na początku wyjścia daje kompilatorowi polecenie potrzebne do zbudowania na nim programu
platforma. (Polecenie może zmieniać się z platformy na platformę z powodu użycia
różne biblioteki, przełączniki kompilatora itp.)

Jak wspomniano poprzednio, funkalc automatycznie zadeklaruje zmienną skalarną (jako a
double), jeśli ta zmienna została użyta, ale nie została zadeklarowana. Obiekt ten jest realizowany
za pomocą skryptu sed o nazwie funcalc.sed, który przetwarza dane wyjściowe kompilatora w celu wykrycia an
niezadeklarowany błąd zmiennej. W tym skrypcie pojawił się odpowiedni błąd
informacje dla gcc i dla cc na platformach Solaris, DecAlpha i SGI. Jeśli to znajdziesz
automatyczna deklaracja skalarów nie działa na twojej platformie, sprawdź ten skrypt sed;
może być konieczne dodanie lub edycja niektórych komunikatów o błędach, które wykrywa.

W celu zachowania analizy leksykalnej funkalc Wybraliśmy wyrażenia (rozsądnie) proste
zaakceptować pewne ograniczenia dotyczące dokładności umieszczania komentarzy C, spacji i nowych wierszy
w wygenerowanym programie. W szczególności komentarze związane z zadeklarowanymi zmiennymi lokalnymi
na początku wyrażenia (tzn. nie w a lokalny... koniec block) zwykle się kończy
w wewnętrznej pętli, a nie z lokalnymi deklaracjami:

/* ten komentarz znajdzie się w niewłaściwym miejscu (tj. w pętli wewnętrznej) */
podwójne A; /* również w złym miejscu */
/* to będzie we właściwym miejscu (pętla wewnętrzna) */
if( cur->x:D == cur->y:D ) kontynuuj; /* również we właściwym miejscu */
a = cur->x;
bież->x = bież->y;
bież->y = a;
bieżąca->średnia:E = (bieżąca->x+bieżąca->y)/2.0;

Podobnie spacje i znaki nowej linii są czasami pomijane lub dodawane w pozornie arbitralny sposób
sposób. Oczywiście żadna z tych skaz stylistycznych nie wpływa na poprawność wykonania
wygenerowany kod.

Bo funkalc musi przeanalizować wyrażenie użytkownika przy użyciu plików danych przekazanych w programie
linii poleceń, plik(i) wejściowy(e) należy otworzyć i przeczytać dwa razy: raz podczas programu
generacji i raz podczas wykonywania. W rezultacie nie jest możliwe użycie stdin dla
plik wejściowy: funkalc nie może być używany jako filtr. Rozważymy usunięcie tego ograniczenia
w późniejszym terminie.

Wraz z komentarzami C, funkalc wyrażenia mogą mieć wewnętrzne komentarze jednowierszowe
nie przekazany do wygenerowanego programu C. Te wewnętrzne komentarze zaczynają się od #
znak i kontynuuj do nowej linii:

podwójne A; # to nie jest przekazywane do wygenerowanego pliku C
# ani to
a = cur->x;
bież->x = bież->y;
bież->y = a;
/* ten komentarz jest przekazywany do pliku C */
bieżąca->średnia:E = (bieżąca->x+bieżąca->y)/2.0;

Jak wspomniano wcześniej, kolumny wejściowe są zwykle identyfikowane przez ich użycie w obrębie
wewnętrzna pętla zdarzeń. Istnieją rzadkie przypadki, w których możesz chcieć przeczytać kolumnę i
przetwarzać poza główną pętlą. Na przykład qsort może użyć kolumny w swoim sortowaniu
procedura porównania, która nie jest przetwarzana wewnątrz pętli wewnętrznej (a zatem nie
niejawnie określona jako kolumna do odczytania). Aby upewnić się, że taka kolumna jest czytana przez
pętla zdarzeń, użyj wyraźny słowo kluczowe. Argumenty tego słowa kluczowego określają kolumny, które
powinny zostać wczytane do struktury rekordów wejściowych, mimo że nie są wymienione w pliku
Pętla wewnętrzna. Na przykład:

wyraźne pi pha

zapewni, że kolumny pi i pha zostaną odczytane dla każdego wiersza, nawet jeśli tak nie jest
przetwarzane w wewnętrznej pętli zdarzeń. The wyraźny oświadczenie można umieścić w dowolnym miejscu.

Na koniec zwróć uwagę na to funkalc obecnie pracuje nad wyrażeniami obejmującymi tabele binarne FITS i
surowe pliki zdarzeń. Rozważymy dodanie obsługi wyrażeń graficznych w późniejszym czasie,
jeśli istnieje zapotrzebowanie na takie wsparcie ze strony społeczności.

Korzystaj z funcalc online za pomocą usług onworks.net


Darmowe serwery i stacje robocze

Pobierz aplikacje Windows i Linux

  • 1
    HAUST
    HAUST
    SWIG to narzędzie do tworzenia oprogramowania
    która łączy programy napisane w C i
    C++ z różnymi wysokopoziomowymi
    języki programowania. SWIG jest używany z
    różne...
    Pobierz SWIG
  • 2
    Motyw WooCommerce Nextjs React
    Motyw WooCommerce Nextjs React
    Motyw React WooCommerce, zbudowany z
    Następny JS, Webpack, Babel, Node i
    Express, używając GraphQL i Apollo
    Klient. Sklep WooCommerce w React(
    zawiera: Produkty...
    Pobierz motyw WooCommerce Nextjs React
  • 3
    archlabs_repo
    archlabs_repo
    Repozytorium pakietów dla ArchLabs To jest plik
    aplikacja, którą można również pobrać
    od
    https://sourceforge.net/projects/archlabs-repo/.
    Został on hostowany w OnWorks w...
    Pobierz archlabs_repo
  • 4
    Projekt Zefir
    Projekt Zefir
    Projekt Zephyr to nowa generacja
    system operacyjny czasu rzeczywistego (RTOS).
    obsługuje wiele urządzeń
    architektury. Opiera się na A
    małe jądro...
    Pobierz projekt Zephyr
  • 5
    Scons
    Scons
    SCons to narzędzie do tworzenia oprogramowania
    jest lepszą alternatywą dla
    klasyczne narzędzie do budowania „Make”.
    wszyscy znamy i kochamy. SCons jest
    wdrożył...
    Pobierz SCons
  • 6
    PSeInt
    PSeInt
    PSeInt to interpreter pseudokodu dla
    hiszpańskojęzyczni studenci programowania.
    Jego głównym celem jest bycie narzędziem do
    nauka i zrozumienie podstaw
    koncepcja...
    Pobierz PSeInt
  • więcej »

Komendy systemu Linux

Ad