Presentation is loading. Please wait.

Presentation is loading. Please wait.

عمليات تکرار Repetition

Similar presentations


Presentation on theme: "عمليات تکرار Repetition"— Presentation transcript:

1 عمليات تکرار Repetition
از مهمترين ويژگيهای هر زبان برنامه نويسی است که اجازه می دهد تا يک بلوک از دستورات مکرراً اجرا گردد. ساختار DO (DO Construct) در فرترن جهت تکرار بلوک هايي از دستورات مختلف فرم کلی [name:] DO [Control Clause شرط کنترل ] block END DO [name] حلقه های تکرار عباسپور

2 انواع حلقه های DO حلقه با تکرار نامحدود [name:] DO block of statements
END DO [name] باعث تکرار بلوک تا بی نهايت می گردد مثال: e=1.0; k=1; j=1 DO e=e+1.0/REAL(j) k=k+1 j=j*k END DO در اين نوع حلقه برنامه به وضوح متوقف نمی شود برنامه تا انجا ادامه می دهد تا j از برد پردازنده بيشتر شود حلقه های تکرار عباسپور

3 کنترل حلقه DO بی نهايت دستور EXIT ( همراه با دستور IF)
کنترل به اولين دستور بعد از END DO می رود مثال: INTEGER::ifib(100) Ifib(1)=1; ifib(2)=1; i=3 DO ifib (i)=ifib(i-1)+ifib(i-2) i=i+1 IF(i>100)EXIT END DO حلقه های تکرار عباسپور

4 دستور STOP دستوری ساده ولی قوی (شبيه تابع exit در C)
اين دستور اجرای برنامه را در هر جا که باشد (ازجمله داخل حلقه تکرار) متوقف می کند اين دستور با يد همراه با نوعی از دستور IF باشد IF (condition) STOP يا IF (condition) THEN block of statements STOP END IF حلقه های تکرار عباسپور

5 حلقه DO WHILE فرم کلی DO WHILE (condition) block of statements END DO
ماداميکه condition به صورت TRUE باشد حلقه تکرار خواهد شد در غير اينصورت کنترل به دستور بعد از END DO می رود اين حلقه معادل حالت زير است: DO IF (.NOT. condition) EXIT حلقه های تکرار عباسپور

6 مثال x=1.0; y=1.0; z=1.0; count=0 Sample:DO WHILE ((x**2+y**2+z**2)< ) xplus=10.0*(y-x) yplus=x*z+28.0*x-y zplus =x*y-8.0*z/3.0 Test=ABS(xplus)+ABS(yplus)+ABS(zplus) IF (test<= )EXIT Count=count+1 END DO sample حلقه های تکرار عباسپور

7 دستور CYCLE در حلقه های DO
برای جهش به پايين بلوک و برگشت به ابتدای آن ولی با اين دستور کنترل از حلقه خارج نمی شود معادل continue در C Do WRITE(*,*) “type the password” READ(*,*)yourword IF (yourword/=password)CYCLE WRITE(*,*)”that’s right, now type a new password” READ(*,*) password WRITE(*,*) “the new password is”,password EXIT END DO اگر کلمه رمز درست تايپ نشود کاربر هرگز نمی تواند از حلقه خارج شود حلقه های تکرار عباسپور

8 حلقه های متداخل و دستور های EXIT و CYCLE
به منظور جلوگيری از اغتشاش بهتر است حتماً حلقه ها دارای اسم باشند (به مثال زير توجه شود) PROGRAM averscore REAL :: mark, average INTEGER:: stid, loop ,n WRITE(*,*)”type in the number of students” mainloop: DO WRITE(*,*) 'Please give student id' READ(*,*) stid IF (stid==0) EXIT mainloop average=0 innerloop: DO loop=1,n WRITE(*,*) 'Please enter mark' READ(*,*) mark IF (mark==0) CYCLE innerloop negs: IF (mark<0) THEN WRITE(*,*) 'Wrong mark. Start again' CYCLE mainloop END IF negs average=(average+mark) END DO innerloop average=(average)/n WRITE(*,*) 'Average of student',stid,' is = ',average END DO mainloop END PROGRAM averscore اگر در دستور CYCLE نام حلقه مشخص نشود تکرار در داخلی ترين حلقه مد نظر قرار می گيرد حلقه های تکرار عباسپور

