نحوه محاسبه تعداد وجوه تاس در پرتاب های زیاد -تمرین عملی جاوا

+1
+23
1394/03/09 0 325 م.مطلبی

در این بخش می خواهیم یک تمرین عملی دیگر را با استفاده از آرایه ها انجام دهیم .دقت  کنید که در هر یک از این تمرین های عملی نکته و تکنیک جدیدی از برنامه نویسی را فراخواهید گرفت. پس توصیه می کنیم علاوه بر دقت فراوانی که به پروژه ها دارید حتما یکبار به صورت عملی آن پروژه را انجام دهید و سپس بر اساس خلاقیت خود بر روی آنها تغییراتی را اعمال نمایید.در پروژه عملی این درس می خواهیم یک تاس را 5000 مرتبه پرتاب کنیم سپس تعیین کنیم که در این 5000 مرتبه پرتاب سهم مشاهده هر یک از وجوه تاس چقدر بوده است. در ادامه با ما همراه باشید با آموزشی دیگر از ساب سان.

به همین منظور پروژه ایجاد شده در دروس قبلی را باز کنید و کلاس جدیدی با نام subsun_class_19 به پکیج subsun_package اضافه کنید. و درون آن را بصورت زیر پر نمایید و سپس آن را ذخیره کنید.

package subsun_package;
import javax.swing.*;

public class subsun_class_19 {
     public static void main( String args[] ){
          int face, frequency[] = new int[ 7 ];
          for ( int roll = 1; roll <= 5000; roll++ ) {
                    face = 1 + ( int ) ( Math.random() * 6 );               
                    ++frequency[ face ];
           }

           String output = "وجه\tتعداد دفعات مشاهده";
           for ( face = 1; face < frequency.length; face++ )
                  output += "\n" + face + "\t" + frequency[ face ];

           JTextArea outputArea = new JTextArea();
           outputArea.setText( output );
           JOptionPane.showMessageDialog( null, outputArea,
                               "نتایج پرتاب 5000 مرتبه تاس",
                                 JOptionPane.INFORMATION_MESSAGE );
           System.exit(0);
   }
}

برای درک بهتر پروژه ابتدا آن را اجرا می کنیم سپس عملکرد دستورات را مورد بررسی می دهیم.فایل subsun_class_19 را در Package Explorer ایکلیپس انتخاب کنید و آن را اجرا کنید. نتیجه اجرای برنامه را در زیر مشاهده می کنید.

نحوه محاسبه تعداد وجوه تاس در پرتاب های زیاد - جاوا

همانطور که مشاهده می نمایید در یک ستون اعداد از 1 تا 6 نمایش داده شده اند .این اعداد شماره وجوه تاس می باشند که جمعاً از 1 تا 6 شماره گذاری شده اند. همچنین در ستون مقابل آن تعداد مشاهده هر یک از وجوه گزارش شده است . اکنون می خواهیم دستورات این پروژه را مورد بررسی قرار دهیم .همانطور که در دستورات این برنامه مشاهده می نمایید . ابتدا متغیر face و آرایه frequency را از نوع داده ای int  تعریف کرده ایم سپس آرایه frequency را تخصیص حافظه داده ایم . ممکن است این سوال برای شما پیش آمده باشد که هر تاس دارای 6 وجه است پس چرا آرایه مذکور را با 7 عنصر تعریف کرده ایم . برای پاسخ به این سوال باید بگوییم که چون اندیس شروع آرایه های از صفر می باشد و ما می خواهیم بر اساس اندیس هر یک از خانه ها ، مقدار ذخیره شده در آن را گزارش کنیم . و نیز به دلیل اینکه وجوه یک تاس از 1 تا 6 شماره گذاری شده است. لذا اولین خانه از آرایه که دارای اندیس صفر است به هیچ عنوان کارایی برای ما نخواهد داشت و در طول برنامه از آن استفاده نخواهد شد. در واقع تمام فعالیت های ما بر روی خانه های با اندیس 1 الی 6 می باشد و بنابر این مجبور هستیم آرایه را هفت عنصری تعریف کنیم تا آخرین عنصر آرایه دارای اندیس 6 شود. همانطور که در دستورات مشاهده می شود در حلقه for متغیر حلقه که roll می باشد با 1 مقدار دهی کردیم. این متغیر تعداد دفعات تعداد پرتاب تاس را در خود ذخیره می کند . درون حلقه با استفاده از تابع random که در کلاس Math واقع است یک عدد اعشاری بین 0 تا 1 بصورت کاملا تصادفی تولید می شود سپس برای اینکه عدد تصادفی تولید شده در محدودی 1 تا 6 قرار گیرد خروجی تابع  random را در 6 ضرب می کنیم. بدلیل این که خروجی تابع random عددی اعشاری است و به تبع حاصل ضرب عدد اعشاری در 6 نیز عددی اعشاری می باشد و همچنین بخاطر اینکه متغیر face که شماره هر وجه تاس را نگهداری می نماید از نوع int تعریف شده است. با استفاده از (int) که یک عملگر casting است به گونه ای که مشاهده می نمایید خروجی را به نوع داده ای int  تبدیل می کنیم . بدلیل اینکه در حین عملیات casting (تبدیل نوع) عملیات گرد کردن به سمت پایین است .بنابر این خروجی casting  را با عدد 1 جمع کرده ایم . به عنوان مثال فرض کنید تابع random عدد 0.1 را تولید کرده است و سپس ما آن را در 6 ضرب می کنیم. در نتیجه عدد 0.6 تولید می شود . حال با انجام عملیات casting عدد بدست آمده 0 می باشد در نهایت با جمع این عدد با 1 ، وجه شماره 1 تاس بدست می آید.در ادامه دستورات حلقه for با استفاده از عملگر پیش افزایش یک واحد به مقدار ذخیره شده در عنصری از آرایه frequency که در مرحله قبل بدست آمده است اضافه می کنیم.به عنوان مثال فرض کنید در مرحله قبل عدد 1درون متغیر face ذخیره شده باشد . حال با استفاده از این سطر از دستورات یک واحد به مقدار خانه ای از آرایه frequency با اندیس 1 اضافه می شود.به همین ترتیب حلقه به کار خود ادامه می دهد . در حلقه for دوم رشته output را به صورتی که مشاهده می کنید برای نمایش نتایج در خروجی مقدار دهی می کنیم . با دیگر دستورات این پروژه در دروس قبل آشنا شده اید و از توضیح آنها خودداری می کنیم.

 

دیدگاه ها (0)

ارسال دیدگاه ها

Image CAPTCHA
حروف نمایش داده شده در تصویر را وارد کنید.