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

سؤال دون جواب

بدأه 007GB في 25 يونيو 2008 · 43 رد · 4,334 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحباً إخواني المبرمجين

قد تتسألون عن عنوان الموضوع الغريب (سؤال دون جواب)؟

إن الغرض من هذا الموضوع هو طرح سؤال برمجي من قبل مبرمج ما و هو يعرف حله ثم ينتظر الردود المختلفة من عدة مبرمجين قد تحمل حلول جديدة غير حله

و الهدف هو تشغيل الباحة البرمجية في مخ المبرمج و إظهار الحلول المختلفة لعقدة برمجية بغية اختيار الأسرع و الأفضل و الأكثر دقة

و كسؤال استسفتاحي بسيط و جوابه سهل جداً :

اذكر طريقتين تعرف بهما إن كان العدد زوجياً أم فردياً.

أتمنى أن ينال الموضوع إعجابكم

و قبل السلام و الختام تجدر الملاحظة أن هذا الموضوع مقتبس عن موضوع في منتدى الفيجوال بيسك و رأيت أن التجربة تستحق أن تنقل إلى منتدى الدلفي

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

أخوكم 007GB

المستبد يتحكم في شؤون الناس بإرادته لا بإرادتهم و يحكمهم بهواه لا بشريعتهم و يعلم من نفسه أنه الغاصب المتعدي فيضع كعب رجله على أفواه الملايين من الناس يسدها عن النطق بالحق و التداعي لمطالبته

#2
procedure TForm1.Button1Click(Sender: TObject);

var num : integer ;

begin

num := strtoint(edit1.Text) ;

if num mod 2 = 0 then

showmessage('conjugal')

else

showmessage('single') ;

end;

تم تعديل هذه المشاركة بواسطة rober في 25 يونيو 2008 في 17:47

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#3

شرح الكود السابق يتعامل مع باقي القسمة فمنه نعرف العدد زوجي وفردي

والدالة mod هي التي تبين

#4

و هاتان طريقتان اخريتان :

نحن نعلم أن العدد الزوجي ينتج عن جمع عددين زوجيين أو فرديين

الطريقة 1 :

procedure isconjugal(var number:integer):boolean;
var NewNum:integer;
begin
result:=false;
NewNum:=Number-2
if NewNum mod 2=0 then result:=true;
end;

الطريقة 2

procedure isconjugal(var number:integer):boolean;
var NewNum:integer;
begin
result:=false;
NewNum:=Number-1
if not(NewNum mod 2 =0) then result:=true;
end;

و هذا سؤال جديد :

إذا كان لديك العدد التالي :

16010

أوجد طريقة تكتبه فيها بتنسيق الوقت

ملاحظة ليس السؤال حكراً علي بل هو لجميع أفراد المنتدى

المستبد يتحكم في شؤون الناس بإرادته لا بإرادتهم و يحكمهم بهواه لا بشريعتهم و يعلم من نفسه أنه الغاصب المتعدي فيضع كعب رجله على أفواه الملايين من الناس يسدها عن النطق بالحق و التداعي لمطالبته

#5

طريقة جميلة تشكر عليها أخي الكريم

#6

معذرة أخي لكن الطريقتين التي ذكرتهما تعتمد نفس الأسلوب وهو باقي القسمة ,,, يجب ان تذكر أسلوب اخر -_- -_- !!

هذا قبل ان تنتقل الى نقطة جديدة ,,, إلا اذا أردت ان يكون الموضوع سلطة .

تم تعديل هذه المشاركة بواسطة GamingMasteR في 25 يونيو 2008 في 18:51

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#7

بالنسبة لسؤالي أول ما تكون عندي فكرة بجمال أفكارك سأضعها

و بالنسبة للسؤال الأخير

begin

edit2.Text := copy(edit1.Text,1,2) + ':' +

copy(edit1.Text,3,2) + ':' +

copy(edit1.Text,5,length(edit1.Text)) ;

end;

في حال كانت قيمة الأديت 1 هي 16010 ستكون الأديت 2 16:01:0

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#8

مرحباً

أخي GamingMaster :

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

و أردت أن أذكر طريقتين مختلفتين للاعتماد على باقي القسمة فقط لتوسيع الأفق و المدارك

أخي rober :

يبدو أنني نسيت شيئاً من السؤال إذ أن العدد الذي وضعته هو عبارة عن ثواني اي (16010 ثانية) و عليك أن تحولها إلى تنسيق وقت

و لكن لا بأس و حاول مرةً أخرى

المستبد يتحكم في شؤون الناس بإرادته لا بإرادتهم و يحكمهم بهواه لا بشريعتهم و يعلم من نفسه أنه الغاصب المتعدي فيضع كعب رجله على أفواه الملايين من الناس يسدها عن النطق بالحق و التداعي لمطالبته

