ahmed.o.mohamed

السؤال الثاني : هل يمكنك تمييز الأعداد الفردية بعشر طرق ؟

19 ردود في هذا الموضوع

السلام عليكم

السؤال الأول : كيفية محاكاة تأثير الــ Matrix.

السؤال الثاني : اكتب دالة تستقبل عدداً صحيحاً و تعيد true إذا كان العدد فردياً و false في الحالة المعاكسة.

المطلوب هو كتابة الدالة بعشر طرق مختلفة عن بعضها البعض.

بانتظار إبداعاتكم :)

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

السؤال الأول : كيفية محاكاة تأثير الــ Matrix.

السؤال الثاني : اكتب دالة تستقبل عدداً صحيحاً و تعيد true إذا كان العدد فردياً و false في الحالة المعاكسة.

المطلوب هو كتابة الدالة بعشر طرق مختلفة عن بعضها البعض.

بانتظار إبداعاتكم :)

و عليكم السلام اخي احمد,

هل هذه تسمى ماتركس؟ لم اصل شخصيا اليها بعد

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

محاولاتي : ( لكن لا تنظر إليها قبل أن تضع محاولتك ^_^ )

bool isOdd(int n) {

//Method 1
return n % 2 != 0;

//Method 2
for (int i = 0; n > 0; i++, n -= 2);
return n == -1;

//Method 3
return n & 1 == 1;

//Method 4
return (((n >> 1) << 1) == n) == 0;

//Method 5
if (n == 0) return false;
else {
if (n == 1) return true;
else isOdd(n - 2);
}

}

لدي أيضا 4 طرق أخرى لحساب باقي القسمة : ( إذا كان باقي القسمة يختلف عن الصفر فالعدد فردي )

//Method 6
c = a / b;
c *= b;
cout << a << " % " << b << " = " << a - c << endl;

//Method 7
c = 0;
while (c + b < a)
c += b;
cout << a << " % " << b << " = " << a - c << endl;

//Method 8
c = a;
for (; c > b;)
c -= b;
cout << a << " % " << b << " = " << c << endl;

//Method 9
div_t divresult; //#include<cstdlib>
divresult = div(a, b);
cout << a << " % " << b << " = " << divresult.rem << endl;

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

هل هذه تسمى ماتركس؟ لم اصل شخصيا اليها بعد

الــ Matrix ليست من فصول اللغة و لا علاقة لها بالبرمجة :)

فقط, هي عبارة عن تأثير (أو طريقة عرض) في فيلم مشهور, اسمه The Matrix.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

عبارة "أتحداك أن تفعلها "...تستفزّني من الجذور ...

هذه عشر طرق ... حاولت أن أنفذ نفس الأمر بطرق مختلفى عدة مرات .. حتى أترك بعض الطرق للاحتياط ...(حتى أعرف ماذ اأضع لو كان السؤال عن 20 طريقة ;)

bool func(int a,int method)
{
if(method==0)return(a%2)?0:1;
else if(method==1)return(a%2==0)?1:0;
else if(method==2)return(~a%2)?1:0;
else if(method==3)return(~a%2==0)?0:1;
else if(method==4)return(a&1)?0:1;
else if(method==5)return(a&1==0)?1:0;
else if(method==6)return(!(a&1))?1:0;
else if(method==7)return((~a)&1)?1:0;
else if(method==8)return(a-(a/2)*2)?0:1;
else if(method==9)return(a==(a/2)*2)?1:0;
else return 0;
}
#include<cstdio>
#include<cstdlib>
main()
{
int a;
for(int i=0;i<10;i++)
{
a=rand();
printf("%i --> %s\n",a,func(a,(rand()%10))?"even":"odd");
}
return 0;
}

تحياتي

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أخي أحمد ، إليك محاولاتي smile.gif وصلت إلى 6 طرق حتى الآن laugh.gif ، هناك طرق استخدمتها أنت ، لقد عدت إلى موضوع حزورة لتنشيط الدماغ و أخذت منها ما أريد cool.gif ،،،


#include <stdio.h>
#include <math.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0
#define IsPair1(a) (a % 2 != 0) ? TRUE : FALSE

int IsPair2(int num)
{
div_t rem = div(num,2);
if(rem.rem != 0) return TRUE ;
return FALSE ;
}
int IsPair3(int num)
{
int b = 2,c = 0;
while (c + b <=num)
c += b;
if(num - c != 0)return TRUE;
return FALSE;
}
int IsPair4(int num)
{
int reslt;
reslt = num / 2;
reslt *= 2;
if(num - reslt != 0)return TRUE;
return FALSE;
}
int IsPair5(int num)
{
int res = num;
for (; res >= 2;)res -= 2;
if(res !=0)return TRUE;
return FALSE;
}
int IsPair6(int num)
{
int x;
do{
x = num/2;
num = x/2;
x = num;
}while(num<x);
if(num!=2)return TRUE;
return FALSE;
}

