الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

برنامج .. أبي فكرة الحل فقط ..

مغلق
بدأه man9our في 6 نوفمبر 2007 · 7 رد · 1,117 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..

كيفكم وشخبركم عساكم طيبين ..

طال عمركم انا طالب في جامعة الملك سعود قسم نظم المعلومات

وقبل يومين عطانا الدكتور بروجكت والمطلوب تسليمه يوم السبت القادم ان شاء الله

قريت السؤال .. لفيت يمين يسار .. البرنامج فيه فكرة جديدة ..

اذ ا ما عليكم امر تعطوني فكرة البرنامج فقط واذا جاء واحد كريم وحلّه لي مع الشرح الله يعطيه العافيه خخخخخخـ

In this project you will specify and implement an ADT for large integer arithmetic. Recall that the largest signed integer that a 32-bit computer system can store is 231 – 1 = 2147483647. In some application one is required to process integers larger than this value e.g. 123,456,789,123,456. The ADT that you will implement in this project could be used in such applications.

Assume that the following operations are to be performed on large positive integers only: (a) comparison – integers are compared to each other to check if one is greater than/less than the other. ( B) addition – integers are added and the result is returned. © subtraction – one integer is subtracted from the other and the result returned.

A possible solution is to divide the large integer into smaller blocks of integers, carry out the operations on each block separately and combine the results. For example, two large integers 123456789123456 and 23456891123851 can be divided into blocks and added to each other, block by block from right to left. The blocks could be represented as lists.

1

123 456 789 123 456

23 456 891 123 851

-----------------------------------------

...7 307

You are required to submit the following for grading in this project:

(a) Specification for various operations of ADT BigInt.

( B) Specification for various operations of ADT List that you will use to represent the big integers.

© Graphical representation of the BigInt showing the storage structure of the list used.

(d) A written statement explaining why you choose a particular storage structure (e.g. singly-linked, doubly-linked or circular structure) for the list.

(e) Java code implementing the ADT List.

(f) Java code implementing the ADT BigInt.

(g) A test class that uses ADT BigInt operations on some big integers.

ودمتمـ ..

Proj1.doc

تم تعديل هذه المشاركة بواسطة man9our في 6 نوفمبر 2007 في 13:49

#2

وعليكم السلام ورحمة الله وبركاته

أنا بصفة عامة مبحبش أساعد حد على حل الواجب بتاعه لأن مقتنع ان الواحد المفروض هو اللي يتعب وتطلع عينه في التفكير في الحل والمحاولات الفاشلة حتى ينمو عنده الحس البرمجي، مش مهم انك توصل للحل بس الأهم هي انك تبذل قصارى جهدك في التفكير وتطلع محاولاتك.

فأنا كل اللي هعمله اني هقولك المطلوب بأسلوب مبسط وافتحلك سكك واديلك طرف الخيط اللي ممكن تحاول من عنده، وبعد كده تورينا محاولاتك وان شاء الله اساعدك على قدر المستطاع، بس أهم حاجة توريني أي محاولات من عندك.

المطلوب منك انك تعمل برنامج بياخد رقمين مفهومش علامات عشرية، بس المشكلة ان الأرقام ديه مينفعشي تتخزن في أي نوع من انواع الانتجر الموجودة في الجافا لأنها كبيرة جدا.

فالموضوع بسيط جدا انتا هتعمل انتا النوع داه باعتبارك شركة صن واكتشفت العيب الخطير داه ان مفيش أي نوع ممكن يستحمل الأعداد الكبيرة ديه فهتعمل النوع داه علشان تنزله في الإصدار الجديد بتاع الجافا.

فهتعمل كلاس جديدة وليكن اسمها LargInteger وممكن تاخد في الكونستراكتور بتاعها أرقام كبيرة جدا حتى لو بتتكون من 50 خانة، وجوه الكلاس ديه مجموعة من الميثودث بتخليك ممن تجمع أو تطرح أي رقمين من النوع الجديد داه وبرضه ممكن تقارن رقمين. يعني من الآخر عايزين حاجة زي كده:

LargInteger largInt1 = new LargInteger("13234567893256987");
LargInteger largInt2 = new LargInteger("27563667423626987");

String res1 = largInt1.add(largInt2);
String res2 = largInt1.substarct(largInt2);
boolean b = largInt1.comparison(largInt2);

وبكدة تبقى انتا فعلا عملت حاجة جديدة مش موجودة في الجافا.

نيجي بقا ازاي هتعمل الكلام داه ، فأنا مستني ردك الأول لأني خايف تكون دخلت المنتدى بس علشان تعرف إجابة السؤال ولما دخلت بعد ما حطيت السؤال بخمس دقائق وملقيتش حد عبرك قررت تنسى المنتدى.

#3

أهلين فيك اخوي المبرمج عمر ..