#9
007GB كتب:
اذكر طريقتين تعرف بهما إن كان العدد زوجياً أم فردياً.

طريقة أخرى

function Even_Odd(x : integer): string;
begin
  if x < 0 then
	x := -x;
  while x > 0 do
	x := x - 2;
  if x = 0 then
	result := 'even number'
  else
	result := 'odd number';
end;

تم تعديل هذه المشاركة بواسطة djaballah75 في 26 يونيو 2008 في 16:28

من دواعي فلسفة السخط في الطبائع الخيرة أن يكون الإنسان مجبولا على الإحساس بالواجب والشعور باللياقة . ذلك أن الذي يجبل على هذا الخلق يرى الأشياء كما هي كائنة ثم يراها كما يجب أن تكون فلا يلبث أن يجد في كل شيء نقصا ولا يلبث أن يجد في كل شيء باعثا للأسى و الأسف وداعيا إلى النقد والمذمة . فيكون غضبه أكثر من رضاه وحزنه أعم من فرحه ، ويكون إلى التنفير والقول بالتشاؤم أميل منه إلى التبشير والقول بالتفاؤل - العقاد

#10

هناك طريقة أسهل من باقي القسمة وخفيفة جدا على المعالج ::: شغّلوا مخكم ::: جربوا استعمال دوال الـbitwise .

ها قد أعطيت مفتاح للحل :wink: .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#11

طريقة اخرى:

لمعرفة رقم ما هو فردى او زوجى نقوم بمقارنة اول بت فى الرقم, فإذا كان اول رقم يساوى 1 إذاً الرقم فردى وإذا كان يساوى 0 فالرقم زوجى, وذلك بعد تحويل الرقم إلى Binary اي 0 و1

 
procedure TForm1.Edit1Change(Sender: TObject);
var num: integer;
begin
  num:= StrToIntDef(Edit1.Text,0);
  if Iseven(num) then
	Label1.Caption := 'زوجي'
  else
	Label1.Caption := 'فردي'
end;

function TForm1.Iseven(Num:integer):boolean;
var BinNumber:string;
begin
  BinNumber:= IntToBin(num);
  if BinNumber[Length(BinNumber)] = '0' then
	Result:= true
  else
	Result:= false;
end;

function TForm1.IntToBin(d: Longint): string;
var
  x, p: Integer;
  bin: string;
begin
  bin := '';
  for x := 1 to 8 * SizeOf(d) do
  begin
	if Odd(d) then bin := '1' + bin
	else
	  bin := '0' + bin;
	d := d shr 1;
  end;
  Delete(bin, 1, 8 * ((Pos('1', bin) - 1) div 8));
  Result := bin;
end;

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#12
GamingMasteR كتب:
هناك طريقة أسهل من باقي القسمة وخفيفة جدا على المعالج ::: شغّلوا مخكم ::: جربوا استعمال دوال الـbitwise .

ها قد أعطيت مفتاح للحل :wink: .

:lol: :lol:

procedure TForm1.Edit1Change(Sender: TObject);
var num: integer;
begin
  num:= StrToIntDef(Edit1.Text,0);
  if Iseven1(num) then
	Label1.Caption := 'زوجي'
  else
	Label1.Caption := 'فردي'
end;

function TForm1.Iseven(Num:integer):boolean;
var Resl:integer;
begin
  Resl:= num and 1;

  if Resl = 0 then
	Result:= true
  else
	Result:= false;
end;

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#13

طريقة اخرى باستخدام الامر test في لغة التجميع

function TForm1.Iseven2(Num:integer):boolean;
var Resl:integer;
label odd ,even, EndProc;
begin
  asm
	mov eax,Num
	test eax,1
	jnz odd
	jmp even

	odd:
	  mov Resl,1
	  jmp EndProc
	even:
	  mov Resl,0
  end;
  EndProc:
  if Resl = 0 then
	Result:= true
  else
	Result:= false;
end;

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#14

إذا عتبارنا دالة منطقية تعطي القيمة Trueعندما يكون العدد x فرديا فإن العملية هي

Result := x and 1 <> 0;

أما إذا اعتبرنا أنها تعطي True عندما يكون x زوجيا فإن العملية

Result := x and 1 = 0;

تم تعديل هذه المشاركة بواسطة محمد144 في 26 يونيو 2008 في 19:22

#15
function TForm1.IsOdd(Num:integer):Integer;
begin
	  result:=Num and 1;
end;
end.

تم تعديل هذه المشاركة بواسطة GamingMasteR في 26 يونيو 2008 في 19:24

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#16
GamingMasteR كتب:
function TForm1.IsOdd(Num:integer):Integer;
begin
	  result:=Num and 1;
end;
end.

لقد كتبت الحل في مشاركة سابقة هل اطلعت عليه؟ و لكن الدالة التي كتبتها تعيد Boolean و ليس Integer

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#17

نعم هو ماكنت أقصده :)