int main()
{
printf("%d\t%d\t%d\t%d\t%d\t%d",
IsPair1(1),IsPair2(3),IsPair3(5),IsPair4(7),IsPair5(9),IsPair6(17));
printf("\n\n");
printf("%d\t%d\t%d\t%d\t%d\t%d",
IsPair1(2),IsPair2(4),IsPair3(6),IsPair4(8),IsPair5(10),IsPair6(8));
getchar();
return 0;
}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الــ Matrix ليست من فصول اللغة و لا علاقة لها بالبرمجة :)

فقط, هي عبارة عن تأثير (أو طريقة عرض) في فيلم مشهور, اسمه The Matrix.

السلام عليك اخي

محاوله بسيطه نظرا لاني وجدت في كود الذي وضعته لنا في اول سطر تحاول ان تعرف هل الرقم يبقى منه شيئا عند قسمته على 2

ان كان الناتج صفر للمتبقي فان العدد صحيح و ان بقي شيئا فان رقم odd

محاوله بسيطه مني

#include <iostream>
using namespace std;


int main()

{
int x;
cout << "Please type a value for X: " << endl;
cin >> x;
int remainder = x % 2;
if (remainder == 0 )
{
cout << "X is: " << x << " and it's an even number! " << endl;
cout << " The remainder is: " << remainder << endl;

}
else
{
cout << "X is: " << x << " and it's an Odd number! " << endl;
cout << " The remainder is: " << remainder << endl;
}

}

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

@مصطفى

لو زادت الطرق عن 10 فستكون مُتقاربة جدا ( و يمكن أن يصل بعضها إلى درجة التطابق ) :)

@حمزه

ممنوع مراجعة الأرشيف :D (أمزح فقط :P)

محاولاتك جيدة.

@صمودا

محاولة رائعة, +1

بانتظار طرق أخرى, تكون مُختلفة عن ما سبق, في الشكل و المضمون :wink:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

@مصطفى

لو زادت الطرق عن 10 فستكون مُتقاربة جدا ( و يمكن أن يصل بعضها إلى درجة التطابق ) :)

@حمزه

ممنوع مراجعة الأرشيف :D (أمزح فقط :P)

محاولاتك جيدة.

@صمودا

محاولة رائعة, +1

بانتظار طرق أخرى, تكون مُختلفة عن ما سبق, في الشكل و المضمون :wink:

شكرا لك اخي احمد,

على ما يبدو ان الاجابات متشابهه في حلولكم الجميله اعلاه

هل يوجد طريقه اخرى باستخدام ال power of a number للحصول على نفس النتيجة؟ by using pow() function

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

هل توجد طريقه اخرى باستخدام ال power of a number للحصول على نفس النتيجة ؟

نعم, يمكن :)

انظر المثال :

#include<math.h>
#include<stdio.h>
#include<stdbool.h>

bool isOdd(int n) {
return pow(-1,n) < 0;
}

int main() {
printf("%d", isOdd(27));
return 0;
}

ما رأيكم بهذه الطريقة ؟ : ( العدد الفردي ينتهي دائما بــ 1 في النظام الثنائي )

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

bool isOdd(int n) {
char buffer[30];
itoa(n, buffer, 2);
return buffer[strlen(buffer) - 1] == '1';
}

int main() {
printf("%d", isOdd(27));
return 0;
}

2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

طريقة جديدة و مبتكرة أخي أحمد smile.gif

نعم, يمكن :)

انظر المثال :

#include<math.h>
#include<stdio.h>
#include<stdbool.h>

bool isOdd(int n) {
return pow(-1,n) < 0;
}

int main() {
printf("%d", isOdd(27));
return 0;
}

ما رأيكم بهذه الطريقة ؟ : ( العدد الفردي ينتهي دائما بــ 1 في النظام الثنائي )

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

