PDA

View Full Version : چگونگی نوشتن برنامه ای شیء گرا برای کار با اعداد بزرگ



saeedkheiri
چهارشنبه 31 تیر 1388, 12:49 عصر
سلام دوستان من میخوام یه برنامه به صورت شی گرا برای ذخیره سازی اطلاعات عددی بزرگ مثلا 1000 رقمی پیاده سازی کنم ولی نمی دونم با چه روشی و الگوریتمی این کار بکنم اگه میتونین نمونه یا کمیک کنین ممنون میشم در ضمن اعمال ریاضی هم باید روش باشن

hozouri
چهارشنبه 31 تیر 1388, 12:53 عصر
دوست عزیز
شما می تونید از struct برای این موضوع استفاده نمایید و با استفاده از operator ها عملگر ها رو overload نمایید.

این یه راهنمایی کلی و این موضوع خیلی جزئیات داره...

ASKaffash
چهارشنبه 31 تیر 1388, 13:53 عصر
سلام
برای محاسبات عددی روی اعداد بزرگ باید اعداد را بصورت رشته ای درنظر بگیرید در این حالت یک کلاس ایجاد کنید که یک رشته (با محتوای عدد) بعنوان ورودی متد سازنده دریافت کند سپس علائم ریاضی + و - و * و / را با Operator Overloading برای کلاس تعریف کنید و منطق ریاضی جمع و ضرب را پیاده سازی کنید مطابق شکل ذیل برای جمع دوعدد بزرگ از سمت راست دو رشته پیمایش نمائید و کار ساده ریاضی سوم ابتدائی را شبیه سازی کنید(البته همه کار ها رشته ای است)

saeedkheiri
چهارشنبه 31 تیر 1388, 14:40 عصر
خیلی ممونو از راهنماییتون
آقا نمونه ای از این کد ها دارین واسم بفرستین ؟

reza.bn2005
چهارشنبه 31 تیر 1388, 14:51 عصر
سلام
بهتر يك ليست پيوندي درست كني بدين صورت كه با وارد كردن هر رقم جديد يك گره تازه ايجاد بشه و اون رقم توي گره جديد ذخيره بشه مثلا عدد 239 را در سه گره يكي براي 2 ديگري براي 3 و آخري براي 9.
براي انجام عمليات رياضي هم بايد بر روي تك تك گره ها انجم شود.
موفق باشيد

Saeed_m_Farid
چهارشنبه 31 تیر 1388, 15:28 عصر
سلام دوستان من میخوام یه برنامه به صورت شی گرا برای ذخیره سازی اطلاعات عددی بزرگ مثلا 1000 رقمی پیاده سازی کنم ولی نمی دونم با چه روشی و الگوریتمی این کار بکنم اگه میتونین نمونه یا کمیک کنین ممنون میشم در ضمن اعمال ریاضی هم باید روش باشن


دوست عزیز
شما می تونید از struct برای این موضوع استفاده نمایید و با استفاده از operator ها عملگر ها رو overload نمایید.

این یه راهنمایی کلی و این موضوع خیلی جزئیات داره...


