لقد بدأت اليوم في الحل,,, لكن لي سؤال..
ماذا لو تم جمع الرقم 999999 إلى 40 خانه + الرقم 99999 إلى أربعين خانه,,, الناتج سيكون
19999999999999999999999999999999999999998
الذي هو 41 خانه, هل هذا مقبول؟؟
لقد بدأت اليوم في الحل,,, لكن لي سؤال..
ماذا لو تم جمع الرقم 999999 إلى 40 خانه + الرقم 99999 إلى أربعين خانه,,, الناتج سيكون
19999999999999999999999999999999999999998
الذي هو 41 خانه, هل هذا مقبول؟؟
محمد علاء الدين كتب:أريد أن اشارك معكم فى حل هذا اللغز و لكن لدى بعض الإستفسارات عنه:
1 - لماذا 40 خانه بالتحديد؟
2 - لماذا كل خانه تحتوى فقط على الأرقام من 0 و حتى 9؟
بهذا الإسلوب سنحتاج لكتابة كود اكبر مما كنا سنكتبه إذا اردنا عمل Arbitrary-precision integer حقيقى :wink: و ذلك للتحقق من overflow و underflow و خلافه!!
أخ أبو دحيم، هل يمكننى المشاركه دون التقيد بالشرطين محور السؤالين السابقين؟
و الله ولي التوفيق
أهلا بك أخي :)
آسف على التأخر بالرد
لم أفهم قصدك بالضبط أخي الكريم ؟؟
بالنسبة لماذا 40 خانة ليس هنالك سبب بل وضعت هكذا ولكي نبعد بشكل لا بأس به عن أقصى حجم تتحمله اللغه ( 4 byte for int type) أي ليس هنالك سبب لإختيار هذا العدد إن كان لديك شيئ تريد الإستفسار عنه بالضبط تفض واسئل فأنا لم أفهم ما المغزى من سؤالك أشعر أن لديك شيئا ما خلفه يحتاج للتوضيح :)
بالنسبة لماذا كل خانة من 0 وحتى 9 لأن هذا حد الرقم العشري ووضعتها كتنبيه وليس شرط للسؤال فإن كان لديك حلا آخر يحتاج أن تستعمل شيئا غير ذلك لا بأس كما تريد
بإمكانك إجتيازهما بالتأكيد فكما وضحت لك الأول وضعته ليكون كبيرا كفاية والآخر مجرد تنبيه :)
حياك الله وآسف على التأخير :)
هويدي كتب:لقد بدأت اليوم في الحل,,, لكن لي سؤال..
ماذا لو تم جمع الرقم 999999 إلى 40 خانه + الرقم 99999 إلى أربعين خانه,,, الناتج سيكون
19999999999999999999999999999999999999998الذي هو 41 خانه, هل هذا مقبول؟؟
نعم مقبول ذلك فأنا لم أحدد أن تجعل هنالك أوفر فلو وتقف عند 40 خانة أو أن تضع خانة كافية للمجموع :)
حياك الله
اعتقد انه لابد ان توجد وسيلة لطباعة محتوى الأرقام (مثل اعادة تعريف المعامل << للـ ostream ليتم استخدامها مع cout)، فهل انا مصيب ؟
و الله ولي التوفيق
مدونتي: C++ Tips and Tricks
محمد علاء الدين كتب:اعتقد انه لابد ان توجد وسيلة لطباعة محتوى الأرقام (مثل اعادة تعريف المعامل << للـ ostream ليتم استخدامها مع cout)، فهل انا مصيب ؟
نعم أخي
هكذا كان الأمر بالنسبة لي
البرمجة = الرياضيات
اقتباساعتقد انه لابد ان توجد وسيلة لطباعة محتوى الأرقام (مثل اعادة تعريف المعامل << للـ ostream ليتم استخدامها مع cout)، فهل انا مصيب ؟
هل تقصد لمجرد طباعة الرقم؟
أنا أستخدم C لحل هذا اللغز... لذا سأقوم بالطباعه بواسطة داله :
void print(BigInteger*)
حتى الأن لم اقم بعمل المشيد الخاص بالتحويل من النص و ايضا لم اقم بعمل overload للـ ostream لطباعة النص. :wacko:
--------------------
بعد الإنتهاء من المثال خاصتي، هل أضعه هنا، ام ماذا افعل ؟؟ (معذره لم اكن اتباع معكم المسابقات :blush: )
تم تعديل هذه المشاركة بواسطة محمد علاء الدين في 18 يوليو 2010 في 18:14
مدونتي: C++ Tips and Tricks
بل أرسلة لأبو دحيم على الخاص, حتي يأتي يوم النتائج و سيقوم هو بعرض النتائج الفائزه..
غدا هو آخر يوم لحل اللغز :)
عند إنتهاء يوم الغد سوف تنتهي المسابقة :)
وفق الله الجميع :)
اقتباستمام يا افندم
إنت دخلت جيش؟؟؟ الكلمة دي مشهوره هناك جدا... :D
بصراحه يا جماعه لغز تقيل, و أتقل ما فيه إن الواحد مضطر أن يتعامل مع ال C نفسها ... في المسائل السابقه كان الهدف هو الوصول لحل اللغز... أما هذه المسأله, ففكره حل اللغز نفسها مباشره (جمع + طرح) أما ما أراه صعب هو التعامل مع C ,,
"C give you the robe to hang yourself" صحيح :D
أنا الحمد لله, تقريبا خلصت اللغز, سأقوم بعمل مجموعه من ال test cases ....
ارجو ان يكون حلي وصلك .. أخ ابو دحيم ..... لانه ماوصلني رد منك بالاستلام ..
ترا ارسلك عتوقه:P
تحياتي
OMANI FOR EVER
-------------------------------------------------