9 حلقه تکرار با شاخص شمارنده
فرم کلی [name:] DO count = start, stop [,step] block of statements END DO [name] Count يک INTEGER يا يک متغير INTEGER جهت کنترل حلقه Start به صورت INTEGER و بيانگر شروع count است Stop به صورت INTEGER و بيانگر مقدار نهايي count است Step مقدار نمو count است و اگر نباشد 1 در نظر گرفته می شود No. of iteration=(stop + step - start)/ step مقدار count در داخل حلقه نمی تواند تغيير کند اگر stop کوچکتر از start باشد و step مقداری مثبت انگاه count صفر شده حلقه اصلاً تکرار نخواهد شد حلقه های تکرار عباسپور

10 مثال all: DO i=1,10 WRITE(*,*) i !write numbers 1 to 10 END DO all
even: DO j=10,2,-2 WRITE(6,*) j !write even numbers 10,8,6,4,2 END DO even حلقه های تکرار عباسپور

11 مثالی از ترکيب DO و CASE PROGRAM do_case
!This program interpret input, out put text as a number CHARACTER (8)::string, text INTEGER::npoints start: DO READ (*,*)text IF(text(1:1)=="!")THEN PRINT*,"Terminate the program" STOP END IF string=“ “ npoints=0 حلقه های تکرار عباسپور

12 digit: SELECT CASE (text(i:i)) CASE ("0":"9")
text: DO I=1,LEN(text) digit: SELECT CASE (text(i:i)) CASE ("0":"9") string=TRIM(string)//text(i:i) CASE (",") WRITE(*,*)"Commas are disregarded" CASE (".") npoints=npoints+1 string=TRIM(string)//"." CASE ("O") WRITE (*,*)"An O has been interpreted as zero" string=TRIM(string)//"0" CASE ("I") WRITE (*,*)"An I has been interpreted as 1" string=TRIM(string)//"1" CASE (" ") WRITE (*,*)"A blank has been disregarded" CASE DEFAULT WRITE (*,*)"There is a fatal ERROR!!!!" STOP END SELECT digit END DO text حلقه های تکرار عباسپور

13 points: SELECT CASE (npoints) CASE (0)
WRITE (*,*)" check: there was no decimal point" CASE (2:) WRITE (*,*) "there was more than one decimal point" STOP CASE DEFAULT WRITE(*,*) "your number was correct" END SELECT points WRITE(*,*) "your number: ",text WRITE(*,*) "changed to",string END DO start END PROGRAM do_case حلقه های تکرار عباسپور

14 مثالی از کاربرد حلقه DO در محاسبات مهندسی
PROGRAM trajectory !***************************************************************************************** !* A program to calculate the particle trajectory data for varying angles * !* and initial velocities * !* Programming language class, Dept. of Farm Machinery, Dr. Abbaspour* ! variable definition !v0=initial velocity !theta=angle of trajectory in degree !gee=local gravitational acceleration !angle=angle of trajector in radians !tymax=time, in second, to reach the top of trajectory !ymax=maximum hieht of trajectory, feet !xmax=distance from launch to impact, feet !n=number of velocities to be input ادامه حلقه های تکرار عباسپور

15 REAL::v0,theta,gee,angle,tymax,ymax,xmax INTEGER::n gee=32.17
!outer loop for different velocities PRINT*, "Input number of velocities to be used" READ(*,*)n outer_loop:DO I=1,n PRINT*,"Input initial velocity (ft/s)" READ(*,*)v0 WRITE(*,*)"For an initial velocity of ",v0," the data are:" WRITE(*,*) "Angle Time Maximum Y Height & & Distance" ! Inner loop for varying angle inner_loop: DO J=1,89,2 theta=REAL(J) angle=theta/57.3 tymax=v0*sin(angle)/gee ymax=v0*sin(angle)*tymax-0.5*gee*tymax**2 xymax= v0*cos(angle)*tymax xmax=2.0*xymax WRITE(*,*)theta,tymax,ymax,xymax,xmax END DO inner_loop END DO outer_loop END PROGRAM trajectory حلقه های تکرار عباسپور

