InggrisPerancisSpanyol

Ad


favorit OnWorks

funcalc - Online di Cloud

Jalankan funcalc di penyedia hosting gratis OnWorks melalui Ubuntu Online, Fedora Online, emulator online Windows, atau emulator online MAC OS

Ini adalah perintah funcalc yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS

PROGRAM:

NAMA


funcalc - Kalkulator Funtools (untuk tabel biner)

RINGKASAN


perhitungan fungsi [-n] [-a argstr] [-e expr] [-f file] [-l link] [-p prog] [oname [kolom]]

PILIHAN


-a argstr # argumen pengguna untuk diteruskan ke program yang dikompilasi
-e expr # ekspresi funcalc
-f file # file yang berisi ekspresi funcalc
-l libs # libs untuk ditambahkan ke perintah tautan
-n # keluaran kode yang dihasilkan alih-alih mengkompilasi dan mengeksekusi
-p prog # menghasilkan program bernama, tidak ada eksekusi
-u # die jika ada variabel yang tidak dideklarasikan (jangan dideklarasikan secara otomatis)

DESKRIPSI


perhitungan fungsi adalah program kalkulator yang memungkinkan ekspresi sewenang-wenang untuk dibangun,
dikompilasi, dan dieksekusi pada kolom dalam tabel Funtools (tabel biner FITS atau acara mentah
mengajukan). Ia bekerja dengan mengintegrasikan ekspresi yang disediakan pengguna ke dalam program template C, lalu
mengkompilasi dan mengeksekusi program. perhitungan fungsi ekspresi adalah pernyataan C, meskipun beberapa
penyederhanaan penting (seperti deklarasi variabel otomatis) didukung.

perhitungan fungsi ekspresi dapat ditentukan dalam tiga cara: pada baris perintah menggunakan -e
[ekspresi] beralih, dalam file menggunakan -f [mengajukan] beralih, atau dari stdin (jika tidak ada -e
maupun -f ditentukan). Tentu saja file yang berisi perhitungan fungsi ekspresi dapat dibaca dari
stdin.

Setiap seruan dari perhitungan fungsi membutuhkan file tabel input Funtools untuk ditetapkan sebagai
argumen baris perintah pertama. File tabel keluaran Funtools adalah opsional kedua
argumen. Ini diperlukan hanya jika file FITS keluaran sedang dibuat (yaitu, dalam kasus di mana:
itu perhitungan fungsi ekspresi hanya mencetak nilai, tidak diperlukan file keluaran). Jika masukan dan keluaran
file keduanya ditentukan, argumen opsional ketiga dapat menentukan daftar kolom untuk
mengaktifkan (menggunakan FunColumnAktifkan()). Catat itu perhitungan fungsi menentukan apakah atau tidak untuk
menghasilkan kode untuk menulis file output berdasarkan ada atau tidak adanya output
argumen berkas.

A perhitungan fungsi ekspresi dieksekusi pada setiap baris tabel dan terdiri dari satu atau lebih C
pernyataan yang beroperasi pada kolom baris itu (mungkin menggunakan variabel sementara).
Dalam sebuah ekspresi, referensi dibuat ke kolom dari arus baris menggunakan struktur C
sintaksis bajingan-[colname]>, misalnya cur->x, cur->pha, dll. Variabel skalar lokal dapat didefinisikan
menggunakan deklarasi C di awal ekspresi, atau mereka dapat didefinisikan
secara otomatis oleh perhitungan fungsi (menjadi tipe ganda). Jadi, misalnya, pertukaran kolom x
dan y dalam sebuah tabel dapat dilakukan menggunakan salah satu dari persamaan berikut: perhitungan fungsi
ekspresi:

suhu ganda;
suhu = skr->x;
skr->x = skr->y;
skr->y = suhu;

atau:

suhu = skr->x;
skr->x = skr->y;
skr->y = suhu;

Ketika ekspresi ini dieksekusi menggunakan perintah seperti:

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

file yang dihasilkan akan memiliki nilai kolom x dan y yang ditukar.

Secara default, tipe data variabel untuk kolom sama dengan tipe data dari
kolom seperti yang disimpan dalam file. Ini dapat diubah dengan menambahkan ":[dtype]" ke yang pertama
referensi ke kolom itu. Dalam contoh di atas, untuk memaksa x dan y menjadi output ganda,
tentukan tipe 'D' secara eksplisit:

suhu = skr->x:D;
skr->x = skr->y:D;
skr->y = suhu;

