funcalc - ক্লাউডে অনলাইন

এই কমান্ড funcalc যা আমাদের একাধিক বিনামূল্যের অনলাইন ওয়ার্কস্টেশন যেমন উবুন্টু অনলাইন, ফেডোরা অনলাইন, উইন্ডোজ অনলাইন এমুলেটর বা MAC OS অনলাইন এমুলেটর ব্যবহার করে OnWorks ফ্রি হোস্টিং প্রদানকারীতে চালানো যেতে পারে।

কার্যক্রম:

NAME এর


funcalc - Funtools ক্যালকুলেটর (বাইনারী টেবিলের জন্য)

সাইনোপিসিস


funcalc [-n] [-a argstr] [-e expr] [-f ফাইল] [-l লিঙ্ক] [-p prog] [ওনাম [কলাম]]

বিকল্প


-a argstr # ব্যবহারকারী আর্গুমেন্ট কম্পাইল করা প্রোগ্রামে পাস করার জন্য
-e expr # funcalc expression
-f ফাইল # ফাইলে ফানক্যালক এক্সপ্রেশন রয়েছে
-l libs # libs লিঙ্ক কমান্ডে যোগ করতে
-n # আউটপুট কম্পাইল এবং এক্সিকিউট করার পরিবর্তে কোড জেনারেট করে
-p prog # জেনারেট নামের প্রোগ্রাম, কোন এক্সিকিউশন নেই
কোনো ভেরিয়েবল অঘোষিত হলে -u # die (স্বয়ংক্রিয়ভাবে ঘোষণা করবেন না)

বর্ণনাঃ


funcalc একটি ক্যালকুলেটর প্রোগ্রাম যা নির্বিচারে অভিব্যক্তি নির্মাণের অনুমতি দেয়,
সংকলিত, এবং একটি Funtools টেবিলের কলামগুলিতে কার্যকর করা হয়েছে (FITS বাইনারি টেবিল বা কাঁচা ঘটনা
ফাইল)। এটি একটি টেমপ্লেট সি প্রোগ্রামে ব্যবহারকারীর সরবরাহকৃত অভিব্যক্তি(গুলি) সংহত করে কাজ করে
প্রোগ্রাম সংকলন এবং নির্বাহ করা। funcalc অভিব্যক্তি হল C বিবৃতি, যদিও কিছু
গুরুত্বপূর্ণ সরলীকরণ (যেমন ভেরিয়েবলের স্বয়ংক্রিয় ঘোষণা) সমর্থিত।

funcalc এক্সপ্রেশন তিনটি উপায়ে নির্দিষ্ট করা যেতে পারে: কমান্ড লাইন ব্যবহার করে -e
[অভিব্যক্তি] ব্যবহার করে একটি ফাইলে সুইচ করুন -f [ফাইল] সুইচ, অথবা stdin থেকে (যদি না হয় -e
না -f উল্লিখিত আছে). অবশ্যই একটি ফাইল ধারণকারী funcalc এক্সপ্রেশন থেকে পড়া যাবে
stdin

প্রতিটি আহ্বান funcalc একটি ইনপুট Funtools টেবিল ফাইল হিসাবে নির্দিষ্ট করা প্রয়োজন
প্রথম কমান্ড লাইন আর্গুমেন্ট। আউটপুট Funtools টেবিল ফাইল দ্বিতীয় ঐচ্ছিক
যুক্তি. এটি শুধুমাত্র তখনই প্রয়োজন যখন একটি আউটপুট FITS ফাইল তৈরি করা হচ্ছে (অর্থাৎ, যেখানে
দ্য funcalc এক্সপ্রেশন শুধুমাত্র মান প্রিন্ট করে, কোন আউটপুট ফাইলের প্রয়োজন নেই)। যদি ইনপুট এবং আউটপুট
ফাইল উভয়ই নির্দিষ্ট করা হয়েছে, একটি তৃতীয় ঐচ্ছিক আর্গুমেন্ট কলামের তালিকা নির্দিষ্ট করতে পারে
সক্রিয় (ব্যবহার করে FunColumnActivate()) মনে রাখবেন যে funcalc কিনা তা নির্ধারণ করে
একটি আউটপুট উপস্থিতি বা অনুপস্থিতির উপর ভিত্তি করে একটি আউটপুট ফাইল লেখার জন্য কোড তৈরি করুন
ফাইল আর্গুমেন্ট।

