قانون ديمورغان Demorgan لعكس الشرط في لغة سي بلس بلس C++ الدرس |22| - Programmer Tech

Programmer Tech

تعلم البرمجة - علوم الكمبيوتر - أمن المعلومات - القرصنة الأخلاقية

إعلان اعلى المقالة

الأحد، 28 فبراير 2021

قانون ديمورغان Demorgan لعكس الشرط في لغة سي بلس بلس C++ الدرس |22|

 

عكس الشرط بواسطة إشارة النفي !

في الدرس السابق درس مفهوم باقي القسمة في المثال الأخير قُمنا بكتابة الكود و قُمنا بالتأكد اولاً من المُدخَل إن كان اكبر من الـ 100 و بنفس الوقت اصغر من 999, قد تخالفوننا في الرأي بحيث تُريدوُن أن تتأكدوا اولاً بأن المدخل خاطئ و ليس أن تتأكدوا أن المُدخَل صحيحاً فسوف تقوُم فقط بعكس السؤال فماذا سوف تسأل؟.

يوجد هُناك خياران أمامنا لعكس السؤال, الأول أن نقوم بوضع بين القوسين في البداية علامة النفي !, أي إذا لم يتم تحقق الشرط إطبع.

 

تاثير علامة النفي على الجملة الشرطية

إذا كان لديك جملة شرطية و قُمت بإدخال علامة التعجُب ! عليها فسوف تقوم بعكس كل شيئ بها, مثلاً هذا الشرط x==5 يعني تساوي 5 إذا أدخلنا له علامة النفي ! فسوف تعكِسَهُ و يصبح x!=5 أي أنها لا تساوي 5, قد يبدوا الأمر هذا بديهياً لأنه عملية بسيطة, لكن إذا كانت

x > = 100 && x <= 999;

فهذه عندما ندخل لها إشارة التعجب ! سوف تُصبِح

(x < 100 || x > 999)

 

نُلاحظ أنه تحوَّلت كل أكبر من أو يساوي >= إلى أصغر من<= و إذا كان بها إشارة يساوي = سوف تقوم بنزع إشارة اليساوي و تتحول كل and أي && إلى or أي || و تتحول كل أصغر من أو يساوي إلى أصغر من, و هذه تُسمّى قاعدة ديمورغان Demorgan.

في عمليات مقارنة أكبر من أو أصغر من و معها يساوي فإشارة التعجب ! تقوُم بإنتزاع منها إشارة اليساوي و تعكسها و إن لم يكن بها يساوي فعلامة التعجب ! ستلحقها بيساوي كما بالصورة الآتية توضح هذه العملية.


مثال 1

#include <iostream>
using namespace std;
int main()
{
    int x;
    cout << "Write the number three digitsت" << endl;
    cin >> x;

    if(x < 100 || x > 999)
    {
        //الرقم خاطئ
        cout << "Bye, the number is wrong" <<endl;
        exit(1);
    }
    else {
                //الرقم صحيح
        int a1 = x % 10;
        int a2 = (x / 10) % 10;
        int a3 = x / 100;
        cout << a1 << a2 << a3 << endl;
    }
    return 0;

}

 

شرح البرنامج السابق 1

انشأنا متغير عددي int و هو x و قيمته سوف يقوم المستخدم بإدخالها, ثم طبعنا للمستخدم رسالة تخبره بأن يدخل رقم مؤلف من ثلاث خانات بشكل إجباري حتى يتم عكسها, بعد ذلك وضعنا دالة cin الذي هي من سوف تطلُب من المستخدم إدخال قيمة x و إستقبالها, و قمنا بوضع شرط عبر دالة if الشرطية و هو معكوس, إذا كانت x اصغر من 100 و x اكبر من 999  يدخل في شرطين الأول هو بأن الشرط خاطئ يطبع للمستخدم مع السلامة الرقم خاطئ و يقوم بطرد المستخدم من البرنامج, و الشرط الثاني في حال إن الشرط صحيح, أنشأنا ثلاث متغيرات و هي a1 لخانة الآحاد و a2 لخانة العشرات و a3 لخانة المئات و شروطهم كانت في خانة الآحاد نقوم بإنتزاع قيمة الآحاد بالإعتماد على الخاصية الرابعة من الخواص السابقة, و بالنسبة لخانة العشرات a2 ايضاً نقوم بالإعتماد على الخاصية الرابعة لإنتزاع رقم العشرات عبر (x / 10) % 10 و ثم في الخانة الثالثة خانة المئات قمنا بتقسيم x على 100 لأن إذا قسّمنا على 100 فالبرنامج سيقوم بحذف رقم الآحاد و رقم العشرات و إبقاء رقم المئات.

عند تنفيذ الكود و و كتابة رقم من ثلاث خانات 789 سوف يقوم بعكسه إلى 987.


 

مثال 2

قُم بكتابة برنامج يقوم بإختبار الرقم المُدخَل من المستخدم إذا كان الرقم موجب أو سالب و طباعة النتيجة على الشاشة و من ثم يقوم بإختباره إذا كان زوجياً أم فردياً و طباعة النتيجة على الشاشة أسفل النتيجة السابقة.

#include <iostream>
using namespace std;
int main()
{
    cout<<"Enter a integer number ....\n";
    int number;
    cin >> number;

    if (number >= 0)
        cout << number << " Positive number" << endl;
    else
        cout << number << " Negative number" << endl;
    if (number % 2 == 0)
        cout << number << " even number" << endl;
    else
        cout << number << " An odd number" << endl;

    return 0;
}

 

شرح البرنامج السابق 2

