المؤثرات (operators)


المؤثرات (operators) هي عبارة عن رموز لها معنى محدد، و يمكننا تقسيم المؤثرات إلى 5 مجموعات أساسية كالتالي:

  1. مؤثرات حسابية Arithmetic Operators تستخدم لتنفيذ العمليات الحسابية.
  2. مؤثرات منطقية Logical Operators تستخدم لربط تعبيرين أو أكثر بحيث تكون قيمة المركب True أو False.
  3. مؤثرات المقارنة Comparison Operators تستخدم لمقارنة قيم البيانات.
  4. مؤثرات بتيّة Bitwise Operators مؤثرات يتم تنفيذها على مستوى البت.
  5. مؤثرات التخصيص Assignment Operators تُستخدم مؤثرات التخصيص لتعيين قيمة لمتغير.

ويمكنك الاطلاع عليها من هنا

جمل الشرط


الشروط تستخدم للتحكم بسير عمل البرنامج (workflow) وذلك اعتماداً على المتغيرات التي تطرأ على البرنامج. ويمكنك وضع العدد الذي تريده من الشروط في البرنامج الواحد. و يمكننا وضع شروط بداخل بعضها و يسمى ذلك Nested Conditional. كما يمكننا وضع أكثر من شرط بداخل جمل الشرط if أو else if باستخدام المؤثرات المنطقية.

نبدأ مع جملة if الشرطية التي نستخدمها لتنفيذ تعليمات محددة في حال تحقق الشرط condition exp. وتكتب في لغة الأسس بالصيغة التالية:

إذا (تركيب_الشرط) {
  // جمل
}
if (condition_expression) {
  // statements;
}

ملاحظة: أقواس الشرط في الجمل الشرطية ليست إلزامية,أي يمكننا التعبير عن الصيغة التالية بالشكل التالي:


إذا تركيب_الشرط {
  // جمل
}
if condition_expression {
  // statements;
}

حيث:
تركيب_الشرط: تمثل التعبير الشرطي المراد اختباره.
جمل: في حال كان التعبير الشرطي محقق يتم تنفيذ التعليمات ولاننسى إحاطة التعليمات ضمن قوسين حاصرين {}.
في حال كانت التعليمات المراد تنفيذها في حال تحقق الشرط تعليمة واحدة فقط يمكنك الاستغناء عن القوسين{} أما إذا كان هناك أكثر من تعليمة فلابد من وضع القوسين.

مثال:

اشمل "مـتم/طـرفية"؛
استخدم مـتم؛
عرف س: صحيح = 3؛
عرف ص: صحيح = 24؛
عرف مجموع: صحيح = س + ص؛
// طباعة العدد 25 في حال تحقق الشرط
إذا مجموع == 25 {
  طـرفية.اطبع("صح")؛
}
import "Srl/Console.alusus";
use Srl;
def a: int = 3;
def b: int = 24;
def sum: int = a + b;
// طباعة العدد 25 في حال تحقق الشرط
if (sum == 25){
    Console.print("True");
}

إذا..وإلا (if..else)

إذا تركيب_الشرط {
  // جمل1
} وإلا {
  // جمل2
}
if condition_expression {
  // statements1
} else {
  // statements2
}

نستخدمه في حال كنا نريد تنفيذ تعليمات معينة في حال لم يتحقق الشرط.

مثال:

اشمل "مـتم/طـرفية"؛
استخدم مـتم؛
عرف س: صحيح = 3؛
عرف ص: صحيح = 24؛
عرف مجموع: صحيح = س + ص؛
// اطبع "صح" في حال كان المجموع لا يساوي 25 وقيمة المتغير الأول أصغر أو تساوي الثاني
إذا مجموع != 25 و س <= ص {
  طـرفية.اطبع("صح")؛
}
// وإلا فاطبع "خطأ"
وإلا {
  طـرفية.اطبع("خطأ")؛
}
import "Srl/Console.alusus";
use Srl;
def a: int = 3;
def b: int = 24;
def sum: int = a + b;
// اطبع "True" في حال كان المجموع لا يساوي 25 وقيمة المتغير الأول أصغر أو تساوي الثاني
if sum != 25 && a <= b  {
  Console.print("True");
}
// "False" وإلا فاطبع
else {
  Console.print("False");
}

وإلا إذا (else if)

لها الصيغة التالية:

