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

ما الذي ستفعله جملة For هنا ؟

مغلق
بدأه cipher في 3 فبراير 2006 · 19 رد · 2,186 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

هذا الموضوع للتسلية فقط ...

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

سأضع دالتين والسؤال ما الذي سيحصل في جملة For الموجودة داخل الكود ... :D

1

procedure fun1();
var
i:uint;
a:integer;
begin
a:=0;
for i:=0 to a-1 do
Begin
Dosomething();
end;
end;

2

procedure fun2();
var
i:uint;
a:uint;
begin
a:=0;
for i:=0 to a-1 do
Begin
Dosomething();
end;
end;

Dosomething تعني ربما استدعاء دالة او مجموعة من الأوامر ... يعني أي شئ حسب البرنامج

:D

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#2

السلام عليكم أخ سيفر .. الحقيقة فكرة تشغيل المخ بتعجبني كتير :D

أما بالنسبة للحلقتين فأنا أعلم ..

1- أن نوع البيانات uint هو نوع صحيح كبير largeint على ما أذكر :rolleyes:

2- المتحولات بشكل عام تأخذ عند تعريفها قيم عشوائية لا أستطيع تحديدها ..

أظن أن الحلقتين ستنفذان التعليمات عدداً من المرات حتى تنتهي الحلقتين .. لكن لا أعلم عدد مرات التنفيذ .. :unsure:

عماد .. B) B)

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#3

كل مافي الامر ان قيمة المتغير a ستصبح كبيرة جدا بحيث تبلغ اعلى قيمة لمتغيرات من النوع uint وذلك لان الuint اعداد موجبة

وبناء عليه سيتمر عمل الfor الى ان تبلغ قيمة ال i مساوية لقيمة الa

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#4

صحيح موجب unsigned int ..

بس الفكرة بشكل عام تخرج المخ من حالة التجمد .. ما هيك شباب ؟ B)

إجابات فورية على أسئلة تفكيرية ..

عماد .. B) B)

تم تعديل هذه المشاركة بواسطة imadouzoun في 4 فبراير 2006 في 00:55

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#5

وضعت السؤال فقط للتنبيه لمثل هذه الأشياء التي قد نغفل عنها أحياناً

افترض ان لديك برنامج من عدة ملفات وكل ملف فيه مئات السطور وحدث أنك لم تنتبه لمثل هذا الخطأ الجسيم في جملة for كهذه ....

تخيل أنك جئت لتجربة هذا البرنامج وحدثت المصيبة الكبرى واردت أن تعلم ما السبب فيها ؟ :D

تخيل أن جملة for مشابهه كانت في مكتبةdll .... وتخيل انك كنت تستعمل hook في هذه المكتبة ...

كارثة ستحصل ... وستستغرق وقت لمعرفة هذا الخطأ الجسيم ...

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#6

السلام عليكم

شباب لو سمحتو سؤال

اقتباس
كل مافي الامر ان قيمة المتغير a ستصبح كبيرة جدا

كيف ستصبح القيمة كبيرة ؟؟

----------------------------------------------------------------------

010.gif

#7

في الدالة الأولى قيمة a-1 هي -1

في الدالة الثانية تصبح القيمة تساوي 4294967295 بالهسكا FFFFFFFF .

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#8

تسلية :D

شكرا أخي Cipher

ShowMessage(inttostr(integer(-1));
ShowMessage(inttostr(uint(-1)));
d4baa0.gif
#9

هذا هو ماحصل بالضبط كما ذكر الأخ DeltaAziz ...

لكن السطر الأول ناقص قوس ;)

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#10

uint

جديدة علي ... :)

#11

لنكمل التسلية التي بدأ بها Cipher ما رأيكم؟

3

var
  orig: string;
  clone: string;

begin
  orig := 'Borland';
  clone := orig;

  orig[Length(orig)] := 'D';
  WriteLn(orig); 
  WriteLn(clone); 

  ReadLn;
end.

4

var
  i: Integer;

begin
  for i := 1 to 2000 do;
  begin
	WriteLn('arabteam2000!');
  end;
  ReadLn;
end.

5

uses
  SysUtils;

var
  s: string;
  c: PChar;

