برنامه ای بنویسید که شماره دانشجویی و معدل تعداد n دانشجو را از ورودی خوانده،
دانشجویی را که دومین معدل را از نظر بزرگی دارد، پیدا کند و به خروجی ببرد! (سوال یکم برام نامفهومه!)
شما اولین کاری که باید بکنید (که نکردین) اینه که مساله رو خوب بخونید، گفته برنامه ای بنویسید که شماره دانشجویی و معدل تعداد n دانشجو را از ورودی خوانده(اصلا نگفته معدل تمام این n نفر ذخیره بشه بنابراین اصلا نیازی به آرایه نیست)
در ضمن گفته n نفر، بنابراین شما باید عدد n از کاربر بگیرین و به تعداد این عدد معدل و شماره دانشجویی از ورودی بخونید(یعنی حلقه شما باید n بار اجرا بشه) در صورتیکه شما یک حلقه while نوشتین که اگر کاربر N زد خارج بشه اگر Y دوباره معدل بگیره.
دومین کار اینه که باید قدم به قدم برنامه تون رو به همراه متغیر ها trace کنید، حالا چه رو کاغذ چه با debugger کامپایلرتون.
اما دلیل اینکه برنامه شما درست کار نمی کنه اینه که فرض کنید کاربر رو معدل های 12و14 و19 رو بترتیب وارد کنه در این حالت اگر الگوریتم شما درست باشه باید معدل 14 با شمار دانشجویی اون دانشجو چاپ بشه،
با توجه به اینکه شما
max1=0 , max2=0 در نظر گرفتین شرط (if( avg > max2 حتما درست درمیاد شرط بعدی (if( avg > max1 هم حتما درست درمیاد بنابراین max1 میشه 12، خب حالا کاربر 14 رو وارد میکنه توجه کنید که در این حالت الان 12 میشه دومین معدل و برنامه شما اگر الان تموم بشه باید 12 رو به عنوان دومین معدل بتونه نمایش بده که نمیده چون شرط (if( avg > max2 مجددا درسته (چون هنوز max2==0 در ضمن عدد 12 هم در حافظه از بین میره) حالا کاربر 19 رو وارد میکنه و شرط (if( avg > max2 حتما درست درمیاد شرط بعدی (if( avg > max1 هم حتما درست درمیاد بنابراین قاعدتا خروجی برنامه شما عدد صفر میشه بجای 14 در صورتیکه عدد 14 هم در حافظه از بین میره.
کافیه یه بار دیگه فکر کنید و الگوریتم تون رو عوض کنید، مساله رو همیشه به شکل ساده تر حل کنید بعد بسطش بدین مثلا فرض کنید الان میخواین یه برنامه بنویسید که 3 تا عدد رو از ورودی بخونه و دومین عدد بزرگتر رو چاپ کنه.
پس فعلا این سه مطلب تو ذهنتون باشه اول خوب خوندن مساله دوم اگر براتون سخت بود یا درست جواب نداد به مساله کوچکتری تقسیمش کنید، سوم trace کردن.