إذا تركيب_الشرط1 {
  // جمل1
} وإلا إذا تركيب_الشرط2 {
  // جمل2
}
if condition_expression1 {
  // statements1
} else if condition_expression2 {
  // statements2
}

نستخدمه في حال أردنا اختبار شرط آخر، في حال لم يتحقق الشرط الأساسي. والفرق بينها وبين الجملة السابقة أن تنفيذ `جمل2` مرتبط بتحقق الشرط `تركيب_الشرط2`.

اشمل "مـتم/طـرفية"؛
استخدم مـتم؛
عرف س: صحيح = 3؛
عرف ص: صحيح = 24؛
عرف مجموع: صحيح = س + ص؛
// في حال كان مجموع العددين أكبر من 20 أو يساوي 15 اطبع "True"
إذا مجموع > 20 أو مجموع == 15 {
  طـرفية.اطبع("صح")؛
}
// وإلا اختبر إذا كان العددين متساويين، فإن كان اطبع "Equal"
وإلا إذا س == ص {
  طـرفية.اطبع("متساويان")؛
}
import "Srl/Console.alusus";
use Srl;
def a: int = 3;
def b: int = 24;
def sum: int = a + b;
// "True" في حال كان مجموع العددين أكبر من 20 أو يساوي 15 اطبع
if sum > 20 || sum == 15 {
  Console.print("True");
}
// "Equal" وإلا اختبر إذا كان العددان متساويين، وإن كان فاطبع
else if a==b {
  Console.print("Equal");
}

إذا..وإلا إذا..وإلا (if..else if..else)

إذا تركيب_الشرط1 {
  // جمل1
} وإلا إذا تركيب_الشرط2 {
  // جمل2
} وإلا {
  // جمل3
}
if condition_expression1 {
  // statements1
} else if condition_expression2 {
  // statements2
} else {
  // statements3
}

نستخدم هكذا صيغة في حال كان لدنا شروط متعددة .

مثال:

اشمل "مـتم/طـرفية"؛
استخدم مـتم؛
عرف س: صحيح = 3؛
عرف ص: صحيح = 24؛
عرف مجموع: صحيح = س + ص؛
عرف ضرب: صحيح = س * ص؛
طـرفية.اطبع("%d\ج"، مجموع)؛ // 27
طـرفية.اطبع("%d\ج"، ضرب)؛ // 72
// في حال كان مجموع العددين يساوي 25 اطبع "True"
إذا مجموع == 25 {
  طـرفية.اطبع("صح")؛
}
// وإلا اختبر إذا كان ناتج ضرب العددين أكبر من 25، اطبع "Good"
وإذا إذا ضرب > 25 {
  طـرفية.اطبع("جيد")؛
}
// في حال لم يتحقق أيّاً مما سيق اطبع "False"
وإلا {
  طـرفية.اطبع("خطأ")؛
}
import "Srl/Console.alusus";
use Srl;
def a: int = 3;
def b: int = 24;
def sum: int = a + b;
def mul: int = a * b;
Console.print("%d\n",sum); // 27
Console.print("%d\n",mul); // 72
// "True" في حال كان مجموع العددين يساوي 25 اطبع
if sum == 25  {
  Console.print("True");
}
// "Good" وإلا اختبر إذا كان ناتج ضرب العددين أكبر من 25، اطبع
else if mul>25 {
  Console.print("Good");
}
// "False" في حال لم يتحقق أيّاً مما سيق اطبع
else {
  Console.print("False");
}

ملاحظة: لم يتم دعم جملة switch بعد لكن يمكن استخدام جملة if..else if..else عوضاً عنها.

مثال:
سنقوم الآن بكتابة برنامج يمثل آلة حاسبة بسيطة تقوم ببعض العمليات مثل الضرب والجمع والطرح والقسمة.

الخطوة 1: قم بتعريف المتغيرات المحلية `ر1` (n1) و `ر2` (n2) و `الناتج` (res) و `العملية` (opt) على سبيل المثال، حيث تأخذ ر1 و ر2 قيمتين رقميتين، وسيخزن `الناتج` النتائج ويحدِّد متغير `العملية` رموز العملية الحسابية.
الخطوة 2: اطبع الاختيار (الجمع ، الطرح ، الضرب ، القسمة ، إلخ).
الخطوة 3: أدخل الاختيار.
الخطوة 4: تأخذ رقمين، ر1 و ر2
الخطوة 5: ننفذ العملية الموافقة للمؤثر `العملية`
الخطوة 6: تخزين النتيجة في متغير `الناتج`
الخطوة 7: اعرض نتيجة العملية.
الخطوة 8: انتهاء البرنامج.