16 ساختار هاي تكرار در C ساختار تكرار while
تا زماني كه شرط خاصي بر قرار است عمليات داخل حلقه تكرار مي شود (مشابه Do WHILE در فرترن) شرط در ابتداي حلقه بررسي مي شود فرم كلي while (<logical exp>) <statement>; به صورت بلوك نيز قابل قبول است while (<logical exp>) { <statement1>; <statement2>; …….. <statement n>; } حلقه های تکرار عباسپور

17 مثال while محاسبه فاكتوريل يك عدد
#include <stdio.h> void main(){ int i, number; long int factorial; printf("please enter the number:"); scanf("%d",&number); factorial=1; i=1; while (i<=number){ factorial*=i; i++; } printf("factorial of %d is %d", number, factorial); مثال while محاسبه فاكتوريل يك عدد حلقه های تکرار عباسپور

18 حلقه تكرار for در C‌ يك حلقه تكرار معين يا مطلق است
مشابه حلقه do‌در فرترن فرم كلي for ( <exp1> ; <exp2> ; <exp3> ) <statement>; <exp1> : عبارت مربوط به مقدار دهي اوليه شمارنده <exp2> : شرط تكرار حلقه (در صورت درست بودن) عبارت مربوط به <exp3>: عبارت مربوط به نحوه افزايش متغير شمارنده حلقه مثال (چاپ اعداد بين صفر و 100 int count; for (count=0; count<=100; count++) printf(“%d”, count); چاپ اعداد مضرب 5 for (count=0; count<=100; count+=5) printf(“%d”, count); چاپ اعداد مضرب 5 بصورت معكوس for (count=100; count>=0; count -=5) printf(“%d”, count); حلقه های تکرار عباسپور

19 ادامه حلقه for در C حلقه بصورت بلوك نيز نوشته مي شود
for ( <exp1> ; <exp2> ; <exp3> ){ statements ………. } قسمت مقدار دهي اوليه و شمارنده مي تواند شامل چند عبارت باشد كه توسط كاما جدا مي شوند for (a=0,b=100; b-a>50; a++, b--) قسمت شرطي مي تواند هر نوع شرط مركب باشد for (count=0; count<100 && sw==1; count++) مي توان هر يك از سه عبارت را خذف كرد for (; i<100; i++) //‌حذف مقدار دهي اوليه ( بايد شمارنده قبلاً به نحوي مقدار دهي شده باشد for (; i<100;) // حذف نحوه تغيير متغير (نحوه تغيير پيچيده و توسط برنامه نويس در داخل حلقه تعيين مي شود) for (i=0; ; i++) // شرط حذف شده است ( بايد به طريقي از تكرار بينهايت آن جلوگيري كرد) حلقه های تکرار عباسپور

20 #include <stdio.h>
#include <values.h> void main(){ int i, n, number; int sum, max, min; float average; printf("please enter number of iteration:"); scanf ("%d",&n); sum=0; min= MAXINT; max=-MAXINT-1; for(i=1; i<=n; i++){ printf("please enter the number :"); scanf ("%d",&number); sum+= number; if (number>max) max=number; if (number<min) min=number; }// end of for loop average=(float) sum / (float) n; printf("average= %f, Maximum= %d, Minimum =%d", average, max, min); } مثال: برنامه اي بنويسيد كه تعدادي عدد را دريافت و كوچكترين و بزرگترين آنها را چاپ نمايد حلقه های تکرار عباسپور

21 مثال حلقه for متداخل: تعيين اعداد اول تا 1000
#include <stdio.h> void main(){ int number,i; int primDetect; printf("prim numbers between 1 and 1000:\n"); printf("1 2 "); number=3; // loop for numbers for (; number<=1000; number+=2){ primDetect=1; // loop for detecting prim number for (i=2; i< number&& primDetect==1; i++){ if (number%i==0) primDetect=0; } // end of inner for loop if(primDetect==1) printf("%d\n", number); }//end of outer for loop مثال حلقه for متداخل: تعيين اعداد اول تا 1000 حلقه های تکرار عباسپور


Download ppt "عمليات تکرار Repetition"

Similar presentations


Ads by Google