 اسلام علیکم today is the 12th lecture and we will continue our discussion about arrays پیسلی دفہان نے arrays کو انٹروڈیوز کیا آپ ان کو دیکلیر کرنا بتایا and we ended it تھوڑے سے استمال کے بعد by introducing the const keyword which I recommended that when you come to complex programs and large programs you should start using it to declare the size of the array it makes life very very easy and simple today's agenda is something like this first we will consider the strings which are character arrays which is very important and we will use them extensively in our coming lectures after the strings we will look at some small algorithms what can be done with arrays and then we will introduce multidimensional arrays so let's start today's discussion with the strings when ever we dealing with words and sentences we are actually dealing with arrays of characters ابھی تک تو ہم arrays جہاں وہ انٹیجز کے ساتھ deal کرتے رہے تھے کہ جی ایج ہے یہ ہے وہ ہے but what about your name ابھی تک دیکھیں آپ کو اپنا نام جو ہے وہ کسی variable میں لکنا نہیں آیا you can't say something like see out please enter your name and see in into something it can't be a simple variable ویریبل میں تو ایک کاریکٹر آتا ہے so how do we grab your name name کے لیے what we need is a character array no different from the integer arrays we say something like 4 name square bracket 100 square bracket closed what we have done is we have declared a string or a character array character arrays میں you should have mentioned that there are some properties and you should know those properties well دیکھیں جب ہم let's say array declare character array 100 characters کی دیکلیر کر دی آپ نے اپنا نام انپوٹ کیا نام جو ہے let's say 15 یا 20 characters کا ہے باکیوں کا کیا بنے گا آپ جب اس کو display میں پہلے بیس میں نام لکھا ہوا اور باکی blank spaces ہوں گی what do you think well see was born when character handling was required I mean there was a word processing requirement so it has very very strong character handling capabilities one of those capabilities is this notion of strings جب بھی ہم کسی character array کے اندر کوئی string کو جب بھی ہم کسی character array کے اندر کوئی string کو پلس کرتے ہیں میں کہہ رہا ہوں کہ جیسے آپ کا نام ہے that is a string of characters so I'll be using that as a string جب بھی ہم کسی array کے اندر ایک string کو پلس کرتے ہیں تو کسی نا کسی طریقے سے computer آپ نے پاس ایک marker رکھ لیتا ہے کہ جی array تو اتنی بڑی تھی لیکن اس کے اندر اتنی سی string store ہوئی ہے وہ marker جو ہے is a special character جو ہے نل character نل character جو ہے اس کا اس کی کوڑ یعنی byنوی representation جو ہے وہ all zeros ہے all zeros کو see میں ہم رپرزنٹ کرتے ہیں as usual with an escape character which is the back slash zero دیکھیں ہم نے ایک پہلے استعمال کیا تھا new line کے لیے کہ جی اگر نئی لائن پہ آپ نے پرنٹنگ شروع کرنی ہو تو یہاں پہ کیا لکھا جائے وہ تھا back slash n اس کے بعد ہم نے نمبرز یا کریکٹرز کے درمیان space کیلئے ہم نے ایک tab character ڈیوز کیا اس کا short hand جو تھا وہ تھا back slash t اب ہم ایک نیا کریکٹر استعمال کر رہے ہیں وہ ہے back slash zero which stands for the null character and is the character that see uses to terminate character strings all see strings are terminated with the null character اس کا تعلق ممری کے ساتھ بھی ہے جی جی جو ہیں کریکٹر ڈیوز وہ ممری میں کیسے store ہوتی ہیں اور کہاں ختم ہوتی ہیں one needs to know that whenever we declare a character ڈیوز کیا we normally declare it a little larger than we require and then we try to input something into it how do we do that now life is easy suppose you declare a character ڈیوز saying character or char name 100 within square brackets semi colon پھر آپ کیا سکتے ہیں see out please enter your name وہی less than or quotation marks ڈیوز کیا اب آپ کیا سکتے ہیں see in greater than greater than name semi colon this is the first time that you are using something other than a simple variable on the right hand side in a see in statement there is intelligence built in to the see in a stream وہ انٹلیجنسی ہے it allows the compiler or rather the program to read a whole string at a time rather than a single character وہ دیکھتا ہے کہ جی name جو ہے is not a simple variable it's a string or a character ڈیوز تو see in جو ہے وہ character ڈیوز کو پڑے گا اور کہاں تک پڑے گا جب آپ enter دبائیں گے اس کے اندر سٹور کر دی جائے گی اپنی طرف سے see جو ہے وہ اس کے اند پہ backslash 0 یعنی null character کو attach کر دے گی so you have to be clear کہ جو total number of spaces occupied ہے اس character ڈیوز کیا اندر وہ جو آپ نے words enter کیے تھے let's say آپ نام enter کیا تھا ان کی length let's say کجی 15 characters آپ نے enter کیے اور 1 null character you need total length 16 ہو جاتی ہے اس چیز کا خیال رکھنا اس پاس دے لازمی ہے کہ this is the null character is the one that see uses to determine کہ the array کے اندر populated ڈیوز ختم کہاں پہ ہوئے اگر آپ assign کر دیتے ہیں within a program or some by somehow you try to assign more characters than will fit in the array اور end پہ backslash 0 نہ آسکے تو program کو یہ نہیں پتا چلے گا کہ memory میں character ڈیوز کہاں پہ ختم ہوئی and that can cause serious logical errors may be your program stops working or other interesting side effects start happening so keep that clear in your mind whenever working with character ڈیوز the size of the array should be one greater than the number of characters that you want to store in it now let us take a look at how can we initialize these arrays ہم نے integer arrays کیلئے بھی an initializer کی بات کی تھی کہ جی curly braces کے ساتھ آپ اس کو ایک list دے دے نمبرز کی وہ array initialize ہو سکتی ہے اس کے ساتھ پھر ہم نے یہ کہا کہ جی اگر آپ array کا size declaration کے اندر نہ بتائیں اور ادھر ایک numbers کی list دے than curly braces کے اندر list means integers separated by commas تو اتنی بڑی integer array automatically compiler بہت of these things actually apply to character arrays as well so you can say something like character 4 name 100 equals اب آپ چاہیں تو simple quotation marks میں کر لیں ایک پوری string لکھتے یا آپ وہی curly braces اور پھر اندر ایک ایک character لکھتے جائیں character کیسے لکھا جاتا ہے کچھ یاد ہے آپ کو single characters are written within single quotation marks جس کا apostrophe بھی کہتے ہیں so single quotation marks ایک character a or b or c or x whatever پھر quotation mark closed یہ ایک character ہے پھر comma پھر اسی طرح single quotes کے اندر دوسرہ character comma and so on جتنے characters آپ اس character array میں store کرنا چاہتے ہیں وہ initializer لائن کے اوپر آپ دے سکتے ہیں دوسرہ طریقہ جو ہے وہ character arrays میں زیادہ آسان ہے جی آپ لکھیں چار نیم square brackets square brackets کے اندر کچھ بھی نہ لکھیں equal to اور آگے آپ string لکھتے ہیں اب string جو ہے ہم c میں double quotation marks کے اندر لکھتے ہیں you might want to write something like hello world or welcome to v u or something like that as a character string وہ string اس array کے اندر آسان ہو جائے گی اور array کا size automatically جتنے characters تھے string میں that plus one for the null character وہ allocate ہو جائے گا remember memory جو ہے وہ declaration time پہ allocate ہوتی ہے ابھی تاک ہمارے پاس کوئی ایسا tool نہیں ہے جسے ہم memory dynamically allocate کر سکیں بعد میں ہوں گے ہمارے پاس لیکن اس وقت جو ہم declaration لکھتے ہیں کوئی variable ہے یا array ہے اتنی memory ریزرف ہو جاتی ہے اور وہ پھر program کے دران استعمال ہوتی ہے so here we can straight away assign a string to an character array اور وہاں پہ array کا size is automatically determined کچھ کر سکتے ہیں اس کے ساتھ بہت ساری interesting چیزیں پہلی چیز let's start reading your name from the keyboard and outputting it on the screen so you can say something like 4 name 100 see out please enter your name see in greater than greater than name as I mentioned earlier آپ جوپی آپ تیپ کریں گے جب تک آپ enter کی نہیں دباتے وہ اس array میں چلا جائے گا see in کر کے name array کے اندر آگیا اب output کیسے کریں well again see out is intelligent enough if you say see out less than less than name semi colon تو وہ جو string آپ نے انٹر کی تھی وہی screen کیوں پر display کر دے گا alternatively ہم loop چلا سکتے ہیں we could say something like for I equal to 0 I less than 100 I plus plus see out less than less than name of I so you say name square bracket I square bracket square bracket semi colon what that does is کہ I کو ویری کرتے پہلی name of 0 character output ہوگا then name of 1 character output ہوگا then name of 2 character output ہوگا and so on trick to remember is کہ جو character array can the string پڑی ہوئی ہے وہ ایک null character سے end ہو رہی ہے so you don't want to print the null character and then whatever garbage follows because it might really be garbage کہ memory can the random values ہو سکتی ہیں which may not be real characters so you might want to add a condition when processing arrays like this کہ جی output کرتے جاو single character at a time till the null string is reached جب آپ پہلہ alternative لیتے ہیں it says see out less than less than name semi colon تو automatically see out does this for you وہ name میں سے اتنا حصہ لے گا up to the null character وہ پرنٹ کر دے گا جب آپ single character handling کر رہے ہیں then it is your responsibility to find out کہ جی کہہاں پرکنا ہے so think about how you could use a while loop to process the array of characters one character at a time but you stop short of the null character اب اس کے ساتھ ہم اور بھی چیزیں کر سکتے ہیں once we have this facility that we can access the character string a single character at a time we can start asking questions like are two character strings equal so you can start comparing them comparing well it is the same as comparing any two arrays whether they're integers or their characters the problem is the same the question that I'm asking is is array one equal to array two well you can first of all put in a condition کہ جی arrays کا size برابر ہونا چاہئے only then we will compare will make it simple for ourselves suppose کہ جی دونوں arrays کا size ہم پیر کرنا ہے اسی طرح جیسے ہم نے پسلی دفعہ بات کی تھی کہ جی ایک نمبر دھونتے ہوئے ہم نے ایک فلاگ اپنے لیے رکھ لیا تھا کہ جی فاوند تو یہاں پہ ہم شاہد ایک اور انٹیجر فلاگ دیکلیر کر لی ہم کہتے ہیں انٹیجر ایک بلز اور ایک بلز ایک بلز zero ایک انہاں eq ual which مینس کہ جی ابھی یہ ایریز برابر نہیں آئی ہے اور ایریڈ 2 آئی نہیں رکھتے آئی ہم loop counter میں استعمال کر لیں گے ہم کہتے ہیں کہ جیس کا نام ہے num1 of 100 اور دوسی آئی جو ہے وہ num2 of 100 ہے تو دونوں میں سوسہ نمبر پڑے ہوئے دیترمین یہ کرنا ہے کہ جی دونوں ایریز ایڈینٹیکل ہیں کہ نہیں ہم سیمپل لوجیک استعمال کرتے ہیں پہلے کہتے ہیں کہ یہ برابر نہیں ہے equal equal zero اب loop increment i within the loop we have to run the if statement so braces شروع کر لیتے ہیں make it a habit کے braces استعمال کریں for loop کے ساتھ اس کے اندر پہلی if statement آئی گی if num1 of i equals or rather not equals num2 of i میں not equals کیوں کہا ہے کہ ہمارا انترس جی ہے کہ جی اگر شروع سے لے کے اخیر تک پہلا نمبر جو دونوں ایریز میں برابر نہیں ہے تو ہمارا problem تو حال ہو گیا I mean we know immediately that the arrays are not equal on the other hand we may want to run it all the way to the end and check for equality all the time doing a not equals is a lot easier so we say if num1 of i not equals which is exclamation mark equal to num2 of i اب یہاں پہلے تو کریں کہ جی equals false کرنا ہے آپ نے کسی طریقے سے تو اگر ہم نے اوپر zero لکھاوا تھا یہاں one کر دیں مطلب ہم نے map کرنا ہے کہ جی zero means equal and one means not equal or the other way round for the moment ہم نے کہتا ہے کہ جی equals equal to zero means the arrays are not equal تو ابھی وہ equals equal zero ہی رہے گا یا پہلے اس کو one کرنے let's make it simple let's start out by saying the arrays are not equal we will understand that to mean equals equal to zero means the arrays are equal and we will set the flag which means we will raise the flag if they are not equal our loop can there if the two numbers don't compare we simply say equals equal to one and get out of the loop why process the rest so we say break we come out of the loop and you can always find out whether one character in other words a name is equal to another name this is one way of doing a look up in a database for example کہی اس نام کو دھوں so ایک لیسٹ کے اندر اب نام دھوں رہو تھے you are actually comparing arrays in fact comparing string arrays is such a common function that as the name implies the function has been provided for you in the C libraries we will again look at string handling much later in the course but for the moment you can write your own little character array equality function that compares two arrays the two arrays must have the same size یہ آپ گفن رکھنے for the moment اور پھر آپنے character by character comparison کرنا ہے اور اگر دونوں characters برابر ہیں تو ٹھیک ہے چلتے جائیں جب تک ایرے ختم نہیں ہو جاتی اور اگر ان میں سے ایک بھی ایک بھی اور پہنان بھڑا کیا تو you can ڈیوڈیت لی You can immediately return saying کہ جیے a character the strings are not equal one thing that you must keep in mind یہاں کہ جی چھوٹا ای اور بھڑا ای they are different remember ہم اس کی character سیٹہ استعمال کر رہے ہیں ہر character کی اپنی حکم ان میں بھی ایک انتو官 گے اجترجہ کے حوالے کے بارے کے دیزانان میں ہی چکے ہیں ازمت حمید جو پرپرلی ہے اہنی پہلا پہلے ای ہے باکی چھوٹ的话 روپہ اجہ ہے اور پھر چھوٹا ہے اور چھوٹا ہے اور اسے ایک بارے کے بارے کے لئے بھی سب سے نلکی اریالی کیا can you do with character arrays will have some fun آپنا نام انپوٹ کریں اس کو reverse order میں output کریں you can think of the logic which would be required کہ اخری character پہلے پرنت ہوں پھر اس سے پہلا پھر اس سے پہلا all the way to the first character you may want to find out how long the arrays so you can start counting from the beginning till you reach the nul character character strings کے ساتھ کیا کر سکتے ہیں انٹیجرز کے ساتھ نہیں کر سکتے ہیں انٹیجرز کے لیے تو value آپ کو پتا ہے so you could play with strings i mean do it do some random try to think of a game that you can play with characters a guessing game or something like that but there's a lot of stuff that you can do what else can we do last time we mentioned a rudimentary search technique ٹیکنہ ایک نمبر لو اس کو array میں دھونا شروع کر دو same thing you could do with with characters ٹیک ہے what else well how about sorting ٹیک سوارٹنگ ہے سوارٹنگ ہے انٹرسٹنگ پروبلم I'm sure آپ نے پہلے انٹردکشنٹو کمپوٹنگ میں بھی اس کو دیکھا تھا bubble sort پھر quick sort اٹسی پر you will find actually the comprehensive you have searching بھی او سوارٹنگ کی coverage جو ہے وہ subsequent courses میں ہوگی algorithms میں آئے گی اٹسی پر because these are very specialized techniques for the moment I'll just mention a couple or I think that you would have enough practice now to be able to implement some kind of a sort algorithm ٹیکنی ایک بھروٹ فوز ٹیکنی کلے لیں جی آپ کے پاس ایک array of numbers موجود ہے array of numbers میں سے آپ اس کو sort کرنا چاہتے ہیں تھا کہ سب سے چھوٹا نمبر اوپر آ جائے پھر اس سے بڑا پھر اس سے بڑا اور پھر سب سے بڑا نمبر نیچے آ جائے ایک طریقہ تو یہ ہے جی پہلے آپ پوری ایرے کو سکن کریں سب سے چھوٹا نمبر مل جائے آپ کو تو اس کو سب سے اوپر والی جگے پے لکھنے جانا کیا فر when ever you're doing that you have to start looking into your toolkit and see کہ do you have any programming tricks in your sleeve the problem here is سپوز چلتے چلتے آپ کو soul me position کے اوپر سب سے چھوٹا نمبر مل گیا ایرے میں ایرے کا سائی سو ہے اور سب سے چھوٹا نمبر اب زیروت position پے لکھنا چاہتے ہیں تو کیا اب سیدہ اٹھا کے اس کو زیروت position پے لکھ دیں گے کام بن جائے گا no you'll have lost information the زیروت element would have been over written as soon as you do an assignment پچھلی ممری تو گئی so you would have over in it over written the زیروت element with the value of the 16th element 16th element کو بھی کچھ نہیں ہوا وہ اپنی پہلی والی ویلیو لے کے بیٹھا ہوئے so you have lost information you don't know what the زیروت element was so what do you want to do what you want to do is if you found the smallest element at position 16 you want to interchange the positions 16th پالا زیروت position پے چلا جائے اور زیروت position پاہلہ 16th position پے آجائے so what's the little programming trick trick بھی نہیں کہنا چاہئے it's like part of our vocabulary دیکھیں کیا کریں گے پہلے زیرو والے کو اٹھائیں ایک اور جگے پے محفوظ کر لے 16 کی value اٹھائیں اس کو زیرو والے کی جگے پے لکھ دیں اور پھر جو محفوظ کی وی تھی value اس کو اٹھائیں اور so لینی position پے لکھ دیں again it's a very very common programming paradigm it's called swapping two numbers swap کر رہے ایک کی جگے پے دوسرے کو لکھ رہے from the very nature یا میں نے بتایا کہ جی ایک اور جگے پے لکھ لیں so you need one memory location to do that normally that location is not part of the array so for example اگر آپ کی array کا نام نم ہے num you would use some other location let's say x and you would say x equals نم of zero اپنے نم of zero کی value x position پے لکھ دیں اب آپ نم of zero کو direct assign کر سکتے ہیں because as I mentioned in the previous lecture whenever we write something like نم پرانثیزی zero we're talking of a simple variable and as a simple variable it can occur on the left hand side of an assignment statement so now we say نم of zero equals نم of fifteen so we position is the fifteenth index value and then we say نم of fifteen equals x simple swap so it will always require one extra variable remember that and it's part of your toolkit swapping two numbers we can now think about it back to the problem sorting کر رہے تھے سب سے چھوٹا نمبر دھونکے ہم نے پہلی position پے لکھ دیا اب کیا کریں آپ جی دوسری position سے شروع ہو جائے which is index one اور پھر اخیر تک پھر سب سے چھوٹا نمبر دھون لیں اور پھر اس کو first position پے index one position پے لکھ دیں پھر index two سے شروع ہوکے کی تک so you can think of 20,000 different ways of sorting numbers this of course is brute force it takes a lot of computation چھوٹی ارے تو ہمارے تیز آج کلکہ کمپیوٹر ہیں ایک دم وہ سوٹ کر دیتا ہے لیکن جب بڑی ارے ہو جائیں یا نمبر کمپلیکز ہو جائیں میمری زیادہ استعمال ہو رہی ہو things can slow down considerably or if you need to sort them again and again the same thing applies to search algorithms suppose you've got an array اور اس میں سے آپ نمبر سرچ کرنا چاہ رہے ہیں تو جو ہم نے ایک linear search کی تھی وہ تو جتنے نمبر سے اتنے کمپیرزنز کرے گا so if there are سوہ نمبر ہیں سوہ the five statement چلے گی اور وہ دھوندے گی کجی نمبر ملا ہے یا نہیں ملا can we do something better than that obviously the answer is yes we can always do something better in this case we can think about a binary search algorithm یہ بھی میں خیال میں آپ نے پہلے دیکھا ہوا ہے which is a simple game that you can play with each other and say کہ جی میں نے ایک نمبر گیس کر لیا between zero and one thousand کتنی گیس میں یہ نمبر دھوڑا جا سکتا ہے well if you're playing with someone and they take more than ten guesses well I won't say anything about their IQ but I'll tell you something that they have not done even the rudimentary things about algorithms the trick is جو ہم نے شروع کی تھی structured programming were functions کی اوپر بھی بات کی تھی divide and conquer ایک آپ گیس کریں جو آپ کو جس نے سوچے ہوئے نمبر وہ آپ کو ایک رینج دے دیوی ہے کہ جی اپنہ ایک نمبر گیس کرو یا سرچ کر رہے آپ آنسر ہونا چاہے کہ جی آپ کا نمبر جو گیس کیا آپ نے وہ بڑا ہے یا چھوٹا ہے اور جو بھی ہو وہاں پے ارے کے دو حصے کرنے اور پھر اپپروپریٹ ہی سیک اندر نیک سرچ شروع کرنے تو سڑنی آپ نے ارے کو سائیز کو ہاں کر دیا پھر اس کو ہاں کر دیا پھر اس کو ہاں کر دیا ان سوان so every time you're searching in an array which is half the size of the previous array if you think about it it is going as log n یا نہیں لوگ بیس 2 total array size will be 2 to the power n اور آپ کو n try اس گندر نمبر مل جانا چاہیے which means اگر ہزار نمبر ہے لیکن میں رفلی کہہ رہا ہوں 1000 actual figure is 1024 تو 10 try is the maximum because 2 to the power 10 is 1024 you should be able to guess the exact نمبر in 10 tries or less try that and then try to program it you should have a program that allows you to do this kind of quick search سرچ کے اندر جب بھی ہم بائن ری سرچ کر رہے ہیں there is a catch catch کیا ہے کہ جی it only applies جب کی نمبر کی لیس کیو ہے وہ اوپر پھر سب سے چھوٹا اوپر پھر سے بڑا and so on they are arranged either in ascending order or in descending order otherwise this sort of bind research algorithm doesn't work so you notice that sorting and searching go together very closely you want to apply some of these fast algorithms you have to sort the array first and then apply this algorithm if you want to do linear search it doesn't matter دھوننا ہے نا کہ جی ارے میں یہ نمبر ہے کہ نہیں آپ جس طرح مرزی دھون لیں on the other hand اس چیز پی آپ طرح ہور کریں کہ یہ جو divide and conquer ہے is this the fastest way all the time of searching for a number in a list think about it I'll give you a simple example سپوز نمبر because you have to read outside your textbooks look at the problems problems will be how programming me handle kar than they come from real life so you have to look around you and read additional material only then do you actually start seeing the application of the knowledge that you are gathering let's go on and talk about functions and arrays وہ بھی پیجہ جو کامییوں کے لحظہ کیا ہے، برہم ایک انگرار کی حکومانٹیزوں کو بڑھائے، بیاں حکومانٹیزوں میں آئے لندی۔ ڈیفالٹ کی بیزیں میں کہا کہ کامیل کا میکنیل ہوں، اگر میں ڈیز بار ہے کہ ایک بیانٹہ کی ویشوں میں ایک فنکتے ہیں۔ اگو میں پرامیٹر تک حاکہ میکنیل کے نام کے لحظہ بھی ہے، تو میں کہوں گا f of x میکنیزم کرتا کیا ہے کہ جی x کی value اٹھائی اور value ایک اور خاص جگہ پے رکھ دی اور پھر function call کیا کہا یہاں سے value لے لو original x جو ہے اس کو نہیں کچھ بھی ہوتا وہ اپنی جگہ پے بیٹھا رہتا ہے untouched and unchanged function جو ہے اندر جاکے وہ x کو ریسیب کرے اس کو دبل کرے square کرے square root لے divide by 2 کرے جو مرزی کرے وہ اپنے طور پہ اس کو modify کر سکتا ہے اور اپنے اندر اس کو استعمال کر سکتا ہے but when control returns to the calling program the original value of x is found intact this is the call by value mechanism so a value a copy of the original is sent over what happens when we want to send an array into a function پہلی چیز کی جو اس کو call کیسے کریں so how do you send an array into another function from a calling program and then what goes into the calling program is an entire copy of the array going or is the name going or what happens let's talk about it a little what happens let's see first how we do it کرنے کے لیے ہم دو چیزیں بتائیں گے اپنے function کو ایک بتائیں گے کہ ارے کا نام کیا ہے جو ہم اس کو بھیج رہے ہیں اور دوسرہ جو ہمیں بتانا پڑے گا وہ یہ ہے کہ جی ارے کا سائیز کتنہ ہے کیونکہ رمیمبر ارے تو ہمارے call in program میں let's say ڈیکلیر ہوئی ہے تو call in program کو تو پتا ہے کہ جیس کا سائیز ایک سو ہے یا دو سو ہے یا دس ہے لیکن function کو یہ نہیں پتا اور کیوںکہ ارے جو ہے وہ call in program کے اندر ڈیکلیر ہوئی ہے so if call in program کے اندر ہی اس کی ویزیبلیٹی ہے اس کے سائیز کی ویزیبلٹی so when we call a function we must call it with the name of the ڈیکلیر obviously we want to send it over and we must also tell it how large the ڈیکلیر is so function call let's say we've got an ڈیکلیر a character ڈیکلیر called name so we say 4 name 100 یہ تو ڈیکلیر ریشن ہو گئی ایک function ہے جوکہ نام کو ہم چاہتے ہیں کہ ڈیکلیر دے اور پھر اس کو پرنٹ کر دے میں نے آپ کو بتا ہوں گا کہ ڈیکلیر کیسے ہے یہ تو آپ نے ڈیکلیر کرنی ہے so when we come to function then let's say function کا نام ہے ڈیکلیر then we will say ڈیکلیر پرنٹسیز ڈیکلیر ڈیکلیر so we're sending the name of the ڈیکلیر which is ڈیکلیر and we're sending the size of the ڈیکلیر which is ڈیکلیر ڈیکلیر over to the function یہ تو ہو گیا function کی ڈیکل now the question is کہ جی ہم نے پیشتی دفعہ بات بھی کی تھی function کے ساتھ کے جی اس کی prototype بھی بتا نی ہوتی ہے کئی دفع اگر function بات میں ڈیفائن ہوا ہے تو پہلے اس کو ڈیکلیر کر لیں تاکہ prototype مین کے اندر استعمال ہو سکے prototype اس کی کیا بنیں گی function کے اپنی first line جو ہے جہاں پہ ہم نے لکھا ہے reverse وہاں پہ کیا چیز لکھیں گے so let's take them one by one first is the function prototype prototype میں ہم نے کہا کہ جی let's say کہ یہ جو ہمارا reverse function ہے یہ return کچھ نہیں کرتا so اگر کچھ نہیں return کرتا وہ کیورڈ ہم void استعمال کریں گے void so اس کے prototype میں ہم لکھتے ہیں void reverse parenthesis کھولے اب ہم نے بتانا ہے کہ تمہیں character array مل رہی ہے so we say 4 اور آگے space دے کے ہم square brackets لگا دیتے ہیں خالی square brackets لیکن اگر ہم صرف 4 لکھتے so the function would have said کہ مجھے ایک character ملے گا جب میں call ہوں گا یہاں پہ square brackets لگانے سے آپ فنکٹن کو یہ پتا ہے کہ مجھے character array ملے گی so we say 4 square brackets کا پیر comma and we say int that's it parenthesis close where the integer will represent the size of the array I probably haven't mentioned it but in the array prototype we don't need to name anything we don't have to say 4 name brackets and we don't have to say int array size آپ کہ دیں تو یہ سنٹیکس ارر نہیں ہے لیکن پرکٹکلی compiler will simply ignore those names identifiers prototype کے اندر ignore ہوتے یہ تو ہو گیا اس کا prototype آپ آجائیں فنکٹن کی اپنی definition پے تو definition کے وقت آپ اب variable names یا array names استعمال کریں گے ہم کہتے ہیں void, reverse, parenthesis 4 جو بھی آپ نام دینہ چاہیں array کو اسی نام ہے لوکل جانتے ہیں اسی نام ہے اسی نام دیتے ہیں آپ کو کہتے ہیں کارکٹرز c h a r a c t e r s آپ کو کہتے ہیں سکویر برکٹس آپ کو کہتے ہیں کجی اس کا سائیز کیا ہے سکویر برکٹس رمین امپٹی پھر کاما اور آپ کو کہتے ہیں انٹ ارے سائیز پر انتیسی اس کلوز بریس کھولا اب فنکٹن کی اندر چلے گئے اس میں جو بھی کرنے اس کے ساتھ اندر سکیس ہم نے کارکٹرز چنگ کو ریورس کرنے وہ کریں بریس اس بند فنکٹن کمپلیٹ انٹرسٹین چیز جو نوٹ کرنے والی ہے وہ یہ ہے کہ جب مین چلے گا اس میں آپ نے let's see in کے تھوڑ نیم کے اندر اپنہ نام لکھ دیا اس کے بعد آپ چلے گئے ریورس فنکٹن کے اندر سو کنٹرول پاس اس ہور ریورس فنکٹن نے array کو لیا اور اس کے کارکٹوز کو ریورس کر دیا ختم کنٹرول واپس آگیا فنکٹن نے کوئی چیز ریٹرن نہیں کی ہم نے کہتا اس کی ریٹرن تایپ ویڑ ہے مین میں آگے آپ کہتے ہیں see out less than less than name what will you see کیا اوریجنال جو نیم انٹر کیا تھا وہ نظر آئے گا یا کچھ اور here you're going to see something very interesting whatever the reverse function did to the array will now be appearing in your calling program in your main in this instance what it means is کیا اوریجنال ایرے جو تھی جو calling program میں تھی وہ خود بدل گئی so if you reverse the characters in the function then in main you will find the characters reversed what this means is کیا جی فنکٹن کے پاس array کی کوپی نہیں گئی array بزاتے خود چلی گئی so this is an interesting point پیسلی دفا کچھ لیکچھ مطلب ایک دو لیکچھا س پہلے ہم نے جب بات کی تھی call by reference کی تو ہم نے address operator بھی استمال کیا تھا پھر star operator بھی آیا تھا pointer والا operator جس نے بتایا تھا کہ جی اس طرح سے call by reference ہوتے in the case of arrays call by reference is the default you don't have to use the address operator and you don't have to use pointers if you just call a function with the name of an array then the array itself is passed if you think about it as logical کیوں کیا ہو رہا ہے کیا جب array کا نام پاس ہو رہا ہے تو وہ نام بزاتے خود represents something what does it represent think about it you see when we say x we are talking of a variable and the variable is the name of a location in memory but when we say name name now represents an array it doesn't represent a variable so which memory location interestingly enough see جو ہے وہ array name کے اندر جو memory locations ہیں جو array کو assign کی ہوئے ہیں ان میں سبسی پہلی والی location جو اس کا address رکھ دیتا ہے so in a way in this example the name n a m e which is the name of the array that we are using actually represents the address of the first location of the array called name now what that means is جب ہم نے function کو یہ name پاس کیا تو address ہی pass کر دیا which is exactly the same as جو ہم نے پہلے دیسکس کیا تھا کہگر call by reference implement کرنی ہو تو we have to pass the address of the location because this is the first address of the array we can then increment it and use it like an ordinary array in the function and whatever the function does to the contents which means the array elements is actually happening in memory at the same place جہاں پہ original calling function نے ایرے لکھی تھی لہذا original array جو ہے وہ کود modify ہو رہی ہے you have to keep this in mind because this is a dichotomy this is a different behavior جب ہم variables کو pass کرتے ہیں function کی اندر تو default is call by value جب بھی ہم arrays کو pass کرتے ہیں into another function the default is call by reference be aware of this you do not want unwanted side effects what it means is whenever you are passing a simple variable to a function the default is call by value whenever you pass an array to a function the default is call by reference which means any changes made by the function to that array will be reflected in the calling program you have to be completely aware of this all of the time because otherwise آپ کو سمجھ نہیں آئے گی کجی ہوا کیا ہے because characters بگیرہ تو جلی سے نظر آ جاتے ہیں numbers کے ساتھ اگر change ہو جائے تو you may not know what happened in your program where the logical error is so be careful when passing arrays to functions can we do a simple example to prove that function changes the original array well why not let's take some numbers ایک numeric array لیتے ہیں اس کو ہم main میں declare کریں گے function میں pass کریں گے your function کو کہیں گے اس کو values assign کر دے or واپس main میں آکے اس کو print کر لیتے ہیں so the function is going to take two parameters one is the array and one is the size of the array so اس کا پرلیہ آپ پروٹوٹائی پلکھ لیں void let's call it f this will say void f parentheses int double square brackets which means it's an array comma int which will be the size of the array close parentheses we come to main we declare inside main we say int numbers 100 semicolon f numbers semicolon that means سیدہ سیدہ نمبرز کی array declare کی or f کو pass کر دی اور اس کے بعد وہی پہلے میں ان کو کمپیٹ کر لیتے ہیں ہم کہتے ہیں for let's say int i equal to zero semicolon i less than 100 increment i c out less than less than numbers of i and that's it end of main so we've simply declared an array called a function and printed the array اب آجائیں فنچن کی طرف فنچن بھی ہم سیمپل بنا لیتے ہیں void f int x parentheses square brackets comma int size so array کا size آگیا اس کو ہم array size کیا لیتے ہیں to be very explicit parentheses is closed in the body of the function we again say int i as a loop counter and then we say for i equal to zero i less than array size increment i اور وہی جو بھی x ہمیں ہمیں استعمال کیا نام so x of i equal to i simple assignment جو بھی i کی value ہے اس کو array element میں آسائن کر دو and that's it write out this program compile it execute it make sure کہ main میں جب array print ہوتی ہے اس میں number values نظر آتی ہیں آپ کو which means کہ function جو تھا اس نے array کو چینج کر دیا ہے one important point I mentioned earlier that when we talk of an array element when we say x of three so we're talking of a simple variable it is not the array it is an element of the array and it's treated like a simple variable which means whenever we do a function call جس کے اندر ہم ایک array کا element بھیج رہے ہیں so if we say something like f x of three within square brackets تو like a variable this call is executed with a call by value it is not a call by reference so in this case x of three کی a copy function کو بھیجی جائے گی وہ copy پہ جو مرزی کرے x of three کی value نہیں بدلے گی let us reiterate what we saying is whenever you pass a variable it is pass by value whenever you pass an array to a function it is call by reference and an array element is a variable a simple variable so it becomes a call by value enough on these things as you experiment as you play with these you will understand a lot more arrays جہیں ان کی applications آپ کو تھوڑی سی سوچنا چاہی اور تھوڑا سا آپ کو experiment کریں گے تو اور آجائیں گی اب ہم تھوڑ سے areas بھی تچ کرتے جائیں گے جہاں پہ آپ کو پتا چلے گا ہانجی arrays تو روز مرہ کے کام میں استعمال ہو سکتی ہیں اور روز مرہ نہیں تو maths کے کام میں تو definitely استعمال ہو سکتی ہیں دیکھیں ایک ویکٹر کیا ہوتا ہے a vector is something like values which have independent coordinates so two dimensional vector ہو سکتا ہے three dimensional vector ہو سکتا ہے جس کے اندر اتنی values ہونگی vectors کے dot products لیے جاتے ہیں vector products لیے جاتے ہیں if you've done your maths you know کے vectors کی manipulation ہوتی ہے وہ ساری arrays میں ہو رہی ہوتی ہے ساری array manipulation ہو رہی ہوتی ہے اور simple loop سے ہم کرتے ہیں vector سے آگے چلیں کیا ہوتا ہے matrix نام سنا ہو گا نہیں میں movie کی بات نہیں کر رہا میں بات کر رہوں mathematical structure کی جس کے اندر روز بھی ہوتی ہیں columns بھی ہوتے ہیں so can we represent a matrix in some kind of a structure the answer is absolutely yes and the answer is it's a two dimensional array so does c provide a facility for declaring and using two dimensional arrays in fact it's so simple جو کچھ میں نے بھی اتاک آپ کو بتایا ہے you've already mastered the two dimensional array all you need to do is to add another set of square brackets so if you want to declare a two dimensional array let's say two rows and three columns so two rows ہوں گی or three columns ہوں گے and let's call that array x and it is an array of integers so we would declare it as int x square bracket two square bracket closed his square bracket open three square bracket closed semi column ختم پہلا والا جو ہے index your subscript وہ row could مطلب دینوٹ کرتا ہے اور دوسرہ والا جو ہے وہ column کو so it is row column addressing اس کے بعد آپ جو چاہیں اس کے ساتھ کریں اب آپ اپنے لیے two dimensional arrays دیکلیر کریں ان کو populate کریں ان کے numbers کو add کریں matrix ہے اس کے ساتھ آپ matrix multiplication کر سکتے ہیں دس اور کام کر سکتے ہیں the interesting again would be کجی programming technique کیا استعمال ہوگی to work with matrices او at least two dimensional arrays can you think about it one dimensional arrays میں ہم سیمپل لوپ استعمال کر رہے تھے for i equal to zero i less than array size do something what do we do when we have a two dimensional array now we have number of rows and number of columns answer is simple you're going to use two loops you're going to use nested loops اب کہی پے کوئی restrication آج تک ہم نے نہیں بات کی کہ جی ایک لوپ کے اندر دوسی لوپ نہیں ہو سکتی اور یہاں پہ آپ کو ہماری structured flow charting میتردولوجی کا بھی فائدہ نظر آنے لگ بڑے گا جب آپ ایک nested loop کا flow chart بنائیں گے تو آپ کو نظر آئے گا کہ جی وہ indentation levels بھی code کے ساتھ میچ کر رہے ہیں and things are very easy to understand how do we process a matrix think about it ہم نے پہلے matrix کو کچھ values دینی ہیں سپوز آپ نے ایک two dimensional array ڈیفائن کی ہے دو روز ہیں تین columns ہیں پہلے اس کی values ہم پڑنا چاہتے ہیں user سے لے کے keyboard سے what do we do we say let's let's take a specific example so we say int matrix to square bracket three دونوں اپنے اپنے square brackets میں declare ہو گئی we say اب باقی میں variables آرے اب یہاں پر declare نہیں کروں گا you should understand کہ جی variable کہیں پر declare کیا ہوا یہاں پہ ہم استعمال کرنے لگے ہیں so we say for row equal to zero row keyword نہیں ہے یہ variable ہے جو ہم نے declare کیا ہے it's of type int so we say for row equal to zero row less than max rows یاد رکھیں میں نے کہا تھا کہ کوشش کریں کہ const keyword کے ساتھ استعمال کریں یہاں پہ const ڈالیں یا نہ ڈالیں you can always say max rows equals two max columns equals three so loop ہوگی وہ ہوگی for row equal to zero row less than max rows increment row opening brace ڈالیں اس کے اندر نئی loop شروع کرنے for call col another integer variable which will represent the column for call equals zero call less than max calls increment call پھر بریس کریں اب دو loops چل پڑی ہوئی ہیں یہاں پہ آپ بیشا کیے کریں کہ جی see out please enter the value of پھر آگے row call so آپ کو پتا چل جائے گئے جی prompt سے کہ جی کنسی والی value مانگی جا رہی ہے you go and you say see in greater than greater than and in this case the name of the array square bracket row which is the current value of the integer variable called row square bracket پھر square bracket open call which is the integer variable call کی current value square bracket close semicolon exactly the way I said that when you address or when you specify an array element you are talking of a simple variable the array element in a two dimensional array is specified by giving the name of the array then in the first square bracket the row index and in the second square brackets the column index یہ see ان کے ساتھ آپ enter کر لیں پہلی لوپ بند کر دیں دوسی لوپ بند کر دیں دیکھ لیں ہوگا کیا پہلے ہم اپر سے آئیں گے پہلی لوپ کے لیے ایک value سیٹ ہوگی اندر دوسی لوپ پوری چلے گی so for the first row which is index zero for all columns you will read the values then the inner loop will exit you will go and go to the next row which will be index one which means the second row and then you will again read all of the columns so you will read them row let's let me talk natural numbers پہلی روکا پہلہ ایلیمنٹ پھر دوسرہ ایلیمنٹ پھر تیسرہ ایلیمنٹ پھر بہر والی لوپ سے ہوتے وے واپس آگے دوسی روکا پہلہ ایلیمنٹ دوسرہ ایلمنٹ تیسرہ ایلیمنٹ so I've just given you an idea in terms of how do you process or rather input a two dimensional array you can input it you can multiply things you can take sums you can do everything that you do with simple one dimensional arrays just to finish even here we are not limited you can go to three dimensional arrays mechanism is exactly the same three square bracket کے پیرز لگ جائیں گے اور اسے ہمارا کام بات جائے گا so what have we looked at so far we've looked at arrays with inconsiderable depth لیکن ان کے لیے ہم آپ کو problems دیں گے ایلیمنٹ دیں گے اور جب آپ پریکٹس کریں گے تب آپ کو array manipulation کیندر fluency حاصل ہوگی I'll keep saying that and I'll keep repeating myself you have to do a lot of programming to understand how the whole thing works please build up your vocabulary get into the habit of processing arrays very quickly character arrays پہ کچھ interesting problem ہم آپ کو دیں گے ان کو آپ سول کی جائے گا most of the string handling problems usually آپ کو library functions میں بھی مل جائیں گے اتنے کومن ہے لیکن جب ہم نمبر کی بات کر رہے ہوتے ہیں vectors کی matrices کی they are usually specific problems and you need to do a lot of practice to understand how to work with nested loops multiply nested loops and array manipulation in general that I think is enough for this lecture till next time خدا حافظ