 اسلام علیکم today is lecture 9 in the introduction to programming course اب تک امید تو یہ ہے کہ یہ آپ ایک اسپورٹ پرگرمز بن گے ہوں گے نہیں تو کچھ اور تولکٹ کے اندر چیزیں دالتے ہیں لیکن remember I mentioned last time that your toolkit is essentially complete اب آپ کو decisions program کرنے آتے ہیں آپ کو loops program کرنے آتے ہیں اور سیکونس تو ہے ہی کہ جی just a simple ordered list of instructions ان تین چیزوں سے سارے programs لکھے جا سکتے ہیں اب ان programs کو ہم زرا آگے چلتے ہیں اور refine کرتے ہیں اور دیکھتے ہیں کہ جی اور کیا tools ہم ایڈ کریں تو ہماری programming زندگی جو ہے وہ زرا آسان ہو جائے گی تو آج کے جو topics ہیں اس کے اندر ہم major portion جو ہے وہ functions کے اوپر time لگائیں گے یہ functions کیا ہوتے ہیں see جو ہے وہ آپ پڑھا بھی ہوگا اور سنیں گے بھی وہ function oriented language ہے what does that mean what it means is that all see programs are composed of functions تک ہے you build a big program a big complex program out of smaller programs each one of them is called a function how is that advantageous to us دیکھیں ہم اپنی روز مرہ کی زندگی میں بھی اگر دیکھیں کوئی بھی ایک task لے لیں کوئی reasonable size کا کام جو ہے تو آپ دیکھیں گے کہ اس کو ٹکڑوں ٹکڑوں میں تقسیم کیا جا سکتا ہے ہر ٹکڑہ جو ہے وہ independently perform کر کے اگر ایک ترطیب سے کیے جائیں تو task accomplish ہو جاتا ہے مثال کے طور پہ سمجھیں ہم نے ایک lab stool بنانا ہے لبورٹری کا stool آپ نے دیکھا ہوگا ایک seat ہے اس کے اوپر تنچے تین طانگے لگی ہوئی ہیں by the way کبھی سوچا ہے کہ سٹول کی تین طانگے کیوں ہوتی چار کیوں نہیں ہوتی چار طانگوں والے سٹول بھی بنتے ہیں لیکن think about it there's a problem with them that was an aside just thinking about everyday affairs nonetheless let's go back to the problem of constructing a stool اب سٹول بنانے کے لیے ہمیں کیا کرنا ہے ہم ایک seat تیار کریں یہ ہم لکڑی کے کام کی بات کر رہے ہیں اور پھر اس کے لیے تین طانگے بنائیں اور پھر ان کو assemble کریں تو سٹول بن جاتا ہے اور دیکھیں میجر problem جاتا ہے یا میجر task جاتا ہے وہ ہے سٹول بنانا اور پھر اس کے سب task اگر دیکھیں تو کیا ہے کہ جی ایک task ہے seat بنانا اور ایک task ہے طانگے بنانا طانگے اگر ہم نے کہا تین بنانی ہیں اور وہ identical ہیں تو you can even think already in terms of ایک کام تین دفعہ کیا جائے گا ایک اس کی leg fashion کریں پھر دوسی leg fashion کریں اسی طریقے سے اور پھر تیشری بنائیں identical اور پھر ایک task رہ جاتا ہے assembly کا تو we have taken a slightly complex problem and broken it down into simpler pieces that is the concept of functional design or as we call it top down design جب بھی ہم top down design کی بات کرتے ہیں ہم یہی بات کر رہے ہیں کہ جی پہلے problem کو انچائی سے دیکھیں دوسی سے دیکھیں گے یہ problem ہے کیا کیا چیز ہم نے حل کرنی ہے پھر اس کو refinement کے طریق ہے I mean come down refine it one step and say alright let's break it up into smaller pieces once we have taken that step then we go down and say divide it into further smaller pieces you keep on doing that till the smallest piece is a very very manageable task کوئی بھی اگزامپل لے لیں گھر بنانے کا اگزامپل ہے تو اس کو top level سے دیکھیں گے تو جی ایک گھر بنانا ہے اس سے next level پی آئیں گے تو کہیں گے کہ جی اس کا نکشا ہونا چاہیے اور نکشے کے مطابق پھر کمرے بننے چاہیے کمرہ کیسے بنتا ہے کہ جس کی دیواریں بننے چاہیے اور چھت دلنے چاہیے دیوار کیسے بنتی ہے تو جی انتے لگتی ہیں اور cement لگتا ہے چنائی ہوتی ہے اس کے بعد دروازے لگتے ہیں کھڑکیاں لگتی ہیں everything becomes a task once we come down to a level where a task is easily manageable and doable ہم اس سے آگے نہیں جاتے ہم یہ نہیں جاتے کہ جی ہم جنگل سے لکڑی بھی کارتنے جائیں گے دروازے بنانے کے لیے ہم کہتے ہیں کہ جی لکڑی پکڑی اور پھر اس کو کارتنا شروع کردی اور دروازے کھڑکیاں بنانے شروع کردی so within reason when we break up a task into smaller sub tasks we stop at a reasonable level وہ reasonable level کیا ہے وہ programming کے حوالے سے ہم اس کی بھی بات کریں گے اور پھر یہ جب top down analysis اور design ہو جاتا ہے پھر ہم اس کی construction شروع کرتے ہیں جو کہ دوسی طرف کو چلتی ہے تو آپ چھوٹے چھوٹے modules جن کو ہم C میں functions کہتے ہیں وہ functions لکھتے ہیں اور functions ان کو assemble کرتے کرتے ہم program بنانے دے ہیں اس کے اندر یہ function کیا ہے اور پھر اس کے اندر ہم اس کو define کیسے کرتے ہیں اس کو کیا چیز بھیجی جاتی ہے وہ کیا چیز واپرس دیتا ہے اس کے بارے میں ہم آج بات کریں گے let's take a look at a very simple problem جس کو ہم سب task میں convert کرتے ہیں suppose میں بیٹھا ہوں میں چاہتا ہوں کہ مجھے پتا چاہتا ہے کہ جی اس وقت virtual university کے کتنے students online بیٹھے ہوئے یعنی ہمارے learning management system کے اوپر کام کر رہے ہیں I can call our network administrator and say give me the number of students logged in to the virtual university learning management system the network administrator وہ چلا جاتا ہے وہ اپنی کمانز دیتا ہے دیتا بیس میں دیکھتا ہے یا دیکھتا ہے network activity کتنی ہو رہی ہے اور اس کے بعد اس کے پاس students کی list آ جاتی ہے جو اس وقت logged in ہیں وہ list کی گنتی کرتا ہے and he comes back after a while and says کہ جی اس وقت 2,300 students وہ online بیٹھے ہوئے اب دیکھیں اس ورے پروسس میں ہوا کیا ہے میں نے ایک request کی ہے اور وہ request ایک well defined encapsulated request تھی مجھے چاہیے کتنے students اس وقت online بیٹھے ہوئے the network administrator has gone off perform the task and then come back with the result دو تین چیزیں ہوئیں ایک تو ایک modular چیز ہوگی somebody went off and did a well defined task I on the other hand could have used that time to do something else اس کو parallel processing بھی کہہ سکتے ہیں multi-threading بھی کہہ سکتے ہیں اور کئی languages اس کی facility بھی Provide کرتی ہیں لیکن ابھی ہم اس کی بات نہیں کر رہے ایک important چیز جو ہے کہ جی ہو سکتا ہے کہ جب network administrator نے query کی تو اس کے پاس students کی list آئی جس کو اس نے گنا تھا مجھے اس list سے کوئی گرز نہیں ہے so that information I do not need and I don't want to see انہوں سے بہت چھوپی ہوئی تھی information was hidden from me میرے سے بہت چھوپی ہوئی تھی so information hiding یا encapsulation is an important part of this function call کہ جیس چیز کا میرے ساتھ گرز نہیں ہے وہ میرے پاس کیوں آئے میں اس کو کیوں ہاتھ لگاو میں اس کو کیوں دیکھوں so I have delegated a task he went out he performed it he came back and gave me the result now in all of this for example میں اس کو چھوٹا سا کوالیفائی کر دوں تا کہ ہم آگے چل سکیں کہ جی میں نے سوچن جی پوچھا کہ جی سیس 2 0 1 انٹر وڈکشنٹو پروگریمنگ میں کتنے بچے اس وقت لکھ دین ہیں so now جو آپ کیا آپ اس کو کیا حدوث ہوتی ہے what has happened I have given our network administrator a specific request and I have also provided him some information I have said سیس 2 0 1 and then he's gone back he's done some processing and he's come back with the answer okay سو آنے ہوں کہ انٹیو گیا ہے ، اور انٹیو گیا ہے کہ کاریٹا ہے ، پہاہلی انٹیو گیا ہے۔ سی میں فنچن کالگs ہوتی ہیں۔ وہ اسی طریقے سے کچھ اس کو پرمیٹرز دیے جاتے ہیں۔ ایک آرگومت پاس ہوتے ہیں، فنچن۔ فنچن اپنے طور پہ وہاں آرگومت کو استمال کرتا ہے، کچھ ان کے اوپر پروسنگ کرتا ہے۔ اور پھر ایک سرل ہے وہ کالند پرگیم کو باپس پہنچا دیا جاتا ہے۔ اور جو function اپنے نہیں اندر کام جو کر رہا ہے اس کا call in program کے ساتھ کوئی گرز نہیں ہے so call in program does not need to see what the function is doing and how it is performing that task this should be clear so there is a specific function calling methodology function call ہوگی اس کو arguments pass ہوگے اور function ایک result واپس پاس کرے گا let us go back and think about وہ جو ہم main لکھتے تھے ہر see program میں میں نے کہا تھا main ایک ہوتا ہے main بھی بزاتے خود ایک function ہے so in a way you already know what a function is it has a name it has an opening brace very curly bracket or it has an ending brace an ending bracket اور درمیان میں اس کی body ہے which performs the task so we already know how to write functions تھوڑی سی اس کے اندر enhancements ہیں ان کی ہم ہم بات کرتے ہیں اب دیکھیں before getting completely into the nitty gritty of the function definition تھوڑے سے point سپنے دماغ میں clear کلیے جائیں پہلے ہم نے بات کی ہے top down methodology کی اس کا دوسرہ نام ہے divide and conquer بڑا program لیں اور problem لیں اس کو divide کریں and conquer it ساتھ ساتھ اگر آپ کو یاد ہو تو right at the beginning of the course میں نے کہ آپ کو ایجامپل دیا تھا کہ جی وہ ایک ring کا اگر area نکالنہ ہو تو کیسے نکالیں گے so that was an example of software reuse functions اس کے کاتیگری میں بھی آتے ہیں اور بہت زیادہ important ہے اس حوالے سے کہ جی code کا reuse جو ہے وہ ہم functions کے ذریعے سے کرتے ہیں اب دیکھتے ہیں کہ جی function کی actual call کی syntax وگیرہ کیا ہوتا ہے function جو ہیں وہ دو category کے ہوتے ہیں یا وہ کوئی value return کرتے ہیں یا وہ نہیں کرتے ہیں in other words the function it is optional it can return a value or it need not return a value if it returns a value then the value will be of a specific data type simple as that اگر میں کہتا ہوں ایک function ہے میرے پاس وہ ایک کسی number کا square کر کے واپس کرتا ہے تو اگر number integer ہے تو integer کا square جو ہے واپس آئے گا تو وہ بھی integer ہوگا so the function returns a value of type int or it can return a value of type double or any of the other c data types اس کے بعد ایک ہم return value ایک واپس ہو گئی اس کے بعد function کا نام ہے یہ میں calling convention کی بات کر رہا ہوں اور پھر function کو ہم نے شاید کو information دینی ہو جیسے میں an example دیا کہ جی میں نے کہا تھا cs201 کے students کا بتاو تو cs201 would have been an argument to the function when we write the name of a function or the declaration of a function we start with the return type of the function so for example if the function returns an integer we write int then we write the name of the function name of the function وہی rules عبے کرتا ہے جو کہ see کے normal variable naming rules ہیں اس کے بعد نام آگیا اس کے بعد ایک opening parenthesis آئے گا ایک normal bracket جو ہے اور bracket کے بعد جو ہے اگر function کو کوئی arguments pass کرنے ہیں تو ان کی list آتی ہے arguments pass کرنا بھی لازمی نہیں ہے تو اگر main کا آپ کو یاد ہو main کے parenthesis empty چھوڑے ہوئے میں بھی تک ہم نے so main as a function can exist without any arguments اسی طریقے سے function کسی بھی function کے لیے arguments کا ہونہ لازمی نہیں ہے but usually you will find that there is one or more arguments that are passed to the function تو پرانثیز کے بعد arguments کی list آتی ہے اور پھر parenthesis بند کر دیا جاتے ہیں یہ argument list کیسے لکھتے ہیں یہاں پے declaration اور definition میں تھوڑا سا فرق آئے گا وہ میں آگے چل کے بتاؤیں گا لیکن بیسیکلی یہ ایک function ہے اس کو integer pass ہونا ہے تو within the parenthesis we will write int انٹ کے ساتھ x i whatever the name of the variable that is being passed or what is going to be used in the function تھوڑا سا اسی وقت ہم بات کر لیتے ہیں declaration کی اور definition کی جیس طرح ہم نے ہم کہتے ہیں int i in a program that is the declaration of an integer that is an indication کہ یہ ایک integer کے لیے جگہ ریزرب کر لو یہ کہیں پے create ہوگا اور استعمال ہوگا اسی طریقے سے function کو استعمال کرنے کے لیے پہلے اس کو declare کرنا لازمی ہے یہ تھوڑا سی طریقی بات ہے لیکن آپ استعمال کریں گے تو عادت ہو جائے گی اگر ہم function ایک لمبی فائل کے اندر اوپر ایک function declare کریں اور بعد میں اس کو استعمال کریں کسی اور function میں like main میں سے تو پھر اس کی declaration اور اس کی definition وہ ایک جگہ پہ ایک اٹھی ہو سکتی ہیں اگر ہم ان کو دفرنت طریقے سے استعمال کرنا چاہیں اور یہ پھر آپ کا programming style آئے گا کہ یہ function ہم نے ایک اور فائل میں لکھے لیکن main علیدہ سے لکھ رہے ہیں وہ ایک اور فائل میں پڑا ہوئے اور main ان function کو استعمال کرتا ہے تو main compile نہیں کیا جا سکتا یا اس میں آپ function کو refer بھی نہیں کر سکتے جب تک main کو پتا نہ ہوگے function کی نایت کیا ہے اس کو کیا arguments بھیجنے ہیں اس نے return کیا کرنا ہے اس وارتے ہم ایک function کی declaration main سے اوپر دال دیتے ہیں that declaration usually is a single line statement of the type اس میں return type دے دیتے ہیں پھر function کا نام دے دیتے ہیں parenthesis کے اندر ہم list دے دیتے ہیں of the argument types there is no need to name the arguments we can just write int انٹ کمہ انٹ کمہ دبل اگر تین arguments دینے ہیں and that constitutes the declaration of the function end میں semi-colon ضرور آئے گا اس کے بعد main یا کسی اور function میں ہم اس function کو refer کر سکتے ہیں we can use that in an expression پھر جب definition کی باری آتی ہے definition means کہ جی function کو actual بتائیں کہ جی وہ کرتا کیا ہے وہاں پہ آپ declaration والی لائن ہی تقریباً copy کر لیتے ہیں تقریباً اس وارتے میں نے کہا کہ جب آپ arguments کی باری آئے گی تو arguments میں اب آپ variables کے نام دالیں گے now you can't say انٹ کمہ انٹ as the argument list you have to say something like انٹ آئی کمہ دبل جی something like that جو بھی چاہیے ہو function کو پھر اس کا open brace آئے گا پھر اندر جو بھی function نے process کرنا ہے وہ ہوگا اور پھر closing brace آئے گا now we go back and think about what is the return type of the function and how is that returned to the calling program دیکھیں اگر ہم نے کہا کہ جی ایک چھوٹا سا function لیا اور وہ ایک let's say number کا نا square کر کے واپس کرتا ہے and let's say we talking integers so we are going to say something like انٹ square parentheses انٹ now square is the name of the function یہ ہم نے اپنی طرف سے دیا it's like the variable name and of course again we can't use a C reserved word for this for the function name یہ جو میں نے بھی لائن بتائی ہے انٹ square انٹ یہ تو ہوگی function کی declaration اب اگر ہم اس کی definition میں جائیں تو ہم کچھ اس طرح سے لکھ سکتے ہیں کہ جی انٹ square پھر parentheses کے انٹ آئی اس کا مطلب ہے کہ جی square کو ایک integer پاس کیا جا رہا ہے اس کا نام یعنی variable name اس آئی پھر braces آئیں گے اب اس پرگرم کے اندر یہ اس function کے اندر ہم نے آئی کا square لینا ہے تو تو سمپل ہے آئی times آئی کرنے ٹھیک ہے square تو لینا ہمیں آتا ہے لیکن اس کو واپس بھی کرنا ہے واپس کرنے کے لیے there is a specific C statement it is called return ret urn یعنی واپس کرو تو جو ہمیں اس کا ایک کاما ہے and then whatever value we want to return وہ اس کے آگے لکھ دی جاتی ہے or end پہ semicolon remember the type of the function which says it returns an integer تو return کے بعد integer ہی ہونا چاہیے in this case the example that we are working with it is very simple we just say return i times i so i star i semicolon وہی پہ کالکلیٹ ہوگا وہی function کی value return ہو جائے گی اندو کچھ ملود ہوا، یہ ایک ملود ضروری جاتا ہے اور یہ قاومی ارونی شخص اگر آپ کی صور جس کو حکوم دیکھ سکتے ہیں۔ دیکھ کیا ہے کہ جو بہت زیادہ چیز اور اکرمی دیکھ سے على ارونی شخص اگر ملود ، آپ اس جیدیہ بی away ڈا like ڈیو جنگز لی کسی ملودوں لگویاں ہوتی ہیں۔ یہ سوچ لیں۔ اگر اس جیز کو چیز کو تو Crazy ڈیو کسی ملودة کیا ہوتی ہے، گفرشن ہی ہو سکتا ہے بہتر اچھائز کیا نہیں ہوتا ہے اسی رول کو تے کافی کیا چاہتے ہیں اسایانمینٹ لیؤٹ کیا لیٹ اپنے اپنے اچھائز کیا نہیں ہو سکتا تو اور مرای پحول بھی اتفائز کیا اپنے اپنے ایک ساونگей کیا چاہتے ہیں آپ جانتے ہیں اپنے اپنے اپنے اچھائز کیا مرای پر ہے منمود بھی اس طرح کبھی اپنا چاہتا ہے ہم اپنی بہت کامی ہیں ، ہم اپنی بہت کامی کر رہی ہے ، ہم اپنی بہت کامی کر رہے ہیں ، ہم اپنی بہت کامی کر رہے ہیں ، اپنی بہت کامی کامیresponsی دیتے ہیں۔ اگر سقال، اتا ہے کہ اپنے بہتIGHㅁ کرنایاں جب ہماہے کارنے کا ایک سقال کرنایا ہے۔ یہ سوئت ہے کہ ڈک الگان ڈک مدھونیوں کے لئے ڈک کامیوتannoہ سکلا ہے۔ اس جو کافی باہر چیز dès جو clue تو یہ یہ کافی باہر میکسیکیivamente ہہاں یہ کچھ اسٹراسے ہم لکھیں گے اس سے بہتościυχ ہے많ہ صحیح جو کافی میکن == اپنے کی ن fatigue تو دل être کافی حال؟ اپنی حقیقت کی حقیقت، یہ ہمارا ایکویلٹو سائن یہ ہے اس حقیقت کو X کے ساتھ اسوشیٹ کر دےگی یہ نہیں، X will be assigned that value. There can be many functions that need to return a value and therefore they cannot be on the right hand side of an assignment statement. So they can be on a stand-alone line, go do something and that something is done اور کچھ آنے کیا ہے۔ لہذا ہمیں ایک حقیصی نصورتی ہے۔ لیکن ہم حقیصی نصورتی ہے، جس کو ہم استعمال بھی کر سکیں۔ سی کے بارے میں تھوڑ سی بات کرتے چلتے ہیں۔ دیکھیں، سپارس لنگوڈج ہے اس میں، اچھی بات ہے کہ ہمیں بہت تھوڑی سی چیزیں یاد رکھنی پڑتی ہیں۔ ارثمتیک اوپریٹرز، ملٹپلائر ڈیوائٹ پلس مینلس موجلو ختم۔ سپارس لنگوڈج کے نقصان بھی ہیں۔ نقصان یہ ہے کہ میں اگر کسی نمبر کو ریز کو پاور کرنا چاہوں، تو انفارٹنٹلی کوئی اوپریٹر نہیں ہے مرے پاس، جس سے میں اس کو x to the power n کر سکوں۔ اس کے لیے ہمیں فنکشن لکھنا پڑتا ہے۔ لیکن وہ جب لوگوں کو سی بھی سی بھی رہا ہے، لنگوڈج کے بارے میں پڑھا ہے، یہ ملٹپلائر مینلس ہے۔ سپارس لنگوڈج کے بارے میں بھی رہے ہیں۔ سپارس لنگوڈج کے بارے میں بھی بھی سنگلائن، ملٹپلائر مینلس ہے، یہ ملٹپلائر مینلس ہے، یہ ملٹپلائر مینلس ہے۔ ہمیں فرمیٹرے میں آپ کو پیچہرے سے زیادہ پیچھا سکیں گے۔ جو ہمیں پیچھے گیثری اس میں انتاجر بہت لیں،assy's کو یہاں نمبر کو رکھنا چاہتے ہیں۔ ایک اس جو ہے اس جو فلوٹنگ پینٹ نمبر ہے، نقصانہ کے لئے نمبر کوگی۔ ایشو ہم جو ہم پرجے بھئی ہی بہت لیے۔ فنکشن لکھا جائے۔ کیا آپ یہ تک ہے؟ یہ بہت سیاری ہے۔ x ڈیوٹ ہے x ڈیوٹ ہے x ڈیوٹ ہے x ڈیوٹ ہے x ڈیوٹ ہے x ڈیوٹ ہے یعنی اس نمبر کو اپنے ساتھ اتنی دفعہ ملتیپلائے کرنا ہے جتنی ہمیں پاور چاہیے اگر ہم ایک فنکتن لکھنا چاہیں جو کہ کسی نمبر کو ڈیوٹ ہی نمبر کر سکے تو اس فنکتن کو ہم بھیجیں گے کیا؟ پہلے تو یہ سوچیں تو ہم اس کو نمبر بھیجیں گے اور پھر وہ پاور بھیجیں گے یہ دو چیزیں ہم Provide کریں گے as arguments to the function اس کے بعد وہ اپنی جو بھی computation کرتا ہے وہ ہمیں واپس کیا دے گا؟ واپس وہ دے گا result تو اگر نمبر ایک real number ہم نے بھیجا ہے we expect the answer to also be a real number so in terms of the function declaration it will have a return type of double let's give it a name let's say we call it raise to power or raise to power PoW کیکہ نا keep it short raise to power پھر اس کے arguments آ جائیں گے arguments ہوں گے ایک double ہوگا let's say double x اور پھر comma اور پھر power دینی ہے so that's an integer by our definition we say int i یا int power کیا دیتے ہیں let's be descriptive rules of good programming use descriptive variable names so and then the parenthesis closes اب اس کی body کی طرف آ جاتے ہیں so opening curling brace a curly brace آیا اس کے بعد ہم نے کہا کہ جی کہیں پے کوئی store کرنے کے لیے چیز ہونی چاہے جہاں پہ ہم results you have a store کر سکے the result will be of type double so we say double result semi colon اس کے بعد we just have to run a little loop saying اس کو اپنے ساتھ اتنی دفعہ multiply کرو again I had mentioned some time ago that whenever we doing an addition exercise find the sum of certain numbers usually the resulting memory location we initialize it from zero جب بھی ہم نے کو ملٹپلکیشن والا کام کرنا ہو it depending on the problem but میں ایک ہنٹ کیا طوٹ کا جس کو کہتے ہیں وہ آپ کو بتا رہوں so multiplication والے کام میں we usually one سے شروع کرتے ہیں اب مجھے ایک loop چلانی ہے power times وہ چلے گی so a loop counter بھی چاہی ہے that is usually an integer so we say int i i is small it is convention the name doesn't mean much so we in a way violating a little rule saying کجی variable name should mean something آپ انٹ کامٹر بھی اس کو کہہ سکتے تھے but i جے کے بڑے پرانے traditionally نام پڑے ہیں for integer variables usually used to control loop counters so we will use i so we say double result semicolon int i semicolon اس کے بعد let's initialize the value of result the result starts with the value 1 so we say result equals 1.0 semicolon یہ 1.0 میں نے اس واصدہ لکھا ہے if I had said result equals 1 so 1 as it stands is an integer compiler خود ہی اس کو اجست بھی کر دے گا اس کو اسے کہتے ہیں promote کر دے گا from integer to double اور پھر assign ہو جائے گا but let's be explicit ہم چاہ رہے ہیں کہ یہ real number استعمال ہو تو ہم 1.0 لکھتے ہیں اس کے بعد ہم کریں گے کیا ہمارے پاس نمبر آیا ہے in the form of the variable called x جو argument list میں آیا تھا وہ within the function استعمال ہو سکتا ہے تو ہم کہتے ہیں کہ result کو x سے multiply کر دو result 1 سے شروع ہو رہے x سے multiply ہو گا تو result میں value x آجائے گی اور پھر اس کو x سے multiply کر دو تو result میں value x squared آجائے گی پھر x سے multiply کر دو x cubed ہو جائے گا and so on کتی دفعہ کرنا ہے power times power کنسی چیز ہے وہ جو argument پاس ہوا تھا ہمارے پاس calling program کی طرف سے integer کے طور پے so by now hopefully you know how to write loops so it's a simple loop we can use while we can use for we can use whatever we want in this case let us use a for loop so we say result equals 1 1.0 وہ initialization ہو گی پھر ہم for loop لکھتے ہیں for i equal to 1 semi colon i less than or equal to power semi colon increment i i plus plus parenthesis close اور نیچے braces کے ساتھ ہم for loop کی body لکھتے ہیں so opening and closing brace آپ بنا لیجے لکھ لیجے اور پھر اس کے اندر تاپ کریں گے دیکھیں i plus plus بھی استعمال ہو گیا پچھتی دفعہ ہم نے بات کی تھی کہ جی increment operator ہوتا ہے so this is where it is used again I'm using an obvious counting sequence i equal to 1 less than or equal to power تک so naturally ہم گنٹی شروع کرتے ہیں 1 2 3 ہم کبھی 0 1 2 نہیں کرتے لیکن hopefully when you become a complete c programmer آپ کی گنٹی 0 سے شروع ہو رہی ہو گی any other c programmer would have written or rather an experience c programmer would have written for i equal to 0 semi colon i less than power semi colon گنٹی کرنی ہے 0 سے less than کی گنٹی اُتنی ہی ہوگی جوکے 1 سے less than or equal to کی گنٹی ہے so this is again something that you will build up over experience and a matter of programming style use whatever you are comfortable with اب for loop کی body کی اندر آتے ہیں body کی اندر ہم نے کیا کرنا ہے we want to accumulate the into the variable called result x کی multiplication result کی اوپر دیکھا ہم نے initialized کیا تھا by 1 so here we say result equals result times x so result star x semi colon but why should we write it like this we already have an operator جہاں پہ ہم compound operator استعمال کر سکتے ہیں so let's use that so we say result star equals x semi colon and it is read as result equals result multiplied by x that is the end of the for loop so for loop power times چلیگی or result میں x power times multiply ہو جائے گا which means x to the power n power جو ہے وہ کالکلیٹ ہو جائے گا اب ایک آخری حصہ رہتا ہے وہ یہ ہے کی جی اس result کو واپس کرنا ہے so for loop جب ختم ہوتی ہے اس کے closing brace کے بعد ہم کہہ دیتے ہیں return result semi colon closing brace function complete so quite simple when we say return result تو یہ answer جو ہے یہ calling program کو چلا جائے گا now let's see کی جی اس function جو ہم نے بنا لیا ہے اس کو call کیسے کیا جائے so we will write a little main to call this program in this case again since we want to see the results we will start out with sharp include i o stream.h and so on پھر میں آگیا parenthesis rather opening brace آگئی اس کے بعد ہم let's say ہم user سے input لے لیتے ہیں کہ جی کنسا number اور اس کو کس power پے raise کرنا ہے so be polite use a c out statement to say please enter the number or c in کے ساتھ ہم اس کی value get کر لیتے ہیں I won't go over the details but that's basically what you want to do then again give a prompt say c out please enter the integer power that you want this number raised to or پھر c in کے ساتھ value لے لیتے ہیں suppose the number is in a double variable called x and the power is in a double variable called i وہ ہم نے declare کیے c in کے ساتھ values assign ہوگی اب آتی ہے function call تو ہم دیریکلی کسی کو assign نہیں کرتے ہم اس کا answer ہی print کرا دیتے ہیں so we can write something like a compound c out statement to print the results on the screen and we say c out less than less than within quotation marks the square or rather x raised to the power n اور یہ x اور n کی جگہ پے آپ نمبر کی value سپرنٹ کریں وہ quotation marks کے بہر آئیں گی variable کے نام آئیں گے اور پھر end پی آپ کہہ دیں is equal to quotation marks کے اندر اور پھر less than less than اب یہاں پہاں سیدہ function call لکھ سکتے ہیں اور یہ function call ہوگی raised to power opening parenthesis x comma i closing parenthesis semi-colon دیکھیں جہاں پہ میں نے function کو call کیا ہے وہاں پہ میں نے double int وگیرا کچھ نہیں لکھا it is important to know when using the function inside another program you don't show کجھ اس کی return type ڈبل ہے اس کو ایک ڈبل اور ایک int pass ہو رہا ہے وہ declaration اور definition کا حصہ ہیں وہ ہو چکا اب ہے actual function call کی باری تو function call سیمپلی استعمال ہوتا ہے name of the function and the argument list in terms of variables اب what do you expect کہ جب یہ function return ہوگا hopefully everything compiles runs fine اس کی square کی value یا to the power n کی value آگئی آپ نے print کروالی جو original value تھی x کی اور جو original value تھی i کی ان کو کیا ہوگا can you give that a thought exactly جیسے پہلے ہم نے binary operators کی بات کی تھی کہ x is equal to a plus b ہم نے کہا تھا جی a کو اور b کو کچھ نہیں ہوتا وہ کہی پہ کالکلیشن ہوتی اس کا result x کو ایسائن ہو جاتا ہے تو x is affected but a and b are not touched in this case also when we say raise to the power x comma i نہ x کو کچھ ہو رہا ہے نہ i کو کچھ ہو رہا ہے صرف ان کی values استعمال ہوری ہیں کسی calculation کی اندر اور calculation کے بعد ان کی value کہیں پہ یا ایسائن ہو رہی ہے یا ہم print کر رہے ہیں and display کر رہے ہیں so there are many things we can do with it plus be aware of this that nothing is happening to the arguments that were passed to the function یہ بعد میں جاکے ہم دیکھیں گے کہ اس کو change کیسے کیا جا سکتا ہے but for the moment اس کو ہم اس کو ایک نام دیتے ہیں ہم کہتے ہیں call by value سبسکوینٹ لیکچس میں ہم call by value and call by reference کے اوپر in detail جائیں گے آج کے لیے اتنا ہی کافی ہے کہ جی ہم call by value کرتے ہیں so جو arguments pass ہوتے ہیں function کو function ان کی values نہیں بدل سکتا call in program میں اپنے پاس ان کی کوپی چلی گی اس کوپی کے ساتھ جو مرزی کریں main program میں your calling program میں کچھ نہیں ہوتا so you have to have a function hierarchy کا concept کہ جی دیتے ہیں there is a calling program and there is a called program so the called program is our sub function or the function that we normally call let's go on and look at one more example that will be the area of the ring and I am going towards this code reuse so let's look at how do we program that so if you remember we have spoken about calculating the area of a ring and I had said that a ring basically consists of two concentric circles so if we know to remove the area of circles then you subtract the area of a big circle from the area of a small circle then the area left will be the area of the ring so in a way what we need is a function to calculate the area of a circle وہ hopfully آپ سب کو آتا ہے کیا ہوتا ہے pi r squared یاد ہے where r is the radius of the circle pi r squared represents the area of the circle so let's first write the function to calculate the area of a circle and then use it in a program to calculate the area of a ring so ہمارا function جو ہوگا اس نے area return کرنے should be of type دبہ you can't expect پای کے ساتھ کسی چیز کو multiply کریں تو integer return ہو رہا ہوں so it is دبہ پھر function کا نام لکنا ہے let's use a descriptive name rules of good programming so we say circle area one word you can just use circle area اور اس کو ایک چیز پاس کرنی ہے کیا چیز چاہی ہے ہمیں آپ کہہ سکتے ہیں پای پاس کرنے اور radius پاس کرنے پای توئیکervices 10.1415926 times radius times radius is doing the computation and returning the result of type double to whichever program needs to use this function, function نکھا گیا. Now let's go and write a program that will use this function. سو اس میں تو مین او آئے سٹریم آئے گا یا آئے گا because it's the program where we want to start. Let's start out by requesting from the user کجیبو رنکے outer or inner circles کی ریڈی آئے بتائے. سو ہی سی آوٹ پیس انٹر the outer radius value. ٹیکھے اور ہم نے declare کر رکے ہیں دو variables. Let's call them ریڈو اون and ریڈو اون which are of type double and ریڈو اون will contain the bigger circles radius and ریڈو اون will have the smaller circles radius. سو ہم نے prompt دے کیا ہم نے کہا see in ریڈو اون then the second prompt کیا کہ جی see out something like please enter the radius of the inner circle or see in greater than greater than ریڈو ہر چیز کے بعد سیمی کولن آ رہے you know that already. اب آتی ہے function call کی جی آپ ہم نے area of the ring کالکلیٹ کرنا ہے. سو let's have a variable وہ بھی اوپر declare کیا ہوئے something like double ریڈو ایریہ آپ نے یہاں پہ لکھا ریڈو ایریہ ایکوالس circle ایریہ ریڈو اون کیا چیز ریٹرن کرے گا the area of a circle with radius one and we have said that will be the outer radius ریڈو ایریہ چاہیے تو we have to subtract from it something else. سو we say minus circle ایریہ ریڈو سیمی کولن ختم اب دیکھیں دو تین چیزیں ہم نے یہاں پی کی just to exemplify left side پہ تو ایک سیمپل ویریہ بل آگیا ring ایریہ right side of the assignment statement actually contains two function calls to the same function there's no rule which says کی جی ایک function دو بارہ call نہیں ہو سکتا you can call it as many times as you want. سو we called it once with an argument of red one which was the outer radius اس نے ہمیں ایک circle کا area دیا واپس جس کا radius جو تھا وہ red one تھا اور اس کے بعد میں نے minus لکھا سو we subtracted from it the area of the circle having radius red two اب ہم آپ اس ring area آگیا ہے we can say see out the area of the ring having inner radius this much and outer radius that much is ring area. سو I won't go into the details of that but you can see that in your handouts آپ خود بھی لکھیں so it's quite simple یہ ایک ہمارا main function ہے جو کہ ایک function کو call کرتا ہے again red one in red two جو function میں پہنچتے ہیں تو ایک دفعہ ایک جا رہا ہے اور اس کا نام وہاں پہ function کے اندر ایک اور variable میں بیٹھا ہے name radius and that makes it obvious کہ یہ red one کی value کو کچھ نہیں کر رہا circle area function جو ہے وہ تو ایک copy اس کی pass ہو گئی ہے red two کی copy pass ہو گئی ہے value pass ہو گئی ہے اور value کے ساتھ اس نے calculation کر کے result واپس دے دیا ہے پھر ہم نے دیکھا کہ جی right hand side of the assignment ساتھ میں پہنچتے ہیں لیکن ایکی function کی دو دفعہ calls آگی کوئی restriction نہیں ہے the functions themselves were used in an arithmetic expression something like i minus جی so we said circle area red one minus circle area red two so you can use functions in expressions as long as the return value of the function makes sense in that expression اور پھر ان کا result جو ہم نے assign کر دیا so it's quite simple the function mechanism جو ہے it is fairly simple and the functions are extremely versatile جہاں مرزی ان کو استمال کریں جتی مرزی دفعہ call کریں just دو تین were چھوٹے چھوٹے rules کہ جی you can't assign something to a function so function doesn't occur on the left hand side of an assignment statement you can say something like some other variable equals two times circle area so two star circle area red one it's valid it's a valid arithmetic expression so functions can form part of arithmetic expressions as long of course as they are returning an arithmetic value but of course as i said earlier functions can either not return a value or can return a value of any valid data type so بہت ساری فلکسی بلیٹی اس کے اندر ہے کیوں ہم استمال کر رہے ہیں functions کو let's go back and think about it a little bit more دیکھیں اس اگزامپل سے ہمیں کیا چیز پتہ چلی main چیز کجی code reuse ہو گیا circle area ہم نے دو دفعہ call کر لیا ہے ایک دفعہ at one کے ساتھ ایک دفعہ at two کے ساتھ ہم نے دو دفعہ code نہیں لکھنا پڑا اگر ہم function نہ استمال کرتے تو main program اس طرح بھی لکھا جا سکتا تھا کہ جی ring area equals 3.1415926 times read one times read one minus وہی پائی کی value times read two times read two اتنے سمپل problem کے اندر function کی زیادہ use نظر نہیں آتا لیکن encapsulation آپ نے دیکھ لی کہ یہ ایک circle area ایک function اور بھی کسی کام آ سکتا تھا ہم نے وہ لکھ لیا اور اس کو ہم بار بار استمال کر سکتے ہیں so there is a reuse of the code as per the rules or some guidelines as I mentioned earlier the function performs a very specific task very clear because circle کا ایریہ کلکلیٹ کرتا ہے ring sheen کا اس کو کچھ نہیں پاتا وہ main program کا کام ہے and so on so you can build up in modular form from smaller building blocks you can build up more and more complex programs اب جہاں پہ ایک میں نے بات کی تھی definition or declaration کی اس کے بارے میں تھوڑا سا recap کر لیتے ہیں کیونکہ that is also important to understand پہلے ہم نے جب بات کی تھی about function declaration and then of definition تو میں آپ کا بتایا تھا کہ دیکھیں اگر ہم کوئی چیز استمال کرنا چاہتے ہیں تو ہمیں اس کا استمال آنا چاہی ہے how to call a function اگر function کی definition جو ہے وہ کہیں بات میں آ رہی ہے program کے اندر it's a separate module it comes below the calling program then the calling program needs to know how to call the function and what does it return اس کے لیے ہم اس کی declaration اوپر دے دیتے ہیں تیک ہے so it's a single line declaration then we can use the function اور پھر اس کی بعد میں definition اگر ہم استمال مطلب دیفائن کر دیں گے اور پھر compiler you have اس کو it takes care of things and everything is all right اگر ہم اوپر declaration نہیں دارلیں گے تو compiler کمپلین کر دے گا جب اس لائن پہ پہ پہنچے گا کہ جب یہ definition تو مجھے پتہ نہیں ہے تو آپ استمال کیسے کر رہی اس نام کو so we can use that for this purpose which is more stylistic کہ جی where do we place the function after the calling program or before the following the calling program if we place it as I mentioned earlier before the calling program no problem just go ahead and use it you do not need a separate declaration but if it comes afterwards you need a separate declaration اگلی دفعہ ہم ہیڈر فائل کی بات کریں گے اس میں بھی بات ہو جائے گی جی a declaration کھان جا سکتی ہے but اس فکر I want to look at it from a different point of view ہم نے یہ لیکچر آج کر بات جو ہے شروع کی تھی by saying کے جی we want to go top down we want to divide and conquer we want to take a complex problem and break it up into smaller parts in a way the declaration جو ہے اس کا ایک دوسرہ نام بھی ہے prototyping یا giving a function prototype prototype کا مطلب ہوفولی آپ کو آتا ہوگا جب بھی ہم کوئی چیز پہلی دفعہ بناتے ہیں تو اس کا ایک prototype تیار کرتے ہیں maybe it is not a fully functional thing maybe یہ ہے کہ جی ایک گاری ہم نے نئی بنانی ہے تو اس کی شکل صورت کیا ہوگی کوئی تصویریں بناتے ہیں کوئی لکڑی کا دھانچا بناتے ہیں کہتے ہیں جی ایسی لگے گی بعد میں جب منیفیکٹر کی باری آتی ہے تو ہم اس کے وہ details اور ہر چیز کمکلیٹ کرتے ہیں in a way the declaration used as a prototype is a good way of arranging your thoughts so you can break up let's say یہ ہمارا ring ڈیا والا جو problem تھا ہم کہتے ہیں کہ جی ring ڈیا کے اندر ہم ایک circle ڈیا والا function استعمال کریں گے circle ڈیا کو ہم radius pass کریں گے اور وہ area of the circle return کرے گا تو اس کی prototype in the form of a function declaration ڈیکلوریشن اوپر لکھتے ہیں اور اپنا program لکھلیں جو کہ ring ڈیا کو کلکلیٹ کرتا ہے جب یہ لکھا گیا now we can worry about کی جی ہمارے پاس ایک function ہے جو define ہونا رہتا ہے تو وہ ارام سے ہم define کر لیتے ہیں so in a way we are following a top down methodology so the declaration can be viewed as prototyping of the function keep that in mind because it's a different way of looking at things so breaking a program up into smaller modules پہلے صرف نام لکھنے بتا دیں argument کیا جائیں گے واپس کیا آئے گا and so on and therefore we are using it as a prototype the definition can wait دوسر دن آکے ہم define کر لیں گے that is one way of looking at the declaration and definition issue اب دیکھیں کہ جی ہم نے آج دو تین چھوٹے چھوٹے programs لکھے اور ان کو استعمال کیا ایک ہم نے race to power لکھا تھا ایک ایریہ والا لکھا تھا ring ڈی ایریہ والا آپ کے لیے کچھ exercises ہیں جی کنہ یہ programs ہوفولی آپ کے پاس handouts موجود ہوں گے you can punch them in run them yourself make sure that they work how do you add some functionality how do you add some more features into these programs I will give you some hints or ideas and you can work with them let's take the race to power function first اگر آپ دیکھیں گے تو as written that function only works with positive powers یعنی اگر power جو ویریبل ہے اس کے اندر ایک positive integer دیا ہو تو یہ function کام کرے گا اگر اس میں zero دیا ہو تو کیا واپس آئے گا you have to worry about it you think about it maybe it already returns the correct value maybe it doesn't think about it go to the discussion board and see let's see what you have to say other part what if the power is negative آپ کو یاد ہے ڈی اگر x to the minus three لکھا ہو تو اس کا کیا مطلب ہوتا ہے یاد ہوگا کہ جی x to the minus three is actually one over x cubed so why don't you modify the race to power function so that it can handle negative powers of x zero and positive powers of x let's see how you do that this is an exercise for yourself same thing applies to the other little program that we did which was the ring area problem اس کے اندر چھوٹی سی چیز ہم نے کچھ پوچی نہیں ہے main program کے اندر ہم نے کہا جی enter the area of the outer circle so read one کے اندر لے گا اور پھر read two کی value لے گا what happens اگر user جو ہے وہ read one کی value چھوٹی دے دے اور read two کی value جو ہے وہ بڑی دے دے will that work what you have to worry about is put in some error checking again polite so if the user insists کے جی outer circle چھوٹا ہے اور inner circle بڑا ہے which means you will probably get a negative answer for the ring area you should put in some error checking if read one is less than read two give some message کہ جی outer circle must be larger if read one is equal to read two and remember equality کا operator is double equal to sign پھر اور دے دیں کہ جی رنگ تو نہ بنانا اطلاب outer circle inner circle اگر برابر ہیں تو zero answer آئے گا so you could put in some error checking ارے چیکنگ ایس also an essential part of programming whenever you take input from the user you must make sure that all cases are handled so you must make sure کہ جی the values that you expect to use in the computations are valid values so ارے چیکنگ بھی کی جے گا so let's do a quick recap of what we've done today آج کا مجھے پوشن ہم نے functions کے لئے ہم نے time devote کیا اور functions کو ہم نے استعمال اس طرح سے کیا کہ جی ایک complex problem کو توڑ کے چھوٹے چھوٹے حصوں میں بنا کے ہم programming کرنا چاہتے ہیں which is the top down structured approach ایچ function should be a small module self-contained and it should solve a well-defined problem that is important do not artificially divide into little pieces which do not have any worth وہ زیادتی ہو جاتی ہے so ایک well-defined چھوٹا سا حصہ جو ہے وہ define ہو رہا self-contained ہو variable naming وہی useful نام استعمال کریں function کے نام جو ہیں وہ بھی اسی طرح کے ہوں کہ they're self-explanatory so the code becomes readable always remember to comment your code lots of comments at the top of a function you should give at the very least کے جی ایک function کرے گا کیا and so on so forth اگلے لیکچر میں we will worry more about calling by value and calling by reference so till then خدا حافظ