সুচিপত্র
আমি টার্জনের সিউডোকোড সম্পর্কে আমার ব্যাখ্যাটি নিম্নলিখিত বিভাগগুলিতে ভাগ করব :
- Tarjan এর if-আর অবরোধের (
->
& |
অপারেটার)
- বরাদ্দ এবং সমতা পরীক্ষা (
:=
এবং =
)
- আছে
else if
, কিন্তু কোন else
নির্মাণ
- টারজানের শর্তসাপেক্ষ অ্যাসাইনমেন্ট অপারেটর
:= if
টারজানের অতিরিক্ত উদাহরণ if
এবং:= if
5.5।
টারজন অ্যারে (বা তালিকা)
অপারেটরদের সংক্ষিপ্তসার
- টারজানের ডাবল পয়েন্টেড তীর অপারেটর (
⟷
)
- টারজানের ডু লুপগুলি সি / জাভা-এর মতো এবং লুপগুলির মতো
- সমস্ত মিথ্যা শর্ত সহ টার্জনের শর্তসাপেক্ষ-অ্যাসাইনমেন্ট অপারেটর
(1) টার্জনের ইফ-অন্য ব্লক
(অপারেটর →
এবং |
)
if-else
কনস্ট্রাক্ট সম্ভবত Tarjan এর ভাষাটি সবচেয়ে মৌলিক নিয়ন্ত্রণ স্ট্রাকচার। সি-এর মতো ইফ-ব্লকগুলি ছাড়াও, যদি-অন্যরকম আচরণ টার্জনের অ্যাসাইনমেন্ট এবং টার্জনের লুপগুলির ক্ষেত্রে প্রায় নির্মিত হয়। টার্জনের তীর অপারেটর->
(বা →) যদি ইফ-স্টেটমেন্টের শর্ত এবং যদি একটি বিবৃতি কার্যকর করে থাকে তবে তার মধ্যে একটি সীমানা থাকে।
উদাহরণস্বরূপ, টার্জনের ভাষায় আমাদের থাকতে পারে:
# Example One
if a = 4 → x := 9 fi
যদি আমরা উপরের টারজান কোডের লাইনটি আংশিকভাবে সি বা জাভাতে অনুবাদ করি তবে আমরা নিম্নলিখিতটি পাই:
if (a = 4)
x := 9
fi
ডান কোঁকড়ানো ধনুর্বন্ধনী পরিবর্তে (সি এবং জাভা হিসাবে) টার্জন একটি- if
ব্লকটি ALGOL- এর মতো পিছনের দিকের কী-শব্দের বানান দিয়ে শেষ করে:fi
যদি আমরা আমাদের উপরের উদাহরণটির অনুবাদ চালিয়ে যান তবে আমরা পাই:
if (a = 4) {
x := 9
}
(২) নিয়োগ ও সমতা পরীক্ষা ( :=
এবং=
)
টারজান এই অপারেটরগুলিকে ALGOL থেকে নিয়ে যায় (পরে পাস্কালেও দেখা যায়)।
টারজান =
সমতা পরীক্ষার জন্য ব্যবহার করে, অ্যাসাইনমেন্ট নয় (তাই এটি জাভার মতো কাজ করে ==
)।
অ্যাসাইনমেন্টের জন্য, টারজন ব্যবহার করে :=
যা জাওয়ার মতো কাজ করে =
।
সুতরাং, আমরা যদি আমাদের উদাহরণটির অনুবাদ চালিয়ে যেতে থাকি তবে আমাদের কাছে:
if (a == 4) {
x = 9
}
|
টারজানের ভাষায় একটি উল্লম্ব বার (বা "পাইপ" বা ) else if
সি বা জাভাতে কীওয়ার্ডের সমান ।
উদাহরণস্বরূপ, টার্জনের ভাষায় আমাদের থাকতে পারে:
# Example Two
if a = 4 → x := 9 | a > 4 → y := 11 fi
উপরের টারজন-কোডটি অনুবাদ করে:
if (a == 4) {
x = 9
}
else if (a > 4) {
y = 11
}
(3) else if
শুধুমাত্র এবং কোন else
নির্মাণ
এর আগে, আমি সংক্ষিপ্তসারগুলি if
বর্ণনা না করেই - স্টেটমেন্টের মূল বিষয়গুলি আবরণ করেছি । তবে আমরা একটি ছোট বিস্তারিত আলোচনা করব না will টারজান-আইয়ান if-else
ব্লকের শেষ ধারাটিতে সর্বদা একটি তীর ( →
) অপারেটর থাকতে হবে । যেমন, কেবল else
টার্জনের ভাষায় নেই else if
। else
টারজানের ভাষায় অন-ব্লকের নিকটতম জিনিসটি হল সবচেয়ে সঠিক পরীক্ষা-শর্ত করা true
।
if a = 4 → x := 9 | a > 4 → y := 11 | true → z := 99 fi
সি / জাভাতে, আমাদের থাকতে হবে:
if (a == 4) {
x = 9
}
else if (a > 4) {
y = 11
}
else { // else if (true)
z = 99
}
সাধারণ বর্ণনাগুলির চেয়ে উদাহরণগুলি বোঝা সহজ। তবে, এখন আমাদের বেল্টের নীচে কিছু উদাহরণ রয়েছে, তা জেনে থাকুন যে তার্জনের যদি অন্য কোন নির্মাণের সাধারণ আনুষ্ঠানিকতা নীচে থাকে:
if condition
→ stuff to do
| condition
→ stuff to do
[...]
| condition
→ stuff to do
fi
চরিত্রটি |
এমনif else
চরিত্রটি →
পরীক্ষা-শর্তকে স্টাফ-টু-ডু-থেকে আলাদা করে দেয়।
(৪) টার্জনের শর্তসাপেক্ষ অ্যাসাইনমেন্ট অপারেটর := if
টারজান if
দুটি খুব ভিন্ন উপায়ে ব্যবহার করা যেতে পারে। এখনও অবধি, আমরা কেবল টারজানিয়ান ব্যবহারের একটি বর্ণনা করেছি if
। কিছুটা বিভ্রান্তিকরভাবে, টারজন এখনও if
দ্বিতীয় ধরণের- if
কনস্ট্রাক্টের জন্য স্বরলিপি / বাক্য গঠন ব্যবহার করে । যা if
ব্যবহার করা হচ্ছে তা প্রসঙ্গে তৈরি। প্রসঙ্গটি বিশ্লেষণ করা দ্বিতীয় ধরণের টারজান হিসাবে করণ if
করা খুব সহজ - একটি অ্যাসাইনমেন্ট অপারেটর দ্বারা সর্বদা পূর্ব-স্থির থাকে।
উদাহরণস্বরূপ, আমাদের নিম্নলিখিত টার্জন কোড থাকতে পারে:
# Example Three
x := if a = 4 → 9 fi
ডিগ্রেশন শুরু করুন
কিছুক্ষণ টারজান কোড নিয়ে কাজ করার পরে, আপনি ক্রিয়াকলাপের জন্য অভ্যস্ত হয়ে যান। যদি আমরা উপরের উদাহরণে পরীক্ষার শর্তটি বন্ধনীরূপে রাখি তবে আমরা পাই:
x := if (a = 4) → 9 fi
a = 4
কোনও অ্যাসাইনমেন্ট অপারেশন নয়। a = 4
মত a == 4
- এটি সত্য বা মিথ্যা প্রত্যাবর্তন করে।
সমাপ্তি ডিগ্রেশন
এটি := if
একক অপারেটরের সিনট্যাক্স হিসাবে ভাবতে সহায়তা করতে পারে , এর থেকে আলাদা :=
এবং if
প্রকৃতপক্ষে আমরা এটিকে উল্লেখ করব:= if
অপারেটরটিকে "শর্তসাপেক্ষ অ্যাসাইনমেন্ট" অপারেটর হিসাবে ।
জন্য if
আমরা তালিকা (condition → action)
। জন্য := if
আমরা তালিকা (condition → value)
যেখানে value
Teh ডানদিকের সাইড মান আমরা বাঁদিকের প্রান্তের নির্ধারিত পারেlhs
# Tarjan Example Four
lhs := if (a = 4) → rhs fi
সি বা জাভাতে দেখতে লাগবে:
# Example Four
if (a == 4) {
lhs = rhs
}
টারজানিয়ান কোডে "শর্তসাপেক্ষ নিয়োগ" এর নিম্নলিখিত উদাহরণটি বিবেচনা করুন:
# পাঁচটি উদাহরণের টার্জন ইনস্ট্যান্টেশন x: = a = 4 → 9 | a> 4 → 11 | সত্য → 99 ফাই
সি / জাভাতে, আমাদের থাকতে হবে:
// C/Java Instantiation of Example Five
if (a == 4) {
x = 9
}
else if (a > 4) {
x = 11
}
else if (true) { // else
x = 99
}
(5) অপারেটরদের সংক্ষিপ্তসার:
এখনও অবধি, আমাদের রয়েছে:
:=
...... অ্যাসাইনমেন্ট অপারেটর (সি / জাভা =
)
=
...... সমতা পরীক্ষা (সি / জাভা ==
)
→
...... যদি একটি আইফ-ব্লকের পরীক্ষার শর্ত এবং যদি একটি ব্লকের শৃঙ্খলার মধ্যে ডিলিমিটার
|
..... সি / জাভা অন্যথায় যদি
if ... fi
..... যদি-অন্য ব্লক
:= if... fi
..... একটি if- অন্য ব্লকের উপর ভিত্তি করে শর্তসাপেক্ষ অ্যাসাইনমেন্ট
(5.5) টারজন তালিকা / অ্যারে:
টারজানের ভাষাতে অন্তর্নির্মিত অ্যারের মতো ধারক রয়েছে। টারজান অ্যারেগুলির বাক্য গঠনটি টার্জনের if else
বিবৃতিগুলির স্বরলিপিটির চেয়ে অনেক বেশি স্বজ্ঞাত ।
list1 := ['lion', 'witch', 'wardrobe'];
list2a := [1, 2, 3, 4, 5];
list2b := [1, 2];
list3 := ["a", "b", "c", "d"];
list4 := [ ]; # an empty array
টার্জন অ্যারে এলিমেন্টা ()
স্কয়ার-বন্ধনী নয়, বন্ধনীতে অ্যাক্সেস করা হয়[]
সূচক শুরু হয় 1
। সুতরাং,
list3 := ["a", "b", "c", "d"]
# list3(1) == "a" returns true
# list3(2) == "b" return true
নীচে দেখায় যে কীভাবে 1 ম এবং 5 তম উপাদান যুক্ত একটি নতুন অ্যারে তৈরি করা যায় [1, 2, 3, 4, 5, 6, 7]
nums := [1, 2, 3, 4, 5, 6, 7]
new_arr := [nums(1), nums(5)]
সমতা অপারেটর অ্যারে জন্য সংজ্ঞায়িত করা হয়। নিম্নলিখিত কোড মুদ্রণtrue
x := false
if [1, 2] = [1, 2, 3, 4, 5] --> x := true
print(x)
কোনও অ্যারেটি ফাঁকা রয়েছে কিনা তা পরীক্ষার টারজানের উপায়টি এটি একটি খালি অ্যারের সাথে তুলনা করা
arr := [1, 2]
print(arr = [ ])
# `=` is equality test, not assignment
()
অপারেটির সাথে একত্রে একাধিক সূচক সরবরাহ করে একটি উপ-অ্যারের একটি ভিউ (অনুলিপি তৈরি করতে পারে না) তৈরি করতে পারে..
list3 := ["a", "b", "c", "d"]
beg := list3(.. 2)
# beg == ["a", "b"]
# beg(1) == "a"
end := list3(3..)
# end == ["c", "d"]
# end(1) == "c"
mid := list3(2..3)
# mid == ["b", "c"]
# mid(2) == "c"
# `list3(4)` is valid, but `mid(4)` is not
()) টারজন if
ও এর অতিরিক্ত উদাহরণ:= if
নীচে একটি টারজান শর্তসাপেক্ষ কার্যভারের আরও একটি উদাহরণ ( := if
):
# Tarjan Example Six
a := (false --> a | true --> b | false --> c1 + c2 | (2 + 3 < 99) --> d)
(true --> b)
(cond --> action)
সত্যিকারের শর্ত থাকা বামতম ধারা। সুতরাং, আসল অ্যাসাইনমেন্ট উদাহরণ সিক্সের একই অ্যাসাইনমেন্ট-আচরণ রয়েছেa := b
নীচে এই পর্যন্ত আমাদের টারজান কোডের সবচেয়ে জটিল উদাহরণ:
# Tarjan Example -- merge two sorted lists
list function merge (list s, t);
return if s =[] --> t
| t = [ ] --> s
| s != [ ] and t != [] and s(l) <= t(1) -->
[s(1)]& merge(s[2..], t)
| s != [ ]and t != [ ] and s(1) > r(l) -->
[t(1)] & merge (s,t(2..))
fi
end merge;
নীচে দুটি সাজানো তালিকার মার্জ করার জন্য টারজানের কোডটির অনুবাদ। নিম্নলিখিতটি হুবহু সি বা জাভা নয়, এটি টারজান সংস্করণের তুলনায় সি / জাভার অনেক কাছাকাছি।
list merge (list s, list t) {
if (s is empty) {
return t;
}
else if (t is empty){
return s;
}
else if (s[1] <= t[1]) {
return CONCATENATE([s[1]], merge(s[2...], t));
else { // else if (s[1] > t[1])
return CONCATENATE ([t[1]], merge(s,t[2..]);
}
}
নীচে টারজান-কোডের আরও একটি উদাহরণ এবং সি বা জাওয়ার মতো কিছুতে একটি অনুবাদ রয়েছে:
heap function meld (heap h1, h2);
return if h1 = null --> h2
| h2 = null --> h1
| h1 not null and h2 not null --> mesh (h1, h2)
fi
end meld;
নীচে সি / জাভা অনুবাদ:
HeapNode meld (HeapNode h1, HeapNode h2) {
if (h1 == null) {
return h2;
}
else if (h2 == null) {
return h1;
} else {
mesh(h1, h2)
}
} // end function
()) টার্জনের ডাবল পয়েন্টেড তীর অপারেটর (<-->
)
নীচে টারজন কোডের একটি উদাহরণ দেওয়া হল:
x <--> y
একটি ডাবল তীর ( ⟷
) অপারেটর টারজানের ভাষায় কী করে?
ঠিক আছে, টার্জনের ভাষার প্রায় সমস্ত ভেরিয়েবল পয়েন্টার।
<-->
একটি অদলবদল অপারেশন। নিম্নলিখিত প্রিন্টtrue
x_old := x
y_old := y
x <--> y
print(x == y_old) # prints true
print(y == x_old) # prints true
পারফর্ম করার পরে x <--> y
, x
অবজেক্টটি নির্দেশ করে যা বস্তুটি y
নির্দেশ করে এবং y
যে বস্তুটির x
দিকে নির্দেশ করে।
<-->
অপারেটরটি ব্যবহার করে নীচে একটি টারজান বিবৃতি দেওয়া আছে :
x := [1, 2, 3]
y := [4, 5, 6]
x <--> y
নীচে উপরের টারজন কোড থেকে বিকল্প সিউডোকোডে একটি অনুবাদ রয়েছে:
Pointer X = address of array [1, 2, 3];
Pointer Y = address of array [4, 5, 6];
Pointer X_OLD = address of whatever X points to;
X = address of whatever Y points to;
Y = address of whatever X_OLD points to;
বিকল্পভাবে, আমরা থাকতে পারে:
void operator_double_arrow(Array** lhs, Array** rhs) {
// swap lhs and rhs
int** old_lhs = 0;
old_lhs = lhs;
*lhs = *rhs;
*rhs = *old_lhs;
return;
}
int main() {
Array* lhs = new Array<int>(1, 2, 3);
Array* rhs = new Array<int>(4, 5, 6);
operator_double_arrow(&lhs, &rhs);
delete lhs;
delete rhs;
return 0;
}
নীচে ⟷
অপারেটরটি ব্যবহার করে টারজানের একটি ফাংশনের উদাহরণ দেওয়া আছে :
heap function mesh (heap nodes h1, h2);
if key(h1) > key(h2) → h1 ⟷ h2 fi;
right (h1) := if right(h1) = null → h2
|right(h1) ≠ null → mesh (right(h1), h2)
fi;
if rank (left (h1)) < rank (right (h1))
→ left(h1) ⟷ right(h1)
fi;
rank (h1) := rank(right(h1)) + 1;
return h1;
end mesh;
নীচে টারজানের mesh
ফাংশনটির সিউডো কোডে অনুবাদ করা হয়েছে যা সি নয়, তবে দেখতে সি এর তুলনায় আরও বেশি (তুলনামূলকভাবে কথা বলা)। এর উদ্দেশ্য টারজানের ⟷
অপারেটর কীভাবে কাজ করে তা বোঝানো ।
node pointer function mesh(node pointers h1, h2) {
if (h1.key) > h2.key) {
// swap h1 and h2
node pointer temp;
temp = h1;
h1 = h2;
h2 = temp;
}
// Now, h2.key <= h1.key
if (h1.right == null) {
h1.right = h2;
} else // h1.key != null {
h1.right = mesh(h1.right, h2);
}
if (h1.left.rank < h1.right.rank ) {
// swap h1.left and h1.right
node pointer temp;
temp = h1;
h1 = h2;
h2 = temp;
}
h1.rank = h1.right.rank + 1;
return h1;
}
(8) টারজানের ডু লুপগুলি সি / জাভা-এর মতো এবং লুপগুলির মতো
টার্জনের ভাষা if
এবং নির্মাণগুলি for
সি / জাভা প্রোগ্রামারদের জন্য পরিচিত। তবে কিছুক্ষণের জন্য টারজন কীওয়ার্ডটি হ'ল do
। সমস্ত- do
লুপগুলি কীওয়ার্ডের সাথে শেষ হয় od
যা এর পিছনের দিকের বানান do
। নীচে একটি উদাহরণ দেওয়া হল:
sum := 0
do sum < 50 → sum := sum + 1
সি-স্টাইলের সিউডোকোডে, আমাদের রয়েছে:
sum = 0;
while(sum < 50) {
sum = sum + 1;
}
উপরেরটি আসলে বেশ সঠিক নয়। একটি টারজান ডু-লুপটি সত্যিকার অর্থে সি / জাভা while(true)
হয় যদি ভিতরে অন্য ভিতরে বাধা থাকে block টারজান কোডের আরও আক্ষরিক অনুবাদ নীচে রয়েছে:
sum = 0;
while(true) {
if (sum < 50) {
sum = sum + 1;
continue;
// This `continue` statement is questionable
}
break;
}
নীচে, আমাদের আরও জটিল do
টার্জন-লুপ রয়েছে:
sum := 0
do sum < 50 → sum := sum + 1 | sum < 99 → sum := sum + 5
জটিল do
টারজন-লুপের জন্য সি / জাভা-স্টাইলের সিউডোকোডটি নিম্নরূপ:
sum = 0;
while(true) {
if (sum < 50) {
sum = sum + 1;
continue;
}
else if (sum < 99) {
sum = sum + 5;
continue;
}
break;
}
(9) সমস্ত মিথ্যা শর্ত সহ টার্জনের শর্তসাপেক্ষ-অ্যাসাইনমেন্ট অপারেটর
যদিও উপরের দীর্ঘ বিবরণটি বেশিরভাগ জিনিসকে কভার করে, কয়েকটি বিষয় এখনও অমীমাংসিত থেকে যায়। আমি আশা করি যে কেউ অন্য দিন আমার উপর ভিত্তি করে একটি নতুন উন্নত উত্তর লিখবে যা এই প্রশ্নগুলির উত্তর দেয়।
উল্লেখযোগ্যভাবে, যখন শর্তসাপেক্ষ অ্যাসাইনমেন্ট অপারেটর := if
ব্যবহার করা হয় এবং কোনও শর্ত সত্য হয় না তখন আমি ভেরিয়েবলের জন্য নির্ধারিত মানটি না not
x := if (False --> 1| False --> 2 | (99 < 2) --> 3) fi
আমি নিশ্চিত নই, তবে এটি সম্ভবত সম্ভব যে কোনও কাজ করা হয়নি x
:
x = 0;
if (false) {
x = 1;
}
else if (false) {
x = 2;
}
else if (99 < 2) {
x = 3;
}
// At this point (x == 0)
আপনার প্রয়োজন হতে পারে যে বাম-পাশের ভেরিয়েবলটি একটি তে দেখা উচিত := if
বিবৃতিতে আগে ঘোষণা করা উচিত। সেক্ষেত্রে সমস্ত শর্তটি মিথ্যা হলেও ভেরিয়েবলের এখনও একটি মান থাকবে।
বিকল্পভাবে, সম্ভবত সমস্ত-মিথ্যা শর্তগুলি রানটাইম ত্রুটির প্রতিনিধিত্ব করে। আরেকটি বিকল্প হ'ল একটি বিশেষ null
মান ফেরত দেওয়া , এবং null
অ্যাসাইনমেন্টের বাম-হাতের যুক্তিতে সংরক্ষণ করা।