A funcalc এক্সপ্রেশন একটি টেবিলের প্রতিটি সারিতে সঞ্চালিত হয় এবং এক বা একাধিক C নিয়ে গঠিত
বিবৃতিগুলি যে সারির কলামগুলিতে কাজ করে (সম্ভবত অস্থায়ী ভেরিয়েবল ব্যবহার করে)।
একটি অভিব্যক্তির মধ্যে, এর একটি কলামে রেফারেন্স তৈরি করা হয় বর্তমান C struct ব্যবহার করে সারি
বাক্য গঠন বক্র-[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;

ডেটা টাইপ স্পেসিফায়াররা TFORM ব্যবহার করে কলাম সংজ্ঞায়িত করার জন্য স্ট্যান্ডার্ড FITS টেবিল সিনট্যাক্স অনুসরণ করে:

· A: ASCII অক্ষর

· বি: স্বাক্ষরবিহীন 8-বিট চর

· আমি: স্বাক্ষরিত 16-বিট int

· U: স্বাক্ষরবিহীন 16-বিট int (স্ট্যান্ডার্ড FITS নয়)

· J: স্বাক্ষরিত 32-বিট int

· V: স্বাক্ষরবিহীন 32-বিট int (মানক FITS নয়)

· ই: 32-বিট ফ্লোট

· D: 64-বিট ফ্লোট

· 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]>, এবং to পরবর্তী সারি ব্যবহার করে পরবর্তী-[কলনাম]>। মনে রাখবেন যে
if পূর্ববর্তী-[colname]> এ উল্লেখ করা হয়েছে funcalc অভিব্যক্তি, প্রথম সারি নয়
প্রক্রিয়া করা যদি পরবর্তী-[colname]> এ উল্লেখ করা হয়েছে funcalc অভিব্যক্তি, একেবারে শেষ সারি
প্রক্রিয়া করা হয় না। এভাবে, পূর্ববর্তী এবং পরবর্তী সর্বদা বৈধ সারি নির্দেশ করার গ্যারান্টি দেওয়া হয়।
উদাহরণস্বরূপ, বর্তমান x কলাম এবং পূর্ববর্তী y কলামের মান মুদ্রণ করতে,
a তে C fprintf ফাংশন ব্যবহার করুন funcalc অভিব্যক্তি:

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

একই ব্যবহার করে নতুন কলাম নির্দিষ্ট করা যেতে পারে বক্র-[colname]> কলাম যুক্ত করে সিনট্যাক্স
টাইপ (এবং ঐচ্ছিক tlmin/tlmax/binsiz স্পেসিফায়ার), কোলন দ্বারা বিভক্ত। উদাহরণ স্বরূপ,
cur->avg:D দ্বিগুণ টাইপের একটি নতুন কলাম সংজ্ঞায়িত করবে। টাইপ স্পেসিফায়ারগুলি একই
বিদ্যমান কলামের জন্য নতুন ডেটা প্রকার নির্দিষ্ট করতে উপরে ব্যবহার করা হয়েছে।

উদাহরণস্বরূপ, x এবং y এর গড় মান একটি নতুন কলাম তৈরি এবং আউটপুট করতে
কলাম, একটি নতুন "গড়" কলাম সংজ্ঞায়িত করা যেতে পারে:

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

উল্লেখ্য, ফাইনাল ';' একক-লাইন অভিব্যক্তির জন্য প্রয়োজন নেই।