begin
  s := 'Borland Delphi';
  c := Pointer(s);   


  while c^ <> #0 do
  begin
	Write(c^);
	Inc(c);
  end;

  Readln;
end.

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

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

#12

أين هو السؤال يا وائل :lol:

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

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

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

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

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

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

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#13
اقتباس
أين هو السؤال يا وائل

:D

السؤال ماذا تطبع كل من الجمل السابقة على الشاشة عند تنفيذها؟

هو الواحد بعد ما يخطب بيصير يهلوس :lol: :lol:

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

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

#14
Wael Dalloul كتب:
:D

السؤال ماذا تطبع كل من الجمل السابقة على الشاشة عند تنفيذها؟

هو الواحد بعد ما يخطب بيصير يهلوس :lol: :lol:

هل أصبحت تخطب الآن يا وائل؟ في مهرجانات خطابية, تصبح برلماني إن شاء الله ثم رئيس حزب ثم رئيس دولة :lol: .

الكود 3:

BorlanD

لأن String في دلفي تستعمل بطريقة مغايرة ل String[] الباسكال, فهي مصفوفة من نوع خاص تضم reference و length و char #0 لتتوافق مع كل من string الباسكال و string لغة C++.

الكود4:

ستكتب 'arabteam2000!' مرة واحدة بعد مرور تأخير 2000 مرة للحلقة for التي لا تعمل هنا إلا دور Delay لكن وفق سرعة الحاسب التي تعمل عليه.

الكود5:

