درمورد حلقه for whaile , repeat/تابع if( ) وتابع iflse(سپیده احمد نژاد)کلاس آقای خاورزاده

1402/06/14

دسترسی سریع


درمورد حلقه for whaile , repeat/تابع if( ) وتابع iflse(سپیده احمد نژاد)کلاس آقای خاورزاده     بسمه تعالی for حلقه   چنانچه تعداد دفعاتی که باید یک عملکرد خاص تکرار شود باشمارنده مشخص گردد تابع (for (. به برنامه می گوید که آن عملکرد به تعداد اعداد بین 1 تا حد بالای i اجرا شود شکل کلی تشکیل این حلقه ها توسط تابع for( ) به صورت زیر است. for(i:عملکرد مورد نظر)(تعداد دفعات) مثال 1:درمثال زیر تابع ( ) print به تعداد شمارنده (1تا3) اجرا می شود وعدد شمارنده را نمایش می دهد: 4)برقرار باشد اجرا می شود: >for(i in 1;5){if(i>4)print (i)} [1]5 در این حالت چون شرط (4x <-1:10 >z<-NULL >for(i in seq(along=x)){if(x[i]<5){z<-c(z,x[i]*2)}} >z [1]2 4 6 8 نکته:اختصاصnull به آبجکت به منظور ساختن یک آبجکت خالی صورت گرفته است. همان گونه که مشخص می شود اعداد 1-2-3-4 دارای شرط هستندبنابراین درخروجی 2-4-6-8 ارائه شده است.درمثال فوق ازتابع () برای ایجاد یک توالی استفاده گردیده است. مثال 4:درمثال زیر اعضایی ازآبجکتz  که مربع آنها بیش از 8 باشد(شرط z*z>8)در آبجکت  w قرار داده می شود. >z<-c(5,2-3,8) >w<-c(z*z>8) >w [1] TRUE FALSE TRUE TRUE مثال 5:قصد داریم عناصر ماتریسm  را غربال گری نماییم.چنانچه ماتریسm  دارای عناصر 1-2-3-4-5-6 درردیف 3 باشد.می خواهیم عناصری در ستون اول که بزرگتراز 1 وعناصری از ستون دوم که بزرگتراز 5 هشتند را شناسایی نماییم. >m<-matrix(1,2,3,4,5,6),nrow=3) >m [,1] [,2] [,1] 1   4 [2,] 2   5 [3,] 3   6 >m[m[,1]>1& m[,2]>5] [1] 3  6.   while حلقه دربرخی موارد تعداد دفعات تکرار یک عملکرد خاص مشخص نیست.دراین گونه موارد برای ایجاد حلقه تکرار ازتابع ( ) while استفاده می گردد.دراین مورد چنانچه شرط خاصی برقرار باشد تکرار حلقه ادامه می یابد و چنانچه شرط برقرار نباشد چیزی اجرا نمی شود.شکل کلی حلقه هایwhile  به صورت زیر است. whil{عملکردمورد نظر}(شرط لازم برای ادامه برنامه) مثال 1:درمثال زیر محتویات آبجکت z (صفر)درصورت برقرار بودن شرط(z<5)نمایش داده می شود :(print(z)) >z<-o >while(z<5){z<-z+2:print(z) } [1] 2 [1] 4 [1] 6 در دوره اول حلقه محتویات آبجکتz که همان صفر است خوانده شده باعدد 2جمع می گردد.در دوره دوم z که همچنان کوچکتراز 5 است (شرط برقرار است) با 2 جمع می شود و درونz ریخته می شود. اینک محتوی آبجکت zعدد 4 است که همچنان از 5 کوچکتر است(شرط برقرار است)و در دور سوم با 2 جمع می شود و در درونz  ریخته می شود.اینک مقدار به 6 رسیده است و شرط دیگر برقرار نیست و حلقه شکسته می شود وعملکرد مورد نظر (print(z))اجرانمی گردد وحلقه پایان می یابد.همان گونه که مشخص است تازمانی که شرط (z<5)برقرار است حلقه تکرار ادامه می یابد. نکته:چنانچه بخواهیم نتایج روی صفحه نمایش ظاهر شوند ولی شماره سطر نداشته باشیم می توانید از تابع ( )catاستفاده نمایید.بااجرای دو سطر زیر تفاوت توابع ( )cat و ( )print روشن می شود. >print("abc") [1] "abc" >cat("abc\n") abc اضافه کردن”n” موجب می شود تامکان نما به سطر بعد برود.تابع( )catهمچنین دارای برهانsep= می باشد که توسط آن می نوان نوع و اندازه فاصله کارکترها راتعیین نموده. مثال 2:در مثال زیر تا هنگامی که مقادیرx1 وx2 نابرابر (!=)باشند یک واحد ازx1  کم ویک واحد به x 2اضافه می گردد و به محض بربرشدن دو متغیر (x1 =x 2) حلقه شکسته شده وعمل کم کردن واضافه کردن نیز ادامه نمی یابد. >x1<-100 >x2<-o >whlie(x1 !=x2){x1<-x1-1,x2<-x2+1,print(c(x1,x2))} [1] 99  1 [1] 98  2 [1] 97  3 [1] 96  4 .   . .   . .   . [1] 51  49 [1] 50  50 همانگونه که مشاهده می شود بابر قرار نبودن شرط (x1=x2=50) حلقه شکسته شده و اجرای برنامه متوقف می شود.   repeat حلقه ازحلقه هایrepeat در مواردی استفاده می شود که می خواهیم یک عمل خاص بدون قید وشرط تکرار شود.به عبارتی دیگر در استفاده از این حلقه باید احتیاط شود زیرا ممکن است عملکرد شما وارد یک حلقه نامتناهی گردد.بنابراین همیشه همراه بایک عبارت شرطی استفاده می شود تاحلقه شکسته شود. شکل کلی استفاده از حلقهrepeat به صورت زیر است. repeat{{عملکرد مورد نظر مثال 1:در حلقه زیر عمل نصف کردن محتویات آبجکتx  تا هنگامی ادامه می یابد که مقدارx  به کمتر از 0/01 برسد.دراین هنگام حلقه شکسته شده وتکرار (نصف کردن)ادامه نمی یابد. >z<-1 >repeat {a<-z2 :print(z);if (z<0.01)break() } [1] 0.5 [1] 0.25 [1] 0.125 [1] 0.0625 [1] 0.03125 [1] 0.015625 [1] 0.0078125 نکته:همان طور که ملاحظه می شودازتابع ( ) breakبرای شکستن وخارج شدن از حلقهrepeat  استفاده شده است. 4.ساختارهای شرطی در برنامه نویسی از سه ساختار شرطی شامل تابع ( ) ifو( )ifelse و( )swittch برای کنترل برنامه هااستفاده می شود. if() تابع درمواردی که تابع ( )if استفاده می شود دو حالت وجود دارد چنانچه شرط بیان شده صحیح باشد حالت اول ودر صورتی که شرط صادق نباشد حالت دوم اجرا می گردد.شکل کلی استفاده از شروط if به صورت زیر است. if {عملکرد حالت اول}(شرط مورد نظر)else{{عملکرد حالت دوم در یک سطرنوشته شوند. { وelse نکته:مطمئن شوید که مثال 1:درمثال زیر چنانچه شرط صادق باشد (0==1)عددیک نمایش داده خواهد شد ودر صورت برقرار نبودن شرط عدد2 ارئه می شود. >if(1==0) {print(1) } else{print(2)} واضح است که شرط (0==1)هیچ گاه صادق نیست بنابراین عدد 2 نشان داده شده است. مثال 2:درمثال زیر تابع ( ) ifو ( )cat استفاده شده است تابا توجه به صادق بودن ویانبودن شرط تعریف شده عبارت دلخواهی ( the number  is smaller or equal to 5)نمایش داده شود. >k<-3 >if(k>10){ cat("the number is larger than 10.\n') }else if(k>5){ cat('the number is largar than 5.\n") }else{ cat( "the number is smaller or equal to 5.\n") } the number is smaller or equal to 5.   مثال 3:درمثال زیر از ساختار شرطیif استفاده شده است تا لگاریتم پایه طبیعی اعداد مساوی و کوچکتر از صفر باافزودن یک به آنها محاسبه گردد. > x <-c(-0.2) > if (any(x>o)){x<-log(x) } else {x<-log(x+a)} [1] -0.2231436 همان گونه که مشاهده می شود برای اعداد مساوی و کوچکتر از صفر(0/2-)لگاریتم پایه طبیعی پس از افزودن یک محاسبه شده است ولی برای سایر اعداد لگاریتم طبیعی آنها بدون هیچ تغیری در آنها ارئه می شود: > x >-c(2) > if(any(x>0)){x<-log(x)}else {x<- log(x+1)} >print(x) [1]0.6931472 نکته:استفاده از عبارتelse به همراه تابع if( )ضروری نمی باشد ودر مواردی که عملکرد حالت دوم وجود ندارد می توانیم تنها ازاستفاده کنیم همانند مثال زیر: >if(2-2==0)print("equal") [1] "equal" ifelse() تابع تابعifelse ( ) کارکردی شبیه به تابعif  دارد بااین تفاوت که شرط مورد آزمون درحالت های اول ودوم اجرا باهم آورده می شوندوبه این ترتیب حجم برنامه کاهش می یابد شکل کلی تابع ifelse ( )به صورت زیر است: ifelse(عملکرد حالت دوم و عملکرد حالت اول و شرط مورد نظر) مثال 1:درمثال زیر عناصر آبجکتx  توسط برنامه بررسی قرار می گیرد وچنانچه عناصر آن کوچکتر از) 14< (xباشد همان مقدارx  ودر غیر این صورت شرط برقرار نباشد میانگین عدد جایگزین می گردد. >x<-10:15 >ifelse(x<14,x,mean(x)) [1] 10.0  11.0  12.0  13.0  12.5  12.5 مثال 2:در مثال زیر تابعifelse ( ) کمک می کند تا به جای اعداد زوج و فرد کلمات (زوج) و(فرد) را در آبجکت قرار دهد. >x<-1:10 >y<-ifelse(x%%2==0, "even" , "odd" ) >y [1] "odd" "even" "odd" "even" "odd" "even" "odd" "even" "odd" "even" همان طوری که ملاحظه می گرددبرنامه شرط زوج بودن(x%%==0 یعنی باقی مانده تقسیم بر 2 صفر باشد)رابررسی و در صورت صادق بودن حالت اول (قرار دادن کلمه “even”)ودر غیر این صورت حالت دوم (قراردادن کلمه “odd”)رااجرا می نماید. به منظور آشنایی بیشترنحوه استفاده ازتوابع ( ) ifو( ) ifelseمثال های زیرمورد مقایسه قرار می گیرد. مثال 3:دربرنامه زیر با استفاده از تابع ( ) ifelseعمل جایگزینی راانجام می دهیم. > x=matrix (1:10, nc=2) >x [,1][,2] [1,]   1  6 [2,]   2  7 [3,]   3  8 [4,]   4  9 [5,]   5 10 >ifelse(x<2, x, c(10, 11, 12)) [,1] [,2] [1,]  1  12 [2,]  11 10 [3,]  12  11 [4,]  10  12 [5,]  11  10 همان گونه که ملاحظه می شود اعداد بزرگتر از 2 در ماتریسx با اعداد 10و11و12 جایگزین شده اند. نکته:برای اضافه کردن توضیحات در هر کجای برنامه ها می توانید ازعلامت # استفاده نمایید.معمولا در برنامه نویسی برای هر سطر برنامه خصوصا سطرهایی که پیچیدگی دارند نویسنده توضیحاتی برای درک بیشتر ارئه می دهد.این توضیحات هیچ گونه اثری برکارکرد برنامه نخواهد داشت.درمثال زیر توضیحات درداخل تابع آورده شده است. >f <-function(x) { x+1 # this is a summation }

نظرات

هیچ نظری وجود ندارد.


افزودن نظر

Sitemap
Copyright © 2017 - 2023 Khavarzadeh®. All rights reserved