PDA

View Full Version : اعداد تام



treily
پنج شنبه 08 تیر 1391, 13:58 عصر
سلام به همه دوستان برنامه نویس
من یه برنامه تو کنسول برای به دست آوردن اعداد تام بین دو عدد دلخواه نوشتم ولی موقع اجرا ارور میده
نمیدونم مشکلش چیه!!
کسی میتونه کمکم کنه؟
این هم کدی که نوشتم


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication19
{
class Program
{
static void Main(string[] args)
{
int x = Int32.Parse(Console.ReadLine());
int y = Int32.Parse(Console.ReadLine());
int[] a = new int[y];
int sum = 0, i, j;
for (i =1; i < y; i++)
{
a[i] = i;
}
for (i = x; i <= y; i++)
{
for (j = 1; j <=a[i]; j++)
{
if (a[i]% j == 0)
{
sum = sum + j;
}

}
if (sum == a[i])
{
Console.WriteLine(a[i]);
sum = 0;
}
}
Console.ReadKey();
}
}
}

ممنون میشم اگه کمکم کنین

mehdy.programmer
پنج شنبه 08 تیر 1391, 14:43 عصر
دوست عزیز اگه میشه یکم راجع به الگوریتمت و اینکه می خوای چیکار کنی توضیح بده! اگه میشه راجع به ارروری هم که میده یه توضیحی بده!

treily
پنج شنبه 08 تیر 1391, 14:55 عصر
دوست عزیز اگه میشه یکم راجع به الگوریتمت و اینکه می خوای چیکار کنی توضیح بده! اگه میشه راجع به ارروری هم که میده یه توضیحی بده!
اعداد تام اعدادی هستند که مجموع مقسوم علیه های آنها با خود آن عدد برابر است
مثلا مقسوم علیه های 6 عبارتند از:1و2و3
که اگه جمعشون کنیم همون 6 به دست میاد
من میخوام برنامه دو تا عدد رو از کاربر بگیره و اعداد تام بین اونها رو چاپ کنه
برای یه دون عدد نوشتم که مشخص میکنه تام هست یا نه
ولی برای اعداد تام بین دوعدد ارور میده و برای اون شمارنده j که برای حلقه for نوشتم میگه که تعریف نشده
و بعد هم این ارور رو میده Index was outside the bounds of the array.

returnx
پنج شنبه 08 تیر 1391, 15:26 عصر
Index was outside the bounds of the array.
این خطا به این دلیل رخ میده که شما به اندیسی از آرایه اشاره میکنید که بیشتر از طول ارایتون هست...
حلقتون رو اصلاح کنید...

treily
پنج شنبه 08 تیر 1391, 15:52 عصر
این خطا به این دلیل رخ میده که شما به اندیسی از آرایه اشاره میکنید که بیشتر از طول ارایتون هست...
حلقتون رو اصلاح کنید...
چطوری درستش کنم؟
میتونین یه نگاهی به کد بندازین ببینین طول آرایه رو درست دادم یا نه؟
اصلا کدی که نوشتم درست هست؟

returnx
پنج شنبه 08 تیر 1391, 16:39 عصر
for (j = 1; j <=a[i]; j++)

دقت داشته باشید که در زبان های C Family اندیس ارایه از 0 شروع می شود و به n-1 ختم میشود به طور مثال :


int[] array_name = new int[3];

ارایه ما از 0 شروع می شود و به 2 ختم می شود ، که طول آرایه ما برابر 3 می شود...
حالا با این توضیحاتی که دادم حلقتون رو تصحیح کنید...

treily
پنج شنبه 08 تیر 1391, 16:48 عصر
دوستان به نظرم درستش کردم ولی جواب بهم نمیده
قسمت حلقش درست شد
ولی موقعی که اجراش میکنم هیچ جوابی بهم نمیده
یا جواب اشتباه میده
این کدی که نوشتم
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication20
{
class Program
{
static void Main(string[] args)
{
int x = Int32.Parse(Console.ReadLine());
int y = Int32.Parse(Console.ReadLine());
int[] a = new int[y+1];
int i,j,sum=0;

for (i = x; i <= y; i++)
{
a[i] = i;
}

for (i = x; i <= y; i++)
{
for (j = 1; j <= a[i]; j++)
{
if (a[i] % j == 0)
{
sum = sum + j;
}
}
if (a[i] == sum)
{
Console.WriteLine(a[i]);
}
sum = 0;
}

Console.ReadKey();
}
}
}

دوستان خواهشا اگه کسی میتونه کمکم کنه
ممنون میشم

Y_Safaiee
پنج شنبه 08 تیر 1391, 18:22 عصر
با سلام خدمت شما دوست گرامی

چرا اینقدر کارتونو سخت کردید

خدمت شما



int a = 0, b = 0, c = 0;
Console.Write("Please Enter Number 1 :");
a = int.Parse(Console.ReadLine());
Console.Write("Please Enter Number 2 :");
b = int.Parse(Console.ReadLine());

if (a > b)
{
c = b;
b = a;
a = c;
}

Console.WriteLine("\n\n\nAdad Taam(Kamel)....");
for (int i = a; i <= b; i++)
{
int s = 0;
for (int j = 1; j < i; j++)
{
if (i % j == 0) s += j;

}
if (s == i) Console.WriteLine(s);
}

Console.ReadKey();


موفق باشی
بایت بایت

treily
پنج شنبه 08 تیر 1391, 19:18 عصر
دستت طلا داداش
خیلی مردی
من تازه شروع کردم به برنامه نویسی زیاد حرفه ای نیستم
در هر صورت ممنون