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

طلب شرح stack

بدأه abram في 30 أبريل 2004 · 8 رد · 8,975 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

ممكن واحد منكم يفهمني ايش هو المسجل stack وايش فائدته

كيف يمكن ان تتحكم لغة ال c++ في الاجهزة وفي المعالج

ممكن شرح للدوال الموجودة في ملف math.h

أي كيف صنعت هذه الدوال لا كيف تستعمل

وشكرا للجميع

وللذين سيجيبون على موضوعي

==

thanx for ur time

==

#2

السلام عليكم ,,

ماشاء الله امتحان نهائي بس :) " بمزح "

اقتباس
ممكن واحد منكم يفهمني ايش هو المسجل stack وايش فائدته

ال Stack في الأصل احدى تقنيات ال data Structure ولم تصنع في الأصل الا لأن لها استخدام مخصص في مجال مخصص ,,

مثلا يستخدم في أنظمة التشغيل وخاصة في البرامج حيث يكون دائما في حيز مساحة عناوين البرامج العاملة وهو افتراضيا لبرامج الوندوز ال 32 بت عبارة عن 1 ميجابايت ,, ويمكن تغيرها كما تريد ,,

كل المتغيرات التي تعرفها في برنامج التي تبرمجه تكون موجودة في ال Stack الخاص بالبرنامج ,,

ماعدا المتغيرات الديناميكية المحجوزة ديناميكيا أي المؤشرات في السي++ ,, فهي موجودة في الذاكرة التكويمية ,, Heap ,,

اقتباس
كيف يمكن ان تتحكم لغة ال c++ في الاجهزة وفي المعالج

التحكم في الأجهزة في نظام التشغيل وندوز مثلا يفضل أصحاب الأجهزة تطوير المشغلات الخاصة بها بلغة السي++ وكانت في أنظمة ال 9x بامتداد Vxd ,, في أنمة ال NT و ال 2000 عبارة عن ملفات sys ,,

ويوجد طقم تطوير خاص ببرمجة ال Device Drivers حاليا وهو DDK ,,

أما اذا كنت تقصد التحكم بالأجهزة التي توصل خارجيا بالكمبيوتر سواء بمنفذ Com أو ب USB أو غيره ,, فيمكنك أن تستخدم ال Device Drivers أو أن تراجع الرابط المثبت في قسم السي++ على الرابط :

/index.php?showtopic=39668

وبه رابط خاص بكيفية التحكم بجهاز موصل بالكمبيوتر بلغة السي++ ,,

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

اقتباس
ممكن شرح للدوال الموجودة في ملف math.h

Microsoft فقط هي التي تجرأت وفعلت شيئا كهذا ,, ادخل على ال MSDN في موقع مايكروسفت وستموت كمدا وأنت تقرا في كل هذه الدوال :)

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

وهكذا مثلا الدال sqrt خاص بايجاد الجذر التربيعي ,, واحتساب الجذر التربيعي يتم حسابه باستخدام خوارزمية ,, وتوجد عدة خوارزميات,, فمثلا أذكر خوارزمية التنصيف ,, تمكنك من احتساب أي عدد واقع في مجال معين وبالتجربة والخطأ تعرف العدد المطلوب ,,

مثلا لاحتساب جذر 5 نعرف أن جذر 5 أكبر من جذر ال 4 فنقوم بعمل نجربة 2 أس 2 فنجد أن ال 5 أكبر ,, ثم نجرب 2.5 في 2.5 فنجد أن 5 أصغر ,, فنجرب 2.25 في 2.25 وهكذا بعد عدة محاولات حتى نعرف العدد المطلوب ,,

بالطبع الكمبيوتر يحب الاعداد المعقدة فسيقوم بايجاد النتيجة بسرعة كبيرة جدا ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#3
اقتباس
ممكن واحد منكم يفهمني ايش هو المسجل stack وايش فائدته

الstack في الأصل هي بنية بيانات تشبه المصفوفة array ولكن ولكن تشترط أن آخر العناصر إدخالا هو أولها إخراجا، أي عكس بنية صفوف الانتظار (أول العناصر دخولا هو أولها خروجا)