Penentu tipe data mengikuti sintaks tabel FITS standar untuk mendefinisikan kolom menggunakan TFORM:

· A: karakter ASCII

· B: karakter 8-bit yang tidak ditandatangani

· I: menandatangani 16-bit ke

· U: unsigned 16-bit int (bukan FITS standar)

· J: ditandatangani 32-bit ke dalam

· V: int 32-bit yang tidak ditandatangani (bukan FITS standar)

· E: float 32-bit

· D: float 64-bit

· X: bit (diperlakukan sebagai array karakter)

Perhatikan bahwa hanya referensi pertama ke kolom yang harus berisi tipe data eksplisit
penentu.

Tentu saja, penting untuk menangani tipe data kolom dengan benar. salah satu dari
penyebab paling sering kesalahan dalam perhitungan fungsi pemrograman adalah penggunaan implisit dari data yang salah
ketik untuk kolom dalam ekspresi. Misalnya, perhitungan:

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

biasanya perlu dilakukan dengan menggunakan aritmatika floating point. Dalam kasus di mana x dan y
kolom adalah bilangan bulat, ini dapat dilakukan dengan membaca kolom sebagai ganda menggunakan eksplisit
spesifikasi tipe:

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

Atau, itu dapat dilakukan dengan menggunakan casting tipe C dalam ekspresi:

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

Selain mengakses kolom di baris saat ini, referensi juga dapat dibuat ke
sebelumnya baris menggunakan sebelum-[colname]>, dan ke berikutnya baris menggunakan lanjut-[namakolom]>. Perhatikan bahwa
if sebelum-[colname]> ditentukan dalam perhitungan fungsi ekspresi, baris pertama bukan
diproses. Jika lanjut-[colname]> ditentukan dalam perhitungan fungsi ekspresi, baris terakhir
tidak diproses. Lewat sini, prev dan berikutnya dijamin selalu menunjuk ke baris yang valid.
Misalnya, untuk mencetak nilai kolom x saat ini dan kolom y sebelumnya,
gunakan fungsi C fprintf dalam a perhitungan fungsi ekspresi:

fprintf(stdout, "%d %d\n", skr->x, sebelumnya->y);

Kolom baru dapat ditentukan menggunakan yang sama bajingan-[colname]> sintaks dengan menambahkan kolom
type (dan penentu tlmin/tlmax/binsiz opsional), dipisahkan oleh titik dua. Sebagai contoh,
cur->avg:D akan mendefinisikan kolom baru bertipe double. Penentu tipe sama dengan yang
digunakan di atas untuk menentukan tipe data baru untuk kolom yang ada.

Misalnya, untuk membuat dan mengeluarkan kolom baru yang merupakan nilai rata-rata dari x dan y
kolom, kolom "rata-rata" baru dapat ditentukan:

kur->rata-rata:D = (skr->x + kur->y)/2.0

Perhatikan bahwa akhir ';' tidak diperlukan untuk ekspresi satu baris.

Seperti spesifikasi tipe data FITS TFORM, specifier tipe data kolom dapat didahului
dengan hitungan numerik untuk mendefinisikan array, misalnya, "10I" berarti vektor 10 int pendek, "2E"
berarti dua pelampung presisi tunggal, dll. Kolom baru hanya perlu didefinisikan sekali dalam a
perhitungan fungsi ekspresi, setelah itu dapat digunakan tanpa menentukan ulang jenisnya. Ini
termasuk referensi ke elemen larik kolom:

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

Tipe data 'X' (bit) diperlakukan sebagai array char dimensi (numeric_count/8), yaitu,
16X diproses sebagai array char 2-byte. Setiap elemen array 8-bit diakses secara terpisah:

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

Di sini, kolom 16-bit dibuat dengan MSB diatur ke 1 dan LSB diatur ke 2.

Secara default, semua baris yang diproses ditulis ke file output yang ditentukan. Jika Anda menghendaki
lewati penulisan baris tertentu, cukup jalankan pernyataan C "lanjutkan" di akhir
perhitungan fungsi ekspresi, karena penulisan baris dilakukan segera setelah
ekspresi dijalankan. Misalnya, untuk melewatkan penulisan baris yang rata-ratanya sama dengan
nilai x saat ini:

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