FITS TFORM ডাটা টাইপ স্পেসিফিকেশনের মতো, কলাম ডেটা টাইপ স্পেসিফায়ারকে আগে দেওয়া যেতে পারে
একটি অ্যারেকে সংজ্ঞায়িত করার জন্য একটি সাংখ্যিক গণনা দ্বারা, যেমন, "10I" মানে 10 শর্ট ইন্টের একটি ভেক্টর, "2E"
মানে দুটি একক নির্ভুলতা ফ্লোট ইত্যাদি। একটি নতুন কলাম শুধুমাত্র একবার সংজ্ঞায়িত করা প্রয়োজন
funcalc অভিব্যক্তি, যার পরে এটি টাইপ পুনরায় নির্দিষ্ট না করে ব্যবহার করা যেতে পারে। এই
একটি কলাম অ্যারের উপাদানগুলির রেফারেন্স অন্তর্ভুক্ত করে:

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

'এক্স' (বিট) ডেটা টাইপকে মাত্রার একটি গৃহস্থালির অ্যারে হিসাবে বিবেচনা করা হয় (সংখ্যা_গণনা/8), অর্থাৎ,
16X একটি 2-বাইট চার অ্যারে হিসাবে প্রক্রিয়া করা হয়। প্রতিটি 8-বিট অ্যারে উপাদান আলাদাভাবে অ্যাক্সেস করা হয়:

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

এখানে, একটি 16-বিট কলাম তৈরি করা হয়েছে যেখানে MSB 1 সেট করা হয়েছে এবং LSB 2 সেট করা হয়েছে।

ডিফল্টরূপে, সমস্ত প্রক্রিয়াকৃত সারি নির্দিষ্ট আউটপুট ফাইলে লেখা হয়। যদি তুমি চাও
নির্দিষ্ট সারি লেখা এড়িয়ে যান, কেবল C এর শেষে "continue" বিবৃতিটি চালান
funcalc অভিব্যক্তি, যেহেতু সারি লেখার পরে অবিলম্বে সঞ্চালিত হয়
অভিব্যক্তি কার্যকর করা হয়। উদাহরণস্বরূপ, সারি লেখা বাদ দিতে যার গড় একই
বর্তমান x মান:

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 )
চালিয়ে যাওয়া;

যদি কোন আউটপুট ফাইল আর্গুমেন্ট তে নির্দিষ্ট করা না থাকে 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 একটি টেমপ্লেট সি প্রোগ্রামে ব্যবহারকারী-নির্দিষ্ট অভিব্যক্তিকে একীভূত করে কাজ করে
tabcalc.c বলা হয় সম্পূর্ণ প্রোগ্রাম তারপর কম্পাইল এবং নির্বাহ করা হয়. পরিবর্তনশীল
ঘোষণা যে শুরু funcalc অভিব্যক্তি স্থানীয় ঘোষণা বিভাগে স্থাপন করা হয়
টেমপ্লেট প্রধান প্রোগ্রামের। অন্যান্য সমস্ত লাইন টেমপ্লেট প্রধান প্রোগ্রামের মধ্যে স্থাপন করা হয়
অভ্যন্তরীণ প্রক্রিয়াকরণ লুপ। প্রোগ্রাম তৈরির অন্যান্য বিবরণ স্বয়ংক্রিয়ভাবে পরিচালনা করা হয়। জন্য
উদাহরণস্বরূপ, সারি প্রক্রিয়াকরণের জন্য একটি সি স্ট্রাকট তৈরি করতে কলাম স্পেসিফায়ারগুলি বিশ্লেষণ করা হয়, যা
প্রেরণ করা FunColumnSelect() এবং ব্যবহৃত FunTableRowGet(). যদি একটি অজানা পরিবর্তনশীল ব্যবহার করা হয়
অভিব্যক্তিতে, একটি সংকলন ত্রুটির ফলে, প্রোগ্রাম বিল্ডের পরে পুনরায় চেষ্টা করা হয়
অজানা ভেরিয়েবলকে সংজ্ঞায়িত করা হচ্ছে দ্বিগুণ টাইপ।

