تعالو نقترح الحلول للاحجيات(الالغاز) البرمجيه المطروحه


(غــلا) #1

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

اتمنى ان تنال الفكره على اعجابكم
وانا غدا سأبدأ بوضع الاحجيه الاولى
تحياتى للجميع

(غــلا) #2

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

لا اعلم هل لاقى الموضوع القبول او لا
لكن
ساقدم الاحجيه على امل ان كل عضو يفيد ويستفيد
اللغز او احجيه الاسبوع

لغز برمجي بسيييييييييييط يقيس مدى فهمك في البرمجة

كيف نستطيع نبدل محتويات متغيرين بدون استخدام متغير وسيط

مثلا
x=4
y=2

كيف نستطيع ان نجعل

x=2
y=4

الطريقة المعروفة هي ان نستخدم متغير وسيط كالتالي


[CENTER][COLOR=purple][B]x=4[/b][/color]
[COLOR=purple][B]y=2[/b][/color]
[COLOR=purple][B]tmp=y[/b][/color]
[COLOR=purple][B]y=x[/b][/color]
[COLOR=purple][B]x=tmp[/b][/color][/center]
 

انا اريد طريقة غير هذي الطريقه كيف؟؟؟؟


(غــلا) #3

السلام عليكم ورحمه الله وبركاته
الحل بنسخه لكم
وبما انه ماحدى تحمس للفكره خلص حنوقف
الحل هو:-
الاول:
x=4 & y=2

x = x + y

y= x - y

x = x - y
تطبيق الحل بمثال
x=4 & y=2

x = x + y = 6

y= x - y = 6 - 2 = 4

x = x - y = 6 - 4 = 2

و صاااااااااااااااااااار

x=2 & y=4
الثانى:
x=x * y

y=x / y

x= x / y

وبالامثله

x=6 & y=5

x=x * y = 6 * 5 = 30
y=x /y = 30 /5 = 6 … y=6
x= x /y = 30 / 6= 5 … x=5
الحل الثالث:
push x
push y
pop x
pop y
يعنى لو فرضنا
x=5
y=10
ودخلناها فى ال Stack
x ثم y
بعدين نخرج x فتصبح هيه قيمه y
x=10بعدين نخرج y فتصبح
y=5
والسلام عليكم ورحمه الله وبركاته[COLOR=purple]

[/color]

(عبد العزيز غالب) #4

شيء رائع خطرت على بالي الطريق الثانيه

بالمناسبه يمكن التبدير بين الاشارت والمتغيرات

يعني بدل من

