Translate

الاثنين، 12 يونيو 2023

مكتبة لغات البرمجة وبرمجة سي ++ .

مكتبة لغات البرمجة/مقدمة 
« مكتبة لغات البرمجة
مقدمة »
المحتويات برمجة كائنية التوجه

محتويات 1 مقدمة
2 ما هو البرنامج؟
3 ما هي البرمجة؟
4 مبادئ البرمجة
5 البرامج والنظم
6 المتحولات والثوابت
مقدمة
البرمجة هي عملية كتابة الأوامر لتعمل على حاسوب ما بلغة ما يستطيع البشر التعامل معها ، ويقوم الحاسوب بترجمتها للصيغة التي يستطيع أن ينفذها. يمكن الخوض في مجال البرمجة من عدّة نواحي، إحداها الدخول من باب لغات البرمجة ، ومنها: برمجة كائنية التوجه
برمجة وظيفية
ما هو البرنامج؟
البرنامج هو مجموعة من الخطوات المحددة والمرتبة والتي تقوم بوظيفة معينة.
إذن سمات البرنامج: خطوات محددة: إذ يجب تحديد الخطوات بدقة
خطوات مرتبة: الترتيب هو من أهم سمات البرنامج إذ قد تتغير وظيفة البرنامج بتغير الترتيب، أو قد لا يقوم البرنامج بوظيفته في حال تغير ترتيب خطواته.
الوظيفة: لكل برنامج وظيفة محددة، مثلا: القيام بعملية حسابية ما، أو نسخ مجموعة من الملفات من مكان إلى آخر.
مثال: البرنامج اليومي للذهاب إلى المدرسة الاستيقاظ
الغسيل
ارتداء الملابس
استقلال الحافلة
الوصول إلى الجامعة
نلاحظ من السابق أنه تلزمنا خمس خطوات للذهاب إلى المدرسة
كما أن الخطوات الخمسة السابقة كافية تماما لأداء الوظيفة المطلوبة وهي الوصول إلى المدرسة
وأيضا، لا نستطيع تغيير ترتيب الخطوات السابقة وإلا سنحصل على تنائج غير متوقعة، فمثلا لا نستطيع استقلال الحافلة قبل ارتداء الملابس
ما هي البرمجة؟
البرمجة هي محاولة إيجاد الخطوات اللازمة لحل مسألة ما أو القيام بوظيفة ما.
ومن ثم تطبيق هذا الحل وكتابته بأحد لغات البرمجة، وتلقيمه إلى الحاسوب وتنفيذه.
إذن: الحل.
تطبيق الحل بأحد لغات البرمجة.
تلقيم الحل وتنفيذه على الحاسوب.
سنقتصر في هذا الموضوع على التعرف إلى تقنيات الحل، أما التطبيق والتنفيذ فنأتي إلى ذكر لمحة بالفصول الأخيرة، وستكون لها مواضيع منفصلة.
مبادئ البرمجة
قبل البدء بتعلم أي من لغات البرمجة، أو الدخول إلى عالم البرمجة والخوارزميات، من الضروري جدا التعرف على مبادئ البرمجة بشكل مجرد ومستقل عن لغات البرمجة. مبادئ البرمجة هي عرض للأدوات المنطقية التي تم تطويرها واستخدامها في لغات البرمجة، حيث تشترك معظم أو جميع لغات البرمجة في هذه الأدوات ولكن تقوم كل لغة بالتعبير عن هذه الأدوات بطريقتها الخاصة. هذه الأدوات عموما صممت وطورت لتكون البنية الأساسية للغات متوسطة وعالية المستوى. في مادة مبادئ البرمجة يتم التعرف على لبنات بناء البرنامج والتحليل المنطقي للمسائل وتجزئتها ومحاولة تمثيل كل جزء بما يقابله من الأدوات البرمجية المتاحة.
إذا كنت في بداية الطريق لعلوم الكمبيوتر بشكل عام، والبرمجة بشكل خاص؛
إذا كنت طالبا مستجدا في جامعة تقنية أو معهد تقني؛
إذا كنت تريد التعرف على مفاهيم البرمجة دون التعمق بلغات البرمجة؛
فهذا هو المكان المناسب لتبدأ منه
البرامج والنظم
لنعد إلى التعريف السابق للبرنامج، والذي يتضمن فكرة الوظيفية، أي: البرنامج يجب أن يقوم بوظيفة معينة.
لنقم بطرح مثال آخر:
المتحولات والثوابت
طلب أحدهم معرفة كيفية حساب محيط دائرة. لنجيب على سؤاله نحتاج إلى معرفة نصف قطر الدائرة التي يريد حساب محيطها، ومن ثم تطبيق الدستور المعروف: C=2πr
حيث نبدل قيمة π بالرقم 3.14159 ونبدل r بقيمة نصف القطر ومنه إذا كان نصف قطر الدائرة المطلوب حساب محيطها هو 2 يكون المحيط 12.56636
بالعودة إلى الدستور السابق نلاحظ وجود ثلاث مكونات لحساب المحيط وهي: 2، π، r وإن كلا من 2 و π قمتهما محددة مسبقا وعلى أحدهم تحديد قيمة نصف القطر r لنتمكن من حساب المحيط سنطلق على كل من 2 و π اسم ثوابت أما r فهو متحول إذن، الثابت هو تعبير ذو قيمة ثابتة لا تتغير ومن ذلك الثوابت الرياضية والأرقام وأما المتحول هو تعبير يأخذ قيم متعددة تتغير حسب السياق، مثلا إذا أردنا حساب محيط دائرة نصف قطرها 7 عندئذ تكون قيمة r في الدستور السابق مساوية ل 7
=====