সাধারণত, funcalc এক্সপ্রেশন কোড যোগ করা হয় funcalc সারি প্রক্রিয়াকরণ লুপ। এটা সম্ভব
এই কোডটি বিশেষ নির্দেশের মধ্যে রেখে প্রোগ্রামের অন্যান্য অংশে কোড যোগ করতে
ফর্মের:

[নির্দেশনামূলক নাম]
... কোড এখানে যায় ...
শেষ

নির্দেশনাগুলো হলো:

· বিশ্বব্যাপী মূল রুটিনের আগে বিশ্বব্যাপী মহাকাশে কোড এবং ঘোষণা যোগ করুন।

· স্থানীয় প্রধান স্থানীয় ঘোষণার ঠিক পরে ঘোষণা (এবং কোড) যোগ করুন

· আগে মূল সারি প্রসেসিং লুপে প্রবেশ করার ঠিক আগে কোড যোগ করুন

· পরে মূল সারি প্রসেসিং লুপ থেকে বেরিয়ে আসার পরে কোড যোগ করুন

এইভাবে, নিম্নলিখিত funcalc এক্সপ্রেশন গ্লোবাল ভেরিয়েবল ঘোষণা করবে এবং সাবরুটিন তৈরি করবে
মূল প্রক্রিয়াকরণ লুপের ঠিক আগে এবং ঠিক পরে কলগুলি:

বিশ্বব্যাপী
ডবল v1, v2;
ডবল init (অকার্যকর);
ডবল ফিনিশ (ডবল v);
শেষ
আগে
v1 = init();
শেষ
... প্রক্রিয়া সারি, v1 ব্যবহার করে গণনা সহ ...
পরে
v2 = সমাপ্তি(v1);
যদি ( v2 < 0.0 ){
fprintf(stderr, "প্রসেসিং ব্যর্থ হয়েছে %g -> %g\n", v1, v2);
প্রস্থান(২০১১);
}
শেষ

রুটিন যেমন এটা() এবং শেষ() লিঙ্ক করার জন্য উপরে উত্পন্ন প্রোগ্রাম পাস করা হয়
ব্যবহার করে -l [লিংক নির্দেশনা ...] সুইচ এই সুইচ দ্বারা নির্দিষ্ট স্ট্রিং হবে
প্রোগ্রামটি তৈরি করতে ব্যবহৃত লিঙ্ক লাইনে যোগ করা হয়েছে (ফানটুলস লাইব্রেরির আগে)। জন্য
উদাহরণ, যে অনুমান এটা() এবং শেষ() libmysubs.a লাইব্রেরিতে আছেন
/opt/special/lib ডিরেক্টরি, ব্যবহার করুন:

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

ব্যবহারকারীর আর্গুমেন্ট একটি স্ট্রিং আর্গুমেন্ট ব্যবহার করে একটি সংকলিত ফানকালক প্রোগ্রামে পাস করা যেতে পারে
"-একটি সুইচ. স্ট্রিংটিতে ব্যবহারকারীর সমস্ত আর্গুমেন্ট থাকা উচিত। যেমন, পাস করা
পূর্ণসংখ্যা 1 এবং 2, ব্যবহার করুন:

funcalc -a "1 2"...

আর্গুমেন্টগুলি একটি অভ্যন্তরীণ অ্যারেতে সংরক্ষণ করা হয় এবং ARGV(n) এর মাধ্যমে স্ট্রিং হিসাবে অ্যাক্সেস করা হয়
ম্যাক্রো উদাহরণস্বরূপ, নিম্নলিখিত অভিব্যক্তি বিবেচনা করুন:

স্থানীয়
int pmin, pmax;
শেষ

