حلقه switch case

اين حلقه در نرم افزار متلب همانند حلقه if مي باشد با اين تقاوت كه شما شرط ها را بصورت رشته (string ) وارد مي كنيد ، مفهوم شرط در اين حالت مهم نيست بدين صورت بعد از گرفتن رشته توسط دستور switch با تك تك  رشته هاي داخل هر case  مقايسه مي كند و شرط وارد شده اينست كه رشته (string ) وارده دقيقا با يكي از رشته هاي (string ) داخل case ها يكي باشد ، بزرگ و كوچك بودن حروف و نحوه نوشتن آنها مهم است .

به بيان ساده از اين حلقه مي توان به عنوان كليد تعبير نمود بدين صورت كه برنامه نويس با استفاده از دستور case براي دستورات داخل حلقه مربوطه كليد  و يا كليدهاي تعبيه مي نمايد ، بطوريكه استفاده كننده از برنامه فقط با انتخاب اين كليدها ميتواند به دستورات داخل آن دست يابد ، ساختار كلي اين حلقه به صورت زير است :

switch switch_expr

  case case_expr

    statement,...,statement

  case {case_expr1,case_expr2,case_expr3,...}

    statement,...,statement

...

  otherwise

    statement,...,statement

end

درصورتيكه رشته مربوطه با هيچكدام از case ها منطبق نگرديد مي توانيد در قسمت مربوط به otherwise يك پيغام راهنما  يا هشدار خطا ارسال نمائيد با بيان چند مثال مفهوم مطلب دست خواهيد يافت :

مثال :

برنامه اي در متلب بنويسيد كه با گرفتن نام يك شكل مساحت آنرا حساب نمايد :

clc

clear all

fprintf('\n Please enter a name of shape :')

N=input(' ','s')

switch  N

    case{'circle','CIRCLE','c','C','dayere'}

        r=input('enter readuce r=')

        s=pi*r^2/2

    case{'squar','SQUAR','S','s','morabe'}

        a=input('enter a=')

        s=a^2

    case{'recteangle','RESTEANGLE','r','R','mostatile'}

        a=input('enter a=')

        b=input('enter b=')

        s=a*b

    otherwise

        'Please enter currect of name!'

end  

   دربرنامه فوق توانائي محاسبه مساحت سه شكل هندس دايره و مربع و مستطيل را دارد در هر case نامهاي كه احتمال داده مي شود كاربر برنامه به عنوان بيان نام شكل وارد كند قرار داده شده است و شما هر فرمي كه احتمال ميدهيد كه كاربر برنامه شما نام شكل را بدان فرم وارد كند مي توانيد در داخل case مربوطه بنويسيد تعداد مهم نيست فقط حداقل يك نام بايستي در هر case باشد.

در صورتيكه نام وارده از طرف كاربر با نامهاي هيچكدام از case ها منطبق نگرديد ادامه اجراي برنامه به قست otherwise مي رود و پيغام دلخواهي كه در آن نوشته ايد نشان داده مي شود و يا مي توانيد دستور محاسباتي در اين قسمت نيز قرار دهيد در صورتيكه احساس مي كنيد اين قسمت نياز نيست مي توانيد بطور كامل آنرا حذف كنيد ، به قستي از اجراي برنامه فوق توجه فرمائيد :

Please enter a name of shape : r

N =

r

enter a=2

a =

     2

enter b=1

b =

     1

s =

     2

در اجراي برنامه فوق در خط اول نام شكل را از ما سوال ميكند كه حرف r به معني مستطيل (recteangle ) وارد گرديد و دستور switch به دنبال case كه شامل نامي دقيقا منطبق بر نام وارده ميگردد كه case شماره سه ميباشد  دستورات داخل اين case  كه شامل گرفتن طول وعرض مستطيل و محاسبه مساحت ميباشد اجرا ميگردد و شما نتيجه را مشاهده ميكنيد .

حال برنامه را دوباره اجرا نمائيد و اينبار نامي را وارد كنيد كه در هيچكدام از case ها نباشد ، خواهيد ديد اجراي برنامه به قسمت otherwise خواهد رفت .

   