Jika tidak ada argumen file output yang ditentukan pada perhitungan fungsi baris perintah, tidak ada file output
dibuka dan tidak ada baris yang ditulis. Ini berguna dalam ekspresi yang hanya mencetak output
hasil alih-alih menghasilkan file baru:

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/(double)(cur->au1+cur->au2+cur->au3);
fprintf(stdout, "%f\t%f\t%f\t%f\n", fpv, fbv, fpu, fbu);

Dalam contoh di atas, kami menggunakan spesifikasi tipe eksplisit (untuk kolom "av") dan tipe
casting (untuk kolom "au") untuk memastikan bahwa semua operasi dilakukan dalam dua kali lipat
presisi.

Ketika file output ditentukan, tabel input yang dipilih diproses dan baris output
disalin ke file output. Perhatikan bahwa file output dapat ditentukan sebagai "stdout" di
untuk menulis baris output ke output standar. Jika argumen file output adalah
dilewatkan, argumen ketiga opsional juga dapat diteruskan untuk menentukan kolom mana yang akan diproses.

Dalam tabel biner FITS, terkadang diinginkan untuk menyalin semua ekstensi FITS lainnya
ke file output juga. Ini dapat dilakukan dengan menambahkan tanda '+' pada nama
ekstensi dalam nama file input. Lihat menyenangkan untuk contoh terkait.

perhitungan fungsi bekerja dengan mengintegrasikan ekspresi yang ditentukan pengguna ke dalam program template C
disebut tabcalc.c. Program yang telah selesai kemudian dikompilasi dan dieksekusi. Variabel
deklarasi yang memulai perhitungan fungsi ekspresi ditempatkan di bagian deklarasi lokal
dari program utama template. Semua baris lainnya ditempatkan di program utama template
lingkaran pemrosesan dalam. Rincian lain dari pembuatan program ditangani secara otomatis. Untuk
contoh, penentu kolom dianalisis untuk membangun struktur C untuk memproses baris, yaitu
diteruskan ke FunColumnPilih() dan digunakan dalam MenyenangkanTableRowGet(). Jika variabel yang tidak diketahui digunakan
dalam ekspresi, menghasilkan kesalahan kompilasi, pembuatan program dicoba lagi setelah
mendefinisikan variabel yang tidak diketahui menjadi tipe ganda.

Biasanya, perhitungan fungsi kode ekspresi ditambahkan ke perhitungan fungsi loop pemrosesan baris. Itu mungkin
untuk menambahkan kode ke bagian lain dari program dengan menempatkan kode ini di dalam arahan khusus
dari bentuk:

[nama arahan]
... kode ada di sini ...
akhir

Arahan tersebut adalah:

· global tambahkan kode dan deklarasi di ruang global, sebelum rutinitas utama.

· lokal tambahkan deklarasi (dan kode) tepat setelah deklarasi lokal di main

· sebelum tambahkan kode tepat sebelum memasuki loop pemrosesan baris utama

· setelah tambahkan kode tepat setelah keluar dari loop pemrosesan baris utama

Dengan demikian, berikut perhitungan fungsi ekspresi akan mendeklarasikan variabel global dan membuat subrutin
panggilan tepat sebelum dan setelah loop pemrosesan utama:

global
ganda v1, v2;
init ganda (batal);
selesai ganda (ganda v);
akhir
sebelum
v1 = init();
akhir
... proses baris, dengan perhitungan menggunakan v1 ...
setelah
v2 = selesai(v1);
jika( v2 < 0.0 ){
fprintf(stderr, "pemrosesan gagal %g -> %g\n", v1, v2);
keluar(1);
}
akhir

Rutinitas seperti init () dan menyelesaikan() di atas diteruskan ke program yang dihasilkan untuk ditautkan
menggunakan -l [tautan arahan ...] mengalihkan. String yang ditentukan oleh sakelar ini adalah
ditambahkan ke baris tautan yang digunakan untuk membangun program (sebelum perpustakaan funtools). Untuk
contoh, dengan asumsi bahwa init () dan menyelesaikan() ada di perpustakaan libmysubs.a di
/opt/special/lib direktori, gunakan:

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

Argumen pengguna dapat diteruskan ke program funcalc yang dikompilasi menggunakan argumen string ke
saklar "-a". String harus berisi semua argumen pengguna. Misalnya, untuk lulus
bilangan bulat 1 dan 2, gunakan:

funcalc -a "1 2" ...

Argumen disimpan dalam array internal dan diakses sebagai string melalui ARGV(n)
makro. Sebagai contoh, perhatikan ekspresi berikut:

lokal
int pmin, pmaks;
akhir