আগে
pmin=atoi(এআরজিভি(0));
pmax=atoi(এআরজিভি(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 ম্যাক্রো ব্যবহার করুন:

স্থানীয়
দীর্ঘ int বীজ = 1;
দ্বিগুণ সীমা = 0.8;
শেষ

আগে
যদি ( ARGC >= 1 ) বীজ = atol(এআরজিভি(0));
যদি ( ARGC >= 2 ) সীমা = atof(এআরজিভি(1));
srand48(বীজ);
শেষ

যদি ( 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;
যদি ( NROW < 10 ) WRITE_ROW;

যদি -p [প্রোগ] সুইচ নির্দিষ্ট করা হয়েছে, এক্সপ্রেশনটি কার্যকর করা হয় না। বরং, দ
জেনারেটেড এক্সিকিউটেবল পরবর্তীতে ব্যবহারের জন্য নির্দিষ্ট প্রোগ্রাম নামের সাথে সংরক্ষণ করা হয়।

যদি -n সুইচ নির্দিষ্ট করা হয়েছে, এক্সপ্রেশনটি কার্যকর করা হয় না। বরং, জেনারেটেড কোড
stdout লেখা হয়। আপনি যদি একটি কঙ্কাল ফাইল তৈরি করতে চান তবে এটি বিশেষভাবে কার্যকর
এবং আপনার নিজের কোড যোগ করুন, অথবা যদি আপনার সংকলন ত্রুটিগুলি পরীক্ষা করতে হয়। উল্লেখ্য যে মন্তব্য
আউটপুটের শুরুতে প্রোগ্রামটি তৈরি করার জন্য প্রয়োজনীয় কম্পাইলার কমান্ড দেয়
প্ল্যাটফর্ম (কমান্ডটি ব্যবহারের কারণে প্ল্যাটফর্ম থেকে প্ল্যাটফর্মে পরিবর্তন হতে পারে
বিভিন্ন লাইব্রেরি, কম্পাইলার সুইচ, ইত্যাদি)

পূর্বে উল্লেখিত, funcalc স্বয়ংক্রিয়ভাবে একটি স্কেলার পরিবর্তনশীল ঘোষণা করবে (এ হিসাবে
ডবল) যদি সেই ভেরিয়েবলটি ব্যবহার করা হয় কিন্তু ঘোষিত না হয়। এই সুবিধা বাস্তবায়িত হয়
funcalc.sed নামের একটি sed স্ক্রিপ্ট ব্যবহার করে, যা একটি অনুধাবন করতে কম্পাইলার আউটপুট প্রক্রিয়া করে
অঘোষিত পরিবর্তনশীল ত্রুটি। এই স্ক্রিপ্টটি যথাযথ ত্রুটির সাথে বীজ করা হয়েছে
Gcc-এর জন্য তথ্য, এবং Solaris, DecAlpha, এবং SGI প্ল্যাটফর্মে cc-এর জন্য। যদি আপনি যে খুঁজে
স্কেলারের স্বয়ংক্রিয় ঘোষণা আপনার প্ল্যাটফর্মে কাজ করছে না, এই sed স্ক্রিপ্টটি পরীক্ষা করুন;
এটি সংবেদনশীল কিছু ত্রুটি বার্তা যোগ বা সম্পাদনা করার প্রয়োজন হতে পারে।

আভিধানিক বিশ্লেষণ রাখার জন্য funcalc অভিব্যক্তি (যৌক্তিকভাবে) সহজ, আমরা বেছে নিয়েছি
সি মন্তব্য, স্পেস এবং নতুন-লাইনগুলি কতটা সঠিকভাবে স্থাপন করা হয়েছে তার কিছু সীমাবদ্ধতা স্বীকার করতে
উত্পন্ন প্রোগ্রামে। বিশেষ করে, স্থানীয় ভেরিয়েবলের সাথে যুক্ত মন্তব্য ঘোষণা করা হয়েছে
একটি অভিব্যক্তির শুরুতে (অর্থাৎ, a তে নয় স্থানীয়...শেষ ব্লক) সাধারণত শেষ হবে
অভ্যন্তরীণ লুপে, স্থানীয় ঘোষণার সাথে নয়:

/* এই মন্তব্যটি ভুল জায়গায় শেষ হবে (যেমন, ভিতরের লুপ) */
ডবল 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 ফিল্টার হিসাবে ব্যবহার করা যাবে না। আমরা এই নিষেধাজ্ঞা অপসারণ বিবেচনা করব
পরবর্তীতে.

সি মন্তব্যের পাশাপাশি, funcalc অভিব্যক্তিতে এক লাইনের অভ্যন্তরীণ মন্তব্য থাকতে পারে
উৎপন্ন সি প্রোগ্রামে পাস করা হয় না। এই অভ্যন্তরীণ মন্তব্য দিয়ে শুরু #
অক্ষর এবং নতুন লাইন পর্যন্ত চালিয়ে যান:

ডবল a; # এটি তৈরি করা C ফাইলে পাস করা হয় না
# এটাও নয়
a = cur->x;
cur->x = cur->y;
cur->y = a;
/* এই মন্তব্যটি সি ফাইলে পাস করা হয়েছে */
cur->avg:E = (cur->x+cur->y)/2.0;

পূর্বে উল্লিখিত হিসাবে, ইনপুট কলাম সাধারণত তাদের মধ্যে ব্যবহৃত হচ্ছে দ্বারা চিহ্নিত করা হয়
ভিতরের ঘটনা লুপ. এমন বিরল ঘটনা রয়েছে যেখানে আপনি একটি কলাম পড়তে চাইতে পারেন এবং
প্রধান লুপের বাইরে এটি প্রক্রিয়া করুন। উদাহরণস্বরূপ, qsort তার সাজানোর জন্য একটি কলাম ব্যবহার করতে পারে
তুলনামূলক রুটিন যা ভিতরের লুপের ভিতরে প্রক্রিয়া করা হয় না (এবং তাই নয়
পড়ার জন্য একটি কলাম হিসাবে অন্তর্নিহিতভাবে নির্দিষ্ট করা হয়েছে)। এই ধরনের একটি কলাম দ্বারা পড়া হয় তা নিশ্চিত করতে
ঘটনা লুপ, ব্যবহার করুন স্পষ্ট কীওয়ার্ড এই কীওয়ার্ডের আর্গুমেন্টগুলি কলামগুলিকে নির্দিষ্ট করে
ইনপুট রেকর্ড গঠনে পড়া উচিত যদিও সেগুলি তে উল্লেখ করা হয়নি
ভিতরের লুপ। উদাহরণ স্বরূপ:

স্পষ্ট pi pha

প্রতিটি সারির জন্য pi এবং pha কলামগুলি পড়া হয়েছে তা নিশ্চিত করবে, এমনকি যদি তারা নাও থাকে
অভ্যন্তরীণ ইভেন্ট লুপে প্রক্রিয়া করা হয়। দ্য স্পষ্ট বিবৃতি কোথাও স্থাপন করা যেতে পারে.

অবশেষে, যে নোট funcalc বর্তমানে FITS বাইনারি টেবিল জড়িত অভিব্যক্তিতে কাজ করে এবং
কাঁচা ঘটনা ফাইল। আমরা পরবর্তী সময়ে ইমেজ এক্সপ্রেশনের জন্য সমর্থন যোগ করার কথা বিবেচনা করব,
যদি সম্প্রদায় থেকে এই ধরনের সমর্থনের জন্য দাবি করা হয়।

onworks.net পরিষেবা ব্যবহার করে অনলাইনে funcalc ব্যবহার করুন



সর্বশেষ লিনাক্স এবং উইন্ডোজ অনলাইন প্রোগ্রাম