PDA

View Full Version : حلقه های For و While !



Mili++
یک شنبه 07 اردیبهشت 1393, 12:08 عصر
هفته پیش استاد یه مبحثی رُ توضیح داد و یه مسئله مطرح کرد که من چون نبودم رسما متوجه موضوع نمیشم!

سوال این بود:

برنامه ای بنویسید که 100 عدد از ورودی بگیرد و اگر عدد وارد شده عدد اول بود ، آنها را با هم جمع کند!

اینکه برنامه تو هر عدد نیاز داره تا نصف اون عدد رُ چک کنه تا ببینه عدد اول هست یا نه درسته؟ :متفکر:
بعد اگه بخوام حلقشو ایجاد کنم کُدش برام چون کامل توضیح نداده روشن نیست!

میشه لطفا یه توضیحی در این مورد بدید؟! :ناراحت:


و یه خواهش دیگه اینکه من این (http://mihandownload.com/tag/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-borland-c) borland رُ دانلود و نصب کردم، اول اینکه وقتی از new میام text رُ انتخاب میکنم و برنامه رُ مینوسیم اجرا نمیشه
و مورد دوم اینکه وقتی از project و اولین گزینه اقدام به نوشتن برنامه میکنم بعد نوشتن برنامه تو یه صفحع ارور name space بهم میده !
میخوام بدونم مدل borland ام مشکل داره یا مسیری که من میرم برای نوشتن برنامه؟!

اگه میشه لینک borland C++‎‎‎‎ برای دانلود هم بدید.

بینهایت ممنون میشم

majid1605
یک شنبه 07 اردیبهشت 1393, 17:04 عصر
اول سوال دومت:لبخند:: بورلند رو نمیدونم چجوریه :لبخند: ولی در کل بسته به کتابخونه هایی که استفاده می کنی باید فضای نامی یا همون namespace رو هم معرفی کنی که برنامه بدونه فلان کلاس مربوط به کدام کدام کتابخونه است مثلا وقتی از کتابخونه iostream استفاده می کنیم و از cout بخوایم استفاده کنیم باید بهش بگیم این cout مربوط به std حالا چطور بهش بگیم دوتا راه داره همون اول برنامه بگیم
using namespace std;
این خط معمولا بعد از اینکلود کردن هدر فایل ها نوشته میشه که به شخصه استفاده نمیکنم صرفا واسه مواقعی که در حال یادگیری اولیه هستی خوبه
راه دوم استفاده از ::
دیگه خط بالا رو نمی نویسیم و به فرض هرجا cout داشتیم به صورت زیر می نویسیم
std::cout
فقط مختص cout نیست و هرتابعی که جز این کتابخونه هست به همین منوال باید فراخونی بشه
std::endl
سوال اول:
عدد اول عددی طبیعی بزرگ‌تر از ۱ است که بر هیچ عدد مثبتی بجز خود و ۱ بخش‌پذیر نباشد.
تا اینجا مشخصه عدد اول چیه فرض کنید عدد 8 رو داریم می خوایم بررسی کنیم عدد اول هست یا نه کافیه بررسی کنیم ایا بر یکی از اعداد 2تا 7 بخش پذیره یا نه 2-3-4-5-6-7 اولین عدد بررسی میشه نتیجه 8 بر دو بخش پذیره پس اول نیست از حلقه خارج میشیم (نوشتن حلقه با خودت:متفکر:)
واسه عدد7 اینکار رو انجام میدیم از 2 تا 6 بررسی می کنیم بررسی با خودت
اما یه قانون توو ریاضیات هست وقتی یک عدد بر نصف خودش بخش پذیر نباشه بر بیشتر از نصف خودشم بخش پذیر نیست چرا؟ (8 تقسیم بر 4 میشه 2 که قبلا بررسی شده :لبخند: و 7 تقسیم بر 2 میشه 3.5 3 قبلا بررسی شده ):لبخند:
یک حلقه تو در تو می نویسی اولی عدد میگیره حلقه دوم بررسی میکنه اول یا نه یه تقسیم ساده اگه اول بود از حلقه میاد بیرون و جمع میکنه و عدد بعدی رو میگیره اگه هم اول نبود فقط عدد بعدی رو میگیره

Mili++
دوشنبه 08 اردیبهشت 1393, 19:13 عصر
یک حلقه تو در تو می نویسی اولی عدد میگیره حلقه دوم بررسی میکنه اول یا نه یه تقسیم ساده اگه اول بود از حلقه میاد بیرون و جمع میکنه و عدد بعدی رو میگیره اگه هم اول نبود فقط عدد بعدی رو میگیره

با تشکر از وقتی که گذاشتی در مورد توضیح اول اینکه ، من تا اونجا که یادمه استاد سر کلاس بدون مشکل برنامه رُ اجرا کرد و اصلا namespace تو std براش تعریف نکرد!!!!
خیلی ساده ما برنامه رُ نوشتیم و اجرا شد، این borland علاوه بر اینکه آیکون هاش زیاد تر شده، گیج کننده تر شده!
امکانش هست یه borland C++ سالم بهم لینک بدید؟!

و مورد دوم!!
مشکل من همون نوشتن حلقه هاس!!
این قانون بررسی تا نصف عدد رُ هم بهتون گفتم، الان نوشتن حلقه برام گیج و گنگه!! :افسرده: :ناراحت:

الان دستور زیر من درسته؟
اگه غلطه میشه بگید چی کم داره و درستشُ بنویسید؟

int n;
cin >> n;
for (int i = 2; i <= n / 2; i++)
if ((n % i) == 0)
n = 0;

motherboard
دوشنبه 08 اردیبهشت 1393, 19:36 عصر
با تشکر از وقتی که گذاشتی در مورد توضیح اول اینکه ، من تا اونجا که یادمه استاد سر کلاس بدون مشکل برنامه رُ اجرا کرد و اصلا namespace تو std براش تعریف نکرد!!!!
خیلی ساده ما برنامه رُ نوشتیم و اجرا شد، این borland علاوه بر اینکه آیکون هاش زیاد تر شده، گیج کننده تر شده!
امکانش هست یه borland C++‎‎‎‎‎ سالم بهم لینک بدید؟!

و مورد دوم!!
مشکل من همون نوشتن حلقه هاس!!
این قانون بررسی تا نصف عدد رُ هم بهتون گفتم، الان نوشتن حلقه برام گیج و گنگه!! :افسرده: :ناراحت:

الان دستور زیر من درسته؟
اگه غلطه میشه بگید چی کم داره و درستشُ بنویسید؟

int n;
cin >> n;
for (int i = 2; i <= n / 2; i++)
if ((n % i) == 0)
n = 0;

برادر به نظرم هرچی کد رو تا الان نوشتی و داری بذار تا ما هم ببینیم.اونجوری سوال گویا تره.خب الان شما یک حلقه ای رو نوشتی.اما کد رو بذاری بهتره تا ببینیم چی به چیه و بررسی کنیم.

Mili++
دوشنبه 08 اردیبهشت 1393, 19:59 عصر
برادر به نظرم هرچی کد رو تا الان نوشتی و داری بذار تا ما هم ببینیم.اونجوری سوال گویا تره.خب الان شما یک حلقه ای رو نوشتی.اما کد رو بذاری بهتره تا ببینیم چی به چیه و بررسی کنیم.

#include<iostream.h>
#include<conio.h>
void main ()
{
int n;
cin >> n;
for (int i = 2; i <= n / 2; i++)
if ((n % i) == 0)
n = 0;


getch ();}


تا اینجاشو نوشتم!
درسته؟ اگه اشتباس بگید کجاهاشه و چیا باس بش اضافه شه

Mili++
سه شنبه 09 اردیبهشت 1393, 21:30 عصر
با عرض پوزش کسی میتونیه کمکم کنه؟؟؟ :چشمک:

rahnema1
چهارشنبه 10 اردیبهشت 1393, 06:41 صبح
سلام
بهتره مساله را به چند بخش کوچکتر تقسیم کنید تا بتونید حلش کنید. برای اینکه بتونید این کار را انجام بدید لازمه که شما بتونید این مساله ها را حل کنید
جمع یک سری اعداد بدون شرط: تعداد 10 عدد را از ورودی دریافت کنید و آنها را با هم جمع کنید و نتیجه نمایش بدهید
جمع یک سری اعداد با شرط: تعداد 10 عدد را از ورودی دریافت کنید و اگر عدد ورودی زوج بود آنها را با هم جمع کنید و نتیجه نمایش بدهید
- یک عدد از ورودی دریافت کنید اگر اول نبود آن را چاپ کنید.
- یک عدد از ورودی دریافت کنید اگر اول بود آن را چاپ کنید.
حالا این مساله شما جمع یک سری اعداد با شرط هست اما شرطش اینه که عدد ورودی اول باشه
پیشنهاد اول من به شما اینه که حتما از {} استفاده کنید

for (int i = 2; i <= n / 2; i++)
{
if ((n % i) == 0)
{
//.....
}
}

نمی دونم این را براتون گفتن که برای خروج از حلقه میشه از دستور break استفاده کرد یا نه؟ اگه گفته اند، بهتره که وقتی فهمیدید عدد مورد نظر اول نیست از حلقه خارج بشید
یک نکته دیگه اینکه میشه یک حلقه را داخل یک حلقه دیگه گذاشت
همچنین به عنوان یک راه حل شما می تونید یک متغیر تعریف کنید که به صورت 0 و 1 باشه که اگه عدد مورد نظر اول بود اون متغیر 1 و در غیر اینصورت صفر بشه

Ananas
پنج شنبه 11 اردیبهشت 1393, 00:43 صبح
اعداد اول اعدادی هستند که به اعداد اول قبل از خودشون بخش پذیر نباشند بجز بر 1.با تجزیه عدد به عوامل اول می تونید متوجه بشید که اول هست یا نه. تجزیه به عوامل اول به این شکل هست که تا جایی که میشه (باقیمانده نداشته باشد) بر دو تقسیم کنید... سپس تا جایی که امکان داره بر 3 و بعد 5 و بعد 7 و بعد 11 و 13 و ... تا برسه به خوده عدد. مثلا عدد 23:
23 بر 2 بخش پذیر نیست پس میریم سراغ 3
23 بر 3 بخش پذیر نیست پس میریم سراغ 5
23 بر 5 بخش پذیر نیست پس میریم سراغ 7
23 بر 7 بخش پذیر نیست پس میریم سراغ 11
23 بر 11 بخش پذیر نیست پس میریم سراغ 13
23 بر 13 بخش پذیر نیست پس میریم سراغ 17
23 بر 17 بخش پذیر نیست پس میریم سراغ 23
رسیدیم به خودش پس عدد اوله.
حالا مثلا عدد 15:
بر 2 نیست ...
بر سه هست
پس اول نیست.
حالا برای برنامه ی شما میتونید داخل یک حلقه ابتدا بیاید اعداد اول رو پیدا کنید و یا اصلا به برنامه معرفی کنید به طور دستی. بعد چک کنید که عدد شما اول هست یا نه. مثلا با روش بالا.

Mili++
شنبه 13 اردیبهشت 1393, 01:41 صبح
سلام
بهتره مساله را به چند بخش کوچکتر تقسیم کنید تا بتونید حلش کنید. برای اینکه بتونید این کار را انجام بدید لازمه که شما بتونید این مساله ها را حل کنید
جمع یک سری اعداد بدون شرط: تعداد 10 عدد را از ورودی دریافت کنید و آنها را با هم جمع کنید و نتیجه نمایش بدهید
جمع یک سری اعداد با شرط: تعداد 10 عدد را از ورودی دریافت کنید و اگر عدد ورودی زوج بود آنها را با هم جمع کنید و نتیجه نمایش بدهید
- یک عدد از ورودی دریافت کنید اگر اول نبود آن را چاپ کنید.
- یک عدد از ورودی دریافت کنید اگر اول بود آن را چاپ کنید.
حالا این مساله شما جمع یک سری اعداد با شرط هست اما شرطش اینه که عدد ورودی اول باشه
پیشنهاد اول من به شما اینه که حتما از {} استفاده کنید

for (int i = 2; i <= n / 2; i++)
{
if ((n % i) == 0)
{
//.....
}
}

نمی دونم این را براتون گفتن که برای خروج از حلقه میشه از دستور break استفاده کرد یا نه؟ اگه گفته اند، بهتره که وقتی فهمیدید عدد مورد نظر اول نیست از حلقه خارج بشید
یک نکته دیگه اینکه میشه یک حلقه را داخل یک حلقه دیگه گذاشت
همچنین به عنوان یک راه حل شما می تونید یک متغیر تعریف کنید که به صورت 0 و 1 باشه که اگه عدد مورد نظر اول بود اون متغیر 1 و در غیر اینصورت صفر بشه
خُب هنو کامل نشده بود که من از } و { استفاده کنم، دقت کنید اون بالا } باز کردم ولی هنوز پایین نبستمش!
الان این دستوری که من نوشتم تا اینجا چیش کمه دقیقا؟
آیا تا اینجاش درسته؟؟
الان من تعریف کردم که اگه اول بود = با صفر قرار بده! درسته؟؟
مثل اینکه گفتن و من حضور نداشتم!!