من أشهر استعمالاته:

1- في لغة الأسمبلي:

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

كل سطر في البرنامج له رقم يعرف بالip- instruction pointer يزيد بحسب حجم الأمر، فعند استدعاء برنامج فرعي procedure يتم وضع رقم الip في العنوان الموجود في مسجل الstack وزيادة القيمة الموجودة فيه بمقدار 2 بايت ليمثل قمة الstack الجديدة.

وعند الرجوع من الإجراء فقط يتم إنقاص عنوان قمة الstack الموجود في مسجل الstatck بمقدار 2 بايت.

2- تصميم مترجمات اللغات:

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

تتكون مترجمات اللغات من مرحلتين أساسيتين: front end والback end

الfront end تختص بالشفرة المصدرية التي نستطيع فهمها (سي++، باسكال وخلافه)

الback end تختص بالشفرة الوسيطة أو النهائية (لا نستطيع فهمها بسرعة )

الfront end تتكون من ثلاث مراحل :

1-lexical analyzer وهو يقوم بقراءة الحروف حرفا حرفا من وسيلة الإدخال من أقصى اليسار إلى أقصى اليمين ومن الأعلى للآسفل ،ومن ثم تجميعها في شكل token أو بمعنى آخر اعتبره أرقاما، 1يمثل +، 2يمثل -، 11 يمثل متغير ، 13 يمثل أحد الكلمات المحجوزة في اللغة، وهلم جرا.

2-syntax analyzer ويدلعونه باسم parser يقوم بتحليل الtokens المستلمة من الlexical وتكوين شجرة الإعراب منها parse tree ، وهي المرحلة التي تحتاج إلى الstack بصورة شديدة، وتوجد عدة خوارزميات لهذه المرحلة: SLR, LR1, LALR1, LL1 وغيرها، وكلها تشترك في احتياجها لstack وتختلف في طريقة قراءتها للtokens وتخزينها في الstack.

باختصار شديد: للجملة 1+2*3

تقرأ 1، تضعه في ال stack تقرأ +، تضعه في الstack تقرأ 2 ، الآن لدينا خيارين: قراءة * أم ضم 1+2 , ووضعه بصورة مختصرة حسب النحو grammar الخاص باللغة، مثلا: F ==> a+b

نعرف من قواعد الجبر أن الضرب يسبق الجمع ، لذا نقرأ * ومن ثم 3، ومن ثم نختصر 3*2 ,ومن ثم نختصر حاصل 3*2 مع +1 ، لاحظ آخر ما دخل هو 3 ، وهو أول خارج، وأول ما دخل هو 1 وهو أول خارج،

كما تشترط هذه الخوارزميات لصحة العبارة خلو الstack عند انتهاء العبارة أو وجود قيمة معينة في أسفله.

3- code generator ويقوم بتوليد الكود الوسيط (أعلى من لغة الآلة وأقل من اللغة العليا) من شجرة الإعراب المستلمة من الparser.

فكر بطريقة أخرى

#4
اقتباس
ممكن شرح للدوال الموجودة في ملف math.h

لفهم كيفية عمل هذه الدوال تحتاج لفهم الطرق العددية numerical methods،

انظر:

http://www.google.com/search?q=numerical+m...UTF-8&hl=ar&lr=

http://dir.yahoo.com/Science/Mathematics/Numerical_Analysis/

فكر بطريقة أخرى

#5
اقتباس
يتم حسابه باستخدام خوارزميه

اخوي انا لي فتره وانا اسأل كيف ممكن نسوي برنامج يحسب الجذر التربيعي

ممكن تفصل شوي واذا كان عندك البرنامج تكفا ارفقه

وشكرا.....

واسف على الخشه ..

#6

السلام عليكم ,,

ولا يهمك ياأبو عبد الله :)

الطريقة كالتالي :

نفرض أن تريد جذر ال 7 مثلا ,,

عنده يجب أن توسط العدد 7 بين عددين تعرف جذريهما مثلا ال 4 وال 9 ,,

ستعرف جذريهما طبعا بعد أن تجرب تربيعهما ,, يعني ستجرب تربيع 2 = 4 ,, وتجرب تربيع ال 3 = 9,,

وبهذا بالتأكيد جذر ال 7 بين ال 2 وال 3 ,, صح ؟

طيب بعدها تفرض أن جذر 7 بين ال 2 وال 2.5 وتجرب تربيع ال 2.5 ستجد أنه 6.25 بهذا فان جذر السبعة سيكون بين ال 2.5 وال 3 ,, وليس ال 2 وال 2.5 صح ؟

ثم أقسم الفترة بين ال 2.5 وال 3 الى 2.5 وال 2.75 ,, وأجرب تربيعهما ,, حتى في النهاية بعد عدة محاولات أصل لفترة ضيقة جدا تكون نسبة الخطأ فيها أنا الذي أحددها ربما تكون مثلا واحد من مليون عندها أتوقف عن البحث وأعتبر العدد الموجود هو المطلوب ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#7
اقتباس
نفرض أن تريد جذر ال 7 مثلا ,,

عنده يجب أن توسط العدد 7 بين عددين تعرف جذريهما مثلا ال 4 وال 9 ,,

ستعرف جذريهما طبعا بعد أن تجرب تربيعهما ,, يعني ستجرب تربيع 2 = 4 ,, وتجرب تربيع ال 3 = 9,,

وبهذا بالتأكيد جذر ال 7 بين ال 2 وال 3 ,, صح ؟

طيب بعدها تفرض أن جذر 7 بين ال 2 وال 2.5 وتجرب تربيع ال 2.5 ستجد أنه 6.25 بهذا فان جذر السبعة سيكون بين ال 2.5 وال 3 ,, وليس ال 2 وال 2.5 صح ؟

ثم أقسم الفترة بين ال 2.5 وال 3 الى 2.5 وال 2.75 ,, وأجرب تربيعهما ,, حتى في النهاية بعد عدة محاولات أصل لفترة ضيقة جدا تكون نسبة الخطأ فيها أنا الذي أحددها ربما تكون مثلا واحد من مليون عندها أتوقف عن البحث وأعتبر العدد الموجود هو المطلوب ,,

تشبه إلى حدا كبير نظرية القيم المتوسطة و "طريقة المسح". :lol:

infected.png

مدونة علوم الحاسب

#8
اقتباس
ممكن واحد منكم يفهمني ايش هو المسجل stack وايش فائدته

الـ stack عبارة عن مصفوفة تدخليلها قيم و ترجعلك القيم دى على شكل last input first output

يعنى اول قيمة انتى كتبتيها بتكون اخر قيمة تظهرلك ,,, على عكس الـ queue لانها تعرض القيم على شكل first input first output

اقتباس
كيف يمكن ان تتحكم لغة ال C++ في الاجهزة وفي المعالج

ممكن شرح للدوال الموجودة في ملف math.h

الطلبين دول بيتعملوا ببرمجة اسمها الكومبايلر compiler ,, طبعا مش الكومبايلر اللى يظهرلنا الاخطاء اللى فى برنامجنا لكن مادة تانية اسمها بردو كومبايلر

دول اللى تقدرى بيهم تتعاملى مع المعالج و تعملى مكتبات خاصة بيكى انتى + تعرضيها فى برامجكـ

ارجو انى اكون قدرت افيدكـ ان شاء الله

بالتوفيق اختى الغالية

#9
اقتباس
كيف يمكن ان تتحكم لغة ال C++ في الاجهزة وفي المعالج

ادا كنت تعمل في وندوز فان دوال النظام تكفيك

اما ادا كنت تكتب نظام تشغيل فان الامر يتحول الى حقن مباشر للمعلومات داخل الداكرة عن طريق المؤشرات

مثال رسم مباشر داخل بطاقة الرسوميات باستخدام VGA mode 13h

typedef unsigned char byte;
byte far *VGA = (byte far*)0xA0000000L;	 
unsigned short offset;
...
offset = 320*y + x;
VGA[offset] = color;

تم تعديل هذه المشاركة بواسطة fkugd2003 في 1 يناير 2009 في 22:43

العمل كثير و الوقت قليل أعاننا الله

seo zen SEO Enlightment amazon danbo

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