bool isOdd(int n) {
char buffer[30];
itoa(n, buffer, 2);
[return buffer[strlen(buffer) - 1] == '1';
}

int main() {
printf("%d", isOdd(27));
return 0;
}

[return buffer[strlen(buffer) - 1] == '1';

هل الكتابة التي بالأحمر شرط أم ماذا ؟ wacko.gif

تم تعديل بواسطه أحمد الشنقيطي
إصافة الوسم LTR.
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

نعم, يمكن :)

انظر المثال :

#include<math.h>
#include<stdio.h>
#include<stdbool.h>

bool isOdd(int n) {
return pow(-1,n) < 0;
}

int main() {
printf("%d", isOdd(27));
return 0;
}

ما رأيكم بهذه الطريقة ؟ : ( العدد الفردي ينتهي دائما بــ 1 في النظام الثنائي )

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

bool isOdd(int n) {
char buffer[30];
itoa(n, buffer, 2);
return buffer[strlen(buffer) - 1] == '1';
}

int main() {
printf("%d", isOdd(27));
return 0;
}

ما شاء الله عليك جميل للغايه

بعيد جدا عن حدود تفكيري لفكرتك الجميله شكرا لك اخي كثيرا :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

@حمزه

هذه الكتابة :

return buffer[strlen(buffer) - 1] == '1';

تُكافئ :

if( buffer[strlen(buffer) - 1] == '1')
return true;
else
return false;

@صمودا

الفكرة بسيطة جداً :

جداء -1 في نفسه عدد زوجي من المرات يُساوي 1.

و العكس بالنسبة للأعداد الفردية :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

والآآآآآآن الطريقة الساحقة الماحقة .... laugh.giflaugh.gif

إليكم هذا الحل ... مع تحياتي ...wink.gif

#include<cstdio>
#include<cmath>
#define PI 3.1415
int iseven(int n) {
return cos(n*PI)>0;
}

int main() {
printf("%d", iseven(24));
return 0;
}

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

لقد وجدت طريقة جديدة أخي أحمد laugh.gif ،،، أنت تعلم أن الأعداد الفردية تنتهي ب 1 كما أوضحت في المثال ، ماذا لو عكسنا الطريقة هكذا ؟؟؟ smile.gif

لدينا ،،،

كل عدد فردي مضروب في 15 ناقص واحد يساوي عدد زوجي ،،، و العكس صحيح wink.gif

44 = 1 - 15 * 3 ،،، و بالتالي فإن العدد الزوجي سينتهي ب 0 في النظام الثنائي ...

إليك المثال ،،،


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

bool isPair(int number)
{
number = number * 15 - 1;
char convert[30];
itoa(number,convert,2);
return convert[strlen(convert) - 1] == '0';
}
int main()
{
printf("%d",isPair(73));
getchar();
return 0;
}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

@مصطفى

طريقة رائعة, +1

@حمزه

لا تلعب بطريقتي .. جميع الحقوق محفوظة :D

مثلا, يمكنني القول بأن العدد الفردي +1 = عدد زوجي, إذا سيكون الشرط هو :

إذا كان العدد + 1 ينتهي بصفر فالعدد الأصلي فردي.

لكن هذه ليست خوارزمية جديدة, فقط هي إحدى مشتقات الخوارزمية الأصلية :P

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

لقد وجدت 3 طرق جديدة أخي أحمد ، تعتمد هذه الطرق على char , octal , hex :

نبدأ بالهكس ، لقد قمت بحسابات كثيرة لملاحظة التغيرات التي تطرأ على الأعداد الفردية

عند عمليات الضرب ، حيث توصلت إلى النتيجة التالية smile.gif ،،،

أي عدد فردي مضروب في العدد 17 = عدد فردي في نظام الهكس ، على سبيل المثال :

0x11 = 1 * 17

ومن خلال هذه النتيجة توصلت إلى الكود التالي ،،، laugh.gif


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// by Me

bool is0dd(int n){
char tohex[10];
n *= 17;
itoa(n,tohex,16);
if(
tohex[strlen(tohex)-1] == '1' ||
tohex[strlen(tohex)-1] == '3' ||
tohex[strlen(tohex)-1] == '5' ||
tohex[strlen(tohex)-1] == '7' ||
tohex[strlen(tohex)-1] == '9' ||
tohex[strlen(tohex)-1] == 'b' ||
tohex[strlen(tohex)-1] == 'd' ||
tohex[strlen(tohex)-1] == 'f'
)
return true;
return false;
}
int main()
{
printf("%d",is0dd(17));
getchar();
return 0;
}

ننتقل الآن إلى الoctal blush.gif ،،،

من خلال الحسابات ، استنتجت أن أي عدد فردي مضروب في أي عدد فردي = عدد ينتهي إما ب ،،،

1 || 3 || 5 || 7 

إليك الكود ،،، laugh.gif


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// by Me !!!

bool isOdd(int s)
{
char str[10];
s = s * 7; // s * (each odd number)
itoa(s,str,8); // convert decimal to octal
if(
str[strlen(str) - 1] == '1' || // if s[last element] = 1
str[strlen(str) - 1] == '3' || // if s[last element] = 3
str[strlen(str) - 1] == '5' || // if s[last element] = 5
str[strlen(str) - 1] == '7' // if s[last element] = 7
)
return 1;
return 0;
}

int main(){
printf("is odd ? %d",isOdd(1475));
getchar();
return 0;
}

ننتقل إلى char ،،، wink.gif

الطريقة سهلة و مفهومة و لا داعي لشرحها laugh.gif ،،،


#include <stdio.h>

// by me

bool isodd(int x){
char c = x;
return (c%2 == (char)1);
}
int main()
{
printf("is 0dd %d",isodd(15));
getchar();
return 0;
}

إليك أخي أحمد الحسابات التي قمت بها laugh.gif ،،،

Calculation.zip

وهنا تجميعة للطرق التي استخدمناها smile.gif ،،،

All Methods.zip

بالتوفيق + في انتظار أفكار أخرى أو بالأحرى مواضيع مثل هذه تماما happy.gif

تم تعديل بواسطه Hamza+C+ASM
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أفكار جيدة يا حمزه, بارك الله فيك :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أهلا أستاذ أحمد smile.gif ، هل لديك طرق أخرى لكي تريها لنا laugh.gif ؟؟؟ . أعرف أن رأسك الصغير يحوي العديد من الأفكار اللامعة smile.gif

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .