1 / 21

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

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

twyla
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

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 block of statements END DO حلقه های تکرار عباسپور

  6. مثال x=1.0; y=1.0; z=1.0; count=0 Sample:DO WHILE ((x**2+y**2+z**2)<1000000.0) 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<=0.000001)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. 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); } حلقه های تکرار عباسپور

  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 } حلقه های تکرار عباسپور

More Related