قمنا عبر دالة الطباعة cout كتابة رسالة للمستخدم بأن يكتب عدد صحيح و في السطر الثاني عرّفنا متغير عددي Int إسمه number و قمنا عن طريق الدالة cin الطلب من المستخدم أن يكتب قيمة المتغير number و يجب أن يكون عدد صحيح, ثم وضعنا جملة شرطية if نقول بها إذا كان الرقم المُدخَل اكبر من الصفر number >= 0 فهو موجب و قم بكتابة الرقم و بعده إطبع نوعه إذا كان موجب ثم كتبنا جملة else تقوم بطباعة الرقم و بعده إذا كان نوعه سالب, و كتبنا جملة شرطية أخرى من أجل معرفة الرقم زوجي أو فردي كتبنا if إذا كان الرقم باقي قسمته على إثنين هو صفر قم بطباعة أن العدد زوجي و إذا كان غير ذلك else قم بطباعة أنهٌ عدد فردي. 

 

إذا اخلنا عدد موجب فردي

 

إذا ادخلنا عدد سالب زوجي


مثال 3

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

#include <iostream>
using namespace std;
int main()
{
    int integer1;
    int integer2;

    cout << "Enter the first number...\n";
    cin >> integer1;

    cout << "Enter the second number...\n";
    cin >> integer2;

    int diff = integer1 - integer2;
    cout << "The difference is : ";
    if(diff >= 0)
        cout <<diff;
    else
        cout << -1 * diff;
    cout <<endl;
    return 0;
}

 

شرح المثال السابق 3

أنشأنا متغيرين من نوع اعداد صحيحة int و هما integer1 و integer2 و لم نقوم بإعطاءهم قيم لأن القسم سوف يقوم المستخدم بإدخالها ثم قمنا بإظهار رسالة للمستخدم بأن يقوم بإدخال الرقم الأول و كتبنا دالة cin المسؤولة عن الطلب من المستخدم أن يدخل بيانات للبرنامج, و بعد أن يدخل العدد الأول قمنا بالطلب منه أن يدخل العدد الثاني و الطلب منه إدخال قيمته عبر cin و بعد ذلك أنشأنا متغير إسمه diff لتكون مهمته طرح الرقم الثاني من الأول و طباعة كلمة الفرق هو و بعده يقوم بالتأكد من الفرق إن كان موجباً سيقوم بطباعته بشكل مباشر و else غير ذلك وضعنا الطباعة هي ضرب عددين سالبين ببعضهما و نحن نعرف أن سالب ضرب سالب يعطي موجب, و عند التنفيذ و كتابة الرقمين الذي طلبهم سنرى النتيجة بالشكل.

كما لاحظنا من خلال شاشة التنفيذ السابقة أدخلنا له الرقم الأول 17 و من ثم الرقم الثاني 9 و قام مباشرتاً بطباعة الرقم 8 الذي هو الفرق بين الرقمين المدخلات لهذا البرنامج.

 

مثال 4

قُم بكتابة برنامج يختَبِر القيمة الكُبرى من ثلاث أرقام مٌدخَلة من المُستَخدِم و يقوم بطباعة أكبر قيمة على الشاشة.

#include <iostream>
using namespace std;
int main()
{
    int x1;
    int x2;
    int x3;

    cout << "Enter three values" <<endl;
    cin >> x1 >> x2 >> x3;

    int max = x1;

    if(max < x2)
        max = x2;

    if(max < x3)
        max = x3;
    cout <<"value max : " << max <<endl;
    return 0;
}

 

شرح المثال السابق 4

قُمنا بتعريف ثلاث متغيرات بدون قيم و هم x1,x2,x3 هن الذي سوف يقوم المستخدم بإدخالهم عند الطلب منه بعد قليل, و أظهرنا رسالة تُُطالب المستخدم أن يقون بإدخال ثلاث قيم و سوف يتم إظهار القيمة الكُبرى له, و وضعنا الدالة cin المسؤولة عن الطلب من المستخدم أن يُدخِل القيم الثلاثة, و أنشأنا متغير إسمه max أي القيمة العُظمى و قيمته الأولية تساوي قيمة x1 ثم قُمنا بمقارنة المتغير max مع x2 أي هل هو أصغر من x2 يعني هل يوجد هناك رقم أكبر من max إذا كان يوجد رقم قيمته اكبر من max فإن كان يوجد فإن max ليست القيمة العظمى ثم وضعنا أن max تساوي x2 و من ثم قُمنا بمقارنته مع x3 بنفس الطريقة السابقة مع x2 ثم طلبنا منه أن يطبَع نَص القيمة العضمى هي و يكتب القيمة بعدها, عند تشغيل البرنامج و كتابة ثلاث ارقام سيكون بالشكل

نلاحظ من النتيجة السابقة لقد ادخَل المستخدم ثلاث قيم و هي 45 و 95 و 66 و عند نقره على زر إدخال قام بطباعة الرقم 95 لأنه الرقم الأكبر من القيم المدخلة.


تعرَّفنا على كيفية إستعمال باقي القِسمة سابقاً و في هذا الدرس تعرّفنا على خاصية مهمة و هي إدخال علامة التعجب ! على الشرط و التي تُعرَف بقاعدة Demorgan التي تنفي الشرط.

هناك تعليقان (2):

  1. مساء الخير حضرة المهندس ...
    اود اولا ان اثني على طريقة عرضك للمادة وشرحها
    ثانيا اود ان اطلب منك حضرة المهندس ان تنزل لنا شرح Classes بلغة C++ قريبا باسرع وقت ممكن
    لان الامتحان قريب جدا وانا اواجه صعوبه في فهمها ...
    واعتذر سلفا ان اخطات في التعبير ..

    ردحذف

facebook

نموذج الاتصال

الاسم

بريد إلكتروني *

رسالة *