'XXBorland Delphi' حيث XX= char(lenght(str)

:D يارب تجي سليمة ههههههههه و منكونش أنا اللي بهلوس

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

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

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

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

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

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

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#15

3-

BorlanD

Borland

يبدوا انك نسيت الجملة الثانية

تحليل منطقي و هذه هي الفكرة التي كنت اريد ان اوصلها

4-

يعني انتبهت لها و لم تفتك

الفاصلة المنقوطة هي السبب:D

5-

ما زبطت معك:D

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

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

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

#16

أن لم أجب صح إلا على النقطة 4 :D

أما الباقي فيكمن الإستفادة من هذا المثال عند التنفيذ:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,Windows;

var
  orig: string;
  clone: string;
  s: string;
  c: PChar;


begin
  orig := 'Borland';
  clone := orig;
  Writeln('_____ befor modification _______');

  Writeln('Adress of Orig is:'#9+'$'+ IntToHex(integer(orig),8));
  Writeln('Adress of Clone is:'#9+'$'+ IntToHex(integer(clone),8));

  Writeln('Adress of pointer of Orig is:'#9+'$'+ IntToHex(integer(@orig),8));
  Writeln('Adress of pointer of clone is:'#9+'$'+ IntToHex(integer(@clone),8));
  Writeln;
  WriteLn('Orig :='+orig);
  WriteLn('clone :='+clone);
  Writeln;
  Writeln;


  orig[Length(orig)] := 'D';

  Writeln('_____ After modification _______');
  Writeln('Adress of Orig is:'#9+'$'+ IntToHex(integer(orig),8));
  Writeln('Adress of Clone is:'#9+'$'+ IntToHex(integer(clone),8));

  Writeln('Adress of pointer of Orig is:'#9+'$'+ IntToHex(integer(@orig),8));
  Writeln('Adress of pointer of clone is:'#9+'$'+ IntToHex(integer(@clone),8));
  Writeln;
  WriteLn('Orig :='+orig);
  WriteLn('clone :='+clone);
  Writeln;
  Writeln;

  s := 'Borland Delphi';
  c:= pointer(s);

  Writeln('Adress of S is:'#9+'$'+ IntToHex(integer(S),8));
  Writeln('Adress of pointer of S is:'#9+'$'+ IntToHex(integer(@S),8));

  writeln('The refference on S:='#9'0x'+ IntToHex(pdword(C-8)^,4));
  writeln('The Lenght of S:='#9'0x'+ IntToHex(pdword(c-4)^,4));
  orig:= s;
  writeln('The refference on S:='#9'0x'+ IntToHex(pdword(C-8)^,4));
  clone:= s;
  writeln('The refference on S:='#9'0x'+ IntToHex(pdword(C-8)^,4));


  while c^ <> #0 do
  begin
    Write('0x'+IntToHex(integer(c^),2)+' ');  Write(c^+' ');
    Inc©;
  end;
  Writeln;

  ReadLn;
end.

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

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

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

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

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

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

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#17

بالنسبة لل 3:

الفكرة هي ان Delphi عندما نقوم باسناد متحول string الى اخر فانه لا يتم نسخ كامل ال string في الذاكرة و انما فقط تتم الاشارة اليه

و لكن عندما نعدل على احد ال string هنا يحصل عملية نسخ فعلي لل string

اقتباس
يبدوا انك نسيت الجملة الثانية

تحليل منطقي و هذه هي الفكرة التي كنت اريد ان اوصلها

يبدوا انني نسيت ما هو المغزى من هذا المثال :D , وهذه هي الفكرة من وضع هذا الكود

و هي ميزة جميلة توفر مساحة في الذاكرة.

بالنسبة لل 5:

كيف استنتجت انه سوف يتم اضافة

char(lenght(str))

الى بداية ال string.

لم افهم ما الذي جعلك تفكر هكذا.

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

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

#18

في المثال الخامس كمنت أظن أن string يتم حجزها في الذاكرة وفق هذه الخريطة:

reference(word) + lenght(word) + characters of string + NulTerminate cahr

على أن المؤشرالسلسلة المحرفية يبدأ من lenght ك قيمة index=0.

لكنني كنت مخطئ فالخارطة في الذاكرة ستكون على هذا الشكل:

lenght(word) + reference(word) + characters of string + NulTerminate cahr

والمؤشر 0 يبدأ مباشرة من أول حرف للسلسلة. و lenght سيكون مؤشره هو -4 و reference مؤشرها هي -2....

var
  str: string;
  c: PChar;
  i: integer;
begin
  str := 'Borland Delphi';
  c:= pointer(str);
  Writeln('___________________________________________________________________');
  Writeln('Adress'#9#9#9'Index'#9#9'HexData'#9#9'DataChar');
  Writeln('___________________________________________________________________');
  for I := -4 to Length(str) do
	begin
	  write('0x'+IntToHex(Dword(C+i),8)+#9#9);
	  write(i,#9#9);
	  write(IntToHex(pbyte(C+i)^,4)+#9#9);
	  writeln(char((C+i)^)+#9#9);
	end;
  Writeln('___________________________________________________________________');
  Writeln;
  Writeln('str= Str''lenght(word) + Reference( word) + Str''Body + Nul Terminate Char #0');
  ReadLn;
end.

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

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

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

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

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

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

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#19
اقتباس
لكنني كنت مخطئ فالخارطة في الذاكرة ستكون على هذا الشكل:

lenght(word) + reference(word) + characters of string + NulTerminate cahr

والمؤشر 0 يبدأ مباشرة من أول حرف للسلسلة. و lenght سيكون مؤشره هو -4 و reference مؤشرها هي -2....

بالنسبة للهيكلية التي يكون عليها ال string فعلى ما اظن انها ليست ثابتة و تتغير من نسخة لاخرى. كما انه لا يجب الاعتماد على البنية الداخلية لل string في البرمجة لانه ليست ثابتة.على ما اظن حصل مثل هذه المشكلة عند الانتقال من delphi1 الى delphi2

ايضا: سبب وجود ال null terminate char في اخر ال string فقط للتوافقية مع انماط Nullterminated string مثل Pchar,Pwidechar,,

مثلا لاستدعاء API function يتطلب PChar-type فقط نحتاج لعمل typecast لل string as a PChar.

طالما انه لدينا طول ال string مخزن قبل الاحرف الفعلية فمن خلاله يكفيك لمعرفة طول ال string و لا حاجة لل Null terminate char

اذا عدنا الى الكود الثالث:

عند اسناد string الى اخر فقط يتم نسخ ال 4 byte التي في البداية و يكون المؤشر الى ال string الاخر

هناك المزيد, هل اكمل ام اتوقف, لانه يبدوا انا الناس نيام :(

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

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

#20

ولا نيام ولا حاجه احنا ننتظر الأشياء الصعبه بس نحاول فيها :lol:

كمــل ياوائل لو سمحــت :)

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

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