برمجة سي ++


لغة سي ++
وصف شامل وهرمي للغة البرمجة سي ++ 

إن لغة البرمجة سي++ (++C) هي واحدة من أكثر لغات البرمجة استخدامًا و أوسعها إنتشارًا بالإضافة إلى جدتها لغة البرمجة سي. تعتبر لغة سي++ من لغات البرمجة الكائنية التوجه (Object-Oriented programming)، وإن كان من الممكن استخدامها بشكل بنيوي (Structural) أو كمزيج من الإثنين.
جزء كبير من لغة سي++ تعتبر من لغات البرمجة عالية المستوى. ولغات البرمجة عالية المستوى هي اللغات التي ظهرت لتسريع عملية البرمجة حيث أن تعليماتها أقرب ماتكون إلى لغة الإنسان وهذا ما يجعل عملية البرمجة أكثر سرعةً وسهولةً. تسهّل لغة سي++ الأسلوب المهيكل والمنهجي لعملية تصميم البرامج، حيث تتألّف برامج هذه اللغة من مكونات تسمّى الأصناف (classes) والدوال (functions) وبالتالي يمكن تقسيم عمليّة تعلّم لغة سي++ إلى قسمين: يعتمد الأول منها على تعلّم لغة سي++ نفسها، في حين يسمح الثاني بتعلّم كيفية استخدام الأصناف الملحقة بهذه اللّغة واستخدام التوابع الموجودة ضمن المكتبة المعياريّة ANSI C.
ماذا تحتاج للبدء ؟تحتاج مصرّف (compiler) (مترجم يقوم بتحويل ما تكتبه إلى لغة الآلة التي يفهمها المعالج)، ورابط (linker)، ومحرر نصوص. بعض بيئات التحرير توفر هذه الثلاث. لاختيار أحد بيئات التطوير المتكاملة، يمكنك رؤية المقارنة بينها على هذه الصفحة في ويكيبيديا الإنجليزية. وفي ما يلي بعض الإقتراحات :
فيجوال سي ++ (++Visual C)، من شركة ميكروسوفت، وهو مغلق المصدر وغير مجاني.
برنامج (Intel® C++ Compiler 9.1)، مغلق المصدر ومجاني لمدّة معينة. للتحميل
بيئة (Quincy 2005) الذي يأتي مع مصرّف gcc وأدوات أخرى حرّة. للتحميل
استخدام برامج حزمة مينجوي، تعمل من سطر أوامر دوس (DOS) بشكل عام وتستخدم مصرّف (gcc) وأدوات أخرى مرافقة. للتحميل
استخدام بيئة إكليبس (Eclipse CDT)، و هي مجانية ومفتوحة المصدر. للتحميل.
برنامج Dev C++ ، وهو مجاني ومفتوح المصدر.
برنامج Code Blocks ، وهو مجاني ومفتوح المصدر.للتحميل.
قائمة الموضوعات و الدروس

ملاحظة: يحتوي كل موضوع على شرح مبسط لفكرة و هدف الدرس، الغرض من هذا الشرح هو تنظيم كتابة الدروس و المحافظة على تسلسلها بشكل منطقي. من الممكن - بعد الانتهاء من الكتاب - اختصار هذه الشروح الصغيرة بشكل أكبر بحيث لا تزيد عن خمس كلمات.
مقدمة في البرمجة التفكير في كيفية عمل الأشياء، إيجاد حلول للمشاكل، الخ
الدرس الأول البرنامج الأول(الفارغ)، شرح مفاهيم أساسية: نقطة الدخول إلى البرنامج، نقطة الخروج، لماذا الـ main؟ فكرة عامة عن تقسيم البرامج الكبيرة إلى أجزاء صغيرة (برامج جزئية).
الدرس الثاني الكتابة على الشاشة، العمليات الأساسية، الجمع و الطرح، المتغيرات، الثوابت (litteral constants).
الدرس الثالث القراءة من المستخدم، تابع العمليات الرياضية و الاشارات في اللغة
الدرس الرابع السير المنطقي للبرنامج، الأوامر الشرطية، الاشارات الشرطية، و منطقها
الدرس الخامس تمارين، حل مشكلات بسيطة، أمثلة للتفكير البرمجي، التركيز على عقلية التحليل .. الخ.
الدرس السادس الدوال (functions)، تقسيم البرنامج إلى برامج جزئية (حسب المهام)، إرسال الإعدادات (parameters) الخ.
الدرس السابع تابع الدوال (functions)، مفهوم الـ expression و الـ return value، استخدام الدوال (functions) كعمليات حسابية، نطاق المتغيرات scope الخ.
الدرس الثامن استخدام الدوال (functions) لتحسين بنية و تركيب البرامج، تحسين برامجنا السابقة.
الدرس التاسع تطبيقات و تمارين، مزيد من المشاكل و حلولها
الدرس العاشر المصفوفات (arrays)، مفهوم الـ initialization بشكل عام، و تطبيقه على المصفوفات و بيان حالاته الاستثنائية.
الدرس الحادي عشر مفاهيم عامة عن الذاكرة، طبيعة المصفوفات في الذاكرة، مقدمة عن المؤشرات.
الدرس الثاني عشر استخدام المصفوفات في البرامج، التفكير في استخدامها، فوائدها، تطبيقات، الخ.
الدرس الثالث عشر مقدمة عن المؤشرات: مفهوم الـ statically allocated و الـ dynamically allocated بالنسبة للمتغيرات، الكومبايلر و أسماء المتغيرات و عناوينها في الذاكرة، استخدام المؤشرات للوصول إلى المتغيرات اللتي تم حجزها ديناميكيا.
الدرس الرابع عشر تطبيق على المؤشرات: إرسال عناوين المتغيرات إلى الدوال (functions)، مع تركيز على شرح الستاك و توضيح عدم جواز إرجاع مؤشر لمتغير داخلي في فنكشن، مع مقدمة عن الرفرنس في السي بلص بلص.
الدرس الخامس عشر الـ struct، تجميع معلومات متعلقة ببعضها، تمثيل حالة كائنات حقيقية، الخ.
الدرس السادس عشر تطبيقات عملية على الـ struct
الدرس السابع عشر استخدام الـ struct و المؤشرات لعمل linked list. نقاط القوة الضعف في الـ linked list و متى يمكن استخدامها، مع تطبيق بسيط.
الدرس الثامن عشر الأقسام (class)، توضيح عام من ناحية لغوية، الـ syntax الخاص بالأقسام الخ.
الدرس التاسع عشر البرمجة الشيئية / الكانئية، الكائنات objects، مفاهيم متعمقة .. تحليل المشكلة إلى أشياء وكائنات، الخصائص والتصرفات، attrbutes and behaviour .. الخ.
الدرس العشرون تابع مفاهيم متعمقة عن البرمحة الشيئية.. تصميم الحلول باستخدام الكائنات، ذكر بسيط لقضايا الـ cohesion and coupling، مع تطبيقات عملية، و لو بسيطة.
الدرس الحادي و العشرون مناقشة مواضيع الـ cohesion، coupling،1235 association: التفكير جيدا في تصميم الفئات بشكل جيد ومتماسك، فصل المهام الزائدة عن الـ class إلى فئات classes أخرى، الربط بين الكائنات، تقليل التداخل coupling.
الدرس الثاني و العشرون الوراثة (inheritance)، مع تطبيقات.
الدرس الثالث و العشرون الـ (polymorphism).
الدرس الرابع و العشرون تطبيقات عملية تستخدم المفاهيم اللتي تمت مناقشتها، مع التقديم لبعض الـ (design patterns)، كالـ (singleton) مثلا.
=======

