This is a bilingual snapshot page saved by the user at 2025-7-9 23:55 for https://app.immersivetranslate.com/html/, provided with bilingual support by Immersive Translate. Learn how to save?

00:00:03

[موسیقی] سب کو ہیلو، میں آپ کی شردھا دیدی ہوں اور ہمارے کالج میں خوش آمدید۔ آج کے C ٹیوٹوریل میں، ہم نے بنیادی باتوں سے لے کر ایڈوانس تک پورے C کا احاطہ کیا ہے۔ لہذا اس ویڈیو کو دیکھنے کے بعد آپ کوڈنگ پروگرامنگ سیکھیں گے اور اگر آپ کے کالج میں کوئی امتحان ہے جس میں C پوچھا گیا ہے تو آپ اس کے لیے پوری طرح تیار ہوں گے۔ ہم نے اس ٹیوٹوریل کو 11 ابواب میں تقسیم کیا ہے، جس کے تحت آپ کو ٹائم اسٹمپس ملیں گے۔ لہذا، اگر آپ انفرادی طور پر کسی بھی موضوع کا مطالعہ کرنا چاہتے ہیں، تو آپ جا کر اس کا بھی مطالعہ کر سکتے ہیں۔ ابواب کے ساتھ، ہم نے 100 فراہم کیے ہیں۔



00:00:42

اس ویڈیو میں سوالات شامل کیے گئے ہیں جن میں سے میں نے ذاتی طور پر آپ کو 70 سوالات اپنے سامنے حل کرنے پر مجبور کیا ہے اور میں نے آپ کی پریکٹس کے لیے ہوم ورک میں 30 سوالات دیے ہیں۔ اس کے ساتھ، آپ کو نیچے دی گئی ویڈیو کے ساتھ تمام کوڈز یا نوٹوں کا لنک بھی مل جائے گا تاکہ آپ ٹیوٹوریل مکمل کرنے کے بعد، آپ کسی بھی وقت مفت میں آکر نظر ثانی کر سکیں۔ اس کے ساتھ اگر کوئی ایسی چیز ہے جو آپ کو اہم لگتی ہے یا آپ مجھے بتانا چاہتے ہیں تو آپ مجھے نیچے کمنٹ کر کے بتا سکتے ہیں اور درمیان میں اگر آپ کو کوئی معلومات درکار ہوں تو



00:01:12

اگر آپ کسی بھی لیکچر یا کسی بھی موضوع کو بک مارک کرنا چاہتے ہیں، تو نیچے اس کا وقت لکھیں اور اس پر تبصرہ کریں، پھر اگلی بار جب ہم آئیں گے تو ہم وہ تبصرہ سب سے اوپر دیکھیں گے۔ تو آئیے اپنے تازہ ترین اور سب سے بڑے C ٹیوٹوریل کے ساتھ شروعات کریں۔ لہذا C میں کوڈنگ کرنے سے پہلے ہمیں اپنے سسٹم میں دو چیزیں انسٹال کرنی ہوں گی جن میں سے پہلی ہمارا VS Code یعنی کوڈ ایڈیٹر ہے۔ اب کوڈ ایڈیٹر ایک نوٹ بک کی طرح ہے، جس طرح ہم نوٹ بک میں انگریزی اور ہندی میں چیزیں لکھتے ہیں، اسی طرح ہم اپنا کوڈ بھی لکھتے ہیں۔



00:01:42

ہم ایڈیٹر پر کچھ کوڈ لکھتے ہیں اور کوڈ ایڈیٹر جو ہم استعمال کریں گے اسے VS کوڈ کہتے ہیں۔ اب اس کے علاوہ، آپ نے دیکھا ہوگا کہ کالجوں اور اسکولوں میں کچھ لوگ کوڈ بلاکس پر کام کر رہے ہیں، کچھ لوگ کسی اور سافٹ ویئر پر کام کر رہے ہیں، لیکن یہاں ہم VS کوڈ استعمال کر رہے ہیں کیونکہ یہ ایک بہت اچھا سافٹ ویئر ہے اور اس میں آپ نہ صرف C پروگرامنگ کر سکتے ہیں، بلکہ اس کے بعد اگر آپ C++، Java یا کسی اور زبان میں پروگرامنگ کرنا چاہتے ہیں، تو اس کے لیے بھی ہم نے آپ کے لیے Atmosphere کو مکمل طور پر تیار کر رکھا ہے۔



00:02:10

ہم آپ کو دیں گے تاکہ آپ کو کچھ اور انسٹال نہ کرنا پڑے۔ تو شروع سے ہی، جب ہم ایک اچھے کوڈ ایڈیٹر پر کام کرتے ہیں، تو اس کے بہت سے فائدے ہوتے ہیں۔ دوسری چیز جو ہمیں انسٹال کرنی ہوگی وہ ہمارا کمپائلر ہے، جس کے لیے ہم جی سی سی کو تلاش کریں گے۔ اب کمپائلر ایک ایسا سسٹم، ایسا سافٹ ویئر ہے جس میں ہماری پروگرامنگ لینگویج کے اصول لکھے جاتے ہیں۔ تو ایک سی کمپائلر ہوگا جس میں سی زبان کے تمام اصول لکھے جائیں گے۔ اس لیے آپ جو بھی کوڈ لکھیں گے، اپنا کوڈ لکھنے کے بعد یہ چیک کرے گا کہ آپ نے کوڈ صحیح لکھا ہے یا نہیں۔



00:02:40

یہ لکھا ہوا ہے اور کمپائلر اس کوڈ کو چلانے کا کام بھی کرتا ہے، اس لیے ہم کمپائلرز کے بارے میں بعد میں تفصیل سے پڑھیں گے، اب سب سے پہلے ہم اپنا کوڈ ایڈیٹر یعنی VS کوڈ انسٹال کرتے ہیں، اس لیے VS کوڈ کو انسٹال کرنے کے لیے، سب سے پہلے ہمیں اپنی اسکرین پر ونڈوز کے لیے VS کوڈ لوڈ کرنا ہوگا، اب یہاں پہلا آپشن ہمارے پاس آئے گا کہ اب ہم ونڈوز کے لیے کون سی لسٹ ڈاؤن لوڈ کرنا چاہتے ہیں، اس کے بعد ہمارے پاس کون سا لسٹ ڈاؤن لوڈ کرنا ہے۔ do تمام چیک باکسز کو نشان زد کرتا ہے، اوپر والا کہتا ہے کہ ڈیسک ٹاپ



00:03:40

لیکن اگر ہمارے لیے ایک آئیکون بنتا ہے اور نیچے ہمیں پاتھ وغیرہ کے بارے میں بہت سی معلومات دی جاتی ہیں تو ہم تمام چیک باکسز کو ٹک کریں گے اور اس کے بعد ہم اسے انسٹال کریں گے، پھر آخر کار ہمارے لیے VS کوڈ انسٹال ہو جائے گا اور ہم ختم پر کلک کریں گے۔ اب اس کے بعد ہم سسٹم میں جا کر VS کوڈ تلاش کر سکتے ہیں۔ وی ایس کوڈ کو تلاش کرنے کے بعد یہ کھل جائے گا اور ہماری اسکرین پر اس طرح کی کوئی چیز نظر آئے گی، جس میں سب سے پہلے ہم کسی تھیم کا انتخاب کرسکتے ہیں، یہ ہماری مرضی ہے کہ ہم لائٹ تھیم کا انتخاب کریں یا ڈارک تھیم کا۔



00:04:10

تو ہم اندھیرے کے ساتھ جائیں گے، اس کے بعد آپ کو اگلے حصے میں جانا پڑے گا، اگر ہم چاہیں تو ہم گٹ کو بھی انسٹال کر سکتے ہیں، لیکن ہم ابھی گٹ پر کام نہیں کریں گے، ہم اسے ابھی انسٹال نہیں کریں گے اور اسے مکمل کے طور پر نشان زد کریں گے۔ اب VS کوڈ کے اندر، ہمیں ایک نئی فائل کھولنی ہے جس میں ہم چیزیں لکھ سکتے ہیں، پھر ہم نئی فائل پر کلک کر سکتے ہیں اور ایسی فائلوں کے اندر ہم پروگراموں کو مختلف کوڈ لکھ رہے ہوں گے۔ اب یہاں ہم نے VS کوڈ ڈاؤن لوڈ کر لیا ہے، لیکن اگر آپ کسی دوسرے کوڈ ایڈیٹر پر بھی کام کرنا چاہتے ہیں، تو آپ نے اسے پہلے ہی ڈاؤن لوڈ کر لیا ہے۔



00:04:37

تو آپ اسے بھی استعمال کر سکتے ہیں۔ ہم وہی کوڈ استعمال کریں گے۔ دوسری چیز جسے ہم ڈاؤن لوڈ کریں گے وہ ہے C کمپائلر۔ اب سی کمپائلر کو ڈاؤن لوڈ کرنے کے لیے سب سے پہلے ہمیں chromecast.com لکھنا ہوگا۔ آپ اسے دیکھیں گے۔ ہمیں اس پر کلک کرنا ہے اور ہمارے لیے ڈاؤن لوڈ شروع ہو جائے گا۔ پہلی ونڈو جو ظاہر ہوگی وہ ایک پاپ اپ ہوگی۔ اس پر انسٹالیشن ڈائرکٹری کے اندراجات ڈاؤن لوڈ ہوتے رہیں گے۔ اس کے بعد ایک ونڈو کھلے گی جس میں وہ ہم سے پوچھے گی کہ ہم کون سے دوسرے پیکجز ڈاؤن لوڈ کرنا چاہتے ہیں۔ تو اس میں ہمیں جو چیک باکس ملے گا وہ ہوگا۔



00:05:24

یہ مختلف زبانوں کے لیے ہیں، اب ہم کیا کریں گے وہ سب کے لیے بنیادی ڈاؤن لوڈ کریں، اس لیے انسٹال کرتے وقت ہمیں سب پر کلک کرنا ہوگا، یعنی سب کے لیے چیک باکس پر نشان لگائیں، پھر بائیں جانب جا کر انسٹالیشن کا آپشن آئے گا، ہمیں انسٹالیشن کے آپشن پر کلک کرنا ہوگا اور پھر اپلائی چینجز پر کلک کرکے ہمیں اپنے پیکجز سب کے لیے ڈاؤن لوڈ کرنے ہوں گے، اس لیے یہ پیکجز کچھ وقت کے بعد ڈاؤن لوڈ ہو سکتے ہیں، اس لیے آپ کے انٹرنیٹ کی رفتار کے مطابق تھوڑی دیر کے بعد یہ پیکجز آپ کے لیے تھوڑا انتظار کریں گے۔ ڈاؤن لوڈ



00:05:54

نہیں، اس کے بعد ہمارے سامنے آئے گا کہ تمام تبدیلیاں کامیابی کے ساتھ لاگو ہو گئی ہیں، پھر ہم اس چیز کو بند کر دیں گے۔ تو اب ہم نے کوڈ ایڈیٹر یعنی وی ایس کوڈ ڈاؤن لوڈ کر لیا ہے، ہم نے سی کے کمپائلر کو ڈاؤن لوڈ اور انسٹال کر لیا ہے، لیکن ایک چھوٹی سی چیز رہ گئی ہے اور وہ ہے ہمارا ماحولیاتی تغیر۔ اب ماحولیاتی تغیر کیا ہے یا اس مرحلے میں ہم بالکل کیا کر رہے ہیں، ہم اس کی تفصیل میں نہیں جائیں گے۔ بنیادی بات یہ سمجھنے کی ہے کہ اگر آپ اپنے سسٹم میں سی کوڈ چلانا چاہتے ہیں تو اس سے پہلے آپ کو ان تمام مراحل پر عمل کرنا ہوگا۔



00:06:23

اس کے لیے سب سے پہلے ہم جو کریں گے وہ یہ ہے کہ ہم اپنے کمپیوٹر کے سسٹم میں موجود فائلز میں جائیں گے اور اس میں ہم اس پی سی پر جائیں گے، اس پی سی کے اندر ہم ماجد کے فولڈر کو تلاش کریں گے، سرچ کرنے کے بعد ہمیں ماجد کے فولڈر میں جانا ہے، اس کے اندر ہمیں بن کے فولڈر میں جانا ہے، اس طرح بن کے فولڈر میں جب مکمل پاتھ ظاہر ہوگا تو اس کے اوپر کون سا لائٹ پاتھ ہوگا، جب ہمیں ایک لائٹ پر کلک کریں گے۔ ماجد بن کو چلاو، ہمیں اس پورے راستے کو کاپی کرنا ہے کیونکہ ہمیں اسے اپنے سسٹم میں کاپی کرنا پڑے گا۔



00:06:58

جو لوگ اسے ماحولیاتی متغیر میں شامل کرنا چاہتے ہیں وہ دائیں کلک کریں گے اور اسے کاپی کریں گے۔ اب ہمیں کیا کرنا ہے اب ہمیں اپنے کمپیوٹر میں کنٹرول پینل کو تلاش کرنا ہے، کنٹرول پینل کے اندر ہم سسٹمز میں جائیں گے، سسٹمز کے اندر ہم ایڈوانس سسٹم سیٹنگز میں جائیں گے، اب جیسے ہی ہم ایڈوانس سسٹم سیٹنگز پر جائیں گے، سکرین پر ایک پاپ اپ آئے گا، جس کے اندر ہمیں اس Environment variable آپشن پر جانا ہے، پھر ایک اور انوائرمنٹ ویری ایبل آپشن ہمارے پاس آئے گا، اس سسٹم کے اندر variable آپشن کے اندر ان ویری ایبل آپشن موجود ہیں۔



00:07:31

ہمیں راستہ تلاش کرنا ہے، جیسے ہی ہمیں راستہ مل جائے گا، ہمیں راستے پر جانا ہے، جیسے ہی ہمارا نیلا کرسر راستے پر آئے گا، ہم اسے ایڈٹ کریں گے، اس لیے ہم راستے کو ایڈٹ کریں گے، اس میں ہم ایک نئے راستے کو ایڈٹ کریں گے اور نئے راستے کے اندر، ہم اس مقام کو کاپی کریں گے جس میں ہمارا ماجد کا بن فولڈر موجود ہے، ہم نے اس لوکیشن کو کاپی کیا ہے، پھر ہم نے اس لوکیشن کو کاپی کیا ہے، پھر ہم اس لوکیشن کو کاپی کریں گے، پھر اس لوکیشن کو دبائیں گے۔ ٹھیک ہے دوبارہ KK اور آخر میں آخری ٹھیک ہے، تو اس طرح، ہمارے متغیر کے اندر، پاتھ متغیر کے اندر، ہمارے پاس ہے



00:08:06

آپ نے اپنے پسندیدہ بن کا راستہ شامل کر دیا ہے، اب ہم وی ایس کوڈ کھولیں گے اور اب ہم جو کرنے جا رہے ہیں وہ یہ ہے کہ ایک نمونہ کوڈ لکھنا ہے، میں اسے چلا کر آپ کو دکھاؤں گا، جس میں ہمیں اب یہ سمجھنے کی ضرورت نہیں ہے کہ C میں پروگرامنگ کیسے ہوتی ہے یا چیزیں کیسے چلتی ہیں یا جو کچھ ہم لکھ رہے ہیں اس کا کیا مطلب ہے، ہمیں صرف یہ دیکھنا ہے کہ جیسے ہی ہم نے اپنا کوڈ سیٹ کیا ہے، ہم اپنا سیمپل کوڈ لکھنے کے لیے کوئی بھی کوڈ کھولیں گے، لہذا میں اپنا کوڈ کھولنے کے لیے اپنا ماحول بنا رہا ہوں۔ فائل، تو VS کوڈ کے اندر ہم ایک نئی فائل کھولنے جا رہے ہیں، اس نئی فائل میں



00:08:37

سب سے پہلے، فائل کو h world.con کے طور پر محفوظ کرتے ہیں۔ ایسا کرنے سے پہلے، VS کوڈ میں کچھ ایکسٹینشنز ہیں جنہیں ہمیں انسٹال کرنا ہے تاکہ VS کوڈ سمجھ سکے کہ آپ کون سا کوڈ چلانے جا رہے ہیں اور اس کے لیے کچھ اضافی فنکشنلٹیز فراہم کر سکتے ہیں۔ تو نیچے آپ کو ایکسٹینشن کا آپشن ملے گا۔ اب، C چلانے کے لیے، ہمیں اپنے VS کوڈ میں c c+p کا ایکسٹینشن پیک انسٹال کرنا ہوگا۔ اسے انسٹال کرنے کے بعد، ہم اوپر والے ٹرمینل پر جائیں گے اور ایک نیا ٹرمینل کھولیں گے۔ اب، میں کچھ کمانڈ لکھوں گا۔



00:09:20

میں بہت پیچیدہ چیزیں لکھ کر بہت اچھے ایڈوانس لیول سی پروگرام لکھنے جا رہا ہوں، اس لیے مجھے پریشان ہونے کی بالکل ضرورت نہیں ہے، اس لیے میں نے کچھ کوڈ لکھا، نیچے کمانڈز لکھیں اور جیسے ہی میں کمانڈ لکھوں گا، ہیلو ورلڈ میری سکرین پر پرنٹ ہو جائے گی اور آپ دیکھیں گے کہ اوپر والے کوڈ کے اندر بھی پرنٹ f جیسا کچھ لکھا ہوا ہے، جس کے اندر میں نے اپنی سکرین پر ہیلو ورلڈ لکھا ہے، اس لیے میں نے اسے نیچے سکرین پر ہیلو ورلڈ لکھا ہے۔ تو اس طرح ہمارے C



00:09:53

کوڈ کو کام کرنے کے لیے بہت سی الگ الگ ویڈیوز بھی بنائی گئی ہیں، اس لیے اگر آپ کو انسٹالیشن کے دوران کوئی شک ہو تو آپ جا کر وہ مخصوص ویڈیو دیکھ سکتے ہیں اور اس میں آپ کے بہت سے شبہات دور ہو جائیں گے۔ اب اپنا C کوڈ لکھنے کے لیے، ہم سب سے پہلے ایک فائل بنائیں گے۔ فائل بنانے کے لیے فائل ٹاپ پر جائیں اور وہاں اوپن پر کلک کریں۔ اب اوپن کے نیچے، ہمیں آپشن ملے گا کہ اگر ہمارے پاس کوئی پرانا فولڈر ہے تو ہم اسے کھول سکتے ہیں، لیکن ہم ایک نیا فولڈر بنانے جا رہے ہیں۔



00:10:26

جسے ہم C Tutorials کا نام دیں گے۔ ہم اس C فولڈر کو کھولنے جا رہے ہیں۔ اب ہمارے پاس ایک اوپن فولڈر ہے، اس کے اندر کوئی فائل نہیں ہے، اس لیے سب سے پہلے ہم ایک C فائل ڈالیں گے، جیسا کہ ہم پہلے کیا کرتے تھے، ہم اسکول میں پریکٹیکل فائلیں بناتے تھے، جس میں ہم تمام چیزیں لکھتے تھے، اسی طرح یہاں ہم ایک فائل بنائیں گے جس میں ہم اپنے تمام کوڈ لکھنے جارہے ہیں۔ فائل بنانے کے لیے، ہم اس آئیکون پر کلک کریں گے اور ہم اپنی فائل کا نام ہیلو رکھیں گے۔ C. تو یہاں ہماری فائل آ گئی ہے، یہاں سے ہم اسے بند کر دیں گے۔ اب یہاں ہم نے فائل کا نام دیا ہے۔



00:11:01

h اگر ہم اپنی فائل کو کوئی بھی نام دے سکتے ہیں تو ممکن ہے کہ ہم اسے پہلے پروگرام کے طور پر لکھنا چاہیں اس لیے ہم پہلا پروگرام لکھ سکتے ہیں s اس ڈاٹ ایس کو ایکسٹینشن کہا جاتا ہے جیسے کہ اگر ہم کبھی بھی vj سسٹم میں نوٹ پیڈ میں tekt فائل بناتے ہیں تو اسے abc.xyz لکھتے تھے اسے ڈاٹ پیوا لکھا جاتا تھا اس لیے ایکسٹینشن بتاتی ہے کہ اس کے اندر کیا ہے اور C کی ایکسٹینشن ہمیں بتا رہی ہے کہ سی فائل کے اندر کیا ہے۔ فائل اب ہم اس فائل کے اندر کیا کریں گے ایک نمونہ کوڈ



00:11:44

ہم C لکھیں گے۔ اس کوڈ کے ذریعے ہم سمجھیں گے کہ C لکھنا کتنا آسان ہے۔ اور جیسا کہ لوگ ہمیں بتاتے ہیں، پروگرامنگ کوڈنگ ایک بہت مشکل چیز ہے، یہ اتنی بڑی چیز نہیں ہے۔ یہ بہت آسان ہے۔ اس میں ہم چند باتیں لکھیں گے جو ابھی ہماری سمجھ میں نہیں آئیں گی، لیکن جیسے ہی ہمارا پہلا باب مکمل ہوگا، تمام چیزیں واضح ہو جائیں گی۔ تو یہاں ہم کچھ ایسی چیزیں لکھنے جا رہے ہیں جو شاید ایک اجنبی زبان کی طرح لگتی ہیں، std ad a int main print f hello world return row۔ اب یہاں ہم نے ہیلو ورلڈ لکھا ہے۔ اب یہ اس طرح کا کنونشن ہے کہ جو بھی نیا ہو۔



00:12:22

جب آپ کوئی پروگرامنگ لینگویج سیکھتے ہیں تو اس میں پہلا کوڈ یعنی کوڈنگ کی دنیا کا قاعدہ یہ ہے کہ آپ کو پہلا کوڈ ہیلو ورلڈ لکھنا ہے، اس لیے ہم نے اس کا کوڈ لکھا ہے، اس کوڈ کا کام ہیلو ورلڈ کو اسکرین پر پرنٹ کرنا ہے، تو دیکھتے ہیں کہ ہم اسے کیسے کرتے ہیں، آئیے اسے محفوظ کرتے ہیں اور کسی بھی سی کوڈ کو چلانے کے لیے ہمیں ٹرمینل تک جانا پڑتا ہے اور ہم سب سے پہلے ایک نئی ٹرم کھولیں گے، gccinal ٹرمینل کی ایک نئی لائن لکھیں گے۔ یہاں، یہ جی سی سی سی کے لیے ہمارا کمپائلر ہے، لہذا ہم اس کمپائلر کو طلب کر رہے ہیں۔



00:12:54

اور اس کے بعد ہم اپنی فائل کا نام لکھیں گے، تو بنیادی طور پر ہم جو کہہ رہے ہیں وہ کوڈ کمپائل کرنا ہے جو ہم نے اپنی فائل میں لکھا ہے، یہ کمپائل اتنا مشکل لفظ ہے، یہ بھی باب اول کے آخر میں واضح ہو جائے گا، اس لیے ہم نے فائل کو کمپائل کر لیا، اب ہم اسے چلائیں گے، کوڈ کو کیسے چلائیں گے، ہم اسے لکھیں گے / ایڈڈ آؤٹ کریں گے بطور ڈیفالٹ ایک فائل بن جاتی ہے، جس کا آؤٹ پٹ ہو جاتا ہے، تو اسے ختم کر دیا جاتا ہے۔ یہ ہمارے لیے ہیلو ورلڈ پرنٹ کرے گا، اب ونڈوز پر موجود کوڈرز کو یہاں ڈاٹ a.exe لکھنا پڑے گا کیونکہ



00:13:28

ونڈوز میں بطور ڈیفالٹ a.exe فائل بنائی جاتی ہے جس کی ایکسٹینشن dt ہوتی ہے جس کا مطلب ہے ایگزیکیوٹیبل فائل لیکن ہمارے طلباء بہت سادہ اور بہت منطقی ہوتے ہیں اگر ہم تھوڑی بہت کوڈنگ سیکھ لیں تو ہمیں پتہ چل جائے گا کہ ہم اس سے کتنی دلچسپ چیزیں بنا سکتے ہیں۔ تو ہم نے اپنا ہیلو ورلڈ پروگرام لکھا ہے۔ اس میں بنیادی کیا ہے، کیا شامل ہے، یہاں ہیش کیوں لکھا گیا، صفر کیوں لکھا گیا، ان سب کا مطلب ہم آہستہ آہستہ سمجھیں گے اب اپنے باب اول میں ہم کچھ بات کریں گے۔



00:14:20

ہم بنیادی تصورات پڑھیں گے جن کو پڑھنے کے بعد ہم پروگرامنگ کو سمجھنا شروع کر دیں گے۔ اس میں سب سے پہلے ہم متغیرات کے بارے میں پڑھنے جا رہے ہیں، کلیدی الفاظ کیا ہیں، ہمارے مستقل کیا ہیں، اور تبصرے کیسے لکھے جاتے ہیں، بنیادی C پروگرام کی ساخت کیا ہے جسے ہم نے ابھی لکھا ہے اور ہم نے کمپلیشن کے بارے میں بات کی ہے، اس مشین پر ہمارا کوڈ دراصل کیسے چل رہا ہے، اس کمپیوٹر پر، ہم یہ سب کچھ صرف اپنے باب اول میں پڑھیں گے اور وہ سب چیزیں سیکھیں گے۔



00:14:47

ہم اس متغیر کے ساتھ شروع کرنے جا رہے ہیں. اگر ہم متغیر کی تعریف کے بارے میں بات کرتے ہیں، تو یہ میموری کی جگہ کا نام ہے جو کچھ ڈیٹا کو محفوظ کرتا ہے۔ اب ایک متغیر میموری کی جگہ کا نام ہے۔ جب بھی ہمیں کوئی چیز ذخیرہ کرنی ہوتی ہے تو سب سے پہلے اس کے لیے جگہ کی ضرورت ہوتی ہے۔ مثال کے طور پر فرض کریں کہ ہم نے کچھ جوتے رکھنے ہیں تو جوتوں کے لیے ڈبے ہیں، کسی بھی دکان میں ہر ڈبے کے اندر کئی جوتے ہوتے ہیں۔ ایڑیاں ایک ڈبے کے اندر رکھی جائیں گی، چپل ایک ڈبے کے اندر رکھی جائے گی، تو وہ چپل ہیلس ہیں، وہ جوتے کھیل کے جوتے ہیں، یہ سب ہمارا ڈیٹا ہے۔



00:15:19

اور ہم اس باکس کو ایک کنٹینر کہہ سکتے ہیں، جس کے اندر ہمارا ڈیٹا محفوظ ہے اور اگر ہم اس کنٹینر کو کوئی نام دیں تو وہ نام ہمارا متغیر ہوگا۔ اسی طرح جب ماں باورچی خانے میں بہت سارے مصالحے رکھتی ہے تو فرض کریں کہ ایک ڈبہ ہے جس میں دال رکھی ہے، ایک ڈبہ ہے جس میں ہلدی رکھی ہے، ایک ڈبہ ہے جس میں نمک رکھا ہوا ہے، تو ان ڈبوں کے اندر ہمارا ڈیٹا ہوتا ہے، یعنی ہماری کھانے پینے کی کچھ چیزیں موجود ہوتی ہیں، باہر کے برتن کو متغیر کہا جاتا ہے۔ اب اسی طرح کمپیوٹر بھی کچھ ڈیٹا محفوظ کرتا ہے۔



00:15:49

یہ ڈیٹا کہاں ذخیرہ ہوتا ہے، فرض کریں کہ یہ ہمارے کمپیوٹر کی میموری ہے اور اس کے اپنے کچھ باکس ہیں اور اس میموری کے اندر، اگر ہم 25 نمبر کو ذخیرہ کرنا چاہتے ہیں، تو ہم اسے ایک باکس میں محفوظ کریں گے اور ہم اس باکس کو ایک نام دیں گے، یہاں کا نام a ہے اور ہم اسے متغیر کہتے ہیں، اب فرض کریں کہ اس کے بعد ہم ایک کریکٹر کو اسٹور کرنا چاہتے ہیں اور اس میموری میں ایک نیا کریکٹر اسٹور نہیں کریں گے، اس کے بعد ایک نیا نمبر ذخیرہ کریں گے۔ باکس، ہم اس میموری لوکیشن کو b کا نام دیں گے اور اس b کو کیا کہا جائے گا، اسے کہا جائے گا۔



00:16:23

ہمارا متغیر یہ ہے کہ اگر ہم میموری میں کسی بھی چیز کو ذخیرہ کرتے ہیں، تو جب ہم اس میموری کی جگہ کو ایک نام دیتے ہیں، جب ہم اس باکس کو ایک نام دیتے ہیں، تو ہم اسے متغیر کہتے ہیں۔ اب اصل میں متغیر کو کیسے لاگو کیا جائے، آئیے اس کا کوڈ لکھ کر دیکھتے ہیں۔ ہم اس لائن کو تھوڑا سا حذف کر دیں گے۔ یہ پورا کوڈ ہمارا ڈیفالٹ کوڈ ہے، جس کا مطلب ہے کہ ہم اسے ہر بار لکھیں گے۔ ابھی ہمیں اس پر توجہ نہیں دینی چاہیے، ابھی ہمیں درمیان میں کچھ حصے پر توجہ دینا ہے، فرض کریں کہ ہم 25 نمبر کو ذخیرہ کرنا چاہتے ہیں، تو ہم یہاں کریں گے۔



00:16:52

ہم لکھیں گے int نمبر 25 کے برابر ہے تو اس ایک لائن کی وجہ سے ہمارا نمبر 25 اس باکس کے اندر جا کر میموری میں محفوظ ہو گیا اور یہاں ہم نے اس باکس کا نام نمبر رکھا ہے۔ اسی طرح اگر ہم کسی بھی کریکٹر، care star i equal to star کو ذخیرہ کرنا چاہتے ہیں تو ہم نے اپنے کی بورڈ پر جو ستارہ کھینچا ہے اسے میموری میں محفوظ کر لیا ہے اور اس متغیر کا نام ستارہ رکھا ہے۔ اسی طرح اگر ہم عمر کو ذخیرہ کرنا چاہتے ہیں تو ہم 22 کے برابر int a i لکھیں گے تو یہاں ہم نے اپنی 22 سال کی عمر کو میموری میں محفوظ کیا ہے اور اس مقام کا نام رکھا ہے۔



00:17:29

جہاں تک میرا تعلق ہے، یہاں int کیا ہے، کردار کیا ہے، ہم اسے فی الحال نظر انداز کریں گے اور صرف اس لائن پر توجہ مرکوز کریں گے۔ اسی طرح، فرض کریں کہ ہمیں ایک اعشاریہ قدر ذخیرہ کرنا ہے، تو ہم float Pa = 3.14 لکھیں گے۔ لہذا، Pi کی یہ ویلیو، 3.14، بھی اب میموری میں محفوظ ہو گئی ہے اور ہم نے اس میموری لوکیشن، اس کنٹینر کا نام Pi رکھا ہے۔ تو اس طرح ہم اپنی میموری میں کوئی بھی نمبر، کوئی بھی ویلیو محفوظ کر سکتے ہیں اور ہم اس کنٹینر کا نام یاد رکھ سکتے ہیں جہاں یہ ذخیرہ ہے۔ تو، ہم اسے ایک متغیر کہہ سکتے ہیں۔



00:18:04

کہا جاتا ہے کہ اب سی میں متغیر لکھنے کے کچھ اصول ہیں، ان میں سے ہمارا پہلا اصول یہ ہے کہ متغیر کیس حساس ہے۔ اسے کیس سینسیٹیو کہنے کا کیا مطلب ہے کہ چھوٹا اور بڑا الگ الگ ہوگا، ہمارا سرمایہ اور چھوٹا اے الگ ہوگا، ہم انہیں ایک جیسا نہیں سمجھ سکتے۔ مثال کے طور پر، اگر ہم نمبر 30 کو ذخیرہ کرنا چاہتے ہیں، تو ہم int a = 30 لکھ سکتے ہیں، اس طرح 30 میموری میں محفوظ ہو جاتا ہے اور ہم نے اس جگہ کا نام رکھا جہاں اسے محفوظ کیا گیا تھا۔ اب ہم ایک اور نمبر 40 ذخیرہ کرنا چاہتے ہیں، لہذا اگر ہم int a = 40 لکھیں۔



00:18:39

لہذا ہم نے دوسری جگہ پر 40 کو ذخیرہ کیا ہے اور ہم نے اس مقام کا نام کیپیٹل اے رکھا ہے۔ یہاں یہ sl a اور یہ کیپٹل a دونوں مختلف متغیر ہیں، ایک جیسے نہیں۔ دوسرا قاعدہ جو c متغیرات کے بارے میں کہتا ہے کہ پہلا حرف حروف تہجی اور انڈر سکور ہے۔ اس کا مطلب یہ ہے کہ متغیر کے نام میں جو بھی ہمارا پہلا کریکٹر ہے وہ یا تو عام انگریزی کریکٹر ہو سکتا ہے یا اسے انڈر سکور کیا جا سکتا ہے۔ اس کے علاوہ اس کی کوئی قیمت نہیں ہو سکتی۔ مثلاً عمر کو ذخیرہ کرنا تھا تو یہاں کیا لکھا؟



00:19:12

لیکن ہم نے int edge لکھا تھا، ہم اسے int A = 22 اس طرح بھی لکھ سکتے تھے، لیکن ہم اسے int A = 22 کی طرح نہیں لکھ سکتے کیونکہ یہاں ہماری سرخ لکیر آئے گی اور یہ غلط ہو جائے گی۔ یہاں اگر ہم ایک کنارہ بھی لکھنا چاہیں تو وہ سرخ ہو جائے گا، یعنی غلط۔ صرف کوئی انگریزی کردار یا انڈر سکور آگے آ سکتا ہے۔ متغیر کے نام پر ہمارا تیسرا قاعدہ کہتا ہے کہ کوئی کوما اور خالی جگہ نہیں ہے، اس کا مطلب ہے کہ متغیر کے نام میں نہ تو کوئی کوما ہو سکتا ہے اور نہ ہی کوئی خالی جگہ۔ مثال کے طور پر، اگر ہمیں کوئی حتمی قیمت ذخیرہ کرنا ہے، تو ہم int final لکھیں گے۔



00:19:47

انڈر سکور کی قیمت EE ₹1 اب یہ انڈر سکور واحد خاص کریکٹر نہیں ہے جو ہمارے متغیر کے نام پر آ سکتا ہے۔ فرض کریں کہ اگر ہم یہاں اس انڈر سکور کی جگہ اسپیس ڈالیں گے تو ہمیں ایک ایرر آئے گا کیونکہ ہم ویری ایبل کے نام پر اسپیس نہیں رکھ سکتے۔ یا اگر ہم نے اسپیس کی جگہ کوما لگا دیا ہوتا تو ہمیں بھی غلطی ہوتی کیونکہ ہم کوما بھی نہیں لگا سکتے۔ ہم متغیر میں صرف ایک خاص کریکٹر استعمال کر سکتے ہیں جو کہ انڈر سکور ہے، جو ہمیں چوتھے اصول پر لے آتا ہے جو انڈر سکور کے علاوہ کوئی دوسری علامت نہیں ہے۔



00:20:19

اب ویری ایبل کے بارے میں ایک خاص بات یہ ہے کہ ویری ایبل کی ویلیو متعین نہیں ہوتی، یہ بدل بھی سکتی ہے، جیسا کہ ہم نے اپنے ایج ویری ایبل کی تعریف کی ہے کیونکہ آج کی تاریخ تک ہماری عمر 22 سال ہے، لیکن کل یعنی 2 سال کے بعد ہماری عمر اپڈیٹ ہونے کے بعد 24 ہو جائے گی، تو ہم اسے کیسے لکھیں گے کہ عمر 24 کے برابر ہے، تو پہلے ہماری عمر کے متغیر، i2 کے بعد اس کی لوکیشن i2، i2 کے بعد اسٹور تھی۔ سال ہم نے اپنی عمر میں 24 کو ذخیرہ کیا ہے، اس طرح ہم کسی بھی متغیر کی قدر کو اپ ڈیٹ کر سکتے ہیں، اس طرح وہ متغیرات جو ہمارے کوڈ کے اندر ہیں



00:20:54

وہ بدلتے رہتے ہیں اور درحقیقت variable کا انگریزی مفہوم بھی ایک ایسی چیز ہے جو بدلتی رہتی ہے، تو یہ سب سمجھ میں آتا ہے۔ اب جب بھی ہم کوئی ویری ایبل لکھتے ہیں تو ہر پروگرامر کو ایک خاص ٹِپ دی جاتی ہے جو ایک سینئر پروگرامر کی طرف سے دی جاتی ہے کہ ویری ایبل کے نام ہمیشہ معنی خیز ہونے چاہئیں، یعنی جیسے ہی ہم ویری ایبل کو پڑھتے ہیں ہمیں سمجھ لینا چاہیے کہ اس کے اندر کیا ذخیرہ ہے۔ جیسا کہ اگر ہم نے یہاں edge کو ذخیرہ کیا تو ہم نے متغیر کنارے کا نام دیا، اگر ہم نے ایک ستارہ ذخیرہ کیا تو ہم نے اسے ستارہ یا کسی بھی بے ترتیب نمبر کا نام دیا۔



00:21:23

اگر ہم نے اسے ذخیرہ کیا ہے تو ہم نے اسے نام کے طور پر ایک نمبر دیا ہے، کبھی کبھی بے ترتیب۔ ہاں ہم اس کا نام A B C رکھ سکتے ہیں کیونکہ یہ آسان ہے لیکن جب بھی ہم کوئی بڑا پروگرام لکھ رہے ہوں گے تو اس میں A B C جیسے بہت سے تغیرات ہوں گے، اسی لیے وہاں معنی خیز نام دینا بہت ضروری ہے۔ اس لیے اگر مستقبل میں آپ کمپنیوں میں تقرریوں کے لیے اپنے انٹرویوز کے لیے بیٹھیں یا آپ اپنا پروجیکٹ بنا رہے ہیں یا اچھے لیول کی فری لانسنگ کر رہے ہیں تو ہمیں اس میں اپنے ویری ایبلز کے نام بہت احتیاط سے لکھنے ہوں گے جیسے کہ اگر ہمیں صرف 100 ویری ایبلز کو اسٹور کرنا ہے۔



00:21:51

تو ہم یہاں صرف F لکھ سکتے تھے، لیکن ہم نے پورا نام حتمی قیمت کے طور پر لکھا، جس سے یہ واضح ہو جائے گا کہ 100 ایک قیمت ہے۔ اب اگلی چیز جس کے بارے میں ہم متغیر کے بعد پڑھنے جا رہے ہیں وہ ہے ہماری ڈیٹا کی اقسام۔ C میں ڈیٹا کی بہت سی قسمیں ہیں۔ ہم نے آپ کو ان مختلف ڈیٹا کی اقسام کی فہرست دی ہے اور یہ تمام سلائیڈز آپ کو نیچے دیے گئے ڈسکرپشن باکس میں دستیاب ہوں گی۔ تو یہاں کچھ یاد رکھنے کی ضرورت نہیں، درحقیقت ہمیں ان سب کو یاد کرنے کی بھی ضرورت نہیں۔ اس میں کچھ اس طرح کی باتیں ہیں۔



00:22:19

کوڈنگ کے دوران ہم جو کچھ بھی یاد رکھیں گے، تب ہی وہ تمام چیزیں ہمارے ذہن میں رکھے گی۔ ڈیٹا کی قسم کا مطلب ہے کہ آپ میموری میں کس قسم کا ڈیٹا محفوظ کر رہے ہیں اور یہ جس قسم کا ڈیٹا ہے، یہ مخصوص ہے کہ یہ صرف اتنی ہی میموری استعمال کرے گا۔ جیسے ہم جب بھی پین ڈرائیو خریدتے ہیں تو اس پر لکھا ہوتا ہے کہ یہ 8 جی بی پین ڈرائیو ہے یا 16 جی بی پین ڈرائیو۔ اسی طرح ہمارا کریکٹر ٹائپ ڈیٹا ہماری ون بائٹ میموری استعمال کرتا ہے۔ اگر ہم انٹیجر ٹائپ ڈیٹا کے بارے میں بات کرتے ہیں، تو یہ استعمال کرتا ہے۔



00:22:46

اگر ہم فلوٹ ڈیٹا کی بات کریں تو یہ ہماری 2 بائٹ میموری استعمال کرتا ہے۔ اب جو طلباء دوسری زبانیں سیکھنے کے بعد C سیکھ رہے ہیں وہ میری طرح قدرے حیران ہوں گے کیونکہ انہیں پتہ چل جائے گا کہ C میں نہ تو بولین ٹائپ ڈیٹا ٹائپ ہے اور نہ ہی سٹرنگ ٹائپ ڈیٹا ٹائپ۔ یہ دونوں C میں موجود نہیں ہیں کیونکہ C پہلے آیا، یعنی C 1970 میں آیا، اس کے بعد C++ آیا، اس کے بعد Java آیا، اس کے بعد JavaScript آیا، تو C ہماری پہلی میموری ہے۔



00:23:16

یہ ایک پرانی زبان ہے اسی لیے اس میں بہت سی چیزیں ہیں جیسے اشیاء اور کلاسز جو غائب ہیں۔ لہذا، ان تصورات کے لیے ہمیں بعد میں دوسری زبانیں سیکھنی ہوں گی۔ لہذا، ان تمام ڈیٹا کی اقسام میں سے، ہم کچھ اہم ڈیٹا کی قسمیں لکھیں گے اور ہمیں ابھی انہیں صرف یاد رکھنے کی ضرورت ہے۔ باقی کو ابھی یاد رکھنے کی ضرورت نہیں ہے۔ تو آئیے بہت سی چیزیں ڈیلیٹ کر دیں جو ہم نے پہلے ہی اپنے کوڈ میں لکھی ہوئی تھیں اور ہم یہاں تین ڈیٹا اقسام کے بارے میں بات کریں گے۔ پہلی ڈیٹا کی قسم ہمارا int ہے جو ایک int اسٹور ہے۔



00:23:44

int انٹیجر ویلیوز کو اسٹور کرتا ہے، جس کا مطلب ہے کہ ہماری پوری ویلیوز مثبت یا منفی ہوسکتی ہیں، جیسے + is 1، + is 2، + is 5، -1، 0، اس طرح کی اقدار۔ لہذا اگر ہم edge کو اسٹور کرنا چاہتے ہیں، تو edge ہماری پوری ویلیو ہے، عام طور پر ہم اسے int ڈیٹا ٹائپ میں اسٹور کرتے ہیں، تو یہاں ہم int لکھیں گے e کے برابر 22۔ تو ہمیں اس لائن سے تین چیزیں معلوم ہوتی ہیں۔ سب سے پہلے، ہم جو ڈیٹا سٹور کر رہے ہیں وہ 22 ہے۔ میموری لوکیشن جہاں اسے سٹور کیا جا رہا ہے اسے edge کا نام دیا گیا ہے۔



00:24:17

اور ڈیٹا کی قسم انٹیجر ویلیو ہے۔ اب اسی طرح اگر ہم pi کی ویلیو کو اسٹور کرنا چاہتے ہیں تو ہمارے پاس انٹیجر ویلیو نہیں ہے، اس میں ڈیسیمل ویلیو ہے۔ اس لیے ہم اسے فلوٹ ڈیٹا ٹائپ میں اسٹور کریں گے۔ تو، یہاں ہم float لکھیں گے، پھر ہم pi لکھیں گے اور ہم اس کی ویلیو 3.14 دیں گے۔ تو، یہ اعشاریہ اقدار کے ساتھ ایک عدد ہے۔ ہم نے اسے فلوٹ ڈیٹا ٹائپ میں محفوظ کیا ہے۔ اب، اس کے علاوہ، ایک اور ڈیٹا قسم ہے جسے کریکٹر کہتے ہیں۔ لہذا، ہمارے پاس جو بھی خاص حروف ہیں، جیسے ہیش کیا جاتا ہے، ہماری شرح ایم پر کی جاتی ہے۔



00:24:48

یہ ہو گیا، ستارہ ہو گیا، جس کا مطلب ہے ast رسک، ہم ان سب کو کریکٹر ڈیٹا ٹائپ میں محفوظ کرتے ہیں۔ کردار کے لیے ہمیں کیئر لکھنا پڑے گا اور یہاں فرض کریں کہ ہم اپنا شگ لکھتے ہیں، تو یہاں سب سے پہلے کریکٹرز کو اسٹور کرنے کے لیے سنگل اقتباس لکھنا پڑتا ہے اور اس کے اندر ہم اپنا کردار لکھ سکتے ہیں، اس طرح ہم نے ابھی کے لیے care data type، float، int کا ایک متغیر ذخیرہ کیا ہے، کیونکہ ہم بنیادی سطح سے کام کر رہے ہیں، یہ تین اہم ہیں جو ہمیں باقی وقت کے ساتھ یاد رکھنے کی ضرورت ہے۔



00:25:19

ہم مزید سیکھتے رہیں گے اور اب اگلا موضوع جس کے بارے میں ہم بات کریں گے وہ ہے ہمارا مستقل۔ ہم نے اس سے پہلے ویری ایبلز کے بارے میں بات کی تھی کہ ویری ایبلز کا مسئلہ کیا تھا، ویری ایبلز کی ویلیو بدل سکتی تھی۔ اب جب بھی ہم بڑی کمپنیوں میں بڑا سافٹ ویئر بناتے ہیں، جیسا کہ ایڈمن پینل بناتے ہیں، ویب سائٹ بناتے ہیں، اس کے ٹیسٹنگ کے لیے ہم کیا کرتے ہیں، ہم اپنا ای میل پاس ورڈ رکھتے ہیں، جو فکس ہوتا ہے، جس کی ویلیو ہمیں تبدیل نہیں کرنا پڑتی، ہمیں ہر بار ایک ہی ای میل پاس ورڈ سے لاگ ان کرنا پڑتا ہے، تو ہم کیا کر سکتے ہیں، فائل کے اندر ایک ای میل۔



00:25:48

آپ متغیرات بنا سکتے ہیں، آپ پاس ورڈ متغیر بنا سکتے ہیں اور آپ ان دونوں کے اندر کوئی بھی قدر رکھ سکتے ہیں۔ C میں وہ قدریں جو ہمیشہ مستقل رہتی ہیں، جن کی قدر میں کوئی تبدیلی نہیں آتی، ہم انہیں مستقل کہتے ہیں۔ مستحکم کی تین قسمیں ہیں، ان میں سے پہلی انٹیجر مستقل ہے، جیسے ہمارا نمبر ایک ہے، ایک کی قدر ہمیشہ ایک رہے گی، ایک کی قدر منفی 1 یا 0 یا منفی f نہیں ہو سکتی، ایک کی قدر ہمیشہ مستقل رہے گی، یہ مقرر ہو جائے گی، اس لیے ہمارے مستقل جیسے 1 2 3 0 -1 -2 کو انٹیجر مستقل کہا جاتا ہے۔



00:26:22

اس کے بعد ہمارے اصلی مستقل آتے ہیں، حقیقی مستقل کا مطلب وہ ہے جن میں حقیقی اعداد ہیں جیسے ایک 0، اب 1.01 بھی ہے، لیکن یہ ایک حقیقی مستقل ہے، یہ ظاہر کرنے کے لیے کہ اس کا پوائنٹ 0 اضافی لکھا جاتا ہے، اسی طرح 2 کے لیے پوائنٹ 0 کا اضافی لکھا جاتا ہے، اگر یہ صرف دو ہوتا، تو یہ ایک انٹیجر کنسٹینٹ بن جاتا۔ اب یہ ایک حقیقی مستقل 3.14 ہے، یہاں ہمیں - 2.4 ملنا چاہیے تھا، پھر یہ ایک حقیقی مستقل ہوتا۔ اب ہمارے پاس مستقل کی تیسری قسم کیریکٹر مستقل ہے، جو تمام حروف میں شامل ہیں، ہمارے تمام حروف شامل ہوں گے۔



00:26:59

اپر کیس اور لوئر کیس میں ہمارے پاس کیپٹل A ہوتا ہے، اسپیشل کریکٹرز بھی ہوتے ہیں جیسے کہ ہمارے پاس ہیش، ہمارا ایم پرسنٹ، ہمارا ایسٹ رسک یا اس کے علاوہ ہماری شرح ہوتی ہے، اس لیے یہ تمام قسم کے حروف مل کر ہمارے کریکٹر مستقل بناتے ہیں اور یہاں ایک بات نوٹ کرنا ضروری ہے کہ کریکٹر کانسٹینٹ کی ویلیو، یہ کیپٹل a ہمیشہ کیپٹل a رہے گا، یہ سلیش اے نہیں بنے گا اور جب بھی کریکٹر کے اندر کوڈ لکھیں گے تو ہم ان کے اندر کوڈ لکھیں گے، اس کے بعد ہم لکھیں گے۔ جب بھی ہم کوئی حرف مستقل لکھتے ہیں۔



00:27:31

اگر ہم کوڈ میں لکھتے ہیں تو ہمیں وہاں سنگل کوڈ ڈالنا پڑتا ہے۔ اب اگلا موضوع جس کے بارے میں ہم بات کریں گے وہ ہے کلیدی الفاظ۔ جس طرح لغت میں کچھ الفاظ ہوتے ہیں، ہر لفظ کے اپنے متعین معنی ہوتے ہیں اور اسے تبدیل نہیں کیا جا سکتا۔ اسی طرح ہر پروگرامنگ زبان کی اپنی ایک لغت ہوتی ہے۔ ج کی اپنی لغت بھی ہے جس میں کچھ الفاظ محفوظ ہیں یعنی وہ متعین ہیں اور ان کے معنی وہی رہیں گے۔ ہم انہیں متغیر ناموں کے طور پر استعمال نہیں کر سکتے اور نہ ہی ہمیں انہیں استعمال کرنا چاہیے۔ تو اسی طرح کچھ الفاظ سی میں محفوظ ہیں۔



00:28:01

ایسے الفاظ ہیں جن کے کچھ خاص معنی ہیں اور یہ معنی مرتب کرنے والے کو معلوم ہیں۔ لہٰذا سی پروگرامنگ لینگویج میں 32 کلیدی الفاظ ہیں اور ہمیں ان کی ورڈز پر خصوصی توجہ دینا ہوگی۔ اگر ہم ان 32 کی فہرست کے بارے میں بات کریں تو ہمارے 32 کلیدی الفاظ اس طرح ہیں، C میں اس فہرست میں ہم دیکھ سکتے ہیں کہ int ایک محفوظ لفظ ہے، یہ C میں ہمارا کلیدی لفظ ہے، اس لیے ہم کسی بھی متغیر کو int کا نام نہیں دے سکتے۔ اسی طرح اگر ہم اس میں سرچ کریں تو فلوٹ بھی ہمارے کلیدی الفاظ میں سے ایک ہے، اس کے علاوہ کریکٹر بھی ہمارے کلیدی الفاظ میں سے ایک ہے اور یہ تمام کی ورڈز،



00:28:35

اب اگر ہم اسے اپنے مکمل کورس میں کہیں نہ کہیں کھنگالیں گے تو ہمیں پتہ چل جائے گا کہ کلیدی الفاظ کون سے ہیں، یہی وجہ ہے کہ جب بھی ہم اپنے پروگرام میں دیکھتے ہیں، جیسا کہ ہمارے پاس یہ int لکھا ہوتا ہے، اس int کا ایک خاص مطلب ہوتا ہے جو صرف مرتب کرنے والے کو معلوم ہوتا ہے، اس لیے ہمیں کسی بھی متغیر کا نام int نہیں رکھنا چاہیے، یہ واپسی ہے، واپسی بھی ایک کلیدی لفظ ہے، ہمیں یہ نام نہیں دینا چاہیے کہ یہ کون سے مخصوص الفاظ ہیں جن کے معنی ہیں compiler۔ جانتا ہے، اب ہم اپنے پروگرام کی ساخت کو ایک بار سمجھ لیں، جو بھی پروگرام، جو بھی کوڈ ہم لکھتے ہیں۔



00:29:03

ہم اصل میں کیسے سمجھ سکتے ہیں کہ یہ کیسے بنایا گیا ہے؟ جس طرح انسانی جسم کا ایک ڈھانچہ ہوتا ہے، اسی طرح ہر کوڈ اور ہر پروگرام کا ایک ڈھانچہ ہوتا ہے۔ اگر ہم اپنے C پروگرام کی ساخت کے بارے میں بات کریں تو ہمارا پروگرام کچھ اس طرح نظر آتا ہے۔ یہ ہمارا ابتدائی کوڈ ہے جو ہم نے لکھا تھا۔ اس میں سب سے پہلے ہیش شامل ہے لکھا جاتا ہے، پھر ہمارے کونیی بریکٹ آتے ہیں اور درمیان میں std.com آتا ہے۔ اسے ہماری پری پروسیسر ہدایت کہا جاتا ہے۔ اب پری پروسیسر کی ہدایت کیا ہے؟ اس پر ہم بعد میں بات کریں گے۔



00:29:35

ہم اسے پڑھیں گے۔ ابھی کے لیے ہمیں یہ سمجھنا ہوگا کہ ہمیں یہ لائن ہمیشہ اپنے کوڈ کے اندر لکھنی ہے ورنہ ہمارا C کوڈ نہیں چلے گا۔ اس کے بعد ہم ہمیشہ یہ لائن لکھتے ہیں، int main، اس کے بعد ہمارا pensis اور پھر curly braces، اور جو بھی حصہ ان کرلی منحنی خطوط وحدانی کے اندر لکھا جاتا ہے، یہ ہمارا مرکزی کوڈ ہے۔ ہمارے پروگرام کا عمل مین فنکشن سے شروع ہوتا ہے، یعنی یہ فنکشن ہمارے کوڈ کا ایک ایسا حصہ ہے جو ہمارے لیے کچھ کام کرتا ہے۔ ہم فنکشنز کے بارے میں بھی تفصیل سے پڑھنے جا رہے ہیں۔



00:30:05

کسی بھی سی پروگرام کی ایگزیکیوشن ہمیشہ ایک فنکشن سے شروع ہوتی ہے اور وہ ایگزیکیوشن لائن بہ لائن ہو گی، یعنی اگر یہ لائن پہلے آئے گی تو پہلے اس پر عمل ہو گا، پھر اگر یہ لائن آئے گی تو اس پر عمل ہو گا، اس کے بعد ہمارا مین فنکشن ختم ہو جائے گا، اب آپ دیکھیں گے کہ کوڈ میں ہر لائن کے بعد ہم ایک سیمی کالون لکھتے ہیں، یعنی ایک سیمی کالن اس لائن کے بعد ایک سیمیکولن لکھا جاتا ہے، اسی طرح اس لائن کے بعد ایک سیمیکولن لکھا جاتا ہے۔ ہماری لائن میں فل سٹاپ بالکل اسی طرح جیسے ہم ہندی میں فل سٹاپ لگاتے ہیں۔



00:30:33

انگریزی جملوں میں ہم آخر میں ایک نقطہ لگاتے ہیں، یعنی مدت۔ اسی طرح، اپنے C پروگرام میں، ہم یہ دکھانے کے لیے ایک سیمی کالون لگاتے ہیں کہ ہماری لائن یہاں ختم ہو گئی ہے، اور جو کچھ آگے لکھا ہے وہ اگلی لائن سے تعلق رکھتا ہے۔ ہم اس کے بعد پوری بات یہاں لکھ سکتے تھے اور ہمیں معلوم ہوتا کہ یہ اگلی لائن میں ہے کیونکہ یہ سیمی کالون کے بعد آرہا ہے۔ اس کے ساتھ ساتھ ہمارے کوڈ کی تمام ہدایات کیس حساس ہیں، یعنی اگر ہم یہاں int main لکھنا چاہیں تو غلط ہو گا کیونکہ یہ سب اپر کیس میں ہیں۔



00:31:03

ہم اس لیے آئے ہیں کہ C کیس حساس زبان ہے اس لیے چھوٹے چھوٹے چھوٹے کیس میں رہیں گے اور اوپر والے بڑے کیس میں رہیں گے، ہم ان کو تبدیل یا بدل نہیں سکتے، لہٰذا ساخت کا یہی طریقہ ہے۔ جب بھی ہم کوئی سی پروگرام بناتے ہیں تو ہمیں ہمیشہ ہیڈر فائل یا اپنی پری پروسیسر ڈائریکٹو شامل کرنا ہوتی ہے، اس کے بعد int main لکھیں اور یہ گھنگھریالے منحنی خطوط وحدانی ڈالیں اور ہم درمیان میں کچھ بھی لکھ سکتے ہیں لیکن آخر میں ہم ہمیشہ واپسی صفر کے ساتھ ایک لائن لکھتے ہیں، یہ واپسی قطار کے حساب سے صفر کی غلطیاں دکھاتی ہے، یعنی ہمارا کوڈ۔



00:31:34

اگر یہ کامیابی سے عمل میں آتا ہے اور اس میں کوئی غلطی نہیں آتی ہے، تو یہ واپسی صفر ہمیشہ آخر میں لکھا جائے گا۔ یہاں، یہ وہ حصہ ہے جسے ہم کسی بھی وقت اپنے کوڈ کے اندر کہیں بھی تبدیل کر سکتے ہیں۔ اب اگلا موضوع جس پر ہم اس باب میں مطالعہ کریں گے وہ ہمارے تبصرے ہیں۔ زندگی کی طرح، ہم لوگوں کو کچھ تبصرے دیتے رہتے ہیں یا ہم کچھ لکھتے ہیں جو ہمارے کوڈ کا حصہ نہیں ہے، یہ کچھ اضافی حصہ ہے۔ تبصرے انگریزی میں بھی ہو سکتے ہیں۔ کچھ زبانیں ہمیں مختلف زبانوں میں بھی اپنے تبصرے لکھنے کی اجازت دیتی ہیں۔



00:32:07

ہم چینی میں تبصرے لکھ سکتے ہیں، ہم روسی میں لکھ سکتے ہیں، لہذا یہ وہ حصے ہیں جو کوڈ میں شامل نہیں ہیں، یہ ہماری اضافی ہدایات ہیں۔ اب C میں دو طرح کے کمنٹس ہیں، پہلے ہمارے سنگل لائن کمنٹس ہیں جنہیں ہم ڈبل سلیش لگا کر لکھتے ہیں اور اس کے بعد ہمارے متعدد لائن کمنٹس ہیں جو ہم اس فارمیٹ میں لکھتے ہیں۔ اب ہم اصل میں اپنے کوڈ میں تبصرے لکھتے ہیں اور دیکھتے ہیں کہ وہ کیسے لکھے جاتے ہیں، جیسا کہ اس کوڈ میں ہم نے بتایا ہے کہ ڈیٹا کی اقسام کیا ہیں، اس لیے یہاں ہم ڈبل سلیش استعمال کرکے تبصرہ لکھ سکتے ہیں۔



00:32:36

سلیش لگانے سے، یہ کوڈ دکھاتا ہے کہ ڈیٹا کی قسمیں C میں کیسے کام کرتی ہیں۔ تو یہ وہ چیز ہے جو انگریزی میں لکھی جاتی ہے اور کوڈ کا حصہ نہیں ہے۔ اسی طرح، فرض کریں کہ ہمیں ایک سے زیادہ لائنوں میں تبصرے لکھنے ہیں، پھر ہم سلیش ast رسک اور ast رسک سلیش لکھتے ہیں اور ہم درمیان میں کچھ بھی لکھ سکتے ہیں۔ یہ ایک کثیر سطری تبصرہ ہے۔ لہذا، ہم کچھ چیزیں متعدد لائنوں پر لکھ رہے ہیں اور یہ سب تبصرے کا ایک حصہ ہے۔ اب اگر ہم اسے ہٹا دیں گے تو یہ انگریزی چیز ہمیں غلطی دے گی کیونکہ C اصل میں اسے سمجھنے کے قابل نہیں ہے۔



00:33:19

کمپائلر سمجھ نہیں پا رہا ہے کہ اس کا مطلب کیا ہے، اصل میں کیا لکھا ہے، یہی وجہ ہے کہ وہ حصہ جو کمپائلر کے لیے سمجھ میں نہیں آتا تھا، ہم اسے ہمیشہ کمنٹس میں لکھتے ہیں، جیسے بڑی کمپنیوں میں، جب بھی آپ کوڈ لکھنے کی کوشش کرتے ہیں، ہزاروں لائنوں کا کوڈ اتنا لمبا ہو جاتا ہے کہ اسے سمجھنا مشکل ہو جاتا ہے، یہی وجہ ہے کہ دوسرے پروگرامرز کی مدد کے لیے ہم ان کو کمنٹس لکھتے ہیں، اب ہم اپنے کوڈ کے اگلے حصے میں کون سے کوڈ کا فنکشن کریں گے، بتائیں گے۔ مطالعہ آؤٹ پٹ ہے، جب بھی ہم کسی بھی زبان میں کوڈ لکھتے ہیں۔



00:33:48

پروگرامنگ کرتے وقت، ان پٹ آؤٹ پٹ بہت ضروری ہے، پروگرامنگ کا ایک بہت اہم حصہ۔ سب سے پہلے ہم سیکھیں گے کہ C میں آؤٹ پٹ کیسے دکھانا ہے، اس کے بعد ہم C میں ان پٹ لینے کا طریقہ سیکھیں گے، لہذا C میں آؤٹ پٹ دکھانے کے لیے ہم نے صرف ایک اسٹیٹمنٹ لکھا ہے جو کہ پرنٹ f ہے اور اس کے بعد ہم نے parens کے اندر ہم ڈبل کوٹس لکھتے ہیں اور ڈبل کوٹس کے اندر ہم کچھ بھی لکھ سکتے ہیں، ہم نے ہیلو ورلڈ لکھا، یہاں ہم ہیلو شردھا لکھ سکتے ہیں، یہاں ہم اپنا ہیلو کالج لکھ سکتے ہیں، یہاں ہم کچھ لکھ سکتے ہیں۔



00:34:20

ان ڈبل کوڈز کے اندر بھی لکھا جا سکتا ہے اور ہم جو بھی لکھیں گے وہ سکرین پر پرنٹ ہو جائے گا جیسا کہ ہے اور اس پرنٹ کو کروانے کی ذمہ داری print f نامی فنکشن نے لکھی ہے۔ پرنٹ f ہمارے لیے سکرین پر کچھ بھی پرنٹ کر دیتا ہے اور اس لائن کے آخر میں ہم ایک سیمی کالون لگائیں گے تاکہ یہ ظاہر ہو کہ لائن یہاں ختم ہوتی ہے۔ اگر ہم اس کی مثال دیکھیں تو اپنے کوڈ کے اندر ہم یہاں پرنٹ ایف لکھ سکتے ہیں اور اس میں ہیلو سی لکھ سکتے ہیں۔ آئیے اسے محفوظ کریں، اوپر کی اضافی جگہ کو ہٹا دیں اور چلائیں۔



00:34:53

آئیے اپنا کوڈ کھولتے ہیں، ٹرمینل جی سی سی ہیلو ایس کے ساتھ آئے گا اور ہیلو سی ہمارے لیے پرنٹ ہو جائے گا۔ اب فرض کریں کہ ہم بار بار ہیلو سی پرنٹ کرنا چاہتے ہیں، ہم اسے کیسے پرنٹ کریں گے؟ آئیے اس لائن کو کاپی کریں، پیسٹ پیسٹ کریں، لہذا ہم نے ہیلو سی کو چار بار پرنٹ کیا ہے، آئیے اسے محفوظ کریں اور اسے دوبارہ یہاں چلائیں۔ اب ہمارے پاس ہیلو سی پرنٹ ہو چکا ہے، اس کے فوراً بعد ہیلو سی دوبارہ چھاپا گیا، اس طریقے سے یہ چار بار چھاپا گیا، لیکن ہم چاہتے تھے کہ اگلی اگلی لائن میں پرنٹ ہو، تاکہ اگلی لائن ہمیشہ پرنٹ ہو۔



00:35:26

اس کے لیے یہاں ہمیں ایک چیز لکھنی ہے، ایک خاص چیز جو کہ ہمارا بیسن ہے، یہ بیسن ظاہر کرتا ہے کہ ہمیں پرنٹ f میں جو کچھ پرنٹ کرنا تھا، وہ پرنٹ ہو جائے گا، اس کے بعد اگلی لائن آئے گی، اسی بیسن کو یہاں لکھیں، اس کے بعد بھی اگر ہم اگلی لائن چاہیں، اس کے بعد بھی اگر ہم اگلی لائن چاہیں اور اس کے بعد بھی اگر ہم اگلی لائن چاہیں، تو اب ہم اسے دوبارہ محفوظ کر لیں گے، اب اگلی لائن یہاں سے نکال لی جائے گی۔ اصل میں کیا ہوا کہ اس نے ہیلو سی پرنٹ کیا، تو ہیلو سی



00:35:58

یہ پرنٹ ہو گیا، اس کے بعد bass a پرنٹ ہوا، تو واپس sl a یعنی اگلی لائن، تو ہم یہاں آئے، پھر ہیلو c پرنٹ ہوا، پھر دوبارہ bass n تو ہم اگلی لائن پر آئے، اسی طرح جب بھی ہم اگلی لائن پر آؤٹ پٹ لانا چاہتے ہیں، ہم bass n لکھتے ہیں، اب فرض کریں کہ ہم نے ایک ویری ایبل بنایا ہے، اگر ہم اس کوڈ کو پرنٹ کرنا چاہتے ہیں تو ہم نے ایک ویری ایبل بنایا ہے، اگر ہم اس کوڈ کو پرنٹ کرنا چاہتے ہیں، تو 2 برابر کرنا چاہتے ہیں۔ edge، اس کنارے کو اپنی سکرین پر کیسے پرنٹ کریں، پھر اس کے لیے ہمیں پرنٹ f edge is لکھنا پڑے گا، کیا ہمیں edge لکھنا ہے؟



00:36:33

ایک بار جب ہم اس چیز کا آؤٹ پٹ دیکھتے ہیں تو edge is edge، اس لیے ہم نے ڈبل کوٹس کے اندر جو کچھ بھی لکھا ہے اسے سٹرنگ کہتے ہیں، یعنی یہ چیز ویسے ہی پرنٹ ہو جائے گی، لیکن ہمیں اس کے کنارے کے اندر نمبر پرنٹ کروانا پڑا، اس لیے آؤٹ پٹ پرنٹ کرتے وقت کچھ کیسز سامنے آتے ہیں، ان میں سے پہلی صورت یہ ہے کہ جب بھی ہم پرنٹ کرنا چاہتے ہیں تو سب سے پہلے اپنے سٹیٹمنٹ کے عدد کو پرنٹ کرنے کے لیے، D کے تمام نشان اور فیصد کو پرنٹ کرنا ہوتا ہے۔ یہ D ڈبل ویلیو کو ظاہر کرتا ہے، ڈبل ایک ڈیٹا ٹائپ بھی ہے، اس بارے میں



00:37:06

اگر ہم بعد میں پڑھ رہے ہوں گے تو فیصد اور ڈی کا نشان اور اس کے بعد لائن ختم ہوتے ہی ہم کوما لکھیں گے اور پھر اپنے متغیر کی ویلیو لکھیں گے، اس طرح جب بھی چیز پرنٹ ہوگی پوری پرنٹ ہوجائے گی اور فیصد d کی جگہ ہماری عمر کی قدر آئے گی، جو اس کی جگہ لے گی، اسی طرح، اگر ہمیں فی صد لکھنا ہے، تو فی صد لکھیں گے، پھر ایبل نمبر لکھیں گے، اور فی صد لکھیں گے۔ یہ متغیر کی قدر کو بدل دے گا، جب بھی اس فیصد f کا آؤٹ پٹ پرنٹ کیا جائے گا، اگر ہمیں اسے حروف کے لیے کرنا ہے، تو ہم فیصد c لکھیں گے اور پھر لکھیں گے۔



00:37:39

اگر ہم اپنا متغیر دیتے ہیں تو متغیر اس فیصد c کو یہاں بدل دے گا۔ تو اس طرح جب بھی ہمیں کوئی ویری ایبل پرنٹ کرنے کی ضرورت ہوتی ہے جس کی ڈیٹا ٹائپ کچھ یا کچھ اور ہوتی ہے تو اس کے لیے ہم عددی قسم میں فیصد d، حقیقی نمبرز میں فیصد f اور حروف میں فیصد s لکھتے ہیں اور ہم ان تینوں کو C میں کال کرتے ہیں اور اس فارمیٹ کی وضاحت کرتے ہیں جس فارمیٹ میں آؤٹ پٹ ہمارے پاس آئے گا۔ اور یہ پرنٹ ایف فنکشن دراصل ہماری لائبریری کا فنکشن ہے جو ڈیفالٹ کے طور پر ہمیں C میں ملتا ہے۔



00:38:10

یہ ہمیں پہلے ہی پیش کیا گیا ہے اور ہمیں دیا گیا ہے، اس لیے ہم ان آؤٹ پٹس کے کیسز بھی اس پر عمل کرنے کے بعد ایک بار دیکھتے ہیں، اب اگر ہمیں عمر لکھنی ہے تو ہمیں معلوم ہے کہ یہاں ہمیں فیصد d لکھنا پڑے گا، یہاں ہمیں کوما لگانا پڑے گا اور یہاں ہم کنارے لکھیں گے، چلو اسے محفوظ کرتے ہیں اور اپنا ٹرمینل کھولتے ہیں، اب یہ ہمارے پاس پرنٹ ہو گیا ہے، یہ عمر ہے، اگلی لائن 22 ہے، اس لیے ہم نے 22 فیصد کے بعد یہ نشان نہیں دیا۔ یہ، اگر ہم اگلی لائن دیتے ہیں، اب ہماری عمر 22 ہے، اب اسی طرح، اگر کنارے کے بجائے ہمیں پرنٹ کرنا پڑے



00:38:42

اگر ہم Pi کی ویلیو حاصل کرنا چاہتے ہیں تو ہم float Pa = 3.14 لکھیں گے اور یہاں ہم فیصد f لکھیں گے اور یہاں ہم Pi لکھیں گے، چلو اسے محفوظ کرتے ہیں، اب ہمارے پاس پرنٹ ہے جو 3.14 ہے، تو پہلے سے طے شدہ طور پر فلوٹ کے اندر کچھ اعشاریہ ہیں جنہیں ہمیشہ پرنٹ کرنا ہوتا ہے، اس لیے ہم نے انہیں یہاں پرنٹ کیا ہے، اب آپ دوبارہ یہ سوچ رہے ہوں گے کہ یہ بیان کیسے آرہا ہے اور آپ کو ایک بار پھر یہ بتانا ہوگا کہ arrow کاٹنا ہے۔ آپ کے کی بورڈ پر موجود چابیاں، آپ ان کی اوپری کلید کو دبا سکتے ہیں اور پھر آپ پرانے کمانڈز پر جا سکتے ہیں، تاکہ آپ



00:39:18

اس پر عمل کرنے کے لیے آپ کو پورا بیان بار بار لکھنے کی ضرورت نہیں ہے، آپ اس کلید کو دبا کر براہ راست اس پر عمل کر سکتے ہیں۔ اب اسی طرح اگر ہم ایک کریکٹر پرنٹ کرنا چاہتے ہیں تو فرض کریں کہ ہم نے ایک کریکٹر یعنی ستارہ بنایا ہے جو کہ ستارے کے متغیر کا نام ہے اور اس کے اندر ستارے جمع کیے گئے ہیں تو ہم یہاں لکھیں گے، ستارہ ہے، فیصد c یہاں آئے گا اور ستارہ یہاں آئے گا۔ آئیے اسے محفوظ کرتے ہیں اور اسے چلاتے ہیں، پھر ہمیں اسٹار ایسٹ ڈسک کے طور پر آؤٹ پٹ ملتا ہے۔ لہذا، اس طرح، ہم اب اپنی سکرین پر مختلف قسم کے ڈیٹا پرنٹ کر سکتے ہیں۔



00:39:54

اگلا تصور جو اس زبان کا ایک بہت اہم تصور ہے وہ ہمارا ان پٹ ہے۔ s کے اندر ان پٹ لینے کے لیے، ہم ایک فنکشن استعمال کرتے ہیں جو ایک اور لائبریری فنکشن ہے جس کا نام scan-f ہے۔ جس طرح ہم پرنٹنگ کے لیے print-f استعمال کرتے ہیں، اسی طرح کوئی بھی ان پٹ لینے کے لیے، ہم سکیننگ کے لیے scan-f استعمال کریں گے۔ اب اس کا فارمیٹ یہ ہے کہ ہم جو بھی ویلیو ان پٹ کے طور پر لینا چاہتے ہیں، پہلے ہم اس کی قسم لکھیں گے۔ لہذا فارمیٹ فیصد کی وضاحت d ہمیں دکھاتا ہے کہ ہم ایک int قسم کی قدر کا ان پٹ لینے جا رہے ہیں۔ تو سب سے پہلے اپنے اقتباسات ڈالیں۔



00:40:29

ہم ڈبل کوٹس دیں گے، اس کے اندر اپنا فارمیٹ کوما بتا دیں گے، کوما کے بعد ہمیں اس ویلیو کی قسم لکھنی ہے جسے ہم ان پٹ کے طور پر لے رہے ہیں، اس لیے اب ہم سمجھ گئے ہیں کہ ہم اسے کس ویری ایبل میں اسٹور کرنا چاہتے ہیں، اس لیے ہم اپنے ویری ایبل کا نام لکھیں گے اور اس ویری ایبل کے نام سے پہلے m فیصد لگائیں گے، اس m فیصد کا مطلب ہے اور اصل میں یہ ایڈریس ہے، یہ ایڈریس ہے، یہ ویری ایبل کا کیا مطلب ہے، یہ پتہ چلے گا۔ میموری کے اندر جہاں بھی کنارے کو میموری کا ایک بلاک دیا گیا ہے اور ہمیں جو بھی ان پٹ ملے گا وہ اس ایڈریس پر جائے گا اور اسے وہاں اسٹور کرے گا، تو کچھ اس طرح



00:41:09

یہ scanf کا کام ہے اب ہم کیا کرتے ہیں آئیے ایک نمبر کو بطور ان پٹ لیں اور دیکھتے ہیں کہ scanf اصل میں کس نمبر کو اسکین کرتا ہے جس کو ہم ایک ویری ایبل ایج بناتے ہیں اب ہم یہاں printf لکھیں گے Enter edge اب آئیے اس ویری ایبل کو scanf فیصدی ڈی ایڈریس ایج سے اسکین کریں اور جو بھی ویلیو وہاں محفوظ ہو جائے گی وہ پرنٹ ہو جائے گی یعنی اس کو محفوظ کرنے دیں اس سے پہلے کہ یہ فیصد لکھنے دیں' اب اسے دوبارہ لکھنے دیں۔ اوپر اور اپنا ٹرمینل کھولیں سب سے پہلے ہمیں اپنے کنارے میں داخل ہونا ہے۔



00:41:45

ہم 22 درج کریں گے اور یہ ہمارے ساتھ پرنٹ کیا گیا ہے۔ کنارہ 22 ہے۔ تو جو بھی کنارہ ہم نے داخل کیا تھا، وہ پرنٹ شدہ شکل میں ہمارے پاس واپس آ گیا ہے۔ scanf نے یہاں کیا کیا کہ یہ کنارے میں داخل ہوا اور میموری میں کسی بھی مقام پر چلا گیا جس کی طرف ایج متغیر اشارہ کر رہا تھا اور اس کنارے کو وہاں محفوظ کر لیا۔ ہم نے نمبر 22 محفوظ کر لیا اور جب printf نے وہ نمبر واپس مانگا تو اس کے بعد ہم نے edge is کے ساتھ پرنٹ کیا اور یہاں یہ ظاہر ہوا کہ int قسم کی ویلیو پرنٹ کرنی ہے اور پھر ہم نے کنارے سے ڈیٹا نکال کر سکرین پر دکھایا، تو کچھ اس طرح تھا۔



00:42:17

سی میں ہمارا ان پٹ آؤٹ پٹ اس طرح کام کرتا ہے۔ اب ہم یہاں ایک چھوٹا پروگرام بنانے جا رہے ہیں۔ اس چھوٹے سے پروگرام میں ہم کیا کریں گے؟ ہم ایک نمبر A کا ان پٹ لیں گے، ہم ایک نمبر B کا ان پٹ لیں گے، اور ہم ان دونوں کا مجموعہ نکالیں گے۔ تو ہم اس کوڈ کے لیے ایک چھوٹا سا کوڈ لکھنے جا رہے ہیں، سب سے پہلے ہم وہ نمبرز بنائیں گے، اس طرح int A اور B۔ اب سب سے پہلے ہم F پرنٹ کریں گے۔ A Enter کریں، اس کے بعد ہم A، D اور A کو اسکین کریں گے۔ اس کے بعد ہم F پرنٹ کریں گے۔ Enter B پھر ہم اسے scanf سے لیں گے۔ ان پٹ اور B. اب ان دونوں کا مجموعہ۔



00:43:00

اسے تیسرے متغیر میں محفوظ کر لیں گے، یعنی int sum i a + b۔ تو یہاں بھی جمع مائنس ضرب تقسیم کی یاد دہانی، یہ سب ریاضی کی طرح کام کرتے ہیں، تو جمع کے لیے جمع کا نشان ہے، مائنس کے لیے ایک مائنس کا نشان ہے، اور یہ جو کام کرتا ہے وہ یہ ہے کہ یہ ان دونوں کی قدر کا حساب لگائے گا اور اسے جمع کے اندر ڈالے گا۔ اس کے برابر کو اسائنمنٹ آپریٹر کہا جاتا ہے۔ ہم پلس کو بطور اضافی آپریٹر استعمال کرتے ہیں۔ ہم سی کے اندر موجود مختلف آپریٹرز پر بعد میں تفصیل سے بات کریں گے، تو یہ جو



00:43:35

ہمارے پاس رقم ہے، اب ہم اسے پرنٹ کریں گے۔ پرنٹ f se sum فیصد d sum ہے۔ آئیے اس کوڈ کو محفوظ کریں۔ اس کے اندر ہم نے کیا کیا؟ ہم نے دو متغیرات a اور b بنائے۔ سب سے پہلے ہم نے enter a لکھا، تو ہم نے a درج کیا اور اسے اس متغیر کی میموری لوکیشن میں محفوظ کیا۔ اس کے بعد ہم نے b داخل کیا اور اسے b کی میموری لوکیشن میں محفوظ کر لیا۔ اس کے بعد ہم نے ایک نیا متغیر رقم بنایا، جس کے اندر ہم نے حتمی ویلیو کو محفوظ کیا جو a اور b کو شامل کرنے کے بعد آئی۔ اس کے بعد ہم نے رقم کی قدر پرنٹ کی ہے۔ اب ہمارا ٹرمینل کھولیں اور اس کا آؤٹ پٹ دیکھیں۔



00:44:13

آئیے تجزیہ کرتے ہیں، سب سے پہلے ہم a کی ویلیو ڈالیں گے، پھر دو درج کریں گے، پھر b کی ویلیو ڈالیں گے اور پانچ درج کریں گے۔ تو آؤٹ پٹ میں ہمیں رقم سات ہوتی ہے۔ اس طرح دو اور پانچ کا مجموعہ بن گیا اور پھر سات چھپ گئے۔ اب یہاں ہم ایک چھوٹی سی چال سیکھنے جا رہے ہیں۔ یہاں ہم نے تیسرا ویری ایبل سم بنایا ہے تو ہم اسے ڈیلیٹ کر دیں گے اور براہ راست کیا کریں گے، اس رقم کو ہٹانے کے بعد ہم یہاں a+b لکھیں گے اور اسے محفوظ کریں گے اور اپنے کوڈ کو ایک بار پھر 2 5 چلائیں گے تو براہ راست ہمارے پاس سات ہیں جو کہ ہماری رقم ہے۔



00:44:52

ایک بار پرنٹ ہونے کے بعد، ہمیں تیسرا متغیر بنانے کی ضرورت نہیں تھی۔ جب بھی ہم رقم یا فرق کو پرنٹ کرنا چاہتے تھے تو جمع کی بجائے مائنس لکھ سکتے تھے۔ اگر ہم ان دونوں کی مصنوع کو پرنٹ کرنا چاہتے ہیں، تو ہم ستارہ کا استعمال کرکے ان کو ضرب دے سکتے تھے۔ تو اس طرح ہم جو بھی ویلیو پرنٹ کرنا چاہتے ہیں، ہم اس پر براہ راست آپریشن کر سکتے ہیں اور ہم اسے یہاں لکھ سکتے ہیں۔ اب ہم سی میں بہت سی چیزیں سیکھ چکے ہیں اور ان تمام چیزوں کو کیسے چلانا ہے۔ ہم نے انہیں ایک فائل میں لکھا اور اس فائل سے آؤٹ پٹ ہمارے پاس آتا رہا۔ اب اس پورے میں



00:45:23

ہم اس پورے عمل کو تالیف کہتے ہیں۔ آئیے اس عمل کو سمجھتے ہیں کہ اصل میں کیا ہوتا ہے۔ تالیف کی تعریف ایک کمپیوٹر پروگرام ہے جو C کوڈ کو مشین کوڈ میں ترجمہ کرتا ہے۔ لہذا ایک کمپائلر ایک پروگرام ہے جو سی کوڈ لکھتا ہے اور اسے مشین کوڈ میں ترجمہ کرتا ہے۔ مثلاً ہماری پارلیمنٹ میں کوئی غیر ملکی مہمان آتا ہے تو درمیان میں مترجم آجاتے ہیں۔ فرانسیسی وزیر اعظم آئے گا تو ایک مترجم ہو گا جو ان کی فرانسیسی اور وزیر اعظم کو سمجھے گا یعنی ہندوستانی وزیر اعظم



00:45:54

یہ وزیر کو بھیجے گا۔ اسی طرح ہمارے کمپیوٹر کے اندر بھی زبانوں کے مترجم موجود ہیں۔ کمپیوٹر سی نہیں سمجھتا۔ ہماری ونڈوز مشین، میک مشین، linux.com، وہاں ایک سی فائل تھی، ہم نے وہ کمپائلر کو بھیج دی اور سی کمپائلر نے کیا کیا؟ سب سے پہلے اس نے چیک کیا کہ فائل ان اصولوں پر عمل کر رہی ہے جو C میں بیان کیے گئے ہیں، جو نحو کی وضاحت کی گئی ہے، کیا اس میں کوئی غلطی ہے، کیا اس میں کوئی خامی ہے، کیا ہم نے اپنے ویری ایبل کا نام نمبر سے شروع نہیں کیا، کیا ہم نے شروع میں انڈر سکور لگایا؟



00:46:48

اس لیے یہ اس قسم کی بنیادی خامیوں کو چیک کرتا ہے اور اگر خامیاں ہیں تو یہ کمپائلیشن میں ناکام ہو جاتی ہے لیکن اگر ہماری فائل کمپائل ہو جاتی ہے تو اس کا مطلب ہے کہ اس میں کوئی نحوی خرابی نہیں ہے اور اس کے بعد یہ کمپائلر اسے windows.exe فائل میں تبدیل کر دیتا ہے اور آپ linux.com میں ڈاٹ آؤٹ بھی بنا سکتے ہیں اور آپ wiz میں ڈاٹ آؤٹ بھی بنا سکتے ہیں لیکن یہ ایکسٹینشن آپ کو ڈیفالٹ میں دیکھے گا۔ لہذا پریشان ہونے کی ضرورت نہیں ہے اگر آپ ابھی میری اسکرین پر ڈاٹ آؤٹ دیکھ رہے ہیں۔



00:47:36

آپ اپنی سکرین پر ڈاٹ سی دیکھ رہے ہیں، تو اب ہم C کے بنیادی تصورات کو سمجھ چکے ہیں اور اب تک ہمیں تھوڑا سا اندازہ ہو گیا ہے کہ پروگرامنگ دراصل کیا ہے، تو اس میں ہم دو ایسے سوالات حل کریں گے کہ اگر آپ کالج میں پڑھ رہے ہیں، تو عام طور پر اگر آپ سے بنیادی باتوں سے کوئی آسان لیول کے سوالات پوچھے جائیں تو وہ کچھ اس طرح نظر آئیں گے، اس میں پہلا پریکٹس سوال جو ہم حل کریں گے وہ یہ ہے کہ ہم ایک پروگرام لکھیں گے، جس کو ہم رقبہ کے رقبہ کے حساب سے culate کریں گے طرف مربع



00:48:04

ہم نے دیا ہے، ہم ریاضی جانتے ہیں، ہم نے نچلی کلاسوں میں پڑھا ہے کہ مربع کا رقبہ کیا ہے، سائیڈ کو سائیڈ سے ضرب کیا جاتا ہے، تو ہم ایسا پروگرام بنائیں گے جس میں یہ سائیڈ کو ان پٹ کے طور پر لے گا اور پھر رقبہ کا آؤٹ پٹ دے گا، آئیے ہم اپنے کوڈ میں یہ کام کرتے ہیں اور دیکھتے ہیں، اوپر ایک تبصرہ لکھتے ہیں، مربع کا رقبہ، سب سے پہلے ہم اس سائیڈ کو پرنٹ کریں گے، اب ہم اس سائیڈ کو پرنٹ کریں گے۔ اسے اسکین ایف سے لیں گے، پھر ہم ان پٹ لکھیں گے، فیصد ڈی اور سائیڈ، اب ہم پرنٹ کر سکتے ہیں رقبہ فیصد ڈی سائیڈ میں، یہ کر کے



00:48:50

آئیے اسے محفوظ کریں اور اپنا ٹرمینل کھولیں اور اسے چلائیں۔ ہماری طرف 4 ہے۔ تو ہمارے مربع کا رقبہ 16 ہے کیونکہ 4*4 16 کے برابر ہے۔ اب یہاں یہ ضروری نہیں ہے کہ ہماری طرف ایک عدد عدد ہو۔ یہ فلوٹ ویلیو بھی ہو سکتی ہے۔ اگر ہماری طرف فلوٹ ویلیو ہے، تو اس صورت میں، فیصد d کے بجائے، فیصد f یہاں آئے گا۔ یہاں بھی فیصد f آئے گا کیونکہ اگر دو فلوٹس کو ضرب دیا جائے تو ایک فلوٹ ویلیو بنتی ہے۔ ہم اسے محفوظ کریں گے اور اسے دوبارہ چلائیں گے۔ تو اب اگر ہم سائیڈ 4 میں داخل ہوتے ہیں تو ہمیں رقبہ مل جاتا ہے۔



00:49:26

S 16.00 تو اس نے خود بخود چاروں کو اندرونی طور پر فلوٹ میں تبدیل کر دیا۔ اب اگلا پریکٹس سوال جو ہم کرنے جا رہے ہیں کہتا ہے، دائرے کے رقبے کا حساب لگانے کے لیے ایک پروگرام لکھیں۔ یہاں سائیڈ پر لکھا ہے، یہ یہاں ہونا چاہیے کہ ہمارے پاس دائرے کا رداس دیا گیا ہے اور ہمیں دائرے کا رقبہ معلوم ہے۔ ہمارے پاس پی آر ایس ہے۔ تو pa کی قدر ایک مستقل 3.14 ہے۔ اگر ہم اس میں r s کو ضرب دیں تو اس طرح ہمیں دائرے کا رقبہ ملے گا۔ اس کے لیے پروگرام کو تھوڑا سا تبدیل کرتے ہیں۔



00:50:02

آئیے ہم float radius لکھتے ہیں اور enter radius لکھتے ہیں۔ اب ہم جو بھی ویلیو درج کریں گے، جو بھی ویلیو درج کریں گے، ہم اسے ریڈیئس ویری ایبل میں محفوظ کریں گے۔ اب ہم لکھیں گے رقبہ is pi، یعنی 3.14 ضرب رداس ملاد سے رداس کیونکہ ہمیں رداس کا مربع حاصل کرنا ہے۔ آئیے اسے بچا لیں۔ یہاں ہم نے رداس کو متغیر کے طور پر بیان کیا، اس کے بعد ہم نے اسے پرنٹ f کے ساتھ لکھا۔ ہم اسکرین پر رداس میں داخل ہوئے، پھر ہم نے رداس کو ذخیرہ کیا۔ پھر ہم نے علاقے کو محفوظ کر لیا۔ ہم نے علاقے کو کیسے ذخیرہ کیا؟ ہم نے 3.14 کو رداس اور سے ضرب کیا۔



00:50:46

ہم اسے دوبارہ رداس سے ضرب دیتے ہیں اور اسے چلاتے ہیں۔ اگر ہم ٹرمینل میں رداس داخل کرتے ہیں تو ہمیں جو آؤٹ پٹ ملتا ہے وہ یہ ہے کہ دائرے کا رقبہ 28.2 600 ہے۔ اس طرح ہم ان سوالات کو حل کر سکتے ہیں۔ اس باب میں ہم نے اب تک جو کچھ بھی پڑھا ہے، ہمارا پہلا باب اب ختم ہو چکا ہے۔ یہاں ہم نے اپنا پہلا باب بہت کامیابی سے مکمل کیا ہے یعنی C کے تمام بنیادی تصورات۔ ان تمام تصورات کو استعمال کرتے ہوئے، ایسے سوالات ہیں جو کبھی کبھی آپ کے وسط سمسٹر یا اختتامی سمسٹر کے امتحان میں پوچھے جاتے ہیں۔



00:51:20

مثال کے طور پر، یہ ممکن ہے کہ فارن ہائیٹ سے سیلسیس میں تبدیلی دی جائے، سیلسیس سے فارن ہائیٹ میں تبدیلی دی جائے، یا ہمارے پاس سادہ سود کا حساب لگانے کے لیے فارمولے ہیں اور آپ کو اس فارمولے کو لاگو کرنے کے لیے کہا جا سکتا ہے، یا یہاں، جیسا کہ ہم نے رداس کا پتہ لگایا ہے اور رداس سے رقبہ معلوم کیا ہے، ہم اسی طرح کے رقبہ کے مربع کے بارے میں بات کر سکتے ہیں۔ مستطیل، ہم مثلث کے رقبے کے بارے میں بات کر سکتے ہیں، یا آپ مرکب سود کا حساب لگا سکتے ہیں، پھر بنیادی طور پر، ریاضی کے چھوٹے فارمولوں کو لاگو کر کے، جو بھی چیزیں ممکن ہو سکتی ہیں یا ان پٹ



00:51:48

آؤٹ پٹ سے جو بھی چیزیں ممکن ہوسکتی ہیں، ہم اس تصور کو کرنے کے بعد اس طریقے کا کوڈ حاصل کرسکتے ہیں۔ اب اگلا باب ہمارا باب دو ہے یعنی ہدایات اور آپریٹرز۔ اس میں ہم پڑھیں گے کہ سی میں ہدایات اور آپریٹرز کا کیا مطلب ہے۔ اب اس باب میں ہم بہت سی عددی چیزیں کریں گے جن کا تعلق ریاضی سے ہوگا۔ اس کے ساتھ ہم بہت سے نئے تصورات سیکھیں گے۔ لہذا اگر ہم نوٹوں میں ایسے صفحات دیکھ رہے ہیں جن میں بہت ساری معلومات لکھی ہوئی ہیں تو گھبرائیں نہیں کیونکہ وہ چیزیں نوٹوں میں لکھی ہوں گی۔



00:52:15

ایک ساتھ تمام نوٹوں کو کچلنے کی ضرورت نہیں ہے۔ تمام نوٹس آپ کو ذیل میں دستیاب ہوں گے۔ جب بھی آپ کو نظر ثانی کرنے کا احساس ہو، جب آپ محسوس کریں کہ اب مجھے ان چیزوں کو حفظ کرنے کی ضرورت ہے، جیسے امتحان سے ایک دن پہلے یا اگر آپ کو انٹرویو کے لیے نظر ثانی کرنی ہے، تو آپ جا کر ان تک رسائی حاصل کر سکتے ہیں، ان ناموں کو پڑھ سکتے ہیں۔ اب جو چیزیں کلاس کے وقت ہمارے ذہن میں ہوتی ہیں، ہمیں انہیں فطری طور پر ذہن میں رکھنا پڑتا ہے۔ اضافی، ابھی ہمیں چیزوں کو یاد کرنے کی زحمت اٹھانے کی ضرورت نہیں ہے۔ تو، سب سے پہلے، ہم باب شروع کرتے ہیں.



00:52:43

ہم مطالعہ کریں گے کہ ہدایات کیا ہیں۔ سی میں ہدایات کی بنیادی تعریف یہ ہے کہ یہ ایک پروگرام میں بیانات ہیں، یعنی اب تک جتنے بھی پروگرام یا کوڈز ہم C میں لکھتے رہے ہیں، ان میں ہدایات کا ایک سلسلہ تھا، ایک کے بعد ایک بیانات لکھے جاتے تھے۔ جب بھی ہم کسی پروگرام کی آفیشل ڈیفینیشن دیکھتے ہیں تو وہ ہدایات کی ایک ترتیب ہوتی ہے، مثلاً فرض کریں کہ ہمیں میگی بنانا ہے تو ہدایات کی ترتیب کیا ہے کہ سب سے پہلے پانی کو ابالیں اور پھر اس میں میگی کو ابالیں۔



00:53:11

مسالہ ڈالیں اور اس میں اپنی اصلی میگی ڈالیں اور پھر اسے گرم ہونے دیں۔ اگر آپ چائے بنانا چاہتے ہیں تو پہلے پانی ڈالیں، پھر دودھ ڈالیں، چینی ڈالیں، چائے کی پتی ڈالیں، ادرک ڈالیں، پھر ابالیں، پھر چھان لیں۔ تو یہ ہدایات کی کچھ ترتیب ہیں۔ اسی طرح کسی بھی پروگرام میں ہدایات کا ایک سلسلہ ہوتا ہے جو پروگرام کو بتاتا ہے کہ اسے کیا کرنا ہے۔ اب جب ہم ہدایات کی اقسام کو پڑھتے ہیں تو اس میں ہمیں تین قسمیں نظر آتی ہیں۔ پہلی قسم ڈیکلریشن انسٹرکشن اور دوسری قسم ہے۔



00:53:39

پہلی ہماری ریاضی کی ہدایت ہے اور تیسری ہماری کنٹرول کی ہدایت ہے۔ ان تینوں ہدایات کے مختلف افعال ہیں اور ان کے نام ان کے فعل کے مطابق رکھے گئے ہیں، اس لیے ایسا نہیں ہے کہ انہیں یاد رکھنا بہت مشکل ہو گا۔ سب سے پہلے، اگر ہم ٹائپ ڈیکلریشن ہدایات کے بارے میں بات کرتے ہیں، تو آپ ٹائپ ڈیکلریشن سے کیا سمجھتے ہیں؟ ٹائپ ڈیکلریشن کا مطلب ہے کسی بھی متغیر کو اس کی قسم کے ساتھ اعلان کرنا، اس لیے جب بھی ہم ایسے بیانات لکھتے ہیں، ایسی ہدایات لکھتے ہیں جہاں ہمیں ایک متغیر کی وضاحت کرنی ہوتی ہے اور ہمیں اس کی قسم کا اعلان کرنا ہوتا ہے، ہم اسے ٹائپ کہتے ہیں۔



00:54:10

آئیے ڈیکلریشن سٹیٹمنٹ دیتے ہیں، ہم اپنے C کوڈ میں ایک طویل عرصے سے ٹائپ ڈیکلریشن سٹیٹمنٹ لکھ رہے ہیں، ہم اسے لکھ سکتے ہیں جیسے کہ اگر ہم int a = 4 لکھتے ہیں تو یہ بھی ہمارے ٹائپ ڈیکلریشن سٹیٹمنٹس میں سے ایک ہے، اگر ہم حرف c i کو est رسک کے برابر لکھتے ہیں تو یہ بھی ہمارے ٹائپ ڈیکلریشن سٹیٹمنٹس میں سے ایک ہے لیکن جب بھی ہم یہ سٹیٹمنٹس لکھتے ہیں تو ایک چھوٹی سی غلطی کرتے ہیں، جب ہم اپنے ڈیکلریشن قاعدہ کا استعمال کرتے ہوئے بھول جاتے ہیں۔ ہم کسی بھی متغیر کا استعمال کر رہے ہیں، اسے استعمال کرنے سے پہلے، ہمیں کرنا چاہیے۔



00:54:44

ہمیں اس کا اعلان کرنا چاہیے، یعنی ہمیں یہ دیکھنا چاہیے کہ اس میں کوئی صحیح قدر موجود ہے۔ ہم نے کمپائلر کو پہلے ہی بتا دیا ہوگا کہ یہ ویری ایبل کوڈ میں موجود ہے اور پھر ہم اسے استعمال کرتے ہیں۔ اگر ایسا نہیں ہوتا ہے اور سی کمپائلر اچانک ایک متغیر دیکھتا ہے اور پوچھتا ہے کہ یہ کہاں سے آیا ہے، تو یہ ایک ایرر پھینک دے گا۔ مثال کے طور پر اگر ہم اس کی درست مثالیں دیکھیں تو یہاں ہم نے int a کو 22 قرار دیا ہے تو int b میں لکھا ہے کہ a کی قدر b میں ڈالیں۔ یہ بالکل درست ہے کیونکہ a کا پہلے ہی اعلان کیا جا چکا ہے اور پھر اس کی قیمت b میں چلی گئی ہے۔ اور اگر ہم اسی کوڈ میں استعمال کرتے ہیں،



00:55:15

اگر ہم اسے int a = 22 کی شکل میں لکھنے کی کوشش کریں تو اپنے فنکشن کے اندر ہم int a = 22 لکھ سکتے ہیں اور پھر لکھ سکتے ہیں if int b = a، تو ہمیں یہاں کوئی غلطی نہیں ہوئی۔ ہمارا یہ کوڈ بہت اچھا کام کرے گا۔ اس کے بعد ہم کیا کر سکتے ہیں، اگر ہم اسے اس طرح سے بھی لکھیں int c = b + 1، جس کا مطلب ہے کہ پہلے سے اعلان کردہ متغیر ہے، آپ اس میں کچھ شامل کر رہے ہیں یا اگر اس میں -1 ہے یا اسے 2 سے ضرب یا 3 سے تقسیم کیا جائے، تو اس طرح سے بھی اگر ہم ریاضی میں دائیں ہاتھ سے آپریشن کریں اور پھر اسے c کو تفویض کریں۔



00:55:52

تو یہ بھی درست ہے، یہ بھی بالکل درست ہے، آئیے اسے پروگرام میں لکھتے ہیں، اگر c e ہمارے برابر ہو جاتا ہے اگر b کو 6 سے ضرب دیا جائے تو ہمیں کوئی غلطی نہیں ہوئی کیونکہ یہ ایک درست بیان ہے۔ درست ہدایت کی دوسری قسم کیا ہو سکتی ہے؟ int d = 1 e اس میں کیا ہوا کہ ہم نے ایک متغیر d کا اعلان کیا جسے ایک ویلیو تفویض کیا گیا تھا۔ اس کے ساتھ ہم نے ایک اور انٹیجر ویری ایبل e کا اعلان کیا، لیکن ہم نے ابھی تک e کو کوئی ویلیو تفویض نہیں کی ہے، لہذا یہ بالکل درست بیان ہے جہاں d کی قدر تفویض کی جا رہی ہے لیکن e کی نہیں۔



00:56:26

آئیے اس کو کوڈ میں لکھ کر بھی دیکھتے ہیں، int d = ہم نے ایک تو دیا ہے لیکن ہم نے e کو کوئی ویلیو نہیں دی، تو یہ بھی مکمل طور پر درست بیان ہوگا۔ اب ہم c کے اندر غلط سٹیٹمنٹس کی کچھ مثالیں دیکھتے ہیں، جیسے کہ اگر ہم ایک ویری ایبل oldAge بناتے ہیں، اب اگر ہم oldAge ویری ایبل کے اندر کچھ ویلیو اسٹور کرتے ہیں جو 22 ہے اور پھر ہم ایک نیا ویری ایبل newAge بناتے ہیں، تو آئیے newAge oldAge پلس سال بناتے ہیں، یعنی کتنے سال گزر چکے ہیں، تو یہاں oldAge متغیر پہلے سے موجود ہے لیکن سالوں کے طور پر اب سال نہیں ہیں۔



00:57:05

اس کے علاوہ ہم نے اعلان کیا کہ int سال 2 کے برابر ہیں، 2 سال کے بعد ہمارا نیا دور کیا ہونے والا ہے۔ اب ہم نے کوڈ میں سالوں کا ذکر کیا ہے کہ اس کی ویلیو دو ہے، پھر یہاں بھی سرخ لکیر کیوں نظر آرہی ہے کیونکہ ہم نے سالوں کا ذکر کرنے سے پہلے اسے استعمال کیا ہے، اس لیے ویری ایبل کو ڈکلیئر کرنے سے پہلے جب ہم اسے استعمال کرتے ہیں تو یہ کوڈ کے اندر ایک ایرر دیتا ہے، یعنی کمپائلر جو کرتا ہے وہ لائن بہ لائن جاتا ہے، اس لائن میں یہ پڑھتا ہے کہ بڑھاپا ایک متغیر ہے، اس کی قیمت بھی 22 ہے، یہ لائن ہماری نئی عمر ہے



00:57:35

ایک متغیر ہے، اس کی قدر بڑھاپے کی قدر ہے، جسے وہ جانتا ہے کہ یہ پلس سال کیا تھا۔ اب وہ یہاں الجھ جائے گا کہ میں نے آج تک سال نہیں پڑھے، اگلی سطور میں سال پڑھنے جا رہا تھا، اسی لیے اگر اس طرح کا کوئی بیان ہو تو سال سب سے اوپر ہونا چاہیے، تب ہی وہ درست بیان ہوگا، تب ہی ہمارے ٹائپ ڈیکلریشن سٹیٹمنٹس میں کوئی غلطی نہیں ہوگی۔ اب اگر ہم ایک اور قسم کے درست بیان کو سمجھتے ہیں، تو ہم ایک ساتھ متعدد متغیرات کا اعلان کر سکتے ہیں، جس کا مطلب ہے کہ یہاں ہم نے ان کا اعلان کر دیا ہے۔



00:58:03

int abc دیا گیا اور اس کے بعد ایک ہی ویلیو a، b اور c کو تفویض کی گئی، جو ایک ہے، یہ ویلیو کیسے تفویض ہوئی، ایک کی ویلیو c کو تفویض کی گئی، پھر c یعنی v کی ویلیو b کو تفویض کی گئی، پھر b یعنی v کی قدر a کو تفویض کی گئی، تو یہ عمل تھا، آئیے ہم اسے ایک بار اپنے کوڈ میں آزمائیں، پھر ہم اپنے xzvariy کوڈ میں ایک بار آزماتے ہیں، جیسے کہ ہم xzvariy دے سکتے ہیں۔ اقدار x = y = z = 4، لہذا اس قسم کا ایک بیان c کے اندر درست ہے، لیکن اگر ہم اس کا دوسرا ورژن دیکھیں جس میں ہم اعلان کے وقت متغیر xy اور z کا اعلان کرتے ہیں۔



00:58:40

لیکن چلو یہاں چار دیتے ہیں یعنی ان سب کو دو کے برابر کرتے ہیں اور ہم سوچتے ہیں کہ چلو ایک لائن چھوڑ دیں، کیوں اضافی لکھیں، تو یہاں سرخ لکیر خود بخود ظاہر ہو جاتی ہے، یہ سرخ لکیر کیوں آئی کیونکہ جب ہم چار کو z تفویض کر رہے ہیں تو اس کی ویلیو y ہو رہی ہے اور یہ سوچ رہا ہے کہ ابھی تک کمپائلر کو نہیں معلوم کہ z کیا ہے، کیونکہ ہم نے ابھی تک اس لائن کو ختم کرنے کے لیے ایک ہی لائن بھی نہیں دی ہے اور اس لائن کو بھی ختم نہیں کیا ہے۔ اس کی قدر کسی اور کے لیے ہے، اسی بیان میں ہم y اور پھر اس کی قدر بھی تفویض کر رہے ہیں۔



00:59:17

آپ کسی اور کو بھی قیمت دے رہے ہیں، جس کا مطلب ہے کہ آپ ایک ساتھ استعمال اور اعلان نہیں کر سکتے۔ پہلے آپ کو اس کا اعلان کرنا ہوگا، اس کے بعد آپ کو متغیر کا استعمال کرنا ہوگا، ورنہ C ہمیں ایک ایرر دے گا۔ اس لیے ہمیں ایسی غلطیاں نہیں کرنی چاہئیں۔ جب بھی آپ متعدد متغیرات کو ایک ساتھ ڈیفائن کر رہے ہیں، انہیں C کے اندر ڈکلیئر کر رہے ہیں، تو انہیں ایک ساتھ ڈیکلیئر کریں، لیکن ان کی قدریں اور ان کا استعمال بعد میں ہو گا۔ اگلی قسم کی ہدایات جو C کے اندر موجود ہیں وہ ہماری ریاضی کی ہدایات ہیں۔ ریاضی کا لفظ ایسا ہے۔



00:59:45

ہم نے 11ویں، 12ویں، 10ویں یا 6ویں سے 8ویں میں ریاضی پڑھی ہوگی۔ ہم ریاضی کا مطلب سمجھتے ہیں جہاں جمع، مائنس، ضرب، تقسیم، یہ سب چل رہا ہے، یعنی بنیادی طور پر ریاضی سے متعلق تمام چیزیں، اس لیے اگر ہم ریاضی کے کسی بھی بیان کو دیکھیں، مثال کے طور پر، فرض کریں کہ ہم a + b کی مثال لیں، تو اس کے اندر وہ چیزیں جن پر آپریشن کیا جاتا ہے، یعنی وہ چیز جس کا جمع کیا جا رہا ہے، جس چیز کو جمع کیا جا رہا ہے، جس چیز کو divid کیا جا رہا ہے۔ یاد دہانی ہم نکال رہے ہیں، ہم سوال نکال رہے ہیں، ہم ان آپریٹرز کو کہتے ہیں، تو یہاں ایک ہمارا آپریٹر بن جائے گا



01:00:15

آپریٹر ایک بی ہمارا آپریٹر ٹو بن جائے گا۔ اسی طرح، اگر کوئی اور بیان ہوتا جیسے a + b - c ld ba d، یہاں abcd ہمارے چار آپریٹر ہیں اور دوسری اصطلاح جو ہمیں سیکھنے کی ضرورت ہے وہ ہے آپریٹر۔ آپریٹر کیا ہے؟ یہ وہ علامت ہے جو بتاتی ہے کہ کون سا آپریشن کیا جا رہا ہے۔ یہاں کی طرح ہمارا آپریٹر ہمارا پلس آپریٹر ہوسکتا ہے۔ یہاں اگر مائنس کیا جا رہا تھا، اگر متبادل کیا جا رہا تھا، تو ہمارا مائنس ہمارا آپریٹر بن جاتا۔ اگر ضرب ہو رہی ہوتی تو ast رسک ہمارا آپریٹر بن جاتا۔ تقسیم ہوتی۔



01:00:52

تو ہم اس سلیش کو اپنا آپریٹر کہتے ہیں۔ لہذا s کے اندر کی ہدایات جن میں کچھ آپرینڈ اور کچھ آپریٹرز ہوتے ہیں انہیں ریاضی کی ہدایات کہا جاتا ہے۔ اب ریاضی کی ہدایات کی مثالیں کیا ہو سکتی ہیں، ہم انہیں لکھ کر دیکھ سکتے ہیں جیسے کہ اگر ہم ایک نئے متغیر کی تعریف کرتے ہیں، int a = 1 اور b = 2 اور یہاں ہم ایک نئے متغیر sum = a + b کی وضاحت کرتے ہیں تو یہاں ایک ریاضی کا مطلب لیا جا رہا ہے، a اور b آپرینڈز ہیں، اس کے علاوہ ہمارا آپریٹر اور sum ہے جو ہماری نئی variable کے اندر تفویض کرنے والی قیمت ہے۔



01:01:30

ایسا ہوتا ہے، یعنی ذخیرہ ہو جاتا ہے۔ اسی طرح ہم اسے بنا سکتے ہیں، int multiply = a *ba b اب، یہاں multiply ایک متغیر ہے جس کے اندر a *b کی قدر ذخیرہ ہو رہی ہے، اب جب بھی ہم ریاضی کی ہدایات کے بارے میں بات کرتے ہیں، تو ایک خاص بات جو ہمیں نوٹ کرنی چاہیے وہ یہ ہے کہ بائیں جانب واحد متغیر، جب بھی ہم کوئی ریاضی کا عمل کرتے ہیں، تو وہ سب ہمارے دائیں ہاتھ کی طرف جاتے ہیں، اگر ہمارے پاس b + ظاہر ہوتا ہے، تو ہمارے پاس کچھ ایسا ہوگا اس کی تمام اقدار کو بائیں طرف متغیر کو تفویض کریں جو



01:02:09

یہ بائیں ہاتھ کی طرف لکھا جائے گا اور یہ تمام ویلیوز دائیں سے بائیں محفوظ ہو جائیں گی اور بائیں طرف ہمیں ہمیشہ یہ ذہن میں رکھنا ہے کہ ہمارے پاس ایک واحد ویریبل ہونا چاہیے اور تمام آؤٹ پٹ نکل کر صرف اسی ایک ویری ایبل کے اندر محفوظ ہو جائیں گے، اگر ہم بائیں طرف رکھیں کہ ہم دو ویری ایبلز کو سٹور کرنا چاہتے ہیں، int xy = a *b تو اس صورت میں a کی ویلیو نہیں ملے گی لیکن اس کی قیمت نہیں ملے گی۔ x کو تفویض کیا گیا ہے کیونکہ یہاں ہم نے ابھی ایک نیا متغیر y کا اعلان کیا ہے، ایک نیا متغیر جس میں a



01:02:46

* b کی قدر بائیں طرف چلی گئی ہے تو اس کا مطلب ہے اس اظہار کے لیے ہمارے پاس صرف y ہے جس میں اس کی قدر محفوظ ہے۔ اس کے بعد ہم اس بارے میں بات کرنے جارہے ہیں کہ ارتھم ہدایات میں کون سے تاثرات درست ہیں اور کون سے نہیں۔ ہم کچھ بنیادی کارروائیوں کو سمجھتے ہیں، ارتھم ہدایات میں ہمارے پاس پلس آپریٹر، مائنس آپریٹر، ملٹی پلائی آپریٹر اور ڈیوائیڈ آپریٹر ہیں۔ اس کے ساتھ ہمارے پاس ایک اور آپریٹر ہے، ماڈیول، جس کے بارے میں اب ہم اس باب میں پڑھنے جا رہے ہیں، تو یہ پانچ ہمارے اہم آپریٹر ہیں۔ اب اس میں



01:03:17

بیانات کیا ہوں گے جیسے ہم نے a = b + c لکھا ہے، یہ ایک درست بیان ہے، یعنی یہاں یہ دونوں ہمارے آپریٹر ہیں اور بائیں جانب ہم نے ایک ہی متغیر لکھا ہے، اگر ہم اگلی بات کریں تو b*c بھی ایک درست آپریشن ہے کیونکہ ہمیں ضرب ملی ہے اور ہم نے اسے a میں محفوظ کیا ہے، اب اگر دائیں ہاتھ کی جانب سے غلط کی بات کریں تو اب ہمارے دائیں جانب c + ہے اور اب بائیں جانب a ہے ریاضی کا مطالعہ کریں تو یہ ریاضی کے حساب سے بالکل درست بیان ہوتا لیکن یہاں یہ بالکل غلط ہے



01:03:48

یہ ایک سٹیٹمنٹ ہے، یہ سٹیٹمنٹ کمپائلر سے کہہ رہی ہے کہ a کی ویلیو لے کر اسے b+c میں اسٹور کرے، جبکہ b+c سنگل ویری ایبل نہیں ہے کیونکہ سنگل ویریبل بائیں ہاتھ سے نہیں لکھا جاتا، اس لیے ہمارا سٹیٹمنٹ بالکل غلط ہو جاتا ہے، ایک بار ہم اسے کوڈ میں لکھتے ہیں، جیسا کہ اگر ہم int b+c=a لکھتے ہیں، اب یہاں ایک سرخ لکیر آ گئی ہے کیونکہ یہ سٹیٹمنٹ غلط ہے کیونکہ اس میں صرف ایک ہی ویلیو محفوظ ہے، جس میں ویری ایبل ہونا چاہیے۔ یہاں اگر ہم اسے ریورس کرتے ہیں، یعنی ہم یہاں a اور لکھتے ہیں۔



01:04:17

اگر ہم یہاں b+c لکھیں تو یہ درست ہوگا، لیکن ہمیں اوپر b اور c کی تعریف کرنی ہوگی۔ ہم b = c = 1 لکھتے ہیں۔ اب یہ بیان بالکل درست ہوگا کیونکہ تمام متغیرات کی وضاحت کی گئی ہے اور بائیں طرف ہم نے صرف a لکھا ہے۔ اب مزید کیا تاثرات ہوسکتے ہیں، جیسے کہ ہم ریاضی میں کیا لکھتے ہیں، اگر ہمیں دو نمبروں کو ضرب دینا ہے تو ہم x = 2 * 3 لکھتے ہیں۔ ہم وہاں ڈاٹ لگاتے ہیں یا 2*3، یہ ​​بھی ضرب شمار ہوتا ہے، لیکن c کے اندر یہی بات درست نہیں۔ اگر آپ اندر لکھتے ہیں c



01:04:52

اسے a = c کے طور پر نہیں دیکھا جائے گا، اسے ایک غلطی کے طور پر دیکھا جائے گا۔ اس کی مثال کیا ہو سکتی ہے، جیسے اگر ہم int d = bc - c لکھیں تو a کے اندر جو ذخیرہ ہوگا اسے bc سے تقسیم کیا جائے گا اور جو رقم ہمارے پاس آئے گی وہ a کے اندر جمع ہوجائے گی، اس کے ساتھ ہی ایک غلط تاثر یہ ہوسکتا ہے کہ کہیں ہم نے دیکھا ہے کہ اگر b کی طاقت کو c لکھنا ہے تو ہم bc کیسے لکھیں، یہ اظہار c کے اندر طاقت ہے، ہم نے طاقت کے اندر ایک واحد طاقت استعمال نہیں کی ہے، اس کا استعمال غلط ہے۔ ایک فنکشن



01:05:37

جس کے اندر ہم پہلے b ڈالیں گے، پھر c ڈالیں گے، اس سے ہمیں b کی پاور c کی قدر ملے گی، تو اگر ہم b کی پاور کو a کے اندر c کی طاقت کو ذخیرہ کرنا چاہتے ہیں، تو ہم کچھ اس طرح لکھ رہے ہوں گے، اگر ہم یہ لکھیں گے تو یہ ویلیو غلط ہو جائے گی، یہ ویلیو درست ہو جائے گی، آئیے اپنے کوڈ کے اندر اس کی ایک مثال دیکھتے ہیں، int power e equal to b کی power c، اس کے اوپر ایک طریقہ شامل کریں گے، اس کے اوپر ایک طریقہ شامل کریں گے، جس میں ایک ہیڈ کو شامل کیا جائے گا۔ فائل کا مطلب ہے کہ اس کے اندر کچھ چیزیں پہلے سے موجود ہیں جنہیں ہم استعمال کر سکتے ہیں، اس لیے جو پاور ہم فنکشن کے طور پر استعمال کر رہے ہیں وہ صرف طریقہ h سے آئی ہے۔



01:06:17

اب اگر ہم پاور پرنٹ کرتے ہیں، تو یہ 1 کی طاقت ہوگی اور ہم پہلے ہی جانتے ہیں کہ ہمارے لیے صرف ایک پرنٹ کیا جائے گا۔ ہم پاور پرنٹ کرنا چاہتے ہیں، تو آئیے اسے محفوظ کریں اور چلائیں۔ ایک ہمارے لیے پرنٹ کیا جائے گا۔ وہاں، اگر ہم یہاں b لکھتے ہیں، اگر ہم اسے محفوظ کرکے چلاتے ہیں، تو آؤٹ پٹ کیا ہوگا؟ ہمارے پاس آؤٹ پٹ ro ہے. اب یہ آر او کیوں آیا ہے، ہمیں غلطی ہوجانی چاہیے تھی کیونکہ طاقت موجود نہیں ہے۔ دراصل، s کے اندر موجود اس آپریٹر کو joar آپریٹر کہا جاتا ہے۔ ہم بعد میں جوار کے بارے میں جاننے جا رہے ہیں۔



01:06:51

یہ بٹ وائز آپریشن کرنے کے لیے کیا جاتا ہے۔ ہم جانتے ہیں کہ c میں موجود ہر نمبر کو مشین سمجھتی ہے۔ نہیں، مشین کس کوڈ کو سمجھتی ہے؟ مشین مشین کوڈ کو سمجھتی ہے جو صفر اور ایک میں لکھا جاتا ہے۔ لہذا جب بھی ہم صفر اور ایک کے درمیان کوئی آپریشن کرتے ہیں، وہ ہمارے بٹ وائز آپریشن ہوتے ہیں۔ تو یہ ہمارا ایڈ آپریٹر ہے جو بٹس کے درمیان ہوتا ہے، یعنی جب آپ ایک ہی بٹس کے درمیان ایڈ کرتے ہیں تو اس کا آؤٹ پٹ ہمارے پاس صفر آتا ہے۔ ہم بٹ وائز آپریٹرز کے بارے میں جانیں گے۔



01:07:18

آپ اسے بعد میں پڑھ رہے ہوں گے لیکن ابھی کے لیے b to power c اگر ہم اسے اس طرح لکھنے کی کوشش کریں گے تو یہ ایک درست بیان ہے ایسا نہیں ہے کہ کمپائلر ہمیں ایک ایرر دے گا لیکن ہمیں جو آؤٹ پٹ ملے گا وہ غلط ہے b پاور سی ہماری آؤٹ پٹ نہیں ہوگی آؤٹ پٹ کچھ اور ہوگی اس لیے ہم یہ نہیں لکھیں گے اگر ہم پاور دکھانا چاہتے ہیں تو ہمیں طریقہ استعمال کرنا ہوگا a کا استعمال کرنا پڑے گا جس کے بارے میں ہم اپنے پاور موڈ کے بارے میں بات کر رہے ہیں۔ آپریٹر تو اسے ماڈیولر یا ماڈیولو بھی کہا جاتا ہے اسے فیصد کہا جاتا ہے۔



01:07:50

جو نشان ہے وہ ہمارا ماڈیول آپریٹر ہے، یہ آپریٹر کیا کرتا ہے، اگر ہم نے ایک ماڈیول بی لکھا ہے، تو یہ ہمیں a did ba b کی یاد دہانی واپس کر دے گا۔ مثال کے طور پر، اگر ہم اس کی کچھ مثالیں دیکھیں تو 4 ماڈیولو 2 ہمیں قطار 5 ماڈیولو 3 واپس کرے گا کیونکہ اگر ہم چار کو دو سے تقسیم کریں گے تو ہمیں ایک یاد دہانی ملے گی۔ اگر ہم پانچ کو تین سے تقسیم کریں تو ہمیں ایک یاد دہانی ملے گی۔ ایک پر دو q آئیں گے، تو اگر ہم 5/3 کرتے ہیں، تو q ہمارے پاس آئے گا۔ ایک یہاں modulo اور اور ہمیں دیتا ہے تو ہمیں ایک ہی انداز میں دو کی یاد دہانی ملتی ہے۔



01:08:29

اگر ہم 12 ماڈیولو 10 کریں گے تو ہمیں صرف دو یاد دہانی ملے گی اور اگر ہم 20 ماڈیولو 10 کریں گے تو ہمیں یاد دہانی صفر کے طور پر ملے گی۔ اس طرح جب بھی ہمیں کوئی یاد دہانی معلوم کرنی ہوتی ہے تو ہم ماڈیول آپریٹر کا استعمال کرتے ہیں اور اسے لکھ کر اس کی مثال دیکھتے ہیں۔ اگر ہمیں انٹیجر ویلیو پرنٹ کرنی ہے جس میں ہم 16 ماڈیولو 10 پرنٹ کرنا چاہتے ہیں تو ہمیں پہلے ہی معلوم ہے کہ ہمیں کیا جواب ملنا چاہیے، جواب چھ ہونا چاہیے اور جو جواب پرنٹ ہو چکا ہے وہ 6 ہے کیونکہ جب ہم 16 کو 10 سے تقسیم کریں گے تو چھ رہ جائیں گے۔ اب



01:09:01

ماڈیولو آپریٹر ہماری فلوٹ ویلیوز پر کام نہیں کرتا جیسے اگر ہم یہاں 1.6/1.0 لکھتے ہیں اور اگر ہم اسے محفوظ کرنے کے بعد چلانا چاہتے ہیں تو یہ نہیں چلے گا کیونکہ غلط آپرینڈز ہیں ہمارا ایک آپرینڈ 1.6 ہے اور دوسرا آپرینڈ 1.0 ہے اس لیے ماڈیولو آپریٹر صرف انٹیجرز پر کام کرتا ہے جب بھی ہم اسے انجرٹ کرکے واپس کرتے ہیں۔ یاد دہانی کی قدر اب عدد میں بھی دو صورتیں ہیں یا تو ہمارا ہندسہ مثبت ہوسکتا ہے یا جب بھی ہمارا ہندسہ منفی ہوسکتا ہے



01:09:34

اگر ہمارا شمار مثبت ہے تو ہمیں جو یاد دہانی ملتی ہے وہ بھی ایک مثبت یاد دہانی ہے لیکن جب ہمارا شمار منفی ہے تو ہماری یاد دہانی بھی منفی آتی ہے۔ ہم اس کی مثالیں دیکھ سکتے ہیں۔ یہاں، اگر ہم -8 ماڈیولو 3 لکھیں، اسے محفوظ کریں اور اسے چلائیں، تو ہمارا جواب ہوگا -2 کیونکہ جب ہم 8 کو تین سے تقسیم کریں گے تو یاد دہانی دو کے طور پر آئے گی کیونکہ ہمارے چھ پہلے ہی تقسیم ہو چکے ہوں گے۔ کیونکہ ہمارا شمار منفی ہے اس لیے یاد دہانی میں ہمارا جواب بھی نفی میں آیا ہے لیکن اس کے لیے



01:10:08

اگر ہم پر مثبت بناتے ہیں اور اسے محفوظ کرتے ہیں اور اسے چلاتے ہیں، تو آؤٹ پٹ + 2 ہوگا۔ اس طرح، جب بھی ہم منفی یاد دہانی چاہتے ہیں، ہمیں عدد کو منفی رکھنا ہوگا۔ جب بھی ہم مثبت یاد دہانی چاہتے ہیں، ہمیں عدد کو مثبت رکھنا ہوگا۔ اگلا موضوع جس کے بارے میں ہم ریاضی کی ہدایات میں بات کریں گے وہ ہے قسم کی تبدیلی۔ جب بھی ہمارے پاس مختلف آپریٹرز ہوں گے، اگر وہ ایک ہی قسم کے ہوں گے، تو آؤٹ پٹ بھی ایک ہی قسم کی ہو گی، لیکن اگر ان کے ڈیٹا کی قسمیں مختلف ہوں گی، تو آؤٹ پٹ بھی مختلف ڈیٹا کی اقسام کی ہو گی۔ جب بھی ہم int، int پر کوئی آپریشن کرتے ہیں۔



01:10:41

پھر آؤٹ پٹ میں صرف int آئے گا جب بھی ہم فلوٹ کے ساتھ فلوٹ پر آپریشن کریں گے تو آؤٹ پٹ میں صرف فلوٹ آئے گا لیکن اگر int کو فلوٹ سے آپریٹ کیا جائے گا تو فلوٹ آؤٹ پٹ میں آئے گا جب ہم اپنے ڈیٹا ٹائپ ٹیبل کے بارے میں بات کرتے ہیں تو ہمارا int دو بائٹس لیتا ہے اور ہمارا فلوٹ چار بائٹس لیتا ہے، اس طرح اس فلوٹ کا مطلب یہ ہے کہ اس قسم کا ڈیٹا کنٹینر ذخیرہ کر سکتا ہے۔ زیادہ ویلیو، تو سی کمپائلر کیا کرتا ہے یہ تھوڑی سی منطق کا اطلاق کرتا ہے، اس نے یہ منطق کیسے لاگو کی کہ اگر ویلیو int ہے تو چھوٹی ہے لیکن فلوٹ کی



01:11:12

قدر بڑی ہے نا، اور اگر ان کے درمیان کوئی آپریشن کیا جائے، جمع کہیں یا ضرب یا تقسیم، تو ایک بڑی تعداد آؤٹ پٹ کے طور پر آئے گی۔ اب اس بڑی تعداد کو ذخیرہ کرنے کے لیے ایک بڑے کنٹینر کی ضرورت ہوتی ہے، یعنی فلوٹ جیسے کنٹینر کی ضرورت ہوتی ہے، اسی لیے ہم آؤٹ پٹ میں int نہیں رکھتے، ہم فلوٹ رکھتے ہیں، اس لیے جب بھی int پر کوئی آپریشن کیا جائے گا، آؤٹ پٹ فلوٹ ہوگا۔ اس کی مثالیں کیا ہو سکتی ہیں، مثلاً اگر ہم int کو int کے ساتھ دو سے ضرب دیں تو جواب چار ہو گا، لیکن یہاں اگر ہم 2.0 کو دو سے ضرب دیں تو



01:11:43

ہمیں آؤٹ پٹ میں 4.0 ملے گا اور اگر ہم یہاں 2.0 کو 2.0 سے ضرب دیں گے تو آؤٹ پٹ 4.0 ہو گا۔ آئیے ہم اسے اپنے کوڈ میں لکھتے ہیں اور دیکھتے ہیں، سب سے پہلے ہم f پرنٹ کریں گے۔ ہم 2*2 کریں گے اور اسے محفوظ کریں گے تو آؤٹ پٹ 4 ہو جائے گا، لیکن اگر ہم 2.0 کو دو سے ضرب دیں تو یہ ایرر یہاں آ گیا۔ خرابی پہلے کیوں آئی کیوں کہ آؤٹ پٹ کو فلوٹ ویلیو ہونا چاہیے تھا، لیکن ہم نے کہا کہ آؤٹ پٹ ایک انٹیجر ویلیو ہوگی، اس لیے اب ہمیں اسے f میں تبدیل کرنا پڑے گا۔ آئیے اسے محفوظ کریں اور اسے دوبارہ چلائیں۔ چلانے کے بعد ہمیں آؤٹ پٹ ملتا ہے۔



01:12:20

نتیجہ 4.00 ہے جو کہ فلوٹ ویلیوز کی کوئی بھی تعداد ہے، بطور ڈیفالٹ ہمیں ہندسوں کی کوئی بھی تعداد ملتی ہے۔ اس کے بعد اگر یہ 2.0*2.0 ہوتا تو اس صورت میں کیا ہوتا، اس صورت میں بھی ہمیں وہی آؤٹ پٹ ملتا جو کہ فلوٹ ویلیو ہے۔ اب اس آپریشن کے بجائے ہم divide also استعمال کر سکتے ہیں، اگر فرض کریں کہ ہم 4 کو 2.2 سے تقسیم کر رہے ہیں، تو اس صورت میں بھی آؤٹ پٹ فلوٹ ہونا چاہیے کیونکہ ہمارے پاس فلوٹ کا ایک آپرینڈ ہے، اس لیے ہمیں جو آؤٹ پٹ ملتا ہے وہ ایک فلوٹ ویلیو ہے۔ تو اس طرح قسم کی تبدیلی ہوتی ہے۔ قسم کی تبدیلی کیسے ہوتی ہے؟ اگر مرتب کرنے والا دیکھتا ہے کہ آؤٹ پٹ جو ہے۔



01:12:56

اسے ایک بڑے کنٹینر میں اسٹور کیا جانا چاہئے کیونکہ یہ ایک بڑا آؤٹ پٹ ہے، اس لیے یہ اسے زبردستی کسی چھوٹے کنٹینر میں خود سے اسٹور نہیں کرتا، یعنی یہ اسے ایک int میں اسٹور نہیں کرے گا، یہ پوری آؤٹ پٹ کو محفوظ کرنے کی کوشش کرے گا، اس لیے یہ اسے فلوٹ میں بطور ڈیفالٹ اسٹور کرتا ہے۔ اب ہم اس کی چند اور خاص صورتوں کو دیکھتے ہیں جیسے کہ اگر ہم دو کو تین سے تقسیم کرتے ہیں، تو چونکہ یہ دونوں ہماری انٹیجر ویلیوز ہیں، اس لیے ہماری آؤٹ پٹ ایک انٹیجر ہونی چاہیے۔ آئیے ایک بار آؤٹ پٹ کو چیک کریں، اگر یہ یہاں ایک عدد کے طور پر آئے گا، تو ہم اسے d میں تبدیل کر دیں گے۔



01:13:25

ہمیں قطار کا آؤٹ پٹ ملا ہے کیونکہ ہمیں ہمیشہ ایک عددی آؤٹ پٹ ملے گا۔ اب جب ہم دو کو ویں سے تقسیم کرتے ہیں تو ہمیں 0 پوائنٹ ملتا ہے یا کچھ اور۔ لیکن چونکہ یہ انٹیجر ویلیو ہے، اس میں سنگل ہندسہ محفوظ ہے، ہمارے پورے ہندسے محفوظ نہیں ہیں، اس لیے یہ اسے صفر کر دے گا۔ ایک ہی وقت میں، اگر ہم 2.0 لیتے ہیں، تو اب ہمیں آؤٹ پٹ میں ایک فلوٹ ویلیو ملتی ہے۔ فلوٹ ویلیو میں ہمیں کیا آؤٹ پٹ ملتا ہے؟ یہ ہمیں 0.666 667 دیتا ہے۔ لہذا اگر ہم درست آؤٹ پٹ چاہتے ہیں، تو اس کے لیے ہم دونوں میں سے کسی ایک کو فلوٹ بنائیں گے۔ لیکن اگر ہم اعشاریہ چاہتے ہیں،



01:14:00

3.0 کا جو بھی حصہ آتا ہے، اگر اسے مکمل طور پر ہٹا دیا جائے تو ہم اسے انٹیجر بنا دیں گے۔ تو ہم تین کو دو سے تقسیم کر سکتے ہیں۔ جب بھی ہم تین کو دو سے تقسیم کرتے ہیں، یہاں ہمیں آؤٹ پٹ ملنا چاہیے۔ آؤٹ پٹ میں ایک عددی قدر آئے گی، ایک۔ لیکن اگر ہم 3.0 کو دو سے تقسیم کریں تو ایک آؤٹ پٹ میں نہیں آئے گا۔ آئیے اسے بھی ایف بنائیں۔ اب ہمیں آؤٹ پٹ میں 1.5 ملے گا۔ لہذا جب ہمیں صحیح جواب کی ضرورت ہو تو ہمیں اسے فلوٹ بنانا ہوگا۔ جب ہم اعشاریہ کو مکمل طور پر ختم کرنا چاہتے ہیں، تو ہم اسے عددی عدد بنائیں گے۔ تو قسم کی تبدیلی اس طرح ہوتی ہے: قسم



01:14:35

اب ہم تبدیلی کی بنیاد پر ایک بہت ہی دلچسپ سوال حل کریں گے۔ سوال میں ہمیں int a کو دیکھنا ہے، اس کی ویلیو 1.99 999 ہے، یہ کیسے کام کرے گا، اگر ہم اس قدر کو ایک عدد کو تفویض کریں گے تو یہ کیا کرے گا، یہ اس کے اعشاریہ کو ہٹا دے گا، یہ اعشاریہ کو ہٹا دے گا، یعنی یہ اس حصے کو مکمل طور پر ختم کر دے گا، تو یہاں a کی قدر ایک ہونی چاہیے یا a کی قدر دو ہونی چاہیے، ہم اس کوڈ میں لکھیں گے کہ ہم int = کوڈ لکھیں گے۔ 1.99 999، آئیے اسے محفوظ کریں اور اب ہم اپنا a اور اس کی قیمت پرنٹ کریں گے۔



01:15:19

ہم دیکھیں گے کہ اصل میں کیا پرنٹ ہوتا ہے۔ یہاں، سب سے پہلے یہ ایک غلطی پیش کرتا ہے کہ ڈبل سے int میں تبدیلی ممکن نہیں ہے، مضمر تبدیلی ممکن نہیں ہے۔ جب بھی قسم کی تبدیلی ہوتی ہے، C میں دو قسم کی تبدیلیاں ہوتی ہیں۔ پہلی تبدیلی جو ہمارے پاس ہے وہ مضمر ہے۔ مضمر تبدیلی خود مرتب کرنے والے کے ذریعہ کی جاتی ہے اور ہماری دوسری قسم واضح ہے۔ ہم بطور پروگرامر، ہم بطور صارف، یہ خود کرتے ہیں۔ ہمارا کمپائلر ہمارے لیے ایسا نہیں کرتا ہے۔ یہ وہ تبدیلی ہے جو ہم خود کرنا چاہتے ہیں۔



01:15:55

یہ ایکسٹرنل کنورژن ہے، اس لیے اسے implied conversion کہتے ہیں، یعنی int جیسی چھوٹی قسمیں صرف float میں اسٹور کی جاسکتی ہیں، int جیسی اقسام کو ڈبل میں اسٹور کیا جاسکتا ہے لیکن float یا double کو int کے اندر اسٹور نہیں کیا جاسکتا، اس لیے یہ خود بخود کنورٹ نہیں ہوگا، لیکن اگر ہم اسے خود بخود پروگرامر کے طور پر تبدیل کرنا چاہتے ہیں تو ہم ان دونوں کے درمیان ویلیو لکھتے ہیں، پھر ہم ان دونوں کے درمیان لکھتے ہیں۔ جس قسم میں ہم کنورٹ نہیں کرنا چاہتے تو کمپائلر کیا کرے گا۔



01:16:27

یہ زبردستی بدل جائے گا۔ کمپائلر کسی بڑی قسم کو چھوٹی میں تبدیل نہیں کرنا چاہتا لیکن اسے یہ کرنا پڑے گا کیونکہ ہم نے int لکھا ہے۔ اب ہم اسے محفوظ کرتے ہیں اور اسے ایک بار پھر مرتب کرتے ہیں اور دیکھتے ہیں کہ یہ کامیابی سے مرتب ہوا ہے۔ اب اگر ہم اپنا کوڈ چلاتے ہیں تو جو آؤٹ پٹ نکلے گا وہ ایک ہو گا۔ اس لیے جب بھی یہ اس ڈبل ویلیو کو تبدیل کرتا ہے، ڈیفالٹ کے طور پر C میں تمام فلوٹ ویلیو کو ڈبل کے طور پر دیکھا جاتا ہے کیونکہ ڈبل ایک بڑی ڈیٹا ٹائپ ہے، اب جب وہ اس ڈبل ویلیو کو تبدیل کرتا ہے، یعنی اس قدر کو int میں



01:16:56

جب اس نے اسے 1 میں تبدیل کیا، تو اس نے 999999 کو مکمل طور پر ہٹا دیا، یہ دور نہیں ہوتا ہے۔ C کمپائلر ریاضی میں کسی بھی آپریشن کو ختم نہیں کرتا ہے جب یہ فلوٹ کو int میں تبدیل کرتا ہے۔ اگر یہ 1.99 ہے تو اسے دو بنائیں اور پھر اس میں دو ڈالیں۔ عدد میں، یہ اتنی منطق کا اطلاق نہیں کرتا جتنا ریاضی میں ہوتا ہے۔ اگر آپ کو اعشاریہ کو ہٹانا ہے، تو یہ ان سب کو ہٹا دے گا اور صرف ذخیرہ کرے گا۔ اس لیے جب بھی ہم انٹرویوز کے لیے بیٹھتے ہیں تو ہمیں اس چیز کا خاص خیال رکھنا پڑتا ہے اور ہم سے کچھ ایسے سوالات پوچھے جاتے ہیں جیسے کہ مجھے سی میں بتاؤ یا کلاس ٹیسٹ میں، میٹ سیم می اینڈ۔



01:17:26

اسی سوال میں آتا ہے کہ ہم اس کے آؤٹ پٹ میں کیا لکھیں گے، تو ہمیں اپنے اعشاریوں کو مکمل کرنا ہے، اگلا موضوع جس پر ہم بات کریں گے وہ آپریٹر صدر ہے، جیسا کہ ریاضی میں ہم نے ایک چھوٹا سا قاعدہ پڑھا تھا جسے ہم بورڈ ماس رول کہتے تھے، ہمارے بورڈ ماس رول کو کیا کہتے ہیں، پہلے بریکٹ کھولیں، اس کے بعد پہلے تقسیم، پھر ضرب، پھر اضافہ، پھر ضرب، پھر اس طرح سے عمل کیا، تو اس طرح سے ضرب، پھر اس طرح سے عمل کیا گیا، اس طرح ہم نے بہت سے کام کیے ہیں؟ کون سا آپریشن پہلے کرنا ہے اور کون سا آپریشن بعد میں کرنا ہے اس کا اصول



01:17:56

پہلے ایک مناسب سیریز ہوا کرتی تھی، ایک ترتیب ہوا کرتی تھی، اسی طرح C میں، کون سا آپریشن پہلے کیا جائے گا، کون سا آپریشن بعد میں کیا جائے گا، یہ C compiler کے اندر پہلے سے ہی طے شدہ ہے۔ اب اس میں ہم ترجیحی حکم کو صدر کہتے ہیں، یعنی جو ترجیح میں زیادہ آتا ہے اس کا صدر اعلیٰ ہوتا ہے، جو ترجیح میں کم آتا ہے اس کا صدر کم ہوتا ہے۔ لہذا، جو ترجیح میں پہلے آتے ہیں، وہ ہیں، ہمارے پاس ضرب، تقسیم اور ماڈیول آپریٹرز ہیں، ان تینوں آپریٹرز کی ترجیح سب سے زیادہ ہے، اس کے بعد وہ ترجیح میں آتے ہیں۔



01:18:27

پلس مائنس آتا ہے اس کے بعد ترجیح میں، اس برابر کے برابر کو c کے اندر اسائنمنٹ آپریٹر بھی کہا جاتا ہے، کچھ تفویض کرنے کا مطلب ہے کسی کو کچھ دینا؛ جیسا کہ اگر ہم کہتے تھے کہ جو شخص اسکول میں مانیٹر بنتا تھا، ہم کہتے تھے کہ مانیٹر کا عہدہ اس کو تفویض کیا گیا ہے، یعنی اسے دیا گیا ہے، اس لیے جب بھی ہم کوئی ویلیو دیتے ہیں تو اسے اسائنمنٹ کہتے ہیں، اس طرح اگر ہم نے a + b = c لکھا ہے، تو c کے اندر اس a + b کی قدر تفویض کر دی ہے، اس طرح اب ہم c کے اندر کی چیزوں کا مطلب سمجھتے ہیں۔



01:19:03

اگر ہم دیکھیں کہ x = 4+ 9*10 لکھا ہوا ہے تو ہم اسے کیسے حل کریں گے؟ سب سے پہلے ہم دیکھیں گے کہ ہمیں 4+9 پہلے کرنا ہے یا 9*10۔ ظاہر ہے کہ ہماری ضرب کا صدر زیادہ ہے، اس لیے ہم پہلے 9*10 کریں گے۔ اگر ہم 9*10 کرتے ہیں تو ہمیں 90 ملتا ہے۔ اب اگر ہم اس میں چار جوڑتے ہیں، تو اگر ہم چار جوڑتے ہیں تو ہمارا جواب 94 x کے اندر محفوظ ہو جائے گا۔ لیکن اگر ہم اسے غلط طریقے سے کرتے تو کیا ہوتا، اگر ہم نے اسے غلط طریقے سے کیا ہوتا، یعنی اگر ہم چار چار کا اضافہ کرتے تو یہ 13 بن جاتا، 10 کو ضرب دیا جاتا، جس کا آؤٹ پٹ 130 ہوتا، لیکن یہ غلط آؤٹ پٹ ہوتا، یہ اس کی صحیح آؤٹ پٹ ہے۔



01:19:41

94 آئیے ایک بار اس کو کوڈ کریں اور دیکھیں کہ ہم نے اسے کس حد تک درست طریقے سے کیا ہے۔ ہم 4 p 9 کو 10 میں int A کے اندر اسٹور کریں گے۔ آئیے اسے چلاتے ہیں اور ہمیں آؤٹ پٹ 94 کے طور پر حاصل ہوتا ہے اب ہمارے پاس ایکسپریشنز ہیں جو کہ دوسرے طریقے سے لکھے جا سکتے ہیں، تو اس معاملے میں ہمارے پاس ایک ہی پریذیڈنٹ کے آپریشنز کا کیس ہے، یعنی multiply میں ایک ہی پریذیڈنٹ ہے اور divide میں ایک ہی پریذیڈنٹ ہے، تو کون سا پہلے حل ہو جائے گا، تو اس کے لیے ہمارے پاس ایسوسی ایٹ رول ہے۔ یہ قواعد خطرناک لگ سکتے ہیں، لیکن یہ بہت منطقی ہیں، ہمیں ابھی انہیں حفظ کرنے کی ضرورت نہیں ہے۔



01:20:20

جیسا کہ ہم مختلف مسائل کو حل کرتے ہیں اور اپنے پریکٹس کے مسائل کو حل کرتے ہیں، یہ خود بخود سامنے آجائیں گے اور سمجھنے میں بہت منطقی ہیں، اس لیے صرف ان کے نام یاد رکھیں، اس کو ایسوسی ایٹیوٹی کہا جاتا تھا، اسے صدر کہا جاتا تھا، ابھی اتنے بھاری الفاظ کو حفظ کرنے کی ضرورت نہیں ہے، نوٹس آپ کے لیے مکمل طور پر دستیاب ہوں گے، آپ کسی بھی وقت جا کر ان پر نظر ثانی کر سکتے ہیں، آپ ان تک رسائی حاصل کر سکتے ہیں، جب بھی ہم اسی طرح کی presociativity میں associativity کا استعمال کرتے ہیں۔ اگر ہم اپنی مثال لیں



01:20:50

اگر ہم ایسوسی ایٹیوٹی کے بارے میں بات کرتے ہیں تو یہ کہتا ہے اسے بائیں سے دائیں کریں، یعنی بائیں سے دائیں آپریشنز کرتے رہیں، اگر وہ ایک ہی صدر کے ہیں، جیسے یہاں ضرب، تقسیم اور یہ ضرب ایک ہی صدر کا ہے، تو ہم کیا کریں گے، ہم بائیں سے دائیں حساب کریں گے، اگر ہم بائیں سے دائیں حساب کریں گے، تو سب سے پہلے ہم حساب کریں گے *3*4 پھر ہم 2*3*3 بنیں گے۔ 12/6 کا حساب لگائیں، یہ ہمارا 0 بن جائے گا، پھر ہم 2*2 کا حساب لگائیں گے، یہ ہمارا 1 بن جائے گا، پھر سب سے پہلے ہم نے چار کو تین سے ضرب کیا، پھر اس کا آؤٹ پٹ



01:21:24

ہم نے اسے چھ سے تقسیم کیا، پھر اس کے آؤٹ پٹ کو دو سے ضرب دیا، اس طرح ہم بائیں سے دائیں حرکت کرتے رہے۔ اگر میں اسے بریکٹ کی شکل میں دکھانا چاہتا ہوں تو میں کیا لکھ سکتا ہوں؟ میں لکھ سکتا ہوں پہلے چار کو تین سے ضرب، پھر اسے تقسیم، اور پھر اس کے بعد اسے دو سے ضرب دے کر حتمی قیمت x کو تفویض کر سکتا ہوں، اور ہمیں چار ملے۔ ہم اس کے لیے کوڈ لکھتے ہیں، ہم کوڈ 4*3/ba 6*2 میں لکھیں گے، آئیے اسے محفوظ کرتے ہیں۔ تو اس قدر کے لیے جو ہمارے پاس ہے۔



01:21:59

آؤٹ پٹ جو آئے گا وہ چار ہے کیونکہ یہاں ایسوسی ایٹیوٹی رول کا اطلاق ہوتا ہے، ہمارا حساب بائیں سے دائیں جاتا ہے، اب ہم نے ریاضی میں بہت سی چیزیں پڑھی ہیں جو ہدایات میں ہیں، تو آئیے ان میں سے چند سوالات کو حل کرتے ہیں تاکہ تمام چیزیں ذہن میں بس جائیں، تو آئیے سوال چار کی مشق کرتے ہیں، ہمیں ان چاروں کے سوال حل کرنے ہیں، سب سے پہلے ہم انہیں بورڈ پر حل کرنے کی کوشش کریں گے۔ اس کے بعد ہم کیا کریں گے، ہم اس کا کوڈ لکھ کر اس کی تصدیق کریں گے، اب ہمارا پہلا سوال ہے 5*2 -



01:22:30

2*3 یہاں ضرب اور اس ضرب دونوں کا صدر اوپر ہے اور ہم نے مائنس بعد میں کرنا ہے تو ضرب کے لیے دونوں کے صدور ایک جیسے ہیں تو ہم کیا کریں گے بائیں اصول کو لاگو کریں سب سے پہلے ہم 5*2 کو ضرب دیں گے تو اس کی جگہ ہم 10 لکھیں گے کیونکہ مائنس درمیان میں ہے پھر اسے حل کرنا چاہیے *23 کے مطابق اس کو حل کرنا چاہیے*3*3 نیچے 6 اور ان دونوں کا آؤٹ پٹ ہمارے پاس چار کے طور پر آیا تو پہلے یہ حل ہو جائے گا کیونکہ اعلی صدر میں بھی آتا ہے اور بائیں میں بھی تو یہ حل ہو جائے گا کیونکہ زیادہ



01:23:03

پریذیڈنٹ میں اور بائیں کے بعد یہ دائیں طرف آیا تو ہمارا مائنس حل ہو جائے گا تو یہ 10 - 6 = 4 ہو جائے گا، آئیے ہم اسے کوڈ کی شکل میں لکھتے ہیں، کوڈ میں ہم لکھیں گے 5 نہیں 2 - 3*2 آئیے یہاں اپنا سٹیٹمنٹ ٹرمینیٹر سیمی رکھیں جسے ٹرمینیٹر کہتے ہیں، ہمارا ٹرمینیٹر اے آئی مووی سے روبوٹ ٹرمینیٹر نہیں ہے، اس کا مطلب ہے کہ ٹرمینیٹر کسی چیز میں سٹاپ، ٹرمینیٹر، ٹرمینیٹر، جیسے کہ آیا۔ یہ یہاں کیا کرتا ہے، یہ سٹیٹمنٹ کو وہیں روک دیتا ہے، تو اب ہم اسے مرتب کر کے چلاتے ہیں، چلانے کے بعد ہمیں آؤٹ پٹ ملتا ہے۔



01:23:44

اب ہمارے پاس چوتھا دوسرا مسئلہ ہے، ہمارے یہاں 5*2 کو 2*3 سے تقسیم کیا گیا ہے، کیونکہ یہاں تین آپریٹرز ہیں، تینوں میں صدر سب سے زیادہ ہے، اس لیے ہم اپنے ایسوسی ایٹیوٹی رول کو لاگو کریں گے، ایسوسی ایٹیوٹی رول کیا کہتا ہے، بائیں سے دائیں حساب کریں بھائی، تو پہلے ہم 5*2 کا حساب لگائیں گے، ہمیں 10 کا حساب ملے گا، پھر ہمیں 10 کا حساب ملے گا۔ 5، اب اس کا آؤٹ پٹ 5 ہے، ہم اسے r سے ضرب دیں گے، پھر ہمیں 15 کا آؤٹ پٹ ملے گا، آئیے اس کی تصدیق بھی کریں، ہم آؤٹ پٹ لکھیں گے، آئیے اسے تقسیم کریں، مرتب کریں، چھ چلائیں، تو



01:24:24

یہ اس لیے آیا ہے کہ یہاں ہم نے 3 مالا با 2 لکھا ہے، یہ اصل میں 2 مالا با 3 ہونا چاہیے تھا، چلو یہ کرتے ہیں، کمپائل اور رن آؤٹ پٹ میں ہمیں 15 ملا، تیسرے مسئلے میں 5 مڈ با 2/2 ایم 3 ہے اب اس کو کیسے حل کیا جائے کیونکہ دیدی، ہم پہلی بار بریکٹ دیکھ رہے ہیں، اس لیے جب بھی بریک کے اندر سب سے پہلے بریک کی چیز آئی ہے حل، یہ واحد چیز ہے جو لفظ میس کے ساتھ ملتی ہے، یعنی اگر بریکٹ آئے تو پہلے بریکٹ کو کھولیں، پھر بریکٹ کے اندر کی چیز پہلے حل ہو جائے گی، یعنی ہمارا یہ اظہار



01:24:57

یہ 5 + 1 + 3 بن جائے گا اب ہم کیا کریں گے اب دو آپریشن رہ گئے ہیں، یہ ضرب اور یہ ضرب، دونوں کا صدر ایک ہی ہے، اس لیے ایسوسی ایٹیوٹی رول لگائیں تو یہ 5*3 بن جائے گا، یعنی 15 اس کا آؤٹ پٹ بھی 15 ہونا چاہیے، تو آئیے یہاں تھوڑی سی تبدیلی کرتے ہیں، آئیے ایک بریکٹ ڈالتے ہیں اور اس کو محفوظ کرتے ہیں، جیسا کہ 1 سوال آئے گا، 5 کو محفوظ کریں کیا یہ 5 + 2 / 2 * 3 کیا ہوگا اس میں ہمارے پاس تین آپریشن ہیں پہلے اضافہ ہے پھر تقسیم ہے پھر ضرب ہے اب جس کا اعلیٰ صدر اعلیٰ صدر ہے



01:25:40

تقسیم اور ضرب دونوں کا صدر ایک ہی ہے لہذا ہم بائیں بازو کی رفاقت کا اطلاق کریں گے۔ بائیں صحبت سے یہ 5p میں تبدیل ہو جائے گا۔ سب سے پہلے ہم اسے 2/2 بنائیں گے، پھر ہم اسے 3 سے ضرب دیں گے، پھر ہم اسے پانچ کے ساتھ جوڑیں گے تو یہ 5p بن جائے گا۔ اندر کا اظہار 1*3 بن جاتا ہے۔ اس کے بعد ہم 5 + 3 کریں گے اور یہ ہمارے لیے 8 ہو جائے گا۔ اب ہم اسے اسی آؤٹ پٹ میں تبدیل کرتے ہیں۔ ہمارے پاس ایکسپریشن 5 + 2 کو 2 سے 3 کا اضافہ ہوا ہے۔ آئیے اسے محفوظ کریں اور چلائیں۔ آؤٹ پٹ میں ہمیں 8 ملتا ہے۔ تو اس قسم کے سوالات ہیں۔



01:26:22

یہ پلیسمنٹ کے وقت آپ کے MCQs میں بھی پوچھے جائیں گے یا آپ سے یہ آپ کے اسکول یا کالج کے ٹیسٹ میں پوچھا جائے گا، تو سوال کا جواب کیسے دینا ہے، اگر یہ تھیوری کا پرچہ ہے تو آپ کو اصل میں اسے حل کرنا ہوگا اور دکھانا ہوگا کہ بائیں بازو کی رفاقت کا اطلاق کس طرح ہوگا، کون سی چیز پہلے حل ہوگی، ایسا کرنے کا بہترین طریقہ یہ ہے کہ آپ کی سہولت کے لیے پیرنز یا بریکٹ لگائیں، پھر کون سی چیز پہلے حل کرنی ہے، پھر آپ کو معلوم ہوگا کہ کون سی چیز حل ہوگی۔ اگر آپ نے اسے کوڈ میں لکھنا ہے تو C کمپائلر اسے خود بخود کوڈ میں کر دے گا۔



01:26:51

تو ان چیزوں کو کرنا کافی آسان ہے، جس طرح بورڈ ماس کا ایک اصول ہے، اسی طرح اس کا بھی ایک اصول ہے۔ ہوم ورک کے مسائل کے چار پانچ سوالات حل کرنے کے بعد اس کے بعد چیزیں بالکل واضح ہو جائیں گی۔ اگلا موضوع جس کے بارے میں ہم بات کریں گے وہ ہماری کنٹرول ہدایات ہیں۔ اب شروع میں ہم پڑھتے ہیں کہ تین قسم کی ہدایات ہیں۔ قسم کا اعلان۔ ہم پڑھتے ہیں کہ متغیر کو پہلے ڈکلیئر کرنا ہوتا ہے، پھر اسے استعمال کرنا پڑتا ہے۔ دوسرا ہم ریاضی کی ہدایات کے بارے میں پڑھتے ہیں جس کے ماڈیول میں ہم نے کچھ نیا سیکھا۔ ہم نے ٹائپ کنورژن سیکھا۔



01:27:19

ہم نے صدر کو سیکھا، اب ہم کنٹرول ہدایات کا مطالعہ کرنے جا رہے ہیں۔ کنٹرول ہدایات وہ ہدایات ہیں جو ہمارے پروگرام کے بہاؤ کا تعین اور بتانے میں مدد کرتی ہیں۔ ہم نے اب تک جو پڑھا ہے وہ یہ ہے کہ ہدایات تسلسل کے ساتھ چل رہی تھیں، میں نے ایک کوڈ لکھا ہے جس میں پہلے بیان پر پہلے عمل کیا جائے گا، اس کا مطلب یہ ہے کہ پہلے اس بیان پر عمل کیا جائے گا، اس کے بعد اس بیان پر عمل کیا جائے گا، اس کے بعد اس بیان پر عمل کیا جائے گا لیکن کوڈ کے اندر کچھ ایسے بیانات ہیں جو بہاؤ کو تبدیل کر سکتے ہیں، ہو سکتا ہے۔



01:27:47

ہمارے نیچے والے بیان پر پہلے عمل کیا جائے اور اوپر والے کو بعد میں پھانسی دی جائے۔ یہ بیانات جو بہاؤ کو تبدیل کرنے اور تبدیل کرنے کی طاقت رکھتے ہیں انہیں کنٹرول ہدایات کہا جاتا ہے جو کسی پروگرام میں ہدایات کے بہاؤ کو کنٹرول کرسکتے ہیں۔ اب یہ چار قسم کے ہیں، ان میں سے پہلی سیکوینس کنٹرول ہے۔ تسلسل کنٹرول ہدایات وہ ہوتی ہیں جو ترتیب وار چلتی ہیں، یعنی اگر ہمارا بہاؤ یکے بعد دیگرے بنتا ہے، تو ہم انہیں ترتیب کنٹرول ہدایات کہتے ہیں، جیسا کہ ہم اب تک دیکھ چکے ہیں۔



01:28:16

ہم سیکھ رہے ہیں کہ یہ سب ہماری ترتیب کنٹرول ہدایات ہیں۔ ہمارے پاس کنٹرول کی دوسری قسم کی ہدایات فیصلہ کنٹرول ہے۔ ترتیب کنٹرول میں، ہم If Else کے بارے میں پڑھیں گے۔ یہ وہ ہدایات ہیں جن کے بارے میں ہم آئندہ ابواب میں پڑھنے جا رہے ہیں کیونکہ انہیں بہت تفصیل سے دریافت کرنا ہے اور یہ سب مل کر ہماری C پروگرامنگ کی بنیادی باتیں بناتے ہیں۔ لہٰذا فیصلہ کن کنٹرول کے تحت، ہم If Else کے موضوع کو مزید پڑھیں گے۔ لوپ کنٹرول کے تحت، ہمارے پاس مختلف لوپس ہیں۔



01:28:46

سی کے اندر کچھ فیصلے ہوتے ہیں جیسے کہ ہمارے فار لوپ، ہمارا جبکہ لوپ، ہم مختلف لوپ پڑھیں گے، یعنی اگر ہمیں کوئی خاص کام بار بار کرنا ہے تو وہی چند لائنیں استعمال کرتے ہوئے ہم اس میں لوپ کنٹرول انسٹرکشن کا استعمال کرتے ہیں، جب ہمیں یہ فیصلہ کرنا ہوتا ہے کہ اگر آج بارش ہو رہی ہے تو چھتری لیں یا نہیں، دھوپ ہے اور اتوار ہے تو کیا ہم خوش ہوں گے، جب ہم لکھیں گے تو کیا کوئی فیصلہ ہے یا کوڈ میں لکھیں گے۔ ان کو فیصلہ کنٹرول ہدایات کی مدد سے، اس کے بعد ہمارے معاملے میں آخری بات آتی ہے۔



01:29:16

کنٹرول انسٹرکشن جس کے اندر ہم کچھ معاملات کے مطابق مختلف کام کرتے ہیں جیسے اگر سوموار سے جمعہ ہو تو ہمیں کام پر جانا پڑتا ہے اور اگر اتوار آتا ہے تو ہمیں کام پر نہیں جانا پڑتا، پھر گھر پر بیٹھ کر آرام کرنا پڑتا ہے، ہم اس پورے بہاؤ کو کوڈ میں متغیرات کی مدد سے اور کیسز کی مدد سے کیسے دکھا سکتے ہیں کہ کس دن ہمیں کام پر جانا ہے اور کس دن ہم نے وہ ہدایات لکھیں ہیں جب ہم گھر میں رہتے ہیں، تو ہم ان ہدایات کو لکھتے ہیں۔ کنٹرول، ہم آنے والے ابواب میں ان تینوں کا مطالعہ کریں گے۔



01:29:44

ہم ترتیب کنٹرول کو پہلے ہی پڑھ چکے ہیں۔ اس کے ساتھ اس باب میں اگلا موضوع جس پر ہم بات کریں گے وہ ہے ہمارے آپریٹرز۔ اب ہم نے بنیادی آپریٹرز کو ارتھم میں دیکھا ہے، آپریٹرز کیا تھے؟ آپریٹرز کے زمرے کے تحت Arithm میں ہمارے پاس جمع مائنس، ضرب، تقسیم، ضرب، تقسیم اور ماڈیول تھے۔ تو ہم ان پانچ بڑے Arithm آپریٹرز کو پہلے ہی پڑھ چکے ہیں۔ اب C میں آپریٹرز کی مزید مختلف قسمیں ہیں۔ ہمارے پاس رشتہ دار آپریٹرز ہیں جو دو آپریٹرز کے درمیان تعلق کو بیان کرتے ہیں۔



01:30:17

ہاں، ہمارے پاس منطقی آپریٹرز ہیں جو دونوں کے درمیان منطقی چیز کو سامنے لاتے ہیں، پھر بٹ وائز آپریٹرز بھی ہیں۔ ہم نے ابھی بحث کی ہے کہ مشینی زبان میں، مشینی کوڈ میں، ہر چیز صفر اور ایک کی شکل میں ہوتی ہے، اور اگر ہم ان صفر اور والے کے درمیان کوئی آپریشن کریں تو اسے بٹ وائز آپریشن کہتے ہیں۔ اس کے بعد اسائنمنٹ آپریٹر بھی ہیں، پھر ایک ٹرنری آپریٹر ہے، یہ ہمارا مشروط آپریٹر ہے، یعنی اگر کسی شرط کے مطابق ہمیں کچھ کرنا ہے اور دوسرا کام نہیں کرنا ہے، تو ہم اسے ٹرنری آپریٹر کی مدد سے بھی لکھ سکتے ہیں۔



01:30:48

اسے ifs کی مدد سے بھی لکھا جاتا ہے۔ یہ بھی اسی کی مدد سے لکھا جاتا ہے۔ اس میں سمجھنے کی اہم چیز رشتہ دار، منطقی اور تفویض ہے۔ ان میں سے یہ تین سب سے آسان ہیں۔ ریاضی کے بعد اب ہم ان کا مطالعہ کریں گے۔ ہم اگلے باب میں ٹرنری آپریٹر کا مطالعہ کریں گے۔ جب بھی ہم مشروط بیانات کا مطالعہ کر رہے ہوں گے اور ہم آئندہ ابواب میں بٹ وائز آپریٹرز کا مطالعہ کریں گے۔ تو سب سے پہلے، ہم اپنے رشتہ دار آپریٹرز کے بارے میں بات کرتے ہیں۔ اب رشتہ دار آپریٹرز دو آپریٹرز کے درمیان تعلق بتاتے ہیں۔ جب بھی ہم ریاضی میں a = b لکھتے ہیں، ہمیں اسے چیک کرنا پڑتا ہے۔



01:31:20

a کے برابر ہے، ہم اسے c کے اندر اس طرح نہیں لکھ سکتے۔ اگر ہم c کے اندر کہیں a = b لکھتے ہیں، تو اس کا مطلب ہوگا b کی قدر لے کر اسے a میں ڈالنا، جو کہ برابری کی جانچ نہیں کر رہا ہے، لہذا جب بھی ہمیں جانچنا ہے کہ آیا a کی قدر، یعنی ایک قدر دوسری قدر کے برابر ہے یا نہیں، تو ہم a i i = b کے برابر دوگنا لگاتے ہیں، جس کا مطلب ہے کہ یہاں ہم پوچھ رہے ہیں، سوال یہ ہے کہ کیا a کی قدر b کی قدر کے برابر ہے اور a کا مطلب یہ ہے کہ b کی قیمت a = میں ڈالی گئی ہے، تو اس کا مطلب یہ ہے کہ b میں a = ڈالیں گے۔ رشتہ دار آپریٹرز



01:31:52

اگر ہم رشتہ چیک کرنے کی بات کرتے ہیں تو ہم اسے استعمال کر رہے ہوں گے، یعنی اگر ہم اپنے کوڈ میں ڈبل مساوی دو لکھنا چاہتے ہیں، تو ہم یہاں لکھیں گے ایک برابر دو برابر دو یا a کی وضاحت نہیں ہے، تو 4 برابر دو برابر دو 4۔ اگر ہم اسے لکھیں گے، اسے محفوظ کریں اور اسے چلائیں، تو ہمیں آؤٹ پٹ میں ایک ملے گا، یہ کیا دکھاتا ہے، ایک کہتا ہے کہ سچ ہے، یہ سچ ہے، یہ بتانا ہے کہ یہ درست ہے، یہ بتانا ہے کہ = 4 ہے سی کمپائلر پر درست ہے، اگر یہاں 4 = = 3 ہے، تو اس صورت میں ہمارے پاس ایک پرنٹ نہیں ہے، اس صورت میں جو پرنٹ ہوتا ہے وہ قطار ہے، یعنی 4 = = e 3 غلط



01:32:33

غلط واپس آ رہا ہے، لہذا C ایک خاص زبان ہے جس میں کوئی سچے جھوٹے نہیں ہوتے۔ سچ جھوٹ کے بجائے، ہمارے پاس سچے اور غلط کی بجائے ایک ہے، ہمارے پاس قطار ہے، حقیقت میں کوئی بھی غیر صفر عدد اگر ہم اسے C میں لکھیں جیسے 2 3 4 5 6 7 -1 -5 یہ سب سچ کو ظاہر کرتے ہیں لیکن اگر صفر آتا ہے تو اس کا مطلب C کے اندر غلط ہوتا ہے، لہذا جو طالب علم جاوا سیکھنے کے بعد C سیکھ رہے ہیں، C++ کے بعد، جاوا اسکرپٹ کے بعد، انہیں C میں ایسی کوئی سچی چیز نہیں ملے گی جیسے کہ کوئی سچ نہیں ہے۔



01:33:11

سچ کی جگہ پر ہے اور غلط کی جگہ صفر ہے، لہذا اگر ایک برابر دو میں پرنٹ کیا جائے تو اس کا مطلب ہے کہ بیان درست ہے، اور اگر غلط پرنٹ کیا جائے تو اسکرین پر صفر آئے گا۔ دوسرا رشتہ جسے ہم چیک کرتے ہیں وہ دو کے برابر یا اس سے بڑا ہے۔ مثال کے طور پر، اگر ہم 4 سے بڑا 3 لکھتے ہیں، تو یہ قطار لوٹائے گا کیونکہ 3 غلط ہے، اس لیے 4 سے بڑا نہیں ہے، لیکن اگر ہم 3 سے بڑا 4 کریں گے، تو یہ ہمارے لیے درست ہو جائے گا، لیکن اگر ہم 4 سے بڑا کریں گے، تو یہ قطار واپس آئے گا کیونکہ چار 4 سے بڑا نہیں ہے، لیکن اگر ہم 4 کو 4 سے بڑا کریں گے، تو پھر



01:33:47

یہ ایک واپس آئے گا۔ تو یہ کچھ صورتیں ہیں جن کے مطابق ہم اپنا آؤٹ پٹ تیار کرتے ہیں۔ آئیے ان کو کوڈ میں آزماتے ہیں۔ اگر ہم 3 سے زیادہ 4 لکھتے تو یہ آؤٹ پٹ میں آتا۔ لیکن یہاں، اگر ہم نے 4 سے زیادہ 3 لکھا ہے، تو آؤٹ پٹ اب صفر ہونا چاہیے، یعنی غلط۔ اگر ہم نے 3 سے بڑا لکھا ہے تو آؤٹ پٹ صفر کے طور پر آئے گا کیونکہ یہ کبھی بھی 3 سے بڑا نہیں ہوتا ہے۔ لیکن اگر ہم 3 کو دو کے برابر سے بڑا بناتے ہیں تو یہ اس سے بڑا چیک کرے گا، یہ دو کے برابر بھی چیک کرے گا۔ اس صورت میں، ہمیں جو آؤٹ پٹ ملے گا وہ 1 ہے۔ تو یہ اس سے بڑا اور اس سے بڑا تیسرے کے برابر ہو جاتا ہے۔



01:34:28

ہم جس رشتہ دار آپریٹر کے بارے میں بات کریں گے وہ ہمارے کم سے کم برابر کے برابر ہے اور اس کے برابر کے برابر ہیں، 3 کم ہے 4 صحیح لوٹائے گا، 4 کم ہے 3 غلط لوٹائے گا، 3 کم ہے 3 0 لوٹائے گا اور 3 کم ہے 3 ایک لوٹائے گا، یہ سچ ہے۔ آئیے ان کے بھی کیسز بناتے ہیں، مساوی سے بڑا ہے، اس کے برابر کم کرتے ہیں، پھر اس سے بھی کم میں ہمارے پاس صحیح پرنٹ ہوگا۔ اگر ہم صرف اس سے کم کرتے ہیں، تو اس صورت میں ہمارے پاس قطار پرنٹ ہوگی، اگر ہم 4 <3 کرتے ہیں، تو اس صورت میں یہ غلط پرنٹ ہوگا کیونکہ یہ غلط بیان ہے۔



01:35:10

اس کا مطلب ہے قطار اور اگر ہم نے اس معاملے میں 4 سبق 5 کیا تو یہ سچ کے طور پر پرنٹ ہو جائے گا۔ تو اس طرح ہمارے متعلقہ بیانات کام کرتے ہیں۔ اب ہمارے پاس ایک آخری اسپیشل ریلیشنل آپریٹر ہے جسے ہم نہیں کہتے ہیں برابر۔ ہم نے اسے NOT EQUAL TO کا نام دیا۔ ہم اسے EQUAL TO کہتے تھے جب بھی دو قدریں برابر ہوں گی تو یہ ایک لوٹائے گی۔ جب بھی وہ برابر نہیں ہوں گے، یہ صفر واپس آئے گا۔ جب بھی دونوں قدریں برابر نہیں ہوں گی، تو یہ ایک لوٹائے گی اور جب بھی برابر ہوں گی، صفر لوٹائے گی۔ یعنی یہ دونوں ایک دوسرے کے مخالف ہیں۔ جیسے، اگر ہم اپنے بیان میں لکھتے ہیں،



01:35:52

یہاں تک کہ اگر چار = 4 نہیں ہے اور ہم وہاں 4 = u = 4 پرنٹ کرنا چاہتے ہیں، جب بھی ہم C پروگرامنگ میں کوئی فجائیہ نشان لگاتے ہیں تو ہمیں اسے ہمیشہ کی طرح پڑھنا پڑتا ہے، جہاں بھی کوئی فجائیہ آتا ہے اس کا مطلب نہیں ہوتا ہے، لہذا not operator ایک الگ آپریٹر ہے، اب یہ مکمل نہیں ہے دو کے برابر ہے، ہم ان دونوں کے درمیان جگہ نہیں دے سکتے، اب ہم دونوں کے درمیان ایک جگہ نہیں دے سکتے، ایک بار ایک ساتھ yz لکھنے کے بعد ایک آؤٹ پٹ کرنا ہے۔ پہلے بیان کا صفر نکلا، اس کا مطلب ہے کہ اس بیان میں غلط چار 4 کے برابر نہیں ہے۔



01:36:29

اس میں ہم کہہ رہے ہیں کہ چار چار کے برابر نہیں ہے، ظاہر ہے یہ جھوٹا بیان ہے، اسی لیے صفر چھاپ دیا گیا۔ دوسرے بیان میں ہم کہہ رہے ہیں کہ چار ہمیشہ چار کے برابر ہوتے ہیں، اس لیے ایک چھاپا۔ اب یہاں اگر ہم یہ کہتے کہ چار تین کے برابر نہیں ہے یا ہم نے کہا ہے کہ چار تین کے برابر ہے، اس میں پہلے بیان میں تو یہ چھپا ہوتا کہ ہمارے پاس ایک ہے، کیونکہ ہم صحیح کہہ رہے ہیں کہ چار کبھی تین کے برابر نہیں ہوتے اور دوسرے بیان میں یہ غلط چھاپا جاتا کیونکہ ہم کہہ رہے ہیں کہ چار تین کے برابر ہے، جو ظاہر ہے۔



01:36:57

اگر یہ غلط ہے، تو صفر پرنٹ کیا جائے گا. تو اس طرح، جب بھی ہم برابر کو چیک کرنا چاہیں گے، ہم دو برابر کریں گے۔ جب بھی ہم مساوی نہیں، پھر مساوی نشان کے ساتھ چیک کرنا چاہتے ہیں تو ہم اسے برابر نہیں کہتے ہیں۔ آپریٹر کی اگلی قسم جس کے بارے میں ہم بات کریں گے وہ ہمارے منطقی آپریٹرز ہیں۔ بعض اوقات C کے اندر ایسا ہوتا ہے کہ ہمیں چیزوں کی منطق کو جانچنا پڑتا ہے، جیسے کہ ہم کن صورتوں میں منطقی بیانات استعمال کر سکتے ہیں۔ چلو مان لیتے ہیں کہ ہم نے C کا استعمال کرتے ہوئے ایک نظام بنایا ہے، ایک کوڈنگ سسٹم جس میں ہم اس کے نشانات کو فیڈ کر رہے ہیں اور اگر ہم کہیں کہ اس کے



01:37:28

اگر نمبر 30 سے ​​زیادہ اور 90 سے کم ہیں تو اسے اے گریڈ دیں اور اگر 90 سے اوپر یا 100 سے 90 کے درمیان ہیں تو اسے اے گریڈ دیں۔ اگر ہمیں ایسے کیسز کو چیک کرنا ہے تو ہمیں یہ دیکھنا ہو گا کہ نمبر 90 سے اوپر ہیں اور 100 سے بھی نیچے۔ یہاں ہمیں یہ دیکھنا ہو گا کہ نمبر 30 سے ​​اوپر ہیں اور 90 سے بھی نیچے، تب ہی A دینا ہو گا۔ پس جب دو شرطوں کو ایک ساتھ چیک کرنا ہو یا فرض کریں کہ ان دونوں میں سے ایک شرط درست ہے، جیسے آج اگر قومی تعطیل ہو یا آج اتوار ہے، تب ہی ہم باہر جانے کے لیے نکلیں گے، دونوں میں سے کوئی ایک بھی درست ہے۔



01:38:05

اگر یہ ہو جائے تو ہمیں کام کرنا پڑے گا، اگر دونوں سچے ہیں تو ہمیں کرنا پڑے گا، اگر ان میں سے ایک سچا ہے تو بھی ہمیں کرنا پڑے گا، تو کچھ ایسے کیسز ہیں، حقیقی زندگی کے کیسز جنہیں ہم کوڈ میں ڈالنا چاہتے ہیں، تو ہمارے لاجیکل آپریٹرز ہمارے کام آتے ہیں، پہلا لاجیکل آپریٹر AND آپریٹر ہے، ہم اسے AND کہتے ہیں، ہم احتیاط سے AND لکھتے ہیں، اگر آپ m لکھتے ہیں، تو ہم احتیاط سے دو لکھتے ہیں۔ m پر، تو یہ بٹ وائز آپریٹر ہے، جسے ہمیں یہاں نہیں لکھنا چاہیے، ہم ہمیشہ دو اور لکھیں گے، تو یہ ایک منطقی آپریٹر ہوگا، ہم اسے کیسے استعمال کرسکتے ہیں، جیسے، قدر



01:38:36

تو ہم پہلا بیان 4 لکھتے ہیں > 3، یہ ​​ہمیں کیا دے گا؟ یہ ہمیں ایک دے گا، یعنی سچ اور ہم دوسرا بیان لکھتے ہیں 5 2 سے بڑا ہے، یہ بیان بھی ہمیں ایک دے گا، یعنی سچ۔ اگر ہم یہ دونوں بیانات چاہتے ہیں، جب دونوں بیانات درست ہوں گے، تب ہی ہمیں fi کا حتمی نتیجہ ملے گا جو درست ہوگا۔ تو ہم ان دونوں کے درمیان & ڈالیں گے، پھر یہ سچ ہوگا اور یہ سچ ہوگا تب ہی آؤٹ پٹ سچ ہوگا۔ لیکن اگر ان میں سے ایک بھی درست نہیں ہے، یعنی یہاں ہمیں 2 ملتا ہے 5 سے بڑا ہے، تو یہ صفر دے گا، یعنی غلط، تو ہمارے پاس آؤٹ پٹ ہو گا۔



01:39:09

انجام کے غلط ہونے کے لیے ضروری ہے کہ پہلا بیان اور دوسرا بیان یا وہ تمام بیانات جن کے درمیان ہم ختم کر رہے ہیں صحیح ہونا چاہیے ورنہ غلط نتیجہ نکلے گا۔ مثال کے طور پر اگر ہم اس کا آؤٹ پٹ دیکھتے ہیں تو یہاں ہم لکھ سکتے ہیں کہ 4 3 سے بڑا ہے اور 5 بھی 2 سے بڑا ہے تو ہمارے یہ دونوں بیانات درست ہیں یعنی 4 بھی 3 سے بڑا ہے اور 5 بھی 2 سے بڑا ہے تو سچ اور سچ کا خاتمہ ہمارے سامنے درست آئے گا لیکن اگر ہم یہاں ایک بھی بیان غلط کریں یعنی یہاں غلط لکھیں تو 3 یہاں سے بڑا نکلے گا۔



01:39:44

یہ ہمارے پاس آئے گا، یہ آئے گا، یہ بیان ہمارے 5 gr 2 پر درست ہے، یہ ایک جھوٹا ہوا، جہاں بھی یہ جھوٹا ہوا یعنی ساری بات جھوٹی ہو گئی، اگر اور لگائی جائے تو دونوں غلط ہوں گے، تب بھی جھوٹ، اگر دونوں میں سے ایک غلط ہے تو بھی جھوٹ، اگر دونوں سچے ہوں گے تو صرف سچ پرنٹ ہو گا، اس لیے ہم اس کے لیے ایک ٹیبل بھی بناتے ہیں، کبھی کبھی آپ کے کمپیوٹر کے ساتھ ساتھ الیکٹرونک کے مضامین میں بھی ایک یا دو مضامین ہوتے ہیں۔ آئی ٹی، جہاں ان تین منطقی آپریٹرز کا ایک ٹیبل بنایا گیا ہے، اور اگر آپ نے کالج میں لاجک گیٹس کا مطالعہ کیا ہوتا، تو آپ کو



01:40:14

آپ سمجھ جائیں گے کہ ہم کس بارے میں بات کر رہے ہیں، اگر آپ نے اسے نہیں پڑھا تو آپ اسے اگلے سمسٹرز میں پڑھ رہے ہوں گے، اس لیے ٹیبل اس طرح بنتا ہے، اگر ہمارے پاس پہلا اظہار اور اس قسم کا دوسرا اظہار ہو تو فائنل آؤٹ پٹ کیا ہو گا، اگر پہلا اظہار صحیح ہے، دوسرا بھی سچ ہے، تو آؤٹ پٹ سچے گا، اگر ہم جھوٹے کے بارے میں بات کر رہے ہیں، اگر آؤٹ پٹ سچ ہے، اگر دوسرا غلط ہے، اگر آؤٹ پٹ صحیح ہو گا، تو آخر میں آؤٹ پٹ ہو گا۔ پہلا غلط ہے، دوسرا سچ ہے، پھر آؤٹ پٹ غلط دے گا، اگر پہلا غلط ہے، دوسرا بھی غلط ہے، تو آؤٹ پٹ بھی غلط دے گا، لہذا



01:40:39

یہ ایک چھوٹی سی میز ہے جس کے ذریعے ہم تھوڑا سا تصور کر سکتے ہیں کہ جب بھی ہم منطقی AND کے بارے میں بات کرتے ہیں تو ہمارے آؤٹ پٹ کیسے آتے ہیں۔ اگلا ہم منطقی R کی کے بارے میں بات کرنے جا رہے ہیں۔ ہمارے کی بورڈ میں پائپ کی علامت ہے، یعنی یہ سیدھی لکیر کی علامت ہے۔ جب ہم اسے دو بار لکھتے ہیں تو یہ ہمارا منطقی اور آپریٹر بن جاتا ہے۔ اب ایک پائپ بھی آپریٹر ہے۔ یہ تھوڑا سا R ہے۔ یہاں ہم منطقی R کے بارے میں بات کر رہے ہیں۔ منطقی R کیا کرتا ہے؟ اگر ہم دو بیانات یا تین بیانات یا کسی بھی تعداد میں بیانات دیں اور ان سب کے درمیان



01:41:12

اگر ہم منطقی لاگو کرتے ہیں اور پھر اگر ان میں سے ایک بھی سچ ہو جائے تو آؤٹ پٹ صحیح ہو گی، چاہے باقی تمام غلط ہوں لیکن اگر ایک بھی درست ہو تو آؤٹ پٹ سچی ہو گی، ورنہ سب غلط ہیں تو آؤٹ پٹ غلط ہو گی۔ تو اگر ہم اسے لکھ کر اس کا کوڈ دیکھیں تو سب سے پہلے ہمارے پاس 3 گریڈ 4 ہے جو کہ غلط بیان ہے، یہاں اگر ہم AND لاگو کرتے ہیں اور 5 گریڈ 2 لکھتے ہیں، تو یہاں یہ سٹیٹمنٹ غلط ہے، یہ سٹیٹمنٹ سچ ہے، اس لیے اس کا آؤٹ پٹ آخر میں غلط تھا لیکن AND میں ہم سچ ہو جائیں گے، اس لیے اس کے لیے بھی اپنا ایک ٹیبل بنایا جا سکتا ہے۔



01:41:45

اگر ہم ٹیبل میں پہلا اور دوسرا ایکسپریشن لیں اور پھر فائنل آؤٹ پٹ کا تجزیہ کریں، تو یہاں اگر سچ دیا گیا ہے تو آؤٹ پٹ میں سچ آئے گا، اگر سچا غلط دیا جائے تو آؤٹ پٹ میں سچ آئے گا، اگر غلط دیا جائے تو سچ بھی آؤٹ پٹ میں آئے گا، لیکن اگر دونوں غلط ہیں تو صرف ہماری آؤٹ پٹ غلط ہو جائے گی، تو یہ ہمارا منطقی ہے یا، اس کے علاوہ ہمارا کوئی خاص logical آپریٹر نہیں ہے، اس کے علاوہ کوئی بھی آپریٹر نہیں ہے۔ آپریٹر کہتا ہے کہ اگر سچ دیا گیا ہے تو اسے غلط بنائیں، اگر غلط دیا جائے تو اسے سچ بنائیں



01:42:17

اس کا مطلب یہ ہے کہ اظہار میں ہمیں جو کچھ بھی دیا جاتا ہے، ہمیں اسے پلٹنا ہوگا، چاہے وہ کچھ بھی ہو۔ مثال کے طور پر، اگر کوئی ایکسپریشن 3> 4 ہے، تو ہم جانتے ہیں کہ یہ غلط دے گا، لیکن اگر ہم اس کے آگے نہیں ڈالیں گے تو یہ سچ دے گا۔ اسی طرح، اگر دوسرا اظہار 5 > 1 ہے، تو ہم جانتے ہیں کہ یہ سچ دے گا، لیکن اگر ہم اس کے آگے نہیں ڈالیں گے تو یہ غلط دے گا۔ لہذا، اس طرح، جب بھی ہمیں ایکسپریشن کی آؤٹ پٹ کو ریورس کرنے کی ضرورت ہوتی ہے، یا اسے پلٹنا ہوتا ہے، ہم ایک نہیں لگاتے ہیں۔ یہاں، ہم جانتے ہیں کہ 5> 1 ہمیں سچ دے گا، لیکن اگر ہم اس سے پہلے نہیں ڈالیں گے، تو ہم آؤٹ پٹ کے طور پر غلط ہو جائیں گے۔



01:42:52

اس کا مطلب ہے کہ صفر، اگر ہم دو ایکسپریشنز کی بات کریں، یعنی 5 gr 1 ہمیں سچ دے گا اور اور یا یہاں ہم ڈالیں گے اور اور 3 gr 4 اس کی آؤٹ پٹ، اگر ہم اندازہ لگانے کے لیے جائیں تو 5 gr 1 سچ دے گا، 3 gr 4 غلط دے گا، اور ایک سچا ہے اور ایک غلط ہے، تو آؤٹ پٹ غلط ہوگا لیکن اگر ہم ان سب سے باہر نہیں ڈالیں گے، تو ہم سچے کے بجائے ایک مزید پرنٹ کرنے جارہے ہیں۔ آؤٹ پٹ میں ہم جانتے ہیں کہ سچ ہمیں پرنٹ کیا جانا چاہئے، لہذا جو پرنٹ کیا گیا ہے وہ سچ ہے، وہ ایک ہے، تو کچھ اس طرح



01:43:28

یہ ہمارے منطقی آپریٹرز کے کام کرنے کا طریقہ ہے۔ ہم ان منطقی آپریٹرز کی اصل اہمیت کو اگلے باب میں سیکھیں گے جب ہم مشروط بیانات کے بارے میں بات کریں گے۔ جب بھی ہم مشروط بیانات if else کے ساتھ لکھتے ہیں تو ہمیں اس کے اندر ایک شرط لگانی ہوتی ہے کہ شرط صحیح ہے یا غلط۔ تو ہم وہاں ان تاثرات کا سب سے زیادہ استعمال کریں گے۔ اب یہاں ہمیں ایک سوال ملتا ہے کہ ایک ہی اظہار کے اندر، کیا ہم کچھ ریاضی کے آپریٹرز بھی لکھ سکتے ہیں؟ ایک ہی اظہار کی طرح، ہم استعمال کرتے ہیں۔



01:43:54

ہم اس طریقے سے a + b - c + d * e لکھ ​​سکتے ہیں اور ایک ہی ایکسپریشن کے اندر ہم ان کا موازنہ بھی کر سکتے ہیں یعنی یہ ویلیو 4 * 3 * 5 سے زیادہ ہے پھر ہم اس قدر کو 4 > 2 میں ختم کر سکتے ہیں تو ہم اتنی لمبی ایکسپریشن لکھ سکتے ہیں جس میں ہمارے رشتہ دار آپریٹر آ رہے ہوں گے تو پھر ان میں صدر کا فیصلہ کیسے ہو گا تو صدر کے پاس ان کے اپنے آپریٹر کے مطابق سب سے زیادہ صدر ہیں صدر جو دیا جاتا ہے وہ ہمارے نہیں آپریٹر کو دیا جاتا ہے جہاں بھی آپریٹر نہیں آتا ہے۔



01:44:38

پہلے آپ کو نہیں کرنا ہے، اس کے بعد باقی تمام کام کرنے ہیں، اس کے بعد ضرب تقسیم ماڈیول، پھر پلس مائنس آتا ہے، پھر ہمارے رشتہ دار آپریٹرز آتے ہیں، پھر رشتہ دار آپریٹرز میں دو کے برابر اور دو کے برابر نہیں آتے، پھر ہمارے لاجیکل آپریٹرز آتے ہیں جس میں سب سے پہلے یہ دیکھا جاتا ہے کہ آخر کیسے ہو گا، پھر یہ دیکھا جاتا ہے کہ سب چیزیں برابر کیسے ہوں گی، پھر یہ دیکھا جاتا ہے کہ سب چیزیں برابر کیسے ہوں گی۔ اوپر بیان کیا جائے گا، پھر بائیں جانب جائیں، وہاں جو کچھ لکھا جائے گا، ہم اس کی قیمت مقرر کریں گے، اس طرح صدر موجود ہے، یہ بھی یاد رکھنے کی ضرورت ہے۔



01:45:07

کوئی ضرورت نہیں ہے۔ اس میں جو اہم چیزیں یاد رکھنے کی ضرورت ہے وہ یہ ہیں کہ پہلے نہیں کی جائیں گی۔ رشتہ دار اوپر آتا ہے اور منطقی نیچے آتا ہے۔ تو ہم اسے اسی طرح رکھیں گے۔ جب بھی آپ کو حساب کتاب میں حوالہ دینے کی ضرورت ہو، آپ جا کر انہی نوٹوں کا حوالہ دے سکتے ہیں۔ اب اس کے بعد ہم آپریٹر کی دوسری قسم پڑھیں گے۔ یہ بہت آسان آپریٹر ہے۔ سب سے آسان آپریٹر جو ہمارا اسائنمنٹ آپریٹر بننے والا ہے وہ اسائنمنٹ ہے۔ ہم پہلے ہی پڑھ چکے ہیں کہ برابر کیا کرتا ہے۔ اگر a i اور b ہے تو یہ b کی قدر کو a میں ڈال دے گا۔ اگر c = d ہے تو یہ d کی قدر کو c میں ڈال دے گا۔



01:45:40

= f + g - h پھر یہ اس پورے ایکسپریشن کی ویلیو e میں ڈالے گا، یہ اسائنمنٹ آپریٹر کا کام ہے، اس کے بعد ہمارا پلس دو آپریٹر کے برابر ہوگا، یہ بنیادی طور پر ہمارا شارٹ ہینڈ آپریٹر ہے۔ شارٹ ہینڈ آپریٹرز کیا ہیں؟ وہ کیا کرتے ہیں؟ وہ ہمیں مشکل طویل بیانات کو مختصر کرنے کے طریقے بتاتے ہیں، جیسے کہ اگر ہم نے a = a p b لکھا ہے، اگر ہم اس چیز کو اپنے کوڈ میں لکھتے ہیں، int a = 1 int b = 4 اور ہم int یا a = a p b لکھنا چاہتے ہیں، تو یہاں کیا آنا چاہیے، b 4 ہے، a ہے 1، پھر 4 ہوگا 5، تو a's



01:46:27

قدر اب f بن جائے گی۔ ہم اسے پرنٹ کرکے بھی حساب لگا سکتے ہیں۔ آؤٹ پٹ پانچ دکھائے گا۔ تو a کی قیمت پانچ بن گئی کیونکہ چار اور ایک مل کر پانچ بنتے ہیں۔ اب ہم دیکھیں گے کہ بائیں کے ساتھ ساتھ دائیں طرف بھی a لکھا ہوا ہے۔ جب بائیں اور دائیں طرف ایک ہی اظہار ہو، یعنی ایک ہی متغیر لکھا ہوا ہو، تو ہم اسے مختصر کر سکتے ہیں۔ ہم اسے کیسے مختصر کر سکتے ہیں a = a + b؟ ہم ب کے برابر جمع لکھ سکتے ہیں۔ تو یہاں جمع برابر دو کی جگہ برابر ہو گیا ہے۔ تو اس طرح جب بھی ہم بار بار اسی کو پرنٹ کرتے ہیں۔



01:47:02

اگر ہم بائیں اور دائیں طرف متغیرات کا استعمال کرتے ہیں تو ہم برابر کو پلس کے برابر کے ساتھ تبدیل کر سکتے ہیں اور پھر وہ آپریشن یہاں کی طرح کیا جائے گا اگر ہم سٹیٹمنٹ a + = b لکھیں اور پھر اس کی ویلیو چیک کریں تو ہمیں وہی آؤٹ پٹ ملے گا جو اب وہی ہے جو ہم نے جمع کے ساتھ کیا ہے، ہم اسے ضرب کے ساتھ بھی کر سکتے ہیں، یہاں اگر ہم دو کے برابر ضرب لکھیں گے تو کیا ہوگا، اگر 4 *p1 میں ضرب اور دونوں ملیں گے تو کیا ہوگا؟ مائنس لکھیں تو مائنس میں کیا ہوگا، اس بیان کا مفہوم a = a - b ہے تو a 1 b ہے 4 1



01:47:41

- 4 - 3 آئے گا پھر -3 کو a میں پرنٹ کیا جانا چاہئے اور ہم اس کا حساب لگائیں گے، -3 آؤٹ پٹ میں آیا، اس طرح جب بھی ہم اظہار کو مختصر کرنا چاہیں گے، کیونکہ ہم بائیں اور دائیں طرف ایک ہی آپریٹر استعمال کررہے ہیں، تو ہم کیا کریں گے، ہم مائنس برابر لکھیں گے، برابر کے برابر، اسی کے لیے، تقسیم کریں گے، یہ ہمارے آپریٹرز کے لیے آسان ہیں، یہ آپریٹرز ہمارے ماڈیول، اسائنمنٹ کے لیے ایک جیسے ہیں۔ طریقہ، ہم نے اپنے بنیادی آپریٹرز، بنیادی ہدایات کو مکمل کر لیا ہے، اب ہم کچھ مسائل کریں گے۔ ان مسائل کو حل کرنے کے لیے



01:48:14

اس کے بعد جو باتیں ہم نے ابھی باب 2 میں پڑھی ہیں وہ ہمارے ذہن میں بس جائیں گی۔ پہلا سوال جو ہم پوچھتے ہیں، یہ چیک کرنے کے لیے ایک پروگرام لکھیں کہ آیا کوئی عدد دو سے تقسیم ہے یا نہیں۔ اب ہمیں یہ چیک کرنے کے لیے ایک پروگرام لکھنا ہے کہ آیا کوئی عدد دو سے تقسیم ہوتا ہے یا نہیں۔ فرض کریں کہ ہمیں کوئی نمبر x دیا گیا ہے۔ x کی قیمت پانچ ہوسکتی ہے، یہ چھ ہوسکتی ہے، یہ 10 ہوسکتی ہے۔ ہمیں یہ دیکھنا ہوگا کہ آیا یہ دو سے تقسیم ہوگا یا نہیں۔ جو بھی عدد کسی دوسرے نمبر سے تقسیم ہو جائے، مثال کے طور پر، فرض کریں کہ 4 کو 0 سے تقسیم کیا جائے، 10 کو 5 سے تقسیم کیا جائے، تو یہ یاد دہانی کے طور پر کیا دیتا ہے، یہ صفر دیتا ہے، یہ 4 دیتا ہے۔



01:48:46

Ba 2 ہمیں ایک یاد دہانی بھی دے گا کہ صفر، تو یہاں ہمیں اپنے دماغ کا استعمال کرتے ہوئے اسے یاد دہانی کے لیے استعمال کرنا ہوگا کہ جس نمبر کو دوسرے سے تقسیم کیا جائے، تو یہاں ہم اپنا ماڈل آپریٹر استعمال کریں گے، تو ہم کیا کریں گے، ہم کسی بھی نمبر کو ان پٹ کے طور پر لیں گے، ہم نے ایک کو ان پٹ کے طور پر لیا ہے، اب ہم x کا ماڈل دیکھیں گے u کے ساتھ، اگر یہ ماڈل صفر ہو گیا تو یہ صفر ہو گیا، اس کا مطلب یہ ہو گیا کہ یہ صفر ہو جائے گا۔ ایک صورت یہ ہے کہ یہ صفر کے علاوہ صفر نہیں بنتا، فرض کریں پرنٹ ہو جائے، یو آئے، انسان یا میرا، صفر کے علاوہ کوئی چیز آئے، تو اس کا مطلب ہے کہ تقسیم نہیں ہوگی، تو بس کیا کیا جائے؟



01:49:23

ہم صارف سے ان پٹ کے طور پر ایک نمبر لیں گے اور پھر ہم اس کے ماڈیول کو دو کے ساتھ چیک کریں گے۔ اگر ماڈیول صفر لوٹ رہا ہے تو اس کا مطلب ہے کہ یہ تقسیم ہے، ورنہ ایسا نہیں ہے۔ اب اس کے لیے ہم کوڈ لکھ کر دیکھتے ہیں۔ پہلے ہم x کا اعلان کرتے ہیں، پھر اسے اسکین کرتے ہیں اور پہلے اسے پرنٹ کرتے ہیں۔ ایک نمبر درج کریں۔ یہاں ہم نمبر درج کریں گے، پھر ہم اسے اسکین کریں گے۔ فیصد ڈی اور ایکس۔ اب ہم اسے دوبارہ پرنٹ کریں گے۔ ہم فیصد D کو کیسے چیک کریں گے کہ آیا یہ تقسیم ہے یا نہیں۔ ہم x modulo 2 لکھیں گے مساوی 0 کے برابر۔ یہاں ہم نے دو کو ملایا ہے، Arith



01:50:13

میں نے آپریٹر کو ملایا جس سے میں نے ماڈیول لیا تھا پہلے اپنے رشتہ دار آپریٹر کے ساتھ اور پھر ریلیشنل اب آیا جب ہم نے آپریٹر پریذیڈنٹ کو دیکھا تو اس میں کیا تھا، ہمارے erythematosus آپریٹرز نیچے تھے، تو یہاں سب سے پہلے x کا ماڈیول دو کے ساتھ نکلے گا، اگر وہ قدر صفر کے برابر ہے تو یہ پرنٹ ہو جائے گا، اگر یہ صحیح نہیں ہے، اس کا مطلب یہ ہے کہ یہ تقسیم ہو جائے گا، جس کا مطلب یہ ہے کہ یہ تقسیم نہیں ہو گا۔ صفر کے طور پر پرنٹ کیا جائے گا، جس کا مطلب ہے کہ یہ تقسیم نہیں ہوتا، تو آئیے اسے محفوظ کریں اور اپنی آؤٹ پٹ دیکھیں، ہم پانچ کے لیے نمبر پانچ داخل کریں، صفر پرنٹ ہوا کیونکہ پانچ دو کے برابر ہے۔



01:50:47

اسے دو سے تقسیم نہیں کیا گیا، اسے دوبارہ وہاں چلائیں، اس بار ہم 10 میں 10 داخل کریں گے، ایک پرنٹ کیا گیا تھا کیونکہ ہمارے 10 کو دو کے ساتھ تقسیم کیا جاتا ہے، جب بھی ہم 10 میں داخل ہوتے ہیں، 10 کا ماڈیول پہلے دو کے ساتھ نکلتا تھا، پھر قطار کا ماڈیول کیا تھا، ہم نے اس قطار کو قطار سے ہی تشبیہ دی اور وہ درست نکلا، تو یہاں پانچ کے موڈ کے ساتھ صحیح نکلا، تو پانچ کے موڈ کے ساتھ صحیح نکلا۔ دو، ایک، ہم نے ایک کو قطار سے تشبیہ دی، تو وہ دو کے برابر نہیں نکلی، اس لیے قطار پرنٹ کی گئی، یعنی غلط۔ اب اس کا ایک اور ورژن ہے، وہ ورژن اسی پروگرام کا ہے۔



01:51:20

مجھے بتائیں کہ کوئی عدد مساوی ہے یا طاق۔ جن اعداد کو دو سے تقسیم کیا جاتا ہے وہ ہمارے ہموار اعداد ہیں۔ جن اعداد کو دو سے تقسیم نہیں کیا گیا ہے، یعنی ان کا ماڈیول صفر نہیں نکلتا ہے، وہ ہمارے طاق اعداد ہیں۔ اس لیے جب بھی آپ یہ چیک کرنا چاہیں کہ کوئی عدد مساوی ہے یا طاق، تو اس کی تقسیم کو بھی دو سے چیک کریں۔ تو یہ ہمارا اگلا پریکٹس سوال ہے جس میں ہم یہ چیک کرنے کے لیے ایک پروگرام لکھیں گے کہ آیا کوئی عدد طاق ہے یا جفت۔ جب بھی ہمارے پاس کوئی ایون کیس ہوتا ہے، تو ہم ایک پرنٹ کرنے جا رہے ہوتے ہیں اور طاق کیس میں، ہم ایک پرنٹ کرنے جا رہے ہوتے ہیں۔



01:51:52

اگر یہ صفر ہے، تو ہم نے نمبر درج کیا اور اسی لائن کے ذریعے اسے x میں محفوظ کیا۔ اب ہم کیا چھاپیں گے؟ ہم دو سے ایک ہی نمبر لیں گے۔ اگر ماڈل میں صفر آتا ہے، تو وہ نمبر برابر ہے، ورنہ یہ طاق ہے۔ ہم اس پروگرام کو دوبارہ چلائیں گے۔ پہلے ہم 16 لیتے ہیں، 16 ایک کے طور پر پرنٹ ہو جاتا ہے، جس کا مطلب ہے کہ 16 ہمارا جفت نمبر ہے کیونکہ اسے دو سے تقسیم کیا جاتا ہے۔ اب اگر ہم سات کی بات کریں تو سات کی صورت میں صفر پرنٹ ہوجاتا ہے کیونکہ سات ہمارا طاق عدد ہے۔ اگلا سوال کہتا ہے کہ درج ذیل درست ہیں اور نہیں۔ پہلا بیان int e 8 اور یہ ہے۔



01:52:29

علامت 8 اب ہم یہاں اپنی توقعات کے بارے میں پہلے ہی بات کر چکے ہیں، ہم 8 سے 8 کی طاقت کی توقع کر رہے ہیں جس کی قدر کچھ بڑی ہونی چاہیے، اس لیے اسے یہاں پرنٹ نہیں کیا جائے گا، اس کی بجائے یہاں پرنٹ کیا جائے گا، صفر کیسے پرنٹ ہوگا، آئیے اسے کوڈ میں ایک بار دیکھتے ہیں، آئیے ہم اس پوری چیز کو ہٹا کر یہاں پرنٹ کر لیتے ہیں، 8 صفر پرنٹ ہو چکا ہے کیونکہ اس نے 8 کی طاقت نہیں لی، 8 کی طاقت نہیں لی۔ اسے 8 + 8 کے طور پر لیا اور جب ہم ایک ہی نمبر کو ایک ہی نمبر سے ضرب کرتے ہیں تو آؤٹ پٹ ہمیشہ صفر پر نکلتا ہے، اسی لیے یہاں



01:53:05

لیکن ہمیں آؤٹ پٹ میں صفر ملا ہے۔ یہ بٹ وائز آپریٹر ہے جس کے بارے میں ہم پہلے ہی بات کر چکے ہیں کہ ہم بعد میں بات کریں گے اور اس کی آؤٹ پٹ ہمیں پاور نہیں دیتی۔ طاقت کے لیے ہمیں pow pow فنکشن استعمال کرنا پڑتا ہے لیکن کیا یہ بیان چل گیا؟ جی ہاں، یہ بیان بھاگ گیا. کیا کمپائلر نے کوئی غلطی واپس کی؟ نہیں، مرتب کرنے والے نے کوئی غلطی واپس نہیں کی۔ اس لیے بیان ہمیں طاقت نہیں دیتا۔ لیکن یہ ایک درست بیان ہے۔ آئیے دوسرے بیان کے بارے میں بات کرتے ہیں، int x، اس کے بعد ہمارا ٹرمینیٹر ہے۔ پھر int y = x، پھر ٹرمینیٹر ہے۔ کیا یہ بیان اب درست ہے؟



01:53:39

اگر غور سے دیکھا جائے تو ہمارا پہلا بیان یہیں ختم ہوتا ہے اور دوسرا بیان شروع ہوتا ہے۔ دوسرے بیان میں ہم نے x کی قدر y میں ڈالی ہے۔ اب یہ بیان اسی لائن میں لکھا گیا ہے لیکن چونکہ ٹرمینیٹر آیا ہے، اگلا بیان بنتا ہے۔ تو پہلے ہم نے x کا اعلان کیا اور بعد میں اسے استعمال کیا۔ پس یہ قول بھی صحیح ہے۔ آئیے اسے حل کریں اور ایک بار چیک کریں۔ int x اور int y = x۔ اب یہاں اگر ہم اسے محفوظ کرتے ہیں تو کوئی ایرر نہیں آتا کیونکہ ہوا یہ ہے کہ پہلے x کا اعلان ہوا اور پھر y۔ اگر ہم اسے اس طرح لکھیں یا اس طرح لکھیں۔



01:54:19

اسے اس طرح لکھیں، دونوں میں کوئی فرق نہیں، دونوں نحو کے لحاظ سے درست اور یکساں ہیں لیکن یہاں اگر ہم اس ٹرمینیٹر کو ہٹا کر یہاں کوما لگا کر محفوظ کر لیتے تو یہاں ایک ایرر آ جاتا۔ خرابی کیوں آتی ہے کیونکہ اگر ٹرمینیٹر کو ہٹا دیا جائے تو اس کا مطلب یہ ہے کہ یہ ایک ہی لائن پر ہے، یہ ایک ہی لائن پر ہے، تو ہم نے ایک ہی لائن میں ایک استعمال کیا ہے جس میں ہم اسے اعلان کر رہے ہیں، تو یہاں قسم کے اعلان کا قاعدہ ٹوٹ گیا ہے اور یہاں ہمارا تیسرا مسئلہ پیدا ہوتا ہے، ہمیں تیسرے مسئلے میں کیا تھا کہ یہ ایک ہی لائن میں تھا اور درمیان میں آ گیا تھا۔



01:54:50

کوما، یہ درست تھا لیکن یہ ہمارا غلط بیان بن گیا۔ یہ چوتھا بیان ہے۔ ہم نے ستاروں کے نام سے ایک کردار کی تعریف کی ہے۔ ہم نے اس کے اندر دو ستارے رکھے ہیں۔ آئیے چیک کریں کہ آیا یہ درست ہے یا نہیں۔ آئیے اپنے کوڈ میں لکھتے ہیں کہ نگہداشت کے ستارے ستارے کے ستارے کے برابر ہیں۔ آئیے اسے بچا لیں۔ اب آئیے اس بیان کو مرتب کرتے ہیں۔ ایک بار جب ہم اسے مرتب کرتے ہیں، ایک انتباہ پیدا ہوتا ہے۔ وارننگ جو کہتی ہے وہ یہ ہے کہ ہم نے ملٹی کریکٹر کنسٹینٹ بنایا ہے، یعنی ہم نے یہاں ایک سے زیادہ حروف رکھے ہیں۔ تو یہ ایک غلطی کی بات ہے۔ ہم ایسا نہیں کرتے۔



01:55:24

آپ ایسا کر سکتے ہیں کہ اگر ہم کریکٹر کے اندر سپیس ڈالیں گے تو وہ بھی کمپائل نہیں کرے گا، یہ وہی پوچھے گا کہ آپ نے سپیس کیوں ڈالی، اسی لیے جب بھی کریکٹر بنائیں گے تو ان کے اندر ایک ہی ویلیو ڈالیں گے تب ہی وہ کامیابی سے کمپائل ہو جائے گا، اگر ہم یہاں ایک لکھیں گے تو ایک کمپائل ہو جائے گا لیکن اگر ہم ایک کے ساتھ دو لکھیں گے تو دو کریکٹر آ جائیں گے، یہ ایک طرح سے ہمیں کمپائل نہیں کرے گا، ایک طرح سے جنگ نہیں ہو گی۔ تبدیلی، یہ انتباہات کیوں دی جاتی ہیں، کیونکہ اگر ہم متعدد کرتے ہیں۔



01:55:53

ہم کریکٹر لگاتے ہیں، ستارہ لگاتے ہیں تو وہ میموری میں اتنی جگہ لیتا ہے جو کریکٹر کو دی گئی اسپیس سے بڑی ہوتی ہے، تو کیا ہم اسے بڑے کنٹینر میں ڈالتے ہیں، تو یہ سوچتا ہے کہ یہ چھوٹے کریکٹر کے کنٹینر میں فٹ نہیں ہوگا، کیا میں اسے int کنٹینر میں رکھوں، لیکن یہ خود بخود اس پر عمل درآمد نہیں کر پاتا کیونکہ یہ خود کار طریقے سے کریکٹر کو ایک عدد میں نہیں ڈالتا، آپ کو یہ جنگ کیوں نہیں کرنی چاہیے۔ جب بھی آپ ایک ہی قدر کے ساتھ کسی کردار کی تعریف کر رہے ہوتے ہیں۔



01:56:19

ہمیں کردار کی تعریف کرنی ہے۔ ہم اس بیان کو غلط کہیں گے کیونکہ یہاں مرتب کرنے والا ہمیں وارننگ دے رہا ہے۔ اگلے پریکٹس سوال میں، ہمیں یہ بتانا ہے کہ درج ذیل بیانات کے لیے صحیح یا غلط پرنٹ کرنا ہے۔ پہلا بیان یہ ہے کہ اگر اتوار ہے اور برف پڑ رہی ہے تو صحیح پرنٹ کریں، اس کا مطلب ہے کہ اگر اتوار ہے اور برف پڑ رہی ہے تو اسے سچ پرنٹ کرنا ہوگا۔ اس کو پروگرام کی شکل میں کیسے تبدیل کیا جائے؟ سب سے پہلے، آئیے دو متغیرات لیتے ہیں۔ پہلا متغیر int اتوار کو ہے۔ دوسرا متغیر int is snowing ہے۔ تو اب اگر ہم سچ پرنٹ کریں تو اتوار ہے۔



01:56:57

اس میں ڈالیں اور اگر ہم سچ میں ڈالیں تو برف پڑ رہی ہے، پھر ہم ایف پرنٹ کریں گے۔ جب یہ اتوار سچا ہو جائے گا اور جب برف باری ہو گی، تب ہی ہمارے پاس سچا پرنٹ ہو گا، یعنی یہ بھی سچ ہے اور یہ بھی سچ ہے۔ اگر اتوار ہے اور برف باری ہو رہی ہے، تب ہی ہم سچ پرنٹ کریں گے۔ تو ہم نے ان دونوں کو پہلے ہی سچ کر دیا ہے، آئیے دیکھتے ہیں کہ ہماری آؤٹ پٹ صحیح ہو رہی ہے یا نہیں۔ تو آؤٹ پٹ میں ہم سچ ہو گئے۔ چلو مان لیتے ہیں کہ یہ اتوار نہیں ہے، کوئی اور دن ہے، تو یہ اتوار جھوٹا ہو جائے گا اور اب اگر ہم اسے چلائیں گے تو آؤٹ پٹ میں صفر ہو جائے گا کیونکہ دو میں سے



01:57:35

ایک شرط باطل ہو جاتی ہے اور آخر کیا کرتا ہے۔ اگر ایک شرط بھی باطل ہو جائے تو پوری شرط کو باطل کر دے گی۔ اب دوسرا سوال کہتا ہے کہ اگر سوموار ہے اور بارش ہو رہی ہے، تو اسے سچ کر لیں۔ یا تو پیر ہے یا بارش ہو رہی ہے، پھر سچ یہاں چھپے گا۔ اور اس کی جگہ ہم اپنا منطقی اور آپریٹر استعمال کریں گے، تو ہم اتوار بنائیں گے، پیر ہے، ہم یہ جان لیں گے، کیا یہاں بارش ہو رہی ہے، اگر پیر نہیں ہے، تو ہم اسے صفر کر دیں گے، اگر بارش ہو رہی ہے، تو ہم اسے یہاں ایک کر دیں گے، سوموار ہے، ہم اسے یہاں بنائیں گے، کیا بارش ہو رہی ہے۔ اب ایک شرط جھوٹی ہے، ایک شرط سچی ہے۔ اب، دونوں میں سے کوئی بھی ہو سکتا ہے۔



01:58:15

اگر یہ سچ ہے، تو ہم سچ پرنٹ کرنا چاہتے ہیں۔ تو اس کے لیے ہم منطقی استعمال کریں گے اور اسے چلائیں اور دیکھیں، ہمارا پاس صحیح پرنٹ ہوگا۔ تیسری شرط کہتی ہے کہ اگر کوئی نمبر نو سے بڑا ہے، جس کا مطلب ہے کہ ایک عدد x ہے، اگر یہ نو سے بڑا اور 100 سے کم ہے، تو ہم اسے پرنٹ کرائیں گے۔ درست ہے، اس لیے ایک عدد کے لیے، ہمیں یہ دیکھنا ہوگا کہ یہ نو سے بڑا ہونا چاہیے اور وہی نمبر 100 سے چھوٹا ہونا چاہیے۔ یہ دونوں شرائط ہیں، دونوں شرطیں درست ہونی چاہئیں۔ ہم اپنے منطقی اور آپریٹر کو درمیان میں رکھیں گے اور پھر ہم اسے پرنٹ کرائیں گے۔ اب یہ جسے ہم سچ کی جگہ دیں گے وہ ایک ہے۔



01:58:52

بیان لکھنے والے شرط لکھنے والے ہیں، ہم اسے ایک طرح سے کہہ سکتے ہیں کہ ہمیں چیک کرنا چاہیے کہ نمبر دو ہندسوں کا ہے یا نہیں، کوئی بھی نمبر جو نو سے بڑا ہو اور 100 سے چھوٹا ہو ہمیشہ دو ہندسوں کا نمبر ہو گا، اس لیے جب بھی ہمیں دو ہندسوں کے نمبر کی کنڈیشن چیک کرنی ہوتی ہے تو ہم اپنے کوڈ میں یہ سٹیٹمنٹ لکھتے ہیں، اس لیے جب بھی ایسا سوال آتا ہے تو ہمیں سب سے پہلے یہ کوڈ لکھنا پڑتا ہے، ہم سب سے پہلے اس کوڈ کو پرنٹ کرتے ہیں۔ متغیر، پھر اسے اسکرین پر پرنٹ کریں، نمبر درج کریں، پھر اس نمبر کو دبائیں



01:59:25

آئیے d اور x کا فیصد کرتے ہیں اب ہم یہاں چیک کریں گے کہ x 9 سے بڑا ہے اور x 100 سے کم ہے اگر یہ دونوں حالتیں درست ہیں، تو اگر وہ نمبر دو ہندسوں کا نمبر ہے تو اسے ایک پرنٹ کیا جائے گا، اگر نہیں، تو صفر پرنٹ ہوگا۔ آئیے اسے چلاتے ہیں، سب سے پہلے نمبر 78 درج کرتے ہیں، 78 کے لیے ایک پرنٹ کیا گیا تھا۔ اب اگر ہم ایک ہی کوڈ کو چلاتے ہیں اور اس بار اگر ہم نمبر 101 ڈالیں گے تو یہ صفر پرنٹ ہو جائے گا کیونکہ یہ دو ہندسوں کا نمبر نہیں ہے، اس لیے اب تک جو کچھ بھی ہم نے C میں پڑھا ہے، مختلف آپریٹرز کو ملا کر ہم بہت خوبصورت منطقی پروگرام بنا سکتے ہیں۔



02:00:07

اگر اس کے اندر کوئی منطق موجود ہے، یعنی ریاضی جیسی کوئی چیز، جو بہت منطقی ہے، فزکس جیسی کوئی چیز جو بہت منطقی ہے، اگر منطق کہیں بھی موجود ہے جس کے لیے ہم ایک فارمولا بنا سکتے ہیں، کوئی عمل بنا سکتے ہیں، تو وہ چیز ہمیشہ کوڈ میں تبدیل ہو سکتی ہے، اس لیے یہاں ہم نے اپنی چیز کو کوڈ میں تبدیل کر دیا، ہم نے بہت کچھ سیکھا، یہ بنیادی طور پر چیک کرنے کے لیے بہت کچھ سیکھا اور بہت خوبصورت پروگرام کیا ہے۔ یہ کالجوں میں کئی وسط سمسٹروں میں پوچھا جاتا ہے، اگر آپ



02:00:34

ابتدائی راؤنڈز TCS جیسی کمپنیاں دے رہی ہیں، اس لیے وہ بھی آپ سے یہ سوالات شروع میں پوچھ سکتی ہیں، ورنہ ایسے سوالات آپ کے MCQ راؤنڈز میں آتے ہیں۔ اگر ہمیں یہ دیکھنا ہے کہ آیا کوئی نمبر دو ہندسوں کا نمبر ہے تو ہم نے اس کی شرط دیکھ لی ہے۔ اس کے علاوہ، اگلے ابواب میں، ہم اس طرح کے مزید منطقی سوالات دریافت کریں گے اور انہیں بہت آسان طریقوں سے حل کریں گے۔ اس کے بعد، ہمیں ہوم ورک کا مسئلہ دیا جائے گا، جو کہ ہوم ورک شیٹ ہے، ہمیں اسے روک کر خود ہی حل کرنا ہوگا۔ اگر ہم اسے حل نہیں کر پاتے اور کوئی خرابی پیدا ہو جاتی ہے۔



02:01:02

لہذا ہمارے نوٹ کے اندر ہمیں ان مسائل کا حل مل جائے گا، ہم جا کر انہیں دیکھ سکتے ہیں اور خود سے سوالات کرنے کی مشق کر سکتے ہیں۔ تو یہاں ہمارا باب 2 ختم ہوتا ہے اور آئیے اگلے باب کی طرف چلتے ہیں جو کہ مشروط آپریٹرز ہے۔ سب کو ہیلو، اور اب ہم اپنے تیسرے باب کے ساتھ شروع کرنے جا رہے ہیں جسے مشروط بیانات کہتے ہیں۔ مشروط بیانات C میں بہت اہم ہیں اور یہ ہماری پروگرامنگ کی بنیاد بناتا ہے۔ اب مشروط بیانات کے بارے میں پڑھنے سے پہلے، آئیے اس کی حقیقی زندگی کے بارے میں تھوڑا سا سمجھیں۔



02:01:28

آئیے کچھ مثالیں دیکھتے ہیں، فرض کریں کہ ہمیں پیر کے لیے M، منگل کے لیے T یا بدھ کے لیے A، W جیسا کریکٹر دیا گیا ہے، تو اس طرح ہمیں کریکٹر لے کر اسے پرنٹ کروانا ہوگا جس دن بھی ہو یا اس کے علاوہ ہمیں اسکول کے اندر ایک مارک شیٹ ملتی ہے، جس میں ہمیں کچھ درجات دیے جاتے ہیں، جیسے کہ اگر آپ کے پاس 90 جمع ہیں، تو آپ کو A جمع، 90 سے جمع، 08 سے 90 تک دیا جائے گا۔ 70 سے 80 تک آپ کو A دیا جاتا، 60 سے 70 تک آپ کو B دیا جاتا، اس طرح



02:02:00

ایک گریڈنگ سسٹم ہے، اس لیے اگر ہمیں پورے گریڈنگ سسٹم کو کوڈ کی شکل میں لکھنا ہے، تو ہمیں مشروط بیانات کی ضرورت ہوگی۔ فرض کریں ایسا منظر نامہ بنایا جا رہا ہے کہ اگر ہمارے پاس روشنی ہے تو ہمیں صبح چھاپنی پڑتی ہے اور اگر اندھیرا ہے تو ہمیں رات چھاپنی پڑتی ہے، کچھ ایسی چیزیں ہوتی ہیں جنہیں بعض اوقات کوڈ میں لکھنا پڑتا ہے یا اگر ہم بازار سے کوئی چیز خریدنے جا رہے ہیں جیسے فرض کریں کہ آپ کپڑے خریدتے ہیں، گیجٹ خریدتے ہیں، تو آپ کو ان پر کچھ ٹیکس دینا پڑتا ہے، لیکن



02:02:28

دوسری طرف، اگر آپ بازار سے کتابیں خریدتے ہیں، تو آپ کو ان پر ٹیکس ادا کرنے کی ضرورت نہیں ہے۔ لہذا، آپ کس قسم کا مواد خرید رہے ہیں، اس کی بنیاد پر آپ کا سافٹ ویئر فیصلہ کرے گا کہ آپ پر کتنا ٹیکس عائد کیا جائے گا۔ اس قسم کے پروگراموں میں، آپ کی شرائط کی جانچ پڑتال کی جاتی ہے۔ مثال کے طور پر آئٹم پر ٹیکس کا حساب لگانے کی شرط میں اس شرط کو چیک کیا جائے گا کہ یہ کس قسم کی چیز ہے، پھر بتایا جائے گا کہ اس پر کتنا ٹیکس لگایا جائے گا۔ پہلے دیکھا جائے گا کہ اندھیرا ہے یا روشنی پھر بتایا جائے گا کہ کیا پرنٹ کرنا ہے۔ پہلے یہ دیکھا جائے گا کہ کردار کیا ہے، پھر پرنٹ کریں گے۔



02:02:58

یہ معلوم کیا جائے گا کہ ہم ہفتے کے کس دن کی بات کر رہے ہیں۔ پہلے یہ چیک کیا جائے گا کہ آپ نے اپنے مضمون میں کتنے نمبر حاصل کیے ہیں اور پھر یہ پرنٹ کیا جائے گا کہ اس مضمون میں آپ کے کتنے نمبر ہیں۔ تو ایسے حالات جہاں ہم کسی شرط کو دیکھتے ہیں اور اس کے مطابق کام کرتے ہیں اور اس کے مطابق کچھ بھی کرتے ہیں، ہم انہیں مشروط بیانات اور مشروط آپریٹرز کے زمرے میں لاتے ہیں۔ اب جب بھی ہم C میں مشروط بیانات کے بارے میں بات کریں گے تو ہم دو قسم کے بیانات پڑھیں گے، ان میں سے پہلا ہمارے FL اسٹیٹمنٹس اور دوسرا ہمارا سوئچ ہے۔



02:03:30

بیان کے معنی انگریزی میں if اور else کے ہیں اگر وہ چیز نہ ہو تو یہ کام کریں۔ تو اس طرح ہمارے FFL بیانات بنتے ہیں۔ اب اگر ہم دیکھیں کہ FFL سٹیٹمنٹس کیسے لکھے جاتے ہیں تو سب سے پہلے if keyword لکھتے ہیں۔ یہ C کا کلیدی لفظ ہے، جس کا مطلب ہے کہ C مرتب کرنے والا پہلے ہی if کا مطلب جانتا ہے۔ پھر ہم پیرنز لگاتے ہیں، پھر اس کے اندر ایک شرط لکھتے ہیں۔ اب ہم حالات کے بارے میں پڑھ چکے ہیں۔ ہم کیسا رشتہ لکھیں گے کہ ہمارا



02:04:02

حرف m کے برابر ہے، اس صورت میں پیر کو پرنٹ کروائیں یا اگر آپ نمبروں کی شرط لکھنا چاہتے ہیں، تو اگر ہمارے نمبر 80 سے زیادہ ہوں اور اگر ہمارے نمبر 90 سے کم ہوں، تو اس صورت میں ہم جس گریڈ کو پرنٹ کرنا چاہتے ہیں، فرض کریں کہ وہ a+ ہے، تو یہاں اس قسم کی شرطیں لکھی ہوئی ہیں کہ میں اس کی کیا شرط لگاؤں، اگر یہ سچ ہو جائے تو یہ بات درست ہو جائے اور اگر یہ کام ہو جائے تو یہ کروں گا ہمارا اگر بیان، یہ ہمارا دوسرا بیان ہے، ورنہ اس کا اپنا بلاک ہے۔



02:04:38

ایسا ہوتا ہے کہ اور بھی ایک کلیدی لفظ ہے۔ اگر یہ شرط درست ہو جائے تو اس کے اندر جو کچھ لکھا جائے گا، یعنی جو کچھ ان دونوں گھنگھریالے منحنی خطوط وحدانی کے اندر لکھا جائے گا، وہ عمل میں آئے گا۔ لیکن اگر یہ بیان غلط نکلا تو یہ دوسرا بلاک، جو کچھ ان دونوں گھنگھریالے منحنی خطوط وحدانی کے اندر لکھا ہے، پرنٹ ہو جائے گا یا جو کام ہم نے مرتب کرنے والے کو دیا ہے، وہ ہو جائے گا۔ اب، if else شرط کے اندر، یہ دوسری لازمی نہیں ہے۔ اگر ظاہر ہے کہ لازمی ہے۔ ورنہ اختیاری ہے۔ یہ ہمارا انتخاب ہے۔



02:05:11

بصورت دیگر ہم کچھ اور کام کروانا چاہتے ہیں، اگر شرط غلط ہو جائے یا ہم اسے کروانا نہیں چاہتے تو اسے مکمل کرنے کے بعد ہم اسے ہٹا سکتے ہیں۔ اب آئیے اس کی کچھ مثالیں آزماتے ہیں۔ سب سے پہلے ہم ایک متغیر کنارے کو کنارے میں متعین کرتے ہیں، فرض کریں کہ ہم نے 19 کو edge میں محفوظ کر لیا ہے یا یہ اس سے بھی بہتر ہو سکتا ہے، آئیے صارف سے edge کا ان پٹ لیتے ہیں، پہلے ہم enter edge کو پرنٹ کرتے ہیں اور اس کے بعد ہم edge کو فیصد d اور edge کے طور پر اسکین کریں گے۔ یہاں سے، ہم اسائنمنٹ کو ڈیکلریشن سے ہٹا دیتے ہیں۔ اب جیسے ہی ہم کنارے حاصل کرتے ہیں، سب سے پہلے ہم اسے چیک کریں گے. اب ہم یہ جانتے ہیں کہ



02:05:50

جس کی عمر 18 سال سے زیادہ ہے وہ بالغ ہے اور جس کی عمر 18 سال سے کم ہے وہ بالغ نہیں ہے۔ تو ہم یہاں کوڈ میں وہی بیان لکھنے جا رہے ہیں۔ اگر ہماری عمر 18 سال سے زیادہ ہے تو اس صورت میں ہم بالغ پرنٹ کرنا چاہتے ہیں۔ آئیے اس بیان کو غور سے دیکھیں۔ سب سے پہلے ہم نے if کنڈیشن چیک کرنے کے لیے if کی ورڈ لکھا ہے۔ اندر ہم نے اپنی حالت لکھی۔ ہماری شرط یہ تھی کہ ہماری عمر 18 سال سے زیادہ ہو، تب ہی جس کی عمر ہم نے لی ہے وہ بالغ ہے۔ تو ہم نے پہلے ہی پڑھا تھا کہ رشتہ دار آپریٹرز کو کیسے استعمال کیا جائے۔



02:06:28

آئیے اس مستقل کو استعمال کریں اور متغیر کا موازنہ کریں کہ آیا ہمارا متغیر ہمارے مستقل 18 سے بڑا ہے یا نہیں۔ اور اگر یہ قول صحیح ہو جائے، اگر یہ شرط درست ہو جائے تو اس صورت میں ہم اس پر عمل کریں گے جو کچھ یہاں لکھا ہے۔ یہاں بالغ لکھا ہے۔ لہذا اگر یہ شرط درست ہو جاتی ہے، تو ہم اسکرین پر بالغ پرنٹ کریں گے. لیکن فرض کریں کہ یہ شرط غلط ہو جائے اور اس صورت میں ہم پرنٹ کرنا چاہتے ہیں بالغ نہیں۔ تو کیا کریں گے، اس طرح اور لکھیں گے۔ پھر



02:06:57

ہم گھوبگھرالی منحنی خطوط وحدانی کا ایک بلاک بھی بنائیں گے۔ گھوبگھرالی منحنی خطوط وحدانی کے درمیان تمام لائنوں کو گھوبگھرالی منحنی خطوط وحدانی کا بلاک کہا جاتا ہے۔ اگر ہم یہاں اپنا پرنٹ ایف مکمل کرتے ہیں، تو ہم اس میں، اگلی لائن میں "بالغ نہیں" لکھیں گے اور اسے محفوظ کریں گے۔ اب ہم یہاں بھی کئی سطریں لکھ سکتے تھے۔ اب اگر وہ بالغ ہے تو ظاہر ہے کہ ہم جانتے ہیں کہ وہ ووٹ ڈال سکتے ہیں، اگر وہ 18 سال کے ہیں تو وہ ووٹ ڈال سکیں گے، اگر وہ 18 سال کے ہیں تو وہ گاڑی بھی چلا سکیں گے، اس لیے یہاں ہم لکھتے ہیں کہ "وہ بھی گاڑی چلا سکتے ہیں" تو اس طرح، اگر یہ شرط درست ہے، تو یہ تینوں ہوں گے۔



02:07:35

بیانات چھاپے جائیں گے اور اگر شرط درست نہ ہو تو اس بلاک میں صرف ایک بیان ہے۔ اب، ان دو گھوبگھرالی منحنی خطوط وحدانی کے درمیان، بیانات کا یہ مکمل حصہ آتا ہے، اس گروپ کو بلاک کہتے ہیں۔ سی یا کسی بھی پروگرامنگ لینگویج میں، بلاک اسٹیٹمنٹس کا مجموعہ ہوتا ہے جس میں ہم بہت سارے اسٹیٹمنٹس ڈالتے ہیں، پھر یہ تینوں ایک ساتھ عمل میں آئیں گے۔ آئیے اسے محفوظ کریں اور اسے چلائیں، ہم اسے مرتب کریں گے، ہم اسے چلائیں گے، ہم پہلے انٹر دبائیں گے۔



02:08:04

15 کہ ہماری عمر 15 سال ہے، اس معاملے میں اسے بالغ نہیں کے طور پر پرنٹ کیا گیا تھا۔ اب اگر ہم دوبارہ بھاگتے ہیں تو اس بار ہم 22 سال کی عمر میں داخل ہوں گے اور اس بار یہ چھاپ دیا گیا ہے کہ وہ بالغ ہیں، ووٹ ڈال سکتے ہیں، گاڑی چلا سکتے ہیں۔ تو جس صورت میں ہم نے بیان درج کیا جو صحیح نہیں ہوگا، یعنی یہاں جھوٹا ہوا، پھر اندر چلا گیا، پھر اس نے "بالغ نہیں" پرنٹ کیا لیکن جہاں ہم نے 22 درج کیا اور یہ شرط صحیح ہو جائے گی، تو اس میں یہ تمام بیانات ہوئے لیکن ایسا نہیں ہوا، یعنی یہ بیان نہیں ہوا۔ اب اس کے بعد اگر ہم آخر میں کچھ لکھنا چاہیں تو شکریہ۔



02:08:40

تو کیا اس پر عمل ہو گا؟ ظاہر ہے ہاں یہ بیان ہر حال میں نافذ ہو گا کیونکہ اس میں نہ تو ہے اور نہ اس سے پہلے، یعنی کوئی شرط، اس پر عمل کرنا ہے۔ اس کی ایک مثال ہم بھی دیکھ سکتے ہیں، آئیے اسے مرتب کرکے چلاتے ہیں، اب اگر ہم 19 درج کرتے ہیں تو اس صورت میں یہ تمام شرائط پرنٹ ہوجائیں گی، آخری شکریہ کے ساتھ یہ تمام بیانات ہمیشہ پرنٹ ہوں گے، چاہے ہم 18 سے چھوٹی یا 18 سے زیادہ کی عمر درج کریں، اب یہ لازمی نہیں ہے، چاہے ہم اسے ہٹا دیں، فرض کریں



02:09:13

ہمیں صرف یہ دیکھنا ہے کہ آیا یہ 18 سے زیادہ ہے یا نہیں۔ اگر یہ چھوٹا ہے تو اس صورت میں کچھ بھی نہیں چھاپنا چاہیے۔ تب بھی ہمارا پروگرام کامیابی سے مرتب ہو گا اور ہو جائے گا۔ اس بار اگر ہم 15 درج کریں گے تو صرف شکریہ ہی پرنٹ ہوگا، اور کچھ نہیں چھپے گا کیونکہ کوئی اور نہیں ہے۔ یہ صرف جانچا جائے گا کہ آیا یہ بیان درست ہے یا نہیں۔ تو اس طرح ہمارا if else کام کرتا ہے۔ اب اندر کوئی خاص بات ہے اگر نہیں تو۔ اگر ہم نے اندر ایک سے زیادہ بیانات لکھے ہیں if ورنہ، تو ہمیں گھوبگھرالی منحنی خطوط وحدانی لگانا پڑے گا، لیکن یہ گھوبگھرالی منحنی خطوط وحدانی



02:09:42

اگر ہمیں صرف ایک سٹیٹمنٹ لکھنا ہے تو منحنی خطوط وحدانی لازمی نہیں ہے، جیسے if کی صورت میں، صرف ایک سٹیٹمنٹ لکھنا ہے، اور کی صورت میں بھی صرف ایک سٹیٹمنٹ لکھنا ہے، شکریہ، ہم فی الحال یہاں سے آخری کو ہٹا دیں گے اور اگر ہم اسے محفوظ کر لیں گے تو پھر بھی گھنگھریالے منحنی خطوط وحدانی کے بغیر یہ پروگرام مرتب اور چلتا رہے گا، اگر 23 ڈالے جائیں تو دیکھیں کہ ہم نے صرف ایک سٹیٹمنٹ پرنٹ کر لیا ہے، ہم نے صرف ایک سٹیٹمنٹ چھاپ دیا ہے تو کوئی غلطی ہو گئی ہے۔ گھوبگھرالی منحنی خطوط وحدانی کے بغیر بھی، لیکن واقعی اچھے پروگرامر، وہ



02:10:14

آئیے پروگرام میں مستقل مزاجی لائیں اور اگر ہم ایک اچھا پروگرامر بننا چاہتے ہیں تو ہمیں ہر بار گھنگھریالے منحنی خطوط وحدانی استعمال کرنا ہوں گے، اس لیے میں ہر بار کرلی منحنی خطوط وحدانی استعمال کرتا ہوں کیونکہ آئیے ایک مثال دیکھتے ہیں کہ اگر ہم گھوبگھرالی منحنی خطوط وحدانی استعمال نہیں کریں گے اور متعدد بیانات نہیں لکھیں گے تو کیا ہوگا، ہم نے یہاں لکھا ہے کہ ڈی کین ووٹ دی ووٹ دے سکتے ہیں، اب اسے محفوظ کریں، تو یہاں ایک خرابی آگئی ہے کہ اس کے بعد پہلے ہی ایک اور ایک پرنٹ کیا جائے گا، اس کے بعد یہ کیا کرنا چاہیے اس کے ساتھ بیان اگر، لیکن دوسرا طباعت شدہ بیان



02:10:48

اس نے اسے if کے ساتھ نہیں شمار کیا، اس نے اسے الگ سے شمار کیا، پھر دوسرے کے پاس آیا اور سوچا کہ یہ کہاں ہے کیونکہ اس کے لیے اگر اوپر نہیں ہے، اوپر ایک عام بیان ہے، ہدایت لکھی ہوئی ہے، اس لیے اس قسم کی کوئی الجھن نہیں ہونی چاہیے۔ جب بھی ہمیں کوئی بھی پروگرام لکھنا ہو تو ہمیں ہمیشہ اس میں گھنگھریالے منحنی خطوط وحدانی رکھنا چاہیے، چاہے کتنی ہی لائنیں کیوں نہ ہوں۔ اب جب بھی ہمارا اگر سچ نہیں ہے، اس کے بعد اگر ہمیں یہ دیکھنا ہو کہ کوئی اور شرط درست ہے یا نہیں، اوپر والا ہوا ہے یا نہیں، کیا نیچے والا صحیح ہے، تو ہم لکھتے ہیں اور اگر نہیں تو لکھنے کا کیا؟



02:11:19

فارمیٹ وہی رہتا ہے، اگر ہم نے اوپر لکھا ہے تو اس کے اندر اپنی شرط ایک رکھ سکتے ہیں، پھر جو کچھ کرنا ہو، پہلے بلاک میں ڈالیں، پھر دوسری اگر لکھیں، اس کے اندر کنڈیشن سچ ڈالیں، مثال کے طور پر، اگر ہم نمبروں کی مثال لیں، اگر ہمارے نمبر 90 سے زیادہ ہیں، تو ایک ++ پرنٹ کریں اور یہاں چیک کریں کہ نمبر 90 سے کم ہیں، لیکن اس صورت میں 90 سے زیادہ نمبر پرنٹ کریں، لیکن اس صورت میں 90 سے زیادہ نمبر نکالیں۔ کی حالت سچ اس کے اندر آئے گی، اس طرح، اس کے بعد ہم ایک اور ایل سی ایف، دوسرا ایل سی ایف لکھ سکتے ہیں۔



02:11:54

آپ جتنے چاہیں LCF لکھ سکتے ہیں اور اس کے بعد آخر میں اگر ہم کچھ کرنا چاہتے ہیں جو اوپر میں سے کوئی بھی سچ نہیں ہے تو اور کریں۔ اس طرح جب بھی ہمارا فلو آف پروگرام بنتا ہے تو سب سے اوپر ہم اپنا if بلاک بناتے ہیں، اس کے بعد ہم اپنا LCF بلاک بناتے ہیں، اس کے بعد ایک اور LCF، جتنے LCF لکھنا چاہتے ہیں اور آخر میں ایک اور لکھتے ہیں۔ لہٰذا اگر آپ نے ان سب کو استعمال کرنا ہے تو بہاؤ اس طرح ہوگا، اس میں کیا ہوگا، سب سے پہلے ایک شرط کو چیک کیا جائے گا، اگر یہ درست نہیں ہے تو دوسری شرط کو چیک کیا جائے گا کہ اگر



02:12:23

اگر یہ درست نہیں ہے تو تیسری شرط کی جانچ کی جائے گی کہ آیا یہ سچ ہے۔ فرض کریں کہ یہ سچ ہو جائے تو اس کے بعد کوئی چیک نہیں ہو گا اور اگر اوپر والے تمام جھوٹے ہیں تو آخری میں کچھ بھی چیک نہیں ہوتا ورنہ اگر اوپر والے تمام جھوٹے ہیں تو جو کام لکھا ہے وہ بغیر چیک کیے ہو جاتا ہے۔ اب اگر ہم چاہتے ہیں کہ ہماری تمام شرطیں چیک ہو جائیں، یعنی اگر یہ بھی سچ ہو جائے تو یہ چیز بھی چیک ہو جائے، تو اس صورت میں ہم ایک کے بعد ایک بہت سے if لکھتے ہیں، یہ چیک ہو جائے گا اگر یہ سچ ہے تو ایسا نہیں ہو گا۔



02:12:54

تو ایسا نہیں ہوگا، پھر اگر چیک کیا جائے کہ یہ سچ ہے تو ایسا ہوگا، نہیں ایسا نہیں ہوگا، اس سے کوئی فرق نہیں پڑتا کہ اوپری کنڈیشن صحیح تھی یا غلط، لہٰذا جب نچلی کنڈیشن اوپری کنڈیشن سے متاثر نہ ہو، تو بار بار if لکھتے رہیں اور اگر اوپری کنڈیشن میں فرق پڑ رہا ہے، مثال کے طور پر اگر ہمیں مارکس چیک کرنے ہیں، تو اگر a + p کو دوبارہ پرنٹ کیا جائے تو یہ دیکھ بھال کرنے کے لیے نیچے ایک بار پرنٹ کیا جائے گا۔ اس لیے ہم اس میں LCF استعمال کریں گے، لہٰذا LCF کے لیے بھی ہم اسے مثال کے ساتھ حل کر کے اپنا فارمیٹ لکھتے ہیں۔



02:13:24

آئیے دیکھتے ہیں، عمر کے معاملے میں کرتے ہیں، اگر عمر 18 سال سے زیادہ ہے تو ہم بالغ لکھیں گے۔ اب ایک اور شرط لگاتے ہیں کہ اگر ہماری عمر 13 سال سے زیادہ ہے اور عمر 18 سال سے کم ہے، ویسے یہاں 18 کے برابر آنا چاہیے اور یہ 18 سے کم ہونا چاہیے، تو یہاں ہم Teenager لکھیں گے اور آخر میں لکھیں گے else print f child، ہم یہ شکریہ ہٹا دیں گے۔ اب اگر غور سے دیکھا جائے تو ہم نے کیا کیا ہے، ہم نے صارف سے عمر پوچھی ہے، اگر ہماری عمر 18 سال یا 18 سے زیادہ ہو جائے تو اس صورت میں اگر عمر 13 سال سے زیادہ ہو تو بالغ کو پرنٹ کرنا پڑتا ہے لیکن



02:14:10

اگر بچہ 18 سال سے کم ہے، اس صورت میں، جو بھی شخص ہے وہ عمر کے حساب سے ٹین ایجر ہے، تو اس صورت میں ٹین ایجر پرنٹ کیا جائے گا۔ تو دوسری صورت میں اگر یہ حالت چیک کی جائے اور مذکورہ دونوں میں سے کوئی کیس نہ ہو تو یہ کیس پرنٹ ہو جائے گا، یعنی بچہ ابھی 18 سے اوپر نہیں ہے، 13 سے 18 کے درمیان بھی نہیں ہے، اس لیے ظاہر ہے کہ 13 سے کم ہو گا، اس لیے چیک کرنے کی ضرورت نہیں، بس بچے کو پرنٹ کروا لیں۔ آئیے اسے محفوظ کریں اور مرتب کریں اور چلائیں۔ سب سے پہلے، ہم عمر داخل کرتے ہیں، جو پانچ سال ہے. تو اس صورت میں، بچہ اس کے بعد پرنٹ کیا جائے گا.



02:14:40

دوبارہ عمر درج کریں، فرض کریں کہ ہم 16 میں داخل ہوئے، اس معاملے میں ٹین ایجر پرنٹ کیا گیا اور پھر ہم اپنی عمر 22 سال میں داخل ہوئے، تو اس صورت میں بالغ پرنٹ کیا گیا، تو اس طرح، مختلف حالات کے مطابق جو چیزیں ہونی چاہئیں، وہ ہم FS کی مدد سے اپنے کوڈ میں کر سکتے ہیں، اب اگلی قسم کے بیان کے بارے میں جس کے بارے میں ہم سوئچ سے پہلے بات کریں گے، ہم دوسرے باب میں پانچ قسم کی شرط کے بارے میں بات کر رہے ہیں، ہم وہاں دوسرے باب میں بات کر رہے ہیں۔ آپریٹرز کی، جن میں سے ہم پڑھتے ہیں، ہم آنے والے ابواب میں کچھ پڑھیں گے، اب ان میں سے ایک بہت اہم قسم



02:15:13

ہمارے پاس ٹرنری آپریٹر ہے۔ تقرری کے وقت، بہت سے MCQ سوالات ہوتے ہیں۔ بہت سی کمپنیاں ٹرنری آپریٹر سے متعلق سوالات پوچھتی ہیں۔ یہ ٹرنر آپریٹر وہاں C++ کے ساتھ ساتھ جاوا میں بھی ہے اور اس کا ایک ہی نحو ہے۔ یہ دونوں زبانوں میں بالکل یکساں نظر آتا ہے۔ اور درحقیقت، جو طلباء ایک بار C++ سیکھتے ہیں، انہیں C++ یا Java میں شفٹ ہونے میں کوئی مسئلہ نہیں ہوتا کیونکہ زیادہ تر چیزوں کے لیے تقریباً نحو ایک جیسا ہوتا ہے، فرق صرف ان پٹ آؤٹ پٹ میں ہوتا ہے۔ اب، ٹرنر آپریٹر لکھنے کا طریقہ کیا ہے؟



02:15:42

آئیے پہلے ٹرن آپریٹر کے استعمال کو سمجھیں۔ جب بھی ہمارے پاس بہت سی لائنیں ہوتی ہیں، سادہ میں if else، اس کا مطلب ہے کہ ہم if اور پھر کچھ کرتے ہوئے کنڈیشن کو چیک کر رہے ہیں، اگر ہم اسے مختصر کر سکتے ہیں، جیسے فرض کریں کہ ہم متغیر کی ویلیو چیک کرنا چاہتے ہیں، اگر ہماری عمر 18 سال سے زیادہ ہے، تو اگر عمر یہاں متغیر ہو جائے، تو ایڈلٹ پرنٹ کریں، ورنہ بالغ نہیں۔ اس میں، ہم نے دیکھا کہ ہم نے بہت ساری لائنیں لکھی ہیں، یعنی اگر ہم پچھلی کو بھی دیکھیں، 1، 2، تین اور تین، تو ہمارا کوڈ چھ لائنوں میں لکھا جا رہا ہے، ان چھ لائنوں کا کوڈ۔



02:16:12

ایک لائن میں ایسا کرنے کا طریقہ ٹرنری آپریٹر ہے۔ تو ٹرنری آپریٹر کی ترکیب یہ ہے کہ سب سے پہلے اپنی حالت بتائیں، شرط کیا ہے، اس کے بعد سوالیہ نشان لگائیں۔ سوالیہ نشان کا کام یہ ہے کہ وہ چیک کرے گا، پوچھے گا کہ آپ کی حالت درست ہے یا نہیں۔ اگر آپ کی حالت درست ہو جاتی ہے تو جو کچھ یہاں لکھا جائے گا اس پر عمل ہو گا۔ دوسری صورت میں، ہم اس بڑی آنت کو اس کے بعد لگاتے ہیں، اس کا مطلب ہے کہ دوسری صورت میں یہ چیک کرے گا، اگر شرط صحیح نکلتی ہے، تو یہ ہو جائے گا. ورنہ اس کے بعد جو کچھ لکھا جائے گا، یعنی ایسا ہی ہوگا۔



02:16:51

اگر شرط غلط ہو جائے، تو یہ ہماری ترکیب باقی رہ جاتی ہے۔ آئیے ایک بار ٹرنری آپریٹر کی مثال لکھ کر دیکھتے ہیں، جیسے ہم نے عمر داخل کی تھی، اب اس کے ٹرنری آپریٹر کو کیسے عمل میں لاتے ہیں، اگر ہماری عمر 18 سے زیادہ ہے، اگر یہ 18 ہے اور یہ درست ہے، تو اس صورت میں ہم بالغ پرنٹ کرنے والے ہیں، ورنہ ہم بالغ نہیں پرنٹ کرنے والے ہیں۔ اب اس سطور میں ایک بات پر توجہ دینے کی ضرورت ہے کہ اس پرنٹ ایف اسٹیٹمنٹ کے بعد ہم نے سیمی کالون نہیں لگایا، یعنی ہم نے ٹرمینیٹر نہیں لگایا، کیونکہ



02:17:32

اب ہم سٹیٹمنٹ کو ختم نہیں کرنا چاہتے، ہمیں سٹیٹمنٹ کو آخر میں لگانا ہے، اس لیے اگر یہ سچ ہو بھی جائے اور ہمیں پرنٹ f کو بیچ میں لکھنا پڑے یا f کو اسکین کرنا پڑے، تو ہم یہاں ٹرمینیٹر نہیں لگائیں گے کیونکہ اگر ٹرمینیٹر لگا دیا جائے تو ہماری حالت وہیں ختم ہو جائے گی، ہمارا بیان جیسا کہ ہم نے پہلے ایک بار چلایا تھا، اسے مرتب کیا اور چلایا، اب اگر ہم نے اسے پرنٹ نہیں کیا تو عمر 5 کے طور پر درج کیا، جیسا کہ 5 درج کیا گیا تھا۔ اس نے شرط چیک کی، اس کے بعد اگر یہ درست تھا تو یہ کرنا تھا، لیکن اگر یہ درست نہیں تھا، ورنہ اس کے بعد کی شرط کی۔



02:18:07

جو کہ بالغ نہیں چھاپی گئی ہے۔ اب اگر ہم یہاں ٹرمینیٹر لگاتے تو سب سے پہلے ایک ایرر آتا کیونکہ ہم ٹرمینیٹر کے بعد سیمی کالون نہیں لگا سکتے، اس لیے یہاں ٹرمینیٹر لگانا درست نہیں ہوگا۔ نیز، ٹرن آپریٹر کا استعمال صرف اس صورت میں کرنا ہوگا جب ہمارے یہاں ایک ہی لائن ہو کیونکہ ہم ٹرمینیٹر نہیں لگا سکتے۔ لہذا، جب بھی ہمیں if else میں ایک سٹیٹمنٹ لکھنا ہو، ہم اس کے بجائے ٹرنری آپریٹر استعمال کر سکتے ہیں۔ لیکن یہ بہت اہم ہے، اس آپریٹر کی ترکیب بہت اچھی ہے، اس کا عملی استعمال زیادہ ہے۔



02:18:37

نہیں، زیادہ تر یہ آپ کی تقرریوں یا امتحانات میں پوچھا جاتا ہے، لہذا ہم اسے ذہن میں رکھ سکتے ہیں۔ اب اگلا مشروط آپریٹر جس کے بارے میں ہم بات کریں گے اسے سوئچ کہتے ہیں۔ جیسے ہم نے اپنے گھر میں لائٹ کے سوئچ، پنکھے کے سوئچ، ٹی وی کے سوئچ دیکھے ہوں گے۔ ایک سوئچ کیا کرتا ہے؟ اگر آپ اسے آن کرتے ہیں تو یہ کچھ کام کرتا ہے، اگر آپ اسے بند کرتے ہیں تو یہ کام نہیں کرتا ہے۔ اسی طرح ہماری کوڈنگ کے اندر ایک سوئچ ہے، اگر آپ اس کی حالت کو آن کریں گے تو یہ آپ کے لیے کام کرے گا اور اگر آپ ایسا نہیں کریں گے تو آپ کے لیے یہ ممکن نہیں ہوگا۔ اب سوئچ لکھنا ممکن نہیں ہے۔



02:19:10

نحو کچھ اس طرح ہے جس میں سب سے پہلے ہم کلیدی لفظ سوئچ لکھتے ہیں، اس کے اندر ہم کچھ نمبر یا کریکٹر لکھتے ہیں اور سوئچ بنیادی طور پر کیا کرتا ہے یہ اس نمبر یا کریکٹر کے ساتھ کچھ مستقلوں سے میل کھاتا ہے جیسے آپ نے نمبر ایج دیا ہے تو ہمارا مستقل 1 2 3 4 5 6 7 8 9 10 وغیرہ بن جاتا ہے۔ مستقل نمبرز پھر یہ آپ کے کنارے سے مماثل ہوگا جس بھی صورت میں اس کا مطلب ایک کے ساتھ ہے اگر یہ آپ کے کنارے سے مماثل ہے، آپ نے ایک کو کنارے میں ڈالا تھا تو یہ اسے ایک کے ساتھ ملائے گا۔



02:19:42

اگر میچ ہو گیا تو اس کے آگے جو کچھ لکھا ہے، وہ کام کر کے آپ کو دے گا، اس طرح آپ نے اس کا سوئچ آن کیا، کیس میچ کر لیا، تو یہ کام کر کے آپ کو دے گا۔ اب ہم سوئچ لکھتے ہیں، اس کے اندر ہم کسی بھی نمبر یا کیریکٹر کو کسی بھی ویری ایبل کے ساتھ رکھ سکتے ہیں جہاں ہم اسے میچ کرنا چاہتے ہیں، پھر یہ کیسز کو چیک کرتا ہے، یہاں ہم کچھ مستقل لکھتے ہیں جیسے ایک دو بن گیا، تو ہم اسے اس طرح لکھتے ہیں، کیس ایک کیس ٹو کیس r اور کریکٹر کے لحاظ سے، اگر آپ اسے کریکٹر کے ساتھ کرنا چاہتے ہیں تو کیس A کیس B کیس۔



02:20:21

کیس کے بعد آپ کو مستقل لکھنا ہوگا۔ اس کے بعد ہمیں بڑی آنت لگانی ہے، پھر اپنے تمام بیانات لکھیں۔ اسی طرح، آپ اگلی صورت، تمام بیانات لکھیں گے اور آخر میں آپ کو وقفہ لکھنا ہوگا۔ بریک کا کام کیس کے بعد اسے سوئچ سے نکالنا ہے۔ اگر یہ وقفہ سوئچ کے ذریعہ نہیں کیا جاتا ہے، تو یہ تمام بیانات پر عمل درآمد کیا جائے گا۔ اگر ایک سوئچ آن ہے اور آپ بریک نہیں لکھیں گے تو تمام سوئچ آن ہو جائیں گے۔ اس کے بعد بریک کا مطلب یہ ہے کہ اگر آپ تمام سوئچ آن نہیں کرتے ہیں۔



02:20:52

اگر آپ ایسا کرنا چاہتے ہیں تو یہ پہلے سے طے شدہ رویہ ہے، اگر تمام سوئچ آن نہیں کرنے ہیں تو پہلے سوئچ کے بعد بریک کریں اور آخر میں ہمارا کیس ڈیفالٹ کیس ہے کہ اگر اوپر میں سے کوئی بھی سچ نہیں ہے تو یہ کام کریں، اب یہ ہمارے اور جیسا ہے کہ اگر اوپر میں سے کوئی بھی درست نہیں ہے تو پھر عمل کریں، ہمارے اور کی مثال لے لیجیے، اب ایک اور کی مثال ہے۔ یہ، ہم مثال میں کیا کریں گے، ہم یوزر ڈے سے ان پٹ لینے جا رہے ہیں، تو int ڈے، ہم صارف سے ان پٹ لیں گے، یہاں دن کا کیا مطلب ہے، ایک کا مطلب ہے



02:21:31

پیر دو کا مطلب منگل تین کا مطلب بدھ وغیرہ۔ ہم نے صارف سے سات تک دنوں کی تعداد درج کرنے کو کہا ہے۔ یہاں ہم داخل ہونے کے لئے ایک سے سات تک لکھ سکتے ہیں اور پھر یہاں اختتامی دن لکھ سکتے ہیں، پھر سوئچ کے اندر اپنا سوئچ لکھ سکتے ہیں۔ اگر آپ وی ایس کوڈ میں کوڈنگ کر رہے ہیں تو ایک بار انٹر دبائیں تو تمام چیزیں لکھی جائیں گی لیکن چونکہ ہم پہلی بار لکھ رہے ہیں اس لیے ہم شروع سے ہی لکھیں گے۔ سوئچ کے بعد، پیرنز کے اندر پیرنز ڈالے جاتے ہیں۔ ہم جس بھی متغیر کو چیک کرنا چاہتے ہیں، ہم اسے لکھیں گے۔ ہمیں کیا کرنا ہے؟



02:22:08

ہمیں دن کو چیک کرنا ہے، پھر ہم گھوبگھرالی منحنی خطوط وحدانی ڈال دیں گے۔ اب ہم اس بلاک کے اندر تمام بیانات لکھیں گے۔ سب سے پہلے ہم کیس ون لکھیں گے۔ مقدمہ ایک کہتا ہے کہ ہمارا دن سوموار ہے تو ہم نے پیر لکھا ہے۔ اب اس کے بعد ہم وقفہ کریں گے۔ اسی طرح ہم مزید چھ کیسز لکھنے جا رہے ہیں، تو یہاں ہم کیس ٹو کریں گے۔ اس کے اندر ہم اپنا دن منگل لکھیں گے۔ آئیے اس میں اگلی لائن ڈالتے ہیں۔ اس میں اگلی لائن بھی ڈالتے ہیں۔ یہاں ہمارا کیس تھری اس کے اندر بھی اگلی لائن ہے۔ کیس چار یہ کیس پانچ جمعہ کو ہونے والا ہے۔ اب ہم فرض کرتے ہیں کہ ہمارے صارف کے پاس ہے۔



02:22:58

اگر ہم 29 درج کرتے ہیں، تو اس صورت میں ہم کچھ بھی پرنٹ نہیں کر سکتے۔ اس صورت میں، ہم یہاں ڈیفالٹ لکھیں گے، اس کا مطلب ہے کہ ہمارا دوسرا کیس اب ڈیفالٹ میں درست دن نہیں پرنٹ کرے گا۔ اب ڈیفالٹ کے بعد ہمیں بریک لکھنے کی ضرورت نہیں ہے کیونکہ ڈیفالٹ کے بعد کوئی سوئچ نہیں ہے جسے ہم اس کے بعد آن کر سکتے ہیں۔ اب اسے بچاتے ہیں۔ اگر ہم کوڈ کو ایک بار چلاتے ہیں، تو ہم اچھی طرح سمجھ جائیں گے کہ کمپائل رن کیسے ہوتا ہے۔ سب سے پہلے ہمیں دن میں داخل ہونا ہے۔ ہم دن میں داخل ہوتے ہیں۔ فرض کریں اگر ہم تین تین درج کریں تو ہمارے لیے بدھ کا دن چھپ جائے گا۔



02:23:36

جیسے ہی دن کی قدر میں تین کو ذخیرہ کیا گیا، سوئچ نے کیا کیا؟ اس نے مستقل کے ساتھ تین کا میچ ڈھونڈنا شروع کیا، پہلے اس نے ایک کے ساتھ چیک کیا، یہ غلط نکلا، پھر اس نے دو کے ساتھ چیک کیا، یہ غلط نکلا، تین کا تین کے ساتھ ملایا گیا۔ جیسے ہی اس نے میچ کیا، اس نے اس شرط پر عمل کیا، اس کے بعد اس نے وقفہ لیا اور وہ باہر آگیا۔ اب مان لیتے ہیں کہ یہ وقفہ یہاں نہیں ہوتا ورنہ ہم اس پر تبصرہ کر سکتے ہیں، اس وقفے پر بھی تبصرہ کر سکتے ہیں۔ اگر ہم ان تمام وقفوں پر تبصرہ کریں اور محفوظ کریں اور ایک نیا کریں۔



02:24:13

اسے ایک بار مرتب کریں اور چلائیں۔ پھر اب اگر ہم تین درج کریں تو جب ہم تین داخل ہوئے تو ہمارے لیے کیا پرنٹ ہوا؟ پہلا بدھ چھپ گیا، جس کا مطلب ہے کہ پیر اور منگل چھپے نہیں کیونکہ وہ وہاں میل نہیں کھاتے تھے۔ جیسے ہی یہ تین کے ساتھ ملا، جس کا مطلب ہے کہ ہم نے سوئچ آن کر دیا۔ اب بدھ چھپا، اس کے بعد ساری چیزیں چھپ گئیں۔ جمعرات بھی چھپ گیا، جمعہ بھی چھپ گیا، ہفتہ بھی چھپ گیا، اتوار بھی اور اس کے بعد درست دن بھی نہیں چھپا، یعنی اس کے بعد کے سارے سوئچ، یہاں سے سب آن ہوگئے۔



02:24:40

اس لیے بریک ہمارے لیے کارآمد ہے کیونکہ ہمیں تمام سوئچ آن کرنے کی ضرورت نہیں ہے، ہمیں صرف ایک سوئچ آن کرنا ہوتا ہے، ایک بار یہ آن ہونے کے بعد آپ یہاں سے نکل کر آگے بڑھ سکتے ہیں، اسی لیے جب بھی آپ کوئی سوئچ لکھتے ہیں تو بریک لگانا بہت ضروری ہے۔ اب آئیے ایک بار پہلے سے طے شدہ کو بھی چیک کریں، اگر ہم درج کرتے ہیں، فرض کریں 19، تو 19 ہمارے لیے درست دن نہیں پرنٹ ہوگا۔ تو اس طرح ہمارا سوئچ کام کرتا ہے۔ اب اسی کوڈ کے لیے ہم کریکٹرز کے ساتھ بھی کھیل سکتے ہیں، اس دن کی طرح جو ہم نے بنایا ہے، آئیے اسے انٹیجر ٹائپ کے بجائے کریکٹر ٹائپ سے بنائیں۔



02:25:15

اور پیر کے لیے M ہو گا، منگل کے لیے ہمارے پاس T، بدھ کے لیے چھوٹا W ہو گا، جمعرات کے لیے ہم کیپٹل T رکھیں گے، جمعہ کے لیے F، ہفتہ کے لیے S اور اتوار کیپٹل S کے لیے رکھیں گے۔ اس طرح ہم اپنا دن لیں گے اور یہاں اب کیس بدلیں، اگر ہم حروف لکھیں گے تو اسے محفوظ کریں اور اب اسے دوبارہ چلاتے ہیں، تو یہاں ہمیں s لکھنا ہے۔ اگر ہم اپنے دن میں داخل ہوتے ہیں، تو اس بار ہم F میں داخل ہونے والے ہیں، اس لیے ہمارے لیے جمعہ پرنٹ ہو جاتا ہے اور اس بار ہم نے کچھ اور حرف داخل کیے ہیں جیسے۔



02:25:54

فرض کریں کہ ہم نے شرح درج کی اور اس صورت میں یہ صحیح دن کے طور پر پرنٹ ہو گیا۔ لہذا ہم حروف کو مستقل کے طور پر استعمال کر سکتے ہیں اور ہم اپنے عدد کو مستقل کے طور پر بھی استعمال کر سکتے ہیں۔ اب اس کے بعد سوئچ کی اپنی کچھ خصوصیات ہیں، جیسے کہ ہم دو خاصیتوں کے بارے میں بات کریں گے، سب سے پہلے یہ کہ کیسز کسی بھی ترتیب میں ہو سکتے ہیں، جیسا کہ ہم نے a نہیں لکھا، سب سے پہلے ہم نے لکھا کہ ایک کے لیے پیر کو پرنٹ کرنا ہے، دو کے لیے، منگل کو پرنٹ کرنا ہے، تو ہم انہیں اوپر نیچے بھی کر سکتے تھے، ہو سکتا ہے کہ منگل کے لیے شرط یہ ہو کہ اگر دو ہیں تو منگل کو پرنٹ کرنا ہو گا۔



02:26:25

اور اگر ایک ہے تو پیر پرنٹ ہے اور نیچے آرہا ہے، اس میں سوئچ کوئی ایرر نہیں دیتا جیسا کہ ہم نے یہاں کیا ہے، ہمارے حروف میں F کے بعد Dub آتا ہے، لیکن Dub کا کیس اوپر ہے اور A والا نیچے ہے۔ اس جمعہ کو بھی اوپر لکھ دیں تو کوئی خرابی نہیں آئے گی۔ دوسری چیز یہ ہے کہ نیسٹڈ سوئچ، یعنی اندر کے سوئچ کی اجازت ہے، ہم سوئچ کے اندر ایک الگ سوئچ لکھ سکتے ہیں، جیسے باہر دن ہے، ہم نے اس کے لیے کیسز بنائے ہیں، اور یوں کہتے ہیں کہ کیس اس وقت ہوتا ہے جب نمبر تین درست ہو۔



02:26:59

اگر یہ جاتا ہے تو اس کے بعد دوسرا سوئچ لگائیں اور ہم سال کے لیے سوئچ لگا کر بتائیں گے کہ کون سا سال چل رہا ہے یا ہم مہینے کے لیے سوئچ لگا دیں گے تاکہ یہ معلوم ہو کہ کون سا مہینہ چل رہا ہے، تو اس میں بھی فرض کریں کہ ہمارا کیس فور درست ہو جائے، تو اس طرح ہم سوئچ کو سوئچ کے اندر لگا سکتے ہیں اور اوپر ہمیں پڑھنا تھا کہ اگر اس کے اندر اگر ایک ہے تو اگر ایک بار مختلف ہے، اگر ہم کر سکتے ہیں تو اس کے اندر اگر ایک کی حالت مختلف ہے۔ سچ ہو جاتا ہے، پھر آپ دوسری اگر پرنٹ کریں جس کی کنڈیشن ٹو ہے، اس طرح ہم if سٹیٹمنٹس کو ایک دوسرے کے اندر نیسٹڈ بنا سکتے ہیں۔



02:27:41

تو یہ کہا جاتا ہے nested if. آئیے اس کی ایک مثال بھی دیکھتے ہیں، مثال کے طور پر، فرض کریں کہ ہم صارف سے نمبر داخل کرنا چاہتے ہیں، تو ہم درج کردہ نمبر کو پرنٹ کریں گے اور پھر اسے اسکین کریں گے۔ اب نمبر کے لیے کچھ شرائط لکھتے ہیں۔ سب سے پہلے ہم یہ چیک کریں گے کہ ہمارا نمبر مثبت ہے یا منفی، تو ہم مثبت نمبر کے لیے کیا کریں گے، ہم چیک کریں گے کہ نمبر 0 کے برابر ہے یا نہیں، اس صورت میں ہم نمبر کے لیے مثبت پرنٹ کریں گے اور اگر ایسا نہیں ہے، تو اس کا مطلب ہے کہ ہم اسے یہاں بھی لکھ سکتے ہیں، عام طور پر، میں اسے اسی لائن میں لکھنا پسند کرتا ہوں۔



02:28:28

تو دوسری صورت میں ہم منفی پرنٹ کریں گے۔ اب اس کے اندر جیسے ہی نمبر مثبت آئے گا، پھر ہمیں یہ دیکھنا ہوگا کہ ہمارا نمبر جفت ہے یا طاق، ہم اسے بھی پرنٹ کر لیں گے۔ تو یہاں ہم ایک اور فنکشن لکھ سکتے ہیں کہ نمبر ماڈلو ٹو اگر ہمارا صفر صفر کے برابر ہو جائے تو ہم نے پہلے باب دو کے مشق سیٹ میں else کی شرط پڑھی ہے۔ تو ہمارے لیے یہ سمجھنا کافی آسان ہونا چاہیے کہ ہم نے یہاں کیسے چیک کیا کہ نمبر برابر ہے۔ تو یہاں ہم پرنٹ کریں گے ورنہ اس کا اپنا بھی ہو سکتا ہے، ہم اسے پرنٹ کروانے جا رہے ہیں۔



02:29:11

آئیے اسے بچاتے ہیں۔ اب، ایک بار چلتے ہیں. ہم نمبر داخل کریں گے، یعنی 24۔ 24 ایک مثبت نمبر اور ایک برابر نمبر دونوں کے طور پر پرنٹ ہوتا ہے۔ تو اس نے کیا کیا، ایک شرط تو سچ ہو گئی، اس کے بعد دوسری شرط بھی چیک کی کہ یہ بھی دیکھنا ہے کہ یہ سچ ہے یا نہیں۔ ہم ان ہی حالات کو دوسرے کے اندر بھی لکھ سکتے ہیں۔ یہاں جا کر، ہم اپنی اگر حالت، تو دوسری حالت بنا سکتے ہیں۔ لہذا، اس طرح، جب بھی ایک if کی حالت دوسری if کے اندر لکھی جاتی ہے، اس صورت حال کو nested if یا nested else صورتحال کہا جاتا ہے۔ اب، کچھ سوالات.



02:29:49

آئیے اپنے ذہن میں تصور کو اچھی طرح سے ڈالنے کے لیے مشق کریں۔ سب سے پہلے ہمارا سوال یہ ہے کہ ایک پروگرام لکھیں کہ آیا کوئی طالب علم پاس ہوا ہے یا نہیں اور فیلڈ میں ہمارے پاس ایک طالب علم کے نمبر ہوں گے جو ہمیں 100 میں سے دئیے جائیں گے، اگر ہمارے نمبر 30 سے ​​زیادہ ہیں تو بچہ پاس ہو گیا ہے، اگر 30 سے ​​کم ہے تو ہمارا بچہ فیل ہو گیا ہے۔ لہذا، ہمیں اس صورتحال کو کوڈ میں تبدیل کرنا ہوگا۔ تو، سب سے پہلے، ہم کیا کریں گے، ہم نمبر داخل کریں گے. یہاں، ہم اس متغیر کو بطور نشان بنائیں گے، نشان درج کریں۔



02:30:21

آئیے ہم صفر سے لے کر 100 تک کی حد دیتے ہیں۔ کچھ طلباء کو صفر بھی ملتا ہے، جو امتحان کے دن غیر حاضر رہتے ہیں، اور یہاں ہم اپنے نمبر لکھیں گے۔ اب ہمیں دو شرطیں لکھنی ہیں، ایک پاس اور ایک فیل۔ تو سب سے پہلے، ہم اسے ناکامی کے ساتھ لکھنے کی کوشش کرتے ہیں۔ اگر ہمارے نمبر 30 سے ​​کم ہوں یا ہمارے سوال میں دیئے گئے نمبر 30 سے ​​کم ہوں تو اس صورت میں ہمیں فیل پرنٹ کرنا ہوگا اور اگر ایسا نہیں ہے تو اس صورت میں ہمیں پاس پرنٹ کرنا ہوگا۔ تو یہاں، ہم ٹرمینل کو آن کریں گے، مرتب کریں گے، چلائیں گے، اور اپنے نمبر داخل کریں گے۔



02:31:12

ہم 56 سال کے ہیں، ہم گزر چکے ہیں۔ اسے دوبارہ چلانے کے بعد، فرض کریں کہ ہم نے 105 داخل کیا کیونکہ ہم کلاس کے شرارتی بچے ہیں، 105 داخل کرنے کے بعد بھی پاس پرنٹ ہوا جبکہ ہمیں 100 تک داخل ہونا تھا، تو اس میں ہم اپنی شرط رکھ سکتے ہیں کہ اگر ہمارے نمبر 30 سے ​​زیادہ ہوں تو اور ہمارے نمبر 100 کے برابر ہوں، تو اس صورت میں ہم ایک اور رنگ پرنٹ کریں گے، بصورت دیگر اس صورت میں دوسرا رنگ پرنٹ کرنا ہے۔ مارکس، اس کے اندر ہم یہ شرط بھی رکھ سکتے ہیں کہ نمبر 0 کے برابر اور اس سے کم نمبر ہونے چاہئیں۔



02:31:59

30 کے برابر، اس طرح، جب ہم تمام کیسز کا احاطہ کرتے ہوئے بیانات لکھتے ہیں، تو ہمارا کوڈ محفوظ رہتا ہے۔ اب ہم اسے بھی مرتب کریں گے اور اس بار اگر ہم 105 لگانے کا سوچیں گے تو اس بار ہمارے لیے غلط نمبر پرنٹ ہوں گے۔ تو اس طرح ہمیں اس میں محفوظ کیسز ڈالنے ہوں گے۔ اب ہم ٹرنری سٹیٹمنٹ کی مدد سے بھی یہی کام کر سکتے تھے، یعنی اگر ہم اس پر تبصرہ کرتے ہیں، ان تمام لائنوں کو ایک ساتھ کمنٹ کرنے کے لیے، ہمیں پرنٹ کرنا پڑتا ہے، ہمیں کمانڈ اور سلیش کو دبانا پڑتا ہے، لہذا اگر آپ



02:32:35

ایک بار پھر، اگر آپ کسی بھی اکثریتی حصے کو کمنٹس میں تبدیل کرنا چاہتے ہیں، تو آپ کو کمانڈ سلیش دبانا پڑے گا یا اگر ہم ونڈوز سسٹم پر ہیں، تو ہم اس میں بہت سے بیانات چیک نہیں کر پائیں گے کیونکہ ٹرنری بہت آسان شرائط کے لیے ہے، اگر ہمارے نمبر 30 سے ​​کم ہوں تو سوالیہ نشان پرنٹ ہو جائے گا، اس صورت میں ہم فیل کے طور پر پرنٹ کریں گے، بصورت دیگر ہم یہاں پرنٹ کو فیل سمجھیں گے۔ آپریٹر کہ چار سے پانچ لائنوں کا یہ کوڈ ایک لائن میں تبدیل ہو جاتا ہے۔



02:33:21

ہم نے کر لیا ہے، اب چلتے ہیں۔ ہم اپنے 23 میں داخل ہو رہے ہیں، اس لیے ہم ناکام ہو گئے ہیں اور اگر ہم وہاں 89 داخل کریں گے تو اس صورت میں ہم پاس ہو جائیں گے۔ اب اگر ہم دوسرے پریکٹس سوال کی بات کریں تو اس معاملے میں ہمیں مزید کیسز دیے جاتے ہیں جیسے کسی طالب علم کو گریڈ دینے کے لیے پروگرام لکھنا۔ اس میں پہلی شرط یہ ہے کہ اگر نمبر 30 سے ​​کم ہوں تو C گریڈ دینا ہوگا، 30 سے ​​70 کے درمیان تو B دینا ہوگا، 70 سے 90 کے درمیان تو A دینا ہوگا اور 90 سے 100 کے درمیان تو Aps دینا ہوگا۔ اب ہمیں ان چار شرائط کو کوڈ کی صورت میں رکھنا ہے۔



02:33:57

اگر آپ نے لکھنا ہے تو ایک کے بعد ایک نمبر شروع ہو جائیں گے، ہمیں نمبر دیے جائیں گے، اس معاملے میں ہم ٹرنری استعمال نہیں کر سکتے کیونکہ ٹرنری اسے بہت پیچیدگیوں میں چیک کرے گا، اگر ہمارے نمبر 30 سے ​​کم ہوں گے، تو اس صورت میں ہم اپنا گریڈ C پرنٹ کریں گے، اب دوبارہ اپلائی کریں گے، اگر اوپری شرط غلط ہے، تو نیچے والے نمبر کو چیک کریں اور ہمارے نمبر 0 کے برابر ہیں، اور ہمارے نمبر 0 کے برابر ہیں۔ مارکس اس سے کم ہیں جو ہماری 70 کی حالت تھی، اب میں جب بھی نمبروں سے متعلق سوالات لیتا ہوں تو بہت کوشش کرتا ہوں کہ زیادہ سے زیادہ نمبر دوں تاکہ کوئی اسکور نہ کر سکے۔



02:34:49

اگر بچے نے کم نمبر حاصل کیے ہوں تب بھی اسے ویڈیو دیکھتے ہوئے برا نہیں لگانا چاہیے، اس صورت میں یہ گریڈ نظر آئے گا، پھر ہم لکھیں گے اور اگر اس بار کے نمبر ہمارے 70 اور 70 کے برابر ہوں گے اور اور نمبر 90 سے کم ہوں گے تو اس صورت میں بھی ہم وہی پرنٹ کرنے جارہے ہیں، ہم A پرنٹ کرنے جارہے ہیں اور آخر میں ہمارا پلس A پرنٹ کریں گے یا پھر A پلس پلس آئے گا۔ اپنے لیے اساتذہ نہیں دیتے تو یہ ہماری چار شرائط ہیں، ہم نے انہیں ff کی شکل میں لکھا ہے ورنہ ہم ٹرمینل ونڈو کھولیں گے اور کوڈ مرتب کریں گے۔



02:35:39

ہم اسے چلائیں گے۔ اب ہمیں اپنے نمبر داخل کرنے ہیں۔ فرض کریں کہ فزکس میں میرے نمبر 98 ہیں۔ واہ، مجھے اے پلس ملا ہے۔ ساتھ ہی، اگر آپ کسی دوسرے مضمون کے نمبر داخل کرنا چاہتے ہیں، تو ہم اسے بھی داخل کر سکتے ہیں۔ مثال کے طور پر، فرض کریں کہ میں نے کسی مضمون میں 40 نمبر حاصل کیے ہیں، تو اس میں میرا گریڈ B ہوگا، تو اس طرح آپ اپنا ایک چھوٹا سا پروجیکٹ بنا سکتے ہیں، جس میں آپ اپنے نمبروں کی بنیاد پر اپنے گریڈ کا حساب لگانے کے لیے فارمولے لگا سکتے ہیں۔ آپ کے کالج یا اسکول کی نصابی شیٹ اس بات کی وضاحت کرتی ہے کہ کتنے نمبروں کے لیے کون سا گریڈ حاصل کیا جائے گا۔



02:36:10

اس کے مطابق یا اگر آپ سپر مارکیٹ کے لیے درخواست دینا چاہتے ہیں تو کس چیز پر کتنا ٹیکس لگانا ہے اور ٹیکس لگانے کے بعد جو حتمی قیمت حاصل ہوگی، آپ اس کے لیے بھی پروگرام بنا سکتے ہیں، اس طرح کے بہت سے پروگرام ہوم ورک کے مسائل میں بھی دیے گئے ہوں گے، اب ہم اپنے اگلے سوال کی طرف چلتے ہیں، اگلا سوال ہمارا ہے، ہمیں یہاں پر ایک کوڈ دیا گیا ہے، یہاں پر ایک کوڈ دیا گیا ہے، یہ سوال ہے ایک کوڈ جس میں int x ہمارا ویری ایبل ہے جس میں ہم نے ویلیو 2 ڈالی ہے تو اسے x = لکھا ہے۔



02:36:43

1 اور اگر یہ بیان درست ہو جاتا ہے تو ہم پرنٹ کریں گے x = 1 ورنہ ہم پرنٹ کریں گے x 1 کے برابر نہیں ہے تو یہاں ہمارے پاس آپشنز ہیں کیا یہ پروگرام ہمیں ایک ایرر دے گا کیا یہاں x = 1 پرنٹ کیا جائے گا یا x کے برابر نہیں 1 پرنٹ کیا جائے گا یہ بہت سیدھا آگے کا سوال ہے اگر ہمیں ایک چھوٹی سی بات یاد ہے جو ہم نے اسائنمنٹ آپریٹرز کا مطالعہ کرتے ہوئے سیکھی ہے یا جب بھی آپ اسے آپریٹر کے اندر لکھیں گے تو آپ غلط نہیں لکھیں گے۔ صفر ویلیو یعنی ایک لکھیں، t لکھیں، لکھیں -1، لکھیں -2، یہ سب



02:37:21

ہماری اقدار درست ہوجاتی ہیں، ہم یہاں اس چیز کو استعمال کریں گے، سب سے پہلے آپ رکیں اور ایک بار اندازہ لگائیں، منطقی انداز میں اندازہ لگائیں، اندازہ نہ لگائیں، بنیادی طور پر میں کہوں گا کہ تجزیہ کریں کہ جواب کیا ہونا چاہیے، ان تینوں میں سے جواب سوچیں، وجہ خود لگائیں اور اگر نہیں آتی یا آتی بھی ہے، تو اس کے بعد آپ وجہ ضرور دیکھیں، پہلے ہم دیکھیں گے کہ اس کا کیا نکلا ہے، ہم پہلے ہی اس پر عملدرآمد کرتے ہیں۔ x، اگر ہمارا برابر ہے تو ہم یہ کہنے کی کوشش کر رہے ہیں، ضروری نہیں کہ آپ ایسا کہہ رہے ہوں، آپ کو پرنٹ کرنا ہوگا x برابر ہے



02:38:02

اگر دو نہیں تو ہمیں پرنٹ کرنا ہوگا کہ x دو کے برابر نہیں ہے۔ آئیے یہ کریں، اسے بچائیں اور چلائیں۔ سب سے پہلے، یہاں ایک انتباہ تیار کیا گیا ہے، لیکن یہ ٹھیک ہے، ہم اسے نظر انداز کرنے جا رہے ہیں۔ ہمارے لیے، x = 1 پرنٹ کیا گیا ہے۔ اب یہ کیوں پرنٹ ہوا کیونکہ x برابر ہے 2۔ ایسا اس لئے ہوا کہ اگر ہمیں یہ چیک کرنا ہے کہ آیا x برابر دو ہے تو ہم دو کو دو کے برابر لگاتے ہیں۔ لیکن یہاں ہم نے سنگل کو دو کے برابر رکھا ہے۔ تو یہ سنگل دو کے برابر کیا کرے گا؟ یہ سنگل مساوی ٹو ٹو بنیادی طور پر پہلے میموری ایکس کے اندر ایک متغیر تھا جس کے اندر دو کو محفوظ کیا گیا تھا۔



02:38:45

سنگل مساوی دو نے کیا کیا، میں نے وہاں سے دو کو ہٹا دیا اور ایک کو وہاں رکھ دیا، تو اب اس if کنڈیشن کے اندر، x کی قدر، یعنی ایک، ایک ہے۔ اب اگر ایک غیر صفر ویلیو ہے تو یہ درست ہو جائے گا اور یہاں ہم x = 1 پرنٹ کریں گے۔ اب اگر یہاں فرض کریں کہ ہم ایک کے بجائے لکھ رہے ہوتے تو بھی ایک ہی چیز پرنٹ ہوتی، جیسے کہ اگر ہم کوڈ میں x کو s کے ساتھ تبدیل کرتے ہیں، اگر ہم اسے محفوظ کر کے چلاتے ہیں، تو یہ کمپائل ہو جائے گا اور ہم وارننگ کو نظر انداز کر دیں گے، اس لیے اب اسے پرنٹ کرنا ہے تو x = 1 پرنٹ نہیں کرنا چاہیے۔



02:39:27

ویلیو فل ہو گئی ہے اب ہم یہاں لکھیں گے save x، چلو compile چلائیں اور پھر x = 1 موصول ہوا اس کے بعد بغیر اسپیس کے پرنٹ کیا گیا تو ایسا لگتا ہے کہ اگلی لائن 14 کو یہاں رکھنی چاہیے تھی اس لیے x = 1 اور پھر 4 پرنٹ کی گئی ہے تو بنیادی طور پر کیا ہوا منطق یہ ہے کہ اس لائن نے x کی ویلیو میں 't' کو ہٹا دیا ہے اور اس کے بعد اس کی قدر کو Non ze کے اندر رکھ دیا جائے گا اور اس کے بعد اس کی ایک Non ze ہو جائے گی۔ اس بیان میں جو کچھ بھی لکھا گیا ہے اسے سچ مانا جائے گا۔



02:40:08

ہمارا ضرور عمل میں آئے گا، اگر ہم نے یہاں x = 0 لکھا ہوتا تو اس پر عمل نہ ہوتا، پھر یہ شرط اس طرح چلتی جیسے یہاں x = 0 لکھیں اور اب اسے کمپائل کرکے چلائیں، اس صورت میں پرنٹ ہوگا کہ x 1 کے برابر نہیں ہے کیونکہ اگر x کی قدر صفر ہوجاتی ہے، تو یہاں ایک قطار آئے گی، اگر یہ غلط ہے، تو اس کے اندر ایک قطار آئے گی، اگر اس کی قدر غلط ہوگی، تو اس کے اندر ایک قطار آئے گی۔ چلائیں، تو اس سوال کا صحیح جواب یہ ہونا چاہیے تھا کہ یہ غلطی نہیں دے گا، ہمیں کوئی غلطی نہیں ملی، ہاں ایک وارننگ ضرور آئی کیونکہ کمپائلر کو شک ہے کہ آپ کچھ غلط کر رہے ہیں۔



02:40:47

کیونکہ آپ برابری کی جانچ نہیں کر رہے ہیں، آپ if کے اندر اسائنمنٹ کر رہے ہیں جسے منطقی طور پر غلط سمجھا جاتا ہے لیکن کمپائلر رولز کے مطابق غلط نہیں، تو یہاں صحیح آؤٹ پٹ پرنٹ x e 1 ہو گا کیونکہ x = 1 پرنٹ ہو جائے گا کیونکہ جیسے ہی ہم x = 1 کریں گے، ہمارا if ایک ملے گا جو ایک سچا متغیر ہے، اب اگلا سوال جو ہم کرنے جا رہے ہیں وہ ہے اگر صارف کو پریکٹس میں لکھنے کے لیے آخری سوال ہے تو یہ آخری سوال ہے جو صارف کو لکھنا ہے۔ اپر کیس یا نہیں کپل اے کپل کے اوپری کیس کے کردار کون سے ہیں۔



02:41:18

b کپل c اس طرح سے لوئر کیسز کیا ہیں، چھوٹا a چھوٹا b چھوٹا چھوٹا d، اس طرح ہم انہیں اپر کیس کہتے ہیں، ہم انہیں لوئر کیس کہتے ہیں، ہمیں یہ چیک کرنا ہے کہ صارف کا داخل کردہ کریکٹر اپر کیس ہے یا نہیں، اس کے لیے آئیے دیکھتے ہیں کہ ہم کون سی تکنیک استعمال کریں گے، سب سے پہلے ہم ایک پروگرام بناتے ہیں جس میں ہم نے کریکٹر سرچ کرنا ہے، ہم اسے c فیصد میں داخل کرنے کے لیے صارف سے کہیں گے، اب ہم c، c اور اب اس کیریکٹر کو چیک کریں گے۔ c a کے برابر سے بڑا ہے، ہم نے اس چیز کو محسوس نہیں کیا ہو گا کیونکہ ہم ہمیشہ انٹیجرز استعمال کرتے ہیں۔



02:42:05

آئیے اس کا موازنہ فلوٹ سے کریں۔ پہلی بار ہم رشتہ دار آپریٹر کا استعمال کرتے ہوئے ایک کردار کی قدر کا موازنہ کر رہے ہیں۔ تو یہ اس لیے بھی ممکن ہے کہ C اندرونی طور پر کیسے کام کرتا ہے، ہر کریکٹر کی ایک ایسکا ویلیو ہوتی ہے۔ تو a کی esca ویلیو شاید 97 ہے اور اس طرح ہمارے پاس z تک بہت سی مختلف ویلیوز ہیں۔ لہذا اگر ہم لوئر کیس کو چیک کرنا چاہتے ہیں تو ہم اسے a سے چیک کر سکتے ہیں۔ یہاں، ہماری ایسکا ویلیو بھی ہمارے لیے 97 پرنٹ ہو رہی ہے۔ اگر ہم یہاں b کرتے ہیں تو اس کی esca ویلیو 98 کیا ہوگی۔



02:42:40

اسی طرح اگر ہم c کریں گے تو 99 آئے گا، تو a کی بہت سی قدریں ہیں، ایک قدر بنیادی طور پر یہ ہے کہ ہر کریکٹر کا اپنا انٹیجر ہوتا ہے جو اس کے ساتھ منسلک ہوتا ہے اور مرتب کرنے والا اس انٹیجر کو جانتا ہے، اس لیے یا تو ہم براہ راست کریکٹر کا موازنہ a کی ویلیو سے کر سکتے ہیں، جیسے لکھنے کا کریکٹر 97 کے برابر سے بڑا ہے اور لکھنے کا کریکٹر a کے برابر سے بڑا ہے، اس کا مطلب ہے کہ آپ یہ لائن لکھیں یا پھر یہ لائن لکھیں۔ کوئی فرق نہیں پڑے گا، اس لیے یہاں ہم کپل اے کا موازنہ کرنے جا رہے ہیں۔



02:43:16

تو کیپٹل a کی قدر 65 ہے اور c کیپٹل g کے برابر سے کم ہے۔ کیپٹل جی کی ویلیو 90 ہے۔ تو یہ بڑھتی رہتی ہے، یعنی کیپٹل a 65 ہوگا، تو کیپٹل b 66 ہوگا، کیپٹل c 67 ہوگا۔ اس طرح یہ بڑھتا ہے، اگر ہمارا کردار a سے بڑا ہے تو اس کے برابر ہے اور اگر g سے چھوٹا ہے تو اس کے برابر ہے۔ اب میرے ایڈیٹرز نے مجھ سے پوچھا کہ اسے jud کیوں کہا جاتا ہے، تو برطانوی انگریزی میں اسے jud کہتے ہیں، امریکی انگریزی میں اسے g کہتے ہیں۔ تو ہمیں f کو اپر کیس میں پرنٹ کرنا ہوگا، اس کیس میں ہم اپر کیس لکھیں گے، ورنہ کسی بھی چیز میں ہم ایک اور کیس چیک کریں گے۔



02:44:01

چلیں ایسا کرتے ہیں، اگر ہماری تلاش a کے برابر ہے اور c ہماری سستی کے برابر ہے، تو اس صورت میں ہم لوئر کیس پرنٹ کرنے جا رہے ہیں، اب اس کے علاوہ، ہمارا ast رسک m فیصد ہے، یہ سب ہیش ٹیگ ہیش کریکٹرز ہیں، یہ تمام کریکٹرز ہیں، اس میں ہم پرنٹ کریں گے، انگریزی کا حرف نہیں، یہ انگریزی کا حرف نہیں ہے، آپ نے اسے پرنٹ کرنے کے بعد کچھ اور کریکٹر دیا ہے، اس کے بعد آپ سب کو پرنٹ کرنے دیں۔ لائن، اسے محفوظ کریں اور اسے چلائیں، اب ہمیں کردار ملتا ہے۔



02:44:48

آپ کو داخل کرنا پڑے گا، فرض کریں کہ ہم سب سے پہلے G داخل کر رہے ہیں، G کے لیے، اس نے ہمیں بتایا ہے کہ یہ ایک اپر کیس کیریکٹر ہے لیکن اگر ہم چھوٹا G داخل کریں گے تو یہ کہے گا کہ یہ لوئر کیس ہے اور اگر ہم اس حرف کے لیے فیصد کا نشان داخل کریں گے تو یہ بتائے گا کہ یہ انگریزی کا حرف نہیں ہے، اس طرح ہم اپنا پورا پروگرام بنا سکتے ہیں جو یہ چیک کر رہا ہے کہ آیا یہ اپر کیس ہے یا لوئر کیس، جس پر عمل میں بہت سے اچھے سوالات پوچھے جا سکتے ہیں، جن میں ہم سے اچھے سوالات کیے جا سکتے ہیں۔ تقرریوں میں آپ کے کالج کے سوالات



02:45:16

اس کے علاوہ آپ کو ہوم ورک کے مسائل بھی بتائے گئے ہوں گے، آپ کو انہیں خود ہی حل کرنا ہوگا، اگر آپ سوال حل نہیں کر پا رہے ہیں تو آپ کو اپنے نوٹس سے تھوڑی مدد لینا ہوگی بہت آسانی سے ہم نے ایک بہت ہی اہم، انتہائی اہم باب مکمل کیا ہے اور اس کے بعد ہم اپنے چوتھے باب کی طرف بڑھیں گے جس میں ہم لوپس کو کور کرنے والے ہیں، سب کو سلام اور اب ہم شروع کرنے جا رہے ہیں اس باب کو پڑھنے کے لیے کنسٹرکشن فور کا نام ہے، جس کا نام ہے کنٹرول لوپٹر میں۔ لوپ کے لیے ہے، دیر لوپ کیا ہے، ڈو جبکہ لوپ کیا ہے۔



02:45:42

اس کے ساتھ، ہم اس بات پر بات کریں گے کہ دو کلیدی الفاظ کیسے ٹوٹتے اور جاری رہتے ہیں اور ان کو ہمارے کوڈ میں کیسے استعمال کیا جائے۔ اب لوپ کنٹرول ہدایات کیا ہیں اور ہمیں ان کی ضرورت کیوں ہے؟ آئیے اس کو ایک مثال سے سمجھتے ہیں۔ فرض کریں کہ ہم کوڈ میں 'Hello World' پرنٹ کرنا چاہتے ہیں۔ تو ہم کیا کریں گے؟ ہم صرف ایک پرنٹ ایف اسٹیٹمنٹ لکھیں گے جس میں ہم 'ہیلو ورلڈ' لکھیں گے۔ اب فرض کریں کہ ہم پانچ بار 'ہیلو ورلڈ' پرنٹ کرنا چاہتے ہیں۔ پھر آپ کہیں گے کوئی حرج نہیں۔ بس اس لائن کو ایک بار کاپی اور پیسٹ کریں اور پھر دوبارہ پیسٹ کریں۔



02:46:13

ہم اسے بار بار کریں گے، اس طرح ہم اپنی سکرین پر ہیلو ورلڈ کو پانچ بار پرنٹ کریں گے، لیکن اگر میں یہ کہوں کہ میں ہیلو ورلڈ کو ہزاروں بار یا 10000 بار یا 1 لاکھ بار پرنٹ کروانا چاہتا ہوں، تو اس صورت میں کیا ہوگا، اس صورت میں ہم نہیں بیٹھیں گے اور دستی طور پر C control V کر رہے ہوں گے، یعنی کاپی پیسٹ کا طریقہ آپ کو بتائے گا کہ یہ پرنٹنگ بہت سست ہو جائے گی اور یہ طریقہ کار بہت سست ہو جائے گا، اگر میں آپ کو بتاتا ہوں کہ یہ کام بہت سست ہو جائے گا۔ ہیلو ورلڈ، ہم اسے تین لائنوں میں کر سکتے ہیں۔



02:46:44

تو آپ مجھ سے پوچھیں گے کہ دیدی کوڈنگ میں یہ کون سی چال ہے، تو کوڈنگ میں اگر ہمیں کوئی کام بار بار کرنا پڑتا ہے تو اس کے لیے ہم لوپس استعمال کرتے ہیں جیسے کہ پانچ لائنوں کا کوڈ ہوتا ہے، اسے بار بار لکھنے کے بجائے ہم ایک چھوٹی سی انسٹرکشن کا استعمال کرتے ہیں اور ہم ان ہدایات کو لوپ کنٹرول ہدایات کہتے ہیں، انگریزی میں لوپ کا مطلب ہے بار بار کچھ کرنا، جیسے بچپن میں ہم فون پر گانے سنتے تھے۔



02:47:16

ہم کیا کرتے تھے کہ ہم اپنے پسندیدہ گانوں کی پلے لسٹ بناتے تھے اور انہیں سنتے رہتے تھے، یعنی وہی چار پانچ گانے بار بار چل رہے ہوتے ہیں یا ان میں سے کچھ اب بھی spotify.com پر چل رہے ہیں ایک بنیادی چیز جو ہمیں یاد رکھنے کی ضرورت ہے وہ یہ ہے کہ ہم جو کچھ بھی کر سکتے ہیں a for loop کے ساتھ، ہم وہ تمام چیزیں ایک while loop کے ساتھ کر سکتے ہیں اور ہم وہ تمام چیزیں بھی کر سکتے ہیں جو ان کے تین لوپ کے ساتھ کرتے ہیں، لیکن یہ کام ایک ہی وقت میں ہوتا ہے۔ تھوڑا سا مختلف. اب میری پسندیدہ ترکیب for loop کی ہے، لہذا جب بھی مجھے اسے کوڈ میں استعمال کرنا پڑے،



02:48:09

میں زیادہ تر فار لوپ استعمال کرتا ہوں، لیکن ہمیں تینوں کی ضرورت ہے لیکن جو آپ کو سیکھنے میں آسان لگے، آپ ان میں سے ایک کو اپنے کوڈز میں بار بار استعمال کر سکتے ہیں، کوئی مسئلہ نہیں ہوگا، تمام کام ان تین لوپوں میں سے ایک سے بھی ہو سکتے ہیں، لیکن تینوں کو سب سے پہلے حفظ کرنا ہوگا کیونکہ اگر کالج کے امتحان میں استاد آپ سے اس سوال کا جواب مانگے اور کیا آپ کو صرف لوپ کے ساتھ ہی جواب دینا ہے، تو اس وقت لوپ کے ساتھ مسئلہ ہو سکتا ہے یا پھر اس وقت کوئی مسئلہ ہو سکتا ہے۔ اگر آپ کو تینوں کا نحو معلوم ہونا چاہیے تو آئیے پہلے بات کریں۔



02:48:39

اب for loop کی ترکیب اس طرح ہے کہ سب سے پہلے ہم اپنا کلیدی لفظ لکھتے ہیں جو for ہے، اس کے بعد ہم پیرنز لگاتے ہیں اور پھر یہ گھنگھریالے منحنی خطوط وحدانی، جیسے کہ اس وقت اگر ہم نے مشاہدہ کیا کہ کچھ شرائط ہیں تو ہمارے گھنگھریالے منحنی خطوط وحدانی آتے ہیں اور جو بھی کام کرنا ہوتا ہے، ہم لکھتے ہیں کہ درمیان میں لوپس کے لیے بھی کچھ ایسا ہی ہوتا ہے، لوپ میں جو پہلی شرط آتی ہے اسے ابتدائی پیرنز کہتے ہیں۔ ابتدائی حالت کا مطلب ہے کہ ہم یہاں سے کوئی بھی کام شروع کریں گے۔



02:49:10

مثال کے طور پر، اگر ہم ہیلو ورلڈ کو پانچ بار پرنٹ کرنا چاہتے ہیں، تو ہم ایک ویری ایبل لیں گے جس سے معلوم ہوگا کہ ہیلو ورلڈ کو کتنی بار پرنٹ کیا گیا ہے۔ تو اس متغیر کی قدر ہماری قطار سے شروع ہو کر چار تک جا سکتی ہے یا اس متغیر کی قدر ایک سے شروع ہو کر پانچ تک جا سکتی ہے۔ تو وہ متغیر کیا کرے گا؟ مثال کے طور پر، ہم i نام کا ایک ویری ایبل لے سکتے ہیں اور یہ i کیا کرے گا، اس کی پہلی ویلیو ایک ہوگی، تو یہ ایک، پھر دو، پھر دو، تین، پھر چار، پھر پانچ، اور جیسے ہی ایک تک پہنچ جائے گی، ہیلو ورلڈ پرنٹ ہوجائے گی اور جیسے ہی دو تک پہنچ جائے گی، پرنٹ ہوجائے گی۔



02:49:41

اس پر ہیلو ورلڈ پرنٹ ہوئی، تین ہیلو ورلڈ پرنٹ ہوئی، چار ہیلو ورلڈ پرنٹ ہوئی، پانچ میں ہیلو ورلڈ پرنٹ ہوئی۔ اب اس کی ابتدائی قیمت i = 1 ہے، یہ سٹیٹمنٹ ایک انیشیلائزیشن سٹیٹمنٹ ہے جو یہاں آ سکتی ہے، دوسری ہماری شرط ہے۔ شرط بتاتی ہے کہ یہ لوپ کب ختم ہونا ہے، یعنی ہمارا کام کب مکمل ہوگا، جیسا کہ یہاں ہم نے لکھا ہے کہ ہم ایک متغیر int i لیتے ہیں جس کی قیمت ہم ایک سے شروع کرتے ہیں اور ہر کام میں، ہر لوپ کے اندر ہم اپنا لوپ کرتے ہیں۔



02:50:16

for کے اندر ہم "Hello World" پرنٹ کریں گے اور یہاں کنڈیشن کی جگہ، ہم وہ شرط لکھیں گے جس میں ہمارا لوپ چلنا چاہیے۔ لہذا ہم چاہتے ہیں کہ ہمارا لوپ صرف اس وقت چلے جب i کی قدر 5 سے کم ہو، لہذا اگر ہمارا i 5 سے کم یا 5 کے برابر ہے، تو آپ کو "Hello World" کو پرنٹ کرتے رہنا چاہیے اور جیسے ہی میں 5 سے بڑا ہو جاتا ہے، تو آپ "Hello World" پرنٹ نہیں کرنا چاہتے کیونکہ یہ پانچ بار پرنٹ ہو چکا ہے۔ اور اپ ڈیٹ کے بیان میں، ہم اپنے متغیر کو اپ ڈیٹ کر سکتے ہیں یا اگر ہم لوپ میں کوئی اپ ڈیٹ کرنا چاہتے ہیں۔



02:50:49

وہ اپ ڈیٹ لکھنے جا رہے ہیں، جیسے یہاں ہم i = i + 1 لکھ سکتے ہیں، ہر بار i کی ویلیو ایک سے بڑھائی جائے گی، تو اس لوپ کو کیسے کنٹرول کیا جائے گا، سب سے پہلے میں ایک سے شروع کروں گا، پھر اس والے کی حالت دیکھی جائے گی کہ i <=5، ہاں، پھر اندر جائے گا، لوپ کے اندر جو بھی کام ہوگا، وہ کرے گا، اس کے بعد i کی ویلیو ہو جائے گی، اب i کی ویلیو دو ہو جائے گی۔ دو، دوبارہ شرط کی جانچ کی جائے گی کہ آیا i < = 5، ہاں، کیونکہ دو کی قدر پانچ سے کم ہے، اب اس میں



02:51:23

یہ دوبارہ شروع میں کبھی نہیں جائے گا، اس لیے اس کنڈیشن کو چیک کرنے کے بعد یہ دوبارہ کام کرے گا، پھر اسے دو سے تین تک دوبارہ اپ ڈیٹ کیا جائے گا، اس کے بعد یہ دوبارہ کنڈیشن چیک کرے گا، پھر یہ دوبارہ کام کرے گا، پھر یہ دوبارہ تین سے چار تک اپڈیٹ ہو جائے گا، پھر یہ دوبارہ کنڈیشن کو چیک کرے گا، اس طرح اس قسم کے دائرے میں ہمارا for لوپ چلتا رہتا ہے، چلو اسے ایک بار دیکھتے ہیں، اصل میں اسے لکھنے کے لیے سب سے پہلے کوڈ لکھنے کے لیے اسے سمجھیں گے اور اس کے لیے کلید کیسے لکھیں گے۔ لوپ کے لیے، اس کے بعد ہم ابتداء والی لکھیں گے۔



02:51:52

سٹیٹمنٹ کا مطلب ہے int i = 1 اور ایک طرح سے ہم نے اپنے for loop کے اندر ایک منی سٹیٹمنٹ لکھی ہے، تو یہ تین منی سٹیٹمنٹس کا مجموعہ ہے، لوپ کے لیے سب سے پہلے ہماری ابتدائی i سٹیٹمنٹ آتی ہے، جس میں ہم نے i شروع کیا ہے، اس کے بعد ہم اپنی شرائط لکھیں گے کہ کن حالات میں ہمارا لوپ چلنا چاہیے، تو اگر i <=5 کی شرط ہے، تو ہم لکھیں گے، i = 1 کو اپ ڈیٹ کر کے ہم یہاں لکھیں گے کہ ہم کیا اپ ڈیٹ کر سکتے ہیں۔ f ہو گیا ہیلو ورلڈ، آئیے اسے محفوظ کریں اور ایک بار چلائیں اور دیکھیں کہ آؤٹ پٹ کیا ہے، جو آؤٹ پٹ ہمیں ملا ہے، یعنی



02:52:32

ایک بار ہیلو ورلڈ، اس کے بعد پھر ہماری ہیلو ورلڈ چھپی ہے۔ اب ہم چاہتے ہیں کہ ہر ہیلو ورلڈ کو اگلی لائن میں پرنٹ کیا جائے، تو آئیے یہ بھی کریں، محفوظ کریں اور مرتب کریں اور دوبارہ چلائیں۔ اس بار ہیلو ورلڈ ہمارے لیے پانچ بار پرنٹ کیا گیا ہے، فرض کریں کہ اگر ہم اسے 1000 بار پرنٹ کرواتے تو کچھ نہیں ہوتا، ہم صرف اس پانچ کو 1000 سے تبدیل کر دیں گے، ہمارے فار لوپ کے اندر ایک سادہ سی تبدیلی ہے اور ہم کوئی بھی کام جتنی بار چاہیں کر سکتے ہیں۔ آپ دیکھیں گے کہ اگر میں اسے اسکرول کرتا ہوں تو یہ اوپر سکرول کر رہا ہے اور اصل میں ہیلو ورلڈ



02:53:03

یہ سکرین پر ہزار بار پرنٹ ہو چکا ہے، اس لیے اگر ہم کوئی بھی کام کئی بار کرنا چاہتے ہیں تو لوپس کے لیے استعمال کر سکتے ہیں اور اب فرض کریں کہ میں 1 سے 100 تک نمبر پرنٹ کرنا چاہتا ہوں تو میں اسے فار لوپ کی مدد سے کیسے کروں گا، اب اگر میں نمبرز پرنٹ کرنا چاہتا ہوں تو ایسا ہو گا جب پہلے ایک آئے گا، پھر دو، پھر تین، پھر 5، 6 اور اب ہم نے اس طرح سے 10 کا نمبر لے لیا ہے۔ متغیر جس کے اندر ویلیوز اپ ڈیٹ ہو رہی ہیں تو کیوں نہ ہم اس متغیر کی ویلیو کو تبدیل کر دیں۔



02:53:34

اگر ہم اسے بار بار پرنٹ کرواتے ہیں، پھر اگر ہم اس متغیر کی پرنٹ شدہ قیمت حاصل کرتے ہیں تو یہاں ہم فیصد d لکھیں گے اور اس کے بعد i، ہم اس 1000 کو 100 بنا دیں گے۔ مجھے امید ہے کہ اس کا مطلب یہ ہے کہ ہم سب پر یہ واضح ہے کہ متغیر i کی قدر ایک سے شروع ہو کر 100 تک جائے گی اور ہر بار i کی قدر میں ایک اضافہ ہو رہا ہے۔ تو ہم یہاں کیا کریں گے، ہم ایک سے 100 تک کی قدریں پرنٹ کرنے جا رہے ہیں۔ اس طرح ایک سے 100 تک کی یہ تمام ویلیوز آؤٹ پٹ سکرین پر پرنٹ ہو چکی ہیں۔ اب ہم اس متغیر کو بھی کم کر سکتے ہیں، یعنی اسے اپ ڈیٹ کر سکتے ہیں۔



02:54:10

اپ ڈیٹ کا مطلب ہمیشہ متغیر کی قدر میں اضافہ نہیں ہوتا۔ اپ ڈیٹ کا مطلب ہے کہ ہم متغیر کی قدر کو بھی کم کر سکتے ہیں۔ مثال کے طور پر، اگر میں 100 سے ویلیو پرنٹ کرنا چاہتا ہوں یا یوں کہہ لیں کہ 10 سے 1 تک، تو میں i کی ویلیو کو 10 سے شروع کروں گا اور پھر i کی ویلیو کو بڑھاتا رہوں گا یہاں تک کہ یہ 10 سے ایک ایک کر کے کم ہو جائے اور ایک ہو جائے۔ ہر بار، یہ i = i - 1 کی شکل میں اپ ڈیٹ ہوگا اور لوپ کو اس وقت تک چلائے گا جب تک کہ i 1 کے برابر نہ ہو، یعنی اگر i کی قدر ایک ہے تو لوپ بھی چلے گا، اگر یہ دو ہے، تو لوپ بھی چلے گا، اگر یہ تین ہے، تو لوپ بھی چلے گا۔



02:54:43

یہ چلے گا اور لوپ کیسے چل رہا ہے؟ سب سے پہلے i کی ویلیو 10 ہے، پھر یہ نو ہو جائے گی، پھر یہ آٹھ ہو جائے گی، سات 6 5 4 3 2 1 جیسے ہی یہ ایک کے بعد اپ ڈیٹ ہو گی، ویلیو صفر ہو جائے گی، اس کے بعد یہ لوپ نہیں چلے گا۔ اب ہم اسے ایک بار محفوظ کر کے چلائیں۔ اس بار جو ویلیو پرنٹ کی جائیں گی وہ 10 کے بعد پرنٹ کی جائیں گی یعنی 10 9 87654321، اس طرح ہمارا یہ ویری ایبل، اپ ڈیٹ کرتے وقت ہم اسے بڑھا یا گھٹا سکتے ہیں۔ اب یہ ضروری نہیں ہے کہ یہاں کی گئی ابتداء ہمیشہ یہاں ایک عدد عدد کی ہو۔



02:55:19

ہم حروف کے ساتھ ساتھ سٹرنگ بھی لکھ سکتے ہیں، بنیادی طور پر ہم اپنی منطق بناتے ہیں، سوال کے مطابق ابتداء کی جو بھی ضرورت ہو گی، ہم وہ کریں گے، لیکن زیادہ تر یہاں یہ ریاضی آتا ہے، اب اس ریاضی کو یا تو ایٹریٹر کہا جاتا ہے، ہم اسے آئٹم میٹر بھی کہہ سکتے ہیں یا اسے کاؤنٹر ویری ایبل بھی کہتے ہیں، اس کا مطلب ہے ایک متغیر جس کی مدد سے کوئی بھی کام دہرایا جا رہا ہے، اس کا مطلب یہ ہے کہ ہم کسی بھی کام کو بار بار کر رہے ہیں۔ انگریزی، counter کا مطلب ہے کہ ہم نے دکانوں کے اوپر کی طرح کاؤنٹر رکھا ہوا ہے۔



02:55:52

ہم کاؤنٹر پر ٹریک کرتے ہیں کہ کتنے گاہک آئے، اسی طرح یہاں یہ ایک کاؤنٹر یا آئٹم ہے جو ٹریک کر رہا ہے کہ کتنی بار کام ہوا، اگر ہم یہاں 10 لکھتے ہیں اور یہاں شرط یہ کہتی ہے کہ کام اس وقت تک جاری رہنا چاہیے جب تک کہ یہ ایک سے زیادہ نہ ہو اور اپ ڈیٹ کی شرط یہ کہتی ہے کہ اسے ایک سے کم کرتے رہنا چاہیے، اس لیے ہم جانتے ہیں کہ ہمارا کاؤنٹر ہمیں بتا رہا ہے، ہمارا تکرار کرنے والا ہمیں کہہ رہا ہے کہ ہمارا لوپ 10 بار چلانا ہے۔ اب لوپس کے لیے ایک سوال کرتے ہیں، ہمارا سوال 0 سے 10 تک کے نمبرز پرنٹ کرنا ہے، ہمیں قطار سے 10 تک کے نمبرز پرنٹ کرنے ہیں۔



02:56:22

ہم سوال کو غور سے دیکھیں گے کیونکہ اب تک ہم ایک سے 10 تک نمبر چھاپتے تھے، اس بار صفر بھی اضافی ہے اور اگر ہم ان تمام نمبروں کو شمار کریں تو کل 11 نمبر بنتے ہیں۔ یہاں ابتدائی مراحل میں طالب علموں کے ساتھ ایک چھوٹی سی الجھن ہوتی ہے، وہ سمجھتے ہیں کہ ہمارے پاس صفر سے 10 تک 10 نمبر ہیں، لیکن حقیقت میں ایسا نہیں ہے، ہمارے پاس صفر سے 10 تک 11 نمبر ہیں، اس لیے اب ہم اس کا کوڈ لکھیں گے، کوڈ کے لیے، سب سے پہلے ہم اپنا آئٹم معاملہ بنائیں، ہمارا آئٹم معاملہ aa ہے، جس کی قیمت ہم اب شروع کریں گے۔



02:56:55

ہم اسے صفر سے کریں گے، ہم اسے صفر کے برابر کریں گے۔ اب ہم یہاں یہ شرط رکھیں گے کہ جب تک i کی قدر ہماری 10 کی قدر کے برابر ہے، یعنی جب بھی i 10 سے کم یا 10 کے برابر ہو گا، ہمارا لوپ چلے گا۔ اور اپ ڈیٹ کرنے کے لیے ہم لکھیں گے i = i + 1، ہر بار اسے ایک بڑھانا ہوگا۔ اور یہاں ہم پرنٹ شدہ فیصد حاصل کریں گے۔ ہم اسے یہاں رکھیں گے، اگلی لائن، اسے محفوظ کریں اور چلائیں۔ اور یہاں ہمارا آؤٹ پٹ ہے، جس میں قطار سے لے کر 10 تک ہماری تمام ویلیوز پرنٹ ہو چکی ہیں۔ تو اس طرح ہمارے پاس ہے۔



02:57:32

کل 11 نمبر چھاپے جا چکے ہیں۔ اب یہ i = i + 1، اسے لکھنے کے لیے ایک چھوٹا ہاتھ ہے، یعنی ہم اسے i + pu کے طور پر بھی لکھ سکتے ہیں۔ جیسا کہ ہم نے سیکھا تھا کہ اگر ہم i = i + 1 لکھنا چاہتے ہیں تو ہم اسے i + i1 لکھ سکتے ہیں۔ ہم نے اس شارٹ ہینڈ کو اسائنمنٹ آپریٹرز کرتے ہوئے سیکھا تھا۔ اب i + = 1 کے لیے، ہم اسے i + pu کے طور پر بھی لکھ سکتے ہیں۔ تو یہ مختصر ہاتھ کا مختصر ہاتھ بن جاتا ہے اور یہ صرف + pu کے لیے ہے۔ یعنی اگر یہاں دو تھے اور یہاں دو تھے تو ہم اس کے لیے i ps ps plus نہیں کر سکتے۔ i p پلس کا مطلب ہے کہ ہر بار i میں ایک شامل کریں۔



02:58:13

اسی طرح ایک پلس paa بھی ہے، پلس paa کا ایک الگ مطلب ہے، اس کے علاوہ مائنس مائنس aa بھی ہے اور i مائنس مائنس بھی ہے، اب ذرا تفصیل سے اس پلس پلس اور مائنس مائنس چیز پر بات کرتے ہیں، ہم ان انکریمنٹ اور ڈیکریمنٹ آپریٹرز کہتے ہیں، سب سے پہلے ہم بات کرتے ہیں، انگریزی میں operator کا مطلب increment میں اضافہ کرنا ہے۔ اضافہ کریں، تو انکریمنٹ آپریٹرز دو طرح کے ہوتے ہیں، ایک ہمارا paa ہے، دوسرا ہمارا i+paa اگر



02:58:44

ہم ایک متغیر i لیتے ہیں، ہم اس کی ویلیو شروع کرتے ہیں، پھر ایک بار پھر پرنٹ اسٹیٹمنٹ لکھتے ہیں جس میں ہم i کچھ فیصد d s n کی ویلیو پرنٹ کرنا چاہتے ہیں، اب ہم i پلس پلس لکھیں گے، آئیے اسے محفوظ کریں اور نئے ٹرمینل کو ماریں، تو ہمارے آؤٹ پٹ میں ہمیں ایک ملے گا، اس aa کے بعد، جب بھی ہم پلس پلس لگائیں گے، اس کا مطلب ہے کہ پہلے iplus کی ویلیو استعمال کریں، اور بعد میں جب iplus کی ویلیو لگائی جائے، تب وہ اضافہ ہوتا ہے۔ یعنی استعمال کریں پھر اضافہ کریں، پہلے جو بھی قدر ہو اسے استعمال کریں اور aa کی قدر بڑھائیں۔



02:59:27

ایک کیا تھا؟ اب پہلے اسے استعمال کرنے کا مطلب ہے اسے پرنٹ کرنا، تو ہم نے ایک پرنٹ حاصل کی لیکن اب کمپائلر کے ساتھ اندرونی طور پر یہ ویلیو بڑھا دی گئی ہے، یعنی اب اگر ہم دوبارہ پرنٹ شدہ i کی قیمت حاصل کرنا چاہتے ہیں تو اس بار ہم پلس پلس نہیں کریں گے، اس بار ہم صرف i لکھیں گے، اس لیے یہاں i کی قیمت ایک کے طور پر پرنٹ کی گئی تھی، اب اندرونی طور پر پلس بننے سے وہ قدر دو ہوگئی، اور جب ہم دوبارہ پرنٹ کریں گے تو ہمیں معلوم ہوگا کہ ہم کیسے پرنٹ کریں گے۔ اس کا مطلب ہے کہ پہلے یہ ایک تھا، اب اندرونی طور پر



03:00:00

اس کو بڑھایا گیا، استعمال نہیں کیا گیا، اس کے بعد اس دوسری لائن میں دوبارہ استعمال کیا گیا، اس کو استعمال کرنے کے بعد اس کی ویلیو جو دو تھی پرنٹ ہو گئی اور یہاں اگر ہم ایک ہی متغیر کے لیے + + aa لیتے تو اس صورت میں کیا ہوتا، + + aa کہتے ہیں اضافہ پھر استعمال کریں، اس کا مطلب ہے پہلے اضافہ، ویلیو بڑھاو، اس لیے پلس پلس پہلے ہی بتا دیا گیا ہے، پلس پلس کا مطلب ہے پہلے اضافہ، پھر ہم اس کی ویلیو استعمال کریں گے، i کی ویلیو میں اضافہ ہوگا، پھر ہم استعمال کریں گے آؤٹ، اسے ایک بار محفوظ کریں اور اب اسے چلائیں اور آؤٹ پٹ دیکھیں



03:00:37

تو پہلی دو پرنٹ ہوئی اور دوسری بار بھی دو کیوں پرنٹ کی گئی کیوں کہ شروع میں i کی ویلیو ایک تھی جو پلس پلس کیا کرتا تھا، اس نے پہلے اسے بڑھا کر دو کر دیا، اس کے بعد ہم نے i پرنٹ کر لیا، یعنی دو پرنٹ ہو گئے، تو دوسری بار جب ہم i کی ویلیو پرنٹ کر رہے ہیں، تو یہ پہلے سے ہی دو ہو چکی ہے، اس لیے وہاں بھی دو پرنٹ ہو گئے، اس لیے پلس انکریمنٹ اور پوسٹر کو picrement + pioper aa کہتے ہیں۔ آپریٹر، تو پلس pi aa کا مطلب ہے پری انکریمنٹ، جس کا مطلب ہے کہ انکریمنٹ پہلے ہوا اور



03:01:12

اسے بعد میں استعمال کیا گیا اور پوسٹ انکریمنٹ کا مطلب ہے کہ یہ پہلے استعمال ہوا اور پھر بعد میں بڑھا، اس طرح ہم p اور -1 کے لیے شارٹ ہینڈ لکھ سکتے ہیں۔ اب اسی طرح ہمارے پاس ڈیکریمنٹ آپریٹرز ہیں، ڈیکریمنٹ آپریٹر جو کرتا ہے وہ ویلیو کو گھٹاتا ہے، یعنی یہاں اگر ہمارے پاس مائنس مائنس aa ہوتا تو ہم اسے پری ڈیکریمنٹ کہتے ہیں اور اگر aa مائنس مائنس ہوتا تو ہم اسے post decrement کہتے، اب یہاں ایک مثال کے طور پر ہم اسے کمنٹ کرتے ہیں اور کمنٹ کرتے ہیں، تو ہم یہاں do، aa کی شروعات میں ایک قیمت ہے۔



03:01:50

مجھے مائنس مائنس کرنے دیں تو آؤٹ پٹ کیا ہو گا۔ ہمیں ایک اور پھر رو کا آؤٹ پٹ ملا ہے، جس کا مطلب ہے کہ پہلے i کی ویلیو استعمال کی جائے گی، اگر یہ ایک ہو گی تو ایک پرنٹ ہو جائے گی، اس کے بعد اگر یہ کم ہو جائے تو ایک کی ویلیو کم ہو کر رو ہو جائے گی اور دوسری بار جب ہم اسے پرنٹ کریں گے، تو ہمیں قطار پرنٹ ہو گی۔ اب ہم اس پر تبصرہ کرتے ہیں، اگر ہم دوسرا حصہ چلاتے ہیں، یعنی مائنس - aa، تو اس صورت میں سب سے پہلے ہم صفر پرنٹ کریں گے کیونکہ پہلے یہ گھٹا ہوا ہوگا، پھر پرنٹ ہوگا، پھر یہاں بھی صفر ہوگا، یہاں بھی صفر ہوگا کیونکہ پہلی بار یہ ایک سے گھٹ کر صفر ہوگیا ہے۔



03:02:23

میں کنورٹ ہو گیا اور اس کے بعد پرنٹ ہو گیا، یعنی صرف صفر پرنٹ ہوا اور دوسری بار جب یہ پرنٹ ہو گا تو i کی ویلیو پہلے ہی صفر ہے، اس لیے وہ صفر پرنٹ ہو جائے گا۔ اس طرح ہمارے پوسٹ ڈیکریمنٹ، پری ڈیکریمنٹ، پوسٹ انکریمنٹ، پری انکریمنٹ آپریٹرز c کے اندر کام کرتے ہیں اور جب بھی ہم لوپس استعمال کرتے ہیں تو یہ انکریمنٹ ڈیکریمنٹ آپریٹرز ہمارے لیے بہت کارآمد ہوتے ہیں کیونکہ زیادہ تر آپ دیکھیں گے کہ جہاں بھی نحو کے لحاظ سے یہ استعمال ہورہے ہیں، اس لیے ہمیں انہیں ہمیشہ استعمال کرنا ہوگا جو کہ معیاری طریقہ ہے۔



03:02:51

لکھنے کے لیے، زیادہ تر لوگ یا تو متغیر aa یا j یا k استعمال کرتے ہیں۔ اگر آپ چاہیں تو آپ کچھ بھی استعمال کر سکتے ہیں، x وہ تھا جو آپ چاہیں، یہ معیاری طریقہ ہے۔ جب بھی میں کوڈ لکھ رہا ہوں، زیادہ تر آپ کو نیسٹڈ لوپس نظر آ رہے ہوں گے، یعنی لوپ اندر لوپ، پھر آپ کو jk ضرور نظر آ رہا ہوگا۔ اب اگلی بات، آئیے کچھ خاص باتوں کے بارے میں بات کرتے ہیں۔ ہم پہلے ہی بات کر چکے ہیں کہ انکریمنٹ آپریٹر کیا ہے۔ ہم پہلے ہی بحث کر چکے ہیں کہ کمی آپریٹر کیا ہے۔ اس کے بعد موضوع آتا ہے کہ لوپ کاؤنٹر فلوٹ اور کریکٹر بھی ہو سکتا ہے، یعنی



03:03:24

فار لوپ میں جو ہم نے اب تک لکھا ہے، ہمارے لوپ کا کاؤنٹر، کاؤنٹر ویری ایبل فلوٹ یا کریکٹر بھی ہو سکتا ہے، جیسے کہ اگر ہم ایک لوپ لکھیں جس میں ہم ایک سے پانچ تک نمبر پرنٹ کرنا چاہتے ہیں، لیکن اس بار ہم فلوٹنگ نمبرز پرنٹ کریں گے، تو i کی ویلیو 1.0 سے شروع ہو گی اور جب تک ہماری لمبائی 5.0 کے برابر نہیں ہو جاتی، ہم یہاں ہر وقت i کی قدر کو ضرب دیں گے اور فی صد کو ضرب دیں گے۔ n aa، آئیے اسے محفوظ کریں اور ایک نیا ٹرمینل کھولیں اور اسے چلائیں، تو ہم کیا پرنٹ کریں گے



03:04:01

1.00 2.00 3.0 4.0 اور اسی طرح 5.0 کا مطلب ہے کہ اس بار سلاٹ میں تمام ویلیوز پرنٹ ہو چکی ہیں اور اس بار ہم نے اپنا ایٹریٹر استعمال کیا ہے، اپنا کاؤنٹر ویری ایبل، جو ہماری فلوٹنگ ویلیو ہے، اس کے ساتھ، فرض کریں کہ ہم a سے z تک کریکٹر پرنٹ کرنا چاہتے ہیں، تو اس کا آغاز کیا ہوگا، اس کے بعد ہم اس کا لوپ لیں گے، اس کے بعد ہم کیا کریں گے، i = کریکٹر ہم یہاں i کے بجائے ایک شرط یا شرط لگائیں گے، اس بار ہم ایک مختلف متغیر لیتے ہیں، آئیے s لیتے ہیں، تو i کی قدر کریکٹر کے اندر محفوظ ہوجاتی ہے، ہم s کو بڑھاتے رہیں گے جب تک کہ یہ 0 تک نہ پہنچ جائے۔



03:04:36

z کے برابر سے کم قدر وہاں نہیں ہے، ہم ہر بار s کو پلس میں تبدیل کریں گے۔ ہم جانتے ہیں کہ حروف اندرونی طور پر ان کی اسکا ویلیو میں تبدیل ہوتے ہیں، اس لیے وہ صرف نمبر ہوتے ہیں، اگر ہم اس a پر سکرول کریں تو اس کی اسکا ویلیو 97 ہے، اگر ہم z پر اسکرول کریں تو اس کی ویلیو 122 ہے، تو b کی ویلیو کیا ہوگی، a 97 ہے، b 98 ہوگی، اس طرح یہ اسی طرح بڑھتا رہتا ہے، اس لیے جب بھی ہم a سے b کی طرف بڑھ رہے ہیں، ہم بڑھتے جارہے ہیں۔ c سے d تک، لہذا یہاں ہر بار ہم اسے پرنٹ کریں گے، جسے ہم اپنے کردار کو c میں تبدیل کرتے ہیں۔



03:05:09

ہاں، اسے محفوظ کریں، تو اس بار ہم دیکھیں گے کہ ہمارے انگریزی حروف تہجی کے تمام حروف، A سے آخر تک، ہمارے لیے پرنٹ کیے گئے ہیں، اس طرح ہمارے آئٹم میٹر کو فلوٹ کے طور پر لیا جا سکتا ہے، کریکٹر کے طور پر لیا جا سکتا ہے، int کے طور پر لیا جا سکتا ہے، ڈبل کے طور پر لیا جا سکتا ہے، یہ اس بات پر منحصر ہے کہ ہم کس سوال کو حل کر رہے ہیں، اگلی چیز جس کے بارے میں ہم بات کریں گے وہ ہے int i = 1 کے ساتھ ہماری شرط ہے، اب ہماری شرط int i = 1 ہے آپ اسے یہاں خالی چھوڑنے کی طرح محسوس کرتے ہیں، یعنی کوئی بھی بیان یہاں رکھا جا سکتا ہے۔



03:05:53

ہم اسے نہیں لکھیں گے جو اس لوپ کو ختم کر دے گا اور یہاں ہم اپنا اپڈیٹنگ سٹیٹمنٹ لکھیں گے یعنی i+p اور یہ لوپ ہر بار کیا کر رہا ہے، ہر بار یہ لوپ ہیلو ورلڈ پرنٹ کر رہا ہے، آئیے اسے محفوظ کرتے ہیں، تو یہ لوپ کیا کہتا ہے کہ i کی قدر ایک سے شروع ہو رہی ہے، aa کی قدر ہر بار بڑھ رہی ہے، یعنی پہلے یہ ایک ہے، پھر یہ تین ہو جائے گا، پھر یہ تین ہو جائے گا۔ پانچ، لیکن یہاں ہم نے اس بیان کو خالی چھوڑ دیا ہے، یہ ہماری خواہش ہے، ہم تینوں میں سے کسی کو بھی خالی چھوڑ سکتے ہیں، مسئلہ یہ ہے



03:06:23

خرابیاں آتی ہیں اور کیا خرابیاں آتی ہیں، اب ہم دیکھیں گے، اگر اس سٹیٹمنٹ کو خالی چھوڑ دیا تو یہ لوپ نہیں جانتا کہ اس لوپ کو کب ختم کرنا ہے، سی کمپائلر کو نہیں معلوم کہ یہ لوپ کب ختم ہو، یہ لوپ چلتا رہے گا، چلتا رہے گا، کیسے چلے گا، اگر ہم اسے چلائیں گے تو یہ لوپ ہیلو ورلڈ پرنٹ کرتا رہے گا جب تک کہ ہمارا کمپیوٹر مکمل طور پر بند نہ ہو جائے، اس لیے ہمیں یہ کیوں ضروری نہیں ہے کہ یہ میموری مکمل طور پر بند ہو جائے۔ ہمیشہ کسی بھی شرط کو مت چھوڑیں، جب تک کہ ہم یہ جان لیں کہ ہمارا کوڈ صحیح طریقے سے چل رہا ہے اور ہمیں اس بات پر بہت زیادہ توجہ دینی ہوگی کہ کس شرط پر عمل کیا جائے۔



03:06:55

اور اس قسم کا لوپ جو کبھی ختم نہیں ہوتا اور ہمیشہ چلتا رہتا ہے، اسے ہم انفائٹنگ کہیں گے، یہ لڑائی نہیں رکے گی، اگر آپ ویب ڈویلپمنٹ یا کسی اور چیز سے متعلق ایپس بناتے ہیں یا اگر آپ واقعی کسی کمپنی میں جا کر ڈویلپمنٹ کرتے ہیں، تو جب آپ کو وہاں کوڈنگ کرنی ہے، تو آپ کو ایسی غلطیاں نہیں کرنی چاہئیں جو کہ بہت بنیادی غلطیاں ہیں، جب بھی ہم لوپس کے بارے میں بات کرتے ہیں، تو آپ کے ذہن میں اس پروگرام کو ذہن میں رکھیں، تاکہ آپ اپنے پروگرام کو ہمیشہ ذہن میں رکھیں۔ infighting، یہ ہمارا while loop ہے، اب while loop لکھنے کا نحو تھوڑا آسان ہے۔



03:07:44

بالکل شروع میں، ہم نے کوڈ کو تھوڑا مشکل ترین نحو کے ساتھ کیا ہے، لوپ کے لیے۔ اب تمام لوپس ہمیں آسان لگیں گے۔ باقی تمام چیزیں کافی آسان لگیں گی لیکن اگر آپ کو اب بھی فار لوپ میں تھوڑا سا شک ہے تو اسے تھوڑا سا ریوائنڈ کریں اور اسے تھوڑا سا مزید دیکھیں۔ اگر آپ کو ان سوالات میں کوئی شک ہے جو ہم نے زیر بحث لائے ہیں، تو انہیں تھوڑا سا دیکھ لیں، ورنہ نوٹوں پر ایک نظر ڈالیں اور اگر آپ اسے اچھی طرح سمجھ گئے ہیں، تو اب آئیے جب لوپس پڑھیں۔ while کی ترکیب یہ ہے کہ ہم سب سے پہلے اپنا کلیدی لفظ جب اور اس کے اندر لکھتے ہیں۔



03:08:12

آئیے ہم اپنی حالت لکھیں اور پھر اندر وہ بیان لکھیں جو ہمارے کام آئیں گے۔ تو ابھی ہم نے 1 سے 5 تک نمبروں کو پرنٹ کرنے کے لیے کوڈ لکھا تھا۔ اس میں، ہم نے لوپ کے لیے کوڈ پہلے ہی لکھا تھا۔ اب ہم for and while کے نحو کا موازنہ کرتے ہیں۔ فار لوپ میں کوڈ کیسے لکھا گیا؟ int i = 1 aa کے لیے جب تک len برابر 5 aaps pss یہاں ہم پرنٹ کر رہے تھے فیصد d، ہمارا i۔ اب اس دوران لوپ میں اس کی تبدیلی کیا ہوگی؟ جبکہ ہمارا مطلوبہ لفظ ہے، پھر ہم اپنی حالت لکھیں گے، ہماری حالت کیا ہے۔



03:08:51

یہاں ہمیں اپنے ویری ایبل کو باہر ڈکلیئر کرنا ہے، یعنی اپنے کوڈ کے اندر، ہم نے parens کے اندر ویری ایبل ڈکلیئر کیا تھا، لیکن اس بار ویری ایبل کو باہر ڈکلیئر کرنا پڑے گا کیونکہ تھوڑی دیر میں کوئی جگہ نہیں ہے، یا تو آپ اسے while کے اندر کر سکتے ہیں، لیکن پھر آپ اسے یہاں استعمال نہیں کر سکتے، اس لیے کنڈیشن میں، ہم اسے باہر ڈکلیئر کریں گے، ہماری شرط یہ ہو گی کہ پرنٹ کی ویلیو 5 فیصد سے کم ہو جائے گی۔ میں، اب یہاں آپ اس دیدی سے پوچھیں گے، ہم نے دو چیزوں کا احاطہ کیا ہے۔



03:09:24

ہم نے یہ یہاں کیا ہے، سب سے پہلے ہم نے اپنے ڈیکلریشن سٹیٹمنٹ کو کور کیا ہے، اگر ہم ڈیکلریشن کو while لوپ سے باہر لکھتے ہیں تو اس ڈیکلریشن کی جگہ یہ ڈیکلریشن آ گیا ہے، ہماری ٹرمینیشن کنڈیشن یہاں آئی ہے کہ کن کیسز میں ہمارا لوپ ختم ہو گا، کن کیسز میں چلے گا، اس لیے ٹرمینیشن کنڈیشن یہاں آئی ہے اور اس میں یہ یہاں آ گئی ہے، لیکن اپ ڈیٹ کے لیے یہ شرط کہاں لکھی ہے، ہم نے اپ ڈیٹ کرنے کے لیے اندر لکھا ہے، ہم نے اپ ڈیٹ کرنے کے لیے کہاں لکھا ہے صرف، اس کا مطلب ہے کہ ہم یہاں اپ ڈیٹ کو اختتامی بیان میں لکھیں گے، لوپ ختم ہونے سے پہلے یعنی لوپ کو ختم کرنا



03:09:55

باہر آتے وقت ڈو پلس پلس بھی کریں، تو اگلی بار یہ پلس پلس کرے گا، سٹیٹمنٹ سے یہ + بن جائے گا، پھر واپس آئے گا، یہ کام کرے گا، پھر دوبارہ پلس پلس بن جائے گا، پھر دوبارہ آئے گا، یہ کام کرے گا، پھر دوبارہ پلس پلس ہو جائے گا، پھر دوبارہ آئے گا، تو اس طرح ہمارا لوپ اس کے اندر چلتا ہے جبکہ لوپ کے اندر چلتے ہیں، اب ہمارے کوڈ کو ڈیکلیئر کرنے کے قابل بناتا ہے۔ aa i e1، جب تک i < eq 5 ہے، تب ہم پانچ بار ہیلو ورلڈ پرنٹ کریں گے اور ہر بار پلس پلس ٹو i کریں گے۔



03:10:30

اب ہمیں ایک بات نوٹ کرنی ہے کہ ان گھنگھریالے منحنی خطوط وحدانی کے بعد، ہم اسے کبھی بھی c کے اندر نہیں ڈالتے، یعنی اسٹیٹمنٹ ٹرمینیٹر، کیونکہ گھوبگھرالی منحنی خطوط وحدانی کا مطلب ہے کہ یہاں کوڈ کا ایک بلاک ہے، اور اس کے بعد، ہم پہلے ہی جانتے ہیں کہ اسٹیٹمنٹ ختم ہونے والا ہے، اس لیے اسٹیٹمنٹ ٹرمینیٹر لگانے کی ضرورت نہیں ہے، اب اس کو چلائیں، نیا ٹرمینل، تو ہم نے اپنے پانچ سوالوں کو ہیلو ورلڈ پرنٹ کرنے کے لیے سوال کیا ہے۔ 0 سے n تک کے نمبر اگر n صارف کے ذریعہ دیا جائے تو ہم اب تک کیا کر رہے تھے۔



03:11:00

مثال کے طور پر اگر ہم قطار سے پانچ تک یا ایک سے پانچ تک نمبر پرنٹ کرنا چاہتے ہیں تو ہم خود ہی ٹرمینیٹنگ سٹیٹمنٹ ڈال رہے تھے کہ جب تک i کی قدر 5 سے کم ہے، لیکن اس بار صارف بتائے گا کہ ویلیو کہاں پرنٹ کرنی ہے، مثلاً اگر صارف نے ہمیں چار بھیجا ہے تو ہمیں قطار 1 2 3 4 پرنٹ کرنا ہوگی اگر صارف نے 10 2 3 پرنٹ کریں تو 10 2 3 4 پرنٹ کریں گے۔ 10 آتا ہے۔ اب ایسا کرنے کا طریقہ کیا ہو گا؟ سب سے پہلے ہم صارف سے ویلیو ان پٹ لیں گے، یوزر سے ویلیو ان پٹ لینے کے بعد ہم اسے کچھ ویری ایبل میں اسٹور کریں گے۔



03:11:35

اسے سٹور کر لیا، نمبر n میں سٹور ہو گیا، اب جب بھی ہم شرط کے لیے لکھتے تھے یا اس معاملے میں کیا کرتے ہیں، ہم اس سوال کو while لوپ کی مدد سے حل کرتے ہیں، پہلے ہم جب بھی while کنڈیشن لکھتے تھے، ہم while کے اندر کیا لکھتے تھے، یہاں تک کہ ہمارا i < n کے برابر ہوتا ہے، پہلے ہم 5 کے برابر کم لکھتے تھے، اس صورت میں n بھی بدلا جا سکتا ہے، یہ بھی پانچ ہو سکتا ہے، یہ ہمیشہ پانچ نہیں ہو سکتا۔ 10، یہ 10000 بھی ہو سکتا ہے، تو len برابر n، ہم اس کے اندر اپنا i پرنٹ کر لیں گے اور بعد میں ہم اسے i+p بنائیں گے، تو ہمارا عمل کچھ اس طرح ہوگا، اسے کوڈ کریں



03:12:10

آئیے اسے آزمائیں، پھر ہم اوپر لکھتے ہیں پرنٹ ایف نمبر درج کریں اور اپنے نمبر کو اوپر لے جائیں، int n کی وضاحت کریں اور یہاں سے اسکین کریں، اب ہم اپنا while لوپ لکھیں گے جب کہ ایک آئٹم int i i ہے جب تک کہ ہمارا i < برابر n ہے، پھر ہمارا while لوپ چلے گا، ہم while لوپ کے اندر کیا کریں گے، ہر بار ہم اپنی ویلیو پرنٹ کریں گے یعنی اپنے i اور اس کے بعد صارف سے کیا ہوا، ہم سب سے پہلے نمبر کو پرنٹ کریں گے صارف نے نمبر درج کیا، تو ہم نے اسے n میں محفوظ کر لیا، اس کے بعد ہم نے قطار سے i کی قدر گننا شروع کر دی جب تک کہ i برابر سے کم نہ ہو جائے۔



03:12:47

جبکہ لوپ n باقی رہنے تک چلے گا۔ ہر بار ہم aa پرنٹ کریں گے اور پھر ہم اسے ایک ایک کرکے اپ ڈیٹ کریں گے۔ آئیے اسے محفوظ کریں اور چلائیں۔ تو سب سے پہلے ہمیں نمبر داخل کرنا ہوگا۔ ہم سات میں داخل ہونے جا رہے ہیں۔ جب ہم سات میں داخل ہوئے تو قطار سے لے کر سات تک کے تمام نمبر ہمارے لیے پرنٹ ہو چکے ہیں۔ اب یہاں ہم کوئی بڑا نمبر بھی داخل کر سکتے تھے۔ مثال کے طور پر، فرض کریں کہ ہم نے 55 درج کیا ہے، تو ہمارے لیے قطار سے 55 تک کے تمام نمبر پرنٹ ہو چکے ہیں۔ لہذا سی میں لوپس یا کسی بھی تصور کو صحیح طریقے سے سیکھنے کا ایک ہی طریقہ ہے۔



03:13:20

طریقہ یہ ہے کہ آپ اس کے بہت سے سوالات کریں۔ اگر ہم ان چیزوں پر واضح ہیں جن پر ہم عمل کر رہے ہیں تو کوئی حرج نہیں ہے۔ ہم ایک ہی کوڈ کے ساتھ وقت کے بجائے کر سکتے ہیں۔ اسے یہاں کیسے کرنا ہے، آئیے کمنٹ کریں اور اسی کوڈ کے لیے لکھیں، int aa = 0 کے لیے aa کی ویلیو جب تک کہ ہمارے پاس n aa pps نہ ہو اور یہاں ہم اپنا پرنٹ اسٹیٹمنٹ فیصد d n aa لکھیں گے اس طرح یہاں aa کی ویلیو پہلی قطار تھی اور یہاں کنڈیشن چیک کی جا رہی تھی، اسی طرح for loop میں۔



03:14:00

ویلیو پہلی قطار میں ہے، ہم نے i <= n ہونے تک شرط رکھی ہے اور i+p کو اپ ڈیٹ کرنے کے لیے اور جب بھی ہم i کی ویلیو پرنٹ کر رہے ہیں، تو ہم اسے ایک بار محفوظ کر کے چلاتے ہیں، اب نمبر چھ داخل کرنے کے بعد، اس قطار سے لے کر چھ تک کے تمام نمبرز ہمارے ساتھ پرنٹ ہو جاتے ہیں، اب فرض کریں کہ ہم صفر سے پرنٹ نہیں کرنا چاہتے، ہم پرنٹ کرنا چاہتے ہیں، اگر ایک سے تین تک پرنٹ کرنا چاہتے ہیں، تو ہم پرنٹ کرنا چاہتے ہیں، ایک سے تین تک پرنٹ کرنا چاہتے ہیں۔ چھ یا تین سے سات تک، تین سے n تک، پھر ابتدائی بیان کریں اور اسے تین سے n تک کروائیں۔



03:14:33

تو اس طرح، جس بھی قسم کا کوڈ ہوگا، ہم اس قسم کے کوڈ کو اپنائیں گے اور اس پر قابو پائیں گے۔ اگلا جس کے بارے میں ہم بات کریں گے وہ ہمارا do while loop ہے۔ Do while loop بالکل ایک while loop کی طرح ہے۔ اب while لوپ کے اندر کنڈیشن پہلے سے ہی چیک کی جاتی ہے، یعنی جب while لوپ کی بات کریں تو اس میں کیا ہوتا تھا، پہلے while لکھا جاتا تھا، پھر ہماری حالت لکھی جاتی تھی۔ تو اگر یہ شرط غلط ہے، تو ہم اس بلاک کے اندر کبھی نہیں جاسکیں گے، جیسے int aa i equal to two، ہم نے ایک لکھا اور کنڈیشن چیک کی جارہی ہے، i lev to aa len v تو کبھی کبھی



03:15:09

درست نہیں ہوگا اس لیے اندر کے بیانات پر عمل نہیں کیا جائے گا، ورنہ ہمارا while لوپ ایک بار بھی نہیں چلے گا، لیکن اگر ہم ایسا while loop لکھیں جو کم از کم ایک بار چلتا ہے تو ہم اسے do while کہتے ہیں۔ تو کرتے ہیں جبکہ لوپ میں بھی مختلف معاملات ہوتے ہیں جن میں اسے استعمال کرنا زیادہ معنی رکھتا ہے۔ اگر ہم نحو کی بات کریں تو سب سے پہلے do لکھتے ہیں، اس کا مطلب ہے کہ یہاں پہلے کنڈیشن چیک نہیں کی جاتی، کام پہلے کیا جاتا ہے، پہلے کام کرو، اس لیے جو بھی کام ڈو لکھ کر کرنا ہے، ہم اسے یہاں اپنی سطروں میں لکھتے ہیں۔



03:15:41

پھر آخر میں کنڈیشن چیک کی جائے گی، یعنی اس کام کو جب تک کرنا ہے کرتے رہنا ہے، اس لیے پہلے کام کیا جائے گا، پھر کنڈیشن چیک کی جائے گی، پھر کام ہو جائے گا، پھر کنڈیشن کو آخر میں چیک کیا جائے گا، پھر ہم اپنی کنڈیشن کو پیرنز میں لکھیں گے، اور یہاں ہم سٹیٹمنٹ ٹرمینیٹر لگا رہے ہیں کیونکہ یہ بلاک نہیں ہے، یہاں paren کے بعد ٹرم آیا ہے، یہاں parenator کیوں آ سکتا ہے۔ یہاں، تو یہ ہمارا نحو ہے، اب اگر ہمیں ایک سے پانچ تک نمبر پرنٹ کرنے کے لیے کوڈ لکھنا ہے، تو سب سے اوپر ہم اپنا متغیر رکھیں گے۔



03:16:14

ہم i = 5 کی تعریف کریں گے اس کے بعد do لکھیں گے، ہمیں اپنا کام بتانا ہوگا کہ کام کیا ہے، i کی ویلیو پرنٹ کرنے کے لیے، اس ویری ایبل کی ویلیو، پھر ہم اپنا پرنٹ اسٹیٹمنٹ لکھیں گے پرنٹ f فیصدی d b ni اور اب ہمیں کنڈیشن بتانی ہے، شرط یہ ہے کہ یہ کام اس وقت تک کرنا ہوگا جب تک i کی ویلیو 5 کے برابر نہ رہے اور یہاں i+ کوڈ کو اپ ڈیٹ کرنے کے لیے ہم درمیان میں i+ کوڈ لکھیں گے۔ یہ پانچ نمبر i = 1 سے 2 3 4 5 تک، چلیں ایک بار چلائیں، سب سے پہلے ہم لکھیں گے do do، یہ کیا کرے گا، کچھ کام



03:16:54

اس سے یہ کام ہو جائے گا۔ اب کام کرنے کے لیے ہمارے پاس پہلے سے ہی ایک متغیر ہونا چاہیے، تو آئیے اسے ایک سے شروع کریں۔ ہمارا کام متغیر کو پرنٹ کرنا ہے، اس لیے پرنٹنگ کے لیے ہم فیصد dni لکھیں گے اور پھر ہم اپنا while in لکھیں گے، پھر ہم شرط لکھیں گے، ہماری حالت کیا ہے، جب تک i کی قدر 5 سے کم نہ ہو اور پھر ہمارا سٹیٹمنٹ ٹرمینیٹر، تب تک ہم i پرنٹ کرواتے رہیں گے اور ہر بار ہم i کو پلس پلس بنائیں گے کیونکہ میں اس کی قیمت نہیں بنی، پھر یہ پلس پلس بن جائے گا، پھر یہ پلس کی قیمت کیا بن جائے گی۔ f سے کم رہیں



03:17:32

یہی وجہ ہے کہ جب بھی شرط صحیح ہوگی، لوپ چلے گا۔ جب بھی کنڈیشن درست ہو گی، لوپ چلے گا، اس لیے انفینٹی پر جا کر اور رن کرنے سے، ہمیں آؤٹ پٹ 1 2 3 4 5 ملتا ہے۔ یہاں، ہم f سے ون تک ویلیو پرنٹ کرنا چاہتے ہیں، تو ہم کیا کریں گے، ہم fw کے ساتھ i شروع کریں گے، یہاں ہم i my مائنس ٹرمینیشن سٹیٹمنٹ لکھیں گے، جب تک میں i my minus ٹرمینیشن سٹیٹمنٹ لکھیں گے، جب تک i اب 41 سے بڑا ہے، تو ہم اسے 41 کے برابر رن کریں گے، تو ہم 43 کے برابر رن کریں گے۔ پرنٹ کیا گیا، اس طرح ہم انکریمنٹ ڈیکریمنٹ کا استعمال کر سکتے ہیں، ہم کوڈ کو سمجھ سکتے ہیں کہ کہاں سے کہاں جانا ہے، تو یہ ہمارا ڈو while لوپ سوال تھا۔



03:18:11

یہ کہتا ہے کہ پہلے n قدرتی نمبروں کا مجموعہ پرنٹ کریں۔ تو سب سے پہلے ہم پہلا حصہ کریں گے، اس کے بعد آپ دوسرا حصہ دیکھ سکتے ہیں، اس لیے ہمیں پہلے n قدرتی اعداد کا مجموعہ پرنٹ کرنا ہوگا۔ ہر بار کی طرح، صارف ہمیں یہ ن دے گا، پھر ہم ان کی رقم پرنٹ کریں گے۔ فرض کریں صارف نے n = 4 دیا ہے، تو ہمیں ایک سے 4 تک کے تمام نمبروں کا مجموعہ پرنٹ کرنا ہے۔ یہ ہمارے لیے 10 ہو جائے گا۔ اگر صارف نے پانچ دیے ہیں تو ہمیں ایک سے پانچ تک کے تمام نمبروں کا مجموعہ پرنٹ کرنا ہوگا۔ اگر اس نے تین دیے ہیں تو وہی 1 + 2 + 3 = 6۔ تو ہم یہ کیسے کریں گے؟



03:18:50

ایسا کرنے کے لیے، سب سے پہلے ہم جانتے ہیں کہ سب سے بنیادی چیز صارف کو اسکین کرنا ہے اور ہمارے این کا ان پٹ لینا ہے۔ اس کے بعد جیسے ہی n کا ان پٹ آتا ہے، ہمیں لوپ کے لیے لوپ چلانا پڑتا ہے۔ فرض کریں ہم چلاتے ہیں جس میں aa کی ویلیو ایک سے شروع ہوتی ہے اور چار یا n تک جاتی ہے اور اس میں ہم i پلس پلس ڈالیں گے۔ اب ہمارا کام کیا ہے، ہمیں لوپ کے اندر کام لکھنا ہے، ہمارا کام رقم کا حساب لگانا ہے۔ لہذا ہم ایک متغیر رقم بنائیں گے اور ہم اس رقم کی قدر کو قطار سے شروع کریں گے، یعنی شروع میں رقم ہماری قطار ہے اور اس رقم کے لیے



03:19:25

ہم اس کے اندر i کی ویلیو جوڑتے رہیں گے، اگر i = 1 ہے تو جمع کے اندر ایک جوڑا جائے گا، اگر i = 2 ہے تو 2 جوڑ دیا جائے گا، اگر i = 3 ہے تو 3 کو sum کے اندر جوڑ دیا جائے گا، تو ایسا کرنے سے ہمیں sum کے اندر تمام ویلیو کا مجموعہ ملے گا جیسے i کی قدر شروع میں ایک ہے، sum کی ویلیو شروع میں جو ہوگی، row کی قدر داخل ہوگی، جیسے ہی ہم لوپ میں شروع کریں گے sum + aa، جس کا مطلب ہے ایک، پھر i کی ویلیو اپ ڈیٹ ہو کر دو ہو جائے گی، ہمارے پاس sum کی قدر ہے، اب ایک لوپ کے اندر کیا ہوگا، sum i sum + i کے برابر ہے، جس کا مطلب ہے 1 + 2، جس کا مطلب ہے کہ 3 اب i کی قدر ہو جائے گی۔



03:20:07

پھر sum کی ویلیو بن جائے گی کہ for loop sum = sum + i = 1 + 2 + 3 = 6 کے اندر کیا ہوگا تو ہمارا عمل کچھ اس طرح ہوگا جب ہم کوڈ لکھیں گے، ہم اس پر دوبارہ بحث کریں گے کہ ہم شروع میں کیا کریں گے سب سے پہلے ہم صارف سے ایک نمبر کے لیے پوچھیں گے تو نمبر درج کریں ایک ویری ایبل بنائیں گے ہم اسے int nn کے اندر اسٹور کریں گے اور اس کے بعد S variable کو ابتدائی طور پر اسکین کریں گے۔ صفر کے ساتھ رقم کی قدر اور ایک فار لوپ بنائیں ہم i = 0 یا i = 1 i میں لکھیں گے جب تک کہ ہم مساوات نہیں لیں گے۔



03:20:48

n چھوڑا نہیں i + p اور اس لوپ کے اندر ہم اسے sum + i میں شامل کریں گے یا ہم اسے sum + i i لکھ سکتے ہیں اور آخر میں ہم کیا کریں گے، ہم اپنی رقم کی ویلیو پرنٹ کریں گے، تو sum فیصد ہے d aa، آئیے اسے محفوظ کریں اور اسے چلائیں، یہاں ہم sum کی ویلیو پرنٹ کرنے جا رہے ہیں اور aa نہیں، آخر میں اگر ہم چھ نمبر داخل کریں گے، تو ہم چھ چھپائیں گے، اگر ہم تین نمبر داخل کریں گے فرض کریں کہ ہم پانچ داخل کر رہے ہیں، تو اس بار ہم نے پانچ داخل کیے، رقم 15 کے لیے پرنٹ ہو جاتی ہے، تو اس طرح عمل کیا تھا؟



03:21:26

سب سے پہلے ہم نے n درج کیا، اس کے بعد ہم نے ایک sum variable بنایا جس کی ویلیو ہم نے row سے شروع کی، اس کے بعد ہم نے 1 سے n تک ایک لوپ چلایا، جو ہم ہر بار کرتے تھے وہ لوپ کا آئٹم معاملہ پرنٹ کرتا تھا، لیکن اس بار ہم نے اس آئٹم کے معاملے کے ساتھ کچھ اور کیا، یعنی ہم نے اپنی رقم کا حساب لگایا، ہم نے کس طرح حساب کیا کہ ہم نے sum = = کو جوڑنا ہے، اس کا مطلب یہ ہے کہ ہم نے = i + کو جوڑا؟ sum، پھر تمام i کا مجموعہ نکلا، پھر ہماری حتمی رقم کی قدر پرنٹ کی، اسی طرح، سب سے پہلے اگر میں 1 تھا اور sum قطار تھی، تو سب سے پہلے sum = sum +



03:22:02

i سے ہماری رقم ایک ہو گئی، پھر میں 2 ہوا تو بھی ایک ہو گیا جیسے ہی ہم لوپ کے اندر گئے تو جفت کی قدر تین ہو گئی، پھر میں تین ہو گیا جفت کی قدر پہلے سے تین ہو گئی، اب تین بھی جوڑے گئے، تو آخر میں بھی چھ ہو گئے، تو یہ ہمارے n = 3 کا جواب ہو گا، اب اس سوال کا دوسرا حصہ کہتا ہے کہ ان کو بھی ریورس میں پرنٹ کریں، اس کا مطلب یہ ہے کہ ہم نے ایک سے عدد کو بھی پرنٹ کرنا ہے، جس کا عدد بھی ہم نے نکالنا ہے۔ اسے ریورس میں پرنٹ کرنے کے لیے ہمیں ایک اور الگ لوپ بنانا چاہیے، اگر فرض کریں کہ ہم نے رقم لی ہے۔



03:22:37

اب int i = ni کے لیے جب تک کہ ہمارا زیادہ سے زیادہ 1 i - مائنس کے برابر نہ ہو اور ہر بار ہم اپنے i کا فیصد dn پرنٹ کریں گے۔ اب نوٹ کرنے والی پہلی بات یہ ہے کہ ہمارے i کو یہاں بھی int i = 1 قرار دیا گیا ہے اور یہاں بھی اسے int i = 1 قرار دیا گیا ہے تو کوئی ایرر آئے گا، کمپائلر کہے گا کہ آپ نے ایک ہی ویری ایبل کو دو بار ڈیکلیئر کیا ہے، ہم نے سیکھا تھا کہ یہ غلط ہے، اس لیے یہاں ایرر نہیں آئے گا کیونکہ ہم یہاں فار لوپ کے اندر جو بھی ویری ایبل ڈیکلیئر کریں گے، اس کی ویلیو لوپ کے اندر ہی رہے گی۔



03:23:17

یہ صرف اس وقت تک رہتا ہے، یعنی جیسا کہ آپ نے دیکھا ہوگا کہ شروع میں میں نے یہاں رقم کی بجائے i پرنٹ کرنے کی کوشش کی، لیکن میرے i کی قدر صرف اس بلاک کے اندر ہے، میں اس بلاک کے باہر اپنا aa استعمال نہیں کرسکتا، اس لیے اس بلاک کے باہر مرتب کرنے والے کو نہیں معلوم کہ i کیا ہے، اسی لیے میں یہاں استعمال نہیں ہو سکتا، صرف یہاں استعمال کیا جا سکتا ہے، اسی لیے یہ نہیں معلوم کہ میں کی زندگی کا وقت یہاں ختم ہوا، تو ہم یہ نہیں جان سکتے کہ میں کیا مرتب کر سکتا ہوں۔ ایک نئے متغیر aa کا دوبارہ اعلان کریں، جو ہم نے کیا۔



03:23:45

i کی قدر n سے شروع کی گئی ہے، جس کا مطلب ہے کہ اگر n تین ہے تو i شروع میں تین ہوں گے، اگر n پانچ ہے تو n5 شروع میں ہو گا، پھر ہماری حالت کا بیان i >= 1 i مائنس مائنس تک ہے اور اس کے بعد ہم i پرنٹ کر رہے ہیں، تو آئیے اسے محفوظ کر کے چلائیں، اس بار اگر ہم تین دیتے ہیں، تو سب سے پہلے اس کا مطلب ہے کہ تین سے چھپنے کے بعد اس کو ریورس میں شمار کیا جائے گا، اس کا مطلب ہے کہ تین میں دوبارہ گننا ہو گا۔ آرڈر کریں، ہمارے تمام نمبرز ہمیں پرنٹ کر دیے جائیں گے، اب یہ سارا کام جو ہم نے لوپس کے لیے دو میں کیا ہے۔



03:24:17

کیا ہم یہ کام سنگل فار لوپ میں بھی کر سکتے تھے؟ ہم یہ کیسے کرتے ہیں؟ آئیے یہ کرتے ہیں۔ عام شکوک اور ہم یہاں کیا کرتے ہیں؟ آئیے ایک اور نیا متغیر j = n بنائیں۔ تو اس طرح ہم ایک فار لوپ کے اندر متعدد متغیرات کو شروع کر سکتے ہیں۔ تو i = 1 اور j = n۔ اب یہاں، جب تک i < کے برابر n نہیں ہوتا، اور پھر ہمارا j برابر 1 سے بڑا ہوتا ہے۔ اور جب بھی ہم i میں پلس کا اضافہ کر رہے ہیں، ہم j میں مائنس کا اضافہ کریں گے اور ہر بار اسے پرنٹ کریں گے۔ اب ہم اپنے j کو فار لوپ کے اندر سے ہٹا سکتے ہیں۔ اب غور سے سنتے ہیں کہ اس کے اندر کیا ہے۔



03:24:59

ایسا ہوا کہ ہمارے پاس پہلے سے ہی ایک متغیر i تھا جس کی قیمت ایک سے شروع ہوتی ہے۔ اس بار ہم نے ایک نیا متغیر داخل کیا اور اسے j کا نام دیا۔ ہم نے j کی قدر کو n سے شروع کیا۔ اس AA کا کام رقم کا حساب لگانا ہوگا۔ اس جے کا کام نمبروں کو الٹ ترتیب میں پرنٹ کرنا ہوگا۔ i کی شرط یہ ہے کہ جب تک i n سے کم نہ ہو، j کی شرط یہ ہے کہ جب تک j w سے بڑا نہ ہو، چیزیں الٹی ترتیب سے چھپتی رہیں۔ لہذا ہم جانتے ہیں کہ جب تک ہمارا i ایک سے n میں جاتا ہے، جب تک ہمارا j n سے ایک میں آتا ہے، اس میں برابر وقت لگے گا، لہذا ہمارے پاس



03:25:31

یہاں، دونوں شرطوں کے درمیان ایک اختتام کر دیا گیا ہے، جس کا مطلب ہے کہ ہماری دونوں شرطیں درست ہونی چاہئیں۔ جب بھی ہم i کو پلس کر رہے ہیں کیونکہ ہم رقم کا حساب لگا رہے ہیں، تو ہر بار ہم مائنس j بھی کر سکتے ہیں کیونکہ ہم اپنے نمبرز کو الٹ ترتیب میں پرنٹ کر رہے ہیں۔ تو اب آئیے اسے محفوظ کریں اور چلائیں۔ اب ہمیں 3 2 1 پرنٹ کیا جاتا ہے اور آخر میں، ایون چھ پرنٹ ہو جاتا ہے۔ پہلے جو کچھ ہو رہا تھا، وہ بھی چھ پہلے چھاپا گیا۔ نمبر بعد میں چھاپے گئے۔ اس بار، نمبر سب سے پہلے پرنٹ ہوئے کیونکہ بھی۔



03:26:04

جب کہ سارا حساب کتاب ہو رہا ہے اور پھر پرنٹنگ ہو رہی ہے، رقم چھاپنے سے پہلے، نمبر چھاپنے کے لیے ایک بیان ہے۔ اس کے ساتھ، ہم کیا کر سکتے ہیں کہ ہم اس رقم کو مکمل طور پر ختم کر سکتے ہیں. اگر ہم اس رقم کو مکمل طور پر نکال دیں تو اس سے کیا ہوگا، ہماری j کی قدر n سے 1 تک جا رہی ہے۔ اب چاہے ہم 1 2 3 کا مجموعہ لیں یا 3 سے 1 کا مجموعہ لیں، دونوں کا مجموعہ بالآخر چھ آنے والا ہے۔ لہٰذا، دونوں کے مجموعہ کی قدر برابر ہوگی۔ اس لیے اس سے کوئی فرق نہیں پڑے گا کہ ہم 1 سے n تک جا رہے ہیں یا n سے 5 لوپ میں۔



03:26:36

لہذا اگر ہم حساب کر رہے ہیں تو یہاں ہم اسے sum = sum + j میں تبدیل کریں گے تو یہ 1 + 2 + 3 ہونے کی بجائے 3 + 2 + 1 بن جائے گا تو آئیے اسے ایک بار محفوظ کریں اور اسے چلائیں تو ہمیں وہی آؤٹ پٹ ملے گا جو 3 سے 1 ہے اور رقم کا صحیح حساب لگایا جائے گا جو کہ چھ ہے تو اس طرح ہم اگلے سوال کے بارے میں بات کر سکتے ہیں اگر ہم اگلے سوال کے بارے میں بات کریں گے تو لوپ کے اندر مختلف چیزوں کے بارے میں بات کریں گے۔ صارف صارف کے ذریعہ ایک عدد ان پٹ کا ٹیبل ہمیں ایک نمبر دے گا ہمیں اس کی میز کو پرنٹ کرنا ہوگا جیسے صارف نے دو دیا ہے



03:27:11

ہم دو کا ٹیبل پرنٹ کریں گے ہم پہلے دو، پھر چار، پھر چھ، پھر 8 10 12 14 16 18 اور 20 کیسے پرنٹ کریں گے اگر صارف ہمیں 42 دیتا ہے تو ہمیں 42 کا ٹیبل پرنٹ کرنا پڑے گا، جو ظاہر ہے کہ میں جلدی نہیں کر پاؤں گا، تو ہم نے اب تک کیا کیا، ہم نے ایک for لکھ دیا ہے، i = جس میں ہماری حالت ہے، ہم نے i = 1 کے اندر لوپ کیا ہے، جس میں ہم نے اپنی حالت + 1 کے اندر درج کی ہے۔ اس کے اندر کیا کرتے تھے، ہم پرنٹ i کرکے اپنا i پرنٹ کرتے تھے، لیکن اس بار ہم aa نہیں پرنٹ کریں گے، اس بار ہم کوئی اور فنکشن کریں گے اور وہ فنکشن 2 کا کیسا ہوگا، ہم 2 malla ba پرنٹ کریں گے۔



03:27:51

ہم 1 بھی لکھ سکتے ہیں، ہم 4 لکھ سکتے ہیں، 2 ملّا با 2، ہم 6 کو 2 م با 3 لکھ سکتے ہیں، کیونکہ یہ سب کیا ہیں، یہ دو کی میز ہے۔ اب ایک چیز دیکھیں، یہاں یہ دو مستقل ہیں، لیکن ہمارا یہ متغیر بڑھتا ہی جا رہا ہے، پہلے یہ ایک تھا، پھر یہ دو تھا، پھر 3 4 5، اگلا 6 7 8 9 10، تو یہ ویلیو بڑھتی ہی جاتی ہے، تو ظاہر ہے کہ یہ نمبر ہمارا تکرار کرنے والا نہیں ہوگا، یہ نمبر ہمارا آئٹم اے ہو گا، آئٹم معاملہ یہ ہے کہ جس کی ویلیو بدلتی رہے گی، یہ نمبر بدلتا رہے گا، اس طرح یہ نمبر بدلتا رہے گا۔ کوڈ



03:28:27

میں کیا کروں، ہم اپنی شے کی قیمت 1 سے شروع کریں گے اور اسے 10 تک لے جائیں گے، اسے 10 تک لے جائیں گے اور ہر بار اپنا نمبر پرنٹ کرائیں گے۔ تو پہلے نمبر 2*1 کو ضرب اور پرنٹ کیا جائے گا، پھر 2*2 کو ضرب اور پرنٹ کیا جائے گا، پھر 2*3 کو ضرب اور پرنٹ کیا جائے گا اور اس طرح ہم اپنے نمبروں کا پورا ٹیبل پرنٹ کر لیں گے۔ اس کے لیے ہم کوڈ لکھتے ہیں، پہلے ہم اپنا نمبر درج کریں گے۔ ہم نے نمبر درج کیا ہے، اس کے بعد ہم int i = 1 aa کے لیے ایک لوپ لکھیں گے جب تک کہ ہمارا سبق 10 کے برابر نہ ہو جائے۔



03:29:02

کوئی i + 10 نہیں ہے کیونکہ ہم صرف ایک سے 10 تک ٹیبل پر غور کر رہے ہیں اور ہر بار جب ہم فیصد پرنٹ کریں گے d b nn * aa نمبر * aa آئیے ہم اسے محفوظ کریں اور چلائیں، سب سے پہلے اگر ہم نمبر 2 ڈالیں گے تو 2 کا پورا ٹیبل ہمارے لیے پرنٹ ہوجائے گا، اب جو کام میں نہیں کرسکا، کمپیوٹر وہ کرے گا اور یہ مجھے دے گا، اس لیے t2 کا پرنٹ ہمیں دے دے گا۔ 42 کا پورا ٹیبل پرنٹ ہو چکا ہے اور بہت جلد ہمارے پاس آتا ہے، اس طرح اگر ہم کسی بھی نمبر کا ٹیبل پرنٹ کروانا چاہتے ہیں تو C کی مدد سے پرنٹ کروا سکتے ہیں۔



03:29:43

یہ آپ اپنی سکرین پر کر سکتے ہیں، پھر جب بھی کوئی ریاضی کا حساب چل رہا ہو اور کیلکولیٹر اردگرد نہ ہو اور دماغ خود استعمال کرنے کے قابل نہ ہو تو وہ ہمیں باہر لے جاتا تھا، یعنی چل رہے پورے بلاک سے باہر نکلتا تھا، جس کی وجہ سے تمام کیسز کے حالات آن نہیں ہو پاتے تھے، یہی وجہ ہے کہ ہم جہاں بھی بریک سٹیٹمنٹ لکھتے ہیں، اس کا مطلب ہے کہ جہاں بھی ہم بریک کرتے ہیں، اس کا مطلب ہے کہ ہم وہاں سے باہر نکلتے ہیں۔ لوپ سے باہر نکلنا ہے، ہم وہاں بریک لکھتے ہیں، مثلاً، اگر ہم نے ایک کوڈ لکھا ہے، ایک لوپ کے لیے، جس کے اندر ہم ایک استعمال کرتے ہیں۔



03:30:41

ہم int i = 1 i less ect 5 aa p پلس کے لئے ایک سے پانچ تک نمبر پرنٹ کر رہے ہیں اب اس میں ہم یہاں فیصد d b s aa پرنٹ کریں گے اگر ہم درمیان میں ایک شرط لکھتے ہیں اگر aa i equal to i equal 3 کا مطلب ہے جیسے ہی aa تین بن جائے تو یہ if شرط کا کام ہے کہ جیسے ہی میں بنتا ہے چیک کر رہا ہوتا ہے اور اس کا مطلب یہ ہے کہ ہمیں 3 کے آخر میں ٹوٹنا چاہئے اور ہمیں یہاں سے ٹوٹنا چاہئے۔ ہمیں اسے پرنٹ کروانا چاہیے اور ہم اسے محفوظ کر لیں گے اور اسے چلانے کے بعد ایک بار جب ہم آؤٹ پٹ کا تجزیہ کریں گے تو ہمیں ایک 2 پرنٹ کیا گیا اور یہ سب سے پہلے کیسے پرنٹ ہوا؟



03:31:31

ہمارے پاس ایک قدر تھی۔ جیسے ہی i کی قدر ایک تھی، ہم لوپ کے اندر چلے گئے۔ کیا i تین کی قدر ہے؟ نہیں، یہ تین نہیں ہے، پھر یہ سچ نہیں ہوگا۔ ہم نے ایک سے i پرنٹ کیا، i کی ویلیو i2 میں اپ ڈیٹ ہو گئی، پھر یہ شرط دوبارہ غلط ہو گئی، تو یہاں ہم نے دو پرنٹ کیے، پھر i کی ویلیو تین ہو گئی۔ جیسے ہی i کی قدر تین ہوگئی، یہ اگر شرط درست ہوگئی۔ پھر ہم بریک پر آئے۔ جیسے ہی ہم بریک پر آئے، بریک کیا کرتا ہے؟ یہ ہمیں لوپ سے باہر نکلنے پر مجبور کرتا ہے۔ تو ہم اس کے لیے مکمل طور پر باہر آئے اور یہاں آئے اور ہم نے پرنٹ کیا۔



03:32:03

یہ ہو گیا اور اس کا مطلب ہے کہ ہم نے باقی شرائط یا باقی اپ ڈیٹس کو نہیں دیکھا، پھر ہم نے یہ بیان نہیں دیکھا، نہ ہی ہم نے شرط کا خاتمہ دیکھا، ہم نے اپ ڈیٹ نہیں دیکھا، ہم نے کچھ نہیں دیکھا، آنکھیں بند کر کے ہم اپنے for loop سے مکمل طور پر باہر آجائیں گے اور پھر باہر جو کچھ بھی لکھا جائے گا، ہم اس پر عمل کریں گے، اس لیے لوپ کو مکمل طور پر کاٹنے یا لوپ کرنے کے دوران آپ کا کام یہ ہے کہ آپ لوپ کو مکمل طور پر کاٹ دیں۔ درمیان سے نکلیں اور اسے مکمل کریں، پھر ہم وہاں بریک لکھیں گے، پھر ہمیں اس سے مکمل وقفہ ملے گا۔



03:32:34

آپ باہر جائیں گے، اس کے لیے آئیے ایک سوال پوچھیں۔ سوال کا نام ہے نمبرز لینا جاری رکھیں کیونکہ صارف سے ان پٹ ایک طاق نمبر ہے۔ تو ہمیں سوال میں جو کرنا ہے وہ یہ ہے کہ ہمیں صارف سے کچھ نمبرز کے ان پٹ لیتے رہنا ہوں گے جیسے صارف نے 2 4 10 16 18 درج کیا ہے اور صارف سے اعداد کے ان پٹ لیتے رہنا ہے جب تک کہ صارف طاق نمبر داخل نہیں کرتا ہے، یعنی اگر وہ سات داخل کرتا ہے تو ہم یہیں رکیں گے یا ٹوٹ جائیں گے اور اس وقت تک ہمیں صارف سے نمبرز کے ان پٹ لیتے رہنا ہوں گے جب تک وہ نمبر داخل نہ کرے۔ اب اس کے لیے جب بھی ہم صارف سے کچھ ان پٹ لیتے ہیں۔



03:33:11

ایسا ہوتا ہے، ٹھیک ہے، اور اس کے لیے ایک شرط چلانی پڑتی ہے، ہم ہمیشہ do while loop over do while loop کو ترجیح دیتے ہیں کیونکہ فی الحال ہمارا کام صارف سے ان پٹ لینا ہے، نمبر نمبر، ایک بار جب ہم ان پٹ لیں گے، تب ہی ہم اس پر کچھ شرط لگا کر اسے چیک کر سکیں گے، اسی لیے پہلے کام کریں، پھر شرط لگائیں، اس لیے یہاں ہم تھوڑی سی منطق بنانے کی کوشش کرتے ہیں، باقی آپ کے اندر کوئی بھی سوال ہے، باقی ہم کیا کریں گے؟ کیا ہم do while loop بنائیں گے، so do اور بعد میں لکھیں گے جبکہ اب اس do while loop کے اندر ہمیں کام کرنا ہے



03:33:44

ہمیں کیا کرنا ہے کسی نمبر کا ان پٹ بار بار لینا ہے تو آئیے int کے اوپر ایک متغیر کی وضاحت کریں یہ ہمارا نمبر ہے اور ہر بار ڈو لوپ کے اندر ڈو لوپ کے اندر ہم نمبر کو scanf ان پٹ فیصد d کوما کے ساتھ لیں گے اور n اس طرح جب بھی نمبر ان پٹ آئے گا اور صرف تفریح ​​​​کے لئے ہم نے بھی اس نمبر کو حاصل کیا ہے کہ ہم نے اس نمبر کو کس شرط میں رکھا ہے اور ہم نے اس نمبر کو کس شرط میں رکھا ہے کہ ہم نے اس نمبر کو آؤٹ پٹ کیا ہے اور اس کو فیصد کے طور پر رکھا ہے۔ صورت میں یا تو ہم یہ رکھ سکتے ہیں کہ جیسے ہی ہمارا n طاق ہو جائے تو ہمیں باہر نکل جانا چاہیے لیکن



03:34:22

اس صورت میں، حالت میں، ہم صرف ایک لکھتے ہیں. حالت میں ایک لکھنے کا مطلب یہ ہے کہ ہم سچ لکھ رہے ہیں۔ شرط ہر بار سچ ہو گی۔ اس سے کوئی فرق نہیں پڑتا ہے کہ کوئی بھی نمبر آتا ہے، ہم ہمیشہ اپنی حالت کے اندر سچ ڈال رہے ہیں. ہم نے اب تک جو لوپ بنایا ہے وہ ایک do while loop ہے۔ جب تک ہماری حالت جھوٹی نہ ہو، حالت کبھی نہیں گرے گی کیونکہ ہم نے ایک کو وہاں رکھا ہے۔ لیکن اس کے اندر سے نکلنے کا ایک راستہ ہے، وہ ہے توڑنا۔ اور ہم کیسے ٹوٹیں گے، ہم تب ٹوٹیں گے جب ہماری حالت آئے گی، یعنی جیسے ہی صارف ایسے ن میں داخل ہوتا ہے



03:34:57

یہ ایک طاق عدد ہے۔ ہم طاق نمبر کو کیسے چیک کریں گے؟ n فیصدی ماڈیولو 2 = = 0 یہاں یہ 0 کے برابر نہیں ہوگا۔ اس صورت میں ہم ایک وقفہ لیں گے۔ آئیے اس کو تھوڑا سمجھ لیں۔ ہم نے ایک متغیر کی وضاحت کی ہے اور جس کے اندر ہم اپنے نمبر کا ان پٹ لینے جا رہے ہیں۔ پھر ہم نے do while لوپ بنایا ہے۔ سب سے پہلے ہم اپنا نمبر سکین کر رہے ہیں۔ اس کے اوپر ہم نے ایک اور پرنٹ بیان لکھا ہے۔ نمبر ڈال کر ہم نے صارف سے نمبر لیا ہے۔ اس کے بعد ہم نے وہ نمبر بھی واپس پرنٹ کر لیا ہے تاکہ یہ چیک کیا جا سکے کہ صارف نے کیا پرنٹ کیا تھا۔ اس کے بعد ہم اس کی جانچ کر رہے ہیں۔



03:35:32

چاہے وہ عدد طاق ہو یا جفت۔ اس حالت میں ہم چیک کر رہے ہیں کہ آیا وہ عدد طاق ہے، اس کا مطلب ہے کہ اگر n modulo two صفر کے برابر نہیں ہے، تو اس کا مطلب ہے کہ عدد ایک طاق عدد ہے۔ جیسے ہی کوئی طاق نمبر آئے گا ہم ٹوٹ جائیں گے۔ ہم ٹوٹ چکے ہیں، اس کا مطلب ہے کہ ہم لوپ سے باہر آ گئے ہیں اور آخر میں چھوڑ کر ہم کچھ بھی پرنٹ کر سکتے ہیں۔ فرض کریں کہ ہم اسے آخر میں چھوڑ کر پرنٹ کریں گے۔ شکریہ تو یہ do while لوپ اس وقت تک چلے گا جب تک کہ ہمارا صارف جفت نمبر داخل کرتا رہے گا۔ آئیے اسے محفوظ کریں اور چلائیں۔ آئیے نمبر دو درج کرتے ہیں۔ اگلی بار ہم اس میں داخل ہوئے۔



03:36:06

تو دو ہمارے لیے چھاپے گئے۔ اب اگلی بار جب ہم چار داخل کریں گے تو ہمارے لیے چار پرنٹ ہو جائیں گے۔ اس کے بعد ہم چھ داخل کرتے ہیں، چھ پرنٹ ہو جاتے ہیں۔ ہم 18 درج کرتے ہیں، 18 پرنٹ ہو جاتے ہیں۔ ہم 20 درج کرتے ہیں، 20 پرنٹ ہو جاتے ہیں۔ لیکن ہم ایک طاق نمبر داخل کرتے ہیں، ہم تین درج کرتے ہیں، تو یہ یہاں پرنٹ ہوجاتا ہے۔ شکریہ اور ہمارا پروگرام یہیں ختم ہوتا ہے۔ تو اس طرح ہم ایسا لوپ بنا سکتے ہیں جو صارف کے ان پٹ سے کنٹرول ہو گا۔ لہذا، صارف ہمیں جو بھی ان پٹ دیتا ہے، ہم اس کے مطابق تبدیلیاں کر رہے ہیں اور اسی کے مطابق ہم اپنا لوپ چلا رہے ہیں۔



03:36:36

اب اگلا سوال جس کے بارے میں ہم بات کریں گے وہ ہے نمبرز لیتے رہیں کیونکہ صارف سے ان پٹ ایک عدد داخل کرتا ہے جو سات کا ضرب ہوتا ہے، یعنی صارف سے ان پٹ لیتے رہیں جب تک کہ صارف ایک نمبر داخل نہ کرے جو سات کا ضرب ہو، جو سات کے ٹیبل میں آتا ہے، تو یہ بہت آسان ہے، بالکل اسی طرح جیسے ہم نے ابھی کوڈ لکھا ہے، بالکل ایسا ہی ہے، بس تھوڑی سی تبدیلی کرنا پڑے گی، نمبروں کو بریک کرنے کے لیے یہ شرط رکھی جائے گی، جو نمبر درج کرنے کی ضرورت ہے جیسے ہی n 7 کے برابر 0 کے برابر ہو جاتا ہے، اس شرط کا مطلب ہے کہ نمبر n a ہے۔



03:37:10

7 کا ملٹیپل اسی طرح ہم بریک کریں گے تو آئیے اس کو بھی چلائیں، کمپائل رن کریں، سب سے پہلے ہم چھ درج کر رہے ہیں، کوڈ چل رہا ہے، تین درج کیا گیا، یہ تین میں بھی چل رہا ہے، 12 میں بھی چل رہا ہے، یہ 12 میں بھی چل رہا ہے لیکن جیسے ہی میں 14 درج کرتا ہوں تو شکریہ پرنٹ ہو جائے گا، کوڈ یہاں ختم کیوں ہو جاتا ہے کیونکہ 14 کا نمبر یہاں پر ba1 کے 72 کے برابر ہے۔ قطار، تو یہاں سے ہم بریک، بریک کرتے ہیں، جس کا مطلب ہے کہ لوپ کی کوئی اور لائن پاس نہیں ہوئی ہے اور جو کچھ لوپ کے باہر لکھا جائے گا اب اس پر عمل ہونا شروع ہو جائے گا، اب ایک اور خاص چیز بریک ہے۔



03:37:48

اس کے بارے میں ہمارا بریک بھی ہمیں نیسٹڈ لوپ سے باہر نکلنے کا باعث بنتا ہے، یعنی آپ نے a for loop کے اندر کچھ چیزیں لکھی ہیں اور اس کے اندر آپ نے اپنا سیکنڈ for loop لکھا ہے، اس کے اندر آپ نے کچھ چیزیں لکھی ہیں، تو اگر یہاں بریک لکھا جائے گا تو یہ ہمیں اس لوپ سے بھی باہر لے جائے گا اور یہاں کی سٹیٹمنٹس چلیں گی، اس لیے جب بھی آپ کو بریک کا استعمال کرنا ہو، آپ کو اسے بہت سوچ سمجھ کر استعمال کرنا ہوگا کہ آپ کے پروگرام کو کیسے کنٹرول کیا جا رہا ہے۔ اگلا ہم جاری بیان کے بارے میں پڑھنے جا رہے ہیں۔



03:38:23

یہ وقفے کے برعکس ہے۔ جاری رکھیں۔ بریک کہتا ہے کہ سارے کام یہیں بند کرو اور آگے بڑھو۔ Continue کہتا ہے کہ ابھی موجودہ کام بند کرو اور اگلا کام شروع کرو۔ اس لیے جب بھی ہمیں اگلی تکرار پر جانا ہو، جب بھی ہم اگلی بار پر جانا چاہتے ہیں تو ہم Continue لکھتے ہیں، جس کا مطلب ہے کہ موجودہ ٹرن کی تمام لائنیں حذف ہو جائیں گی، اگلی لائن چلائی جائے گی۔ آئیے اس کی ایک مثال لکھتے ہیں۔ کوڈ لکھنے سے چیزوں کو بہتر طور پر سمجھا جائے گا۔ int i = 1 i i le ect 5 i p plus کے لیے اب ہم ایک سے پانچ تک تمام نمبر پرنٹ کریں گے۔



03:38:56

میں یہ کرنا چاہتا ہوں لیکن مجھے نمبر تین سے نفرت ہے، یہ بہت بدقسمت لگتا ہے، میں اسے پرنٹ نہیں کرنا چاہتا، میں باقی تمام نمبر پرنٹ کرنا چاہتا ہوں، تو میں یہاں کیا لکھوں، سب سے پہلے میں پرنٹ اسٹیٹمنٹ لکھوں، فیصد d b n اور ہمارا نمبر n یا ہمارا نمبر aa لکھوں اور سب سے اوپر اسے چیک کریں، اگر ہمارا aa 3 کے برابر ہے، تو یہ نمبر ہماری خوش قسمتی نہیں ہے، تو ہم یہ نمبر نہیں چھپائیں گے۔ صورت میں ہم جاری رکھیں گے، اگر ہم یہاں بریک لکھتے ہیں، تو اس کا مطلب ہے کہ ہم اس لوپ سے نکل جائیں گے۔



03:39:27

اگر مکمل نکلتا تو چار اور پانچ بالکل بھی پرنٹ نہ ہوتے، یعنی تین بالکل بھی نہ ہوتے، لیکن کوئی فر ف بھی نہ ہوتا، لیکن ہم نے continue لکھا، آئیے دیکھتے ہیں جاری سے آؤٹ پٹ کیا آتا ہے، جاری سے آؤٹ پٹ 1 2 3 تھا، ہماری سکپ ہو گئی اور 45 آ گیا، اس لیے جب بھی ہم کسی چیز کو چھوڑنا چاہتے ہیں، ہم ان کو چھوڑنا چاہتے ہیں اور کچھ مخصوص لائنوں کو چھوڑنا چاہتے ہیں۔ آئٹم، پھر ہم وہاں جاری رکھیں کا استعمال کرتے ہیں، جاری کہتے ہیں آگے جاری رکھیں، موجودہ چیز کو جانے دیں، موجودہ چیز کو چھوڑ دیں۔



03:39:57

دو، تو یہ ہمارے جاری رہنے کا بنیادی مطلب ہے۔ اب اگر ہم اس بارے میں سوال کریں تو چھ کے علاوہ ایک سے دس تک کے تمام نمبر پرنٹ کریں، یعنی چھ کے علاوہ ایک سے دس تک کے تمام نمبر پرنٹ کرنے ہیں۔ ہم یہ کیسے کریں گے؟ بس اسے یہاں لکھ دیں۔ کنڈیشن میں، ہم اپنی اسکیپ کنڈیشن میں ایک سے 10 لکھیں گے۔ جب میں 6 سال کا ہو جاؤں تو پھر چھوڑ دیں یا جاری رکھیں۔ اگر ہم اسے چلاتے ہیں تو ہمیں آؤٹ پٹ ملتا ہے، ہمیں ایک سے پانچ اور سات سے 10 تک کے نمبر ملے ہیں۔ ہمارے چھ کو چھوڑ دیا گیا ہے، ہم نے اسے پرنٹ نہیں کیا۔ اگر ہم اگلے سوال کے بارے میں بات کریں،



03:40:31

5 سے 50 تک تمام طاق نمبر پرنٹ کریں یہ ہمارا سوال ہے۔ ہمیں pa سے 50 کے درمیان آنے والے تمام طاق نمبروں کو پرنٹ کرنا ہے۔ پرنٹ کرنے کے لیے آئیے int aa = 0 aa کے لیے کوڈ لکھیں اس وقت ہم صفر سے شروع نہیں کریں گے بلکہ پانچ سے کریں گے اور aa 50 کے برابر رہے گا۔ جب تک aa جمع رہے گا ہم اسے ہر بار پرنٹ کریں گے۔ اب جب بھی ہمارا aa طاق نمبر ہے تو ہمیں اسے پرنٹ کرنا ہوگا۔ اگر یہ بھی ہے تو اسے نہ چھاپیں۔ ایسا کرنے کے متعدد طریقے ہیں۔ آپ جاری رکھیں کی مدد سے بھی یہی سوال کر سکتے ہیں۔ آپ اسی سوال کو الٹے طریقے سے بھی کر سکتے ہیں۔



03:41:16

یعنی جس طرح سے میں مظاہرہ کروں گا، مخالف حالات کو مدنظر رکھتے ہوئے ایک ہی سوال کا جواب دینے کے متعدد طریقے ہیں، اور جب ہم پروگرامنگ کے ابتدائی مرحلے میں ہوں تو ہمیں متعدد طریقے تلاش کرنے چاہئیں۔ میں نے ایک سوال کو ایک طرح سے حل کیا ہے، اب میں اسے دوسرے طریقے سے کرنے کی کوشش کرنا چاہتا ہوں۔ پہلے میں نے is equal to is equal to چیک کیا تھا، اب میں اسے not equal to کے ساتھ کرنے کی کوشش کروں گا۔ جب بھی ہم سوال کو شروع میں اس طرح پروگرام کرتے ہیں تو ہماری تخلیقی صلاحیت اور منطقی قوت بہت بڑھ جاتی ہے کیونکہ



03:41:43

ہم ایک ہی صورت حال کے ساتھ ایک سے زیادہ کیسز کا تصور کر رہے ہیں، جب پلیسمنٹ کے وقت یا کالج کے وقت آپ کو جواب دینے کے لیے ایک کوڈنگ سوال دیا گیا ہو گا، تو اس میں کون سے تمام کارنر کیسز آ سکتے ہیں، جہاں آپ کا کوڈ پھنس سکتا ہے، آپ ان کنڈیشن سٹیٹمنٹس کا بخوبی اندازہ لگا سکیں گے، تو آئیے سوال کی طرف آتے ہیں، سب سے پہلے ہمیں یہ دیکھنا ہے کہ آیا ہمارا نمبر طاق ہے یا نہیں، اس کا مطلب کیا ہے کہ ہم ماڈل کے برابر ہیں یا نہیں؟ ہمارا نمبر طاق ہے، اس لیے یہاں ہم اپنی شرط لکھیں گے۔



03:42:17

اندر کیا کرنا ہے، اگر یہ طاق ہے تو ہم اسے فیصد dni پرنٹ کریں گے ورنہ els کے اندر کیا کرنا ہے، ہم els کے اندر کچھ نہیں کرنا چاہتے، els کے اندر els لکھنے کی ضرورت نہیں ہے کیونکہ els کے اندر کچھ کرنا نہیں ہے، تو آئیے ہم یہ کریں، اسے محفوظ کریں اور اسے اپنے ٹرمینل سے چلائیں، ہمیں کیا آؤٹ پٹ ملے گا 5 7 9 9 11 کے درمیان احتیاط سے مشاہدہ کریں کہ آپ ان تمام نمبروں کا مشاہدہ کریں گے 50، تو ہم اس طریقے سے بھی کوڈ لکھ سکتے ہیں، اگلا سوال کہتا ہے کہ a کا فیکٹریل پرنٹ کریں۔



03:42:50

نمبر n کا مطلب ہے کہ ایک عدد n ہے، اس کا فیکٹریل ہم پرنٹ کرنا چاہتے ہیں۔ سب سے پہلے بات کرتے ہیں کہ اس چیز کو فیکٹریل کیا کہتے ہیں۔ کسی بھی عدد کا فیکٹوریل اس نمبر کو ایک سے تمام تعداد میں گھٹا کر ضرب کرنا ہے۔ مثال کے طور پر اگر ہم ایک کا فیکٹوریل تلاش کرنا چاہتے ہیں، ریاضی میں ایک فجائیہ نشان کو ایک فیکٹوریل کہا جاتا ہے، تو یہ ایک ہوگا۔ اگر ہم ایک کے فیکٹوریل کو تلاش کرتے ہیں، تو یہ 1 یا 2 ہوگا؛ اگر ہم فیکٹریل کو تلاش کرتے ہیں، تو یہ 1*2*3 = 6 ہوگا، یہ = 2 ہوگا؛ 4 فیکٹوریل 1 * 2 * 3 * 4 = 24 5 فیکٹوریل ہوگا 1 * 2 * 3 * 4 * 5 = 120



03:43:37

تو اس طرح ہمارے فیکٹوریلز کا حساب لگایا جاتا ہے۔ اب یہاں ضرب یہ ہے کہ یا تو ہم ایک سے پانچ تک ضرب کر سکتے ہیں یا پانچ سے ایک سے ضرب کر سکتے ہیں۔ ایک عدد کو دوسرے نمبر سے ضرب کرنے پر، آؤٹ پٹ ایک ہی ہے، یعنی a *b بھی وہی ہے، b*a بھی وہی ہے، اور یہ جمع میں بھی یکساں ہے، یہ مائنس اور ڈیوائیڈ میں بھی یکساں نہیں ہے۔ لہذا اگر ہمیں کسی بھی عدد کا فیکٹوریل تلاش کرنا ہے، تو اس کے لیے صرف ایک لوپ لگائیں۔ لوپ کہاں سے شروع ہونا چاہئے، یہ ہمارے نمبر سے ہی شروع ہونا چاہئے، int i = 1 سے شروع ہوتا ہے۔



03:44:07

اگر یہ ہوتا ہے اور n تک جاتا ہے تو ہم f ایک سے n تک لیں گے یا اسے n سے ایک لیں گے یا اگر یہ ایک سے n ہے تو ہم ہر بار i پلس پلس کریں گے اور ایک اور متغیر فیکٹوریل لیں گے، ہم فیکٹوریل متغیر ee کو ایک کے ساتھ شروع کریں گے جب ہم نے ایک سے آخر تک رقم کی تھی، پھر ہم نے اسے شروع کیا تھا جب ہم نے اسے ایک سے آخر تک شروع کیا تھا، جب ہم اس کی ابتدا کیوں کرتے ہیں، جب ہم اس کو row کے ساتھ کیوں بناتے ہیں رقم لینا چاہتے ہیں، اگر ہم قطار کے ساتھ شروع کرنا چاہتے ہیں، تو ہم ہر بار اپنے نمبر aa سے ابتداء کو ضرب دیں گے، یہ کوڈ جفت کوڈ سے بہت ملتا جلتا نظر آتا ہے، ہم جمع میں کیا کرتے ہیں؟



03:44:49

ہم کرتے تھے sum + i یہاں ہم جو کر رہے ہیں وہ ہے فیکٹوریل = فیکٹوریل کو i سے ضرب اور اس طرح حتمی فیکٹوریل کی ویلیو جو نکلے گی وہ ہمارے نمبر کا فیکٹوریل بن جائے گی تو آئیے اس کو بھی آزمائیں کوڈ کرنے کے لیے، سب سے پہلے ہمیں int n کے اوپر ایک نمبر بنانا ہوگا پھر ہم انٹر نمبر کو پرنٹ کریں گے اس کے بعد ہم اپنے نمبر کو اسکین کریں گے Percentage اور d m loop پرسنٹ چلانے سے پہلے ہم کیا کریں گے۔ آئیے ہم ایک اور متغیر int factorial = 1 کی وضاحت کرتے ہیں اب لوپ کے اندر، سب سے پہلے ہم i i i کے ساتھ شروع کریں گے۔



03:45:28

e ni + p اور لوپ کا کیا کام ہے فیکٹوریل کا حساب لگانا ہے تو فیکٹوریل i برابر ہے فیکٹوریل کو i سے ضرب کر کے اور آخر میں ہم اپنے حتمی فیکٹوریل کی ویلیو پرنٹ کریں گے فائنل فیکٹوریل فیصد d ہے جو کہ ہمارا فیکٹر ہے اب ہمیں فیکٹوریل کے بارے میں ایک بات ذہن میں رکھنی ہے کہ فیکٹوریل کی ویلیو اگر آپ کو ضرب 1 میں بہت کم ہو جائے تو پانچ میں اضافہ ہو جائے گا پھر قیمت صرف 15 ہوگی جو کہ ایک چھوٹی قدر ہے لیکن اگر آپ 10 کو پانچ سے ضرب دیں گے تو قدر 50 ہوجائے گی تو اگر



03:46:07

فیکٹریئلز بہت تیزی سے بڑھتے ہیں، یعنی تقریباً تیزی سے، یہی وجہ ہے کہ اگر آپ اپنے int ڈیٹا ٹائپ کا فیکٹوریل بنا رہے ہیں، تو اس میں بہت کم نمبرز ہوں گے جنہیں فیکٹوریل اسٹور کر سکے گا، یعنی اگر آپ اس میں اتنی بڑی تعداد دیتے ہیں جیسے آپ 50 کا فیکٹوریل ڈھونڈنا چاہتے ہیں، تو ایسی صورت میں int بہت چھوٹا ہو جائے گا اور کچھ کیسز میں آپ کو ڈیٹا اسٹور کرنے کے لیے فیکٹریل بڑی ہو جائے گی، اس لیے آپ اسے استعمال کر سکیں گے۔ اتنا بڑا کہ کسی بھی نمبر کا ڈیٹا ٹائپ اسے اسٹور نہیں کر سکے گا، تو ایسا کرنے کے لیے



03:46:39

مختلف طریقے ہیں، جو آپ کے مسابقتی پروگرامنگ یا انتہائی DSA سائیڈ میں جاتے ہیں جب آپ سٹرنگ میں فیکٹوریل اسٹور کر رہے ہوتے ہیں، لیکن C میں کوئی سٹرنگ نہیں ہوتی، اس لیے آپ کی کریکٹر اری استعمال کی جائے گی۔ یہ سب چیزیں کیا ہیں، ہم اس کا تفصیلی مطالعہ آئندہ ابواب میں کریں گے، فی الحال جو لوگ دوسری زبانوں سے آرہے ہیں وہ اس کو بہتر طور پر سمجھ سکیں گے، بنیادی بات یہ ہے کہ جب آپ اس پروگرام کو چلاتے ہیں تو بڑے نمبر دینے کے بجائے، فیکٹوریل کیلکولیشن کرنے کے لیے، آپ چھوٹے نمبروں کے فیکٹریل کا حساب لگائیں گے، لہذا



03:47:05

وہ ہمارا پروگرام کرے گا اور ہمیں دے گا۔ اب اس کوڈ کو یہاں محفوظ کر کے چلائیں۔ سب سے پہلے، آئیے 3 کے فیکٹوریل کا حساب لگاتے ہیں۔ حتمی فیکٹوریل چھ ہے جو درست ہے۔ اب اگر ہم 5 کا فیکٹوریل چلانا چاہتے ہیں تو 120 ہے۔ یہ بھی درست ہے۔ اگر ہم 6 کا فیکٹوریل ڈھونڈتے ہیں، یعنی 720۔ اب فرض کریں کہ ہم بد دماغ ہیں اور ہم 50 داخل کرنا چاہتے ہیں، تو ہمیں ایک قطار ملے گی۔ کیوں؟ کیونکہ اس نمبر کا حتمی فیکٹریل کھو گیا ہے۔ اس ڈیٹا کی قسم کو اس میں محفوظ نہیں کیا جا سکتا۔ اس لیے بڑی تعداد کے ساتھ ٹیسٹ نہ کریں، چھوٹے نمبروں سے ٹیسٹ کریں۔



03:47:40

ہم نمبروں کے ساتھ جانچ کر سکتے ہیں۔ اگلا سوال جس کے بارے میں ہم بات کریں گے ایک عدد n کے لیے ٹیبل کے ریورس پرنٹ کرنا ہے۔ اس کا مطلب ہے کہ صارف ہمیں یہ نمبر دے گا۔ ہمیں اس کا ٹیبل پرنٹ کرنا ہے۔ لیکن ہمیں سیدھے ٹیبل کو پرنٹ کرنے کی ضرورت نہیں ہے۔ ہمیں اسے الٹ ترتیب میں کرنا ہے۔ مثال کے طور پر، اگر صارف نے n = 2 دیا ہے، تو ہم 20 پرنٹ کریں گے، پھر 18 16 14 12 10 8 6 4 2۔ اس طرح، اگر ہمیں ٹیبل کو الٹ ترتیب میں پرنٹ کرنا ہے، تو کچھ نہیں۔ ہم پہلے کیا کرتے تھے، ہم اسے 2*1 2 * 2 2 * 3 2 * 4 لکھتے تھے۔ اس بار ہم 2 * 10 سے شروع کریں گے، پھر 2 * 9 2 * 8۔ اور اس طرح سے، تو یہ ہے۔



03:48:21

ہماری آئٹم ہمارے لوپ کے لیے r بن جائے گی اور ہر بار ہم قدر کو کم کریں گے یعنی i مائنس مائنس۔ ہم اس کے لیے کوڈ بھی لکھیں گے۔ ہم صارف سے درج کردہ نمبر حاصل کریں گے اور اس کے بعد ہم اپنے نمبروں کے جدول کو پرنٹ کرنے جا رہے ہیں، لہذا اس وقت کے لیے ہم اپنے آئٹم نمبر کو اپنے نمبروں کے ساتھ شروع کریں گے یا معذرت کے ساتھ آئٹم نمبر ہم 10 کے ساتھ شروع کریں گے پھر جب تک کہ i 1 i مائنس مائنس سے بڑا نہ ہو جائے اور ہر بار ہم فیصد پرنٹ کریں گے d سے n نمبر i کو ضرب دے کر۔ ہم اسے بچائیں گے اور چلائیں گے۔ ہم اپنا نمبر درج کریں گے۔



03:49:02

اگر ہم دو کرتے ہیں، تو دو کا یہ پورا ٹیبل الٹ ترتیب میں پرنٹ کیا گیا ہے، 20 سے شروع ہو کر دو پر ختم ہوتا ہے۔ تو، اس طرح سے، ہم میزوں کو بھی الٹ ترتیب میں پرنٹ کر سکتے ہیں۔ آخری سوال جس پر ہم اس باب میں بحث کریں گے اس کا نام ہے 5 اور 50 کے درمیان 5 اور 50 کے درمیان تمام نمبروں کا حساب لگائیں، یعنی 5 اور 50 کو بھی گننا ہوگا۔ ہمیں 5 سے 50 تک کے تمام نمبروں کا حساب لگانا ہے اور اسے اسکرین پر پرنٹ کرنا ہے۔ ہم اسے کیسے پرنٹ کریں گے؟ آئیے اس حصے کو ہٹا دیں اور ایک متغیر لیں۔



03:49:35

آئیے لیتے ہیں int sum = 0 اس بار ابتداء پانچ سے ہوگی اور یہ اس وقت تک ختم ہوگی جب تک کہ رقم 15 کے برابر نہ ہوجائے اور آخر میں ہم i++ کریں گے اور یہاں ہم کریں گے sum = sum + i یا ہم اس کا مختصر ہاتھ + = i لکھ سکتے ہیں اور آخر میں ہمیں پرنٹ شدہ رقم کا فیصد ملے گا۔ آئیے اسے بچاتے ہیں۔ آئیے کوڈ کا تھوڑا سا تجزیہ کرتے ہیں، ہم نے صفر سے رقم شروع کی۔ ہم نے اپنا لوپ پانچ سے شروع کیا اور اسے ختم کیا جب i کی قدر 50 ہو گئی۔ آہستہ آہستہ یہ ایک ایک کر کے بڑھے، پہلے یہ پانچ، پھر چھ، پھر سات، پھر آٹھ ہو گئے۔



03:50:19

ہوتا یہ ہے کہ جب بھی ہم اپنی رقم کے اندر 'a' کی قدر جمع کریں گے، یعنی 5 + 6 + 7 + 8 جب تک کہ ہم 50 تک پہنچ جائیں اور آخر میں ہم اپنی رقم کی قیمت پرنٹ کریں گے، آئیے اسے محفوظ کریں اور اسے چلائیں اور دیکھیں، جب ہم مرتب کرتے ہیں، تو ہمیں 5 سے 50 تک کے تمام نمبروں کا مجموعہ ملتا ہے اور 1 2 cul 6 ہونے پر تمام طلباء کو شک ہوتا ہے اور وہ 5 کیل کر سکتے ہیں۔ دستی طور پر یا خود کر سکتے ہیں، یہ ہمارے کوڈ کی تصدیق کرنے کا ایک اچھا طریقہ ہو گا، اس لیے ابھی کے لیے، میں امید کرتا ہوں کہ یہ بہت سے پریکٹس سوالات کافی ہیں کیونکہ



03:50:54

میرا خیال ہے کہ جب میں نے اپنا سی پڑھا یا پلیسمنٹ کے لیے بیٹھا تو اس وقت تک ہم اس باب کو کافی حد تک سمجھ چکے ہوں گے اور ہم ہوم ورک کے مسائل خود بخوبی حل کرنے میں کامیاب ہو چکے ہوں گے۔ اگر اب بھی شکوک و شبہات باقی ہیں تو پھر ایک بار پھر ہمیں لیکچر میں تھوڑا سا ذکر کرنے کی ضرورت ہے۔ میں نے اہم تصورات، اہم چیزوں پر بحث کرنے کی پوری کوشش کی ہے، جہاں زیادہ تر طلباء غلطیاں کرتے ہیں، میں نے کوشش کی ہے کہ ان مسائل کے ساتھ ساتھ ان تصورات کو بھی مکمل طور پر زیر بحث لایا جائے۔



03:51:22

میں نے بہت اچھے طریقے سے سمجھانے کی کوشش کی ہے۔ اب اس کے بعد ہم تھوڑا سا وقفہ لے سکتے ہیں، تھوڑا سا وقفہ لے سکتے ہیں، تھوڑا سا پانی پی سکتے ہیں اور اپنے ہوم ورک کے مسائل حل کر سکتے ہیں۔ اور اس کے بعد ہم اپنے باب پانچ کی طرف بڑھنے والے ہیں۔ اور اب ہم اپنے باب پانچ کی طرف بڑھ رہے ہیں جسے فنکشنز اور ریکریشن کہتے ہیں۔ اب افعال ایک بہت اہم موضوع ہے۔ جب بھی ہم کسی بھی زبان کے بارے میں بات کرتے ہیں، فنکشنز جو لوپس کی طرح ہوتے ہیں یا ہمارے مشروط بیانات کی طرح بنیادی کور پروگرامنگ کے تصور کے تحت آتے ہیں جو بالکل بنیادی ہے۔



03:51:50

یہ آپ کو پروگرامنگ کے تصورات سکھا رہا ہے جسے آپ نہ صرف C بلکہ دوسری زبانوں میں بھی اپلائی کریں گے۔ اس کے ساتھ، اگر ہم تکرار کے بارے میں بات کرتے ہیں، تو C میں ہمیں تکرار کی ایک بہت ہی آسان شکل نظر آئے گی جس میں اگر کبھی کالج کے لوگ آپ سے کوئی سوال پوچھتے ہیں یا پلیسمنٹ والے لوگ C سے متعلق سوالات پوچھتے ہیں تو وہ آپ سے بہت بنیادی سوالات پوچھتے ہیں لیکن ہمیں تکرار کی اصل طاقت اس وقت ملتی ہے جب ہم ڈیٹا سٹرکچر اور الگورتھم سیکھ رہے ہوں گے، چاہے ہم اسے C++ میں سیکھیں یا اب جب ہم اسے C++ میں سیکھیں گے۔



03:52:19

جب ہم ڈیٹا سٹرکچر اور الگورتھم سیکھتے ہیں تو اس میں کچھ پیچیدگیاں آتی ہیں جیسے درخت، گراف اور بہت سی دوسری چیزیں فنکشنز کی مدد سے لاگو ہوتی ہیں۔ تو سب سے پہلے، آئیے بات کرتے ہیں کہ فنکشنز اصل میں کیا ہیں۔ بچپن میں اگر ہم نے کبھی گھر بیٹھے ٹی وی دیکھا ہوتا تو آج کل سارے چینل اے سے واپس چلے جاتے تھے، ٹی وی کو میوٹ کرنے کے لیے ایک میوٹ بٹن ہوتا تھا اور ٹی وی کو آن یا آف کرنے کے لیے پاور بٹن ہوتا تھا۔ اب اگر ہم اس ٹی وی ریموٹ کا موازنہ اپنے پروگرام سی سے کریں تو اس میں کیا ہے؟



03:53:26

مختلف بٹن ہوں گے، ہر بٹن کا ایک فنکشن ہوگا، فنکشن C کے اندر ایک ایسا حصہ ہے جو ہمارے لیے کچھ کام کرتا ہے، یہ ہم سے کچھ ان پٹ لیتا ہے، پھر یہ کام کرتا ہے اور پھر کچھ آؤٹ پٹ دیتا ہے جیسے کہ اگر ہم ریموٹ کے بٹن کے بارے میں بات کرتے ہیں، تو ہم نے اسے دبایا، ہم نے اسے ان پٹ دیا، پھر اس نے ہمارے لیے چینل تبدیل کیا یا والیوم بڑھایا، یہ وہی ہوا یا ہم اس کو آؤٹ پٹ کہہ سکتے ہیں، اس طرح سے ہم اپنے کام کو آؤٹ پٹ کے طور پر اضافی نہیں کہہ سکتے۔ C کے اندر اور افعال بہت طاقتور ہیں۔



03:53:59

مثال کے طور پر، اگر ہم سادہ زبان میں یا اس زبان میں فنکشن کے بارے میں بات کریں جو آپ اپنے امتحانات میں لکھیں گے، تو فنکشن کوڈ کا ایک بلاک ہے جو کسی خاص کام کو انجام دیتا ہے، یعنی ایک فنکشن ہمارے پروگرام کا وہ بلاک ہے، یہ وہ حصہ ہے جو کسی خاص کام کو انجام دیتا ہے، اور سادگی کے لیے، ایک فنکشن کا صرف ایک کام ہوتا ہے، مثال کے طور پر، اگر کوئی فنکشن ہے جس کا والیوم بڑھانا ہے، تو یہ صرف چینل کا حجم بڑھائے گا، نہ کہ اس کا حجم بڑھے گا، نہ ہی دوسرے کام کو کم کرے گا۔ ٹی وی کو خاموش کریں، صرف ٹی وی کو خاموش کر دیں گے۔



03:54:32

یہ صرف خاموش رہے گا، یہ نہ تو حجم میں اضافہ کرے گا اور نہ ہی اسے کم کرے گا۔ اس طرح ہر سی فنکشن کا ایک کام ہوتا ہے اور یہ صرف وہی کام کرتا ہے۔ ہم اس سے دوسرے کام کروانے کی کوشش نہیں کرتے ورنہ ہمارا پروگرام پیچیدہ ہو جاتا ہے۔ اب اگر ہم ڈایاگرام کی مدد سے فنکشن کو سمجھیں تو ہمارا فنکشن ہمارے لیے کچھ کام کرتا ہے، سب سے پہلے یہ ہم سے کچھ آرگیومنٹ لیتا ہے، آرگیومینٹس کا مطلب ہے کہ یہ کچھ ان پٹ، ان پٹ پیرامیٹرز لیتا ہے، ان پیرامیٹرز کی بنیاد پر یہ ہمارے لیے کچھ کام کرتا ہے اور آؤٹ پٹ میں ہمیں نتیجہ واپس کرتا ہے۔



03:55:04

اب C یا کسی بھی پروگرامنگ لینگویج میں فنکشنز کا بڑا استعمال اس لیے ہے کہ اسے متعدد بار استعمال کیا جا سکتا ہے، یعنی ہم ایک ہی فنکشن کو بار بار استعمال کر سکتے ہیں۔ ٹی وی ریموٹ میں ہم چینل یا پاور بٹن کو تبدیل کرنے کے لیے والیوم بٹن یا بٹن کو لاکھوں بار دبا سکتے ہیں، اگر ہم نے ٹی وی بہت زیادہ دیکھا ہے تو ضرور اسے آن اور آف کیا ہوگا۔ تو فنکشن ایک ایسا حصہ ہے جو ایک کام کرتا ہے اور ایک ہی وقت میں ہم ایک ہی کام کو جتنی بار چاہیں کر سکتے ہیں۔



03:55:34

یہ کیا جا سکتا ہے۔ دوسری خاصیت یہ ہے کہ یہ کوڈ کی دوبارہ استعمال میں اضافہ کرتا ہے۔ اگر ہم اپنے کوڈ کو دیکھیں تو یہ انگوٹھے کا اصول ہے جس پر میں عمل کرتا ہوں کہ اگر کوڈ میں کسی چیز کو تین بار یا تین بار سے زیادہ کرنا ہو تو اسے فنکشن بنا لیں۔ فرض کریں کہ ہمیں ہیلو ورلڈ پرنٹ کرنا ہے، اگر ہم نے ہیلو ورلڈ کو تین بار یا اس سے زیادہ پرنٹ کرنا ہے، تو کیا کریں، اس کا ایک فنکشن بنائیں، اس طرح جب بھی ہم فنکشن کو کال کریں گے، وہ چیز خود بخود ہونے لگے گی، اسی لیے بار بار ایک



03:56:05

ایک بہت بڑا کوڈ لکھنے کے بجائے، ہم اسے ایک چھوٹے سے فنکشن میں آسان کر سکتے ہیں جس کی وجہ سے کوڈ کی دوبارہ استعمال میں اضافہ ہوتا ہے۔ اب ہم اصل میں C میں فنکشن کیسے لکھتے ہیں؟ فنکشن کے کچھ نحو ہوتے ہیں۔ فنکشن لکھنے کا عمل عام طور پر عام صورتوں میں تین مراحل کا عمل ہوتا ہے، جس میں سے پہلا نحو فنکشن پروٹو ٹائپ کا ہوتا ہے۔ فنکشن پروٹو ٹائپ کا کیا مطلب ہے؟ یہ وہ لائن ہے جس کی وجہ سے ہم C کمپائلر کو بتا رہے ہیں کہ ہم ایک فنکشن لکھنے جا رہے ہیں۔ سی کمپائلر کو معلوم ہونا چاہیے کہ پروگرام



03:56:37

اس کے اندر کیا باتیں لکھی ہیں؟ تو اس لائن کی مدد سے، یعنی اس پروٹو ٹائپ کی مدد سے، ہم بتاتے ہیں کہ ہم ایک فنکشن کا اعلان کرنے جا رہے ہیں، اس لیے اسے فنکشن پروٹو ٹائپ یا فنکشن ڈیکلریشن بھی کہا جاتا ہے۔ اب اس کو لکھنے کی ترکیب کیا ہے، نحو یہ ہے کہ یہ پرنٹ ہیلو ہمارے فنکشن کا نام ہے۔ ہمارے فنکشن کا نام کچھ بھی ہو سکتا ہے کیونکہ یہ ویری ایبل کے نام کی طرح ہے، یہ یوزر ڈیفائنڈ ہے، جیسے ہمارا فنکشن کیا کرتا ہے، ہمارا فنکشن ہیلو پرنٹ کرتا ہے، ہم نے یہ فرض کر لیا ہے، اس لیے



03:57:06

ہم نے فنکشن کو پرنٹ ہیلو کا نام دیا۔ اگر اس میں دو نمبروں کی اوسط پرنٹ ہوتی تو ہم اسے اوسط یا پرنٹ اوسط کا نام دے سکتے تھے۔ اس کے مطابق ہمارا فنکشن جو بھی کام کرتا ہے، ہم اس کے مطابق نام رکھتے ہیں۔ تو یہاں ہم نے اسے پرنٹ ہیلو کا نام دیا۔ اور فنکشن لکھنے کے بعد ہمیشہ دو پیرنز لگانے ہوتے ہیں، اس لیے ہم یہاں دو پیرنز لگاتے ہیں، اس کے بعد سٹیٹمنٹ ٹرمینیٹر لگاتے ہیں۔ اب، یہاں ہم نے باطل لکھا ہے۔ اس void کو لکھنے کا مطلب ہے کہ ہمارا فنکشن نتیجہ میں کچھ نہیں لوٹائے گا، یعنی



03:57:37

چلے گا لیکن ہمیں آخر کوئی قیمت نہیں ملے گی، اسی لیے باطل۔ انگریزی میں Void کا مطلب خالی ہے، اس لیے یہاں void لکھا گیا ہے، جس کا مطلب ہے کہ یہ پرنٹ ہیلو فنکشن ہیلو پرنٹ کرے گا لیکن کوئی ویلیو واپس نہیں کرے گا۔ اب اس لائن میں، ہیلو، void اور پھر پیرنز پرنٹ کرنے سے پہلے، یہ کمپائلر کو بتاتا ہے کہ ہمارا ایک فنکشن موجود ہے۔ یہ اعلان کی ترکیب ہے۔ دوسرا نحو جس کے بارے میں ہم بات کر رہے ہیں وہ فنکشن کی تعریف ہے۔ ایک بار جب ہم نے کمپائلر کو بتایا کہ ہمارا فنکشن موجود ہے، اس کے بعد ہمیں مل جاتا ہے۔



03:58:09

اگر آپ نے فنکشن لکھنا ہے تو آپ کو فنکشن کا کام کرنا ہے، تو کہیں دکھائیں کہ فنکشن کیسے کام کرتا ہے، تو اس سٹیٹمنٹ کو فنکشن ڈیفینیشن کہتے ہیں اور اس کا نحو یہ ہے، سب سے پہلے ہم ریٹرن ٹائپ لکھتے ہیں، ریٹرن ٹائپ کا مطلب یہ ہے کہ یہ کیا ویلیو واپس کرے گا، اس کی قسم کیا ہے، تو یہ یہاں کچھ نہیں لوٹے گا، اسی لیے void لکھا گیا ہے، پھر ہم اپنے فنکشن کا نام لکھیں گے، اس کے بعد ہیلو، پرنٹ کریں گے، اس کے بعد ہم curs parens لکھیں گے۔ وہ بلاک ہے جس کے اندر ہمارے فنکشن کے تمام کوڈ یہاں موجود ہوں گے کیونکہ ہمیں کرنا ہے۔



03:58:38

ہمیں صرف ہیلو پرنٹ کرنا ہے۔ ہم ایک لائن پرنٹ کریں گے جس کے اندر ہم ہیلو لکھیں گے۔ تو اس طرح ہمارے فنکشن کی تعریف بھی احاطہ کر لی گئی ہے۔ اب تیسرا نحو جس کے بارے میں ہم بات کریں گے فنکشن کال ہے۔ فنکشن کال کیا کرتا ہے؟ ہم نے کمپائلر کو بتایا ہے کہ ہم ایک فنکشن بنانا چاہتے ہیں۔ پھر ہم نے فنکشن بھی بنایا ہے۔ اب اس فنکشن کو کیسے استعمال کیا جائے۔ تو فنکشن کے استعمال کے کام کو فنکشن کال کہتے ہیں یعنی فنکشن کو کال کرنا۔ تو اس کے لیے بیان کیسے لکھا جاتا ہے؟ یا تو ہم فنکشن کو مین فنکشن سے int main کے ذریعے کال کر سکتے ہیں۔



03:59:12

یا آپ اسے کسی اور فنکشن سے کال کر سکتے ہیں، تو یہاں ہم مین فنکشن سے ایک اور فنکشن کال کر رہے ہیں، ہم اپنے پرنٹ ہیلو فنکشن کا نام لکھیں گے، پیرنز لکھیں گے، ٹرمینیٹر لگائیں گے، پھر یہ ہماری کالنگ سٹیٹمنٹ بن جائے گی جو ہم نے int main کے اندر لکھی ہے اب اگر آپ غور سے دیکھیں تو ہمارا مین بھی ایک فنکشن ہے جس کی واپسی کی قسم int ہے کیونکہ یہ ایک int ویلیو دیتا ہے، int ویلیو کا مطلب یہ ہے کہ اس کا بنیادی نام ہے، ریسٹ کلید کا نام ہے، لیکن اس کا مطلب یہ ہے کہ ریسٹ کلید کا نام ہے۔ فنکشنز کے دیگر تمام نام جو ہم



03:59:42

ہم اسے بنائیں گے اور اس میں کوئی ذیلی کی ورڈ نہیں ہوگا، اس کے بعد pensis آئے گا، یہ ہمارا گھنگھریالے منحنی خطوط وحدانی ہے اور اس کے اندر اس کا تمام بلاک آف کوڈ ہے، اس طرح جس طرح ہمارے پاس ایک مین فنکشن ہے، اسی طرح ہم دوسرے فنکشنز بنانے جارہے ہیں جو ہماری خواہش کے مطابق کام کررہے ہوں گے، سب سے پہلے مثال کے طور پر ایک فنکشن لکھیں اور دیکھیں، ہمارے پاس بوائلر پلیٹ کا کوڈ ہے، جس میں ہمارے پاس پہلے سے ہی ریٹرنز فائل ہے، جو ہمارے پاس مین فکشن ہے۔ ہمارا پرنٹ ہیلو فنکشن بنانا، سب سے اوپر ہم کمپائلر کو بتائیں گے کہ ہم نے ایک فنکشن بنایا ہے، ہم اسے void پرنٹ کیسے بتائیں گے؟



04:00:13

ہیلو، اس کے بعد اصل میں آپ اپنا پرنٹ ہیلو بنا رہے ہوں گے۔ ہم یہ پرنٹ ہیلو اپنے مین فنکشن کے نیچے بنا رہے ہیں۔ اب ہم اسے اوپر بھی بنا رہے ہیں، لیکن جب بھی ہم اسے اوپر بناتے ہیں، تو آپ کو یہ الگ سے بتانے کی ضرورت نہیں، لیکن الوداع، روایتی نحو، لکھنے کے روایتی انداز پر عمل کرتے ہوئے، ہم مین کے نیچے اپنے فنکشنز بنا رہے ہوں گے، اس لیے اس کلاس کے اندر ہم void پرنٹ ہیلو لکھیں گے، اس پینس کے بعد، پھر ہماری گھنگریالے تسمہ۔ اب اگر ہم اس پرنٹ ہیلو کا اس مین فنکشن سے موازنہ کریں تو سب سے پہلے اس میں واپسی کی قسم ہے، اس طرح اس میں بھی واپسی کی قسم ہے، یعنی



04:00:48

مین واپسی ہمارا انٹیجر پرنٹ ہیلو کچھ نہیں لوٹاتا اس کا نام مین ہے اس کا نام پرنٹ ہیلو ہے اس کے بعد ہم نے قلم دونوں میں ڈالے ہیں اور دونوں میں گھنگریالے منحنی خطوط وحدانی اور پرنٹ ہیلو کے اندر ہم اپنا کام کریں گے جو پرنٹ ایف ورلڈ ہے اس طرح ہمارا پرنٹ ہیلو فنکشن پرنٹ ہیلو ورلڈ سے ہمارے لیے ہیلو پرنٹ کرتا ہے یا اب اسے محفوظ کرنے کی اجازت دیتا ہے پرنٹ ہیلو کو کیسے کال کریں یعنی یہاں سے ہیلو پرنٹ کے لیے ہم یہاں سے کال کریں گے۔ ہمارے



04:01:22

فنکشن کا نام، پھر پینسیس اور پھر ٹرمینیٹر۔ تو یہ ہمارا اعلان یا فنکشن پروٹو ٹائپ ہے۔ یہ ہماری فنکشن کال ہے اور یہاں سب سے اہم چیز ہمارے فنکشن کی تعریف ہے۔ آئیے اسے محفوظ کریں اور ایک بار چلائیں۔ مرتب کریں اور ٹرمینل سے چلائیں۔ تو ہمارے لیے ہیلو پرنٹ کیا گیا ہے۔ اگلی لائن یہاں، اب اگر ہم چاہیں تو پرنٹ ایف کو بار بار لکھنے کے بجائے، ہم فنکشن کو کال کرکے اس ہیلو کو بار بار پرنٹ کروا سکتے ہیں۔ لہذا ہم نے ایک بار فنکشن کو بلایا۔ اب ہم فنکشن کو دوبارہ کال کرتے ہیں۔ درحقیقت، ہم اپنے فنکشن کو تین بار کال کرتے ہیں۔



04:02:07

اب آئیے اسے بچا کر چلائیں۔ تو ہمارے ساتھ کیا ہوا کہ 'ہیلو' تین بار چھاپا گیا۔ اب اگر ہم چاہیں تو ہم اپنے فنکشن کو جتنی بار چاہیں کام کر سکتے ہیں۔ اب یہاں ہم نے ایک بہت ہی سادہ مثال دیکھی ہے جو صرف ایک پرنٹ اسٹیٹمنٹ لکھتی ہے۔ لیکن اس فنکشن کے اندر ہم 10، 20، 25 لائنوں کی کوئی بھی تعداد لکھ سکتے ہیں اور ہمیں اپنے مین فنکشن کے اندر ان لائنوں کو بار بار نہیں لکھنا پڑے گا۔ ہمیں وہاں صرف اپنے فنکشن کا نام لکھنا ہوگا۔ تو اس طرح سے، ہمارے کوڈ کی دوبارہ استعمال کی صلاحیت بڑھ جاتی ہے۔ ہمیں زیادہ سطریں نہیں لکھنی پڑتی۔



04:02:38

ہمارا لکھا ہوا کوڈ چھوٹا ہو جاتا ہے اور بہت منظم ہوتا ہے کیونکہ ہر ایک حصہ کو جو کام کرنا ہوتا ہے وہ ہمیں ہمارے فنکشن کا نام بتاتا ہے، اس طرح پروگرامنگ بہت آسان ہو جاتی ہے، شاید ہمیں اس کا فائدہ ابھی نظر نہ آئے، لیکن جب ہم کمپنیوں میں بڑے کوڈ لکھنے جاتے ہیں تو ہزاروں لائنوں کے کوڈ ہوتے ہیں، اس لیے وہاں فنکشنز ہماری بہت مدد کرتے ہیں، اب اس فنکشن کے اندر ہم کسی بھی چیز کو پرنٹ کر سکتے ہیں، ہم اپنے نام سے پرنٹ کر سکتے ہیں۔ اور اگلی لائن، تو



04:03:11

اب ہمیں اس فنکشن کے اندر دو لائنیں ملتی ہیں، اب اگر ہم اسے دوبارہ کال کریں گے تو دیکھیں گے کہ ہمارے لیے ایک ہی چیز تین بار پرنٹ ہو چکی ہے، لیکن فنکشن کال ایک ہی رہی، یعنی اگر ہمیں کوئی تبدیلی کرنی ہے جیسا کہ والیوم بٹن پہلے کیا کرتا تھا، پہلے ایک سے دو بڑھتا تھا، یہ دو سے تین کرتا تھا، لیکن ہم چاہتے ہیں کہ ہمارے ریموٹ میں والیوم بٹن ایک سے تین میں بدل جائے، اب ہمیں دو سے تین میں تبدیل کرنے کی ضرورت نہیں، اب ہمیں کال کرنے کی ضرورت نہیں ہے۔ ہم تعریف میں جا کر پوری چیز کو بدل دیں گے تاکہ



04:03:43

اگر صارف کو کوئی فرق محسوس نہیں ہوتا ہے تو اسے پہلے کی طرح بٹن دبانا ہوگا، تو یہ فنکشن لکھنے کا بھی ایک فائدہ ہے۔ اب آئیے کچھ سوالات حل کرتے ہیں جس میں ہم مختلف فنکشن لکھ رہے ہوں گے اور ان کی خصوصیات کو دیکھیں گے۔ اس میں پہلا سوال فنکشنز لکھنے کا ہے، ایک ہیلو پرنٹ کرنے کا اور دوسرا گڈ بائی پرنٹ کرنے کا۔ اس سوال میں ہمیں دو فنکشن لکھنے ہیں۔ سب سے پہلے، ہم ایک فنکشن بنائیں گے جو ہیلو کو پرنٹ کرے گا، پھر ہم ایک فنکشن بنائیں گے جو گڈ بائی پرنٹ کرے گا۔ تو آئیے اسے عبور کریں۔ ہم پہلے ہی ایک فنکشن پرنٹ ہیلو بنا چکے ہیں۔



04:04:12

ہم نے ایک فنکشن بنایا ہے جو ہیلو پرنٹ کرتا ہے۔ اب ہم کیا کریں گے، ہم ایک فنکشن بنائیں گے جو الوداع پرنٹ کرتا ہے۔ تو سب سے پہلے ہمیں کمپائلر کو بتانا پڑے گا کہ void پرنٹ گڈ بائی۔ ہم ایک فنکشن بنانے جا رہے ہیں۔ ہم نے یہ کمپائلر کو بتا دیا ہے اور اس کے بعد ہم اصل میں وہ فنکشن بنائیں گے، void print good bye۔ اور اب ہم یہاں پرنٹ سٹیٹمنٹ کو الوداع لکھیں گے۔ تو ہم نے پرنٹ ہیلو کے نام سے ایک فنکشن بنایا ہے۔ ہم نے ایک فنکشن بنایا ہے جس کا نام پرنٹ گڈ بائی ہے۔ ہیلو کے اندر ہم ہیلو پرنٹ کر رہے ہیں۔ گڈ بائی کے اندر ہم گڈ بائی پرنٹ کر رہے ہیں۔



04:04:49

ہم نے اوپر دونوں افعال کے پروٹو ٹائپ کی وضاحت کی ہے۔ اس کے بعد، جس طرح ہم ہیلو کہہ رہے تھے، ہم پرنٹ کو بھی الوداع کہہ سکتے ہیں۔ یہاں ہم پرنٹ گڈ بائی لکھیں گے اور پھر اسے محفوظ کرکے چلائیں گے۔ تو پہلے ہم نے ہیلو کہا اور ہیلو پرنٹ ہو گیا۔ پھر ہم نے الوداع کہا اور الوداع چھاپا گیا۔ جس فنکشن کو فرسٹ کہا جاتا ہے پہلے اس پر عمل درآمد ہوتا ہے۔ پھر جس فنکشن کو بعد میں بلایا جائے گا وہ بعد میں عمل میں آئے گا۔ یعنی ہماری پھانسی کا طریقہ کیسا ہو گا؟ ہم ہمیشہ مین فنکشن سے شروع کریں گے۔



04:05:25

یہ ایک کوڈ ہوگا جو مین فنکشن میں آئے گا، مین فنکشن نے کیا کیا، اسے پرنٹ ہیلو کہتے ہیں، تو باقی تمام کوڈ ابھی کے لیے رک جائیں گے، جیسے لوگوں کو پیدل چلنا ہے، تاکہ وہ ٹریفک کے سامنے کراس کر سکیں، تو ایسا ہی منظر ہے، یہاں یہ فنکشن مکمل طور پر رک جائے گا اور پرنٹ ہیلو کو کال کرے گا، اب پرنٹ ہیلو کا پورا کوڈ یہاں چلے گا، ہیلو پرنٹ کرنے کے بعد ہم اس پر کیا کریں گے، ہیلو پرنٹ کرنے کے بعد ہم اس پر جائیں گے۔ واپس مین فنکشن کے اندر، وہاں سے۔



04:05:55

ہم وہیں سے شروع کریں گے جہاں سے ہم پچھلی بار ختم ہوئے تھے، یعنی ہم نے پرنٹ ہیلو کہا تھا، تو ہم یہاں سے شروع کریں گے۔ یہ کال ختم ہو گئی ہے، پھر ہم پرنٹ کو الوداع کہیں گے، پھر ہم پرنٹ گڈ بائی تک پہنچیں گے، پھر ہم گڈ بائی پرنٹ کریں گے اور یہ ہمارے کنسول میں آ جائے گا، اس کے بعد ہم مین کے اندر واپس آئیں گے، گڈ بائی ختم ہو گیا، اب ہم واپسی کے بیان پر واپس جائیں گے، اب واپسی ہو گئی، یعنی ہمارا مین فنکشن ختم ہو گیا، یعنی ہمارا پروگرام ختم ہو گیا، اس طرح، اگر ہم یہاں دوبارہ ہیلو پرنٹ کریں گے، تو پھر اب ہم واپس آئیں گے۔



04:06:26

کیا پرنٹ کیا جائے گا؟ اب سب سے پہلے ہیلو پرنٹ ہوگا، پھر گڈ بائی پرنٹ ہوگا، پھر ہیلو دوبارہ پرنٹ ہوگا۔ اب یہاں کیا ہوا، پہلے ہم نے ہیلو کہا اور یہاں پہنچ گئے، پھر ہم نے الوداع کہا، اس کے بعد ہم یہاں پہنچ گئے، اس کے بعد ہم نے دوبارہ ہیلو کہا، پھر ہمارا پروگرام یہاں پہنچ جائے گا، تو پروگرام ایک طرح سے جمپ کر رہا ہے، ہمارا کنٹرول، تو ہم اپنے فنکشنز کی مدد سے پروگرام جمپ کو کنٹرول کر سکتے ہیں، اپنے ذیلی پروگراموں کی مدد سے۔ اب اس کے بعد، فنکشنز کا اگلا سوال پوچھیں، ہمارا اگلا سوال کہتا ہے، ایک فنکشن لکھیں جو ہیلو اگر پرنٹ کرے۔



04:06:59

صارف ہندوستانی ہے، لہذا یہاں ہم اپنے صارف سے پوچھیں گے کہ وہ ہندوستانی ہے یا فرانسیسی۔ ہم ہندوستانی کے لئے کیا کر سکتے ہیں، ہم کردار میں میں داخل کر سکتے ہیں. فرانسیسی کے لیے ہم ایف درج کر سکتے ہیں۔ اگر ہمارا صارف ہندوستانی ہے تو اس کے معاملے میں ہم نمستے پرنٹ کریں گے۔ اگر ہمارا صارف فرانسیسی ہے تو اس کی صورت میں ہم بنجو کو پرنٹ کریں گے۔ اب اگر میں نے فرانسیسی نہیں سیکھی تو میں کیسے تلفظ کروں گا مجھے یقین نہیں ہے۔ ہم اسے چلو سے بجر تک تلفظ کر رہے ہیں۔ ان بچوں کے لیے جنہوں نے فرانسیسی زبان سیکھی ہے، یہ فرانسیسی نمستے ہے۔ تو اب ہم ان دونوں کے لیے ایک ایک فنکشن بنائیں گے۔ ایک فنکشن



04:07:33

ایک فنکشن ہوگا جو نمستے کو پرنٹ کرتا ہے۔ ایک فنکشن ہوگا جو نمستے کو پرنٹ کرتا ہے۔ آئیے ان دونوں کے لیے ایک فنکشن بناتے ہیں۔ آئیے اپنے پرانے کوڈ کو یہاں سے ہٹا دیں۔ تو سب سے پہلے ہم اپنے دونوں فنکشنز کا اعلان کریں گے - void پرنٹ یا اسے صرف Namaste لکھیں اور ایک void banaj ہے۔ اب سب سے پہلے ہم ان کی تعریفیں لکھیں گے۔ باطل نمستے۔ یہ کیا کرتا ہے؟ یہ نمستے پرنٹ کرتا ہے۔ اس کے بعد، دوسرا فنکشن void narur ہے اور یہ ہمارے فرانسیسی نمستے کو پرنٹ کرے گا۔ تو یہ ہمارا پہلا فنکشن ہے۔ یہ ہمارا دوسرا فنکشن ہے۔ اب ہم مین کے اندر کیا کریں گے؟ سب سے پہلے، صارف کو بتائیں.



04:08:20

آئیے اس کی قومیت پوچھیں۔ پرنٹ F فرنچ کے لیے F اور I انڈین کے لیے اب جیسے ہی وہ کسی بھی چیز میں داخل ہوتا ہے، ہم ایک کریکٹر بناتے ہیں جسے ہم سکینر کے ذریعے سکین کریں گے۔ فیصد C & C اگر ہماری قومیت، جو حرف درج کیا گیا ہے وہ Aa کے برابر ہے، تو اس صورت میں ہم نمستے پرنٹ کریں گے ورنہ ہم Narur پرنٹ کریں گے تو آئیے ایک بار کوڈ کو دوبارہ دیکھیں۔ اوپر ہم نے فنکشن کا پروٹو ٹائپ بنایا ہے۔ سب سے پہلے، ہم نے کیا کیا؟ ہم نے قومیت مانگی، اسے کردار کی تلاش میں محفوظ کر لیا۔ اس کے بعد، کردار پرنٹ کریں



04:09:04

اس کا موازنہ i کے ساتھ کریں، اگر یہ میچ کرتا ہے تو نمستے فنکشن کو کال کریں، اگر یہ میچ نہیں کرتا ہے تو اگر ہم if کنڈیشن کے اندر جائیں گے تو ہم ban joor کہتے ہیں، نیچے ہم نے دونوں فنکشنز کی تعریف بتائی ہے کہ دونوں فنکشنز کا کیا مطلب ہے، آئیے ہم یہ کریں، سیو کریں اور رن کریں، اب ہم کیا کریں گے، فرانسیسی کے لیے f اور i انڈین کے لیے درج کریں، اگر ہم ہندوستانی ہیں تو اس کو داخل کریں گے، اور اس کے لیے ایک ہی کوڈ داخل کریں گے، اور اس کے لیے ایک ہی کوڈ داخل کریں گے۔ ٹائم بان روٹ پرنٹ کیا گیا ہے، لہذا اس طرح صارف کی طرف سے ہمیں دی گئی شرائط کے مطابق



04:09:37

اس سے ہم مختلف فنکشن لکھ سکتے ہیں اور مختلف کوڈز کو ایکسیکیوٹ کر سکتے ہیں۔ اگلی چیز جس کے بارے میں ہم بات کریں گے وہ ہے فنکشن کی کچھ خصوصیات۔ فنکشن کی پہلی خاصیت یہ ہے کہ ایگزیکیوشن ہمیشہ مین سے شروع ہوتا ہے، یعنی جب بھی ہم کسی C پروگرام کے بارے میں بات کر رہے ہیں، درحقیقت چاہے ہم C++ یا جاوا پروگرام کی بات کر رہے ہوں، ہمارے کوڈ کی ایگزیکیوشن ہمیشہ مین فنکشن سے شروع ہوتی ہے۔ اس سے کوئی فرق نہیں پڑتا ہے کہ آپ پروگرام میں کتنی ہی لائنیں لکھیں، جیسے کہ ہم نے پروگرام میں اوپر کچھ لکھا ہے یا ہم اس پروگرام میں کچھ لکھ رہے ہیں۔



04:10:08

اگر آپ فنکشن کی تعریف کو اوپر لے جائیں تو بھی ایسا نہیں ہے کہ اگر فنکشن نمستے آتا ہے اور فنکشن نمستے کو پہلے کہا جائے گا، نہیں، نہیں، کمپائلر ہمیشہ مین فنکشن پر عملدرآمد کے لیے پہلے جاتا ہے اور مین فنکشن بتاتا ہے کہ اب کیا ہونے والا ہے، اگر ہم ان دونوں سٹیٹمنٹس کو یہاں سے ہٹا دیں، یعنی نمستے اور بنجو کو کبھی نہیں کال کریں گے، تو ہمارا کمپائلر کبھی بھی اس اسکرین پر پرنٹ نہیں کرے گا اور یہ دوسرا نمبر پرنٹ نہیں کرے گا۔ کیوں جب بھی پروگرام کا عمل شروع ہوتا ہے، وہ مین فنکشن



04:10:39

یہ دوسری چیز سے شروع ہوتا ہے جب بھی C میں کوئی فنکشن بلایا جاتا ہے تو فنکشن کو بلاواسطہ اور بلاواسطہ مین سے بلایا جاتا ہے یعنی فنکشن کو اس سے کچھ کام کروانے کے لئے بلایا جاتا ہے تو یا تو مین فنکشن اسے براہ راست کال کرتا ہے جیسا کہ ہمارے معاملے میں کیا ہو رہا ہے اس معاملے میں ہمارے فنکشنز مین فنکشن کے اندر سے بلائے جا رہے ہیں یا دوسرا فنکشن کسی اور فنکشن کو کال کر رہا ہے جیسا کہ ہم یہاں کرتے ہیں ہم نمستے کہتے ہیں اس کا مطلب ہے کہ ہم دونوں کو نمستے کہتے ہیں۔



04:11:12

ہم نے نمستے کہا اور نمستے کیا کر رہا ہے، یہ نمستے پرنٹ کرنے کے بعد کال کر رہا ہے، بان شو، تو اس طرح کیا ہوتا ہے، مین فنکشن کو ہمارا اس فنکشن کہتے ہیں اور نمستے فنکشن کو ہمارا دوسرا فنکشن کہتے ہیں، اس لیے اس دوسرے فنکشن کو مین فنکشن سے بلاواسطہ بلایا گیا ہے کیونکہ مین فنکشن ہی نمستے کہلاتا ہے، اس طرح اگر کوئی فنکشن سی کے اندر بلایا جائے تو مین فنکشن کو براہ راست یا کسی دوسرے فنکشن میں بلایا جاتا ہے۔



04:11:42

اب اگر ہم ایک بار اس کا تجزیہ کریں تو اسے محفوظ کریں اور ایک بار مرتب کریں اور اسے چلائیں۔ لہذا اب اس سے کوئی فرق نہیں پڑتا ہے کہ میں کوئی بھی قومیت رکھتا ہوں، میرے لئے نمستے پہلے کہا جاتا ہے کیونکہ ہوا یہ تھا کہ مرکزی تقریب کو پہلے نمستے کہا جاتا ہے۔ نمستے نے کیا کیا؟ اس نے نمستے چھاپا۔ اس کے بعد، اس نے دوسرا فنکشن کہا۔ اس کے بعد دوسرا فنکشن بنجور چھپا۔ تو سب سے پہلے نمستے ہمیشہ چھاپے جائیں گے۔ اس کے بعد ہمارا دوسرا سلام چھاپا جائے گا۔ تو کنٹرول اس طرح سے کیا کرتا ہے یہ مین فنکشن سے دوسرے میں جاتا ہے۔ پھر دوسرے فنکشن سے



04:12:14

یہ تیسرے فنکشن میں جاتا ہے، پھر مین کے اندر واپس آتا ہے۔ اب اگلی پراپرٹی جس کے بارے میں ہم بات کریں گے وہ یہ ہے کہ ایک پروگرام میں ایک سے زیادہ فنکشن ہو سکتے ہیں، جسے ہم پہلے ہی دیکھ چکے ہیں۔ ہم نے پہلے ہی دو فنکشنز بنائے ہیں۔ آپ اپنے ریموٹ میں جتنے چاہیں بٹن لگا سکتے ہیں۔ اسی طرح، آپ اپنے C پروگرام میں جتنے چاہیں فنکشن بنا سکتے ہیں، لیکن آپ کو فنکشنز کو منطقی طور پر بنانا چاہیے تاکہ ہم مزید فنکشنز بنانے کے لیے اضافی کوڈ نہ لکھیں۔ اب افعال کی دو قسمیں ہیں۔ پہلی قسم ہماری لائبریری کے افعال ہیں اور دوسری قسم



04:12:45

ہمارے یوزر ڈیفائنڈ فنکشنز لائبریری فنکشنز ہیں جو سی میں ان بلٹ ہیں، یعنی سی میں مختلف لائبریریاں ہیں جن میں پہلے سے کچھ فنکشنز ہیں، ان فنکشنز کے نام ہمارے لیے کلیدی الفاظ ہیں، ہم ان کے فنکشنز کے نام سے دوبارہ اپنا فنکشن نہیں بنا سکتے، ان کا کام بھی پہلے سے طے شدہ ہے اور باقی ہمارے یوزر ڈیفائنڈ فنکشنز ہیں جن کا اعلان ہم پروگرامرز کرتے ہیں، لہذا ہم ان کو کوڈ قرار دیتے ہیں، اس لیے ہم کون ہیں۔ کوڈر جو ان کی تعریف کر رہے ہیں۔



04:13:15

ہم صرف کوڈ استعمال کر رہے ہیں۔ اگر ہم لائبریری کے افعال کے بارے میں بات کرتے ہیں، تو ہم پہلے ہی لائبریری کے افعال استعمال کر رہے ہیں۔ اگر ہم printf کرتے ہیں، تو یہ printf ایک لائبریری فنکشن ہے۔ پرنٹ ایف کیسے کہا جاتا ہے؟ پہلے اس کا نام لکھا جا رہا ہے، اس کے بعد پیرنز رکھا جا رہا ہے۔ اب اس کے کچھ پیرامیٹرز اندر سے گزر چکے ہیں۔ اب ہم بات کریں گے کہ پیرامیٹرز کیا ہیں۔ تو یہ printf بھی ایک فنکشن ہے۔ یہ scanf بھی ایک فنکشن ہے۔ لہذا printf اور scanf ہماری لائبریری کے اندر ہیں یا ان بلٹ فنکشنز &c۔



04:13:46

اور ان کی لائبریری کیا ہے، ہم نے اپنا preprocessor directive std.ad.a اوپر رکھا ہے، اسی وجہ سے ہم اسے استعمال کرنے کے قابل ہیں، اگر ہم اسے ہٹا دیں گے تو کوڈ میں غلطیاں آنا شروع ہو جائیں گی، اسی لیے اس سٹیٹمنٹ کو لکھنا ضروری ہے، اور ہمارے فنکشنز printf اور scanf ہماری لائبریری کے فنکشنز ہیں، ہم نے پہلے ہی صارف کے ڈیفائن کیے ہوئے فنکشنز دیکھے ہیں، ہم نے پہلے سے ایک تخلیق کیا ہے، جو ہم نے تخلیق کیا ہے۔ ہم نے پرنٹ ہیلو یا پرنٹ الوداع لکھا تھا، یہ سب ہمارے یوزر ڈیفائنڈ فنکشنز ہیں، آئیے آگے ان کے بارے میں بات کرتے ہیں۔



04:14:16

پاسنگ آرگیومنٹس اب فنکشنز کیا کرتے ہیں جب ہم نے تعریف کی بات کی تو فنکشن کی خاصیت کیا تھی کہ یہ کوئی بھی ویلیو لے سکتا ہے اور یہ کوئی بھی ویلیو واپس کرسکتا ہے، اس لیے فنکشن جو ویلیو لیتا ہے اسے پیرامیٹر کہا جاتا ہے اور فنکشن جو ویلیو دیتا ہے اسے ریٹرن ویلیو کہا جاتا ہے، اس لیے فنکشن ہمارا پیرامیٹر لیتا ہے اور ہمیں واپسی کی ویلیو دیتا ہے، جب بھی ہم آرگیومنٹ پاس کرتے ہیں، تو ہم اپنے فنکشن کو جو بھی ویلیو دے سکتے ہیں، وہ arguments کو دے سکتے ہیں۔ ہمارے افعال تین اقسام میں ہیں۔



04:14:49

ہم اسے اس طرح لکھ سکتے ہیں۔ ایک طریقہ ہے جیسا کہ ہم پہلے سے لکھ رہے ہیں، یعنی یہاں باطل لکھا جائے گا۔ void کا مطلب ہے کہ ہمارا فنکشن کچھ واپس نہیں کرتا، یہ خالی رہتا ہے، پھر ہمارے فنکشن کا نام، پھر یہاں ہم نے parens، ہمارا سٹیٹمنٹ ٹرمینیٹر لکھا ہے۔ یہ ایک عام قسم کا فنکشن ہے جس کے بارے میں ہم پہلے ہی بات کر چکے ہیں۔ ہم کسی فنکشن کو دوسرے طریقے سے کیسے لکھ سکتے ہیں؟ سب سے پہلے اسے void لکھا جائے گا، یعنی فنکشن کوئی ویلیو نہیں لوٹاتا۔ مثال کے طور پر، فرض کریں کہ ہمیں پرنٹ ٹیبل کے نام سے ایک فنکشن بنانا ہے۔ یہ کوئی بھی نمبر لیتا ہے اور اس کا ٹیبل پرنٹ کرتا ہے۔



04:15:20

اب اسے کچھ واپس نہیں کرنا ہے، اسے صرف پرنٹ کرنا ہے، لہٰذا اس کے پیرامیٹرز میں، یعنی وہ جو ویلیو لے گا اس میں یقینی طور پر ایک نمبر ہوگا جس کے لیے اسے ٹیبل پرنٹ کرنا ہے، اس لیے وہ نمبر ہمارا int n ہے، اس لیے یہ نمبر n لے گا اور اس کا ٹیبل پرنٹ ہو جائے گا اور کچھ واپس نہیں کرے گا۔ فنکشن لکھنے کا تیسرا طریقہ یہ ہے کہ ہمارے پاس واپسی کی قسم ہونی چاہیے، جیسے کہ sum کے معاملے میں، ہم نے int کو ریٹرن ٹائپ کے طور پر لیا ہے اور یہ فنکشن جو کر رہا ہے وہ دو پیرامیٹرز لے رہا ہے، پہلا پیرامیٹر a ہے، دوسرا پیرامیٹر b ہے، یہ دونوں پیرامیٹرز کو لے گا اور ان سے ایک برابر قدر حاصل کرے گا۔



04:15:55

یہ ایک فنکشن بنائے گا جو a + b ہو گا اور اسے واپس کر دے گا۔ اب یہ واپس آ رہا ہے، تو اس ویلیو کی قسم کیا ہے، int، اسی لیے ہم نے اپنے فنکشن کے نام کے آگے int لکھا۔ آئیے ایک فنکشن بناتے ہیں جو دو نمبروں کی ویلیو لے گا، یعنی دو نمبرز اس کے پیرامیٹرز a اور b ہوں گے اور یہ ہمیں دونوں ویلیو کا مجموعہ لوٹائے گا۔ تو اس کے لیے سب سے پہلے اپنے پرانے کوڈ کو ہٹا دیں۔ پہلا نمبر int a اور b درج کریں۔ تو سب سے پہلے ہم ایک کو اسکین کریں گے، اس کے بعد ہم اپنا دوسرا نمبر درج کریں گے۔ ہم دوسرے نمبر میں کیا ذخیرہ کریں گے، ہم دوسرے نمبر کی قیمت b میں محفوظ کریں گے۔



04:16:35

آپ یہ کر رہے ہوں گے، اب ہم ایک فنکشن بنائیں جس سے ہمیں a اور b دونوں کا مجموعہ ملے گا، تو اس بار سب سے پہلے آپ اس sum int a int b لکھ رہے ہوں گے، اس بار ہم نے void نہیں لکھا، اس بار ہم نے یہاں int لکھا جیسے main کے آگے int لکھا ہے کیونکہ یہ صفر لوٹاتا ہے، ہمیں یہاں اپنی واپسی کی قدر کی قسم بھی لکھنی ہے، اس لیے ہم نے اس فنکشن کے بعد اپنا وقت لکھنا ہے، اور اس کے بعد اس فنکشن کا نام لکھنا ہے۔ اس کے اندر کے پیرامیٹرز، ہمارے پیرامیٹرز کیا ہونے جا رہے ہیں، میرا مطلب ہے کہ رقم کا حساب لگانے کے لیے کن اقدار کی ضرورت ہوگی۔



04:17:07

اس کے لیے، پہلے ہمیں انٹیجر ویلیو کی ضرورت ہوگی، ہمارا پہلا نمبر۔ اس کے بعد ہمیں انٹیجر ویلیو b کی ضرورت ہوگی، ہمارا دوسرا نمبر۔ اب ہم کیا کریں، فنکشن کی تعریف لکھیں، تو پھر int sum int a int b کیا ہے sum قدر a + b تو ہم کیا واپس کر رہے ہوں گے؟ ہم کسی بھی قدر کو واپس کرنے کے لیے مطلوبہ لفظ واپسی کا استعمال کرتے ہیں۔ واپس جانے کے بعد کس کے پاس جاتا ہے؟ یہ کالنگ فنکشن میں جاتا ہے۔ یہاں ہم مین فنکشن سے کال کریں گے، لیکن فرض کریں کہ ہم اس sum فنکشن کو کسی اور فنکشن سے کال کریں گے، تو یہ واپسی ویلیو اس دوسرے فنکشن میں جائے گی۔



04:17:44

اگر یہ فنکشن میں جاتا ہے نہ کہ مین پر، تو واپسی ویلیو وہاں سے آتی ہے جہاں سے کال کی جاتی ہے، تو ہم a + b واپس کریں گے، تو آئیے اس فنکشن کو غور سے دیکھتے ہیں، پہلے ہم نے واپسی کی قسم کو int بتایا، تو ہم نے a + b واپس کیا، یہاں سے اگر ہم 1 2 12 واپس کرتے تب بھی کوئی خرابی نہیں آتی کیونکہ بالآخر اسے واپس کرنا پڑتا ہے کیونکہ یہ ایک عدد غلط ہو سکتا ہے، b ہو سکتا ہے۔ row، تو ہر بار 12 کو کیسے واپس کیا جا رہا ہے، یہ منطقی طور پر غلط ہو سکتا ہے، لیکن اس فنکشن کا مرتب کرنے والا اسے غلط قرار نہیں دے گا، یعنی یہ غلطی کے طور پر نہیں پڑھے گا۔



04:18:16

یہاں لائن نہیں آئے گی کیونکہ آخر کار انٹیجر واپس کیا جا رہا ہے لیکن یہاں اگر ہم 3.14 یعنی pi کی قدر یا کوئی دوسری ویلیو واپس کریں یا فرض کریں کہ ہم ایک کریکٹر کو واپس کرنے کی کوشش کریں گے تو اس کے بعد ہمیں ایک ایرر آئے گا کیونکہ ان ویلیوز کو واپس کرنے کی اجازت نہیں ہے، یہاں تک کہ اگر آپ 3.14 واپس کریں گے تو اس کے بدلے میں صرف تین ہی بھیجیں گے، یہ ہمارے پاس b +3 کیوں نہیں بھیجے گا، ہمیں پتہ ہونا چاہئے کہ b+3 کیوں مکمل ہے۔ پہلے سے ٹرن ٹائپ کریں اور یہ انٹیجر اے اور انٹیجر بی ہمیں پیرامیٹرز کے طور پر دیے گئے ہیں۔



04:18:49

اگر آپ اسے فنکشن کے اندر حاصل کر رہے ہیں، تو آئیے اسے یہاں سے کال کریں، sum a اور b، یہاں s نام کا ایک ویری ایبل بنائیں، تو یہاں کیا ہو رہا ہے کہ ہم نے sum کہا، جس میں ہم نے پہلے a پاس کیا، پھر b پاس کیا، یہ a کیا کرے گا، یہ اس کی ویلیو بھیجے گا، جو بھی ہمارا صارف a میں داخل کرے گا، ہم اسے a کو بھیجیں گے اور یہاں سے اس کی تعریف کے اندر copi ہو جائے گی، یہاں سے اس کی تعریف میں copi ہو جائے گی۔ b کی قدر جائے گی، پھر b کی قدر اس b کے اندر کاپی ہو جائے گی، ہم اسے x اور y بھی لکھ سکتے تھے، تو یہاں



04:19:25

سادگی کے لیے اگر ہم اسے xy لکھتے ہیں، تو یہاں سے a کی ویلیو x پر کاپی ہو جائے گی، b کی ویلیو y پر کاپی ہو جائے گی، پھر دونوں کا مجموعہ واپس آ جائے گا۔ جو بھی ویلیو واپس آتی ہے، یہ ہمارا اسائنمنٹ آپریٹر ہے، ہم اسے s نامی ایک نئے ویری ایبل میں اسٹور کریں گے اور پھر ہم اسے پرنٹ کرائیں گے۔ ہم s کی قدر لکھیں گے۔ رقم فیصد ہے d۔ ایک بار محفوظ ہونے کے بعد، آئیے کوڈ کو چلاتے ہیں۔ تھوڑی سی پیچیدگی، لہٰذا ٹینشن لینے کی بالکل ضرورت نہیں۔ ہم بہت ساری مثالیں دیں گے، بہت ساری وضاحتیں اور بہت کچھ



04:19:57

پراپرٹی دیکھیں تو فنکشن کا تصور بہت آسان لگے گا اور ذہن کے اندر بہت اچھی طرح بیٹھ جائے گا۔ سب سے پہلے، آئیے اپنا پہلا نمبر درج کریں۔ ہمیں اسے منطقی طور پر سمجھنا ہوگا۔ اب، کوڈ میں کیا لکھا ہے اس پر توجہ نہ دیں۔ ہمیں صرف صارف کی منطق کو سمجھنا ہے۔ ہم اس کوڈ کو ایک چھوٹے کیلکولیٹر کی طرح دیکھ سکتے ہیں۔ سب سے پہلے، کیلکولیٹر میں پہلا نمبر درج کرتے ہیں، ہم کہتے ہیں کہ ہم نے f داخل کیا۔ اس کے بعد، ہم کیلکولیٹر میں دوسرا نمبر درج کرتے ہیں۔ دوسرا نمبر جو ہم نے داخل کیا وہ تین تھا۔ اب جو پرنٹ ہوا، ہمارے لیے جو چھپا ہے وہ رقم ہے a۔ یہ یہاں چھاپا گیا، یہ تھوڑا سا لگ رہا تھا۔



04:20:29

آئیے فارمیٹنگ کو تھوڑا بہتر کریں اور اسے ایک بار پھر چلائیں۔ سب سے پہلے، ہم نے کیلکولیٹر میں اپنے پہلے نمبر میں چار ڈالے، اس کے بعد ہم نے اپنا دوسرا نمبر، دو، تو رقم چھ ہے، اور یہ ہمارے لیے پرنٹ ہو گیا، اور ہمارے کیلکولیٹر نے اپنا کام کر دیا۔ اب ہم سمجھتے ہیں کہ کیلکولیٹر اندرونی طور پر کیسے کام کرتا ہے۔ کیلکولیٹر کے اندر ایک فنکشن ہے جس کا نام sum ہے، جس میں اس نے انٹیجر a اور integer b لیا ہے، تو ہم نے اپنا a اور b لیا اور اس سے sum کہتے ہیں۔ رقم کی تعریف کہتی ہے کہ a کی قدر پہلے متغیر کو بھیجی جائے گی۔



04:21:03

اس کی ویلیو کو x میں کاپی کیا جائے گا، پھر اسے y میں کاپی کیا جائے گا، یہ x + y واپس کرے گا، اسے واپس کرنے کے بعد ہم نے اسے s میں محفوظ کیا اور پھر ہمیں s کی قدر ملی، یعنی رقم کی قدر پرنٹ کی، تو یہ ہمارا پورا فنکشن ہے جو پیرامیٹر اور ریٹرن ویلیو کے ساتھ کام کرتا ہے، اب جیسا کہ ہم نے رقم کو پرنٹ کرنے کے لیے کوڈ لکھا ہے، اس کے علاوہ ہمیں ایک اور فنکشن لکھے گا جو ہمیں پرنٹ کرے گا اور ہمیں ایک کوڈ لکھنے دیں گے۔ ہمارے نمبر n کا ٹیبل، تو آئیے اس کوڈ میں کچھ تبدیلیاں کرتے ہیں، ہم ایک نمبر داخل کریں گے، ہم نے n درج کیا ہے اور اسے اسکین کیا ہے۔



04:21:38

اور اسے ہمارے متغیر n کے اندر محفوظ کیا۔ اب ایک اور فنکشن بناتے ہیں جس کا نام void print table ہے اور اس فنکشن کے اندر ہم ایک متغیر int n بھیجیں گے۔ اب یہ ضروری نہیں کہ ہم اس کا نام صرف یہاں رکھیں، ہم اسے x، وازی نمبر یا کسی بھی چیز کا نام دے سکتے ہیں، اس کا مطلب ہے کہ آپ مین فنکشن کے اندر اس ویلیو کو کس ویری ایبل میں محفوظ کرتے ہیں اور دوسرے فنکشن کے اندر اسی ویلیو کو آپ کس قسم کا نام دینا چاہتے ہیں، یہ ایک ہی یا مختلف ہو سکتا ہے، اگر ہم اسے ایک ہی رکھیں گے تو معلوم کرنا آسان ہو جائے گا کہ کون سی ویلیو کہاں جا رہی ہے۔



04:22:10

لہذا اگر نام ایک ہیں تو ہمیں معلوم ہوگا کہ اگر ہم رقم تلاش کرنا چاہتے ہیں تو صرف a اور b تلاش کرنا ہوں گے، اس طرح x اور y نہیں مل سکتے، لیکن ہم انہیں الگ بھی رکھ سکتے ہیں۔ اب جب بھی ہم کسی فنکشن کے اندر کسی ویری ایبل کا اعلان کرتے ہیں تو اس ویری ایبل کے نام کا دائرہ کار صرف اس فنکشن تک ہوتا ہے، یعنی اگر مین فنکشن میں کوئی ویری ایبل n بنتا ہے، تو صرف وہی فنکشن جو اس n کو پہچان سکے گا مین فنکشن ہوگا۔ اب، اگر میں رقم کے اندر ایک اور نمبر n بناتا ہوں، تو وہ ایک مختلف متغیر n ہوگا۔ تو اس طرح میموری کے اندر دو ویری ایبلز بنیں گے، ایک نام n کے ساتھ ہمارے مین فنکشن کا ہوگا اور ایک



04:22:43

اگر یہ ہمارے دوسرے فنکشن کے لیے ہو تو ہم اسے ایک ہی نام یا مختلف نام بھی دے سکتے ہیں۔ کنونشن کے ذریعہ ہم ایک ہی نام دیں گے۔ یہ پرنٹ ٹیبل ہے، جس کے اندر ایک پیرامیٹر آتا ہے جس کا نام int n ہے۔ اب ہم اپنے پرنٹ ٹیبل فنکشن کی وضاحت کرتے ہیں۔ واپسی کی قسم باطل ہے۔ اس کے بعد ہم پرنٹ ٹیبل، اپنے فنکشن کا نام اور int n لکھیں گے۔ ہم نے لوپ کا استعمال کرکے کسی بھی نمبر کا ٹیبل کیسے پرنٹ کیا؟ تو اس فنکشن کے اندر، سب سے پہلے ہم ایک لوپ بناتے ہیں۔ i کی قیمت ایک سے شروع ہوگی اور i کی قدر 10 تک جائے گی اور جب بھی ہم i pps کریں گے، ہر بار پرنٹ کریں گے۔



04:23:19

آپ کو i in n مل رہا ہوگا تو یہ ہمارا پرنٹ ٹیبل فنکشن ہے، جس کے اندر ہم نے ٹیبل پرنٹ کرنے کے لیے اپنا پورا لوپ لکھا ہے، اس لیے ہم فنکشن کے اندر لوپ لکھ رہے ہیں، اب اس فنکشن کا کیا کریں گے، ہم مین فنکشن سے پرنٹ ٹیبل کو کال کریں گے اور اس میں اپنا ویریبل پاس کریں گے n جب بھی ہم کسی فنکشن کو کال کریں گے اور اس میں اپنا ویریبل پاس کررہے ہیں، تو یہاں جو ویری ایبل آتا ہے اسے آر ویریبل کہتے ہیں پیرامیٹر یعنی متغیر جو کالنگ سٹیٹمنٹ میں پاس ہوتا ہے۔



04:23:51

چلو لکھتے ہیں اس کو آرگیومینٹ کہتے ہیں یا اسے ایکچوئل پیرامیٹر آرگومینٹ یا اصل پیرامیٹر بھی کہتے ہیں کیوں کہ اصل پیرامیٹر کیوں کہ یہ وہ n ہے جس کے اندر اصل قدر ہوگی یہ وہ n ہے جو بتائے گا کہ کس نمبر کی ٹیبل پرنٹ کرنی ہے یہ ایک فنکشن ہے n اس کے اندر خالی ہے اس کی ابھی کوئی ویلیو نہیں ہے اس کی ویلیو کہاں سے آئے گی اس کی کالنگ سٹیٹمنٹ سے کال آئے گی اسٹیٹمنٹ سے کال آئے گی۔ یہ بتانا ہے کہ کس نمبر کا ٹیبل پرنٹ کیا جانا ہے اور یہاں ایک



04:24:22

متغیر کو پیرامیٹر کے طور پر لکھا جاتا ہے یا اسے رسمی پیرامیٹر بھی کہا جاتا ہے۔ رسمی کا مطلب یہ بتانے کے لیے ہے کہ اصل قیمت کال کرنے والے سے آئے گی، وہ دلیل دے گا، یہاں ہم نے صرف رسمی طور پر بتایا ہے کہ ایک عدد عدد کی قیمت n ہوگی، یہاں ہمیں یہ بتانے کی ضرورت نہیں ہے کہ یہ ایک عدد عدد ہوگا، یہاں سے ہم ڈیٹا کی قسم بتائے بغیر براہ راست کال کرسکتے ہیں، یہ بہت اہم کلیدی الفاظ ہیں، جن پر ہمیں توجہ دینے کی ضرورت ہے، ہم اس کوڈ کو کہتے ہیں، اب ہم اس کوڈ کو کہتے ہیں۔



04:24:53

آئیے اسے محفوظ کریں اور ایک نئی ٹرمینل ونڈو کھول کر چلائیں۔ تو پرنٹ ایف میں ہم فیصد d ٹائپ کرتے ہیں۔ محفوظ کریں اور چلائیں۔ اپنا نمبر درج کریں۔ تو ہم پانچ کا ٹیبل پرنٹ کرنا چاہتے ہیں۔ تو یہ ہمارے لیے پرنٹ ہو گیا 5 10 15۔ اسے اگلی لائن میں پرنٹ ہونا چاہیے تھا۔ آئیے اسے ایک بار پھر مرتب کریں اور پانچ کا ٹیبل دوبارہ پرنٹ کریں۔ چنانچہ اس بار پانچ کا جدول 5 10 15 20 25 30 35 اس طرح پرنٹ کیا گیا ہے۔ اب آئیے کوڈ پر ایک نظر ڈالتے ہیں۔ ہم نے کیا کیا؟ تھوڑا سا خلاصہ۔ ہم نے اپنا فنکشن بنایا جو



04:25:32

پرنٹ ٹیبل کو نام کے ساتھ ڈیکلیئر کیا اور صارف سے نمبر لیا، اس کے بعد ہمارا پرنٹ ٹیبل نمبر n کہا، اس ویلیو کو جو ہم پاس کرتے ہیں اسے آرگومینٹ یا ہمارا پیرامیٹر کہتے ہیں، اس کے بعد پرنٹ ٹیبل نے کیا کیا، اس نے نمبر n لیا، اس نمبر کو ہم پیرامیٹر یا اپنا فارمل پیرامیٹر کہیں گے، پھر اس نے اس نمبر کے مطابق اس کا ٹیبل پرنٹ کرایا، اس طرح اس کی ویلیو واپس آتی ہے، اس صورت میں اس کی ویلیو کچھ نہیں لوٹتی، اور اس کی قیمت کیا ہوتی ہے۔ اس معاملے میں اس نے ایک عددی قدر واپس کردی اب کچھ



04:26:03

ہم کچھ اختلافات سیکھیں گے۔ ہم دلیل اور پیرامیٹر کے درمیان فرق سیکھیں گے۔ یہ ایک بہت اہم سوال ہے۔ بہت سے انٹرویو لینے والے کیا کہیں گے، وہ آپ سے پوچھیں گے کہ دلیل اور پیرامیٹر میں کیا فرق ہے۔ یہ ایک ایسا کلاسیکل سوال ہے۔ جب میں نے اپنے پہلے سمسٹر میں C پڑھا تو مڈ سمسٹر اور اینڈ سمسٹر دونوں میں یہ سوال بار بار آیا کہ دونوں میں فرق لکھو۔ مجھے اب بھی یاد ہے کہ یہ تین نمبروں کا سوال تھا اور اس میں ہر پوائنٹ پر ایک نمبر تھا، اس لیے آپ مختلف پوائنٹس بھی لکھ سکتے ہیں۔



04:26:31

اس کے علاوہ کچھ اور نکات بھی ہیں لیکن اہم نکات اور ان اختلافات کا یہاں احاطہ کیا جا رہا ہے، دلائل کیا ہیں؟ وہ اقدار جو فنکشن کال میں پاس کی جاتی ہیں۔ فنکشن کال کے اندر جو قدریں ہم پاس کرتے ہیں وہ آرگیومینٹس کہلاتی ہیں۔ پیرامیٹرز کیا ہیں؟ فنکشن ڈیکلریشن اور تعریف میں اقدار۔ ڈیکلریشن میں جو ویلیو لکھی ہے اور تعریف میں ہم اسے پیرامیٹر کہتے ہیں جیسے یہاں اپنے کوڈ کے اندر ہم نے int a یا int n لکھا ہے، یہ ہمارا پیرامیٹر بھی ہے اور یہ پیرامیٹر بھی ہے اور کہاں



04:27:01

ہم نے ایک کال کی جہاں ڈیٹا کی قسم کا ذکر نہیں ہے، یہ ہماری دلیل ہے۔ اب آرگومنٹ کا کام ویلیو بھیجنا ہے، پیرامیٹر کا کام ویلیو وصول کرنا ہے۔ ہم دلائل کو اصل پیرامیٹر بھی کہتے ہیں اور ہم پیرامیٹرز کو رسمی پیرامیٹرز بھی کہتے ہیں۔ یہ کچھ اختلافات ہیں جنہیں آپ تھوڑا سا یاد کر سکتے ہیں۔ یاد رکھنا بھی بہت ضروری ہے کیونکہ جب بھی ہم کوئی زبان سیکھتے ہیں تو ہمیں کچھ چیزیں یاد رکھنا پڑتی ہیں کیونکہ جب بھی کوئی نیا کوڈ آپ کے سامنے آتا ہے تو ہمیں نحو کو یاد رکھنا پڑتا ہے جو بنیادی پروگرامنگ کے تصورات ہیں۔



04:27:30

بعد میں جب بڑے مسائل ہوتے ہیں تو ہم ان کو منطق سے حل کر سکتے ہیں جیسے AB CD میں، ہمیں AB CD کو یاد رکھنا پڑتا ہے کہ ہم اسے کیسے لکھتے تھے، ہم اسے بار بار لکھنے کی مشق کرتے تھے، اسی طرح اب ہم اپنے c کی AB CD سیکھ رہے ہیں، ہمیں اس AB CD کو بھی حفظ کرنا ہے۔ اب فنکشنز کے حوالے سے کچھ نوٹ ہیں، پہلا یہ کہ ایک فنکشن ایک وقت میں صرف ایک ہی ویلیو واپس کر سکتا ہے، جیسے کہ فنکشن میں پیرامیٹرز، تو آپ 100 لکھ سکتے ہیں، یہاں رقم کے تحت ہم نے x کے ساتھ ساتھ y بھی لیا ہے، اگر ہمیں کچھ اور تین نمبروں کی اوسط تلاش کرنی ہوتی، تو پھر



04:28:02

یہ تین نمبرز a b c لے سکتا ہے، یہ کسی بھی تعداد میں پیرامیٹرز لے سکتا ہے، لیکن واپسی ہمیشہ ایک واحد قدر ہوتی ہے، ایک فنکشن ہمیشہ صرف ایک قدر واپس کر سکتا ہے، یہ دو قدریں واپس نہیں کر سکتا۔ دوسرا یہ ہے کہ فنکشنز میں پیرامیٹرز میں تبدیلیاں کالنگ فنکشن میں اقدار کی عکاسی نہیں کرتی ہیں۔ آئیے پہلے اسے ایک مثال کے ذریعے دیکھتے ہیں، کیونکہ اگر ہم اس بیان کو دیکھیں گے تو ہم پیچیدگی دیکھیں گے۔ ہم کیا کرتے ہیں، سب سے پہلے ایک فنکشن بنائیں، ہم اسے پرنٹ پرائس کا نام دیں گے، یہ فنکشن کیا کرتا ہے، اسے صرف کیلکولیٹ پرائس کا نام بھی دیا جاسکتا ہے، یہ کسی بھی چیز کی قیمت لے گا۔



04:28:36

یہ اسے لے گا، 18 پر جی ایس ٹی شامل کریں اور پھر اس قدر کو پرنٹ کر لیں۔ تو آئیے اس فنکشن کی واپسی کی قسم کو باطل رکھیں۔ ہم اسے قیمت کا حساب لگاتے ہیں، اور کوئی بھی قیمت اس کے اندر آ رہی ہوگی، int ویلیو۔ اب اس فنکشن کی تعریف کو void calculate price کے طور پر لکھتے ہیں، اس کے اندر کوئی بھی ویلیو آ رہی ہو گی، int ویلیو۔ اب یہ خود ویلیو کا کیا کرے گا، ویلیو پلس، اصل میں، آئیے اس انٹیجر ویلیو کو فلوٹ میں تبدیل کرتے ہیں۔ کیوں تیرتے ہیں کیونکہ زیادہ تر امکان ہے کہ 18 پر اعشاریہ کی قدر ہوگی، لہذا یہ ہمارے لیے آسان ہوگا۔ یہ ویلیو کو ویلیو پلس میں بدل دے گا۔



04:29:13

0.18 کو ویلیو سے ضرب دیں، اس نے کیا کیا، اس نے یہاں اس ویلیو میں 18 پر GST شامل کیا اور اب یہ وہی ویلیو پرنٹ کرے گا، حتمی قیمت کا فیصد ایک ویلیو، تو یہاں ہم نے اپنی ویلیو مقرر کی ہے، چلیں شروع میں 100 کہتے ہیں، اب ہم حسابی قیمت کو 100 کے حساب سے کہتے ہیں، جس میں ہم اپنی ویلیو کو پاس کریں گے، چلو یہ ہوا، جو ہماری قیمت تھی، وہ ہوا اور ہمیں بتایا گیا کہ یہ کیا ہے ₹1، اس نے اس پر % GST لاگو کیا، تو یہ 11118 ہو گیا اور یہ



04:29:53

آخر میں اسے پرنٹ کر کے ہمیں دیا گیا ہے، یہ بالکل واضح ہے، اگر ہم نے فنکشنز کو اچھی طرح سمجھا ہے، ہم نے سوالات کو اچھی طرح سے دیکھا ہے، ویڈیو کو درمیان میں روک کر سوالات کو تھوڑا سا خود کرنے کی کوشش کریں، لہذا اب تک ہمیں کوڈ میں کوئی مسئلہ نہیں ہونا چاہئے، کوئی مسئلہ نہیں ہونا چاہئے، اسے بہت آسانی سے سمجھنا چاہئے کیونکہ ہم نے سب سے بنیادی چیزیں کی ہیں، ہم نے فنکشن کا اعلان کیا ہے، اب ہم نے فنکشن کا نام دیا ہے، فنکشن کا نام مختلف ہے۔ چلو قیمت پرنٹ کرتے ہیں.



04:30:22

پہلے ہم نے فنکشن کو کہا، اب ویلیو پرنٹ کرتے ہیں، تو ویلیو فیصد f ویلیو ہے، اب ہم اسے محفوظ کرتے ہیں، ہماری منطق کے مطابق کیا ہونا چاہیے، پہلے ہم نے ویلیو 100 لکھی، پھر کیلکولیٹ پرائس کہلائی، قیمت کا حساب کیا، اس نے ویلیو بدل کر 100 کر دی، 18 پر جی ایس ٹی، تو قیمت 118 ہو گئی، تو اب ہم یہاں مین 18 ویلیو پرنٹ کریں گے۔ ویلیو دوبارہ پرنٹ کرنے سے، اب ہمارے کنسول میں 118 پرنٹ ہو جائے گا اور پھر واپس آنے کے بعد، ہمارا فنکشن ختم ہو جائے گا، یہ ہماری منطق ہے۔



04:31:00

یہ بتا رہا ہے کہ اب اگر ہم اس فنکشن کو محفوظ کر کے چلاتے ہیں تو اس بار سب سے پہلے فائنل قیمت 118 ہے لیکن ویلیو 100 ہے، اس طرح کیوں چھاپی گئی ہے، یہاں کیلکولیٹ پرائس میں ہماری ویلیو 118 ہے لیکن جیسے ہی ہم مین فنکشن کے اندر واپس جاتے ہیں تو ویلیو دوبارہ 100 ہو جاتی ہے، یہ اس لیے ہوا کہ جو بھی تبدیلی ہو، ہم جو بھی کام کرتے ہیں، ہم اپنے دوسرے فنکشن کی طرح اپنی قیمت میں تبدیلی نہیں کریں گے۔ دلیل میں عکاسی کریں یعنی اس قدر



04:31:34

یہاں تک کہ اگر آپ اسے حسابی قیمت میں صفر کر دیتے ہیں، تو یہ اس قدر کے ساتھ ہماری دلیل کو تبدیل نہیں کر سکے گا۔ تو یہ ایک خاصیت ہے کہ آپ فنکشن کے اندر ایک ہی متغیر میں کتنی ہی تبدیلیاں کر لیں، اصل دلیل کی قدر میں کوئی تبدیلی نہیں آئے گی جو کالنگ کے وقت موجود تھی۔ لہٰذا اگر آپ کے فنکشن میں کوئی غلط کوڈ لکھا ہوا ہے جس کی وجہ سے فرض کریں کہ کچھ مسائل پیدا ہوگئے ہیں اور وہاں آپ کے ویری ایبل کی ویلیو صفر یا منفی یا غلط ہوجاتی ہے تو اس سے آپ کے مین فنکشن پر کوئی فرق نہیں پڑے گا کیونکہ اس کے اندر موجود تمام کوڈ درست ہیں۔



04:32:03

اور ویلیوز درست ہوں گی، تو یہ وہ جگہ ہے جہاں سے یہ خاصیت آتی ہے کہ فنکشن کے پیرامیٹرز میں تبدیلیاں کالنگ فنکشن میں ویلیو کو تبدیل نہیں کرتیں، کالنگ فنکشن کے اندر آرگیومینٹ کی ویلیو نہیں بدلتی اور ایسا کیوں ہوتا ہے، اس کے پیچھے وجہ یہ ہے کہ آرگیومینٹ کی کاپی فنکشن کو دی جاتی ہے، جب بھی اس مین فنکشن کو اس کی کل قیمت ملتی ہے، اس ویلیو کو اس سے اس ویلیو کا حساب لگایا جاتا ہے، اس کی قیمت اسے بھیجی جاتی ہے۔ ایک کاپی، یہ اصل ویلیو متغیر قیمت کا حساب لگانے کے لیے یہاں نہیں آتا ہے۔



04:32:37

اس کی ویلیو ویری ایبل ہے، اس آرگیومینٹ کی ویلیو اس کے اندر کاپی ہو جاتی ہے، اس کے اندر موجود ڈیٹا، ویلیو 100.0 میں، اس آرگیومینٹ کی تمام ویلیو پیرامیٹر کے اندر کاپی ہو جاتی ہے، یہی وجہ ہے کہ اگر آپ اس کاپی میں کچھ بھی بدلتے رہیں گے تو یہ اصل میں تبدیلیاں واپس نہیں لائے گی۔ اگلا، آئیے ایک سوال حل کرتے ہیں۔ سوال ہماری لائبریری فنکشن کا استعمال کرتا ہے۔ صارف کی طرف سے دی گئی تعداد کے مربع کا حساب لگانے کے لیے لائبریری کے افعال استعمال کریں۔ اب ہم جانتے ہیں کہ عدد کا مربع کیا ہوتا ہے۔ ایک عدد کا مربع ایک عدد ہے۔



04:33:11

d کو نمبر سے ضرب دیں لیکن یہاں ہمیں لائبریری فنکشن استعمال کرنا ہوگا۔ میتھڈ اے کے نام سے ایک لائبریری ہے جس میں ریاضی کے تمام افعال موجود ہیں۔ اس لائبریری کے اندر پاور نام کا ایک فنکشن ہے۔ اس کے بارے میں ہم پہلے بھی تھوڑی سی بات کر چکے ہیں۔ اب پاور فنکشن کا نام pow ہے جس میں سب سے پہلے ہم اپنا نمبر ڈالتے ہیں یعنی جس نمبر کا پاور لینا چاہتے ہیں، اس کے بعد ہم پاور داخل کرتے ہیں۔ اگر ہم دو داخل کریں گے تو کیا واپس آئے گا؟ یہ نمبر کو پاور 2 پر لوٹائے گا۔ یہاں اگر ہم po w n4 داخل کریں گے تو یہ کیا واپس آئے گا؟



04:33:49

اس کا مطلب یہ نہیں ہے کہ ہمیں n کے مربع کو طاقت 4 پر لے جانا ہے۔ تو ہم نمبر اور دو ڈالیں گے۔ تو آئیے اس کو استعمال کریں۔ سب سے پہلے، ہم اپنی لائبریری کو ایک بار شامل کریں گے۔ اگر ہم اسے شامل نہیں کرتے ہیں، تو ہم فنکشن کو استعمال نہیں کر سکیں گے۔ لہذا، ہمیں اوپر یہ طریقہ A شامل کرنا پڑے گا۔ اس کے بعد ہم کیا کریں گے؟ آئیے اسے اپنے مین فنکشن کے اندر کرتے ہیں۔ آئیے تبصرہ کرتے ہیں۔ آئیے ایک عدد int n لیتے ہیں۔ ہم int n کی قدر رکھیں گے۔ چار۔ اب فی صد d پرنٹ کرتے ہیں۔ یہاں ہم طاقت لکھیں گے۔ سب سے پہلے، ہم نمبر n اور پھر دو ڈالیں گے۔



04:34:25

لہذا اگر ہم اس بیان کو غور سے دیکھیں تو ہم نے کیا کیا ہے، ہم نے پاور فنکشن کو کہا ہے، تو پیرنز میں پہلا پیرامیٹر اس کا نمبر n ہے اور دوسرا پیرامیٹر ہے جو بھی پاور آپ نمبر پر ڈالنا چاہتے ہیں، یعنی دو۔ تو یہ فنکشن پاور 2 میں n کا حساب لگائے گا اور ہمیں واپس دے گا، جسے ہمارا پرنٹ ایف، یعنی ہمارا دوسرا لائبریری فنکشن، اسکرین پر پرنٹ کرے گا۔ اب ہم اس کوڈ کو ایک بار محفوظ کریں اور اسے چلائیں۔ یہاں ہم نے ایک وارننگ تیار کی ہے، وارننگ int کہتی ہے لیکن دلیل کی قسم ڈبل ہے، یعنی یہ نمبر ہماری طاقت ہے۔



04:35:00

فنکشن کیا کرتا ہے؟ یہ ہمیں دوہری قدر واپس کرے گا۔ اگر ہم اسے دیکھیں تو پاور فنکشن کا اعلانیہ بیان یہاں ہے۔ ہمارے پاس ڈبل ہے، اس کی واپسی کی قسم ڈبل ہے، اس کا نام پاور ہے، اور یہ دو اقدار لیتا ہے، ڈبل اور ڈبل۔ اب یہاں آٹومیٹک انٹیجر ٹائپ ہے، ہم نے انٹیجر n اور انٹیجر 2 کو پاس کر لیا ہے۔ یہ دونوں ویلیوز خود بخود مضمر طور پر ڈبل میں تبدیل ہو سکتی ہیں کیونکہ ڈبل ایک بڑی ڈیٹا ٹائپ ہے، اسے چھوٹے سے بڑے کنٹینر میں ڈالا جا سکتا ہے۔ بڑے کنٹینر سے چھوٹے میں کاسٹ کرنے میں دشواری ہوتی ہے، لہذا کمپائلر خود بخود ڈبل کو چھوٹے سے بڑے میں تبدیل کر دیتا ہے۔



04:35:30

اگر آپ ان کو اس میں ڈال سکتے ہیں تو ان کو تبدیل کر دیں گے لیکن یہ آپ کے ڈبل کو انٹیجر میں تبدیل نہیں کرے گا، اسی لیے ہم فلوٹنگ ویلیو پرنٹ کرنے کے لیے یہاں f لکھتے ہیں۔ تو ہمارا فیصد f صرف ڈبل کے لیے ہے، لیکن فلوٹنگ ویلیوز بھی صرف فیصد f کے ساتھ پرنٹ ہوتی ہیں، یہی وجہ ہے کہ جب بھی آپ ڈبل پرنٹ کرنا چاہتے ہیں، جب بھی آپ ڈبل کو اسکین کرنا چاہتے ہیں، تو آپ فیصد f استعمال کریں گے، فلوٹ خود بخود ہمارے پاس اس سے ان پٹ کے طور پر آجاتا ہے۔ اب اگلا سوال جس کے بارے میں ہم بات کریں گے اسے کہتے ہیں رائٹ فنکشنز ٹو کیلکولیٹ ایریا آف a



04:36:00

مربع، ایک دائرہ اور ایک مستطیل۔ تو ہمیں تین فنکشنز بنانے ہوں گے۔ ایک فنکشن مربع کے رقبے کا حساب لگائے گا، ایک دائرے کے رقبے کا حساب لگائے گا اور ایک مستطیل کے رقبے کا حساب لگائے گا۔ ہم سب سے پہلے اپنے پروگرام کے تینوں فنکشنز کا سب سے اوپر اعلان کریں گے۔ سب سے پہلے، چوک کے رقبے کے بارے میں بات کرتے ہیں۔ مربع کا رقبہ کیا کرے گا؟ فرض کریں کہ صرف انٹیجر سائیڈ آئے گا اور صرف انٹیجر مربع آئے گا، تو اس کی واپسی کی قسم انٹیجر ہوگی یا آئیے کرتے ہیں۔ فلوٹ اس کی واپسی کی قسم ہوگی اور اس کا نام مربع رقبہ ہے۔



04:36:33

ہم اسے اندر سے گزریں گے، ہم مربع کے سائیڈ کی تعریف لکھیں گے، فلوٹ، یہ کوئی انٹیجر سائیڈ نہیں ہے، یہ ایک فلوٹنگ ویلیو ہے، مربع کا رقبہ اندر آئے گا، ہمارے پاس ایک مربع کا پیرامیٹر فلوٹ سائڈ ایریا ہے، سائیڈ کو سائیڈ سے ضرب، تو یہاں سے براہ راست ہم سائیڈ کو سائیڈ سے ضرب کر کے واپس کریں گے، اب ہم دائرے کا رقبہ لکھیں گے، تو سب سے پہلے اس کے فلوٹنگ ایریا کی ویلیو دائرے کے اندر آئے گی۔ رداس، تو آئیے اس کی تعریف بھی لکھتے ہیں، فلوٹ دائرہ کا رقبہ اندر آئے گا، فلوٹ رداس، ہم کیا واپس کریں گے، دائرے کا رقبہ کیا ہے، ہمارے پاس pr s ہے۔



04:37:10

تو 3.1 4 کو رداس میں رداس سے ضرب دیں اب آئیے ایک اور فنکشن بنائیں جو مستطیل کے رقبہ کا حساب لگائے گا۔ فلوٹ مستطیل ایریا میں دو قدریں ہوں گی، فلوٹ، سائیڈ اے اور فلوٹ۔ اس کی واپسی کی قسم بھی فلوٹ ہے۔ ہم نے اسے مستطیل علاقہ کا نام دیا۔ اس میں دو قدریں آئیں گی، پہلے ہماری سائیڈ a اور پھر سائیڈ b۔ ایک مستطیل کا رقبہ کیا ہے، a * b۔ تو ہم فلوٹنگ ویلیو سے ضرب واپس کریں گے۔ لہذا آؤٹ پٹ میں ایک فلوٹنگ ویلیو بھی آئے گی، جو واپس آ جائے گی۔ ہم مین فنکشن کے اندر کیا کرتے ہیں؟



04:37:51

مثال کے طور پر، آئیے مستطیل کہتے ہیں۔ float a 5.0 float b = 10.0 اب آئیے اپنے علاقے کی ویلیو پرنٹ کریں۔ رقبہ فیصد f ہے۔ یہاں، ہم مستطیل ایریا کو کہیں گے، جس میں ہم پہلی ویلیو a، پھر دوسری ویلیو ہماری b کو پاس کریں گے۔ آئیے اس کوڈ کو محفوظ کریں۔ ہم نے تینوں افعال کا اعلان کیا ہے۔ ہم نے تینوں افعال کی وضاحت کی ہے۔ مین فنکشن کے اندر، ہم a اور b کی جانچ کرکے مستطیل کے رقبے کا حساب لگائیں گے۔ آئیے ٹرمینل کھولیں، کمپائل کریں اور رن کریں اور ہمیں آؤٹ پٹ 5*10 = 50 ملے گا۔ آپ اس طرح بہت سے فنکشن بنا سکتے ہیں۔



04:38:40

ہم اسے کوڈ کے اندر کر سکتے ہیں اور اپنے ذوق کے مطابق، ہمیں جس فنکشن کی ضرورت ہو، ہم اس فنکشن کو کال کر کے اس سے وہی کام کروا سکتے ہیں۔ اگلا موضوع جس پر ہم C میں بحث کرنے جا رہے ہیں اس کا نام Recursion ہے۔ اب تکرار ان طلباء کے لیے ایک جادوئی موضوع کی طرح لگ سکتی ہے جو پہلی بار پروگرامنگ سیکھ رہے ہیں۔ اگر آپ کو جادو نظر آنے لگتا ہے تو پریشان ہونے کی ضرورت نہیں ہے، آپ پروگرامنگ سیکھ رہے ہیں۔ Recursion کا مطلب ہے کہ جب بھی کوئی فنکشن خود کو کال کرتا ہے تو ہم اس عمل کو recursion کہتے ہیں۔ اب جیسا کہ مین فنکشن خود کو دوسرے سے کال کرتا ہے۔



04:39:10

فنکشنز کو کال کر رہا تھا، ایک فنکشن دوسرے فنکشن کو کال کر رہا تھا، ہیلو فنکشن جسے بینجو فنکشن کہا جاتا ہے یا کوئی دوسرا فنکشن دوسرے فنکشن کو کال کر سکتا ہے، یہ پروگرامنگ میں عام طور پر ہوتا ہے لیکن جب کوئی فنکشن خود کو کال کرتا ہے اور پھر خود کو دوبارہ کال کرتا ہے تو اس قسم کے عمل کو ریکریشن کہتے ہیں، جب کوئی فنکشن خود کو بار بار کال کرتا رہتا ہے، جیسے آئیے پہلے اسے مثال کی مدد سے دیکھتے ہیں، ہمیں ایک سوال پوچھنا ہے جس کا نام ہیلو ٹائم پانچ ہے۔



04:39:42

میں ہیلو ورلڈ پرنٹ کرنا چاہتا ہوں لیکن میں اسے پانچ بار پرنٹ کرنا چاہتا ہوں۔ اب ہم اسے آئٹمائزیشن کی مدد سے کر سکتے تھے، یعنی لوپس کی مدد سے کر سکتے تھے، لیکن یہاں ہم تکرار کا استعمال کریں گے۔ ایک چھوٹی سی بات جو بہت دلچسپ لگتی ہے، اگر پروگرامنگ میں کوئی کام لوپ سے کیا جا سکتا ہے تو وہ کام ریکریشن سے بھی ہو سکتا ہے اور جو کام ریکریشن سے ہو سکتا ہے وہ لوپ سے بھی ہو سکتا ہے، لیکن فرق یہ ہے کہ وہ کام جس کو لوپ کے ساتھ کرتے ہوئے کبھی کبھی ہمیں بہت سی لائنیں لکھنی پڑتی ہیں، وہ کام دو تین لائنوں میں ہو سکتا ہے جس میں صرف دو لائنوں کی ضرورت ہوتی ہے اور صرف دو لائنوں کی ضرورت ہوتی ہے۔ تکرار کے ساتھ لائنیں



04:40:14

بعض اوقات اسے حساب کے ساتھ کرنے کے لیے بہت ساری لائنیں لکھنی پڑتی ہیں لیکن لوپس کے ساتھ، یہ چند سطروں میں ہو سکتا ہے، اس لیے ہمیں یہ دیکھنا ہوگا کہ آئٹمز یعنی لوپس کہاں استعمال ہوں گے اور کہاں تکرار کا استعمال کیا جائے گا۔ لہذا، سب سے پہلے تکرار کی مثال دیکھنے کے لیے، ہم ہیلو ورلڈ کو پانچ بار پرنٹ کرتے ہیں۔ ہمارے پاس ایک فنکشن ہے جو ہمارے لیے ہیلو ورلڈ پرنٹ کرتا ہے، اس کا نام void پرنٹ ہیلو ورلڈ ہے اور اس کے اندر ہم ایک پیرامیٹر پاس کرتے ہیں جو بتائے گا کہ اسے کتنی بار پرنٹ کیا جائے گا، اسے ہم شمار، انٹ کاؤنٹ بھی کہہ سکتے ہیں۔ آئیے اس فنکشن کی تعریف لکھتے ہیں۔



04:40:46

جبکہ پرنٹ ہیلو ورلڈ اور یہاں گنتی آرہی ہوگی کہ اسے کتنی بار پرنٹ کرنا ہے، لیکن ہم اندر لوپ نہیں ڈالیں گے، اندر کیا کریں گے، فنکشن صرف ایک بار ہیلو ورلڈ پرنٹ کرے گا، یہ فنکشن کیا ہے، یہ تھوڑا سا سست ہے، یہ تھوڑا سا کام خود کر لے گا اور باقی کام اگلی کال میں خود کر لے گا، تو اب یہ کیا کرے گا، یہ پرنٹ کرنے کے لیے خود ہی گنتی کرے گا، یہ دنیا کو پرنٹ کرنے کے لیے نہیں بلکہ گنتی کرے گا۔ چھپی ہوئی گنتی کے اوقات، لہذا ہیلو ورلڈ پرنٹ کریں، اب اس نے اسے ایک بار پرنٹ کیا ہے، ہیلو ورلڈ ایک بار پرنٹ کیا گیا ہے، اب گنتی اوقات۔



04:41:20

مجھے n بار پرنٹ کرنا پڑا، یہ یہاں پانچ بار ہو سکتا ہے، یہ 10 بار بھی ہو سکتا ہے، اب جب کہ یہ ایک بار پرنٹ ہو چکا ہے، m اوقات کو پرنٹ کرنے کی ضرورت ہے اور اگر کسی بھی وقت جب یہ شمار -1 -1 -1 ہو، اس شمار کی قدر صفر ہو جائے، تو کچھ پرنٹ کرنے کی ضرورت نہیں ہے، اس لیے یہاں ہم صرف واپسی لکھیں گے، یہاں صرف واپسی لکھی جائے گی، یہاں واپسی کے بعد ze کچھ نہیں لکھا جائے گا، یہاں واپسی کے بعد ze کچھ نہیں لکھا جائے گا۔ be returned، اس لیے واپسی کی قسم باطل ہے، لہذا یہ ہماری تکرار کی مثال ہے، ہم اسے پرنٹ کریں گے۔



04:41:57

اسے کرسیو فنکشن بھی کہا جاتا ہے۔ اگر آپ اسے بالکل سمجھ نہیں پا رہے ہیں تو یہ کوئی مسئلہ نہیں ہے۔ بس اس کو الجھانے کے لیے پہلے فنکشن کو اس طرح بیان کیا جا رہا ہے، تاکہ تھوڑا سا جادو کیا جا سکے۔ ہم یہاں کیا کریں گے؟ ہم پرنٹ ہیلو ورلڈ کو کال کریں گے اور اپنی گنتی کو پانچ میں پاس کریں گے کیونکہ ہمیں اسے پانچ بار پرنٹ کرنا ہے۔ آئیے اس کوڈ کو محفوظ کریں اور اسے ٹرمینل میں چلائیں۔ تو ہمارے لیے ہیلو ورلڈ ہیلو ورلڈ ہیلو ورلڈ پانچ مرتبہ پرنٹ ہو چکا ہے۔ آئیے اسے ایک بار فارمیٹ کریں۔ اگلی لائن میں، ہم ہیلو ورلڈ کو پانچ بار پرنٹ کریں گے۔



04:42:28

اب پرنٹ ہو رہا ہے اگر ہم یہاں 10 لکھتے یا 10 لکھنے کے بعد محفوظ کر لیتے تو ہیلو ورلڈ 10 بار پرنٹ ہو چکا ہوتا۔ اب اس فنکشن نے کیا کیا، پرنٹ ہیلو ورلڈ فنکشن اپنے اندر ہی کال کر رہا ہے، یعنی یہ پرنٹ ہیلو ورلڈ کو کال کر رہا ہے اور بار بار اس کال کی وجہ سے ایک فنکشن ہیلو ورلڈ کو صرف ایک بار پرنٹ کر رہا ہے، تو یہ فنکشن خود کو پانچ بار کال کرتا ہے اور بار بار ہیلو ورلڈ پرنٹ ہوتا ہے، تو یہ ایک ریکسریو فنکشن ہے اور ہم نے ابھی ریکریشن کی ایک مثال دیکھی ہے، ریکریشن لائٹ بنتی ہے۔



04:43:00

آئیے ریاضی کی مدد سے سمجھیں۔ اب، جن بچوں کو سکول میں ریاضی پسند نہیں تھا وہ تھوڑا بورنگ لگ سکتا ہے، لیکن ہم بورنگ ریاضی نہیں سکھائیں گے۔ یہاں ہم ایک چھوٹی سی بات چیت کریں گے۔ جیسے، ہمارے پاس ریاضی میں افعال تھے۔ اگر ہمیں fx1 تلاش کرنا ہے تو یہ v کا مربع ہوگا یعنی 1۔ اگر ہمیں f2 تلاش کرنا ہے تو یہ 2 کا مربع ہوگا یعنی 4۔ اگر ہمیں f3 تلاش کرنا ہے تو یہ 3 کا مربع ہوگا یعنی 9۔ اسی طرح کچھ ایسے اساتذہ بھی تھے جو ہمیں تھوڑی پریشانی دیتے تھے۔ تو ہم یہ کیسے کریں گے؟ سب سے پہلے، fxxx.pro نے اس کی قیمت معلوم کی اور ہمیں دے دی۔ تو، یہ



04:44:14

ہم کہہ سکتے ہیں کہ ہمارا recurse فنکشن، یہ وہی ہے جو ہم نے ریاضی میں ہوتا ہوا دیکھا ہے، پہلے بیرونی f نے اندرونی والی کی قدر نکالی، اسے اندرونی کہا، پھر اندرونی نے کچھ کام کیا اور وہ کام باہر والے کو دیا، پھر بیرونی نے کچھ کام کیا اور وہ ہمیں دیا، تو یہاں سطحیں ہیں، کال کرنے کے اس طریقے سے، اگر کوئی استاد بتا سکتا ہے کہ f کا کیا ہوتا ہے، تو ہم f کے بارے میں بتا سکتے ہیں۔ x کے f کے f کا f تلاش کرنا ہے، تو اس صورت میں کیا ہوگا، سب سے پہلے ہم f one کی ویلیو تلاش کریں گے، یہاں اس فنکشن نے اپنا حساب لگایا ہے۔



04:44:52

کال کی گئی، پھر اس فنکشن نے دوبارہ کال کی، تو تین کالیں ہوئیں، ایک جو ہم نے اس کو کی، ایک جسے اس نے اپنے آپ کو بلایا، ایک جسے اس نے دوبارہ خود سے کال کی، تو سب سے پہلے اندرونی کال کام کرے گی، اندرونی کال کیا کرے گی، یہ ہمیں x = 2 کے لیے 4 دے گا، پھر بیرونی کال کام کرے گی، یعنی اتنا فنکشن، یہ فنکشن کیا کرے گا، f4st کام کرے گا، f4st کام کرے گا، f4st کام کرے گا۔ یعنی یہ فنکشن، یہ فنکشن ہمیں 16 کا مربع واپس کرے گا، یعنی ہمیں بدلے میں 256 ملے گا، تو کیا ہوا، کام لیول کے حساب سے کیا گیا اور



04:45:33

ہم اسے ایک عام فنکشن کال کی طرح مفاہمت کی مثال کہہ سکتے ہیں، یعنی جب ایک فنکشن دوسرے فنکشن کو کال کرتا ہے، تو اس میں کیا ہوتا ہے، ہمارے پاس ایک مین فنکشن ہے، مین فنکشن کیا کرتا ہے؟ یہ ایک نارمل فنکشن کو کال کرتا ہے، یہ نارمل فنکشن ہمارے لیے کچھ کام کرتا ہے اور مین فنکشن میں ایک ویلیو واپس کرتا ہے، یہ ممکن ہے کہ یہ نارمل فنکشن کسی اور فنکشن کو کال کر رہا ہو، کہ y کچھ کام واپس کر کے f کو دے، اور f اپنا کنٹرول واپس مین فنکشن میں واپس کر دے، اس طرح ہمارا نارمل فنکشن ہوتا ہے۔



04:46:09

ایک کال ہے لیکن جب بھی ہم تکرار کی بات کرتے ہیں تو تکرار میں کچھ خاص ہوتا ہے۔ ریکریشن کے اندر، اگر ہمارا مین فنکشن ایک فنکشن fxxx.pro کو فنکشن میں منتقل کر رہا ہے، تو جب بھی کال کی جا رہی ہے، وہ خود ہی کی جا رہی ہے۔ لہٰذا جو فنکشنز خود کو بار بار پکارتے ہیں وہ recurse functions کہلاتے ہیں اور ہم اس عمل کو recursion کہتے ہیں۔ اب تکرار کرنے کا ایک بہت ہی منطقی طریقہ ہے اور ہم اس منطقی طریقے کو سوال کی مدد سے سمجھیں گے۔ ہمارا سوال پہلے اور قدرتی نمبروں کا مجموعہ تلاش کرنا ہے۔ اب ذرا اس کا تجزیہ کرتے ہیں۔



04:47:04

سب سے پہلے اور قدرتی اعداد کا مجموعہ کیا ہو سکتا ہے؟ ایون نمبرز 1 + 2 + 3 + 4 سے n - 1 + n ہیں جیسے 5۔ اگر ہمیں n = 5 کی قدر تلاش کرنی ہے تو یہ 1 + 2 + 3 + 4+ 5 ہوگی۔ اگر ہمیں n = 4 کی قدر تلاش کرنی ہے تو یہ 1 + 2 + 3+ 4 ہوگی۔ تلاش کرنے کے لئے + 3 = n کے لئے + 3 ہوگی۔ n = 2، یہ 1 + 2 ہوگا۔ n = 1 کو تلاش کرنے کے لئے، یہ 1 ہوگا۔ اب n = 0 نہیں ہو سکتا کیونکہ قطار ایک مکمل نمبر ہے، یہ ایک قدرتی نمبر ہے۔ یہاں ہم ایک نمونہ دیکھیں گے۔ نمونہ یہ ہے کہ یہ قدر n کے تمام قدرتی اعداد میں مشترک ہے۔ اس کے بعد اس کے بعد یہ قدر عام ہے۔



04:47:52

اس قدر مشترک ہونے کے بعد یہ قدر مشترک ہے اور اسی طرح رہتی ہے، تو ہم قدرتی اعداد کا مجموعہ کیسے لکھ سکتے ہیں، ہم n = 2 کے لیے کیا لکھ سکتے ہیں، ہم اسے n - 1 + 2 کے مجموعہ کے طور پر لکھ سکتے ہیں، یعنی آپ n - 1 تک کا حساب لگاتے ہیں، اس میں صرف دو جوڑتے ہیں، پھر ہمارے پاس کیا ہوگا، n کا مجموعہ یا قدرتی اعداد کا مجموعہ آسانی سے مل جائے گا، پھر ہم آسانی سے اس کا مجموعہ لکھیں گے۔ ایک، اس میں دو کا اضافہ کریں، یہ یہاں کیا ہے، دو تک کا مجموعہ تلاش کریں، اس میں تین کا اضافہ کریں، اس کا کیا مطلب ہے، تین تک رقم تلاش کریں اور اس میں چار کا اضافہ کریں، یہ ہمیں تین دیتا ہے۔



04:48:31

اس کا خلاصہ اور ہم نے اس میں چار کا اضافہ کیا، اس کا کیا مطلب ہے، چار تک کا مجموعہ تلاش کریں اور اس میں پانچ کا اضافہ کریں، تو یہ ہمارا چار تک کا مجموعہ ہے اور ہم نے اس میں پانچ کا اضافہ کیا، اس کا کیا مطلب ہے، n - 1 تک کا مجموعہ تلاش کریں اور اس میں n کا اضافہ کریں، تو یہ تمام اعداد ہمیں n - 1 تک کا مجموعہ دے رہے ہیں اور ہم نے اس میں اپنا n شامل کیا، یہاں اس میں تین کا اضافہ ہے، جس میں ہم تین کا اضافہ کرتے ہیں۔ ایک کا مجموعہ، جس میں ہم نے دو کا اضافہ کیا، تو ایک طرح سے ہم دیکھ سکتے ہیں کہ ہمیں n کا مجموعہ تلاش کرنا ہے، تو ہمیں کیا کرنا ہے؟



04:49:07

یہ کہہ رہا ہے کہ n کی جمع تلاش کرنے سے پہلے، n - 1 کا مجموعہ تلاش کریں اور اس میں n کا اضافہ کریں، تو sum کا فنکشن وہی ہے، یعنی جو کام ہم یہاں کرنے کی کوشش کر رہے ہیں وہ وہی ہے، اس میں بس تھوڑا سا فرق ہے، اسے صرف ایک قدر جمع کرنا ہے، تو یہ فنکشن sum function کیا کرتا ہے، یہ خود کال کر رہا ہے، اسے کال کر رہا ہے، پھر ہم دیکھ سکتے ہیں کہ اس کے لیے کال کر رہے ہیں۔ 1، پھر یہ n - 2 کو کال کرے گا، پھر یہ n - 3 کو کال کرے گا، یہاں تک کہ ہم یہاں تک پہنچ جائیں



04:49:36

ہم n = 1 تک پہنچ جاتے ہیں لیکن اس تک نہیں پہنچ پاتے، یہ ہماری آخری قیمت ہے۔ اب رجکن بھی خود کو کہیں نہ کہیں کال کرے گا، لیکن وہ ایک حد تک کال کر سکتا ہے، اسے خود کتنی بار کال کرنی ہے، اگر اسے n نمبروں کا مجموعہ معلوم کرنا ہے تو اسے n بار کال کرنا ہوگی، اور ان کالز کو کون ٹریک کرے گا؟ ان کالز کو ہمارے پیرامیٹرز کے ذریعے ٹریک کیا جائے گا کیونکہ پیرامیٹرز میں، جس طرح ہم نے گنتی کی ویلیو کو کم کر کے صفر بنایا، اسی طرح یہاں، n کی ویلیو کو کم کر کے، ہم اسے پہلے پانچ، پھر چار، پھر تین، پھر دو، پھر ایک پر لے جائیں گے، ایک کے بعد کوئی اور قدر ہے۔



04:50:09

صرف یہی نہیں، کیونکہ قدرتی اعداد زیادہ ہیں، ورنہ ہماری آخری قدر یہاں ہوگی، ہماری تکرار یہیں ختم ہو جائے گی، اور اس حالت کو بیس کیس کہا جاتا ہے۔ اب ہم اس پورے کوڈ کو ایک بار لکھیں اور تمام چیزوں کو سمجھیں۔ ہم سب سے پہلے کیا کریں گے؟ ہم اوپر اپنے فنکشن کا اعلان کریں گے۔ فنکشن کا نام sum ہے۔ اس کے اندر ہم اپنا ن پاس کریں گے۔ n کی قدر کچھ بھی ہو سکتی ہے۔ سب سے پہلے ہم اپنا ریکرس فنکشن لکھتے ہیں۔ اب یہ فنکشن void قسم کا نہیں ہے، یہ انٹیجر ویلیو لوٹائے گا اور یہ انٹیجر ویلیو کیا ہوگی؟



04:50:41

ہماری رقم انٹیجر ویلیو ہوگی، تو int sum int a ہمیں a سے a تک کا مجموعہ تلاش کرنا ہے، تو sum کا فنکشن کیا تھا، ہمیں n سے n تک کا مجموعہ تلاش کرنا ہے، تو پہلے n سے n تک مائنس تلاش کریں اور اس میں a کا اضافہ کریں، تو ہم کیا کریں گے، ہم n سے n مائنس کی رقم تلاش کریں گے، تو ہم یہاں a کا نام لکھیں گے، تو ہم یہاں a کا نام لکھیں گے۔ n مائنس 1 کا ایک متغیر انٹیجر صفر sum بنائیں، ہم یہ کہنا چاہتے ہیں کہ یہ ویلیو دو a کے مجموعے کی نشاندہی کرتی ہے اور ہم اسے اس متغیر کے اندر ذخیرہ کریں گے، یہ کہاں سے آئے گا، یہ اس sum فنکشن سے آئے گا کیونکہ اگر یہ sum function a ہے



04:51:28

اگر یہ n اقدار کا مجموعہ تلاش کر سکتا ہے، تو یہ یقینی طور پر n کی قدروں کو تلاش کر سکتا ہے کیونکہ اب ہم منطق لکھیں گے، یہاں سے ہمیں n اقدار کا مجموعہ ملے گا۔ ٹرسٹ ریکریشن میں ایک بڑا عنصر ہے، ہمیں یقین ہونا چاہیے کہ ہمارا ریکرس فنکشن کام کرے گا اور ہمیں دے گا، اس لیے یہاں ہمیں یقین ہونا چاہیے کہ یہ ہمارے لیے n-1 ویلیوز کا مجموعہ حاصل کرے گا۔ تکرار تھوڑا مشکل موضوع ہو سکتا ہے لیکن جتنا زیادہ ہم اس کے سوالات کو حل کریں گے، اتنا ہی زیادہ ہم سمجھیں گے کہ اس کا کیا مطلب ہے، خود کو تکرار کرنے کی منطق کیا ہے۔



04:52:00

تو sum myway، اس نے n-1 کا مجموعہ نکالا ہے، اس کے بعد ہم کیا کریں گے، ہماری رقم A تک کی کل رقم ہوگی، جو کہ n - 1 + n کا مجموعہ ہوگا، دائیں اور یہ فنکشن اسے واپس کر کے ہمیں n کا مجموعہ دے گا۔ تو آئیے ایک بار پھر تھوڑا سا سمجھیں، اس فنکشن کا کام یہ ہے کہ یہ ہمیں ایک سے لے کر n تک کے تمام قدرتی نمبروں کا مجموعہ دے گا، تو ہم سب سے پہلے کیا کریں، ہم n - 1 تک قدرتی اعداد کا مجموعہ لیتے ہیں، تو ہم نے اسے لے کر اس متغیر میں ذخیرہ کیا، پھر n کا مجموعہ کیا ہے، n - 1 تک کا مجموعہ، ان دونوں کا جمع کرکے اس میں جمع کیا جائے گا۔



04:52:42

ہم نے n کی رقم حاصل کر لی ہے۔ اب یہاں بنیادی شرط کیا ہوگی؟ ہر بار ہمارے n کی قدر -1 پر جاتی رہے گی۔ تو بنیادی حالت ہو گی اگر ایک کی قدر ایک ہو جاتی ہے۔ اس صورت میں، ہم جانتے ہیں کہ ایک کا مجموعہ کیا ہے۔ لہذا، ہم براہ راست جواب واپس کریں گے. f ایک ہے۔ آئیے اسے محفوظ کریں اور اسے اپنے مین فنکشن میں کال کریں۔ ایک رقم پرنٹ کریں فیصد ہے۔ آئیے پاس کرتے ہیں ڈی۔ سب سے پہلے، ہمیں 1 سے 5 کی رقم کا حساب لگانا ہوگا اور اسے پرنٹ کرنا ہوگا۔ آئیے اسے بچائیں اور چلائیں۔ تو پانچ تک 1 + 2 + 3 + 4 + 5 کا مجموعہ، ہمیں 15 ملا ہے۔ اور یہ کیسے آئے گا؟



04:53:23

ایک بار جب ہم اس کا تھوڑا سا تجزیہ کریں تو ہم نے پہلے کیا کیا؟ ہم نے سم آف فائیو کہا۔ پانچوں کی جمع نے سوچا کہ سب سے پہلے، مجھے چار کا مجموعہ شمار کرنے دو؛ میں اس میں کیا کروں گا، اس میں پانچ کا اضافہ کروں گا۔ Sum of Four نے سوچا کہ سب سے پہلے مجھے ایک سے تین کی رقم معلوم کرنے دو، میں اس میں چار کا اضافہ کر دوں گا۔ پھر سم آف تھری نے ایک ہی بات سوچی، کہ میں بھی سمارٹ بن جاؤں گا، مجھے ایک سے دو کا حساب لگانے دو، میں صرف اس میں تین کا اضافہ کر دوں گا، میں زیادہ کام کیوں کروں، سم آف ٹو نے سوچا کہ یہ میری ہینڈ رائٹنگ بہت خراب ہے کہ



04:53:56

میں ایک کا حساب لگاؤں گا؛ میں اس میں دو جوڑ دوں گا، اور ایک کا مجموعہ جانتا ہے کہ اس کی قیمت ایک ہے، تو اگر ہمارا عمل ایسا تھا، تو اصل میں کیا ہوا ایک ہمارا بیس کیس تھا، ایک نے یہاں ایک واپس کیا، تو یہاں یہ 1+2 تھا، جس کا مطلب ہے 3، یہ ​​قیمت 3 یہاں واپس آنے کے بعد واپس آئی، تو یہاں یہ 3 + 3 ہے، جس کا مطلب ہے 6، یہ قدر 6 ہے جس کا مطلب یہ ہے کہ یہ 6 +10 ہے، یہاں یہ 10، 10 ہے یہاں واپس آیا، یہاں یہ 10 + 5 تھا، جس کا مطلب ہے 15، تو یہ ویلیو یہاں سے واپس آ گئی اور ہمارے مین فنکشن میں واپس آ گئی اور ہمیں جواب 15 ملا، تو ہر سطح پر ہمیں ملتا ہے۔



04:54:41

ہم کام کو اگلے درجے تک پہنچاتے رہتے ہیں، لیکن اس کام کو اصل میں کہیں نہ کہیں لکھنا ہوتا ہے اور ہم نے اسے لکھنے کا کام کیا ہے۔ یہاں ہمارے بیس کیس میں، بیس کیس کیا کرے گا، یہ تکرار کو روک دے گا، اس کے علاوہ ہم مان رہے ہیں کہ اگلا لیول کچھ کام کرے گا اور ہمیں دے گا، اگلا لیول کچھ کام کرے گا اور ہمیں دے گا، لیکن وہ کام درحقیقت کہیں، کسی نہ کسی سطح پر ہونا ہے، اس لیے وہ کام ہمارے بیس کیس پر، ہمارے آخری لیول پر ہوتا ہے، تو یہ ہماری سطحیں ہیں جن کو این ٹائم کہا جاتا تھا۔ یہ پہلا درجہ تھا، یہ دوسرا درجہ تھا، یہ تیسرا درجہ تھا، یہ



04:55:15

یہ چوتھا لیول تھا، یہ پانچواں لیول تھا، پروگرامنگ کی زبان میں اسے recurse Tree کہتے ہیں، لیکن کیا ہمیں اتنی تفصیل میں جانے کی ضرورت ہے، نہیں، میں یہ بھی نہیں سمجھتا کہ ہمیں C پروگرامنگ میں recurse Tree کا لفظ یاد رکھنے کی ضرورت ہے، لیکن اگر ہمیں ڈایاگرام سے recursion کو سمجھنا ہے تو ہم نے کیا کیا، ہم recursion کو بکس سے سمجھتے ہیں، recursion سے ہم سمجھ گئے ہیں، کوڈ سے recursion کو سمجھنا ہے۔ خاکہ سے تکرار، اس لیے ہم نے تکرار کو سمجھنے کی چاروں سمتوں پر بحث کی ہے، اور یہ میرا سب سے پیارا ہے



04:55:48

میں نے اپنے ذہن میں تکرار کو بہت اچھی طرح سے برقرار رکھنے کے لئے بہترین طریقے سے بہت کوشش کی ہے، لہذا ہم نے وہ کام بہت اچھی طرح سے کیا ہے، اب اگلا سوال کرتے ہیں. اگلا سوال کہتا ہے کہ ہمیں n کا فیکٹوریل تلاش کرنا ہے، تو جس طرح ہم نے n کا مجموعہ پایا، اسی طرح یہ n کا فیکٹوریل کہتا ہے۔ اب کٹوتی کرنے سے پہلے، ہمیں تھوڑا سا کاغذ اور قلم استعمال کرنا ہوگا اور ہمیں اپنے دماغ میں تھوڑا سا منطقی طور پر سوچنا ہوگا اور یہ معلوم کرنا ہوگا کہ تکرار کیسے ہوگی۔ یہ بہت معیاری سوالات ہیں جو ہم پوچھ رہے ہیں۔ زیادہ تر یہ سوالات C میں پوچھے جاتے ہیں۔



04:56:20

امتحانات کے دوران اتنی ٹینشن لینے کی ضرورت نہیں، ایک بار ان سوالات کی مشق کریں، اور ایک یا دو ہوم ورک بھی کر لیں، آپ کو کوئی پریشانی نہیں ہوگی۔ امتحان میں ہمیں n کا فیکٹوریل تلاش کرنا ہوتا ہے، تو جیسے کہ sum نے کیا کہا، sum نے n کا مجموعہ نکالا، تو n - 1 کا مجموعہ نکال کر اس میں n کا اضافہ کریں، ایسا ہی معاملہ ہمارے ساتھ ہے، اگر ہم فیکٹوریل کے فارمولے کو غور سے دیکھیں تو 5 فیکٹوریل کیا کہتا ہے، 5 فیکٹوریل 1 * 4 * 5 * 4 ہے 2 * 3 * 4 3



04:56:57

fto 1 * 2 * 3 کیا ہے 2 fto 1 * 2 کیا ہے اور 1 fto کیا ہے، ہمارا 1 تو ہم اسے 5 فیکٹوریل کے لیے کیسے لکھ سکتے ہیں، اسے 4*5 کے طور پر لکھا جا سکتا ہے، ہم اسے کیسے لکھ سکتے ہیں، 4 fto کو 3 fto * 4 کے طور پر لکھا جا سکتا ہے، اسے 2 fto *3 کے طور پر لکھا جا سکتا ہے، یہ ہمیشہ fto *3 کے طور پر لکھا جا سکتا ہے، اور یہ ہمیشہ ہمارے لیے ایک ہی رہے گا۔ کیا ہم اس کے نیچے حساب لگائیں گے، یا تو ہم 0 فیکٹوریل لکھیں گے جو کہ row بھی ہے لیکن ہم اسے قطار سے ضرب نہیں لگا سکتے، لہٰذا بیس کیس کے طور پر ہم 1 فیکٹوریل لاگو کر سکتے ہیں جہاں ویلیو پہلے سے طے شدہ ہو گی، تو یہاں بھی



04:57:34

ہمارے پاس ریکرو فنکشن ہے۔ ریکرس فنکشن کیا ہے، اگر ہم n کا فیکٹوریل تلاش کرنا چاہتے ہیں، تو اس کی قدر کیا ہوگی؟ بس مجھے n - 1 کا فیکٹوریل بتائیں۔ مجھے صرف اس میں اپنے n کو ضرب دینا ہے۔ یہ ہمارا ریکرس فنکشن ہے، بالکل sum کی طرح۔ اگر ہم n کا مجموعہ تلاش کرنا چاہتے ہیں، تو ہمیں کیا کرنا چاہیے؟ مجھے n - 1 کا مجموعہ بتائیں، میں اس میں n کا اضافہ کروں گا۔ اسی طرح، مجھے فیکٹوریل میں n کا فیکٹوریل بتائیں، میں اس میں n - 1 کو ضرب دوں گا، پھر مجھے n کا فیکٹوریل ملے گا۔ لہذا، ہم اسی طریقہ کو کوڈ میں تبدیل کر سکتے ہیں۔



04:58:07

آئیے پہلے اپنا فنکشن فیکٹوریل لکھتے ہیں جس میں ہمیں کسی بھی نمبر n کا فیکٹوریل تلاش کرنا ہے۔ اب فنکشن کی تعریف int factorial ہے جس میں ہم پیرامیٹر n کو پاس کریں گے۔ n کے فیکٹوریل کو تلاش کرنے سے پہلے، آئیے n - 1 کا فیکٹوریل تلاش کریں۔ ہمیں یقین ہے کہ یہ فنکشن n-1 کا فیکٹوریل کا حساب لگا کر دے گا۔ تو ہم n - 1 = فیکٹوریل n-1 کا int فیکٹوریل لکھیں گے۔ اب n کا int فیکٹوریل n کا فیکٹوریل ہوگا - 1 کو n سے ضرب اور ہم n کا فیکٹوریل واپس کریں گے اور یہاں بیس کیس میں کیا ہوگا، ہم کب روکیں گے؟



04:58:53

جب ہمارے n کی قدر ایک ہو جائے گی تو ہم رک جائیں گے۔ جیسے ہی n کی قدر ایک ہو جائے گی، ہم ایک واپس کریں گے یا درحقیقت، ہم یہاں قطار میں رک سکتے ہیں۔ اگر واپسی صفر ہے، تو اس صورت میں ہم ایک واپس کریں گے۔ تو آئیے اسے بچاتے ہیں۔ اب یہاں ہم فیکٹوریل is لکھیں گے، آئیے پانچ کا فیکٹوریل تلاش کرتے ہیں۔ نیا ٹرمینل کمپائل اور رن، تو پانچ کا فیکٹوریل 120 پرنٹ ہو گیا۔ اسی طرح ہم چار کا فیکٹوریل بھی تلاش کر سکتے ہیں۔ 4 کا فیکٹوریل 24 کے طور پر پرنٹ کیا جائے گا۔ اب ہم تجزیہ کرتے ہیں، ہم نے یہاں کیا کیا؟



04:59:26

فیکٹوریل میں، ہمارے فیکٹوریل فنکشن میں ہمیں n کا فیکٹوریل تلاش کرنا تھا۔ اسے تلاش کرنے کا آسان ترین طریقہ کیا ہے؟ n - 1 کا فیکٹوریل تلاش کریں۔ اسے کون تلاش کرے گا؟ اسے وہی فنکشن ملے گا، اس میں صرف پیرامیٹر بدلے گا۔ اس کے بعد، فیکٹریل n - 1 کو n سے ضرب دیں۔ لہذا، فیکٹریل n حاصل کیا جاتا ہے. ہم آخر کار اسے واپس کر دیں گے۔ اور یہاں بھی درخت کا ڈھانچہ بنا کر، ہم پوری طرح سمجھ سکتے ہیں کہ چیزیں کیسے کام کریں گی۔ یہاں بھی وہی کچھ ہونے والا ہے جو ہم نے پہلے کیا تھا۔ ہم نے فیکٹریل باپ کہا اور اس نے پہلے فیکٹریل سوچا۔



04:59:57

میں f نکالوں گا اور اسے پانچ سے ضرب دوں گا، پھر وہ فیکٹوریل 3 کہے گا، میں اسے چار سے ضرب دوں گا، پھر وہ فیکٹوریل دو کو کہے گا، میں اسے تین سے ضرب دوں گا، پھر وہ فیکٹوریل ون کہے گا، میں اسے دو سے ضرب دوں گا، فیکٹوریل دو، اور وہ فیکٹوریل 0 کہوں گا، میں اسے فیکٹوریل سے ضرب دوں گا، میں اسے فیکٹوریل سے ضرب دوں گا، کیونکہ اس کی قیمت ایک ہے، کیونکہ اس کی قیمت ایک ہے، کیونکہ اس کی قیمت ایک ہے یہاں 1، 1*2 ہمیں 2 دے گا، یہاں دو لوٹا ہے، یہ 2*3 6 دیتا ہے یہاں، 6



05:00:31

اس نے لوٹا اور 6*4 دیا 24 اس نے 24 لوٹا تو اس نے 24*5 = 120 دیا تو ہمارے پاس حتمی جواب تھا فیکٹوریل فائیو کے لیے 120 پرنٹ کیا گیا اگلی چیز جس کے بارے میں ہم بات کریں گے وہ recursion کی کچھ خصوصیات ہیں تو recursion کی اپنی کچھ خصوصیات ہیں سب سے پہلے وہ کچھ بھی ہے جو آئٹمائزیشن کے ساتھ کیا جا سکتا ہے اور یہ تمام کام recursion کے ساتھ کیا جا سکتا ہے۔ تکرار کے ساتھ کیا جا سکتا ہے اور وہ تمام کام جو ہم تکرار کے ساتھ کرتے ہیں آئٹمائزیشن کے ساتھ کیا جا سکتا ہے بعض اوقات تکرار سے بہت مدد ملتی ہے



05:01:05

بعض اوقات لوپس سادہ کوڈ لکھنے میں مدد کرتے ہیں۔ دوسری خاصیت یہ ہے کہ پہچان بعض اوقات سب سے آسان حل اس طرح دے سکتی ہے کہ بعد میں ہم درختوں کے ڈیٹا سٹرکچر کا مطالعہ کریں گے۔ ایک درخت کا ڈیٹا سٹرکچر ہے، ہم اسے CPU میں پڑھ سکتے ہیں، ہم اسے جاوا میں پڑھ سکتے ہیں، ایسا کرتے ہوئے ہم درخت کی قدریں لکھتے ہیں، شاید ہم ابھی اس کا تصور نہ کر سکیں لیکن وہاں آئٹم کا کوڈ بہت لمبا ہے اور تمام اقدار کو پرنٹ کرنے کے لیے کوڈ آف پیچیدگی صرف تین لائنوں کا ہے، اس لیے وہاں پہچان، ایسی صورتوں میں بہت آسان کوڈ لکھنا مددگار ہے۔



05:01:35

مجھے آپ کی مدد کرنے دو۔ بیس کیس ریکون میں وہ حالت ہے جو ریک کو روکتی ہے تو ریک بار بار چلتی رہتی ہے اور یہ کہیں نہ کہیں رک جاتی ہے اور جس حالت میں یہ رک جاتی ہے اسے ہمارا بیس کیس کہتے ہیں۔ اور recon کی چوتھی خاصیت یہ ہے کہ جس طرح ہمارے پاس آئٹم میں انفینٹی بھری ہوئی ہے اور اس کے بعد ہمارا پروگرام کریش ہو جائے گا، اسی طرح اگر ریک بار بار چلتا رہے اور اس میں کوئی بیس کیس نہ ہو تو اس حالت کو اسٹیک اوور فلو کہتے ہیں۔ اسٹیک اوور فلو کا بنیادی مطلب یہ ہے کہ ہماری میموری فل ہے اور اب ہمارا پروگرام



05:02:25

یہ کریش ہو جائے گا، اسی لیے جب بھی ہم رجعت کے بارے میں بات کرتے ہیں تو بیس کیس بہت اہم ہوتا ہے اور جب بھی ہم ریگریشن پروگرام لکھ رہے ہوتے ہیں، ہمیں بیس کیس کو کبھی نہیں بھولنا چاہیے۔ مثال کے طور پر، اگر میں فیکٹوریل کیس کوڈ میں اس بیس کیس کو ہٹاتا ہوں اور فرض کریں کہ میں اسے ہر بار پرنٹ کر رہا ہوں، یہ میں a کے کیلکولیٹ فیکٹریل کا حساب لگا رہا ہوں، جہاں مجھے ہر بار a کی ویلیو پرنٹ کرنی ہوتی ہے، میں یہ کرتا ہوں، اسے محفوظ کرتا ہوں اور ایک بار چلاتا ہوں۔ یہاں میرا پروگرام آخر میں کریش ہو جاتا ہے اور سیگمنٹیشن فالٹ پرنٹ ہو جاتا ہے۔



05:03:04

سیگمنٹیشن کی غلطی اس لیے ہوئی کہ میں نے مفروضے میں بیس کی حالت نہیں لکھی، اس لیے ایک بار پھر چلاتے ہیں، ایسا ہوا۔ سیگمنٹیشن فالٹ ہوا، پروگرام کریش ہوا، ایسا کیوں ہوا، اگر ہم اوپر سے تجزیہ کریں جہاں کال کی گئی تھی، جب بھی ہم دیکھتے ہیں کہ یہ نمبر پہلے n تھا، پھر یہ n - 1، پھر n - 2، پھر پانچ، پھر چوتھا، تین، دو، ایک، ہر بار اور پھر یہ دوبارہ صفر ہو گیا، جو ہم ہر بار کیا کرتے تھے، ہمیں اس حالت میں اس قطار کو روکنا چاہیے تھا، ہمیں اس حالت میں اس قطار کو روکنا چاہیے تھا۔ صفر، تو اس بار اقدار منفی میں شروع ہوئیں۔



05:03:42

یہ -1 ہو گیا، یہ -2 ہو گیا، یہ -3 ہو گیا، یہ -4 ہو گیا، یہ -5 ہو گیا اور یہاں یہ ہوا -1 7338، پھر یہ منفی، منفی، منفی، منفی، منفی اور منفی ہو گیا اور یہ منفی ہوتا رہا جب تک کہ ہمارا پروگرام مکمل نہیں ہو گیا اور پروگرام کریش نہیں ہوا۔ اس لیے تکرار کے وقت بیس کیس کو کبھی نہیں چھوڑنا چاہیے کیونکہ بہت سے مسائل پیدا ہوتے ہیں اور پھر آپ کا پروگرام کریش ہو جاتا ہے۔ اب آئیے فنکشنز پر کچھ سوالات کرتے ہیں اور تکرار کا پہلا سوال جو ہم کرنے جا رہے ہیں وہ ہے سیلسیس کو تبدیل کرنے کے لیے ایک فنکشن لکھنا۔



05:04:15

ہم نے فارن ہائیٹ دیکھی تھی، ہم 11ویں اور 12ویں میں فزکس پڑھتے تھے، تو سب سے پہلی بنیادی چیز وہ ہمیں تھرمو ڈائنامکس میں پڑھاتے تھے یا مجھے نہیں معلوم کہ کس باب میں سیلسیس کو فارن ہائیٹ میں تبدیل کریں، فارن ہائیٹ کو سیلسیس میں تبدیل کریں، اس لیے فارمولے کو حفظ کرنے کی ضرورت نہیں ہے، اس کے لیے فارمولہ استعمال کیا جائے گا، اس کے لیے استاد بھی پوچھ سکتے ہیں، فارمولہ ضروری نہیں ہے۔ آپ کو یہ عام طور پر امتحانات میں دیا گیا ہو گا یا اگر یہ سوال کوڈنگ ٹیسٹ میں دیا جائے گا تو اس میں فارمولا دیا جائے گا، فارمولا یہ ہے کہ درجہ حرارت جو بھی ہو سیلسیس



05:04:42

قیمت 9/5 ہے، اسے ضرب دیں اور اس میں 32 کا اضافہ کریں۔ مثال کے طور پر، اگر ہم 0 سیلسیس لیتے ہیں، تو اسے 0.18 + 32 سے ضرب دیں، تو 0 ڈگری سیلسیس ہمارا 32 ڈگری فارن ہائیٹ ہے۔ تو، ہمارے پاس اس قسم کا حساب ہے۔ ہم اس فارمولے کو استعمال کریں گے، یہ ایک فنکشن بناتا ہے جو سیلسیس ویلیو لے گا اور اسے فارن ہائیٹ میں تبدیل کرے گا۔ تو، اس فنکشن کو لکھنے کے لیے، سب سے پہلے ہم فنکشن کا اعلان کریں گے۔ فنکشن ہمیں فلوٹنگ ویلیو واپس کرے گا۔ اس فنکشن کا نام کنورٹ درجہ حرارت کو تبدیل کرنے کا درجہ حرارت ہے۔



05:05:18

اس میں ہم نے اس سے کوئی فلوٹنگ ویلیو لی ہے جو سیلسیس ہے، اب اسے فلوٹ کنورٹ ٹمپریچر کے طور پر ڈیفائن کرتے ہیں اور اس کے اندر ہمارے پاس ویلیو فلوٹ سیلسیس ہے، ہمیں سیلسیس کو فارن ہائیٹ میں تبدیل کرنا ہے، تو انٹ فارن ہائیٹ کیا ہوگا، ہماری سیلسیس ویلیو کو 9/5 سے ضرب دیا جائے اور 32 ہو جائے، تو ہم پہلی ویلیو دیکھیں گے کہ اگر ہماری ویلیو 32 کے بعد ملٹی ہے جوڑا جائے گا اور یہ انٹیجر نہیں ہے، اسے فلوٹ کے طور پر لکھیں اور ہماری فارن ہائیٹ ویلیو واپس آ جائے گی، مین فنکشن کے اندر ہم کیا کریں گے، مین فنکشن کے اندر ہم کنورٹ کو کال کریں گے۔



05:06:15

ہم اس میں درجہ حرارت کو پاس کریں گے، فرض کریں کہ ہم 2 ڈگری سے گزر گئے اور یہاں سے ہماری فارن ہائیٹ ویلیو ہمیں واپس کر دی جائے گی، اب ہم اپنے فارن ہائیٹ درجہ حرارت کو فیصد کے طور پر پرنٹ کریں گے اور آئیے اسے بچاتے ہیں۔ لہذا ہم نے کنورٹ ٹمپریچر فنکشن بنایا ہے جس میں درجہ حرارت کی ویلیو سیلسیس میں آتی ہے اور ہم فارن ہائیٹ ویلیو واپس کرتے ہیں اور اسے چلاتے ہیں، تو ہمارے پاس 32 ڈگری فارن ہائیٹ پرنٹ ہوتا ہے، اسی طرح اگر ہم سیلسیس میں درجہ حرارت بھیج رہے ہیں، جیسے کہ اگر ہم سیلسیس میں 32 بھیجتے ہیں۔



05:07:02

اگر ہم یہ لکھ رہے ہیں تو یہ فارن ہائیٹ 64 ڈگری میں تبدیل ہو جائے گا۔ یہاں ہم نے ایک چھوٹی سی غلطی کی کہ ہم نے یہاں انٹیجر ویلیو 9/5 لکھی، تو یہ بھی ایک انٹیجر ہے، یہ بھی ایک انٹیجر ہے، اگر 9/5 تقسیم کرتا ہے تو یہ ایک دے گا، لیکن قاعدے کے مطابق اسے 1.8 سے ضرب دینا چاہیے، اس لیے یہاں ہم اسے 99.0 بناتے ہیں، اسے 5.0 بناتے ہیں، اب یہ ہماری ویلیو پاس کر رہے ہیں، اب ہم flo2 کو چلاتے ہیں۔ ڈگری، تو ہمارے لیے یہ 89.5 1999 ڈگری بن گیا۔ اگر ہم جسم کے عام درجہ حرارت کو جو کہ 37 ڈگری سینٹی گریڈ سے گزرتے ہیں، 37 ڈگری سیلسیس پر



05:07:44

اگر آپ کو بخار نہیں ہے تو آپ کے جسم کا درجہ حرارت 98.5 فارن ہائیٹ ہوگا۔ لہٰذا جب بھی ہم بخار ہونے کی بات کرتے ہیں، تو 98 ڈگری، 99 ڈگری، 100 ڈگری، 103 ڈگری، وہ دراصل فارن ہائیٹ میں ہوتا ہے۔ ہمارے پاس یہ درجہ حرارت سیلسیس میں ہے، لہذا ہم نے تبدیلی کے لیے ایک فنکشن لکھا ہے۔ اس طرح، ہم خود سے فارن ہائیٹ سے سیلسیس کنورژن فنکشن بنا سکتے ہیں۔ دیگر مختلف افعال بھی ہو سکتے ہیں۔ آپ فزکس کے تمام فارمولوں کو ایک فنکشن میں تبدیل کر سکتے ہیں۔ اصل میں، یہ کوڈ میں کیا جاتا ہے جب کھیل



05:08:17

ترقی ہوتی ہے اور C+P کا استعمال کرتے ہوئے کوڈ لکھے جاتے ہیں، تو ہمارا مرکزی کردار کس رفتار سے چلے گا، اس کا ایکسلریشن کیا ہو گا، گولی کی سمت کا تعین کیسے کیا جائے گا، ایکوا ہوائی جہاز میں اس کے کوآرڈینیٹ کیا ہوں گے، 2D طیارے میں یا 3D طیارے میں، کوآرڈینیٹس کیا ہوں گے، یہ تمام فارمولے لکھے جاتے ہیں، فنکشنز میں کوڈ بہت اہم ہے، اگر فنکشنز بہت اہم ہیں۔ آپ گیم ڈویلپمنٹ میں جانا چاہتے ہیں، پھر اگلا سوال جو



05:08:45

ہمیں یہ دیا گیا ہے کہ یہ ایک طالب علم کے فیصد کا حساب لگانے کا صحیح فنکشن ہے۔ ایک طالب علم ہے جس کے نمبر تین مضامین میں دیئے گئے ہیں، سائنس کے نمبر، ریاضی کے نمبر، سنسکرت کے نمبر۔ اب یہ انگریزی اور ہندی میں فرق ہے، اس کے لیے ہم ایک فنکشن لکھتے ہیں۔ فنکشن کا نام فلوٹ ہوگا۔ فلوٹنگ ویلیو ہمیں فیصد دے ​​گی۔ درحقیقت ہمیں کیا کرنا چاہیے؟ آئیے صرف عددی قدر لیتے ہیں۔ سادگی کے لیے، عدد کے ساتھ فیصد کا حساب لگائیں۔ فیصد کا حساب لگائیں۔ یہ تین مضامین کے نمبر لیتا ہے۔ پہلے سائنس کے نمبر لیں گے، پھر ریاضی کے اور



05:09:28

پھر سنسکرت کے فیصد اور عدد میں شمار کرنے کے بعد ہم اسے واپس حاصل کریں گے۔ اب ہم اس فنکشن کیلکولیٹ فیصد کی وضاحت کرتے ہیں جس میں ہم اپنے سائنس کے نمبر، انٹیجر سائنس، int Math اور int سنسکرت کو پاس کریں گے۔ فیصد کا حساب کیسے لگایا جائے گا؟ آئیے ہم تینوں نمبروں کو شامل کریں، انہیں 3 سے تقسیم کریں، انہیں 100 سے ضرب دیں، پھر ہم سائنس کے نمبر جمع ریاضی کے نمبروں کے علاوہ سنسکرت کے نمبروں کو 3 سے تقسیم کریں گے اور اس پوری قدر کو 100 سے ضرب دیا جائے گا۔ تو اس طرح ہمیں فیصد ملے گا۔



05:10:19

اب یہاں سائنس کے نمبر بناتے ہیں، فرض کریں سائنس میں میں نے 100 میں سے 98 نمبر حاصل کیے، ریاضی میں میں نے 95 بھی حاصل کیے اور سنسکرت میں، میں یہاں اپنے 99 نمبر لکھنا چاہوں گا، جو میں نے آٹھویں جماعت میں سنسکرت میں کافی محنت کے بعد حاصل کیے، اب آخر میں پرنٹ کرتے ہیں ہمارا فیصد، فیصد، فیصد اور ہم کس پرسنٹ میں پاس ہوں گے، فی صد کا حساب کتاب کریں گے۔ سائنس کے نمبر، ریاضی کے نمبر اور سنسکرت کے نمبر، آئیے اسے محفوظ کرتے ہیں۔ ہم نے کیلکولیٹ فیصد فنکشن بنایا ہے، جس میں ہم نے تینوں مضامین کے نمبر لیے اور



05:11:09

ہم نے فیصد واپس کر دیا۔ ہم نے یہاں اس فنکشن کی وضاحت کی ہے۔ ہم نے تینوں مضامین کے نمبروں کو مین فنکشن کے اندر ڈکلیئر کیا اور اپنا فنکشن کہا۔ اب ایک نئی ٹرمینل ونڈو کھولیں اور پہلے کمپائل کر کے چلائیں۔ ہمیں جو فیصد ملا ہے وہ 970 ہے۔ دراصل ہمیں اسے 100 سے ضرب کرنے کی ضرورت نہیں تھی کیونکہ اگر ہم پہلے ہی 100 سے نمبروں کا حساب لگا رہے ہیں تو فیصد نکلے گا 97۔ لہذا اگر آپ اس طرح اپنے کالج کے نمبروں کا حساب لگانا چاہتے ہیں تو آپ ایک فنکشن بنا سکتے ہیں اور اس میں جتنے بھی نمبر حاصل کر رہے ہیں اسے شامل کر سکتے ہیں۔



05:11:43

ایسا کرنے سے آپ اپنا فیصد معلوم کر سکتے ہیں۔ اگلا سوال جسے ہم حل کریں گے وہ ہے فنکشن لکھنا ہے تاکہ فینا ترتیب کی کچھ شرائط پرنٹ کی جائیں۔ یہ فینا اطالوی لفظ ہے، اسے فینا کی نہیں کہا جاتا، اسے فینا کہتے ہیں۔ اب فینا ترتیب ریاضی میں بہت مشہور ہے، ہماری فطرت میں بھی کئی جگہوں پر فینا ترتیب موجود ہے، اگر آپ اسے ایک بار تلاش کریں تو آپ کو فینا ترتیب ملے گی، یہ ایک بہت مشہور ترتیب ہے۔ اس طرح، اگر آپ کچھ ٹائلوں کو مربع کی شکل میں ترتیب دیں، تو آپ کو Fina کی ترتیب، یا اس طرح کی کوئی چیز نظر آئے گی۔ اگر آپ نے کچھ ٹائلوں کو مربع کی شکل میں ترتیب دیا ہے، تو آپ کو فینا کی ترتیب، یا اس طرح کی کوئی چیز نظر آئے گی۔



05:12:27

اگر آپ نے کہیں سرپل دیکھا ہو تو اسے فینا اسپائرل بھی کہا جاتا ہے۔ اگر آپ کوئی بھی پروگرامنگ لینگویج سیکھنے جائیں تو وہاں آپ کو فینا سیکوئنس ملے گا۔ قدرتی اعداد کی ترتیب کیا ہے؟ 3 4 5 6 پورے نمبروں کی ترتیب کیا ہے؟ 0 1 2 3 4 5 6 ہمارے طاق اعداد کی ترتیب کیا ہے؟ 1 3 5 7 یکساں اعداد: 2 4 6 8 10 اسی طرح فطرت میں ایک ترتیب ہے جسے Fina sequence کہتے ہیں۔ یہ سلسلہ کچھ اس طرح لگتا ہے۔ 0 1 1 2 3 5 8 13 اب جب ہم اسے پہلی بار دیکھتے ہیں تو ایسا لگتا ہے جیسے ہم کوئی بے ترتیب نمبر لکھ رہے ہیں۔



05:13:05

اس کا مطلب ہے کہ انہوں نے سکرین پر مطلوبہ نمبر لکھا ہے، لیکن حقیقت میں ایسا نہیں ہے۔ اسے ہندوستانی ریاضی دانوں نے بنایا تھا اور بہت سوچ بچار کے بعد ترتیب بنائی گئی تھی۔ ترتیب میں پہلے قطار آتی ہے، پھر ایک، پھر ایک، پھر دو، پھر 3 5 8 13 21 وغیرہ۔ اس ترتیب کو غور سے دیکھنے کے بعد معلوم ہوتا ہے کہ ہر نمبر اس کے پچھلے دو نمبروں کا مجموعہ ہے، اس نمبر کی طرح پہلا نمبر ہمیشہ صفر ہوتا ہے، دوسرا نمبر ہمیشہ ایک ہوتا ہے، تیسرا نمبر قطار اور دو کا مجموعہ ہوتا ہے، یعنی 0 + 1 = 1، یہ چوتھا نمبر ایک ہوتا ہے۔



05:13:44

اور ایک کا مجموعہ تین ہے، یہ ایک اور 2 کا مجموعہ ہے، یہ پانچ ہے، دو اور تین کا مجموعہ 8 ہے، یہ تین ہے اور پانچ کا مجموعہ 13 ہے، 5 اور A کا مجموعہ ہے 21، 8 اور 13 کا مجموعہ ہے اور پوری ترتیب اسی طرح جاری رہتی ہے، لہذا یہاں ہر عدد کا مجموعہ ہے، اگر ہم چاہتے ہیں کہ کوئی بھی پچھلے نمبر کو نکالنا ہو تو ہم کہہ سکتے ہیں نمبر، فرض کریں کہ ہم دو کا فائنل معلوم کرنا چاہتے ہیں، یہ صفر کا فائنل ہے، یہ ایک کا فائنل ہے، یہ دو کا فائنل ہے، یہ تین کا فائنل ہے، یہ چار کا fibo ہے اور اسی طرح، دو کا فائنل معلوم کرنے کے لیے، ہم جمع fibo کا فائنل کہہ سکتے ہیں۔



05:14:23

تین کا اور فائنل، اگر ہم اسے تلاش کرنا چاہتے ہیں، تو ہم کہہ سکتے ہیں کہ یہ دو فائبو کا fibo اور جمع fibo ہے، پھر اگر ہم اسے تلاش کرنا چاہتے ہیں، تو ہم اسے 2 کا فائنل کہہ سکتے ہیں، 3 کا فائنل۔ لہذا، اس سے ہمیں ایک کامن فنکشن ملتا ہے، اگر ہم کسی بھی نمبر کا فائنل تلاش کرنا چاہتے ہیں، تو یہ اس سے پہلے کا نمبر ہے، اس سے پہلے کا نمبر ہے، اس سے پہلے کا نمبر ہے، اس سے پہلے کا حتمی نمبر -n1 کا فائنل ہے - 2. ایک طرح سے، ہم نے اپنے ریکسریو فنکشن کو لکھنے کے لیے ریکسریو فارمولہ اخذ کیا ہے، یعنی ایک فنکشن فائنل کریں جو n کے لیے فائنل کا حساب لگاتا ہے۔ اب، ہم ن کے بارے میں نہیں جانتے، لیکن



05:15:04

ہو سکتا ہے کہ وہ n - 1 اور n - 2 کے بارے میں جانتا ہو۔ آئیے اس پر کافی بھروسہ کریں کہ یہ ان دونوں کا ضرور پتہ لگائے گا، اس لیے ان دونوں کو کال کریں۔ ان دونوں کو بلانے کے بعد ان دونوں کو شامل کر کے ن کے فائنل میں محفوظ کر لیں۔ تو اس طرح ہم اپنے مختلف فائنل نمبرز کرتے ہیں۔ آئیے اس کے لیے کوڈ لکھتے ہیں۔ ہم کوڈ لکھنے سے بہتر سمجھیں گے۔ اس فنکشن کی واپسی کی قسم انٹیجر ہے۔ ہر سطح پر یہ اپنے n نمبر کا حتمی پتہ لگائے گا اور اسے اوپری سطحوں پر واپس کر دے گا۔ آئیے اس کا نام Phi رکھیں اور یہ int n کے لیے حتمی ترتیب معلوم کرے گا۔



05:15:39

اب ہم اس فنکشن کو نمبر A کے int fina کے طور پر بیان کرتے ہیں تو fina کا اصول کیا ہے؟ یہ فنا کا اصول ہے۔ آخری دو نمبروں کی فینا ترتیب میں اعداد تلاش کریں اور ان دونوں کو شامل کریں، تو n کا int fina n myv کا fina اور n-2 کا fina ہے۔ اب اگر ہم پہلے n-1 اور n-2 کا یہ فنا کرتے ہیں، تو n myv کے int fina کو phi کہتے ہیں۔ n myv کے لیے، یہ فنکشن خود کو کال کر رہا ہے، جس کا مطلب ہے کہ حساب کتاب ہو رہا ہے۔ یہاں، حساب n کے لیے کرنا تھا، اس لیے پہلے n myv کے لیے کال کی گئی اور اسے اس متغیر میں محفوظ کر لیا گیا۔ اب ہم n-2 کا ایک اور کال فینا بنائیں گے۔



05:16:32

تو اب ہم نے n - 2 کے fi کے لیے کال کی اور اسے اس ویب پیج میں محفوظ کر لیا اور آخر کار ہم نے ان دونوں کو شامل کر کے n کا فائنل نکال لیا۔ اب ہم n کے اس فائنل کو پرنٹ کر سکتے ہیں۔ یہاں، ہم فیصد D لکھیں گے۔ پھر فیصد D لکھیں گے۔ پہلے، ہم n کی قدر لکھیں گے، یعنی n۔ اس کے بعد، ہم اپنے n کے فائنل کی ویلیو لکھیں گے اور اس فنکشن سے اپنے n کے فائنل کی ویلیو واپس کریں گے۔ تو یہ ہمارا ریکرس فنکشن ہے اور ہر ریکرس فنکشن بیس کیس کے بغیر نامکمل ہے، یعنی یہ غلط ہے۔ اب اس میں بیس کیس کیا ہوگا، fbo.



05:17:17

ہمارے پاس ایک کی آف قطار اور فائنل کی وضاحت کی گئی ہے، لہذا اگر n کی قدر کبھی صفر ہو جاتی ہے یا کسی صورت میں n کی قدر ایک ہو جاتی ہے، تو وہاں ہمیں معلوم ہو جائے گا کہ nn = 0 کا کیا ہوگا۔ اگر n = 0، اس صورت میں ہمیں صفر واپس کرنا ہوگا اور اگر ہمارے n کی قدر ایک ہے، تو اس صورت میں ہمیں ایک واپس کرنا ہوگا۔ اب یہ ہمارا مکمل کوڈ ہے، فائنل کا حساب لگانے کے لیے تکراری کوڈ۔ یہ ہماری بنیادی شرط ہوگی۔ بیس کیس میں ہم کیا کریں، ان دونوں کو الگ الگ شرائط کے طور پر لکھتے ہیں۔ ایک شرط لکھنے کے بجائے، اگر ہمارا n کہیں بھی صفر ہو جائے تو n



05:18:06

یہ صفر ہو گیا، اس کا مطلب ہے کہ اگر ہمیں صفر کی حتمی قیمت واپس کرنی ہے، تو یہ صرف قطار ہے۔ اگر ہمیں اسے n = 1 کے لیے کہیں بھی دینا ہے، تو ایک کی حتمی قیمت ہمیشہ ایک ہوتی ہے۔ اب، یہاں ایک کی حتمی قیمت کے لیے، ہم i کی حتمی قیمت اور -1 کی حتمی قیمت کا حساب نہیں لگائیں گے کیونکہ -1 کے لیے ترتیب موجود نہیں ہے۔ یہ ہمارا بنیادی معاملہ ہے، یعنی وہ حالت جس کا پہلے سے علم ہونا چاہیے۔ حتمی قدر میں، ہم جانتے ہیں کہ صفر کی اصطلاح صفر ہے۔ پہلی اصطلاح ایک ہے۔ ہم یہ پہلے ہی جانتے ہیں۔ ہم نے اس کا حساب لگایا ہے۔ اب ہم مین فنکشن کے اندر کیا کریں گے؟ ہم اسے یہاں پرنٹ کریں گے۔



05:18:40

آئیے اپنے فائنل کو کال کریں، فرض کریں کہ ہم چھ اصطلاحات پرنٹ کرنا چاہتے ہیں، آئیے اسے محفوظ کریں اور چلائیں۔ لہذا چھ شرائط کے بجائے، ہمیں فائنل کی بہت سی شرائط پرنٹ ہوئیں۔ ایسا اس لیے ہوا کیونکہ ہم خاکے سے تھوڑا سمجھ سکتے ہیں کہ ایسا کیوں ہوا۔ بہت ساری اصطلاحات پرنٹ ہوئیں کیونکہ جب ہم فائنل آف فائیو کا حساب لگانے کی کوشش کرتے ہیں، فرض کریں کہ یہ پہلے فائنل آف فور کا حساب لگاتا ہے، پھر فائنل آف تھری، اور فائنل آف فور کا کیا ہوتا ہے؟ پہلے یہ فائنل آف تھری، پھر فائنل آف ٹو، فائنل آف تھری کا حساب لگاتا ہے۔



05:19:22

پہلے یہ دو کے فائنل اور پھر ایک کے فائنل کا حساب لگاتا ہے۔ تو یہاں یہ دو اور یہ دو دو بار شمار کیے گئے ہیں، اس لیے وہ دو بار چھاپے گئے ہیں۔ اگر ہم تین کی بھی بات کریں تو یہاں ایک بار تین چھپیں گے۔ یہاں تین پرنٹ ہوں گے، اسی لیے کئی بار بلا رہے ہوں گے، کئی بار فائنل پرنٹ ہوں گے۔ تو ہماری دوسری مدت ایک ہے۔ ہماری تیسری مدت دو ہے۔ دوسری اصطلاح کو دوبارہ ایک کہا جاتا ہے۔ تو یہ تھوڑا پیچیدہ ہے، آئیے اسے ایک بار پھر چلاتے ہیں اور اسے حل کرتے ہیں، تو چھ کا فائنل آٹھ بن جاتا ہے۔ ایک بار پھر



05:20:18

ہم بناچی کی ترتیب لکھتے ہیں۔ ترتیب کچھ اس طرح نظر آتی ہے 0 1 1 2 3 5 8۔ یہ مطلوبہ اصطلاح ہے۔ یہ پہلا ہے۔ یہ دوسرا ہے۔ یہ تیسرا ہے۔ یہ چوتھا ہے۔ یہ پانچواں ہے۔ یہ چھٹا ہے۔ تو چھٹی اصطلاح درست ہے۔ فناج کی ترتیب میں، یہ آٹھ ہے۔ تو یہ ہماری ترتیب لکھنے کے لیے ہمارا کوڈ ہے۔ اور ہم نے اس کوڈ کو بہت آسان طریقے سے لکھا ہے۔ بالکل بھی کوئی مسئلہ نہیں ہونا چاہیے۔ ہم فناج کی ایک پیچیدگی کو اچھی طرح سمجھ چکے ہیں۔ اب اسے یاد رکھیں کیونکہ فناج کے بہت سے سوالات آپ کے سامنے ہیں۔ ہم نے اگلا سوال پہلے ہی حل کر لیا ہے۔



05:20:50

ہم پہلے ہی سوال کر چکے ہیں جو حتمی ترتیب کی ایتھ ٹرم پرنٹ کرنے کے لیے فنکشن لکھنا تھا۔ اب آخری شرائط کو ویسے ہی کرنا ہو گا جیسا کہ وہ ہیں۔ ہم نے صرف تکرار کا استعمال کرتے ہوئے فائنل کیا ہے۔ ہم ایک لوپ کا استعمال کرتے ہوئے بھی یہی کام کر سکتے ہیں۔ تو یہ ایک لوپ کے ساتھ کرنا آسان ہو جائے گا. لیکن میں اسے ہوم ورک کے مسئلے کے طور پر دینا چاہوں گا کیونکہ میں چاہتا ہوں کہ آپ اس سوال کو خود آزمائیں اور دیکھیں کہ ہم اس سوال کو لوپ کا استعمال کیسے کر سکتے ہیں؟ ہم یہ سلسلہ کیسے لکھ سکتے ہیں؟ لہذا، ہم نے بہت سارے سوالات کیے ہیں اور بہت سارے تصورات پڑھے ہیں۔ یہاں، میں آپ سے ایک چھوٹی سی، ہلکی سی بات کرنے کی درخواست کروں گا۔



05:21:22

ہمیں تھوڑا سا وقفہ لینا ہے، تھوڑا سا پانی پینا ہے، خود کو تھوڑا سا تازہ دم کرنا ہے اور اس کے بعد اپنے ہوم ورک کے مسائل کو کرنا ہے، بیٹھ کر اپنے نوٹوں پر تھوڑا سا نظر ثانی کرنا ہے۔ تو اب ہم اپنے باب چھ سے شروع کرنے جا رہے ہیں جسے پوائنٹس کہا جاتا ہے۔ اب پوائنٹس ایک بہت اہم موضوع ہے جب بھی ہم C یا C++ کے بارے میں بات کرتے ہیں کیونکہ پروگرامنگ کا بنیادی حصہ ہمیں سکھاتا ہے کہ ہمارے پروگرام کے ذریعے میموری میں چیزیں دراصل کس طرح حرکت کرتی ہیں۔ اس کے ساتھ، پوائنٹس میں ایک چھوٹا سا مشکل موضوع ہے جو کچھ لوگوں کو بہت دلچسپ لگتا ہے۔



05:21:47

کچھ لوگوں کو یہ تھوڑا مشکل لگتا ہے لیکن اس ویڈیو میں ہم پوری کوشش کر رہے ہیں، میرا مطلب ہے کہ میں پوری کوشش کر رہا ہوں کہ پوائنٹس کو بہت اچھی طرح سمجھا جاؤں، جس کے بعد تمام سوالات کے جوابات آسانی سے مل سکیں گے، ہم تمام بنیادی تصورات کا احاطہ کریں گے، ہم کچھ سوالات لیں گے جو پروگرامنگ کا بنیادی حصہ ہیں، تو ہم سوالات کو اچھی طرح سے حل کریں گے اور اس کے ساتھ ساتھ، ہم کچھ پریکٹس سوالات بھی کریں گے، تاکہ ہمارے ذہن کے پوائنٹس کے عنوانات کے ساتھ پوائنٹس کا آغاز ہو سکے۔ مطلب a



05:22:17

ویری ایبل جو دوسرے ویری ایبل کے میموری ایڈریس کو اسٹور کرتا ہے عام طور پر ایسا ہوتا تھا کہ ہم میموری کے اندر کوئی بھی ویری ایبل بناتے تھے، فرض کریں کہ ہم نے ایک ویری ایبل int a = 22 بنایا ہے، یہ ویری ایبل ایک ویلیو کو اسٹور کر رہا ہے اور وہ ویلیو کیا ہے، وہ ویلیو ایک نمبر ہے اور یہ کوئی بھی نمبر ہو سکتا ہے، یہ ڈیٹا ویلیو ہے، یعنی یہ ڈیٹا کو اسٹور کرنے کے لیے ہمارے ذہن میں کچھ کام آتا ہے، لیکن اگر یہ کام ہوتا ہے تو ہمارے ذہن میں کچھ کام آتا ہے۔ میموری، ہم نے پہلے ہی بات کی تھی کہ میموری کے اندر بلاکس ہوتے ہیں، بلاکس کے اندر کچھ ہوتے ہیں۔



05:22:50

ڈیٹا محفوظ ہے؛ جہاں بھی وہ ڈیٹا محفوظ ہوتا ہے، ہم اس جگہ کو کچھ نام دیتے ہیں، جسے ہم متغیر کہتے ہیں۔ اب میموری کا وہ بلاک جو بھی ہو، اس کا میموری کے اندر کوئی نہ کوئی ایڈریس ضرور ہونا چاہیے جیسے اس میموری کا ایڈریس 2010 ہے، اس میموری کا ایڈریس 2013 ہے، یہاں ہم ان بلاکس کے ایڈریس کے بارے میں بات کر رہے ہیں، ہم اسے کیسے سمجھ سکتے ہیں، فرض کریں کہ ہمارا مکمل مطلب ہے، وہ مطلب ہماری میموری ہے، اس پر مختلف پلاٹ ہیں جو مختلف لوگوں کے پاس ہیں، اب یہ ایک plot ہے، اس بلاک کا ایک plot ہے



05:23:26

ہم نے اوپر ایک گھر بنایا ہے، ہم نے اس گھر کو Edge کا نام دیا ہے، اور گھر کے اندر 22 نمبر ہے، اور یہ ہے اس گھر کا 20110 کا پتہ۔ اب، کل ہم اس گھر میں 22 کو ہٹا کر 21 ڈال سکتے ہیں، یا ہم 22 کو ہٹا کر 20 لگا سکتے ہیں۔ کوئی بھی گھر میں رہ سکتا ہے، یعنی کوئی بھی ڈیٹا کسی بھی میموری والے مقام پر محفوظ کیا جا سکتا ہے اور اس کا نام بھی تبدیل کیا جا سکتا ہے۔ اب شاہ رخ خان کے گھر کا نام منت ہے اور امبانی کے گھر کا نام کچھ اور ہے، تو یہاں ہم ایج کو ہٹا کر متغیر کا نام کچھ بھی رکھ سکتے ہیں، لیکن زمین کے اوپر پلاٹ کہیں زمین ہے۔



05:23:59

اگر کوئی کھیت ہے تو وہ اسی جگہ رہے گا، زمین بھی اسی جگہ رہے گی، یہی وجہ ہے کہ یہ میموری بلاک ایک ہی جگہ رہے گا اور اس کا ایڈریس ہمیشہ طے ہوتا ہے، جب ہمارا مدر بورڈ کمپیوٹر پر آتا ہے تو اس پر پہلے سے طے ہوتا ہے کہ ایڈریس کیا ہونے والا ہے، اب یہ ضروری نہیں کہ یہ ایڈریس 20110 یا 2000 کا ہو، یہ ممکن ہے کہ آپ کا ایڈریس کچھ بھی لکھا ہوا ہو اور مشین میں مختلف طریقے سے ایڈریس لکھا جا سکتا ہے۔ میری مشین میں مختلف طریقے سے، یہ مکمل طور پر اس بات پر منحصر ہے کہ آپ کون سی مشین استعمال کر رہے ہیں، چاہے وہ 32 بٹ ہو یا 64 بٹ۔



05:24:29

آپ کا کیسا سسٹم ہے اور میرا کیسا سسٹم ہے، تو اس کی فکر نہ کریں، پتہ کچھ بھی ہو سکتا ہے، اس لیے یہ کوئی مقررہ نمبر نہیں ہے، جب بھی آپ سے کالج کے کسی بھی امتحان میں سوالیہ پرچہ پوچھا جائے گا، تو اس کا کوئی بھی پتہ ہو سکتا ہے، اگر انٹرویو لینے والا آپ سے پوچھ رہا ہے تو آپ کو اسے بھی بتانا پڑے گا کہ پتہ کیا ہے کیونکہ کوئی طے شدہ فارمیٹ نہیں ہے، لیکن جب بھی یہ بات واضح ہو جائے گی تو مجھے امید ہے کہ ہمارے یہاں یہ بات واضح ہو جائے گی۔ ڈیٹا ویلیو اس کے اندر محفوظ ہے، اس متغیر کا نام



05:24:56

یہ میموری لوکیشن پر جاتا ہے اور میموری لوکیشن کا ایک ایڈریس ہوتا ہے، لیکن آج ہم نے محسوس کیا کہ ڈیٹا ویلیو، یعنی ان 22 کو ایک متغیر میں محفوظ کرنا ہے۔ ہم میموری لوکیشن، میموری ایڈریس کو اسٹور کرنا چاہتے ہیں۔ لہذا، جس بھی متغیر میں ہم اس میموری ایڈریس کو ذخیرہ کرتے ہیں، ہم اس متغیر کا نام پوائنٹر رکھتے ہیں۔ مثال کے طور پر اگر ہمیں اس ایج ویری ایبل کا میموری ایڈریس کہیں اسٹور کرنا ہے تو اس کے لیے ہم ایک نیا ویری ایبل بنائیں گے، فرض کریں کہ ہم نے اس ویری ایبل کو PTR کا نام دیا ہے جو کہ پوائنٹر کے لیے مختصر ہے۔ اب، اس کے اندر ذخیرہ کریں



05:25:28

یہ میموری ایڈریس یعنی 2010 ہوگا جو کہ کنارے کا میموری ایڈریس ہے لیکن اس کا اپنا میموری ایڈریس بھی ہوگا کیونکہ یہ مقام بھی کہیں نہ کہیں موجود ہوگا۔ یہ بھی ایک متغیر ہے، یہ صرف ایک ایسا متغیر ہے جو دوسرے متغیر کے میموری ایڈریس کو محفوظ کر رہا ہے۔ تو مجھے امید ہے کہ ہم بنیادی بات سمجھ گئے ہوں گے۔ اب وہ متغیر جو دوسرے متغیر کے میموری ایڈریس کو اسٹور کرتا ہے وہ پوائنٹر ہے۔ اب پوائنٹس لکھنے کے لیے ایک نحو ہے۔ ہم پوائنٹس کو عام ویری ایبل کی طرح نہیں لکھ سکتے کیونکہ ہمیں کمپائلر کو پہلے بتانا ہوتا ہے کہ یہ ویری ایبل جسے ہم لکھنے جا رہے ہیں۔



05:25:59

اب یہ نارمل ویلیو کو اسٹور نہیں کرتا، میموری ایڈریس کی ویلیو کو اسٹور کرتا ہے جو کہ ایک خاص ویلیو ہے، اس لیے اسے لکھنے کا نحو اس طرح ہے، ہم ایک عام متغیر کے لیے int a e equal 22 لکھتے ہیں، لیکن جب بھی ہم پوائنٹر کے لیے پوائنٹر بناتے ہیں، ہم int کے ساتھ ایک ستارہ لگاتے ہیں، ایک ستارہ لگاتے ہیں، پھر ہم اپنے پوائنٹر کا نام لکھتے ہیں جس کا مطلب یہ ہے کہ ہم پوائنٹر کے متغیر کا مطلب ہے، اور اس کے آخر کا متغیر ہے، پھر ہم لکھتے ہیں۔ ایک متغیر جو اس کنارے کا پتہ محفوظ کر رہا ہے، یہاں ہم نے دو نئی چیزیں سیکھیں، ایک یہ ستارہ، یہ ستارہ جو



05:26:35

اسے ہم ایڈریس آپریٹر پر ویلیو ایٹ ایڈریس آپریٹر ویلیو کہتے ہیں اور یہ m فیصد ہے جسے ہم آپریٹر کا ایڈریس کہتے ہیں جس کے آگے ہم جو بھی لگاتے ہیں اور جو بھی اسٹار لگاتے ہیں اس کے سامنے اس کا ایڈریس ملتا ہے، ہمیں اس کی ویلیو ملتی ہے اس کا کیا مطلب ہے یہاں ہم نے پوائنٹر ویری ایبل بنایا ہے، ہم نے ایک پوائنٹر ویری ایبل بنایا ہے ہمیں کیسے پتہ چلا کہ یہ پوائنٹر ویریبل ہے کیونکہ ایڈریس میں ast ویری ایبل ظاہر ہوتا ہے اور اس کا کیا ہوتا ہے of edge کا مطلب ہے جو بھی کنارے کا پتہ تھا، اب ہے۔



05:27:13

یہ اس پوائنٹر کے اندر سٹور ہو گیا، یعنی یہ لوکیشن میموری کے اندر آ گئی جہاں پوائنٹر ویری ایبل آیا اور اس کے اندر edge کا ایڈریس سٹور کیا گیا جو کہ 2010 ہے اور اب اگر ہم دیکھنا چاہتے ہیں کہ اس ایڈریس پر کون سی ویلیو محفوظ ہے جہاں پوائنٹر کو اسٹور کیا جا رہا ہے، تو اس کے لیے ہم اس آپریٹر کو استعمال کر سکتے ہیں، اس کا مطلب ہے کہ ہم یہاں ایک نیا ویری ایبل بنا رہے ہیں، جس ایڈریس کے اندر ٹی ایس کی ویلیو ہے، اس ایڈریس کے اندر کون سا انڈر سکور ہے۔ پوائنٹر کے اندر، اس کی ویلیو نکال کر اس نئے ویری ایبل میں اسٹور کریں، پھر کیا ہوگا۔



05:27:46

سب سے پہلے یہ نیا ویری ایبل بنایا جائے گا۔ نئے متغیر کا نام کنارے کے نیچے ہوگا۔ اس کا کوئی اور ایڈریس ہو سکتا ہے، فرض کریں کہ یہ 2011 ہے۔ اب اس کے اندر پوائنٹر پر جو بھی ایڈریس محفوظ ہے، اس کی ویلیو پوائنٹر پر محفوظ ہے، پوائنٹر میں ذخیرہ شدہ ایڈریس 210 ہے۔ تو ہم 210 پر جائیں گے اور دیکھیں گے کہ وہاں کیا ویلیو ہے۔ ویلیو 210 پوائنٹر کے قریب محفوظ ہے اور 20110 میں کون سی ویلیو محفوظ ہے۔ تو ہم 210 پر جائیں گے، وہاں ذخیرہ شدہ ویلیو 22 ہے۔ تو ہم اس ویلیو 22 کو اٹھائیں گے اور اسے نئی انڈر سکور رینج میں رکھیں گے۔ ایک بار ہلکے سے دبائیں۔



05:28:22

آئیے اسے دوبارہ پڑھیں۔ ہم نے ایک اصل متغیر int a = 22 بنایا ہے۔ ہم اپنے پوائنٹر کا اعلان کیسے کریں؟ ہم int اسٹار لکھتے ہیں۔ اگر ہم int سٹار لکھیں گے تو ہمیں انٹیجر کی قدر کو ذخیرہ کرنے کے لیے ایک پوائنٹر ملے گا۔ ہم نے اسے پی ٹی آر کا نام دیا ہے۔ پوائنٹر کا پتہ اس میں محفوظ ہے۔ اب اگر ہم یہاں پوائنٹر کے ایڈریس پر ذخیرہ شدہ ویلیو تک رسائی حاصل کرنا چاہتے ہیں تو اس کے لیے ہم اسٹار آپریٹر کا استعمال کریں گے جسے ہم ویلیو ایٹ ایڈریس آپریٹر کہتے ہیں، یعنی یہ اس پوائنٹر میں جو بھی ایڈریس اسٹور ہوگا اس کی ویلیو نکالے گا۔ تو، اس سے پوائنٹر میں محفوظ ایڈریس کی قدر سامنے آجائے گی۔



05:28:55

میں نے 2 10 یعنی 22 کی ویلیو نکالی اور اسے لایا، اور ہم نے 22 کو اپنے نئے ویری ایبل ایج کو تفویض کیا، اور یہ یہاں محفوظ ہو گیا، تو ہمارے پوائنٹس کے کام کرنے کا طریقہ یہ ہے، آئیے اس کا ایک چھوٹا سا کوڈ لکھ کر دیکھتے ہیں، سب سے پہلے ہم ایک متغیر کنارے کا اعلان کریں گے جس میں 22 کو ذخیرہ کیا جائے گا، اس کے بعد اب ہم ایک سٹار پوائنٹ بنانے جا رہے ہیں۔ edge، اب یہاں ہم اس ستارے کو عدد کے ساتھ استعمال کر سکتے ہیں یا اپنے متغیر کے ساتھ بھی استعمال کر سکتے ہیں، دونوں نحو ٹھیک ہیں اور اس کا



05:29:33

اس کے بعد ہم کیا کریں گے ایک نیا ویری ایبل انڈر سکور ایج بنائیں اور اس میں اسٹار ptr لکھیں ہم ایک بار پھر اس کی ویلیو پرنٹ کرتے ہیں d a save اور رن تو یہاں ہم نے 22 پرنٹ کیے ہیں آئیے تھوڑا سمجھتے ہیں کہ کیا ہوا ہم نے ایک ویری ایبل ایج 22 بنایا اس کے لیے ہم نے ایک پوائنٹر بنایا ہے جو پوائنٹر ہے جو اس کی طرف اشارہ کرتا ہے اگر میموری کے اندر اس کی ویلیو کی لوکیشن موجود ہے تو ہمیں میموری کی جگہ تک رسائی حاصل ہے۔ اس ایڈریس پر محفوظ ہے جو پوائنٹر پر ہے۔



05:30:14

ایڈریس موجود ہے، ہم اس سے اس کی ویلیو نکالیں گے اور اس قدر کو نئے کنارے میں ڈالیں گے، تو جب نیا کنارہ پرنٹ ہوا تو پرانی قیمت واپس آگئی کیونکہ ہم نے وہی یہاں ذخیرہ کیا تھا، چنانچہ 22 پرنٹ ہونے کے بعد ہمارے پاس واپس آگئے، اس طرح ہمارے پوائنٹر کی ترکیب کام کرتی ہے، اب ہم کیا کرتے ہیں، آئیے اس بات کی وضاحت کرتے ہیں کہ ہم کس طرح تفصیل سے مطالعہ کرتے ہیں۔ بنیادی باتیں اور بہت آسان طریقے سے، میں ہر چیز کو ایک یا دو بار سمجھانے کی ضرورت پر زور دے رہا ہوں۔



05:30:43

کیونکہ اس کے ذریعے چیزیں آپ کے ذہن میں جم جائیں گی، پھر آپ کو بار بار اس پر نظر ثانی کرنے کی ضرورت نہیں پڑے گی، اگر ہم ایک ہی بات کو دو تین بار سنتے ہیں تو وہ آپ کے ذہن میں بیٹھ جاتی ہے، اب سب سے پہلے جب ہم پوائنٹرز کا اعلان کرتے ہیں تو پوائنٹر کے اعلان کرنے کی قسم اس بات پر منحصر ہوتی ہے کہ آپ اسے کس متغیر کی طرف اشارہ کرنا چاہتے ہیں، یعنی اگر آپ ستارہ کے ایڈریس کو ذخیرہ کرنا چاہتے ہیں تو آپ کے پاس ویری ایبل لکھنا ہوگا۔ ptr، اگر آپ کریکٹر ویری ایبل کا ایڈریس اسٹور کرنا چاہتے ہیں تو آپ کو کریکٹر اسٹار ptr لکھنا ہوگا۔



05:31:13

اگر آپ فلوٹنگ ویری ایبل کا ایڈریس پوائنٹر کے اندر اسٹور کرنا چاہتے ہیں تو آپ کو فلوٹ اسٹار ptr لکھنا ہوگا، یعنی int age i 22 کے برابر ہے۔ اگر آپ اس کی عمر کا ایڈریس اسٹور کرنا چاہتے ہیں تو ہم اسے استعمال کریں گے۔ اگر ہم نے ast رسک کے برابر کریکٹر اسٹار i لکھا ہے، اگر ہم متغیر کا ایڈریس محفوظ کرنا چاہتے ہیں، تو ہم یہ لکھیں گے۔ اور اگر ہم نے فلوٹ پرائس i ₹1 کے برابر لکھی ہے، تو اگر ہم اس کی قیمت کا پتہ محفوظ کرنا چاہتے ہیں، تو ہم یہ لکھ رہے ہوں گے۔ پوائنٹر کی قسم اس بات پر منحصر ہے کہ آپ نے اس میں کس قسم کا پتہ محفوظ کیا ہے۔ اگر آپ نے انٹیجر ٹائپ لکھا ہے۔



05:31:55

اگر آپ ایڈریس اسٹور کرنا چاہتے ہیں تو آپ کو int لکھنا پڑے گا۔ اگر آپ کریکٹر ٹائپ اسٹور کرنا چاہتے ہیں تو آپ کو کریکٹر اسٹار لکھنا ہوگا۔ اگر آپ فلوٹنگ ٹائپ اسٹور کرنا چاہتے ہیں تو آپ کو فلوٹ اسٹار لکھنا پڑے گا۔ اگلی چیز جس کے بارے میں ہم بات کریں گے وہ ہے فارمیٹ۔ اب، جب بھی ہم پوائنٹس پرنٹ کرتے ہیں، پوائنٹر عام متغیر نہیں ہوتے ہیں۔ اگر آپ int star ptr لکھتے ہیں، تو ایسا نہیں ہے کہ جب بھی آپ اسے پرنٹ کریں گے، آپ فیصد d لکھ سکیں گے کیونکہ اس کے اندر ایک عدد کی قدر ذخیرہ نہیں ہوتی، اس کے اندر ایک ایڈریس محفوظ ہوتا ہے اور ایڈریس کی اپنی قسم ہوتی ہے، ایڈریس کی اقسام۔



05:32:29

اس کے لیے ہمیں فیصد لکھنا ہوگا۔ فیصد p کا مطلب ہے c کے اندر پوائنٹر ایڈریس۔ اب یہ تصریح استعمال کی جاتی ہے۔ لیکن جب بھی آپ فیصد p لکھیں گے تو ایک عجیب و غریب قدر پرنٹ ہوگی۔ ہم اسے لکھیں گے اور دیکھیں گے کہ اسے کیسے پرنٹ کیا جائے گا۔ لیکن وہ عجیب و غریب قدر جو پرنٹ ہو جاتی ہے، بعض اوقات ہم اسے فیصد y کی مدد سے بھی لکھتے ہیں۔ اس کا مطلب ہے کہ یہاں ہمیں عام طور پر ایک ہیکساڈیسیمل ویلیو ملتی ہے۔ اگر پوائنٹر کا ایڈریس سسٹم میں ہیکساڈیسیمل کی شکل میں محفوظ ہے تو اگر ہم اسے نارمل نمبرز کی شکل میں چاہتے ہیں تو ہم اسے نارمل نمبرز کی شکل میں لکھ سکتے ہیں۔



05:33:00

آئیے کاسٹ ٹائپ کرتے ہیں، یہ فیصد y غیر دستخط شدہ انٹ کے لیے ہے اور فیصد p ہمارے پوائنٹر ایڈریس کے لیے ہے، اس لیے بعض اوقات تاکہ پوائنٹر ایڈریس عجیب نہ لگے، ہم اسے فیصد u کا استعمال کرکے پرنٹ بھی کرتے ہیں، ہم دونوں کو سیکھ رہے ہوں گے، ہم دونوں کو آزمائیں گے اور کوڈ کی مدد سے دونوں کے درمیان فرق کو بھی سمجھیں گے، ہم پہلے کیا کرتے ہیں، آئیے یہ سب لکھتے ہیں، ہم یہ سب لکھتے ہیں، یہ سب سنتا ہے، ہم سب لکھتے ہیں ایک فیصد p، جس کا مطلب ہے کہ ہم پوائنٹر کی ویلیو پرنٹ کرنے جا رہے ہیں، ہم میموری ایڈریس پرنٹ کرنے جا رہے ہیں۔



05:33:33

اس کے بعد آخر میں لکھا جاتا ہے۔ جب بھی ہم end لکھتے ہیں اور اس کے بعد کسی متغیر کا نام لکھتے ہیں، یعنی end کا پتہ ہوتا ہے، تب ہمیں اس متغیر کا پتہ ملتا ہے۔ اب پتہ کی قسم کیا ہے، فیصد پی. تو ہم ایڈریس پرنٹ کروا لیں گے۔ اگلی لائن میں ہم نے ptr لکھا ہے۔ اب پوائنٹر بھی یہی کام کرے گا۔ اگر m فیصد کنارہ ہمیں پتہ دیتا ہے، تو پوائنٹر بھی ہمیں پتہ دیتا ہے۔ تو اس میں بھی فیصد p ہوگا۔ اور اگر ہم پوائنٹر کا ایڈریس لکھنا چاہتے ہیں یعنی پوائنٹر کا بھی تو ایک ایڈریس ہوگا جیسے اگر edge کا ایڈریس تھا تو ہم نے edge کے ایڈریس کو پوائنٹر کے طور پر پرنٹ کیا ہے۔



05:34:06

میں نے اسے ذخیرہ کیا ہے، لیکن پوائنٹر بھی کچھ زمین پر کھڑا ہے، پوائنٹر کا بھی اپنا پلاٹ ہے، اس لیے اس کا بھی ایک ایڈریس ہوگا، اگر ہم اس ایڈریس کو بھی پرنٹ کرنا چاہتے ہیں، تو اس کے لیے بھی فیصد p استعمال کریں گے، اسی لیے اسے یہاں بتاتے ہیں اور دیکھتے ہیں، تو ہم نے کیا کیا ہم نے ایک ویری ایبل بنایا ہے جس میں 22 ہیں اور اب اس پوائنٹ کا ایڈریس پرنٹ کرکے ایک چیز کو ایک متغیر کے اندر اسٹور کر لیا جائے گا۔ ایک، سب سے پہلے ہم ایڈریس کی پرنٹنگ سیکھ رہے ہیں، کہ ایڈریس کو کیسے پرنٹ کیا جائے، تو ہم اس کے لیے فیصد p لکھیں گے۔



05:34:42

بعد میں ہم m percent edge لکھیں گے، اسے محفوظ کرکے ایک بار چلاتے ہیں، ہمیں کچھ ویلیو مل گئی ہے، یہاں بھی ایک بیس A ڈالتے ہیں، یہ ویلیو کنارے کے ایڈریس کی ویلیو ہے، اس فارمیٹ کو ہیکساڈیسیمل فارمیٹ کہا جاتا ہے، اب یہ ممکن ہے کہ جب آپ اسے اپنی مشین پر پرنٹ کریں گے تو آپ کو کوئی اور مختلف ویلیو ملے، اس میں کوئی حرج نہیں، آپ کے ایڈریس کے مطابق مختلف سسٹم اور ایڈریس مختلف ہوسکتے ہیں، اس طرح آپ کے ایڈریس اور ایڈریس مختلف سسٹم ہوسکتے ہیں۔ ایک ہی متغیر کے لیے اس میں کوئی حرج نہیں، لیکن یہ فارمیٹ



05:35:22

کیا یہ پڑھنا تھوڑا مشکل نہیں ہے؟ تو ہم کیا کر سکتے ہیں؟ ہم اپنے پورے ایڈریس کو ہیکساڈیسیمل سے غیر دستخط شدہ انٹ میں تبدیل کر سکتے ہیں۔ اگر ہم اسے unsigned int میں تبدیل کرتے ہیں تو یہ ایک انتباہ پھینک دے گا کہ یہ ان چیزوں کو کرنے کا صحیح طریقہ نہیں ہے، لیکن اسے پڑھنے میں آسانی پیدا کرنے کے لیے، اس نے اس ایڈریس پر کیا کیا ہے کہ اس نے اسے ایک نمبر میں تبدیل کر دیا ہے۔ لہذا اگر ہم یہاں دیکھتے ہیں، تو ہم اس پر زوم کر سکتے ہیں اور دیکھ سکتے ہیں کہ یہ ہمارا میموری ایڈریس ہے۔ اب اگر ہم فیصد پرنٹ کرتے ہیں تو فیصد ہمارے لیے ایڈریس سینس نہیں کرے گا، لیکن a



05:35:52

اب ہمیں پتہ چلا کہ یہ ایڈریس ہے، اب ہم کیا کریں گے، ہم وہی کریں گے، پی ٹی آر کے لیے، آئیے اس پرسنٹیج P کو کمنٹ کریں، f فیصد u A اور PTR کو پرنٹ کریں، آئیے اسے محفوظ کرتے ہیں، کچھ وارننگز دی جا رہی ہیں لیکن ہم ان کو نظر انداز کر دیں گے، یہاں ہم نے ایک بات نوٹ کی کہ جب ایڈریس ایج پرنٹ کیا گیا، تو PTR کی جو ویلیو پرنٹ ہوئی اور جب ہم PTR پرنٹ کرتے ہیں، اس کی قیمت آئی۔ متغیر، پھر دونوں ایک جیسے ہیں، یہ ایک ہی ہے کیونکہ جو کچھ بھی edge کا پتہ تھا، اب بالآخر PTR کے اندر ہی محفوظ ہو جاتا ہے۔



05:36:36

یہ ہو گیا، اس لیے دونوں کی قدریں ایک جیسی ہیں اور اس کے بعد اگر ہم اپنے PTR کا ایڈریس پرنٹ کرنا چاہتے ہیں تو اس کے لیے کیا لکھیں گے، M یعنی PTR کے ایڈریس پر، آئیے اسے بھی محفوظ کر لیں، اب اسے چلاتے ہیں، یہ پہلی اور دوسری ویلیو دونوں ایک جیسی ہیں کیونکہ کنارے اور PTR دونوں ایک ہی قدر رکھتے ہیں، لیکن جب بھی ہمیں PTR کا ایڈریس ملے گا، آپ کو PTR کی یہ ویلیو الگ الگ ہو جائے گی۔ مختلف، وہ دونوں میں ایک جیسے ہیں، لہذا دونوں کے پاس ایک ہی ایڈریس ویلیو اور اس کا پتہ ہے۔



05:37:09

قیمت ptr ہے یعنی ptr کا ایڈریس مختلف ہے، اس طرح ہم اپنا ایڈریس پرنٹ کرتے ہیں۔ اگلا، آئیے پوائنٹر پر محفوظ ایڈریس کی ویلیو پرنٹ کرنے کے بارے میں بات کرتے ہیں۔ تو اس میں ہم ایڈریس آپریٹر پر ویلیو کے بارے میں سیکھیں گے۔ اب، سب سے پہلے، اگر ہم edge کی ویلیو پرنٹ کرنا چاہتے ہیں، تو ہم پہلے ہی جانتے ہیں کہ ہمیں فیصد d کرنے کی ضرورت ہے کیونکہ edge انٹیجر ٹائپ ویلیو رکھتا ہے، اس لیے ہم فیصد d لکھیں گے، یہ سب سے عام بات ہے، لیکن اگر ہم پوائنٹر پر ویلیو پرنٹ کرنا چاہتے ہیں۔



05:37:39

اگر ہم یہ کام کروانا چاہتے ہیں تو اس کے سامنے ایک ستارہ لگا دیں گے۔ اس ستارے کا مطلب ایڈریس پر قدر ہے۔ اس لیے پوائنٹر کے اندر جو بھی ایڈریس ہو، اس ایڈریس کے اوپر جو بھی ویلیو ہو، وہ اسے پرنٹ کر دے گا۔ تو ہم جانتے ہیں کہ پوائنٹر کے اندر ہمارا ایڈریس 1020 ہے اور 1020 سے اوپر ہماری عمر کا متغیر ہے جس میں ہماری عمر 22 محفوظ ہے۔ تو یہ کیا کرے گا، پہلے یہ اس ایڈریس پر جائے گا، پھر اس ایڈریس پر ویلیو پر جائے گا، پھر اسے یہ ویلیو پرنٹ ملے گی۔ تو یہاں بھی 22 چھاپے جائیں گے۔ 22 یہاں بھی چھاپے جائیں گے۔ اب ہم دونوں کا ایک اور چھوٹا مجموعہ دیکھتے ہیں۔ یہاں سب سے پہلے ہم نے لکھا



05:38:18

کنارے کا پتہ تو یہاں سے ہمیں کنارے کا پتہ ملا، پھر ہم نے اس ایڈریس پر اسٹار ایرکس ویلیو لکھی، تو کنارے کا پتہ 210 ہے، یہ کہے گا کہ مجھے اس پر ویلیو دو، تو 2 10 کی ویلیو کیا ہے، تو یہ یہاں آئے گا سب سے پہلے کنارے کا ایڈریس کنارے کا پتہ 1020 ہے، اور یہ کہے گا کہ یہ ویلیو 1 پر 20 ہے 1020، یہ 22، تو یہاں بھی ہمارے پاس صرف 22 پرنٹ ہوں گے، آئیے کوڈ سے اس کی تصدیق کرتے ہیں، سب سے پہلے ہم نے ایڈریس پرنٹ کرنے کا طریقہ سیکھا، اب ہم سیکھیں گے کہ ویلیو کیسے پرنٹ کی جاتی ہے۔



05:38:55

تو ویلیو پرنٹ کرنے کے لیے پہلے ہم پرنٹ f فیصدی d لکھیں گے کیونکہ جب بھی ہم ویلیو پرنٹ کرنے جا رہے ہیں تو ہر بار ہماری قسم فیصد d ہوگی۔ سب سے پہلے، ہم کنارے کو پرنٹ کرتے ہیں، بیک sl a control s edge، تو ہمیں عام طور پر 22 پرنٹ ہوئے، لیکن اب ہم جو کرنے جا رہے ہیں وہ یہ ہے کہ ہم ایڈریس کی ویلیو کو پوائنٹر پر محفوظ کریں گے، درحقیقت، یہ کنٹرول c control اور end control کرتے ہیں، یہاں ہم ایڈریس ptr پر ویلیو لکھیں گے اور یہاں a کے ایڈریس پر ویلیو لکھیں گے، چلو، ان دونوں کو محفوظ کریں، چلو اور محفوظ کریں۔



05:39:41

ہمارے لیے ہر بار 22 پرنٹ ہوا کیونکہ ہم چاہے کوئی بھی نحو لکھیں، اس سب میں سے، بالآخر ہم ایک ہی پتے پر پہنچ رہے ہیں، ایک ہی پلاٹ تک پہنچ رہے ہیں، یہاں تک کہ اگر ہم اس گھر سے جا کر براہ راست اسی گھر تک پہنچتے ہیں، تو ہم آخر کار اسی پلاٹ تک پہنچتے ہیں، یہی وجہ ہے کہ جب بھی ہم اس پلاٹ میں رہنے والے لوگوں کی قیمت چھاپ رہے ہیں، جس کا مطلب ہے کہ 22 کو بھی چھپنے کا خطرہ ہے، امید ہے کہ ہمیں یہ بھی خطرہ ہوگا۔ ptr کا مطلب ہے ایڈریس کے لیے پوائنٹر ویلیو، اگر ہم پوائنٹر ڈالتے ہیں۔



05:40:10

تو آگے کون سی ویلیو پرنٹ ہوتی ہے اور اگر ہم m فیصد کنارے کے سامنے نجمہ لگاتے ہیں تو اس کا مطلب ہے کہ ہم ایڈریس نکالتے ہیں اور پھر نجمہ لگاتے ہیں تو کون سی ویلیو پرنٹ ہوتی ہے اگلی چیز جس کے بارے میں ہم بات کریں گے ایک پریکٹس سوال ہے جو اس سوال میں چیزوں کو مزید واضح کرے گا ہمیں آؤٹ پٹ کا پتہ لگانا ہے ہمارا سوال کچھ اس طرح ہے کہ ہم نے سب سے پہلے ایک پوائنٹر بنایا ہے جو ہم نے پہلے x پوائنٹر کے اندر ایک پوائنٹر بنایا ہے اور اب پوائنٹر بنایا ہے۔ ایکس کا ایڈریس ڈالیں آئیے ہم اسے میموری سے تھوڑا سا تصور کرتے ہیں۔



05:40:43

ایک پوائنٹر ہے اور ہمارے پاس ایک متغیر x ہے اب x کا ایڈریس ہے، فرض کریں ایڈریس کچھ بھی ہو سکتا ہے، یہ 2000 ہے، ہم نے پہلے ہی اس ایڈریس کو پوائنٹر کے اندر اسٹور کر رکھا ہے اور ہم نے اسے ast رسک ptr میں محفوظ کر لیا ہے، ویلیو صفر ast رسک ptr کا مطلب ہے ptr کے ایڈریس پر ویلیو، کون سا ایڈریس ptr میں 2000 ہے، تو ہمارے پاس x 2000 کا رسک ہے، اس کا مطلب ہے کہ ہمارے پاس کیا ہوگا؟ 2000 کے اندر صفر، یہاں کچھ ہوا ہے، ہماری یہ لائن بہت اہم ہے، اس لائن میں کیا ہو رہا ہے اس پر ہمیں توجہ دینے کی ضرورت ہے۔



05:41:21

پی ٹی آر کے اندر جو بھی ایڈریس ہے، ہم اس ایڈریس پر جائیں گے اور وہاں صفر کو اسٹور کریں گے۔ اگر پی ٹی آر کے اندر 2000 ہے تو ہم 2000 پر جائیں گے اور وہاں صفر کو ذخیرہ کریں گے۔ تو اس طرح ہم نے کام کیا ہے۔ اب ہم یہاں کیا کر رہے ہیں، ہم x کی ویلیو پرنٹ کر رہے ہیں اور PTR کی ویلیو پرنٹ کر رہے ہیں۔ تو ہمیں یہاں x کی قدر کے طور پر کیا ملے گا؟ x کی قدر 0 ہوگی کیونکہ ہم نے قطار کو بالواسطہ طور پر x میں محفوظ کیا ہے۔ آپ دیکھیں گے کہ یہاں کوئی لائن ایسی نہیں ہے جس میں x is to کچھ لکھا ہو، لیکن پھر بھی ہم نے x میں x کی ویلیو پرنٹ کر دی ہے۔



05:41:50

میں نے قدر کیسے تفویض کی؟ میں نے اسے اس لائن کی مدد سے تفویض کیا، کیونکہ یہاں ہم نے بالواسطہ طور پر اس کے ایڈریس کی شکل میں x تک رسائی حاصل کی ہے، اس لیے یہاں صفر پرنٹ ہو جائے گا، اور ptr پر ویلیو کا مطلب ہے کہ آپ ptr کے اندر ایڈریس پر جائیں اور وہاں موجود ویلیو کو اسٹور کریں، تو یہ بھی آگے کرنے کی ضرورت ہے، ہم نے کیا کیا، ہم اس حصے کو کوڈ کرتے ہیں اور اس کی تصدیق کرتے ہیں، سب سے پہلے ہم ایک عدد تخلیق کرتے ہیں جس سے ہم ایک عدد انٹیجر بناتے ہیں اور ہم کس انٹیجر سے شروع کرتے ہیں۔ ایک اشارہ



05:42:23

اب ہم پی ٹی آر کے نام سے پی ٹی آر کے اندر کیا کر رہے ہیں، ہم اپنے ایکس کا ایڈریس اسٹور کر رہے ہیں اور پھر بالواسطہ طور پر پی ٹی آر پر ایڈریس کے اندر، ہم صفر کو اسٹور کر رہے ہیں۔ تو سب سے پہلے ہم فیصد d b nx کی ویلیو پرنٹ کرنے کی کوشش کریں گے اور اس کے بعد ہم اپنے اسٹار PTR کو پرنٹ کرنے کی کوشش کریں گے، اسے یہاں x e star PTR e لکھتے ہیں۔ تو اب ہم پہلے ہی بحث کر چکے ہیں کہ اس لائن کی وجہ سے ہمارے x کی ویلیو صفر ہو گئی ہے، تو یہاں بھی ہمیں صفر پرنٹ ہونا چاہیے اور یہاں بھی۔



05:43:05

ہمارے پاس صفر پرنٹ ہونا چاہئے تو آئیے اسے محفوظ کریں اور اس کی تصدیق کریں۔ ہمارے پاس دونوں صورتوں میں صفر پرنٹ ہے کیونکہ دونوں کی قدریں صفر ہیں۔ اب اگلی لائن کی طرف چلتے ہیں۔ اگلی سطر میرے لیے اور بھی اہم معلوم ہوتی ہے۔ اگلی لائن ستارہ PTR + = 5 کہتی ہے۔ آئیے اس لائن کو بھی اہم کے طور پر نشان زد کریں۔ اگر ہم اسے تھوڑا سا توڑتے ہیں تو یہ کہتا ہے star PTR = star PTR + 5۔ یہ کہنے کا کیا مطلب ہے کہ پوائنٹر میں ایڈریس کا مطلب پوائنٹر پر ویلیو ایڈریس کا مطلب ہے 2000۔ ایڈریس کچھ بھی ہو، جب بھی ہم یہاں Star PTR لکھ رہے ہیں۔



05:43:46

اس کا مطلب کیا ہے x اسٹار PTR، x کا پتہ، تو x پر جو بھی ویلیو ہے، آپ اس میں f کو شامل کریں اور اسے x پر واپس دیں، جس کا مطلب x بھی ہے، تو کیا ہوگا، اس لائن کا بنیادی مطلب x + = 5 ہے، تو x کے اندر ویلیو کیا تھی، قطار 0 میں ہم نے f کا اضافہ کیا، تو یہاں اس لائن کی مدد سے ہماری x کی قیمت 5 ہو جائے گی، اب یہاں p ستارہ کی p کا مطلب کیا جائے گا، تو یہاں f ستارہ کا پرنٹ کیا جائے گا۔ ایڈریس پی ٹی آر پر ویلیو، تو اگر یہ ایکس کا ایڈریس ہے، تو ایکس کی ویلیو دوبارہ پرنٹ کی جائے گی، یہ 5 ہے، ہم اس کی بھی تصدیق کریں گے۔



05:44:25

آئیے اپنے کوڈ میں ایسا کرتے ہیں، یہاں ہم اسٹار ptr ps ect 5 لکھیں گے اور اب ہم اپنا پرنٹ اسٹیٹمنٹ ڈالیں گے، اس لائن کی مدد سے ہمارے x کی ویلیو پانچ ہوگئی ہے، تو یہاں بھی پانچ پرنٹ ہوں گے اور ہمارے یہاں بھی پانچ ہیں، آئیے اس کی بھی تصدیق کرتے ہیں، اب ہمارے پاس جو دونوں ویلیوز ہیں وہ پہلے صفر تھیں، اب وہ اگلی سطر کے بارے میں مزید بات کریں گے، اگلی لائن میں مزید بات کریں گے'۔ کیسے، اب ہم یہاں انکریمنٹ آپریٹر استعمال کر رہے ہیں، یہ انکریمنٹ آپریٹر کیا کر رہا ہے، آئیے اسے توڑتے ہیں، تو اسٹار کریں



05:45:03

PTR = star ptr + 1 کا مطلب یہ طریقہ ہے اور ہم نے بحث کی ہے کہ جب بھی star ptr آتا ہے اس کا مطلب صرف star ptr کا مطلب ہے x + 1 = x تو x کی قیمت پہلے پانچ تھی اب یہ 6 ہو جائے گی تو یہاں بھی x کی قیمت چھ پرنٹ ہو گی اور یہاں بھی star ptr یعنی x کی قدر پرنٹ ہو گئی ہے یہ لائنیں ptr پلس ایک بار پھر لکھیں گے کہ آپ ان لائنوں کو ptr پلس لکھیں گے۔ ptr ایک ساتھ ہیں اور پلس پلس بریکٹ کے بعد ہے جس کا مطلب ہے کہ سٹار ptr حاصل کر رہا ہے پلس اسے ptr کا پلس نہیں مل رہا ہے تو پوائنٹر پلس کو پلس سٹار نہیں مل رہا ہے



05:45:43

پی ٹی آر پوائنٹر کے ایڈریس پر ویلیو پلس پلس ہو رہی ہے، آئیے یہاں ہماری ویلیو پرنٹ ہو جائے، ہمیں سکس ملنا چاہیے اور سکس بھی یہاں پرنٹ ہونا چاہیے، اسے دوبارہ کمپائل کریں اور چلائیں، اب ہمارے پاس آخر میں چھ ہے اور PTR بھی چھ ہے، تو ہم پوائنٹر کیسے لکھیں، پوائنٹر میں کیا ویلیو محفوظ ہے، اسے کیسے پرنٹ کرنا ہے، ایڈریس کو کیسے نکالنا ہے، ویری ایبل کا ایڈریس کیسے نکالنا ہے، ویری ایبل کا ایڈریس کیسے نکالنا ہے۔ پوائنٹر پر کھینچے گئے پتے سے قیمت



05:46:15

جی ہاں، ہم نے بہت سی چیزوں کی کھوج کی ہے اور یہ پوائنٹر سوالات، چاہے آپ کے کالج سے پوچھے جائیں یا بھرتی کرنے والے، ایک ہی شکل میں ہوں گے، اس کی کوئی شکل آپ کو اس پر M لگا کر دی جائے گی، کہیں وہ EST کا خطرہ لگا کر آپ کو دے دیں گے، کہیں وہ آپ سے پتہ معلوم کرنے کے لیے کہیں گے، کہیں وہ آپ سے کہیں گے کہ آپ کو پتہ معلوم کریں، یہ بنیادی طور پر بنیادی پتہ تلاش کرنے کا بہترین طریقہ ہے اور یہ بنیادی طور پر کنفیوژن ہے۔ ہم نے ابھی بحث کی ہے، اور اگر ذرا سی الجھن بھی ہو تو ایک بار پھر دیکھ لیں، اس کے بعد بہت سارے سوالات پوچھیں



05:46:47

ایک بار جب ہم پوائنٹس پر بہت سارے سوالات کرتے ہیں، خاص طور پر پیپر سے ایک دن پہلے یا اپنے انٹرویو سے ایک دن پہلے، تب پوائنٹس کے بارے میں سب کچھ واضح ہو جائے گا۔ اب اگلی چیز جس کے بارے میں ہم بات کریں گے وہ ہے پوائنٹر ٹو پوائنٹر۔ پوائنٹر ٹو پوائنٹر ایسا متغیر ہے جو دوسرے پوائنٹر کا پتہ محفوظ کرتا ہے۔ تو وہ متغیر جو کسی دوسرے نقطہ کی میموری ایڈریس کو محفوظ کرتا ہے۔ مثال کے طور پر، ہمارے پاس میموری ہے۔ سب سے پہلے، اس کے اندر، ہم نے ایک متغیر A بنایا جس میں 22 ذخیرہ تھا۔ اس متغیر کا پتہ 210 ہے۔ اب



05:47:18

ہم نے اس کے اندر ایک نیا پوائنٹر PTR بنایا، جو ہم نے سوچا تھا اسے کنارے کی طرف اشارہ کرتے ہیں، تو یہاں edge 20110 کا ایڈریس آئے گا، اب اس پوائنٹر کا کچھ ایڈریس 20113 بھی ہوگا، جیسا کہ ہم نے اسے پرنٹ کرتے وقت دیکھا تو کچھ ویلیو نکلی، اب ہم اس پوائنٹر کے ایڈریس کو بھی ایک نئے ویری ایبل میں اسٹور کرنا چاہتے ہیں، ہم PTR پوائنٹر کو کیسے اسٹور کریں گے، ہم اسے نئے ویری ایبل میں اسٹور کریں گے۔ ہم پی ٹی آر کا ایڈریس اس کے اندر محفوظ کر لیں گے، تو 20113 آئے گا اور یہاں محفوظ ہو جائے گا اور اس کی اپنی قدر بھی ہو گی۔



05:47:51

پتہ ہوگا اب یہ سلسلہ جاری رہ سکتا ہے ہوسکتا ہے کہ ہم پوائنٹر کے لیے ایک نیا پوائنٹر بنائیں جو اس کے ایڈریس کو اسٹور کرے پھر ایک نیا بنائیں جو اس کا ایڈریس اسٹور کرے تو یہ سلسلہ چلتا رہے گا اب ہم سلسلہ کے آخری درجے پر آچکے ہیں یعنی پوائنٹر ٹو پوائنٹر ہم حقیقی زندگی کی پروگرامنگ میں پوائنٹر ٹو پوائنٹر کا استعمال بہت کم کرتے ہیں لیکن یہ ضروری ہے کہ ان کو پڑھنا ضروری ہے تاکہ وہ آپ کے کالج سے انٹرویو کرنے سے پہلے پانچ سوالات پوچھیں یا پوائنٹر سے پوچھیں۔ پروفیسر اسے نصاب میں شامل کرتا ہے۔



05:48:21

تو ہم اسے پوائنٹر ٹو پوائنٹر کی شکل میں رکھ سکتے ہیں، تو آئیے پوائنٹر ٹو پوائنٹر کو ڈیکلیئر کرنے اور استعمال کرنے کے طریقہ کے بارے میں بات کرتے ہیں، جیسا کہ ہم پوائنٹس کو int star ptr کی شکل میں لکھتے تھے اور اب یہ پوائنٹر ٹو پوائنٹر بن گیا ہے، اس لیے یہاں ایک اسٹار کی جگہ ہم صرف ڈبل اسٹار لگائیں گے، اس لیے اس کا مطلب ہے کہ پوائنٹر سے پوائنٹر، اس لیے اگر آپ پوائنٹر کو ڈبل اسٹار میں اسٹور کرنا چاہتے ہیں تو آپ پوائنٹر کو پوائنٹر اسٹور کریں۔ کریکٹر پوائنٹر کا ایڈریس اسٹور کرنا چاہتے ہیں، پھر کریکٹر ڈبل اسٹار ppt اگر آپ فلوٹنگ ویری ایبل کے فلوٹنگ پوائنٹر کا ایڈریس اسٹور کرنا چاہتے ہیں تو ڈبل اسٹار فلوٹ کریں۔



05:48:56

PPT اب یہ PPT R ایک متغیر کا نام ہے یعنی ضروری نہیں کہ آپ اسے PPT کے طور پر رکھیں تو سمجھنے کے لیے میں نے اسے پوائنٹر ٹو پوائنٹر کے طور پر لکھا ہے جیسے کہ اس کریکٹر ڈبل سٹار ڈبل سٹار سٹار یہ بھی پوائنٹر ٹو پوائنٹر ہے کیونکہ اس کی قسم کریکٹر سٹار سٹار ہے اب ایک پریکٹس سوال کے بارے میں بات کرتے ہیں اب اصل میں پوائنٹر سے پوائنٹر بنا کر دیکھتے ہیں کہ ہم سب سے پہلے اس قسم کے variable کو تخلیق کرتے ہوئے کیا کریں گے؟ آئیے قیمت کی قیمت کے اندر قیمت بنائیں



05:49:28

00 محفوظ ہے۔ اب ہم ایک نیا پوائنٹر فلوٹ اسٹار بنائیں گے PTR PTR قیمت کا پتہ محفوظ کرے گا۔ اب ہم ایک اور نیا پوائنٹر بنائیں گے، یہ پوائنٹر ٹو پوائنٹر ہوگا، یعنی PPT R ہم PTR کا پتہ PPT R کے اندر محفوظ کریں گے۔ تو ہم نے PTR کا پتہ لیا اور اسے P PTR کے اندر محفوظ کر لیا۔ تو مجھے امید ہے کہ یہ سلسلہ ہمارے لیے واضح ہو جائے گا کہ ہمارا پوائنٹر نارمل متغیر کا ایڈریس اسٹور کرتا ہے اور ہمارا پوائنٹر ٹو پوائنٹر پوائنٹر متغیر کا ایڈریس اسٹور کرتا ہے۔ تو یہ تبدیلی ہوتی رہتی ہے۔ اب اس کو ایک سوال کی شکل میں تھوڑا اور دیکھتے ہیں۔



05:50:02

آئیے ہم سمجھتے ہیں کہ ہمارا سوال a کی قدر کو اس کے پوائنٹر سے پوائنٹ تک پرنٹ کرنا ہے۔ یہاں ہمیں کوئی ایک متغیر دیا جائے گا، فرض کریں کہ int aa i5 یا ایک متغیر دیا گیا ہے۔ اب ہمیں اس کا پوائنٹر ٹو پوائنٹر دیا گیا ہے، جس کا مطلب ہے کہ سب سے پہلے ہم نے اس کے لیے ایک پوائنٹر بنایا ہوگا، int ptr، جس میں ہم نے aa کی ویلیو، ایڈریس کو اسٹور کیا ہوگا، اس کے بعد اس کے لیے پوائنٹر کے لیے ایک پوائنٹر بنایا ہوگا، p ptr، جس میں ہم نے ptr کا ایڈریس اسٹور کیا ہوگا۔ اب ہمارے پاس یہ دونوں نہیں ہیں، لیکن یہ ہے۔ اس pptr کی مدد سے ہم اپنا نمبر پانچ ہی پرنٹ کر سکتے ہیں۔



05:50:39

ہم اسے پرنٹ کروانا چاہتے ہیں، ہم اسے کیسے پرنٹ کرائیں گے، آئیے ہم اسے ڈایاگرام کی مدد سے تھوڑا سمجھ لیتے ہیں، سب سے پہلے فرض کریں کہ آپ کے پاس ایک ویری ایبل aa ہے جو میموری ایڈریس پر محفوظ ہے جس میں ہماری ویلیو پانچ محفوظ ہے، اس کے علاوہ آپ کے پاس PPT R ہے، PPT R کے اندر ایک ایڈریس محفوظ ہے، PTR کے اندر ایک ایڈریس بھی محفوظ ہے، اس کا ایڈریس su20020 کے اندر محفوظ ہے۔ پی ٹی آر، اس کا ایڈریس 2010 تھا، اس لیے 2010 پی پی ٹی آر کے اندر محفوظ ہے اور اس کا ایڈریس 2020 ہے، اس قسم کی کچھ تبدیلیاں جاری ہیں، اب جب بھی آپ ویلیو نکالنا چاہیں تو



05:51:12

سب سے پہلے ہمارے ذہن میں گھنٹی بجنی چاہیے اور ہمیں ایک آپریٹر کو یاد رکھنا چاہیے جو ایڈریس آپریٹر کی ویلیو ہے یعنی ہمارا ast رسک جب بھی ہمیں پتہ معلوم کرنے کی ضرورت ہوتی ہے تو ہمیں یاد رکھنا پڑتا ہے جب بھی ہمیں پتہ معلوم کرنے کے لیے m فیصد یاد رکھنے کی ضرورت ہوتی ہے تو eris کیسے کارآمد ہوگا ہم جانتے ہیں کہ PTR ستارہ PTR ہمیں i = 5 کی قیمت دیتا ہے کہ یہ ہمیں PPR ستارہ دے گا تو ہمیں PPR کیا ملے گا جو ہمیں پانچ ستارہ دے گا۔ اس ایڈریس کے اندر اسٹور کا مطلب ہے اسٹار PTR سے ہم یہاں اور اس میں آئیں گے۔



05:51:48

یہ ایڈریس پر اسٹور شدہ ویلیو پر آئے گا، لیکن اگر ہم سٹار سٹار پی پی آر کریں گے تو کیا ہوگا، تو ایک زنجیر چلے گی، چین کیسے چلے گی، سب سے پہلے اس پہلے ستارے کی مدد سے، ہم یہاں 2010 سے آئیں گے اور اس 2000 تک آئیں گے، دوسرے سٹار کی مدد سے ہم یہاں 2000 سے آئیں گے اور پھر اس فائیو پر آئیں گے، اس کا مطلب ہے کہ ڈبل سٹار پر، اس کا مطلب ہے کہ ڈبل سٹار کی قیمت پر، اس طرح ہم نے ڈبل کرنا ہے۔ اقدار کو دو بار، اس کے بعد ہم اسے پرنٹ کروا سکتے ہیں، ہمارا i = 5، آئیے کوڈ کی مدد سے اسے عملی طور پر آزماتے ہیں، اگر یہ ابھی تک واضح نہیں ہے، تو آئیے اس حصے کو کرتے ہیں۔



05:52:24

تبصرہ کریں آئیے ہم ایک متغیر int aa بناتے ہیں جس میں پانچ کو محفوظ کیا جاتا ہے۔ اس کے علاوہ ہم ایک پوائنٹر ویری ایبل int star ptr بنائیں گے یہ aa کا ایڈریس ہے اور ہم پوائنٹر p ptr کے لیے ایک پوائنٹ بنائیں گے جس میں ptr کا ایڈریس محفوظ کیا جائے گا۔ اب کیا کرنے کی ضرورت ہے ہمیں صرف چیزوں کو پرنٹ کرنے کی ضرورت ہے۔ عام طور پر ہم ایک ہی چیز کو پرنٹ کریں گے جو ہے star star p ptr۔ ٹرمینل کمپائل اور رن پھر اسٹار اسٹار پی ٹی آر میں ہم نے اسے پرنٹ کیا اور ہمارے لئے پانچ پرنٹ ہوئے۔ مجھے امید ہے کہ اس کی منطق واضح ہے کہ star ptr مجھے ptr اور star کے ایڈریس کی قدر دے گا۔



05:53:07

اگر آپ سٹار PTR کرتے ہیں تو یہ PTR پر std ایڈریس کی ویلیو دے گا، یعنی یہ پانچ کی ویلیو دے گا، جو ہم نے پرنٹ کیا ہے، اس لیے اسے سمجھنا بہت آسان تھا، ایک کو ہمیشہ دو آپریٹرز کو ذہن میں رکھنا پڑتا ہے، جب آپ کو قدر کی ضرورت ہو تو ستارہ کہاں استعمال کرنا ہے، ایڈریس کی ضرورت کے وقت m فیصد کہاں استعمال کرنا ہے، ہم نے ان دونوں کے امتزاج کو یہاں اور وہاں ضرور دیا ہو گا، اب جب بھی ایک اہم موضوع ہے جس پر ہم بات کریں گے۔ پروگرامنگ اور اب تک جتنے بھی عنوانات ہم نے C, C میں سیکھے ہیں وہ عموماً سکولوں میں ہوتے ہیں۔



05:53:37

کالجوں میں ہم ان کو پہلے پڑھانے کی وجہ یہ ہے کہ یہ تصورات صرف C میں موجود نہیں ہیں، آپ کو یہ تمام پروگرامنگ زبانوں میں کہیں نہ کہیں ملیں گے۔ اگر آپ جاوا کا مطالعہ کرنے جاتے ہیں، آپ C++ کا مطالعہ کرنے جاتے ہیں، آپ JavaScript کا مطالعہ کرنے جاتے ہیں، فرض کریں کہ آپ Go جیسی کوئی اور پروگرامنگ زبان پڑھ رہے ہیں، آپ CSS کا مطالعہ کر رہے ہیں، یہ تصورات ان میں بھی موجود ہیں۔ ہمارے فنکشنز کے تصورات، ہمارے لوپس، ہمارے اگر اور تصورات، یہاں تک کہ کچھ زبانوں میں آپ پوائنٹرز کے ساتھ کھیلتے ہیں۔



05:54:05

آپ کو مل جائے گا اور اب ہم فنکشن کال کے بارے میں پڑھنے جا رہے ہیں جو کہ اپنے آپ میں ایک اہم موضوع ہے ہماری فنکشن کال، جب ہم کالنگ سٹیٹمنٹ لکھتے ہیں جیسے کہ ہم نے ایک فنکشن سم بنایا ہے جس کے لیے ہم نے a اور b کا مجموعہ لکھا ہے c میں دو قسم کی فنکشن کالز ہوتی ہیں پہلی کال از ویلیو اور دوسری کال بذریعہ ریفرنس پہلے آئیے کال کی مثال دیکھتے ہیں ہم نے کال کے حساب سے ویلیو کے بارے میں پہلے ہی پڑھا ہے اس میں کچھ نیا نہیں ہے جو میں نے پہلے ہی پڑھا ہے اور اس میں کچھ نیا نہیں ہے جو میں نے پڑھا ہے۔



05:54:35

میں آپ کو بتاتا ہوں کہ اسے کال بائی ویلیو کہتے ہیں، تو آئیے ایک عام پروگرام لکھیں، یہاں آپ سوچ رہے ہوں گے کہ ہم اچانک پوائنٹر سے فنکشن پر کیسے گئے، لیکن اب ہم سیکھیں گے کہ فنکشنز کا پوائنٹرز سے کیا تعلق ہے، تو سب سے پہلے ایک فنکشن کا اعلان کرتے ہیں، ہم اس کا نام مربع void square int a رکھیں گے، آئیے اس کی تعریف بھی لکھیں گے پھر ہم فیصد d پرنٹ کریں گے، آئیے یہاں لکھیں مربع e برابر b a اور n اس فنکشن نے کیا کیا، اس نے ایک عدد لیا



05:55:29

n اب n کو n سے ضرب دینے کے بعد، مربع کو اسی متغیر میں محفوظ کیا گیا اور پھر ہم نے مربع پرنٹ کیا۔ اب مین فنکشن کے اندر، آئیے ایک نمبر لیتے ہیں int نمبر 4 کے برابر ہے اور اس کے لیے ہم مربع کہتے ہیں۔ جب ہم مربع کو کہتے ہیں تو ہم اس میں نمبر پاس کرتے ہیں اور پھر مربع کو ایک بار پرنٹ کرنے کے بعد، ہم اس نمبر کو دوبارہ پرنٹ کرتے ہیں فیصد d نمبر b s ایک نمبر ہے۔ ہم نے نمبر بنایا، نمبر کا مربع پرنٹ کیا اور نمبر دوبارہ پرنٹ کیا۔ آئیے اسے ایک بار چلائیں اور آؤٹ پٹ کا تجزیہ کریں۔ تو



05:56:11

ہمیں 16 کے طور پر مربع ملا اور نمبر کی قیمت چار رہ گئی، لیکن اگر ہم غور سے دیکھیں تو، مربع فنکشن کے اندر ہم نے آخر کو تبدیل کر دیا تھا۔ جو نمبر یہاں بھیجا گیا تھا، ہم نے اسے 4 ضرب جدول 4 میں تبدیل کر دیا تھا، یعنی 16، تو جب ہمارا n واپس گیا تو اسے 16 ہونا چاہیے تھا، تو یہ چار کیوں ہے؟ اب ہم پہلے ہی اس پر بات کر چکے ہیں۔ یہ چار ہے کیونکہ جب بھی ہم کوئی ویلیو پاس کرتے ہیں، C میں بطور ڈیفالٹ اسے ویلیو سے پاس کیا جاتا ہے، یعنی کاپیاں بنائی جاتی ہیں۔ ہم نے اس تصور پر فنکشنز میں بحث کی تھی کہ یہ نمبر



05:56:44

یہ ایک دلیل ہے، جب ہم اسے کسی فنکشن کے اندر سے پاس کرتے ہیں، تو فارمل پیرامیٹر کیا کرے گا وہ اس آرگومنٹ کی کاپی بنائے گا اور اس فنکشن کے اندر ہونے والی تمام تبدیلیاں کاپی میں ہوں گی، یہ ایسا ہی ہے کہ آپ کا میسج جوں کا توں رہے گا، تو دوست، میسج موصول ہونے کے بعد آپ اس کے ساتھ کچھ بھی کر سکتے ہیں، چاہے آپ اسے فارورڈ کر دیں، ڈیلیٹ کر دیں، محفوظ کر لیں، لیکن وہ میسج میرے پاس ہی نہیں رہے گا، تو ہمارے پاس وہی میسج نہیں رہے گا۔ مین فنکشن اور دوست، ہمارا مربع فنکشن ہے۔



05:57:22

آپ مربع فنکشن کے پیرامیٹرز کے ساتھ جو بھی کرتے ہیں اس سے مین فنکشن کے آرگومنٹس پر کوئی اثر نہیں پڑتا، اسی وجہ سے نمبر کی ویلیو ایک ہی رہتی ہے، لیکن اگر میں یہ کہوں کہ ہم متغیر کو مختلف طریقے سے پاس کرسکتے ہیں جس میں ویلیو کو تبدیل کرنا ممکن ہے، تو یہ فنکشن کال کی ایک مختلف قسم ہوگی، اس لیے ڈیفالٹ رویہ یہ ہے کہ ایک کاپی ہم تک پہنچائی جاتی ہے، اس تصور کو کال کہتے ہیں، جس کا مطلب ہے کہ ہماری ویلیو کی پاسنگ قابل قدر ہے، جس کا مطلب یہ ہے کہ ہماری ویلیو آرگوئیبل ہے۔ ہمارے فنکشن کی دلیل کے طور پر، تو اس کی تعریف ہے۔



05:57:56

کہ جب ہم ویری ایبل کی ویلیو کو بطور دلیل پاس کرتے ہیں تو اب تک جتنے بھی فنکشن لکھے ہیں وہ ویلیو کے ذریعے کال کرتے تھے لیکن اگر ہمیں ویری ایبل کو پاس کرنا ہے تو ہم کال بہ حوالہ بھی کرسکتے ہیں جب ہم ویری ایبل کے ایڈریس کو دلیل کے طور پر پاس کرتے ہیں تو مثال کے طور پر اس کی مثال لیتے ہیں ایک اور فنکشن بنائیں جس کا نام انڈر سکور اسکوائر ہے اس میں اسکوائر اسکوائر کے اندر ایک نیا فنکشن ہوگا اسکوائر اسکوائر کے نیچے۔ int n اب ہم یہاں کیا کریں گے int star n لکھتے ہیں کیونکہ ہم یہاں ایک پوائنٹر پاس کر رہے ہیں



05:58:32

ہم ایک ایڈریس بھیجنے جا رہے ہیں، اس لیے ایڈریس وصول کرنے کے لیے ایک پوائنٹر ویری ایبل ہونا چاہیے تھا اور یہاں ہم وہی چیز لکھیں گے star n = star n star n اور یہاں بھی Star n لکھیں گے تو یہ ایک مربع فنکشن ہے جو ایک پوائنٹر لیتا ہے، یعنی یہ ایک نمبر کا پوائنٹر لے گا، اس کا ایڈریس لے گا، اب تمام چیزیں اس ایڈریس کے ساتھ براہ راست ہوں گی اور ہم سب سے پہلے اپنے تمام ایڈریس کے نیچے اسکوائر کے اندر کیا کریں گے اس انڈر سکور مربع کے اندر نمبر، اس کے بعد ہمارا نمبر دوبارہ پرنٹ کریں۔



05:59:09

آئیے اسے مکمل کرتے ہیں اور دیکھتے ہیں کہ ہمارے نمبر کی کیا قیمت پرنٹ کی جائے گی۔ آئیے اس کوڈ کو ایک بار چلائیں اور پھر اس کوڈ کا تجزیہ کریں۔ تو یہاں سب سے پہلے 164 پرنٹ ہوئے کیونکہ ہم نے پہلا مربع کہا تھا، لیکن جب ہم نے دوسرا مربع کہا تو پہلا مربع 16 پرنٹ ہوا۔ جب ہم واپس آئے تو ہمارا نمبر چار ہو گیا تھا، لیکن اس بار ہم نے مربع 16 کہا، تو اس نے کیا کیا، اس نے ہمارے نمبر کو بھی بدل دیا، یعنی اس نے چار کو 16 کر دیا، تو یہ اس طرح کا کام ہے جب ہمارے پوائنٹس ان کو فنکشن کے اندر پاس کرتے ہیں۔ ہم پوائنٹس کیسے پاس کرتے ہیں؟



05:59:39

سب سے پہلے، آپ جو بھی فنکشن بنا رہے ہیں، آپ اسے اس کے پیرامیٹر میں لکھیں گے۔ دوسرے الفاظ میں، ایک پوائنٹر یہاں آنے والا ہے۔ یہاں ایک پوائنٹر آنے والا ہے، اس کا مطلب ہے کہ ہم یہاں ایک ویری ایبل کا ایڈریس دینے جا رہے ہیں، جسے اسٹور کرنے کے لیے ہمیں پوائنٹر ویری ایبل کی ضرورت ہے۔ تو جب آپ نے تعریف لکھی تو آپ نے لکھا int star n۔ اب یہ int سٹار ن، یہ ن ایک پوائنٹر متغیر ہے۔ ہم اس پوائنٹر کے ایڈریس تک کیسے رسائی حاصل کرتے ہیں جو ذخیرہ کیا جا رہا ہے؟ ast رسک کے لحاظ سے، اس کا مطلب ستارہ سے ہے، لہذا n کے ایڈریس پر ویلیو n کے ایڈریس کی قدر بن جائے گی



06:00:08

n کے ایڈریس کی ویلیو تو یہاں ہم جو کر رہے ہیں وہ یہ ہے کہ ہم 4 بائی 4 کر رہے ہیں اور اسے دوبارہ اسی جگہ پر اسٹور کر رہے ہیں جو ایڈریس کے آخر میں ہے اور پھر ہم نے اس ویلیو کو محفوظ کر لیا ہے اب ہم نے کیا کیا، جب ہم واپس گئے تو وہ ویلیو بدل گئی کیونکہ ہم نے یہاں ایڈریس میں براہ راست تبدیلی کی تھی ہم نے کاپی میں تبدیلی کی تھی لیکن اس فنکشن میں ہم نے ایڈریس میں ہی تبدیلیاں کیں تو جب ہم واپس گئے تو تھوڑا سا عدد کی قدر کو سمجھنے میں مدد ملی۔



06:00:37

ہوا یہ کہ ہمارے پاس ایک متغیر نام کا نمبر تھا۔ نمبر کا کوئی نہ کوئی پتہ ہوتا۔ فرض کریں کہ اس کا پتہ 2000 تھا۔ اب ہماری قیمت نمبر کے اندر محفوظ تھی۔ ہم نے ایک فنکشن کال کی۔ فنکشن کال میں ایک پوائنٹر بنایا گیا تھا۔ اشارہ کرنے والے نے کیا کیا؟ پوائنٹر نے اپنا نام ن رکھا ہے۔ پوائنٹر نے 2000 کا پتہ محفوظ کر لیا ہے کیونکہ ہم نے آخری نمبر پاس کر لیا تھا۔ اگر ہم اس فنکشن کو لائن کے اندر غور سے دیکھیں تو ہم نے نمبر کا پتہ انڈر سکور مربع کو دیا ہے۔ تو ہم نے اسے نمبر کا ایڈریس دے دیا۔ اس نے اسے n کے اندر محفوظ کر لیا۔ اب جو بھی تبدیلیاں ہوں گی وہ پتے پر ہوں گی۔



06:01:13

اگر ہم اسٹار n کی قیادت میں اسٹار n لکھتے ہیں تو اس کا مطلب ہے کہ ہم اس چار تک رسائی حاصل کر رہے ہیں، جس کا مطلب ہے نمبر اور اس کا مطلب نمبر بھی ہے، تو یہاں ہم نے چار کو چار سے ضرب کیا ہے، اب جب ہم اسے دوبارہ اسٹار A میں اسٹور کرتے ہیں، تو اس کا مطلب ہے کہ ہم نے خود ہی ایڈریس کو تبدیل کر دیا ہے، تو یہاں ہم نے چار کو کاٹ کر 16 کو محفوظ کر لیا ہے، ایڈریس پہلے جیسا ہی ہے، n کے اندر کا ایڈریس اب بھی plot 20 کا ہے کیونکہ plot کا ایڈریس اب بھی تبدیل نہیں ہوا ہے۔ 2000 لیکن اس کے اندر رہنے والے لوگ بدل چکے ہیں، یعنی اب ہم نے چار کا ایڈریس بدل دیا ہے۔



06:01:47

16 نے اسے اب بنا دیا چاہے ہم اسکوائر فنکشن میں رہیں یا مین فنکشن میں یا کسی نئے فنکشن میں، اب اس ایڈریس کے اندر وہ ویلیو مستقل طور پر تبدیل ہو گئی ہے، اب پرانی ویلیو واپس نہیں آئے گی، اس طرح جب ہم ایڈریس کو پاس کرتے ہیں اور ایک پوائنٹر ویری ایبل اسے اسٹور کرتا ہے اور ہم صرف ایڈریس کے اندر تبدیلیاں کرنے کے قابل ہوتے ہیں، تو ہم اسے کال بذریعہ حوالہ کہتے ہیں، یعنی فنکشن کال جسے ہم نے ایڈریس کے ذریعے دیکھا ہے، اسے argu کہا جاتا ہے۔ دلیل کے طور پر ان کے متغیر کا پتہ پاس کرے گا۔



06:02:19

یہ پوائنٹر کے اندر محفوظ ہو جائے گا اور جب ہم اصل ویلیو کے اندر تبدیلیاں کر سکتے ہیں، جو کہ حوالہ سے کہلاتی ہے، تو یہ ہمارے فنکشن کالز کے دو طریقے ہیں، اس کو سیکھنے اور اسے بہتر طور پر سمجھنے کے لیے، بہترین مثال ہمارے سویپنگ فنکشن کی سویپ دو نمبرز a اور b ہے، یہ ہمارا اگلا سوال ہے، swap کا مطلب ہے انٹرچینج یا ایکسچینج، جیسے a کی ویلیو پانچ ہے اور b کی ویلیو پانچ ہے، تو اس کی ویلیو پانچ ہو گی، تو b کی ویلیو کیا کرے گی۔ ایک سے پانچ اور بی سے تین کی قدر، یہ دونوں کی قدروں کا تبادلہ کرے گا، اب ایک بار دیکھتے ہیں



06:02:55

ہم اصل میں تبادلہ کرنے کا عمل کیسے کرتے ہیں؟ ہماری یادداشت میں، ہمارے پاس پہلے سے ہی دو متغیر ہیں۔ پہلا ہمارا A متغیر ہے اور دوسرا ہمارا B متغیر ہے۔ A میں ذخیرہ شدہ قدریں تین ہیں اور B میں پانچ ہیں۔ جب بھی ہمیں کسی چیز کو تبدیل کرنا ہوگا، ہم ایک تیسرا متغیر استعمال کریں گے۔ اس کو سمجھنے کے لیے آئیے ایک اور مثال لیتے ہیں۔ جیسے، ہمارے پاس پانی کی ایک بالٹی ہے جس میں 3 لیٹر پانی ذخیرہ کیا جاتا ہے۔ ایک اور بالٹی ہے جس میں ہمارے پاس پانچ لیٹر پانی ذخیرہ ہے۔ اب، ہم نے اس بالٹی کا نام رکھا ہے۔



06:03:25

اس کا نام B ہے ہمیں کیا کرنا ہے ہمیں A میں 5 لیٹر پانی چاہئے ہمیں B میں 3 لیٹر پانی چاہئے تو ہم کیسے کریں گے ہم تیسری بالٹی لائیں گے یہ تیسری بالٹی آئے گی اور تیسری بالٹی خالی ہے اس کے اندر کچھ نہیں ہے تو یا تو ہم پہلے B کا پانی ڈالیں گے پھر B خالی ہو جائے گا اس کے بعد B میں A کا پانی ڈالیں گے تو B میں یہ پانی ڈالیں گے تو B میں یہ پانی آیا تو B کی 3 لیٹر ہمارے پاس ہے۔ اس کے اندر B کا 5 لیٹر پانی تھا اور ہم نے B میں A کو خالی کر دیا تھا تو اب A خالی ہو گیا ہے اب کیا کریں، اس بالٹی کا پانی واپس A کے اندر ڈال دیں۔



06:03:59

اگر ہم یہ دیں گے تو آخر کار A میں 5 لیٹر آئے گا، B میں 3 لیٹر آئے گا اور یہ بالٹی بالکل خالی ہو جائے گی۔ اس طرح جب بھی ہمیں دو بالٹیوں کا پانی بدلنا ہو تو ہم تیسری خالی بالٹی لے آتے ہیں۔ اسی طرح، یہاں، اگر ہمیں دو متغیرات کی قدروں کا تبادلہ کرنا ہے، تو ہم تیسرا خالی متغیر لائیں گے۔ فرض کریں کہ ہم تیسرے خالی متغیر کو عارضی متغیر کہتے ہیں، یعنی ہم نے اس کا نام t رکھا ہے، یہ عارضی ہے، یہ خالی ہے۔ اب ہم سب سے پہلے کیا کریں گے، t کی ویلیو میں a یا b کی ویلیو ڈالیں گے، ہم کچھ بھی کر سکتے ہیں۔



06:04:34

اس کا مطلب ہے کہ a کی قدر t میں محفوظ کی گئی ہے۔ اب ہم a کے اندر b کی ویلیو اور b کے اندر t کی قدر ڈالیں گے۔ تو ہم یا تو اسے لکھ سکتے ہیں یا اس طرح بھی لکھنا چاہیں تو یہ دونوں صحیح ہیں۔ بنیادی نکتہ یا تو خالی الف ہے یا خالی بی۔ اس طرح ہم دونوں اقدار کو تبدیل کرنے کے قابل ہو جائیں گے۔ تو ہم بہار کے دو ورژن لکھنے جا رہے ہیں۔ ایک میں ہم قدر کے لحاظ سے کال کریں گے اور دوسرے میں ہم حوالہ کے ذریعے کال کریں گے۔ دیکھتے ہیں کہ کون سا صحیح نکلتا ہے۔ سب سے پہلے، آئیے بہار کی کوشش کریں۔ اقدار کے مطابق کال کریں۔ آئیے ایک فنکشن بنائیں۔ باطل تبادلہ۔



06:05:06

اس int a اور int b کے اندر دو متغیر آئیں گے۔ مین فنکشن کے اندر، a کی قدر تین ہے، b کی قدر تین ہے، اور ہم اپنی تعریف لکھتے ہیں۔ void swap int a int b ہمیں کیا کرنا ہے ایک عارضی متغیر بنانا ہے اور ہم اس کے اندر a کی قدر ڈالیں گے، ہم a کے اندر b کی قدر ڈالیں گے، b کے اندر a کی قدر ڈالیں گے، اور یہاں ہم پرنٹ کریں گے کہ a کو تبدیل کرنے کے بعد فیصد d اور b فیصد d a اور b کے برابر ہے، درحقیقت، ہم متغیرات کو اس کے اندر رکھ سکتے ہیں تاکہ ہم اس کے اندر کام کر سکیں اور x کو استعمال کر سکیں۔ فرق کو سمجھیں.



06:06:02

ہم a اور b کو تبدیل کر رہے ہیں اور ایک دلیل کے طور پر x اور va کو پاس کرکے، آئیے اپنے سویپ فنکشن کو کال کریں اور اس کے اندر x اور va کو پاس کریں۔ اب ہم پہلے ہی جان چکے ہیں کہ یہ فنکشن ویلیو سے گزرے گا، اس لیے یہاں بہار آئے گی، لیکن ہم یہاں بہار نہیں چاہتے، ہم اسپرنگ چاہتے ہیں جو ہمارے مین فنکشن کے اندر آئے اور ویلیوز مکمل ہو جائیں، تو یہاں ہم دیکھیں گے کہ آیا x اور va کی قدریں بدل گئی ہیں، x اور va کا مطلب ہے کہ ہم جانتے ہیں کہ a اور b بدل جائیں گے، لیکن ہم چاہتے ہیں کہ x اور va بھی مین فنکشن کے اندر تبدیل ہوں۔ اب یہ کرتے ہیں۔



06:06:38

اسے ایک بار چلائیں۔ اب آپ کو یہاں رک کر خود سوچنا ہوگا اور بتانا ہوگا کہ واقعی تبادلہ ہوگا یا نہیں۔ اور اگر صحیح جواب آتا ہے تو اس کا مطلب ہے کہ آپ نے نکات کو اچھی طرح سمجھ لیا ہے۔ اگر یہ درست نہیں ہے، تو اس کا مطلب ہے کہ آپ کو کچھ پچھلے تصورات پر جانے کی ضرورت ہے۔ تو آئیے ایک بار جواب لکھتے ہیں۔ ہم نے ایک = 5 اور b = 5 بنایا ہے۔ ایسا اس لئے ہوا کیونکہ ہمیں یہاں ایک عارضی متغیر لکھنا چاہئے تھا۔ آئیے اسے صاف کریں اور اگر ہم اسے دوبارہ مرتب کر کے چلاتے ہیں تو a کی ویلیو پانچ اور b کی قدر تین ہو گئی ہے۔ یہاں شروع میں



06:07:19

x کیا تھا، ہمارا تین تھا، y، ہمارا پانچ تھا، پہلے a تین تھا اور b پانچ تھا، اس لیے یہاں تبدیلی آئی، لیکن جب ہم مین فنکشن کے اندر واپس گئے تو اب بھی ہمارا x تین کا تین ہے اور y پانچ کا پانچ ہے، یعنی اگر ویلیو فنکشن کے ذریعے یہ کال ہمارے لیے اسپرنگ نہیں ہوئی تو اسپرنگ کیسے ہوگی، اسپرنگ کال کے ذریعے ریفرنس کے ذریعے ہوگی، اس کے لیے ہم ایک اور فنکشن بنائیں گے، اس کے تحت ہم ایک اور فنکشن بنائیں گے۔ پوائنٹر int سٹار ایک int سٹار b کال بذریعہ حوالہ باطل، اس کے اندر ہمیں ب کے پوائنٹر اور پوائنٹر مل رہے ہیں، اب اگر ہمارے پاس ہے



06:08:10

اگر ویری ایبل پوائنٹر میں آیا ہے تو جس کو ہم عارضی بنائیں گے، اسے پوائنٹر کی شکل میں بھی بنا سکتے ہیں۔ اب یہاں ہم ایک نیا متغیر بنائیں گے، عارضی t۔ سب سے پہلے، a کی قدر اس t کے اندر محفوظ کی جائے گی۔ اور پھر a کی قدر میں، ہم قدر کو b کے ایڈریس پر ڈالیں گے۔ اب b کے ایڈریس پر ویلیو میں، ہم t کی ویلیو ڈالیں گے۔ تو ہم یہاں کیا کریں، پوائنٹر جو a کی طرف اشارہ کر رہا تھا، جہاں a کا پوائنٹر a کی قدر نکالے گا، اور اسے t کے اندر ڈال دے گا۔ اب a کے ایڈریس پر ویلیو ہوگی۔



06:08:45

یہ t کے اندر آئے گا، جو قدر b کے اندر ہے وہ a کے اندر آئے گی اور ایڈریس پر ویلیو جو t کے اندر محفوظ ہے b کے ایڈریس پر ویلیو میں آئے گی۔ تو اس طرح ہم پتے کے حساب سے خطاب کر رہے ہیں۔ اب آئیے اسے یہاں دوبارہ چیک کرتے ہیں، آئیے اسے انڈر سکور کرتے ہیں، اب اسے پرنٹ کرتے ہیں۔ یہاں ہمیں x اور y کی ویلیو پاس کرنی ہوگی، آئیے اسے محفوظ کرکے چلاتے ہیں۔ تو اب ہمارے پاس کیا ہے، سویپ فنکشن نے ہمارے مین فنکشن کے اندر تبدیلیاں لی ہیں اور ہمیں دکھایا ہے، جیسے x کی ویلیو اب پانچ ہے۔



06:09:21

اور y کی قدر اب تین ہوگئی ہے۔ یہ کال بذریعہ ریفرنس کی مدد سے ممکن ہوا کیونکہ ہم نے پوائنٹر پاس کیا، ایڈریس کو پاس کیا اور ہم نے اپنے فنکشن کے اندر مزید پوائنٹرز بنائے، اسی وجہ سے ایڈریس پر ویلیو آپس میں بدل گئی، اس لیے ہمارا فنکشن صرف ایک ویلیو واپس کرسکتا ہے، لیکن جب ہمیں ایک سے زیادہ ویلیو کی ضرورت ہو، تو ہم کیا کرسکتے ہیں کہ اس کے اندر ایک ویری ایبل کا ایڈریس پاس کریں اور وہاں تبدیلیاں کرنے کے بعد اسے اس ویریبل کے اندر اسٹور کریں اور پھر کوئی بھی فنکشن واپس نہیں آئے گا۔



06:09:51

اور آپ کو آپ کی ویلیو مل جائے گی، اس طرح جب ہمیں کسی فنکشن سے ایک سے زیادہ ویلیو واپس کرنے کی ضرورت ہوتی ہے تو ہم کال کے ذریعے حوالہ استعمال کرتے ہیں، ہم ان ویلیوز کو واپسی کی مدد سے نہیں بلکہ پوائنٹس کی مدد سے واپس کرتے ہیں، اس لیے مجھے امید ہے کہ اب یہ تصور واضح ہو گیا ہے، اگلا سوال جس کے بارے میں ہم بات کریں گے، اگلا سوال کہتا ہے کہ کیا ایڈریس کی آؤٹ پٹ وہی ہوگی، اس سوال میں ہم نے ایک فنکشن بنایا ہے جس میں ہم اپنے ایڈریس کے void کو پرنٹ کرتے ہیں اور ایڈریس کو پرنٹ کرنے کا فنکشن کیا ہے؟ n.



06:10:23

مین فنکشن کے اندر، ہم نے ایک متغیر nn لیا ہے۔ یہاں، ہم نے اس کا پتہ پرنٹ کیا ہے۔ تو، ہماری میموری کے اندر ایک میموری لوکیشن ہوگی جسے ہم نے nn کا نام دیا ہے۔ چار کی قدر اس کے اندر محفوظ ہے۔ فرض کریں کہ ایڈریس 2000 ہے۔ لہذا، جب بھی آپ یہ تجزیہ کرنا چاہتے ہیں کہ آیا آؤٹ پٹ ایک جیسا ہوگا یا اس سوال کا آؤٹ پٹ کیا ہونا چاہیے، تو ایک مثال لیں اور مثال میں، کسی بھی ایڈریس کو فرض کریں۔ تو، یہاں ہم نے ایڈریس 2000 تفویض کیا ہے۔ تو، اسے یہاں پرنٹ کیا جائے گا۔ ہم جانتے ہیں کہ ہمارے پاس 2000 ہے۔ پھر، ہم نے پرنٹ کہا ہے۔



06:10:54

اس میں پتہ گزر گیا۔ اب جب پرنٹ ایڈریس کو کال کیا گیا ہے، اگر ہم غور سے دیکھیں تو یہ قیمت کے لحاظ سے کال ہے۔ جب بھی قدر کے لحاظ سے کال ہوتی ہے تو متغیر کی ایک کاپی بنائی جاتی ہے، تو یہ دوسری کاپی بنائی جائے گی۔ اس کاپی کا نام بھی n ہوگا، لیکن اس کا ایڈریس کچھ اور ہوگا کیونکہ 2000 پہلے سے ہی ایک متغیر ہے، اس لیے یہ 21، 2010 ہوگا، یہ کچھ بھی ہوسکتا ہے، اس کا ایڈریس 5000 ہوسکتا ہے، یہ 10000 ہوسکتا ہے، تو یہ ہمارے پرنٹ ایڈریس فنکشن کے لیے n کی کاپی ہے اور اس کے اندر موجود ویلیو کاپی کی گئی ہے، اس لیے ہمارے copi کے اندر بھی اس کی copi کردی گئی ہے۔



06:11:28

اسے ذخیرہ کر لیا گیا ہے۔ اب یہاں ہم اس ن کا ایڈریس پرنٹ کر رہے ہیں۔ تو اس ن کا پتہ جو چھپے گا وہ 2000 مہینوں کا ہوگا۔ تو ظاہر ہے کہ ہمارا یہ خطاب اور یہ خطاب کبھی بھی قدر کے لحاظ سے ایک جیسا نہیں ہو سکتا۔ ہاں، اگر یہ حوالہ کے لحاظ سے کال تھی، جب ہم ایک ہی متغیر کے بارے میں بات کر رہے ہیں، اگر ہم ایک ہی میموری لوکیشن کے بارے میں بات کر رہے ہیں، تو ہمارے پتے ایک جیسے ہوں گے۔ آئیے کوڈ کی مدد سے اس کی تصدیق بھی کرتے ہیں، سب سے پہلے void پرنٹ ایڈریس کے نام سے ایک فنکشن بناتے ہیں اور اس میں ایک ویری ایبل n لیتے ہیں۔ اب ہم بنیادی طور پر کیا کریں گے۔



06:11:59

فنکشن کے اندر، ہم ویلیو کو n کے اندر اسٹور کرتے ہیں اور پرنٹ ایڈریس کو کال کرتے ہیں جس میں ہم n پاس کریں گے اور پرنٹ ایڈریس بھی بنائیں گے۔ پرنٹ ایڈریس کے اندر ہمارے پاس ایک عدد n ہے اور یہاں ہم انٹیجر n کی قدر پرنٹ کرنے جا رہے ہیں۔ تو n کا ایڈریس فیصد یا فیصد ہے اور یہاں ہم n کا ایڈریس پرنٹ کریں گے اور اسی لائن کو کاپی کرکے یہاں لکھیں گے۔ اب جب ہم اس کوڈ کو چلاتے ہیں تو آئیے اپنا ٹرمینل کھولیں، کمپائل کریں اور یہ وارننگ آرہی ہیں کیونکہ ہمارا پوائنٹر ہے



06:12:42

فیصد p کے ذریعہ پرنٹ کیا جاتا ہے لیکن ہم نے اسے غیر دستخط شدہ int کے طور پر ٹائپ کیا ہے، لہذا انتباہ کے بارے میں زیادہ فکر نہ کریں۔ اب اگر غور سے دیکھا جائے تو سب سے پہلے ہم پرنٹ ایڈریس کو کال کریں گے اور پھر وہاں سٹیٹمنٹ چلے گی، تو یہاں اس انٹیجر n کی ویلیو کا ایڈریس پرنٹ ہوتا ہے اور پھر مین فنکشن کے اندر ہمارے اصل n کا ایڈریس پرنٹ ہوتا ہے اور دونوں ایڈریس مختلف ہوتے ہیں، یہ ہماری کال بہ قدر ہے، لیکن یہاں اگر کال بذریعہ حوالہ ہوتی تو اس کا مطلب ہے کہ یہاں ستارہ ہوتا، یہاں پر بھی ستارہ ہوتا اور یہاں بھی سٹار کی قدر ہوتی۔



06:13:16

اسے پرنٹ کرنے کا مطلب ہے کہ ہم اس پوائنٹر میں ذخیرہ شدہ ویلیو کو پرنٹ کر رہے ہوں گے اور یہاں سے پرنٹ ایڈریس میں ہم n کا ایڈریس پاس کر رہے ہیں لہٰذا کال بذریعہ ریفرنس بن گیا ہے اب ہم اپنے آؤٹ پٹ کا تجزیہ کرتے ہیں اب آؤٹ پٹ میں نظر آنے والے دونوں ایڈریس ایک جیسے ہیں کیونکہ کال بذریعہ ریفرنس ہو گیا ہے یعنی اب ہم میموری لوکیشن کے بارے میں بات کر رہے ہیں اب ہم براہ راست اس پلاٹ کے بارے میں بات کر رہے ہیں جس کے اندر موجود ایڈریس کی ویلیو کے بارے میں ہمیں پتہ نہیں ہے کہ اب ہم اس پلاٹ کے بارے میں بات کر رہے ہیں۔ پتے ہمارے مختلف ہیں۔



06:13:47

اقدار کو کاپی کیا جاتا ہے۔ حوالہ کے لحاظ سے کال میں اقدار ایک جیسی رہتی ہیں۔ ہم براہ راست صرف میموری ایڈریس تک رسائی حاصل کرتے ہیں۔ یہ ایک بہت اہم امتیاز ہے اور ہمیں اسے یاد رکھنا ہوگا۔ پوائنٹس میں آخری سوال جس کے بارے میں ہم بات کریں گے وہ یہ ہے کہ دو نمبروں کی مجموعی پیداوار اور اوسط کا حساب لگانے کے لیے ایک فنکشن لکھیں۔ مین فنکشن میں اس اوسط کو پرنٹ کریں۔ اوسط کے ساتھ، مصنوع اور رقم کو بھی مین فنکشن کے اندر پرنٹ کرنا ہوتا ہے۔ تو یہاں ہم ایک فنکشن بنائیں گے جو دو نمبرز a اور b لے گا اور دونوں کی جمع کا حساب لگائے گا، یعنی یہ a + b کی پیداوار کا حساب لگائے گا۔



06:14:17

a * b اوسط کا حساب لگائے گا a + b / 2 مین فنکشن تین ویلیو واپس کرے گا اور ہم نے کیا سیکھا ہے کہ ایک فنکشن سے صرف ایک ویلیو واپس آتی ہے لیکن جب بھی کوئی ایسی صورتحال پیدا ہوتی ہے جہاں ایک سے زیادہ ویلیو لوٹائی جاتی ہیں تو وہاں پوائنٹس کا استعمال کریں، اس لیے یہاں پوائنٹس سیو کے طور پر آتے ہیں، ایک بار جب ہم اس کا حل لکھتے ہیں تو دیکھتے ہیں کہ اس صورتحال میں پوائنٹس کیسے کارآمد ہیں، سب سے پہلے ہم مین فنکشن کے اندر دو ویری ایبل بنائیں گے۔ ہم ایک لیں گے، دوسرا متغیر bb ہے، ہم b کی قدر لیں گے۔ اب ایک فنکشن بناتے ہیں۔



06:14:54

ہاں، باطل کام کرو، یہ ہمارے لیے کچھ کام کر رہا ہے، جس کا مطلب ہے کہ یہ کچھ حساب کتاب کر رہا ہے۔ اس میں ہم دو قدریں int a اور int b کو پیرامیٹرز کے طور پر لیں گے۔ اب ہم کیا کریں گے، آئیے اس کی تعریف کرتے ہیں کہ do work int a int b۔ سب سے پہلے ہم دونوں کے مجموعہ کا حساب لگاتے ہیں، int sum a + b۔ پھر ہم دونوں کی پیداوار کا حساب لگاتے ہیں، int پروڈکٹ ایک بار b۔ پھر ہم دونوں کی اوسط کا حساب لگاتے ہیں۔ اوسط کا حساب لگانے کے لیے، ہم a + b divide ba کو 2 سے لکھیں گے۔ تو اس طرح ہم نے تین متغیر لکھے ہیں، لیکن ہم تینوں کو واپس نہیں کر سکتے، تو ہم کیا کریں؟



06:15:37

آئیے ہم اپنے مین فنکشن کے اندر ان تینوں ویری ایبلز کو ڈیفائن کرتے ہیں اور ان تینوں کی طرح پوائنٹس کو پاس کرتے ہیں، یہاں ہم سم پروڈکٹ اور ایوریج بنائیں گے، لیکن تینوں کو پوائنٹس کے طور پر پاس کیا جائے گا، یعنی یہاں تین پوائنٹس پاس کیے جائیں گے، int star sum int star product اور int star اوسط، تو یہاں بھی وہی ویلیوز آئیں گی، int سٹار پراڈکٹ پروڈکٹ int سٹار یہاں آئے گا، پہلے int سٹار کی ضرورت نہیں، پھر int سٹار پروڈکٹ کی ضرورت ہے، پھر int سٹار کی ضرورت ہے۔ یہ یہاں ہے کیونکہ یہ متغیر پہلے سے ہی مین فنکشن کے اندر ہے۔



06:16:21

ہم پروڈکٹ کے ستارے کی تخلیق شدہ قدر کو تبدیل کرنا چاہتے ہیں کیونکہ یہ رقم، یہ مصنوعہ اور یہ اوسط، تینوں پوائنٹس ہیں اور اگر ہم ستارے کی مدد سے پوائنٹر پر ویلیو تک رسائی حاصل کرتے ہیں، تو یہ وہاں محفوظ ہو جائے گا p b اس پروڈکٹ میں ایک ضرب b کو اوسط a p b میں 2 سے تقسیم کیا جائے گا۔ تو اب ہم کام کرتے ہیں اور اپنے کام کے ایڈریس کے اوسط ایڈریس پر کال کریں گے اس کے بعد جب ہم مین فنکشن پر آتے ہیں تو ہمیں تینوں ویلیوز پرنٹ ہو جائیں گی۔



06:17:01

ہم رقم کو فیصد کے برابر لیں گے، پروڈکٹ d فیصد کے برابر ہے اور اوسط d فیصد کے برابر ہے اور یہاں پہلے جمع، پھر پروڈکٹ، پھر اوسط، میں امید کرتا ہوں کہ یہ بات ہم پر واضح ہو جائے گی کہ اس فنکشن کے اندر ہم نے پاس بائی ریفرنس کیا ہے، ہم نے ان تینوں متغیرات کی پاس بائی ویلیو کی ہے، ہم نے ان دونوں متغیرات کی قدر پاس کر لی ہے، ہمیں ان میں بنیادی تبدیلیوں کی ضرورت نہیں ہے، اس لیے b میں بنیادی تبدیلی کی ضرورت نہیں ہے۔ قدر، لیکن ہمیں ان تینوں کے اندر اقدار کی ضرورت تھی، لہٰذا ہم نے ان کو حوالہ سے پاس کیا اور ان کی قدروں کو مین میں حساب لگا کر شمار کیا۔



06:17:40

فنکشن کے اندر ویلیوز محفوظ ہو چکی ہیں، چلو چلتے ہیں، تو ہمارے تین اور پانچ کا مجموعہ آٹھ ہے، دونوں کی پیداوار 15 ہے اور دونوں کی اوسط چار ہے، یعنی 5 + 3 = 8 اور 2 سے تقسیم ہونے پر 4 ہے، تو اس طرح، جب ہمیں دوسرے فنکشن کے اندر واپسی میں ایک سے زیادہ ویلیوز کی ضرورت ہو، تو ہم کیا کریں گے، آپ حوالہ دے کر پاس کر دیں گے، آپ کو بھیجیں گے۔ خالی کریں، اس میں ویلیو اسٹور کریں اور اسے واپس لائیں، اس طرح پوائنٹس ہماری عام پروگرامنگ میں بہت کارآمد ہیں، اس لیے مجھے امید ہے کہ



06:18:13

نکات کا تصور ہم پر کافی حد تک واضح ہو چکا ہوگا۔ ہم نے بہت آسانی سے تمام بنیادی تصورات کا احاطہ کیا ہے۔ چند تصورات ہیں، لیکن ہم اگلے باب میں ان پر بحث کریں گے جب ہم صفوں کے بارے میں بات کریں گے۔ اب، ہم آہستہ آہستہ پوائنٹس کے استعمال کو سمجھیں گے جب ہم ڈیٹا سٹرکچر کریں گے۔ Array ہمارے ڈھانچے میں سے ایک ہے۔ ہم اگلے باب میں صفوں کے بارے میں سیکھیں گے۔ تب تک، ہم کیا کر سکتے ہیں کہ ہوم ورک کے کچھ مسائل اور سوالات کریں اور اپنی صلاحیتوں کو بہتر بنائیں۔ باب کا اختتام



06:18:40

ہم یقینی طور پر اس پر نظر ثانی کر سکتے ہیں تاکہ ہم چیزوں کو بھول نہ جائیں۔ ہم نے آپ کی سہولت کے لیے نوٹ فراہم کیے ہیں۔ اور ہم اپنے اگلے باب کی طرف بڑھتے ہیں۔ اب ہم اپنا باب سات شروع کرنے جا رہے ہیں جس میں ہم arrays کے بارے میں پڑھیں گے۔ اگر ہم صف کی کلاسیکی تعریف کے بارے میں بات کرتے ہیں، تو arrays اسی طرح کے ڈیٹا کی اقسام کے مجموعے ہیں جو مربوط میموری والے مقامات پر محفوظ ہوتے ہیں۔ مثال کے طور پر اگر ہمیں کسی ویلیو کو میموری لوکیشن میں اسٹور کرنا ہو تو ہم اسے ویری ایبل کی مدد سے اسٹور کرتے ہیں۔ ہم ایک متغیر لیتے ہیں اور یہ اس کے لیے میموری کی جگہ محفوظ رکھتا ہے۔



06:19:13

اس کے اندر ہم کچھ ڈیٹا ذخیرہ کرتے ہیں اور اس میموری کی جگہ کو کچھ نام دیتے ہیں جو ہمارا متغیر ہے۔ اگر ہمیں ایک ہی قسم کے بہت سارے اعداد و شمار کو ذخیرہ کرنے کی ضرورت ہے، فرض کریں کہ ہم نے یہاں ایک عدد کو ذخیرہ کیا تھا لیکن ہمیں تین عدد کو ذخیرہ کرنے کی ضرورت ہے، تو ہم چاہتے ہیں کہ وہ تینوں عدد یکے بعد دیگرے ذخیرہ کیے جائیں، جس میں ہم مختلف تاریخوں کو ذخیرہ کرنے کے قابل ہوں، اور اگر ہم تینوں کو ایک مجموعہ کا نام دیں، تو اس قسم کے ڈھانچے کو array structure یا array کہا جاتا ہے۔ اس کی تعریف دیکھیں۔



06:19:45

تو یہ اسی طرح کے ڈیٹا کی اقسام کا مجموعہ ہے۔ اسی طرح کے ڈیٹا کی اقسام کا مطلب ہے کہ آپ صرف تین انٹس یا پانچ انٹس کو ایک ساتھ سٹور کر سکتے ہیں، دو انٹس اور ایک فلوٹ کو نہیں، آپ پانچ فلوٹس کو ایک ساتھ یا پانچ کریکٹرز کو ایک ساتھ سٹور کر سکتے ہیں، لیکن مختلف ڈیٹا ٹائپس کو ایک کلیکشن کی صورت میں ایک ساتھ سٹور نہیں کیا جا سکتا۔ مستقل میموری کے مقام پر ذخیرہ کیا جاتا ہے۔ مسلسل کا مطلب ہے مسلسل، اس لیے یہ ڈیٹا میموری کے اندر مسلسل انداز میں محفوظ ہو جاتا ہے، یعنی یہ ایک کے بعد ایک ذخیرہ ہوتا ہے، پھر اس تک رسائی آسان ہو جاتی ہے، اس لیے جب بھی ہمیں متعدد قسم کے ڈیٹا کی ضرورت ہو



06:20:17

ہمیں متغیرات کو ذخیرہ کرنا ہوتا ہے، اس لیے ان کو مختلف نام دینے کے بجائے، ہم ایک array بناتے ہیں، مثال کے طور پر، اگر ہم اس کی مثال کوڈ میں لکھ کر دیکھیں، فرض کریں کہ ہمیں تین طالب علموں کے مارکس اسٹور کرنے ہیں، تو اگر ہمارے پاس ایک array جیسا کوئی ڈھانچہ نہیں ہے، تو ہم عام طور پر تین ویری ایبلز بنا رہے ہوں گے، int مارکس ایک، ہم دو مارکس اسٹور کریں گے، پھر ہم اسے فزکس میں اسٹور کریں گے۔ اس میں کیمسٹری کے مارکس اور پھر int مارکس اس میں، ہم اپنے ریاضی کے نمبر اس میں محفوظ کریں گے، اب تینوں تک رسائی کے لیے ہمیں الگ الگ متغیرات کی ضرورت ہے، لیکن



06:20:51

اگر میں یہ کہوں کہ میں ایک ہی متغیر سے تینوں قدروں تک رسائی حاصل کر سکتا ہوں، تو اس قسم کی ساخت کو array کہا جائے گا۔ array لکھنے کا طریقہ یہ ہے کہ جس قسم کے لیے ہم array بنانے جا رہے ہیں اس کو ہم لکھیں گے، پھر ہم نشانات لکھیں گے، پھر ہم مربع بریکٹ لگائیں گے جس سے معلوم ہوتا ہے کہ جو ڈھانچہ ہم بنا رہے ہیں وہ ایک array ہے اور اس کے بعد ہم اپنے نشانات 97 98 89 اس طریقے سے لکھیں گے۔ تو یہ ایک صف لکھنے کا نحو ہے، جس میں ہم نے ایک متغیر کے اندر تین قدریں محفوظ کی ہیں، تو میموری کے اندر



06:21:22

قدروں کو یکے بعد دیگرے ذخیرہ کیا جائے گا اور تمام ڈیٹا ان تینوں بلاکس کے اندر چلا جائے گا۔ اب اگر ہم array لکھنے کے نحو کی بات کریں تو اگر ہم انٹیجر ٹائپ اری بنانا چاہتے ہیں تو پہلے ہم ٹائپ کو int لکھیں گے، اس کے بعد ہم اپنے array کا نام لکھیں گے، اس کے بعد مربع بریکٹ لکھیں گے۔ اس لیے مربع بریکٹ کے اندر ہم ایک نمبر لکھتے ہیں، وہ نمبر سائز ہے، یعنی ہمیں مقام کی کس سائز کی ضرورت ہے۔ اگر ہمیں تین عددی اقدار کی ضرورت ہے، تو ہم تین لکھیں گے، اگر ہم پانچ چاہتے ہیں، تو ہم اس کے بجائے پانچ لکھ سکتے ہیں، اگر ہم 10 چاہتے ہیں، تو ہم 10 لکھ سکتے ہیں، اگر ہمیں 100 چاہیے، تو ہمیں بھی 100 لکھنا چاہیے۔



06:21:51

تو اس طرح ہم ایک انٹیجر اری بنا سکتے ہیں جس کا سائز تین ہے۔ اگر ہم ایک کریکٹر اری بنانا چاہتے ہیں تو ہم کریکٹر کو اپنی صف کے نام کے طور پر لکھیں گے، پھر مربع بریکٹ کے اندر ہم لکھیں گے کہ ہم اس میں کتنے کریکٹر اسٹور کرنا چاہتے ہیں۔ اگر ہم فلوٹ بنانا چاہتے ہیں تو فلوٹ، پھر اس کا نام مربع بریکٹ کے اندر اور اندر ہم لکھیں گے کہ سائز کیا ہونا چاہئے، کتنے فلوٹس کو ذخیرہ کرنا ہے۔ تو جیسے ہی ہم یہ بیان لکھتے ہیں int marks is three، تو ہماری میموری کے اندر marks کے نام سے ایک میموری لوکیشن آجاتی ہے جہاں یہ ایک 2 3 تین بلاکس واقع ہیں۔



06:22:22

یہ تینوں بلاکس ایک دوسرے کے لیے مخصوص ہیں اور ان تینوں بلاکس کا سائز ایک عدد کے برابر ہے۔ ہم نے ڈیٹا کی اقسام میں پڑھا ہے کہ ایک عدد عدد میموری میں چار بائٹس لیتا ہے۔ تو یہاں ہر بلاک کا سائز چار بائٹس کے برابر ہے۔ یہ بھی چار بائٹس ہے، یہ بھی چار بائٹس ہے اور یہ مقام بھی چار بائٹس ہے۔ تو ہمیں چار بائٹس کے تین بلاک ملتے ہیں۔ اب کنونشن کے مطابق، ہم اس پہلے بلاک کو صفر ایتھ بلاک کہتے ہیں۔ دوسرے بلاک کو ایک اور تیسرے بلاک کو دو کہا جاتا ہے۔ یہ کنونشن کے ذریعہ ہے، اسے صفر کہا جاتا ہے۔



06:22:53

بیسڈ انڈیکسنگ: کچھ زبانیں ایسی ہوتی ہیں جن میں ایک کی بنیاد پر انڈیکس کیا جاتا ہے، لیکن C، C++ اور Java ایسی زبانیں ہیں جن میں زیرو بیسڈ انڈیکسنگ ہوتی ہے، زیرو بیسڈ، یعنی ہم پہلی پوزیشن کو ایک نہیں بلکہ صفر کہیں گے، اس لیے ہمیں اس چیز کو ہمیشہ ذہن میں رکھنا ہوگا۔ اب بات کرتے ہیں کہ ارے کو ان پٹ یا آؤٹ پٹ کیسے لینا ہوتا ہے، تو ان پٹ لینے کے لیے، سب سے پہلے ہمیں فیصد d لکھنا ہوگا، جس قسم کی بھی ویلیو ہم ان پٹ کے طور پر لینے جا رہے ہیں، اور ہم مربع بریکٹ کے اس نشان کو متغیر کی طرح سمجھتے ہیں، یعنی ایک عام متغیر کی طرح۔



06:23:23

ہم اقدار کو کنارے کے طور پر لکھتے ہیں یا ایک نمبر دو کو نشان زد کرتے ہیں۔ اسی طرح جب ہم array variables کے بارے میں بات کرتے ہیں تو ہم اسے marks 0 marks one marks دو لکھ سکتے ہیں۔ اس کو بھی ایک عام ویری ایبل کی طرح سمجھا جائے گا اور اگر ہمیں اس نارمل ویری ایبل کے اندر کوئی ویلیو ان پٹ کے طور پر لینے کی ضرورت ہے تو ہم اس کے سامنے آپریٹر کا ایڈریس رکھیں گے۔ اگر ہمیں اس کی ویلیو آؤٹ پٹ کرنے کی ضرورت ہے، تو ہم عام طور پر اس متغیر کا نام لکھیں گے۔ اب آپ دیکھیں گے کہ ہم نے array کا نام لکھا ہے، اس کے بعد ہم نے مربع بریکٹ ڈالے ہیں، جس کے اندر ہم نے بطور ان پٹ نمبر لکھا ہے۔



06:23:57

دونوں میں اور آؤٹ پٹ میں، اس کا مطلب یہ ہے کہ جب بھی ہم میموری کے بارے میں بات کر رہے ہیں، فرض کریں کہ ہم نے مارکس کے نام سے ایک اری بنائی ہے، جس کے اندر میموری کے تین مقامات ہیں، تو ہم نے اس کے اندر کچھ قدر ذخیرہ کر رکھی ہوگی۔ اب جب بھی ہم قطار، نشان، مربع بریکٹ 0 لکھتے ہیں تو اس کا مطلب ہے کہ ہم اس نمبر کو جاننا چاہتے ہیں یا ہم اسے داخل کرنا چاہتے ہیں۔ اگر ہم ایک کے نشان لکھتے ہیں تو اس کا مطلب ہے کہ ہم یا تو اس نمبر کو جاننا چاہتے ہیں یا ہم اسے داخل کرنا چاہتے ہیں۔ اور اگر ہم دو کے نشان لکھتے ہیں، تو اس کا مطلب ہے کہ ہم



06:24:24

اگر آپ اس نمبر کو جاننا چاہتے ہیں یا اسے ان پٹ حاصل کر رہے ہیں، تو اس لائن کے اندر آپ جو بھی نمبر لکھتے ہیں، وہ ہمیں بتاتا ہے کہ ہم صف کی کس پوزیشن پر بات کر رہے ہیں۔ لہذا، مربع بریکٹ کے اندر ہم جو بھی نمبر لکھتے ہیں، یہ ہمیں وہ نمبر بتاتا ہے جس کے بارے میں ہم بات کر رہے ہیں۔ ہم ایک بار کیا کریں، مثال کے طور پر، آئیے ایک ارے کو ان پٹ اور آؤٹ پٹ کرنے کی کوشش کریں، جیسا کہ یہ مارکس اری تھا۔ اب ہم اس نحو کے بارے میں بھی بات کریں گے، لیکن آئیے تھوڑی دیر کے لیے اسے یہاں سے ہٹا کر تبصرہ کر دیں۔ سب سے پہلے، آئیے ایک صف بنائیں۔



06:24:55

مارکس نامی اس صف کا سائز تین ہے۔ اب ہم تینوں مضامین کے نمبر ایک ایک کرکے ڈالیں گے۔ تو سب سے پہلے، ہم پرنٹ سٹیٹمنٹ لکھیں، فزکس درج کریں، اسے اسکین کریں، سب سے پہلے ہم فیصد D ڈالیں گے کیونکہ ہم ایک انٹیجر کو اسکین کر رہے ہیں، پھر ہم آپریٹر کا ایڈریس اور صفر کے نشان لگائیں گے۔ اس کے بعد یہی عمل تین بار دہرایا جائے گا، اب کیمسٹری کے نمبر اور یہاں ریاضی کے نمبر، اور دوسری بار جب ہم ان پٹ کے طور پر نمبر لیں گے تو یہ صفر کی پوزیشن پر ہو گا، اس لیے ہم نے پہلے ہی فزکس کے نمبر لیے ہیں اور ان کو ڈال دیا ہے، اب کیمسٹری والے۔



06:25:37

ہمیں اسے پہلی پوزیشن پر رکھنا ہے اور ریاضی والے دوسرے نمبر پر اور اب اگر ہم اسے پرنٹ کرنا چاہتے ہیں تو ہم اسے اس طریقے سے پرنٹ کریں گے، فزکس i برابر فیصد d کے برابر، کیمسٹری i فیصد d کے برابر، ریاضی i برابر فیصد d کے اور یہاں صفر کے نشان، ایک کے نشان، تو مجھے امید ہے کہ آپ سمجھ گئے ہوں گے کہ vari ze کے صرف ایک نشان کی قدر ہے پوزیشن درکار ہے، صرف پہلی پوزیشن پر قدر درکار ہے اور دوسری پوزیشن پر صرف قدر درکار ہے، آئیے اسے بچا کر چلائیں، تو سب سے پہلے ہم فزکس کے نمبر داخل کریں گے، پھر



06:26:16

ہم کیمسٹری کے نمبر داخل کریں گے، پھر ریاضی کے نمبر۔ اس طرح تینوں مضامین کے نمبر پوزیشن کے لحاظ سے محفوظ کیے گئے ہیں۔ فزکس میں، ہم نے صفر کی پوزیشن پر 97، کیمسٹری میں، 98 کو پہلی پوزیشن پر اور ریاضی میں، ہم نے 89 کو دوسری پوزیشن پر ذخیرہ کیا ہے۔ اگر ہم یہاں جا کر یہ کہیں کہ ہم نے ارے کو تین قرار دیا ہے اور ہم 0 اور دو تک رسائی حاصل کر رہے ہیں اور اگر ہم تین تک رسائی حاصل کر رہے ہیں تو ہم کہتے ہیں کہ ہم تین تک رسائی حاصل کرتے ہیں یا ہم خود یہاں تین لکھ سکتے ہیں، تاکہ ریاضی کے نمبر تین میں محفوظ ہو سکیں۔



06:26:48

آئیے اسے ایک بار دیکھتے ہیں، اس کو مرتب کرنے اور چلانے کے بعد، ہم نے فزکس کے 97، کیمسٹری کے 98 نمبر جمع کر لیے ہیں اور اب جیسے ہی ہم ریاضی کے نمبر جمع کر رہے ہیں، فرض کریں کہ ہم 89 کو ذخیرہ کر رہے ہیں، اسی طرح ہمارا پروگرام ختم ہو گیا، یعنی یہ ختم ہو گیا کیونکہ ایک ایرر آ گیا اور یہ ایسی ایرر ہے جس کا مطلب ہے کہ رن ٹائم اسے چیک کرنے کے قابل نہیں رہے گا۔ اگر آپ ایسی غلطی کرتے ہیں جب آپ سرنی کے سائز سے بڑی چیز تک رسائی حاصل کر رہے ہیں، تو کمپائلر آپ کو یہ نہیں بتائے گا کہ آپ غلطی کر رہے ہیں، آپ کا پروگرام آپ کو رن ٹائم پر بتائے گا کہ



06:27:20

آپ نے غلطی کی ہے اور یہ وہیں رک جائے گا جیسے یہاں ہم نے تین لکھے تھے جب کہ ارے کے اندر صرف تین کا سائز ہے جو 0، ایک اور دو کے لیے اب تین کے لیے ہمیں اس ارے کا سائز چار بنانے کی ضرورت ہے اس لیے ہم یہ نہیں لکھ سکتے کیونکہ اس سے ہمیں ایک غلطی ہو جائے گی اس لیے جب بھی ہم ایک array بناتے ہیں تو ہمیں اس بات کا خیال رکھنا پڑتا ہے کہ ہم اپنے زیادہ سے زیادہ انڈیکس سے آگے نہ بڑھیں جس پر ہم کہتے ہیں کہ ہم اس سوال کو آسانی سے حل کرنے کے لیے آگے بڑھیں گے جس پر ہم سوال لکھیں گے۔ قیمت درج کرنے کا پروگرام



06:27:50

تین اشیاء کی اور ان کی آخری قیمت کو جی ایس ٹی کے ساتھ پرنٹ کریں، اس کا مطلب ہے کہ ہمیں تین اشیاء کی قیمت لینا ہوگی۔ اب، ہم اس قیمت کو فلوٹنگ ویلیو کے طور پر رکھ سکتے ہیں اور GST کے ساتھ حتمی قیمت دے سکتے ہیں۔ ہر قیمت کے ساتھ، ہمیں اس کا جی ایس ٹی 18 پر جوڑنا ہوگا اور پھر جو حتمی قیمت آئے گی، ہمیں اسے پرنٹ کرنا ہوگا۔ تو، آئیے دیکھتے ہیں کہ ہم اسے کیسے کریں گے۔ سب سے پہلے، ہمیں تینوں آئٹمز کو داخل کرنا ہے، تو اس کا مطلب ہے کہ ہم ایک صف بنا سکتے ہیں کیونکہ تینوں آئٹمز ایک ہی قسم کے ہیں۔ جب بھی ایک سے زیادہ قدریں رکھنی ہوں اور زیادہ قدریں ہوں اور وہ ایک ہی قسم کی ہوں تو وہاں



06:28:24

اگر ہمیں ایک اری بنانا ہے تو سب سے پہلے ہم فلوٹ کی ایک اری بنائیں گے جسے ہم سائز تین کی قیمت کا نام دیں گے۔ اب پرنٹ اسٹیٹمنٹ لکھیں، تین قیمتیں درج کریں۔ سب سے پہلے ہم اپنی پہلی قیمت کو فیصد F سے اسکین کریں گے، یعنی صفر کی m فیصد قیمت اور اسی طرح m فیصد قیمت ایک اور پھر دو۔ اس کے بعد ہم اسے ہر بار پرنٹ کرائیں گے، درحقیقت کل قیمت ایک دو کے برابر ہے۔ یہاں ہم قیمت لکھیں گے 0 جمع 0.18 کو G کی قیمت سے ضرب۔ ایک طرح سے، ہم نے قیمت کے اندر اس طرح سے 18 پر GST شامل کیا ہے۔



06:29:11

ہم ایک ہی چیز کو تین بار دہرائیں گے، یہاں قیمت سے، یہاں قیمت r 1 کو 0.18 سے 2 کو 0.18 سے ضرب دیں، آئیے اسے محفوظ کریں۔ تو یہ جی ایس ٹی کے ساتھ ہماری آخری یا کل قیمتیں ہیں اور آئیے اسے ایک بار چلائیں۔ یہاں فارمیٹ فیصد ہے f فیصد a۔ اب سب سے پہلے ہمیں تین قیمتیں جوڑنی ہیں، تو 100، 200 اور 300۔ تو یہ جی ایس ٹی ویلیوز ہمارے پاس آئی ہیں، پہلے 118، پھر 236، پھر 354، یہ تینوں قیمتیں آئی ہیں۔ کچھ اسپیس کے لیے، ہم بیک اسپیس بھی رکھ سکتے تھے، آئیے یہ کریں، اسے محفوظ کریں اور ایک بار پھر چلائیں۔



06:29:55

یہ تینوں قیمتیں اضافی جی ایس ٹی کے ساتھ آئی ہیں، لہذا ہم اس طرح کل قیمت کا حساب لگا سکتے ہیں۔ تو یہاں سب سے بڑا فائدہ جو ہمیں arrays کے استعمال سے ملا وہ یہ تھا کہ ہمیں تین الگ الگ ویری ایبلز کو برقرار رکھنے کی ضرورت نہیں تھی، ہم نے ایک ہی ویری ایبل بنایا اور ہمارا سارا کام اسی کے ذریعے ہو رہا ہے۔ جب ہم اسی طرح کے ڈیٹا کی قسموں کے بارے میں بات کر رہے ہیں، تو اب اپنے اگلے موضوع کی طرف چلتے ہیں جسے ابتداء کی صف کہا جاتا ہے۔ ہم نے ابھی دیکھا ہے کہ ہم ایک اری کا اعلان کر سکتے ہیں اور پھر ہم اس میں عناصر ڈال سکتے ہیں، لیکن ارے کو اس کے اعلان کے ساتھ ساتھ شروع کیا جا سکتا ہے۔



06:30:23

مثال کے طور پر، اگر ہم ایک int بناتے ہیں تو ہم اسے int x اور پھر x = 10 کے طور پر لکھ سکتے ہیں یا ہم اسے int x = 10 لکھ سکتے ہیں، یہ دونوں اپنی ابتداء کے عمل ہیں، اسی طرح ہم ایک array کو شروع کرنے کے ساتھ ساتھ اعلان بھی کرسکتے ہیں۔ ہم یہ کیسے کر سکتے ہیں؟ اس نحو کی مدد سے پہلے ہم ڈیٹا ٹائپ لکھتے ہیں، پھر اپنی صف کا نام، پھر مربع بریکٹ، اب اس بات پر توجہ دیں کہ ہمیں مربع بریکٹ کے اندر سائز لکھنے کی ضرورت نہیں ہے کیونکہ ہم جو بھی عناصر دائیں طرف لکھیں گے وہ خود بخود ہمیں ارے کا سائز دے گا، اس کے بعد ہم دائیں طرف لکھیں گے۔



06:30:57

گھوبگھرالی منحنی خطوط وحدانی اور اس کے اندر موجود تمام عناصر، یعنی اگر ہم نے تین عناصر لکھے ہیں، تو اس کا مطلب ہے کہ ہم سائز تین کی ایک صف بنا رہے ہیں۔ اب یا تو ہم اس نحو کی پیروی کر سکتے ہیں یا ہم سائز بھی لکھ سکتے ہیں، تو یہ دونوں نحو بالکل درست ہیں۔ جب ہم اپنے array کو ڈیکلیئر کرنے کے ساتھ ساتھ شروع کریں گے تو ایک array کے نام سے نشانات بنیں گے، اس کے اندر کیا ہوگا، پہلی ویلیو یہاں آئے گی، دوسری ویلیو یہاں آئے گی، تیسری ویلیو یہاں آئے گی، یہ ہماری صفر ایتھ پوزیشن ہوگی، یہ پہلی پوزیشن ہے اور یہ دوسری پوزیشن ہے۔



06:31:33

پہلی پوزیشن کا سائز 4 بائٹس ہوگا، دوسری بھی 4 بائٹس ہوگی، اور تیسری بھی 4 بائٹس ہوگی کیونکہ ایک عدد 4 بائٹس لیتا ہے۔ اب اگر آپ کے پاس 32 بٹ مشین ہے یا آپ کسی اور سسٹم پر کام کر رہے ہیں تو یہ ممکن ہے کہ آپ کی مشین پر int کا سائز 2 بائٹس یا کچھ اور ہو، لیکن میری مشین پر ایک انٹیجر کا سائز 4 بائٹس ہے۔ لہذا، جب بھی کوئی آپ سے حساب کتاب کرنے کو کہے، آپ سے صف کا سائز بتانے کے لیے کہے، آپ یا تو int کا اندازہ 4 بائٹس لگا سکتے ہیں، یا یہ سوال میں یا انٹرویو لینے والے نے دیا ہوگا۔



06:32:02

آپ استاد سے یہ بھی کہہ سکتے ہیں کہ وہ مجھے مشین کے مطابق ایک عدد عدد کا سائز بتائیں، اس میں کوئی حرج نہیں ہے کیونکہ سائز مختلف ہو سکتا ہے، لیکن اس کلاس میں ہم 4 بائٹس لیں گے، اس لیے اگر ہمیں یہ معلوم کرنا ہے کہ اس صف میں کتنی میموری محفوظ ہوئی ہے، تو یہ 12 بائٹس ہو گا کیونکہ تین عدد کو ذخیرہ کرنے میں ہمیں مجموعی طور پر 12 بائٹس کی ضرورت ہو گی، اس طرح ہمیں میموری کی کل ضرورت ہو گی۔ یہ جاننے کے لیے کہ اگر ہمیں کسی کریکٹر کو اسٹور کرنے کی ضرورت ہے، تو ایک کریکٹر اری جس میں ہم 10 کو اسٹور کرسکتے ہیں۔



06:32:32

لہذا اگر ہم 10 کریکٹرز کو اسٹور کر رہے ہیں تو ہم جانتے ہیں کہ ایک کریکٹر فی بائٹ کتنی میموری لیتا ہے اور ہم کتنے کریکٹرز 10 کو اسٹور کر رہے ہیں تو ہم کل 10*1 یعنی 10 بائٹس میں کتنی میموری استعمال کر رہے ہیں۔ اسی طرح، فرض کریں کہ ہم ایک اور انٹیجر اری کو اسٹور کرنا چاہتے ہیں جس میں ہم رول نمبرز اسٹور کر رہے ہیں اور ہم نے 30 بچوں کے رول نمبرز کو اسٹور کیا ہے، تو ہم جانتے ہیں کہ ایک انٹیجر 4 بائٹس لیتا ہے اور ہم 30 بچوں کے رول نمبرز کو اسٹور کر رہے ہیں، اس لیے ہم میموری میں 30 انٹیجرز کو اسٹور کر رہے ہیں، اس طرح کل میموری 30 40 سے 40 ہو جائے گی۔ راستہ



06:33:04

کئی بار، ہمیں اپنے کالج کے امتحانات میں ایسے سوالات آتے ہیں جن میں وہ ہم سے پوچھتے ہیں کہ ایک صف کتنی میموری محفوظ رکھے گی۔ ہمیں یہ بتانا ہوگا۔ اس کا کیلکولیشن اس طرح کیا جاتا ہے کہ ہمارے ڈیٹا کی قسم جو بھی ایک میموری کو محفوظ کرے گی، میموری کے اندر جو بھی جگہ محفوظ کرے گی، اسے اس سے ضرب دیں کہ ہمیں کتنی ذخیرہ کرنے کی ضرورت ہے۔ اس سے ہماری کل میموری کی کھپت اور کل میموری محفوظ ہو جائے گی۔ آئیے ہم میموری کے اندر ایک صف شروع کرنے کی بھی کوشش کریں، تو یہاں کی طرح، ہم نے اس قیمت کی قدر درج کرنے کے بجائے ایک قیمت بنائی ہے۔



06:33:35

اگر ہم براہ راست ابتداء کے سائز کو ہٹا دیں، تو یہ نحو بھی بالکل درست رہتا ہے۔ لہذا، جو بھی آپ کے استعمال کے معاملے میں موزوں ہے، آپ کو کسی بھی صف کو شروع کرنے کے لیے اس نحو کو استعمال کرنا ہوگا۔ اب اگلا موضوع جس پر ہم بات کریں گے وہ ہے ریاضی میں پوائنٹر۔ ریاضی کے حساب سے ہم اسے سمجھتے ہیں جس میں ہم جمع مائنس ضرب تقسیم ماڈیول کے ساتھ کھیلتے ہیں۔ یہاں ہم پوائنٹس کے بارے میں بات کر رہے ہیں کیونکہ arrays کا تعلق کسی نہ کسی طریقے سے پوائنٹرز سے ہوتا ہے۔ ایک بار جب ہم ریاضی میں پوائنٹر کو سمجھیں گے، اس کے بعد ہم سمجھیں گے کہ ان کا کیا تعلق ہے۔ تو پوائنٹس



06:34:16

اس کے اندر ہم ضرب، تقسیم وغیرہ نہیں کر سکتے لیکن کچھ ریاضی کے آپریشنز ہیں جو ہم کر سکتے ہیں، ان میں ہمارا انکریمنٹ آپریٹر اور ڈیکریمنٹ آپریٹر شامل ہیں، یعنی ہم پوائنٹر کی قدر کو پلس یا مائنس کر سکتے ہیں۔ مثال کے طور پر اگر ہم پہلی صورت دیکھیں تو اس میں ہم نے ایک انٹیجر ویری ایبل ایج بنایا ہے جس میں 22 کو محفوظ کیا گیا ہے۔ فرض کریں کہ یہ ایج ویری ایبل ہماری میموری میں اس طرح ہے جہاں 22 محفوظ ہے اور یہ 2000 ہے، یہاں میموری کا مقام۔ اب ہم جو کر رہے ہیں وہ ایک پوائنٹر بنا رہا ہے جو کنارے کی طرف اشارہ کرتا ہے۔



06:34:49

پھر یہ پوائنٹر کہیں بنایا ہوگا، یعنی میموری میں کوئی اور جگہ بنائی ہوگی جس کا نام پوائنٹر ہوگا جہاں ہم نے 2000 کو اسٹور کیا ہوگا اور اس کی بھی اپنی لوکیشن 4010 ہوگی، اب ہم نے پوائنٹر کو پلس پلس کردیا ہے، تو اب ہمیں بتانا ہوگا کہ پوائنٹر کہاں اشارہ کر رہا ہے، پوائنٹر کو پلس پلس کرنا کا مطلب ہے کہ ہم نے پوائنٹر کو ڈیکری یا برابر کرنے کے لیے کیا ہے، جب ہم نے پوائنٹر +1 میں کیا ہے۔ پوائنٹر، پھر ایک خاص چیز ہوتی ہے اور ان کی قیمت + 1 یا -1 نہیں ہوتی، جب بھی + لکھا جاتا ہے، اس کا مطلب ہے کہ ڈیٹا کی قسم میں ایک اضافہ کریں، یعنی اگر



06:35:22

اگر پوائنٹر عددی قسم کا ہے، تو یہ عدد کے سائز سے بڑھے گا۔ اگر پوائنٹر کریکٹر قسم کا ہے، تو یہ کریکٹر کے سائز سے بڑھے گا۔ اگر پوائنٹر فلوٹ قسم یا ڈبل ​​قسم کا ہے، تو یہ اس سائز سے بڑھ جائے گا۔ یہاں، ہمارا پوائنٹر ایک عدد کا پتہ محفوظ کر رہا ہے، تو اس کا مطلب ہے کہ اس میں چار بائٹس شامل ہو جائیں گے۔ مثال کے طور پر، اگر اس وقت پوائنٹر کی ویلیو 2000 تھی اور اب ہم پوائنٹر پلس پلس کرتے ہیں، تو اس کی ویلیو 2004 تک بڑھ جائے گی۔ اس لیے اب یہ پوائنٹر یہاں نہیں بلکہ یہاں پوائنٹ کرنا شروع کر دے گا، کیونکہ یہ میموری بالآخر چار بائٹس لے رہی ہے۔



06:35:55

اور اس میموری لوکیشن کا ایڈریس بھی 2004 ہے اور اس میموری لوکیشن کا ایڈریس 1996 ہے۔ تو یہاں سے ہم بدیہی طور پر سمجھ سکتے ہیں کہ اگر ہم پوائنٹر پلس پلس کریں گے تو یہ ایک انٹیجر آگے بڑھے گا، اس کا مطلب یہ ہے کہ یہ چار بائٹس آگے بڑھے گا اور اگر ہم ptr مائنس مائنس کریں گے تو یہ چار بائٹس پیچھے چلا جائے گا، اس کا مطلب ہے کہ اگر ہم اس کے اصل پوائنٹر 0 پر 4 بائٹس کریں گے تو پھر minus 0 پر آئے گا۔ مقام، یعنی 2000۔ اب آئیے ایک بار کوڈ کرکے اس کی تصدیق کریں۔ آئیے ہم اپنے پروگرام کے اندر ایک متغیر بنائیں، int عمر 22، اور پھر پوائنٹر پی ٹی آر بنائیں۔



06:36:32

پی ٹی آر کے اندر کنارے کا پتہ محفوظ کرکے، اب ہم نے یہ کر لیا ہے۔ سب سے پہلے، آئیے پی ٹی آر پلس پلس بنائیں۔ پلس پلس یہاں کیا گیا ہے اور اس سے پہلے، آئیے پی ٹی آر کی قیمت پرنٹ کریں۔ PTR فیصد unsigned int کے برابر ہے، ہم اسے کنٹرول C میں دکھائیں گے اور پھر PTR کی ویلیو چلائیں گے، تو سب سے پہلے PTR کی ویلیو جو پرنٹ ہوئی ہے 18 22802 ہے اور اس کے بعد آخری چیز جو پرنٹ ہوئی ہے وہ 156 تھی۔ اب اگر ہم غور سے دیکھیں تو 152 اور 156 کے درمیان کیا فرق ہے، تو ہم جلد ہی سمجھ سکتے ہیں کہ چار کے 152 اور 156 میں کیا فرق ہے۔



06:37:13

ہم نے پلس پلس کیا، ویسے ویلیو کیا ہے، یہ انٹیجر کے سائز سے بڑھی، یعنی چار بائٹس بڑھ گئی۔ اب یہاں اگر ہم دوبارہ مائنس مائنس کرتے ہیں، PTR مائنس مائنس کرتے ہیں، اور اس کے بعد، ہمیں دوبارہ PTR پرنٹ کی ویلیو ملتی ہے، تو سب سے پہلے، پوائنٹر کی ویلیو یہ تھی، جس میں 112 آخر میں آ رہا تھا، اس کے بعد، ہم نے PTR پلس پلس کیا، پھر یہ 116 ہو گیا، اس میں 4 کا اضافہ ہوا، اس کے بعد، ہم نے اسے 1، 1، 1، 1، 1 سے بڑھایا، اس کا مطلب ہے کہ یہ 12 منٹ تک واپس آ گیا۔ اصل میموری لوکیشن کیونکہ اگر ہم نے دوبارہ مائنس مائنس کیا، تو اس کا سائز ایک عدد سے کم ہونا چاہیے، اس کا مطلب ہے کہ اس میں چار بائٹس کی کمی ہو گئی، تو اس میں



06:37:45

اس طرح ہمارے ڈیکریمنٹ اور انکریمنٹ آپریٹرز کام کرتے ہیں۔ آئیے پوائنٹس کے اندر دوسرا کیس لیتے ہیں۔ دوسری صورت میں جو ہو رہا ہے وہ یہ ہے کہ ہم نے ایک تیرتا ہوا متغیر بنایا ہے، قیمت جس میں ہم نے 20.00 کو ذخیرہ کیا ہے۔ اب ہم نے پی ٹی آر کو پوائنٹ ٹو پرائس بنایا ہے اور پھر اسے پی ٹی آر پلس پلس بنا دیا ہے۔ تو اس بار جب ہم پوائنٹر پی وی کے برابر پوائنٹر کرتے ہیں تو اس فلوٹ کا سائز ہمارے فلوٹ کے بائٹس ہوگا۔ لہذا یہ فلوٹ کے سائز کے مطابق بڑھے گا اور کم ہوگا۔ آئیے یہاں بھی ایک بار اسے کوڈنگ کرنے کی کوشش کریں۔



06:38:16

ہم لکھیں گے فلوٹ کی قیمت 100 کے برابر ہے اب یہ پوائنٹر قیمت کی طرف اشارہ کر رہا ہے پہلے ہم پوائنٹر کی اصل قیمت پرنٹ کریں گے پھر پلس پلس ون اور پھر مائنس مائنس ون اس لیے اگر ہم کوڈ کو چلاتے ہیں تو اصل ویلیو 904 تھی جیسے ہی ہم نے پلس پلس کیا اس میں چار بائٹس کا اضافہ ہوا، فلوٹ کے چار بائٹس اس میں شامل ہو گئے، جیسے ہی ہم نے اس میں 4 بائٹس کا اضافہ کر دیا اس سے کم ہو گیا تو اس طرح فلوٹ کے سائز کے مطابق پوائنٹر بھی بدل جاتا ہے اور اگر ہم کیس تھری کو لیں تو یہ سب سے پہلے ہمارا کریکٹر کیس ہے۔



06:38:50

کریکٹر اسٹار بنایا، اس میں نجمہ کو اسٹور کیا، اس کے بعد ایک پوائنٹر بنایا جو اسٹار کی طرف اشارہ کر رہا ہے اور پھر PTR کیا، تو ایک کریکٹر میں کیا ہے، یہ ایک بائٹ ہے، ایک کریکٹر صرف ایک بائٹ کا ہے، اس لیے جب بھی انکریمنٹ ہو گا، وہ درحقیقت ایک سے ہو گا کیونکہ ایک بائٹ انکریمنٹ ہو رہا ہے جیسا کہ یہاں 2000 ہے، اگر ہم یہاں 2000، 220 اور 220 ہیں متغیر نام کا ستارہ جس میں ستارہ محفوظ ہے، یعنی ستارہ محفوظ ہے اور پوائنٹر اس کی طرف اشارہ کر رہا ہے، تو جیسے ہی ہم پلس پلس کریں گے، پوائنٹر اس کی طرف اشارہ کرنا شروع کر دے گا، اگر



06:39:23

اگر آپ مائنس مائنس کریں گے تو پوائنٹر پوائنٹ کرنا شروع کر دے گا، آئیے اس کو کوڈ کرتے ہیں اور اس کی تصدیق کرتے ہیں، یہاں ہم ast رسک کے برابر ایک کیئر سٹار بناتے ہیں، اس میں ہم سٹار کا ایڈریس محفوظ کریں گے اور اس کے بعد دوبارہ پوائنٹس کی ویلیوز کریں گے، تو پہلے پوائنٹر کی ویلیو ختم ہو رہی تھی، اگر ہم نے 0 سے 8 تک پلس کیا تو یہ 0 سے 8 کریکٹر پر آیا کیونکہ اگر ہم نے 0 سے 8 کریکٹر بڑھایا تو minus اور 0 سے 8 کریکٹر ہو گیا۔ پھر یہ 0 سے 8 ہو گیا، اس طرح اگر آپ کو سوالات آتے ہیں کہ پوائنٹس کو بڑھانا ہے یا کم کرنا ہے، تو ان سوالات میں



06:39:54

الجھن میں پڑنے کی ضرورت نہیں، صرف سائز شامل کریں۔ اگر +1 کو انٹیجر میں لکھا جاتا ہے تو اس کا مطلب +1 نہیں ہوتا، اس کا مطلب ہوتا ہے +4۔ اگر یہ فلوٹ میں لکھا جاتا ہے تو اس کا مطلب بھی ہوتا ہے +4۔ اگر اسے کریکٹر میں لکھا جاتا ہے تو اس کا مطلب ہوتا ہے +1۔ اب پوائنٹر ریاضی کے اندر دو اور چیزیں آتی ہیں، جن میں سے پہلی یہ ہے کہ ہم ایک پوائنٹر کو دوسرے سے گھٹا سکتے ہیں، یعنی ہم ایک پوائنٹر کی قدر کو مائنس کر سکتے ہیں، اگر ایک پوائنٹر پوائنٹر کی طرح لکھا جائے تو دوسرے پوائنٹر کی قدر۔ ایک عددی کنارے کی طرف اور int ptr2 ایک عددی کنارے دو کی طرف اشارہ کر رہا ہے، پھر اگر ہم pt2 - pt1 کرتے ہیں



06:40:31

اگر ہم ایسا کرتے ہیں، تو یہ آپریشن لیڈ ہے اور اس کے ساتھ ہم دو پوائنٹس کا موازنہ بھی کر سکتے ہیں، یعنی ایک پوائنٹر کی قدر کا موازنہ دوسرے پوائنٹر کی قدر سے کیا جا سکتا ہے اور جواب یا تو صحیح یا غلط ہو گا۔ آئیے اس کی ایک مثال بھی دیکھتے ہیں، int a e 22 int a e 23 تو یہ انڈر سکور ایج ہے جو ایک الگ متغیر ہے اور اس کے مطابق پوائنٹس بنائے جاتے ہیں، int star ptr، سب سے پہلے ہم فرق، فیصد یا b n ptr - ptr پرنٹ کریں گے اور اس کے بعد ہم موازنہ پرنٹ کریں گے۔ ہم موازنہ کے لیے کیا کرتے ہیں، ہمارا انڈر سکور



06:41:08

پی ٹی آر ہے، ہم اس میں کنارے کا پتہ محفوظ کرتے ہیں۔ اب ہم یہاں اس کا موازنہ کریں گے کہ آیا دونوں ایک جیسے ہیں۔ ہم اس کا موازنہ کیسے کریں گے؟ اب پوائنٹر جو کہ نارمل پی ٹی آر ہے، کنارے کا ایڈریس اسٹور کر رہا ہے اور کنارے کا ایڈریس انڈر سکور پی ٹی آر میں بھی محفوظ ہے، لہٰذا منطقی طور پر ایک ہی ایڈریس کی قدر دونوں میں ہے۔ تو جب ہم 'I equal to I equal to' کرتے ہیں، تو دونوں کا موازنہ درست ہو جائے گا، یعنی یہ ایک لوٹائے گا۔ تو آئیے آؤٹ پٹ بھی دیکھتے ہیں۔ آئیے اسے ایک بار بچا کر چلائیں۔ فرق بھی ایک ہے اور موازنہ بھی ایک ہے۔



06:41:38

اب اس کے مقابلے میں ایک کا مطلب صحیح ہے اور فرق میں ایک کا مطلب ہے ایک عدد انٹیجر سے جیسے آئیے ان کی ویلیو پرنٹ کریں اور ساتھ ہی فیصد u فیصد u اور یہاں ہم PTR پرنٹ کریں گے اور PTR کے نیچے تو سب سے پہلے PTR کی ویلیو 18700 ہے جو 264 کے ساتھ ختم ہو رہی ہے PTR کے نیچے کی ویلیو 260 پر ختم ہو رہی ہے تو جب ہم نے PTR کیا تو PTR سے PTR کا فرق 260 سے کم ہو گیا تو PTR 260 سے کم ہو گیا۔ چار ہونا چاہیے لیکن ایک پرنٹ ہو گیا کیونکہ یہ چار نہیں دکھائے گا، اس کا مطلب ہے کہ یہ بائٹس میں نہیں دکھائے گا، فرق ظاہر کرے گا کہ دونوں میں کتنے عدد ہیں۔



06:42:17

تو ایک عدد کا فرق ہے جو کہ چار بائٹس کے برابر ہے اور موازنہ درست ثابت ہوگا کیونکہ دونوں ایک ہی پتے کی طرف اشارہ کر رہے ہیں، اس لیے ظاہر ہے کہ دونوں کی قدر یکساں ہے۔ اب ایک چھوٹی سی بات کرتے ہیں، آئیے یہاں کنارے کو کریکٹر بناتے ہیں اور اسے کریکٹر پوائنٹر بناتے ہیں۔ اب یہ کریکٹر پوائنٹر ہے، موازنہ ظاہر ہے دونوں کے لیے درست نہیں ہوگا، لیکن اگر ہم ایک بار فرق کا تجزیہ کریں تو ہم یہاں دیکھیں گے کہ خرابی ابتدا میں ہی سامنے آئی کیونکہ ہم ایک عدد پوائنٹر کو ایک میں تبدیل کر رہے ہیں۔



06:42:48

ہم کریکٹر پوائنٹر کے درمیان فرق نہیں لے سکتے کیونکہ یہ دونوں مطابقت پذیر اقسام نہیں ہیں۔ اس لیے جب بھی ہمیں فرق لینا ہو، یعنی ایک پوائنٹر مائنس دوسرا پوائنٹر، تو وہ ایک ہی قسم کے پوائنٹس کے ہونے چاہئیں، مختلف قسم کے نہیں۔ اس بات کو ذہن میں رکھنا ہوگا کہ جب بھی ہم پوائنٹس کے فرق کو لیتے ہیں تو فرق نمبر بن کر نہیں نکلتا، یعنی دونوں کے درمیان نمبر کا فرق، فرق ڈیٹا کی قسم کا نکلتا ہے، یعنی ڈیٹا کی کتنی اقسام کا فرق ہوتا ہے۔ ہم اگلے موضوع پر بات کریں گے۔ اگلا ٹاپک کہتا ہے کہ ہم نے Array میں پوائنٹر کے بارے میں پڑھا، ہم نے یہ کیوں پڑھا کیونکہ array ہے۔



06:43:17

ایک پوائنٹر جسے ہم array کے طور پر پڑھ رہے تھے دراصل ایک پوائنٹر ہے، اگر ہم ایک پوائنٹر، int star pointer، بنا کر اسے صف کے پہلے مقام کی طرف اشارہ کرتے ہیں، یعنی صفر کی صف کا پتہ، اگر ہم اسے اس پوائنٹر کے اندر محفوظ کرتے ہیں، تو ہم اسے اس طرح کر رہے ہوں گے، ہم یہ نحو پہلے ہی سیکھ چکے ہیں، لیکن اگر ہم اس کو تبدیل کرنا چاہتے ہیں تو پہلے اس جگہ کے دائیں حصے کو بھی اس جگہ سے تبدیل کر سکتے ہیں۔ ہماری صف کا انڈیکس، سرنی کا نام، دراصل ایک پوائنٹر پوائنٹ ہے۔



06:43:51

صف بندی کی ضرورت کہاں ہے؟ مثال کے طور پر، اگر میرے پاس ایک صف ہے، فرض کریں کہ وہاں ایک صف نامی نشانات ہیں، جو بہت سے طلباء کے نمبرز کو ذخیرہ کرتا ہے، 0، 1، 2، 3، 4، 5، 6۔ لہذا، اگر آپ اس نمبر کی قسم دیکھیں تو یہ دراصل ایک پوائنٹر ہے اور یہ صف کے شاہی مقام کی طرف اشارہ کرتا ہے۔ لہٰذا، چاہے ہم یہ سطر لکھیں، یعنی شاہی مقام کا پتہ، یا براہ راست صف کا نام لکھیں، دونوں برابر ہیں، دونوں کی ترکیب مختلف ہے اور دونوں کا مفہوم ایک ہے۔ تو، اس طرح سے، صف کا نام ایک پوائنٹر ہے۔



06:44:26

اور ایک بہت اہم چیز ہے جسے ہمیں یاد رکھنا ہے کیونکہ یہ سوالات میں پوچھا جاتا ہے۔ اب اگر ہمیں کسی array پر سفر کرنا ہے، یعنی ایک جگہ سے دوسری جگہ جانا ہے، اگر array میں 100 عناصر ہیں تو ان کی ویلیوز کو ایک کے بعد ایک پرنٹ کرنا ہے، پھر یہ سب سے پہلے کیسے کرنا ہے، اب ہم نے ایک نئی چیز سیکھی ہے کہ array ایک پوائنٹر ہے، اور ہم نے یہ بھی سیکھا ہے کہ ہم پوائنٹر کی ویلیو کو پلس یا مائنس کر سکتے ہیں، تو صرف loop چلانے کے بعد ہماری ویلیو کیا ہوگی اگر ہم اپنے ساتھ شروع کرتے ہیں



06:44:56

اگر پوائنٹر صفر پر ہے، تو پلس پلس کرنے سے ہم اسے آخر تک لے جائیں گے اور اسی طرح مائنس مائنس کرکے ہم اسے واپس لا سکتے ہیں اور یہاں ہم اپنے پوائنٹر کو قطار سے n تک پرنٹ کریں گے، آپ اسے کیسے کریں گے، فرض کریں کہ آپ نے 10 لوگوں کے آدھار کارڈز کو محفوظ کر رکھا ہے اور سب سے پہلے اگر ہمیں چیزوں تک رسائی حاصل کرنی ہو یا مثال کے طور پر اس کو پرنٹ آؤٹ کے ساتھ سمجھنا ہو، مثال کے طور پر دونوں کو پرنٹ آؤٹ کرنے کے لیے۔ فرض کریں کہ آپ نے آدھار نام کی ایک صف بنائی ہے جو 10 لوگوں کے آدھار کارڈز کو محفوظ کرتی ہے، اب اس کے لیے آپ کو ایک لوپ لگانا ہوگا جو 10 لوگوں کے آدھار کارڈ پرنٹ کرے گا۔



06:45:29

لوگوں کا آدھار داخل کریں اور پھر آؤٹ پٹ کے طور پر 10 لوگوں کا آدھار دیں۔ تو اس کے لیے ایک پوائنٹر بنائیں۔ پہلے انڈیکس کی طرف اشارہ کرنے والا پوائنٹر کہاں ہے۔ تو ہمارا پوائنٹر یہاں اس مقام کی طرف اشارہ کر رہا ہے اور ہم نے اپنی اقدار کو تمام انڈیکس میں محفوظ کر لیا ہے۔ لہذا 10 اقدار کے لیے ہم نے اپنی پوری صف بنائی ہے اور اسے آدھار کا نام دیا ہے۔ اب ہم نے ایک پوائنٹر بنایا ہے جو پہلی جگہ کی طرف اشارہ کر رہا ہے۔ اب یہ پوائنٹر کیا کرے گا، سب سے پہلے یہ پہلے مقام پر جو بھی ویلیو ہے اسے پرنٹ کرے گا اور پھر ہم کریں گے۔



06:46:03

پوٹ پوائنٹر پلس پلس پھر دوسری جگہ پر آئے گا، یہ یہاں ویلیو پرنٹ کرے گا، پھر ہم اسے دوبارہ کریں گے، پوائنٹر پلس پلس تیسرے مقام پر آئے گا، یہ یہاں ویلیو پرنٹ کرے گا، پھر دوبارہ پلس پلس یہاں آئے گا، یہ ویلیو پرنٹ کرے گا، اس طرح ہم ایک لوپ چلا سکتے ہیں، اس لوپ کے اندر، اگر ہم بار بار پلس پلس کریں گے تو میموری میں پوائنٹر ڈالیں گے یا مزید پوائنٹر لے رہے ہیں، اس کے بعد پوائنٹر پلس پلس اور پلس پلس آئے گا۔ آؤٹ پٹ، اگر ہم اسے آزمائیں گے تو ہم کوڈ سے بہتر سمجھیں گے، سب سے پہلے ہمیں اپنی ایک صف تیار کرنی چاہیے



06:46:34

جی ہاں، آئیے یہاں بیس کے نام سے int کے سائز کو برقرار رکھیں، کیونکہ 10 نمبر داخل کرنے سے تھوڑی تکلیف ہوگی۔ اب، سب سے پہلے، ہم اس صف کی ویلیو ان پٹ کریں گے۔ ان پٹ کرنے کے لیے ہمیں پوائنٹر کی مدد سے ان پٹ کرنا پڑتا ہے، تو آئیے ایک پوائنٹر بناتے ہیں جو پہلے میموری والے مقام کی طرف اشارہ کر رہا ہو۔ تو آئیے اس میں پہلے میموری لوکیشن کا ایڈریس ڈالتے ہیں۔ اس کے بعد، آئیے ایک لوپ لگاتے ہیں۔ int aa i 0 سے 10 تک جائے گا۔ aa p پلس، ہم ہر بار پرنٹ کرتے ہیں کہ ہم کس انڈیکس کے لیے ویلیو چاہتے ہیں۔ فیصد ڈی انڈیکس یعنی ہم انڈیکس کی قدر چاہتے ہیں۔



06:47:16

اور ہم اس قدر کو اسکین کرتے ہیں۔ یہاں ہم پوائنٹر پلس aa کا پتہ دیں گے۔ تو ہم نے یہاں ایک فار لوپ لگایا ہے اور یہ لوپ کے لیے انڈیکس 08 سے ہمارے نویں انڈیکس میں جا رہا ہے، اس لیے ویلیو صفر سے 10 سے کم ہوگی۔ اب یہاں، ہم پہلے پرنٹ کریں گے کہ ہمیں کس انڈیکس پر ویلیو کی ضرورت ہے۔ تو میں ایک طرح سے ہمارا انڈیکس ہے۔ اور جس کو بھی ہم اسکین کرنا چاہتے ہیں، ہم اس میں لکھیں گے پوائنٹر پی اے، یعنی پوائنٹر، ہم نے پوائنٹر رو ایتھ لکھا ہے۔



06:47:47

یہ انڈیکس کی طرف اشارہ کر رہا ہے، لیکن جیسے ہی اس میں 'p' ہو گا، یعنی اگر ہم اس میں + 'v' کریں گے تو یہ پہلی پوزیشن پر آئے گا، اگر ہم + 't' کریں گے تو دوسری پوزیشن پر، اگر ہم + '3' کریں گے تو تیسری پوزیشن پر، اس طرح یہ ہر ڈیٹا ٹائپ کے ساتھ بڑھتا رہے گا، اس طرح یہاں سکیننگ ہوتی رہے گی، پھر آؤٹ پٹ کے لیے i+le+ i+ کی قیمت میں زیادہ لاگو کریں انڈیکس فیصد ہے d۔ اب یہاں، پہلے ہم انڈیکس پرنٹ کریں گے، اس کے بعد ویلیو پرنٹ کریں گے۔ ویلیو پرنٹ کرنے کے لیے ہم PTR + 'a' بھی کر سکتے ہیں، تو آئیے اسے ایک بار آزماتے ہیں۔



06:48:18

اس کے بعد، اگر ہم نحو میں تھوڑی سی تبدیلی دیکھتے ہیں، تو ہم انڈیکس میں 12 13 14 15 اور 16 ڈال رہے ہیں۔ یہاں، اگر ہمارے بیس کا سائز پانچ ہے، تو ہمیں یہاں 10 کے بجائے 5 ڈالنے کی ضرورت ہے کیونکہ اس بار ہم سائز پانچ کی اپنی صفیں بنا رہے ہیں نہ کہ 10۔ آئیے اسے ایک بار پھر 12 13 14 15 اور 16 چلاتے ہیں۔ اس طرح، 12 انڈیکس پر آیا ہے، 13 پہلے انڈیکس پر آیا ہے، 13 دوسرے نمبر پر، 14 تیسرے نمبر پر، 15 تیسرے نمبر پر اور 15 چوتھے نمبر پر ہے۔ لہذا، یہ تمام قدریں ہماری صف کے اندر محفوظ کی گئی ہیں۔ اب، یہاں ہم نے اسٹار ptr + 1 کیا۔



06:48:53

تو یہ پوائنٹر کے ساتھ کرنے کا طریقہ ہے، یہاں ہم یہ بھی کر سکتے ہیں، اپنے انڈیکس کا آدھار، تو یہ آدھار کے حساب سے انڈیکس پر جو بھی قدر ہے اسے براہ راست نکال لے گا، تو آئیے اسے بھی محفوظ کریں اور ان پٹ لینے کے دوران بھی ہم ایسا ہی کر سکتے تھے، یعنی کا آدھار، یہ بدلتا رہے گا اور ہم ایڈریس کو بھی بھیجتے رہیں گے، اس کے مطابق مکمل طور پر درست کرنے کے لیے ایڈریس بھی درست ہو جائے گا۔ 12 13 14 15 16 لہذا، اس کے ذریعے بھی ہم ایک ہی ان پٹ اور آؤٹ پٹ حاصل کرنے کے قابل ہیں، چاہے ہم پوائنٹس استعمال کریں یا ہم ان چیزوں کو عام طور پر استعمال کریں۔



06:49:31

ایسا کرنے کا مطلب ہے کہ اسکوائر بریکٹ کا آؤٹ پٹ اور ان پٹ دونوں میں یکساں رہے گا، ہم جو بھی ہمارے لیے زیادہ آسان ہو اسے استعمال کر سکتے ہیں، لیکن ایک بات ہمیں ہمیشہ یاد رکھنی چاہیے کہ کسی صف کا پہلا انڈیکس اپنے آپ میں ایک پوائنٹر ہوتا ہے، ہمیں اس چیز کو کبھی نہیں بھولنا چاہیے۔ اگلی چیز جس کے بارے میں ہم بات کریں گے وہ فنکشن آرگومنٹ کے طور پر array ہے۔ اب جس طرح ہم کسی فنکشن میں نارمل انٹیجر، فلوٹ، کریکٹر کو آرگیومینٹ کے طور پر پاس کر سکتے ہیں، اسی طرح ہم فنکشن کالز کے اندر اری بھی بھیج سکتے ہیں، جس کا مطلب ہے کہ ہم ارے کو پرنٹ کرنے کے لیے فنکشن بنا سکتے ہیں۔



06:50:01

اگر آپ اس کے اندر کوئی بھی array ڈالیں گے تو وہ اس کی ویلیو پرنٹ کرے گا، اس لیے اس کے argument میں، اس کے پیرامیٹر میں آپ کو ایک array کی وضاحت کرنی ہوگی، اس کا فارمیٹ کیا ہے، پہلے فنکشن ڈیکلریشن آتا ہے، آپ ایسے فنکشن کو کیسے ڈیکلیئر کریں گے، یا تو اس کے اندر، argument کے اندر آپ نے فنکشن کو عام طور پر لکھا ہے، لیکن پیرامیٹر کے اندر آپ int array لکھیں گے، اس کے بعد آپ کو اس کے مربع سائز کی ضرورت نہیں ہوگی، اس کا مطلب یہ ہے کہ اس کے اندر کوئی بھی اسکوائر نہیں ہوگا۔ سائز کی صف، تو سائز کے لیے ہمیں ایک الگ عدد n پاس کرنا پڑے گا۔



06:50:32

یہ آپ کو صف کا سائز بتائے گا یا آپ اسے پوائنٹر کے طور پر بھی پاس کر سکتے ہیں۔ یہ مربع بریکٹ والا طریقہ ہے اور یہ پوائنٹس کے ساتھ ہمارا طریقہ ہے اور دونوں درست ہیں۔ یہاں خطرے کی صف کے طور پر int ہے، لہذا اسے پوائنٹر کے طور پر بھی پاس کیا جاسکتا ہے اور فنکشن کال کے اندر، آپ کو صرف صف کا نام لکھنا ہوگا۔ تو ہم پہلے ہی جان چکے ہیں کہ یہ صفر کی صف پر m کے برابر ہے، اس لیے یہ ویلیو اس پوائنٹر میں محفوظ ہو جائے گی۔ تو صف خود ایک پوائنٹر ہے اور پوائنٹر کے اندر ذخیرہ کیا جائے گا. تو آئیے ایک بار آزماتے ہیں۔ سب سے پہلے، آئیے ایک فنکشن بناتے ہیں۔



06:51:05

ہم فنکشن void پرنٹ نمبروں کا اعلان کریں گے۔ پرنٹ نمبرز کے اندر، ایک صف اور اس کا سائز آتا ہے۔ اس لیے ہم نے مربع بریکٹ کی مدد سے اس ارے کی تعریف کی ہے اور سائز کو ایک عام عدد بنا دیا ہے۔ اب ہم اس کی بھی تعریف کرتے ہیں - void پرنٹ نمبر، جس کے اندر ہمارے پاس int array اور int n ہے۔ اب، ارے کے سائز کے مطابق، ہم ایک لوپ چلائیں گے جو صفر سے n تک چلے گا۔ تو یہاں، شرط ن سے کم ہے۔ ہر بار جب ہم i + p کر رہے ہیں اور سرنی کے عناصر کو پرنٹ کریں گے۔ لہذا f فیصد d باس t پرنٹ کریں اور یہاں ہم i like bass a کا rr لکھیں گے۔



06:51:46

بیل ٹی اگلی لائن کے لیے ہے، یہ ہمیں ایک ٹیب کی اسپیس دیتی ہے، اس لیے جو بھی نمبر پرنٹ ہوں گے، وہ کچھ جگہ کے بعد پرنٹ کیے جائیں گے، اس طرح یہ اچھے لگیں گے، اور آخر میں اگلی لائن کو b n کے ساتھ پرنٹ کرتے ہیں، اب مین فنکشن کے اندر ایک اری بناتے ہیں، جس کے اندر کچھ نمبرز ہیں 1 2 3 4 5 پرنٹ کریں، اور array کے اندر نمبر 6 لکھے ہیں، اور نمبر پرنٹ کریں گے۔ پہلی دلیل دی اور نمبر لکھا کہ اس کے اندر چھ عناصر ہیں، آئیے اسے بچا کر چلائیں، تو ہمارے نمبر



06:52:17

وہ ہمارے پاس ایک کے بعد ایک لکھ کر پرنٹ کیے گئے ہیں اور اگر ہم چاہتے تو مربع بریکٹ کو ہٹا کر اسے پوائنٹر بنا سکتے تھے start ptr اور یہاں int star ptr یا infact ptr کے بجائے اگر ہم اسے ar کے طور پر رکھتے ہیں تو ہم دوبارہ کوڈ چلاتے ہیں اور اس بار ہمیں وہی آؤٹ پٹ ملتا ہے، اس کا مطلب ہے کہ آپ ارے کو پوائنٹر کے طور پر رکھ سکتے ہیں اگر آپ اپنے پیرامیٹر کو اسکوائر کے ساتھ نہیں رکھنا چاہتے ہیں بریکٹ، دونوں اشارے میں ہمیں ایک ہی آؤٹ پٹ ملے گا، اگلا موضوع جو



06:52:48

جس پر ہم بحث کریں گے وہ کثیر جہتی صف ہے۔ ملٹی ڈائیمینشن اری سے مراد وہ ارے ہیں جن کا ہم نے ابھی تک مطالعہ کیا ہے وہ بڑی آری ہیں، وہ ایک ڈائمینشن میں کام کرتی ہیں، ڈائمینشن کیا ہے، لکیری، اس طرح ہمارے پاس اپنی اری تھی، لیکن فرض کریں کہ ہم دو اریوں کو رکھنا چاہتے ہیں، تو ہم ان کو ایک کے بعد ایک رکھ سکتے ہیں، اس کے بعد اگر ہم تین اریوں کو رکھنا چاہتے ہیں، تو ہم انہیں یہاں رکھ سکتے ہیں، اس طرح ہمیں تین ڈائمینشن کے ساتھ کھیلنے کی ضرورت ہے۔ میں چاہتا ہوں کہ ہر صف کا سائز 10 ہو، تو مجھے ایک 2D اری بنانے دیں، اس طرح ہم 2D ارے کی وضاحت کرتے ہیں۔



06:53:20

پہلے ہم اس کی قسم کو int لکھیں گے، اس کے بعد ہم اس کا نام array لکھیں گے، پھر ہم دو مربع بریکٹ لکھیں گے، ملٹی ڈائمینشن اری کے اندر مربع بریکٹ کی تعداد بتائے گی کہ اس کی کتنی ڈائمینشنز ہیں۔ اب تک ہم int aa of 3 لکھ رہے تھے، تو اس کا مطلب یہ تھا کہ اس کی ایک ڈائمینشن ہے، دو مربع بریکٹ، یعنی اس کی دو ڈائمینشن ہیں، اور ہم اسے دائیں طرف کیسے ڈیفائن کریں گے، بیرونی مربع بریکٹ بتائے گا کہ اندر کل ڈیٹا کتنا ذخیرہ ہے، ایک مربع بریکٹ کا مطلب ہے ایک صف، دوسری مربع بریکٹ کا مطلب ہے دوسری صف میں پہلی صف، دوسری مربع بریکٹ کا مطلب ہے۔



06:53:55

دوسری صف میں ایک اور دو ہے، تین اور چار۔ تو یہ صف دراصل میموری میں بنائی جائے گی۔ اب اس کا تصور کیسے کریں، دو طریقے ہیں۔ پہلا طریقہ یہ ہے کہ اسے اس طرح تصور کیا جائے کہ ہمارا ایک یہاں، دو یہاں، تین یہاں محفوظ ہے۔ پھر یہ ہماری صف ہے۔ اس کے اندر، اس مقام کو 0 0 کہا جائے گا، اسے 01 کہا جائے گا، اسے 10 کہا جائے گا اور اسے ایک کہا جائے گا۔ تو ہم اسے میٹرکس کی طرح تصور کر سکتے ہیں۔ گیارہویں اور بارہویں میں میٹرکس ہو گا جس کے اندر ہمارے کچھ حصے ہوں گے تو یہاں قطار ہو گی۔



06:54:27

یہاں ایک، یہاں دو، یہاں قطار، یہاں ایک، یہاں دو، تو یہ اسی طرح ہے کہ اگر یہاں ایک لکھا جائے، یہاں دو لکھا جائے، اگر یہاں تین لکھا جائے یا چار لکھا جائے تو یہ 0 بن جائے گا، یہ 0 ہو جائے گا اور یہ 10 ہو جائے گا، یہ 10 ہو جائے گا اور اگر کچھ ایسا نظام ہے تو یہاں بھی، یعنی میموری کے اندر بھی کچھ ایسا ہی ہے جسے ہم vroze کہیں گے، ہم اسے vroze کہیں گے۔ اسے 10، ہم اسے v v کہیں گے، لیکن یہ دراصل میموری کے اندر کیسے محفوظ ہے، اس فارمیٹ میں محفوظ ہے، یعنی پہلے ایک آئے گا، پھر دو آئیں گے، پھر تین آئیں گے، پھر چار آئیں گے، تو یہ



06:55:00

صفر صفر ہو جائے گا، یہ قطار ایک، یہ ایک اور یہ 1 1۔ اب اگر ہم ان تک رسائی حاصل کرنا چاہتے ہیں، تو ہم عناصر تک کیسے رسائی حاصل کریں گے؟ اگر آپ 0 0 کی صف نکالنا چاہتے ہیں، تو یہ یہ قدر ہوگی۔ اگر آپ 0 کی ایک صف نکالنا چاہتے ہیں، تو یہ قدر ہوگی۔ اگر آپ 0 کی دو صفیں نکالنا چاہتے ہیں، تو یہ قدر ہوگی۔ اگر آپ 1 1 کی تین صفیں نکالنا چاہتے ہیں، تو یہ قدر ہوگی۔ لہذا جب بھی ہم 2D صف کو تصور کرنا چاہتے ہیں، ہم اسے میٹرکس کی شکل میں تصور کرتے ہیں۔ یہاں، یہ ہماری پہلی صف بن جائے گی۔ یہ ہماری دوسری صف بن جائے گی۔ اگر کوئی تیسری صف ہوتی تو اس کے نیچے آتی، یہ بن جاتی۔



06:55:35

ہماری تیسری صف اور ہر اری کا سائز ایک ہی رہتا ہے، اس ارے کا سائز بھی دو ہے، اس ارے کا سائز بھی دو ہے، لیکن ہم جتنی چاہیں ارییں بنا سکتے ہیں، چاہے ہم n array بنائیں، چاہے ہم انہیں n-1، n-2 بنائیں، ہم جتنی چاہیں ارییں بنا سکتے ہیں، لیکن ان سب کا سائز ایک جیسا رہے گا۔ اور میٹرکس کی مدد سے اسے کیسے تصور کیا جائے، آئیے اس کا ایک سوال آزماتے ہیں۔ اب یہاں ہم 2D arrays کے بارے میں بات کر رہے ہیں، اسی طرح ہمارے پاس 3D arrays، 4D arrays، 5D arrays بھی ہیں، لیکن یہ پروگرامنگ میں زیادہ تر استعمال نہیں ہوتے۔



06:56:07

جو سوالات آپ کے سامنے آئیں گے وہ 2D صف کے ہوں گے۔ اب ہم ایک 2D صف بناتے ہیں۔ ہم ایک صف اس طرح بنائیں گے کہ ہم دو بچوں کے تین مضامین کے نمبر محفوظ کر رہے ہیں۔ تو ایک بات جو ہمیں ذہن میں رکھنی ہے وہ یہ ہے کہ ہمیں دو بچوں کے تین مضامین کے نمبر جمع کرنے ہیں۔ تو آئیے ہم ایک 2D ارے بنائیں جس کے نام سے نشانات ہوں گے جس کا سائز دو اور تین ہوگا، یعنی میموری میں دو arrays بنائے جا رہے ہیں جس طریقے سے یہ ہو گا۔ پہلے تین مقامات آئیں گے، اس کے بعد مزید تین مقامات آئیں گے۔ اس میں پہلے طالب علم کے تین مضامین کے نمبر محفوظ کیے جائیں گے۔ اس میں دوسرے طالب علم کے تین مضامین کے نمبر محفوظ کیے جائیں گے۔



06:56:50

پہلے آنے والے طالب علم کے نمبر اس طرح محفوظ ہو جائیں گے اس طرح میموری میں ہماری صف بن جائے گی۔ اب ہم پہلے طالب علم کے نمبر لکھ سکتے ہیں، یعنی روٹ انڈیکس۔ یہاں بھی روٹ انڈیکس پہلے طالب علم کے پہلے مضمون کے نمبر ہیں، ہم اسے یہاں لکھ سکتے ہیں، 90۔ ہم اسے عدد کے طور پر نہیں لکھیں گے۔ اب ایک بار پھر پہلے طالب علم کے دوسرے مضمون کے نمبر 89 ہوں گے، اس کے لیے ایک بار پھر پہلے طالب علم کے تیسرے مضمون کے نمبر 78 ہوں گے۔ اسی طرح ہم دوسرے طالب علم کے نمبر بھی لکھ سکتے ہیں، اسی طرح دوسرے طالب علم کے دوسرے مضمون کے لیے، دوسرے طالب علم کے پہلے مضمون کے نمبر اور دوسرے طالب علم کے نمبر۔



06:57:33

ہم یہاں طالب علم کے تیسرے مضمون کے نمبروں کی قدر کو تبدیل کر سکتے ہیں۔ تو ہم ان ویلیو کو اسی طرح ان پٹ کریں گے اور اسی طرح آؤٹ پٹ کریں گے جیسا کہ ہم کرتے رہے ہیں، مثال کے طور پر، اگر ہم پہلے طالب علم کے پہلے مضمون کے نمبر پرنٹ کرنا چاہتے ہیں، تو ہم صرف 0 صفر کے پرنٹ f فیصدی ڈی مارکس لکھیں گے۔ تو یہ بتا رہا ہے کہ پہلا طالب علم، یعنی ہمارا پہلا طالب علم، اپنے زیروتھ مضمون، یعنی پہلے مضمون کے نمبر دیکھتا ہے۔ تو 90 کی یہ قیمت ہمیں چھاپ دی گئی ہے۔ لہذا، اس طرح، ہم 2d سرنی کے ساتھ بھی کھیل سکتے ہیں، یہ استعمال کے معاملے پر منحصر ہے۔



06:58:08

آئیے دیکھتے ہیں کہ کیا آپ کے پاس ایسی کوئی صورت ہے جس میں آپ کو 2D array بنانے کی ضرورت ہے زیادہ تر جب ہم C میں بنیادی پروگرامنگ سیکھ رہے ہوں گے، تو ہم صرف بڑی arrays کے ساتھ کھیلیں گے، 2D arrays کے کچھ سوالات آئیں گے، ہم 3D array میں زیادہ نہیں جائیں گے، یہ بھی ممکن ہے، ہم نے بہت سے پیچیدہ میں بہت کچھ سیکھا ہے، تو آئیے اس کی مشق کرتے ہیں کہ ہم پہلے سوال نمبر کے بارے میں لکھیں گے کہ ہم اس کے چند سوالوں کو گنتے ہیں ایک صف میں نمبر ہم ایک فنکشن بنائیں گے جو وہ فنکشن پیرامیٹرز کی ایک صف کو لے گا۔



06:58:39

ہم اسے ایک دلیل کے طور پر لیں گے، یہ array فنکشن کے اندر آئے گا اور ہم شمار کریں گے کہ اس ارے کے اندر کتنے طاق نمبر ہیں، جیسے کہ مثال کے طور پر، مثال کے طور پر ہمارے پاس ایک ارے ہے جس میں کچھ نمبرز سٹور کیے گئے ہیں 1 2 3 4 5 اور اب اس کے اندر طاق نمبرز اور 5 ہیں، تو گنتی جو فنکشن واپس آئے گی۔ اس کے لیے آئیے ایک فنکشن لکھتے ہیں int گنتی عجیب۔ اس فنکشن میں، ہم نمبرز اور اس کے سائز کی ایک صف کو پاس کریں گے، اس لیے سائز کو ہمیشہ پاس کرنا ہوگا۔ جب بھی ہم کسی سرنی کو پاس کر رہے ہوتے ہیں، آئیے اسے فنکشن کاؤنٹ odd int array int size کے طور پر بیان کریں اور سب سے پہلے ایک



06:59:25

آئیے ایک متغیر بنائیں جس میں ہم شمار کو محفوظ کریں گے۔ شروع میں ہماری گنتی صفر ہے۔ اس کے بعد، ہم ایک لوپ چلائیں گے. یہ لوپ i = 0 سے i = n تک جائے گا، یعنی یہ پوری صف کو عبور کرے گا۔ ٹراورس کا مطلب ہے کہ یہ سفر کرے گا اور چیک کرے گا۔ لوپ کے ذریعے، ہم ایک ایک کر کے ارے کے عناصر کے اندر جائیں گے اور ہر عنصر کو چیک کریں گے۔ اگر i کی صف کو i کی صف سے اس عنصر کی قدر ملی ہے، تو ہم اسے چیک کریں گے۔ ماڈیول 2 اس کے برابر نہیں ہے جو یہاں سے آیا ہے۔ سب سے پہلے، ہم نے i کی صف سے عنصر نکالا، اسے چیک کیا، کیا یہ مکمل طور پر وہاں سے ہے؟



07:00:03

اسے ضرب کیا جا رہا ہے، اگر اسے ضرب نہیں دیا جا رہا ہے، اس کا مطلب ہے یاد دہانی، اگر صفر نہیں آیا تو اس کا مطلب یہ ہے کہ یہ ایک طاق عدد ہے، اس لیے جیسے ہی ہمیں طاق نمبر ملے گا، ہم شمار کریں گے جمع جمع شروع میں شمار صفر تھا، جس کا مطلب ہے کہ ہمارے پاس شروع میں ایک بھی طاق عدد نہیں تھا، ہم اس odd کو چیک کریں گے، یہ عدد ہے جیسے ہی یہ طاق ہو جائے، گنتی کو ایک سے بڑھائیں، یعنی کاؤنٹ پلس پلس ہم آخر میں کیا کریں گے، ہم اپنی گنتی واپس کریں گے، آئیے مین فنکشن کے اندر ایک اری بنائیں، int array i برابر 1 2 3 4 5 اور 6 اور اسے پرنٹ کریں۔



07:00:40

آئیے شمار کو شمار ڈاٹ کے طور پر لیتے ہیں۔ ہم اپنی صف اور اس کا سائز پاس کریں گے جو s ہے، آئیے محفوظ کریں اور چلائیں۔ تو ہمارے پاس تین واپس آئے ہیں، جس کا مطلب ہے کہ ہماری صف میں تین طاق نمبر موجود ہیں۔ اسی طرح، آپ ایک فنکشن بنا سکتے ہیں جس سے ہم نمبروں کا حساب لگائیں۔ اسی طرح آپ تین کے ضرب یا پانچ کے ضرب کا حساب لگا سکتے ہیں، اس طرح مختلف قسم کے فنکشن لکھے جا سکتے ہیں۔ اگر ہمیں arrays پر فنکشنز کرنے ہیں، تو اگلا سوال جس کے بارے میں ہم بات کریں گے وہ یہ ہے کہ ہمیں ایک انٹیجر اری دی گئی ہے، اس کے اندر موجود نمبرز۔



07:01:11

سٹورڈ ہیں 1 2 3 4 5 دی گئی ارے کے لیے سوال یہ ہے کہ درج ذیل کیا ہو گا تو سب سے پہلے ہمیں اس ارے کی ویلیو نکالنی ہے آئیے ایک بار اس ارے کو ویژوئلائز کرتے ہیں میموری کے اندر کچھ ایسا ڈھانچہ ہوگا جس کے اندر ہمارے پاس پانچ ویلیوز سٹور ہوں گی اور ایک پوائنٹر arr ہو گا جو صفر eth انڈیکس کی طرف اشارہ کر رہا ہو گا اور اس کی سب سے پہلے یہ ویلیو ہو گی۔ aa aa + 2 تو اس کی قیمت ہمارے پاس تین ہوگی کیونکہ یہاں ہم ایڈریس آپریٹر پر ویلیو استعمال کررہے ہیں تو یہ تین پرنٹ کرکے ہمیں دے گا۔



07:01:50

اس کے بعد اگلا ar5 کرتے ہیں تو یہ ar3 ہے ar + 4 ar5 اس array میں موجود نہیں ہوگا کیونکہ یہ صرف پانچ سائز کی array ہے، اس لیے یہاں کچھ میموری ہوگی لیکن وہ ہماری array کا حصہ نہیں ہے، اس لیے یہاں ہمیں ایرر ملے گا، آئیے اسے ایک بار کوڈ کرتے ہیں اور اس کی تصدیق بھی کرتے ہیں، آئیے صرف سائز پانچ کی ایک اری بناتے ہیں، اب اس کے اندر b+ فیصد پرنٹ کرتے ہیں اور اس کے اندر ایک فیصد پرنٹ کرتے ہیں۔ 2 اور اس کے بعد arr + 5، تین کو arr2 میں پرنٹ کیا جاتا ہے کیونکہ اس پوزیشن پر تین ہے لیکن قطار پانچ میں پرنٹ ہوتی ہے، یعنی وہاں کوئی درست قدر نہیں ہے۔



07:02:29

نہیں، یہ ہماری صف کا حصہ نہیں ہے، لہذا اس نے جو بھی قدر وہاں پڑی تھی اسے حذف کر دیا۔ اب ہم اگلا پریکٹس سوال 44 کریں گے۔ پریکٹس سوال 44 ہمیں صف کو ریورس کرنے کے لیے صحیح فنکشن بتاتا ہے۔ ہمیں سائز 4 کا ایک ارے دیا گیا ہے۔ فرض کریں کہ ہمیں سائز 4 کی ایک ارے دی گئی ہے۔ اس کے اندر کی قدریں 1، 2، 3، 4 ہیں۔ ہمیں اس صف کی قدروں کو ریورس کرنا ہے، اس کا مطلب ہے کہ حتمی آؤٹ پٹ ارے جو ہمیں ملنی چاہیے اس میں 4، 3، 2، اور ایک ہونا چاہیے۔ تو یہ ایک بہت اہم سوال ہے۔ اس سوال کو حل کرنے کے بہت سے طریقے ہیں، اور ہم کلاسیکی طریقوں میں سے ایک، کلاسیکل پر بات کریں گے۔



07:03:10

طریقہ یہ ہے کہ پہلے اور آخری کا تبادلہ کریں، پھر پہلے کا تبادلہ کریں، پھر دوسرا اور دوسرا اور آخری کا، اگر درمیان میں کچھ ہو تو تیسرے اور تیسرے اور آخری کا تبادلہ کریں، اگر ہم تبادلہ کرتے رہیں تو ہماری صف بالکل الٹ جائے گی، ایک کی جگہ چار کیسے آئیں گے، اگر چار کی جگہ چار آئے تو ایک کی جگہ چار آئے، ایک کی جگہ دو آئے، دو کی جگہ دو، تین کی جگہ دو، تین کی جگہ دو، دو کی جگہ دو۔ تین کا، تو ہماری صف کو الٹ دیا گیا، اب یہ وہی حکمت عملی ہے، ابھی ہم صرف حکمت عملی کی بات کر رہے ہیں



07:03:41

جی ہاں، ہم کوڈ کے بارے میں بات نہیں کر رہے ہیں، ہم اب اس کوڈ پر بات کریں گے کہ یہ کیسے لکھا جائے گا. اگر ہمارے پاس طاق سائز کی ایک صف ہوتی، جیسے 1 2 3 4 اور پانچ، اس میں بھی وہی حکمت عملی استعمال کی جائے گی، اگر ہم ایک اور پانچ کا تبادلہ کریں تو پانچ یہاں آئیں گے، ایک یہاں آئے گا، پھر اگر ہم دو اور چار کا تبادلہ کریں گے تو چار یہاں آئیں گے، دو یہاں آئیں گے، اور اگر ہم تین کا تبادلہ 3K کے ساتھ کریں تو یہ صرف تین رہے گا۔ اس سے ہم نے کیا سیکھا کہ فائنل اری جو آئی تھی وہ 5 4 3 2 اور 1 تھی، اس لیے ہماری اری مکمل طور پر الٹ جاتی ہے، اس لیے جب بھی ہمیں کسی ارے کو ریورس کرنا ہوتا ہے، نمبروں کی فہرست دی جاتی ہے، انہیں ریورس کرنا ہوتا ہے۔



07:04:16

تو ہمیں کیا کرنا چاہیے؟ پہلے کو آخری سے تبدیل کریں۔ دوسرے کو دوسرے آخری سے تبدیل کریں۔ تیسرے کو تیسرے آخری سے تبدیل کریں۔ چوتھے کو چوتھے آخری کے ساتھ تبدیل کریں۔ تو سامنے والا پیچھے جائے گا اور پیچھے والا سامنے آئے گا۔ اب ہم یہ کوڈ میں کیسے کریں گے؟ اب ہم جانتے ہیں کہ سب سے پہلے ہمیں ایک لوپ چلانا ہو گا تاکہ یہ ہر عنصر تک پہنچ سکے۔ تو ہم ایک لوپ لگائیں گے۔ وہ لوپ کیا کرے گا؟ یہ صف سے شروع ہوگا۔ اگر ہم دوبارہ اپنی صف کی مثال لیں، 1 2 3 4 5 6۔ اگر ہم اس صف کی مثال لیں، تو لوپ قطار اور لوپ سے شروع ہوگا۔



07:04:48

لوپ کہاں تک جائے گا؟ یہ ارے کے نصف تک جائے گا، یعنی یہ یہاں تک جائے گا، تو اب ہم اس عنصر کو اس کے ساتھ تبدیل کریں گے، ہم اس کے ساتھ اس کا تبادلہ کریں گے، اب ہم دوبارہ تبادلہ نہیں کریں گے، اگر ہم نصف کے بعد دوبارہ تبادلہ کرنا شروع کریں گے، تو وہ اصل پوزیشن پر آنا شروع ہو جائیں گے، اس لیے ہمارا لوپ آدھے تک جائے گا، سائز سے کم، جو بھی ہو گا، n سے تقسیم ہو جائے گا، 2i + کے اندر loop کا تبادلہ ہو گا اور loop کے اندر کیا ہو گا۔ لوپ، تو سب سے پہلے، پہلی ویلیو کیا ہوگی، پہلی ویلیو ہمارے ارے یعنی مستطیل کی قدر ہوگی



07:05:21

انڈیکس میں جو بھی قدر ہے وہ ہماری پہلی قدر ہے اور دوسری قدر وہ ہے جس کا تبادلہ کرنے کی ضرورت ہے۔ ہم دوسری قدر کیسے تلاش کریں گے؟ دوسری قدر قطار کے لیے ہے، یعنی صفر۔ آٹھویں انڈیکس کے لیے، دوسری قدر پانچ ہو گی۔ پہلے انڈیکس کے لیے، دوسری قدر چار ہو گی۔ دوسرے انڈیکس کے لیے، دوسری قدر تین ہوگی۔ تو ہم دیکھ سکتے ہیں کہ اگر یہ ویلیو i ہے تو یہ ویلیو ہماری n - i - 1 ہے۔ مجھے امید ہے کہ آپ کو یہ بات سمجھ آگئی ہوگی۔ آئیے ایک میز بناتے ہیں اور دیکھتے ہیں۔ ہم میز میں کیا کریں گے؟ ہم i کی قدر لکھیں گے۔ اب ہم n - i - 1 کی قدر لکھیں گے۔



07:05:53

ہم جانتے ہیں کہ ہمارا i قطار سے شروع ہو رہا ہے اور n کی قدر مستقل ہے جو کہ چھ ہے، تو اگر i کی قدر row ہے تو قدر ہو گی n - i - 1، ہمارے پاس 5 ہے، اگر i ایک ہے تو قیمت 6 - i - 1، ہمارے پاس 4 ہے، اگر i 2 ہے، تو قیمت 6 - 2 - 1 ہوگی، ہمارے پاس 3 کے لیے انڈیکس ہے، تو ہمارے پاس انڈیکس ہے، پانچ ہے ایک کے لیے دو کا اشاریہ تین ہے، پھر i کے لیے 5، پھر ایک کے لیے 5 اور r کے لیے دو، تو اگر آپ خود سے یہ نہیں سوچ سکتے کہ دوسری قدر کیسے تلاش کی جائے، تو اس میں کوئی حرج نہیں ہے کیونکہ یہ ہے



07:06:36

یہ چیزیں مشق کے ساتھ آتی ہیں، آپ نے ارے کو چھ بار ریورس کیا ہوگا، اس کے بعد آپ کو یاد ہوگا کہ ریورس n - i - 1 کے ساتھ کیا گیا ہے کیونکہ یہ کلاسیکی طریقہ ہے، چاہے آپ C+، Java یا C میں پروگرامنگ کر رہے ہوں، جب بھی آپ کسی array کو ریورس کرنا چاہیں گے، آپ کو n - i - 1 استعمال کرنا پڑے گا، تو یہاں آپ لکھیں گے کہ دوسری ویلیو i - 1 کی دوسری array ہے، اب آئی - 1 کی دوسری ویلیو، اب آئی ہے ایکسچینج کا عمل کریں، آپ ایکسچینج کیسے کریں گے، آپ دوسری ویلیو کو i کی صف میں اور پہلی ویلیو کو n - i - 1 کی صف میں ڈالیں گے



07:07:11

تو یہ ہماری ویلیوز کا تبادلہ ہے اور ہم لوپ کو یہاں ختم کریں گے، تو آخر کار ہماری اری ریورس ہو جائے گی، آئیے ایک نئی اری بناتے ہیں اور اس کا ڈرائی رن کرتے ہیں، کوڈنگ میں ڈرائی رن کیا جاتا ہے کہ کوڈ کو چلانے سے پہلے آپ اس کے آؤٹ پٹ کا تجزیہ کرتے ہیں، فرض کریں کہ سائز پانچ کا ایک ایریا ہے، اب ہم پہلے کیا کریں گے، ہم لوپ کو شروع کریں گے، i کی ویلیو کیسے شروع ہوگی، i کی ویلیو کیسے ہوگی؟ n - i - 1 4 ہے، تو یہ پہلی ویلیو بن جائے گی، یہ دوسری ویلیو بن جائے گی، اس پوزیشن پر ہم دوسری ویلیو کو ہٹا کر دوسری ویلیو ڈالیں گے، یعنی پانچ



07:07:46

ہم اسے ڈالیں گے، اسے ہٹائیں گے اور پہلی ویلیو یعنی ایک ڈالیں گے، پھر یہ i پلس پلس میں آئے گا، یہاں یہ پہلی ویلیو بن جائے گی، یہ دوسری ویلیو بن جائے گی، اس کے بعد ہم اسے ہٹا کر دوسری ویلیو ڈالیں گے، اسے ہٹا کر پہلی ویلیو لگائیں گے، اس کے بعد یہ i+p i بن جائے گی، اگر یہ پہلے ایک تھی تو اس بار یہ دو ہو جائے گی، اب ہم دیکھیں گے کہ اس کی قیمت دو سے کم ہے 5/2 انٹیجر 2 میں ہے، تو 2 <2 غلط ہو جائے گا، تو لوپ یہیں ختم ہو جائے گا، ہم تین تک نہیں پہنچ پائیں گے، تو بہرحال تین



07:08:19

یہ وہی رہے گا اور اگر ہم آخری صف کو دیکھیں تو آخری صف میں کیا آئے گا، پہلے پانچ، پھر چار، پھر تین، پھر دو، پھر ایک۔ یہ ہماری ریورس صف بن جاتا ہے۔ اب ہم اس کے لیے کوڈ لکھتے ہیں۔ ہم نے پہلے ہی کوڈ میں ایک اری بنائی ہے، t 3 4 5۔ اب ہم صرف کیا کریں گے، آئیے ایک نیا فنکشن int reverse بنائیں، جس کے اندر ہم ایک array لیں گے اور اس کا سائز لیں گے، int reverse int array، اور array کا سائز n ہوگا۔ اب ہم ایک لوپ چلاتے ہیں، int aa i 0 سے aa تک لوپ کرے گا ایسا نہ ہو کہ n اور aa ps اور ہم ہر بار کیا کریں گے، سب سے پہلے ہم پہلی ویلیو نکالیں گے، پہلی ویلیو کی array تھی اور



07:09:07

ہماری دوسری قدر n - i - 1 کی صف ہوتی۔ یہ صفر نہیں ہوگی۔ یہ i کی صف ہوگی۔ اب ہماری دوسری ویلیو کو i کی صف میں اور ہماری پہلی ویلیو کو n - i - 1 کی صف میں رکھیں۔ تو ہم نے ان دونوں ویلیو کو ایک دوسرے کے ساتھ تبدیل کر دیا ہے اور یہ ہماری اری ریورس ہو گئی ہے۔ اب ہم کیا کریں گے، ہم اسے مین فنکشن کے اندر پرنٹ کروا لیں گے۔ سب سے پہلے ہم ریورس کال کریں گے۔ ہم اس میں ارے کو پاس کریں گے اور ہمارا nn کا سائز پانچ ہے۔ اس کے بعد، آئیے اپنی صف کو پرنٹ کرنے کے لیے ایک فنکشن بنائیں، ایک void print array پرنٹ



07:09:53

int i = 0 کے لیے array ہم پہلے ہی یہ کوڈ لکھ چکے ہیں اس لیے مجھے امید ہے کہ آپ ویڈیو کو یہاں روک دیں گے اور اس فنکشن کو خود ہی مکمل کرنا ہے جس میں ہمیں array کی ویلیوز مل رہی ہیں اور آخر میں اگلی لائن دیتے ہیں، آئیے اسے void کرتے ہیں یہاں پرنٹ array a rr اور f تو سب سے پہلے ارے کو ریورس کریں، اسے واپس کریں اور اس فنکشن کو واپس کریں اور اس کو آرے کے اندر پرنٹ کریں، اسے واپس کریں باطل کے طور پر کام کرتا ہے کیونکہ ریورس کچھ بھی واپس نہیں کرے گا، لہذا ہماری صف



07:10:33

الٹ ہونے کے بعد کیا نکلا 0 4321 یہاں ہم نے ایک چھوٹی سی غلطی کی، جب ہم نے دوسری قیمت لکھی تو ہم نے اسے n - i - 1 نہیں لکھا، ہم نے n - i - i لکھا، تو ہم نے اسے n - i - 1 لکھا۔ یہ غلطیاں نہیں ہونی چاہئیں، تو کوئی مسئلہ نہیں، چلیں اسے دوبارہ چلاتے ہیں۔ اس بار ہماری صف کو ریورس 5 4 3 2 1 پرنٹ کیا گیا ہے، لہذا ہماری صف کو الٹ دیا گیا ہے۔ ہم نے کیا تخلیق کیا، 1 2 3 4 5 پرنٹ کیا گیا ہے 54321 اور ہم نے اسے کیسے ریورس کیا، ہم نے نصف صف میں ایک لوپ چلایا، پہلی قدر کو دوسری قدر سے تبدیل کیا، پہلی قدر کو آخری کے ساتھ تبدیل کیا۔



07:11:08

سیکنڈ کے ساتھ سیکنڈ لاسٹ کے ساتھ اب ایک چیز ہم اس میں دیکھیں گے کہ یہ کال بذریعہ ویلیو ہے یا کال بذریعہ ریفرنس، یہ فنکشن جسے ہم نے کال کیا ہے ریورس کال بذریعہ ریفرنس ہے کیونکہ سب سے پہلے ایک array ہمارے لیے پوائنٹر ہوتا ہے، لہٰذا حوالہ کے ذریعے کال صرف پوائنٹر سے ہوتی ہے، دوسری بات یہ کہ ہم نے دیکھا کہ جب ہم نے ریورس کال کی تو اپنی array کو ریورس کر دیا لیکن مین فنکشن کے اندر بھی ایک array کو پاس کیا گیا تو یہ فنکشن ظاہر ہوتا ہے کہ اس کے اندر کوئی array گزر جاتا ہے۔ ہمیشہ حوالہ سے کال کریں، تاکہ آپ ایک صف پاس کر سکیں



07:11:38

اگر آپ اسے کسی دوسرے فنکشن کو دیتے ہیں اور پھر اگر وہ فنکشن اس میں کچھ تبدیلیاں کرتا ہے تو وہ تبدیلیاں آپ پر بھی نظر آئیں گی۔ اسی لیے کسی بھی فنکشن کے اندر array کی قدروں کو بہت احتیاط سے تبدیل کرنا پڑتا ہے کیونکہ وہ کالنگ فنکشن کے اندر بھی منعکس ہوں گی۔ اب اگلا سوال جس کے بارے میں ہم بات کریں گے وہ ہے پہلے اور سب سے اہم نمبروں کو ذخیرہ کرنے کے لیے ایک پروگرام لکھنا۔ ہم پہلے اور سب سے اہم نمبروں کے بارے میں پہلے ہی بات کر چکے ہیں۔ پانچویں نمبر کی ترتیب کچھ اس طرح ہے 0 1 1 2 3 5 8 13 ہمارے 21 وغیرہ۔ اب پانچویں نمبر کی خاص بات یہ ہے کہ اگر آٹھواں



07:12:15

اگر آپ نمبر معلوم کرنا چاہتے ہیں تو n - 1 جمع n - 2 ایتھ نمبرز شامل کریں۔ تو سب سے پہلے ہمیں ایک فون نمبر بنانا ہوگا جس میں ہم n finas محفوظ کر سکیں۔ تو اسے بنانے کے لیے ہم ایک صف کی مدد لیں گے۔ ہم اس پورے کوڈ پر تبصرہ کریں گے۔ اس پر بھی تبصرہ کریں۔ سب سے پہلے ہم ایک عدد A بنائیں گے۔ یہ انٹیجر A بتائے گا کہ ہم کتنے فناس چاہتے ہیں۔ تو ہم صارف سے A پرنٹ کرنے کو کہیں گے، A درج کریں۔ ہم نے A، فیصد D اور A کی ویلیو سکین کر لی ہے۔ ہم نے A کی ویلیو محفوظ کر لی ہے اب ہم کیا کریں گے؟ اب ہم ایک صف بنائیں گے۔ آئیے ہم اس صف کا نام finas رکھیں اور ہم اس کا سائز n دیں گے۔



07:13:05

مساوی کا مطلب ہے n نمبرز اس فنا کے اندر محفوظ ہوں گے۔ اب ہم جانتے ہیں کہ صف کا فینا صف ہے اور ایک کا فینا ہمیشہ ایک ہوتا ہے۔ جب بھی ہم اس ن کو داخل کریں گے، تب ہم اس ن کی قدر کو ذہن میں رکھیں گے۔ اگر n کی قدر ایک سے زیادہ یا دو سے زیادہ ہے، تو فینا قطار صفر ہے۔ fina اور ایک ایک ہے. یہ ہمیشہ سچ ہے۔ ہمیں ہمیشہ یہ لکھنا پڑتا ہے۔ تو ہم نے انہیں لکھ دیا ہے۔ اب ہمیں اگلے فینا کا حساب لگانا ہے۔ تو اس کے لیے آئیے ایک لوپ لگاتے ہیں۔ ہم نے پچھلی بار کیا کیا تھا کہ ہم نے recursion کے ذریعے فینا کا حساب لگایا۔ اس بار ہم اسے لوپ کے ساتھ کر رہے ہیں اور ہم اسے لوپ کے ساتھ کریں گے۔



07:13:41

یہ اور بھی آسان ہو جاتا ہے کہ ہم دو سے لوپ کو کیسے چلائیں گے اور اسے n تک لے جائیں گے، تو قطار اور ایک کے لیے یہ ہو گیا، اب ہم دو کے لیے فائنل کا حساب لگانا شروع کریں گے اور n-1 تک کہاں تک حساب لگائیں گے، تو ہر بار aa کا فائنل کیا ہوگا، aa کا فائنل - 1 ps final کا aa - 2 مجھے امید ہے کہ آپ کو اس لائن کے فائنل کے بارے میں بہت اہم بات سمجھ آگئی ہو گی، چلیں اس لائن کا فائنل کیا ہے؟ n-1 p n-2 کے لئے ایک ہے تو aa i -1 ps aa -2 کے لئے کیا ہوگا، یہ صرف ایک سادہ سا تصور ہے اور پھر ہم یہ کر لیں گے، ہمارے پاس i پرنٹ شدہ کا پرنٹ فیصد dbt فائنل ہے، لہذا سب سے پہلے



07:14:34

سب سے پہلے جب i کی قدر دو ہو جائے گی، یہاں اسے + 1 کے حساب سے شمار کیا جائے گا، پھر ہمیں 2 کا حتمی نمبر ملے گا۔ اس کے بعد اگر ہم ویں کے آخری نمبر کے لیے حساب کریں تو یہ i بن جائے گا، تو یہ 1 + 1 ہو جائے گا، تو ہمیں دو ملے گا۔ اس کے بعد اگر ہم 4 کے آخری نمبر کے لیے حساب کریں تو یہ 2+1 ہو جائے گا، تو ہمیں ویلیو 3 ملے گی۔ اب اگر ہم پانچ کے آخری نمبر کے لیے حساب کریں تو یہ تین ہو جائے گا، یعنی یہ ایک تین اور دو ہے، تو اس کی قیمت ہمارے پاس پانچ اور اسی طرح آئے گی۔ اب ہم اسے چلاتے ہیں اور دیکھتے ہیں. ہمیں 10 حتمی نمبر داخل کرنے ہیں، تو یہ 10 ہیں۔



07:15:12

ہمیں حتمی نمبر مل گئے۔ اس میں پہلے دو چھپے نہیں تھے، جس کا مطلب ہے کہ ہم نے قطار اور ایک ابھی تک پرنٹ نہیں کی ہے۔ اس کے لیے ہم یہاں ایک الگ پرنٹ اسٹیٹمنٹ رکھ سکتے ہیں۔ قطار اور ایک کے علاوہ باقی آٹھ آخری نمبر ہیں۔ پہلے ایک آیا، پھر دو آیا، پھر تین آیا، پھر پانچ آیا، پھر آٹھ آیا۔ یہ ہمارے پانچ بن گئے، پھر چھٹا آیا 13، ساتواں آیا 21 اور آٹھواں آیا، ہمارے پاس 34 ہیں۔ اس طرح، ہم n کی مختلف اقدار کے لیے پانچویں نمبر کے اضافی نمبر پرنٹ کر سکتے ہیں اور مجھے امید ہے کہ یہ دوبارہ آئے گا۔



07:15:44

ہم نے اسے "" کے ساتھ کیسے کیا اور ہم نے اسے "" یعنی "" لوپ کے ساتھ کیسے کیا؟ ہم ان کے درمیان فرق کو سمجھ چکے ہوں گے۔ اگلا سوال جس کے بارے میں ہم بات کریں گے وہ ہے دو اور تین کے ٹیبلز کو ذخیرہ کرنے والی 2d صف بنانا۔ اس کا مطلب ہے کہ ہمیں دو اور تین کی میز کو ذخیرہ کرنا ہے۔ تو اس کے لیے ہمیں ایک 2d ارے بنانا ہوگا۔ وہ صف کچھ اس طرح نظر آئے گی، جس کے اندر ہم یہاں دو کا ٹیبل اسٹور کریں گے اور یہاں ہم تین کا ٹیبل اسٹور کریں گے۔ 0 1 2 3 4 5 6 7 8 9. لہذا، اس طرح سے ٹیبلز کو ذخیرہ کرنے کے لیے، اگر ہم اس کا سائز دیکھنا چاہتے ہیں، تو ہمیں دو اریوں کی ضرورت ہے اور دونوں کا سائز 10 ہونا چاہیے۔



07:16:20

اگر ہم ضرب ٹیبل کو 10 تک ذخیرہ کرنا چاہتے ہیں تو ہمیں ایک اری بنانا پڑے گی، آئیے اسے ٹیبلز کا نام دیں، ایک عدد 2D اری کے نام سے ٹیبلز رکھیں اور اس کا سائز 2 بائی 10 ہوگا، جس میں دو ارییں بنیں گی اور ہر ایک کا سائز 10 ہوگا، تو یہ پہلی اری ہے جس کا سائز 10 ہے، اور اس طرح سے ہم 10 کا سائز کریں گے۔ قدریں، آئیے اس کے لیے کوڈ لکھتے ہیں، سب سے پہلے ٹیبلز 0.0 کے نام سے ایک اری بناتے ہیں۔



07:17:07

ارے اور اس کا سائز پہلے a اور پھر a، تو یہاں دو لوپ کی ضرورت ہے، دو لوپ لگانے ہیں، پہلا int aa i 0 aa less a aa plus plus کے لیے ہوگا اور اس کے اندر int j i 0 j le a j p p کے لیے ہوگا اور i j کی صف کے اندر ہم ویلیو اسٹور کریں گے، اس لیے ہم int aaps aaa0 کے لیے لوپ چلائیں گے۔ آئیے یہاں ایک لکھتے ہیں کیونکہ a ہماری قطار ہے، aa ہمارا کالم ہے، ہم جس کالم کے بارے میں بات کر رہے ہیں، تو n ae کی صف اس نمبر کے برابر ہے جس کا نمبر ہمیں ٹیبل میں رکھنا ہے، int نمبر یا آئے گا، نمبر کو aa pw سے ضرب دیا گیا، یہاں ہم ڈیکلریشن میں int نمبر شامل کرتے ہیں، اب مین



07:18:04

ہم فنکشن کے اندر سٹور شدہ ٹیبلز کو کال کریں گے، جس میں ہم اپنی array 2d array کو پہلے پاس کریں گے، اس کے بعد ہم قطاروں کی تعداد کو پاس کریں گے جس کے لیے ہم پرنٹ کرنا چاہتے ہیں، قطار کے لیے پہلے صفر اور اس میں کالم 10 اور نمبر ہے جس ٹیبل کو ہم پرنٹ کرنا چاہتے ہیں، آئیے اسے کاپی کرتے ہیں اور اب ہم کیا کرنا چاہتے ہیں، پہلی قطار میں ہم اپنی array کی تین جگہ کو پرنٹ کرنے کے لیے یہاں پاس کریں گے۔ دس ٹیبلز کی 2d اری، تو ہم نے سب سے پہلے کیا کیا ہم نے ٹیبلز کے نام سے 2d اری بنائی جس کا سائز 2/10 ہے، یعنی اس میں دو ارییں ہیں۔



07:18:39

اندر اور ہر اری کا سائز 10 ہے۔ پھر سٹور ٹیبل کے نام سے ایک فنکشن بنایا گیا جو کسی ایک نمبر کے ٹیبل کو محفوظ کرتا ہے۔ یہ d array لے گا، ہم کس صف کے بارے میں بات کر رہے ہیں، یعنی ہماری قطار، اور کون سا کالم، یعنی کون سا ایک، ہم دوسرے نمبر کی ٹیبل کو پرنٹ کر رہے ہیں، کیا یہ تیسرے نمبر پر ہے یا چوتھے نمبر پر، اور کون سا نمبر ٹیبل دو نمبر ٹیبل پر پرنٹ کرنے کی ضرورت ہے، چاہے تین کو پرنٹ کرنا ہے یا پانچ کو پرنٹ کرنا ہے۔ ہم نے ایک لوپ چلایا ہے جو قطار سے m تک جائے گا۔ یہاں m کی ویلیو جس کو ہم پاس کر رہے ہیں 10 ہے، تو یہ لوپ قطار سے m تک ہے۔



07:19:11

یہ 10 تک جائے گا اور تمام ضرب کرنے کے بعد ٹیبل محفوظ ہوجائے گا۔ یہاں، ہم نے جو نمبر پاس کیا ہے وہ پہلے دو، پھر تین ہے، تو سب سے پہلے دو کو i + 1 سے ضرب دیا جائے گا کیونکہ ہم نے زیرو بیس انڈیکسنگ کی ہے، اس لیے i کی ویلیو صفر ہے، تو پہلے یہ ہمیں دو، پھر چار، پھر چھ، پھر آٹھ، پھر 10 اور اسی طرح کی قیمت دے گا۔ لہٰذا، یہ تمام قدریں ایک ایک کرکے ہماری ٹیبلز کی صف میں محفوظ ہوں گی، جس میں ہماری قطار ایک مستقل رہے گی کیونکہ ہم نے مسلسل n، کالم آن لائن کو پاس کیا ہے۔



07:19:43

اگر یہ بدلتا رہتا ہے تو پہلی ویلیو 00 کی سرنی ہوگی، پھر 01 کی سرنی، پھر 02 کی سرنی، پھر 03 کی سرنی اور اسی طرح کی۔ تو اس طرح ہماری اقدار بدلتی رہیں گی جس میں ہمارا صفر مستقل رہے گا۔ جب ہم صفر کو n سے گزریں گے اور ایک کو n سے گزریں گے تو ہمیں ہر جگہ ایک ملے گا۔ مجھے امید ہے کہ یہ حصہ ہمارے لیے واضح ہے کہ ہمارا n مستقل ہے اور m کی قدر صفر سے 10 تک جائے گی۔ نمبر بھی مستقل ہے۔ ہمیں بتایا گیا ہے کہ ہم دو کا ٹیبل پرنٹ کرنا چاہتے ہیں یا تین کا ٹیبل۔



07:20:19

اگر ہم یہ کرنا چاہتے ہیں تو ہم اصل میں مین فنکشن کے اندر اپنی ٹیبل لکھ سکتے ہیں۔ آئیے ایک بار اسی لوپ کو کاپی کرتے ہیں اور یہاں ہم 0 سے a کے فیصد d b ٹیبلز کو صفر پرنٹ کریں گے۔ تو یہ دو کا ٹیبل پرنٹ کرے گا اور یہ لوپ تین کا ٹیبل پرنٹ کرے گا۔ یہاں m کی جگہ ہم اسے 10 سے بدل دیں گے اور آئیے اسے محفوظ کریں اور پھر چلائیں۔ یہاں m کی جگہ aa ہر بار آنے والا ہے کیونکہ m ہمارا مستقل نہیں ہے یہ بدلتا رہے گا۔ قدر صفر سے 10 تک آئے گی، لہذا یہاں ہر بار aa آئے گا۔ اب



07:20:59

یہاں، جب بھی ہم اس کوڈ کو دیکھ رہے ہیں، ہمیں مسلسل صف کے نیچے ایک سرخ لکیر نظر آرہی ہے۔ یہ اس لیے ہو رہا ہے کہ جب بھی ہم 2D اری کو پاس کرتے ہیں تو ہماری پہلی ڈائمینشن کو پوائنٹر کی طرح سمجھا جاتا ہے لیکن دوسری ڈائمینشن کو ایک حقیقی ارے کی طرح سمجھا جاتا ہے جس میں ہمیں سائز دینے کی ضرورت ہوتی ہے۔ لہذا، دوسری صف کی طرح، ہمیں اپنے سائز کو 10 کے طور پر بیان کرنا پڑے گا، ورنہ یہ سرخ لکیر یہاں سے کبھی نہیں جائے گی۔ اگر ہم سائز کی وضاحت نہیں کرتے ہیں، تو یہ ہمیں ایک غلطی دیتا ہے کہ یہ مطابقت پذیر اقسام نہیں ہیں۔



07:21:27

اب اس کوڈ کو چلاتے ہیں۔ ہمیں جو آؤٹ پٹ ملتا ہے وہ کچھ اس طرح ہے جس میں پہلے دو کا ٹیبل 2 4 6 8 12 سے 20 تک پرنٹ ہو رہا ہے اور اس کے بعد تین کا ٹیبل پرنٹ ہو رہا ہے۔ ہمیں اسے اگلی سطر میں چھاپنا چاہیے تھا۔ تو آئیے یہاں ایک بیان دیتے ہیں f b a پرنٹ کریں تو پہلے دو کا ٹیبل پرنٹ ہوتا ہے، پھر تین کا ٹیبل پرنٹ ہوتا ہے۔ اور ہم نے ٹیبلز کو کیسے پرنٹ کیا، انہیں 2D اری کے اندر اسٹور کرکے، یعنی ٹیبلز، ہم نے اپنے اسٹور ٹیبل فنکشن کو کال کیا اور اس کے اندر موجود ٹیبلز کا حساب لگایا۔



07:22:04

میں نے اسے اپنے فنکشن کے اندر اسٹور کیا اور پرنٹ کیا اور میں نے جو سیکھا وہ یہ تھا کہ جب بھی آپ کو کسی فنکشن کے اندر سے 2d اری کو پاس کرنا ہوتا ہے تو آپ کو ہمیشہ دوسری جہت کا ذکر کرنا پڑتا ہے، اس لیے ہم نے arrays کے بارے میں بہت کچھ پڑھا ہے، آپ کو 2d array کے بارے میں کچھ سوالات پوچھے گئے ہوں گے، آپ کو نوٹس دیے گئے ہوں گے، آپ جا کر انہیں دیکھ سکتے ہیں اور مجھے امید ہے کہ ہم اگلی چال پر ایک مضبوط نام حاصل کر رہے ہیں۔ Structures اور Strings ہے، تو اب ہم اپنے باب سے شروع کرنے جا رہے ہیں جس کا نام ہے۔



07:22:32

سٹرنگز اگر ہم سٹرنگز کے بارے میں بات کرتے ہیں، تو اسٹرنگ کا مطلب ایک کریکٹر اری ہے جسے ایک null کریکٹر سے ختم کیا گیا ہے۔ یہ بیس sl 0 جو ہم نے دکھایا ہے وہ ایک null کریکٹر ہے۔ جیسا کہ اگر ہم بیس ایس ایل اے لکھتے ہیں تو اس کا مطلب اگلی لائن ہے۔ اگر ہم واپس sl ti لکھتے ہیں تو اس کا مطلب ہے ٹیب کی جگہ۔ تو واپس ایس ایل صفر کا مطلب ہے null کریکٹر۔ null کردار کا کام کسی بھی تار کو ختم کرنا ہے، یعنی اسے ختم کرنا ہے۔ ہم نے اب تک کیا بات کی ہے؟ اب تک ہم اس بات پر بحث کر چکے ہیں کہ ہمارے پاس C کے اندر حروف ہیں اور ایک کردار کیا کرتا ہے؟ ایک حرف



07:23:08

یہ کسی بھی لفظ یا ایک علامت کو ذخیرہ کرتا ہے لیکن فرض کریں کہ ہم ایک لفظ کو ذخیرہ کرنا چاہتے ہیں تو اس لفظ یا کسی جملے کو کیسے ذخیرہ کرنا ہے، تصویر میں سٹرنگز آتی ہیں، سٹرنگز کیا کرتی ہیں، انگریزی کے الفاظ یا جملے یا پیراگراف، ہم انہیں سٹرنگ ڈیٹا ٹائپ میں اسٹور کر سکتے ہیں، اب ایک نارمل کریکٹر اری کا نام ہوگا، فرض کریں کہ ہم نے ایک کریکٹر اری کا نام بنایا ہے، اس کے اندر کچھ C، A کیریکٹر ہوں گے، اس میں تین چیزیں ہوں گی۔



07:23:40

وہ اندر لکھے گئے ہیں، اس لیے ہم اسے کریکٹر اری کہیں گے، لیکن ایک کیریکٹر اری ایسی ہے کہ اگر ہم آخر میں null کریکٹر جوڑیں گے تو یہ ظاہر ہوگا کہ یہ A B C الگ نہیں ہیں، یہ ایک ساتھ مل کر ایک لفظ بنا رہے ہیں، تو آخر میں null کریکٹر کو شامل کرنے کا یہی مطلب ہے، تو سٹرنگ کیا دکھاتی ہے، سٹرنگ ہمیں دکھاتی ہے کہ یہ کسی لفظ کی نمائندگی کر رہا ہے، اگر ہم نے اس کردار کی کچھ مثالیں دیکھیں تو اس array کا نام ہے، اگر ہم اس کردار کا نام دیکھتے ہیں نام، اب نام کے اندر ہم نے بہت سے حروف کو ذخیرہ کیا ہے، لیکن آخر میں ہم نے bas کو ذخیرہ کیا ہے



07:24:15

Null کو بھی 0 کے طور پر ذخیرہ کیا جاتا ہے اس طرح یہ اس طرح ظاہر کرتا ہے کہ نام مختلف حروف کا مجموعہ نہیں ہے نام ایک مکمل لفظ بناتا ہے اور نام دراصل اس قدر کی طرف اشارہ کرتا ہے اس کے بعد اگر ہم کلاس کو دیکھیں تو کلاس مختلف نہیں ہے کلاس ان تمام حروف کو جوڑ کر ایک مکمل لفظ بناتی ہے اور جب بھی ہم سٹرنگ لکھتے ہیں تو وہ لفظ کچھ اس طرح نظر آتا ہے تو ایک طرح سے ہم اسے نظر انداز کر دیتے ہیں کیونکہ اس کردار کو null ظاہر کرنے کے لیے ضروری ہے مرتب کرنے والے کو معلوم ہونا چاہیے کہ یہ ایک عام کردار کی صف ہے۔



07:24:51

یا ہم الفاظ کی ایک سٹرنگ بنا رہے ہیں، اس لیے ایک بار جب ہم سٹرنگ کا اعلان کرتے ہیں تو ہمیں اپنے مین فنکشن کے اندر کریکٹر کا نام نظر آتا ہے اور اس کے اندر ہم اپنے مختلف حروف HR A D H A لکھ سکتے ہیں اور آخر میں null کریکٹر کو شامل کرنا نہ بھولیں کیونکہ اگر ہم اسے شامل نہیں کریں گے تو اسے عام کریکٹر array کے طور پر لیا جائے گا اب اسے نارمل کریکٹر array کے طور پر لینے میں کیا فرق ہے، جب بھی strings کے ساتھ کچھ اسپیشل پراپرٹیز کے متعلق بات کرتے ہیں



07:25:23

اور ہمیں سٹرنگز پر چلانے کے لیے خود بخود کچھ اچھے فنکشن بھی مل جاتے ہیں، لیکن وہ نارمل کریکٹر اری پر نہیں ہوتے، وہ صرف سٹرنگز پر ہوتے ہیں، اس لیے ان خاص خصوصیات، ان خاص خصوصیات، ان خاص فنکشنز تک رسائی کے لیے ہمیں null کریکٹر استعمال کرنے کی ضرورت ہے۔ تو یہاں ہم نے نام کے نام سے ایک سٹرنگ شروع کی ہے اور اس کے اندر اپنا پورا نام null کریکٹر کے ساتھ محفوظ کیا ہے۔ لیکن سٹرنگ کو شروع کرنے کا کوئی ایک طریقہ نہیں ہے، دو طریقے ہیں۔ ہم پہلے ہی پہلا راستہ دیکھ چکے ہیں۔



07:25:54

اس میں ہم جو کر رہے ہیں وہ مختلف حروف کو جوڑ کر آخر میں ایک null کریکٹر لگاتے ہیں، لیکن ہم نے سٹرنگ کو بھی مکمل لفظ کی طرح شروع کر دیا ہے، پھر ہم نے ابتدائیہ کے حوالے ڈالے ہیں اور اندر اپنا پورا نام لکھ دیا ہے، اب یہاں آپ پوچھ سکتے ہیں، دیدی، اس میں بیک سلیش 0 یعنی null کریکٹر بالکل نہیں آیا، اس لیے میں خود بخود کہوں گا کہ اگر ہم اپنے ابتدائیہ کو سیٹ کر دیں تو اس کو سیٹ کرنا ہو گا۔ null کریکٹر، یعنی آپ اتنا لکھیں گے اور C کیا کریں گے، یہ خود بخود بیک سلیش صفر ڈال دے گا، اب ایک اور



07:26:32

یہاں قابل غور بات یہ ہے کہ جب بھی ہم کوئی حرف لکھتے ہیں تو اسے سنگل کوڈز سے لکھتے ہیں لیکن سٹرنگ لکھنے کے لیے ہم ڈبل کوڈ استعمال کرتے ہیں۔ اس لیے اس فرق کو ہمیشہ ذہن میں رکھنا چاہیے۔ اگر ہم یہاں سنگل اقتباسات لکھیں گے تو ہمیں غلطی ہوگی کیونکہ یہ طریقہ غلط ہے۔ اب اگر ہم اپنا سٹرنگ انیشیلزم ویری ایبل اس طرح بنانا چاہتے ہیں، اگر ہم وہی سٹرنگ بنانا چاہتے ہیں، تو ہم اسے اس طرح بنائیں گے۔ تو، ہمارے پاس ایک سٹرنگ نام کا نام ہے، جس کے اندر ہماری اصل قیمت محفوظ ہے اور اس کے اندر، سٹرنگ بھی محفوظ ہے۔



07:27:05

ہمیں sl 0 ڈالنے کی ضرورت نہیں ہے، ہمارا کمپائلر اسے خود بخود ہمارے لیے ڈال دے گا، اس کی ایک اور مثال دیکھتے ہیں، جیسے ہم نے ایک کلاس ویری ایبل، ایک کلاس سٹرنگ بنائی ہے، جس کے اندر ہم اپنے کریکٹرز کو الگ الگ رکھ سکتے ہیں یا ایک ہی الفاظ کی شکل میں ڈال سکتے ہیں جیسے character class e equal to apna college، یہاں p اسپیس بھی خود بخود آجائے گی، اس کا مطلب یہ ہے کہ ہم نے یہ اسپیس دے دی ہے جو ہمارے string کے درمیان ہے اور اس کے درمیان میں یہ اسپیس ہے۔ null کردار ہمارے کمپائلر کے ذریعہ شامل کیا جائے گا، اس کے بعد ہم بات کریں گے۔



07:27:43

کہ جب بھی ہم کسی سٹرنگ کو ڈیفائن کرتے ہیں تو میموری کے اندر کیا ہوتا ہے، اس کا مطلب ہے کہ ہم ایک نارمل کریکٹر اری کو ڈیفائن کرتے ہیں اور ہم ایک اسٹرنگ کو ڈیفائن کرتے ہیں، میموری فارم میں ان دونوں میں کیا فرق ہے، تو فرض کریں کہ ہم نے اس فارمیٹ میں اسٹرنگ کو ڈیفائن کیا ہے، تو میموری کے اندر کیا ہوگا، ہم نے جتنے بھی کریکٹرز لیے ہیں، وہ بہت سے بلاکس محفوظ ہو جائیں گے، اب ہم ان بلاکس کا نام جو سنگل ہے، ان کا نام کون سا ہے؟ ہر بلاک کے اندر محفوظ کیا جائے گا کیونکہ ہر بلاک کا سائز ہے۔



07:28:11

ایک بائٹ جس میں ہمارا سنگل کریکٹر محفوظ کیا جا سکتا ہے، ہر بلاک کا اپنا ایڈریس ہوگا اور یہ تمام ایڈریسز مسلسل ہوں گے کیونکہ سٹرنگ میموری کے اندر صرف ایک کریکٹر اری ہے، اس لیے کریکٹر اری کی میموری مسلسل ہے، یعنی یہ مسلسل ہے، اس لیے سٹرنگ کی میموری بھی مسلسل رہے گی اور ہر میموری بلاک کے اندر ہم ایک انفرادی کریکٹر کو اسٹور کرتے ہیں، لیکن اس میں ایک خاص بات یہ ہے کہ اگر ایک null کریکٹر ہو تو میموری کے آخر میں i20e20 پر بھی محفوظ ہوتا ہے۔



07:28:42

اگر آخری حرف محل وقوع پر آتا ہے تو 2007 بھی ہماری سٹرنگ کا حصہ ہو گا جس کے اندر ہم بیس 0 کو محفوظ کر رہے ہوں گے جو کہ ہمارا null کریکٹر ہے، اس طرح ہماری سٹرنگ میموری میں محفوظ ہو جاتی ہے۔ اب ایک پریکٹس سوال کرتے ہیں۔ ہمارا سوال کہتا ہے کہ ایک سٹرنگ کاٹیں، پہلا نام اور آخری نام، یعنی یہاں دو سٹرنگ بنانے ہوں گے، ایک کو پہلے نام کا نام لینا ہوگا، ایک کو صارف کی تفصیلات کو ذخیرہ کرنے کے لیے آخری نام کا نام لینا ہوگا اور لوپ کا استعمال کرتے ہوئے تمام حروف کو پرنٹ کرنا ہوگا، یعنی ہمیں پہلے نام کے نام سے سٹرنگ بنانا ہوگی۔



07:29:15

جس کے اندر ہم کوئی بھی ویلیو محفوظ کر سکتے ہیں مثال کے طور پر فرض کریں کہ ہم نے شردھا کو ذخیرہ کیا ہے، تو ہم آخری نام کے ساتھ ایک اور سٹرنگ بنائیں گے، آخری نام کے اندر بھی ہم کوئی بھی ویلیو ذخیرہ کر سکتے ہیں، فرض کریں کہ ہم نے کھاپ کو ذخیرہ کر لیا ہے، اور اب ہم ان دونوں قدروں کو لوپ کی شکل میں پرنٹ کریں گے، ہم ان کو لوپ کی شکل میں کیسے پرنٹ کریں گے، ہم ہر ایک کیریکٹر کو کتنی دیر تک لوپ کے اندر پرنٹ کرتے رہیں گے، اس طرح ہماری لوپ کی حالت کتنی دیر تک چلتی رہے گی۔ کہ جب تک ہمارا کردار صفر کردار کے برابر نہیں ہوتا، ہم کب تک ایک تار کو بار بار عبور کر سکتے ہیں۔



07:29:49

پہلے، جب تک ہمارا null کریکٹر نہیں آتا، مثال کے طور پر، اگر ہم نے اپنا سٹرنگ S H R A D H A لیا ہے، تو خود بخود اس کے آخر میں بیک سلیش ہو جائے گا، اس لیے سب سے پہلے ہم اس کریکٹر پر آئیں گے، اسے پرنٹ کروائیں گے، پھر ہم اس کریکٹر پر آئیں گے، اس کو پرنٹ بھی کروائیں گے، اور اس طرح ہم آگے بڑھتے رہیں گے اور اس کریکٹر کے پرنٹ ہونے تک ہم اپنا کام کرتے رہیں گے اور اس کریکٹر کی پرنٹنگ کا کام کرتے رہیں گے۔ اس کا مطلب ہے کہ ہم ایک C پوائنٹر یا ایک I بنائیں گے اور یہ I ایک آئٹم معاملہ یا s ہوگا۔



07:30:24

یہ کیا کرے گا، یہ لوپ لگا کر آگے بڑھے گا اور جیسے ہی s کی ویلیو s بن جائے گی، یعنی null کریکٹر، لوپ ختم ہو جائے گا اور ہمیں null کریکٹر پرنٹ نہیں ملے گا اور آخر میں، ہمیں اپنی مکمل سٹرنگ پرنٹ ہو چکی ہوگی۔ آئیے کوڈ کی مدد سے ایک بار اس کا تصور کریں اور دیکھیں کہ یہ کیسے ہوگا۔ سب سے پہلے، دو ویری ایبلز بنائیں، پہلے ہم اس میں اپنا پہلا نام اور اپنی ویلیو محفوظ کریں گے، پھر ہم اپنا آخری نام بنائیں گے اور اس میں اپنی ویلیو بھی اسٹور کریں گے۔ اب ہم کیا کریں، ایک الگ فنکشن بنائیں۔



07:30:55

اپنی سٹرنگز پرنٹ کروانے کے لیے اب void پرنٹ سٹرنگ کا استعمال کریں اس سٹرنگ کو فنکشن میں کیسے پاس کریں، اسے ایک عام کریکٹر اری کی طرح پاس کریں، آئیے یہاں کریکٹر array لکھیں اور یہاں ہمیں Rekha کا سائز بھیجنے کی ضرورت نہیں ہے کیونکہ سٹرنگ کے بارے میں ایک خاص بات یہ ہے کہ یہ ختم ہوتی ہے جہاں null کریکٹر آتا ہے، ایک نارمل ارے کے اندر ہمیں نہیں معلوم کہ ارے کے اندر کتنے عناصر ہوتے ہیں، لیکن جیسے ہی سٹرنگ کے اندر یہ کریکٹر کہاں آتا ہے، ہمیں پتہ چل جائے گا۔ اس کا مطلب ہے ہمارے



07:31:24

سٹرنگ ختم ہو گئی ہے لہذا ہم یہاں سائز کو پاس نہیں کریں گے۔ آئیے اس فنکشن کو void پرنٹ سٹرنگ لکھتے ہیں جس کے اندر ہماری سٹرنگ ہوگی۔ اب اپنے فنکشن کے اندر ہم ایک لوپ بنائیں گے۔ آئیے لوپ کو انٹیجر aa سے شروع کریں جو صفر سے شروع ہو رہا ہے اور ہر بار aa پلس پلس بنتا رہے گا۔ اب اس شرط کو کچھ دیر کے لیے ملتوی کر دیں اور اندر کیا کریں گے؟ ہر بار ہم پرنٹ ایف کر کے پرنٹ کرنے جا رہے ہیں. ہم اپنے کردار کیسے پرنٹ کریں گے؟ aa کے array کی مدد سے، اب ہم جانتے ہیں کہ array میں کسی مخصوص کردار کے لیے



07:31:59

انڈیکس میں جا کر ویلیو کیسے نکالیں؟ ہم صف کو بند کر دیتے ہیں، یعنی ہم مربع بریکٹ لگاتے ہیں۔ یہ ہمارا سرنی اشارے ہے۔ ہم پوائنٹس کی مدد سے بھی ایسا کر سکتے ہیں، لیکن سرنی اشارے، صف سے متعلق چیزیں، مجھے زیادہ آسان لگتی ہیں۔ پوائنٹس کے مقابلے میں، ہم اسے صف کی مدد سے کریں گے۔ اب یہاں کس شرط پر رکھنا ہے؟ شرط یہ رکھنی ہوگی کہ جب بھی کوئی نل پوائنٹر آرے کے انڈیکس پر آئے تو آپ کو وہاں پر عمل درآمد روک دینا چاہیے۔ لہٰذا یہ لوپ اس وقت تک چلے گا جب تک کہ صف کے انڈیکس میں کوئی null کردار نہ آجائے۔ تو اس کے لیے شرط لکھیں۔



07:32:32

اسے لیتے ہیں، جب تک ہماری a کی array ہمارے null کریکٹر کے برابر نہیں ہوتی، تو یہ شرط سب سے اہم ہے کہ ہمارا لوپ کب تک چلے گا، اگر ہم تمام کریکٹر پرنٹ کرنا چاہتے ہیں، تو جب تک null کریکٹر ہمارے انڈیکس پر نہیں آتا، جیسے ہی null کریکٹر آتا ہے، اس کا مطلب ہے کہ ہماری سٹرنگ ختم ہو گئی، آخر میں ہم کیا کریں گے، آخر میں ایک ہی کریکٹر پرنٹ کریں گے، کیونکہ یہاں ایک کے بعد دوسرا کریکٹر پرنٹ ہوگا۔ لائن، اس کے بعد اگلی لائن پرنٹ کی جا رہی ہے، اب اس فنکشن کو مین فنکشن سے کال کر رہا ہے۔



07:33:08

سب سے پہلے ہم پہلے نام کے لیے کال کریں گے اور پرنٹ سٹرنگ میں اپنا پہلا نام پاس کریں گے۔ اس کے بعد ہم اپنے آخری نام کے لیے کال کریں گے اور پرنٹ سٹرنگ میں اپنا آخری نام پاس کریں گے۔ ایک چیز جو ہم نے محسوس کی ہو گی وہ یہ ہے کہ یہاں صرف کریکٹر اری یعنی ہماری سٹرنگ کو پاس کیا گیا ہے۔ ہم نے سٹرنگ کے سائز کو پاس نہیں کیا ہے کیونکہ سائز کی ضرورت نہیں ہے۔ ہم جانتے ہیں کہ ہماری تار ختم ہو جائے گی جہاں null کریکٹر آتا ہے۔ ہم اسے عام صف میں نہیں جانتے۔ تو آئیے اسے محفوظ کریں اور اسے چلانے دیں۔ تو سب سے پہلے



07:33:38

پہلے ہماری سٹرنگ کا پہلا نام پرنٹ ہوا، اس کے بعد ہماری سٹرنگ کا آخری نام پرنٹ ہوا، اس طرح ہم اپنی سٹرنگ پرنٹ شدہ کریکٹر کو کریکٹر کے لحاظ سے حاصل کر سکتے ہیں، ہمیں ایک لوپ لگانا ہے اور لوپ میں جو خاص بات یاد رکھنی ہے وہ یہ ہے کہ جب تک null کیریکٹر نہیں آتا، اگلی چیز جس کے بارے میں ہم بات کریں گے وہ ہماری سٹرنگ فارمیٹ کی وضاحتیں ہیں، ہمیں سٹرنگ مل گئی ہے، اگر C میں کریکٹر پرنٹ کریں اور اسے فیصد کے طور پر لے کر کریکٹر کے طور پر لے لیں۔ سٹرنگ، پھر ہم ان پٹ کیسے لیں گے، ہمیں صرف کریکٹر کے لحاظ سے ان پٹ کریکٹر لینا پڑے گا، تو اور



07:34:11

ہم حروف کے بارے میں کچھ نہیں جانتے، لیکن ایک خاص فارمیٹ کی وضاحت ہے جسے فیصد s کہتے ہیں۔ یہ فارمیٹ تصریح ایک سٹرنگ ہے جس میں کچھ قدر محفوظ کی جاتی ہے۔ اب اگر ہم اسے پرنٹ کروانا چاہتے ہیں، تو بجائے اس کے کہ اسے کریکٹر کے حساب سے پرنٹ کیا جائے، ایک بہت آسان طریقہ ہے اور وہ ہے فیصد s لکھنا، یعنی اس فارمیٹ کی تفصیلات۔ تو یہ سب ہمارے پرنٹ f کے لیے کیا جاتا ہے، لیکن اگر ہم f کو اسکین کرنا چاہتے ہیں، تو ہم وہ بھی خود بخود فیصد کے ساتھ کر سکتے ہیں۔ مثال کے طور پر، فرض کریں کہ ہم نے کریکٹر کے نام کے نام کے ساتھ ایک سٹرنگ کی تعریف کی ہے۔



07:34:57

ہم نے سٹرنگ کا زیادہ سے زیادہ سائز 40 دیا ہے۔ اب اگر ہمیں اسے اسکین کرنا ہے تو f فیصدی کو اسکین کریں اور یہاں نام لکھیں۔ ہم نے یہاں نام کیوں لکھا، ہم نے نام کا پتہ کیوں نہیں لکھا، کیونکہ نام آخر کار ایک سٹرنگ ہے، کریکٹر اری کیا ہے، ایک ارے ہمیشہ پوائنٹر ہوتا ہے، اس لیے سٹرنگ کا نام بذات خود ایک پوائنٹر ہوتا ہے، یعنی نام ایک پوائنٹر ہوتا ہے، اس لیے یہاں آخر نام لکھنے کی ضرورت نہیں ہے، صرف نام ہی کافی ہے، اس طرح ہم اپنی مثال کے طور پر f scan کر سکتے ہیں اور ہم دونوں کی مثالیں بھی پرنٹ کر سکتے ہیں۔ اہم تقریب



07:35:32

ہم اندر کیا کریں گے ہم ایک سٹرنگ، کریکٹر کا نام بنائیں گے، اور اس سٹرنگ کو کچھ زیادہ سے زیادہ سائز دیں گے، فرض کریں 50۔ اب سب سے پہلے ہم scanf کے ذریعے اس نام کا ان پٹ لیں گے، پھر ہم اس نام کا آؤٹ پٹ printf، scanf percentage a اور پھر نام دیں گے، اور اس کے بعد ہم printf فیصد کریں گے a آپ کا نام ہے، اور ہم یہاں لکھیں گے۔ اب یہ پورا پرنٹ سٹرنگ فنکشن printf کی مدد سے ایک لائن میں آ گیا ہے، جب ہم نے اس میں فیصد s کا فارمیٹ سپیفائر لگایا تو آئیے اسے محفوظ کر کے دوبارہ پرنٹ کریں۔



07:36:08

چلو بھاگتے ہیں۔ اب سب سے پہلے ہمیں اپنا نام درج کرنا ہے۔ تو ہم نے نام درج کر دیا ہے اور اب جو مکمل سٹرنگ ہمارے لیے آئی ہے، اس میں آپ کا نام شامل ہو گیا ہے، اور یہ ہماری آؤٹ پٹ میں ہماری سٹرنگ ہے۔ لہٰذا جب بھی ہمیں scanf اور printf کی مدد سے سٹرنگ کو ان پٹ اور آؤٹ پٹ کرنا ہوتا ہے تو فیصد کو ہمیشہ استعمال کرنا ہوتا ہے۔ اب اس میں آپ ایک خاص بات پوچھ سکتے ہیں کہ جب ہم نے شردھا کا نام ڈالا تو یہاں جب scanf نے نام لیا تو اس میں پیچھے sl 0 نہیں ڈالا، تو یہ back sl 0 کے ساتھ سٹرنگ کیسے لگا؟



07:36:39

ہم نے یہ لے لیا ہے، اب یہاں ہم ایک بات پوچھ سکتے ہیں کہ دیدی، جب ہم نے اپنا نام ڈالا تو بیک s0 نہیں ڈالا، پھر C کو کیسے پتہ چلا کہ یہ سٹرنگ ہے، تو C خود بخود کیا کرتا ہے، جب بھی آپ فیصد s ڈالیں گے، جو بھی ڈالیں گے، اس کے بعد یہ خود بخود بیک s0 یعنی null کریکٹر ڈال دے گا، ہمیں خود بخود اس کے بارے میں فکر کرنے کی ضرورت نہیں ہے، ہمیں صرف کریکٹر ڈالنے کی ضرورت ہے۔ اگلا کام ہم ایک پریکٹس سوال حل کریں گے، اس میں دو حصے ہیں، دوسرے حصے سے ہمیں کچھ نئی چیزوں کا احساس ہوگا، اس لیے سب سے پہلے پہلے حصے سے



07:37:10

آئیے صارف سے اپنا پہلا نام درج کرنے اور اسے واپس پرنٹ کرنے کے لیے کہہ کر شروع کریں۔ یہ بہت آسان ہے، مجھے لگتا ہے کہ ہم پہلے ہی یہ کر چکے ہیں۔ اب ہم یہاں متغیر کو تھوڑا سا تبدیل کرتے ہیں اور اسے First Name کا نام دیتے ہیں۔ آئیے اسے کاپی کریں اور پھر یہ بھی ہمارا پہلا نام بن جائے گا۔ آئیے اسے محفوظ کریں اور اسے دوبارہ چلائیں۔ فرض کریں کہ اس بار ہم نے پہلا نام امان کے طور پر درج کیا ہے، تو وہ یہاں چھپ گیا۔ آپ کا نام امان ہے؟ اب اس کا دوسرا حصہ دوسرے حصے میں زیادہ دلچسپ ہے۔



07:37:39

لکھا ہے، اپنے پورے نام کے ساتھ یہ کوشش کریں۔ اب تک آپ نے پہلا نام درج کیا تھا، اب پورا نام درج کریں، یعنی پہلا نام اور آخری نام بھی۔ آئیے اسے بھی آزماتے ہیں۔ آئیے اس حصے پر تبصرہ کریں اور ایک نئی سٹرنگ بنائیں۔ 100 حروف کا مکمل نام۔ سب سے پہلے، ہم پورا نام اسکین کریں گے۔ پورے نام کا فیصد۔ اس کے بعد، ہم اسے پرنٹ کریں گے. آپ کا پورا نام فیصد کا پورا نام ہے۔ اب، آئیے اسے محفوظ کریں اور چلائیں۔ سب سے پہلے ہمیں اپنا پورا نام درج کرنا ہوگا۔ داخل ہونے پر، ہم یہاں ایک چیز دیکھیں گے کہ آپ کا پورا نام درج ہے۔



07:38:16

صرف پہلا نام درج کیا گیا، جس کا مطلب ہے کہ اسپیس کے بعد جو بھی ہے، اس نے اسے داخل نہیں کیا، تو یہاں ہم ایک خاص خاصیت سیکھتے ہیں کہ scanF ملٹی ورڈ سٹرنگز کو ان پٹ نہیں کر سکتا، یعنی اگر آپ ایک سٹرنگ کے اندر ایک سے زیادہ لفظ ڈالتے ہیں جیسے کہ 'یہ ایک جملہ ہے' تو یہ صرف اس 'یہ' کو داخل کر سکے گا، جیسے ہی کوئی اسپیس آئے گی اور اس کے بعد چیز داخل ہوگی، اس کے بعد یہ scanF اس حصے میں داخل ہو جائے گا، اس لیے یہ scanF اس حصے میں داخل نہیں ہوگا۔ اس کی کمزوری یہ ہے کہ یہ ایک سے زیادہ الفاظ کے تار نہیں ڈال سکتا



07:38:51

یہ ان میں داخل نہیں ہو سکتا جن میں متعدد الفاظ ہیں کیونکہ یہ خالی جگہوں کو ٹریک نہیں کر سکے گا۔ تو یہاں ہم دو خاص فنکشن استعمال کریں گے، جن میں سے پہلے get s اور پھر s ڈالیں۔ تو یہ ہماری تصویر میں آتے ہیں۔ اب get s کی قدر میں کمی آئی ہے، تو اس کی جگہ ہم یہاں f gets استعمال کریں گے۔ اگر ہم ان تینوں کو تفصیل سے پڑھیں تو ہمارے پاس سٹرنگ کے تین فنکشن ہیں۔ جب بھی ہم کسی سٹرنگ کو ان پٹ یا آؤٹ پٹ کرنا چاہتے ہیں، فیصد s ہمارا فارمیٹ اسپیفائر ہے۔ اسکین ایف کی کمزوری یہ ہے۔



07:39:22

یہ کثیر الفاظ تک رسائی حاصل کرنے کے قابل نہیں ہے، فرض کریں کہ ہماری سٹرنگ ایک مکمل جملہ یا مکمل پیراگراف ہے، تو یہ نہیں آ سکے گا، یہ صارف کے ذریعے کبھی داخل نہیں ہو سکے گا، اس لیے وہاں ہم ایک فنکشن استعمال کرتے ہیں جسے gets کہتے ہیں۔ کیا حاصل ہوتا ہے یہ ان پٹ کے طور پر ایک سٹرنگ لیتا ہے، اس کا مطلب ہے کہ ہم ایک سٹرنگ کریکٹر ST کی وضاحت کریں گے جس کے لیے ہم زیادہ سے زیادہ سائز 100 دیں گے، اب اگر ہم اس سٹرنگ کو یہاں لکھیں گے تو گیٹس ہماری سٹرنگ کو ان پٹ کرے گا اور جو s ڈالے گا، put s ہماری سٹرنگ کو آؤٹ پٹ کرے گا۔



07:39:53

بس ہمیں put s sr لکھنا ہے، یہ ہماری سٹرنگ کو آؤٹ پٹ کرے گا اور اگر اس سے پہلے ہمیں s atr مل جائے تو یہ ہماری سٹرنگ کو ان پٹ کرے گا لیکن یہاں get s فنکشن ایک خطرناک فنکشن ہے اور پرانا فنکشن ہے، اس کی وجہ سے بہت سے سافٹ ویئر ہیک ہو جاتے ہیں کیونکہ get s سے پتہ نہیں چلتا کہ atr کا زیادہ سے زیادہ سائز کیا ہے، اس لیے اس گیٹس کی وجہ سے C 1th کے ورژن میں مکمل طور پر استعمال نہیں کیا گیا، یہاں تک کہ گیٹس کو مکمل طور پر ہٹا دیا گیا ہے۔ میرے سسٹم پر اس کا کوئی استعمال نہیں ہے۔



07:40:27

میں نے جدید ترین C انسٹال کیا تھا، آئیے اسے ایک بار آزمائیں اور دیکھیں کہ ہمارے گیٹس اور پوٹس کیسے کام کریں گے۔ ہم نے 100 کا ایک نام بنایا ہے، اب ہم کیا کریں گے، ہم اس کے لیے ان پٹ لیں گے، سب سے پہلے ہم صرف get s اور atr لکھیں گے، پھر ہم put s اور atr لکھیں گے، ہم اسے محفوظ کریں گے، آئیے نام بدل کر atr کرتے ہیں۔ اب اسے ایک بار چلائیں، جیسے ہی ہم نے اسے چلایا، ایک وارننگ آئی کہ اس پروگرام میں gets استعمال ہوتا ہے جو کہ غیر محفوظ ہے، اس لیے get s استعمال نہیں کرنا چاہیے، لیکن پھر بھی ہم اپنی سٹرنگ میں کچھ ڈالتے ہیں، ہیلو ورلڈ اور ہماری



07:41:01

ہیلو ورلڈ ایک کے طور پر واپس آیا تو گیٹس نے کیا کیا، اس نے پوری ہیلو ورلڈ لے لی، اس کا مطلب ہے کہ اس نے جگہ کے بعد چیز بھی لے لی اب ہم یہاں کیا کریں گے، ہم اپنا پورا نام درج کریں گے اور دیکھیں گے کہ مکمل نام کیسے درج کیا جائے، سب سے پہلے ہم اپنا پہلا نام لکھیں گے، پھر ہم اپنا آخری نام لکھیں گے، ایک اچھا طالب علم ہے، حقیقت میں ہم پوری لائن لکھتے ہیں، تو اب یہ کیا ہے کہ جب اس لائن کو ہم نے پرنٹ کرنے کے لیے مکمل کیا تو اس نے کیا کیا؟ ایک سے زیادہ الفاظ کے جملے یا ایک سے زیادہ الفاظ کے تار لیں۔



07:41:30

تو ہم get s استعمال کریں گے اور s ڈالیں گے۔ اب get s خطرناک اور قدرے پرانا ہے، اس لیے اس کی جگہ ایک اور فنکشن ہے جسے F gets کہتے ہیں۔ F get s کا ایک فارمیٹ ہے، یہ ایک اضافی چیز ہے جو شاید کالج میں بہت سے طلبہ کو نہیں پڑھائی جاتی یا آپ اسے عام طور پر نہیں دیکھتے، لیکن میں نے سوچا کہ اگر میں یہ چیز پڑھاؤں تو اس کے ساتھ یہ چیز بھی پڑھانی چاہیے۔ تو F get s میں، سب سے پہلے ہم اپنی سٹرنگ داخل کرتے ہیں، جو بھی سٹرنگ ہم داخل کرنا چاہتے ہیں، پھر ہم اس سٹرنگ کا سائز درج کرتے ہیں جو زیادہ سے زیادہ حروف کی تعداد ہے جو ہم داخل کر سکتے ہیں۔



07:41:59

آپ اس کے بعد اپنی فائل کا نام رکھ سکتے ہیں۔ اب اس فائل کا نام کیا ہے؟ یہاں کیا رکھا جائے؟ آئیے اسے ابھی کے لیے بھول جائیں اور اس فائل کے نام کی جگہ STD IA لگائیں گے۔ آپ کو صرف یہ چھوٹی سی لائن لکھنی ہے۔ اسے معیاری ان پٹ کہا جاتا ہے۔ تو یہ کیا ہے، ہم یہ کیوں لکھ رہے ہیں، ابھی اس طرف توجہ نہ دیں۔ بس SDD IA ڈالیں۔ جب بھی آپ F GET S استعمال کرنا چاہتے ہیں، تو F GET S کیا کرتا ہے، جب n -1 حروف ان پٹ ہوتے ہیں اور نئی لائن میں ترمیم ہوتی ہے تو یہ رک جاتا ہے، یعنی آپ اپنا مکمل لفظ، مختلف الفاظ لکھتے رہیں گے۔



07:42:28

آپ لکھتے رہیں گے، جیسے ہی آپ انٹر دبائیں گے یا جیسے ہی آپ n -1 کے لیے یہاں دیے گئے سائز سے ایک چھوٹا حروف داخل کریں گے، تو آپ کا جملہ، آپ کا سٹرنگ وہیں ختم ہو جائے گا۔ اس کی مثال ایک بار دیکھتے ہیں، یہاں gets کے بجائے na f gets لکھیں، ATR لکھیں، پھر ATR میں ہم 100 لکھیں گے اور اس کے بعد STD aa لکھیں گے، چلو محفوظ کریں اور چلائیں، اس بار پھر اپنا پورا لفظ درج کریں، یہ واپس آجاتا ہے، اب یہ کیا کرتا ہے، push خود بخود اگلی لائن دیتا ہے۔



07:43:00

پرنٹ کرنے کے بعد آپ نے جو پرنٹ کرنا تھا وہ پرنٹ کر دیا، اب آپ کا کرسر اگلی لائن پر آ گیا ہے اور اس کے بعد سے واپسی صفر ہو گئی ہے، اس لیے ہماری پروگرامنگ یہاں ختم ہو جاتی ہے، اس لیے جب بھی ہم put ast ڈالتے ہیں تو ہمیں بیک سلیش اینڈ لگانے کی ضرورت نہیں ہوتی کیونکہ اگلی لائن خود بخود آجائے گی، اس طرح ہمارا get s put s اور f آپ کو کام کرنے کی طرح سیکھنے کو ملے گا، اس طرح ہماری چیزیں سیکھ جائیں گی۔ پوائنٹس، اسی طرح ہماری تاریں بھی پوائنٹس ہیں کیونکہ اس کے پیچھے



07:43:29

یہ بہت منطقی جواب ہے۔ اگر صف ایک پوائنٹر ہے، تو سٹرنگ کیا ہے؟ سٹرنگ بھی ایک کردار کی صف ہے، لہذا بالآخر یہ ایک پوائنٹر بھی ہے۔ یہ بہت آسان چیز ہے۔ جیسا کہ ہم اپنی صف کے لیے کیا کرتے تھے، ہم نے int نامی ایک صف بنائی۔ ہم اسے اس طرح بنا سکتے ہیں، ہم اس میں سائز لکھیں گے یا اس طرح بھی بنا سکتے ہیں۔ اسی طرح، ہم اپنی سٹرنگ کو اری نوٹیشن کے ساتھ ساتھ پوائنٹر نوٹیشن کے ساتھ بھی بنا سکتے ہیں۔ اگر ہمیں پوائنٹر اشارے کے ساتھ سٹرنگ بنانا ہے تو ہم اس کے لیے کیا کریں گے، اس کے لیے ہم صرف کریکٹر پوائنٹر لکھیں گے اور پھر لکھیں گے۔



07:44:02

اے ٹی آر یا جسے ہم اپنی سٹرنگ کا نام دینا چاہتے ہیں اور اس کے بعد ہماری پوری سٹرنگ، یہ سٹرنگ کو میموری میں محفوظ کر لیتی ہے اور تفویض کردہ ایڈریس کریکٹر پوائنٹر SDR میں محفوظ ہو جاتا ہے۔ تو یہ ہیلو ورلڈ، ہماری پوری ہیلو ورلڈ ہماری میموری میں محفوظ ہو جائے گی، جس کے آخر میں ہمارے پاس بیس 0 ہوگا اور پھر اس کا ایڈریس، یعنی پہلے انڈیکس کا ایڈریس، اس انڈیکس کا ایڈریس، اس ایڈریس کی طرف ایس ڈی آر کی طرف اشارہ کرے گا، اس لیے ہماری سٹرنگ بالآخر ایک پوائنٹر ہے کیونکہ یہ اپنے آپ میں ایک کریکٹر اری ہے۔ اب



07:44:35

کریکٹر اری اور پوائنٹر میں بنیادی فرق ہے۔ یہ فرق کیا کہتا ہے؟ یہ فرق کہتا ہے کہ اگر آپ پوائنٹر کی مدد سے کسی سٹرنگ کو ڈیفائن کرتے ہیں، تو آپ سٹرنگ کو دوبارہ شروع کر سکتے ہیں، یعنی آپ اس سٹرنگ کی ویلیو کو آج کی طرح تبدیل کر سکتے ہیں اگر ہم نے سٹرنگ کے اندر "hello world" کو ذخیرہ کیا ہے، تو کل ہم صرف "hello" کو سٹرنگ کے اندر ذخیرہ کر سکتے ہیں اور اس کے بعد اس کی قدر کو تبدیل کر کے ہم صرف "world" کو اس کے اندر محفوظ کر سکتے ہیں، لیکن اگر ہم array کے اندر استعمال کریں گے، تو ہم ہمیشہ "world" کو استعمال نہیں کریں گے۔



07:45:05

دوبارہ ابتداء کی تعریف کریں سب سے پہلے، آئیے ایک سٹرنگ بنائیں، تو ہم اسے کریکٹر پوائنٹر کے مطابق بنائیں گے، کیا تبدیلی کر سکتے ہیں ہم اس میں ہیلو ورلڈ ڈالیں گے، اب اسے پرنٹ کرتے ہیں، یہاں دھکا کے ساتھ کین چینج لکھتے ہیں اور اس کے بعد اس سٹرنگ کو بھی تبدیل کرتے ہیں، اس طرح جیسے ہی ہم سٹرنگ کو چیک کرتے ہیں، فرض کریں کہ ہم نے اسے بنایا ہے، اور پھر ہم اسے محفوظ کر سکتے ہیں، اس کے بعد ہم اسے تبدیل کر سکتے ہیں۔ سب سے پہلے ہماری سٹرنگ ہیلو ورلڈ تھی، اس لائن نے کیا کیا، پرنٹ شدہ ہیلو ورلڈ کو دھکا دیا، پھر ہم نے اسے تبدیل کر کے محفوظ کر لیا۔



07:45:44

اس نے ہیلو کیا، اس نے کیا کیا؟ اس نے پھر ہیلو پرنٹ کیا کیونکہ حروف کی قدر بدل سکتی ہے۔ اب ہمیں ایک اور سٹرنگ بنانی چاہیے اگر کریکٹر نہیں بدل سکتے تو ہم ڈیفائن کر سکتے ہیں اس طرح نہیں بدل سکتے، ہم اس میں ہیلو ورلڈ بھی ڈال دیں گے۔ ہیلو ورلڈ ڈال کر ہم اسے جانچ سکتے ہیں جیسے تبدیل نہیں ہو سکتا، لیکن اگر ہم can't کی ویلیو کو ہیلو کل میں تبدیل کرنا چاہتے ہیں، تو اب یہ C کمپائلر ہمیں ایسا نہیں کرنے دے گا اور ایک سرخ لکیر دکھائے گا کیونکہ اظہار ہمارے کریکٹر ارے کی تبدیل شدہ ویلیو ہونا چاہیے جب array



07:46:19

اگر نوٹیشن array میں آجائے تو ہم اس میں ترمیم نہیں کر سکتے، وہ ویلیو جوں کی توں رہے گی، لیکن اگر آپ اس میں ترمیم یا تبدیلی کرنا چاہتے تھے تو آپ کو کریکٹر پوائنٹر استعمال کرنا چاہیے تھا، پھر جب بھی آپ کریکٹر پوائنٹر یا اری نوٹیشن والی سٹرنگ ڈکلیئر کرتے ہیں تو تھوڑا سا فرق ہوتا ہے، اگلی بات ہم اس پر کریں گے، اس میں ہمیں سوال نمبر 49 کو حل کرنا ہے، صارف کا نام پرنٹ کرنے کے لیے پروگرام نمبر 49 کو پرنٹ کرتا ہے۔ اس کی لمبائی، صارف سے ایک سٹرنگ لینی ہوگی جس کا نام صارف کا نام ہوگا اور پھر ہم اس کی لمبائی داخل کریں گے۔



07:46:52

ہم اسے اس طرح کریں گے کہ مثال کے طور پر ہم ایک سٹرنگ، کریکٹر کا نام بنائیں، فرض کریں کہ سٹرنگ سائز 100 کی ہو سکتی ہے، پھر سب سے پہلے ہم F gets سے سٹرنگ کا ان پٹ لیں گے، ہم نام 100 لکھیں گے اور اس کے بعد std میں یا اس میں سادگی کے لیے ہم صرف پہلا نام ڈالیں گے اور آخری نام نہیں کیونکہ پھر درمیان میں ایک جگہ ہے، اس لیے ہم صرف نام رکھیں گے، اس لیے ہم صرف نام رکھیں گے۔ اس کی لمبائی پرنٹ کرنا چاہتے ہیں، تو فرض کریں کہ صارف نے داخل کیا ہے ہمارے پاس S HR A D A ہے اور مرتب کرنے والا خود بخود بیک سلیش 0 کو اس کے پیچھے لگا دیتا ہے۔



07:47:28

تو ہم کیا پرنٹ کرنا چاہتے ہیں؟ ہم 1 2 3 4 5 6 7 پرنٹ کرنا چاہتے ہیں۔ ہم ان کو پچھلے زیرو شمار نہیں کریں گے۔ تو چھپنے کے بعد جو طوالت آنی چاہیے وہ ہمارے پاس آنی چاہیے۔ اگر صارف اس میں بھی بیک سلیش صفر داخل کرتا ہے تو ہمیں کتنی لمبائی حاصل کرنی چاہیے۔ طوالت ہمارے پاس آنی چاہیے۔ لہذا ہمیں null کردار شمار کرنے کی ضرورت نہیں ہے۔ باقی تمام حروف کو شامل کرنے کے بعد ہمارے صارف کے نام کی لمبائی کتنی ہوگی؟ تو آئیے ایک پروگرام بناتے ہیں۔ سب سے پہلے، آئیے نام کے نام سے ایک سٹرنگ بنائیں۔ اس کے بعد اسے استعمال کریں۔



07:48:02

چلیں f gets name 100 std لیتے ہیں اب اوپر ایک فنکشن بناتے ہیں جس کی لمبائی گنتی ہے ہم اس میں گنتی کی لمبائی ڈالیں گے، یہ ضروری نہیں ہے کہ اپنے کریکٹر کا نام یا کریکٹر اررے بتائیں یہ ضروری نہیں ہے، کل اگر ہمیں کسی جملے کی لمبائی معلوم کرنی ہو تو ہم اس فنکشن کو اس کے لیے بھی استعمال کر سکتے ہیں تو یہ ضروری نہیں ہے کہ یہ صرف کل نام کی لمبائی کا حساب لگائے یا کسی بھی حرف کی لمبائی کا حساب لگا سکے۔ اس فنکشن کی وضاحت کریں void infact یہاں سے ہماری لمبائی ہے۔



07:48:35

جب یہ واپس آجائے تو آئیے int لکھتے ہیں int شمار کی لمبائی کیریکٹر صف کے طور پر۔ اب ہمیں طوالت کے لیے حروف کی گنتی کرتے رہنا ہے جب تک کہ ہم ایک null کریکٹر کے سامنے نہ آجائیں۔ تو ہم نے پہلے ہی اس قسم کا ایک لوپ بنا لیا ہے جب ہم سٹرنگ کریکٹر کو کریکٹر کے حساب سے پرنٹ کرتے ہیں۔ تو ہم نے کیا کیا ہم نے ہر ایک کردار کو ایک طرح سے اس وقت تک عبور کیا جب تک کہ ہم ایک null کردار میں نہ آئے۔ یہاں بھی ہم ہر ایک کردار کے ذریعے جائیں گے جب تک کہ ہم ایک null کردار کے سامنے نہ آجائیں۔ تو آئیے ایک متغیر کاؤنٹ بنائیں جو صفر سے شروع ہو گا اور پھر int aa = 0 کے لیے ایک لوپ لکھیں جب تک کہ aa کی ہماری صف ہمارے null کریکٹر کے برابر نہ ہو جائے۔



07:49:16

تب تک ہم i پلس پلس کرتے رہیں گے تو مجھے امید ہے کہ یہ سمجھا جائے گا کہ ہم i صفر سے شروع کریں گے اور بڑھتے رہیں گے جب تک کہ null کریکٹر نہیں آجائے گا اور aa پلس پلس کرتے رہیں گے اب ہم ہر بار کیا کریں گے، ہم گنتی کو بھی پلس پلس کریں گے تو ہم نے ہر بار گننے کے لیے پلس پلس کیوں کیا کیونکہ جب تک null کریکٹر نہیں آتا، گنتی بھی ہوتی رہے گی کیونکہ ہم پلس ہی پلس ہوتے رہیں گے کیونکہ ہم سب کیریکٹر پلس بنتے جائیں گے۔ شمار کرتے ہیں، آئیے اسے اپنے مین فنکشن سے پرنٹ ایف فیصد ڈی کے ساتھ کال کریں۔



07:49:48

لمبائی کاؤنٹ کی لمبائی ہے جس میں ہم اپنا نام پاس کریں گے، آئیے یہ کریں، محفوظ کریں اور چلائیں، سب سے پہلے ہمیں اپنی سٹرنگ ڈالنی ہے، سٹرنگ داخل کرنے کے بعد ہمیں لمبائی ملی، اس نے کیا کیا، لمبائی میں اس نے اب null کریکٹر کو بھی گن لیا، یہ null کریکٹر کو کیسے گنتی ہے کیونکہ کاؤنٹ پہلے سے ہی پلس پلس ہوتا جا رہا ہے، یعنی جب بھی ہم گنتے ہیں تو اس طرح سے گنتی کی ویلیو کے اندر اسی طرح گنتی ہوتی ہے جیسے کہ گنتی ہے بڑھتے ہوئے، اب آخر میں i پلس پلس بن جاتا ہے اور یہ null حرف شمار کرتا ہے۔



07:50:21

اس لیے آخر میں ہمیں گنتی - 1 واپس کرنے کی ضرورت ہے۔ لہذا اگر ہم گنتی - 1 واپس کریں گے تو ہی ہمیں صحیح شمار ملے گا۔ اب اگر نام بھیجیں تو لمبائی سات چھپتی ہے۔ اسے دوبارہ چلائیں۔ اب اگر ہم کوئی مختلف نام بھیجیں تو لمبائی چار پرنٹ ہوجاتی ہے۔ تو اس طرح ہم اپنے پاس موجود کسی بھی سٹرنگ کی لمبائی کا حساب لگا سکتے ہیں۔ ہم کردار بہ کردار جا کر اور چیزوں کو چیک کر کے اپنا فنکشن بنا سکتے ہیں۔ اگر، فرض کریں، ہمیں اس سٹرنگ میں یہ چیک کرنا ہے کہ صارف جس بھی نام میں داخل ہو رہا ہے اس میں i لفظ کتنی بار ظاہر ہوتا ہے یا



07:50:52

ہم h کے ظاہر ہونے کی تعداد کے لیے کریکٹر بائے کریکٹر لوپ بھی استعمال کرتے ہیں اور چیک کرتے ہیں کہ کون سا کریکٹر h کے برابر ہے اور پھر اس کی گنتی کے علاوہ۔ تو اس طرح بہت سے کیسز بنائے جا سکتے ہیں، بہت سے سوالات پیدا ہو سکتے ہیں جو آپ کا انٹرویو لینے والا آپ کو کسی اور طریقے سے دے سکتا ہے یا کالج والے کسی اور طریقے سے دے سکتے ہیں، لیکن طریقہ کیا ہے، لوپ میں کیریکٹر کے ذریعے گو کیریکٹر، آخر میں کیا شرط لگانی ہے جب تک کہ یہ null کریکٹر کے برابر نہ ہو جائے۔ ایک سٹرنگ میں تمام تقریباً 80 سوالات اس طرح حل ہوتے ہیں جس میں ہمیں سٹرنگ کے اندر کوئی بھی null کریکٹر تلاش کرنا ہوتا ہے۔



07:51:21

ایک خاص چیز کو چیک کرنا ہے۔ اگلا، آئیے لائبریری کے معیاری افعال کے بارے میں بات کرتے ہیں۔ اب، ہم نے طریقہ A نامی کلاس کے بارے میں پہلے ہی پڑھا تھا، جس میں ہم نے pow نامی فنکشن پڑھا تھا، جو m کو n کی طاقت پر لوٹاتا تھا۔ لہذا، اس میں، طریقہ A ہماری معیاری لائبریری تھی جس میں ریاضی کے افعال تھے۔ اسی طرح، سی میں، ایک معیاری لائبریری ہے جس میں سٹرنگ فنکشنز ہیں۔ ہم اسے strid A کا نام دیتے ہیں، اور اگر ہم اس کے افعال کو استعمال کرنا چاہتے ہیں، تو ہمیں اسے اوپر شامل کرنا ہوگا۔



07:51:50

پہلا فنکشن جس کے بارے میں ہم بات کریں گے سٹرنگ کی لمبائی ہے۔ ہم نے صرف ایک بڑا فنکشن لکھا جس میں ہم ایک ایک کریکٹر پر گئے اور لمبائی کا حساب لگایا۔ یہ پہلے سے بنایا ہوا فنکشن ہے۔ ہمیں اسے دوبارہ بنانے کی ضرورت نہیں ہے۔ تو سٹرنگ ڈاٹ کی لمبائی ایک فنکشن ہے جس میں ہم اپنی سٹرنگ لکھتے ہیں اور یہ ہمیں کریکٹرز کی کل تعداد دیتا ہے۔ اب یہ حروف کی تعداد کو شمار کرتا ہے لیکن null کردار کو خارج کر دیتا ہے۔ تو جس طرح ہم نے null character کو شمار نہیں کیا اسی طرح یہ بھی null character شمار نہیں کرتا۔ تو یہ ضروری ہے۔



07:52:22

جو چیز ہمیں یاد رکھنے کی ضرورت ہے وہ یہ ہے کہ ہماری تار کی لمبائی null کردار کو شمار نہیں کرتی ہے۔ یہ ہمیں حروف کی کل تعداد لوٹاتا ہے۔ آئیے اپنی لمبائی گننے کے بعد ایک بار اسے چیک کریں۔ اس بار، آئیے یہاں نام کی وضاحت کرتے ہیں۔ نام میں، ہم نے شردھا رکھا ہے اور اس بار، گنتی کی لمبائی کے بجائے، ہم ATR A کہلائیں گے۔ آئیے اوپر کی تار کی لمبائی شامل کریں۔ آئیے اپنی ہیڈر فائل کو شامل کریں جس میں سٹرنگ ڈی اے شامل ہے۔ اسے محفوظ کریں۔ یہاں، ہم نے اس تار کی لمبائی کو کہا ہے جس میں ہم نے اپنا نام پاس کیا ہے۔ اب، آئیے کوڈ چلاتے ہیں۔ اب اصل میں یہ STRL ایک تار ہے۔



07:53:01

لمبائی: یہ ایک غیر دستخط شدہ لمبا لوٹاتا ہے، جس کا مطلب ہے کہ یہ عددی قدر واپس نہیں کرتا ہے۔ یہ ایک غیر دستخط شدہ لمبائی کو لوٹاتا ہے۔ لیکن ہم اسے کاسٹ بھی ٹائپ کر سکتے ہیں، جس کا مطلب ہے کہ ہم لمبائی نامی ایک متغیر بنائیں گے اور اس لمبائی میں سٹرنگ کی لمبائی کے آؤٹ پٹ کو اسٹور کریں گے۔ پھر یہ انٹیجر قسم کا ہو جائے گا۔ اور پھر چلو پرنٹ کرتے ہیں اس متغیر کا نام لمبائی. پھر مرتب کریں اور دوبارہ چلائیں، پھر لمبائی سات ہے ہمارے لیے آؤٹ پٹ ہے۔ اب اگر ہم اپنی سٹرنگ بدلیں، فرض کریں ہم یہاں دوسرا نام لکھ دیں تو پھر ہمارا کیا ہوگا؟



07:53:31

لمبائی حروف کی تعداد ہے، ان سب کو جوڑا جائے گا، یعنی لمبائی اب چار ہو جائے گی۔ اب اگلا لائبریری فنکشن جس کے بارے میں ہم بات کریں گے وہ ہماری سٹرنگ کاپی ہے۔ سٹرنگ کاپی کیا کرتی ہے؟ اسے ATR CPY لکھا جاتا ہے۔ اس میں دو دلیلیں گزری ہیں۔ پہلی دلیل ہماری نئی سٹرنگ ہے۔ دوسری دلیل ہماری پرانی تار ہے۔ تو یہ پرانی سٹرنگ کی قدر کو نئی سٹرنگ میں کاپی کرتا ہے۔ فرض کریں کہ ہم نے دو تار بنائے ہیں۔ پہلا ہمارا کردار SR 1 ہے، اس کے اندر ہم نے Hello لکھا ہے اور دوسرا ہمارا کردار SR 2 ہے، اس کے اندر ہم نے لکھا ہے۔



07:54:03

یہ دنیا لکھی ہوئی ہے اب یہ ہماری نئی سٹرنگ ہے یہ ہماری پرانی سٹرنگ ہے اگر ہم SR CPY کہتے ہیں جس میں پہلے اپنا attr one پاس کریں اور پھر اپنا attr 2 پاس کریں تو ہمارے SR w کی ویلیو ہیلو ورلڈ سے بدل جائے گی یعنی پرانی ویلیو اس کے اندر کاپی ہو جائے گی دوسری سٹرنگ کی ویلیو پہلے کے اندر کاپی ہو جائے گی، دیکھتے ہیں کہ یہ کیسے چلتا ہے ہم اپنی پرانی سٹرنگ کے اندر دو پرانے کوڈ بنائیں گے۔ اس میں string پھر ہماری نئی سٹرنگ بنائیں



07:54:42

آئیے اس میں نئی ​​سٹرنگ اسٹور کرتے ہیں۔ اب آئیے STTR CPY کو کال کریں جس میں سب سے پہلے ہم اپنی نئی سٹرنگ اور پھر پرانی سٹرنگ کو پاس کریں گے اور اب ہم نئی سٹرنگ کی ویلیو پرنٹ کریں گے۔ آئیے اسے بچائیں اور چلائیں۔ تو جیسے ہی ہم نے نئی سٹرنگ پرنٹ کی، ہم نے پرانی سٹرنگ پرنٹ کر دی، نئی سٹرنگ نہیں کیونکہ سٹرنگ کاپی نے کیا کیا کہ اس نے پرانی سٹرنگ کی ویلیو لے کر اسے نئی سٹرنگ میں کاپی کر لی، اس طرح نئی سٹرنگ کی ویلیو بالآخر تبدیل ہو گئی اور اب وہ بدلی ہوئی ویلیو پرنٹ ہونے کے بعد ہمارے پاس آتی ہے۔



07:55:15

تو اس طرح ہماری سٹرنگ کاپی کام کرتی ہے اگلی لائبریری فنکشن جس کے بارے میں ہم بات کریں گے وہ ہے string concatenate یہاں، اگرچہ ہم لائبریری کے تمام اہم فنکشنز کے بارے میں بات کر رہے ہیں، ہم صرف چار پر بات کریں گے۔ سٹرنگ دا کے اندر لائبریری کے بہت سارے فنکشنز ہیں، اس لیے آپ کے لیے ہوم ورک یہ ہوگا کہ آپ خود جا کر لائبریری کے دیگر تمام فنکشنز کو تلاش کریں گوگل ٹرانسلیٹ کوئی اسپیس نہیں جی ہاں، اگر آپ نے ہیلو کے بعد کوئی اسپیس چھوڑی ہے تو درمیان میں ایک اسپیس آجائے گی لیکن کوئی جگہ خود بخود شامل نہیں ہو جائے گی۔



07:56:05

الفاظ ایک دوسرے کے ساتھ چپک کر ایک نئی تار بناتے ہیں، اسے کنکٹنیشن کہتے ہیں۔ آپ یہ لفظ بار بار سنیں گے اگر آپ پروگرامر ہیں، کوڈر ہیں اور آپ C کے بعد نئی زبانیں سیکھنے جائیں گے تو آپ کو یہ لفظ نہیں بھولنا چاہیے۔ String concatenate ایک فنکشن ہے جس میں ہم پہلی سٹرنگ اور دوسری سٹرنگ کو پاس کریں گے اور یہ پہلی سٹرنگ کو دوسری سٹرنگ کے ساتھ جوڑتا ہے۔ مثال کے طور پر، اگر ہم نے پہلی سٹرنگ کو ہیلو اور دوسری سٹرنگ کو ورلڈ بنایا ہے، تو اگر ہم اس فنکشن کو کہتے ہیں، تو اس کے بعد پہلی



07:56:43

سٹرنگ کی قدر بدل جائے گی اور ہیلو ورلڈ کے برابر ہو جائے گی۔ تو ایک طرح سے، یہ ہوا کہ سٹرنگ کنیکٹینٹ نے دوسری سٹرنگ لی اور پہلی سٹرنگ کے بعد اسے شامل کر دیا، تو پہلی سٹرنگ کی ویلیو اس کے برابر ہو گی۔ اب ایک خاص بات ہمیں یہاں ذہن میں رکھنی چاہیے کہ پہلی سٹرنگ میں دونوں سٹرنگز کو ذخیرہ کرنے کی گنجائش ہونی چاہیے، یعنی اگر پہلی سٹرنگ کا سائز پہلی سٹرنگ کی لمبائی ایک جمع لمبائی دو کے برابر ہے یا اس سے زیادہ ہے، تب ہی ہم اس کے اندر ویلیو محفوظ کر سکیں گے، ورنہ ایک ایرر آ جائے گا، اس لیے یہ سٹرنگ۔



07:57:15

جب بھی ہم پہلی سٹرنگ کا اعلان کریں گے، ہمیں اس کا سائز تھوڑا بڑا کرنا پڑے گا۔ ایک بار جب ہم اسے اصل میں کوڈ میں لکھ لیتے ہیں، آئیے دیکھتے ہیں۔ آئیے اس پر تبصرہ کریں۔ سب سے پہلے، ہم ایک کریکٹر سٹرنگ بناتے ہیں، پہلی سٹرنگ، جس کا سائز ہم 100 دیں گے۔ اس کے اندر، ہم ایک اسپیس کے ساتھ ہیلو اسٹور کر رہے ہیں۔ پھر ہم ایک اور سٹرنگ بناتے ہیں، دوسری سٹرنگ۔ اس میں ہمیں کوئی سائز دینے کی ضرورت نہیں ہے۔ اس میں، ہم دنیا کو ذخیرہ کریں گے. اب ہم کیا کریں گے، ATR CPY، جس میں ہم پہلے پہلی سٹرنگ پاس کریں گے، پھر دوسری سٹرنگ کو پاس کریں گے، اور پھر اپنی پہلی سٹرنگ پرنٹ کریں گے۔



07:57:47

آئیے صارف کو سٹرنگ منتقل کریں، اسے محفوظ کریں اور چلائیں۔ دوڑنے کے بعد، ہمیں آؤٹ پٹ میں صرف دنیا ملی کیونکہ ہم نے STTR CPY کہلاتے تھے جبکہ ہمیں concat نیٹ کرنا تھا، اس لیے ہم نے ATR CT concat کہا۔ اب پوری ہیلو ورلڈ ہمارے لیے پرنٹ ہو چکی ہے۔ ہیلو ورلڈ کیسے آیا، یہ ہیلو پہلے ہی پہلے سٹرنگ میں تھا، اب ہم نے پہلی سٹرنگ کے بعد دنیا کو جوڑ کر جوڑ دیا، لیکن فرض کریں کہ ہم نے یہاں یہ 100 نہ لکھا اور صرف اتنا لکھا تو کیا ہوتا؟ تو ایک بار پروگرام چلانے کے بعد



07:58:19

اگر ہم دیکھتے ہیں تو ہمیں ایک ایرر ملتا ہے اور پروگرام کبھی بھی عمل نہیں کرتا۔ کیوں؟ کیونکہ جب ہم نے بغیر سائز کے پہلی سٹرنگ کا اعلان کیا تو اس نے اس کے برابر سائز لیا، جس میں 1، 2، 3، 4، 5، 6 شامل ہیں۔ اس لیے پہلی سٹرنگ کا سائز فی الحال چھ ہے۔ ہم دنیا کو چھ کے اندر فٹ نہیں کر سکتے۔ لیکن جب ہم نے پہلی سٹرنگ کا سائز 100 دیا، تو اس کا مطلب ہے کہ ہیلو پہلے سے ہی اس کے اندر موجود ہے، اس کے بعد کچھ خالی جگہ بھی ہے، تو ہم اس کے اندر دنیا کو لاک اور شامل کر سکتے ہیں۔ لہذا جب بھی ہم جوڑنا چاہتے ہیں، ہمیں یہ یقینی بنانا ہوگا کہ یہ پہلی تار کے اندر ہے۔



07:58:49

ہمارے پاس کچھ خالی جگہ ہونی چاہئے جس میں دوسری سٹرنگ ڈالی جا سکتی ہے اور جوائن کی جا سکتی ہے۔ اگلا لائبریری فنکشن جس کے بارے میں ہم بات کریں گے وہ ہے ATR CMP۔ یہاں غلطی سے CPM لکھ دیا گیا ہے۔ یہ سی ایم ہے۔ یہ سٹرنگ موازنہ کے لیے ہے۔ لہذا ہم یہ دیکھنے کے لیے سٹرنگز کا موازنہ بھی کر سکتے ہیں کہ آیا ایک سٹرنگ دوسری سٹرنگ کے برابر ہے یا نہیں۔ درحقیقت، ہم اس بات کا بھی موازنہ کر سکتے ہیں کہ آیا ایک سٹرنگ دوسری سٹرنگ سے چھوٹی ہے یا بڑی۔ ہم موازنہ کیسے کریں گے؟ ہم ATR CMP کے اندر دو سٹرنگ پاس کرتے ہیں، ایک پہلی سٹرنگ اور دوسری دوسری سٹرنگ۔



07:59:18

String Now یہ فنکشن ایک عدد عدد لوٹاتا ہے۔ اگر یہ صفر لوٹاتا ہے تو اس کا مطلب ہے کہ ہمارے دونوں تار برابر ہیں۔ تو جیسے کہ اگر ہم ہیلو پاس کرتے ہیں اور دوسری سٹرنگ میں بھی ہم ہیلو پاس کرتے ہیں، تو اس کا مطلب ہے کہ ہمارا یہ فنکشن ہمیں صفر لوٹائے گا۔ اب اگر یہ کوئی مثبت قدر لوٹاتا ہے تو اس کا مطلب ہے کہ پہلی سٹرنگ دوسری سٹرنگ سے بڑی ہے اور اس کا انحصار کسی ایک ویلیو پر ہوگا۔ اس کی مثال یہ ہے کہ پہلی سٹرنگ میں ہم نے کیلے کو پاس کیا۔ دوسری سٹرنگ میں ہم نے ایپل کو پاس کیا، پھر یہ ایک مثبت قدر واپس کرے گا۔



07:59:47

اب جب بھی ہم کیلے اور سیب کی esca ویلیوز دیکھتے ہیں تو پہلے a آتا ہے، پھر b، پھر c، اس طرح سے esca ویلیوز بڑھتی رہتی ہیں، اس طرح کیلے کی esca ویلیو میں پہلے b کی قدر کا موازنہ a کے ساتھ کیا جائے گا، اگر یہ دونوں HH ہوتے تو دونوں کی قدریں ایک جیسی ہوتیں، پھر اگلے کریکٹر کا موازنہ کیا جائے گا، لیکن یہاں b کی قدر مختلف نہیں ہوگی، اس طرح پہلے کیریکٹر کی قدر مختلف نہیں ہے۔ اعداد، a کی قدر نمبروں میں کچھ ہوگی، اگر ہم ان دونوں کا فرق تلاش کریں، تو b کا esca کریکٹر ہوگا



08:00:17

بڑا ہے، ہمارا a چھوٹا ہے، تو وہ حروف منفی ہو جائیں گے جیسے کہ اگر ہم b کا ایک حرف دیکھیں، b = b، تو b کا s کریکٹر 66 ہے، تو یہاں 66 آئے گا، تو a 65 ہونا چاہیے، تو اندرونی طور پر جو ہو رہا ہے وہ 66 - 65 ہے، جس کا فرق + 1 نکلے گا، اس لیے نمبر کی قدر مثبت ہو جائے گی، اس لیے نمبر کا نمبر مثبت ہوگا۔ پہلی سٹرنگ کا مائنس esca، جب بھی ہمارے مختلف حروف آتے ہیں، اسی لیے جب بھی پہلی سٹرنگ بڑی ہو گی، دوسری سٹرنگ چھوٹی ہو گی۔



08:00:53

مثبت قدر پرنٹ کی جائے گی اور اس کے برعکس، یعنی اگر پہلی سٹرنگ چھوٹی ہے، اگر دوسری سٹرنگ بڑی ہے، تو ہمیں منفی قدر پرنٹ کی جائے گی۔ آئیے اس کی ایک مثال بھی دیکھتے ہیں، جیسے کہ اگر ہماری پہلی سٹرنگ L ہے، ہمارے پاس دوسری سٹرنگ ہے، کیلا، تو پہلے a میں بچ جائے گا، ہمارے پاس 65 ہے، b 66 کے طور پر بچ جائے گا، تو 65 - 66 ہمیں منفی 1 دے گا، لہذا چونکہ یہ ایک منفی قدر ہے، اس لیے ہمیں سٹرنگ کے موازنہ سے معلوم ہو جائے گا کہ ہماری پہلی سٹرنگ ہماری دوسری سٹرنگ سے چھوٹی ہے۔ یہ سب کوڈ کا استعمال کرتے ہوئے ایک ساتھ پرنٹ کیا جائے گا۔



08:01:26

اس کی تصدیق کریں۔ لہذا ہم پروگرامنگ میں جو بھی تصور سیکھتے ہیں، ہمیں ہمیشہ اس کی تصدیق کرنی چاہیے۔ ایسا نہیں ہونا چاہیے کہ ہم نے صرف تھیوری پڑھی ہو اور اس کا کوڈ نہ آزمایا ہو۔ تو سب سے پہلے ہم ایک کریکٹر سٹرنگ بناتے ہیں۔ پہلی سٹرنگ جس میں ہم L کو ذخیرہ کریں گے، پھر دوسری سٹرنگ بنائیں جس میں ہم اسے ذخیرہ کریں گے اور اب ہمیں فیصد D پرنٹ کریں کیونکہ یہ ایک عدد عدد ہوگا۔ موازنہ کے لیے ہم ST R C M P پرنٹ کریں گے جس میں ہم پہلے پہلی سٹرنگ پاس کریں گے، پھر دوسری سٹرنگ پاس کریں گے۔



08:02:01

ہاں، جب ہم محفوظ کرتے ہیں اور چلاتے ہیں، تو جو نتیجہ پرنٹ ہوتا ہے وہ -1 ہوتا ہے، جس کی توقع تھی کیونکہ a کی اکائی 65 اور b کی اکائی 66 ہے، اس لیے 65 - 66 ایک منفی قدر ہوگی، جو ظاہر کرے گی کہ پہلی سٹرنگ دوسری سٹرنگ سے چھوٹی ہے۔ اب اگر ہم ان اقدار کو تبدیل کریں، یعنی پہلے اپنی دوسری سٹرنگ کو پاس کریں، پھر ہماری پہلی سٹرنگ کو پاس کریں، اس صورت میں آؤٹ پٹ کیا ہو گا؟ اس صورت میں، آؤٹ پٹ ایک مثبت قدر ہوگی، یعنی + 1 + 1 آیا کیونکہ اب یہاں b - a ہوا ہے اور چلو ایک اور چھوٹی چیز کرتے ہیں، اس بار سٹرنگ کو h a a a اور یہاں پر تبدیل کریں



08:02:39

آئیے سٹرنگ h h a b بناتے ہیں یہاں ہم پہلی سٹرنگ کو پاس کرتے ہیں اور یہاں ہم اپنی دوسری سٹرنگ کو پاس کرتے ہیں Save and Run Now چلانے سے پہلے، اگر آپ خود سے بات کرنا چاہتے ہیں کہ آؤٹ پٹ کیا ہو گا، تو پہلی سٹرنگ میں h h ha a دوسری سٹرنگ میں h h h b ہے جو دونوں میں پہلا مختلف کریکٹر ہے، یعنی a اور b ہے تو پھر a کا esca minus کے 6 کا ہو جائے گا۔ b کا esca 66 ہے تو یہ بھی ہمیں ایک منفی قدر لوٹائے گا، آئیے اس کی تصدیق کرتے ہیں، یہ پرنٹ ہوگا -1 اور یہاں اگر



08:03:18

اگر ہم a اور b کو ہٹا دیں اور اب ان کا موازنہ کریں تو ہمیں صفر ملے گا کیونکہ دونوں تار ایک جیسے ہیں۔ لہذا، اگر ہم تاروں کا موازنہ کرنا چاہتے ہیں، تو ہم یہ کر سکتے ہیں۔ یہ ایک سٹرنگ موازنہ فنکشن ہے۔ اگر ہم حقیقی زندگی کے معاملات کو دیکھیں تو اسے کہاں استعمال کیا جا سکتا ہے؟ یہ استعمال کیا جا سکتا ہے اگر ہم ایک فنکشن بناتے ہیں جو ہماری لغت تشکیل دے رہا ہے. لغت کے اندر یہ ہوتا ہے کہ جو حروف حروف تہجی میں پہلے آتے ہیں، ان کی واحد قدریں بھی کم ہوں گی، اس لیے وہ ہماری لغت میں پہلے آتے ہیں اور باقی ہمارے بعد آتے ہیں۔



08:03:47

اگر ہم آتے ہیں تو ہم ان کو منفی قدر کے مطابق ترتیب دے سکتے ہیں، جن کی کم سے کم منفی قدر ہوتی ہے، یعنی جتنا زیادہ منفی ہوتا ہے، ڈکشنری میں جتنا پہلے آئے گا، اتنا ہی مثبت ہوگا، اتنا ہی بعد میں لغت میں آئے گا، اس طرح جب بھی حروف کا موازنہ کرنا ہو، کون سا حرف چھوٹا ہے، اسے ڈکشنری کے شروع میں اور جو بڑا ہے، اس کو ڈکشنری کے آخر میں ڈالیں گے، اس کے بعد ہم لغت کے آخر میں سوال ڈالیں گے۔ حروف استعمال کرنے والا صارف، یعنی اب تک ہم سٹرنگ کو بطور ان پٹ کیسے لے رہے تھے۔



08:04:16

تو ہم فیصد s کی شکل میں ان پٹ لے رہے تھے یا ہم f get s یا get s کر رہے تھے اب ہمیں کیا کرنا ہے ہمیں فی صد c کا ان پٹ لینا ہے یعنی کریکٹر بہ کریکٹر اس کے لیے ایک فنکشن بنائیں اور فنکشن کو ان پٹ سٹرنگ کا نام دیں یا اصل میں فنکشن بنانے کے بجائے اپنے مین فنکشن کے اندر مکمل پروگرام بنائیں سب سے پہلے ہم اس کی وضاحت کرتے ہیں کہ اس کریکٹر کو کون سا سٹرنگ ہو گا اور پھر ہم اس سٹرنگ کو پکڑیں ​​گے۔ وہ کردار جو ہمیں صارف سے بار بار اس کریکٹر میں داخل کرنا پڑتا ہے۔



08:04:45

ہم سرچ ان پٹ کریں گے اور اسے سٹرنگ کے اندر ایک ایک کر کے شامل کرتے رہیں گے تاکہ ہم اس وقت تک لوپ چلاتے رہیں جب تک کہ ہمارا کردار بیس کے برابر نہ ہو جائے۔ جب بھی ہم اپنی کنسول ونڈو میں کوئی بھی سٹرنگ ڈالتے ہیں تو کیا ہوتا ہے کہ ہم ایک کریکٹر، پھر دوسرا کریکٹر، پھر تیسرا کریکٹر، پھر چوتھا کریکٹر، پھر پانچواں کریکٹر اور آخر میں انٹر دبائیں۔ ہمیں اپنے کوڈ کے اندر، اپنے لوپ کے اندر کریکٹرز لگاتے رہنا ہے، جب تک کہ ہم اگلی لائن کے کریکٹر میں داخل نہ ہوں، اس لیے ہم اسے شرط بناتے ہیں۔



08:05:16

جب تک ہمارا کریکٹر بیس a یعنی اگلی لائن کے برابر نہیں ہوتا جب تک ہم انٹر نہیں دبائیں گے تب تک ہم کیا کریں گے، ہم f کو اسکین کریں گے، ہم f فیصد c کو اسکین کریں گے، ہمارا c ایک اور ویری ایبل i لے گا جو ہمارے انڈیکس کو ٹریک کرے گا تو ہم i کے ساتھ شروع کریں گے یہاں ایک ایک کریکٹر لیں گے اور اسے اپنی سٹرنگ کے اندر ایک ایک کرکے اسٹور کریں گے تو اب ہم اسے تھوڑا سا سمجھیں گے پھر i = i + sloop کریں گے۔ ہم نے ایک تار بنایا اس کے بعد ہم نے ایک کردار بنایا



08:05:50

ہمارا مقصد یہ ہے کہ صارف سے ایک ایک کریکٹرز لیں اور انہیں سٹرنگ کے اندر شامل کریں اور ہم اپنے ویری ایبل کی مدد سے اسٹرنگ کے انڈیکس کو کیسے ٹریک کریں گے۔ اب ہم ایک لوپ بنائیں گے، ہم ایک while لوپ بنا رہے ہیں، اس کے اندر شرط یہ ہے کہ جب تک ہمارا صارف انٹر نہ دبائے، ہمیں دیئے گئے تمام کریکٹرز کو سٹرنگ میں ڈال دیں، تو ہم سکینر سے ایک ایک کر کے کریکٹرز ان پٹ کے طور پر لیتے رہیں گے، اس کے بعد ہم کیا کریں گے، ہم انہیں سٹرنگ کے اندر شامل کریں گے اور سٹرنگ کے انڈیکس کو ایک ایک کرکے بڑھا دیں گے، چلو آخر میں اسے محفوظ کریں گے اور اب کیا کریں گے۔



08:06:21

ہمیں null کریکٹر کو خود aa کے attr کے اندر ڈالنا پڑے گا کیونکہ آٹومیٹک کمپائل اب null کریکٹر نہیں ڈالے گا کیونکہ null کریکٹر خود بخود فیصد c میں نہیں ڈالا جاتا بلکہ اسے فیصد s میں ڈالا جاتا ہے، اس لیے ہمیں null کریکٹر کو الگ سے ڈالنا ہو گا تاکہ یہ ظاہر ہو سکے کہ ایک سٹرنگ ہے، اس کے بعد ہم اپنی پوری سٹرنگ پرنٹ کر لیں گے، اسے چلانے کے بعد اسے بچانے کے لیے چلائیں گے۔ یہ وارننگ اس لیے کہ یہاں ہمیں ca کا ایڈریس ڈالنا تھا، اب ہم اپنی کوئی بھی سٹرنگ لگا سکتے ہیں، فرض کریں کہ ہم ہیلو ورلڈ ڈال دیں، تو



08:06:56

ہمارے لیے 'ہیلو ورلڈ' ایک کے طور پر پرنٹ ہونے کے بعد واپس آیا اور اس نے اس میں موجود خالی جگہوں کو بھی شمار کیا۔ لہذا، یہ فنکشن جو ہم نے خود بنایا ہے، یہ حصہ ہمارے گیٹس یا ہمارے F گیٹس کی طرح کام کرتا ہے، یہ پورے جملے میں اس وقت تک لگے گا جب تک کہ ہم جس سائز کو داخل کر رہے ہیں وہ 100 سے کم ہو، چاہے آپ اس میں ایک جگہ ڈالیں، کوئی خاص حرف لگائیں، ایک حرف اوپری کیس میں رکھیں، نمبر ڈالیں، یہ سب کچھ ان پٹ کے طور پر لے جائے گا لیکن جیسے ہی آپ انٹر دبائیں گے، اس میں ہمارا string ہونا بند ہو جائے گا۔



08:07:27

یہ کردار کو جوڑ دے گا۔ اگلا سوال جس کے بارے میں ہم بات کریں گے وہ ایک خاص ہے۔ یہ ایک سوال ہے جو میں نے خود بنایا ہے۔ ایک تصور ہے جسے سالٹنگ کہتے ہیں۔ جب بھی ہم ہیک کرتے ہیں، ہمارے پاس ورڈز کمپنیوں میں محفوظ ہوتے ہیں۔ تو، پاس ورڈ کس طرح محفوظ ہیں؟ وہ تکنیک جس کے ذریعہ انہیں محفوظ کیا جاتا ہے اسے سالٹنگ کہتے ہیں۔ فرض کریں کہ آپ نے پاس ورڈ ترتیب دیا ہے۔ پاس ورڈ آپ کا ہے۔ ٹیسٹ 1 2 3۔ یہ آپ کا پاس ورڈ ہے۔ اور کمپنی کے پاس ایک تار ہے۔ سٹرنگ کمپنی کا A B C ہے۔ تو نمک یہ ہے کہ کمپنی کا پاس ورڈ آپ کا ہے۔



08:08:03

یہ اسے لے گا اور اس میں نمک ڈالے گا، جس طرح ہم سبزیوں پر نمک چھڑکتے ہیں، اسی طرح جب بھی کمپنی پاس ورڈ محفوظ کرتی ہے، اس میں نمک چھڑک دیتی ہے۔ وہ بیچ میں کہیں بھی اپنا نمک چھڑک دے گا، اسے بے ترتیب طریقے سے کہیں بھی ڈال سکتا ہے اور پھر 1 2 3، اس طرح جب آپ کا پاس ورڈ محفوظ ہو جائے گا تو اس فارمیٹ میں محفوظ ہو جائے گا جس میں بیچ میں نمک آ گیا ہے، لہٰذا اب اگر ہیکر اسے ہیک کر بھی لے تو اسے معلوم نہیں کہ کمپنی کا نمک کیا تھا، وہ سوچے گا کہ یہ پورا پاس ورڈ آپ کا ہے، اس لیے وہ کبھی بھی آپ کے اکاؤنٹ میں داخل نہیں ہو سکے گا۔



08:08:34

کمپنی کا سسٹم ہیک ہو بھی جائے تو نمک کیا ہے؟ نمک ایک ایسی سٹرنگ ہے جسے ہم اپنا نارمل پاس ورڈ لگاتے ہیں اور کہیں بے ترتیب سٹرنگ لگاتے ہیں، اس کا فیصلہ کمپنی کرتی ہے، جیسے کل میں اسے Instagram2 پر، کل Google3 پر ڈالنا چاہتا ہوں، جس میں مجھے اپنا پاس ورڈ انڈیکس زیرو اور انڈیکس فائیو پر ڈالنا ہے، تو کمپنی کا نمک کچھ بھی ہو سکتا ہے، اسے آپ کے پاس ورڈ میں جس پوزیشن پر رکھا جائے گا وہ بھی کچھ بھی ہو سکتا ہے، اب ہمارا نمک یہ سوال ہی رہ گیا ہے۔ سوال کا کہنا ہے کہ صارف کی طرف سے a



08:09:18

پاس ورڈ درج کریں۔ صارف اپنا پاس ورڈ ڈالتا ہے اور اس کے اندر ہمارا سالٹ ڈالتا ہے، ہمارا 12th، آخر میں، یعنی صارف پاس ورڈ ڈالے گا اور آخر میں ہم سالٹ ٹوٹ ڈالیں گے اور اس کے بعد ہمیں نیا پاس ورڈ پرنٹ کر کے صارف کو واپس دینا ہوگا، تو ہم ایسا کیسے کریں گے، فرض کریں کہ صارف نے اپنا پاس ورڈ ڈالا، ٹیسٹ کریں اور ہمارا سالٹ t3 ہے، تو اب ہمیں پاس ورڈ کی نئی ویلیو دینا ہوگی، اس کا مطلب ہے کہ نئے پاس ورڈ کو سالٹ ایڈ کرنا ہوگا اور اس کی ویلیو ٹیسٹ ہوگی۔ tot، تو یہ ہمارا نیا پاس ورڈ بن جائے گا جو ہمیں صارف کو واپس دینا ہوگا، اس لیے اس کے لیے



08:10:00

ہم اس کے لیے ایک پروگرام لکھیں گے۔ ہم ایک فنکشن بنانے جا رہے ہیں۔ یہ فنکشن کیا کرے گا یہ ہماری سٹرنگ لے گا اور پھر ایک نئی سٹرنگ بنائے گا، نیا پاس ورڈ، جس میں یہ پرانی سٹرنگ کو کاپی کرے گا اور آخر میں ہمارے کردار کو شامل کرے گا۔ تو مین فنکشن کے اندر، سب سے پہلے، آئیے کریکٹر سٹرنگ بناتے ہیں۔ پاس ورڈ زیادہ سے زیادہ 100 حروف کا ہو سکتا ہے۔ ہم صارف سے اس پاس ورڈ کا ان پٹ لیں گے، یعنی اپنے پاس ورڈ کو اسکین کریں گے۔ اب اس پاس ورڈ کے اندر، ہم اس بات کو یقینی بنانے جا رہے ہیں کہ کوئی خالی جگہ نہیں ہے، لہذا ہم فیصد s استعمال کر سکتے ہیں اور پھر ہم ایک فنکشن کو کال کریں گے، سالٹیس، تو فنکشن



08:10:34

آئیے اسے بھی بنائیں۔ یہ فنکشن کچھ بھی نہیں لوٹائے گا، یہ صرف نیا پاس ورڈ پرنٹ کرکے آپ کو دے گا، اس لیے اس کی واپسی کی قسم باطل ہے۔ اس کے اندر نمک ہمارے پاس آئے گا۔ کریکٹر پاس ورڈ۔ آئیے اس فنکشن کو بنائیں، کریکٹر پاس ورڈ کی چھانٹی کو باطل کریں۔ سب سے پہلے، آئیے اپنی اسٹرنگ کی وضاحت کرتے ہیں جسے ہمیں شامل کرنا ہے۔ تو ہمارا کریکٹر سالٹ 3 پر ہے۔ اب آئیے ایک نیا کریکٹر، نیا پاس ورڈ بنائیں، اور اس کا سائز دوگنا دیں۔ لہذا، سب سے پہلے، ہمیں نئے پاس ورڈ کے اندر اپنا پاس ورڈ کاپی کرنا ہوگا، پھر اپنے نمک کو کاپی کرنا ہوگا.



08:11:11

تو سب سے پہلے سٹرنگ کاپی فنکشن استعمال کریں۔ ہم STTR CPY سٹرنگ کاپی میں پہلی سٹرنگ کے طور پر کیا پاس کریں گے؟ پہلی سٹرنگ جو ہم پاس کریں گے وہ ہمارا نیا پاس ورڈ ہے اور دوسری سٹرنگ ہمارا پاس ورڈ ہے۔ تو ATR CPY کیا کرے گا یہ ہمارے پاس ورڈ کی قدر نئے پاس ورڈ کے اندر ڈالے گا اور اسے کاپی کرے گا۔ اور اس کے بعد ہم STTR CT کو کال کریں گے۔ اب ہم concat کریں گے، اس کا مطلب ہے کہ ہم نئے پاس ورڈ کے اندر اپنے سالٹ کو concat کرنا چاہتے ہیں۔ یہ کیا کیا؟ ہم نے نئے پاس ورڈ کے اندر پرانا پاس ورڈ ڈال دیا اور کنیکٹینٹ نے کیا کیا؟ نئے پاس ورڈ کی قدر کاپی کی گئی تھی۔



08:11:49

ہم نے ویلیو ٹیسٹ پلس 123 بنایا ہے لہذا یہ ٹیسٹ 123 ہمارا نیا پاس ورڈ بن جائے گا اب ہم اسے پوٹس نئے پاس ورڈ کے طور پر پرنٹ کریں گے لہذا سالٹینی کے لئے ایک چھوٹا سا فنکشن اور اگر آپ خود اس کافی پیچیدہ فنکشن کو لکھنے کے قابل ہیں تو اس کا مطلب ہے کہ آپ منطقی چیزیں اور پروگرامنگ اچھی سطح پر جانتے ہیں لہذا اس فنکشن کے اندر ہم نے لائبریری کے دو فنکشنز استعمال کیے ہیں، ایک اسٹرنگ کو کاپی کرنے کے لیے اور دوسرا آسان کام ہم نے اسٹرنگ کو کاپی کرنے کے لیے کیا۔ دو لائنیں تو یہ



08:12:25

یہ ہماری لائبریری کے افعال کی طاقت ہے، لہذا آخر کار ہم اپنا نیا پاس ورڈ پرنٹ کروا لیں گے۔ مین فنکشن کے اندر ہم کیا کریں گے اس فنکشن کو کہتے ہیں، چھانٹی جس میں ہم اپنا پاس ورڈ پاس کریں گے، اسے محفوظ کریں گے اور اسے چلائیں گے، اپنا پاس ورڈ درج کریں گے، اسے ٹیسٹ کریں گے، تو ہمارے پاس ٹیسٹ میں نیا پاس ورڈ ہے، اگر ہم اسے دوبارہ چلاتے ہیں، تو اس بار فرض کریں کہ ہم نے اپنے کالج کا پاس ورڈ ڈالا ہے، اس بار ہمارا کالج پرنٹ ہو گیا۔ تو اس طرح لائبریری کے بہت سے فنکشنز کو استعمال کر کے ہم بہت سے دلچسپ فنکشنز بنا سکتے ہیں۔



08:13:00

ہم بہت ساری دلچسپ چیزیں بنا سکتے ہیں اور کوڈ بہت آسان ہو جائے گا کیونکہ آپ کو ایک ہی لائن میں مکمل فنکشن ملتا ہے۔ تو ہمارا سوال کچھ اس طرح ہے، سلائس کے نام سے ایک فنکشن لکھیں جو ایک سٹرنگ لیتا ہے اور انڈیکس n سے n پر سلائس سٹرنگ واپس کرتا ہے۔ آئیے اس کو ایک مثال سے سمجھتے ہیں۔ سلائس نام کا ایک فنکشن ہے، اس کا کام سٹرنگ لینا ہے، فرض کریں کہ ہم نے سٹرنگ ہیلو ورلڈ لی ہے، اور اس کے اندر ہمیں دو انڈیکس دیے جائیں گے، ایک n، ایک m۔ n کی قدر ہمیں دی گئی ہے۔



08:13:32

3 ہے m کی ویلیو 6 کے طور پر دی گئی ہے تو ہمیں ایک سٹرنگ واپس کرنی ہے جو n = 3 سے شروع ہوتی ہے اور m = 6 پر ختم ہوتی ہے یعنی اگر ہم اس سٹرنگ کے بارے میں بات کریں تو اس میں انڈیکس 1 2 3 4 5 6 7 8 ہے اور پھر ہمارا سلائس فنکشن سٹرنگ کو ان پٹ کے طور پر لے گا اور ہمیں آؤٹ پٹ دے گا تین سے O i h کی دنیا میں O string سے O sting تک۔ H E L L L R L D، اس کے اندر سے یہ aoid حصہ ہمیں واپس کر دیا جائے گا کیونکہ n = 3 انڈیکس سے شروع ہوتا ہے اور m = 6 انڈیکس پر ختم ہوتا ہے لہذا سلائس کا کام



08:14:17

یہ یہاں ہے، اس سٹرنگ کو یہاں سے سلائس کریں، جو پہلا سلائس آئے گا، اسے سلائس کریں، یعنی اسے کاٹ دیں، پہلا کٹ n = 3 پر بنے گا، دوسرا کٹ m = 6 پر بنے گا اور درمیان کا حصہ ہمیں واپس کر دیا جائے گا۔ تو اس کے لیے بھی، آئیے ایک فنکشن بنائیں، فنکشن کا نام دیں۔ یہ فنکشن کیا کرے گا، یہ ہمیں ہمارا حصہ واپس کرے گا، تو آئیے اسے void slice کا نام دیں، ہم اس کے اندر اپنا کردار پاس کریں گے، آئیے اس فنکشن کی بھی تعریف کرتے ہیں، void slice، ہم اس میں کریکٹر SR پاس کریں گے، اس کے ساتھ ایک انڈیکس n بھی آئے گا اور ایک انڈیکس m بھی آئے گا، تو آئیے ان کو بھی لکھتے ہیں۔



08:14:57

int n int m اب سلائس فنکشن کے اندر، آئیے ایک نئی سٹرنگ بناتے ہیں۔ Carrera new A. ہم اس تار کا سائز پہلے ہی جانتے ہیں۔ m - n + 1. لیکن ہم اس کا سائز 100 بطور ڈیفالٹ رکھتے ہیں۔ اب، چلو ایک لوپ. لوپ کہاں سے شروع ہو گا؟ لوپ i = n سے شروع ہوگا اور لوپ اس وقت تک جاری رہے گا جب تک ہمارا im k کے برابر نہ ہوجائے۔ اور یہاں ہم یہ فرض کر رہے ہیں کہ سلائس کو کال کرتے وقت کوئی بھی غلط برتاؤ نہیں کرے گا، یعنی n اور m درست قدریں ہیں۔ یہ اس طرح نہیں ہے۔ لہذا، null کردار کے بعد کی قدر دی گئی ہے۔ n کو منفی قدر دی جاتی ہے۔



08:15:36

نہیں، ہمیں صرف valid ویلیوز دینی ہیں جو کہ اگر سٹرنگ کے بیچ میں کہیں رکھ دی جائیں تو ہمارا لوپ n سے m تک جائے گا اور ہم نئی سٹرنگ کے اندر کیا کریں گے، آئیے نئی سٹرنگ کے لیے بھی اپنا بنائیں، یہ j = 0 سے شروع ہو گا اور j بار بار ہمارا پلس ہو جائے گا، یہ j ہے، ہماری string کی اس نئی چیز کی امید کے برابر ہو جائے گا۔ واضح رہے کہ نئی سٹرنگ کے اندر j انڈیکس ہے اور سٹرنگ کے اندر i انڈیکس ہے، آئیے اسے ایک مثال کے طور پر دیکھتے ہیں کہ ہم کیا کرنا چاہتے ہیں، یہاں ہم نے ایک بنایا ہے۔



08:16:09

سٹرنگ atr گزر گئی ہے جس میں فرض کریں کہ ہم نے ہیلو ورلڈ دی ہے اور اب ہم نے ایک نیا ایس ڈی آر بنایا ہے۔ نیا ایس ڈی آر ابھی خالی ہے اس کا مطلب ہے کہ اس میں کافی جگہ خالی ہوگی۔ یہاں ہم نے n = 3 اور m = 6 پاس کیا۔ تو یہ لوپ 0 1 2 3 ہمارا لوپ اس l سے شروع ہو گا اور نئے s کے لیے یہ j = 0 سے شروع ہو گا، یہاں یہ i = 3 سے شروع ہو گا، تو سب سے پہلے ہم اس l کو یہاں کاپی کریں گے، یعنی ہم اسے یہاں لائیں گے اور کاپی کریں گے، اسے یہاں لائیں گے اور اس طرح سے ہمارے لوپ کو چلائیں گے۔ تو



08:16:51

سب سے پہلے، i = 3 کے لیے، ہم یہاں l کو کاپی کر کے لائیں گے، پھر یہ j بن جائے گا اور i 4 ہو جائے گا، پھر ہم o کو بھی کاپی کریں گے، پھر j 2 ہو جائے گا، پھر ہم w کاپی کریں گے، پھر j 3 ہو جائے گا، ہمارا i بھی چھ ہو چکا ہو گا، اس وقت تک ہم اسے یہاں کاپی کریں گے، اس طرح جیسے ہی میں 6 ہو جائے گا، ہماری سلائس ختم ہو جائے گی اور اس کا ٹکڑا فائنل ہو جائے گا۔ ہماری نئی سٹرنگ کے اندر، تو ایک ایک کر کے j کی ویلیو row سے بڑھ رہی ہے اور i کی ویلیو n سے بڑھ رہی ہے اور m تک جائے گی، تو یہ وہی ہے جسے ہم حاصل کرنے کی کوشش کر رہے ہیں۔



08:17:25

اس لائن کے ساتھ یہ کریں اور آخر میں ہم کیا کریں گے، ہم اسے یہاں لکھیں گے، ہم اسے یہاں جوڑیں گے، بیس s 0 اب ہمیں یہاں اس j کی ضرورت ہے، تو آئیے ہم j کو باہر ہی ڈیکلیئر کرتے ہیں، int j = 0، اس لیے یہاں انیشیلائز کرنے کی ضرورت نہیں ہے، آئیے اسے محفوظ کریں، اب s ڈالنے سے ہم اپنے مرکزی کردار کے آخر میں s کو پرنٹ کریں گے، ہمیں اپنے مرکزی کردار کے اندر پرنٹ کرنے دیں گے۔ sdr، جس کے اندر ہم ہیلو ورلڈ لکھیں گے، اب ہم سلائس کو کال کریں گے، ہم اس میں n = 3 m کے ساتھ اپنی سٹرنگ پاس کریں گے۔



08:18:01

= 6 چلیں یہ کریں، محفوظ کریں اور چلائیں، تو یہاں ایک جگہ ہے کیونکہ ہم نے ہیلو ورلڈ میں ایک جگہ دی ہے، آئیے بغیر جگہ کے ہیلو ورلڈ کے ساتھ دوبارہ کوشش کریں، تو اس بار ہماری سٹرنگ تین سے چھ انڈیکس کٹ ہونے کے بعد ہمارے پاس واپس آئی ہے، یعنی کٹے ہوئے، ہم نے اسے پرنٹ کر لیا ہے، اس لیے ہم نے ایک سلائس فنکشن بنایا ہے اور ان تمام سوالات کو جو ہم سوچ رہے ہیں، ایک عملی لاگ ان سے تیار کر رہے ہیں۔ مطلب سی پروگرامنگ نحو کے بارے میں نہیں ہے۔



08:18:33

ہم نے اس طرح کی سٹرنگ کا اعلان کرنا سیکھا ہے یا ہم نے اس طرح کے عدد کا اعلان کرنا اور اسے اس طرح پرنٹ کرنا سیکھ لیا ہے۔ پروگرامنگ منطق کے بارے میں ہے۔ اس سے کوئی فرق نہیں پڑتا ہے کہ آپ جو بھی زبان استعمال کرتے ہیں، منطق ایک ہی رہتی ہے۔ اب آپ اسے C++ میں لکھ سکتے ہیں، آپ اسے جاوا میں لکھ سکتے ہیں، آپ اسے JavaScript میں لکھ سکتے ہیں، آپ اسے C++ میں، Go میں، Python میں لکھ سکتے ہیں، آپ اسے جس زبان میں بھی لکھیں گے، منطق وہی رہے گی۔ آپ کو اس کے اندر ایک لوپ ڈالنا پڑے گا، آپ کو اس طرح کی چیزوں کو کاپی کرنا پڑے گا اور پھر آپ



08:19:03

ہم اسے پرنٹ یا واپس کر سکتے ہیں، منطق وہی رہے گی، ہماری پروگرامنگ زبان بدل سکتی ہے۔ اگلا سوال جس کے بارے میں ہم بات کریں گے وہ ایک سٹرنگ میں وولز کی موجودگی کو شمار کرنے کے لیے ایک فنکشن لکھنا ہے، یعنی ایک سٹرنگ میں وول کتنی بار ظاہر ہو رہے ہیں، ہمیں اسے گننا ہوگا۔ مثال کے طور پر، ہمیں ایک تار دیا گیا ہے، ہیلو ورلڈ، ہیلو ورلڈ میں سر کتنی بار ظاہر ہوتے ہیں، ایک، دو، تین۔ اب، وہ طلباء جو نہیں جانتے کہ سر کیا ہیں، vowels ہمارے حروف a, e, i, o, اور u ہیں، انگریزی میں پانچ حرف ہیں۔



08:19:37

اگر ان پانچوں میں سے کوئی بھی زبان میں آتا ہے تو ہم جمع جمع کے ساتھ گنتی کریں گے۔ ہم نے پہلے ہی بات کی ہے کہ یہ کیسے کریں. ہمیں لوپ کے لیے اپلائی کرنا ہے اور اسے کب تک لاگو کرنا ہے جب تک کہ کوئی null کریکٹر نہ آجائے۔ اور ہم ایک ایک کر کے کرداروں کا تجزیہ کریں گے۔ زبانی حرف آتا ہے تو پلس پلس کرو۔ اگر وہ نہ آئے تو اسے چھوڑ کر آگے بڑھیں۔ یہ ایک آسان طریقہ ہونے جا رہا ہے۔ آئیے اس کے لیے بھی ایک فنکشن بنائیں۔ ہم نے اس کوڈ میں بہت سے فنکشنز بنائے ہیں، اس لیے الجھن میں نہ پڑیں۔ ہم اس تازہ ترین فنکشن کے بارے میں بات کر رہے ہیں جس پر ہم بحث کر رہے ہیں۔



08:20:07

درحقیقت، میں کیا کرتا ہوں، میں سادگی کے لیے بقیہ کوڈ پر تبصرہ کرتا ہوں، تاکہ ہمیں معلوم ہو کہ ہم کس کے بارے میں بات کر رہے ہیں۔ میں اس پر بھی تبصرہ کروں گا، int کاؤنٹ wobbles، اس کے اندر ہم اپنی string int count vals character sr کو پاس کر رہے ہوں گے، اس کے اندر ہمیں سٹرنگ ملے گی، آئیے ایک ویری ایبل کاؤنٹ لیں جو row سے شروع ہو گا، اب ایک لوپ چلاتے ہیں جس میں ہم انٹیجر aa کو i کے ساتھ شروع کریں گے جب تک کہ ہماری i کی سٹرنگ برابر نہیں ہو جاتی اور اب ہم ہر وقت pnu کے برابر نہیں ہو جائیں گے، پھر ہم کریں گے۔ یعنی ہم شرط لکھیں گے۔



08:20:46

اگر i کے برابر ایک کے برابر ہو اور یا i کا سٹرنگ e کے برابر ہو جائے تو ہم لکھیں گے i کی سٹرنگ برابر کے برابر کے برابر اور aa کی سٹرنگ o کے برابر اور aa کی سٹرنگ برابر کے برابر یا اس طرح آپ نے چیک کیا ہے کہ آیا ہمارے مستطیل انڈیکس پر موجود سٹرنگ، جو سٹرنگ کے اندر ہے، a یا e ہے یا i یا اس کا مطلب ہے کہ ہم o کے کچھ وقت گنیں گے، پھر ہم کریں گے۔ پلس پلس اور آخر میں کیا کرنا ہے، ہم فنکشن کاؤنٹ واپس کر دیں گے، لہذا مین فنکشن کے اندر آپ اپنی گنتی کے اس سٹرنگ کے لیے کال کریں گے۔



08:21:30

ہم اپنے سٹرنگ کے طور پر گنتی کے سروں میں سروں کو پاس کریں گے اور جو بھی واپس آئے گا، ہم اسے پرنٹ شدہ فیصد d vowels r حاصل کریں گے۔ تو ہم نے حرفوں کو پرنٹ کروانے کے لیے ایک سطر لکھی ہے، آئیے اسے محفوظ کریں اور چلائیں، تو ہیلو ورلڈ میں تین حرف ہیں، پہلا ای، دوسرا او اور تیسرا یہ، دوسرا ہو، اس کے علاوہ اگر ہم یہاں کوئی اور لفظ لکھیں، فرض کریں کہ ہم شردھا لکھیں، تو ہم اسے محفوظ کرکے چلا بھی سکتے ہیں، تو اس کے دو معنی آتے ہیں، اس طرح اس کے دو معنی آتے ہیں۔ آپ اپنے الفاظ میں مختلف الفاظ پرنٹ کر سکتے ہیں۔



08:22:05

ہم حرفوں کو گن سکتے ہیں اگر ہم اس نمبر کو کل لمبائی کے ساتھ مائنس کریں، یعنی ہمارے پاس جتنے بھی سر ہیں، ST R L N سے کل لمبائی معلوم کریں اور حرفوں کی گنتی کو کم کریں تو ہم کل حرف شمار کر سکتے ہیں، اس کا مطلب ہے کہ ہم ان حروف کو شمار کر سکتے ہیں جو کہ حرف نہیں ہیں یا اگر ہم گننا چاہتے ہیں کہ یہ اس لفظ میں کتنی بار آتا ہے، تو یہاں شرط بدل جائے گی، اگر h کی حالت بدل جائے گی۔ h کے ساتھ، ہم ان کو شمار کریں گے یا d کتنی بار آتا ہے یا a



08:22:36

کتنی بار آتا ہے؟ لہذا ہم مختلف حالات کے مطابق مختلف قسم کے فنکشن بنا سکتے ہیں۔ اگلا سوال جس کے بارے میں ہم بات کریں گے وہ یہ ہے کہ آیا کوئی دیا ہوا کردار سٹرنگ میں موجود ہے یا نہیں۔ مثال کے طور پر، ہمیں سٹرنگ "ہیلو ورلڈ" دی گئی ہے، اب ہمیں ایک کریکٹر سی کے ساتھ دیا گیا ہے جو کہ "d" ہے، ہمیں یہ دیکھنا ہے کہ آیا یہ کریکٹر اس سٹرنگ میں موجود ہے یا نہیں۔ اگر ہاں، یا نہیں، اگر اس میں d موجود ہے تو اسے پرنٹ کیا جائے گا۔ جی ہاں، اگر ہمارا کردار c کیپٹل A ہے تو کیپٹل A موجود نہیں، چھوٹا L موجود ہے۔



08:23:10

اس صورت میں ہم نمبر پرنٹ کرتے ہیں، یا اگر ہمارا کریکٹر x ہے، تو x ہیلو ورلڈ میں موجود نہیں ہے، تو اس صورت میں بھی ہم نمبر پرنٹ کرتے ہیں، اس لیے ہمیں چیک کرنا ہوگا کہ ہمارا مخصوص کریکٹر اسٹرنگ میں موجود ہے یا نہیں، اس کی منطق کیا ہوگی، ہم ایک ایک کر کے اسٹرنگ کے ہر کریکٹر پر جائیں گے اور چیک کریں گے کہ کیا کریکٹر مستطیل ہے، کیا یہ برابر ہے، کیا اگلا i + 1 پرنٹ ہوتا ہے، جیسے ہی پرنٹ ہوتا ہے، اس کے بعد پرنٹ برابر ہوتا ہے، جیسا کہ دوسرا پرنٹ ہوتا ہے۔ اگر ہم سادہ منطق کے ساتھ کام کریں گے، تو آئیے ایک فنکشن بنائیں۔



08:23:40

آئیے اس پر بھی تبصرہ کرتے ہیں۔ آئیے ایک فنکشن int چیک کرتے ہیں اصل میں اس میں void چیک کریکٹر کرتے ہیں۔ سب سے پہلے ہم اپنی سٹرنگ کے ساتھ ساتھ ایک کریکٹر سیچ ویوڈ چیک کریکٹر کو پاس کریں گے جس میں ہم سٹرنگ کو پاس کریں گے اور اپنے کریکٹر c کو اب ہم کریکٹر کو کیسے چیک کریں گے، ہم int aa کے برابر 0 aa تک یا aa کے attr کے لیے ایک لوپ ڈالیں گے جب تک کہ ہمارے null کریکٹر کے برابر نہ ہو aa ہوتا رہے گا پلس پلس اگر ہمارا aa کا attr ہو جاتا ہے تو اس کی پرنٹ کی صورت میں ہم پرنٹ کے برابر ہوتے ہیں۔



08:24:23

مکمل ہونے کے بعد یہاں سے واپس آجائیں، یعنی فنکشن خود ہی ختم کریں، جیسے ہی کریکٹر مل جائے گا، فنکشن ختم ہو جائے گا، پھر کوئی پریشانی نہیں ہوگی، ایک بار کریکٹر مل جائے تو اسے واپس کر دیں اور اس کے بعد کیا ہوگا، مزید جو بھی چیک کرنے ہیں وہ نہیں ہوں گے کیونکہ کریکٹر یہاں مل گیا ہے اور اگر نہیں ملا تو کچھ نہیں، تمام چیک کرنا ہوں گے اور اگر ختم ہونا ہے تو ہم نے ابھی تک لوٹنا ہے، اگر ختم ہو جائے تو یہ نہیں ہے۔ پرنٹ کریں کہ کردار موجود نہیں ہے، لہذا ہم اسے یہاں پرنٹ کریں گے۔



08:24:51

کریکٹر موجود نہیں ہے تو ہم یہاں سے واپس آ رہے ہیں اس لیے ہم ایک ایک کریکٹر چیک کر رہے ہیں کہ اسٹرنگ کا کوئی کریکٹر سیچ کے برابر ہے یا نہیں اس کے بعد اگر کہیں بھی ملے تو اسے پرنٹ کریں گے اور وہاں سے واپس آ جائیں گے اگر نہیں ملا تو آخر میں لکھنا پڑتا ہے کہ کریکٹر موجود نہیں ہے ہم اسے بچاتے ہیں اور چلتے ہیں اب مین فنکشن کے اندر ایک کریکٹر بنا لیں ہم نے اپنا ایک کریکٹر بنا لیا ہے جو ہم نے اپنا ایک سٹپوز بنا لیا ہے۔ بھیجنا چاہتے ہیں شروع میں ہے اور ہم چیک کو کال کریں گے۔



08:25:25

کریکٹر f r اور e c یہاں اب اگر ہم اسے محفوظ کر کے چلاتے ہیں تو یہ کریکٹر موجود کو ظاہر کرے گا لیکن اگر ہم یہاں e کی جگہ x لگاتے تو کیا ہوتا، یہ لکھا جاتا کہ کریکٹر موجود نہیں ہے، اس طرح ہم دیکھ سکتے ہیں کہ ہمارا کریکٹر اسٹرنگ کے اندر موجود ہے یا نہیں، منطق کیا ہونی چاہیے، منطق وہی رہنی چاہیے، ہم سٹرنگ کو عبور کریں گے، ایک ایک کر کے کریکٹر کو چیک کرتے رہیں گے، امید ہے کہ ہم اپنی شرائط کو چیک کرتے رہیں گے۔ سٹرنگ کے بارے میں بہت کچھ، کلاس کے اندر کچھ اضافی چیزیں



08:25:56

سوالات ہیں، ہم انہیں حل کر سکتے ہیں۔ اگلا باب جس کے بارے میں ہم بات کریں گے وہ ہمارے ڈھانچے ہونے والا ہے، جو کہ جب بھی ہم C پروگرامنگ کے بارے میں بات کرتے ہیں تو یہ ایک بہت اہم باب ہے کیونکہ ڈھانچے C++ کی بنیاد بناتے ہیں۔ ڈھانچے کا مطالعہ کرنے کے بعد، ہم C++ میں موجود کچھ چیزوں کو سمجھنا شروع کر دیں گے۔ تو اب ہم اپنا باب نو شروع کرنے جا رہے ہیں، جسے ڈھانچہ کہتے ہیں۔ اب، اس سے پہلے، ہم نے ڈیٹا کی بہت سی قسمیں دیکھی ہیں، جیسا کہ ہم نے عدد کا مجموعہ دیکھا ہے۔



08:26:25

ایک عددی صف حروف اور تار کا مجموعہ ہے۔ اسی طرح اگر ہم ایک ایسی کلیکشن بنانا چاہتے ہیں جس میں بہت سی مختلف اقسام کا ڈیٹا محفوظ ہو، مثال کے طور پر فرض کریں کہ ہم ایک int، ایک کریکٹر، ایک فلوٹ اور ایک سٹرنگ کو ذخیرہ کرنا چاہتے ہیں، اب ہم ان چاروں کو ملا کر ایک array نہیں بنا سکتے، کیونکہ array کیا ہے، array ڈیٹا کا مجموعہ ہے جس کی ڈیٹا کی قسم ایک ہے، لیکن یہاں ہم ایک مجموعہ بنانا چاہتے ہیں جس میں ڈیٹا کی قسمیں مختلف ہیں۔ ایسے مجموعے کہے جا سکتے ہیں۔



08:26:57

تشکیل کے لیے ہم ڈھانچے کا استعمال کرتے ہیں۔ لہٰذا اگر ہم ڈھانچے کی تعریف کو دیکھیں تو ڈھانچہ مختلف ڈیٹا کی اقسام کی قدروں کا مجموعہ ہے، یعنی اگر آپ مختلف ڈیٹا کی قسمیں لیتے ہیں اور انہیں ایک ہی ڈھانچے کے اندر، ایک مجموعہ کے اندر رکھنا چاہتے ہیں، تو ہم اسے ڈھانچہ کہیں گے۔ کسی ڈھانچے کی مثال کیا ہو سکتی ہے، جیسے کہ اگر ہمیں کسی طالب علم کی معلومات کو ذخیرہ کرنا ہے، تو اس معلومات کو ذخیرہ کرنے کے لیے، سب سے پہلے ہمیں اس کا نام ذخیرہ کرنا پڑے گا جو کہ سٹرنگ قسم کا ہو گا، ہمیں اس کا رول نمبر ذخیرہ کرنا پڑے گا جو کہ ایک عدد عدد ہے۔



08:27:27

یہ قسم کا ہوگا اور اس کا CGPA ذخیرہ کرنا ہوگا جسے ہم فلوٹنگ ویلیو کے طور پر لے سکتے ہیں، اس لیے جب ہمیں اس قسم کی کوئی بھی معلومات ذخیرہ کرنی ہوتی ہے تو ہم اسے ڈھانچے کی مدد سے کرتے ہیں، اب سٹرکچر بنانے کی ترکیب کیا ہوگی، نحو میں سب سے پہلے ہم struct کی ورڈ لکھتے ہیں، struct کی ورڈ ہمیں بتاتا ہے کہ ہم ایک ڈھانچہ بنانا چاہتے ہیں، اگر ہم اسٹرکچر کا نام اسٹور کرنا چاہتے ہیں تو اس کے بعد اسٹرکچر کا نام لکھنا ہے۔ اس میں مختلف اقدار کو ذخیرہ کیا جائے گا، لہذا ہم نے ساخت کا نام دیا ہے



08:27:54

ہم نے اسے طالب علم دیا ہے۔ فرض کریں کہ آپ کسی ملازم کی معلومات محفوظ کر رہے ہیں، تو ہم اسے ملازم کا نام دیں گے۔ اگر ہم کسی بینک اکاؤنٹ ہولڈر کی معلومات کو محفوظ کر رہے ہوتے تو ہم اسے BankAccount کا نام دیتے، جس میں ہم اکاؤنٹ نمبر، IFSC کوڈ، بینک کا نام، بینک کا پتہ، یہ سب چیزیں محفوظ کر رہے تھے، تو یہاں ہم نے اپنے اسٹرکچر کو طالب علم کا نام دیا ہے اور اس کے اندر ہم نے تین قدریں محفوظ کی ہیں، جن میں سے پہلی کریکٹر ارری ہے، یعنی ہمارا سٹرنگ کا نام، اس کے بعد ہمارے پاس ایک عددی نام ہے جس کا نام متغیر ہے۔



08:28:25

رول نمبر، پھر ایک فلوٹ ویری ایبل جسے ہم CGPA کا نام دیتے ہیں اور ہم اس پورے ڈھانچے کو پیرنز کے اندر لکھتے ہیں، یعنی وہ تمام عناصر جو ڈھانچے کے اندر آنے والے ہیں، ہم انہیں پیرنز کے اندر لکھتے ہیں اور آخر میں ہم ایک سٹیٹمنٹ ٹرمینیٹر لگاتے ہیں۔ عموماً بچے لگانا بھول جاتے ہیں جس کی وجہ سے خرابی آجاتی ہے۔ اس لیے ہمیں سٹیٹمنٹ ٹرمینیٹر کو نہیں بھولنا چاہیے۔ اب ہم ایک بار اس بات پر بات کرتے ہیں کہ ڈیٹا کی دو قسمیں ہیں، ایک ہماری ان بلٹ ڈیٹا کی قسمیں جو ہماری پروگرامنگ لینگویج میں پہلے سے موجود ہیں۔



08:28:54

ہم اسے اپنے عدد، اپنے فلوٹ، یا اپنے کردار کی طرح استعمال کرتے ہیں، یا درحقیقت صفیں بھی اس زمرے میں آتی ہیں۔ اب، دوسری طرف، ہمارے پاس صارف کی وضاحت کردہ ڈیٹا کی اقسام ہیں۔ صارف کی وضاحت کردہ ڈیٹا کی قسمیں صارف کے ذریعہ تخلیق کی جاتی ہیں۔ اب تک، اگر ہمیں ایک عدد عدد کی ضرورت تھی، تو یہ پہلے سے میموری میں موجود ہوتا تھا۔ انٹیجر کا مطلب ہے کہ آپ کے لیے میموری میں چار بائٹس محفوظ کر دی گئی ہیں۔ اگر آپ کو ایک کردار کی ضرورت ہے تو وہ بھی پہلے سے موجود تھا۔ سی پروگرامنگ ہمیں بتاتی ہے کہ اگر کوئی کردار پہلے سے موجود ہے تو آپ کو ایک بائٹ کی ضرورت ہے۔



08:29:26

اگر آپ اس میں کوئی بھی حرف، کوئی حرف، خاص کریکٹر اسٹور کرنا چاہتے ہیں تو یہ سی پروگرامنگ میں پہلے سے موجود ہے، لیکن فرض کریں کہ ہمیں ایسی ڈیٹا ٹائپ چاہیے جس میں ہمیں فلوٹ کے لیے چار بائٹس، انٹیجر کے لیے چار بائٹس چاہیے اور ہم اس میں کریکٹر بھی اسٹور کرنا چاہتے ہیں، تو اس طرح کا کسٹم ڈیٹا ٹائپ صارف کو خود بنانا پڑے گا، یہ پہلے سے C میں موجود نہیں ہے، اب اس طرح کے ڈیٹا کی قسمیں ہماری ڈیفینٹ کیٹیگری کے تحت آتی ہیں اور یوزر ڈیفینٹ کے تحت ڈیٹا کی قسمیں آتی ہیں۔



08:29:54

صارف اس کی وضاحت خود کر سکتا ہے، اس طرح جیسے ہمارے پاس ایک انٹیجر ارے ہے، ایک انٹیجر ارے میں کیا ہے، فرض کریں کہ ہم نے ایک انٹیجر اری ARRR بنائی ہے جس کا سائز ہم نے تین دیا ہے، اب اس میں کیا ہوگا، تین انٹیجرز کے برابر میموری ہمارے لیے کمپیوٹر کی میموری میں محفوظ ہو جائے گی، اسی طرح جب بھی ہم ایک اسٹوڈنٹ کے برابر میموری بناتے ہیں، اسی طرح جب بھی ہم اسٹوڈنٹ کے برابر میموری بناتے ہیں۔ اور ایک فلوٹ کے برابر میموری محفوظ ہو جاتی ہے، لہذا اب ہمارے پاس ایک نئی ڈیٹا ٹائپ ہے جس میں ہم تین مختلف تخلیق کر سکتے ہیں۔



08:30:27

ہم اقدار کو ایک ساتھ ذخیرہ کر سکتے ہیں اور ہم نے اسے بنانے کا طریقہ بیان کیا ہے۔ ہمیں اپنا ڈیٹا ٹائپ ایک بار لکھنا ہوگا کہ ہمارا ڈیٹا ٹائپ اس طرح نظر آئے گا۔ اس کے بعد اگر ہمیں ڈیٹا ٹائپ استعمال کرنا ہے، جیسا کہ ہم انٹیجر، int n = 5 استعمال کرتے تھے، اسی طرح یہاں ہمیں struct student لکھنا ہوگا۔ یہ ہمارا ڈیٹا ٹائپ اسٹوڈنٹ کا ڈھانچہ ہے۔ اس کے بعد، n کی جگہ ہمارے پاس s1 ہے اور اب اگر ہم s1 کے لیے مختلف پیرامیٹرز تک رسائی حاصل کرنا چاہتے ہیں، یعنی طالب علم کے لیے، جیسا کہ نام کے لیے ہم s1 لکھیں گے۔



08:31:05

نام رول نمبر کے لیے ہم s1 رول نمبر لکھیں گے اور CGPA کے لیے s1 cp7 5 لکھیں گے تو اس طرح ہم اسے ڈکلیئر کریں گے، اس کا استعمال کریں گے اور پھر اس کے اندر موجود پیرامیٹرز تک رسائی حاصل کریں گے اور ساتھ ہی اب اصل میں کوڈ کے اندر ایک سٹرکچر بنا کر دیکھتے ہیں کہ یہ کیسے لکھا جاتا ہے سب سے پہلے ہم struct کی ورڈ struct لکھیں گے اس کے بعد ہم طالب علم کو لکھیں گے اور اس کے اندر CGPA کا نام لکھیں گے اور CGPA کی تین چیزوں کا نام لیں گے۔ نام تو سب سے پہلے ہم int roll لکھیں گے پھر CGPA فلوٹ کریں گے اور اس کے بعد کریکٹر کا نام لکھیں گے۔



08:31:45

100 حروف اور آخر میں ہم سٹیٹمنٹ ٹرمینیٹر ڈالیں گے۔ لہذا ہم نے اپنے ڈیٹا کی قسم کی وضاحت کی ہے۔ ساخت ہماری صارف کی وضاحت کردہ ڈیٹا کی قسم ہے۔ اب مین فنکشن کے اندر، ہم ساخت کی قسم کا ایک متغیر بنائیں گے۔ سٹرک اسٹوڈنٹ ہماری قسم ہے۔ اور اس کے بعد ویری ایبل کا نام s1 ہے جسے ہم نے ابھی تک شروع نہیں کیا، ہم نے صرف ابتداء کا اعلان کیا ہے اور یہ اس کی خصوصیات ہیں۔ اب اگر ہم s1 کی رول پراپرٹی، رول نمبر پراپرٹی تک رسائی حاصل کرنا چاہتے ہیں تو ہم ڈاٹ آپریٹر کو درمیان میں رکھیں گے، یعنی s1 اور رول نمبر۔ ہم اسے اپنی قیمت کے برابر بنائیں گے اور پھر s1 جملہ لکھیں گے۔



08:32:31

ہم اس میں بھی کچھ قدر ڈالتے ہیں تو اب ہمیں s1.n لکھنا ہوگا اگر ہم اسے عام طور پر لکھنا شروع کریں جیسا کہ ہم نے صرف s1.n = Shraddha لکھا ہے تو ہمارے سٹرنگ کو ڈکلیئر کرنے اور اسے s1.n پر منتقل کرنے کا یہ نحو غلط کیوں ہے کیوں کہ سٹرنگز میں ہم نے پہلے ہی پڑھا تھا کہ آپ اسٹرنگ کی ویلیو کو تبدیل نہیں کر سکتے جن کی تعریف کی گئی ہے، آپ اس کی قدر کو کاپی کر سکتے ہیں، آپ اس کی سٹرنگ میں کاپی نہیں کر سکتے۔ آپ ان بلٹ سٹرنگ فنکشن استعمال کر سکتے ہیں لیکن اس کی ویلیو



08:33:04

براہ راست آپ اسے برابر کے ساتھ تبدیل نہیں کرسکتے ہیں۔ ہاں اگر یہ کریکٹر پوائنٹر ہوتا تو یہ ممکن تھا لیکن یہاں اس کی تعریف array notation میں کی گئی ہے تو یہاں ہمیں اپنی string function string copy کا استعمال کرنا پڑے گا اس کے لیے اوپر library string da کو شامل کریں اور ذیل میں کیا کریں آئیے اسے کامن شک کہتے ہیں اور s pwa لکھتے ہیں کہ ہم کس کو کاپی کرنا چاہتے ہیں، ہم اپنا نام s1 میں کاپی کرنا چاہتے ہیں۔ اگر ہم اپنا نام s1 نام میں کاپی کرنا چاہتے ہیں تو پہلے ہم اپنی دوسری سٹرنگ کا نام s1 لکھیں گے تو یہ دوسری سٹرنگ ہماری پہلی سٹرنگ ہوگی۔



08:33:41

اس کو اندر کاپی کیا جائے گا اور اس کے بعد ہم کیا کریں گے، ہم تینوں پراپرٹیز دکھانے جا رہے ہیں۔ سب سے پہلے، ہم یہ لکھتے ہیں کہ طالب علم کا نام فیصد s s1 کے برابر ہے۔ n اب، جب ہمیں ویلیو تفویض کرنا ہے، تو ہمیں s1 نام بھی استعمال کرنا ہوگا۔ اور جب ہمیں ویلیو پرنٹ کرنا ہے، تو ہمیں s1 d کا نام بھی استعمال کرنا ہوگا۔ اگر ہم براہ راست سوچتے ہیں کہ ہم یہاں صرف s1 لکھیں گے اور ڈاٹ استعمال نہیں کریں گے، جس کا مطلب ہے، اس کے ساتھ ہمیں صرف پرنٹ شدہ s1 کی قدر ملے گی۔ اس کے بعد، ہم اپنے طالب علم کا رول نمبر، فیصد d سے s1 ڈاٹ رول پرنٹ کرنے جا رہے ہیں اور اس کے بعد ہم اپنا پرنٹ کریں گے۔



08:34:19

طالب علم کا CGPA فیصد f s1 sz p اور سب کے آخر میں ہم واپس رکھیں گے sl n آئیے اسے محفوظ کریں اور اسے چلائیں اور دیکھیں، سب سے پہلے ہمارے پاس طالب علم کا نام ہے، اس کے بعد رول نمبر آتا ہے اور اس کے بعد ہمارے پاس طالب علم کا CGPA ہے، اس طرح ہم اپنی ساخت کا اعلان کرتے ہیں، سب سے پہلے ہم اس کا ایک متغیر بناتے ہیں، پھر اس کے بعد ہم اس کی قدر کو متغیر کرنے کے لیے استعمال کر سکتے ہیں، پھر اس کی قدر کو متغیر کرنے کے لیے استعمال کر سکتے ہیں۔ کہیں بھی، یعنی ہم اسے پرنٹ کروا سکتے ہیں، ہم اس قدر کو بھی تبدیل کر سکتے ہیں۔



08:34:54

ہم ایک قدر کو دوسری قدر کے لیے بھی تفویض کر سکتے ہیں۔ اگلی چیز جو ہم اس میں پڑھیں گے وہ یہ ہے کہ جب ہم کسی ڈھانچے کا اعلان کرتے ہیں تو دراصل میموری کے اندر کیا ہوتا ہے۔ ہم نے پڑھا ہے کہ جب ہم انٹیجر اری ڈکلیئر کرتے ہیں تو میموری کے اندر مسلسل تین مقامات محفوظ ہو جاتے ہیں۔ جیسے کہ اگر ہم انٹیجر قسم کی ایک صف بناتے ہیں، تو یہ تینوں میموری لوکیشنز 1، 2، 3 اس میں محفوظ ہو جاتے ہیں۔ اسی طرح، جب ہم کوئی ڈھانچہ بناتے ہیں، تو اس کے اندر جو بھی ڈیٹا ٹائپ کرتے ہیں، ان ڈیٹا کی اقسام کے مطابق۔



08:35:22

ہماری میموری کے اندر کچھ ایسے حصے ہوتے ہیں جو ایک کنٹس انداز میں محفوظ ہوتے ہیں یعنی لگاتار، جس طرح ایک صف کے اندر ایک کے بعد ایک بلاکس ہوتے ہیں، اسی طرح یہاں بھی contus میموری کے مقامات ہوتے ہیں، جیسے کہ اگر ہم نے اسٹوڈنٹ سٹرکچر بنایا جس میں ہم نے پہلے سٹرنگ کے لیے ایک کریکٹر اری رکھا، تو سب سے پہلے سٹرنگ کے برابر میموری کی لوکیشن ہمارے پاس محفوظ ہو جائے گی، جسے ہم اپنے نام کے اندر محفوظ کرنا چاہتے ہیں، اور اب ہم اپنے نام رکھنے کے لیے نام رکھنا چاہتے ہیں۔ string، ان سب کو ذخیرہ کیا جائے گا. اب یہاں ہمیں سائز سیٹ کرنا ہے۔



08:35:54

جو نام دیا گیا ہے وہ 100 حروف کے برابر ہے، تو اگلا عدد 100 حروف کے بعد مختص کیا جائے گا، تو 21 آئے گا، اس کے بعد 2110 آئے گا، تب ہی رول نمبر کو جگہ ملے گی، رول نمبر انٹیجر قسم کا ہے، تو اس میں چار بائٹس کی جگہ ملے گی، اب چار بائٹس کے بعد 2114 آئے گا، جہاں CGPA ملے گا، تو اس کی CGPA بھی برابر ہو جائے گی، اس طرح ہماری CGPA ٹائپ ہو جائے گی۔ کہ، اس طرح مسلسل انداز میں، جب بھی ہم کوئی ڈھانچہ بناتے ہیں، ظاہر ہے کہ ہمارے پاس میموری کے مقامات یکے بعد دیگرے محفوظ ہوتے ہیں۔



08:36:26

یہ فارمیٹ کچھ کمپائلرز اور کچھ مشینوں کے مطابق تھوڑا سا بدل سکتا ہے، لیکن اگر کوئی پوچھے تو ہم پہلے سے طے شدہ طور پر یہ فرض کر لیتے ہیں اور بتاتے ہیں۔ اگلا، آئیے ایک پریکٹس سوال کرتے ہیں۔ پریکٹس سوال کہتا ہے، تین طالب علموں کا ڈیٹا ذخیرہ کرنے کے لیے ایک پروگرام لکھیں۔ ہمیں ایک پروگرام لکھنا ہے اور اس میں تین طلبہ کا ڈیٹا محفوظ کرنا ہے۔ تو، اس کے لیے ہم نے پہلے ہی ایک ڈھانچہ بنا لیا تھا، یعنی ہم نے اپنا اسٹوڈنٹ ڈھانچہ بنا لیا تھا۔ ہم نے ایک طالب علم کی معلومات بھی بنائی تھیں۔



08:36:53

اب ہم کیا کریں گے، ہم ایک اور طالب علم بنائیں گے، تو اسے بنانے کے لیے ہم تمام معلومات کاپی کر سکتے ہیں، سب سے پہلے ہم یہاں s2 لکھیں گے، اب ہم s2 کا رول نمبر 1660 88.7 لکھیں گے، یہاں ہم نام بدلیں گے اور ہر جگہ کریں گے، s2، اب اسی طرح نقل کر کے ہم ایک اور طالب علم بنائیں گے، ہم اس کا نام s3 رکھیں گے، ہم یہاں s3 کی قدر بھی بدلیں گے، ہمیں بھی اس کی قدر تبدیل کرنے دیں گے۔ s2 یہاں بھی، یا یہاں ہمارے s3 اور s3 ہو چکے ہیں، تو ابتدائی سوالات میں۔



08:37:30

میں چاہتا ہوں کہ اس کو کاپی کرنے کے بجائے اگر آپ یہ نحو پہلی بار خود لکھ رہے ہیں تو آپ کو اسے ٹائپ کرنا ہوگا کاپی نہ کریں۔ جب آپ کوئی بھی نئی چیز شروع میں سیکھتے ہیں، تو اسے کاپی پیسٹ کرنے کے بجائے بالکل بنیادی طریقے سے کریں، پھر وہ زیادہ دیر تک یاد رہے گی۔ لہذا اگر آپ اس طرح سے تین طالب علموں کو تین بار بنائیں گے، تو ہمیں یاد ہوگا کہ اپنے ڈھانچے کو کیسے استعمال کیا جائے، اس کی اقدار تک کیسے رسائی حاصل کی جائے، اسے کیسے اعلان کیا جائے، لہذا اگر آپ پہلی بار خود ساختہ سیکھ رہے ہیں۔



08:37:56

اور اگر آپ خود سے یہ سوال پوچھ رہے ہیں تو آپ کو اسے بنیادی الفاظ میں لکھنا ہوگا، جس کا مطلب ہے کہ آپ کو تینوں طالب علموں کی اقدار کو کاپی کرنے کی ضرورت نہیں ہے۔ اب تینوں میں یہ s3 بن گیا ہے۔ یہاں، ہم رول نمبرز اور اپنے CGPA کو تبدیل کرتے ہیں۔ آئیے اسے بچائیں اور چلائیں۔ تو سب سے پہلے، ہمیں پہلے طالب علم کی اقدار ملی، اس کے بعد، دوسرے طالب علم کی قدریں آئیں اور اس کے بعد، تیسرے طالب علم کی قدریں آئیں۔ اب ہم اس کی فارمیٹنگ کو تبدیل کر سکتے ہیں جس طریقے سے ہم اسے دکھانا چاہتے ہیں۔ اب یہاں کے ڈھانچے کو استعمال کر کے بہت سے دلچسپ مسائل حل کیے جا سکتے ہیں۔



08:38:26

مثال کے طور پر، فرض کریں کہ آپ اپنے اسکول یا کالج کے لیے ایک ایسا نظام بنا رہے ہیں جس میں طلبہ کی تمام معلومات محفوظ ہوں یا آپ پورے فیصد کا حساب لگانا چاہتے ہیں جس میں ہر مضمون کے سمسٹر وار نمبرز محفوظ ہیں۔ اب اس طرح کے ڈیٹا کو اسٹور کرنے کے لیے مارکس ایک ہی قسم کے ہوتے ہیں لیکن طلبہ کے پاس بہت سی مختلف اقسام کا ڈیٹا ہوتا ہے، اگر آپ کو اس کو اسٹور کرنے کے لیے کوئی سسٹم بنانا ہے تو آپ کو C میں ڈھانچے کا استعمال کرنا ہوگا جس میں آپ مختلف قسم کے ڈیٹا کو اسٹور کرسکتے ہیں۔



08:38:53

آپ معلومات کو ذخیرہ کر سکتے ہیں اور اپنا پروجیکٹ بنا سکتے ہیں جو آپ کے کالج کے طلباء کا ڈیٹا ہینڈل کرتا ہے۔ اگلے موضوع کے بارے میں بات کرتے ہوئے، اگلا موضوع ساخت کے فوائد ہے۔ ہم نے دیکھا ہے کہ ہاں، یہ ٹھیک ہے کہ ہم مختلف قسم کے ڈیٹا کو اسٹور کر سکتے ہیں، لیکن درحقیقت اس کی کچھ وجوہات ہیں، آپ کے پیپر یا انٹرویو میں ایک سوال آ سکتا ہے اور آپ سے پوچھا جا سکتا ہے کہ سٹرکچر کے فوائد کیا ہیں، جیسے کہ array کا فائدہ، ہم نے سمجھا کہ array کا کیا فائدہ ہے کہ ایک ہی قسم کے ڈیٹا کو سٹور کرنے کے لیے، سب سے پہلے آپ کو الگ الگ ویری ایبلز کی ضرورت نہیں ہے۔



08:39:22

فرض کریں کہ آپ 100 عدد کو ذخیرہ کرنا چاہتے ہیں، تو آپ کو 100 مختلف متغیرات کو یاد رکھنے کی ضرورت نہیں ہے، آپ کو ایک ہی صف بنانا ہوگی اور ہمیں ہر انٹیجر متغیر کو یاد رکھنا ہوگا، ہم اس سے باقی تمام تک رسائی حاصل کریں گے اور یہاں تک کہ چھانٹی جیسی سرگرمیاں بھی اس پر کی جاسکتی ہیں جیسے بڑھتے ہوئے ترتیب میں چھانٹنا، گھٹتے ہوئے ترتیب میں اور جب ہم الگ الگ الگ الگ الگ الگ الگ الگ الگ الگ الگ الگ الگ الگ الگ الگ الگ الگ الگ الگ الگ طریقے استعمال کرتے ہیں، ان کو حل کرتے ہیں۔ of array وہاں آتا ہے، ویسے کوئی ہم سے ڈھانچے کے فائدے کے بارے میں پوچھ سکتا ہے۔



08:39:52

ساخت کا پہلا فائدہ یہ ہے کہ یہ ہمیں بہت زیادہ متغیرات جیسے arrays بنانے سے بچاتا ہے۔ اب یہاں اگر ہم نے طالب علم کے لیے کوئی ڈھانچہ نہ بنایا ہوتا تو پہلے ہم s2، رول نمبر، s2، رول نمبر، s3، رول نمبر، s3، CG لکھتے۔ تو، وہاں بہت سے مختلف متغیر ہوتے کہ ہمیں اعلان کرنا پڑے گا۔ لہذا، ہمیں بہت سے متغیرات کا اعلان کرنے کی ضرورت نہیں ہے کیونکہ ساختیں تصویر میں آچکی ہیں۔ دوسرا فائدہ اچھا ڈیٹا مینجمنٹ اور تنظیم ہے۔ اب، ہم جانتے ہیں کہ ہر طالب علم کے لیے نام کو محفوظ کرنا ہوگا۔



08:40:22

CGPA کو ذخیرہ کرنا ہوگا، رول نمبر کو ذخیرہ کرنا ہوگا۔ یہ ممکن ہے کہ کہیں سی جی پی اے کی جگہ فیصد ذخیرہ کیا جائے۔ ہر طالب علم کے لیے والدین کا نام محفوظ کیا جا سکتا ہے۔ ہر طالب علم کی آدھار آئی ڈی کو محفوظ کیا جا سکتا ہے۔ اس کا مطلب یہ ہے کہ تمام معلومات عام ہوں گی، اس لیے بار بار ایک ہی قسم کے متغیرات بنانے کے بجائے بہتر ہے کہ بہتر انتظام کیا جائے۔ ڈیٹا مینجمنٹ بھی ایک بہت اہم بنیادی تصور ہے جب ہم پروگرامنگ کرتے ہیں تو پھر ڈیٹا کو اچھے طریقے سے کیسے مینیج کیا جائے۔ اگر معلومات کی ایک ہی قسم ہے، تو اس کے لیے وہی ڈیٹا ٹائپ بنائیں، جو ہم کرتے ہیں۔



08:40:51

ہم اسے سٹرکچر کی مدد سے بناتے ہیں، اسی لیے تمام ڈیٹا ہمارے پاس اسٹرکچرڈ فارمیٹ میں آتا ہے۔ اگلا، اگر ہم اس کے بارے میں بات کرتے ہیں، تو اگلا ہم ڈھانچے کی صف کے بارے میں پڑھیں گے۔ اب ہم نے پڑھا ہے کہ ہم عدد کی ایک صف بنا سکتے ہیں، جیسے کہ ہم طلبہ کے رول نمبرز کو ذخیرہ کرنا چاہتے ہیں، اس لیے 100 طلبہ کے لیے ہم نے طلبہ کے رول نمبروں کی ایک صف بنائی۔ اسی طرح، اگر ہم فلوٹ میں قیمت رکھنا چاہتے ہیں، تو ہم float، پھر قیمت، پھر 100 اشیاء کی قیمت لکھیں گے۔ تو یہاں، پہلے ہم ڈیٹا ٹائپ لکھتے ہیں، پھر متغیر۔



08:41:22

نام اور پھر مقدار، پہلے ڈیٹا کی قسم، پھر متغیر کا نام، پھر مقدار۔ اسی طرح، یہ ڈھانچے میں ہوتا ہے. ہم اسی طرح ڈھانچے کی صفیں بنا سکتے ہیں۔ پہلے ڈیٹا کی قسم، یعنی ہمارا اسٹرکچر اسٹوڈنٹ، پھر متغیر کا نام اور پھر مقدار۔ پہلے ڈیٹا کی قسم، پھر متغیر کا نام، پھر مقدار۔ لہذا، اگر ہم ڈھانچے کی صف کو سمجھنا چاہتے ہیں جس کا ہم نے یہاں اعلان کیا ہے، تو سب سے پہلے، ہم نے ڈیٹا ٹائپ کو بتایا ہے کہ ڈھانچہ اسٹوڈنٹ ہے۔ تینوں اریوں کا ڈیٹا ٹائپ، پھر ہم نے EC لیا، تو یہاں 100 Electronics ہیں۔



08:41:52

ہم بچوں کی معلومات کو سٹرکچر کے اندر محفوظ کریں گے، اس لیے ہم نے 100 کا نمبر دیا ہے، پھر ہم COE کے 100 بچوں کی معلومات کو ذخیرہ کریں گے، پھر ہم IT کے 100 بچوں کی معلومات کو محفوظ کریں گے، تو یہ تین الگ الگ صفیں بن جائیں گی، اب طلبہ پہلے سے موجود تھے، ہم نے پہلے سے ہی طلبہ کا ڈھانچہ بنا لیا ہے، اب یہاں ہم چاہتے ہیں کہ EC کے 100 بچے، COE کے 100 بچوں اور IT کے 100 بچوں کے سائنس کے بچے۔ علیحدہ معلومات کو ذخیرہ کیا جانا چاہئے، لہذا اب آپ ان کے لئے علیحدہ صفیں بنائیں گے اور آپ ان تک کیسے رسائی حاصل کریں گے، آپ اس فارمیٹ میں ان تک رسائی حاصل کریں گے



08:42:21

کہ پہلے ہمیں صف کا نام لکھنا ہے، پھر انڈیکس، پھر رول نمبر، تو اس سے کیا ہوگا کہ ہم نے میموری کے اندر اپنے 100 اسٹرکچر بنائے ہیں، اس میں یہ ہماری EECE کی قطار کا طالب علم ہے، یہ EC کا پہلا طالب علم ہے، یہ EC کا دوسرا طالب علم ہے اور اسی طرح، اس طالب علم کے اندر ایک نام، ایک رول نمبر اور ایک طالب علم کا ایک CGPA اور ایک CGPA بھی ہے، اور ایک CGPA کا نمبر بھی ہے اس طالب علم کے لیے معلومات، ہر طالب علم کی اپنی انفرادی معلومات ہوتی ہیں اور اگر ہم اس طالب علم کے لیے یہ معلومات فرض کریں۔



08:43:02

اگر ہم کسی طالب علم کے ای سی کے رول نمبر تک رسائی حاصل کرنا چاہتے ہیں تو ہم 0 ڈاٹ رول نمبر کا EC کیا لکھیں گے اب اگر ہم اس کو رول نمبر تفویض کرنا چاہتے ہیں تو فرض کریں کہ 1664 اسائنمنٹ اس طرح ممکن ہے، اس لیے سب سے پہلے ہم اپنی صف کا نام لکھیں گے، پھر ہم انڈیکس لکھیں گے، اس کے بعد ایک ڈاٹ ڈال کر ہم اسی طرح کے ڈاٹ نمبر کو لکھیں گے جس سے ہم پراپرٹی کے نام تک رسائی حاصل کرنا چاہتے ہیں۔ اور I0 CGPA۔ اب اصل میں ہم طلباء کی ایک صف بنائیں گے، آئیے پرانے کوڈ کو ہٹا دیں، تو اسٹرکچر اسٹوڈنٹ ہمارے پاس ہے۔



08:43:37

یہ پہلے سے ہی بنایا گیا ہے۔ یہاں، ہم سخت طالب علم لکھتے ہیں. اب، ہم صف کا نام EC رکھنے جا رہے ہیں۔ ہمارے پاس EC کے تحت 100 بچے ہیں۔ لہذا، اگر ہم ہر بچے کا رول نمبر EC میں محفوظ کرنا چاہتے ہیں، تو ہم اسے 1664 لکھیں گے۔ اگر ہم اسی بچے کا CGPA EC میں محفوظ کرنا چاہتے ہیں، تو ہم اسے 99.2 لکھیں گے۔ اور اگر ہم اسی بچے کا نام محفوظ کرنا چاہتے ہیں، تو پھر، ہم پہلے ATR CPY 0 نام لکھیں گے اور پھر اپنا نام لکھیں گے۔ اب، آپ اس معلومات کو پرنٹ بھی کر سکتے ہیں۔ پرنٹ ایف کی شکل میں، سب سے پہلے، ہم نام، فیصد، ایس لکھیں گے، اب صرف نام پرنٹ کریں.



08:44:18

چلو اس کو کرواتے ہیں۔ اگر آپ پہلی بار کوڈ لکھ رہے ہیں، تو آپ کو تینوں پرنٹ کروانے ہوں گے۔ dot name اور آپ اسے ایک بار چلائیں گے۔ نام یہاں چھاپ دیا گیا ہے۔ وہ کون سا نحو ہے جو نارمل نکل رہا ہے؟ پہلے آپ کو ڈیٹا ٹائپ، پھر ویری ایبل کا نام، اری کا نام اور پھر ارے کا سائز لکھنا ہوگا اور اس میں آپ کو صرف اسی انڈیکس فارمیٹ سے ویلیوز تک رسائی حاصل کرنی ہوگی، جب بھی آپ ویلیوز تفویض کر رہے ہوں یا ویلیوز پرنٹ کر رہے ہوں یا استعمال کر رہے ہوں۔ اب آئیے ڈھانچے کی ابتدا کے بارے میں بات کرتے ہیں۔ ہم نے اب تک کیا کیا؟ ہم نے ایک کیا ہے۔



08:44:47

ہم نے سٹرکچر کا اعلان کیا، پھر اس کے لیے ایک ویری ایبل بنایا، پھر ہم ایک ایک کر کے ویری ایبل کی پراپرٹیز تفویض کرتے ہیں، لیکن ڈاٹ آپریٹر کو بار بار استعمال کرنے کے بجائے، ہم ایک ہی وقت میں تمام پراپرٹیز تفویض کر سکتے ہیں، اسے انیشیلائزنگ سٹرکچر کہتے ہیں۔ تو ہم کس شکل میں ڈھانچے کو شروع کرتے ہیں؟ سب سے پہلے اپنے سٹرکچر کا نام لکھیں یعنی ڈیٹا ٹائپ کریں، اس کے بعد ہمارے ویری ایبل کا نام لکھیں اور دائیں طرف ہماری تینوں ویلیوز لکھیں، مثال کے طور پر اگر نام لکھنا ہے تو پہلے نام، پھر رول نمبر، پھر ہمارا CGPA، طالب علم۔



08:45:16

s2 کی بات کریں تو اس کے لیے بھی پہلے نام، پھر رول نمبر، پھر CGPA لکھا جاتا ہے۔ اب اگر ہم دائیں جانب والدین کے اندر قطار لکھتے ہیں، تو اس کا مطلب ہے کہ s3 کی تینوں ویلیوز null ویلیوز ہوں گی، یعنی صفر خود بخود سب پر چلا جائے گا۔ تو یہاں ہم اعلان کر رہے ہیں لیکن صفر خود بخود ان کو تفویض کر دیا جائے گا۔ لہذا ایک لائن میں شروع کرنے کا فائدہ یہ ہے کہ آپ کو چار مختلف لائنیں لکھنے کی ضرورت نہیں ہے۔ آپ سب سے پہلے s1 کا اعلان کریں گے، پھر s1 کا رول نمبر بنائیں گے، پھر s1 کا CGPA بنائیں گے۔ لیکن اب ہم یہ کریں گے۔



08:45:47

آپ تمام کام ایک ہی لائن میں کرنے کے قابل ہیں، آئیے اسے ایک بار آزمائیں، آئیے اسے ڈیلیٹ کریں اور اسٹوڈنٹ s1 کو برابر کریں سب سے پہلے رول نمبر 1664 لکھیں میں اسی فارمیٹ میں جا رہا ہوں جس میں میں نے سٹرکچر کے اندر پیرامیٹرز کی وضاحت کی ہے اور میں تجویز کرتا ہوں کہ جب بھی آپ اس طرح کی چیزوں کا اعلان کریں، اسے ہمیشہ پڑھنا چاہیے اور اگر کوئی نیا پروگرام آتا ہے تو اس کو پڑھنا چاہیے۔ پروگرامنگ کی ایک بہت اچھی عادت ہے کہ جس ترتیب میں آپ



08:46:18

جب ہم چیزوں کا اعلان کرتے ہیں تو ان کو اسی ترتیب سے اقدار تفویض کریں، تاکہ یہ منظم نظر آئے۔ ٹھیک ہے، ہاں، سب سے پہلے اگر رول نمبر لکھا جائے تو وہ رول نمبر ہی ہوگا۔ اس کے بعد اگر سی جی پی اے لکھنا ہے تو ہم اپنا سی جی پی اے لکھتے ہیں اور اس کے بعد نام لکھ کر محفوظ کرتے ہیں۔ اب ہم پہلے کی طرح اقدار تک رسائی حاصل کر سکیں گے، مثال کے طور پر، اگر میں D سے طالب علم کے رول نمبر کا فیصد پرنٹ کرنا چاہتا ہوں، تو یہاں ہم s1 ڈاٹ رول نمبر لکھ سکتے ہیں۔ آئیے اسے بچائیں اور چلائیں۔ تو جو کچھ ہو رہا ہے، وہ عام طور پر چل رہا ہے، یعنی پہلے کی طرح، ایک ہی لائن کا۔



08:46:51

اس کے اندر ہم نے اپنی ساخت کا ایک متغیر بنایا اور اس میں قدریں تفویض کیں اور اس کے بعد ہم نے ان اقدار کو اگلی لائن میں استعمال کیا۔ تو اس طرح، اگر آپ پہلے سے ہی کسی ڈھانچے کی تمام اقدار کو جانتے ہیں، تو بہتر ہے کہ انہیں ایک ہی لائن میں تفویض کریں۔ اگلا، آئیے ڈھانچے کے نکات کے بارے میں بات کرتے ہیں۔ جس طرح ہمارے پاس اریوں کے لیے پوائنٹس، سٹرنگز کے لیے پوائنٹس، کریکٹرز کے لیے پوائنٹس ہیں، ہم ہر ویری ایبل کے لیے پوائنٹر بنا سکتے ہیں، اسی طرح کسی ڈھانچے کے لیے بھی ہم پوائنٹر بنا سکتے ہیں۔



08:47:16

ہم پوائنٹر بنا سکتے ہیں کیونکہ بالآخر سٹرکچر بھی ایک ڈیٹا ٹائپ ہے اگر ہم نے سٹرکچر ٹائپ s1 کا ویری ایبل ڈیکلیئر کر دیا ہے تو ہم اس کے لیے پوائنٹر کو کیسے ڈیکلیئر کریں گے، سب سے پہلے ہمیں ٹائپ لکھنی ہے جیسے ہم نے int سٹار ptr لکھا ہے اور اوپر ہم نے int a لکھا ہے اور پھر ptr = m لکھیں گے لیکن a کا فارمیٹ وہی رہے گا جس کے بعد سٹارٹ کی جگہ سٹارٹ کے اندر آئے گی اور یہاں صرف سٹار کا فارمیٹ آئے گا۔ ptr ہم m یعنی s1 کے ایڈریس کو تفویض کریں گے لہذا ڈیٹا کی قسم میں پورے فارمیٹ کو ایک ہی رکھا جانا چاہئے۔



08:47:53

float care، ان کی جگہ ہمیں ڈیٹا ٹائپ struct طالب علم کو رکھنا ہوگا، جس کے ذریعے ہم بتا سکتے ہیں کہ یہ کسی ڈھانچے کی طرف اشارہ ہے۔ آئیے ایک بار اس کو بھی آزما لیں۔ طالب علم s1 کے لیے جو ہم نے اوپر بنایا ہے، آئیے اس کے لیے ایک پوائنٹر بناتے ہیں struct student star ptr اور اس ptr کے اندر، s1 کا ایڈریس تفویض کریں۔ اب اگر ہم ایک ہی رول نمبر پرنٹ کروانا چاہتے ہیں تو پھر وہی رول نمبر کیسے پرنٹ ہو گا؟ پہلے ہم نے s1 کا رول لکھا تھا، اب اگر ہم اسے پوائنٹر کی مدد سے پرنٹ کروانا چاہتے ہیں تو اسٹار پوائنٹر ہمیں کیا دے گا؟ یہاں، ستارہ پوائنٹر ہمیں دیتا ہے



08:48:26

اس سے پوائنٹر کی ویلیو ملتی ہے جیسے اگر میں یہاں سٹار پوائنٹر لکھتا ہوں، ستارہ پوائنٹر یا پوائنٹر کے ایڈریس پر ویلیو تو یہ ویلیو پورے s1 کی ویلیو ہوتی ہے، یعنی اب میں اس کی طرف اشارہ کر رہا ہوں لیکن مجھے خاص طور پر صرف رول نمبر چاہیے، اس لیے مجھے سٹار پوائنٹر کے ذریعے پورا s1 ملا، اب میں اس کا رول نمبر اس کے سامنے ڈاٹ رول لگا کر حاصل کروں گا، امید ہے کہ اس پوائنٹ کے ذریعے ہم پوری چیز واضح کر دیں گے۔ s1 اور جب ہم ڈاٹ رول کر رہے ہوتے ہیں تو ہمیں پورا رول نمبر ملتا ہے۔



08:49:00

تو یہ ہمارا مکمل متغیر ہے اور یہ صرف ایک پیرامیٹر کو ظاہر کرنے کا طریقہ ہے۔ اب آئیے اسے بچا کر چلائیں۔ چنانچہ طالب علم کا رول نمبر جو ہمارے لیے پہلی بار چھاپا گیا تھا، وہی قیمت دوسری مرتبہ بھی ہمارے لیے چھاپی گئی، لیکن اس بار ہم نے اسے پوائنٹس کی مدد سے پرنٹ کرایا۔ میں ایک چھوٹی سی تبدیلی کرتا ہوں اور دیکھتا ہوں کہ کیا آپ میری سکرین کو دیکھ کر کوڈ لکھ رہے ہیں، تو یہ ممکن ہے کہ آپ میں سے بہت سے طلباء یہ غلطی کر بیٹھیں۔ ہم کیا غلطی کرتے ہیں؟ ہم اس پیرنس کو یہاں ستارے کے بعد لگاتے ہیں، یعنی کچھ اس طرح



08:49:30

اس طرح ہم یہ کام کرتے ہیں کہ پیرنز یہاں اور یہاں آیا ہے، یہ کیا دیتا ہے، اس سے ہمیں ایک خرابی ملتی ہے کیونکہ سٹار کو ہمیشہ پوائنٹر کے ساتھ رکھنا پڑتا ہے کیونکہ اب جو ہو رہا ہے یہ پوائنٹر ڈاٹ رول لے رہا ہے اور اس کے بعد اس میں سٹار آپریٹر لگا رہا ہے، لیکن پہلے ہمیں سٹار آپریٹر کو پوائنٹر کے ساتھ لگانا پڑتا ہے اور پھر ہمیں اس رول کو ہمیشہ یاد رکھنا پڑتا ہے جب اس کا نمبر ہونا ضروری ہے تو اسے ہمیشہ یاد رکھنا ہے۔ ڈھانچے کے لیے پوائنٹر، یعنی ایک پوائنٹر ہوتا ہے جو کسی ڈھانچے کی طرف اشارہ کر رہا ہوتا ہے، پھر پہلے اسے پیرنز میں ڈالنا پڑتا ہے، پھر ہمیں ڈاٹ لگانا پڑتا ہے۔



08:50:00

ہمیں آپریٹر استعمال کرنا ہے، اگلا اپنا تیر آپریٹر دیکھتے ہیں۔ ابھی تک ہم نے سٹرکچرز کے بارے میں بات کی ہے تو ہم سٹرکچرز کے اندر کیا کریں، s1 رول نمبر یا s1 نام اور اگر ہمیں پوائنٹر میں یہی فارمیٹ لکھنا ہے تو سٹار ptr ڈاٹ رول نمبر لکھیں گے یا سٹار ptr d نام لکھیں گے لیکن اگر ہم اس پوائنٹر فارمیٹ کو فالو کریں تو یہ بہت پیچیدہ ہو جاتا ہے، اس لیے اس ڈاٹ کے بجائے اگر ہم operator کوڈ لکھ سکتے ہیں تو arrow format استعمال کر سکتے ہیں۔ کہیں تو ہم اسے بطور استعمال کر سکتے ہیں۔



08:50:35

آپ پی ٹی آر ایرو کوڈ میں تبدیل کر سکتے ہیں کہ یہ تیر کیسے لکھیں، آپ کی سکرین پر زیادہ مزہ اور عظیم سے زیادہ کا آپریٹر ظاہر ہو گا تو یہ اپنے آپ میں ایک تیر بناتا ہے، اس لیے جب بھی آپ اس تیر کو درمیان میں لکھتے ہیں، تو آپ اس نحو کو اس نحو میں تبدیل کرتے ہیں اور تیر آپریٹر کی ترکیب بہت آسان ہے جیسے آپ پوائنٹس میں استعمال کر رہے ہیں، پھر کبھی کبھار یہ دیکھنے کے بعد کہ لوگ ستارے کے ساتھ منسلک ہوتے ہیں جس کی قدر کو کنفیوز کے ساتھ کیا جاتا ہے۔ کے بارے میں بات کر رہے ہیں، لیکن یہاں سے ہم اسے بہت واضح طور پر دیکھ سکتے ہیں۔



08:51:06

اگر آپ مجھے اس قدر کا کوڈ لاتے ہیں جس کی طرف پوائنٹر اشارہ کر رہا ہے، تو ہمارا مسئلہ حل ہو جاتا ہے کہ ستارے کو کس چیز پر لگانا ہے اور پنسلوں کو کہاں رکھنا ہے اور ہم صرف ایک تیر لگا سکتے ہیں، آئیے اسے بھی آزماتے ہیں، ہم نے ابھی جو کیا وہ پوائنٹر ڈاٹ رول پرنٹ کرنا تھا، آئیے اسی لائن کو کاپی کر کے پیسٹ کریں، یہ ہمارا طالب علم ہے، اب ہم اس پوائنٹر کو پرنٹ کریں گے، ہم طالب علم ڈاٹ رول کو پرنٹ کریں گے۔ یہاں لکھیں پی ٹی آر تیر کا مطلب ہے عظیم اور عظیم کی نشانی اور اس کے بعد



08:51:40

بعد میں ہم رول نمبر لکھیں گے اور پھر ہم محفوظ کریں گے اور چلائیں گے، پھر ڈاٹ رول نمبر اور وہی ویلیو پرنٹ ہوئی، پوائنٹس کے ساتھ اور جب ہم نے ایرو آپریٹر کا استعمال کیا، تب بھی وہی ویلیو پرنٹ ہو گئی، ہم اپنا نام اور اپنا سی جی اس ایرو آپریٹر کے ساتھ پرنٹ کروانے جا رہے ہیں تاکہ یہ ذہن میں ٹھیک سے لکھا جائے، یہاں ہم نام لکھیں گے، اور اب ہمارا CG نمبر ہے، اب ہم اپنا CG نمبر لکھیں گے، لہذا ہم اپنا نمبر لکھیں گے۔ نام، سی جی پی بھی، تو جب بھی ہم پوائنٹس استعمال کر رہے ہیں، تو آپ کے لیے تجویز ہے کہ سادگی



08:52:18

کوڈ کو پڑھنے والوں کے لیے اور آپ کے لیے بھی آسان بنانے کے لیے، اگلی بار جب آپ اسے پڑھ رہے ہوں تو آپ کو ایرو آپریٹر کا استعمال کرنا چاہیے، ورنہ اگر آپ کسی اسٹرکچر کا نارمل ویری ایبل بنا رہے ہیں، تو ڈاٹ آپریٹر بھی ٹھیک ہے، یہ مختلف چیزیں ترجیح دیتی ہیں، یعنی وہ پروگرامر کو چوائس دیتے ہیں کہ آپ اپنی مرضی کے مطابق اپنا کوڈ اپنی مرضی کے مطابق فارمیٹ میں لکھ سکتے ہیں، تو پھر کیا ہوگا، اس کے بعد کیا ہوگا؟ ایک پروگرامر سوچتا ہے کہ دوست یہ ڈاٹ مجھے یا مجھے آسان لگتا ہے۔



08:52:46

اس لیے پوائنٹر کے ast رسک والا اچھا لگتا ہے یا مجھے تیر والا سب سے اچھا لگتا ہے، میں اسے استعمال کرنا چاہتا ہوں اس لیے مجھے اپنے کوڈ میں پرسنلائزیشن کا تھوڑا سا احساس ہوتا ہے کہ ہاں، ہم نے اپنی مرضی کے مطابق نحو کا تھوڑا سا انتخاب کیا ہے۔ اگلا آئیے ڈھانچے کو افعال میں منتقل کرنے کے بارے میں بات کرتے ہیں۔ جس طرح سے ہم مختلف قسم کے ڈیٹا کے متغیرات کو پاس کر سکتے ہیں، ہم ڈھانچے کے متغیرات کو بھی ایک فنکشن میں منتقل کر سکتے ہیں جیسے کہ ہم انٹیجر ٹائپ a یا b کے عدد کو کسی فنکشن میں منتقل کرتے تھے۔



08:53:14

اسی طرح، ہم یہاں سٹرکچرز کے لیے جو ویری ایبل بناتے ہیں، اسٹوڈنٹ ون، اسٹوڈنٹ ٹو، اسٹوڈنٹ تھری، ہم انہیں اپنے فنکشنز کے اندر بھی پاس کرسکتے ہیں۔ جیسے، وہ فنکشن جن کے پیرامیٹرز میں ڈھانچہ ہوتا ہے، انہیں کیسے لکھا جائے؟ عام طور پر فنکشن کی قسم لکھی جاتی ہے یعنی واپسی کی قسم اور اس کے بعد فنکشن کا نام اور اگر اس کے اندر پیرامیٹر کا ڈھانچہ آنا ہو تو سب سے پہلے ٹائپ لکھیں گے جیسا کہ ہم int a لکھتے تھے تو یہاں int کی جگہ struct طالب علم آئے گا اور a کی جگہ یعنی متغیر کے نام پر ہمارے پاس s1 ہے۔



08:53:42

لہذا اگر ہم فنکشن میں پیرامیٹر کو منتقل کرنا چاہتے ہیں، فرض کریں کہ ہم نے مین فنکشن کے اندر s1 نام کے ساتھ ایک سخت طالب علم بنایا ہے، تو اب مجھے پرنٹ انفو کو کال کرنا ہے، پھر پرنٹ انفارمیشن کے اندر میں صرف s1 لکھ سکتا ہوں، اس طرح s1 اس فنکشن میں جائے گا۔ تو اب اسی کام کے لیے ایک فنکشن لکھتے ہیں، یہاں ہم void پرنٹ کی معلومات لکھیں گے اور پھر لکھیں گے struct student s1۔ اب اگر یہی سطر یہاں لکھنے کے بجائے اوپر لکھ کر محفوظ کر لیتے تو غلطی ہو جاتی۔ غلطی اس لیے ہوئی ہوگی کہ طالب علم ابھی پیدا ہوا ہے۔



08:54:19

ہم نے اس کی تعریف نہیں کی۔ مرتب کرنے والا کیا کرتا ہے؟ یہ اوپر سے لائن بہ لائن شروع ہوتا ہے۔ سب سے پہلے، یہ اس لائن کو پڑھتا ہے، پھر یہ اس لائن کو پڑھتا ہے، پھر یہ اس لائن کو پڑھتا ہے۔ یہاں، یہ الجھ گیا کہ عدد، فلوٹ، کردار۔ تو، میں اب تک جانتا تھا کہ یہ اسٹرکچر طالب علم کیا ہے کیونکہ اس نے ابھی تک اسٹرکچر نہیں پڑھا ہے۔ اس لیے پہلے ساخت کا اعلان کرنے کے بعد، ہم اسے دوسرے مختلف فنکشنز میں یا درحقیقت اپنے مین فنکشن کے اندر بھی استعمال کر سکتے ہیں۔ اب، یہاں، ہم نے اپنے فنکشن کا اعلان کیا ہے۔ ہم نے یہاں اس کی تعریف کی ہے۔



08:54:47

آئیے اس فنکشن کو لیں اور ہم اپنی تینوں ویلیوز پرنٹ کرنے جا رہے ہیں۔ لہذا اگر ہم طالب علم کی معلومات پرنٹ کرنا چاہتے ہیں تو ہم اس فنکشن کو کال کریں گے۔ یہاں طالب علم کی معلومات کے اوپر ایک اور پرنٹ ایف اسٹیٹمنٹ لکھتے ہیں۔ اس بار ہم ڈاٹ آپریٹر استعمال کریں گے، ہم تیر آپریٹر کا استعمال نہیں کریں گے۔ آئیے یہاں ڈاٹ رول نمبر s1 لکھتے ہیں۔ نام اور سی پی 1 کے لیے ہمارا ایس 1 آئیے اس پرنٹ انفارمیشن فنکشن کو کال کریں۔ یہاں ہم پہلے ہی ایک s1 بنا چکے ہیں۔ اب ہم اسے کال کریں گے اور پرنٹ کی معلومات اس تک پہنچائیں گے۔ تو



08:55:28

یہاں ہم s1 پر دلیل کے طور پر گزرے ہیں اور اس s1 کے اندر ہماری دلیل کاپی ہو جائے گی، سٹرکچرز کو ویلیو کے حساب سے کہا جاتا ہے، یعنی جو ڈھانچہ ہم نے یہاں بنایا ہے وہ وہاں نہیں ہے، یہ s1 ایک اور ڈھانچہ ہے جس میں ہماری دلیل کی کاپی بنائی جائے گی، اس لیے جب ہم پرنٹ انفو کو کال کریں گے تو میموری میں دو ڈھانچے موجود ہوں گے، دونوں کا نام s1 رکھا جائے گا، اس لیے اب یہ معلومات مکمل ہو چکی ہیں اور اس کو پرنٹ کرنے کے لیے سٹوڈنٹ کو مکمل کر لیا گیا ہے۔ ہمارے پاس آیا ہے، اب قدر کے حساب سے پکارو۔



08:56:02

قدر کو حوالہ سے کہا گیا ہے، آئیے اسے ایک بار تھوڑا سا چیک کرتے ہیں، s1 کی ویلیو یعنی اس کے رول نمبر کو تبدیل کر کے ہم اسے یہاں 1660 بنا سکتے ہیں، پہلے یہ 1664 تھا، اب ہم نے اسے 1660 بنا دیا ہے اور اب ہمیں فنکشن کال کے بعد مین فنکشن کے اندر یہ رول نمبر پرنٹ ملتا ہے، تو کیا ہوا، رول نمبر صرف ایک ہی پرنٹ ہوا، اصل فنکشن 6 4 نے پرنٹ نہیں کیا۔ کیوں تبدیل کریں کیونکہ ڈھانچے کو کال کے ذریعے ویلیو کے ذریعے منتقل کیا جاتا ہے، جبکہ اگر ہم نے یہ تبدیلی اس لائن سے پہلے مین فنکشن کے اندر کی تھی، تو اس صورت میں



08:56:35

ہمارے لیے پرنٹ ہونے والا رول نمبر 1660 ہے، لہٰذا اسے مین فنکشن کے اندر تبدیل کیا جا سکتا ہے لیکن دیگر ڈھانچوں کی قدر کو تبدیل نہیں کیا جا سکتا کیونکہ وہاں کا پیرامیٹر اصل دلیل کی کاپی ہے۔ اگلے موضوع میں جس کے بارے میں ہم بات کریں گے، ہم ٹائپ ڈیف کی ورڈ کے بارے میں پڑھنے جا رہے ہیں۔ اب تک ہم نے بہت سارے کی ورڈ پڑھے ہیں، کیس کی ورڈ پڑھا ہے، int ہمارے کلیدی الفاظ میں سے ایک ہے، float ایک کی ورڈ ہے، اس کے علاوہ سوئچ ایک کی ورڈ ہے، بریک ایک کی ورڈ ہے، continue ایک کی ورڈ ہے، اسی طرح C میں ایک اور کی ورڈ ہے جس کا



08:57:04

نام ٹائپ ڈیف ہے ٹائپ ڈیف کا کام ڈیٹا کی قسموں کے لیے ایک عرف بنانا ہے اب گھر میں جس نام سے ہمیں پکارا جاتا ہے وہ نام شاذ و نادر ہی ہوتا ہے ہر کسی کا اپنا اپنا عرفی نام ہوتا ہے جیسے فرض کریں کہ آپ کا ایک دوست سریش ہے اور اس کا عرفی نام چنٹو ہے اب ہم جتنا زیادہ اسے چنٹو کے نام سے پکارنا چاہیں گے اتنا ہی اس کے نام کا استعمال اتنا ہی زیادہ ہو گا کہ اس کے نام کا استعمال مکمل طور پر اس کے نام کی بجائے مکمل طور پر ڈی ایف کے نام سے پکارا جائے گا۔ عرفی نام بنائیں عرفی نام کا مطلب ہے عرف کب



08:57:38

ایک شخص کے لیے جاسوس ہوتے ہیں، جیسا کہ آپ نے جیمز بانڈ کو دیکھا ہی ہوگا، پھر جیمز بانڈ کا عرف 007 ہے یا جیمز بانڈ، یہ بھی معلوم نہیں کہ یہ اس کا اصلی نام ہے یا نہیں، اس لیے فلم میں جتنے بھی اداکار یہ کردار ادا کر چکے ہیں، ان کا نام جیمز بانڈ ہے، اس لیے ہم فرض کر سکتے ہیں کہ جیمز بانڈ ایک عرف کی طرح ہے، یعنی اس کے کردار کے لیے یہ ضروری نہیں کہ اصل نام ہے، اس لیے یہ ضروری نہیں کہ اس کا اصل نام ہو۔ عرف، عرف ایک متبادل، ایک مختلف نام ہے جس سے ہم ایک ہی چیز کو پکارتے ہیں، لہذا اگر ہمیں اپنی



08:58:09

اگر ہمیں ڈیٹا کی اقسام کے لیے ایک عرف بنانا ہو تو ہم ٹائپ ڈیف کی ورڈ استعمال کرتے ہیں۔ اب ہم یہ عرف اپنے انٹیجر ڈیٹا ٹائپ کے لیے بھی بنا سکتے ہیں، فلوٹ کے لیے بھی، کیر کے لیے بھی، لیکن یہ پہلے سے ہی چھوٹی ڈیٹا کی قسمیں ہیں، اور ہم ان کے لیے کون سا چھوٹا متغیر بنا سکتے ہیں؟ ہم سب سے زیادہ یہ کر سکتے ہیں کہ ہم کردار کو سیچ کے نام سے پکارنا شروع کر دیں گے، ہم فلوٹ کو fl کے نام سے پکارنا شروع کر دیں گے، ہم int کو i کے نام سے پکارنا شروع کر دیں گے، لیکن ہمیں اسے اس طرح نہیں پکارنا چاہیے کیونکہ ہم پہلے ہی i کا استعمال بہت سارے لوپس میں کر رہے ہیں۔



08:58:38

ہم ایسا کرتے ہیں لیکن ان کا اصل استعمال یعنی ٹائپ ڈیف کا اصل استعمال تب آتا ہے جب ہم سٹرکچرز کی بات کرتے ہیں کیونکہ آپ کسی بھی ڈھانچے کو کچھ بھی نام دے سکتے ہیں جیسے یہاں میں نے ایک مثال لی ہے کہ ہم نے ایک ڈھانچہ بنایا ہے اور اسے کمپیوٹر انجینئرنگ اسٹوڈنٹ کا نام دیا ہے لیکن جب بھی ہم ڈھانچہ کا ویری ایبل ڈیکلیئر کرتے ہیں تو ہم اسے کمپیوٹر انجینئرنگ اسٹوڈنٹ کے طور پر نہیں لکھنا چاہتے اس لیے کمپیوٹر انجینئرنگ کے بجائے ہر وقت میں انجینئرنگ اسٹوڈنٹ لکھتا ہوں کہ میں کمپیوٹر انجینئرنگ اسٹوڈنٹ لکھتا ہوں۔ ایک سادہ نام کے ساتھ جائیں، تاکہ وہ سادہ نام



08:59:10

میں نے COE میں COE، Student s1 لیا ہے اور اس COE کا مطلب کمپیوٹر انجینئرنگ اسٹوڈنٹ نام کا ایک ڈھانچہ ہے، تو یہ کیسے ممکن ہوگا، یہ ٹائپ ڈیف کی ورڈ سے ممکن ہوگا، اس لیے جب بھی ہم کسی ڈھانچے کی تعریف کرتے ہیں تو پہلے قسم def، پھر ڈھانچہ اور پھر ہمارے ڈھانچے کا پورا نام استعمال ہوتا ہے، پھر عام طور پر اس ڈھانچے کے تمام پیرامیٹرز کو ڈیفائن کرنا ہوتا ہے، اس کا مطلب یہ ہے کہ اس کے بند ہونے کا مطلب یہ ہے کہ اس کی اصلیت کو بند کرنا ہوگا۔ ہماری ساخت کا نام اور یہ اس کا عرفی نام ہے جس سے ہم اسے پکار رہے ہیں۔



08:59:42

ہم عرف لکھیں گے، اس کے بعد ہم سٹیٹمنٹ ٹرمینیٹر لکھیں گے اور اب اگر ہم اسی ساخت کا ویری ایبل بنانا چاہتے ہیں تو ہمیں صرف عرف لکھنا ہوگا، یعنی ہم صرف COE لکھیں گے، یہاں COE اسٹوڈنٹ ون ہے اور پھر کمپیوٹر اور انجینئرنگ اسٹوڈنٹ ایک، تو آئیے ایک بار آزمائیں، پہلے ہم کیا کریں گے، آئیے مین فنکشن میں اپنا کوڈ ہٹائیں گے، تو ہم اسٹوڈنٹ کے لیے ڈی ٹائپ کریں گے، تو ہم اپنا کوڈ لکھیں گے، تاکہ ہم اسسٹنٹ کو لکھیں گے۔ اسٹرکچر طالب علم کے سامنے، صرف ڈیف ٹائپ کریں اور آخر میں اس کا عرف لکھیں، اس لیے ہم نے طالب علم کے لیے ایک عرف بنایا ہے۔



09:00:13

دیا ستو، چلو اسے بچاتے ہیں۔ تو ہم پہلے کیا کرتے تھے، پہلے ہم سخت سٹوڈنٹ s1 لکھتے تھے، اس کے بجائے اب ہمیں صرف s2 لکھنا پڑے گا، یعنی اس پورے سخت طالب علم کو صرف AU نے بدل دیا ہے، اب نہ تو ہمیں اسے سخت بتانا ہے اور نہ ہی ہمیں سٹوڈنٹ بنانا ہے، ہم صرف ST U لکھ سکتے ہیں، اگر ہم ایک مختلف مثال لیں تو ہم اس میں لکھ سکتے ہیں کہ ہم تینوں انجنوں کی قدر کریں گے اور کمپیوٹر میں ایک ہی انجن کی قدر ہوگی جس میں ہم تینوں کی قدر کریں گے۔ نے اس کا عرف COE بنایا ہے، لہذا اب ہم اسے COE کے نام سے بھی محفوظ کر سکتے ہیں۔



09:00:54

ہم اسے اس لمبے نام کی بجائے کہہ سکتے ہیں آئیے اب اس s1 میں COE COE s1 کا ایک ویری ایبل بنائیں ہم تمام ویلیوز رول نمبر e کے برابر 1664 s1 CGPA e 9.2 تفویض کرتے ہیں وہاں ہم ATR CPY بھی کر سکتے ہیں جس میں ہم s1 نام پاس کریں گے اور اس کے بعد ہم ان اقدار کو بھی پرنٹ کر سکتے ہیں اس کے بجائے طالب علم کا نام مکمل طور پر پرنٹ کرنے کے لیے کمپیوٹر کا نام کس طرح سخت ہوتا ہے۔ انجینئرنگ کے طالب علم نے بس ایک چھوٹا سا پیارا نام لکھنا تھا جسے لکھنے میں وقت نہیں لگا اسے سمجھنے میں بھی وقت نہیں لگا اور پھر



09:01:37

ہم نے تمام پیرامیٹرز کی وضاحت کر دی ہے، آئیے اسے ایک بار چلائیں اور دیکھیں کہ کیا ہمیں صحیح آؤٹ پٹ مل رہا ہے۔ لہذا اگر آپ ایک ڈھانچہ بنا رہے ہیں اور آپ اس کا نام رکھنا چاہتے ہیں کہ اب مجھے کمپیوٹر انجینئرنگ کا پورا نام لکھنا پڑے گا، اگر کوئی نیا پروگرامر آتا ہے، تو میں یہاں صرف COE نہیں لکھ سکتا کیونکہ COE بچوں کے لیے سمجھ میں آتا ہے، اساتذہ اسے سمجھ سکتے ہیں لیکن نیا کوڈر اسے سمجھ نہیں پائے گا، اس لیے وہاں، ڈھانچہ کی وضاحت کرتے ہوئے، آپ کو پورا نام لکھنا چاہیے لیکن جب بھی آپ اسے کسی اور جگہ استعمال کرتے ہیں



09:02:05

اگر یہ موجود ہے تو پھر اسے بار بار لکھنے کا کیا فائدہ ہے، اس لیے وہاں اپنے ڈھانچے کو ایک چھوٹا سا عرفی نام دیں، ہم مختلف عدد کے لیے بھی یہی کام کر سکتے ہیں، فلوٹس کے لیے بھی کر سکتے ہیں، کریکٹرز کے لیے بھی کر سکتے ہیں لیکن ہم ایسا نہیں کرتے کیونکہ ان کے پہلے ہی بہت چھوٹے نام ہیں، اس لیے ان کو عرفی نام دینا زیادہ معنی نہیں رکھتا، زیادہ تر صورتوں میں جب یہ ڈھانچہ استعمال ہوتا ہے، یہی وجہ ہے کہ ڈیف کا استعمال ہوتا ہے۔ آئیے ڈھانچے کی بنیاد پر ان میں سے کچھ سوالات حل کریں۔



09:02:30

پہلا سوال ایڈریس درج کریں، ایڈریس میں آپ کے گھر کا نمبر کیا ہے، آپ کا بلاک نمبر یا آپ اسے گلی نمبر، ہمارا شہر اور پانچ لوگوں کی ہماری ریاست بھی کہہ سکتے ہیں۔ اب یہاں سب سے پہلی چیز جو ہم دیکھیں گے وہ یہ ہے کہ ہمیں لوگوں کے ایڈریس کو محفوظ کرنا ہے، جس میں چار پیرامیٹرز ہیں، مکان نمبر، بلاک نمبر، شہر اور ریاست۔ اب چار پیرامیٹرز پانچ افراد کے لیے ایک جیسے ہیں، اس میں گھر کا نمبر کسی بھی عدد عدد کا ہو گا، بلاک نمبر بھی عددی قسم کا ہو سکتا ہے، شہر ہماری تار ہو گی اور ہماری ریاست کیا ہے۔



09:03:04

یہ ایک سٹرنگ ہوگی، اس لیے یہاں ہمیں بنیادی طور پر مختلف اقسام کو گروپ کرنے اور ایک ایڈریس بنانے کے لیے کہا جا رہا ہے، تو یہاں ہمارے ذہن میں یہ بات آتی ہے کہ ہمیں G سٹرکچر ٹائپ کا ایک ویریبل درکار ہوگا اور ہمیں اس ڈھانچے میں ایسے پانچ ویری ایبلز کی ضرورت ہوگی، ہمیں پانچ لوگوں کی معلومات کو ذخیرہ کرنے کے لیے پانچ ڈھانچوں کی ضرورت ہوگی، تو ہم اس میں کیا کریں گے، ہم ڈھانچے کی ایک صف بنائیں گے، پہلے ہم اس کا نام ذخیرہ کریں گے، پھر ہم پانچوں کی معلومات کو ذخیرہ کریں گے، پھر array کا نام دیں گے۔ اس صف کے اندر کے لوگ، آئیے اس کو تھوڑا گہرائی سے دیکھیں



09:03:35

چلیں اور دیکھتے ہیں کہ پہلے ہم کیا کریں گے۔ سب سے پہلے ہم ڈھانچہ لکھیں گے، پھر اپنے ڈھانچے کا نام، پتہ لکھیں گے۔ اس کے اندر ہم اپنی ساخت کی معلومات لکھیں گے۔ معلومات میں سب سے پہلے ہمارا انٹیجر ہاؤس نمبر آئے گا۔ اس کے بعد انٹیجر بلاک آئے گا، پھر ہمارا کریکٹر سٹرنگ، ہمارا شہر۔ آئیے اسے 100 حروف سے بنائیں۔ اور اس کے بعد ہماری کریکٹر سٹرنگ آئے گی۔ ہماری ریاست۔ آئیے اسے بھی 100 حروف کا بنائیں۔ اور یہیں ہمارا پتہ ہو گا۔ تو اس طرح ہمیں ایڈریس کے نام سے ایک ڈھانچہ بنانا ہے۔



09:04:10

اس کے بعد ہم اسی سٹرکچر کی ایک اری بنائیں گے، یعنی ہم کیا لکھیں گے، structural ایڈریس، یہ ہماری قسم ہے، درحقیقت ہم اسے ٹائپ ڈیف کے ساتھ کیا کر سکتے ہیں، ہم ایک عرف بھی بنا سکتے ہیں، ہم یہاں ٹائپ ڈیف لکھیں گے، ہم یہاں اپنا ADD لکھیں گے، اس لیے ہم ہر جگہ ADD لکھ سکتے ہیں، سٹرکچرل ایڈریس لکھنے کے بجائے، یہاں اب صرف ہم اپنا ایڈریس لکھیں گے، پھر ہم صرف vari کا ایڈریس دیکھیں گے۔ ایڈریسز، کتنے لوگوں کے لیے، پانچ لوگوں کے لیے، تو اس طرح ہمارے ڈھانچے کی صف بن جائے گی، اب اس میں پانچوں لوگوں کے پتے ہوں گے۔



09:04:44

یا تو صارف سے انفارمیشن ان پٹ حاصل کریں یا ہم خود کوئی قیمت تفویض کرکے اسے پرنٹ کروا سکتے ہیں۔ اب اسی چیز کو کوڈ کرنے کی کوشش کریں۔ آئیے اس کوڈ کو یہاں سے ڈیلیٹ کریں اور اب Struct Address کے نام سے ایک نیا ڈھانچہ بنائیں۔ اس کے اندر پہلے ہم انٹ ہاؤس نمبر کو اسٹور کریں گے، اس کے بعد int بلاک، پھر 100 کا کریکٹر سٹی، پھر 100 کی کریکٹر سٹیٹ لکھیں گے اور یہاں ہم نے ایڈریس کے لیے اسٹیٹمنٹ ٹرمینیٹر کے نام سے ایک ڈھانچہ بنایا ہے۔ اب آئیے اس کی ایک صف بناتے ہیں۔ آئیے struct ایڈریس سرنی کو ایک مختصر نام دیتے ہیں، تو آئیے اس کا نام ADS رکھیں اور اسے پرنٹ کریں۔



09:05:25

آئیے سائز پانچ رکھیں۔ آئیے ایڈریس کی معلومات پرنٹ کرنے کے لیے ایک فنکشن بنائیں اور مین فنکشن کے اندر، ہم صارف سے ان پٹ لیتے ہیں۔ تو سب سے پہلے ان پٹ لینے کے لیے، ایک شخص کے لیے انٹر کی معلومات پرنٹ کریں۔ ایک شخص کے لیے معلومات درج کی جائیں گی۔ ہم اس معلومات کو اسکین کریں گے۔ سب سے پہلے ہم گھر کا نمبر لیں گے۔ تو 0 ڈاٹ ہاؤس نمبر کے اشتہارات اسی طرح ہمارے پاس آئیں گے۔ تو، ہم اپنا بلاک یہاں ڈاٹ ڈاٹ بلاک لکھیں گے۔ اب، ہمیں اپنا سٹرنگ ملے گا، یعنی ہمارا شہر سو ڈاٹ سٹی اور پھر ہماری ریاست۔ اور یہاں، کیونکہ ہم



09:06:09

اگر ہم انٹیجر لکھ رہے ہیں تو ہمیں یہاں m ڈالنا پڑے گا تاکہ ہم بلاک کے ایڈریس یا مکان نمبر کے ایڈریس تک پہنچ سکیں۔ اسی طرح ہم مزید چار لوگوں کی معلومات درج کر سکتے ہیں۔ آئیے یہاں دو لکھتے ہیں۔ اور ان تمام معلومات کو پرنٹ کرنے کے لیے آئیے ایک فنکشن بھی بنائیں۔ آئیے اسے پرنٹ ایڈریس کا نام دیں جس میں ہم ڈھانچہ ایڈریس پاس کریں گے اور اس فنکشن میں ہم ایڈریس لکھتے ہیں۔ اب ہم ان پتوں کو جوڑ کر پرنٹ کریں گے۔ ہم ان کو یکجا کرنے کے بعد پرنٹ کیسے کریں گے؟ سب سے پہلے ہم مکان نمبر کے بعد گھر کا نمبر، فیصد d لکھیں گے۔



09:06:46

ہم ایک کوما لگائیں گے اس کے بعد ہم اپنا بلاک نمبر فیصد لکھیں گے بلاک نمبر کے بعد فیصد لکھیں گے ہمارا شہر اور پھر فیصد ہماری ریاست لکھیں گے تو یہاں ہم ڈاٹ لکھیں گے پہلے ہمارے گھر کا نمبر آئے گا پھر ڈاٹ ہمارا بلاک جوڑیں گے پھر ڈاٹ ہمارا شہر اور پھر آخر میں d ڈاٹ ہماری ریاست اس طرح ہمیں پورا پتہ ایک ہی لائن میں اسٹور کرنا ہوگا جیسے ہماری روزمرہ کی زندگی میں ہم اس پورے ایڈریس کو ایک لائن میں محفوظ کرتے ہیں اور اس کو ایک ہی لائن میں محفوظ کرتے ہیں۔ ہم اس قدر کے لیے اپنے مرکزی فنکشن کے ساتھ کیا کرتے ہیں۔



09:07:25

آئیے پرنٹ ایڈریس فنکشن کو کال کریں۔ سب سے پہلے، ہم صفر کے اضافے کے لیے کال کریں گے اور پھر اسی طرح چار مزید کالیں کریں گے۔ ہم اسے ٹھیک کرنے کے لیے کچھ ہلکی فارمیٹنگ کرنے جا رہے ہیں۔ مجھے کوڈ میں اچھی فارمیٹنگ پسند ہے۔ اب، اگر ہم اسے محفوظ کرکے چلاتے ہیں، تو ہمیں بہت ساری معلومات شامل کرنی ہوں گی۔ تو، آئیے اس معلومات کو جلدی شامل کریں۔ سب سے پہلے، ہم نے گھر کا نمبر درج کیا ہے، پھر ہم نے بلاک نمبر درج کیا ہے۔ پہلے دونوں عدد کو داخل کرنا ہوگا۔ پھر ہمیں دو تاروں میں داخل ہونا پڑے گا، پہلے شہر، پھر ہمارا



09:08:01

ہم نے پانچ لوگوں کی معلومات درج کی ہیں اور ہمیں ان پانچوں کے پتے مل گئے ہیں۔ ایڈریس ایک میں، ہم نے یہ درج کیا تھا، دو ایڈریس میں، ہم نے یہ درج کیا تھا، تین ایڈریس میں، ہم نے یہ درج کیا تھا، ایڈریس چار میں، یہ، اور ایڈریس پانچ میں، یہ۔ لہذا، ہم یہ تمام معلومات مختلف طریقوں سے درج کر رہے ہیں۔ اسی سوال میں، ہم نے بہت سارے تصورات سیکھے ہیں، سب سے پہلے، کسی ڈھانچے کی وضاحت کیسے کی جائے، دوم، فنکشن کے اندر کسی ڈھانچے کو کیسے استعمال کیا جائے، تیسرا، ڈھانچے کی ایک صف کیسے بنائی جائے، ظاہر ہے کہ ان پٹ آؤٹ پٹ، تو



09:08:30

لہذا، ہمیں ایک ہی سوال میں بہت سارے تصورات پر نظر ثانی کی گئی ہے۔ اگلا سوال جس کے بارے میں ہم بات کریں گے وہ ہے ویکٹرز کو ذخیرہ کرنے کے لیے ایک ڈھانچہ بنانا اور پھر دو ویکٹروں کا مجموعہ واپس کرنے کے لیے ایک فنکشن بنانا۔ سب سے پہلے، آئیے اس بارے میں بات کرتے ہیں کہ ویکٹر دراصل کیا ہوتا ہے۔ اگر میں اسے ویکٹر میں تلاش کرتا ہوں تو ویکٹر میں ہمیں کچھ ایسے اعداد و شمار ملتے ہیں۔ لہذا ویکٹر جیومیٹرک ہستی ہیں کہ جن لوگوں نے مقناطیسیت یا ریاضی کا مطالعہ کیا ہے وہ پہلے ہی جان چکے ہوں گے کہ ویکٹر کیا ہیں۔ ویکٹر ہمارے کچھ ہستی ہیں جن کی ایک سمت ہے اور اس کے ساتھ



09:09:06

اس کے ساتھ ساتھ ہمارے y محور کی ایک وسعت ہے اب ہم ویکٹرز کی وضاحت کیسے کر سکتے ہیں کہ ویکٹر ہمارے 2D جہاز پر سیدھی لکیریں ہیں جس پر ہمارے x اور y محور ہیں۔ فرض کریں کہ یہ سیدھی لکیر ہے تو اس مخصوص لائن کو ویکٹر کہتے ہیں۔ اس ویکٹر کا مطلب ہے کہ یہ سیدھی لکیر، اس تیر کا ہمارے x محور سے کچھ فاصلہ ہوگا، ہم اس فاصلے کو y کیپٹل y کہتے ہیں اور اس کا y محور سے کچھ فاصلہ ہوگا، ہم اسے کیپیٹل x کہتے ہیں، اس لیے جب ہم کسی ویکٹر، اس لائن کی نمائندگی کرنا چاہتے ہیں، تو ہم اس کی نمائندگی کرسکتے ہیں۔



09:09:54

آئیے ہم ان دو قدروں کو ان دو قدروں کی شکل میں رکھتے ہیں۔ تو یہ دونوں اقدار کیسے لکھی جاتی ہیں؟ اسے x aa cap + y j کیپ لکھا جاتا ہے۔ تو اب یہ ایکس محور میں فاصلے کی نمائندگی کرتا ہے۔ یہ y محور میں فاصلے کی نمائندگی کرتا ہے۔ تو یہ فارمولہ ہے، اس کی وجہ سے ہمیں پروگرامرز اور کوڈرز کو ریاضی کی چیزوں میں نہیں پڑنا پڑتا، ہمیں یہ سادہ سا تصور یاد رکھنا پڑتا ہے کہ جب بھی ہمیں کسی ویکٹر کی تعریف کرنی ہوگی، تو ایک x پیرامیٹر اور ایک y پیرامیٹر ہوگا۔ یہاں سے ہمیں ایک سادہ سی بات معلوم ہوئی کہ جب بھی ہمیں کوڈ میں ویکٹر لکھنا ہے تو ہمیں ایک ڈھانچہ بنانا ہوگا۔



09:10:27

اس ڈھانچے کے اندر، ہم ایک x ویلیو اور ایک y ویلیو لیں گے، اور پھر دو ویکٹروں کا مجموعہ واپس کرنے کے لیے ایک فنکشن بنائیں گے۔ اب ریاضی میں دو ویکٹروں کا مجموعہ کیسے لگایا جاتا ہے، فرض کریں کہ ہمارے پاس پہلا ویکٹر x1 + y1 + y2 ہے اور دوسرا ویکٹر x2 + y2 + y2 ہے تو ان دونوں کا مجموعہ ہمارے سامنے x1 + x2 + y2 کے طور پر آتا ہے، جس کا مطلب یہ ہے کہ یہ ایک الگ متغیر میں ذخیرہ کیا جائے گا، y1 + y2 کی قیمت الگ ہوگی اور اس کی قیمت + y2 کی الگ ہوگی۔ ایک متغیر دوسرے متغیر کی ایک ہی قدر پر جاتا ہے۔



09:11:10

اگر یہ بین پر جائے گا تو ہم اس طرح رقم لیں گے، اگر ہم اسے کوڈ کی مدد سے کریں گے تو ہم چیزوں کو بہتر طریقے سے سمجھیں گے، پہلے ہم کیا کریں، آئیے ایک ڈھانچہ بنائیں، ایک سٹرکچرل ویکٹر۔ ہم ویکٹر کے لیے ایک ڈھانچہ بنائیں گے، اب ایک ویکٹر کے دو اجزاء ہیں، ایک x کا جزو ہوگا اور ایک y جزو ہوگا، تو یہاں ہم int x لکھیں گے اور یہاں ہم int y لکھیں گے، اب اس کے لیے ہم 2D ایریا بھی بنا سکتے تھے، لیکن ڈھانچہ بنانے کا فائدہ یہ ہے کہ ہمیں معلوم ہوگا کہ ایک ویکٹر کے دو اجزاء ہوتے ہیں، ایک xy اور ایک ہے۔



09:11:42

یہ 2D سرنی یا سرنی میں ہوتا ہے ہمیں اس بات کا پتہ لگانا ہوتا ہے کہ کون سی چیز کہاں ہے۔ ہم کہہ سکتے ہیں کہ 2D سرنی بھی اس کے لیے ایک بہت اچھا حل ہے۔ ہمیں بڑی صفوں میں بہت ساری پریشانیوں کا سامنا کرنا پڑتا ہے، لیکن اگر ہم اسے ویکٹر کے ساتھ بناتے ہیں، تو x وہ جز ہمارے لیے سمجھنے میں تھوڑا بہتر ہوگا۔ اب آئیے پہلا ویکٹر بنائیں، ایک ساختی ویکٹر v1۔ آئیے v1 کو اقدار تفویض کرتے ہیں۔ قیمت پانچ کو x میں اور 10 کو y میں رکھیں۔ اور اب اسی طرح ہم دوسرا ویکٹر بناتے ہیں، ہمارا v2۔ یہ v2 کے اندر آتا ہے۔ پہلی قدر تین ہے اور دوسری قدر سات ہے۔ تو، یہ پہلا ویکٹر ہے جو ہم نے بنایا ہے۔



09:12:18

وہاں ہم نے دوسرا ویکٹر بنایا ہے۔ اب ہمیں کیا کرنا ہے، ان دو ویکٹرز کے لیے اس اسٹیٹمنٹ ٹرمینیٹر کو یہاں نہ بھولیں۔ ہمیں ان دو ویکٹروں کے لیے ایک جمع ویکٹر کا حساب لگانا ہے۔ جمع ویکٹر کے لیے، پہلے ہم ایک سخت ویکٹر رقم بناتے ہیں۔ آئیے ہم رقم کو صفر سے شروع کرتے ہیں، جس کا مطلب ہے کہ ابھی اس میں کوئی قدر نہیں ہے۔ اور ہمیں رقم کا حساب لگانے کے لیے ایک فنکشن بنانا ہے، تو آئیے اس میں void calculate sum لکھتے ہیں۔ اس کے اندر تین ویکٹر گزریں گے۔ پہلا سخت ویکٹر v1 ہوگا، اس کے بعد سخت ویکٹر v2 آئے گا۔



09:12:52

str vect sum اس فنکشن کو بنانے کے لیے، آئیے اسے یہاں بیان کرتے ہیں۔ ہمیں جو کرنے کی ضرورت ہے وہ یہ ہے کہ sum کا x جزو v1 کا x جز اور v2 کا ایک جز ہوگا اور sum کا y جزو v1 کا y جزو اور v2 کا y جزو ہوگا۔ تو میں امید کرتا ہوں کہ آپ سمجھ گئے ہوں گے کہ رقم کا x جزو v1 اور v2 کے x سے بنتا ہے اور رقم کا y جزو v1 اور v2 کے va سے بنتا ہے۔ اب ایک چھوٹی سی چیز جو ہم یہاں کھو رہے ہیں وہ یہ ہے کہ جب بھی کوئی فنکشن کال ہوتی ہے تو اس کی قدر گزر جاتی ہے، اس لیے یہاں وہ رقم جو ہم نے بیان کی ہے۔



09:13:33

ہم نے جو قدریں تفویض کی ہیں وہ مین فنکشن میں منعکس نہیں ہوں گی، اس لیے ان کی عکاسی کرنے کے لیے ہم یا تو پوائنٹر پاس کرتے ہیں یا انہیں اس فنکشن کے اندر ہی پرنٹ کرواتے ہیں۔ ہماری رقم کو پرنٹ کریں: a کا مجموعہ فیصد d sum d x ہے اور ہمارے va جزو کے مجموعے کے لیے وہی رقم dwa ہے۔ ہم یہاں b s a ڈالتے ہیں اور اسے مین فنکشن کے اندر کال کریں گے۔ ہم sum v1 v2 کا حساب لگانے کے لیے کیلکولیٹ رقم کو پاس کریں گے اور ہمارا sum vector save and run کریں گے۔ تو یہ v1 میں ہم نے 5 a cap 10 j کیپ کو پاس کیا۔ ہم نے v2 3 a cap 7 j کیپ میں پاس کیا۔ تو x جزو کا مجموعہ کیا ہے، 5



09:14:20

P 3 = 8 اور دوسرے جزو کے لیے 10 + 7 = 17۔ تو، اس طرح سے ہم دو ویکٹروں کا مجموعہ بھی تلاش کر سکتے ہیں۔ دراصل، یہاں ہم اس کے استعمال کو اچھی طرح سے نہیں سمجھتے ہیں۔ جب ہم شروع میں تصور سیکھیں گے، فرض کریں کہ آپ شوٹر گیم بنا رہے ہیں، تو C اور C++ بالکل ملتے جلتے ہیں، جس طرح C++ میں ڈھانچے ہوتے ہیں، ہم اسی طرح کلاسز بنا سکتے ہیں، وہ C میں موجود نہیں ہوتے، اس لیے جب آپ C++ یا Java کا مطالعہ کریں گے، تو ہمیں معلوم ہوگا کہ کلاس کیا ہے، لیکن یہ ایک ڈھانچے سے ملتی جلتی ہے، اس لیے جب ہم C++ کو گیم میں استعمال کرتے ہیں تو پھر ترقی کرتے ہیں۔



09:14:53

اس میں ہمیں کئی بار کیا کرنا پڑتا ہے، ہمیں رفتار کا تعین کرنا پڑتا ہے، ہم کس رفتار سے گولی چلائیں گے، ہم اپنے مرکزی کردار کی رفتار کس رفتار سے دکھائیں گے، اگر کوئی ہم پر کچھ پھینکے گا تو اس کی رفتار کیا ہوگی، یا فرض کریں کہ ہمارے پاس اینگری برڈز ہیں، اس میں ویکٹرز کیا ہوں گے، سمت کیا ہوگی، پتھر پھینکنے کا کام کیا ہے؟ اس میں ڈھانچے کا استعمال کیا جاتا ہے، اسی طرح کے حساب کتاب کیے جاتے ہیں جو ریاضی اور طبیعیات کے فارمولوں کے ساتھ کیے جاتے ہیں۔



09:15:21

یہ آتا ہے لیکن ہم اسے کوڈنگ میں تبدیل کرتے ہیں۔ اگلا سوال جسے ہم حل کریں گے وہ ہے پیچیدگیوں کو ذخیرہ کرنے کے لیے ایک ڈھانچہ بنانا۔ پیچیدہ اعداد کیا تھے؟ یہ ایک عدد تھا جس کا کچھ حصہ حقیقی اور کچھ حصہ خیالی تھا۔ تو اس کا کچھ حصہ حقیقی اور کچھ حصہ خیالی ہو گا۔ بالکل ایک ویکٹر کی طرح، ہمیں ایک ڈھانچہ بنانا ہوگا۔ ہم اسے پیچیدہ قسم کا نام دیں گے اور اس کا اندرونی حصہ بھی عددی قسم کا ہوگا۔ ہم اس قسم کا کچھ ڈھانچہ بنائیں گے اور ہم ایرو آپریٹر کا استعمال کرکے ویلیو پرنٹ کریں گے۔



09:16:02

اگر ہم یہ کرنا چاہتے ہیں تو پہلے ہم کیا کریں گے، آئیے اوپر ایک ڈھانچہ بنائیں، ساختی طور پر پیچیدہ ٹرمینیٹر، تو یہ ہماری رنگت ہے، ہم اصل میں ایک پیچیدہ نمبر بنائیں گے، سب سے پہلے ہم لکھیں گے، ہم ساختی لحاظ سے پیچیدہ حصہ رکھنا چاہتے ہیں، at، اب ہم اسے کیسے پرنٹ کریں گے، ہم اسے ایرو آپریٹر سے پرنٹ کروانا چاہتے ہیں اور ایرو آپریٹر کے لیے سب سے پہلے ایک پوائنٹ کی ضرورت ہوگی، تو سب کو ایک پوائنٹ بنانے کی ضرورت ہے۔ پوائنٹر کی قسم، ساختی طور پر ایک نمبر کا پیچیدہ، اب اگر ہم اقدار کو پرنٹ کرنا چاہتے ہیں، تو ہم انہیں پرنٹ کروا سکتے ہیں، خیالی حصہ دو کے برابر ہے



09:16:55

پوائنٹر کا استعمال کرتے ہوئے فیصد ڈی کیسے پرنٹ کریں؟ سب سے پہلے ہم parens لکھیں گے یا یہاں arrow operator کا استعمال کریں گے، تو یہاں ptr arrow real ہوگا اور یہاں ptr arrow imaginary اور base n ہوگا، تو آئیے اسے محفوظ کرتے ہیں اور اب ہم اسے چلائیں گے، تو اصلی حصہ ہمارے پاس پانچ پرنٹ ہوگا اور خیالی حصہ آٹھ پرنٹ ہوگا۔ اس طرح، آپ خیالی حقیقی اعداد کے ساتھ بھی ایسا ہی کر سکتے ہیں، جیسے اگر کوئی میگنیفیکیشن ہے، تو وہ انڈر سکور کا مربع ہے خیالی حصہ کے علاوہ حقیقی حصہ، تو اب اگر پیچیدگی کی میگنیفیکیشن



09:17:30

اگر ہمیں قدر معلوم کرنے کی ضرورت ہے یا اگر ہمارے پاس ویکٹرز کی میگنیفیکیشن ہے، تو ہماری زیریں جڑ تصوراتی حصے کا مربع اور حقیقی حصے کا مربع ہے۔ ہم اس کا حساب لگا کر بھی معلوم کر سکتے ہیں۔ لہذا، ہم ان ڈھانچے کی بنیاد پر کچھ زیادہ پیچیدہ کرنے کے قابل ہیں۔ اگلی چیز اپنے تصور کی جانچ کرنا ہے۔ آپ کو 30 طالب علموں کے نمبر محفوظ کرنے ہوں گے۔ آپ کو 30 بچوں کے نمبر محفوظ کرنے ہوں گے۔ ہمارے نشان یا تو عددی قسم کے ہوں گے یا فلوٹ قسم کے۔ اب، ہم ان میں سے کون سا استعمال کریں گے، فلوٹ قسم؟



09:18:03

یہاں ہم نمبر مانگ رہے ہیں، تو یا تو 10 فلوٹس کی ایک صف بنائیں یا ایک ڈھانچہ بنائیں۔ اب، اگر ہمیں یہاں 30 بچوں کے نشانات کو ذخیرہ کرنا ہے اور ہر ایک کی قیمت فلوٹ قسم کی ہے، تو پھر یہاں سمارٹ فیصلہ یہ ہوگا کہ 10 فلوٹس کی ایک صف بنائی جائے۔ ایک ڈھانچے پر 10 فلوٹس کی ایک صف بنانے کا کیا فائدہ ہوگا؟ سب سے پہلے تو ڈھانچے کا زیادہ استعمال اس وقت ہوتا ہے جب ہم مختلف اقسام کی چیزوں کو ایک ساتھ اکٹھا کرتے ہیں، لیکن یہاں ہمیں ایک ہی قسم کی 30 چیزیں جمع کرنی ہیں، یعنی فلوٹ قسم کی، تو یہ اس کے لیے بہتر ہوگا۔



09:18:32

کہ ہم ایک صف بنا سکتے ہیں، ہم دونوں کر سکتے ہیں، ہمارا سوال دونوں سے حل ہو جائے گا لیکن یہ ایک ہوشیار ہوگا، ایک زیادہ تجربہ کار فیصلہ یہ ہو گا کہ آپ یہاں 10 یا درحقیقت 30 فلوٹس کی صفیں بنا رہے ہیں، ہمارا اگلا سوال ایک گاہک کے بینک اکاؤنٹ کی معلومات کو ذخیرہ کرنے کے لیے ایک ڈھانچہ بنانا ہے، ایک ABC بینک ہے، آپ کو بینک اکاؤنٹ کی معلومات کو ذخیرہ کرنا ہوگا، اس کا مطلب یہ ہے کہ ہم یہاں استعمال کریں گے اور اس کا مطلب یہ ہے کہ ہم آپ کے لیے ایک قسم بنائیں گے۔ def، اب ہم بینک اکاؤنٹ کے لیے کون سی معلومات محفوظ کر سکتے ہیں، یہ ایک ہو سکتا ہے، اکاؤنٹ ہولڈر کا نام ایک ہو سکتا ہے



09:19:07

اکاؤنٹ نمبر اس کے علاوہ ایک اور IFSC کوڈ بھی ہو سکتا ہے، لیکن ہم ابھی اتنی تفصیل میں نہیں جائیں گے، ہم صرف نام اور اپنا اکاؤنٹ نمبر محفوظ کریں گے، اس کے لیے ایک ڈھانچہ بنائیں - بینک اکاؤنٹ جو سب کچھ بینک اکاؤنٹ کے اندر محفوظ کیا جائے گا سب سے پہلے اکاؤنٹ نمبر انٹ اکاؤنٹ نمبر کو محفوظ کیا جائے گا اس کے بعد ہمارا سٹرنگ کریکٹر اسٹور ہو جائے گا، جس کا نام ہوگا 100 حروف بنانے کے لیے، اس کے لیے اب یہاں ایک کریکٹر بنانے کے لیے 100 کی ضرورت ہوگی۔ سب سے پہلے ہم def لکھیں گے اور بینک اکاؤنٹ کی جگہ acccc just account لکھیں گے اور پھر یہ لکھیں گے۔



09:19:44

اگر یہ اکاؤنٹ نمبر ہے تو ہم ACC کے نام سے اپنی ساخت کے متغیر کا اعلان کر سکتے ہیں۔ سب سے پہلے ہم ACC قسم کا ACC بنائیں گے۔ اس میں، قدریں پہلے ہی تفویض کی گئی ہیں۔ اکاؤنٹ نمبر ٹوتھ ہوگا اور ہمارا نام شردھا ہوگا۔ اسی طرح اگر ہم دوسرا اکاؤنٹ بنانا چاہتے ہیں تو ہم دوسرا اکاؤنٹ کھول سکتے ہیں، اکاؤنٹ ٹو۔ اس میں اکاونٹ نمبر ایک بڑھا کر ہمارا نام بدل دیا جائے گا۔ اسی طرح ہم اکاؤنٹ تھری بنا سکتے ہیں۔ اس میں بھی ایک ایک اضافہ کیا جائے گا اور ہمارا نام بدل دیا جائے گا۔ تو یہ کیا ہے، ہم اکاؤنٹ نمبر بدل سکتے ہیں۔



09:20:24

ہم نام بدل سکتے ہیں اور ہمیں صرف ACC لکھنا ہے۔ ہمیں پورا ڈھانچہ بینک اکاؤنٹ لکھنے کی ضرورت نہیں ہے۔ ہم اقدار کو اس طرح پرنٹ بھی کر سکتے ہیں۔ ایک اکاؤنٹ نمبر پرنٹ کریں فیصد d A1 کے برابر ہے۔ اکاؤنٹ نمبر اور نام = فیصد s A1۔ آئیے یہ کرتے ہیں۔ محفوظ کریں اور چلائیں۔ تو ہمارا اکاؤنٹ نمبر ہے 12 2 3۔ ہمارا نام شردھا ہے اور یہ ساری چیز سکرین پر پرنٹ ہو جاتی ہے۔ تو اس طرح ہم ایلس بنا سکتے ہیں۔ ہم انہیں ٹائپ ڈیف کی مدد سے تشکیل دے سکتے ہیں اور اپنے ڈھانچے کا استعمال کرتے ہوئے، ہم سی میں بہت ساری دلچسپ چیزیں کر سکتے ہیں۔



09:21:00

تو یہاں میں ہوم ورک کا ایک خاص مسئلہ پیش کروں گا، یہاں کوئی الگ مسئلہ نہیں ہے، ہوم ورک کا مسئلہ یہ ہوگا کہ یا تو آپ کے اسکول کے لیے یا آپ کے کالج کے لیے یا کسی بھی کمپنی کے لیے، ہمیں سٹرکچر کی مدد سے ایسا ڈیٹا بیس بنانا ہوگا جس میں ہم وہاں رہنے والے لوگوں کی معلومات محفوظ کر سکیں، مثال کے طور پر ہم یہاں ایک کالج کی مثال لے رہے ہیں، اس لیے کالج میں آپ کو ایک ڈھانچہ بنانا پڑے گا، اساتذہ کی معلومات کو ذخیرہ کرنے کے لیے ایک ڈھانچہ بنایا جائے گا اور طلبہ کا ڈھانچہ بنایا جائے گا۔



09:21:29

ہم کہہ سکتے ہیں کہ ہم اسے باقی عملے، ایڈمن اسٹاف کی معلومات کو ذخیرہ کرنے کے لیے بنائیں گے۔ لہذا، ان تین ڈھانچے کی مدد سے، پہلے آپ معلومات کو محفوظ کریں گے. آپ اس میں مختلف سیگمنٹس بھی بنا سکتے ہیں، جیسا کہ ہم نے طالب علم کی معلومات لی ہیں، اس میں بھی ہم مختلف صفیں بنا سکتے ہیں جیسے یہ COE کے طالب علم ہیں، یہ پہلے سال کے طالب علم ہیں، یہ دوسرے سال کے IT کے طالب علم ہیں، یہ چوتھے سال کے مکینیکل کے طالب علم ہیں، اس طرح آپ کو یہ دیکھنا پڑے گا کہ آپ معلومات کو کیسے ذخیرہ کرنا چاہتے ہیں، لہذا یہ



09:21:56

ہوم ورک کا مسئلہ یہ ہے کہ آپ کے مخصوص کالج کے لیے آپ کو اس کے مطابق ایک مکمل سسٹم بنانا ہوگا جس طرح آپ کے کالج میں موجود برانچز کی بنیاد پر سسٹم ہے، اس اسٹرکچر کی مدد سے جس میں آپ معلومات کو محفوظ کر سکتے ہیں، آپ اس میں صارف کی معلومات بھی درج کر سکتے ہیں اور آپ معلومات پرنٹ کروا کر اسے بھی دے سکتے ہیں۔ اب ہم اپنے باب 10 سے شروع کرنے جا رہے ہیں جسے فائل ان پٹ آؤٹ پٹ کہا جاتا ہے۔ اب اس کو سمجھنے کے لیے سب سے پہلے اپنے کمپیوٹر کی میموری کے بارے میں تھوڑا سا سمجھ لیں۔ ہمارے کمپیوٹر کے اندر دو میموری کارڈ ہوتے ہیں۔



09:22:26

میموری کی بہت سی قسمیں ہیں، ان میں سے ایک volatile میموری ہے۔ اتار چڑھاؤ کا مطلب ہے جیسے ہی آپ کمپیوٹر کی پاور بند کرتے ہیں، یا پلگ ہٹاتے ہیں، لیپ ٹاپ فوراً بند ہوجاتا ہے، بیٹری ڈسچارج ہوجاتی ہے، یہ میموری ختم ہوجاتی ہے۔ میموری کی دوسری قسم ہماری غیر مستحکم میموری ہے۔ یہ میموری اپنے اندر ایسا ڈیٹا اسٹور کرتی ہے جو کہ پاور گرنے کی وجہ سے تبدیل نہیں ہوتی، جوں کی توں رہتی ہے۔ جب بھی آپ اپنا کمپیوٹر کھولیں گے، شاید آپ نے کوئی گیم ڈاؤن لوڈ کی ہے، پھر جب بھی وہ گیم آپ کو نظر آئے گی، آپ اسے کھول سکتے ہیں یا آپ



09:23:22

کٹر کی پاور چلی جاتی ہے یا آپ کا لیپ ٹاپ بند ہو جاتا ہے، پھر کیا ہو گا اگر آپ واپس آ جائیں اور ہو سکتا ہے آپ کو وہ فائل نظر نہ آئے یا آپ نے اس میں جو نئی تبدیلیاں کی ہیں وہ آپ کو نظر نہ آئیں کیونکہ وہ ہماری غیر مستحکم میموری میں محفوظ ہیں۔ اب کمپیوٹر کے اندر موجود غیر مستحکم میموری RAM ہے، اسے ہم Random Access Memory بھی کہتے ہیں۔ اب کمپیوٹر سائنس کی بنیادی باتوں میں ہمیں معلوم ہوگا کہ ایک RAM ہے، ایک ROM ہے، کمپیوٹر کے اندر کئی طرح کی میموری ہوتی ہے، یہاں ہم فرض کر رہے ہیں کہ جب بھی ہم volatile میموری کی بات کر رہے ہیں۔



09:23:50

لہذا ہم ریم کے بارے میں بات کر رہے ہیں اور جب بھی ہم غیر مستحکم کے بارے میں بات کر رہے ہیں، ہم ہارڈ ڈسک کے بارے میں بات کر رہے ہیں۔ آپ کمپیوٹر کی ہارڈ ڈسک میں بہت سا ڈیٹا محفوظ کر سکتے ہیں، درحقیقت آپ وہ ڈیٹا نکال کر کسی دوسرے دوست کو دے سکتے ہیں یا آپ اسے کسی دوسرے کمپیوٹر میں منتقل کر سکتے ہیں۔ تو عام طور پر لوگ کیا کرتے ہیں کہ وہ جو بھی ڈیٹا بیک اپ کرنا چاہتے ہیں وہ ہارڈ ڈسک میں بیک اپ کرتے ہیں اور پھر اسے ہٹا کر کمپیوٹر میں نئی ​​ہارڈ ڈسک لگا دیتے ہیں۔ اس طرح برسوں سے بہت سے لوگ کر رہے ہیں۔



09:24:15

ہم اپنا بہت سا ڈیٹا محفوظ کرتے رہتے ہیں۔ اب یہاں ہمارے لیے اہم بات یہ ہے کہ ڈیٹا کمپیوٹر کی غیر مستحکم میموری اور غیر مستحکم میموری کے درمیان منتقل ہوتا رہتا ہے۔ جیسے آپ کا کمپیوٹر پروگرام ہماری RAM میں محفوظ ہو جاتا ہے، اسی طرح یہ پروگرام غیر مستحکم میموری کا حصہ بن جاتا ہے۔ ممکن ہے کہ آپ کے کمپیوٹر سسٹم میں ایسی بہت سی فائلیں پڑی ہوں، وہ ہماری ہارڈ ڈسک کے اندر پڑی ہوں، اس لیے کمپیوٹر پروگرام ان فائلوں کو لکھ سکتا ہے اور پڑھ بھی سکتا ہے۔



09:24:49

کمپیوٹر پروگرام کا مطلب ہے کہ ہم ریم کے کچھ حصے تک رسائی حاصل کرنا چاہتے ہیں، وہ فائلیں جو نان وولٹائل میموری یعنی ہماری ہارڈ ڈسک میں موجود ہیں، تو یہ عمل جو ہوتا ہے، ہم اسے C کی مدد سے بھی کر سکتے ہیں، مختلف پروگرامنگ لینگویجز میں فائلز تک رسائی کے مختلف طریقے ہوتے ہیں اور اس باب میں، ہم یہ سمجھنے جا رہے ہیں کہ فائل میں ان پٹ آؤٹ پٹ کس طرح پرفارم کرتا ہے، تو سب سے پہلے اس کے بارے میں بات کرتے ہیں کہ فائل کے اندر کیا ہوتا ہے۔ فائل، ایک فائل اسٹوریج ڈیوائس میں میموری کے اندر ایک کنٹینر ہے۔



09:25:20

یہاں ڈیٹا اسٹور کریں ہمارا اسٹور ڈیوائس ہماری ہارڈ ڈسک ہوگی۔ ہارڈ ڈسک کے اندر مختلف کنٹینرز ہوتے ہیں، ہم انہیں یادداشت کے ٹکڑے بھی کہہ سکتے ہیں۔ میموری کے ہر ٹکڑے کے اندر بہت سا ڈیٹا محفوظ ہو جائے گا اور ہم اس ڈیٹا کو فائلوں کے طور پر محفوظ کرتے ہیں، جیسے کہ سکولوں اور کالجوں میں ہماری کچھ فائلیں محفوظ ہوں گی جو ہمارے اساتذہ کے پاس ہوں گی، ہمارے ایڈمن ڈیپارٹمنٹ کے پاس ہوں گی، ہمارا کچھ ذاتی ڈیٹا ان فائلوں میں محفوظ ہو جائے گا، فرض کریں کہ میرے پاس شردھا کھاپر نام کی فائل ہے، یہ میرے کسی ہم جماعت کی ہو سکتی ہے۔



09:25:48

اس کی فائل اس کے نام سے ہو سکتی ہے، تو اس طرح جس طرح حقیقی زندگی میں فائلیں ہوتی ہیں، اسی طرح کمپیوٹر سسٹم کے اندر بھی مختلف فائلیں ہوتی ہیں، درحقیقت اگر ہم نے پہلے کبھی کمپیوٹر آپریٹ کیا ہے تو ہم نے اپنے سسٹم میں کوئی نہ کوئی فائل ضرور دیکھی ہوگی۔ اب جب بھی ہم فائلوں کے بارے میں بات کرتے ہیں، ہمیں ہمیشہ یاد رکھنا چاہیے کہ r غیر مستحکم ہے۔ اب پروگرام ختم ہونے پر اس کا مواد ضائع ہو جاتا ہے، یعنی جیسے ہی پروگرام ختم ہوتا ہے، جیسے ہی ہمارا C پروگرام ختم ہوتا ہے، ہمارا ڈیٹا ضائع ہو جاتا ہے۔



09:26:15

یہ خود بخود صاف ہو جاتا ہے کیونکہ ہمارا پروگرام RAM کے اندر ہے۔ پروگرام RAM کے اندر ہے یعنی ہمارے پروگرام کے متغیرات بھی RAM کے اندر ہیں۔ یہی وجہ ہے کہ جب ہم اپنا C کوڈ لکھتے ہیں جس میں ہم int n کا ویری ایبل بناتے ہیں، ایک اری بناتے ہیں، اپنی سٹرنگ بناتے ہیں، یہ سب RAM کے اندر آتے ہیں اور یہ سب volatile میموری میں ہوتے ہیں۔ جیسے ہی آپ کا پروگرام ختم ہوگا یہ متغیرات بھی میموری سے صاف ہو جائیں گے۔ اسی لیے فائلیں ڈیٹا کو منتقل کرنے کے لیے استعمال ہوتی ہیں، اس لیے اگر ہم اپنے متغیرات کو رکھنا چاہتے ہیں تو ہمیں کیا کرنا چاہیے۔



09:26:45

ڈیٹا کو RAM میں رہنے کے بجائے کسی مستقل اسٹوریج میں جانا چاہیے اور ہمیں اس ڈیٹا کو کسی نہ کسی طریقے سے اسٹور کرنے کے قابل ہونا چاہیے، اس کے لیے ہم فائلیں استعمال کرتے ہیں۔ مثال کے طور پر، فرض کریں کہ آپ نے ڈھانچے میں ایک پروگرام بنایا ہے جہاں آپ کو اپنے پروگرام میں اسکول یا کالج کے طلباء کے ڈیٹا کا ان پٹ لینا ہوگا۔ اب جیسے ہی آپ کا پروگرام ختم ہوگا وہ ڈیٹا ختم ہوجائے گا۔ اگلی بار اپنا ڈیٹا واپس حاصل کرنے کے لیے آپ کو دوبارہ پروگرام چلانا ہوگا اور صارف سے دوبارہ طلب کرنا ہوگا، لیکن آپ چاہتے ہیں کہ آپ ایسا صرف ایک بار کرسکیں۔



09:27:13

اگر صارف ہمیں کہیں ذخیرہ کرنے کو کہے تو ہم اسے کہاں ذخیرہ کریں گے؟ ہم اسے مستقل طور پر اپنے کمپیوٹر سسٹم کے اندر فائلز کہلانے والی چیزوں میں محفوظ کر رہے ہوں گے۔ اب سب سے پہلے، آئیے اس بارے میں بات کرتے ہیں کہ ہم فائلوں پر کون سے آپریشن کر سکتے ہیں۔ ہمیں فائل کا تصور اسی طرح کرنا پڑتا ہے جیسے ہمارے پاس حقیقی زندگی میں فائلیں ہوتی ہیں، اسی طرح کی فائلیں ہمارے کمپیوٹر سسٹم کے اندر ہوتی ہیں۔ پہلا آپریشن یہ ہے کہ ہم ایک فائل بنا سکتے ہیں۔ دوسری بات، ہم کسی بھی فائل کا ڈیٹا پڑھنے کے لیے فائل کو کھول سکتے ہیں، بند کر سکتے ہیں۔



09:27:40

اس کے لیے پہلے آپ کو اسے کھولنا ہوگا اور پڑھنے کے بعد اسے بند کرنا ہوگا۔ ہم اس سے ڈیٹا پڑھ سکتے ہیں اور اس میں ڈیٹا بھی لکھ سکتے ہیں، یعنی ڈیٹا بھی لکھ سکتے ہیں۔ سب سے پہلے، ہم اپنے سسٹم میں فائلوں کی اقسام کے بارے میں بات کرتے ہیں۔ بنیادی طور پر، ہم دو قسم کی فائلوں کے بارے میں بات کریں گے، جن میں سے پہلی ہماری ٹیکسٹ فائلیں ہیں۔ ٹیکسٹ فائلوں میں موجود ڈیٹا ٹیکسٹول ہے، یعنی اگر آپ اسے کھول کر دیکھیں گے تو آپ کو اصلی ڈیٹا نظر آئے گا۔ اس میں A B C D A جیسے جملے لکھے ہوں گے یا کچھ نمبر لکھے ہوں گے، اس کا مطلب ہے۔



09:28:11

جب آپ کھولے گئے اعداد و شمار کو دیکھیں گے تو اس کا مطلب ہوگا۔ ہمارے لیے، دوسری قسم کی فائلیں ہیں، ہماری بائنری فائلیں۔ بائنری فائلوں کے اندر موجود ڈیٹا کو قطار اور کلیدی شکل میں محفوظ کیا جاتا ہے، یا پھر ایک بڑی ترتیب ہوگی جس میں قطاریں ہوں گی اور یہ ہمارے لیے کوئی معنی نہیں رکھتا۔ اس قسم کی فائل کو بائنری فائل کہا جاتا ہے۔ اب بائنری فائلز کے مختلف فارمیٹس بھی ہو سکتے ہیں، جیسے کہ اگر ہم ایکسٹینشن کی بات کریں تو d ہماری بائنری فائل ہے، d mp3mp 4jp جس میں ہمارے پاس فوٹوز وغیرہ ہیں، یہ سب ہماری بائنری فائلز کے فارمیٹس ہیں۔



09:28:45

ایکسٹینشنز ہیں اور اگر ہم نان بائنری فائلز کے بارے میں بات کریں تو dot txx.com بھی ایک TT فائل ہے اور اگر ہم dot java کی بات کریں تو وہ بھی TT فائل ہے کیونکہ ہم اس میں لکھے ڈیٹا کو سمجھیں گے اور اگر ہم اسے ایڈٹ کریں گے تو وہ تبدیلیاں ہمیں نظر آئیں گی اور وہ ہمارے لیے معنی خیز ہوں گی اس لیے ہمارے پاس ٹیکسٹ فائلز ہیں اور ہمارے پاس بائنری فائلیں ہیں لیکن اب ہم جانتے ہیں کہ ٹیکسٹ کوڈ میں کس طرح کام کرنا ہے۔ ہم C کوڈ لکھتے ہیں پھر ہم C سے بائنری فائلوں کو ایڈٹ کر سکتے ہیں اور ساتھ ہی ساتھ لکھنا بھی پڑھ سکتے ہیں۔



09:29:20

آپ سب کچھ کھول سکتے ہیں، لیکن امتحان کے نقطہ نظر یا انٹرویو کے نقطہ نظر سے، ہم سے پوچھی جانے والی زیادہ تر چیزیں ٹیکسٹ فائلوں سے متعلق ہوں گی۔ سب سے پہلے، ہم فائلوں تک رسائی کے طریقہ کے بارے میں بات کرتے ہیں۔ ہم نے کہا ہے کہ ہمارے پاس ایک ROM ہے جس کے اندر ہمارا پروگرام ہے، ایک ویری ایبل ہے اور وہ مستقل ڈیٹا سٹوریج بنانا چاہتا ہے اور اس سے ڈیٹا ان پٹ آؤٹ پٹ کرنا چاہتا ہے، یعنی اس فائل کو پڑھنا، لکھنا، کھولنا، بند کرنا، لیکن یہ سب کام کیسے ہو گا، یہ سب کام ہمارے فائل پوائنٹس کی مدد سے ہوتا ہے۔



09:29:49

تو اب جو فائل ہمارے پاس کمپیوٹر کے اندر C میں ہے، وہ ایک پوشیدہ ڈھانچہ ہے، فائل چھپی ہوئی ہے یعنی یہ ہم سے پوشیدہ ہے، ہم اس ڈھانچے کے اندر کوئی تبدیلی نہیں کر سکتے، ہم کوئی تبدیلی نہیں لا سکتے، یہی وجہ ہے کہ اس سٹرکچر کا مکمل ڈیکلریشن ہم سے پوشیدہ ہے اور ہر سسٹم کا اپنا الگ فائل اسٹرکچر ہوتا ہے جیسے کہ جب بھی آپ پارٹ سٹوریج سے ڈیٹا پڑھنے جاتے ہیں تو وہ تمام ڈیٹا پڑھا جاتا ہے جب کسی سٹرکچر کے اندر ضروری ڈیٹا پڑھا جاتا ہے۔



09:30:30

ہم ایک فائل بھی کھول رہے ہیں، اب ایک فائل پوائنٹر اس ڈھانچے کی طرف اشارہ کرتا ہے، اس لیے فائل پوائنٹر جو ڈھانچے کی طرف اشارہ کرتا ہے اور فائل تک رسائی کے لیے استعمال ہوتا ہے اسے فائل پوائنٹر کہتے ہیں۔ فائل پوائنٹر ایک خاص قسم کا پوائنٹر ہے جس کی قسم ہماری فائل ہے کیونکہ ہم نے فائل کا ڈھانچہ بنایا ہے، اس لیے اس فائل پوائنٹر کی مدد سے ہم ایک فائل کو کھول سکتے ہیں، اسے بند کر سکتے ہیں، اس میں چیزیں لکھ سکتے ہیں، اس سے چیزیں پڑھ سکتے ہیں اور درحقیقت فائلیں بھی بنا سکتے ہیں، اب اس پر لکھنے کی ترکیب کچھ اس طرح ہے۔



09:31:00

ایسا ہوتا ہے کہ سب سے پہلے ہم ٹائپ لکھتے ہیں، یہاں ہماری فائل ٹائپ ہوتی ہے کیونکہ فائل ایک ڈھانچہ ہے، اس کے بعد ہم نے ast رسک یعنی ستارہ لکھا، اس کے بعد ہم یہاں کوئی بھی ویری ایبل لکھ سکتے ہیں کیونکہ یہ فائل کا پوائنٹر ہے، اس لیے ہم نے f ptr لکھا، اگر آپ ptr لکھتے ہیں یا fp4 کا نام کیا ہے، تو ہمارے لیے ہم f ptr استعمال کریں گے تاکہ ہم پوائنٹس کو نارمل اور نارمل کہنے میں کچھ فرق ہو۔ فائل fptr کے پوائنٹر، تو سب سے پہلے ہم اس fptr کو اپنے کوڈ کے اندر بنائیں، ہم اسے لکھیں گے۔



09:31:35

F I L E کا مطلب ہے ہماری فائل کی قسم اور اس کے بعد ہم اسٹار f patti aa لکھیں گے تو ہم نے فائل ٹائپ کے لیے کیا کیا ہے ہم نے ایک پوائنٹر FPTR کا اعلان کیا ہے اب اس پوائنٹر کو استعمال کرنے کا مطلب ہے کہ اس کے ساتھ فائلز کیسے کھلیں گی تو اگر ہم فائل کو کھولنے اور بند کرنے کی ترکیب کی بات کرتے ہیں تو سب سے پہلے ہم فائل کو کھولنے کی بات کرتے ہیں تو ایک بار جب ہم نے FPTR کے نام سے ایک فنکشن بنایا ہے تو ہم اس پر بات کریں گے کہ اب ہم سب سے زیادہ فائل کا کون سا فنکشن بنا لیں گے۔ ان کے سامنے ایک F ہو گا جو یہ بالکل واضح کرتا ہے۔



09:32:09

یعنی فائل کا فنکشن چاہے اسے کھولنا ہو یا بند کرنا، کریکٹرز پڑھنا یا لکھنا یا بہت سے کام کرنا، لیکن ایک کامن بات یہ ہوگی کہ فائلز کے فنکشن کے آگے ایک f ہوتا ہے تاکہ دور سے دیکھا جا سکے کہ یہ فائل کا کوئی فنکشن ہے۔ تو ایک فائل کو کھولنے کے لیے، ایک فنکشن ہے جس کا نام f open ہے۔ یہ دو پیرامیٹرز لیتا ہے، ان میں سے، پہلا پیرامیٹر فائل کا نام ہے۔ فرض کریں کہ ہم نے TED txt.gz فائل بنائی ہے، موڈ ہمیں بتاتا ہے کہ ہمیں فائل کے اندر پڑھنا ہے یا فائل کے اندر لکھنا ہے۔



09:32:57

یا ہمیں کوئی اور کام کرنا ہے کیونکہ ہمارے پروگرام اور ہمارے سسٹم کو معلوم ہونا چاہیے کہ اگر ہم کوئی فائل کھول رہے ہیں تو کس موڈ میں کھول رہے ہیں، کس نیت سے کھول رہے ہیں کیونکہ کچھ تبدیلیاں ہیں جو سسٹم لیول پر ہونی ہیں، اگر آپ پڑھنا چاہتے ہیں تو بفر لیول کی کچھ چیزیں اندرونی طور پر ہوتی رہتی ہیں، فی الحال ہم اتنی تفصیل میں نہیں جائیں گے، بنیادی طور پر ہمارا سسٹم یہ پوچھ سکتا ہے کہ فائل کو کھولنے کے لیے ہمیں کیا کرنا ہے اگر ہم اسے پہلے سے بتائیں تو تھوڑا آسان کام کریں۔



09:33:26

اگر ہمیں لکھنا ہے تو اس سے کام آسان ہو جائے گا، اگر پڑھنا ہے تو اس سے کام آسان ہو جائے گا، اس نقطہ نظر سے ہم فرض کرتے ہیں کہ یہاں ہم نے فائل پوائنٹر کو تفویض کیا ہے، کیا ہم نے اپنی فائل کو اس میں دو پیرامیٹرز پاس کر کے کھولا ہے اور آخر میں اس کی قیمت FPTR میں تفویض کر دی ہے، یعنی اس FOPEN نے کیا کیا ہو گا، اس نے اس فائل کو واپس کر دیا ہو گا جو FTRP میں کھولنے کے لیے پوائنٹر کھولنا ہے۔ فائل، اب فائل کو کھولنے کے لیے، پہلے فائل کا ہونا ضروری ہے، اس لیے a



09:33:55

ہم اپنے اسی فولڈر میں فائل بناتے ہیں، ہم یہاں جائیں گے، یہ آئیکون نئی فائل کا ہے، ہم اسے نئی فائل سے بنائیں گے۔ txt.gz f کے اندر پہلا پیرامیٹر کھولیں فائل کا نام ہے یعنی test d txt.gz آپ پریکٹس بھی کریں گے یا آپ کسی بھی کالج کے اپنے پرانے سوالات دیکھ سکتے ہیں، اس ٹاپک سے بہت سارے آسان سوالات آتے ہیں، میرا مطلب ہے کہ آپ array جیسے عنوانات سے بہت مشکل سوالات حل کر سکتے ہیں، لیکن فائلز ایک ایسا ٹاپک ہے جو اپنے آپ میں قدرے پیچیدہ ہے، اگر یہاں سے سوالات پوچھے جائیں تو وہ آسانی سے پوچھے جائیں گے۔



09:35:12

آئیے فائل کا ایک پوائنٹر لیتے ہیں، ہم نے FPTR کے نام سے ایک پوائنٹر بنایا، FPTR کے اندر فائل کھولی اور اسے F ویلیو تفویض کی۔ ہم نے اوپن فنکشن استعمال کیا جس میں ہم نے دو پیرامیٹرز پاس کیے، ایک ہماری فائل کا نام اور دوسرا ہمارا موڈ۔ اب ہم فائل کو اسی طرح بند کر سکتے ہیں جس طرح ہم نے فائل کھولی تھی۔ بند کرنے کے لیے، ہمارا فنکشن F کلوز F ہے۔ کلوز لکھنے کا نحو بہت آسان ہے، F اور پھر بند، اور اس کے اندر صرف اس فائل کا پوائنٹر لگائیں جسے ہم بند کرنا چاہتے ہیں۔ اب بند کرنے کے پیچھے منطق یہ ہے کہ جب بھی ہم کسی فائل کو بند کرتے ہیں۔



09:35:43

جب ہم اسے کھولتے ہیں تو ہمارا سسٹم ہمیں وسائل دینے آتا ہے کہ آپ کو اتنی میموری کی ضرورت ہوگی، آپ کو اس وسائل کی ضرورت ہوگی، آپ کو اس وسائل کی ضرورت ہوگی کیونکہ آپ ایک اہم کام کرنے والے ہیں کیونکہ ہماری مستقل میموری سے کسی بھی ڈیٹا کو پڑھنا سسٹم کے لیے اہم کام ہے، اس لیے اس نے ہمیں وسائل فراہم کیے، لیکن اب اگر ہماری فائل کا کام ہمارے لیے ایک بار ختم ہوگیا، یعنی ہم نے اسے پڑھ لیا، اس میں لکھا ہے، اور اب ہمیں اپنے وسائل کے مطابق یہ کام ختم ہونا چاہیے، ہمارے سسٹم کو ان وسائل کے مطابق واپس دینا چاہیے۔ خواہش



09:36:10

ویسے اگر ہم فائل بند نہ بھی کریں تو کوئی مسئلہ نہیں ہوگا لیکن جب بھی ہم بڑے کوڈ لکھتے ہیں تو مشورہ دیا جاتا ہے کہ پروگرام کے آخر میں جب آپ کا کام فائل سے ہو جائے تو آپ فائل کو بند کردیں کیونکہ آپ کے سسٹم کے وسائل استعمال ہورہے ہیں اور فائل کھولنے سے آپ کا سسٹم سست ہوجاتا ہے۔ اس لیے سسٹم کی افادیت بڑھانے کے لیے آپ کو ہمیشہ اپنی فائلز کو بند کرنا چاہیے تاکہ کمپائلر کو معلوم ہو جائے کہ فائل پر کام ختم ہو گیا ہے۔



09:36:38

یہ ہو گیا، تو اب ہمیں کوئی کام نہیں کرنا ہے لیکن ہم اپنی فائل کو بند کر سکتے ہیں، یہاں f کلوز لکھ کر فائل پوائنٹر f ptr کو اندر سے پاس کر سکتے ہیں، تو کیا ہوا، فائل یہاں کھل گئی، ہمیں کوئی کام نہیں کرنا پڑا، اس لیے ہم نے بس یہاں f بند کر کے فائل کو بند کر دیا، آگے بات کرتے ہیں کہ ہم فائل کو کن کن طریقوں سے کھول سکتے ہیں، ابھی پہلا موڈ جو ہم پڑھ رہے ہیں وہ ہے، جس کا مطلب ہے کہ ہم اپنی فائل کو دوسری کھول رہے ہیں، RB پڑھ رہے ہیں اگر ہم اسے RB موڈ میں کھولتے ہیں۔



09:37:09

تو فائل کو بائنری فارمیٹ میں پڑھا جاتا ہے، تو یہ عام طور پر بائنری فائلز کے لیے ہوتا ہے، یہ ہمارے لیے فی الحال اتنا مفید نہیں ہے، لیکن ہاں، اگر آپ کے سوالیہ پیپر میں، آپ کے کالج کے امتحان میں، سوال آتا ہے کہ آپ کو بائنری فائل کھولنی چاہیے یا بائنری شکل میں کھولنی چاہیے، تو آپ کو ذہن میں رکھنا ہوگا کہ ہمیں rb کو بطور موڈ استعمال کرنا ہے، یا نہیں، اب ان دونوں چیزوں کے بارے میں ایک خاص بات یہ ہے کہ ان دونوں فائلوں کے بارے میں ایک خاص بات ہے۔ بالکل موجود نہیں ہے، اور آپ h s اور load s کو کال کرنا چاہتے ہیں، کسی نے کبھی نہیں دیکھا



09:37:39

اگر یہ نہیں بنایا گیا تو null پوائنٹر کے اندر سٹور ہو جائے گا، تو رائٹ موڈ میں، ریڈ موڈ میں اور ریڈ بائنری موڈ میں، اگر آپ کی فائل دونوں میں موجود نہیں ہے تو پوائنٹر کے اندر ایک null پوائنٹر بن جائے گا، یعنی null سٹور ہو جائے گا۔ آگے بات کرتے ہیں اپنی رائٹ کی، رائٹ موڈ میں، آپ کا ارادہ یہ ہے کہ آپ فائل کے اندر کچھ لکھنا چاہتے ہیں، اور بائنری لکھنے کا مطلب ہے کہ آپ اپنی فائل کے اندر بائنری فارمیٹ میں کچھ لکھنا چاہتے ہیں، اب یہاں بھی ایک خاص بات آتی ہے جب بھی آپ فائل لکھنے جائیں، اور فرض کریں۔



09:38:12

آپ نے دوبارہ لوڈ s کو کھولنے کی کوشش کی کہ اس میں چیزیں لکھیں لیکن hello dot s موجود نہیں ہے تو یہ دو فنکشن یعنی لکھنا اور لکھنا binary اس فائل کو بنائے گا اگر یہ موجود نہیں ہے، آپ نے فائل نہیں بنائی تھی لیکن آپ اسے لکھنا چاہتے ہیں، تو آئیے آپ کے لیے بنائیں، اس قسم کا سسٹم موجود ہے اور اگر فائل پہلے سے موجود ہے تو فرض کریں کہ آپ کے پاس کوئی فائل ہے جس میں آپ نے اسے کھولا ہے یا آپ نے اسے کھولنے کے لیے کچھ ڈیٹا اسٹور کیا ہے تو لکھیں یا بائنری لکھیں۔ ان طریقوں، پھر سب سے پہلے آپ کے



09:38:42

فائل کھل جائے گی، پھر اس کے اندر موجود ڈیٹا ڈیلیٹ ہو جائے گا اور اس کے بعد جو بھی ڈیٹا لکھنا ہو گا، وہ اسے لکھیں گے، اس طرح آپ کی پوری فائل کا تمام ڈیٹا اوور رائٹ ہو جائے گا، اگر آپ اسے رائٹ یا لکھ کر بائنری سے کھولیں گے، لیکن آپ چاہتے ہیں کہ پرانا ڈیٹا بھی محفوظ رہے اور میرا نیا ڈیٹا اس کے نیچے محفوظ ہو جائے، تو اس صورت میں ہم اپینڈ استعمال کرتے ہیں، یعنی پرانی ایپ کو ایک موڈ کے طور پر لاتے ہیں، اس کا مطلب ہے کہ ہم اسے استعمال کرتے ہیں۔ پرانے ڈیٹا کے بعد ڈیٹا شامل ہونا شروع ہو جائے گا، لہذا یہ پانچ سب سے زیادہ ہیں۔



09:39:14

اہم موڈز ہیں جنہیں ہم جب بھی فائل کھولتے ہیں استعمال کر سکتے ہیں۔ اب سب سے پہلے ہم ایک بہترین عمل کو دیکھتے ہیں۔ ہمارا بہترین طریقہ یہ ہے کہ اگر ہم کسی فائل کو پڑھنے کے لیے کھول رہے ہیں تو اس سے ڈیٹا پڑھنے سے پہلے سب سے پہلے یہ چیک کرنا چاہیے کہ ہماری فائل موجود ہے یا نہیں۔ لہذا اگر فائل موجود ہے یا نہیں تو ہم اس کے لئے کوڈ لکھتے ہیں۔ فرض کریں کہ ہم ایک فائل کھولنے کی کوشش کر رہے ہیں جس کا نام نیا ٹیسٹ ہے۔ اب اگر نیا ٹیسٹ موجود نہیں ہے تو ہم نے صرف اس پر بحث کی ہے۔



09:39:42

کہ اگر F PTR پڑھنے کے موڈ میں ہے تو F PTR کے اندر جو آتا ہے وہ null ہو جاتا، اس لیے ہم اس میں شرط رکھ سکتے ہیں کہ اگر A PTR E کے برابر E null کے برابر ہو تو اس صورت میں ہم پرنٹ کریں گے فائل موجود ہے، لیکن اگر ایسا نہیں ہے تو اس کا مطلب ہے کہ ہماری فائل کھل گئی ہے اور اب ہم اپنی فائل بند کر دیں گے، تو ہم نے ایک بہت آسان کام کیا، ہم نے پہلے ہی پڑھا تھا کہ فائل موجود نہیں ہے تو کیا پڑھا ہے، اگر فائل موجود نہیں ہے تو کیا ہو گا۔ null F PTR کے اندر آجائے گا، اس لیے ہم اس پر چیک کرتے ہیں کہ اگر F PTR null ہے، تو پرنٹ فائل موجود ہے۔



09:40:19

یہ نہیں کرتا اور اگر ایف پی ٹی آر میں کوئی ویلیو آ گئی ہے تو ٹھیک ہے، ابھی کوئی کام نہیں ہے، اس لیے ہم اسے بند کر دیں گے، اگر کوئی کام ہوتا تو یہاں اس طرح سے سٹیٹمنٹ لکھ کر وہ کام کروا لیتے، تو آئیے اسے ایک بار محفوظ کر کے اسے بھی چلاتے ہیں، دیکھتے ہیں کہ آؤٹ پٹ کیا ہے، فائل کا ڈیزائن موجود ہے کیونکہ نیا ٹیسٹ نام کی فائل موجود نہیں ہے، تو ہم نے جو جگہ بنائی تھی، اب اس کی جگہ موجود نہیں ہے، اب ہم نے کیا لکھا ہے۔ ہوتا، اگر ہم اس نئے ٹیسٹ d txt.gz t exe کو رائٹ موڈ میں کھولنا چاہتے ہیں، تو کمپائل کریں اور



09:40:54

چلائیں تو آخر میں کیا ہوا کہ اچانک ہمارے لیے ایک نئی ted t ایکٹ فائل آئی اور ہم اس فائل کو بھی کھول سکتے ہیں ابھی فائل خالی ہے کیونکہ ہم نے اس میں کچھ نہیں لکھا لیکن وہ فائل ہمارے لیے ضرور بنائی گئی ہے آگے چلو فائل سے پڑھنے کی بات کرتے ہیں اب آپ فائل کھولنا سیکھ چکے ہیں، اسے بند کرنا سیکھ چکے ہیں، اس سے ڈیٹا کو کیسے پڑھنا ہے، ہم نے اس کا ڈیٹا کیسے کھولا اس کی مدد سے ہم نے پہلے اس کا ڈیٹا کیسے کھولا، اس کی مدد سے فائل کو پڑھا ہے۔ سب فرض کریں کہ ڈیٹا کو پڑھنے کے لیے ہم scanf اور printf کی بجائے scanf استعمال کرتے ہیں۔



09:41:25

اور ہم دو فنکشنز f printf استعمال کرتے ہیں، جن کی مدد سے ہم مختلف قسم کے ڈیٹا کو پڑھ سکتے ہیں، یہ سٹرنگ ڈیٹا ہو سکتا ہے، کریکٹر ڈیٹا ہو سکتا ہے، یہ انٹیجر ڈیٹا ہو سکتا ہے، یہ فلوٹ ڈیٹا بھی ہو سکتا ہے، اسی طرح f scanf میں بھی، اندر scanf کی طرح، اگر ہم scanf کی بات کریں تو scanf کیا کرتا تھا، سب سے پہلے یہ فارمیٹ لیتا تھا، اس کے اندر f کی وضاحتیں f scanf کے پاس تھیں، اس لیے اس میں دو پیرا میٹر قابل ذکر تھے۔ تین پیرامیٹرز ہیں، جن میں سے پہلا ہمارا فائل پوائنٹر ہے، دوسرا ویری ایبل کی ہماری فارمیٹ کی وضاحت ہے، تو سب سے پہلے یہ بتائیں



09:41:59

ہم آپ کو بتائیں گے کہ ہمیں کس فائل سے ڈیٹا پڑھنا ہے، پھر ہم f scan f لکھیں گے، جس کے اندر ہم فائل پوائنٹر لکھیں گے، اس کے بعد ہم لکھیں گے کہ کس قسم کا ڈیٹا پڑھا جا رہا ہے، فرض کریں کہ ہم اس فائل سے ایک کریکٹر پڑھ رہے ہیں اور اس کے بعد ہمیں اس کیریکٹر کو پڑھ کر اسے کہاں اسٹور کرنا ہے، تو اس کے لیے ہم نے پہلے ہی کریکٹر نام کا ایک متغیر بنا رکھا ہے، تو اس کے لیے ہم نے پہلے ہی ایک کریکٹر بنایا ہے جس کے ذریعے ڈیٹا کو کیسے پڑھا جائے گا، اس ڈیٹا کو کیسے پڑھا جائے گا۔ پڑھیں، جیسا کہ اسکین ایف کیا کرتا ہے، ہم کی بورڈ سے مختلف کیز دباتے ہیں۔



09:42:28

ہم ان کو دباتے ہیں اور scanf انہیں پڑھتا رہتا ہے، اسی طرح f-scanf کا سسٹم ہے، فائل کے اندر جو تمام ڈیٹا لکھا جاتا ہے، ہمیں یقین دلانا پڑتا ہے کہ وہ بھی کی بورڈ کی کلیدوں کی طرح دبایا جا رہا ہے اور جوں جوں ہم ڈیٹا حاصل کرتے رہتے ہیں، یہ f-scanf کے ساتھ سکین ہوتا رہتا ہے، یعنی ان پٹ ہوتا رہتا ہے، آئیے ایک بار کوشش کریں، ہم نے پہلے سے لکھے ہوئے کوڈ کو پڑھا ہے اور ٹیسٹ کے ذریعے L لکھنا چاہتے ہیں۔ ہماری فائل، تو ہم سب سے پہلے کیا کریں گے، ایک کریکٹر بنائیں



09:42:59

آئیے C لیتے ہیں، اب ہم F کو اسکین کریں گے، جس میں سب سے پہلے ہم فائل پوائنٹر کو پاس کریں گے، اس کے بعد ہم اپنا مخصوص فارمیٹ یعنی فیصد C پاس کریں گے اور اس کے بعد ہمارے ویری ایبل کا ایڈریس، C کا ایڈریس، اب ہم نے جو بھی ویری ایبل پڑھا ہے اسے پرنٹ کریں گے، کیریکٹر C فیصد کے برابر ہے، اور ہم اس کریکٹر C کو پرنٹ کریں گے اور آخر میں ہم PTR کو محفوظ کریں گے اور ہم اسے بند کرنے دیں گے، ہم اس فائل کو بند کریں گے اور کیا کریں گے۔ ایک بار، پھر یہاں کچھ بھی نہیں چھپا، کچھ نہیں چھپا کیونکہ ہم نے ایک نیا امتحان کھولا ہے، ہمیں جانچنا ہے۔



09:43:37

ہم نے اسے کھولنا ہے اور یہاں ہم کمپائل کو صاف کر کے چلاتے ہیں، اس لیے اسے چلانے کے بعد بھی کریکٹر کی ویلیو پرنٹ نہیں ہوئی۔ یہ پرنٹ نہیں ہوا کیونکہ ہم نے اسے رائٹ موڈ میں کھولا ہے، ہمیں اسے پڑھنے کے موڈ میں کھولنا پڑے گا، چلو اسے ایک بار پھر کمپائل کرکے چلاتے ہیں، پھر ہم نے اپنا کریکٹر i برابر a کے برابر کیا، اس نے اس کو اسکین کرکے اسی ویری ایبل کے اندر محفوظ کرلیا، جیسا کہ ہم نے پہلے ہی seach کی ویلیو پرنٹ کر دی ہے، اب اگلا کریکٹر بھی seach میں دوبارہ پڑھیں۔



09:44:28

چلو اسے لے لو اور اسے یہاں پرنٹ کروائیں اور ہم ایک ہی چیز کو پانچ بار بار بار کریں گے کیونکہ ہمیں پورا ایل پڑھنا ہے۔ چلو اسے بھی محفوظ کریں اور چلائیں۔ تو یہاں اگر ہم آؤٹ پٹ اسکرین کو غور سے دیکھیں تو پہلے یہ A پڑھتا ہے، پھر P پڑھتا ہے، پھر P کو کریکٹر میں پڑھتا ہے اور پھر جو چوتھا کریکٹر پڑھتا ہے وہ L ہے اور پانچواں کریکٹر E ہے۔ تو ایک طرح سے، کریکٹر بہ کریکٹر جا کر ہمارا مکمل لفظ پڑھا گیا ہے۔ اب یہاں، فرض کریں کہ ہم حروف کو ذخیرہ نہیں کرتے ہیں، ہم کچھ ذخیرہ کرتے ہیں.



09:44:58

نمبرز جیسے 1 2 3 4 5 6 8 9 8 تو اب ہم نے ان نمبرز کو محفوظ کر لیا ہے۔ اب ہم حروف کو ذخیرہ نہیں کرتے، وہ بھی صورت میں لیے جاتے ہیں۔ اس بار ہمیں انٹیجر ٹائپ ڈیٹا پڑھنا ہے، آئیے اسے جوں کا توں رکھیں اور انٹیجر ٹائپ کے لیے ہمیں یہاں ہر جگہ تبدیل کرنا پڑے گا، بس فیصد ڈی اور سائنز، ہم نے صرف تین نمبر لکھے ہیں، یعنی یہاں ٹیسٹ میں صرف تین نمبر ہیں، اس لیے ہم اسے تین بار اسکین کرکے پرنٹ کریں گے، آئیے اسے ایک بار محفوظ کرکے چلاتے ہیں۔ تو سب سے پہلے ہمارے لیے 1 2 3 پڑھا گیا، اس نے اس ایک عدد کے اندر ایک ساتھ 12 23 کا کیا کیا



09:45:40

پھر 456 کو سنگل انٹیجر جار میں اسٹور کیا اور اسے پرنٹ کیا، پھر 898 کو سنگل انٹیجر جار کے اندر اسٹور کیا اور اسے پرنٹ کیا۔ تو یہاں، اگر فلوٹنگ ویلیوز، سٹرنگز، یا انٹیجرز کی دوسری قسمیں ہوتیں، تو ہم ان تمام چیزوں کو scanf سے سکین کر کے سکرین پر پرنٹ کر سکتے ہیں، scanf سے نہیں، بلکہ scanf کے ساتھ جو صرف فائلوں کے لیے استعمال ہوتا ہے۔ اب جس طرح ہم فائل سے ڈیٹا پڑھ سکتے ہیں، اسی طرح اسے لکھ بھی سکتے ہیں۔ لکھنے کے لئے، ہمارے



09:46:07

فنکشن جو استعمال کیا جاتا ہے وہ ہے f print f۔ f پرنٹ f کے اندر بھی تین پیرامیٹرز پاس ہوتے ہیں، پہلا ہمارا فائل پوائنٹر اور دوسرا ہمارا فارمیٹ۔ ہم اس فارمیٹ کی تفصیلات پر متغیر کی قدر پرنٹ کرنا چاہتے ہیں۔ تو آئیے اس کو بھی آزماتے ہیں۔ ہم کیا کریں گے، اپنی فائل جو ہم نے ٹیسٹ فائل کے اندر محفوظ کر رکھی ہے، ہم اسے لکھنے جا رہے ہیں، تو آئیے اسے یہاں ڈیلیٹ کر دیں، تو سب سے پہلے ہم f print f لکھتے ہیں۔ f پرنٹ f کے اندر، سب سے پہلے آرگیومینٹ جائے گا، ہمارا فائل پوائنٹر جائے گا اس کے بعد ہمارا کریکٹر پہلے کریکٹر میں جائے گا۔



09:47:02

آپ اپنا M بھیجنا چاہتے ہیں اور اس طرح آپ مختلف کریکٹرز A N G اور O بھیجتے رہیں گے، آئیے یہ کریں، اسے محفوظ کریں اور اب اسے چلائیں اور دیکھیں، شروع میں ایک بار اس کی جانچ کرتے ہیں، d t ایکٹ کے اندر L موجود ہے اور جیسے ہی ہم اس کوڈ کو چلاتے ہیں، اس میں موجود L مینگو میں تبدیل ہو جاتا ہے، اس لیے فائل کا پورا متن، پورا ڈیٹا، ہم اسے تبدیل کر دیتے ہیں، جب ہم اس ایپ کو کھولنا چاہتے ہیں، لیکن جب ہم اس ایپ کو کھولنا چاہتے ہیں تو ہم اسے تبدیل کر دیتے ہیں۔ موڈ، پھر مینگو، اب دیکھتے ہیں کہ اس سے کیا آؤٹ پٹ آتا ہے۔



09:47:39

بعد میں ایک اور آم شامل ہو گیا۔ اب اس معاملے میں، جب ہم نے اپینڈ کیا تو ہمارا پرانا ڈیٹا نہیں مٹا۔ ہم نے اس ڈیٹا میں کچھ اضافی چیزیں شامل کیں۔ اس کے بعد آئیے اس بارے میں بات کرتے ہیں کہ کیا ہمیں کسی فائل کو صرف حرف بہ حرف پڑھنے کی ضرورت ہے۔ ایک یہ کہ فیصد c کا اضافہ کرکے اور فارمیٹ اسپیفائر کو لاگو کرکے آپ اسے f پرنٹ f یا f scanf کے ساتھ کرسکتے ہیں۔ دوسری صورت میں، اس کے لیے فائلز کے اندر بھی دو خاص فنکشن ہیں، جن میں سے پہلا فنکشن f get c اور دوسرا فنکشن f put c ہے۔ ایف حاصل سی کیا کرتا ہے؟ گیٹ سی کا مطلب ہے گیٹ۔



09:48:10

کریکٹر فائل کے اندر سے ایک کریکٹر لاتا ہے اور F put C فائل کے اندر ایک کریکٹر رکھتا ہے۔ تو یہ حروف کو پڑھنے کے لیے استعمال ہوتا ہے اور یہ فائل میں حروف لکھنے کے لیے استعمال ہوتا ہے۔ دونوں کی ترکیب بالکل آسان ہے۔ آپ صرف ایف حاصل سی کے اندر کیا کرتے ہیں آپ اپنا فائل پوائنٹر لگاتے ہیں۔ اس کا مطلب یہ ہے کہ ہمارا پہلے کا نحو، جو ہم F scanf کے ساتھ کر رہے تھے، یہ تھا کہ ہم نے پہلے فائل پوائنٹر ڈالا، اس کے بعد ہم نے فیصد C ڈالا اور اس کے بعد ہم نے وہ کریکٹر ڈالا۔



09:48:43

وہ پتہ جس میں ہمیں ڈیٹا پڑھنا اور ذخیرہ کرنا ہے۔ اب اگر ہم اس قدم اور اس قدم کو یہاں سے ہٹا دیں تو معاملات آسان ہو جائیں گے۔ یہاں، ہمیں صرف فائل پوائنٹر کو پاس کرنا ہے اور یہ فائل پوائنٹر کیا کرے گا، یہ ہمارے فنکشن کے اندر جائے گا اور یہ فنکشن ہمیں وہی کریکٹر واپس کر دے گا جو اس نے ہماری فائل سے پڑھا ہے۔ اسی طرح کا کام ہمارا put s کرے گا، کیا put s do کرے گا، پہلے وہ کریکٹر لے گا جسے فائل کے اندر لکھنا ہے، پھر اس فائل کا پوائنٹر لے گا جس کے اندر لکھنا ہے اور بس اسے واپس کر دیں گے۔



09:49:11

فائل کے اندر جا کر، یہ وہ کردار لکھے گا۔ ہم ان دونوں سے اپنا ڈیٹا پڑھ سکتے ہیں، یعنی F put C اور F کو C حاصل کریں، جو ہم نے پہلے پرنٹ F کیا تھا۔ اس بار ہم اپنی فائل کو کھولیں، سب سے پہلے ہم اسے ریڈ موڈ میں کھولیں گے اور یہاں F get C ptr لکھیں گے۔ اب یہاں سے کردار ہمیں واپس کر دیا جائے گا، لیکن ہمیں اسے پرنٹ بھی کروانا پڑے گا، تو آئیے F فیصد C اس E F ptr کو پرنٹ کرتے ہیں۔ اب ہم اس کوڈ کو پانچ بار کاپی کرتے ہیں، جو کہ ٹیسٹ کے اندر ہے، یہاں سے ہم اسے L پر واپس حاصل کریں گے۔



09:49:56

آئیے اسے دوبارہ انسٹال کریں۔ اب ہمارے کوڈ کو محفوظ کریں اور اسے ایک بار چلائیں۔ ہم آؤٹ پٹ کا تجزیہ کریں گے کہ آیا یہ ایک جیسا ہوگا۔ اور آؤٹ پٹ وہی ہو گا، یعنی ہمارا کریکٹر بہ کریکٹر جو فائل سے پڑھا جاتا ہے ہماری سکرین پر f get c کا استعمال کرتے ہوئے پرنٹ کیا گیا ہے۔ اسی طرح، اگر ہم اپنی فائل کو رائٹ موڈ میں کھولتے ہیں اور اس بار ہم لکھنا چاہتے ہیں، تو آئیے اس پر بھی تبصرہ کرتے ہیں۔ بس ہمیں f put c لکھنا ہے۔ اس کے اندر، سب سے پہلے ہم اپنا کردار اور اپنی فائل کا پوائنٹر لکھیں گے۔ ہم بھی ایسا ہی کرنے کی کوشش کریں گے۔ L ہماری ٹیسٹ فائل کے اندر محفوظ ہے۔



09:50:37

ہم اسے Mango سے بدلنا چاہتے ہیں، لہذا ہم اس فائل کو رائٹ موڈ میں کھول کر Mango لکھنے جا رہے ہیں، اس کو بھی f put c کی مدد سے محفوظ کریں اور اسے چلائیں، تو اب اگر ہم ٹیسٹ فائل کو دیکھیں تو Mango ہمارے لیے l کی مثال آیا ہے، لہذا اگر ہم اسے کریکٹر کے لیے کرنا چاہتے ہیں تو ہم کریکٹر کے لیے f اسکین کر سکتے ہیں یا ہم f get c، float کی دیگر اقسام کے لیے بھی کر سکتے ہیں، لیکن اگر ہمارے پاس ڈیٹا کی دیگر اقسام ہیں، تو F حاصل کریں انہیں ہم جانتے ہیں کہ ہمیں صرف f scanf یا f print f استعمال کرنا پڑے گا، آئیے آگے بات کرتے ہیں۔



09:51:11

EOF کی EOF ایک خاص چیز ہے جسے فائل کا اختتام بھی کہا جاتا ہے۔ اب یہ EOF مختلف زبانوں میں موجود ہے۔ C میں EOF دارالحکومت EOF ہے۔ جاوا میں بھی چھوٹا EOF ہے۔ تو EOF فائل کا اختتام ہے۔ جب ہم F گیٹ C سے کریکٹرز پڑھتے ہیں تو جیسے ہی ہماری فائل میں ایک ایک کر کے کریکٹرز پڑھ کر ہمارے تمام کریکٹرز ختم ہو جاتے ہیں تو ہمارا F گیٹ C EOF واپس کرتا ہے اور EOF واپس کرنے کا مطلب ہے کہ EOF null کی طرح ہے۔ کے طور پر اگر null واپس کر دیا گیا تھا، تو ہم جانتے ہیں کہ فائل



09:51:45

یہ موجود نہیں ہے، اسی طرح جب EOF واپس آتا ہے تو ہمیں معلوم ہوتا ہے کہ ہم اپنی فائل کے اختتام پر پہنچ چکے ہیں، جس کا مطلب ہے کہ ہم نے تمام ڈیٹا کو عبور کر کے اسے پڑھ لیا ہے۔ اب ہماری فائل کے اندر ایسا کوئی ڈیٹا نہیں ہے جسے ہم نے نہ پڑھا ہو۔ اس لیے جب بھی ہم ایف گیٹس کا ڈیٹا پڑھتے ہیں تو اس کے حروف کو پڑھنے کا فائدہ یہ ہوتا ہے کہ ڈیٹا کو پڑھنے کے بعد ہمیں EOF ملتا ہے۔ مثال کے طور پر، فرض کریں کہ ہم نے اپنی فائل کے اندر بہت سا ڈیٹا محفوظ کر رکھا ہے، یہ الفاظ کی بے ترتیب تار ہے، تو یہ طریقہ کافی مفید ہے۔



09:52:15

ہم نے تمام ڈیٹا محفوظ کر لیا ہے اور ہم اسے پڑھنا چاہتے ہیں۔ تو اس سب کو پڑھنے کے لیے ہمیں اسے حرف بہ حرف پڑھنا پڑے گا۔ اس کے علاوہ، ہم آخر میں ایک حد لگائیں گے کہ ہم کتنی دیر تک پڑھنا چاہتے ہیں، جب تک کہ EO آجائے۔ تو، اس کے لیے، آئیے ایک سادہ کوڈ لکھیں۔ آپ دیکھیں گے کہ ہر کوڈ میں فائل کو کھولنے اور بند کرنے کی دونوں لائنیں مستقل ہیں۔ فائل پوائنٹر کا اعلان کرنے کے بعد، اب ہم اس فائل کو پڑھنے کے موڈ میں کھولنے جا رہے ہیں اور اسے حرف بہ حرف پڑھیں گے۔ تو،



09:52:44

سب سے پہلے ایک کریکٹر C بنائیں جو تمام اقدار کو پڑھے گا۔ اب C کے اندر، سب سے پہلے پہلے کریکٹر کو پڑھیں۔ ہم پہلا حرف کیسے پڑھیں گے؟ ہم اس کے اندر ایف گیٹ سی ڈالیں گے۔ تو F گیٹ C کے اندر F PTR ڈال کر، ہم اپنے کردار کو پڑھ کر C نامی متغیر میں محفوظ کریں گے۔ اس کے بعد ہم کیا کریں گے؟ آئیے تھوڑا سا لوپ ڈالیں۔ تھوڑی دیر کیوں لوپ کیوں کہ ہمیں ایک ایک کرکے کریکٹرز کو بار بار لوپ کی شکل میں پڑھنا پڑتا ہے، جیسے ٹیسٹ۔



09:53:12

اگر ہم اندر جائیں گے تو پہلے ہم t پڑھیں گے، پھر ہم h پڑھیں گے، پھر ہم i پڑھیں گے، پھر ہم a پڑھیں گے، پھر ہم اس اسپیس کو پڑھ رہے ہوں گے، پھر i سے a، اس طرح سے الفاظ کی پوری سٹرنگ، درحقیقت یہاں ایک پیراگراف ہے، آپ نے google2، فیصد c، وہی حرف مکمل کیا ہے جو ہم نے ابھی پڑھا ہے، اور اسے دوبارہ پڑھیں، اس کا مطلب ہے کہ تلاش کے اندر، اب ہم f کے اندر سے نئی قدر حاصل کریں گے اور فائنل میں fptr حاصل کریں گے۔ اگلی لائن ہمارے کنسول پر اس طرح چھپی ہوئی ہے۔



09:53:56

آئیے کوڈ کو تھوڑا غور سے سمجھیں، کریکٹر CA، ہم نے ایک ڈمی کریکٹر لیا ہے، ہم اس کے اندر موجود ڈیٹا کو پڑھ کر فائل سے یہاں اسٹور کریں گے، پہلے کریکٹر کو پڑھا جائے گا اور پھر لوپ ڈال دیا جائے گا، لوپ کے اندر کریکٹرز پڑھتے رہیں جب تک فائل کے آخر تک نہ پہنچ جائے، تو یہ کنڈیشن اس وقت تک ظاہر ہوتی ہے جب تک کریکٹر فائل کے آخر کے برابر نہ ہو جائے، اب ہم سیچ پرنٹ کرتے رہیں گے، اگلا کریکٹر دوبارہ پڑھا جائے گا، پھر ہم اسے دوبارہ پڑھیں گے۔ ایک بار پھر، ہم اسے دوبارہ پرنٹ کریں گے، ہم اس وقت تک کردار کو دوبارہ پڑھیں گے۔



09:54:25

ہمیں اس کریکٹر کے اندر فائل کا اختتام نہیں ملتا، جیسے ہی فائل کا اختتام آتا ہے، ہم کنسول پر اگلی لائن پرنٹ کر کے اپنی فائل کو بند کر دیتے ہیں، چلو اسے محفوظ کرتے ہیں اور اب اگر ہم اسے ٹرمینل سے چلاتے ہیں تو ہماری سکرین پر وہی مکمل جملہ پرنٹ ہو جاتا ہے، یہ الفاظ کی بے ترتیب تار ہے جو ہم نے اپنی ٹیکسٹ فائل میں ڈالی تھی، اس لیے جب بھی آپ اسے پڑھنا چاہیں، C کے آخر میں فائل کو ٹریک کرنے کے لیے پہلے C کا استعمال کریں اور فائل کو ٹریک کرنے کے لیے پہلے کیسے استعمال کریں۔ ہم سب سوال پوچھتے ہیں، ہمارا سوال کہتا ہے۔



09:54:56

ایک فائل سے پانچ عدد پڑھنے کا پروگرام بنائیں ہمیں ایک فائل لینا ہے اور اس میں سے پانچ عدد پڑھنا ہے، تو آئیے اپنی ٹیسٹ فائل 1 2 3 4 اور 5 میں پانچ عدد لکھ کر محفوظ کریں۔ اب ایک پروگرام بناتے ہیں۔ اصل میں، ہم اس پروگرام کے ساتھ کیا کریں گے؟ ہم شروع سے ایک فائل پوائنٹر بنائیں گے۔ اب ہم فائل کو کھولیں گے۔ تو f ptr = i f کھولیں۔ سب سے پہلے، ہم فائل کا نام پاس کریں گے، f ٹیسٹ ڈیٹا ایکٹی ہے۔ اس کے بعد ہم اپنا موڈ پاس کر لیں گے، ہمیں پڑھنا ہے۔ اب ہم ایک عدد متغیر n بنائیں گے جس میں ہم نمبرز کو محفوظ کریں گے۔



09:55:31

اس سے پہلے ہم f scanf فیصد d پڑھنے جارہے ہیں اور اس نمبر کو n میں اسٹور کریں گے، اس کے بعد ہم اس نمبر کو اسکرین پر پرنٹ کریں گے، نمبر e کو فیصد d کے برابر، اور ہمیں یہی بات پانچ نمبروں کے لیے دہرانا ہے، تو آئیے اس پورے کوڈ کو محفوظ کریں اور آخر میں ہمیں اپنی فائل بند کرنا نہیں بھولنا چاہیے، ہمیں اس میں لکھنا چاہیے، f ptr نے ایڈریس کو محفوظ کرنے کے لیے یہ ایرر ڈالا تھا، کیونکہ ہم نے یہاں کچھ ایڈریس کو محفوظ کیا تھا، n، ہم اسے اپنے f scanf میں پاس کریں گے، آئیے محفوظ کریں اور اب چلائیں، تو



09:56:18

نمبر ایک ایک کرکے پڑھے جاتے ہیں، ایک، 2، 3، 4 اور پانچ اسی ترتیب سے پڑھے جاتے ہیں جس ترتیب سے ہم نے اپنی فائل میں لکھے تھے۔ آئیے اگلا سوال کرتے ہیں، کسی صارف سے طالب علم کی معلومات داخل کرنے کے لیے ایک پروگرام بنائیں اور اسے فائل میں درج کریں۔ تو ہم صارف سے کیا کریں گے، ہم طالب علم کی معلومات لیں گے۔ اس معلومات میں، ہم طالب علم کا نام لینے جا رہے ہیں، اس کے بعد، طالب علم کی عمر، نمبر لیں یا اسے CGPA کہہ لیں، تاکہ ہم اسے بھی فلوٹ ٹائپ بنا سکیں۔ لہذا، ہم طالب علم کی یہ تین معلومات لیں گے۔



09:56:50

اور اگر ہم اسے کسی فائل کے اندر اسٹور کریں گے، تو آئیے اسے ڈیلیٹ کر دیں۔ سب سے پہلے، ایک فائل کھولیں، f ptr میں کھولیں۔ اب جس فائل کو ہم کھولنے جا رہے ہیں وہ موجود نہیں ہے، ہم ایک نئی فائل بنائیں گے، آئیے اسے طالب علم dt ایکٹ کا نام دیں اور ہم اسے رائٹ موڈ میں کھول رہے ہیں، اگر ہم اسے رائٹ موڈ میں کھولیں گے، چاہے وہ موجود نہ ہو، یہ خود بخود بن جائے گی۔ اب ہمارا پہلا کام یوزر سے انفارمیشن ان پٹ لینا ہے، اس لیے صارف سے معلومات حاصل کرنے کے لیے سب سے پہلے ہم پرنٹ ایف انٹر نام لکھتے ہیں، آئیے ایک سٹرنگ بناتے ہیں۔



09:57:23

100 حروف پرسنٹیج s کا کریکٹر کا نام اور اب ہم یہاں نام لکھتے ہیں اپنے نام کا فیصد اور اپنا نام اسکین کریں اس کے بعد ہم کیا کریں گے اس کے بعد ہم طالب علم کی عمر درج کریں گے اس کے ساتھ ساتھ int عمر اور فلوٹ CGPA کے لیے ایک ویری ایبل بنائیں تو کچھ مختلف حصے ہیں یہ فائل کا حصہ ہے یہ ہمارا داخلی متغیر حصہ ہے CGPA سے ہم یہاں C فیصد کنٹرول کرتے ہیں یہاں صارف کنٹرول کرتے ہیں۔ ہمیں ان تمام معلومات سے کیا لینا دینا



09:58:01

آپ اپنی فائل کے اندر لکھنا چاہتے ہیں، یعنی آپ اس فائل کے اندر تمام معلومات لکھنا چاہتے ہیں جو ہم نے f کھول کر کھولی ہے، تو اس کے لیے ہم f پرنٹ f استعمال کریں گے، ہم اسے کیسے کریں گے، سب سے پہلے ہمیں f پرنٹ f لکھیں گے، ہم اس کے اندر f ptr پاس کریں گے، اب ہم اپنی اسٹرنگ کو پہلے لکھنا چاہتے ہیں، اس لیے ہم نام لکھیں گے اور اسٹرنگ کے بعد ہم کوما لگانا چاہتے ہیں اور اس کے بعد اگلی لائن میں معلومات کے لیے کوما یا کوما لگانا چاہتے ہیں۔ معلومات ٹیب اسپیس کے ساتھ، پھر ہم لکھیں گے f print f f ptr اس کے بعد we



09:58:32

آپ کی عمر ظاہر کرنا چاہتے ہیں اور اسے ہماری عمر میں منتقل کرنا چاہتے ہیں f پرنٹ f f PTR فیصد f ہمارا CGPA ایک بار جب ہم اسے محفوظ کریں گے، پہلے نام پرنٹ ہوگا، پھر ایک ٹیب اسپیس آئے گا، پھر عمر پرنٹ ہوگی، پھر ٹیب اسپیس آئے گی، پھر CG آئے گا، یہ سب اسٹوڈنٹ فائل کے اندر ہوگا، جسے ہم ایک نئی بنائیں گے، اور آخر میں ہم خود ہی اس کوڈ کو ایک بار بند کردیں گے، اب ہم اس کوڈ کو بند کردیں گے۔ array، name، اپنے آپ میں ایک پوائنٹر ہے، اس لیے یہاں m فیصد ڈالنے کی ضرورت نہیں، یہ کریں۔



09:59:02

چلو صاف کرتے ہیں اور اب چلتے ہیں، لہذا ہم نے نام درج کیا، ہم نے عمر درج کی، ہم نے نمبر داخل کیے ہیں یعنی CGPA اور اب ہمارے لیے طالب علم کی فائل خود بخود بن گئی ہے، ہمارا نام آگیا، پھر ٹیب کی اسپیس آگئی، پھر عمر آگئی، پھر ٹیب کی اسپیس آگئی، پھر ہمارے نمبر آگئے، اس طرح ہم اپنے ڈیٹا کو فارمیٹ کرنے کے لیے مختلف طریقے سے لکھ سکتے ہیں، اگر ہمارے پاس ڈیٹا ہوتا تو اس کو فارمیٹ کرنا ہوتا۔ یہاں طالب علم کا نام، اس کے بعد ہم نے طالب علم کی عمر اور وہ تمام معلومات لکھی ہوں گی جو اگلی لائن میں موجود ہیں اور ہمیں پُر کرنا ہے۔



09:59:32

یہاں ہم طالب علم کا CGPA لکھتے ہیں۔ آئیے اسے ایک بار محفوظ کریں اور اسے دوبارہ چلائیں۔ ہم دوبارہ نام درج کرتے ہیں۔ ہم اپنی عمر میں داخل ہوتے ہیں۔ ہم دوبارہ نشانات درج کرتے ہیں۔ اس بار ہماری فائل پہلے سے موجود تھی، جس کا نام طالب علم ہے۔ جب ہم نے سٹوڈنٹ کو کھولا تو اب ہمارا ڈیٹا اس فارمیٹ میں ہمارے پاس آ گیا ہے۔ پہلا نام، پھر اگلی لائن میں عمر، پھر اگلی لائن میں CGPA۔ لہذا اگر ہمیں فائل میں لکھتے وقت مختلف قسم کی فارمیٹنگ کرنی پڑتی ہے تو ہم اسے بھی کرسکتے ہیں۔ اگلا، آئیے اپنا سوال نمبر 63 کا سوال درج کریں۔



10:00:01

ہمارا کہنا ہے کہ فائل میں ایک سے n تک تمام طاق نمبر لکھنے کے لیے ایک پروگرام لکھیں، یعنی ہمیں ایک فائل بنانا ہے اور اس کے اندر ایک سے n تک کے تمام طاق نمبر لکھنے ہوں گے اور یہ n ہمارے صارف نے ہمیں دینا ہوگا، اس لیے ہم صارف سے n ان پٹ کریں گے، ہم ایک سے n تک لوپ چلائیں گے، ہم اسے باہر نکالیں گے، فائل کے اندر d نمبر لکھیں گے، اسے بند کرنے کی کوشش کریں گے۔ ہمارے پروگرام کے اندر ایک نئی فائل، f ptr پر لکھیں اسے کھولیں ہماری فائل کا نام odd dt ext ہے



10:00:36

اور ہم اسے رائٹ موڈ میں کھول رہے ہیں، اس لیے اگر ہم اسے رائٹ موڈ میں کھول رہے ہیں، تب بھی اگر یہ موجود نہیں ہے، یہ خود بخود بن جائے گا، اب آئیے اسے یوزر انٹیجر جار سے پڑھتے ہیں اور پرنٹ کرتے ہیں ایک اسکین فی صد d اور n اس کے بعد لوپ int aa = 0 aa کو چلاتے ہیں جب تک کہ سبق n کے برابر ہے درحقیقت ہمیں p aa سے لکھنا شروع کرنے دیں، اب ہمیں p سے aa لکھنا شروع کرنا ہوگا۔ اگر aa modelo 2 0 کے برابر نہیں ہے جب میں 2 سے تقسیم کرتا ہوں تو یہ یاد دہانی میں قطار نہیں دے گا، یعنی اگر ہمارا نمبر طاق ہے تو نمبر طاق ہے، تو اب ہمیں فائل میں یہ لکھنا ہے، فائل میں کیسے لکھیں؟



10:01:23

ہم f پرنٹ f کی مدد سے f پرنٹ کریں گے۔ پہلا پیرامیٹر جو ہم پاس کریں گے وہ ہمارا فائل پوائنٹر ہے جس میں ہمیں لکھنا ہے، اس کے بعد ہم ٹائپ فارمیٹ سپیفائر کو پاس کریں گے اور ان نمبروں کو ایک ٹیب اسپیس کے ساتھ الگ کریں گے، درحقیقت ہم انہیں اگلی لائن میں پرنٹ کرائیں گے۔ آئیے اس سب کو محفوظ کرتے ہیں اور آخر میں ہم نے فائل کو بند کر دیا ہے۔ اب اس کو چلاتے ہیں، فرض کریں کہ ہمیں پہلے 10 طاق نمبر چاہیے، پھر خود بخود odd.tx1 تمام نمبر جو طاق ہیں ہمارے لیے پرنٹ ہو جائیں گے، 1 3 5 7 اور 9۔ آئیے اگلا سوال کرتے ہیں۔ اگلا سوال کہتا ہے۔



10:02:02

فائل میں دو نمبر لکھے ہوتے ہیں، ایک نمبر اے اور دوسرا نمبر بی۔ یہ نمبر فائل میں پہلے سے لکھے ہوئے ہیں۔ اب ان کو ان کی رقم سے بدلنے کے لیے ایک پروگرام لکھیں۔ ہمیں کیا کرنا ہے، فرض کریں یہ ایک فائل ہے، اس کے اندر پہلے سے دو نمبر دو اور تین لکھے ہوئے ہیں۔ ہم نے ان دونوں کو فائل سے پڑھنا ہے، ہم اے میں دو لائیں گے، بی میں تین لائیں گے۔ اور اس فائل کو اندر سے صاف کرنے کے بعد، یعنی اس کا ڈیٹا ڈیلیٹ کرنے کے بعد، ہمیں اس میں موجود دونوں نمبروں کا مجموعہ لکھنا ہوگا، یعنی اس کے آخر میں صرف پانچ ہونا چاہیے۔ تو ہمارا نظام کچھ اس طرح ہوگا۔



10:02:37

اس کے پیچھے کیا منطق ہو گی، سب سے پہلے ہم ڈیٹا کو پڑھیں گے، پہلے ہم فائل کو پڑھنے کے موڈ میں کھولیں گے، اس کے بعد فائل کو بند کرنے کے بعد ہم اسے رائٹ موڈ میں کھولیں گے، اور جیسے ہی ہم اسے رائٹ موڈ میں کھولیں گے، ڈیٹا خود بخود اوور رائٹ ہو جائے گا، پھر پرانا ڈیٹا ڈیلیٹ ہو جائے گا، تب تک ہم اس ڈیٹا کو اپنے لوکل ویری ایبلز میں محفوظ کر لیں گے، اس کے لیے سب سے پہلے ایک کوڈ لکھیں گے، اس لیے سب سے پہلے ایک کوڈ لکھیں گے۔ txt.gz، ہم f ptr پاس کریں گے اور اس کے بعد int b کے لیے اپنے فارمیٹ کی وضاحت کریں گے۔



10:03:30

int b اور b کا ایڈریس اب ہم نے a اور b کو پڑھ لیا ہے اور اب ہم فائل کو بند کرنے کے بعد فائل کو بند کرنے کے بعد اسی پوائنٹر کی مدد سے رائٹ موڈ میں دوبارہ کھولیں گے تو ہم اسے رائٹ موڈ میں کھولیں گے اور فائل کے اندر f پرنٹ کریں گے اور ڈیٹا میں ptr فیصد کا اضافہ کریں گے ہماری رقم یعنی a b اب ہم فائل کو دوبارہ بند کریں گے تو سب سے پہلے ہم نے فائل کو a اور b پڑھا اور اگلے موڈ میں فائل کو کھولنے کے بعد کیا لکھا۔ موڈ اب فائل کے اندر



10:04:09

a + b کو اوور رائٹ کیا، جس کا مطلب ہے دونوں نمبروں کا مجموعہ، اور فائل کو دوبارہ بند کر دیا۔ اب ہم اپنے sum txt.gz کو چلاتے ہیں۔ میں نے کیا کیا؟ میں نے دو اور تین کو پانچ سے بدل دیا۔ ہم نے اپنے بہت سے افعال پر تبادلہ خیال کیا ہے جو فائل میں ہیں۔ آپ فائلوں کی مدد سے مختلف سوالات حل کر سکتے ہیں اور وہ بہت آسان سوالات ہیں۔ آپ کو صرف تین چار افعال کو یاد رکھنا ہے۔ یاد رکھنے کے لیے بہترین ٹِپ یہ ہے کہ پہلے سے ایڈجسٹ کریں، f ڈالیں اور یہ ایک بہت ہی آسان نحو ہے، یعنی f کھلا اور f بند۔



10:04:44

آسان، میں کہوں گا کہ یہ وہ فنکشن ہیں جو دماغ میں پھنس جاتے ہیں اور اب آئیے اپنے آخری اور اگلے باب کی طرف چلتے ہیں جو کہ باب 11 ہے جس میں ہم ڈائنامک میموری ایلوکیشن کے بارے میں پڑھیں گے تو اب ہم اپنے چیپٹر 11 اور اپنے آخری چیپٹر سے شروع کریں گے جس کا نام ڈائنامک میموری ایلوکیشن ہے اب ہم تمام ڈائنامک میموری کے بارے میں بات کرنے سے پہلے کیسے سمجھتے ہیں ایک پروگرام میں ایک جامد میموری مختص اور ایک متحرک میموری مختص ہوتی ہے جب بھی ہم کوئی C لکھتے ہیں۔



10:05:14

اگر ہم کوئی پروگرام لکھتے ہیں اور اس میں ایک ویری ایبل بناتے ہیں تو سی کمپائلر کیا کرتا ہے کہ وہ اس ویری ایبل کے ڈیٹا ٹائپ کو دیکھتا ہے اور اس کے مطابق میموری کو مختص کرتا ہے، یعنی اسے محفوظ رکھتا ہے، لیکن بعض اوقات ایسی صورتیں پیدا ہوسکتی ہیں جن میں کوڈ کے بیچ میں ہماری میموری کی ضرورت بدل جاتی ہے۔ مثال کے طور پر، اگر آپ نے ایک صف بنائی ہے اور آپ اس صف میں رکھنا چاہتے ہیں کہ آپ کی کلاس میں کتنے بچے شامل ہیں، تو فرض کریں کہ آپ کی کلاس میں 30 بچے ہیں اور 30 ​​بچوں کے حساب سے،



10:05:40

آپ نے ایک صف بنائی ہے لیکن سال کے وسط میں آپ کی کلاس میں تین نئے بچے داخل ہو جاتے ہیں۔ تو اس کے لیے، کیا آپ سائز 33 کی ایک نئی صف بنائیں گے؟ اس میں، آپ پرانی اقدار کے ساتھ ساتھ نئی قدروں کو بھی کاپی کریں گے۔ تو یہ تھوڑی مشکل صورت حال بن جاتی ہے جس میں بہت ساری توانائی ضائع ہو جاتی ہے۔ اس لیے ہمیں ڈائنامک میموری ایلوکیشن کی ضرورت ہے کیونکہ یہ ایک ایسا طریقہ ہے جس کے ذریعے ہم پروگرام کے بیچ میں فیصلہ کر سکتے ہیں کہ ہمیں کتنی میموری کی ضرورت ہے۔ اگر ہم نے پہلے یادداشت کم لی ہے، تو ہم اسے بڑھا سکتے ہیں۔



10:06:09

اگر ہم نے پہلے زیادہ میموری لی تھی تو وسائل کو بچانے کے لیے ہم اس میموری کو پروگرام کے وسط میں کم کر سکتے ہیں، اتنی متحرک طور پر، یعنی رن ٹائم پر ہم یہ فیصلہ کر سکیں گے کہ کتنی میموری کو مختص کرنا ہے، اس لیے ڈائنامک میموری ایلوکیشن رن ٹائم کے دوران کسی ڈیٹا سٹرکچر کو میموری کو مختص کرنے کے لیے ہوتی ہے، اس لیے دو بار ہوتے ہیں، ایک ہمارا کمپائل ٹائم ہوتا ہے اور دوسرا یہ کہ رننگ ٹائم ہوتا ہے، اور دوسرا یہ کہ ہمارا کمپائل ٹائم ہوتا ہے۔ ایک عدد متغیر کو کتنی میموری کی ضرورت ہوگی، فلوٹ متغیر کو کتنی میموری کی ضرورت ہوگی



10:06:42

اسٹرنگ کی ضرورت ہوگی اور پھر ہماری رن ٹائم میموری ایلوکیشن ہوتی ہے۔ رن ٹائم کا مطلب ہے جب ہمارا کوڈ حقیقت میں چل رہا ہو، جب کنسول ونڈو کھلی ہو، صارف اس میں کچھ ڈال رہا ہو، کچھ آؤٹ پٹ تیار ہو رہا ہو، پروگرام کے آغاز اور اختتام کے درمیان کا وقت رن ٹائم کہلاتا ہے۔ اب، اس ڈائنامک میموری ایلوکیشن کے لیے جو ہم کرنا چاہتے ہیں، ہمیں کچھ فنکشنز کی ضرورت ہے۔ ان افعال کو استعمال کرتے ہوئے، ہم میموری کے ساتھ متحرک طور پر کھیل رہے ہیں۔ لہذا، اس عنوان میں، اس باب میں، ہم چار افعال کے بارے میں بڑے پیمانے پر بات کریں گے۔



10:07:12

جس میں سے پہلا فنکشن ہمارا میلوک ہے، میلوک کا مطلب میموری ایلوکیشن ہے، دوسرا ہمارا کیلک ہے، کیلک مسلسل ایلوکیشن ہے، تیسرا فری فنکشن ہے اور چوتھا ہمارا Re-alloc، یعنی Re-Allocation ہے۔ اب ہم اس پورے باب میں ان چار فنکشنز کے بارے میں تفصیل سے پڑھیں گے اور چاروں فنکشنز لکھنے میں بہت آسان ہیں۔ درحقیقت اگر ہم کمپیوٹر پروگرام کی بات کریں تو اب تک ہم 10 باب پڑھ چکے ہیں، یہ باب سب سے آسان ہونا چاہیے کیونکہ اس میں صرف چار فنکشن ہیں اور ہم اسے بہت آسان طریقے سے سمجھ سکتے ہیں۔



10:07:46

آئیے پہلے افعال کے بارے میں بات کرتے ہیں۔ پہلا فعل ہمارا مالک ہے۔ اب malk فنکشن کا کام میموری کی کچھ خاص مقدار مختص کرنا ہے۔ فرض کریں کہ آپ کو 14 بائٹس میموری یا 30 بائٹس میموری کی ضرورت ہے تو ملک آپ کو وہ میموری فراہم کرے گا۔ کوڈ کے وسط میں، یہ مختص کیے جانے والے بائٹس کی تعداد لیتا ہے۔ وہ اصطلاحات جن میں یہ میموری کی پیمائش کرتا ہے، وہ شرائط جن میں یہ اسے فراہم کرتا ہے وہ بائٹس کے لحاظ سے ہیں، یعنی آپ کو اسے بائٹس میں بتانا پڑے گا کہ مجھے میموری کے اتنے بائٹس کی ضرورت ہے۔ اور یہ صفر کی قسم کا ایک پوائنٹر لوٹائے گا۔ یہ ہماری کل یادداشت کا کیا کرے گا؟



10:08:21

اس کے اندر وہ مخصوص بائٹس ہیں، فرض کریں x بائٹس، یہ آپ کی طرف سے بھیجا ہوا ایک حصہ لے کر اسے ptr پر ایک پوائنٹر تفویض کرے گا جس کی قسم void ہو جائے گی اور اس پوائنٹر کے ذریعے اب آپ اس میموری تک رسائی حاصل کر سکیں گے، تو یہ x نمبر بائٹس لے گا، اس کے مطابق یہ میموری کے اندر جگہ بنائے گا، یہ آپ کو x بائٹس کی تعداد واپس کرے گا اور یہ واپس کرے گا، اس کا پوائنٹر کیا پوائنٹر ہے، اس کا پوائنٹر کس پوائنٹر کی قسم ہے اسے لکھنے کے لیے، سب سے پہلے ہم میل لکھیں گے، ہمارا نمبر میل کے اندر جائے گا۔



10:08:56

آف بائٹس اب یہاں ہم نے بائٹس کی تعداد میں ایک دلچسپ چیز دی ہے پہلے ہم نے پانچ لکھا ہے پھر اسے int کے سائز سے ضرب کیا ہے اب اس کا سائز ہمارا ایک فنکشن ہے اور یہ فنکشن کیا کرتا ہے یہ فنکشن ہمیں کسی بھی ڈیٹا ٹائپ کا سائز واپس کرتا ہے اگر ہم int کا سائز لکھیں گے تو یہ انٹیجر کا سائز واپس کرے گا اگر ہم فلوٹ کا سائز لکھیں گے تو یہ مشین کا سائز واپس کرے گا اگر میں کریکٹر کا سائز لکھوں گا تو میں جانتا ہوں کہ مشین کا سائز لکھیں گے۔ یہ واپسی



10:09:30

یہ چار کرے گا۔ فلوٹ میں چار اور کردار میں ایک ہو سکتا ہے۔ یہ ممکن ہے کہ آپ کی مشین 32 بٹ ہو یا آپ کسی اور سسٹم پر کام کر رہے ہوں، ایسی صورت میں آپ کو انٹیجر کا سائز کیا معلوم ہے، کیا یہ آپ کے لیے یہ واپس کرے یا کسی اور ڈیٹا ٹائپ کا کوئی اور سائز واپس کرے، یہ اس بات پر منحصر ہے کہ آپ کا سسٹم کیا ہے، آپ کے سسٹم کے مطابق، اگر آپ جاننا چاہتے ہیں کہ یہ ڈیٹا ٹائپ میرے لیے کتنے بائٹس میموری لیتی ہے، تو یہ سائز آف فنکشن یہ کیسے کام کرے گا، اس پر ایک بار نظر ڈالیں، تو سب سے پہلے دیکھیں میں پرنٹ کرنا چاہتا ہوں۔



10:09:58

int کا فیصد d سائز اور فلوٹ کے اس سائز اور کریکٹر کے سائز کے ساتھ میں اسے ایک بار محفوظ کرتا ہوں اور اسے چلاتا ہوں، ہمیں وارننگز کو نظر انداز کرنا پڑتا ہے، ہاں، اس لیے ہمیں جو عدد عدد کا سائز ملا ہے وہ چار بائٹس ہے، فلوٹ کا سائز بھی چار بائٹس ہے اور کریکٹر کا سائز 1 بائٹ آیا ہے، تو یہ آپریٹر کا سائز ہے، اس کی مدد سے ہم کسی بھی ڈیٹا کو تلاش کر سکتے ہیں، جس کی مدد سے ہم ڈیٹا کے اندر کیا کر سکتے ہیں۔ میل ہم نے پانچ کو عدد کے سائز سے ضرب کیا ہے، اب عدد کا سائز کیا ہے، عدد کا



10:10:33

سائز چار ہے تو کیا کرے گا، یہ 20 بائٹس کی میموری لا کر ہمیں دے گا۔ فرض کریں کہ آپ 14 بائٹس کی میموری لینا چاہتے ہیں تو آپ کا کیا ہوگا، 14 بائٹس ریزرو ہو جائیں گے، اب آپ اس میں کیا کر سکتے ہیں، 12 بائٹس کے اندر آپ چار انٹیجرز کو محفوظ کر سکتے ہیں اور دو بائٹس میں آپ دو کریکٹرز کو سٹور کر سکتے ہیں، لیکن مجھے اس میموری میں صرف پانچ انٹیجرز رکھنا تھے، اسی لیے میں نے ایسی میموری لی جو کہ ایک انٹیجر کا ایک ملٹیپل کیوں ہے، ایک انٹیجر کا مالک 5 کیوں ہے 20 بائٹس اور مجھے دے دو، وہ دراصل یہ میموری میرے پاس لایا ہے۔



10:11:05

پوائنٹر جس کی قسم باطل ہے، اس لیے یہ باطل قسم کا ایک پوائنٹر ہے، لیکن مجھے انٹیجر قسم کے پوائنٹر کی ضرورت تھی، اسی لیے میں نے اسے یہاں ٹائپ کیا ہے، اور ٹائپ کاسٹنگ کے لیے ہم سٹار int نہیں بلکہ int سٹار لکھتے ہیں، اس لیے مجھے int سٹار ٹائپ کی میموری ملی ہے، جس میں میرے پاس 20 بائٹس ہیں، جس کا مطلب ہے کہ میں پانچ عدد کو ذخیرہ کر سکتا ہوں، اور میں نے اس پورے پوائنٹ کو ptr میں محفوظ کر لیا ہے۔ اب اگر ہمیں اس میموری تک رسائی حاصل کرنی ہے تو ہم اسے ptr کی صورت میں بھی حاصل کریں گے۔



10:11:35

اسے استعمال کرنے کے لیے، ہمیں ایک معیاری لائبریری شامل کرنی ہوگی جسے std ae bid A کہا جاتا ہے جو ہمیں DMA کے قابل بناتی ہے، یعنی ڈائنامک میموری ایلوکیشن۔ تو آئیے ایک بار آزماتے ہیں۔ آئیے اوپر ہیش کو شامل کریں atd ai bid A. سب سے پہلے، آئیے ایک انٹیجر پوائنٹر بنائیں۔ اب، ہم اس پوائنٹر کو اس میموری کو تفویض کریں گے جو میلکم نے ہمیں دی تھی۔ ہمیں میلکم سے کتنی یادداشت کی ضرورت ہے؟ لہذا، عدد کا سائز 5 عدد کے برابر ہے۔ اور ہم اس پوائنٹر کو int پوائنٹر میں ٹائپ کریں گے۔ تو، یہ ہمارا اشارہ ہے جس کی طرف اشارہ کر رہا ہے۔



10:12:15

یہاں 20 بائٹس میموری ہے، اب اگر ایسی صورت حال پیدا ہو جائے جس میں ہمیں یہاں f کروڑ یا کروڑ سے بڑا کوئی بھی نمبر لکھنا پڑے تو ایک نقطہ آئے گا جب ہم اتنی میموری مانگیں گے جو ہمارے سسٹم کے پاس نہیں ہے، تو جب ایسی صورت پیدا ہوتی ہے جب ہمارا سسٹم ہمیں مطلوبہ تعداد میں بائٹس نہیں دے پاتا، تو اس صورت میں یہاں کی واپسی null ہے، اس لیے جب ہمارا سسٹم Pnu کی مطلوبہ قیمت نہیں دے گا تو ہمارا سسٹم TR کی قیمت نہیں دے گا۔ بائٹس، اس لیے آپ کو سوچ سمجھ کر یہاں ہمارے سسٹم کی صلاحیت کے مطابق صحیح نمبر لکھنا ہوگا۔



10:12:46

اب اگر میں اس میموری کے اندر چیزوں کو ذخیرہ کرنا چاہتا ہوں، مثال کے طور پر، فرض کریں کہ میرے پاس پانچ عدد کے سائز کی میموری ہے، اب میں اصل میں اس میں پانچ عدد کو ذخیرہ کرنا چاہتا ہوں، تو اسے ذخیرہ کرنے کا طریقہ بالکل ایسا ہی ہوگا جب ہم arrays کا استعمال کرتے ہیں۔ arrays میں کیا ہوتا ہے کہ ہمارے پاس فکسڈ سائز کی میموری ہوتی ہے۔ ہم یہاں کیا کر رہے ہیں، ہم متحرک سائز کی میموری لے رہے ہیں، لہذا ہم اسے بھی arrays کی طرح استعمال کر سکتے ہیں، یہاں صرف سائز طے نہیں ہے، یہ اتنا ہی آسان ہے، جیسا کہ مطلوبہ مقام پر



10:13:12

مجھے ایک ذخیرہ کرنے دو۔ سب سے پہلے، میں تین ذخیرہ کروں گا. پھر، دو کے پی ٹی آر میں، میں پانچ ذخیرہ کروں گا۔ 3 کے ptr میں، میں سات ذخیرہ کروں گا۔ اور 4 کے ptr میں، میں نو کو ذخیرہ کروں گا۔ تو، اس طرح، میں نے پانچوں عددی مقامات پر کچھ قدر یا دوسری کو ذخیرہ کیا ہے۔ اور اب میں ایک لوپ چلا سکتا ہوں۔ ایک لوپ کا استعمال کرتے ہوئے، میں ان تمام اقدار کو پرنٹ کر سکتا ہوں. i = 0 سے i < 5i p p p ptr of a۔ تو، جیسا کہ ہم ایک صف کے مقامات تک رسائی حاصل کرتے ہیں اور اس کے بعد، ہم اس میں اقدار کو محفوظ کرتے ہیں۔ پھر، ہم ان اقدار تک رسائی حاصل کرتے ہیں اور انہیں پرنٹ کرواتے ہیں۔



10:13:49

یہی عمل ہوگا جب بھی ہم میل سے میموری مختص کریں گے اور پوائنٹر استعمال کریں گے، آئیے اسے ایک بار چلائیں اور دیکھیں، میں نے میموری میں محفوظ کیے ہوئے تمام انٹیجرز مجھے واپس کردیئے گئے ہیں اور اگر ان کے ساتھ کوئی آپریشن کرنا ہے یا کوئی تبدیلی کرنی ہے تو ہم اس کے مطابق کرسکتے ہیں، یہ میموری رن ٹائم پر مختص کی جاتی ہے، یہ اس طرح مختص نہیں ہوتی ہے، اس طرح ہم نے اگلے کمپائل ٹائم کے بارے میں بات کی، اس طرح اب ہم سب نے پریکٹس کرنے کی کوشش کی ہے۔ سوال



10:14:18

ہمارا کہنا ہے کہ پروگرام گرام لکھیں، میں نے اسے WAP شارٹ فارم میں پانچ قیمتوں کو ذخیرہ کرنے کے لیے میموری مختص کرنے کے لیے لکھا ہے۔ اب قیمتیں عام طور پر فلوٹ قسم کی ہوتی ہیں، اس لیے ہمیں اپنی میموری میں پانچ فلوٹ قسم کی قیمتیں ذخیرہ کرنی ہیں، تو ہم اسے کیسے کریں گے، اسے متحرک کرنے کا طریقہ یہ ہے کہ ہم ایک پوائنٹر بنائیں جو میل سے مختص میموری کی طرف اشارہ کرے گا، پانچ قیمتیں، یعنی فلوٹ کا سائز اور ہم اسے ٹائپ کریں گے فلوٹ پوائنٹر پر، اب ہم اس قیمت کو PTR کے اندر محفوظ کر سکتے ہیں۔



10:14:50

یہ تمام چیزیں ہماری فلوٹنگ اقدار میں تبدیل ہو جائیں گی۔ آئیے اسے بھی محفوظ کریں اور ایک بار چلائیں۔ یہ ایک تیرتا ہوا پوائنٹر ہوگا اور ہم فیصد f پرنٹ کرنا چاہتے ہیں۔ لہذا ہماری تمام تیرتی اقدار ہمارے لئے پرنٹ کی گئی ہیں۔ ہم صارف سے ان اقدار کے لیے ان پٹ لے سکتے ہیں یا خود ان کی وضاحت کر سکتے ہیں اور پھر ان کے ساتھ مختلف افعال انجام دے سکتے ہیں۔ بنیادی طور پر، جو کچھ ہم عام میموری کے ساتھ کر سکتے ہیں، ہم وہ سب کچھ متحرک طور پر مختص میموری کے ساتھ کر سکتے ہیں۔ اب ہم اپنے کیلکولیٹر کو سمجھتے ہیں۔



10:15:23

فنکشن کیلک کا مطلب ہے مسلسل مختص کرنا، جس کا مطلب ہے کہ آپ جو میموری اس کے ساتھ مختص کرتے ہیں وہ مسلسل انداز میں آئے گی۔ مثال کے طور پر، اگر آپ 20 بائٹس کی میموری مختص کرتے ہیں، تو یہ آپ کو مسلسل انداز میں مختص کیا جائے گا۔ اور ایک بات یہ ہے کہ کیلک کا استعمال کرتے ہوئے، تعریف کرنے کے لیے، اعلان کرنے کے لیے، میموری کو مختص کرنے کے لیے، ہر قدر کو صفر سے شروع کیا جاتا ہے۔ فرض کریں کہ آپ نے میموری کو پانچ عدد کے برابر لیا ہے، تو تمام انٹیجرز میں ڈیفالٹ کے حساب سے صفر محفوظ ہوں گے۔ اگر آپ نے میموری کو پانچ فلوٹس کے برابر لیا ہے، تو اس میں صفر ہوں گے۔



10:15:56

بذریعہ ڈیفالٹ 0.0.0 یہ ویلیو سٹور ہو جائے گی اس لیے جب بھی آپ میموری کو ڈائنامک بنانا چاہتے ہیں اور اس میں null ویلیوز تفویض کرنا چاہتے ہیں، یعنی صفر ویلیوز، تو بس آپ کو جو استعمال کرنا ہے وہ ہے calc؛ اس کی وضاحت کرنے کے لیے ترکیب یہ ہے کہ ہم صرف کیلک لکھتے ہیں اور جیسا کہ پہلے ہم بائٹس بھیجتے تھے، اس بار ہم بائٹس کی کل تعداد نہیں بھیجیں گے، اس بار ہم بھیجیں گے کہ ہم کتنے مقامات چاہتے ہیں، مقامات کی تعداد اور فی مقام کا سائز کیا ہے، اس لیے ہمیں فی مقام کا سائز ایک عدد کے برابر چاہیے اور ہمیں پانچ عدد کے مقام کی ضرورت ہے، پہلے کیا



10:16:31

ہم بائٹس کی کل تعداد فروخت کرتے تھے، پھر ہم ان دونوں کو ضرب دیتے تھے، اس بار ہم ایسا نہیں کریں گے، اس بار ہمیں مختلف پیرامیٹرز بھیجنے ہوں گے اور پھر یہ ایک باطل پوائنٹر بھی واپس کرے گا۔ ہم نے void پوائنٹر کو انٹیجر پوائنٹر میں کاسٹ کر دیا ہے اور اب اس PTR کی مدد سے ہم میموری تک رسائی حاصل کر سکتے ہیں، ہم اس کو ویلیوز تفویض کر سکتے ہیں، ہم اس کی ویلیوز کو پرنٹ کر سکتے ہیں، آئیے ایک بار اس کا کوڈ لکھنے کی کوشش کرتے ہیں، آئیے اس میموری کو تبدیل کرتے ہیں جو ہم نے پہلی بار مختص کی تھی، آئیے اسے کیلک میں تبدیل کرتے ہیں، اب ہم ایسا نہیں کریں گے، جس کا مطلب ہے کہ ہم calc میں کچھ نہیں لکھیں گے۔



10:17:05

ہم تین لکھیں گے، ہم یہ تمام اسائنمنٹس نہیں کریں گے اور صرف یہ دیکھیں گے کہ ہمارے لیے کیا پرنٹ کیا جائے گا۔ تو یہاں ہمیں دو پیرامیٹرز پاس کرنے ہوں گے، ایک ہماری سلاٹ کی کل تعداد ہوگی، ہمیں کتنے سلاٹس کی ضرورت ہے، ایک ہر بلاک کا سائز ہوگا، تو ہر ویلیو کے لیے ہمیں 0.0 ملے گا، جب کہ اگر ہم اس میموری کو میل باکس کے ذریعے حاصل کرتے ہیں اور پھر اسے چلانے کی کوشش کرتے ہیں، اب یہاں اس معاملے میں ہمارے میل باکس نے بھی 0.0 پرنٹ کیا ہے، لیکن اس سے ہر پروگرام کو پرنٹ کرنے کی ضرورت نہیں ہے، اس کا مطلب یہ نہیں ہے کہ یہ پروگرام 0 کو پرنٹ کرنے کی ضرورت ہے۔ یادوں کے وہ بلاک بنو۔



10:17:40

مجھے آپ کے سسٹم میں آپ کے لیے کچھ بے ترتیب نمبر پرنٹ کرنے دیں۔ کیلک کبھی گارنٹی نہیں دے گا کہ صرف 0.0 آئے گا۔ یہ بعض صورتوں میں آ سکتا ہے اور بعض صورتوں میں نہیں۔ لیکن اگر آپ قطار شروع کرنا چاہتے ہیں، تو ہمیشہ کیلک کا استعمال کریں کیونکہ یہ آپ کے لیے گارنٹی لے سکتا ہے۔ اب اگلا اپنے پریکٹس سوال کے بارے میں بات کرتے ہیں۔ ہمارا سوال کچھ اس طرح ہے، سائز ن کی میموری کو مختص کرنے کے لیے ایک پروگرام لکھیں۔ ہمیں سائز n کی میموری مختص کرنی ہوگی جہاں صارف کے ذریعہ n درج کیا گیا ہے۔ اب سائز n کہنے کا کیا مطلب ہے کہ n کو ایک int کے سائز سے ضرب کیا گیا ہے۔



10:18:12

یہاں ہم یہ لیں گے کہ ہمیں سائز n انٹیجرز کی میموری کو مختص کرنا ہے، تو آئیے اسے بھی دیکھتے ہیں۔ سب سے پہلے ہم ایک انٹیجر پوائنٹر ptr اور ایک انٹیجر n بنائیں گے۔ اب ہم صارف سے اپنا انٹیجر n ان پٹ لیں گے، Enter n دبائیں۔ اس کے بعد ہم کیا کریں گے، اب ہمیں اس سائز n کی میموری مختص کرنی ہے، لہذا i+ تک pt01 n تک اور ہر بار ہم aa کا فیصد d ptr پرنٹ کریں گے، اس لیے ہمیں سائز 4 کی میموری کی ضرورت ہے۔ تو یہ 4 عدد ہمارے لیے مختص کیے گئے ہیں اور ڈیفالٹ صفر ہر عدد کے اندر محفوظ ہے۔ آگے ہم دیکھیں گے۔



10:19:04

free to free بھی ایک اہم ترین فنکشن ہے، اس کے اندر free اس طرح ہے کہ کیلک میک کے ذریعے مختص کی گئی ڈائنامک میموری خود آزاد نہیں ہوتی، مثال کے طور پر اس چیز کو تھوڑا گہرائی میں سمجھیں، ہم نے ایک پروگرام لکھا، اس میں ہم نے ایک عدد n بنایا اور اس کے علاوہ ہم نے n کو درمیان میں استعمال کیا اور پھر بعد میں، اس کا مطلب یہ ہے کہ یہ صرف ہزار لائنوں کے پروگرام میں بہت لمبا اور لمبا ہے۔ پہلی لائن اور دوسری لائن، لہذا c مرتب کرنے والا سمارٹ ہے، یہ دیکھے گا کہ یہ کیا کرے گا، بعد میں استعمال نہیں کیا جائے گا۔



10:19:38

اگر ہاں، تو اس کے بعد یہ n آزاد ہو جائے گا کیونکہ اس نے دیکھا ہے کہ n سٹیٹلی ایلوکیٹ ہے، یعنی میموری اسے شروع میں ہی مختص کر دی گئی تھی اور اسے معلوم ہے کہ C کمپائلر جانتا ہے کہ اس میموری کے ساتھ آگے کیا ہونے والا ہے، اس نے دیکھا ہے کہ اس میموری کو کوئی نہیں چھو رہا ہے، اس لیے وہ دوسری لائن کے بعد اس میموری کو آزاد کر دیتا ہے تاکہ پروگرام کو C کمپائلر کے استعمال کے بارے میں کچھ بھی معلوم نہ ہو، لیکن C کمپائلر کو میموری کے استعمال کے بارے میں کچھ معلوم نہیں ہوتا۔ آپ مختص کرتے ہیں، تو اس میں



10:20:07

اگر آپ malloc یا calc کا استعمال کرتے ہوئے کچھ میموری مختص کرتے ہیں تو کیا ہوتا ہے تو C compiler کو یہ معلوم نہیں ہوتا کہ بعد میں کوئی اس کوڈ میں اس میموری تک رسائی حاصل کرنے والا ہے یا نہیں، اس میں کوئی تبدیلی کی جا رہی ہے یا نہیں، اسی لیے وہ اس میموری کو جوں کا توں رکھتا ہے، اس لیے یہاں ذمہ داری پروگرامر پر آتی ہے کہ ہمارا کام ہو گیا اور پھر اس میموری کو آزاد کرنا، اگر ہم اس میموری کو مڈل پروگرام میں استعمال نہیں کرنا چاہتے تو ہم اسے مفت استعمال نہیں کرنا چاہتے۔ یہ متغیر، اس میموری کو آزاد کریں اور اسے آزاد کریں۔



10:20:37

ایسا کرنے کے لیے ہم فنکشن فری استعمال کرتے ہیں، اس لیے ہم اسے malloc اور calc کے ذریعے مختص کی گئی میموری کو آزاد کرنے کے لیے استعمال کرتے ہیں اور یہ ایک بہت آسان فارمیٹ ہے، اسے لکھنے کے لیے نحو بہت آسان ہے، ہم صرف مفت لکھیں گے اور پوائنٹر کو اندر رکھیں گے، یہ پوائنٹر ہے جو میموری کی طرف اشارہ کر رہا ہے جسے ہم آزاد کرنا چاہتے ہیں، تو اس کے لیے ہم ایک چھوٹا سا پروگرام بھی لکھ سکتے ہیں، ہم نے اس پروگرام کو مفت میں مختص کیا ہے اور اس کے آخر میں calc کا استعمال کرتے ہوئے پروگرام کو مفت میں مختص کیا ہے۔ میموری، تو ہم اس میموری کو آزاد کر دیں گے جس کی طرف ptr اشارہ کر رہا تھا اور ہم دوبارہ ptr کے ساتھ کیا کریں گے۔



10:21:09

یہ کسی اور میموری کی طرف اشارہ کرے گا۔ مثال کے طور پر، اگر ہم اس بیان کو دوبارہ لکھنا چاہتے ہیں، تو انٹیجر این کے بجائے صرف دو عدد کی میموری ہوگی اور ہم اسے پرنٹ بھی کر لیں گے۔ ہم نے اس کوڈ کے اندر کیا کیا؟ سب سے پہلے، ہم نے سائز n کی میموری لی اور پوائنٹر اس سائز کی طرف اشارہ کر رہا ہے۔ ہم نے جو بھی قدریں تھیں پرنٹ کیں اور پھر اس میموری کو آزاد کر دیا۔ اب ہم سائز ٹو کی میموری پر اسی پوائنٹر تک رسائی حاصل کر رہے ہیں اور پھر ہم اس کی قدریں پرنٹ کر رہے ہیں۔ تو، پہلے ہم چار عدد کی یادداشت لینا چاہتے ہیں، تو یہ چار عدد ہیں۔



10:21:41

یہ ہمارے لیے چھاپا گیا، پھر ہم نے یادداشت کو آزاد کر دیا۔ اب ہمارے پاس دو عدد عدد کی کل میموری ہے، لہذا صفر پرنٹ ہو جائے گا۔ لہذا میں امید کرتا ہوں کہ ہم یہاں یہ فائدہ دیکھ سکتے ہیں کہ اگر انٹیجر پوائنٹر ہوتے تو ہم عام طور پر ان میں تبدیلیاں نہیں کر سکتے، لیکن متحرک طور پر مختص میموری کے ساتھ، ہم اسے کوڈ کے بیچ میں آزاد کر سکتے ہیں، ہم اسے مختص کر سکتے ہیں۔ اگلا، آئیے ایک سوال پوچھتے ہیں، سوال یہ ہے کہ کیلک کے ساتھ مختص کردہ میموری مفت ہے۔ لہذا، ہم نے اس میموری کو آزاد کر دیا ہے. یہ سوال ہم پہلے ہی پوچھ چکے ہیں۔ اگلا، آئیے reloc کے بارے میں بات کرتے ہیں۔



10:22:10

Reloc کا مطلب ہے میموری کی دوبارہ تقسیم، یعنی میموری کو دوبارہ مختص کرنا جیسا کہ ہم نے ابھی ایک مثال دیکھی ہے کہ آپ کی کلاس میں 30 طالب علم تھے، آپ نے 30 طالب علموں کے رول نمبرز کو ذخیرہ کرنے کے لیے میموری کو محفوظ کیا جو کہ int کے سائز کے حساب سے 30 ملی لیٹر کے برابر ہے، اب آپ کی کلاس میں مزید تین طالب علم آتے ہیں، مزید تین طالب علم آتے ہیں، اس لیے آپ کو میموری کا سائز شامل کرنا پڑے گا، تاکہ آپ میموری میں تین نئے طالب علموں کا تھوڑا سا اضافہ کر سکیں۔ زیادہ میموری، کیا ہو گا کہ ایک ہی پوائنٹر کا استعمال کرتے ہوئے آپ



10:22:44

اگر آپ اپنے کوڈ کے اندر اضافی معلومات شامل کرتے رہتے ہیں، تو آپ دوبارہ مختص کر سکتے ہیں، یعنی آپ میموری کو بڑھا سکتے ہیں یا کم بھی کر سکتے ہیں، ایک ہی پوائنٹر اور سائز کا استعمال کرتے ہوئے، آپ میموری کو بڑھا سکتے ہیں یا کم بھی کر سکتے ہیں، ہم اسے کیوں کم کریں گے، ایسی صورت میں ہم اسے کیوں کم کریں گے، جب ہم شروع میں اور پروگرام کے درمیان میں بہت زیادہ میموری لے چکے ہیں تو ہمیں معلوم ہوا کہ ہمیں اتنی زیادہ میموری کی ضرورت نہیں ہے، مثال کے طور پر آپ جو آن لائن سسٹم چلا رہے ہیں، آپ کو یہ محسوس ہوتا ہے کہ آپ ایک آن لائن سسٹم چلا رہے ہیں۔ کہ آپ نے ڈیجیٹل مارکیٹنگ کورس شروع کیا ہے اور اس میں 1000 طلباء کا داخلہ کیا ہے۔



10:23:14

بچوں کا داخلہ ہونے والا ہے، اس لیے آپ نے ہزار بچوں کی معلومات کے مطابق میموری مختص کی ہے، لیکن جو بچے ایونٹ کے ذریعے آئے، 70 بچے آئے، اس لیے بہت ساری میموری ہے جو ضائع ہو جائے گی، تو ہم کوڈ کے درمیان میں باقی میموری کا کیا کریں گے، ہم اسے دوبارہ ایلوکیٹ کریں گے، 70 رکھیں گے، پھر یہ فرق مفت ہو جائے گا، یہ سب ختم ہو جائے گا، ہم جتنا میموری ڈیلیٹ کرنا چاہتے ہیں اتنا ہی ڈیلیٹ کر دیں گے۔ ہم اپنے پاس صرف اتنا ہی رکھیں گے جتنی ہمیں ضرورت ہے، اس لیے اسے لکھنے کے لیے نحو پہلے ہم reloc لکھتے ہیں، پھر پوائنٹر ڈالتے ہیں جس کا



10:23:43

میموری کو دوبارہ مختص کرنا ہوگا اور اس کے بعد نیا سائز، میموری کا نیا سائز کیا ہوگا، اور اس سے ہم اپنا پوائنٹر دوبارہ تفویض کریں گے۔ تو اس میں، آئیے پانچ نمبروں کے لیے میموری کو مختص کرنے سے پوچھتے ہیں پھر اسے نمبروں پر ذخیرہ کرنے کے لیے متحرک طور پر بڑھاتے ہیں۔ ہم اس کے لیے کوڈ کیسے لکھیں گے؟ سب سے پہلے ہم ایک انٹیجر پوائنٹر ptr بنائیں گے۔ اب ptr کیا کر رہا ہے، شروع میں یہ پانچ نمبروں کی میموری رقم کو محفوظ کرے گا۔ درحقیقت، ہم کیلک صرف اس لیے استعمال کریں گے کہ مجھے ابتدا پسند ہے۔ تو کیلک کے اندر، ہمیں پانچ کے برابر نمبر کو ذخیرہ کرنا ہوگا۔



10:24:17

تو میموری کا دوسرا سائز اب ہم نے 0 کا پی ٹی آر لکھا ہے، ایک کا پی ٹی آر ایک، دو اور 3 کا پی ٹی آر لکھا ہے۔ اب اگر ہمیں کوڈ کے بیچ میں سائز میں مزید دو اضافہ کرنا ہے تو ہم کیا کریں گے، صرف پی ٹی آر دوبارہ مختص کرنے کے برابر ہے، اس کے اندر ہم پہلے پی ٹی آر پاس کریں گے اور اس کے بعد ہمارا نیا سائز، ہمارے پاس نیا سائز 8 ہوگا، اس لیے ہم اس سے پہلے کے آٹھ نمبر کو پکڑ سکتے ہیں، اس لیے اب اس نمبر کو آٹھ رکھ سکتے ہیں۔ کوڈ جو ہم صارف سے ان تمام نمبروں کو داخل کرنے کے لئے کہیں گے، پرنٹ کریں f کتنے نمبر درج کریں



10:24:56

نمبر داخل کرنے کے لیے، شروع میں، ہمیں پانچ نمبر داخل کرنے ہوں گے، پھر آئیے i سے پانچ، صفر سے pa تک، اور ہر ایک میں اپنے نمبروں کو اسکین کریں، i کا فیصد D اور ptr۔ اب جیسے ہی میموری آٹھ ہو جائے گی، اس کے بعد ہمیں نمبرز کے لیے دوبارہ سکین کرنا پڑے گا اور اب ہمیں آٹھ نمبر داخل کرنے ہوں گے اور ایک بار ہم ان کو داخل کر لیں گے، اب ہم یہ نمبر پرنٹ کر لیں گے، تو اس کے لیے بھی ہم ایک لوپ لکھیں گے اور وہی لوپ دوبارہ استعمال کریں گے، نمبر f سے پرنٹ کریں، فیصد D پہلے i ہے، پھر اسے محفوظ کریں اور



10:25:35

چلائیں، ہمیں شروع میں پانچ نمبر داخل کرنے ہیں، تو ہم 5 4 3 2 اور ایک درج کریں گے۔ اب اگر ہمیں آٹھ نمبر داخل کرنے ہیں تو 8 7 6 5 4 3 2 اور 1۔ تو یہ نمبر ہمارے لیے پرنٹ کیے گئے ہیں۔ نمبر صفر آٹھ ہے۔ نمبر ایک سات ہے۔ نمبر دو چھ ہے۔ نمبر تین پانچ ہے۔ تو فارمیٹنگ تھوڑی غلط ہے، آئیے اسے تھوڑا ٹھیک کرتے ہیں۔ بیک سلیش اور، ہم نے شروع میں پانچ نمبر داخل کیے ہیں۔ اور اب، ہم آٹھ نمبر داخل کرنے جا رہے ہیں۔ لہذا، یہ تمام آٹھ نمبر آٹھ میموری والے مقامات پر محفوظ کیے جائیں گے۔ اگلا، آئیے اس سوال کے بارے میں بات کرتے ہیں: کیلک کا استعمال کرتے ہوئے سائز پانچ کی ایک صف بنائیں۔



10:26:18

اور صارف سے اس کی قدریں درج کریں، جس کا مطلب ہے کہ ہمیں ایک کیلک کے ذریعے پانچ عدد کے برابر سائز مختص کرنا ہوگا اور پھر صارف سے ان پانچ عدد کی قدروں کو داخل کرنے کے لیے کہیں گے۔ تو ہم نے پہلے ہی کافی کام کر لیا ہے۔ پہلے ہم نے ایک انٹیجر پوائنٹر بنایا، پھر اس میں سائز پانچ عدد کی میموری مختص کی، پانچ عدد ان پٹ ڈالے اور درحقیقت اب ہم ان کا آؤٹ پٹ بھی حاصل کرتے ہیں۔ تو اگر ہم یہاں پانچ لکھیں گے تو ہمارے نمبر آئیں گے۔ آئیے ایسا کرتے ہیں، چلائیں اور پانچ نمبر 1 3 5 7 9 درج کریں۔



10:26:56

نمبر چھپ چکے ہیں اور ہمارے پاس ہیں۔ اگلا سوال پہلے پانچ طاق نمبروں کو ذخیرہ کرنے کے لیے میموری کو مختص کرنا ہے، پھر پہلے چھ جفت نمبروں کو ذخیرہ کرنے کے لیے دوبارہ مختص کرنا ہے، جس کا مطلب ہے کہ ہمیں پہلے پانچ طاق نمبروں کو ذخیرہ کرنے کے لیے میموری لینا ہوگی، جس میں ہمارے پاس پانچ ذخیرہ 1، 3، 5، 7 اور نو ہیں۔ اس کے بعد، اس میموری کو دوبارہ مختص کرنا ہوگا، جس کا مطلب ہے کہ ہمیں اسے دوبارہ استعمال کرنا ہوگا۔ سب سے پہلے، اسے سائز چھ کا بنانا ہوگا کیونکہ ہم اس میں چھ نمبر جمع کریں گے۔ اس کے بعد پہلے چھ ہموار نمبروں کی قدروں کو اس میں محفوظ کرنا ہوگا۔ تو، یہ ہمارا تھوڑا سا دلچسپ کوڈ ہوگا۔ سب سے پہلے، ایک عدد عدد بنائیں۔



10:27:38

آئیے ایک زیرو پوائنٹر پی ٹی آر بنائیں۔ ptr کے اندر، ہم میموری میں پانچ عدد کے برابر پانچ متغیرات کو محفوظ کریں گے۔ تو ہم انٹ اسٹار لکھیں گے اور پھر اسے کال لاگ کے ساتھ شروع کریں گے۔ پہلے ہم پانچ پاس کریں گے۔ اس کے بعد ہم ایک کو صفر کے int ptr کے سائز میں محفوظ کریں گے۔ v کے ptr میں، ہم تین کو ذخیرہ کریں گے اور اسی طرح t ویں اور فر کو اور یہاں ہم اپنے طاق اعداد کو محفوظ کریں گے۔ تو یہاں سین آیا ہے اور یہاں ar f۔ اب ہم اسے int aa = 0 i < 5i + پرنٹ f اسٹیٹمنٹ فیصد d b a کے لیے بھی پرنٹ کرسکتے ہیں۔



10:28:22

0 کا پی ٹی آر اور درحقیقت i کا پی ٹی آر اس لیے ہم نے پہلے پانچ طاق نمبرز کو محفوظ کیا اور پھر انہیں پرنٹ کیا۔ اب ہم کیا کریں گے اس میموری کو دوبارہ مختص کرنا۔ میموری کو دوبارہ مختص کرنے کے لیے، ہم PTR i کو reloc کے برابر لکھیں گے۔ reloc کے اندر، ہم اپنا پرانا پوائنٹر اور اس کے ساتھ نیا سائز ڈالیں گے۔ نیا سائز چھ ہونے جا رہا ہے۔ اور اب ہم 5 12 کے جفت نمبر اور پی ٹی آر پرنٹ کریں گے اور وہی ویلیوز اسی مقام پر پرنٹ ہوں گی۔ لہٰذا اگر ہم اس کوڈ کو ایک بار محفوظ کر کے چلاتے ہیں تو سب سے پہلے ہمارے پاس سکرین پر یکسو نمبر پرنٹ ہوتے ہیں۔



10:29:01

ان میں سے تمام طاق نمبر پرنٹ کیے گئے ہیں۔ ہم نے کیا خاص بات نوٹ کی کہ جس سائز یعنی پانچ کا پی ٹی آر جس تک ہم پہلے رسائی حاصل نہیں کر پاتے تھے، اب ہم اسی کوڈ میں اس تک رسائی حاصل کر سکتے ہیں۔ سائز کو بڑھانے یا کم کرنے کی یہ چیز، ہم اسے arrays کے ساتھ نہیں دیکھ سکتے، یہ صرف متحرک طور پر مختص میموری کے ساتھ دیکھا جا سکتا ہے۔ تو جب ایسی صورت حال پیدا ہو کہ ہمیں میموری کو متحرک طور پر مختص کرنا ہوگا، تو ان حالات میں ہمیں ری ایلوکیٹ کا استعمال کرنا پڑے گا اور جس میموری کو متحرک طور پر مختص کیا جا سکتا ہے، وہ میموری دوبارہ مختص کی جا سکتی ہے۔



10:29:32

آپ یہ کر سکتے ہیں جس کی تعریف Malc یا Calc نے کی ہے اور آخر میں ہم مفت PTR استعمال کر کے یہ میموری مفت میں کر سکتے ہیں۔ اب اس کورس کو بنانے میں بہت سے لوگوں نے محنت کی ہے، اسے دن رات ریکارڈ کیا گیا ہے، اس لیے میں امید کرتا ہوں کہ تمام ابواب کے تھیوری پارٹ کے نوٹ یا جو بھی اضافی چیزیں اس موضوع سے متعلق ایڈیٹر سے متعلق ویڈیو میں بیان کی گئی ہیں، آپ نے انہیں غور سے سنا ہوگا اور ان کے نوٹ بھی بنائے ہوں گے اور مجھے امید ہے کہ اگر آپ کوئی انٹرویو لینے جارہے ہیں تو وہ بھی کرسکتے ہیں۔



10:30:01

کالج کے ٹیسٹ ہونے والے ہیں اس لیے میں ان تمام چیزوں میں آپ کی مدد کر رہا ہوں۔ اب اس کورس کو ختم کرنے کے بعد میں نے اس کو اس طرح بنانے کی پوری کوشش کی ہے کہ آپ پر تمام بنیادی تصورات واضح ہو جائیں اور درحقیقت آپ C سیکھنے کے بعد کوئی بھی زبان سیکھ سکتے ہیں، آپ کی اس زبان کا نحو ایک ہفتے میں آ جائے گا کیونکہ ہم نے جتنے بھی بنیادی موضوعات سیکھے ہیں، دوسری زبانوں میں بھی اسی طرح کے بنیادی موضوعات ہیں، کیا ہوتا ہے کہ ان کی نحو بدل جاتی ہے اور پھر نئی زبان دستیاب ہو جاتی ہے۔



10:30:27

اب آپ کو زبان کے تصورات سیکھنے میں کسی قسم کی پریشانی کا سامنا نہیں کرنا پڑے گا۔ اب ایک بار جب ہم C سیکھ چکے ہیں تو عام طور پر اگلا مرحلہ یہ ہے کہ لوگ اس کے بعد ایک نئی پروگرامنگ لینگویج سیکھیں کیونکہ C میں ایک چھوٹی سی چیز غائب ہے کہ اس میں آبجیکٹ اورینٹیشن کے تصورات نہیں ہیں، اس لیے ہم یہاں کلاسز اور آبجیکٹ نہیں بنا سکتے، وہ ڈھانچے سے ملتے جلتے ہیں لیکن ہم انہیں نہیں بنا سکتے، اسی لیے ہم C++ یا Java جیسی زبانوں کی طرف شفٹ ہو جاتے ہیں جس میں ہم کلاسز یا جاوا بنا سکتے ہیں۔



10:30:53

آپ اشیاء بنا سکتے ہیں۔ اب پلیسمنٹ کے حساب سے C++ کا ایک مکمل کورس پہلے ہی بنایا جا چکا ہے اور جاوا کا ایک مکمل کورس بھی پلیسمنٹ کے حساب سے بنایا گیا ہے جس میں بہت سے ایڈوانس عنوانات کا احاطہ کیا گیا ہے، یعنی بالکل بنیادی باتوں سے لے کر ایڈیٹر کی تنصیب تک، C++ میں کیسے متغیرات ہیں، جاوا میں کیسے متغیرات ہیں، اس سے آخر تک ڈیٹا سٹرکچر اور الگور جیسے موضوعات کا احاطہ کیا گیا ہے۔ ہم ان پلے لسٹس پر جا کر دریافت کر سکتے ہیں، جس زبان میں بھی ہم مزید مطالعہ کرنا چاہتے ہیں۔



10:31:21

ہم دیکھ سکتے ہیں کہ ہمیں اس میں ترقی کرنی ہے۔ اب عام طور پر ایک افسانہ ہے کہ C کے بعد زیادہ تر C++ سیکھنا چاہئے، آپ C کے بعد جاوا بھی سیکھ سکتے ہیں، C++ سیکھ سکتے ہیں، جاوا اسکرپٹ سیکھ سکتے ہیں، اس سے کوئی فرق نہیں پڑے گا، پروگرامنگ کے تصورات آپ کے لیے یکساں ہوں گے اور اگر آپ کو یہ ویڈیو پسند آئی ہے، اگر اس میں کوئی ایسا موضوع ہے جو آپ کو لگتا ہے کہ آپ کو طویل عرصے تک یاد رہے گا اور آپ نے کچھ بہت دلچسپ سیکھا ہے، تو میں ذیل میں کمنٹس کر کے مزید جان سکتا ہوں، آپ مجھے مزید بتا سکتے ہیں کہ میں تبصرہ کر کے اس کے بارے میں مزید کیسے جان سکتا ہوں۔ قابل قدر یہ کورس تھا اور جس میں دوسرے موضوعات



10:31:49

یہ طلباء کے لیے قابل قدر تھا تاکہ میں ایک جیسے مطالعہ کے موضوعات یا چیزوں پر مختلف زبانوں میں اسی طرح کی ویڈیوز پوسٹ کر سکوں۔ آج کے لیے اتنا ہی ہے۔ اگلی ویڈیو میں ملتے ہیں تب تک سیکھتے رہیں اور مشق کرتے رہیں۔