[Powered by Google Translate] [4 ہفتہ]
[ڈیوڈ J. Malan] [ہارورڈ یونیورسٹی]
[یہ CS50 ہے.] [CS50.TV]
>> ٹھیک ہے، اس CS50 ہے، اور یہ 4 ہفتے کے آغاز ہے،
اور یہ ممکن slowest چھنٹائی الگورتھم میں سے ایک ہے.
جو ایک یہ تھا کہ ہم صرف وہاں دیکھا؟
یہ بلبلا طرح تھا، کے لئے بڑا O (ن ^ 2) رقم +،
اور بیشک ہم نے اس دنیا میں صرف ہوتے ہیں معلوم نہیں لگتا
کیا بلبلا طرح ہے یا اس کے رننگ ٹائم.
بے شک، یہ گوگل کے ایرک شمٹ کے ساتھ ایک انٹرویو
اور سابق سینیٹر براک اوباما نے صرف چند سال پہلے.
>> اب، سینیٹر، آپ گوگل میں یہاں ہو،
اور میں نے ایک کام کے انٹرویو کے طور پر صدر کے عہدے کے بارے میں سوچنا اچھا لگتا ہے.
اب، یہ مشکل ہے صدر کے طور پر ایک کام حاصل کرنے کے لئے، اور آپ درڑھتا کے ذریعے کی جا رہی ہو.
یہ بھی گوگل میں ایک ملازمت حاصل کرنے کے لئے مشکل ہے.
ہم سوال ہے، اور ہم اپنے امیدواروں سوال پوچھتے ہیں،
اور یہ بھی لیری Schwimmer کی طرف سے ہے.
تم لوگوں کو لگتا ہے کہ میں مذاق کر رہا ہوں؟ یہ یہاں ہے.
سب سے زیادہ موثر ملین integers 32 بٹ ترتیب کا طریقہ کیا ہے؟
[ہنسی]
اچھی طرح
میں معافی چاہتا ہوں >> نہیں، نہیں، نہیں، نہیں.
مجھے لگتا ہے کہ بلبلا طرح غلط جانے کا راستہ ہو جائے گا.
>> آو، جس نے اسے یہ بتایا؟
گزشتہ ہفتے یاد ہے ہم کم از کم ایک دن کے لئے کوڈ کی طرف سے ایک وقفے لے لیا،
اور کچھ اعلی سطح کے خیالات اور مسائل کو زیادہ عام طور پر حل کرنے پر توجہ مرکوز کرنا شروع کر دیا
تلاش اور چھانٹ رہا ہے کے تناظر میں،
اور ہم نے ایک ایسی چیز ہے جس پر ہم نے گزشتہ ہفتے اس نام کو تپپڑ نہیں کیا شروع کی،
لیکن کے asymptotic سنکیتن، بگ O، بگ ومیگا
اور کبھی کبھی بگ تھیٹا سنکیتن، اور صرف ان طریقوں تھے
یلگوردمز کی رننگ ٹائم کے بیان کے
پر چلانے کے لئے ایک الگورتھم کے لئے کتنا وقت لیتا ہے.
>> اور آپ کو سائز کے لحاظ سے یاد ہے کہ آپ رننگ ٹائم کے بارے میں بات کی ہو سکتی ہے
، ان پٹ، جس میں ہم عام طور پر (ن) کی کال، جو بھی مسئلہ ہو سکتا ہے
N کمرے میں افراد کی تعداد میں کہاں ہے،
ایک فون کی کتاب میں صفحات کی تعداد، اور ہم باتیں لکھنا شروع کر دیا
O کی طرح (ن ^ 2) یا O (ن) یا اے (ن لاگ ان ن)
اور اس وقت بھی جب ریاضی باہر کافی نہیں تھا تو بالکل کام
اور یہ ن تھا ² - N / 2 یا اس طرح کچھ
ہم صرف اس کی بجائے دور کم کے لئے شرائط میں سے کچھ پھینک دیں گے،
اور حوصلہ افزائی وہاں یہ ہے کہ ہم واقعی چاہتے ہیں
جائزہ کا مقصد راستے سے ترتیب دیں
پروگراموں کی کارکردگی یا یلگوردمز کی کارکردگی
ہے کہ دن کے آخر میں کرنا کچھ بھی نہیں ہے، مثال کے طور پر،
آپ کے کمپیوٹر کی رفتار کے ساتھ.
>> مثال کے طور پر، اگر آپ بلبلا طرح پر عمل در آمد کی،
یا آپ پر عملدرآمد آج کے کمپیوٹر پر ترتیب دیں یا انتخاب طرح ضم،
2 گیگاہرٹج، کمپیوٹر، اور آپ اسے چلاتے ہیں،
اور اس پر میں سے کچھ بڑی تعداد لیتا ہے، اگلے سال 3 گیگاہرٹج ہے
یا 4 گیگاہرٹج، کمپیوٹر، اور پھر تم کہ "واہ، میرے الگورتھم کا دعوی کر سکتے ہیں
اب دو مرتبہ روزہ کے طور پر ہے، "جب حقیقت میں ظاہر نہیں ہوتا.
یہ صرف ہارڈ ویئر تیز ہو گیا ہے، مگر آپ کے کمپیوٹر
ہے اور نہیں تو ہم واقعی طرح پھینک کرنا چاہتے ہیں
2 ملٹی 3 ملٹی جب اس بیان پر آتا ہے
روزہ کس طرح یا کس طرح سست ایک الگورتھم ہے اور واقعی صرف توجہ مرکوز
N یا کچھ اس عنصر،
کوئی طاقت اس کے طور پر گزشتہ ہفتے سے قسم کے معاملے میں.
اور ضم طرح کی مدد کے ساتھ یاد
ہم اتنا بلبلا طرح اور انتخاب کی طرح سے بہتر کرنے کے قابل تھے
اور یہاں تک کہ اندراج ترتیب دیں.
>> ہم ن لاگ ان ن ہے، اور پھر،
کو یاد ہوگا کہ لاگ ان ن عام طور پر ایسی چیز ہے جس اگنے سے مراد
زیادہ آہستہ آہستہ تو ن تو ن لاگ ان ن ابھی تک اچھا تھا
کیونکہ یہ ن ² سے کم تھی.
لیکن ن ضم طرح لاگ ان کے ساتھ (ن) کو حاصل کرنے کے
ایک خیال کی بنیادی جراثیم کہ ہم بیعانہ تھا
کہ ہم بھی 0 ہفتے میں واپس لیوریجڈ؟
ہم ضم طرح سے چھانٹ رہا مسئلہ کو کس طرح چالاکی سے نمٹنے کے لئے کیا ہے؟
اہم بصیرت کیا تھا، شاید؟
کوئی بھی
ٹھیک ہے، چلو ایک قدم واپس لے لو.
بیان طرح کی آپ کے اپنے الفاظ میں ضم.
یہ کام کیسے؟
ٹھیک ہے، ہم ہفتے 0 واپس صف گے.
ٹھیک ہے، جی ہاں.
[اشراوی طالب]
ٹھیک ہے، اچھا، تو ہم 2 ٹکڑوں میں اعداد کی صف تقسیم.
ہم نے ان ٹکڑوں میں سے ہر ایک کے مطابق، اور پھر ہم نے ان سے ملا دیا گیا ہے،
اور ہم نے اس خیال نے سے پہلے ایک مسئلہ یہ ہے کہ یہ بڑا ہے لے ہے
اور یہ ایک مسئلہ یہ ہے کہ بڑا یا اس بڑے میں کاٹ.
>> فون بک مثال کے طور پر یاد کرتے ہیں.
ہفتے پہلے سے الگورتھم خود گنتی یاد
تو ضم طرح یہاں pseudocode کی طرف سے خلاصہ کیا گیا تھا.
جب آپ کو ن عناصر دیا رہے ہیں، سب سے پہلے یہ وویک چیک کرنے کے لیے ہے.
اگر (ن) 2 <تو کچھ بھی نہیں کرتے
، اگر ن <2 تو (ن) ظاہر 0 یا 1 ہے کیونکہ
اور اگر ایسا ہے تو یہ نہیں ہے 0 یا 1 وہاں کی چھانٹی کرنے کی کوئی بات نہیں ہے.
تم نے کیا کیا کر رہے ہیں.
آپ کی فہرست میں پہلے ہی trivially کے مطابق ہے.
لیکن آگے دوسری صورت میں اگر آپ کو 2 یا اس سے زیادہ عناصر ہے اور ان کی تقسیم
2 حصوں میں، بائیں اور دائیں.
ان حصوں میں سے ہر ایک ترتیب، اور اس کے بعد کے مطابق حصوں ضم.
لیکن یہاں مسئلہ یہ ہے کہ پہلی نظر میں یہ محسوس ہوتا ہے جیسا کہ ہم punting رہے ہو.
یہ اس میں ایک سرکلر تعریف ہے، اگر میں نے آپ سے پوچھا ہے ان ن عناصر کو الگ الگ کرنے کے لئے
اور تم مجھ سے کہہ رہے ہو "ٹھیک ہے، ٹھیک ہے، ہم ان N / 2 اور ان N / 2 عناصر ترتیب گے،"
تو میرا اگلا سوال ہو رہا ہے "ٹھیک ہے، کہ کس طرح آپ N / 2 عناصر کو الگ الگ کرتے ہیں؟"
>> لیکن اس پروگرام کی ساخت کی وجہ سے،
کیونکہ اس کی بنیاد معاملہ ہے، تو بات کرنے کے لئے،
اس خاص کیس ہے کہ اگر (ن) 2 واپسی کی طرح کچھ مقررہ قیمت <فوری طور پر کر رہا ہے کا کہنا ہے کہ.
کہ ایک ہی سرکلر جواب کے ساتھ کوئی ردعمل ظاہر نہیں کیا.
اس عمل میں، اس cyclicity بالآخر ختم ہو جائے گی.
اگر میں تم سے پوچھتا ہوں "ترتیب دیں ان ن عناصر،" اور تم کہتے ہو، "ٹھیک ہے، یہ N / 2 الگ الگ،
تو آپ کا کہنا ہے کہ، "ٹھیک طرح، ان ن 4 /، ن / 8، n/16،"
آخر میں آپ کو ایک بڑا کافی تعداد کی طرف سے تقسیم کریں گے
کہ آپ کو صرف 1 عنصر بائیں جانب ہے، آپ کس موڑ پر کہہ سکتے ہیں کریں گے،
"یہاں، یہاں ایک کے مطابق ایک عنصر ہے."
پھر اس الگورتھم کی پرتیبھا یہاں حقیقت سے اخذ کردہ ہے
کہ، ایک بار آپ کو انفرادی مطابق ان کی فہرست کے سب
1 لوڈ، جن میں سے ہیں جس سے بیکار ہو گیا ہے،
ایک بار تم ان کے ولی اور ان کے ولی شروع
آپ نے آخر میں تعمیر کے طور پر روب ویڈیو آخر کار کے مطابق کی فہرست میں کیا ہے.
>> لیکن اس خیال کو دور چھنٹائی سے باہر توسیع.
یہ اس تکرار کے طور پر جانا جاتا ہے کے پروگرام میں سرایت خیال ہے،
خیال جس کے تحت آپ کو ایک پروگرام ہے،
اور کچھ مسئلہ کو حل کرنے کے لئے آپ اپنے آپ کو کہتے
یا پروگرامنگ زبانوں تم ایک تقریب کے تناظر میں ڈال دیا،
اور کے لئے ایک مسئلہ کو حل کرنے کے لئے، آپ کو تقریب خود کہتے ہیں
بار بار بار، لیکن آپ کو تقریب
خود کو نہیں بلا infinitely کئی بار کر سکتے ہیں.
آخر میں آپ سے نیچے ہے، اس سے بات کرنے،
اور کچھ مشکل کوڈت کی بنیاد پر شرط ہے جو یہ کہتا ہے
اس وقت اپنے آپ کو اتنا بلا روک ہے کہ مکمل عمل
آخر میں حقیقت میں روک کرتا ہے.
کیا یہ واقعی recurse مطلب؟
>> چلو دیکھتے ہیں، اگر ہم ایک سادہ، چھوٹی سی مثال کے طور پر کرتے ہیں، کا کہنا ہے کہ کر سکتے ہیں،
یہاں میرے ساتھ اسٹیج پر 3 لوگ، اگر کوئی آرام دہ اور پرسکون ہے.
1، اپ، 2، اور 3 پر آو.
اگر آپ کو 3 یہاں آنا چاہتا ہوں.
اگر آپ ایک سطر میں کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے متعلق درست اگلے یہاں کھڑا کرنا چاہتے ہیں، مان لیں کہ ہاتھ میں مسئلہ
بہت trivially لوگ ہیں جو یہاں ہیں کی تعداد شمار.
لیکن سچ کہوں تو، میں ان تمام گنتی مثالیں کے تک گیا ہوں.
اس میں کچھ وقت، 1، 2، اور ڈاٹ، ڈوٹ، ڈوٹ لے جا رہا ہے.
یہ ہمیشہ کے لئے لے جا رہا ہے.
میں بلکہ صرف کی مدد سے اس مسئلہ کو پنٹ مکمل طور پر تمہارا نام کیا ہے؟ چاہتے ہیں
سارہ. >> سارا، سب ٹھیک ہے.
کیلی. >> کیلی اور؟
>> ولی >> ولی، سارہ، کیلی، اور ولی.
اب میں کسی کی طرف سے کیا گیا ہے سوال
کتنے لوگوں کو اس مرحلے پر ہیں، اور مجھے کوئی اندازہ نہیں ہے.
یہ ایک بہت طویل فہرست ہے، تو بجائے اور میں نے یہ چال کرنے کے لئے جا رہا ہوں.
میں مجھ سے اگلے شخص کے کام کی زیادہ سے زیادہ کرنا سے کہنے جا رہا ہوں،
اور ایک بار وہ کام کی سب سے زیادہ کر کیا جاتا ہے
میں کام کی کم از کم رقم ممکن کیا کرنے جا رہا ہوں اور صرف 1 کا اضافہ
اس کا جواب جو کچھ بھی ہو، تو ہم یہاں جانے کے لئے.
میں کہا گیا ہے کہ کتنے افراد اسٹیج پر ہیں.
کتنے لوگ اسٹیج پر آپ کے بائیں ہیں؟
میرے بائیں >> ٹھیک ہے، لیکن نہ دھوکہ ہے.
یہ اچھی بات ہے، کیا یہ صحیح ہے، لیکن اگر ہم اس منطق کو جاری رکھنا چاہتے ہیں
چلو مان لیتے ہیں کہ آپ اسی طرح اس مسئلہ کو آپ کے بائیں پنٹ چاہتے ہیں،
بلکہ جواب سے براہ راست جاؤ اور صرف پیسہ منتقل.
اوہ، کس طرح بہت سے لوگ میرے بائیں ہیں؟
کتنے لوگ بائیں طرف ہیں؟
1.
[ہنسی]
ٹھیک ہے، تو 0، تو اب کیا ولی کیا ہے
ہے آپ اپنا جواب واپس 0 کہہ رہے سمت دی ہے.
اب، کیا آپ کے پاس 1 >> کرنا چاہیے؟
ٹھیک ہے، تو آپ کو 1 ہو، تو تم کہتے ہو، "ٹھیک ہے، میں 1 کا اضافہ کرنے جا رہا ہوں
جو بھی ولی شمار تھا، "تو 1 0 +.
اب آپ 1 ہو، تو آپ کے حق کا جواب ہے
1. >> اور میری 2 ہو جائے گا.
اچھا، تو آپ 1 کے پچھلے جواب لے جا رہے ہیں،
جس کے کام کی کم سے کم رقم ہے جو آپ کرنا چاہتے ہیں انہوں نے مزید کہا، +1 ہے.
اب آپ 2 ہے، اور آپ تو مجھے قدر جس کے ہاتھ میں ہے؟
3، میرا مطلب ہے، معاف کرنا، 2.
اچھی بات ہے.
>> ٹھیک ہے، ہم بائیں 0 تھا.
پھر ہم 1 سال کی تھی، اور پھر ہم 2 شامل
اور اب تم مجھے حوالے نمبر 2 رہے ہو،
اور اس لئے میں یہ کہہ رہا ہوں، ٹھیک ہے، +1، 3.
یقینا ہے 3 اس مرحلے پر میرے ساتھ کھڑے لوگوں،
تو ہم واضح طور پر یہ کر سکتے ہیں بہت linearly کیا ہے،
واضح انداز میں بہت زیادہ ہے، لیکن کیا ہم واقعی کیا ہے؟
ہم نے 3 سائز کے مسئلہ ابتدائی طور پر لیا.
ہم تو اس کو 2 سائز کے ایک مسئلہ میں توڑ دیا نیچے،
پھر 1 سائز کے ایک مسئلہ ہے، اور پھر آخر میں بنیاد کیس
واقعی تھا، اوہ، وہاں کوئی نہیں ہے،
جس میں نقطہ ولی مؤثر طریقے سے واپس ایک مشکل کوڈت جواب کے ایک جوڑے بار،
اور پھر دوسرا bubbled گیا تھا، bubbled، bubbled
اور اس وقت تک اس اضافی ایک 1 میں انہوں نے مزید کہا
ہم نے تکرار کے اس بنیادی خیال کو لاگو ہے.
>> اب، یہ اس صورت میں ایک مسئلہ نہیں تھا کو حل
اور زیادہ مؤثر طریقے سے اس کے بعد ہم ابھی تک دیکھا ہے.
لیکن یلگوردمز ہم نے اسٹیج پر کیا ابھی تک ہے کے بارے میں سوچنا.
ہم چاکبورڈ پر 8 کاغذ کے ٹکڑے ٹکڑے تھا،
ویڈیو پر جب شان نمبر 7 کے لئے تلاش کیا گیا تھا، اور وہ واقعی کیا کیا؟
ویسے، اس نے کسی بھی قسم کی تقسیم کرنا نہیں تھا اور فتح ہے.
انہوں نے کسی بھی قسم کی تکرار نہیں کیا تھا.
بلکہ وہ اس لکیری الگورتھم کیا.
لیکن گزشتہ ہفتے جب ہم نے مرحلے کے مطابق تعداد کے خیال شروع رہتے ہیں
تو ہم درمیان میں جانے کا یہ جذبات تھے،
کس موڑ پر ہم نے 4 سائز یا 4 سائز کے ایک اور فہرست کی ایک چھوٹی فہرست تھی،
اور پھر ہم نے بالکل وہی مسئلہ تھا، تو ہم نے بار بار، بار بار بار بار،.
دوسرے الفاظ میں، ہم recursed.
آپ ہمارے 3 رضاکاروں سے بہت ہمارے ساتھ تکرار کا مظاہرہ کرنے کے لئے یہاں کا شکریہ.
>> ، چلو دیکھتے ہیں اگر ہم نے یہ نہیں اب تھوڑا اور کنکریٹ کر سکتے ہیں
ایک مسئلہ یہ ہے کہ پھر ہم بہت آسانی سے کر سکتے ہیں کو حل کرنے،
لیکن ہم نے اسے اس بنیادی خیال پر عمل پیرا نکلنے پتھر کے طور پر استعمال کریں گے.
اگر میں کی تعداد کے ایک گروپ کے summation حساب چاہتے ہیں،
مثال کے طور پر، اگر آپ کو نمبر 3 میں گزر
میں آپ کو 3 سگما کی قیمت دینا چاہتے ہیں،
3 رقم 2 + + 1 0 +.
میں 6 جواب واپس حاصل کرنے کے لئے کرنا چاہتے ہیں،
تو ہم اس سگما تقریب، اس summation تقریب کو لاگو کریں گے
کہ پھر ان پٹ میں لیتا ہے، اور پھر summation واپس
اس نمبر کی تمام نیچے 0.
ہم اس خوبصورت صرف کرنا، ٹھیک کر سکتا تھا؟
ہم looping ڈھانچے کے کچھ قسم کے ساتھ یہ کر سکتا ہے،
تو آپ کے وزٹرز کا ریکارڈ رکھا آگے بڑھیں اور یہ شروع.
>> stdio.h شامل کریں.
آپ کے وزٹرز کا ریکارڈ رکھا خود کو اہم میں یہاں کے ساتھ مل کر کام کرنے دو.
چلو sigma.c کے طور پر اس کو بچانے کے.
اس کے بعد میں یہاں جانے کے لئے جا رہا ہوں، اور میں ایک int ن کا اعلان کرنے جا رہا ہوں،
اور میں مندرجہ ذیل ہے جبکہ صارف تعاون نہیں کرتا ہے کرنے جا رہا ہوں.
جب صارف نے مجھے نہیں ہے ایک مثبت عدد
مجھے آگے بڑھو اور (ن) = GetInt کے لئے ان کی فوری طور پر
اور مجھے انہیں کیا کرنا ہے جیسا کہ کچھ ہدایات دے،
تو printf ("براہ مہربانی مثبت عدد صحیح").
بس اس طرح نسبتا آسان تو کچھ ہے کہ ہم وقت سے 14 لائن کو مارا
اب ہم (ن) میں ایک مثبت شاید عددی ہے.
>> اب اس کے ساتھ کچھ کرنا دو.
چلو آپ کے وزٹرز کا ریکارڈ رکھا آگے بڑھو اور summation حساب، تو int رقم = سگما (ن)
سگما صرف summation ہے، تو میں صرف fancier راہ میں یہ لکھ رہا ہوں.
ہم نے اسے وہاں سگما فون کرتا ہوں.
یہی رقم ہے، اور اب میں نے نتیجہ پرنٹ جا رہا ہوں،
printf (رقم، "رقم٪ D، کریں \ n").
اور پھر میں اچھا اقدام 0 واپس آ جائیں گے.
ہم نے دلچسپ حصہ کے علاوہ سب کچھ ہے کہ اس پروگرام کی ضرورت ہوتی ہے کیا ہے،
جس میں سگما تقریب کو نافذ کرنے کا ہے.
>> چلو مجھے نیچے نیچے جاؤ، اور مجھے سگما تقریب کا اعلان.
یہ ایک متغیر قسم عددی ہے،
اور جو اعداد و شمار کی قسم میں سگما سے شاید واپس کرنا چاہتے ہیں؟
Int، کیونکہ میں نے اسے 15 لائن پر میری توقعات سے ملنے کے لئے چاہتے ہیں.
یہاں ہم آپ کے وزٹرز کا ریکارڈ رکھا آگے بڑھو اور اس کے نفاذ کے
ایک خوبصورت براہ راست طریقے میں.
>> ، چلو آگے بڑھو اور int رقم = 0 کہنا
اور اب میں لوپ کے لئے ایک چھوٹا سا یہاں جانے کے لئے جا رہا ہوں
ہے کہ اس طرح میں کچھ کہنا ہو رہا ہے،
(int میں = 0، I <تعداد =؛ میں + +) رقم + میں =.
اور پھر میں نے رقم واپس کرنے جا رہا ہوں.
میں کئی طریقوں میں سے کسی میں اس پر عمل کر سکتے ہیں.
میں تھوڑی دیر کے لوپ استعمال کیا جا سکتا ہے.
میں رقم متغیر کا استعمال کرتے ہوئے اگر میں واقعی کرنا چاہتا تھا چھوڑ سکتا ہے،
لیکن ہم مختصر میں صرف ایک تقریب میں ہے کہ اگر میں نے نہیں کیا مورھ اعلان رقم 0 ہے.
اس کے بعد یہ تعداد کے ذریعے 0 سے iterates
اور یہ ہر iteration پر رقم کہ موجودہ قدر تو جوڑتا ہے اور رقم واپس.
>> اب، تھوڑا سا اصلاح کے یہاں ہے.
شاید یہ ایک بیکار قدم ہے، لیکن یہ ہے. یہ ٹھیک ہے اب کے لئے.
ہم کم سے کم ہو مکمل کیا جارہا ہے اور اپ پر 0 طرح.
، اور بہت مشکل نہیں خوبصورت براہ راست
لیکن یہ پتہ چلا ہے کہ ہم سگما تقریب کے ساتھ ایک ہی موقع ہے
کے طور پر ہم نے اسٹیج پر یہاں کیا.
اسٹیج پر ہم صرف شمار کتنے لوگ میرے ساتھ تھے،
بلکہ اس کی بجائے اگر ہم 3 2 + 1 + کی تعداد کا شمار کرنا چاہتا تھا
0 نیچے ہم نے ایک تقریب میں اسی طرح پنٹ سکتا
کہ میں پنراورتی ہونے کے بجائے بیان کریں گے.
یہاں ایک فوری وویک اور یقین ہے کہ میں نے کیا مورھ نہیں کروں چیک کرنے کے لیے.
>> میں جانتا ہوں کہ اس پروگرام میں کم از کم ایک بات یہ ہے کہ میں نے غلط کیا ہے.
جب میں داخل مارا میں مجھ پر چللا کسی بھی قسم کی حاصل کرنے کے لئے جا رہا ہوں؟
کیا میں نے کے بارے میں چللایا پر جا رہا ہوں؟
جی ہاں، میں نے پروٹوٹائپ بھول گیا، میں 15 لائن پر فون کیا سگما ایک تقریب کا استعمال کرتے ہوئے کر رہا ہوں،
لیکن یہ 22 اوپر تک اعلان نہیں ہے، تو میں سب سے بہتر مسلسل یہاں جانا
اور ایک پروٹوٹائپ کا اعلان، اور میں int سگما (int تعداد) کہیں گے، اور یہ کہ یہ ہے.
یہ نچلے حصے میں لاگو کیا ہے.
>> یا، ایک اور راستہ ہے جس سے میں اس کو حل کر سکتے ہیں
میں وہاں کام منتقل کر سکتے ہیں، جو برا نہیں ہے،
لیکن کم سے کم جب اپنے پروگراموں طویل حاصل کرنے کے لئے شروع، سچ کہوں تو،
مجھے لگتا ہے کہ وہاں ہمیشہ سب سے اوپر اہم ہونے میں کچھ قدر ہے
تا کہ آپ قاری میں فائل کو کھولنے اور اس کے بعد فوری طور پر دیکھنے کے کر سکتے ہیں
کہ پروگرام کے تحت اس کے ذریعے تلاش کرنے کے بغیر کر رہی ہے
اس اہم کام کے لئے تلاش.
میرے ٹرمنل ونڈو یہاں نیچے جانے دو، سگما سگما بنانے کی کوشش کریں،
اور میں نے یہاں بھی خراب.
تقریب GetInt کی انترنہیت اعلان کا مطلب ہے کہ میں اور کیا کر بھول گئے ہیں؟
[اشراوی طالب]
اچھا، تو بظاہر ایک عام غلطی تو یہ یہاں رکھو،
cs50.h، اور اب میری ٹرمنل ونڈو پر واپس جانے.
>> میں سکرین صاف ہے، اور میں سگما بنانے rerun گے.
اس کو مرتب کیا ہے لگتا ہے. مجھے اب سگما چلانے.
نمبر 3 میں ٹائپ کریں، اور میں 6 ملی گے، تو سخت نہیں چیک،
لیکن کم از کم یہ پہلی نظر میں کام کرنے لگتا ہے، لیکن اب ہم اس کے علاوہ چیر،
اور اصل میں تکرار کے خیال بیعانہ، پھر،
تاکہ ایک بہت ہی سادہ تناظر میں چند ہفتے کے وقت میں
جب ہم arrays سے fancier ڈیٹا ڈھانچے کی شروع
ہم ٹول کٹ میں ایک آلہ جس کے ساتھ ہے
نے ان اعداد و شمار کے ڈھانچے جوڑتوڑ ہم کے طور پر نظر آئے گا.
یہ نقطہ نظر، تکراری لوپ کی بنیاد پر نقطہ نظر ہے.
>> آپ کے وزٹرز کا ریکارڈ رکھا بجائے چلو اب ایسا.
مجھے دو کی بجائے کا کہنا ہے کہ اس نمبر کی summation
0 نیچے واقعی اسی طور پر بات یہ ہے
تعداد + سگما (نمبر - 1).
دوسرے الفاظ میں، میں صرف کی طرح اسٹیج پر مجھ سے اگلے لوگوں میں سے ہر ایک کو punted
اور وہ بدلے میں جب تک ہم آخر میں ولی میں باہر bottomed punting رہا،
0 طرح ایک جواب مشکل کوڈت واپس کس طرح تھا.
اب یہاں ہم اسی طرح سگما punting رہے ہیں
اصل کے طور پر ایک ہی تقریب، کہا گیا تھا لیکن یہاں اہم بصیرت
یہ ہے کہ ہم سگما identically سے نہیں بلا رہے ہیں.
ہم (ن) میں گزر نہیں کر رہے ہیں.
ہم واضح طور پر تعداد میں گزر رہے ہیں - 1،
تو تھوڑا سا چھوٹا مسئلہ تھوڑا سا چھوٹا مسئلہ ہے.
>> بدقسمتی سے، یہ بہت حل نہیں ہے ابھی تک، اور ہم سے پہلے کو ٹھیک
جو واضح طور پر تم میں سے بعض میں کود سکتا ہے
آپ کے وزٹرز کا ریکارڈ رکھا آگے بڑھو اور rerun بنانے.
یہ ٹھیک تالیف ہے.
کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے 6 کے ساتھ سگما rerun.
افوہ کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے 6 کے ساتھ سگما rerun.
ہم نے اس سے پہلے دیکھا ہے، اتفاقی طور پر آخری بار ہی سہی.
میں نے نے اس خفیہ انقطاع غلطی کیوں ملا؟ جی ہاں.
[اشراوی طالب]
کوئی بنیاد بات ہے، اور مزید خاص طور پر، شاید، کیا ہوا؟
یہ کس رویے کی ایک علامت ہوتی ہے؟
یہ تھوڑا زور سے کہو.
[اشراوی طالب]
یہ ایک لامحدود لوپ کو مؤثر طریقے، اور لامحدود loops کے ساتھ مسئلہ ہو گیا ہے
جب انہوں نے اس کیس میں تکرار شامل ہے، ایک تقریب خود بلا رہا،
ہر وقت آپ کو ایک تقریب کہتے ہیں کیا ہوتا ہے؟
ٹھیک ہے، کہ ہم کس طرح کمپیوٹر میں یاد رکھی واپس لگتا ہے.
ہم نے کہا ہے کہ میموری کے اس حصہ سے ملاقات کی اسٹیک ہے کہ نیچے دیے گئے،
اور ہر بار جب آپ کے فون میں ایک تقریب میں تھوڑا اور میموری ڈال دیا ہو جاتا ہے
کہ تقریب کے مقامی متغیر یا پیرامیٹرز پر مشتمل اس نام نہاد اسٹیک
اگر ایسا ہے تو سگما سگما کالز مطالبہ سگما سگما مطالبہ
سگما مطالبہ جہاں اس کہانی ختم نہیں ہوتی ہے؟
>> ٹھیک ہے، یہ آخر میں overruns کل رقم
میموری ہے کہ آپ کو آپ کے کمپیوٹر پر دستیاب نہیں ہے.
آپ کو طبقہ ہے کہ آپ کے اندر اندر رہنے کے لئے کرنا ہے overrun،
اور آپ کو یہ انقطاع غلطی ملتی ہے، کور پھینک دیا،
اور جو بنیادی پھینک دیا کا مطلب یہ ہے کہ میں نے اب کہا جاتا بنیادی فائل ہے
جو zeros اور ہیں پر مشتمل فائل ہے
کہ اصل میں مستقبل میں diagnostically مفید ہو گا.
اگر یہ واضح تم سے نہیں ہے جہاں آپ کے مسئلے سے ہے
آپ کو عدالتی تجزیہ کے تھوڑا سا ہی درحقیقت ایسا کرتے ہیں، تو بات کر سکتے ہیں،
اس کور ڈمپ فائل پر، جو، پھر سے، صرف zeros اور ہیں کی ایک پوری چڑھانے ہے
کہ بنیادی طور پر میموری میں آپ کے پروگرام کی ریاست کی نمائندگی کرتا ہے
لمحے یہ اس طرح میں گر کر تباہ ہوگیا.
>> یہاں طے کر ہے کہ ہم صرف آنکھ بند کر کے نہیں سگما واپس آ سکتے ہیں،
تعداد + تھوڑا چھوٹا مسئلہ کے سگما.
ہم بیس کیس کی کسی قسم کو یہاں دیکھ کر کی ضرورت ہے،
اور جو شاید بیس کیس ہونا چاہئے؟
[اشراوی طالب]
ٹھیک ہے، تو جب تک تعداد مثبت ہے ہم اس اصل واپس آ جانا چاہئے،
یا کسی دوسری طرح ڈال، اگر تعداد ہے کا کہنا ہے کہ،، <= 0
آپ کو پتہ ہے، میں آگے بڑھیں اور 0 لوٹا دونگا،
بہت طرح ولی نے اور کچھ، میں آگے بڑھو جا رہا ہوں
اور یہ واپس، تو یہ ہے کہ بہت کم نہیں ہے
ورژن تکراری کہ ہم نے whipped پہلے لوپ کے لئے ایک کا استعمال کرتے ہوئے سے
نوٹس لیکن ہے کہ اس کے خوبصورتی کے اس طرح سے ہے.
کچھ تعداد واپس آنے اور یہ سب کچھ ریاضی میں کارکردگی کا مظاہرہ کر کے بجائے
اور چیزیں مقامی متغیر کے ساتھ انہوں نے مزید کہا
آپ بجائے کہہ رہے ہو "ٹھیک ہے، اگر یہ ایک سپر آسان مسئلہ ہے،
جیسے نمبر 0 <ہے، مجھے فوری طور پر واپس 0. "
>> ہم جا حمایت منفی تعداد کو پریشان کرنے کے لئے نہیں کر رہے ہیں،
تو میں ہارڈ کوڈ 0 کی قدر کر رہا ہوں.
لیکن دوسری صورت میں، میزانی کے اس خیال پر عمل درآمد
ان کی تعداد کے سب ایک ساتھ آپ کو ایک چھوٹی سی کاٹنے مؤثر طریقے سے لے سکتے ہیں
مسئلہ سے باہر، ہم زیادہ کی طرح اسٹیج پر یہاں کیا،
تو، مسئلہ کے اگلے شخص کو باقی پنٹ
لیکن اس صورت میں اگلے دار خود ہے.
یہ ایک identically نام ایک تقریب ہے.
بس یہ ایک چھوٹے اور چھوٹے اور چھوٹے مسئلہ ہر وقت گزر
اور اگرچہ ہم کوڈ میں بہت رسمی چیزیں یہاں ہے
یہ بالکل وہی جو 0 ہفتے میں فون کتاب کے ساتھ جا رہا تھا.
یہ بالکل وہی جو گزشتہ ہفتوں میں شان کے ساتھ جا رہا تھا
اور کی تعداد کے لیے تلاش کرنے کی ہماری مظاہروں کے ساتھ.
یہ ایک مسئلہ رہی ہے اور بار بار یہ تقسیم.
>> دوسرے الفاظ میں، کوئی راستہ ترجمہ اب
اس حقیقی دنیا کی تعمیر، اس اعلی سطح کی تعمیر
اور فتح کی تقسیم اور کچھ کر بار بار
کوڈ میں، تو یہ وہ کچھ ہے ہم وقت کے ساتھ دوبارہ نظر آئے گا ہے.
اب، ایک کے طور پر ایک طرف، اگر آپ تکرار پر نئے ہیں تو آپ اب کم از کم سمجھنا چاہیئے
یہ مضحکہ خیز کیوں ہے.
میں google.com کو جانے کے لئے جا رہا ہوں،
درج اور اس میں تکرار پر کچھ تجاویز اور ترکیبیں کے لئے تلاش کرنے کے لئے جا رہا ہوں،.
آپ کے اگلے شخص سے کہو کہ اگر وہ ہنس ابھی نہیں کیا گیا.
کیا تم نے تکرار کیا مطلب ہے؟
کیا آپ کا مطلب ہے آہ، ہم وہاں چلتے ہیں.
ٹھیک ہے، اب وہ باقی سب کے ہے.
ایک چھوٹا سا ایسٹر انڈے گوگل میں کہیں سرایت.
ایک ایک طرف، ایک لنک ہم نے کورس کی ویب سائٹ پر ڈال
آج کے لئے صرف مختلف چھنٹائی کے الگورتھم کے اس گرڈ ہے،
جن میں سے کچھ ہم نے گزشتہ ہفتے کو دیکھا ہے، لیکن جو اس تصور کے بارے میں اچھی بات ہے
جیسا کہ آپ الگورتھم سے متعلق مختلف چیزوں کے ارد گرد آپ کے دماغ میں لپیٹ کی کوشش کرتے ہیں
جانتے ہیں کہ اب آپ کو آدانوں کی مختلف اقسام کے ساتھ بہت آسانی سے شروع کر سکتے ہیں.
آدانوں سب الٹ، آدانوں زیادہ تر کے مطابق، آدانوں بے ترتیب اور وغیرہ.
کے طور پر آپ کو، دوبارہ کوشش کریں، آپ کے دماغ میں ان چیزوں کو ممتاز
کہ احساس لیکچرز صفحے پر کورس کی ویب سائٹ پر اس یو آر ایل
آپ کو ان میں سے کچھ کے ذریعے وجہ کی مدد کر سکتے ہیں.
>> آج ہم آخر میں تھوڑی دیر سے اس مسئلہ پر واپس کو حل کرنے،
اس کا یہ تھا کہ اس سویپ تقریب نہ صرف کام کیا،
اور کیا اس تقریب سویپ کے ساتھ بنیادی مسئلہ تھا،
مقصد جن میں سے تھا، پھر سے، ایک قیمت کو یہاں اور یہاں پر تبادلہ
اس طرح کہ یہ ہوتا ہے؟
یہ اصل میں کام نہیں کیا. کیوں؟
جی ہاں.
[اشراوی طالب]
اس bugginess کے لئے بالکل، وضاحت
صرف تھی کیونکہ جب آپ C میں افعال فون
اور ان افعال دلائل یہاں ایک اور بی کی طرح لیتے ہیں،
آپ کو جو قیمت آپ نے اس تقریب میں فراہم کر رہے ہیں کی نقول میں گزر رہے ہیں.
فراہم کرنے اصل اقدار نہیں ہیں خود
تو ہم buggyc کے تناظر میں اس نے دیکھا،
buggy3.c، جو کہ اس طرح کچھ دیکھا.
>> کو یاد ہوگا کہ ہم نے X اور Y 1 اور 2 initialized، بالترتیب.
پھر ہم طباعت کی کہ وہ کیا تھے.
پھر میں نے دعوی کیا ہے کہ میں ان X، Y سویپ پر کال کر کے گماگمن رہا تھا.
لیکن مسئلہ یہ تھا کہ گماگمن کام کیا،
لیکن خود کو صرف سویپ کے دائرہ کار میں کام کرتے ہیں.
جیسے ہی ہم نے 40 لائن نے ان تبدیل اقدار کو مارا
رہے تھے دور پھینک دیا، تو اور کچھ نہیں
اصل تقریب میں اہم اصل میں بالکل تبدیل کر دیا گیا تھا،
اگر ایسا ہے تو آپ کو واپس کیا یہ ہمارے میموری کی شرائط میں کی طرح لگتا ہے کے طور پر میں کیا سوچتے ہیں تو
اگر بورڈ کے اس طرف بائیں ہاتھ کی نمائندگی کرتا ہے
اور میں سب کے لئے اپنی پوری کوشش کروں نظر آئے گا اگر بورڈ کے اس طرف بائیں ہاتھ
کی نمائندگی کرتا ہے، آپ کا RAM کا کہنا ہے کہ، اور اسٹیک اس طریقہ پر اضافہ ہو رہا ہے،
اور ہم اہم طرح ایک تقریب کہتے ہیں، اور اہم 2 مقامی متغیر، X اور Y،
ہم ایکس کے طور پر ان لوگوں کو یہاں کی وضاحت کریں، اور Y کے طور پر ان کو یہاں بیان
تو اور 1 اقدار اور 2 میں ڈال دیا، یہاں یہ اہم ہے،
اور اہم سویپ تقریب جب آپریٹنگ سسٹم مطالبہ
سویپ تقریب اسٹیک پر دیتا ہے اس کی میموری کا اپنا swath
اسٹیک پر اپنے فریم، تو بات کرنے کی.
یہ بھی ان ints کے لئے 32 بٹیں مختص ہے.
یہ ان کو a اور b کو فون کرنے کی ہے، لیکن ہے کہ مکمل طور پر غیر منطقی ہے.
یہ انہیں فون کر سکتے ہیں جو کچھ بھی چاہتا ہے، لیکن کیا ہوتا ہے جب مرکزی
کالز سویپ 1 لیتا ہے، وہاں ایک کاپی کہتے ہیں، وہاں کی ایک نقل رکھتا ہے.
>> 1 سویپ میں دیگر مقامی متغیر ہے، تاہم کہا جاتا ہے، >> Tmp کیا؟
Tmp، تو مجھے اپنے آپ کو ایک اور 32 بٹس یہاں دے،
اور کیا میں اس تقریب میں کیا؟
میں نے کہا کہ int tmp ہو جاتا ہے، تو 1 ہے، تو میں نے یہ کیا جب ہم آخری بار اس مثال کے ساتھ ادا کیا ہے.
پھر ایک ب ہو جاتا ہے، لہذا ب 2 ہے، تو اب یہ 2 بن جاتا ہے،
اور اب ب TEMP ہو جاتا ہے، لہذا TEMP 1 ہے،
تو اب ب ہو جاتا ہے.
یہ بہت اچھا ہے. یہ کام کیا.
لیکن پھر جلد ہی تقریب کی واپسی کے طور پر
سویپ میموری کو مؤثر طریقے سے غائب ہو جائے تاکہ یہ reused کیا جا سکتا ہے
مستقبل میں کسی اور تقریب کی طرف سے، اور اہم ظاہر مکمل طور پر کوئی تبدیلی نہیں ہے.
ہم بنیادی طور پر اس مسئلے کو حل کرنے کا ایک طریقہ کی ضرورت ہے،
اور آج ہم یہ کر رہی ہے جس کا ایک طریقہ آخر پڑے گا
ہم نامی پوائنٹر کچھ تعارف کروا سکتے ہیں.
یہ پتہ چلا ہے کہ ہم اس مسئلے کو حل کر سکتے ہیں
X اور Y کی کاپیاں میں کی طرف سے نہیں گزر
لیکن تم نے کیا میں گزرنے والے بجائے سویپ کی تقریب میں کیا سوچتے ہیں؟
جی ہاں، پتہ کے بارے میں کیا ہے؟
ہم نے پتے کے بارے میں بہت زیادہ تفصیل میں نہیں بات ہے،
لیکن اگر یہ بلیکبورڈ اپنے کمپیوٹر کی میموری کی نمائندگی کرتا ہے
ہم میری RAM میں بائٹس کی تعداد ضرور شروع کر سکتا ہے
اور اس کا کہنا ہے کہ یہ # 1 بائٹ ہے، بائٹ # 2 ہے، بائٹ # 3،
بائٹ # 4، بائٹ # ... 2 بلین اگر میں رام کی 2 گیگا ہیں،
تو ہم نے کچھ صوابدیدی نمبر کی منصوبہ بندی کے ساتھ ضرور آ سکتی
اپنے کمپیوٹر کی میموری میں تمام انفرادی شراکت کے لئے.
>> بجائے اگر کیا جب میں فون سویپ
X اور Y کی کاپیاں میں بجائے پاس
بجائے میں X کے خطاب میں یہاں کیوں نہیں کرتے گزر
Y کا پتہ، بنیادی طور پر ای میل ایڈریس
X اور Y کی وجہ سے تو، تبادلہ اگر اس نے بتایا ہے
، X اور Y کی یاد میں ایڈریس کی
تو، اگر ہم نے اسے تھوڑا سا تربیت یافتہ، تبادلہ
وہ اس پتہ پر ممکنہ طور پر ڈرائیو، تو بات کر سکتے ہیں،
X، اور وہاں نمبر تبدیل، تو Y کا پتہ چلانا،
تعداد وہاں تبدیل کرتے ہوئے بھی ان اقدار خود کی کاپیاں اصل میں نہیں ہو رہی ہے،
اتنی اگرچہ ہم اہم میموری کے طور پر اس کے بارے میں بات کی
اور اس کے طور پر سویپ میموری C کے طاقتور اور خطرناک حصہ
یہ ہے کہ کسی بھی تقریب میموری چھو کے کمپیوٹر میں کہیں بھی کر سکتے ہیں،
اور یہ طاقتور ہے کہ آپ سی میں کمپیوٹر پروگرام کے ساتھ بہت پسند ہیں چیزیں کر سکتے ہیں
یہ خطرناک ہے کیونکہ آپ نے بھی بہت آسانی سے نچوڑنا کر سکتے ہیں.
اصل میں، پروگراموں کے لئے سب سے زیادہ عام طریقوں سے ان دنوں میں سے ایک کا استحصال کیا جائے
اب بھی ہے ایک پروگرامر کے لئے احساس نہیں
کہ وہ ایک ڈیٹا کی اجازت دی ہے
یاد میں ایک جگہ ہے کہ نہیں کرنا تھا کے وزٹرز کا ریکارڈ رکھا جائے گا.
>> مثال کے طور پر، وہ 10 سائز کے ایک صف کی یہ وانی ہے
لیکن اس وقت حادثاتی طور پر میموری کی صف میں 11 بائٹس پر ڈال کی کوشش کرتا ہے،
اور آپ میموری کے مختلف حصوں کہ اب درست نہیں ہیں کو چھونے لگتے ہیں.
بس یہ متعلقہ تم میں سے کچھ جانتے ہیں، ہو سکتا ہے کہ
سافٹ ویئر اکثر آپ کو سیریل نمبر یا رجسٹریشن کی چابیاں کے لئے اشارہ ہے،
فوٹوشاپ کلام اور اس طرح کے پروگرام ہیں.
اس درار موجود ہیں، جیسا کہ تم میں سے کچھ جانتے ہیں، آن لائن ہے جہاں آپ ایک چھوٹا سا پروگرام چلا سکتے ہیں،
اور voila، ایک سیریل نمبر کے لئے کوئی درخواست.
کہ کس طرح کام کر رہا ہے؟
بہت سے واقعات میں یہ چیزیں صرف کمپیوٹرز میں تلاش کر رہے ہیں
کمپیوٹر کی اصل zeros اور ہیں میں متن کے طبقات
اس تقریب میں جہاں سیریل نمبر کی درخواست کی ہے کہاں ہے،
اور آپ اس خلا کو ادلیکھت، یا جبکہ پروگرام چلا رہا ہے
آپ کو پتہ ہے جہاں کے بٹن کو واقعی محفوظ ہے
کچھ کا استعمال کرتے ہوئے فون کیا ایک debugger، اور آپ کے سافٹ ویئر جس طرح کہ ٹوٹ کر سکتے ہیں.
یہ اگلے چند دنوں کے لئے یہ کہنا کہ یہ ہمارا مقصد ہے نہیں ہے،
لیکن یہ بہت حقیقی دنیا کے اثرات ہیں.
کہ ایک سافٹ ویئر کی چوری کو شامل ہوتا ہے،
لیکن اس کے علاوہ پورے مشینوں کے سمجھوتہ ہے.
>> اصل میں، جب ویب سائٹ ان دنوں کا استحصال کر رہے ہیں
سمجھوتہ اور ڈیٹا لیک ہے اور پاس ورڈ چوری کر رہے ہیں
یہ بہت اکثر ایک میموری کے غریب انتظام سے متعلق ہے،
یا ڈیٹا بیس کے معاملے میں ناکامی رکھو،
معاندانہ ان پٹ، ہفتوں میں اس پر آنے
لیکن اب کے لئے نقصان کی طرح صرف ایک چوری چھپے پیش نظارہ آپ ایسا کر سکتے ہیں
کس طرح چیزیں ہڈ کے نیچے کام کرتے ہیں کافی نہیں سمجھنے کی طرف سے.
یہ کیوں ٹوٹا ہوا ہے سمجھنے کے بارے میں جانے دو
ایک آلہ کے ساتھ زیادہ سے زیادہ مفید ہو جائے گا
کے طور پر ہمارے پروگراموں زیادہ پیچیدہ ملتا ہے.
ابھی تک جب آپ کو آپ کے پروگرام میں ایک بگ ملا ہے
آپ کو یہ ٹھیک کرنے کے بارے میں کس طرح چلے گئے ہیں؟
آپ کی کیا تکنیک اس طرح اب تک کیا گیا ہے، کہ آپ TF کی طرف سے سکھایا
یا صرف خود سکھایا ہے؟
[Student کی] Printf.
Printf، تو printf شاید اس میں اپنے دوست رہا ہے اگر آپ دیکھنا چاہتے ہیں
کیا آپ کے پروگرام کی جا رہا ہے اندر
آپ printf یہاں صرف ڈال، printf یہاں، printf یہاں.
تو پھر آپ اسے چلاتے ہیں، اور آپ کی سکرین پر ایک سامان کے پورے گچرچھی
کہ آپ تو نتیجہ نکالنا ہے جو اصل میں آپ کے پروگرام میں غلط جا رہی ہے کا استعمال کر سکتے ہیں.
>> Printf ایک بہت طاقتور چیز کے لئے جاتا ہے،
لیکن یہ ایک بہت دستی عمل ہے.
تم printf یہاں لانا ہوگا، ایک printf یہاں،
اور اگر تم نے اسے ایک لوپ کے اندر ڈال آپ کو 100 لائنوں ہو سکتا ہے
پیداوار ہے کہ آپ اس کے بعد کے ذریعے sift ہے.
یہ بگ پروگراموں کے لئے ایک بہت ہی صارف دوست یا انٹرایکٹو نظام نہیں ہے،
لیکن شکر متبادل موجود ہے.
مثال کے طور پر ایک پروگرام،، کہا جاتا GDB، GNU Debugger ہے،
جو تم نے اسے کس طرح استعمال کرتے ہیں میں ایک چھوٹا سا arcane ہے.
یہ ایک چھوٹا سا پیچیدہ ہے، لیکن سچ کہوں تو،
یہ ان چیزوں میں اگر آپ کو اس ہفتہ میں ڈال کے ایک اور اگلے ہے
اضافی GDB طرح کچھ سمجھنا گھنٹہ
آپ کو طویل مدت میں شاید گھنٹوں کے دسیوں کو بچانے کے کریں گے،
تو اس کے ساتھ، میں آپ کو کس طرح اس بات کے کام کی ایک جھلکی دے.
>> میں میرے ٹرمنل ونڈو میں ہوں.
آپ کے وزٹرز کا ریکارڈ رکھا آگے بڑھو اور اس پروگرام buggy3 مرتب دو
یہ پہلے ہی کی تاریخ ہے.
آپ کے وزٹرز کا ریکارڈ رکھا جیسا کہ ہم نے تھوڑی دیر پہلے کیا کیا تھا، اور بے شک، یہ ٹوٹ گیا ہے چلانے کے دو
لیکن یہ کیوں ہے؟ شاید میں سویپ کی تقریب خراب ہے.
ہو سکتا ہے یہ ایک اور بی ہے. میں نے ان سے بہت نہیں کر رہا ہوں میں منتقل کے ارد گرد درست طریقے سے.
آپ کے وزٹرز کا ریکارڈ رکھا آگے بڑھیں اور اس کام کو کرنے دو
کی بجائے صرف buggy3 چلانے کے آپ کے وزٹرز کا ریکارڈ رکھا بجائے اس پروگرام GDB چلائیں،
اور میں نے اسے buggy3 چلانے بتانے جا رہا ہوں،
اور میں ایک کمانڈ لائن کی دلیل، TUI کو شامل کرنے کے لئے جا رہا ہوں،
اور ہم رپورٹ میں مستقبل کے مسائل، یاد دلانے میں یہ ڈال دیتا ہوں.
اور اب اس میں سیاہ فام اور سفید فام انٹرفیس اس popped، پھر
پہلے تھوڑا بھاری ہے، کیونکہ وہاں یہ سب
یہاں نیچے وارنٹی کی معلومات، لیکن کم از کم واقف کچھ ہے.
ونڈو کے سب سے اوپر میں اپنے اصل کوڈ آن ہے،
اگر میں نے یہاں سکرال اور مجھے میری فائل کی بہت اوپر سکرال،
بلکہ، اس کھڑکی سے سب سے نیچے دیئے گئے buggy3.c، اور نوٹس
میں اس GDB فوری ہے.
>> یہ میرے نارمل جان ہارورڈ فوری طور پر ایک ہی نہیں ہے.
یہ فوری طور پر ہے کہ آپ کے وزٹرز کا ریکارڈ رکھا GDB کو کنٹرول کرنے کی اجازت دینے کے لئے جا رہا ہے.
GDB debugger ہے.
A debugger ایک پروگرام ہے کہ اجازت دیتا ہے آپ کے ذریعے چل ہے
لائن کی طرف سے لائن کی طرف سے آپ کے پروگرام کی لائن کی پھانسی،
طریقہ بھی آپ اس پروگرام کرنا چاہتے ہیں کر رہے ساتھ،
بھی کام کرتا ہے، بلا، یا دیکھ، زیادہ اہم بات یہ،
مختلف متغیر اقدار.
چلو، آگے بڑھو اور اس کے کیا.
میں آگے بڑھنے کی GDB فوری دوڑ میں ٹائپ کی جا رہی ہوں،
، تو سب سے نیچے دیئے گئے سکرین میں ٹائپ چلائے گئے چھوڑ نوٹس
اور میں داخل متاثر ہے، اور یہ کہ کیا کیا ہے؟
یہ لفظی میرے پروگرام کو بھاگ گیا، لیکن میں واقعی میں نہیں یہاں جاؤ دیکھا
کیونکہ میں debugger اصل میں نہیں بتایا
وقت میں ایک خاص لمحے میں روک دیں.
بس رن ٹائپ پروگرام چلاتی ہے.
میں کچھ اصل نہیں دیکھتے. میں اسے توڑ نہیں کر سکتے ہیں.
>> اس کے بجائے مجھے ایسا.
اس GDB فوری میں ہم آپ کے وزٹرز کا ریکارڈ رکھا بجائے وقفے ٹائپ کریں، داخل کریں.
یہ نہیں ہے جو میں ٹائپ کا مطلب ہے.
بجائے دو وقفے اہم ٹائپ کریں.
دوسرے الفاظ میں، میں کہا جاتا ہے توڑ مقام کچھ قائم کرنے کے لئے چاہتے ہیں،
جس aptly نام ہے اس کی وجہ توڑنے یا روکنے کے گا
اس مخصوص جگہ پر آپ کے پروگرام پر عملدرآمد.
مین میری تقریب کے نام ہے.
نوٹس کہ GDB بہت ہوشیار ہے.
یہ سوچا ہے کہ اہم 18 لائن پر تقریبا شروع ہوتا ہے
buggy3.c، سب سے اوپر بائیں میں اور پھر یہاں نوٹس
B + 18 لائن پر اگلے ہے.
اس سے مجھے یاد ہے کہ میں نے 18 لائن پر توڑ مقام مقرر ہے.
اس بار جب میں نے رن ٹائپ کریں، میں اپنے پروگرام کو چلانے کے لئے جا رہا ہوں
تک جب تک کہ وہ اس توڑ مقام کو مار دیتی ہے،
تو پروگرام 18 لائن پر کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے متعلق روکنے کے.
یہاں ہم، باگو جانا.
کچھ نہیں ہوا محسوس ہوتا ہے، لیکن نیچے دیے گئے نوٹس کو چھوڑ دیا
شروع ہونے والے پروگرام، buggy3، اہم 1 buggy3.c 18 لائن پر توڑ مقام ہے.
اب میں کیا کر سکتا ہوں؟
>> میں شروع نوٹس پرنٹ طرح چیزوں کو ٹائپ کر سکتے ہیں،
نہیں printf، پرنٹ X، اور اب جو عجیب ہے.
$ 1 صرف ایک تجسس ہے، ہم کے طور پر دیکھیں گے
ہر بار تم سے کچھ پرنٹ آپ کو ایک نئی قدر ڈالر ملتا ہے.
ایسا ہے کہ آپ کو صرف کیس میں سابق اقدار کو واپس رجوع کر سکتے ہیں،
لیکن اب جو پرنٹ مجھ سے کہہ رہا ہے یہ ہے کہ کہانی میں اس وقت X کی قدر
بظاہر 134514032 ہے.
کیا ہے؟ کہاں سے بھی آئے؟
[اشراوی طالب]
درحقیقت یہ ہے جو ہم کو ردی کی ٹوکری کی قیمت کو فون کریں گے، اور ہم اس کے بارے میں کوئی بات نہیں ابھی تک ہے،
لیکن وجہ ہے کہ آپ کو متغیر ابتدا
ظاہر ہے تاکہ وہ کچھ قدر ہے کہ آپ ان کے چاہتے ہیں ہے.
پکڑنے کی یاد لیکن ہے کہ آپ کو متغیر کا اعلان کر سکتے ہیں
جیسا کہ میں نے ایک لمحے پہلے اپنے سگما مثال میں کیا
اصل میں انہیں ایک قیمت دے بغیر.
یاد کیا میں سگما میں میں نے یہاں ہے.
میں نے (ن) کا اعلان کیا، لیکن کیا قیمت میں نے اسے دیا ہے؟
کوئی نہیں، کیونکہ مجھے پتہ تھا کہ اگلے چند لائنوں میں
GetInt (ن) کے اندر ایک قیمت لگانے کے مسئلے کا خیال رکھیں گے.
>> لیکن 11 لائن کی کہانی میں اس وقت
اور لائن کی 12 اور 13 کی لائن اور 14 لائن
ان کئی لائنوں بھر (ن) کی قدر کیا ہے؟
C میں آپ نہ صرف جانتے ہیں.
عام طور پر یہ کچھ ردی کی ٹوکری کی قیمت، کچھ مکمل طور پر بے ترتیب تعداد ہے
کہ کچھ پچھلے تقریب سے چھوڑ دیا ہے، بنیادی طور پر
ہے چلاتے ہیں، تاکہ آپ کے پروگرام چلاتے کیا گیا
کو یاد ہوگا کہ تقریب تقریب، تقریب کی تقریب ہو جاتا ہے.
یہ تمام فریم میموری پر ڈال دیا، جاتے اور پھر ان افعال کی واپسی،
اور میں ویسے ہی جیسے صافی ان کی یاد آخر میں reused ہے کے ساتھ کی تجویز دی.
ٹھیک ہے، یہ صرف اس پروگرام میں کہ یہ متغیر x ہوتا ہے
134514032 کی طرح کچھ ردی کی ٹوکری کی قیمت موجود ہے لگتا ہے
کچھ گزشتہ تقریب سے ایک نہیں ہے کہ میں نے لکھا ہے.
یہ کچھ ہو سکتا ہے جو آپریٹنگ سسٹم کے ساتھ مؤثر طریقے سے آتا ہے،
ہڈ کے نیچے کچھ فنکشن ہے.
>> ٹھیک ہے، یہ ٹھیک ہے، لیکن اب اگلی لائن کو ترقی.
اگر میں اپنے GDB فوری میں "اگلے" ٹائپ کریں اور میں داخل مارا،
کہ نوٹس اقدامات 19 لائن کو اجاگر کرنے میں نیچے،
لیکن منطقی مطلب یہ ہے کہ 18 لائن ہے
اب ختم قتل، اگر ایسا ہے تو میں پھر سے ٹائپ کریں "پرنٹ X"
1 اب دیکھتے ہیں اور بے شک، میں کیا جانا چاہئے.
ایک بار پھر، سامان $ GDB آپ کو یاد دلانے کا ایک طریقہ ہے
پرنٹس کی تاریخ ہے کہ تم نے کیا ہے.
اب مجھے آگے بڑھو اور Y کو پرنٹ ہے، اور یقینا، Y کوئی پاگل قدر بھی ہے،
لیکن کوئی بڑی بات نہیں ہے کیونکہ ہم نے 19 سطر میں اسے تفویض کرنے ہیں
2 قدر تو مجھے "اگلے" ٹائپ کریں.
اور اب ہم printf لائن پر ہیں.
آپ کے وزٹرز کا ریکارڈ رکھا پرنٹ ایکس.
آپ کے وزٹرز کا ریکارڈ رکھا پرنٹ Y کرتے ہیں. سچ کہوں تو، میں اس پرنٹنگ کے تھوڑی تکی ہو رہا ہوں.
مجھے بجائے "ڈسپلے X" اور "ڈسپلے Y" ٹائپ کریں
اور اب ہر وقت میں مستقبل میں ایک کمانڈ ٹائپ
میں کیا ہے یاد دلایا جائے گا X اور Y، کیا ہے X اور Y، X اور Y کی ہے.
>> میں بھی، میں ایک طرف کی قسم، کے طور پر "کی معلومات کے مقامی لوگوں" کر سکتے ہیں.
معلومات ایک خصوصی حکم ہے.
مقامی لوگوں کا مطلب ہے کہ آپ کے وزٹرز کا ریکارڈ رکھا مقامی متغیرات کو ظاہر کرتا ہے.
کے معاملے میں یہ ایک پاگل، پیچیدہ کام ہے بھول
کہ میں نے یا کسی اور نے لکھا معلومات مقامی لوگ آپ کو بتائیں گے
سب کیا اس مقامی تقریب کے اندر مقامی متغیر ہیں
ہے کہ آپ کو اگر آپ کے ارد گرد ڑکیلنا کرنا چاہتے ہیں کے بارے میں دیکھ بھال کر سکتے ہیں.
اب printf پھانسی کے بارے میں، تو مجھے آگے اور صرف کی قسم "اگلا".
کیونکہ ہم اس ماحول میں ہو ہم یہ اصل میں نہیں دیکھ رہے ہیں
یہاں پھانسی، لیکن محسوس یہ تھوڑا mangled ہو رہا ہے یہاں.
نوٹس لیکن یہ سکرین زیرکر رہا ہے،
تو یہ ایک کامل پروگرام نہیں ہے، لیکن وہ ٹھیک ہے کیونکہ میں کے ارد گرد ہمیشہ پرہار کر سکتے ہیں
پرنٹ کا استعمال کرتے ہوئے اگر میں چاہتا ہوں.
>> مجھے اگلے دوبارہ ٹائپ کریں، اور اب یہاں دلچسپ حصہ ہے.
کہانی میں اس وقت Y 2 ہے، اور ایکس 1 ہے،
کے طور پر یہاں کا مشورہ دیا، بار،
وجہ ہے اب یہ خود کار طریقے سے کی نمائش ہے ہے کیونکہ میں کمانڈ کا استعمال کیا
ڈسپلے x اور ڈسپلے Y، تو لمحے میں اگلے ٹائپ
نظریہ X اور Y میں تبدیل ہونا چاہئے.
اب، ہم نے پہلے سے ہی جانتے ہیں کہ معاملہ نہیں ہے،
لیکن ہم ایک پل میں یہ دیکھنے کی ضرورت ہے کہ ہم کس طرح گہری ڈوبکی باہر کیوں یہ سچ ہے اعداد و شمار کر سکتے ہیں کریں گے.
Y اگلا، اور بدقسمتی سے، اب بھی 2 ہے اور ایکس اب بھی 1 ہے، اور میں زیادہ سے زیادہ اس بات کی تصدیق کر سکتے ہیں.
پرنٹ X، پرنٹ Y.
بے شک، گماگمن نہیں اصل میں ہوا ہے، تو چلو اس سے شروع.
واضح طور پر سویپ ٹوٹ گیا ہے.
کی بجائے "رن" دوبارہ ٹائپ کریں.
آپ کے وزٹرز کا ریکارڈ رکھا ہاں کہہ دو، میں اسے شروع سے دوبارہ شروع کرنے کے کرنا چاہتے ہیں، درج کریں.
>> اب میں واپس 18 لائن پر ہوں.
اب نوٹس X اور Y ردی کی ٹوکری اقدار کو دوبارہ.
اگلا، اگلے، اگلے، اگلے.
اگر میں ؤب میں اگلے کے لئے صرف بھی N ٹائپ کر سکتے ہیں.
تم نے یہ حروف کے ممکنہ کم سے کم ترتیب abbreviate کر سکتے ہیں.
سویپ اب ٹوٹ گیا ہے.
میں ڈوبکی چلو اگلے ٹائپ کرنے کے بجائے، تو
اب میں قدم ٹائپ جا تا کہ میں اس تقریب کے اندر نکلنے رہا ہوں رہا ہوں
تاکہ تاکہ میں اس کے ذریعے چل کر سکتے ہیں، میں نے قدم مارا اور اس کے بعد میں داخل ہے.
کہ اجاگر چھلانگ نیچے اپنے پروگرام میں 36 لائن پر کم نوٹس.
اب کیا مقامی متغیر ہیں؟
معلومات مقامی لوگوں.
ابھی تک کچھ بھی نہیں ہے کیونکہ ہم اس لائن کو نہیں ملا ہے،
تو آگے بڑھیں اور کا کہنا ہے کہ "اگلے"
اب ہم tmp، پرنٹ tmp لگ رہے ہو.
ردی کی ٹوکری کی قیمت، ہے نا؟ مجھے ایسا لگتا ہے.
کے بارے میں، پرنٹ ب، 1 اور 2 کس طرح پرنٹ؟
ایک لمحے میں، جیسے ہی میں اگلے پھر ٹائپ
tmp 1 کی قیمت پر لے، امید کی جا رہی ہے،
کیونکہ tmp کی قدر تفویض کیا جا رہا ہے.
>> اب چلو، پرنٹ ب پرنٹ کروں،
لیکن اب tmp پرنٹ کریں، اور یہ واقعی 1 ہے.
مجھے آگے کیا کرنا ہے. مجھے آگے کیا کرنا ہے.
میں نے سویپ تقریب ختم ہو گیا ہے.
، میں اب بھی ہوں اوپر 40 میں اس کے اندر ہے، تو مجھے ایک پرنٹ
پرنٹ، B، اور مجھے پرواہ نہیں ہے کہ tmp ہے.
ایسا لگتا ہے جیسے سویپ صحیح ہے جب وہ ایک بی اور گماگمن آتا ہے.
لیکن اگر اب میں اگلے ٹائپ کریں، میں 25 لائن پر واپس کود،
اور ظاہر کی، اگر X اور پرنٹ Y میں قسم
وہ اب بھی کوئی تبدیلی نہیں ہو، تو ہم اس مسئلے کو مقرر نہیں کیا ہے.
لیکن diagnostically اب شاید اس GDB پروگرام کے ساتھ
ہم کم از کم ایک قدم تفہیم کے قریب ہو گیا ہے
کوڑا کرکٹ کو ایک printf یہاں رکھ کر ہمارے کوڈ کے بغیر کیا غلط ہو رہا ہے،
، printf printf یہاں یہاں اور پھر اسے بار بار چلانے
اعداد و شمار کیا غلط ہو رہا ہے کی کوشش کر رہے ہیں.
>> میں آگے بڑھو اور اس سے باہر کے ساتھ چھوڑ چھوڑ مکمل طور پر جا رہا ہوں.
اس کے بعد یہ کہنا جا رہا ہے، "ویسے بھی نظر انداز؟" جی ہاں.
اب میں میرے نارمل فوری طور پر واپس آ گیا ہوں، اور میں نے GDB کا استعمال کرتے ہوئے کیا کر رہا ہوں،.
ایک طرف ایک کے طور پر، آپ کو اس TUI پرچم کو استعمال کرنے کے لئے کی ضرورت نہیں ہے.
اصل میں، اگر آپ اسے ترک تو آپ بنیادی طور پر سکرین کے نیچے نصف ملتا ہے.
اگر میں پھر وقفے کے اہم اور پھر ٹائپ چلانے
میں اب بھی اپنے پروگرام چلانے، لیکن کر سکتے ہیں کیا یہ کروں گا textually ہے
کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے ایک وقت میں موجودہ لائن ایک دکھائیں.
TUI، متن یوزر انٹرفیس،
صرف آپ کو دکھاتا ہے ایک بار، جو شاید تھوڑا conceptually آسان ہے میں پروگرام کا ہے.
لیکن یقینا، میں صرف اگلے، اگلے، اگلے کر سکتے ہیں،
اور میں ایک وقت میں ایک ہی لائن میں دیکھنا رہا ہوں اور اگر میں واقعی میں کیا ہو رہا ہے دیکھ کر کرنا چاہتے ہیں
میں فہرست ٹائپ کریں اور ہمسایہ لائنز کی ایک پوری چڑھانے دیکھ سکتے ہیں.
>> ایک ویڈیو ہے کہ ہم نے کہا کہ آپ کو دیکھنے کے لئے مسئلہ 3 کا تعین کرتا ہے ہے ہے
جس میں نیٹ GDB کی پیچیدگیوں میں سے کچھ کا احاطہ کرتا ہے،
اور یہ ان چیزوں میں سے ایک ہے، سچ میں، جہاں کہیں تم میں سے کچھ فی صد غیر معمولی
GDB چھو نہیں کرے گا، اور ہے کہ ایک بری بات ہو جائے گا
کیونکہ لفظی آپ زیادہ وقت اس سمسٹر بعد میں خرچ
نیچے کیڑے پیچھا تو آپ اگر آپ کہ آدھے گھنٹے / گھنٹے میں ڈال دیں گے
اس ہفتے اور اگلے سیکھنے GDB کے ساتھ آرام دہ اور پرسکون حاصل کرنے کے لئے.
Printf تمہارا دوست تھا.
GDB آپ کے دوست کا ہونا چاہئے.
>> GDB پر میں آپ کا کوئی سوال ہے؟
اور یہاں سب سے زیادہ طاقتور اور مفید کمانڈز میں سے بعض ایک فوری فہرست ہے.
جی ہاں. >> آپ کو ایک تار پرنٹ کر سکتے ہیں؟
آپ کو ایک اسٹرنگ کو پرنٹ کر سکتے ہیں؟ بالکل.
یہ صرف integers بننے کی ضرورت نہیں ہے.
اگر ایک متغیر S میں صرف پرنٹ S ٹائپ سٹرنگ ہے.
سٹرنگ متغیر ہے کہ وہ کیا ہوتا ہے پر یہ آپ کو دکھاتا ہوں.
[اشراوی طالب]
یہ آپ کو پتہ اور سٹرنگ خود دے گا.
یہ تم دونوں کو دکھایا جائے گا.
اور ایک آخری بات، صرف اس لئے کہ یہ بھی جاننا اچھی ہیں.
Backtrace اور فریم کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے یہ ایک آخری بار میں کودو،
GDB کے ساتھ ایک ہی عین مطابق پروگرام.
مجھے آگے بڑھو اور متن صارف انٹرفیس ورژن چلائیں
مرکزی توڑ.
مجھے جاؤ اور دوبارہ چلائیں. میں یہاں ہوں.
اب مجھے اگلے، اگلے، اگلے، اگلے، اگلے جانا، قدم درج کریں.
>> اور اب لگتا ہے اب میں سویپ میں جان بوجھ کر رہا ہوں، لیکن میں ہی ہوں "وفف، X کی قدر کیا تھا؟"
میں ایکس اور نہیں کر سکتا.
میں Y نہیں کیونکہ وہ گنجائش میں نہیں ہو سکتا ہے.
وہ سیاق و سباق میں نہیں ہیں، لیکن کوئی مسئلہ نہیں ہے.
میں backtrace کو ٹائپ کر سکتے ہیں.
اس کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے افعال ہے کہ اس وقت تک پھانسی ہے ظاہر کرتا ہے.
کہ نوٹس مرکزی کے ساتھ نیچے ایک، اہم، لائنز
ہماری تصویر کے سب سے نیچے دیئے یہاں ہے.
حقیقت یہ ہے کہ سویپ لائنوں اس سے اوپر سویپ کی یاد میں اس کے اوپر یہاں کیا جا رہا ہے کے ساتھ ہے اپ،
اور اگر میں اہم واپس عارضی طور پر حاصل کرنا چاہتے ہیں میں کہتا ہوں "فریم." کر سکتے ہیں
کیا نمبر؟ مین فریم # 1 ہے.
میں آگے بڑھو اور کہنے جا رہا ہوں "فریم 1."
>> اب میں اہم واپس آ گیا ہوں، اور میں ایکس پرنٹ کر سکتے ہیں، اور میں Y کو پرنٹ کر سکتے ہیں،
لیکن میں نے ایک ب یا پرنٹ نہیں کر سکتے ہیں.
لیکن میں اگر میں کہتا ہوں تو کر سکتے ہیں "ٹھیک ہے، ایک منٹ انتظار کہاں سویپ تھا؟"
مجھے آگے جاؤ اور کہتے ہیں "فریم 0."
اب میں واپس آ گیا ہوں جہاں مجھے ہونا چاہتے ہیں، اور ایک طرف ایک،
دیگر احکام بھی ہے، کی طرح اگر آپ واقعی بور ٹائپنگ اگلے، اگلے، اگلے، اگلے ہو رہی ہے،
آپ کی طرح چیزوں کو عام طور پر "اگلے 10" کہنا ہے کہ اگلے 10 لائنیں کے ذریعے قدم کر سکتے ہیں.
تم نے بھی جب آپ واقعی اس کے ذریعے نکلنے سے تنگ آ چکے ہو "جاری رکھیں" لکھ سکتے ہیں.
چلانے کے آپ کے پروگرام کو بغیر کسی رکاوٹ کے جاری جب تک یہ ایک اور توڑ مقام اختیار کرنے،
چاہے یا ایک لوپ میں آپ کے پروگرام میں کم ہیں.
>> اس معاملے میں ہم آخر تک جاری ہے، اور پروگرام عام طور پر باہر ہو.
یہ ایک پسند ہیں راستہ، کمتر عمل ہے.
صرف آپ کے پروگرام عام طور پر باہر ہو گیا تھا.
ویڈیو میں اور سیشن بگ آنے میں اس پر مزید.
یہ ایک بہت تھا.
چلو ہمارے یہاں 5 منٹ کے وقفے لے، اور ہم structs اور فائلوں کے ساتھ واپس کر دیں گے.
>> اگر آپ پہلے ہی اس ہفتے کی pset میں dived ہے
آپ کو معلوم ہے کہ ہم تقسیم کے کوڈ میں استعمال کریں گے،
منبع کوڈ ہے کہ ہم ایک نقطہ اغاز، کچھ نئی تکنیک کے طور پر آپ کو فراہم کی.
خاص طور پر، ہم ڈھانچے کے لئے نامی اس نئے struct مطلوبہ الفاظ شروع کی،
تاکہ ہم قسم کی اپنی مرضی کے مطابق متغیر بنا سکتے ہیں.
ہم نے بھی فائل I / O، فائل ان پٹ اور پیداوار کا تصور متعارف کرایا،
اور یہ ہے تا کہ ہم ریاست کو بچا سکتے ہیں
آپ کے جدوجہد کی بورڈ کے ڈسک پر فائل
تعلیم کے ساتھیوں اور میں تو یہ سمجھ سکتے ہیں
دستی طور پر ادا کرنے کے لئے بغیر آپ کے پروگرام کے اندر جا رہا ہے
جدوجہد کے کھیل کے درجنوں.
ہم اس سے زیادہ automatedly کر سکتے ہیں.
>> ایک struct کا یہ خیال کافی مجبور مسئلہ حل کرتی ہے.
لگتا ہے کہ ہم کچھ پروگرام کو لاگو کرنے کے لئے کرنا چاہتے ہیں
جو کسی نہ کسی طرح طالب علموں کے بارے میں معلومات کے ٹریک رکھتا ہے،
اور طلبہ ہے، مثال کے طور پر، ایک ID، ایک کا نام ہو سکتا ہے
اور ہارورڈ جیسی جگہ پر ایک گھر ہے، تو یہ معلومات کے 3 ٹکڑے ہیں
، ہم ارد گرد رکھنے کے لئے چاہتے ہیں، تو آپ کے وزٹرز کا ریکارڈ رکھا آگے بڑھیں اور ایک چھوٹا سا پروگرام یہاں لکھنا شروع
stdio.h شامل ہیں.
مجھے cs50.h. شامل
اور پھر اپنے بنیادی کام شروع.
میں کسی بھی کمانڈ لائن کے دلائل کے ساتھ پریشان نہیں کرے گا،
اور یہاں میں ایک طالب علم ہے چاہتے ہیں، تو میں کہنے جا رہا ہوں
ایک طالب علم کو ایک کا نام ہے، تو میں کہنے جا رہا ہوں "سٹرنگ کا نام ہے."
پھر میں کہنے کا ایک طالب علم بھی ایک ID ہے، تو int کی شناخت کرنے جا رہا ہوں،
اور ایک طالب علم ایک گھر ہے، تو میں بھی کہنے جا رہا ہوں "سٹرنگ گھر."
اس کے بعد میں یہ کچھ اس طرح cleanly آرڈر دونگا.
ٹھیک ہے، اب میں جس کے ساتھ ایک طالب علم کی نمائندگی کرنے کے لیے 3 متغیر ہے، تو "ایک طالب علم ہے."
>> اور اب میں ان اقدار کو آباد کرنا چاہتے ہیں، تو آپ کے وزٹرز کا ریکارڈ رکھا آگے بڑھیں اور کا کہنا ہے کہ جیسے کچھ
"ID = 123".
نام David حاصل کرنے کے لئے کی جا رہی ہے.
چلو کا کہنا ہے کہ گھر Mather حاصل کرنے کے لئے کی جا رہی ہے،
اور پھر میں منمانے printf طرح کچھ کرنا (زبانیں "٪ رہا ہوں،
جن ID٪ د ہے،٪ s کو میں رہتا ہے.
اور اب، کیا میں یہاں ہونا چاہتے ہیں، ایک کے بعد ایک ہے؟
نام، شناخت، گھر،؛ واپسی 0.
ٹھیک ہے، جب تک میں یہیں کہیں خراب
مجھے لگتا ہے کہ ہم نے ایک بہت اچھا پروگرام ہے کہ ایک طالب علم ذخیرہ ہے.
بالکل، یہ سب دلچسپ ہے کہ نہیں ہے. کیا ہوگا اگر میں 2 طالب علموں کرنا چاہتے ہیں؟
یہ کوئی بڑی بات نہیں ہے. میں 2 افراد کی حمایت کر سکتے ہیں.
مجھے آگے بڑھو اور اس کو نمایاں کریں اور یہاں نیچے جاؤ،
اور میں روب کے جیسا کوئی ہے جو Kirkland کے میں رہتا ہے کے لئے میں کیا کہنا "ID 456 =" کر سکتے ہیں.
>> ٹھیک ہے، انتظار، لیکن میں یہ ایک ہی بات نہیں کہہ سکتے،
اور ایسا لگتا ہے کہ میں اس کی کاپی کرنے کے لئے جا رہا ہوں،
تو مجھ سے کہتے ہیں کہ یہ ڈیوڈ متغیر ہو جائے گا،
اور کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے روب کے لیے ان میں سے کچھ کاپیاں حاصل ہے.
ہم ان روب کال کریں گے لیکن یہ کام نہیں ہے
کیونکہ مجھے انتظار ہے، آپ کے وزٹرز کا ریکارڈ رکھا id1 پر تبدیل کرنے کے لئے، NAME1 اور house1.
روب 2، 2 گا.
مجھے یہ یہاں، یہاں، یہاں، یہاں، یہاں، کو تبدیل کرنے کی ہے.
روکو، ٹومی کے بارے میں کیا خیال ہے؟ چلو، یہ پھر سے کرتے ہیں.
ظاہر ہے اگر آپ اب بھی لگتا ہے کہ یہ ایسا کرنے کا ایک اچھا طریقہ ہے، ایسا نہیں ہے،
تو / برے کو کاپی اور پیسٹ کریں.
لیکن ہم اس ایک ہفتے پہلے حل.
>> ہمارے حل کیا تھا جب ہم ایک ہی ڈیٹا کی قسم کی ایک سے زیادہ مثالیں چاہتا تھا؟
[طلباء] ایک صف.
ایک صف، تو مجھے اس اپ کو صاف کرنے کی کوشش کریں.
کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے سب سے اوپر خود کے لئے کچھ کمرے، اور مجھے بجائے یہ یہاں کیا ہے.
ہم ان لوگوں کو فون کے بجائے اور میں کہنے جا رہا "int شناخت" ہوں
اور میں اب کے لئے ہم میں سے 3 کی حمایت کرنے جا رہا ہوں.
میں "سٹرنگ کا نام" کا کہنا ہے کہ اور میں ہم میں سے 3 کی حمایت کریں گے جا رہا ہوں،
اور پھر میں "سٹرنگ گھروں،" کہنا اور میں ہم میں سے 3 کی حمایت کرنے جا رہا ہوں میں جا رہا ہوں.
اب داؤد نے اپنے اپنے مقامی متغیر حاصل کرنے کی بجائے یہاں
ہم نے ان میں سے چھٹکارا حاصل کر سکتے ہیں.
یہ اچھی بات ہے کہ ہم اس تک صفائی کر رہے ہیں محسوس ہوتا ہے.
میں اس وقت داؤد [0] نام اور [0] جا رہا ہے کہہ سکتے ہیں
اور گھروں [0].
اور پھر لوٹتے ہیں ہم اس پر اسی طرح محفوظ کر سکتے ہیں.
یہ یہاں ذیل ڈال دو، تو وہ منمانے [1] شناخت ہو رہا ہے.
وہ کے نام ہونے جا رہا ہے [1]،
اور پھر آخر میں، گھروں [1].
>> اب بھی ایک چھوٹی سی تکاؤ ہے، اور اب مجھے یہ معلوم کرنا ہے،
تو چلو کا کہنا ہے کہ "کے نام [0]، ID [0]، گھروں، [0]
اور اس pluralize.
شناخت، آئی ڈیز، آئی ڈیز.
اور پھر، میں کر رہا ہوں، تو پھر، میں نے پہلے ہی / کاپی دوبارہ پیسٹ کا سہارا رہا ہوں،
اتنی مشکلات کا ایک حل ہے.
مجھے یہ شاید مزید اس طرح ایک لوپ یا کچھ اور کے ساتھ صاف کر سکتے ہیں،
مختصر میں، یہ تھوڑا بہتر ہے لیکن پھر بھی جیسا لگتا ہے
I / کاپی پیسٹ کا سہارا رہا ہوں، لیکن یہ بھی، میں دعوی کرتے ہیں،
واقعی بنیادی طور پر درست حل نہیں ہے کیونکہ
کیا ہوگا اگر کچھ دیر ہم فیصلہ تم کیا جانتے ہو؟
ہم واقعی کیا جانا چاہئے داؤد اور روب کے لئے ای میل ایڈریس ذخیرہ کرنے
اور اس پروگرام میں ہر کسی کے.
ہم نے فون نمبر بھی محفوظ چاہئے.
ہم ہنگامی رابطہ نمبر بھی محفوظ چاہئے.
ہم ڈیٹا کی ان تمام ٹکڑے ٹکڑے ہیں کہ ہم پر محفوظ کرنا چاہتے ہیں ہیں،
تو آپ اس فعل کے بارے میں کیسے جا سکتا ہوں؟
>> آپ کو سب سے اوپر ایک صف کا اعلان، اور اس وقت آپ کو دستی طور پر شامل ہیں
ایک ای میل ایڈریس [0]، ای میل [1] ایڈریس
داؤد اور روب کے لئے اور وغیرہ.
لیکن وہاں واقعی صرف ایک بنیادی مفروضہ یہ ڈیزائن
کہ میں غیرت کے نام پر نظام کا استعمال کرتے ہوئے یہ جاننے کی
[میں] کئی arrays میں سے ہر ایک میں
صرف ایک ہی شخص کا حوالہ ہوتا ہے،
تو [0] آئی ڈیز میں 123 نمبر ہے،
اور میں اس کے ناموں فرض جا رہا ہوں [0]
ہے ایک ہی شخص کا نام اور گھروں [0]
مختلف arrays میں سے پیدا میں سے سب کے لئے ایک ہی شخص کے گھر اور وغیرہ ہے.
نوٹس لیکن اس سے کوئی بنیادی تعلق ہے
، معلومات، شناخت، نام، اور گھر کے ان 3 ٹکڑے ٹکڑے میں
اگرچہ وجود ہم اس پروگرام میں ماڈل کرنے کی کوشش کر رہے ہیں arrays نہیں ہے.
Arrays ایسا کرنے کی صرف اس پروگرام طرح ہیں.
کیا ہم واقعی میں ہمارے پروگرام میں ماڈل چاہتے ہیں ایک آدمی ہے
ڈیوڈ، جس کے اندر روب جیسے شخص کی طرح
یا encapsulating نام اور ID اور ایک گھر ہے.
>> کسی نہ کسی طرح ہم encapsulation کے اس خیال کا اظہار کر سکتے ہیں
ایک شخص کو ایک ID، ایک کا نام اور ایک گھر جس ہے
واقعی یہ ہیک سہارا نہیں جس کے تحت ہم
کہ بریکٹ پر بھروسہ کچھ
ان اسمان arrays میں سے ہر ایک میں ایک ہی انسانی وجود سے مراد؟
ہم یہ اصل میں کیا کر سکتے ہیں.
چلو، میرے اوپر اب اہم جاتے ہیں، اور مجھے میرے اپنے ڈیٹا کی قسم
کے لئے واقعی میں پہلی بار ہے.
ہم نے جدوجہد میں اس ٹیکنالوجی کا استعمال کیا ہے،
لیکن یہاں مجھے آگے جانا ہے اور ایک ڈیٹا کی قسم بنانے جا رہا ہوں
اور آپ کو پتہ ہے کیا، میں اس طالب علم یا شخص کو فون کرنے جا رہا ہوں،
اور میں typedef کے لئے ایک قسم کی وضاحت کرنے کے لئے استعمال کی جا رہی ہوں.
میں کہتا ہوں کہ یہ ایک ساخت ہے جا رہا ہوں،
اور اس کے بعد اس ڈھانچے قسم طالب علم کے، ہم کہیں گے، جا رہا ہے،
اگرچہ یہ ایک میرے لئے اب ء تھوڑا ہے.
ہم کہتے ہیں "int ID" گے.
ہم کہتے ہیں "سٹرنگ کا نام ہے." گے
پھر ہم "STRING گھر،" کہیں گے
تو اب کوڈ کی ان چند لائنوں کے آخر تک
میں صرف بجنا سکھایا ہے کہ وہاں موجود ہے
ints کے علاوہ ڈور کے علاوہ ڈیٹا، قسم، کے علاوہ floats کے علاوہ ڈبلز.
>> وقت 11 سطر میں اس وقت تک، اب ایک نئے اعداد و شمار میں کہا جاتا طالب علموں کی قسم
اور اب میں ایک طالب علم متغیر کہیں کا اعلان کر سکتے ہیں میں چاہتا ہوں،
تو مجھے نیچے لوگوں کو سکرال یہاں.
اب میں اس سے چھٹکارا حاصل، اور میں واپس جانا داؤد سے کیا جا سکتا کر سکتے ہیں،
اور میں داؤد کے لئے ڈیوڈ کہ اصل میں کہہ سکتے ہیں،
ہم نے اپنے بعد متغیر لفظی نام کر سکتے ہیں،
قسم طالب علم کی ہو جائے گا.
یہ ایک چھوٹا سا عجیب لگ رہی ہو، لیکن یہ سب مختلف ہے کہ نہیں ہے
ایک int یا ایک تار یا فلوٹ کے طور پر کچھ اعلان سے.
یہ صرف اس لئے طالب علم سے ملاقات کی اب کیا گیا ہوتا ہے، تو
اور اگر میں اس ڈھانچے کے اندر کچھ کرنا چاہتے
اب میں نحو کے ایک نئے ٹکڑا استعمال کرنے کے لئے ہے، لیکن یہ بہت سیدھا ہے،
david.id = 123، david.name = دارالحکومت D میں "ڈیوڈ"،
اور david.house = "Mather،"
اور اب میں اس چیز سے چھٹکارا حاصل کر سکتے ہیں.
ہم اب کا نوٹس نے واقعی ایک بہت اچھا طریقہ میں ہمارے پروگرام ڈیزائن
اب اس میں ہمارے پروگرام حقیقی دنیا آئینہ.
>> ایک شخص یا ایک طالب علم کی ایک تصور حقیقی دنیا ہے.
اب ہم کسی شخص یا خاص طور پر ایک طالب علم کی ایک C ورژن ہے.
اس شخص کے اندر ان متعلقہ خصوصیات ہیں،
ID، نام، اور گھر، تو روب بنیادی طور پر ایک ہی بات یہاں نیچے ہو جاتا ہے،
طالب علم روب تو، اور اب 456 = rob.id
rob.name = "لوٹتے ہیں."
حقیقت یہ ہے کہ متغیر روب کہا جاتا ہے معنی کی طرح ہے.
ہم نے X یا Y یا Z فون کیا جا سکتا ہے.
ہم تو صرف نام semantically مسلسل لوٹتے،
لیکن واقعی نام کہ میدان ہی کے اندر ہے،
تو اب میں یہ ہے.
یہ بھی بہترین ڈیزائن ہے کہ میں مشکل ڈیوڈ کوڈت ہے کی طرح نہیں محسوس ہوتا ہے.
میں مشکل روب کوڈت ہے.
اور میں اب بھی کچھ نقل کا سہارا اور ہر وقت میں نئے متغیر کی ضرورت ہے چسپاں کر دیں ہیں.
اس کے علاوہ، میں بظاہر ان متغیرات میں سے ہر ایک کو نام دینا ہے،
اگرچہ میں ان متغیرات میں زیادہ بلکہ بیان تھا
generically کے طور پر طالب علموں کو.
>> اب ہم خیالات ہیں جو ہمارے لئے کام کر رہے ضم کر سکتے ہیں
اور اس کے بجائے، کا کہنا ہے کہ انہوں نے کہا کہ آپ کو پتہ ہے، آپ کے وزٹرز کا ریکارڈ رکھا متغیر نام نہاد طالب علموں دے،
دو اور اس کے 3 سائز کے ہیں، "تو اب میں اس کو مزید بہتر بنانے کر سکتے ہیں،
دستی طور پر اعلان کیا داؤد کے چھٹکارا حاصل،
اور میں طالب علموں کی طرح یہاں کچھ [0] بجائے کہہ سکتے ہیں.
میں طالب علم ہیں تو یہاں [0] کہہ سکتے ہیں،
طالب علموں کو یہاں، اور وغیرہ [0]، اور میں کے ارد گرد جا سکتے ہیں
اور یہ کہ روب کے لئے صاف.
میں اب شاید ایک لوپ شامل کرنے کے بارے میں بھی جا سکتے ہیں
اور GetString اور GetInt کا استعمال کرتے ہوئے اصل میں صارف سے ان اقدار کو حاصل ہے.
میں مسلسل شامل کرنے کے بارے کیونکہ یہ عام طور پر خراب پریکٹس ہے
مشکل کوڈ 3 کی طرح کچھ صوابدیدی یہیں تعداد
اور پھر صرف یاد ہے کہ تم اس میں 3 سے طالب علموں کو چاہیے.
یہ بہتر شاید # میری فائل کی سب سے اوپر دیئے گئے استعمال کی وضاحت ہو جائے گا
اور عنصر ہے کہ، تو یقینا ہم، آپ کے وزٹرز کا ریکارڈ رکھا آگے بڑھو اور اس سامانییکرن.
>> مجھے ایک مثال ہے کہ آج کے درمیان ہے کو کھولنے کے
پیشگی مثال کے طور پر، structs1.
یہ ایک سے زیادہ مکمل پروگرام کا استعمال کرتا ہے # یہاں وضاحت ہے
کا کہنا ہے کہ اور ہم ڈیفالٹ کی طرف سے 3 طالب علموں کو جا رہے ہیں.
میں یہاں کے طالب علموں کی ایک کلاس مالیت کا اعلان کر رہا ہوں،
تاکہ طالب علموں کی ایک کلاس روم، اور اب میں ایک لوپ کا استعمال کرتے ہوئے کر رہا ہوں
کوڈ تھوڑا زیادہ خوبصورت بنانے کے لئے، کلاس آباد
صارف کی ان پٹ کے ساتھ میں = 0 سے، تو طالب علموں کو، جو 3 iterate.
اور پھر میں نے اس ورژن میں صارف کو فوری طور پر
طالب علم کی ID کیا ہے، اور میں یہ GetInt کے ساتھ ملتا ہے.
طالب علم کا نام کیا ہے، اور میں تو اسے GetString کے ساتھ.
طالب علم کے گھر کیا ہے؟ میں یہ GetString کے ساتھ ملتا ہے.
اور پھر میں یہاں سب سے نیچے دیئے گئے کو تبدیل کرنے کا فیصلہ کیا ہے
کہ میں کس طرح یہ چھپائی باہر رہا ہوں اور واقعی میں ایک لوپ استعمال کرتے ہیں،
اور جو میں چھپائی رہا ہوں؟
تبصرے کے مطابق میں Mather میں کسی چھپائی رہا ہوں،
اور یہ کہ اس روب اور ٹومی تو اور اس بیان اصل میں ٹومی Mather میں ہے.
ٹومی اور داؤد نے اس معاملے میں طباعت گے، لیکن یہ کس طرح کام کر رہا ہے؟
ہم نے اس تقریب کو دیکھا نہیں پہلے، لیکن اس کا کیا اندازہ ہے.
ڈور کا آپس میں موازنہ.
>> یہ ایک چھوٹا سا غیر واضح ہے کہ یہ کس طرح ڈور کا موازنہ کرتی ہے کیونکہ اس سے پتہ چلتا ہے
اگر یہ 0 واپس اس کا مطلب ڈور برابر ہیں.
اگر یہ -1 واپس اس کا مطلب ہے کہ ایک دوسرے سے پہلے کی ترتیب حروف تہجی کے آتا ہے،
اور اگر یہ +1 واپس ترتیب حروف تہجی کے آتا ہے جو دوسرے لفظ کا مطلب ہے کہ
دوسری سے پہلے اور آپ کے آن لائن یا مرد صفحہ دیکھ سکتے ہیں
بالکل جس طرح ہے، لیکن اب یہ سب کر رہی ہے یہ ہے کہ یہ کہہ رہا ہے
اگر [میں] کے گھر. "Mather" کے برابر ہے
تو آگے بڑھو اور تو پرنٹ اور Mather میں ہے.
لیکن یہاں کچھ ہم نے دیکھا ہے اس سے پہلے نہیں کیا ہے، اور ہم اس کو واپس آ جائیں گے.
میں نے کبھی اپنے پروگراموں میں سے کسی ایک میں اس کو یاد نہیں ہے.
مفت بظاہر میموری کا حوالہ دیتے ہوئے ہے، میموری آزاد،
لیکن جو میموری میں بظاہر اس پروگرام کے سب سے نیچے دیئے گئے اس لوپ میں آزاد ہیں؟
ایسا لگتا ہے جیسے میں ایک شخص کا نام آزاد کر رہا ہوں
اور ایک شخص کے گھر، لیکن کیوں ہے؟
>> یہ ان تمام ہفتے پتہ چلا ہے کہ آپ کو ہے GetString کا استعمال کرتے ہوئے
ہم اس قسم کی ہے آپ کے پروگراموں کی ہر ایک میں ایک مسئلے سے متعارف کرانے.
ڈیزائن مختص میموری کی طرف سے GetString تا کہ یہ آپ کو ایک تار پر واپس جا سکتے ہیں،
کی طرح ڈیوڈ، یا روب، اور آپ تو جو کچھ بھی تم چاہتے ہو کر سکتے ہیں
کیونکہ ہم نے آپ کے لئے یاد محفوظ کر لیا ہے کہ آپ کے پروگرام میں سٹرنگ کے ساتھ.
مسئلہ اس وقت ہر وقت آپ GetString کہتے ہے
ہم، GetString کے مصنفین، کیا گیا ہے آپریٹنگ سسٹم پوچھ
ہمیں اس جملے کو RAM کے تھوڑا سا دے.
ہمیں اس اگلے سٹرنگ کے لئے RAM کے تھوڑا سا دے.
ہمیں یہ اگلے سٹرنگ کے لئے کے بارے میں مزید کچھ RAM دیجئے.
کیا، آپ پروگرامر کر، کیا گیا ہے کبھی نہیں
ہے ہمیں اس کی ياداشت واپس دے،
تو ان کئی ہفتوں کے لئے پروگراموں کے سب تم نے لکھا ہے
تھا جو ایک میموری چھلانگ کہا جاتا ہے جس میں وہ استعمال کرتے رہیں ہے
زیادہ سے زیادہ یاد ہر وقت آپ کہتے ہیں، GetString، اور وہ ٹھیک ہے.
ہم نے جان بوجھ کر پہلے ہفتوں میں ایسا کیونکہ یہ دلچسپ نہیں ہے
جہاں سٹرنگ سے آ رہا ہے اس کے بارے میں فکر کرنے کی ضرورت ہے.
آپ چاہتے ہیں لفظ واپس جب صارف اس قسم کے اندر آنے لوٹتے
>> لیکن آگے بڑھنے اب ہم اس کے بارے میں زیادہ بہتر ہوتا جا رہا شروع کرنے کے لئے ہے.
ہم کسی بھی وقت ہم میموری مختص بہتر آخر میں اسے واپس دے دو
دوسری صورت میں آپ اپنے میک یا پی سی پر حقیقی دنیا میں کبھی کبھار تجربہ کار ہو سکتا ہے
علامات جہاں آپ کے کمپیوٹر رک پیسنے بالآخر ہے
یا پاگل کتائی ساحل سمندر کی گیند صرف کمپیوٹر پر قبضہ کر رہا ہے
پوری توجہ اور آپ کچھ نہیں کر سکتے ہیں.
کیڑوں کی کسی بھی تعداد کی طرف سے سمجھایا جا سکتا ہے، لیکن ان ممکن کیڑے کے درمیان
کر رہے ہیں چیزوں کو میموری لیک کہا جاتا جس کے تحت کسی ایسے شخص سے ہے کہ سافٹ ویئر کی ٹکڑا لکھا
آپ کو مفت میموری یاد نہیں استعمال کر رہے ہیں
کہ وہ کام کے لئے نظام سے پوچھا،
GetString استعمال نہیں، کیونکہ اس میں اس کا ایک CS50 چیز ہے، لیکن اسی طرح کام کرتا ہے کا استعمال کرتے ہوئے
جو میموری کے لئے آپریٹنگ سسٹم سے دعا گو ہیں.
اگر آپ یا آپ کا وہ بگاڑ اور یہ کہ میموری اصل میں کبھی نہیں واپس
کی علامت ہوتی ہے کہ ہو سکتا ہے کہ ایک پروگرام سست اور سست اور سست کر سکتے ہیں
جب تک آپ کال مفت یاد ہے.
>> ہم واپس آنے کے لئے کب اور کیوں آپ کو مفت فون کریں گے کریں گے،
لیکن صرف اچھے کی پیمائش کے لئے آگے بڑھیں اور اس مخصوص پروگرام چلانے کی کوشش کریں.
یہ structs1 کہا گیا تھا، میں داخل ہے.
چلو آپ کے وزٹرز کا ریکارڈ رکھا آگے بڑھو اور structs1 چلانے، 123، ڈیوڈ Mather
456، روب Kirkland کے، 789،
ٹامی Mather، اور ہم Mather میں داؤد دیکھتے ہیں، ٹومی Mather میں.
یہ صرف ایک چھوٹا سا وویک چیک سے قبل بتایا کہ آج کا یہ پروگرام کام کر رہا ہے ہے.
، بدقسمتی سے، اب اس پروگرام تھوڑا اس میں نراشا ہے
مار میں وہ سب کام میں نے 9 مختلف ڈور میں ٹائپ ہے، درج کریں،
کیا گیا تھا کو بتایا کہ Mather میں کون تھا، پھر بھی ظاہر ہے میں جانتا تھا کہ جو Mather میں پہلے ہی تھا کیونکہ میں نے اسے ٹائپ.
یہ کم از کم اچھا ہوگا اگر یہ پروگرام ایک ڈیٹا بیس کی طرح ہے
اور یہ اصل میں یاد میں ٹائپ ہے
تو میں یہ طالب علم ریکارڈ ان پٹ کو دوبارہ کبھی نہیں ہے.
شاید یہ ایک registrarial نظام کی طرح ہے.
>> ہم یہ اس فائل میں / O، فائل ان پٹ اور آؤٹ پٹ کے طور پر جانا جاتا ہے کی ٹیکنالوجی کا استعمال کرتے ہوئے کر سکتے ہیں،
کسی بھی وقت آپ کو فائلوں کو پڑھنے کے لئے یا فائلوں کو لکھنے چاہتے ہیں کہہ کے ایک بہت عام طریقہ
آپ کے افعال میں سے ایک مخصوص سیٹ کے ساتھ یہ کر سکتے ہیں.
آپ کے وزٹرز کا ریکارڈ رکھا آگے بڑھو اور اس مثال structs2.c کھول دو،
جو کہ تقریبا ایک جیسی ہے، لیکن ہم دیکھتے ہیں اب یہ کیا ہے.
فائل کے سب سے اوپر دیئے گئے میں طالب علموں کے ایک طبقے کا اعلان.
اس وقت میں صارف کی ان پٹ کے ساتھ کلاس آباد،
کوڈ کا ان لائنوں بالکل پہلے کی طرح کر رہے ہیں.
اس کے بعد اگر میں یہاں ذیل میں سکرال میں پرنٹ ہر وہ شخص جو Mather میں ہے منمانے پہلے کی طرح،
لیکن یہ ایک دلچسپ نئی خصوصیت ہے.
کوڈ کی یہ لائنیں نئے ہیں، اور انہوں نے یہاں کچھ متعارف کرانے،
فائل، ٹوپیاں، اور اسے یہاں * ہے اس کے ساتھ ساتھ.
کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے یہاں یہ یہاں * اقدام کے طور پر اچھی طرح سے.
>> اس تقریب میں ہم نے دیکھا ہے اس سے پہلے نہیں کیا ہے،، fopen
، لیکن یہ فائل اوپن کا مطلب ہے ان کے ذریعے تو ملائی کرنا
اور یہ کچھ ہم مستقبل psets میں واپس آ جائیں گے،
لیکن یہ لائن یہاں بنیادی طور پر کے نام سے ڈیٹا بیس فائل کو کھولتا ہے،
اور یہ خاص طور پر یہ اس طرح ہے کہ یہ اس کے لئے کیا کر سکتے ہیں میں کھلتا ہے؟
[اشراوی طالب]
ٹھیک ہے، تو "W" صرف کا مطلب ہے کہ یہ آپریٹنگ سسٹم کہہ رہا ہے
اس طرح ہے کہ میں اس پر لکھ سکتے ہیں میں اس فائل کو کھولنے.
میں اس کو پڑھنے کے لئے نہیں کرنا چاہتا. میں صرف اس پر نظر نہیں کرنا چاہتا.
میں اسے تبدیل کرنے کے لئے اور چیزیں اس میں ممکنہ طور پر شامل کرنا چاہتے ہیں،
اور فائل ڈیٹا بیس کہا جا رہا ہے.
یہ کچھ کہا جا سکتا ہے.
یہ database.txt ہو سکتا ہے. یہ DB. ہو سکتا ہے.
یہ FOO کی طرح ایک لفظ، لیکن میں منمانے فائل میں ڈیٹا بیس کا نام کا انتخاب کیا ہے.
یہ ایک چھوٹا سا وویک چیک ہے کہ ہم وقت کے ساتھ بڑی تفصیل سے واپس آ جائیں گے،
اگر FP، فائل پوائنٹر کے لئے برابر نل نہیں کرتا اس کا مطلب ہے کہ سب کچھ ٹھیک ہے.
>> لمبی کہانی مختصر fopen طرح کام کرتا ہے کبھی کبھی ناکام.
شاید فائل موجود ہی نہیں ہے. شاید آپ ڈسک کی جگہ سے باہر ہیں.
ہو سکتا ہے آپ کو اس فولڈر کی اجازت نہیں ہے،
اگر ایسا ہے تو fopen شہوت انگیز null کچھ واپس برا ہوا.
اس کے برعکس، اگر fopen شہوت انگیز null واپس نہیں کرتا ہے سب کچھ ٹھیک ہے
اور میں نے اس ملف (فائل) سے لکھنا شروع کر سکتے ہیں.
یہاں ایک نئی چال ہے.
یہ ختم iterating اپنے شاگردوں میں سے ہر ایک کے لئے لوپ ہے،
اور اس کے جو ہم سے پہلے کیا ہے اسی طرح لگ رہا ہے،
لیکن اس تقریب کی کزن printf printf فائل کے لئے fprintf کہا جاتا ہے،
نوٹس اور یہ صرف 2 طریقوں سے مختلف ہے.
ایک، پی کے بجائے ایف کے ساتھ شروع ہوتا ہے،
لیکن تو اس کی پہلی دلیل بظاہر کیا ہے؟
[طلباء] فائل >> یہ ایک فائل ہے.
اسے کہتے ہیں FP بات ہے، جس پر ہم کے علاوہ آخر میں چڑھانا ایک فائل پوائنٹر کیا ہے.
لیکن اب FP صرف کہ میں کھولا ہے فائل کی نمائندگی کرتا ہے،
fprintf یہاں کہہ رہا ہے اس صارف کے فائل ID پرنٹ ہے، نہیں کی سکرین پر.
صارف فائل نام، سکرین پر، پرنٹ کریں،
فائل نہیں سکرین، اور پھر یہاں نیچے، ظاہر ہے گھر،
فائل بند کریں، اور پھر یہاں نیچے مفت میموری.
>> اس ورژن 2 اور 1 ورژن کے درمیان واحد فرق
fopen کا تعارف اور ستارے کی علامت * سے اس فائل ہے
اور fprintf کے اس تصور ہے، تو چلو دیکھتے ہیں کیا نتیجہ ہے.
کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے میرے ٹرمنل ونڈو میں جانے دو.
مجھے structs2 چلانے، درج کریں.
کی طرح سب کچھ ٹھیک ہے لگتا ہے. آو structs2 rerun.
123، ڈیوڈ Mather، 456، روب Kirkland کے،
789، ٹومی Mather درج کریں،.
جیسے یہ وہی سلوک کیا لگتا ہے، لیکن اگر میں اب LS کرتے
محسوس کیا فائل یہاں اپنے تمام کوڈ کے درمیان میں ہے، ڈیٹا بیس
تو اس کے کہ، دیکھو ڈیٹا بیس کے gedit، اور کھولنے کے.
یہ فائل کی شکل کی sexiest نہیں ہے.
یہ واقعی فی سطر لائن کے مطابق ڈیٹا کی لائن کی ایک ٹکڑا ہے،
لیکن تم میں سے ان لوگوں کو، جو ایکسل یا CSV فائلوں کا استعمال کرتے ہیں کوما اقدار الگ،
میں اس بات کو یقینی طور سے fprintf استعمال کیا ہو سکتا ہے بجائے شاید اس طرح کچھ کرنا
تاکہ میں ایک ایکسل فائل کی برابر اصل میں بنا سکتے ہیں
کی علامت، نہ صرف نئی لائنوں کے ساتھ چیزوں کو الگ کر کے.
>> اس صورت میں اگر میں بجائے کی بجائے کوما نئی لائنوں کا استعمال کیا تھا
میں ایکسل میں یہ ڈیٹا بیس فائل لفظی کھولنے اگر بجائے میں نے اسے اس طرح نظر آئے.
مختصر میں، اب کہ ہم فائلوں کو لکھنے کا اختیار ہے
اب ہم نے اصرار ڈیٹا، یہ ڈسک پر رکھنے کے ارد گرد شروع کر سکتے ہیں
تاکہ ہم کے ارد گرد کی معلومات کو بار بار رکھ سکتے ہیں.
دیگر چیزیں جو کہ اب تھوڑا زیادہ واقف ہیں کے ایک جوڑے کے نوٹس.
اس C فائل کی سب سے اوپر دیئے گئے ہم ایک typedef ہے
کیونکہ ہم ایک ڈیٹا کی قسم ہے جو ایک لفظ کی نمائندگی کرتا ہے بنانے کے لئے چاہتے تھے،
لہذا اس قسم لفظ کہا جاتا ہے، اور اندر اس ڈھانچے
یہ تھوڑا fancier ہے.
ایک لفظ بظاہر ایک صف سے کیوں بنایا ہے؟
ایک لفظ صرف intuitively کیا ہے؟
>> یہ حروف کے ایک صف ہے.
یہ حروف کی ترتیب کو واپس واپس، واپس.
ہم منمانے کا کہنا ہے کہ تمام بڑے حروف میں خط ہوتا ہے زیادہ سے زیادہ لمبائی
ڈکشنری ہے کہ ہم نے جدوجہد کے لئے استعمال کر رہے ہیں میں کسی بھی لفظ کے.
میں +1 کیوں ہے؟
شہوت انگیز null کردار.
یاد جب ہم Bananagrams مثال کے طور پر ہم نے ایک خاص قدر کی ضرورت ہے
لفظ کے آخر میں کے لئے ٹریک رکھنے کے لئے
جہاں الفاظ کے اصل میں ختم، اور مسئلہ سیٹ تفصیلات کا کہنا ہے کہ
یہاں ہم ایک دیئے گئے لفظ کے ساتھ منسلک ایک بولین قدر کر رہے ہیں،
ایک پرچم، تو، صحیح یا غلط بات ہے.
کیا تم نے یہ لفظ پہلے ہی پایا جاتا ہے، کیونکہ ہم ادراک میں
ہم واقعی یاد کا ایک طریقہ کی ضرورت ہے نہ صرف ایک لفظ جدوجہد میں ہے
لیکن چاہے یا نہیں آپ کو، انسانی، یہ مل گیا ہے
درج کریں تاکہ اگر آپ تلاش لفظ "" آپ نہ صرف ٹائپ کرسکتے ہیں، درج کریں، درج کریں،
اور 3 پوائنٹس، 3 پوائنٹس، 3 پوائنٹس، 3 پوائنٹس حاصل کریں.
ہم bool قائم کرنے کی طرف سے اس لفظ سال کے قابل بننا چاہتا ہوں
سچ ہے اگر آپ کے پاس پہلے سے ہی یہ تلاش کر لیا ہے، اور تاکہ وجہ ہے ہم
اس ڈھانچے میں محفوظ ہے.
>> اب، یہاں ذیل جدوجہد میں نامی یہ دوسری لغت struct ہے.
یہاں غائب لفظ ہے typedef کیونکہ اس صورت میں
ہم ایک ڈکشنری کے خیال encapsulate کرنے کی ضرورت ہے،
اور لغت میں الفاظ کی ایک پوری چڑھانے پر مشتمل ہے،
جیسا کہ اس صف کی طرف سے تقاضا، اور کس طرح ان الفاظ کے بہت سے ہیں
ٹھیک ہے، جو کچھ بھی نامی اس متغیر سائز کا کہنا ہے کہ.
لیکن ہم صرف ایک لغت کی ضرورت ہے.
ہم نے ایک ڈیٹا کہا جاتا لغت کی قسم کی ضرورت نہیں ہے.
ہمیں صرف ان میں سے ایک کی ضرورت ہے، تو اس C میں بدل جاتا ہے
کہ اگر آپ typedef کا کہنا ہے کہ نہیں ہے، آپ صرف struct کہتے ہیں، تو گھوبگھرالی منحنی خطوط وحدانی کے اندر
آپ اپنے متغیر ڈال، تو آپ کا نام ڈال.
یہ ایک متغیر کہا جاتا لغت اعلان ہے
ہے کہ اس طرح لگ رہا ہے.
کے برعکس، یہ لائنیں دوبارہ پریوست ڈیٹا کہا جاتا لفظ کی ساخت پیدا کر رہے ہیں
کہ آپ کی ایک سے زیادہ کاپیاں بنانے کے، جیسا کہ ہم نے پیدا کیا جا سکتا ہے
کے طالب علموں کی ایک سے زیادہ کاپیاں.
>> کیا اس بالآخر ہمیں کرنا دیتی ہے؟
مجھے واپس میں جانے، ہم کا کہنا ہے کہ آسان وقت سے، ایک آسان مثال کے طور پر،
اور آپ کے وزٹرز کا ریکارڈ رکھا کھول، ہم کا کہنا ہے کہ، compare1.c.
ہاتھ میں یہاں مسئلہ اصل میں واپس چھیل ہے
ایک تار کے پرت اور ان تربیت پہیوں لینے شروع
کیونکہ یہ کہ ایک تار اس وقت بدل جاتا ہے
کے طور پر ہم واقعی 1 ہفتے میں صرف ایک عرفیت کا وعدہ کیا ہے،
مترادف ہے، کچھ ہے جو تھوڑا خفیہ لگ رہا ہے کے لئے CS50 لائبریری سے
* چار، اور ہم نے یہ ستارہ پہلے دیکھا ہے.
ہم نے یہ فائلوں کے تناظر میں دیکھا ہے.
>> اب وجہ سے ہم نے کچھ وقت کے لئے اب اس تفصیل کو چھپا دو
نامی compare1.c فائل ہے،
اور یہ بظاہر 2 ڈور کے لئے صارف پوچھتے ہیں، اور ٹی
اور پھر یہ 26 سطر میں مساوات کے لئے ان ڈور موازنہ کرنے کی کوشش کرتا ہے،
اور اگر وہ برابر یہ کہتے ہیں کہ ہیں، "تم ایک ہی بات ٹائپ"
اور اگر وہ برابر نہیں ہو کا کہنا ہے کہ، "تم دونوں مختلف چیزیں ٹائپ."
آپ کے وزٹرز کا ریکارڈ رکھا آگے بڑھو اور اس پروگرام چلائیں.
کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے میرے ذریعہ ڈائریکٹری میں جانے دو، compare1 ہے. یہ ٹھیک مرتب کیا.
آپ کے وزٹرز کا ریکارڈ رکھا compare1 چلانے دو
میں زوم، میں داخل کریں گے.
کچھ تو کہو. خوش.
پھر مجھے کچھ کہیں گے. خوش.
میں یقینی طور پر مختلف چیزیں ٹائپ نہیں کیا.
>> مجھے یہ دوبارہ کوشش کریں. الوداع.
تو یقینی طور سے مختلف نہیں ہے، یہاں کیا ہو رہا ہے؟
ٹھیک ہے، کیا واقعی جا رہا ہے 26 لائن میں مقابلے؟
[اشراوی طالب]
جی ہاں، تو یہ پتہ چلا ہے کہ ایک سٹرنگ، ڈیٹا، قسم ایک سفید جھوٹ کی قسم ہے.
STRING نے ایک چار * ہے، لیکن ایک چار * کیا ہے؟
ایک چار *، جیسا کہ وہ کہتے ہیں، ایک پوائنٹر ہے،
اور پوائنٹر مؤثر طریقے سے ایک پتہ ہے،
یاد میں ایک رقم، محل وقوع، اور اگر آپ خوش طرح ایک لفظ میں ٹائپ ہے ہو،
تاروں کی ماضی کی بات چیت سے یاد
یہ لفظ کی طرح خوش ہے.
یاد رکھیں کہ خوش طرح ایک لفظ کی نمائندگی کر سکتے ہیں
اس طرح حروف کی ایک سرنی کے طور پر
اور پھر آخر میں ایک خاص کردار کے ساتھ شہوت انگیز null کردار قرار دیا،
\ کرنا.
کیا اصل میں ایک تار ہے؟
یاد رکھیں کہ یہ میموری کا ایک سے زیادہ مقدار ہے،
اور حقیقت میں، اس کے آخر صرف نام سے جانا جاتا ایک بار تم پوری سٹرنگ کے ذریعے دیکھو
خصوصی شہوت انگیز null کردار کی تلاش میں.
لیکن اگر یہ اپنے کمپیوٹر کی میموری سے میموری کا ایک حصہ ہے،
چلو منمانے کا کہنا ہے کہ ہے کہ اس جملے کو صرف خوش ہے،
اور یہ اپنے کمپیوٹر کی RAM کے آغاز میں رکھا گیا تھا.
یہ بائٹ 0، 1، 2، 3، 4، 5، 6 ...
>> جب میں GetString طرح کچھ کا کہنا ہے کہ اور میں سٹرنگ کے = GetString
کیا واقعی واپس کیا جا رہا ہے ہے؟
یہ گزشتہ کئی ہفتوں سے، واقعی کیا جا رہا ہے کے میں محفوظ
SE فی اس سٹرنگ نہیں ہے، لیکن اس صورت میں کیا ذخیرہ کیا جا رہا ہے ہے
اصل میں کیا GetString ہے کیونکہ تعداد 0
ہے یہ ایک تار جسمانی طور پر واپس نہیں کرتا ہے.
یہ واقعی تصوراتی بھی نہیں ہے مطلب.
کیا اس سے فرق پڑتا ہے کی واپسی ایک نمبر ہے.
یاد میں یہ تعداد خوش کا پتہ ہے،
اور کے تار تو، واپس چھیل اس پرت اگر ہم، سٹرنگ واقعی کوئی وجود نہیں ہے.
یہ صرف CS50 لائبریری میں ایک آسان بنانے کے ہے.
>> یہ واقعی جسے چار * کچھ ہے.
چار سمجھ میں آتا ہے اس لیے کہ ایک لفظ بھی خوش کی طرح ہے، ہے؟
ٹھیک ہے، یہ حروف کا ایک سلسلہ، حروف کا ایک سلسلہ ہے.
چار * ایک کردار کا پتہ ہے،
تو کیا یہ ایک تار واپس کرنے کا مطلب ہوتا ہے؟
ایک تار واپس لوٹنے کی ایک اچھی، آسان طریقہ
بجائے ہے کہ یہ اعداد و شمار پر کس طرح میں 5 یا 6 مختلف بائٹس پر واپس کرنے کی کوشش کریں
مجھے جو بائٹ ایڈریس پر واپس؟
سب سے پہلے ایک ہے.
دوسرے الفاظ میں، مجھے آپ کو یاد میں ایک کردار کا پتہ دے.
یہی ہے جو چار * کی نمائندگی کرتا ہے، ایک یاد میں ایک کردار کا پتہ ہے.
کہ متغیر S کو کال کریں.
کے میں سٹور ہے کہ خاص طور پر پتہ، جو میں نے منمانے نے کہا کہ 0 ہے،
صرف چیزوں کو آسان رکھنے کے لیکن حقیقت میں یہ عام طور پر ایک بڑی تعداد ہے.
>> ایک منٹ رکو.
اگر آپ کو صرف کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے پہلے کردار کی ایڈریس دے رہے ہیں، مجھے معلوم ہے کہ کس طرح کیا پتہ ہے
دوسری کردار کی، تیسری، چوتھی اور پانچویں؟
[اشراوی طالب]
آپ کو صرف اتنا پتہ ہے جہاں سٹرنگ کے اختتام اس ہاتھ ٹرک کی راہ کی طرف سے ہے،
تو جب تم سے کچھ کا استعمال کرتے ہیں printf طرح، printf لفظی اس کی دلیل کے طور پر لیتا ہے،
کو یاد ہوگا کہ ہم نے اس کے٪ پلیس ہولڈر کا استعمال کرتے ہیں، اور آپ کو تو گزر میں
متغیر ہے کہ ایک تار ذخیرہ کرنے.
کیا تم واقعی میں گزر رہے ہیں کہ سٹرنگ کے پہلے کردار کا پتہ ہے.
Printf تو جو پتہ حاصل کرنے صلی اللہ علیہ وسلم ایک لوپ یا دیر لوپ کے لئے استعمال کرتا ہے،
مثال کے طور پر، 0، تو مجھے یہ اب کیا،
printf ("٪ s ہے \ n" زبانیں)؛
جب میں کال printf ("٪ s ہے \ n" زبانیں)، کیا میں واقعی میں ساتھ printf رہا ہوں فراہم
کے میں پہلے کردار کی ایڈریس ہے، جس میں اس صوابدیدی صورت میں H. ہے ہے
>> printf بالکل وہی جو سکرین پر ظاہر کرنے کے لئے کس طرح پتہ ہے؟
جو شخص عملدرآمد printf لوپ کے لئے تھوڑی دیر لوپ یا کو لاگو
جو یہ کہتا ہے کہ یہ کردار خصوصی شہوت انگیز null کردار کے برابر ہے؟
اگر نہیں، تو یہ پرنٹ. کس طرح اس میں سے ایک کے بارے میں؟
اگر یہ نہیں پرنٹ، پرنٹ، پرنٹ پرنٹ.
اوہ، یہ ایک خاص بات ہے. پرنٹنگ بند کرو اور صارف کو واپس کریں.
اور یہ لفظی تمام ہڈ کے نیچے ہو رہا ہے،
اور یہ کہ ایک کلاس کے پہلے دن میں ہضم کرنا بہت ہے،
لیکن اب یہ واقعی میں تفہیم سب کچھ کی تعمیر بلاک ہے
جو ہمارے کمپیوٹر میموری کے اندر چل رہا ہے،
اور آخر کار ہم نے یہ ایک چھوٹی سی مدد کے ساتھ چڑھانے کے علاوہ ہوں گے
ہمارے دوستوں میں سے ایک سے سٹینفورڈ میں.
>> پروفیسر نک سٹینفورڈ میں Parlante یہ بہت اچھا ویڈیو ترتیب کیا ہے
مختلف زبانوں متعارف کرایا ہر طرح سے
یہ چھوٹا سا Claymation کردار Binky.
آواز کے بارے میں تم ہو، صرف چند دوسری چوری چھپے پیش منظر میں سن
سٹینفورڈ پروفیسر کی ہے، اور آپ کو ہو رہی ہے
یہ حق صرف 5 یا 6 پر اب،
لیکن اس بات کو نوٹ کیجیئے کی ہے آج جس پر ہم یہ نتیجہ اخذ کریں گے
اور بدھ کو شروع کرتے ہیں.
میں آپ Binky، پیش نظارہ کے ساتھ اشارہ تفریح ​​فراہم کرتے ہیں.
[♪ موسیقی ♪] [پروفیسر Parlante] ارے، Binky.
جاگو. یہ پوائنٹر تفریح ​​کے لئے وقت ہو گیا ہے.
[Binky] یہ کیا ہے؟ اشارہ کے بارے میں معلومات حاصل کریں؟
اوہ، واہ!
>> ہم آپ کو بدھ کو نظر آئے گا.
[CS50.TV]