TheBigBiss, aohammed
تم إرسال رسائل لكلاكما..
TheBigBiss, aohammed
تم إرسال رسائل لكلاكما..
تم الرد
السلام عليكم ورحمة الله وبركاته
شكرا جزيلا على هذه الفكرة الأكثر من رائعة
لقد أرسلت محاولتي للأخ هويدي
أتمنى للجميع التوفيق والنجاح
أرسلت لك اليوم صباحا وبه خطأ بسيط وأرسلت لك الحل الصحيح قبل قليل :)
تحذير هام..
بسبب مشكله ما عندي في صندوق واردي, من يريد أن يرسل لى رسالة أن يسألني أن أرسله له و يقوم هو بالرد على رسالتي بما يشاء
شكرا لحسن تعوانكم
السلام عليكم و رحمة الله و بركاته
كنت اتمنى ان أشارك معكم في هذا اللغز الرائع :wub: خصوصا أنه من أجمل الألغاز التي طُرحت على الساحة إلى حد الآن :wink: و لكنني مشغول جدا هذه الأيام , فمازالت عندي عدة مشاريع لم أنته منها بعد .. مما يجعل من متابعة هذه المسابقة و إكمال المشاريع أمرا في غاية الصعوبة إن لم يكن مستحيل :wacko: لذلك سأنقطع عن هذه المسابقة ريثما أكمل المشاريع و من ثم أعود إليكم للمشاركة في المسابقة من جديد :wink:
من ناحية الإشراف على المسابقة فإني أطلب من أخي الغالي و الأستاذ المميز namespace أن يتولى الإشراف على هذه المسابقة و يكون بمثابة (صاحب الموضوع).
و أخيرا فإنني أشكر جميع المشاركين على إنعاش هذا الموضوع و أرجو لهم المزيد من التوفيق و النجاح و السداد.
في أمان الله.
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
ستكون لي زيارات خفيفة (بين الحين و الآخر) لهذا المنتدى الغالي.
دمتم في رعاية الله و حفظه.
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
رعاك الله و حفظك أملين أن نراك قريبا إن شاء الله...
في حفظ الله
هلموا إلينا بحلولكم يا إخوه.......
لقد أرسل 4 أشخاص فقط إلى الأن حلولهم....
لاتذهدوا في مثل تلك المسائل.....
لم يتبقى من الزمن سوي أقل من يوم........
للتذكير, الإمتحان سينتهى الساعه 12 منتصف الليل (بتوقيت القاهره)
اقتباسلذلك سأنقطع عن هذه المسابقة ريثما أكمل المشاريع و من ثم أعود إليكم للمشاركة في المسابقة من جديد
الله يفتح عليك ويزيدك من علمه - وراسلني على الخاص إذا احتجت أي مساعدة
أشكر ثقتك بالنسبة للإشراف على الموضوع ، ولا توصي حريص ، سأبقى متابعاً بإذن الله . .
:thumb_up:
البرمجة = الرياضيات
أخوي هويدي ماادري رسالتي وصلت لك ولا لأ
لا لم تصل...
سأرسل لك رساله قم بالرد عليها ...
TIME OUT
جاري التصحيح
أأسف يا شباب على التأخير, ولكنه جاري التصحيح...
هؤلاء الأخوه الذي إستلمت أجاباتهم فقط:
شكرا.....
تم تعديل هذه المشاركة بواسطة هويدي في 10 يوليو 2010 في 03:57
نتائج الفرز الأول:
كل من التالي أسمائهم قاموا بمحاولات جيده جدا, ولكن لم يوفقوا للوصول للإجابه الصحيحه و إن كانت إجاباتهم قاربت الصحه..
بالنسبة الأخ Robatic
أنتظر منه الرد على إستفسار ما قبل الفصل في حله...
بالنسبة لحل الأستاذ namespace فحله قريب من حلى, يستخدمان نفس الفكره,, لذا لا داعى لشرح الطريقه ..
بالنسبة للأستاذ والد الأخ أبو دحيم, فرجاء أن يرسل بشرح لحله لكي يستفيد الأخوه منه (وعلى رأسهم أنا :D )
تم تعديل هذه المشاركة بواسطة هويدي في 10 يوليو 2010 في 05:50
جاري مناقشة بعض النقاط مع الأعضاء المبجلين حول حلولهم,,, و من ثم سنعرض النتيجة النهائية للفايزين ...
يسعدني و يشرفني أن أعلن نتيجة المسابقه......
الأسماء التالي أسماؤهم هي من إشتركت في المسابقه:
الأتي أسماؤهم قامو بحل اللغز بنجاح :
namespace
والد "أبو دحيم"
و الباقي للأسف لم يقدم حل 100% صحيح و إن كانت حلولهم تقارب الصواب...
قدم كلا من الأستاذ namespace و أبو أبو دحيم حلولا لها نفس الفكره, و لكني أرى (و هذا رأى الشخصي و إن لم أكن خبيرا في c/c++) أن تطبيق الأستاذ أبو أبو دحيم كان أفضل ,,,, لذا
يشرفني أن أبو أبو دحيم هو الفائز في المسابقه
(تصفيق, هههههههههههههههههههه)
سأعرض حلين الأستاذ namespace , الأستاذ أبو أبو دحيم, و إنتظرو مني التعليق..
اقتباسيشرفني أن أبو أبو دحيم هو الفائز في المسابقه
مبروك ..........يا ابى(اعتبرنى اخت دحيم)
شىء جميل جداااااااااا :)