Please enter a name of shape : triangle

N =

Triangle

 

Please enter currect of name!

پروژه :

برنامه فوق را تكميل نموده و يك برنامه كامل محاسبه مساحت ، حجم و ممان اينرسي براي قسمت عمده اي از شكلهاي موجود دوبعدي و سه بعدي بنويسيد .

البته هميشه نياز نيست كه ورودي حلقه switch رشته باشد بلكه با اعداد نيز ميتوان عمل نمود ،

مثال :

برنامه زير از كاربر نحوه وارد كردن وروديهاي مساله را سوال ميكند و بر اساس آن شاخه مربوطه اجرا ميشود :

clc

clear all

fprintf(1,'Choice of input method:\n');

fprintf(1,'1. Input entry by entry from keyboard\n');

 fprintf(1,'2. Input data from a text file\n');

 fprintf(1,'3. Generate data using a function F\n');

 fprintf(1,'Choose 1, 2, or 3 please\n');

 N=input(' ')

 

switch  N

 

    case 1

        r=input('enter readuce r=')

        s=pi*r^2/2

 

    case 2

       fprintf(1,'Has a text file been created with the data in two columns?\n');

       fprintf(1,'Enter Y or N\n');

       A = input(' ','s');

       if A == 'Y' | A == 'y'

          fprintf(1,'Input the file name in the form - ');

          fprintf(1,'drive:\\name.ext\n');

          fprintf(1,'For example:   c:\\DATA.DTA\n');

          NAME = input(' ','s');

          INP = fopen(NAME,'rt');

      end

 

    case 3

        fprintf(1,'Input the function F(x) in terms of x\n');

        fprintf(1,'For example: cos(x)\n');

        s = input(' ');

        F = inline(s,'x');

 

    otherwise

       warndlg('Please enter currect: 1 or 2 or 3')

 

end

 

مثال :

فرض كنيد كه  همواره عدد صحيحي باشد و مقادير جديد x طبق رابطه زير محاسبه گردند :

                                   

شرط خارج شدن از حلقه اينست كه مقدار  گردد .

 

حل :

براي اينكه حلقه تا زمانيكه  نگرديده اجرا شود از حلقه while استفاده ميكنيم و براي مشخص كردن زوج (even ) يا فرد بودن (odd ) از حلقه شرطي if-else-end استفاده مينمائيم  :

 

clear all;

clc;

x=zeros(500,1);              % preallocate storage for x(k)

x(1)=round(abs(input('enter a number > ')));

k=1;

while  (x(k)>1)&  (k<500)

    if  rem(x(k),2)==0    % x(k) is even

        x(k+1)=x(k)/2;

    else                  % x(k) is odd

        x(k+1)=3*x(k)+1;

    end

      k=k+1;              % increment squance conter

      y(k,1)=k;

End

 

plot(y(:,1),x(:,1)

 

بعد از اجراي برنامه با ورودي 837799  ترسيمه زير را خواهيد ديد :

 

  حلقه tray-catch  :

از اين حلقه  مي توان به منزله خطا يابي نام برد بدين صورت كه برنامه معمول اجرا مي شود و در صورتيكه خطائي ايجاد شد به كاربر سريعا اعلام مي شود تا رفع خطا نمايد ،  البته اين ابزار مفيد براي برنامه هاي است كه زمان اجراي طولاني دارند بطوريكه كاربر برنامه بعد  ازاجرا پس گذشت زمان ( چند ساعت و ... ) به سراغ برنامه خود ميايد كه خروجي هاي برنامه را مشاهده نمايد و درصورتيكه به هنگام اجرا برنامه با مشكل و يا خطائي مواجه گردد كه ادامه برنامه انجام نپذيرد پس بهتر است از دستوراتي استفاده كنيم كه با پيغام يا ايجاد صدا و ... كاربر برنامه را از وضعيت برنامه در حال اجرا آگاه سازد ، حلقه tray-catch  بدين منظور است .

 

دیدگاه خود را بنویسید

دیدگاه پس از تائید مدیریت منتشر می شود.