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

افتتاح أكبر تجمع لعشاق لغتي السي و السي++ على منتديات الفريق العربي للبرمجة.

مغلقرائج
بدأه Snack3r في 25 يونيو 2010 · 322 رد · 21,470 مشاهدة · في اختبر قداراتك
مشاركة: واتساب X فيسبوك تيليجرام
#126

TheBigBiss, aohammed

تم إرسال رسائل لكلاكما..

#127

تم الرد

#128

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

شكرا جزيلا على هذه الفكرة الأكثر من رائعة

لقد أرسلت محاولتي للأخ هويدي

أتمنى للجميع التوفيق والنجاح

#129

أرسلت لك اليوم صباحا وبه خطأ بسيط وأرسلت لك الحل الصحيح قبل قليل :)

#130

تحذير هام..

بسبب مشكله ما عندي في صندوق واردي, من يريد أن يرسل لى رسالة أن يسألني أن أرسله له و يقوم هو بالرد على رسالتي بما يشاء

شكرا لحسن تعوانكم

#131

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

كنت اتمنى ان أشارك معكم في هذا اللغز الرائع :wub: خصوصا أنه من أجمل الألغاز التي طُرحت على الساحة إلى حد الآن :wink: و لكنني مشغول جدا هذه الأيام , فمازالت عندي عدة مشاريع لم أنته منها بعد .. مما يجعل من متابعة هذه المسابقة و إكمال المشاريع أمرا في غاية الصعوبة إن لم يكن مستحيل :wacko: لذلك سأنقطع عن هذه المسابقة ريثما أكمل المشاريع و من ثم أعود إليكم للمشاركة في المسابقة من جديد :wink:

من ناحية الإشراف على المسابقة فإني أطلب من أخي الغالي و الأستاذ المميز namespace أن يتولى الإشراف على هذه المسابقة و يكون بمثابة (صاحب الموضوع).

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

في أمان الله.

#132

ستكون لي زيارات خفيفة (بين الحين و الآخر) لهذا المنتدى الغالي.

دمتم في رعاية الله و حفظه.

#133

سنفتقدك اخى احمد

ربنا معاك و يعينك :)

00020309t.gif

1958_1963.gif
#134

رعاك الله و حفظك أملين أن نراك قريبا إن شاء الله...

في حفظ الله

#135

هلموا إلينا بحلولكم يا إخوه.......

لقد أرسل 4 أشخاص فقط إلى الأن حلولهم....

لاتذهدوا في مثل تلك المسائل.....

لم يتبقى من الزمن سوي أقل من يوم........

للتذكير, الإمتحان سينتهى الساعه 12 منتصف الليل (بتوقيت القاهره)

#136
اقتباس
لذلك سأنقطع عن هذه المسابقة ريثما أكمل المشاريع و من ثم أعود إليكم للمشاركة في المسابقة من جديد

الله يفتح عليك ويزيدك من علمه - وراسلني على الخاص إذا احتجت أي مساعدة

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

:thumb_up:

البرمجة = الرياضيات

#137

أخوي هويدي ماادري رسالتي وصلت لك ولا لأ

#138

لا لم تصل...

سأرسل لك رساله قم بالرد عليها ...

#139

TIME OUT

جاري التصحيح

#140

أأسف يا شباب على التأخير, ولكنه جاري التصحيح...

هؤلاء الأخوه الذي إستلمت أجاباتهم فقط:

  1. أبو دحيم
  2. aohammed
  3. TheBigBiss
  4. Robatic
  5. namespace

شكرا.....

تم تعديل هذه المشاركة بواسطة هويدي في 10 يوليو 2010 في 03:57

#141

نتائج الفرز الأول:

  1. الأخ namespace حله صحيح بارك الله فيه
  2. الأستاذ أبو الأخ أبو دحيم حله صحيح,,

كل من التالي أسمائهم قاموا بمحاولات جيده جدا, ولكن لم يوفقوا للوصول للإجابه الصحيحه و إن كانت إجاباتهم قاربت الصحه..

  1. الأخ دحيم
  2. aohammed
  3. TheBigBiss