السلام عليكم
اقتباسوالد "أبو دحيم" (عن طريق أبو دحيم)
إلى الأخ أبو دحيم : هل أبوك مبرمج !؟
اقتباسيشرفني أن أبو أبو دحيم هو الفائز في المسابقه
ما شاء الله .. شيء جميل جدا .. تكون الأسرة عبارة عن مجموعة من المبرمجين :wub: :wub:
أبارك لك أخي أبو دحيم على هذه النعمة الرئعة :cool:
اقتباسيشرفني أن أبو أبو دحيم هو الفائز في المسابقه
:thumb_up: :thumb_up: :thumb_up:
اقتباستصفيق, هههههههههههههههههههه
:clapping: :clapping: :clapping:
هذا هو حل أبو أبا دحيم
#include<stdio.h>
#include<iostream>
using namespace std;
int f[16],m[16],i,ind,part_250,part_150,part_120,part_200,force,mass;
float maxn=0.0,a[16];
int main() {
for (i=0;i<=15;i++) {
f=f+i%2*250;
m=m+i%2*25;
f=f+int(i/2)%2*150;
m=m+int(i/2)%2*9;
f=f+int(i/4)%2*120;
m=m+int(i/4)%2*5;
f=f+int(i/8)%2*200;
m=m+int(i/8)%2*8;
f=f+1500;
m=m+100;
a=float(f)/float(m);
if (maxn<a){
maxn=a;
part_250=i%2;
part_150=int(i/2)%2;
part_120=int(i/4)%2;
part_200=int(i/8)%2;
force=f;
mass=m;
}
}
cout<<part_250<<" Part_250\n";
cout<<part_150<<" Part_150\n";
cout<<part_120<<" Part_120\n";
cout<<part_200<<" Part_200\n";
cout<<" With Force of "<<force <<" ";
cout<<" and Mass of "<<mass<< " \n";
cout<<"Will give max accelration of "<<maxn <<" \n";
return 0;
}و هذا هو حل namespace :
#include<iostream>
using namespace std;
bool BIN[4]={false};
bool Best[4]={false};
// Sets all elements in BIN to false
void resetBIN()
{
for(int i=0 ; i<4 ; i++)
BIN=false;
}
// Copies BIN to Best when new acceleration > max_A
void cpy(bool a[],bool b[])
{
for(int i=0 ; i<4 ; i++)
a=b;
}
// Converts from DEC to BIN
void DECtoBIN(int d)
{
for(int i=3 ; i>=0 ; i--)
{
BIN=(d%2 ? true : false);
d=d/2;
}
}
int main()
{
// Initializing arrays
int F[4]={10,11,10,13};
int M[4]={1,1,1,1};
float max_A=10.0; // 10/1
int Mass=0,Force=0;
for(int i=0 ; i<16 ; i++,Force=0,Mass=0)
{
// To guarantee all possible permutations
DECtoBIN(i);
for(int k=0 ; k<4 ; k++)
if(BIN[k])
{
Force+=F[k];
Mass+=M[k];
}
float new_A=(float)(Force+10)/(Mass+1);
if(new_A > max_A)
{
// Set a new value for max_A
max_A=new_A;
cpy(Best,BIN);
}
resetBIN(); // To be 0000
}
// Print results
cout<<"\nParts To Be Bought Are : ";
for(int p=0;p<4;p++)
if(Bestبسم الله الرحمن الرحيم)
cout<<p+1<<" ";
cout<<"\n\nMax Acceleration Will Be : "<<max_A<<"\n\n";
return 0;
}وهذا هو حلى أنا...
// race_problem.c
//
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define PART_NUMBERS 4
typedef struct{
double force, mass;
}Part;
void init_parts(Part[]);
char* get_bits_array(unsigned);
int main(void){
const unsigned combinations = (int)(pow(2, PART_NUMBERS)); // all possible cominations
Part parts[5];
double max_accel=0;
char *location;
unsigned int i; // looping var
// first fill the parts with data
init_parts(parts);
// loop 16 time, 4^2, to calc the acceleration for each row
for (i=0; i<combinations ; i++){
char *bits;
double accel=0, accel_f=parts[0].force, accel_m=parts[0].mass;
int j;
bits = get_bits_array(i);
// for each row, get the bit pattern of the number
for (j=1; j<=PART_NUMBERS; j++){
// if the bit > 0, then calc
if ((int)*bits++){
accel_f += parts[j].force;
accel_m += parts[j].mass;
}
}
accel = accel_f/ accel_m;
// get max
if (accel > max_accel){
max_accel = accel;
location = bits-(PART_NUMBERS+1); // get the location of max acceleration
}
}
printf("%f \n", max_accel);
for (i=1; i<=PART_NUMBERS; i++){
if (location){
printf("Part #: %i where force=%f, mass=%f\n", i, parts.force, parts.mass);
}
}
return 0;
}
/*
* init from file, stdin, or whatever
*/
void init_parts(Part parts[]){
FILE * file;
char buff[1024]; int i;
if ((file=fopen("data.txt", "r")) == NULL){
perror (NULL);
exit(-1);
}
i =0;
while (fgets(buff, sizeof(buff), file)){ // read until 0 (NULL) (i.e. EOF)
sscanf(buff, "%i %lf %lf", &i, &parts.force, &parts.mass);
i++;
}
fclose(file);
}
/*
* return bit string representing the unsined parameter
*/
char* get_bits_array(unsigned x){
char *bits = malloc(sizeof(int*)*PART_NUMBERS);
char *ptr = bits;
ptr +=3;
while (x > 0){
char t;
t = x &1;
x = x >>1;
*ptr--=t;
}
while ( ptr - bits >= 0){
*ptr--=0;
}
return bits;
}إذن الفكره أنه عندنا أربع قطع, كل قطعه قد تستخدم أو لا تستخدم, وبالتالي عدنا 16 إحتمال, إليس كذلك؟؟ (2^4=16)
part1 part2 part3 part4 solution #1 0 0 0 0 #2 1 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 1 0 1 0 0 1 1 0 1 1 1 0 0 0 0 1 1 0 0 1 0 1 0 1 1 1 0 1 0 0 1 1 1 0 1 1 0 1 1 1 #n 1 1 1 1
و بالتالي كل حل من الحلول الثلاثه السابقة يقوم بإختبار هذه الحلول من 1 إلى n (أي 16 في هذه الحالة), و الحل الذي سيعطي أكبر عجلة, هو الحل الفائز..
هذه هي كل الفكره,,,,,,,,,,
أرجو من الأخوه الذين لم يوفقوا في حل هذه المسألة أن يحاولوا حلها ثانيه بعدما عرفوا الفكره, و أن يعرضوها هنا..
وكما هو واضح, حل الأستاذ namespace صحيح 100% و لكن حل أبو أبا دحيم أعجبني أكثر :D
و مره أخري مبارك لأبو أبا دحيم , وننتظر السؤال القادم منها ........................
تم تعديل هذه المشاركة بواسطة هويدي في 12 يوليو 2010 في 14:36
ألف مبروك لجد دحيم ( أو أبو 2 دحيم )
قلت في البداية :
اقتباسعلى فكرة حتى لو فزت ما رح أضع اللغز الجديد
يعني أخونا فائز في كل الأحوال
لكن أنا كتبت الحل بسرعة ولم يكن هناك وقت للتفنن
يبدو أن أخانا يتقن Digital Design وكتب الحل بناءاً على فكرة العدادات counters
لاحظوا معي التالي :
أنا قمت بالتحويل من decimal إلى binary من خلال اقتران ، ولزم لذلك مصفوفتان BIN و Best الأخيرة تحوي أفضل اختيار للقطع ، ويتم تحديثها باستمرار كلما حصلنا على اختيار أفضل
أخونا قام بنفس الشيء لكن استفاد من فكرة العدادات counters مما جعله يختصر الكود الشيء الكثير ، القيم الثنائية 0 1 هنا هي integers وليست boolean ليتسنى له ضربها بالقوة وجمعها للقيمة السابقة ، فإن كانت تلك القيمة 0 فهذا يعني أن القطعة لن تؤخذ بالحسبان عند حساب Acceleration بعد إضافة القطع ، وإن كانت 1 فتحسب ، قبل أن يتم مقارنة الناتج بـ maxn وتحديث قيمتها إن كان الناتج أكبر .
كيف تم التحويل من Decimal إلى Binary ?
0 0 0 0 | 0 0 0 0 1 | 1 0 0 1 0 | 2 0 0 1 1 | 3 0 1 0 0 | 4 0 1 0 1 | 5 0 1 1 0 | 6 0 1 1 1 | 7 1 0 0 0 | 8 1 0 0 1 | 9 1 0 1 0 | 10 1 0 1 1 | 11 1 1 0 0 | 12 1 1 0 1 | 13 1 1 1 0 | 14 1 1 1 1 | 15
ألق نظرة على العمود الأيمن ( على يسار الخط العمودي ) ، لاحظ أنه يحوي قيماً مرة 0 ومرة 1 ، ما معنى ذلك ؟ معناه أن أي عدد يقبل القسمة على 2 فيجب أن يكون على يمينه 0 عند تحويله إلى binary، والأعداد الفردية على يمينها 1
العمود الذي يليه ، مرتين 0 ومرتين 1 ، هذا يعني أن أي عدد بعد قسمته على 2 يقبل القسمة على 2 ، فيجب أن تكون الخانة التالية 0 ، وإلا 1
العمود الذي يليه ، 4 مرات 0 و 4 مرات 1 ، هذا يعني أن أي عدد بعد قسمته على 4 يقبل القسمة على 2 ، فيجب أن تكون الخانة التالية 0 ، وإلا 1
العمود الذي يليه ، 8 مرات 0 و 8 مرات 1 ، هذا يعني أن أي عدد بعد قسمته على 8 يقبل القسمة على 2 ، فيجب أن تكون الخانة التالية 0 ، وإلا 1
مثال : خذ العدد 5
باقي قسمته على 2 يساوي 1 إذن على يمينه 1
2 = 2 / 5 ، و باقي قسمة 2 على 2 يساوي 0
1 = 4 / 5 ، و باقي قسمة 1 على 2 يساوي 1
0 = 8 / 5 ، و باقي قسمة 0 على 2 يساوي 0
إذن ناتج التحويل 1 0 1 0 ، مجموع قوى القطتين الأولى والثالثة ستكون في الموقع f f ومجموع كتلهما في m m يتم قسمة الأولى على الثانية والمقارنة بـ maxn ثم التحديث على أساسه إن لزم . تابع حتى نهاية الدوران إلى 15
ذاك هو تفسير الجزء العلوي من الدوران ، تحويل من decimal إلى binary لكنه ضرب عصفورين بحجر ، كل قيمة كان يحصل عليها سواء 0 أو 1 كان يضربها بـ قوة القطعة المقابلة لتلك القيمة ويضيفها ، بمعنى أنها إما تضاف أو لا تضاف ( حسب 1 أو 0 )
إذا تحقق الشرط كما ذكرنا سابقاً لزم التحديث على قيم part_ بحيث تأخذ 0 أو 1 بالطريقة نفسها التي مرت معك قبل قليل .
طريقة جميلة يستحق الفوز عليها .
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
لكن اسمح لي أن أتصرف بالكود الشيء اليسير :
#include<iostream>
using namespace std;
int i,ind,part_250,part_150,part_120,part_200,force,mass;
int f=0,m=0;
float maxn=0.0,a;
int main() {
for (i=0 ; i<=15 ; i++,f=m=0) {
f = f + i%2*250;
m = m + i%2*25;
f = f + (i/2)%2*150;
m = m + (i/2)%2*9;
f = f + (i/4)%2*120;
m = m + (i/4)%2*5;
f = f + (i/8)%2*200;
m = m + (i/8)%2*8;
f = f + 1500;
m = m + 100;
a=(float)f/m;
if (maxn<a){
maxn = a;
part_250 = i%2;
part_150 = (i/2)%2;
part_120 = (i/4)%2;
part_200 = (i/8)%2;
force=f;
mass=m;
}
}
cout<<part_250<<" Part_250\n";
cout<<part_150<<" Part_150\n";
cout<<part_120<<" Part_120\n";
cout<<part_200<<" Part_200\n";
cout<<"\nWith Force of "<<force <<" ";
cout<<"and Mass of "<<mass<<" \n";
cout<<"Will give max acceleration of "<<maxn <<" \n";
return 0;
}فقط قمت بتعريف f , a , m على أنها متغيرات عادية وليس مصفوفات كل واحدة بـ 16 عنصر
لا تخف - الكود لا يزال شغال والأمور تمام :lol:
أنتظر لغزك الجديد بفارغ الصبر
تحياتي
تم تعديل هذه المشاركة بواسطة namespace في 12 يوليو 2010 في 16:14
البرمجة = الرياضيات
اقتباسذاك هو تفسير الجزء العلوي من الدوران ، تحويل من decimal إلى binary لكنه ضرب عصفورين بحجر ، كل قيمة كان يحصل عليها سواء 0 أو 1 كان يضربها بـ قوة القطعة المقابلة لتلك القيمة ويضيفها ، بمعنى أنها إما تضاف أو لا تضاف ( حسب 1 أو 0 )
نعم, ضربه عصفورين بحجر هذا ما أعجبني...
شكرا يا أستاذنا namespace على مشاركتك...
يا أبا دحيم, هلا تقنع والدك بالتسجيل معنا و المشاركه بنفسه :D
بالنسبة لى, فقد قمت بالتحويل من decimal ل binary بإستخدام هذه الدالة:
char* get_bits_array(unsigned x){
char *bits = malloc(sizeof(int*)*PART_NUMBERS);
char *ptr = bits;
ptr +=3;
while (x > 0){
char t;
t = x &1;
x = x >>1;
*ptr--=t;
}
while ( ptr - bits >= 0){
*ptr--=0;
}
return bits;
}و هو تدور حول,,
t = x &1;
x = x >>1;فأنا أخذ كل bit من اليمين, و أري هل هو 1, أم صفر عن طريق عمل AND مع 1, فلو 1, فناتج هذه العمليه سيكون 1, و إلا, فالناتج صفر...
ثم أقوم برمي هذا ال bit و فحص ال bit الذي يليه,,,
و نلاحظ أن هذه العمليه تتم من اليمين لليسار, لذا يجب علينا عكس هذه ال bit :
while ( ptr - bits >= 0){
*ptr--=0;
}سؤال يا أخ حمزه (namespace سابقا :D)
أظن أن الطريقه التي أستخدمتها أنها تستخدم عمليات bitwise , و أظن هذا أفضل,, أليس كذلك؟ هلا من فضلك وضحت لنا الفرق بين الطريقتين في الأداء و السرعه و إستهلاك الذاكره و خلافه, فكنا تعلم أنا مازلت مبتدأ في هذه اللغه الجميله التي تدعى C .
كما أظن أنه من عيوب الطريقة التي إستخدمتها أنا هي إستهلاك 8 bit لتخزين 0 أو 1 (حسب معرفتي فإن ال C لايوجد بها bool حقيقي يخزن في 1 bit )
شكرا لكم جميعا,,, و حقيقه, أنا من أكثر الناس المستفيده هنا......
شكرا لكم جميعا إخواني :)
بالنسبة للغز إنتظروني غدا بإذن الله فلدي لغز لكني حاليا أقوم بحله :)
سأحاول الإنتهاء منه هذه الليلة أو غدا وبعده سأضعه :)
كونوا بإنتظاري :)
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…