 اسلام علیکم آج ہمارا 20th لیکچر ہے CS201 Introduction to Programming کا پچھلے دو لیکچر میں ہم نے فائل ہینڈلنگ کے اوپر بات کی سیکوانچل فائلز اور پھر رینڈم ایکسس فائلز اور ان کے ساتھ ہمارے پس فنکشنز اویلبل ہیں دیتا لکھنے اور پڑھنے کے لیے اور کچھ ان کے اوپر ہم نے پرگیمنگ ٹیکنیکس کی بھی بات کی کہ جی فائل کو بڑھانا گھٹانا کیسے پڑھتا ہے اور اسی بہت حکومت لیکنی کے لیے پڑھا جائے گا کہ اس کے لگیگ کے اوپر بھی سوچیں کہ جیویر فائل کو اولتے طریقے سے پڑھنا ہے یا درمیان میں جانا ہے کیسا ہے لیکن تک مکینیکس کے لگیگوں کیسے جو لیکنی کے لگیگ میں سوچیں گے آپ کو تک لگیگ کے لگیگ میں سوچیں گے آج کا ہمارا لیکچر جو ہے وہ کلوریز اور مجھے کے لگیگوں کے بارے میں ہے یہ سی لگیگ کے لگیگ کے لگیگ بھی ہے جیادر سی پلس پلس لنگوچ دیہا ہے ویرے سیمپر سیملہ رادہ اور اس کے اندر ہوگا کیا کہ جیسٹرکٹرز سے آگے ہم کلاسز کی طرف نکل جائیں گے اور آپ جانتے ہیں کہ وہ جیسٹرکٹرز جیسٹرکٹرز جیسٹرکٹرز ہم کس کو کہتے ہیں لیکن ہم ابھی تک بات کرتے ہیں جسی ہم سٹوڈنٹ دیتہ کی بات کرتے ہیں ہم کہتے ہیں کہ جیسٹوڈنٹ کا نام ہے پتہ ہے دیتہ بات ہے مبھی جیپیہ ہے مبھی کورسز جو لیرا ہے اور so and so forth ہم جو ہواہی ریلیٹی تک دیتے ہیں about one single entity a student for example سیملہلی آپ کیا کہ آپ کیا کہ آپ کیا کہ آپ کیا کہ اس کے موڈل ہے اس کا نام ہے اس کے کتنی سیٹیں ہیں کتنے پائیں ہیں اور آپ کیا کہ آپ کیا کہ آپ کے گاری میں ہواہی رہے ہیں اور so and so forth اور آپ کیا کہ آپ کیا کہ آپ کیا کہ آپ کیا کہ irgendwo جو اپنی بہت ہوتی ہے تو یہ شکرِ جمعہ ہے کہ ہم چھفٹ جانتے ہیں ابھی تاک آپ کو یاد ہوگا ہمارے پاس انٹ، فلوٹ، دبل، چار that was about 8 اسی کے ساتھ سارے ہم کام کرتے رہے ہیں اور ایک آپ دیکھ لیں کہ ایک سٹرکچر کو already آپ استعمال کر چکے ہیں جب ہم سٹرنگs کی بات کرتے تھے تو there was no data type called string ہم نے چار کی ڈے بنا کے اس کو سٹرنگ کے طور پہ استعمال کیا تھا اگر ہم نمبرز کی بات کریں تو I can give you a similar example سی یا سی پلس پلس کے اندر کامپلیکس نمبرز ہندل کرنے کی کوئی سلاحیت نہیں ہے یعنی دریکلی there is no data type which is کامپلیکس نمبر ایک لنگوچ ہے فورٹرین شاید آپ کو اس کا پتہ ہو formula translation وہ لکھی ہی گئی تھی scientific computation کیلئے تو اس میں کامپلیکس دیتا تاک موجود ہے تو آپ کہ سکتے ہیں کامپلیکس x so x is a variable of type complex اور اس کا ایک real part بھی ہوگا imaginary part بھی ہوگا یعنی آپ ایک two dimensional ڈیٹا جو ہے x اور y جو اس کے مطلب real اور imaginary اس کے حصے ہیں اس کو آپ استعمال کر سکتے ہیں complex number کے ساتھ فورٹرین لنگوچ میں c اور c++ میں کوئی ایسی چیز نہیں ہے لیکن اگر ہم simple arithmetic بھی کرنا چاہیں ایک میں آپ کو کہہ دوں کہ جی quadratic equation کو حل کر لیں تو quadratic equation کو حل کر دے بھی آپ کو پتہ ہے کہ جی اس کا انسر complex آ سکتا ہے یعنی اگر آپ کو کہیں پہ بھی square root of minus one لے نی پڑ گئی تو وہ لے تو ہم سکتے نہیں ہے تو ہم artificial ڈیٹاڈیوز کر دیتے ہیں ڈیٹا کا concept اور کہتے ہیں کہ جی اس نمبر کے دو حصے ہیں there is a real part and an imaginary part اور دونوں مل کے یہ ایک complex number بنتا ہے سو c اور c++ کے اندر ہم اس کسم کی situation بھی جو ہے وہ structures کے through handle کرتے ہیں so structure is not just a grouping of data in terms of real world like students and cars and things like that it also has mathematical uses like complex numbers let's go and take a look at the structure definition structure جو ہے اس کو syntactically define ہم اس طرح سے کرتے ہیں پہلے لکھتے ہیں key word struct struct another keyword so struct is something you can't use as a variable name struct کے بعد ہم structure کا نام دے دیتے ہیں let's say student اس کے بعد opening brace آتا ہے curly brackets اس کے بعد structure کا اندر جو والا حصہ جو ہے which is the data that is contained in the structure وہ دیفائن کیا جاتا ہے یہ دیتا کس کسم کا ہو سکتا ہے any and all variables that we have been using they can be part of a structure so for example we could have the student structure saying 4 name 60 meaning 60 characters میں ہم اس کا نام سٹور کریں گے semi colon next line 4 address 100 100 characters میں ہم اس کا نام address سٹور کر لیں گے let's say int int نہیں کرتے دبل کر دیتے ہیں آپ کی gpa جو ہے وہ real ہو سکتے ہیں need not be an integer so we say double gpa float بھی کر سکتے ہیں is not going to have a gpa in the thousands and so on اور یہ جو دیتا ہم نے define کر دیا اس کے بعد closing brace semi colon structure define ہو گیا structure جب we define ہم کرتے ہیں in a way this is nothing more than a new data type that we have created why is it a new data type جب آپ نے structure define کر دیا now you can write in your program student s1 s2 s3 and so forth just like دبل لکتے تھے اسی طرح اب ہم اس structure کا نام استعمال کر سکتے ہیں as a new data type in a way you are now getting an introduction into the power of c and c plus plus that they are extensible آپ اپنے طور پے new data type آپ نے create کر لی ہے جس کا پہلا حصہ character string ہے دوسہ string ہے تیسرے کے اندر کوئی real number پڑا وائے and so on it can be a biggest structure کیا structure کے اندر pointers ہو سکتے ہیں بلکل ہو سکتے ہیں because pointer is another type of variable so we can have a pointer to something inside a structure ہاں structure کے اندر بزاتے خود وہی structure نہیں ہو سکتا لیکن کوئی اور structure ضرور ہو سکتا ہے so if you had let's say ایک ہم address کا structure بناتے ہیں جس میں ہم کہتے ہیں کہ the street address something like x y z Muslim town city ایک اور character string دے دیتے ہیں سکھر راول پنڈی اسلامہ بات whatever اور پھر شاید ہم کنٹری بھی دے دیں پاکستان تو اس کے تین حصے ہو گیا ایک street address ہے ایک city ہے ایک country ہے اسی کو اٹھا کہ ہم student data طاپ میں لجا سکتے ہیں کہ یہ student کے structure میں اب ہم کہ دیں گے اس کا name ہے which is a character string and it has an address which is of this structure type اور declare بلکل اس طرہ کریں گے جیسے میں نے بتایا کہ جیسے میں نے بتایا کہ پروگرم میں ہم لکھ سکتے ہیں student s1 s2 s3 اسی طرح structure کے اندر ہم کہ دیں گے address a d d a d d will be the name of the variables used to refer to this address and so on سو بیچ میں pointers بھی آہ سکتے ہیں دوسر structures بھی آہ سکتے ہیں pointers to structures ہو سکتا ہے بلکل ہو سکتا ہے دیکھیں جہاں پہ بھی ہم بات کرتے ہیں arrays کی simple variables کی ہم کہتے ہیں pointer to an integer ہم کہتے ہیں what it means is it's a variable that holds the memory address جہاں پہ وہ integer stored ہے the starting address جب ہم array کی بات کرتے ہیں ہم کہتے ہیں array کا نام بزات ہے خود pointer ہے to the beginning of the array first element اس کو وہ point کر رہے اس کا address اس کے نام میں پڑا ہوا ہم کہتے ہیں pointer to an array اس کے اندر وہ address آجاتا ہے so can we have a pointer to a structure ہم کہتے ہیں ہم کہتے ہیں and it points to the starting point جہاں پہ سٹرکار کا data store کیا جا رہا ہے so pointers to structures are quite fine what else can we do can we do assignments with structures and things like that well we can but let's take a look at this detailed definition of the structure کہ اس کی declaration کیسے ہوتی ہے and then اس کے ساتھ ہم variables declare if you look at the structure definition اس کے اندر دیکھیں ہم نے ایک اگزامپل بھی آپ کو دیا ہوا ہے ہم دکھا رہے ہیں کہ جی آپ کے پاس variables declare کرنے کے لیے بھی دو طریقے ہیں ایک طریقہ تو یہ ہے کہ جی structure آپ علیدہ سے دیفائن کر لیں اور پھر structure کا نام وہ استعمال کر کے آپ اپنے لیے structure variables declare کر لیں دوسرا طریقہ وہ یہ ہے کہ structure کا نام اس کی definition دیکے آپ کمہ سیپریٹڈ لیسٹ دیدی اپنے نام اپنے لیے that will be of that structure ڈائیپ لیتے ہیں as always آپ کو دیکھیں ایک ہم نے کیا تھا کارڈ کا شفلنگ پروگرم تو اس کے اندر بھی دیکھیں ایک کارڈ ایک تاش کا پتہ اس کے ایٹریبوٹ کیا ہوں گے ایک تو اس کا ایٹریبوٹ ہو جاتا ہے اس کا سوٹ کینی یہ سپیڈز اور ایک اس کی آجاتی ہے value which is یہ a's ہے یا du's ہے یا 3 ہے یا 4 ہے all the way up to king so why not create a structure called card جس کے اندر there is a character pointer تک ہے to the suit and a character pointer to the value تک ہے انگ ویزی لکسا کہ ہم بیچ میں so again we can manipulate the structure in one go as a card تک ہے so you can just go and say کہ جی and you can define a whole set ایسی طریقے سے جہاں میں نے کہا کہ you can have سیمپل ویریبوز or ویریبوز of type سٹرکچر and you can have پوینٹرز تو سٹرکچرز we can also have ایریز of سٹرکچرز so for example in your case if I were talking of student data we can have an array of 100 students where student binge آپوز اسپatta episode تک جہاں میں جانتےść اگر تو ٹمسی اپنی جانتے ہیں از ہalous الشخص بہتئے اپنی پرakah اپنھام Try ایک احد اور سامنہOT' لنی کو ایک آپا بہت ال maturity لدھی کو بھی مثل Going Book بھی جانجل sprechen۔ نمبریبر�합니다، نمبر کامھی روہنی والجہ لیکننا نزل پیزن آب sicher ہار بڑے ہیں , لیکن ہم ق ککل بدے پ کی بالن byłaک pickle ل preparation ڈلائیہ کی بتوری Pressure تقشی ramen تقشیweek ڈلائیہFonda science pure ڈلائیہ ought screen Rather it's a نزل پاسنات ، MudnaParnak عقشان و بعدکشان پر ولی ڈلائیہی ڈلائیہی共同 زیادہ حقیصہ دا تعلیم کی ضرورت ہے اور میں سیدہ کی حقیصہ ہے۔ لیکن آپ own کی نیونے بیٹا تاپ۔ آپ پر zuرٹنٹ1 اور دیتیتیٹیٹیٹیٹات کو بھی، جو بھی بیٹا پہلی ہے تو آپ کو سہنہا بیٹا ہے گے جو سوگ کسی حندہ لییک کرتے ہیں۔ یہاں پہنی بارز کی نظرہ لگتی ہے۔ اسی لییمٹیٹے کو بھی امام اسطرارت ہم دوڑ کر سکیں۔ کر کر錯ہ یہاں بہتÃ گیا ہے اسنا اضافب بڑے ہونے کےجاہتا ہے حيد ترصہ نیم کے قفل سے اپنے نیمی ہے لیکن جھی جنگado سی orخ شادے float جوปہKENًا جانت حضرتہ، عمirdہ س kilometres مصحیط دو تھے آ Slash ساats قفئ یہاں پہ تھوڑا سا میں ڈائگرس کرتا چلو اگر آپ ایک سٹرکچر بناتے ہیں ابھی آپ کو پتہ نہیں ہے کہ سٹرکچر کے اندر ویلیوز کیسے ڈالتے ہیں وہ کچھ آ جائیں گی تھوڑی دیر بات لیکن اگر آپ سی آوٹ کے ساتھ سٹرکچر کو پرنٹ کرنا چاہییں تو سی آوٹ will probably work یہ بہت ہی انٹلیڈینٹ فنکچن ہے in a way it's too intelligent for it's own good یہ ہمیں کافی تنگ کرتا ہے کئی دفعہ کنٹرول نہیں ہوتا لیکن اس نے اپنے طور پر انٹرپٹ کر کے اس کو اوپٹ کر دینا ہے but for the moment let's start looking at کجی سٹرکچر ہم نے دفعہ کر لیا اس میں ویلیوز کیسے ڈالیں let's take a look at this ڈائگرس کی ایک سٹرکچر دفعہ کیا ڈالتے ہیں اس کی دفعہ ہے چار نیم 64 چار course 128 which means these are character arrays we say int age student کی age ہوگی we say int year جہاں پہ ہم سٹور کریں گے یہ سٹرکچر نے ہمارے کوس کو کس سال میں مطلب کس سال میں وہ شامل ہوا اس کوس کے اندر so we've defined a structure called student اب اس کو اس کے اندر ڈیٹا ویلیوز ڈالنے کے لیے ایک تو طریقہ وہ ہے کہ دیکلیریشن کے وقت ہم اس کے اندر ایسائنمنٹ کر دیں so inside our program we can say student s1 equals curly braces کے اندر double quotes کے اندر اس کا نام دیا comma double quotes کے اندر اس کا course name دے دیا کیونکہ ہم نے یہ character strings رکھی ہوئی ہیں پھر comma ڈالا اس کی age دے دی let's say 19 پھر comma ڈالا پھر year ڈال دیا whatever year let's say 2002 اس میں وہ course میں شامل ہوا what this line does is کہ a student data type s1 is or rather the variable s1 of type student is created and it's data members initialized so جو اندر ڈیٹا ڈالنے کے اندر ڈالنے کے اندر اس کو ہم data members کہتے ہیں ابھی تک دیکھیں ہم نے explicitly خود ان کو ہاتھ نہیں لگایا ہم نے initialized کر دیا اور میں نے کہا دیا کہ وہ جادو کی طرح اپنی اپنی جگہ پہ چلے گئے ہیں structure کے data members کو منیپلیٹ کرنے کے لیے ہم dot operator استعمال کرتے ہیں اس کا استعمال اس طرح سے ہے کہ جیگر ہم name کو منیپلیٹ کرنا چاہ رہے ہیں تو ہم کہیں گے s1.name this is the way of referring to the data member of a structure اسی طریقے سے s1.course means course والا data member structure کا s1.age s1.year اب age or year integer variables ہیں so you can actually use them simply by doing assignments so you can say s1.age equals 20 وہ s1 جو structure تھا اس کے اندر age variable جو تھا اس کے اندر value 20 لکھتے گا can we say something like s1.name equals a bas alie can we do something like that بتائیں کہ can we have a character string variable let's say 4 name 50 and say somewhere in our program name equals whatever کر سکتے ہیں کہ نہیں کر سکتے اگر جو کہہ رہے ہیں کر سکتے ہیں یا جو بھی کہہ رہے ہیں آپ میں سے کہ یہ نہیں ہو سکتا آپ نے لیے program لکھیں اور verify کریں see what happens can you do this just to give you a hint اگر ہم یہ کر سکتے تو maybe we didn't need the string copy function جو ہم نے پسلے ایک آد لیکچے پہلے ہم نے discuss کیا تھا کہ we can copy from one string to the other you need string copy to do that you can't simply assign on the other hand اگر یہ جو ہے یہ 4 pointer name ہوتا instead of an array تو پھر ہم شہد کچھ کر سکتے we could have said s1.name equals character string اور کیونکہ وہ character string ممری میں کہیں بن گئی ہے تو اس کا starting address name your pointer ہے up to a character اس کے اندر آگیا ہے so you have to realize pointers and arrays behave a little differently when we trying to assign back to our example so s1. age equals 20 is good enough for assignment اسی طریقے سے output کرنی ہے آپ نے structure کی output دیکھنی ہے علیدہ علیدہ حصوں کی you could say see out less than less than s1.name نیم پرنٹ ہو جائے گا see out less than less than s1.course کہ course کا نام آ جائے گا see out less than less than s1. age and s1. here اس طرح سے آپ output دیکھ سکتے ہیں nice thing is کہ s1 becomes 1 unit اس میں 4 حصیں ہیں لیکن you can manipulate it as a unit so if you had said student s1 comma s2 or s1 کے اندر یہ values assign کی ہوتی so you could have said s2 equals s1 وہ ساری values ادھر کوپی ہو جاتھیں what happens when we want to pass a structure into a function کیس طرح سے pass ہوتا ہے structures are passed into functions as per the c and c++ calling conventions by value in other words a copy of the entire structure is put on the stack the function is called which then removes it off the stack and uses the structure it is a call by value it is not a call by reference how do we do a call by reference یہنی ہم چاہتے ہیں کہ ایک structure کسی function کو pass کرے or وہ function جو ہے وہ structure میں کوئی تبدیلی کرے or ہم واپس آئیں تو وہ تبدیلی ہمیں مل جائے well the same way as we have done before you pass an address to the structure into the function so now it is called by reference and yes you can take the address of a structure if we can have a pointer to a structure obviously we can take the address of a structure so be aware of this structures strictly implement a call by value اگر structure کے اندر ایرے ہے اس کو کیا ہوگا وہ بھی call by value میں چلی جائے گی now notice پہلے ہم جب ایرے کو pass کرتے تھے function کے اندر تو ایرے کا کیونکہ اپنا نام جو ہے was a pointer therefore it became a call by reference یہاں پہ جب ایرے جو ہے وہ structure کے اندر آجاتی ہے the structure whole thing is passed by value and therefore it is like a negating the original bad effect of ایرے بھیجی ہے تو ایرے ایک اندر چینج کیا تو calling program میں بھی چینج ہو گیا so in a way there is a little bit of a safety factor downside اس کی کیا ہے obviously with this an advantage there is a disadvantage downside یہ ہے کہ یہ اگر ایرے بڑی ہے so call by value میں وہ پوری کی پوری چیز کوپی ہونے لگ پڑتی ہے stack کے اوپر stack you can run out of space on the stack so be aware of this when you are doing or passing structures into functions functions as you know can have a return data type any they can return something so ہم function عمطور پہ لکھتے رہے ہیں int square something یہ ہم نے ایک function لکھا تھا جو کہ کوئی نمبر لیکے اس کو square کرکے اس کا value return کرتا تھا اور کیونکہ وہ value return کرتا تھا we could use the function on the right hand side of an assignment so you could say x equal to square 10 اور وہ 10 کا square لیکے اس نے واپس کیا تو x کے اندر value 100 آگئی اسی طریقے سے ہم structures بھی return کر سکتے ہیں so functions can return structures in other words the behavior of the structure is exactly like that of an ordinary data type which is why میں نے پہلے کہا تھا we have in a way created our own data type we can have a simple variable of type structure we can have a pointer to a structure we can have arrays of structures and now we found that we can even have functions that return structures and of course you can always pass the structure to functions so lots of things that you can do over here what about pointers to structures اب ہم نے بات کی کہ جی structure کے جو حصے ہیں ان کو منیپلیٹ کرنے کے لیے ہم نے dot operator استعمال کیا ہے so variable name dot data member name that is the way we use it what happens when we have a pointer suppose اگے ہم نے ایک اس پونٹر دیکلیر کیا as a pointer to structure students so we would write student star sptr so sptr is a pointer to a data type of student and we know it's a structure so sptr جاکے وہ کسی ایک چیل سٹرکٹر کو پونٹ کر رہا ہے ہمارے پروگرم کے اندر so there was an ordinary variable اس وان اس کے اندر کچھ ڈیٹا پڑا با تھا اور ہم نے کہہ دیے sptr equals and s1 یعنی s1 کا ادرس لیا وہ sptr کے اندر دال دیا which is now pointing to s1 how do we manipulate the data can we say sptr.name the answer is no you cannot why because sptr کو انہوے آپ سرہ اکسپینٹ کر کے دیکھیں تو کیا ہوگا وہاں پر لکھا ہوگا this is a pointer to a structure so it's like star s2.name جب ہم star s2.name لکھتے ہیں تو dot operator جو ہے وہ زیادہ جلدی بائنٹ کرتا ہے in other words یہ precedence کی باری آجاتی ہے کہ dot پہلے evaluate ہوگا star بعد میں ہوگا so what happens is the whole thing looks like a pointer to something but that's not what we want we want to access the data member of a structure using a pointer to a structure ایک طریقہ یہ ہے کہ آپ pointer to structure جو ہے sptr in this case اس کو evaluate کر لی نہیں star لگا کے پر انثیز میں بند کر دیں تا کہ وہ پہلے evaluate ہو اور پھر dot کر کے name لکھیں that is correct but there is an easier way and a shorthand way and the way that is normally used whenever manipulating structures وہ ہے dot کی جگہ پہ ہم arrow استمال کرتے ہیں now keyboard پہ آپ جو arrow right left نظر نہیں آئے گا well آئے گا وہ she is ore ہے that they do something else they do cursor manipulation if we want to write an arrow we write that with a minus sign and a greater than so it's a minus greater than symbol that looks like an arrow so sptr کے ساتھ اگر ڈیٹا میمبرز کو manipulate کرنا ہے we say simply sptr minus arrow name this is the same as s1 dot name but s1 was a variable of type student sptr is a pointer to a variable of type students so whenever we use pointers with structures with structures sorry اس کے ساتھ ہم یہ arrow استمال کرتے ہیں instead of the dot operator باقی سارا کام بالکل اس طرح سے ہو رہا ہوتا ہے now again if you remember ہم نے پوینٹر کا اگزامپل کیا تھا much earlier جہاں ہم نے ایک swap function لکھا تھا اور ہم نے pointers pass کر کے swap کر لیا تھے نمبرز کو اسی طریقے سے آپ یہی pointers to structures pass کر سکتے ہیں اور ان کو بھی اپس میں swap کر سکتے ہیں اگر student list ہے اس کو ہم sort کرنا چاہتے ہیں in let's say by GPA or by age or something like that we can use pointers to students pass them into a swap function and get back the manipulated list so lots of things you can do but the main thing is the manipulation is very very simple other than this one thing جب pointer کے ساتھ data member کو رفر کر رہے ہیں تو arrow استعمال کریں گے اور جب variable کو استعمال کر رہے ہیں data member کے ساتھ تو dot operator استعمال کریں گے what happens when we are working with arrays of structures well it's simple enough پہلے تو ہم نے کہا دیا کہ let's say ہم نے saw students کی ایک array declare کرنی ہے تو we would say student s square brackets میں 100 so we have declared s to be an array of 100 structures of type student how do we access the first student we would say s square brackets can do zero dot name so be aware of this s array ہے name جو ہے وہ کچھ بھی ہے وہ structure کے اندر ہے so آپ کا جو array جو ہے index that belongs to s so the first student is s of zero the second student is s of one the third student is s of two the last student in this array is s of 99 اور کسی کا آپ میں نام استعمال کرنے تو you would say s of i where i is the number of the student dot name and so on so forth so you have to just remember that the array index belongs to the structure name and not to the data member ایک آخری چیز بات کرتے چلیں پس لی دفعہ ہم نے بات کی تھی size of operator کی size of ہے وہ structure کے ساتھ بھی استعمال ہوتا ہے اب دیکھیں structure کے اندر مختلف data type کو ہم نے کتھا کر کے اس کو ایک structure کا نام دے دیا ہے question جی ہے کہ جی memory میں وہ کتی جگے استعمال کرتا ہے now there could be a character array of 20 characters and two integers are double or float a few charts and so on so forth you can simply call the size of operator and give the name of the structure so you say size of within parentheses s1 and it will tell you how many bytes that structure is occupying in memory so again a way of getting independence from actually adding four bytes for this and eight bytes for that you just call the size of operator this is also useful when you're writing into a file and you're using the write function so you can write the structure we're using the size of operator very useful so what are the the legal things we can do with the structure obviously we can define the structure we can declare variables of that type of structure we can declare pointers to that structure we can declare arrays of that structure we can take the size of that structure we can do simple assignments between two variables of the same structure type let's take a look at a comprehensive example using structures let's say that we have the student array which is let's say 10 students take care we'll say we'll use name age GPA and some other variables first of all we would like to get data from the keyboard into this array of students and then do some manipulations with it how do we go about doing that well actually it's fairly straight forward I think it's rather tedious for me to sit here and you know try to explain all of that there is no explanation it's absolutely straight forward we declare the structure so we've declared structure student and the data members we say we declare an array of students so we say student s 10 let's take 10 for simplicity now we want to enter data into this array of students we run a simple loop for i equal to 0 i less than 10 increment i braces and braces کے اندر ہم سارہ دیتہ get کرتے ہیں being polite we say see out please enter the students last name see in into اگر آپ last name ہمارے پاس data member ہے so you would say something like see in greater than greater than s of i which is the ith student structure dot last name so see in ith student structure کے last name کے اندر value assign کر دے گا اسی طرح پھر ہم کہتے ہیں see out please enter the students first name see in greater than greater than is the stream extraction operator s of i dot first name so simply once you understand that ایک dot operator کے ساتھ بعد میں آپ کے پاس ایک simple variable ہی بچتا ہے of وہ والے جو ہے جو کے ہمارے پاس normal data types میسے ہمارے پاس موجود ہے so see in see out سب اس کے ساتھ کام کرتے ہیں so you can just run this little loop and it will prompt you for a student's last name first name age course maybe whatever else we've defined in this structure and populate that array of students so it's quite simple اسی طریقے سے اگر آپ نے structure کے output لینی ہو تو no problem we would again run the same loop for i equal to zero i less than 10 increment i اور یہاں پہب see out کے ساتھ آپ استعمال کریں گے structure name dot member name you can also s of i dot last name s of i dot first name and so and so forth the loop simply runs what if we want to put some of this data let's say we want to read it from a file into a structure یہ اگزامپل جو ہے یہ آپ کو actually دکھاتا ہے کہ یہ ایک function جو ہے وہ structure return کیسے کرتا ہے پہلے تو we'll have to review کہ یہ function کا پروٹو تائیپ کیا ہوتا ہے آپ کو یاد ہوگا کہ جی function کا پروٹو تائیپ is شروع ہوتا ہے return تائیپ سے so if a function returns an integer ہم پہلے int لکھتے ہیں پھر function کا نام لکھتے ہیں پھر parenthesis کے اندر arguments لکھتے ہیں کہ یہ function کو ہم کیا پاس کریں گے تاکہ وہ جو بھی کرنا کر کے int return کرے ہم چاہ رہے ہیں کہ جی ہمارے پاس کوئی function ہو جو کہ کسی file سے data پڑے اور ایک student structure ہمیں واپس کرے تو اگر یہ ہمیں کرنا ہے تو پہلے تو اس کا proto تائیپ دیکھنا ہے تو proto تائیپ میں return تائیپ will be student very interesting it's not a built-in data تائیپ لیکن اگر ہم نے structure define کر لیا ہے now we can use it like a built-in data تائیپ so if you say return تائیپ is student آگے function کا نام now function جو ہے اگر file پڑھ کے a student data structure کے اندر ڈال رہے so let's call it get data so we say student get data اب آگے ہمار پہلے بہت ساری option ہے for the moment ہم کہتے ہیں empty parentheses ڈال دیں تو اس کو پتا ہے کونسی file سے لینا ہے لیکن ہم actually file کا حینڈر جو کے f stream کے ساتھ ہم نے کوئی file open کی تھی اس کا حینڈر بھی پاس کر سکتے تھے which gives us a little bit more flexibility but for the moment let's just say it's a simple one it says student get data parentheses empty parentheses that's it that is the prototype of this get data function اب get data function کام کیسے کرے گا let's take a look inside this function suppose ہم نے پہلے ایک file کھولی ہوئی ہے اس کا حینڈر بھی ہے یہ it has to be global global means it has to be declared outside of the main function otherwise ہمارا جو get data function ہے اس کو اس کے file کا جو حینڈر ہے stream کا نام جو ہے وہ نہیں پتا ہوگا so let's say we have in file ہم نے ڈیکلیر کی ہی file کا جو stream ہے so we will open that within main and then go and call student get data so somewhere in the in the program when we call it how are we going to call it well if it's going to return a structure of type student then we should have an assignment statement so in our main program we have student s one we would say s one equals get data so now we haven't gone inside we are seeing that get data has gone he has done something and passed a structure of type student pass today we have talked that the assignments are allowed so s one equal to get data means s one equal to a structure of type student is assigned s one has values come no problem so what happens inside get data well you now know 20 different ways of how to read a file اگر file میں اس کا last name another line پے ہے first name another line پے ہے age another line پے and so on you could just use the stream extraction operator with the in file we would say in file say پرلو or جو ایک variable کے اندر ڈال دو because so the normal syntax that we use with the greater than greater than sign however remember we want to return a structure of type student what we do is first of all we declare a local variable let's call it temp student and that will be of type student so inside get data the first time a first line says student temp student temp student کو اب ہم manipulate کرتے ہیں اور file سے چیزیں پڑھکے temp student کے last name temp student dot first name and so on ان کو populate کر دیتے ہیں جب یہ ساری population complete ہو گئے اب return کیا کرنا ہے we have to return a data structure of type student so on the last line of the function we just say return temp student that's it اب دیکھیں actual میمری میں کیا ہو رہا ہے جب اب مین سے get data کیا اندر گئے تو اس نے آپ نے لیے ایک local student structure کریٹ کیا it's called temp student so وہ میمری میں کہیں پے بن گیا اس نے جگے allocate کر لیئے اب آپ نے دیتا پڑا پڑا فائل سے اور اس تمپری لکیشن کے اندر دیتا لکھنا لکھنا شروع کر دیا جب یہ function return کرتا ہے تو what it does is it copies this this little temp student structure on to the stack because the stack is the way the function communicates with the main your calling program اس نے اس کی copy بنائی اور جب function ختم ہوا تو temp student وہ تو function کا local variable تا temp student is destroyed it doesn't exist anymore so it just came into being while we were inside the function called and it disappeared once get data finished but before it disappeared get data put the values somewhere else in memory so the main function would pick up those values and use the s one equal to get data line to assign those values to the student structure called s one sounds complicated but it's actually quite straight forward same thing as int square a int x ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم ہم تک منہ شاکتہ کو مانتہ رہا ہے کہ if you want to send the structure itself so that if the function make any changes they are available in the calling program you have to send the address of the structure. and taking the address of a structure is a perfectly valid operation. now we are going to talk about something that is related but slightly different and this is for the sake of completeness. ایک اور ہمارےپس چیز ہوتی ہے اس کو ہم union کہتے ہیں un Ion UNION. UNION جو ہے اس کا کونسپٹ C اور C++ کے اندر یہ ہے کہ اگر آپ کے باس ممری میں ایک لکیشن ہے اس میں کچھ لکھا ہوا ہے. کیا اس کو صرف ایک طریقے سے ہم ہاتھ لگا سکتے ہیں کہ آپ اور بھی کوئی طریقے ہیں کہ اس کو ڈیفرنٹلی ایسس کیا جا سکے. دپینڈنگ آن نید. پرفکٹ اگزامپل ہم ابھی تک انٹ اور چار کو in a way ڈیفرنٹلی استعمال کرتے آئے ہیں. ہم نے کئی program کیا یا ایک زامپل کیا آپ کو exercise بھی دی. جہاں پہ ایک character جو ہے it could have been stored inside an integer variable. In fact I gave you a program to write a little loop to print the ڈیفرنٹلی اس کی طریقے. وہ آپ کو کہا تھا کہ آپ کریں. Hopefully آپ کر چکے ہوں گے اور اس کی طریقے کے اندر ہم نے integer کے اوپر loop لگائی تھی اور پھر چار کو equal کر دیا تھا انٹیجر کو اور کہا کہ جیسی آٹ کے ساتھ دیکھیں کیا ہوتا ہے and you found کہ یہ ایک نمبر آتا ہے اور ایک character آتا ہے. So there was interchangibility. اگر interchangibility ہے تو کیا یہ ہو سکتا ہے کہ ہم ایک ہی memory location میں کوئی چیز لکھتے ہیں. جس کو کبھی ہم as a 4 پڑیں اور کبھی ہم as an int پڑیں. ایسے کام کرنے کے لیے ہمارے پاس concept ہے union کا. union کا syntax جو ہے وہ اب آپ دیکھ رہے ہوں گے. union کا مطلب union لکھتے ہیں پھر اس کا نام ہوتا ہے very similar to struct. braces کے اندر اس کے اندر فرق یہ ہے کہ structure کے اندر data members یہ بھی ہے اور یہ بھی ہے اور یہ بھی ہے. union کے اندر سمجھنے کے دی memory location ایک ہی ہے اور اس کے اندر پہلہ data member ہے that is one name for that memory. the second data member جو ہے it is another name for the same location and so on. اب اگر ہم نے int i اور 4 c کر دیا union کے اندر تو question یہ ہے کہ memory location کتنی reserve ہوگی اس union کے لیے. the answer is جو آپ کا سب سے بڑا union کا member ہے اُتنی جگہ allocate کی جائے گی memory کے اندر. so for example اگر ہم کہتے ہیں ہمارے سسٹم کے اوپر 4 جو ہے وہ ایک byte میں آتا ہے اور int جو ہے وہ 4 bytes میں آتا ہے. putting an int and a 4 into one union means that the union will occupy 4 bytes in memory. یہ ایک example دیکھ لیں کہ جی i or d سیکنہا ہے so we called it integer or double. اب دبل نے obviously انٹجر سے کہیں زیادہ جگہ لینی ہے. ہم نے ایک union ڈی فائن کیا i or d اور اس کے اندر کہا دیا کہ جی int i well, integer value and double d well, double value. یہ ہم نے اس کے دو میمبرز بنا دیے یہ union کے ہیں. یہ union سمجھ لیں ایک ہی memory رفر کر رہا ہے. جگہ دبل جتنی occupy ہوگی اب اس کو پڑھنے یا لکھنے کا طریقہ وہی dot operator جو ہم structure میں استعمال کرتے ہیں. ہم جو بھی union کا نام دیا ہے دیکھ لیر کیا اس کا ایک variable. ہم کہتے ہیں variable.i well. لیکن ہے let's say کہ ہم نے ایک union ڈیکھ لیر کیا ہے اس کو ہم نے کہتے ہیں you one. ہم کہتے ہیں you one.i well اور پھر اس کو اسائن کر دیں equal to 10. اب اگر آپ see out کے ساتھ کہیں گے you one.i well you will see 10. لیکن اگر آپ کہیں گے see out مطلب یہ ہمارا you one union ہے you one.d well. We really don't know something strange occurs. We see something totally different. وجہ اس کی یہ ہے کہ کہیں پہ اون 8 بیٹ میں جو کہ دبل کیلئے استعمال ہوئی تھی. کہیں پہ کر کے کونے میں int لکھا گیا. وہ int تو ہم نے جب display کیا تو صحیح ہو گیا. لکھر اگر ہم نے کہا کہ یہ 8 بیٹ کو اذا دبل display کرو تو وہ آپ کو int کی value نظر نہیں آئی کچھ اور ہی نظر آئے گا. And the same applies اگر ہم کہتے ہیں you one.d well equals 100.0. Now 100 itself تو اتنی چھوٹی value ہے کہ int میں پوری آجاتی ہے. لیکن وہ لکھا کہا گیا ہے. It's probably written in such a place where it is not interpreted as an integer properly. So اگر آپ you one.d well equal to 100.0 ایک لین پہ لکھیں اور دوسی لین پہ کہیں see out you one.d well you will not get 100 you will get something else. Integers اور characters کیلئے unions are little bit safer. لیکن اس کے اندر بھی you have to think in terms of کہ کہا رکھنا ہے کتی جگہ ہے. Size of operator استعمال کر کے you can find out کہ دی چار کتی جگہ لیتا ہے اور انٹ کتی لیتا ہے. Let's for our example assume کہ دی چار ایک بائٹ میں آتا ہے اور انٹ جو ہے وہ چار بائٹ میں آتا ہے. اب ایک thought experiment آپ کریں. Physically تو ہمیں پتا ہے کہ دی چار خانیں. چار بائٹ سمارے سامنے پڑی ہوئی ہیں. ہم چاہیں تو پہلی بائٹ میں ایک چار لکھ دیں. دوسری میں دوسرہ تیسری میں تیسرہ چاثی میں چاثہ. چار چار ہم لکھ سکتے ہیں. But not through this union concept کسی اور طریقے سے. وہ چارو بائٹس مل کے ایک integer بنتا ہے اور integer کی value بھی ہم دیکھ سکتے ہیں. اگر ہم چاہیں کہ جی ایک integer بنانا ہے ان چار characters کے ساتھ تو کیسے بنائیں گے. دیکھیں اگر میں چاہتا ہوں کہ ایک number لکھنا ہے let's say 123 اور پھر ایک اور number لکھنا ہے جو کہ آجائے 456 اس کے ساتھ لگا با. سو I read 123456. تو you will realize that you will have 123 کو پہلے آپ shift کریں گے by 3 decimal places اور پھر یہاں پھر 456 لکھیں گے. shift کیسے کرتے ہیں numbers کو. Simple number systems 123 multiplied by 1000 shifts is 3 places to the left and adds 3 zeros. سو وہاں پہ first you multiply it by 1000 and then add 456 you have 123456 that's the resulting number. it's not a character string it's a number. اب اس concept کو اگر اپلائے کریں آپ characters کے اوپر. ہم کہتے ہیں کہ جی character ایک byte میں پورا آتا ہے let's say character a لیا. آپ کو as کی table سے اس کی value پتا ہے آپ وہ assign کر دیتے ہیں int کو. انٹ میں 4 bytes ہیں ان کے obviously right most least significant bits کے اندر یہ اس کی value آ جائے گی. اب اس کو shift کرنا ہے over by 1 byte. کس چیز سے multiply کریں تو یہ ایک byte لیفٹ کو shift ہو جائے گا byte میں کتی bits 8 2 to the power 8 256. اب binary arithmetic ہو رہی ہے وہ 1000 سے we multiply نہیں کر رہے. ہم یہ 256 سے ہم دیکھیں جو آپ نے جو حیوث کنی مریک رپرزائنٹی تھی وہ انٹیجر کی 2nd byte میں پہنچو کی ہے. آپ یہ ایک character لے کے اس کو int کو assign کر دیں. لیکن سے سنگل کوٹس کے اندر آپ a لکھنے چھوٹا a. پہلی دفہ multiply کریں 256 سے وہ shift ہو گیا اس میں ایک اور character add کر دیں. لیکن سے ایک character b. لیکن آپ ایک brand new integer کو پرنٹ کریں. آپ نے طور پر verify کریں کہ جو اس کی table میں آپ کے پاس values آ رہی تھی. وہی values آپ کو نظر آنی چاہیں کہ یہ ہم نے shift کیا یہاں پر یہ لکھ دیا نیا integer یہ ہوگا. یہ ایک انٹریسٹنگ ایک سامنے جانتے ہیں لیکن آپ یہاں پر انٹیجر کیا کرتے ہیں. یہ میں ایک جامپل سے فسواست دے رہا تھا کہ اب اگر آپ چاہیں تو آپ ایک union بنا سکتے ہیں. جس میں چار character ہوں اوپر اور ایک integer ہونیچے. لیکن وہ 4 character will occupy the same position in memory as that 1 integer will. یہ آنی چاہتا ہے کہ چار occupies 1 byte and an integer occupies 4 bytes. اگر آپ نے do something else and use size off to determine that. اگر آپ اس لگتا ہے کہ آپ مجھے بھریکتا جاہتے ہیں تو آپ کو 4 character ہونے کے مجھے بھریکتے ہیں. آپ اس جو انٹیجر کے بھریکتا ہے کہ آپ مجھے بھریکتا ہے کہ آپ ایک کسی پوزیٹنگ مجھے بھریکتا ہے اور انٹیجر کو اٹھا کریں اور انٹھ کے ساتھ کام کرتے ہیں کہ آپ ایک 4 character کو تحدي کرے تھے. لیکن یہ رия جاتاlined comparedaches to the same memory location بے بہت سے ایک خواہitی تصوری سربی آج رہے hosts ایک ELLER ڈیویل سا تطاور جھےزا کجی lives ایک iese ایکking ہ甜 رہی ہ peaks重 لییں مزری ایک اس moment زیادہ دے کس、、  gigantic  ede اہل parano because it will lead to very very confusing code. Don't do that. Unions کی ہم نے discussion کی ہے for the sake of completeness. Personally speaking, I have never had to use unions. But they are useful when you get into itzy bitzy programming or nitty gritty details کے اندر جاکے کوئی super efficient کام کرنے کی کوشش کر رہے ہیں. جب ہم bit manipulation کی بات کریں گے وہاں پہ بھی آپ دیکھیں گے کہ unions کا استعمال ہو سکتا ہے. It is quite useful. آج کا لیکچر جو ہے وہ رہا ہے structures اور unions کی بارے میں. They are relatively less used parts of the C and C++ language but structures at least to me have been very very useful because they allow us a convenient way of grouping data about a single entity. ہمارا example یہاں پے student رہا ہے. You can think of a car, you can think of any, I hate to use the word because it's too early, any object. کوئی بھی object لے لیں اس کی 5-10 properties ہیں کیوں ہم علیہ دا علیہ دا ہوں کو manipulator ہیں. کیوں نا ایک structure میں ڈال کے ہم کہیں یہ وہ چیز ہے اس structure کی اس property کو یوں کردو یوں کردو یوں کردو یوں کردو. So it's a useful concept and we will expand on this. Hopefully after the midterms you will have some interesting stuff coming up. Till then ڈازر دیجے. God Hafiz.