خیلی ممونو از راهنماییتون
آقا نمونه ای از این کد ها دارین واسم بفرستین ؟
سلام
این مورد قبلاً چندین بار با عناوین و در تاپیکهای مختلف تکرار شده است و بعضی وقتها به جواب رسیده بعضی وقتها نه!!!
ولی خوب همیشه باز هم تکرار میشه؟!؟ نمونه هاش : یک (http://barnamenevis.org/forum/showthread.php?t=155246&highlight=%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF+%D8%A8%D8 %B2%D8%B1%DA%AF)و دو (http://barnamenevis.org/forum/showthread.php?t=142378&highlight=300+%D8%B1%D9%82%D9%85%DB%8C)و سه (http://barnamenevis.org/forum/showthread.php?t=142378&highlight=%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF+%D8%A8%D8 %B2%D8%B1%DA%AF) و ... (http://barnamenevis.org/forum/search.php?searchid=1637148)

چند بار هم دوستان طی پیام خصوصی علیرغم کدهایی که گذاشته شده از بنده این مورد رو خواستن که واسشون ارسال کردم؛ الان اگه بدردتون میخوره کد کامل #C و ++BCB و یه PDF در مورد اعداد بزرگ رو میذارم.

امیدوارم همینجا دیگه تموم بشه. البته سورس رو با ذکر منبع میتونید استفاده کنید. در ضمن من هم تو این پست (http://barnamenevis.org/forum/showpost.php?p=741496&postcount=8) برخی منابعم رو ذکر کردم ...

موفق باشید.

پ.ن :


تو هسچ قسمت از عرایضم قصد جسارت به دوستان نداشتم؛ امیدوارم سوء تعبیر نشه.
کد #C شامل توابع و کاربردهای متنوعی از الگوریتمهای مختلف از جمله Hashing، لوکاس، استراسن، اعداد اول و ... که از این کلاس میتونستن استفاده کنند و به تدریج به کد مربوطه اضافه شده تا تنوع کاربرد این کلاس مشخص بشه

hozouri
چهارشنبه 31 تیر 1388, 15:30 عصر
دوست عزیز آیا لیست های پیوندی قابلیت overload کردن عملگرها رو دارا است.

وقتی ما به نوع داده جدید تعریف می کنیم با فرض اینکه تمام عملگر هاش رو هم overload کرده باشیم می تونیم مثل یه نوع داده باهاش برخورد کنیم. یعنی جمع , منها , ضرب و == , != , < و ... رو داشته باشیم ....

reghbali06
چهارشنبه 31 تیر 1388, 15:47 عصر
به نظر من استفاده از آرایه ها بهترین راه است
یک کلاس درست کن که دو متغیر دارد
1.یکی آرایه ای که هر عنصر آن یک رقم رو ذخیره می کنه
2.تعداد ارقام ( که برای انجام اعمال ریاضی مفید است )

saeedkheiri
چهارشنبه 31 تیر 1388, 16:18 عصر
دوستان ممنون از راهنمایتون
من
دارم روش کار میکینم
بعد از اتمام سوسرس رو برا همه میزارم

Saeed_m_Farid
چهارشنبه 31 تیر 1388, 16:40 عصر
دوست عزیز آیا لیست های پیوندی قابلیت overload کردن عملگرها رو دارا است.

وقتی ما به نوع داده جدید تعریف می کنیم با فرض اینکه تمام عملگر هاش رو هم overload کرده باشیم می تونیم مثل یه نوع داده باهاش برخورد کنیم. یعنی جمع , منها , ضرب و == , != , < و ... رو داشته باشیم ....
بله، تفاوتی نمی کنه که شما برای چه ساختار داده ای میخواهید عملگرها رو overload کنید، وقتی آزایه ها قابلیت overload دارند چرا لیست پیوندی یا آرایه های پویا و ... نباید داشته باشند؟ تو همین سورسی که آپ کردم، عملگرها برای یه کلاس بخصوص overload شدن، و همونطوریکه میدونید تو #C همه چی یا کلاسه یا struct (یعنی مثل ++C/C، پاسکال و ... نوع داده primitive نداره، حتی اشاره گرهاش - مثل IntPtr - هم struct اه !!! )، پس محدودیتی تو overload کردن عملگرها نباید داشته باشیم ...

Salar Ashgi
چهارشنبه 31 تیر 1388, 19:23 عصر
سلام ، بنظر من چون آرایه یک ساختمان داده ایستا است ، ولی لیست پیوندی یک ساختمان داده پویا ،

استفاده از لیست پیوندی میتونه گزینه مناسبی واسه این کار باشه !!!

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

mohkami
چهارشنبه 31 تیر 1388, 19:36 عصر
کی گفته آرایه ایستا هست؟
بعدشم اندازه آرایه در این مساله راحت حساب میشه و مقدار اون دائماً در حال تغییر نیست که قرار باشه کاملاً پویا باشه!
این سوال با آرایه ای از کاراکترها(رشته) یا آرایه ای از اعداد کوچکتر قابل حلِ! این مطلب چند باری در فروم مطرح شده!
این هم لینک (http://barnamenevis.org/forum/showthread.php?t=168676)

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

Salar Ashgi
چهارشنبه 31 تیر 1388, 19:40 عصر
کی گفته آرایه ایستا هست؟
بعدشم اندازه آرایه در این مساله راحت حساب میشه و مقدار اون در حال تغییر نیست که قرار باشه کاملاً پویا باشه!
این سوال با آرایه ای از کاراکترها(رشته) یا آرایه ای از احداد کوچکتر قابل حلِ! این مطلب چند باری در فروم مطرح شده!
این هم لینک (http://barnamenevis.org/forum/showthread.php?t=168676)

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

دوست عزیز این حرف من نیست ، حرف چند تا کتاب ساختمان داده است از جمله کتاب

هورویتز (البته اگه شما با مفاهیم ساختمان داده آشنا باشید) !!!

reza.bn2005
چهارشنبه 31 تیر 1388, 23:42 عصر
آرايه محدوديت هايي داره حتي اگر آرايه پويا باشه بايد يك مقداري حين اجراي برنامه بهش بدي تا بتوني باهاش كاركني.
ولي ليست پيوندي هيچ محدوديت نداره تا جايي كه تو Heap حافظه باشه مي توان به ليست تخصيص داد
موفق باشيد

mohkami
پنج شنبه 01 مرداد 1388, 01:39 صبح
مجدداً سلام،

فک نکنم خیلی بحث سختی باشه که فقط شما باهاش آشنا باشید!

اگر در مورد فضایی که آرایه اشغال میکند صحبت میشد(چون به فضای کنار هم نیاز داره اما لیست پیوندی از این نظر مشکل نخواهد داشت)،میشد گفت حق با شماست ولی استاتیک بودن آرایه وقتی مشکل سازه که نشه تشخیص داد که چه اندازه ای خواهد داشت اما اینجا با گرفتن عدد معلوم میشه چه تاندازه ای خواهد داشت.

alicam
پنج شنبه 01 مرداد 1388, 01:44 صبح
سلام دوست عزیز
من همین چند روز پیش این مشکل رو داشتم f# که یک dll هست رو با کمک یکی از دوستان از سایت ماکرو سافت دانلود کردم فقط باید تو تعیریف نوع داده تون از big int استفاده کنید

saeedkheiri
پنج شنبه 01 مرداد 1388, 08:12 صبح
خوب این dll رو واسه همه دوستان بزارین
ممنون میشم