-------------------------------------------------
تم الإستلام من كل من namespace + هويدي + محمد علاء الدين + omani فقط :)
إن كان هنالك شخص آخر أرسل فليخبرني :)
هذا هو اليوم الاخير :)
يبدوا أنني سأواجه مشاكل في فهم الأكواد وأيضا سأواجه مشاكل في تحديد من الفائز يارب كن معي :wacko:
تم تعديل هذه المشاركة بواسطة أبو دحيم في 19 يوليو 2010 في 21:58
النتيجة الإبتدائية :)
استلمت من كل من
1) aohammed
2) OMANI
3) محمد علاء الدين
4) هويدي
5) namespace
جميع هؤلاء الأعضاء حاولوا ولكن من وصلوا للحل الصحيح هم:
1) هويدي
2) namespace
غدا بإذن سأحدد أيهما الفائز :blush:
مع أن الحكم بينهما صعب جدا :wacko:
غريبه انا هبدء اشك فى نفسى دى تانى مره افشل فى حل لغز فى الموضوع ده :blush: ، شكلى مبعرفش احل مسابقات.
مدونتي: C++ Tips and Tricks
اقتباسغريبه انا هبدء اشك فى نفسى دى تانى مره افشل فى حل لغز فى الموضوع ده، شكلى مبعرفش احل مسابقات.
لا خالص,,
أولا إنت بدأت متأخر عننا
ثانيا إنت اكيد بتحاول في الطريق الصعب بتاع المحترفين,, أما أنا مثلا فباخد أسهل طريق للوصول للحل....
أبو دحيم كتب:جميع هؤلاء الأعضاء حاولوا ولكن من وصلوا للحل الصحيح هم:
1) هويدي
2) namespace
غدا بإذن سأحدد أيهما الفائز :blush:
مع أن الحكم بينهما صعب جدا :wacko:
أحلى هويدي
أنا عاوز أعرف انت ناوي على إيه ؟
اتركني بحالي يا أخي :lol:
البرمجة = الرياضيات
اقتباسلا خالص,,
أولا إنت بدأت متأخر عننا
ثانيا إنت اكيد بتحاول في الطريق الصعب بتاع المحترفين,, أما أنا مثلا فباخد أسهل طريق للوصول للحل....
مجامله لطيفه منك اخى هويدى، بارك الله فيك و فيكم جميعا.
و الله ولي التوفيق
مدونتي: C++ Tips and Tricks
اقتباسحلى هويديأنا عاوز أعرف انت ناوي على إيه ؟
اتركني بحالي يا أخي
هههه
اقتباسمجامله لطيفه منك اخى هويدى، بارك الله فيك و فيكم جميعا.
أبدا يا أخي, فأنت بالنسبة لي بمعرفتك البرمجية هدف قد أصل إليه بعد 10 سنين من الآن....
السلام عليكم ورحمة الله وبركاته
أهلا بكم
حقيقة جلست وقت طويلا كي أرى البرنامجين لكل من هويدي و namespace واحترت بينهم حقيقة ولكن قبل أن أبين اختياري بينهم سأضع برنامجهما أولا :
namespace
#include<iostream>
using namespace std;
int len(char ch[])
{
int length = 0;
for (int i=0; ch!='\0'; i++)
length++;
return length;
}
bool isLarger(int a[], int b[], int size1, int size2)
{
if(size1 > size2) return true; // then a>b
if(size1 < size2) return false; // then b>a
// when sizes are the same
for(int i=40-size1; i<40; i++)
{
if(a > b) return true; // then a>b
if(a < b) return false; // then b>a
}
return true; // although they are equal
}
void print(int result[], int max, bool sign)
{
int sum = 0;
int d = 0;
int i;
// when addition, print the carry on the leftmost if exists
if(result[40 - max - 1] == 1) d = -1;
// find the sum of all elements in result
for(i = 40 - max + d; i<40; i++)
sum += result;
cout<<endl;
if(sign) cout << '-';
bool zeros = true; // we need it to neglect all zeros on the left of the result
// check if all digits are zeros
if(sum == 0)
cout << 0;
else
for(i = 40 - max + d; i<40; i++)
{
// don't print until you find first nonzero digit
if(result == 0 && zeros) continue;
zeros = false;
cout << result;
}
cout<<endl;
}
void main()
{
// declaring necessary variables
int choice;
char n1[41];
char n2[41];
int num1[40] = {0};
int num2[40] = {0};
int result[41] = {0};
int i;
int max;
int sum;
int carry = 0;
bool sign=false;
// printing the menue
cout<<"Please select from the following menu :\n\n"
<<"[1] Find the sum of two numbers.\n"
<<"[2] Find the subtraction of two numbers.\n"
<<"[3] Exit\n\n"
<<"Enter your choice : ";
cin >> choice;
if(choice != 1 && choice != 2)
exit(0);
cout<<"\nPlease insert the two numbers :\n\n";
cin >> n1 >> n2;
// calculate the sizes of the numbers
int size1 = len(n1),
size2 = len(n2);
// convert from character arrays to integer arrays
for(i=0; i<size1; i++)
num1[i + 40 - size1] = n1 - 48; // 48 is the ASCII of '0'
for(i=0; i<size2; i++)
num2[i + 40 - size2] = n2 - 48;
// set the max size
max = size1;
if(size2 > max)
max = size2;
// * * * NOW PROCESSING * * *
// summation
if(choice == 1)
{
for(i=40-1; i>=40-max; i--)
{
sum = num1 + num2 + carry;
result = sum%10;
carry = sum/10;
}
result = carry;
}
// subtraction
if(choice == 2)
{
int s1 = -1, s2 = 1;
// check : is num1 > num2 ?
if(isLarger(num1, num2, size1, size2))
{
s1 = 1;
s2 = -1;
}
else sign=true; // negative answer
carry = 0;
for(i=40-1; i>=40-max; i--)
{
sum = carry + s1*num1 + s2*num2;
if(sum<0)
{
carry = -1;
sum += 10;
}
else carry = 0;
result = sum;
}
}
print(result, max, sign);
system("pause");
system("cls");
main();
}وأيضا أرسل لي طريقة أخرى تعتمد على البرمجة الكائنية ولكن بعد إنتهاء الوقت وهاهي الطريقة :
#include<iostream>
using namespace std;
int len(char ch[])
{
int length = 0;
for (int i=0; ch!='\0'; i++)
length++;
return length;
}
bool s;
class myint
{
int num[40];
short size;
bool sign, overflow;
public:
myint()
{
for(int i=0;i<40;i++)
num=0;
size = 0;
overflow = sign = false;
}
bool operator<(myint m)
{
if(size < m.size) return true;
if(size > m.size) return false;
for(int i=40-size; i<40; i++)
{
if(num < m.num) return true;
if(num > m.num) return false;
}
return false; // although they are equal
}
myint operator+(myint m)
{
myint result;
int max = size;
if(size > max) max = m.size;
bool over = (max == 40); // first condition to satisfy the overflow
int sum, carry = 0;
for(int i=40-1; i>=40-max; i--)
{
sum = num + m.num + carry;
result.num = sum%10;
carry = sum/10;
}
if(carry == 1)
if(over) result.overflow = true; // if so, i is equal to -1
else result.num = carry; // i >= 0
result.size = max;
return result;
}
myint operator-(myint m)
{
if(*this < m)
{
s = true; // store the sign in the global variable, to preserve the value
// in case the function calls itself, otherwise it will be lost
return m - *this; // returns n2 - n1 but with -ve sign
}
myint result;
int max = size;
if(size > max) max = m.size;
int carry = 0, sum;
for(int i=40-1; i>=40-max; i--)
{
sum = carry + num - m.num;
if(sum < 0)
{
carry = -1;
sum += 10;
}
else carry = 0;
result.num = sum;
}
result.size = max;
result.sign = s;
return result;
}
friend ostream operator<<(ostream out, myint m)
{
int sum = 0;
int d = 0;
int i;
if(m.num[40 - m.size - 1] == 1) d = -1;
for(i = 40 - m.size + d; i<40; i++)
sum += m.num;
out << endl;
if(m.sign) out << '-';
bool zeros = true;
if(sum == 0 && !m.overflow)
out << 0;
else
{
if(m.overflow) out << 1;
for(i = 40 - m.size + d; i<40; i++)
{
if(m.num == 0 && zeros) continue;
zeros = false;
out << m.num;
}
}
return out;
}
friend istream operator>>(istream in, myint & m)
{
char n[41]; in>>n;
m.size = len(n);
for(int i=0; i<m.size; i++)
m.num[i + 40 - m.size] = n - 48;
return in;
}
};
void main()
{
int choice;
myint n1, n2;
s = false;
cout<<"Please select from the following menu :\n\n"
<<"[1] Find the summation of two numbers.\n"
<<"[2] Find the subtraction of two numbers.\n"
<<"[3] Exit\n\n"
<<"Enter your choice : ";
cin >> choice;
if(choice != 1 && choice != 2)
exit(0);
cout<<"\nPlease insert the two numbers :\n\n";
cin >> n1 >> n2;
if(choice == 1)
cout << n1 + n2 << endl;
if(choice == 2)
cout << n1 - n2 << endl;
system("pause");
system("cls");
main();
}هذا هو حل أخي namespace
أما بالنسبة لحل أخي هويدي فهاهو :
//BigInteger.h
#ifndef BIG_INTEGER_H
#define BIG_INTEGER_H
typedef struct {
char *data;
size_t length;
short sign; // 0 for positive (default value), otherwise for negative
} BigInteger;
// BigInteger interface functions
/**
* The char array are provided from right to left, for example if you want to reprensent the number 200, you
* should use array looks like:
* char arr[] = {0, 0, 2};
*/
BigInteger* construct(char[], size_t);
BigInteger* add(BigInteger*, BigInteger*);
BigInteger* subtract(BigInteger*, BigInteger*);
char* get(BigInteger*);
void print(BigInteger*);
// utility functions
static void intcpy(char*, char*, int);
static char** get_adjusted(BigInteger*, BigInteger*);
#endif//BigInteger.c
#include <stdio.h>
#include <stdlib.h>
#include "BigInteger.h"
BigInteger* construct(char data[], size_t length) {
if (length > 40)
return NULL;
BigInteger* bi = malloc(sizeof(BigInteger*));
bi->length = length;
bi->data = malloc(bi->length*sizeof(char));
intcpy(bi->data, data, bi->length);
return bi;
}
BigInteger* add(BigInteger* x, BigInteger* y) {
char* add_data(char*, char*, int*);
int len = (x->length > y->length) ? x->length : y->length;
char** resized = get_adjusted(x, y);
char* tmp_x = resized[0];
char* tmp_y = resized[1];
char* ret = add_data(tmp_x, tmp_y, &len);
if (ret == NULL)
return NULL;
BigInteger *b = construct(ret, len);
return b;
}
BigInteger* subtract(BigInteger* x, BigInteger* y) {
char** resized = get_adjusted(x, y);
char *tmp_x = resized[0];
char *tmp_y = resized[1];
enum Sign {
EQUAL = 0, POSITIVE = 1, NEGATIVE = 2
};
short ret_sign = EQUAL;
int i;
for (i = x->length - 1; i >= 0; i--) {
if (tmp_x == tmp_y)
continue;
else if (tmp_x > tmp_y) {
ret_sign = POSITIVE;
break;
} else {
ret_sign = NEGATIVE;
break;
}
}
BigInteger* bi;
if (ret_sign == EQUAL) {
char ret[1] = {0};
bi= construct(ret, 1);
}else if (ret_sign == POSITIVE){
char ret[x->length];
for (i=0; i<x->length;i++){
int tmp = tmp_x-tmp_y;
if (tmp <0){
tmp_x[i+1]--;
tmp = (tmp_x+10)-tmp_y;
}
ret = tmp;
}
bi=construct(ret, x->length);
}else{
char ret[y->length];
for (i=0; i<y->length;i++){
int tmp = tmp_y-tmp_x;
if (tmp <0){
tmp_y[i+1]--;
tmp = (tmp_y+10)-tmp_x;
}
ret = tmp;
}
bi=construct(ret, y->length);
bi->sign = 1;
}
return bi;
}
char* get(BigInteger* bi) {
return bi->data;
}
void print(BigInteger* bi) {
char* d = bi->data;
if (bi->sign) printf("%c", '-');
int i;
for (i = (bi->length)-1; i>=0; --i) {
printf("%i", d);
}
printf("n");
}
char* add_data(char* x, char* y, int *len) {
int i, reminder = 0;
char *ret = malloc(sizeof(char) * *len);
for (i = 0; i < *len; i++) {
int tmp = x + y + reminder;
ret = tmp % 10;
reminder = (tmp - ret) / 10;
}
if (reminder) {
if (i==40){
fprintf(stderr, "Arithmetic OverFlown");
return NULL;
}else{
ret =reminder;
(*len)++;
}
}
return ret;
}
static void intcpy(char* dest, char* src, int l) {
while (l-- > 0)
*dest++ = *src++;
}
static char** get_adjusted(BigInteger* x, BigInteger *y) {
char **ret = malloc(sizeof(char**));
int len = (x->length > y->length) ? x->length : y->length;
char *tmp_x = get(x);
char *tmp_y = get(y);
int diff;
if ((diff = len - x->length) > 0) {
intcpy(tmp_x, get(x), len);
while (diff > 0) {
tmp_x[x->length++] = 0;
diff--;
}
} else if ((diff = len - y->length) > 0) {
intcpy(tmp_y, get(y), len);
while (diff > 0) {
tmp_y[y->length++] = 0;
diff--;
}
}
ret[0] = tmp_x;
ret[1] = tmp_y;
return ret;
}//main.c
#include <stdio.h>
#include "BigInteger.h"
void test_add1() {
printf("Start Testing ADD n");
char d1[] = { 1, 2}; // from right to left, so its value is 21
char d2[] = { 5}; // and this is 5
BigInteger* bi1 = construct(d1, sizeof(d1) / sizeof(char));
BigInteger* bi2 = construct(d2, sizeof(d2) / sizeof(char));
print(bi1);
print(bi2);
BigInteger *ret = add(bi1, bi2);
print(ret);
printf("End Testing...n");
}
void test_add2() {
printf("Start Testing ADD n");
char d1[40];
char d2[40];
int i=0;
for (i=0; i<40;i++){
d1 = 3;
d2 = 5;
}
BigInteger* bi1 = construct(d1, sizeof(d1) / sizeof(char));
BigInteger* bi2 = construct(d2, sizeof(d2) / sizeof(char));
print(bi1);
print(bi2);
BigInteger *ret = add(bi1, bi2);
print(ret);
printf("End Testing...n");
}
/**
* Will print "Arithmetic Overflow" and returns NULL
*/
void test_add3() {
printf("Start Testing ADD n");
char d1[40];
char d2[40];
int i=0;
for (i=0; i<40;i++){
d1 = 5;
d2 = 5;
}
BigInteger* bi1 = construct(d1, sizeof(d1) / sizeof(char));
BigInteger* bi2 = construct(d2, sizeof(d2) / sizeof(char));
print(bi1);
print(bi2);
BigInteger *ret = add(bi1, bi2);
if (ret == NULL)
printf("NULLn");
//print(ret);
printf("End Testing...n");
}
void test_add4() {
printf("Start Testing ADD n");
char d1[] = { 9, 9};
char d2[] = { 9, 9};
BigInteger* bi1 = construct(d1, sizeof(d1) / sizeof(char));
BigInteger* bi2 = construct(d2, sizeof(d2) / sizeof(char));
print(bi1);
print(bi2);
BigInteger *ret = add(bi1, bi2);
print(ret);
printf("End Testing...n");
}
void test_add5() {
printf("Start Testing ADD n");
char d1[] = { 1, 2, 0, 0, 1, 2, 3, 4, 5, 9 ,3, 1, 3, 4, 4, 2, 1}; // from right to left, so its value is 21
char d2[] = { 1, 3, 3, 4, 5, 5, 3, 0, 0, 0, 0, 0, 2, 1, 1, 1, 9}; // and this is 5
BigInteger* bi1 = construct(d1, sizeof(d1) / sizeof(char));
BigInteger* bi2 = construct(d2, sizeof(d2) / sizeof(char));
print(bi1);
print(bi2);
BigInteger *ret = add(bi1, bi2);
print(ret);
printf("End Testing...n");
}
void test_subtract1() {
printf("Start Testing SUBTRACT n");
char d1[] = { 1, 2}; // this is 21
char d2[] = { 5, 2}; // and this is 25
BigInteger* bi1 = construct(d1, sizeof(d1) / sizeof(char));
BigInteger* bi2 = construct(d2, sizeof(d2) / sizeof(char));
print(bi1);
print(bi2);
BigInteger *ret = subtract(bi1, bi2);
print(ret);
printf("End Testing...n");
}
void test_subtract2() {
printf("Start Testing SUBTRACT n");
char d1[] = { 9, 9};
char d2[] = { 9, 9};
BigInteger* bi1 = construct(d1, sizeof(d1) / sizeof(char));
BigInteger* bi2 = construct(d2, sizeof(d2) / sizeof(char));
print(bi1);
print(bi2);
BigInteger *ret = subtract(bi1, bi2);
print(ret);
printf("End Testing...n");
}
void test_subtract3() {
printf("Start Testing SUBTRACT n");
char d1[40];
char d2[40];
int i=0;
for (i=0; i<40;i++){
d1 = 3;
d2 = 5;
}
BigInteger* bi1 = construct(d1, sizeof(d1) / sizeof(char));
BigInteger* bi2 = construct(d2, sizeof(d2) / sizeof(char));
print(bi1);
print(bi2);
BigInteger *ret = subtract(bi1, bi2);
print(ret);
printf("End Testing...n");
}
void test_subtract4() {
printf("Start Testing SUBTRACT n");
char d1[] = { 1, 2, 0, 0, 1, 2, 3, 4, 5, 9 ,3, 1, 3, 4, 4, 2, 1}; // from right to left, so its value is 21
char d2[] = { 1, 3, 3, 4, 5, 5, 3, 0, 0, 0, 0, 0, 2, 1, 1, 1, 9}; // and this is 5
BigInteger* bi1 = construct(d1, sizeof(d1) / sizeof(char));
BigInteger* bi2 = construct(d2, sizeof(d2) / sizeof(char));
print(bi1);
print(bi2);
BigInteger *ret = subtract(bi1, bi2);
print(ret);
printf("End Testing...n");
}
int main(void) {
test_add1();
test_add2();
test_add3();
test_add4();
test_add5();
test_subtract1();
test_subtract2();
test_subtract3();
test_subtract4();
return 0;
}قبل أن أقول من الفائز أحب أن أوضح أن البرنامجان يعملان بشكل ممتاز وكلاهما يمتلكان نفس المميزات فكلاهما يجمعنا ويطرحان بشكل صحيح وكلاهما وضعا ميزة أنه في حالة العدد الاول أصغر من الثاني في الطرح يطرح الرقمين ويضع علامة " - " لذلك احترت كثيرا بينهما وقد رشحت أخي namespace للفوز لعدة أسباب وهي:
1) أن البرنامج more readability وأسهل بالتتبع والقرائة بعكس برنامجي اخي هويدي ( تعبت كثيرا لقلة خبرتي باللغة ولكثرة استعمالة المؤشرات ).
2) حسب ما فهمت من برنامج أخي هويدي أنه اتعمل طريقة البرمجة الشيئية أو الكائنية ولكن من دون وجود كائنات وما يؤكد ذلك هو وضعه فنكشن constructor وهذا موجود دائما في البرمجة الشيئية ( هذا ما فهمته من البرنامج إن كنت مخطئا فصحح لي ).
3) برنامج أخي namespace يعتبر friendly وأسهل بكثير بالتعامل بعكس برنامج أخي هويدي حيث أنه أصعب قليلا.
وطبعا رغم كل ذلك يبقى برنامج أخي هويدي رائعا وجدا وكل ما ذكر لا يقلل من شأنة بل ما عمله يعتبر عمل رائع ولكن أرى أن الجافا بطريقتها الكائنية أثرت على برامجه :lol:
هذا ما رأيته ( وشاركني فيه والدي أيضا :lol: ) وأرجوا أن لا أكون ظلمت أحدا في هذا اللغز وحقيقة وجدت برامج رائعة جدا ( مثل برنامج مشرفنا رائع جدا ويوجد في تعليقات كثيرة وهذا يأكد خبرته الكبيرة في البرمجة ولكن للأسف به أخطاء وناقص لأنه لم يبدأ به إلا متأخرا ).
هذا مالدي إن أصبت فمن الله وإن أخطأت فمن نفسي والشيطان.
لكم جزيل الشكر وتشرفت في مشاركتي معكم حقيقة ويسعدني ذلك
بإنتظارك أخي namespace <<<<<<<<<<< وإن كنت مصرا على عدم وضع اللغز فبالتأكيد سينتقل الأمر للمشرف الرائع أخي هويدي ;)
السلام عليكم
اقتباسهذا ما رأيته ( وشاركني فيه والدي أيضا :lol: )
يعني والدك يشتغل وراء الكواليس ...! :lol:
اخي أبو دحيم .. عليك أيضاً وضع بقية الحلول ..
تقبل تحياتي
OMANI FOR EVER
-------------------------------------------------

-------------------------------------------------
مبروووك للأخ حمزه (Namespace) :D
ألف مبروك يا أخي, حقا تستحقها, فأنت أستاذنا و معلمنا :D
أرجو أخي أبو دحيم أن تضع كل الحلول المرسلة إليك لكي نستفقد منا,,,, بعد إذن أصحابها طبعا...
بالنسبة لنقطة البرمجة الكائنيه,,, فأري أن ليس كل المشاكل يجب أن تحل بها,,, كما أنه هناك بعض الحالات التي يفضل أن يتم إستخدام البرمجة الكائنية بها, و خير مثال على ذلك هو الحل الثاني للأخ حمزه حيث أبدع في إستخدام ال operator overloading و بهذا نقل كل المنطق إلى الفئة...
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…