Mili++
شنبه 13 اردیبهشت 1393, 01:43 صبح
اعداد اول اعدادی هستند که به اعداد اول قبل از خودشون بخش پذیر نباشند بجز بر 1.با تجزیه عدد به عوامل اول می تونید متوجه بشید که اول هست یا نه. تجزیه به عوامل اول به این شکل هست که تا جایی که میشه (باقیمانده نداشته باشد) بر دو تقسیم کنید... سپس تا جایی که امکان داره بر 3 و بعد 5 و بعد 7 و بعد 11 و 13 و ... تا برسه به خوده عدد. مثلا عدد 23:
23 بر 2 بخش پذیر نیست پس میریم سراغ 3
23 بر 3 بخش پذیر نیست پس میریم سراغ 5
23 بر 5 بخش پذیر نیست پس میریم سراغ 7
23 بر 7 بخش پذیر نیست پس میریم سراغ 11
23 بر 11 بخش پذیر نیست پس میریم سراغ 13
23 بر 13 بخش پذیر نیست پس میریم سراغ 17
23 بر 17 بخش پذیر نیست پس میریم سراغ 23
رسیدیم به خودش پس عدد اوله.
حالا مثلا عدد 15:
بر 2 نیست ...
بر سه هست
پس اول نیست.
حالا برای برنامه ی شما میتونید داخل یک حلقه ابتدا بیاید اعداد اول رو پیدا کنید و یا اصلا به برنامه معرفی کنید به طور دستی. بعد چک کنید که عدد شما اول هست یا نه. مثلا با روش بالا.
الان مشکل من همین تعریفس!!
میخوام بدونم شرطم درسته؟ اگه درسته چی کم داره برنامم؟

