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

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

  • Upload
    twyla

  • View
    42

  • Download
    0

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

1

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

از مهمترين ويژگيهای هر زبان برنامه •نويسی است که اجازه می دهد تا يک

گردد.مکرراً اجرابلوک از دستورات در فرترنDO (DO Construct)ساختار •

جهت تکرار بلوک هايي از دستورات مختلف–فرم کلی–

[name:] DO [Control Clause شرط کنترل ]block

END DO [name]

Page 2: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

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+1j=j*k

END DOشود نمی متوقف وضوح به برنامه حلقه نوع اين در

تا دهد می ادامه انجا تا شود jبرنامه بيشتر پردازنده برد از

Page 3: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

3

بی نهايت DOکنترل حلقه

(IF ) همراه با دستور EXITدستور • می رودEND DOکنترل به اولين دستور بعد از •

مثال:INTEGER::ifib(100)Ifib(1)=1; ifib(2)=1; i=3DO

ifib (i)=ifib(i-1)+ifib(i-2)i=i+1IF(i>100)EXIT

END DO

Page 4: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

4

STOPدستور (C در exitدستوری ساده ولی قوی )شبيه تابع •اين دستور اجرای برنامه را در هر جا که باشد •

)ازجمله داخل حلقه تکرار( متوقف می کند IFاين دستور با يد همراه با نوعی از دستور •

باشد• IF (condition) STOP

ياIF (condition) THEN

block of statementsSTOP

END IF

Page 5: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

5

DO WHILEحلقه

فرم کلی•DO WHILE (condition)

block of statementsEND DO

باشد حلقه تکرار TRUE به صورت conditionماداميکه ENDخواهد شد در غير اينصورت کنترل به دستور بعد از

DOمی رود اين حلقه معادل حالت زير است:

DOIF (.NOT. condition) EXITblock of statements

END DO

Page 6: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

6

مثالx=1.0; y=1.0; z=1.0; count=0Sample:DO WHILE ((x**2+y**2+z**2)<1000000.0)

xplus=10.0*(y-x)yplus=x*z+28.0*x-yzplus =x*y-8.0*z/3.0Test=ABS(xplus)+ABS(yplus)+ABS(zplus)IF (test<=0.000001)EXITCount=count+1

END DO sample

Page 7: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

7

DO در حلقه های CYCLEدستور برای جهش به پايين بلوک و برگشت به •

ابتدای آن ولی با اين دستور کنترل از حلقه خارج نمی شود

C در continueمعادل •Do

WRITE(*,*) “type the password”READ(*,*)yourwordIF (yourword/=password)CYCLEWRITE(*,*)”that’s right, now type a new password”READ(*,*) passwordWRITE(*,*) “the new password is”,passwordEXIT

END DO

اگر کلمه رمز درست تايپ نشود کاربر هرگز نمی تواند از حلقه خارج شود

Page 8: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

8

CYCLE و EXIT حلقه های متداخل و دستور هایبه منظور جلوگيری از اغتشاش بهتر است حتماً حلقه ها دارای اسم باشند )به مثال زير •

توجه شود(PROGRAM averscore REAL :: mark, average INTEGER:: stid, loop ,nWRITE(*,*)”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اگر در دستور نام حلقه مشخص

نشود تکرار در داخلی ترين حلقه مد نظر

قرار می گيرد

Page 9: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

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 مقدار

مقداری مثبت انگاه step باشد و start کوچکتر از stopاگر count صفر شده حلقه اصالً تکرار نخواهد شد

Page 10: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

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

Page 11: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

11

CASE وDOمثالی از ترکيب

PROGRAM do_case!This program interpret input, out put text as a numberCHARACTER (8)::string, textINTEGER::npointsstart: DO READ (*,*)text IF(text(1:1)=="!")THEN PRINT*,"Terminate the program" STOP END IF

string=“ “npoints=0

Page 12: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

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

Page 13: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

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

Page 14: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

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

ادامه..........

Page 15: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

15

REAL::v0,theta,gee,angle,tymax,ymax,xmaxINTEGER::ngee=32.17!outer loop for different velocitiesPRINT*, "Input number of velocities to be used"READ(*,*)nouter_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

Page 16: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

16

Cساختار هاي تكرار در whileساختار تكرار •

تا زماني كه شرط خاصي بر قرار است عمليات داخل حلقه • در فرترن(Do WHILEتكرار مي شود )مشابه

شرط در ابتداي حلقه بررسي مي شود–فرم كلي•

while (<logical exp>) <statement>;به صورت بلوك نيز قابل قبول است•

while (<logical exp>) { <statement1>;<statement2>;

……..<statement n>;}

Page 17: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

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);}

Page 18: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

18

C در forحلقه تكرار يك حلقه تكرا̀ر معين يا مطلق است•د̀ر فرترن 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);

Page 19: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

19

C در forادامه حلقه حلقه بصورت بلوك نيز نوشته مي شود•

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++) // شرط ̀حذف شده است ) بايد به طريقي از تكرار بينهايت آنجلوگيري كرد(

Page 20: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

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);}

Page 21: عمليات تکرار  Repetition

تکرار های حلقهعباسپور

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}