أولاً يعطيك العافية على توضيح الفكرة :)

ثانياً انا باخذ بكلامك وبحاول افهم البرنامج اكثر وطريقة حلّه ..

بس على قولتك ازاي نعمله .. ودي انك تعلمني وياليت نبدأ مع بعض .. ولا تفكرني من الاعضاء اللي اذا اخذ طلبه او حاجته ترك المنتدى ..

لاني مسجل من زمان معكم وقبل ايام فعّلت عضويتي

دمتـ

#4

طيب الأول أنا عايز أتأكد انك فهمت النقطة الأولى وهي ان كل أنواع الانتجر محدودة برقم معين فإحنا إذا كنا عايزين نعمل نوع جديد يقبل أرقام كبيرة جدا فنتعامل معاه كسترينج. بمعنى تاني :

int x = 2345678;

لنفترض ان داه أعلى رقم ممكن تحطه في الانتجر

BigInt x = 2837657648484848;

وداه أعلى رقم ممكن تحطه في ال BigInt وداه نوع معروف في الجافا.

طيب لو عايزين حاجة تاخد أرقام أكثر، هنا الجافا بتقف مبتعرفشي تعمل حاجة. فنتصرف ازاي هنتعامل معاه كسترينج

String x = "847389748927823732423423423422423423423423";

وبين علامات التنصيص ممكن تحط الأرقام اللي انتا عايزها

وعلشان كده أنا في الكونستركتور أخذت الرقم كسترينج

LargInteger largInt1 = new LargInteger("13234567893256987");

طيب إيه المشكلة، المشكلة ان داه solusion ناقص لأن احنا مش هنعرف نعمل التالي مثلا:

String x = "4";
String y = "3";

String res = x+y;

الناتج هيكون 43 مش هيكون 7 لأنهم الاسترينج لما بيتجمع بيتحط جنب بعض بس.

فانتا محتاج تكمل جميلك وتعمل ميثود بتجمع رقمين حتى لو كانوا على صورة استرينج وواحدة تانية بتطرحهم وواحدة تقارن ما بينهم وتعرف أنهي أكبر.

دلوقتي انتا المفروض تكون عملت الكلاس بتاعة LargInteger وفيها أربع حاجات

Constructor

4 Methods

الكونستراكتور هتعمله بياخد استرينج ويخزنه في Instance Variable

وبالمرة علشان نوفر في الوقت انتا المفروض درست Data Structure يعني تعرف تعمل singly-linked List كاملة بال implementation بتاعها كله

طيب أنا كده مستني منك 2 كلاس المرة الجاية واحدة اسمها LargInteger

وواحدة تانية للليسته وليكن اسمها (مش عارف أي اسم مناسب تختاره)

#5

ياريت تبقى تحط الكود اللي تعمله هنا وتحطه ككود علشان يكون واضح ومتنسق ونعرف نتكلم عليه

#6

بس تعقيب بسيط على كلام الأخ عمر

لو ما كنتيش أخدت مادة تراكيب بيانات ممكن تستخدم المصفوفات للبرنامج

يعني الأخ عمر هينتظر منك فئة واحدة على الأقل

بالتوفيق

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#7

شكرا يا alaadiaa على تعقيبك ويا ريت تكمل معانا المشوار للآخر أنا على فكرة أول ما فكرت فيها حاسس انها كفاية جدا مصفوفة ممكن تحل الموضوع، بس السطر داه في ال assignement هو اللي خلاني أقول Linked List

(d) A written statement explaining why you choose a particular storage structure (e.g. singly-linked, doubly-linked or circular structure) for the list
#8

السلام عليكم و رحمة الله و بركاته

انا رأي من الافضل ان نستخدم الstack بدل الlinked list و ذلك لان هذا يسهل اجراء العمليات على هذه الارقام الطويلة فعلى سبيل المثال نفرض هذين الرقمين:

LargInteger i =123456789;
LargInteger p=123456789;

فمن الطبيعي عندما نضيف الى الstack فاننا نضيف العنصر الاول رقم 1 الذي هو ذو الindex 0 ثم 2 تم 3 و هكذا فيكون أخر رقم يدخل هو 9 و لكن عند اجراء العمليات على الارقام كالجمع على سبيل المثال فاننا نبدا باخر رقم الذي له اقل وزن و هو 9 فلذا نحن بحاجة الى مبدأ First in last out و هذا طبعا ما تقدمه الstack.

طبعا قبل هذه النقطه نحن بحاجة الى تحويل الرقم الذي قمنا بتحويله الى string أن نحوله الى char array لكي يسهل التعامل معه من خلال الstack و ذلك من خلال الميثود toCharArray

String s="123456789123456789123456789123456789";
		char[] d=s.toCharArray();

تم تعديل هذه المشاركة بواسطة jfriend في 8 نوفمبر 2007 في 14:39

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…