بالنسبة الأخ Robatic

أنتظر منه الرد على إستفسار ما قبل الفصل في حله...

بالنسبة لحل الأستاذ namespace فحله قريب من حلى, يستخدمان نفس الفكره,, لذا لا داعى لشرح الطريقه ..

بالنسبة للأستاذ والد الأخ أبو دحيم, فرجاء أن يرسل بشرح لحله لكي يستفيد الأخوه منه (وعلى رأسهم أنا :D )

تم تعديل هذه المشاركة بواسطة هويدي في 10 يوليو 2010 في 05:50

#142

جاري مناقشة بعض النقاط مع الأعضاء المبجلين حول حلولهم,,, و من ثم سنعرض النتيجة النهائية للفايزين ...

#143

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

الأسماء التالي أسماؤهم هي من إشتركت في المسابقه:

  • namespace
  • أبو دحيم
  • والد "أبو دحيم" (عن طريق أبو دحيم)
  • aohammed
  • TheBigBiss
  • Robatic

الأتي أسماؤهم قامو بحل اللغز بنجاح :

namespace

والد "أبو دحيم"

و الباقي للأسف لم يقدم حل 100% صحيح و إن كانت حلولهم تقارب الصواب...

قدم كلا من الأستاذ namespace و أبو أبو دحيم حلولا لها نفس الفكره, و لكني أرى (و هذا رأى الشخصي و إن لم أكن خبيرا في c/c++) أن تطبيق الأستاذ أبو أبو دحيم كان أفضل ,,,, لذا

يشرفني أن أبو أبو دحيم هو الفائز في المسابقه

(تصفيق, هههههههههههههههههههه)

سأعرض حلين الأستاذ namespace , الأستاذ أبو أبو دحيم, و إنتظرو مني التعليق..

#144
اقتباس
يشرفني أن أبو أبو دحيم هو الفائز في المسابقه

مبروك ..........يا ابى(اعتبرنى اخت دحيم)

شىء جميل جداااااااااا :)

00020309t.gif

1958_1963.gif
#145

السلام عليكم

اقتباس
والد "أبو دحيم" (عن طريق أبو دحيم)

إلى الأخ أبو دحيم : هل أبوك مبرمج !؟

اقتباس
يشرفني أن أبو أبو دحيم هو الفائز في المسابقه

ما شاء الله .. شيء جميل جدا .. تكون الأسرة عبارة عن مجموعة من المبرمجين :wub: :wub:

أبارك لك أخي أبو دحيم على هذه النعمة الرئعة :cool:

اقتباس
يشرفني أن أبو أبو دحيم هو الفائز في المسابقه

:thumb_up: :thumb_up: :thumb_up:

اقتباس
تصفيق, هههههههههههههههههههه

:clapping: :clapping: :clapping:

#146

هذا هو حل أبو أبا دحيم

#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

#147

ألف مبروك لجد دحيم ( أو أبو 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

البرمجة = الرياضيات

#148
اقتباس
ذاك هو تفسير الجزء العلوي من الدوران ، تحويل من decimal إلى binary لكنه ضرب عصفورين بحجر ، كل قيمة كان يحصل عليها سواء 0 أو 1 كان يضربها بـ قوة القطعة المقابلة لتلك القيمة ويضيفها ، بمعنى أنها إما تضاف أو لا تضاف ( حسب 1 أو 0 )

نعم, ضربه عصفورين بحجر هذا ما أعجبني...

شكرا يا أستاذنا namespace على مشاركتك...

يا أبا دحيم, هلا تقنع والدك بالتسجيل معنا و المشاركه بنفسه :D

#149

بالنسبة لى, فقد قمت بالتحويل من 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 )

شكرا لكم جميعا,,, و حقيقه, أنا من أكثر الناس المستفيده هنا......

#150

شكرا لكم جميعا إخواني :)

بالنسبة للغز إنتظروني غدا بإذن الله فلدي لغز لكني حاليا أقوم بحله :)

سأحاول الإنتهاء منه هذه الليلة أو غدا وبعده سأضعه :)

كونوا بإنتظاري :)

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

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

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

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

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

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