PDA

View Full Version : مبتدی: اشکال یابی این برنامه (مقسوم علیه و ارایه)



cooboo
شنبه 28 شهریور 1394, 21:06 عصر
درود

دوستان صورت مسئله برنامه اینه : برنام های بنویسید که عددی از ورودی دریافت کند و مقسوم علیه های ان را در آرایه قرار دهد و سپس ارایه چاپ کند

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

این سورس برنامه من :


#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int x, i = 1, b=1,c=0;
int a[10000];
cout << "Enter a Number : ";
cin >> x;


for (i = 1; i <= x;i++)
{

if (x%i == 0)
{
a[i] = i;
}

}


cout << endl;


for (i = 1; i <= x; i++)
{
cout << "*Maghsoom " << c + 1 << "* : ";
cout << a[i];
cout << endl;
C++‎;
}

_getch();
return 0;
}

pbm_soy
یک شنبه 29 شهریور 1394, 00:21 صبح
توی while داخل آرایه مقدار باقیمانده را ذخیره کردید نه خارج قسمت!
در کد بالا شما باقیمانده تقسیم x بر تک تک اعداد یک تا آن عدد را در آارایه ذخیره کردید

cooboo
یک شنبه 29 شهریور 1394, 00:30 صبح
توی while داخل آرایه مقدار باقیمانده را ذخیره کردید نه خارج قسمت!
در کد بالا شما باقیمانده تقسیم x بر تک تک اعداد یک تا آن عدد را در آارایه ذخیره کردید


خب به صورت عملی نشون بدید باید چیکار کنم :لبخند:

cooboo
یک شنبه 29 شهریور 1394, 01:53 صبح
یه سری تغییرات دوباره دادم ، این دفه خروجی صفر نبود ولی خب اعداد بی ربطی توی خروجی میاد

pbm_soy
یک شنبه 29 شهریور 1394, 02:07 صبح
شما اشکال یابی میخواستید نه برنامه! نوشتنش طول نمیکشه ولی بهتر اشت که خودتون اینکار را انجام دهید تا راه بیافتید
این تغییرات جدید بهتر شد!


در این کد شمارنده i برای شمارش اعداد تا x است از آن برای شمارنده خانه های آرایه استفاده نکنید چون اشتباه میشود یک شمارنده دیگر برای اینکار بگیرید و آنرا از صفر شروع گنید مثلا همان c که مقدارش صفر است را برای مشخص کردن اندیس آرایه از آن استفاده کنید
دستورات cout را از داخل if و while حذف کنید
دستور i++ را هم از داخل if بیرون ببرید و به عنوان آخرین دستور حلقه while بنویسید

فقط اون دستورات نمایش را از اونجا بردارید و بیرون از حلقه while با استفاده از یک حلقه دیگر آارایه را نمایش دهید
برای نمایش یک حلقه از صفر تا c ایجاد کنید و آارایه x را نمایش دهید

pbm_soy
یک شنبه 29 شهریور 1394, 02:11 صبح
بهتر است برنامه را در سی تایپ کنید و اجرا بگیرید همینجوری اینجا تایپ نکنید!
اینطوری یاد نمیگیرید! و فاییده ای هم ندارد
برنامه اولی که نوشته بودید و الان عوض کردید و گفتید که صفر نشون میده بنظرم خطا داشت یا اشتباه به اینجا انتقال دادید یا .....!
این برنامه فعلی هم اگر اجرا بشه کخ بعید میدانم برنامه در یک حلقه تکرار بینهایت گیر میکند !
البته خطا خواهد داد چون c++ که نوشتید در داخل if با حروف بزرگ است درحالی که تعریفش با حروف کوچک است!

cooboo
یک شنبه 29 شهریور 1394, 02:23 صبح
شما اشکال یابی میخواستید نه برنامه! نوشتنش طول نمیکشه ولی بهتر اشت که خودتون اینکار را انجام دهید تا راه بیافتید
این تغییرات جدید بهتر شد!


در این کد شمارنده i برای شمارش اعداد تا x است از آن برای شمارنده خانه های آرایه استفاده نکنید چون اشتباه میشود یک شمارنده دیگر برای اینکار بگیرید و آنرا از صفر شروع گنید مثلا همان c که مقدارش صفر است را برای مشخص کردن اندیس آرایه از آن استفاده کنید
دستورات cout را از داخل if و while حذف کنید
دستور i++ را هم از داخل if بیرون ببرید و به عنوان آخرین دستور حلقه while بنویسید

فقط اون دستورات نمایش را از اونجا بردارید و بیرون از حلقه while با استفاده از یک حلقه دیگر آارایه را نمایش دهید
برای نمایش یک حلقه از صفر تا c ایجاد کنید و آارایه x را نمایش دهید

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

مثلا 6 را که وارد میکنم علاوه بر 1و2و3و6 خونه های خالی ارایه که شکل این عدد هستن -858993460 توی خروجی نمایش داده میشن

چیکار کنم که فقط اون خونه های ارایه ی مد نظر چاپ بشن و خونه های خالی ارایه چاپ نشن

cooboo
یک شنبه 29 شهریور 1394, 13:08 عصر
برنامه کامل شد و معایبش هم رفع شد ، ممنون