برمجة سي ++/الدرس الثاني

< برمجة سي ++


« لغة سي ++
الدرس الثاني »
الدرس الأول الدرس الثالث

محتويات 1 الكتابة على الشاشة 1.1 مثال
2 المتغيرات 2.1 العدد الصحيح int 2.1.1 مثال
2.2 الحروف char
2.3 الأعداد الكسرية Floating-point types
3 الثوابت 3.1 ما فائدة الثوابت؟
3.2 بماذا تختلف const عن define#؟
4 العمليات الأساسية 4.1 عمليات مقارنة القيم 4.1.1 >
4.1.2 <
4.1.3 ==
4.2 ++/--
4.3 |
الكتابة على الشاشة
إن الأوامر الأكثر إنتشارا للكتابة على الشاشة هي أمر cout ، وهو عبارة عن stream ، والأمر موجود ضمن مكتبة iostream ، والتي من اسمها والذي يعني Input Output Stream ، أي تيار المدخلات والمخرجات المستمر.
مثال

#include <iostream> using namespace std; int main() { cout << "Hello World!\n"; // طباعة جملة Hello World على الشاشة }
كتابه برنامج اولي مثل

#include<conio.h> #include<stdio.h> main() { printf("my first program"); getch(); }

المتغيرات
تستخدم المتغيرات لتخزين القيم. وبشكل أكثر تقنية، المتغير يربط بين شيء (بالمعنى العام، أي قيمة معينة، رقم أو حرف أو غيره) واسم يميزه (اسم المتغير) بحيث يمكن الوصول لهذا "الشيء" أو القيمة لاحقا، فيمكن وصفه أنه "تسمية" للأشياء لتسهيل الوصول إليها.
طبعا في الحاسوب، يتم التعامل مع "الأشياء" بقيمها الرقمية، التي يمكن تحويلها لاحقا في سياق البرنامج إلى خصائص وقيم تبدو للبشر غير عددية، مثل الألوان والأحرف وغيرها.
تستخدم لغة سي وسي بلس بلس مجموعة من أنواع المتغيرات المعرفة مسبقا للتسهيل على المبرمجين، وتشتمل هذه الأنواع على:
العدد الصحيح int
العدد الصحيح، والذي يتم تعريفه باستخدام int والتي هي اختصار لكلمة integer هو نوع من المتغيرات الذي يمكنه أن يحمل قيمة عدد صحيح ، قد يكون سالبا وقد يكون موجبا، وهو محدود بـ 16 أو 32 بت. وبشكل إفتراضي ، فإن المتغيرات من نوع int يمكن أن تحمل قيم سالبة وموجبة، وفي حال أردت أن يتم استخدام القيم الموجبة فقط يمكن إضافة كلمة unsigned، فإن ذلك سيزيد آخر قيمة موجبة يمكن تخزينها إلى الضعف.
مثال

int x; unsigned int y; long int z; int w=5,a,b;