[CENTER][B][SIZE=4][COLOR=#800080]x=x * y

y=x / y
x= x / y [/center]
[/color][/size][/b]
يمكن ان تكون

[B][SIZE=4][COLOR=#800080]x=y* x

[/color][/size][/b][CENTER]y=y/ x

x= y /x

ومنتظرين للاحجيه القادمه
واتمنى تثبيت الموضوع[/center]


(غــلا) #5

اهلين اخوى عبد العزيز
اسعدنى ردك جدا
وسنبدأ مجدداً من يوم الجمعه
واتمنى بقيه الاعضاء يتفاعلون
ويشاركونا بافكارهم

(عبد العزيز غالب) #6

[CENTER]-----------------
vemos en O antes del Viernes

لنا عوده ان شاء الله

[/center]


(عبد العزيز غالب) #7

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

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

السوال يقول
لديك رقم معين 99.99 كيف تستطيع ان تستخرج عدد العشرات فيه ثم عدد الخمسات المتبقيه ثم عدد الواحداتالمتبقيه ثم عدد الانصاف المتبقيه ثم عدد الارباع المتبقيه ثم عدد العشر واخيرا عدد ال 0.01 المتبقي

مثلا العدد فيه
9 عشرات 90
1 خمسه 5
4 واحدات 4
1 نصف 0.5
1 ربع 0.25
2 اعشار 0.2
4 سنتات 0.04

مجموعهن 99.99

تحياتي


(عبد العزيز غالب) #8

hi all

الفكره مش واضحه ولا اللغز مش في محله ولا الموضوع مش مؤهل

على اي حال انا ممكن انزل الاجابه اي وقت لكن با اترك فرصه لأي واحد عنده انشييتف للمحاوله

all the best


(غــلا) #9

الفكره اعتقد واضحه
بس السؤال بيظل اسبوع كامل
ويوم الجمعه صاحب السؤال بينزل الحل اذا محدا حله
بقى على الاسبوع يوم
ان شاء الله يكون فيه تجاوب مع الموضوع
اتمنى الجميع يشارك
تحياتى

(غــلا) #10

فكرت بالسؤال

وكتبت كود بالماتلاب
الكود:

 
 
 
[LEFT][B][SIZE=4][COLOR=black]in=input('ENTER THE NUMBER: ');[/color][/size][/b]
[B][SIZE=4][COLOR=black]nn=in;[/color][/size][/b]
[B][SIZE=4][COLOR=black]a=[10 5 1 0.50 0.25 0.2 0.04];[/color][/size][/b]
[B][SIZE=4][COLOR=black][m,n]=size(a);[/color][/size][/b]
[B][SIZE=4][COLOR=black]a1=[ ];[/color][/size][/b]
[B][SIZE=4][COLOR=black]for i=1:n[/color][/size][/b]
[B][SIZE=4][COLOR=black]i[/color][/size][/b]
[B][SIZE=4][COLOR=black]if in>a(i) [/color][/size][/b]
[B][SIZE=4][COLOR=black]e1=in/a(i);[/color][/size][/b]
[B][SIZE=4][COLOR=black]e2=fix(e1);[/color][/size][/b]
[B][SIZE=4][COLOR=black]e3=e2*a(i);[/color][/size][/b]
[B][SIZE=4][COLOR=black] in=in-e3;[/color][/size][/b]
[B][SIZE=4][COLOR=black]a1(i)=e2;[/color][/size][/b]
[B][SIZE=4][COLOR=black]elseif in==a(i)[/color][/size][/b]
[B][SIZE=4][COLOR=black]      e2=1;[/color][/size][/b]
[B][SIZE=4][COLOR=black]      e3=e2*a(i);[/color][/size][/b]
[B][SIZE=4][COLOR=black]     in=in-e3;[/color][/size][/b]
[B][SIZE=4][COLOR=black]     a1(i)=e2;[/color][/size][/b]
[B][SIZE=4][COLOR=black]else[/color][/size][/b]
[B][SIZE=4][COLOR=black]a1(i)=0.00    [/color][/size][/b]
[B][SIZE=4][COLOR=black]end[/color][/size][/b]
[B][SIZE=4][COLOR=black]end[/color][/size][/b]
[B][SIZE=4][COLOR=black]p=a.*a1;[/color][/size][/b]
[B][SIZE=4][COLOR=black]num=sum(p);[/color][/size][/b]
[B][SIZE=4][COLOR=black]a1[/color][/size][/b]
[B][SIZE=4][COLOR=black]in[/color][/size][/b]
[B][SIZE=4][COLOR=black]p[/color][/size][/b]
[B][SIZE=4][COLOR=black]num[/color][/size][/b]
[B][SIZE=4][COLOR=black]nn=nn-num[/color][/size][/b][/left]
 
 
 

شرح الكود:
1-السطر الاول لادخال قيمه من المستخدم ونخزنها فى المتغير in
2-اخزن نفس القيمه المدخله من قبل المستخدم فى متغير اخر اسمه nn
3-اعرف مصفوفه واخزن فيها القيم المراد معرفه عدد تكرارها فى الرقم المدخل من قبل المستخدم
4-احسب ابعاد المصفوف aوهى صف واحد وسبع اعمده فتكون mصفوف n اعمده
5-انشئ مصفوفه فارغه اسمها a1
6-استخدم for لتمر على جميع عناصر المصفوفه aمن الدليل 1 الى الدليل 7 وايضا تقوم بالتخزين فى المصفوفه a1(i)
7-لطباعه i
8-استخدمت if لتختبر هل العنصر الموجود فى المصفوفه aوالموقع i اكبر من االرقم in
9-قسمت in(وهو الرقم المدخل ) على العنصر فى المصفوفه a
10-fixتقوم باخذ الرقم الصحيح من العدد وتخزينه فى e2
11-ضرب العدد الصحيحe2 والذى يمثل تكرار الرقم الذى فى المصفوفه a
بالعنصر الموجود فى a وذلك لطرحه من الرفم المدخل
12- طرح الرقم المدخل من حاصل الضرب حتى نحسب تكرار بقيه ارقام المصفوفه a ويخزن فى in
13-نخزن فى المصفوفه a1 قيمه تكرار الرقم
وهكذا
14-لاختبار الرقم المدخل من قبل المستقبل او باقى الرقم الذى تم طرحه(in) هل يساوى a(i)
15-بما ان الرقمين متساوين فلبنتيجه ستكون واحد فخزنت فى المتغير e2 الرقم 1
16-نضرب مثل الخطوره رقم 11
17-مثل 12
18- مثل الخطوه رقم 13 وهى لتخزين
19-اذا in لا تساوى a(i) ولا اكبر منها (اى انها اصغر)
20-اخزن فى الصفوفه a1 الرقم 0
21-end لنهايه if
22-end لنهايه for
23-ضرب المصفوفتين لينتج مصفوفه مكونه من الرقم *تكراره
24-نجمع عناصر المصفوفه لتكون مساويه للرقم المدخل من قبل للمستخدم
25-26-27-28 جميعها لطباعه
29- لطباعه لانه لم نضع فاصله منقوطه وايضا لحساب معامل الخطأ للبرنامج
اذا كانت بصفر فالبرنامج قسم الرقم كله
اما اذا كانت لاتساوى الصفر فرقم لم يقسم كله
التطبيق للبرنامج
الرقم المدخل 110.5

ان شاء الله الشرح يكون وافى
والحل منطقى

(عبد العزيز غالب) #11

شي جميل مشكوره على المحاوله الرائعه وهذا حل اخر للغات البرمجه الاخرى كالجافا وغيرها


 
double a,ten,five,one,quarter,dimes,nickles,pennies;

ten= (int)a/10;
five= (int) (a-(ten*10))/5;
one= (int) (a-(ten*10)-(five*5));
quarter= (int)((a-(int)a)*4);
dimes= (int)((a-(int)a)*10/4);
pennies = (int)((a-(int)a)*100)-quarter*25 -dimes*10;
 
 

وبعدها تتم عمليه الطباعه

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


(غــلا) #12

كنت اتوقع انه هذا الموضوع يكون فيه تفاعل من الاعضاء
ويكون فيه فائده للعضو المشارك وقارئ الموضوع
ولكن
لم يحصل الموضوع على المشاركه المتوقعه
لا اعلم ما السبب لكن فى تصورى ان المبرمج عندما تخطر على باله فكره او يسمعها او يقرأها و يحس بقدرته على عملها
فيبدأ بتحليل المسأله وفرض المتغيرات و وضع سيناريو لحلها
ثم يبدأ بتنفيذ مخططه ويمن عليه الله بتطبيقها وظهور نتائج صحيحه
اتصور فرحه وارتفاع معنوياته
هذا ما اشعر به مع كل برنامج حتى لو الفكره بسيطه
وهنا الافكار ستكون جديده(غير المعتاده) او بسيطه او متوسطه وليست على نمط واحد
ومن اكثر من عضو
من سيحل اولا ويكون حله صحيح هو من يعطى الاحجيه القادمه
كان هذا الرد لتوضيح لى ولكم
هل من مشكله فى الموضوع ام …

واشكر المشرف عبد العزيز على مشاركته وننتظر شرح الكود حتى يستفيد القارئ