PDA

View Full Version : سوال: بررسی چند عدد به کمک آرایه ها



sitetheme
یک شنبه 15 آذر 1394, 18:27 عصر
درود
اخیرا استاد ما بخش آرایه ها رو به مباحث برنامه نویسی C اضافه کرد و حالا چند تمرین داده که ظاهرا به کمک آرایه ها نوشته میشن اما روشش رو هنوز متوجه نشدم! از دوستان اگر کسی روش نوشتن تمرین های زیر رو میدونه ممنون میشم حداقل در نوشتن راهنمایی کنه:
1-برنامه ای بنویسید که تعدادی عدد از ورودی دریافت کند و تعداد تکرار عدد وسطی در کل داده ها را چاپ کند.

2-برنامه ای بنویسید که تعدادی عدد از ورودی دریافت کند و تعداد تکرار، پر تکرار ترین عدد را چاپ کند.

3-برنامه ای بنویسید که تعدادی عدد از ورودی دریافت کند و از کوچک به بزرگ چاپ کند.
اونطور که من فکر میکنم ظاهرا باید مقایسه ای بین هر عضو آرای به دیگر اعضا انجام بگیره اما روشش رو نمیدونمف شاید هم فلسفه دیگری دارد!

amirtork
یک شنبه 15 آذر 1394, 21:32 عصر
سلام،
از اونجایی که تازه این مبحث رو اضافه کردن، پس احتمالا با آرایه ای با سایز پویا سر و کار ندارید.
برای برنامه ی اول ابندا یک آرایه به طول تعداد اعدادی که باید بگیرید تعریف کنید و در داخل یک حلقه این اعداد رو دریافت کنید. بعد مقدار عدد وسطی رو با استفاده از طول آرایه پیدا کنید و در داخل یک حلقه کل آرایه رو از ابتدا پیمایش کنید و تعداد تکرار اون عدد رو با استفاده از یک متغیر کمکی بشمرید.
برای برنامه ی دوم هم، مثل برنامه ی اول آرایه ای به طول اعدادی که باید دریافت کنید تعریف کنید و در یک حلقه اونها رو دریافت کنید، بعد با استفاده از الگوریتم مرتب سازی حبابی(bubble sort) آرایه رو مرتب کنید.
اگر در مورد این الگوریتم اطلاعی ندارید، پیشنهاد میکنم در اینترنت(و یا همین فروم) جست و جو کنید و اگر متوجه نشدید بفرمایید تا من یا دوستان دیگه راهنمایی کنیم.

sitetheme
دوشنبه 16 آذر 1394, 00:27 صبح
سلام،
از اونجایی که تازه این مبحث رو اضافه کردن، پس احتمالا با آرایه ای با سایز پویا سر و کار ندارید.
برای برنامه ی اول ابندا یک آرایه به طول تعداد اعدادی که باید بگیرید تعریف کنید و در داخل یک حلقه این اعداد رو دریافت کنید. بعد مقدار عدد وسطی رو با استفاده از طول آرایه پیدا کنید و در داخل یک حلقه کل آرایه رو از ابتدا پیمایش کنید و تعداد تکرار اون عدد رو با استفاده از یک متغیر کمکی بشمرید.
برای برنامه ی دوم هم، مثل برنامه ی اول آرایه ای به طول اعدادی که باید دریافت کنید تعریف کنید و در یک حلقه اونها رو دریافت کنید، بعد با استفاده از الگوریتم مرتب سازی حبابی(bubble sort) آرایه رو مرتب کنید.
اگر در مورد این الگوریتم اطلاعی ندارید، پیشنهاد میکنم در اینترنت(و یا همین فروم) جست و جو کنید و اگر متوجه نشدید بفرمایید تا من یا دوستان دیگه راهنمایی کنیم.
درود
ممنون که وقتتون رو گذاشتید،بله اتفاقا سوالی هم در رابطه با آرایه پویا از استاد کردم، فعلا استاتیک یا ثابت رو یاد دادند، این بخش مشکلی نیست دقیقا مشکل بنده با بخش


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

کلا مقایسه آرای ها به چه شکلی باید انجام بشه؟ف تا جایی که تمام مقادیر با آرایه باید دریافت بشه رو کاملا مسلط هستم، اما اینکه حالا با اعداد داخل آرایه باید چه کرد رو نمیدونم!
همچنین در مورد الگورتیمی که معرفی کردید، فکر نمیکنم استادمون منظورشون استفاده از این الگوریتم باشه! یعنی میخوان که خودمون به دور از استفاده از الگوریتم و کد های آماده برنامه ها رو بنویسیم.
با احترام

amirtork
دوشنبه 16 آذر 1394, 01:08 صبح
بسیار خب، من برای اینکه جواب سوالتون رو بدم، یک مقدار از قبل ترش شروع میکنم،
همونطور که میدونیم، برای دسترسی به اعضای آرایه از [ ] استفاده میشه و خونه ها (block ها یا segment) ی آرایه از 0 شماره گذاری میشن. یعنی اگر ما آرایه ای به طول 5 داشته باشیم، اندیس عضو میانی این آرایه که همون اندیس خونه ی سوم هست برابر هست با [5/2] (منظور از [ ] در اینجا جزء صحیح هست). برای اینکه راحت تر این رو به کد تبدیل کنیم و نخوایم از تابع abs استفاده کنیم، میتونیم به جای جزء صحیح از:

(N-1)/2 = index
استفاده کنیم.
حالا که خونه ی وسطی رو پیدا کردیم باید تعداد تکرار اون رو پیدا کنیم.
برای این کار لازم هست تا آرایه رو داخل حلقه پیمایش کنیم، این کار دقیقا همونطوری انجام میشه که برای گرفتن ورودی آرایه رو پیمایش میکنیم:

for(int i = 0 ; i < N ; i++)

در همین بخشی که در حال پیمایش کردن آرایه هستیم، برای اینکه تعداد تکرار اون عضو به خصوص رو بشماریم از یک ساختار شرطی if استفاده میکنیم.

if((array[i] == array[(N-1)/2])

)

اگر شرط بالا درست بود، به متغیر کمکی که قبل از اجرای حلقه تعریف کردیم(یه متغیر مثل int tmp = 0;) باید یک شماره اضافه بشه، که معمولا این کار رو به صورت tmp++; یا به صورت ساده تر به صورت tmp = tmp +1 انجام میدن.

در مورد الگوریتم هم، لازم نیست از کد آماده استفاده کنید! الگوریتم مرتب سازی حبابی الگوریتیمی هست برای مرتب سازی آرایه ها و امثال اون ها که الگوریتم خیلی ساده ای هست، پیشنهاد من این هست که سعی کنید خودتون این الگوریتم رو پیاده سازی کنید، اگر در فهم بخش هایی از این الگوریتم مشکل داشتید، بفرمایید در حد توان من یا دوستان دیگه در خدمتتون هستیم.