هنا يمكنك أن تلاحظ الإعلان عن متغير من نوع int اسمه x في السطر الأول، ثم متغير آخر من نوع int ولكنه غير حامل لإشارة ، وبالتالي لا يحمل إلا قيم موجبة وذلك في السطر الثاني، وفي السطر الثالث يتم الإعلان عن متغير اسمه z ومن نوع long int، أي عدد صحيح مكون من 32 بت على الأقل، وفي السطر الأخير تلاحظ الإعلان عن ثلاثة متغيرات من نوع int، الأول هو w وتم إرساء القيمة 5 له، وتبعه على ذات السطر إعلن عن متغيران آخران هما a و b.
الحروف char
الحروف يتم تعريفها باستخدام النوع char والذي هو اختصار لكلمة character، وهو يحمل قيمة رقم معين بين 0 و 255 بحيث يعني كل رقم من هذه الأرقام حرفا معينا، وتسمى القيم من 0 إلى 127 بقيم ASCII. وبحسب التعريف ، فإن char يحمل قيما عددية صحيحة، مما يسمح باستخدامه لتخزين الأرقام التي دون 255، ولكن ذلك يعني أيضا بأن قيمه قد تكون سالبة أو موجبة، ولتأكيد كونها سالبة أو موجبة ، أضف كلمة signed أو unsigned إلى جانب إعلانك عن متغير من نوع char.
الأعداد الكسرية Floating-point types
عندما نحتاج لتخزين عدد غير صحيح، أي عدد كسري، فإننا نستخدم الأنواع float و double و long double. وهي أنواع لا تختلف إلا في مدى دقة تخزينها للقيم والحدود القصوى للقيم التي يمكن تخزينها فيها. ف float بشكل عام يتكون من 32 بت، و double من 64 بت. و long double قد يكون أكبر من ذلك، ولكنه قد يكون بذات طول double.
وهناك نوع خاص آخر يسمى void. وفي الحقيقة لا يسمح لك باستخدام متغيرات من نوع void . ولكن هناك استخدامات عديدة ل void، منها تمكين دالة ما من عدم إرجاع أي قيمة للبرنامج. و void لم تكن موجودة قبل أن تدخل ضمن لغة C القياسية عام 1989.
الثوابت
الثوابت تشبه المتغيرات كثيرا، بل إنها عبارة عن متغيرات من ناحية كونها طريقة لتسمية الأشياء لتسهيل الوصول إليها، ولكنها تختلف عن المتغيرات أنها لا يمكن تغيير قيمها بعد أول تحديد للقيمة.
لتعريف الثوابت تستخدم كلمة const والتي تعني ثابت أو مستمر مدموجة مع نوع الشيء الذي نود التعامل معه (أي نوع المتغير) وقيمته! قد يجد البعض أن كون الثابت هو متغير لا يمكن تغيير قيمته جملة عديمة المعنى، ولكن لو اعتبرنا أن الثابت عبارة عن قيمة متغير تبقى تحمل ذات القيمة باستمرار، قد تكون الأمور أوضح.
لإنشاء ثابت من نوع ما، لنفرض أنه ثابت عدد صحيح، ونود تسميته x وإسناد القيمة 7 إليه فإننا نكتب :

const int x = 7;
ما فائدة الثوابت؟
قد تكون قد لاحظت أن الثوابت عبارة متغيرات ممنوع تغييرها! إذا لماذا تم إنشائها؟ وألم يكن من الممكن الإستعاضة عنها بمتغيرات عادية، وأن نقوم وببساطة بتجنب تغييرها؟
في الحقيقة أن أحد أهم الأهداف التي تم إنشاء المتغيرات لأجلها هي مساعدة المبرمج على عدم الوقوع في الخطأ. وبالتالي تحديد ما يمكن فعله وعدم فعله بمتغير معين مع الإبقاء على الشيفرة المصدرية مقروءة ومفهومة. على سبيل المثال، لو أن أحد المبرمجين يود أن يكتب برنامجا، فيه قيمة تمثل القاسم المشترك الأصغر لعددين صحيحين، والذي هو دوما قيمته 1. فإن تحديد القيمة التي يحملها دوما بواحد ومنع تغييرها، ستمنع المبرمج بالوقوع في الخطأ وتعديل هذه القيمة (الأمر الذي قد يحدث إما بالخطأ أو بسبب عدم الفهم الواضح للمعنى الرياضي خلف هذه القيمة، وهو الأمر الشائع جدا)، كما أنه لا داعي لتغيير قيمة ثابت الدوائر باي (3.14..) مثلا، وهكذا دواليك.
بماذا تختلف const عن define#؟
قد يعرف البعض أن هناك طريقة لتعريف أسماء لقيم باستخدام define#، هذه الطريقة تجعل المجمّع (الترجمان أو كومبايلر) يستبدل كل تعريف define يجده بالقيمة المعطاة، ولكنه لا يعطي لها نوعا محددا. على النقيض من const.
العمليات الأساسية
العمليات الأساسية، ترجمة لمصطلح operators، هي العمليات التي يمكن القيام بها على المتغيرات والكائنات بشكل عام، وهي تشمل الآتية:
العملية الأساسية الوصف Associativity
()