sebelum
pmmin=atoi(ARGV(0));
pmax=atoi(ARGV(1));
akhir

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

Ekspresi ini akan mencetak nilai x, y, dan pha untuk semua baris di mana nilai pha adalah
antara dua nilai input pengguna:

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

Perhatikan bahwa pengguna bertanggung jawab untuk memastikan bahwa jumlah argumen yang benar
dilewatkan. Makro ARGV(n) mengembalikan NULL jika argumen yang diminta berada di luar batas
dari jumlah argumen yang sebenarnya, biasanya menghasilkan SEGV jika diproses secara membabi buta. Untuk memeriksa
jumlah argumen, gunakan makro ARGC:

lokal
benih int panjang=1;
batas ganda = 0.8;
akhir

sebelum
jika( ARGC >= 1 ) benih = atol(ARGV(0));
jika( ARGC >= 2 ) batas = atof(ARGV(1));
srand48(benih);
akhir

jika ( drand48() > limit ) lanjutkan;

Makro WRITE_ROW diperluas ke MenyenangkanTableRowPut() panggilan yang menulis baris saat ini. Dia
dapat digunakan untuk menulis baris lebih dari sekali. Selain itu, NROW makro meluas ke
nomor baris yang sedang diproses. Penggunaan kedua makro ini ditunjukkan sebagai berikut:
contoh:

if( cur->pha:I == cur->pi:I ) lanjutkan;
a = skr->pha;
skr->pha = skr->pi;
skr->pi = a;
cur->AVG:E = (cur->pha+cur->pi)/2.0;
skr->NR:I = NROW;
jika( NROW < 10 ) WRITE_ROW;

Jika -p [program] switch ditentukan, ekspresi tidak dieksekusi. Sebaliknya,
executable yang dihasilkan disimpan dengan nama program yang ditentukan untuk digunakan nanti.

Jika -n switch ditentukan, ekspresi tidak dieksekusi. Sebaliknya, kode yang dihasilkan
ditulis ke stdout. Ini sangat berguna jika Anda ingin membuat file kerangka
dan tambahkan kode Anda sendiri, atau jika Anda perlu memeriksa kesalahan kompilasi. Perhatikan bahwa komentar
di awal output memberikan perintah kompiler yang diperlukan untuk membangun program di atasnya
platform. (Perintah dapat berubah dari platform ke platform karena penggunaan
perpustakaan yang berbeda, sakelar kompiler, dll.)

Seperti disebutkan sebelumnya, perhitungan fungsi akan mendeklarasikan variabel skalar secara otomatis (sebagai
double) jika variabel itu telah digunakan tetapi tidak dideklarasikan. Fasilitas ini diterapkan
menggunakan skrip sed bernama funcalc.sed, yang memproses keluaran kompiler untuk merasakan dan
kesalahan variabel yang tidak dideklarasikan. Skrip ini telah diunggulkan dengan kesalahan yang sesuai
informasi untuk gcc, dan untuk cc pada platform Solaris, DecAlpha, dan SGI. Jika Anda menemukan itu
deklarasi skalar otomatis tidak berfungsi pada platform Anda, periksa skrip sed ini;
mungkin perlu menambahkan atau mengedit beberapa pesan kesalahan yang dirasakannya.

Untuk menjaga analisis leksikal dari perhitungan fungsi ekspresi (cukup) sederhana, kami memilih
untuk menerima beberapa batasan tentang seberapa akurat komentar C, spasi, dan baris baru ditempatkan
dalam program yang dihasilkan. Secara khusus, komentar yang terkait dengan variabel lokal dideklarasikan
di awal ekspresi (yaitu, bukan di a lokal... akhir blok) biasanya akan berakhir
di loop dalam, bukan dengan deklarasi lokal:

/* komentar ini akan berakhir di tempat yang salah (yaitu, lingkaran dalam) */
gandakan; /* juga salah tempat */
/* ini akan berada di tempat yang tepat (loop dalam) */
if( skr->x:D == skr->y:D ) lanjutkan; /* juga di tempat yang tepat */
a = skr->x;
skr->x = skr->y;
skr->y = a;
kur->rata-rata:E = (skr->x+skr->y)/2.0;

Demikian pula, spasi dan baris baru terkadang dihilangkan atau ditambahkan dengan cara yang tampak arbitrer
tata krama. Tentu saja, tidak satu pun dari cacat gaya ini yang memengaruhi kebenaran gambar
kode yang dihasilkan.

