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

تجميع الأرقام فى رقم واحد ثم إعادة فكها

بدأه DotNet-XML في 1 سبتمبر 2009 · 7 رد · 1,271 مشاهدة · في الرياضيات والخوارزميات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

مرحبا أخوانى

تواجهنى مشكلة برمجية صعبة

عندى مجموعة ارقام اريد ان ادمجها فى رقم واحد ثم عمل عملية على هذا الرقم لمعرفة الأرقام المدمجة

على سبيل المثال

1

2

3

4

لو إخترنا الجمع رقم 3 قد يمثل نفسه أو قد يمثل 1 + 2 و طبعا مع تزايد الأعدادا الموضوع هيصبح غير عملى

السؤال كيف أطبق دالة على هذة الأرقام لمعرفة الأرقام المختارة

أفكر فى التمثيل الثنائى Binary بس أعتقد الأرقام لازم تكون مرتبة

ملاحظة عدد الأرقام ممكن يصل الى 200 رقم

شكرا مقدما

كل عام و انتم بخير

#2

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

أخي العزيز عند طرحك لموضوع برمجي ... كن دقيق الكلام ..و غير غامض ..لتفادي فهم موضوعك بشكل خاطئ!

اقتباس
لو إخترنا الجمع رقم 3 قد يمثل نفسه أو قد يمثل 1 + 2 و طبعا مع تزايد الأعدادا الموضوع هيصبح غير عملى

هل العملية الحسابية التي أنتجت (الرقم الواحد الذي تريد تفكيكه)... هي وحيدة أم هناك عدة عمليات حسابية ؟

بمعنى الرقم ينتج من عمليات الجمع فقط أم يمكن أن تدخل عمليات أخرى بالاضافة الى عملية الجمع؟

#3

يمكنك عمل عملية دمج مبنيه على الضرب فى الرقم 10 بمعنى فالنفترض انك تريد جمع الأرقام من 1 إلى 5 ثم منهم معرفة عدد الأرقام المدمجه:

الرقم 1 سيتم وضعه فى خانة الأحاد لذا سيتم ضربه فى 10 مرفوعه للأس صفر = 1

الرقم 2 سيتم وضعه فى خانة العشرات لذا سيتم ضربه فى 10 مرفوعه للأس 1 = 20

الرقم 3 يضرب فى 10 مرفوعه للأس 2 = 300

الرقم 4 يضرب فى 10 مرفوعه للأس 3 = 4000

الرقم 5 يضرب فى 10 مرفوعه للأس 4 = 50000

عند جمع الأرقام السابقه سيكون لديك 54321 و لمعرفة عدد الأرقام التى دمجها قم بإستخدام الداله log بأساس 10 مع هذا الرقم و ستعود لك برقم كسرى قم بتقريبه إلى اقرب رقم صحيح بإستخدام الداله ceiling

int x = ceil( log10(54321) );

الرقم العائد هو عدد الأرقام المدمجه داخل هذا الرقم و هو 5.

و الله ولى التوفيق

تم تعديل هذه المشاركة بواسطة Muhammad alaa في 1 سبتمبر 2009 في 16:24

مدونتي: C++ Tips and Tricks

#4

أخوانى اشكركم كثيرا على تفاعلكم السريع

الأخ الكريم Devd لا يهم عملية واحدة أو مجموعة عمليات

المهم هو عند فك الرقم معرفة الأرقام التى أدمجت اصلا

اسف ان لم أكن واضحا فى المشاركة السابقة

الأخ الكريم محمد علاء الفكرة قريبة جدا من التمثيل الثنائى

لكن مع رفع العدد الذى ترتيبه 200 الى الأس 199 أعتقد إن الموضوع سوف يكون غير عملى

لأن عدد الأعداد سوف يتضخم حتى يصل الى 200 أو 250 عدد

أشكرك جدا أخى الكريم على ردك و فكرتك الرائعة ،

بس لز تسمحلى انا كنت متصور انه هيكون هناك معادلة أو تركيبة Formula ممكن توصلنى

الى المراد

أشكرك كثيرا أخى العزيز و جازاك الله كل خير

كل عام و انتم بخير أخوانى

#5

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

في البداية اخي محمد أعتقد أنك لم تفهم ما يطلبه الاخ DotNet-XML

اذا كان لديك الارقام :

101 , 7 , 1030 , 3 , 10 , 1024 ,4

وكان لديك الرقم المدمج 1037 ما هي حلول المسألة؟

الاحتمالات الكلية لدمج الارقام هي :wacko:

#6

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

افضل طريقة هى النظام الثنائى حيث اى عدد يمكن تمثيلة بطريقة واحدة فقط فى النظام الثنائى

#7

أعتقد أنك تبحث عن شيء مثل الـ Arithmetic coding

#8

مشكورين أخوانى على المساعدة

انا اعتقد ان أكبر مشاكلى حاليا هى عدد الأرقام الكبير جدا (200 رقم ) و الذى يصعب معه تمثيله بطريقة سهلة

قمت بحل المشكلة بطريقة بدائية (مؤقتا )

و هى تحويل الأرقام الى سلاسل حرفية ثم إعادة فكها و الفصل بينها بإستخدام علامة مميزة

مثل اذا تم أختيار الأرقام 1 و 5 و 12

تكون السلسلة الحرفية بالشكل

Concat.1.5.12

و عند إعادة الفك يقوم البرنامج بحزف كلمة Concat ثم وضع الأرقام فى مصفوفة

و لكن المشكلة هى بطئ هذة الطريقة مقارنة بالقيم الرقمية

شكر خاص لكل من ساعدنى

كل عام و حضراتكم بخير

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

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

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

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

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