ممكن اختراع طرق اخرى بالاسمبلي أيضا :P

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#18

if the number is farddi => the first bit (in binari) =1

if the number is zawji => the first bit( in binary) =0

using the assembly instrunction SHL and testing the carry flag,

or with the simplest methode : Number AND $0000 00001

// i have not delphi now in my pc, test please this tow function and tell me the result
function Is_even1(Num:integer):boolean;
 label odd ,even, EndProc;
asm
	shr 	eax,1
	jnc 	even

  odd:
	mov   @result,0
	jmp	  EndProc

  even:
	mov   @result,1
  EndProc:
end;


function Is_even2(Num:integer):boolean;
 label odd ,even, EndProc;
asm
	and 	eax,1
	jnz 	even

  odd:
	mov   @result,0
	jmp	  EndProc

  even:
	mov   @result,1
  EndProc:
end;

تم تعديل هذه المشاركة بواسطة ikossan في 26 يونيو 2008 في 21:49

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#19

يا جماعة لسا في سؤال تاني شو نسيتوه

و لا ماحدش عارف :haha: شو الجواب

إذا كان لديك العدد التالي :

16010

أوجد طريقة تكتبه فيها بتنسيق الوقت

ملاحظة ليس السؤال حكراً علي بل هو لجميع أفراد المنتدى

أريد أن اسأل 007GB هل الناتج هو 04:45:12

تم تعديل هذه المشاركة بواسطة rober في 26 يونيو 2008 في 20:47

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#20

سؤال الوقت هذا غير مفهوم !!

يعني يقصد فقط تحويل 16010 الى 16:0:10 ؟؟ هذه يتم عملها بأحد دوال الفورمات .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#21

أخي الكريم السؤال هو تحويل الثواني 16010 إلى ساعات و دقائق و ثواني

يعني الرقم هو 16010 ثانية نريد تحويله إلى hh:mm:ss

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#22

السلام عليكم...

بالنسبة إلى سؤال الوقت:

var
	ATime: TTime;
begin
	ATime := 16010 / (24 * 60 * 60);
	Edit2.Text := FormatDateTime('hh:nn:ss', ATime);

النتيجة ستكون 04:26:50 أي 4 ساعات و 26 دقيقة و 50 ثانية، و احسبها:

(4 × 60 × 60 = 14400 ثانية) + (26 * 60 = 1560 ثانية) + (50 ثانية) = 16010 ثانية.

و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#23

مرحباً إخواني

أعتدذر عن التأخر في الرد لظروف خاصة

صراحة لقد صعقت للإجابات الكثيرة و التي لم أعرف أين تبدأ و أين تنتهي عن سؤال العدد الزوجي و الفردي

أما بالنسبة للسؤال الثاني فهذه إجابتي

var a,b,c:integer;
begin
a:=16010 div 3600
b:=(16010 mod 3600)div 60
c:=16010 mod 60
self.caption :=a+':'+b+':'+c
end;

و النتيجة ستكون 04:26:50

و لكن الآن لن أطرح سؤالاً جديداً بل يجب على أعضاء أخرين طرح أسئلة جديدة

المستبد يتحكم في شؤون الناس بإرادته لا بإرادتهم و يحكمهم بهواه لا بشريعتهم و يعلم من نفسه أنه الغاصب المتعدي فيضع كعب رجله على أفواه الملايين من الناس يسدها عن النطق بالحق و التداعي لمطالبته

#24

السلام عليكم

و الله موضوع جميل جدا يجعل الشخص يفكر بأكثر من طريقة لحل الأمور

لا أدري إن كان سؤالي مهم لكن أحببت أن أشارك

ما هي أفضل طريقة لحساب النسبة المئوية لرقم مقابل رقم

مثال : نسبة الرقم 2000 بالنسبة للرقم 71950 = 2.78%

بالتوفيق

تم تعديل هذه المشاركة بواسطة rober في 28 يونيو 2008 في 23:57

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#25

هنالك طريقة عامة تحسب من خلالها النسبة المئوية لأي مقدار من أي مقدار

function CalculatePrecentage (FatherNum,SonNum:extended):extended;
begin
result:=(SonNum*100)/FatherNum
end;

و لكن ذلك لا يعني أنها الوحيدة فكما ذكرت هي طريقة عامة و تلاحظون أنها ثقيلة نوعاً ما على المعالج لأنها تقوم بعمليات حسابية على أعداد ضخمة و كبيرة من حيث نوع المتغيير

تم تعديل هذه المشاركة بواسطة 007GB في 29 يونيو 2008 في 17:20

المستبد يتحكم في شؤون الناس بإرادته لا بإرادتهم و يحكمهم بهواه لا بشريعتهم و يعلم من نفسه أنه الغاصب المتعدي فيضع كعب رجله على أفواه الملايين من الناس يسدها عن النطق بالحق و التداعي لمطالبته

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