Karena perhitungan fungsi harus menganalisis ekspresi pengguna menggunakan file data yang diteruskan pada
baris perintah, file input harus dibuka dan dibaca dua kali: sekali selama program
generasi dan sekali selama eksekusi. Akibatnya, tidak mungkin menggunakan stdin untuk
berkas masukan: perhitungan fungsi tidak dapat digunakan sebagai penyaring. Kami akan mempertimbangkan untuk menghapus batasan ini
di kemudian hari.

Bersama dengan komentar C, perhitungan fungsi ekspresi dapat memiliki komentar internal satu baris yang
tidak diteruskan ke program C yang dihasilkan. Komentar internal ini dimulai dengan #
karakter dan lanjutkan ke baris baru:

gandakan; # ini tidak diteruskan ke file C yang dihasilkan
# juga bukan ini
a = skr->x;
skr->x = skr->y;
skr->y = a;
/* komentar ini diteruskan ke file C */
kur->rata-rata:E = (skr->x+skr->y)/2.0;

Seperti disebutkan sebelumnya, kolom input biasanya diidentifikasi dengan penggunaannya di dalam
loop acara dalam. Ada kasus langka di mana Anda mungkin ingin membaca kolom dan
memprosesnya di luar loop utama. Misalnya, qsort mungkin menggunakan kolom dalam pengurutannya
rutin perbandingan yang tidak diproses di dalam loop dalam (dan karenanya tidak
secara implisit ditentukan sebagai kolom yang akan dibaca). Untuk memastikan bahwa kolom seperti itu dibaca oleh
loop acara, gunakan eksplisit kata kunci. Argumen untuk kata kunci ini menentukan kolom yang
harus dibaca ke dalam struktur catatan input meskipun tidak disebutkan dalam
lingkaran dalam. Sebagai contoh:

eksplisit pi pha

akan memastikan bahwa kolom pi dan pha dibaca untuk setiap baris, meskipun tidak
diproses dalam loop acara dalam. NS eksplisit pernyataan dapat ditempatkan di mana saja.

Akhirnya, perhatikan bahwa perhitungan fungsi saat ini bekerja pada ekspresi yang melibatkan tabel biner FITS dan
file acara mentah. Kami akan mempertimbangkan untuk menambahkan dukungan untuk ekspresi gambar di lain waktu,
jika ada permintaan untuk dukungan tersebut dari masyarakat.

Gunakan funcalc online menggunakan layanan onworks.net


Server & Workstation Gratis

Unduh aplikasi Windows & Linux

  • 1
    menenggak
    menenggak
    SWIG adalah alat pengembangan perangkat lunak
    yang menghubungkan program yang ditulis dalam C dan
    C++ dengan berbagai level tinggi
    bahasa pemrograman. SWIG digunakan dengan
    berbeda...
    Unduh SWIG.dll
  • 2
    Tema WooCommerce Nextjs React
    Tema WooCommerce Nextjs React
    Bereaksi tema WooCommerce, dibangun dengan
    JS berikutnya, Webpack, Babel, Node, dan
    Express, menggunakan GraphQL dan Apollo
    Klien. Toko WooCommerce di React(
    berisi: Produk...
    Unduh WooCommerce Nextjs React Theme
  • 3
    archlabs_repo
    archlabs_repo
    Repo paket untuk ArchLabs Ini adalah
    aplikasi yang juga bisa diambil
    dari
    https://sourceforge.net/projects/archlabs-repo/.
    Ini telah dihosting di OnWorks di ...
    Unduh archlabs_repo
  • 4
    Proyek Zephyr
    Proyek Zephyr
    Proyek Zephyr adalah generasi baru
    sistem operasi waktu-nyata (RTOS) yang
    mendukung banyak perangkat keras
    ilmu bangunan. Hal ini didasarkan pada
    kernel jejak kecil...
    Unduh Proyek Zephyr
  • 5
    SCon
    SCon
    SCons adalah alat konstruksi perangkat lunak
    itu adalah alternatif yang unggul untuk
    alat pembuatan "Buat" klasik yang
    kita semua tahu dan cinta. SCon adalah
    dilaksanakan...
    Unduh SCons.dll
  • 6
    PSeInt
    PSeInt
    PSeInt adalah penerjemah kode semu untuk
    siswa pemrograman berbahasa Spanyol.
    Tujuan utamanya adalah menjadi alat untuk
    belajar dan memahami dasar
    konsep...
    Unduh PSeInt.dll
  • Lebih banyak lagi »

Perintah Linux

Ad