[]
.
-> Parentheses (grouping)

Array subscript
Element selection by identifier
Element selection by pointer left-to-right
++ --

+ -
! ~
(type)
*
&
sizeof Prefix/postfix increment and decrement

Unary plus and minus
Logical NOT and bitwise zero's complement
Type cast
Dereference
Reference (address-of)
Size of right-to-left
* / % Multiplication, division, and modulus (remainder) left-to-right
+ - Addition and subtraction
<< >> Bitwise left shift and right shift
< <=

> >= Relational “less than” and “less than or equal to”

Relational “greater than” and “greater than or equal to”
== != Relational “equal to” and “not equal to”
& Bitwise AND
^ XOR على مستوى البت (exclusive or)
| Bitwise OR (inclusive or)
&& Logical AND
|| Logical OR
c?t:f Ternary conditional right-to-left
=

+= -=
*= /= %=
<<= >>=
&= ^= |= الإسناد

Assignment by sum and difference
Assignment by product, dividend, and remainder
Assignment by bitwise shift
Assignment by bitwise AND, XOR, and OR
, فاصلة left-to-right

عمليات مقارنة القيم
>
أصغر، تستخدم للمقارنة بين القيم العددية لمتغيرين، يجب أن يكون المتغيرين من نفس النوع، أو أن يتم عرض أحدهما على أنه من نوع الآخر في حال اختلافهما
<
أكبر، تستخدم للمقارنة بين القيم العددية لمتغيرين، يجب أن يكون المتغيرين من نفس النوع، أو أن يتم عرض أحدهما على أنه من نوع الآخر في حال اختلافهما
==
هل يساوي ؟
++/--
تعتبر العمليتين ++ و -- عمليتين سريعتين، الهدف منهما زيادة قيمة متغير أو إنقاصه بقيمة واحد، وتتميز هذه العملية بإمكانية تطبيقها قبل بدء الجمل الرياضية الحالية أو بعد انتهائها بحسب موقع وضعها قبل المتغير أو بعده.
مثال:
int x=5, y; //المتغير x قيمته 5 x++ ; // الآن أصبحت قيمته ستة y = ++x * ++x ; //أصبحت القيمة سبعة، ضربت بسبعة ثم أصبحت ثمانية، لأن ++ الأخيرة بعد المتغير، ; //إي تطبق بعد انتهاء الجملة الرياضية، والقيمة المخزنة في y هي 7 * 7 ، أي 49

|
عملية "|" تعني "أو" ، بمعنى أنها تفصل بين جملتين شرطيتين، أو بين قيمتين، حيث أن 0 تعني لا وأي قيمة أخرى تعني نعم، والجدول إلى اليسار يبين المنطق الذي تعمل به أو
الشطر الأول العملية الشطر الثاني نتيجة العملية
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1

وهذه العملية مفيدة جدا في الجمل الشرطية والتي تطبق في حال تحقيق شرط أو أكثر من الشروط التي تفصل بينها هذه العملية. مثال:
لو اعتبرنا أن شرطيا يستخدم برنامجا لتحرير المخالفات، واعتبرنا أن ربط حزام الأمان يعبر عنه بالمتغير x، بيحث تكون قيمة x تساوي 1 إذا كان الحزام مربوطا ، وصفر إن لم يكن مربوطا (1 بمعنى نعم و 0 بمعنى لا) وكان المتغير y يعبر عن سرعة سير السيارة، وكانت السرعة القصوى المسموح بها 80، فإن الجملة الشرطية التالية:
if (x == 0 | y>80)


ملاحظة:عندما يتحقق أول شرط ضمن سلسة من الشروط بينها عملية أو، يتوقف تطبيق بقية الشروط وذلك لأن الإجابة في جميع الأحوال ستكون بنعم (1)
«الدرس السابق العودة للصفحة الرئيسية الدرس التالي»
======

============================

ليست هناك تعليقات:

إرسال تعليق

الجنة دار الأبرار والطريق الموصل اليها

  ➌ الجنة ومتاعها والنار وسوء جحيمها عياذا بالله الواحد. {{ إِنَّ الْمُتَّقِينَ فِي جَنَّاتٍ وَنَهَرٍ (54) فِي مَقْعَدِ صِدْقٍ عِنْدَ مَلِ...