اشمل "مـتم/طـرفية"؛
استخدم مـتم.طـرفية؛
عرف: العملية: محرف؛
عرف ر1: صحيح[64]؛
عرف ر2: صحيح[64]؛
عرف الناتج: عائم[64]؛
اطبع("اختر عملية (+، -، *، ÷) لتطبيقها في حاسبة الأسس: ")؛
العملية = أدخل_محرفا()؛
اطبع("أدخل العدد الأول: ")؛
ر1 = أدخل_صحيح()؛
اطبع("أدخل العدد الثاني: ")؛
ر2 = أدخل_صحيح()؛
إذا العملية == '+' {
  الناتج = ر1 + ر2؛
  اطبع("ناتج جمع العددين %d و %d هو: %0.1f\ج"، ر1، ر2، الناتج)؛
} وإلا إذا العملية == '-' {
  الناتج = ر1 - ر2؛
  اطبع("ناتج طرح العددين %d و %d هو: %0.1f\ج"، ر1، ر2، الناتج)؛
} وإلا إذا العملية == '*' {
  الناتج = ر1 * ر2؛
  اطبع("ناتج ضرب العددين %d و %d هو: %0.1f\ج"، ر1، ر2، الناتج)؛
} وإلا إذا العملية == '÷' {
  إذا ر2 == 0 // إذا ر2 == 0 أدخل قيمة جديدة له لتعذر القسمة على 0
  {
    اطبع("لا يمكن القسمة على 0. أدخل قيمة أخرى للمقام: ")؛
    ر2 = أدخل_صحيح()؛
    // ملاحظة: نحتاج هنا لتكرار فحص قيمة ر2 إلى ما لا نهاية حتى يدخل المستخدم رقما غير صفر
    // لكن ذلك يحتاج إلى استخدام الحلقات التي سيأتي ذكرها في فصل لاحق.
  }
  الناتج = ر1 ÷ ر2؛
  اطبع("ناتج قسمة %d على %d هو: %0.1f\ج"، ر1، ر2، الناتج)؛
} وإلا {
  اطبع("اخترت عملية غير صالحة\ج")؛
}


/*
اختر عملية (+، -، *، ÷) لتطبيقها في حاسبة الأسس: *
أدخل العدد الأول: 5
أدخل العدد الثاني: 3
ناتج ضرب العددين 3 و 5 هو: 15.0
*/
import "Srl/Console.alusus";
use Srl.Console;
def opt:char;
def n1: int[64]; // تعريف العدد الأول
def n2: int[64]; // تعريف العدد الثاني
def res:float[64]; // تعريف متغير يمثل النتيجة
print ("Select an operator (+, -, *, /) to perform an operation in Alusus calculator: ");
opt=getChar();
print("Enter the first number: ");
n1 = getInt(); // إدخال العدد الأول
print("Enter the second number: ");
n2 = getInt(); // إدخال العدد الثاني
if opt == '+' {
  res = n1 + n2; // جمع العددين
  print ("Addition of %d and %d is: %0.1f\n", n1, n2, res);
} else if opt == '-' {
  res = n1 - n2;
  print ("Subtraction of %d and %d is: %0.1f\n", n1, n2, res);
} else if opt == '*' {
  res = n1 * n2;
  print ("Multiplication of %d and %d is: %0.1f\n", n1, n2, res);
} else if opt == '/' {
  if (n2 == 0) // إذا ر2 == 0 أدخل قيمة جديدة له
  {
    print ("Divisor cannot be zero. Please enter another value: ");
    n2 = getInt();
    // ملاحظة: نحتاج هنا لتكرار فحص قيمة ر2 إلى ما لا نهاية حتى يدخل المستخدم رقما غير صفر
    // لكن ذلك يحتاج إلى استخدام الحلقات التي سيأتي ذكرها في فصل لاحق.
  }
  res = n1 / n2; // divide two numbers
  print ("Division of %d and %d is: %0.1f\n", n1, n2, res);
} else {
  print("You have entered wrong inputs\n");
}

/*
Select an operator (+, -, *, /) to perform an operation in Alusus calculator: *
Enter the first number: 5
Enter the second number: 3
Multiplication of 5 and 3 is: 15.0
*/