السلام عليكم
السؤال الأول : كيفية محاكاة تأثير الــ Matrix.
السؤال الثاني : اكتب دالة تستقبل عدداً صحيحاً و تعيد true إذا كان العدد فردياً و false في الحالة المعاكسة.
المطلوب هو كتابة الدالة بعشر طرق مختلفة عن بعضها البعض.
بانتظار إبداعاتكم :)
السلام عليكم
السؤال الأول : كيفية محاكاة تأثير الــ Matrix.
السؤال الثاني : اكتب دالة تستقبل عدداً صحيحاً و تعيد true إذا كان العدد فردياً و false في الحالة المعاكسة.
المطلوب هو كتابة الدالة بعشر طرق مختلفة عن بعضها البعض.
بانتظار إبداعاتكم :)
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
أحمد الشنقيطي كتب:السلام عليكم
السؤال الأول : كيفية محاكاة تأثير الــ Matrix.
السؤال الثاني : اكتب دالة تستقبل عدداً صحيحاً و تعيد true إذا كان العدد فردياً و false في الحالة المعاكسة.
المطلوب هو كتابة الدالة بعشر طرق مختلفة عن بعضها البعض.
بانتظار إبداعاتكم :)
و عليكم السلام اخي احمد,
هل هذه تسمى ماتركس؟ لم اصل شخصيا اليها بعد
محاولاتي : ( لكن لا تنظر إليها قبل أن تضع محاولتك ^_^ )
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;C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
اقتباسهل هذه تسمى ماتركس؟ لم اصل شخصيا اليها بعد
الــ Matrix ليست من فصول اللغة و لا علاقة لها بالبرمجة :)
فقط, هي عبارة عن تأثير (أو طريقة عرض) في فيلم مشهور, اسمه The Matrix.
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
عبارة "أتحداك أن تفعلها "...تستفزّني من الجذور ...
هذه عشر طرق ... حاولت أن أنفذ نفس الأمر بطرق مختلفى عدة مرات .. حتى أترك بعض الطرق للاحتياط ...(حتى أعرف ماذ اأضع لو كان السؤال عن 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;
}تحياتي
أخي أحمد ، إليك محاولاتي
وصلت إلى 6 طرق حتى الآن
، هناك طرق استخدمتها أنت ، لقد عدت إلى موضوع حزورة لتنشيط الدماغ و أخذت منها ما أريد
،،،
#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;
}
أحمد الشنقيطي كتب:الــ 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;
}
}@مصطفى
لو زادت الطرق عن 10 فستكون مُتقاربة جدا ( و يمكن أن يصل بعضها إلى درجة التطابق ) :)
@حمزه
ممنوع مراجعة الأرشيف :D (أمزح فقط :P)
محاولاتك جيدة.
@صمودا
محاولة رائعة, +1
بانتظار طرق أخرى, تكون مُختلفة عن ما سبق, في الشكل و المضمون :wink:
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
أحمد الشنقيطي كتب:@مصطفى
لو زادت الطرق عن 10 فستكون مُتقاربة جدا ( و يمكن أن يصل بعضها إلى درجة التطابق ) :)
@حمزه
ممنوع مراجعة الأرشيف :D (أمزح فقط :P)
محاولاتك جيدة.
@صمودا
محاولة رائعة, +1
بانتظار طرق أخرى, تكون مُختلفة عن ما سبق, في الشكل و المضمون :wink:
شكرا لك اخي احمد,
على ما يبدو ان الاجابات متشابهه في حلولكم الجميله اعلاه
هل يوجد طريقه اخرى باستخدام ال power of a number للحصول على نفس النتيجة؟ by using pow() function
اقتباسهل توجد طريقه اخرى باستخدام ال 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;
}C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
طريقة جديدة و مبتكرة أخي أحمد ![]()
أحمد الشنقيطي كتب:نعم, يمكن :)
انظر المثال :
#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';
هل الكتابة التي بالأحمر شرط أم ماذا ؟ ![]()
تم تعديل هذه المشاركة بواسطة أحمد الشنقيطي في 19 سبتمبر 2012 في 15:24 — السبب: إصافة الوسم LTR.

أحمد الشنقيطي كتب:نعم, يمكن :)
انظر المثال :
#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';
تُكافئ :
if( buffer[strlen(buffer) - 1] == '1') return true; else return false;
@صمودا
الفكرة بسيطة جداً :
جداء -1 في نفسه عدد زوجي من المرات يُساوي 1.
و العكس بالنسبة للأعداد الفردية :)
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
والآآآآآآن الطريقة الساحقة الماحقة .... ![]()
![]()
إليكم هذا الحل ... مع تحياتي ...![]()
#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 كما أوضحت في المثال ، ماذا لو عكسنا الطريقة هكذا ؟؟؟ ![]()
لدينا ،،،
كل عدد فردي مضروب في 15 ناقص واحد يساوي عدد زوجي ،،، و العكس صحيح ![]()
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;
}
@مصطفى
طريقة رائعة, +1
@حمزه
لا تلعب بطريقتي .. جميع الحقوق محفوظة :D
مثلا, يمكنني القول بأن العدد الفردي +1 = عدد زوجي, إذا سيكون الشرط هو :
إذا كان العدد + 1 ينتهي بصفر فالعدد الأصلي فردي.
لكن هذه ليست خوارزمية جديدة, فقط هي إحدى مشتقات الخوارزمية الأصلية :P
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
لقد وجدت 3 طرق جديدة أخي أحمد ، تعتمد هذه الطرق على char , octal , hex :
نبدأ بالهكس ، لقد قمت بحسابات كثيرة لملاحظة التغيرات التي تطرأ على الأعداد الفردية
عند عمليات الضرب ، حيث توصلت إلى النتيجة التالية
،،،
أي عدد فردي مضروب في العدد 17 = عدد فردي في نظام الهكس ، على سبيل المثال :
0x11 = 1 * 17
ومن خلال هذه النتيجة توصلت إلى الكود التالي ،،، ![]()
#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
،،،
من خلال الحسابات ، استنتجت أن أي عدد فردي مضروب في أي عدد فردي = عدد ينتهي إما ب ،،،
1 || 3 || 5 || 7
إليك الكود ،،، ![]()
#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 ،،، ![]()
الطريقة سهلة و مفهومة و لا داعي لشرحها
،،،
#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;
}إليك أخي أحمد الحسابات التي قمت بها
،،،
وهنا تجميعة للطرق التي استخدمناها
،،،
بالتوفيق + في انتظار أفكار أخرى أو بالأحرى مواضيع مثل هذه تماما ![]()
تم تعديل هذه المشاركة بواسطة Hamza+C+ASM في 20 سبتمبر 2012 في 20:26

أفكار جيدة يا حمزه, بارك الله فيك :)
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
أهلا أستاذ أحمد
، هل لديك طرق أخرى لكي تريها لنا
؟؟؟ . أعرف أن رأسك الصغير يحوي العديد من الأفكار اللامعة ![]()