parvizwpf
شنبه 13 اردیبهشت 1393, 02:14 صبح
سوال مبهمه. خب الان این جمعها کجا باید نمایش داده بشن؟ جداد جدا نمایش داده بشن؟ کلشون با هم جمع بشه. الان شما فقط داری یک عدد میگیری اما گفتی 100 تا بگیره. شرطت برای اول بودن درسته ولی طاهرا باید ادامه بدی الان چیزی که نوشتی 1عدد میگیره و تا اون عدد میره جلو و اعداد اول رو میفهمه و توی شرط هم هیچ کاری نمیکنه.

rahnema1
شنبه 13 اردیبهشت 1393, 09:14 صبح
الان مشکل من همین تعریفس!!
میخوام بدونم شرطم درسته؟ اگه درسته چی کم داره برنامم؟

همون طور که گفته شد مساله شما تشکیل شده از چند مساله کوچکتر
این کدی که شما گذاشتید فقط مشخص می کنه یک عدد اوله یا نه در صورتی که این فقط بخشی از مساله هست و باید این کدتون
را داخل یک مساله بزرگتر ببینید : یک مساله بیرونی و یک مساله درونی
مساله بیرونی همون مساله جمع اعداد هست
مساله درونی هم پیدا کردن عدد اوله که داخل مساله اولی قرار می گیره
اما ما در اینجا اثری از مساله بیرونی نمی بینیم یعنی باید یک متغیر باشه که مقادیر اعداد جمع شده را داخل اون بریزیم
اینکه در حلقه تا 1/2 جلو می روید و بررسی می کنید باقیمانده برابر صفر باشه درسته. تا اینجاش را خوب اومدید
در اینجا شما n را برابر صفر گذاشتید. خب مشکلی نیست. بستگی داره که بعدا بخواهید چه استفاده ای ازش بکنید
لطفا بقیه کد را بذارید ببینیم چه طور میشه.

Mili++
سه شنبه 16 اردیبهشت 1393, 02:07 صبح
خب همین بود، وقتی n = 0 قرار میدم یعنی ازش استفاده ای نمیخوام بکنم و برابر با 0 بشه و فقط اعداد اولی که وارد میشه جمع شه!!!
سوال تو پست اول بود، اشکال کار من تکرار 100 باره این کار بود فقط و جمع اعداد!
ممنون از لطفتون خودم نوشتمش :چشمک: