وبلاگ سید جلال سیدیزدی

تمرین دهم

شنبه, ۲۴ اسفند ۱۳۹۲، ۰۸:۲۰ ق.ظ


سلام دوستان


تمرین دهم به این قرار است که:

تعدادی  دانشجو در یک کلاس درس داریم. قرار است برنامه ای بنویسید که کارهای زیر را انجام دهد:

  • دریافت اطلاعات دانشجو (نام و نمره) و ذخیره آنها در جایی مناسب
  • برگرداندن تعداد دانشجویان
  • محاسبه ی و برگرداندن میانگین نمرات کلاس
  • چاپ اسم دانشجویان خوب. دانشجویان خوب دانشجویانی هستند که نمره آنها از میانگین کلاس بالاتر باشد.
  • جستجوی نام یک دانشجو و چاپ اطلاعات مربوط به آن (نام و نمره) در صورت یافتن آن، و چاپ پیغام مناسب در صورت عدم وجود چنین دانشجویی در کلاس
  • برگرداندن اطلاعات شاگرد اول کلاس
  • چاپ لیست دانشجویانی که نمره آنها زیر 10 است
  • دریافت یک نمره و چاپ دانشجویانی که نمره آنها بیشتر از نمره وارد شده است.
  • دریافت یک نمره و چاپ دانشجویانی که نمره آنها کمتر از نمره وارد شده است.

    برای هر یک از کارهای فوق یک متد بنویسید.

    قبل از ارسال لیست بالا را چک کنید شاید مورادی اضافه شود.


    *** نکته مهم *** به این نکته توجه کنید که ممکن است کسی برنامه ای بنویسید که کار کند ولی برنامه اش خوب نباشد. به عبارت دیگر علاوه بر کارکرد درست برنامه، طراحی درست نیز مد نظر است.


    موعد تحویل: دوشنبه 26 اسفند  92 ساعت 21، دوشنبه 4 فروردین 93 ساعت 21

    با تاخیر: سه شنبه 27 اسفند 92 ساعت 20، سه شنبه 5 فروردین 93 ساعت 20


    قبل از شروع برنامه نویسی در مورد چگونگی ذخیره اطلاعات خوب فکر کنید سپس کلاس دیاگرام برنامه را رسم کنید. بعد از آن دست به کد شوید.


    موفق باشید.

    • ۹۲/۱۲/۲۴

    نظرات  (۱۶)

    با عرض سلام و تبریک
    آیا باید چند تا کلاس در نظر بگیریم، یعنی یک کلاس برای نام دانشجو و یک کلاس برای نمره دانشجو و یک کلاس کلی هم برای دانشجو ؟ آخه فک میکنم انجام این کار فقط برنامه رو شلوغ تر میکنه
    پاسخ:
    سلام ممنون

    کلاس برای نام دانشجو ؟!!
    یه کلاس برای دانشجو و یه کلاس برای کلاس درس.

    موفق باشید
    سلام استاد
    سال نو مبارک
    فکر کنم سوالی که میخوام بپرسم رو قبلا جواب  داده باشید اما من دقیق یادم نیست.
    هر آیتم داخل ArrayList یک index داره . چجوری میشه به این index دسترسی پیدا کرد ؟
    مثلا میخواهیم index آیتمی را که یک ویژگی خاص دارد را بفهمیم .
    پاسخ:
    سلام ممنون، سال نو شما هم مبارک

    یک راه اینه که در ArrayList جستجو کنید که دو جلسه آخر قبل از تعطیلی در کلاس دیدید. راه دیگه استفاده از متد indexOf کلاس ArrayList است. برای اطلاعات بیشتر به Java doc مراجعه کنید و اگر سولی داشتید مطرح کنید.

    موفق باشید.
    salam ostad chera tu in methode man error mide k grade shenakhteshode nist??(students arraylisti az noe class students hast k 2ta field b esme grade va name dare) public int calculateAverage() { int index=0; int average=0; while(index<=students.size()) { average=average+grade; } index++; return average; }
    پاسخ:
    سلام
    لطفاً فارسی بنویسید.

    بله واقعاً grade  شناخته شده نیست. شما grade رو کجا تعریف کردید؟
    اگر کلاس Student رو درست تعریف کرده باشید، grade فیلدی از آن است. از طرف دیگر متد نوشته شده در بالا قطعاً در کلاس Student نیست. پس در متدی خارج از کلاس Student می خواهید به فیلدی از این کلاس (که private است) دسترسی داشته باشید. کمپایلر از کجا باید بداند که کدام grade مد نظر شماست؟ (به عملگر نقطه کمی فکر کنید.)

    موفق باشید.

    سلام استاد
    ببخشید ولی زمانی که من از debugger  استفاده میکنم مرحله ی اول رو هم اجرا نمیکنه و برنامه رو میبنده و مینویسه که main (stopped).
    چرا استاد؟؟؟؟؟ دلیلش چیه؟
    پاسخ:
    سلام

    آیا break point رو در جای مناسب قرار می دهید؟ مثلا می توانید آن را در اولین سطر دستورات متد مورد نظر قرار دهید.

    موفق باشید.
    سلام استاد خسته نباشید
    1- اطلاعات شاگرد اول باید برگردانده شود یا چاپ شود؟
    2- موقع چاپ اسم دانشجویان خوب , ترتیبشون اهمیتی نداره ؟(مثلا ممکنه دو نفر که یکی  نمرش18 هست و اون یکی  19  هر دو خوب باشن و موقع چاپ ,اول 18 چاپ شه بعد 19 )
    پاسخ:

    سلام ممنون

    1- همان طور که گفته شده، برگرداند. برای چک کردن درست بودن متد نوشته شده می توانید متد دیگری بنویسید که از متد شاگرد اول استفاده کنه و بعد اطلاعات رو چاپ کنه.

    در ضمن همان طور که در سوال - جواب ها گفته شد این نکته را در نظر داشته باشید که ممکن چند نفر شاگرد اول باشند.


    2- در این تمرین نه. بعداً این مشکل را حل می کنیم. (ان شاء الله)


    موفق باشید.


  • ...................
  • سلام استاد
    شاگرد اول کسی است که نمره اش از همه بیشتر است؟
    پاسخ:

    سلام

    بله. البته به این نکته توجه کنید که ممکن است چند نفر مشترکاً شاگرد اول باشند.

    موفق باشید.

    سلام
    یعنی باید همه اش را در یک کلاس بنویسیم ؟؟
    پاسخ:
    سلام
     متدهای گفته شده مربوط به یک کلاس است ولی برنامه ممکن است چند کلاس داشته باشد.

    موفق باشید.
    سلام استاد
    ببخشید که اینقدر سوال میپرسم ولی در یک ArrayList که مثلا از نوع String تعریف شده فقط میشود متغیر از نوع String قرار داد. من نمیتوانم نام دانشجو را به صورت String و نمره ی او را به صورت int ذخیره کنم.
    مقدار ArrayList هم که نمیتواند primitive باشد پس لیست دیگری از نوع int نمیتوانم تعریف کنم و مجبورم هر چه که در لیست قرار میدهم از نوع String باشد.
    با این اوصاف چگونه میشود معدل یک کلاس را که همه ی نمره های آن به صورت String هست را حساب کرد؟
    من نمیتوانم فرمولش را بدست بیاورم.
    با تشکر.
    پاسخ:
    سلام حمیدرضا
    یه سوال: آیا می شه توی ArrayList "دانشجو" قرار داد؟

    موفق باشید.
    سلام
    استاد تعداد دانشجویان را چگونه حساب کنبم ؟
    پاسخ:
    سلام

    فصل 4 رو خوب بخونید.

    موفق باشید.
    بخش‌هایی از این نظر که با * مشخص شده، توسط مدیر سایت حذف شده است
    سلام استاد روز بخیر
    ببخشید من برای کد قسمت جستجوی دانشجو اینو نوشتم
        ****** **** ******************** ************
        *
            *** ****** * **
            ******* ****** * *****
            ************** ********** * ********
            *
                *************************************************************
                *
                    ****** * ******
                    *********
                *
            *
            ********* ** *****
            *
                ********************* ******* **** **** **** **** *** *********
            *
            if(search == false)
            {
                University nameSearch = student.get(number);
                System.out.println(nameSearch);
            }

        }
    ولی موقعی که اجرا میکنم اینجوری چاپ میشه.

    University@72a664

    چکارش کنم استاد. ** **** **** *** **** ** ***** ******* *******
    ********* ** ** *** ** **** **** ** *** ***********
    **** ************** ** **** **** **** ******* *** ** **** ***** ***** ** ****** ***** ****
    **** *** ***** ** **** *** *** ****** ****** ***** *** **** **** ** ** ***** **** ******* ** ******** **** ** ** ******** *****
    *** **** ***** ** **** ******
    ممنون میشم.
    با تشکر.

    پاسخ:
    سلام ممنون

    دقت کنید شما nameSearch رو چاپ کردید که از کلاس University است.
    متد  println می تونه انواع primitive و رشته رو چاپ کنه. به طور دقیقتر می دونه چطوری باید اون ها رو چاپ کنه. ولی نمی دونه یک شی از University رو چطوری چاپ کنه. برای همین فقط اسم کلاس و آدرس شی در حافظه رو چاپ می کنه (به طور پیش فرض).

    برای حل مشکل فعلاً برای چاپ یا باید رشته به این متد بدید یا primitive.

    موفق باشید.


    سلام استاد
    چطوری میشه یه String رو به int یا float تبدیل کرد؟؟
    برای اینکه بتونیم نمرات دانشجویان رو با هم جمع کنیم و معدل بگیریم باید اعداد رو از داخل ArrayList که به صورت String هستش جدا کنیم و به صورت اینتیجر در بیاریم تا بتونیم جمع کینم.
    راه راحتتری هم هست؟
    میشه کمک کنید؟
    پاسخ:
    سلام

    بله راه راحتتری هم هست. اینکه اطلاعات دانشجو را به صورت رشته ذخیره کنید اصلاً ایده خوبی نیست.
    بیشتر فکر کنید.

    موفق باشید.
    Salam ostad
    kheili mamnun babat zaman 
    سلام استاد خسته نباشید .
    1-ببخشید برنامه رو با bluej بنویسیم ؟
    2-درباره" ذخیره اطلاعات در جای مناسب" گفتید یعنی  "نمایش اطلاعات در برنامه  " یعنی ما یک object به نام student داریم که فیلد هایش نام و نمره است و باید دو تا متد بنویسیم که هر وقت خواستیم این نام و نمره رو get ( یا set ) کنه ؟ منظور از از دخیره اطلاعات همینه؟؟
    پاسخ:
    سلام ممنون
    1- با هر کدام که راحت تر هستید. ترجیحا BlueJ.
    2- ایده ی خوبیه. اینکه چه متدهایی داشته باشه بستگی به شما داره که می خواهید چه کارهایی برای شما انجام بده.

    موفق باشید.
    سلام استاد
    نمایش یا represent داده ها یعنی چی استاد؟ من متوجه نشدم.
    بعد استاد یه سوال دیگه!!
    دستورات for_each و while_loop فقط برای collection هاست؟
    یعنی اگه بخوایم در برنامه از for و while استفاده کنیم همون for و while زبان برنامه نویسی C هستش دیگه؟
    درست میگم؟؟
    امیدوارم متوجه شده باشید.
    پاسخ:
    سلام

    نمایش داده ها یعنی اینکه داده ها را در یک متغیر قرار دهیم.
    مثلاً اگر بخواهیم برنامه ای بنویسیم که یک عدد را بگیرد و نصف آن را چاپ کند، باید آن را در متغیری از نوع double ذخیره کنیم یا represent کنیم.

    حال در این تمرین شما باید اطلاعات دانشجویان را در جایی (متغیری) ذخیره کرده یا به عبارت دیگر represent کنید.

    for-each مربوط به کالکشن است ولی حلقه ی while کلی است. همچنین دستور for معمولی در جاوا شبه for زبان C است.
    موفق باشید
    سلام استاد اگر امکان دارد مهلت بیشتری برای این برنامه بدهید کارهای عید قدری مارا از برنامه نویسی دورکرده است این پروژه پروژه بزرگی می باشد
    با تشکر
    پاسخ:
    سلام
    سه روز فکر نمی کنم مهلت کمی باشد.
    با این حال مهلت ارسال 1 هفته بیشتر شد!

    وقت بیشتر برای تمرکز بیشتر همراه با آرامش بیشتر ( در کنار خانه تکانی!)
    موفق باشید.

    سلام استاد خسته نباشید
    ببخشید در مورد ذخیره سازی در یک جای مناسب ، من منظورتون رو نفهمیدم.
    اگه یادتون باشه در این رابطه ازتون سوال کردم و شما هم گفتید که آخر ترم فایل رو که بخونیم ذخیره سازی رو یاد میگیرید. درسته؟
    چطوری باید ذخیره کنیم؟؟؟؟؟؟؟؟؟ میشه یه توضیح مختصر بدید.
    ممنون
    پاسخ:
    سلام ممنون

    منظور از "ذخیره سازی در جای مناسب"، نمایش یا represent داده ها در برنامه است و ربطی به فایل ندارد.

    موفق باشید.


    ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
    شما میتوانید از این تگهای html استفاده کنید:
    <b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
    تجدید کد امنیتی