04/21
First حروف تبدأ بحرف كبير (مقبول)
payRate أسلوب سنام الجمل CamelCase
pay_rate استخدام الشرطة السفلية
$Amount مسموح بالبدء بعلامة $
_Update مسموح بالبدء بشرطة سفلية _
mid-term يحتوي على (-) وهو معامل طرح ممنوع
add salary المسافات الفاصلة (Space) ممنوعة تماماً
one+two يحتوي على (+) وهو معامل جمع ممنوع
2nd غير مسموح بالبدء بأرقام
public كلمة محجوزة في جافا (Reserved word)
تنبيه للامتحان: سؤال "صنف المقبول وغير المقبول مع ذكر السبب" هو سؤال سنوي ثابت! Learn the logic behind errors.
اختبر نفسك وصنف الأسماء
04/21
صنف الأسماء التالية: class, first_Num, 3sum
02. VARIABLES المتغيرات وتعريفها في الذاكرة
05/21
المتغير: هو اسم لخلية وموقع محجوز في الذاكرة العشوائية (RAM)، تهدف لتخزين قيمة قابلة للتغيير والتحديث أثناء تشغيل البرنامج.
عند الإعلان عن متغير، تقوم جافا بحجز مساحة معينة في الذاكرة تتناسب تماماً مع نوع البيانات المحدد له.
صيغة الإعلان في جافا (Declaration Syntax):
Data_Type identifier;
انتبه: الإعلان عن المتغيرات يمنحها عنواناً ونوعاً برمجياً، ولكنه لا يمنحها قيمة افتراضية إجبارية دوماً. Memory allocation is size-dependent.
مسودة وهيكل الذاكرة
05/21
ارسم رسماً تخطيطياً لمتغير name في الذاكرة
02. VARIABLES ANATOMY المكونات الأربعة الأساسية لأي متغير
06/21
1
هو الاسم المميز للمتغير المستخدم للوصول إليه في الكود (Variable Name).
2
يحدد نوع وصنف البيانات المخزنة بداخله (مثل عدد صحيح أو حرف أو كسر).
3
يحدد حجم المساحة المحجوزة بالذاكرة بالبت (Bits) بناءً على نوع البيانات.
4
هي القيمة الفعلية المخزنة داخل خلية المتغير في اللحظة الحالية.
تنبيه: يجب الإعلان عن المتغيرات أولاً باسم ونوع صحيحين قبل تمكننا من استخدامها بالبرنامج. Variables must be declared before use.
مسودة التتبع والملاحظات
06/21
اكتب الخصائص الأربعة لمتغير int age = 22;
03. CONSTANTS الثوابت وتعريفها البرمجي
07/21
الثوابت (Constants): هي مساحات بالذاكرة تحمل أسماءً وصنفاً معيناً، ولكن على النقيض من المتغيرات، تظل قيمتها وحالتها ثابتة تماماً ولا يُسمح بتعديلها أو تغييرها نهائياً طوال فترة تشغيل البرنامج.
صيغة الإعلان في جافا (Constants Syntax):
final dataType IDENTIFIER = value;
الكلمة المحجوزة final هي التي تبلغ مترجم جافا (Compiler) بأن هذه القيمة مغلقة ومثبتة ولا يمكن الكتابة فوقها أو التلاعب بها، ومحاولة تعديلها ستنتج خطأ في الترجمة (Syntax Error).
final double PI = 3.14159;
final char CURRENCY = '$';
final int MAX_LIMIT = 1000;
ملاحظة هامة: نستخدم في تسمية الثوابت الأحرف الكبيرة دائماً للفصل بينها وبين المتغيرات المعتادة. Use UPPERCASE for constant names.
تدوين ملاحظات ومقترحات
07/21
ماذا يحدث لو حاولنا تعديل الثابت PI = 3.0؟
04. DATA TYPES تصنيف أنواع البيانات في جافا
08/21
هي أنواع أساسية مدمجة مسبقاً في لغة جافا (Built-in). كل نوع يحمل مساحة محددة جداً بالذاكرة وقدرة تخزين لا تتغير، وتضم ثمانية أنواع أساسية سنتعرف عليها في السلايدات القادمة وتصنف إلى:
هي كائنات أو نماذج لكلاسات مبنية مسبقاً أو يصنعها المبرمج نفسه (Instances of classes)، ولا تخزن القيم البرمجية مباشرة وإنما تخزن عنوان الكائن الفعلي في الذاكرة مثل:
تنبيه: نوع البيانات المرجعية يرجع دوماً إلى الـ Heap الذاكرة المخصصة للكائنات. Primitive value vs Object Reference.
مسودة الفروقات والملاحظات
08/21
لماذا يعتبر String نوعاً مرجعياً وليس أولياً؟
04. DATA TYPES: INTEGERS أنواع الأعداد الصحيحة بالكامل
09/21
| النوع (Type) | الحجم (Size) | القيمة الصغرى (Min Value) | القيمة الكبرى (Max Value) |
|---|---|---|---|
| byte | 8 bits | -128 ( = -2⁷ ) | +127 ( = 2⁷ - 1 ) |
| short | 16 bits | -32,768 ( = -2¹⁵ ) | +32,767 ( = 2¹⁵ - 1 ) |
| int | 32 bits | -2,147,483,648 | +2,147,483,647 |
| long | 64 bits | -9,223,372,036,854,775,808 | +9,223,372,036,854,775,807 |
📌 الأعداد الصحيحة: هي أرقام لا تحتوي على أي فواصل عشرية. القيمة الافتراضية الثابتة للأعداد الصحيحة بجافا هي int.
⚠️ تنبيه للامتحان: لا يُسمح بوضع الفواصل العادية , داخل الأرقام الإنجليزية بالمترجم، ولا يشترط وضع إشارة + للأعداد الموجبة.
تذكر: اختيارك للنوع المناسب يوفر على الكمبيوتر استهلاك الذاكرة بشكل مفرط. Integer types are signed.
مسودة الأحجام والمدى
09/21
ما هو نوع البيانات الافتراضي للأرقام الصحيحة؟
04. DATA TYPES: DECIMALS الأنواع المخصصة للكسور العشرية
10/21
| النوع (Type) | الحجم (Size) | القيمة الصغرى (Min Value) | القيمة الكبرى (Max Value) | عدد الخانات الدقيقة (Significant bits) |
|---|---|---|---|---|
| float | 32 bits | -3.4e+38 | +3.4e+38 | حتى 7 خانات بعد الفاصلة (دقة أحادية) |
| double | 64 bits | -1.7e+308 | +1.7e+308 | حتى 15 خانة بعد الفاصلة (دقة مضاعفة) |
الرقم العادي 4387
الترميز العلمي 4.387 * 10³
ترميز جافا العشري 4.387e+3
مثال الصفر 0.0005 = 5.0e-4
قاعدة هامة جداً: لغة جافا تعتبر double هو النوع الافتراضي لأي كسر عشري يتم كتابته. double is the default real type.
مسودة الكسور والترميز
10/21
ماذا تعني علامة e+3 في لغة البرمجة؟
04. DATA TYPES: CHARACTERS نوع البيانات الحرفي بالتفصيل
11/21
char (16 bits): نوع بيانات أولي مخصص لتخزين رمز أو حرف إنجليزي أو رقم مفرد واحد فقط. ويستخدم نظام الترميز العالمي الموحد (Unicode).
يستطيع تخزين حتى 65,535 رمزاً مختلفاً، فمثلاً الرقم 65 يمثل في الذاكرة الحرف الإنجليزي الكبير 'A'.
📌 قاعدة الاقتباس المفرد: يجب إحاطة قيمة المتغير الحرفي دائماً باقتباس مفرد مثل: 'A' وليس اقتباس مزدوج.
char letter = 'A'; مقبول تماماً
char space = ' '; مقبول (مساحة فارغة)
char test = 'Abc'; خطأ (أكثر من حرف واحد)
char symbol = '>='; خطأ (أكثر من رمز واحد)
💡 ملاحظة الكتاب المنهجي: لتمثيل المساحة الفارغة الفاصلة في المنهج أثناء الكتابة المباشرة نستخدم الحرف '~'.
انتبه: الأعداد داخل الاقتباس المفرد مثل '7' هي رموز حرفية ولا يمكن استخدامها مباشرة بالعمليات الحسابية! char literals use single quotes.
مسودة الحروف والرموز
11/21
لماذا لا يعتبر 'Ahmed' نوع char؟
04. DATA TYPES: ASCII TABLE جدول رموز أسكي المعتمد للحروف
12/21
نظام ASCII هو مجموعة جزئية من نظام اليونيكود العالمي، ويمتلك كل حرف فيه قيمة عشرية ثابتة في الذاكرة لتسهيل مقارنتها.
'A' ➔ Code: 65 الحروف الكبيرة تبدأ من 65
'a' ➔ Code: 97 الحروف الصغيرة تبدأ من 97
'0' ➔ Code: 48 الرموز الرقمية تبدأ من 48
⚠️ قاعدة هامة للامتحان: أي حرف إنجليزي كبير (Uppercase) هو دائماً أصغر بالذاكرة من أي حرف صغير (Lowercase) بالاعتماد على الترتيب العشري لـ ASCII!
'A' < 'g' ➔ true (65 < 103)
'f' >= 'q' ➔ false (102 >= 113)
'B' != 'B' ➔ false (66 != 66)
📌 قاعدة الأبجدية: إذا كانت الحروف من نفس النوع (كلها كبيرة أو صغيرة)، فإن الحرف الأسبق هجائياً هو الأصغر دوماً بالذاكرة (مثال: 'a' < 'b' تعطي True).
انتبه: المقارنات بين الحروف تجري تلقائياً خلف الستار بالاعتماد على قيمها العشرية في ASCII. ASCII values guide character comparison.
مسودة ومقارنة الحروف
12/21
أوجد ناتج مقارنة: 'C' < 'a'
04. DATA TYPES: BOOLEAN نوع البيانات المنطقي بالكامل
13/21
boolean (1 bit): هو أصغر نوع بيانات أولي في الذاكرة على الإطلاق، ومخصص لحفظ وإدارة حالتين منطقتين فقط:
true (صحيح) أو false (خاطئ).
يستخدم بكثرة مع أدوات الشرط وتحديد مسار المخططات التدفقية والحلقات التكرارية.
X > 10 هل القيمة أكبر من 10؟
payRate < 25.5 مقارنة كسور عشرية
X == Y هل القيمتان متطابقتان؟ (تنبيه: == وليس =)
status == 'M' مقارنة رموز حرفية وحفظ النتيجة
تنبيه للامتحان: القيمة المخزنة لـ boolean يتم تخزينها مباشرة كـ true أو false ككلمات محجوزة بدون اقتباسات. 1 bit of memory storage.
مسودة التعبيرات المنطقية
13/21
ما هو الفرق بين معامل = ومعامل ==؟
04. DATA TYPES SUMMARY شجرة اختيار واختبار نوع البيانات
14/21
1. أعداد وصيغ رياضية (Numeric)
أعداد صحيحة (Integer) byte, short, int, long
كسور عشرية (Floating) float, double
2. رموز ونصوص (Character)
حرف مفرد واحد (char) char ➔ 'A', '7', '%'
سلسلة نصوص مرجعية (String) String ➔ "Welcome"
3. قيم منطقية (Boolean)
صح أو خطأ (boolean) boolean ➔ true, false
نصيحة الامتحان: قبل تعريف أي متغير اسأل نفسك: هل يحتوي على كسور؟ هل يحتاج لحروف أم نصوص؟ Choose the optimal type to save RAM.
مسودة وتطبيقات التبويب
14/21
ما هو النوع المناسب لتخزين معدل الطالب GPA؟
05. NAMING STANDARDS المعايير المعتمدة لتسمية الكود
15/21
تُكتب دائماً باستخدام أحرف كبيرة بالكامل (UPPERCASE). وإذا كان الاسم يتكون من أكثر من كلمة واحدة، يتم الفصل بين الكلمات برمز الشرطة السفلية (_).
final double CENTIMETERS_PER_INCH = 2.54;
final double MAX_LIMIT = 500;
تُكتب دائماً باستخدام أحرف صغيرة (lowercase) للكلمة الأولى، وإذا كان الاسم يتكون من عدة كلمات تندمج معاً مع كتابة الحرف الأول من الكلمة الثانية كبيراً (camelCase).
double average;
int studentsNumber, letterGrade;
تنبيه: اتباع هذه المعايير ليس إلزامياً للمترجم ولكنه إلزامي للحصول على درجات كاملة في الواجبات والامتحانات العملى! Always prioritize code readability.
مسودة واصطلاحات التسمية
15/21
اعد كتابة اسم المتغير studentgpa بالأسلوب الصحيح
05.1 CONSTANTS DECLARATION قواعد وأمثلة تعريف الثوابت
16/21
القيم الثابتة البسيطة المكتوبة مباشرة في الكود (مثل 2.54 أو 1024) تُعرف برمجياً بالقيم الثابتة المباشرة (Literals).
يُسمح بتعريف ثابت من خلال تعبير رياضي (Expression) شرط أن تكون جميع المتغيرات والمكونات البرمجية بداخله قد تم تعريفها مسبقاً في الذاكرة.
// Example 1: Direct literal assignment
final double CENTIMETERS_PER_INCH = 2.54;
// Example 2: Expression calculation
final int MAX = 1024;
final int MIN = 64;
final int AVG = (MAX + MIN) / 2;
// Example 3: Other types
final double PI = 3.14159;
final char CURRENCY = '$';
final char BLANK = ' '; // this is a space
انتبه: في المثال الثاني، قيمة الثابت AVG تعتمد كلياً على حساب العملية الحسابية في الذاكرة أولاً. All dependent identifiers must exist first.
مسودة وحساب الثوابت
16/21
احسب القيمة النهائية لـ AVG بالذاكرة
05.2 VARIABLES DECLARATION الإعلان عن المتغيرات وإعطائها قيم أولية
17/21
1. التعريف المتعدد في نفس السطر: يُسمح بتعريف متغيرات متعددة تحمل نفس نوع البيانات في سطر برمجى واحد يفصل بينها علامة الفاصلة المعتادة (,).
2. إسناد قيم أولية (Initialization): يُفضل إعطاء المتغيرات قيم أولية فور الإعلان عنها لمنع المشاكل المنطقية أثناء التشغيل.
// Example 1: Standard definition
double average;
// Example 2: Multiple variables in same line
int studentsNumber, counter, num1, num2;
char ch, status, letterGrade;
// Example 3: Initial values during declaration
int counter = 0, sum = 0, product = 1;
char ch = ' '; // initialized as space
تذكر: الإعلان المتعدد يحتاج دوماً لفاصلة عادية، وينتهي السطر البرمجي بفاصلة منقوطة (;). Multiple assignments require commas.
مسودة وحجز المتغيرات
17/21
اكتب تعليقاً على أهمية تهيئة المتغير بـ 0
05.2 VARIABLES SPECIAL RULES تنبيهات هامة لتعريف المتغيرات العشرية
18/21
1. التهيئة باستخدام التعبيرات (Expressions): يُسمح بتهيئة المتغير باستخدام تعبير رياضي مركب يعتمد على قيم متغيرات أخرى تم تعريفها وتجهيز قيمها مسبقاً بالذاكرة.
⚠️ قاعدة إلزامية للامتحان (Float Literals Rule): بما أن جافا تعتبر الكسور العشرية double تلقائياً، فإن محاولة تخزين كسر في متغير من نوع float ستنتج خطأ في الترجمة ما لم تضع حرف f أو F خلف الرقم مباشرة لإعلام المترجم!
// Example 1: Initialization using expressions
double x = 0.0, y = 2.0;
double z = (x + y) - 1; // z becomes 1.0
// Example 2: FLOAT error and fix
float a = 5.33; // SYNTAX ERROR!
float a = 5.33f; // CORRECT!
// Example 3: Multiple floats in same line
float length = 12.33f, width = 6.333f, radius = 0.3f;
تنبيه: نسيان حرف f خلف قيم float هي أحد أشهر أفخاخ اختبارات مقرر CS 1301 على الإطلاق! Always add 'f' to float literals.
مسودة وحقائق المترجم
18/21
لماذا ترفض جافا float x = 12.5;؟
06. EXAMPLES TRACING تتبع خطوة بخطوة للذاكرة - مثال 1
19/21
DataManipulation.java
1 public class DataManipulation {
2 public static void main(String[] args) {
3 final double PI = 3.14159; // constant
4 double radius;
5 double area;
6 radius = 2.5;
7 area = radius * radius * PI;
8 System.out.println("Area = " + area);
9 }
}
سطر 3: حجز خلية الثابت PI بالذاكرة وإسناد القيمة لها فوراً. PI = 3.14159
سطر 4 و 5: حجز خلايا للمتغيرات بدون قيم ابتدائية. radius, area = no value
سطر 6: إسناد القيمة العشرية 2.5 في خلية radius بالذاكرة. radius = 2.5
سطر 7: حساب العملية الحسابية وتخزين الناتج في خلية area. area = 19.6349375
تنبيه: يجب الإعلان وحجز الخلايا بالذاكرة أولاً قبل محاولة تعبئتها بالبيانات والقيم الحسابية. Trace tables prevent logical errors.
مسودة جدول التتبع للذاكرة
19/21
ارسم خلايا الذاكرة للثلاث ثوابت والمتغيرات بالترتيب
06. EXAMPLES TRACING تتبع خطوة بخطوة للذاكرة - مثال 2
20/21
VariablesTrace.java
1 public class VariablesTrace {
2 public static void main(String[] args) {
3 int num1 = 10, num2 = num1 - 1;
4 double sale = 0.02 * num1;
5 char first;
6 first = 'D';
7 System.out.println("num1 = " + num1);
8 System.out.println("num2 = " + num2);
9 System.out.println("sale = " + sale);
10 }
}
| السطر (Line) | num1 | num2 | sale | first |
|---|---|---|---|---|
| Line 3 | 10 | 9 (10-1) | Undefined | Undeclared |
| Line 4 | 10 | 9 | 0.2 | Undefined |
| Line 6 | 10 | 9 | 0.2 | 'D' |
قاعدة ذهبية: المتغيرات التي تكون على الجانب الأيمن من المعادلة يجب أن تمتلك قيماً بالذاكرة أولاً. Variables on RHS must have values first.
مسودة وحساب المتغيرات
20/21
توقع مخرجات جمل الطباعة في الأسطر 7 و 8 و 9
SELF-CHECK تمارين التقييم الذاتي والمذاكرة
21/21
• God Father ➔ غير قانوني؛ يحتوي على مسافة (space).
• ¤cy ➔ غير قانوني؛ يحتوي على رمز ممنوع (&).
• final ➔ غير قانوني؛ كلمة محجوزة لجافا (Reserved word).
• 901 / 4ever ➔ غير قانوني؛ يبدأ بأرقام.
1 public class FindError {
2 public static void main (String[] args) {
3 final CENTIMETERS_PER_INCH = 2.54; ➔ خطأ 1: نسي تحديد النوع double
4 double inches;
5 cm = CENTIMETERS_per_INCH * inches; ➔ خطأ 2: cm غير معرّف بالنوع + خطأ 3: per كتابة صغيرة وهي ثنائية كبيرة
6 System.out.println ("There are " + cm + "cm in " + inches + "inches");
7 }
8 }
تنبيه المذاكرة: احرص على مراجعة دقة أسماء المتغيرات ومطابقتها للمواصفات أثناء المراجعة. End of Lesson 2. Good luck!
حل وتتبع كود التقييم
21/21
أعد كتابة الكلاس بعد تصحيح الأخطاء الثلاثة
نستخدم رمز اليساوي (=) في البرمجة لإسناد وتخزين القيم في المتغيرات الفعالة بالذاكرة. وتأخذ هذه العملية ثلاث صيغ وقواعد رئيسية:
SYNTAX 1
تخزين قيمة ثابتة ومباشرة في المتغير (variable = literal).
x = 10; // x must exist
SYNTAX 2
نسخ وتخزين قيمة متغير في متغير آخر (var1 = var2).
x = 10; y = 15;
x = y; // x=15, y=15
SYNTAX 3
حساب تعبير رياضي وتخزين ناتجه (variable = expression).
x = 10; y = 15;
x = x * y; // x=150
تنبيه للامتحان: عملية الإسناد تجري دائماً من الاتجاه الأيمن إلى الاتجاه الأيسر بالذاكرة. Assignment flows from Right to Left.
مسودة وتطبيقات الإسناد
04/23
ما هي القيمة النهائية لـ x و y بعد x = y؟
02. ASSIGNMENT TRACING تتبع وحساب خلايا المتغيرات - مثال 1
05/23
1 public class AssignmentOperator {
2 public static void main(String[] args) {
3 final double PI = 3.14159; // constant
4 double radius, area;
5 radius = 2.5;
6 area = PI * radius * radius;
7 }
}
[Line 3] PI (double, 64 bits) ➔ 3.14159 (مستقر وثابت)
[Line 4] radius (double, 64 bits) ➔ Undefined Value (لا قيمة له)
[Line 4] area (double, 64 bits) ➔ Undefined Value (لا قيمة له)
[Line 5] radius ➔ 2.5 (تم إسناد القيمة وحفظها)
[Line 6] area ➔ 19.6349375 (تم الحساب بنجاح)
قاعدة هامة: المتغيرات من نوع double تحجز مساحة 64-bit بالذاكرة دوماً لتخزين الكسور الدقيقة. Trace memory values to secure logic.
رسم خلايا الذاكرة بالتفصيل
05/23
ارسم خلايا الذاكرة للمتغيرين radius و area
02. ASSIGNMENT TRACING تتبع خلايا المتغيرات - مثال 2
06/23
1 public class AssignmentOperator {
2 public static void main(String[] args) {
3 int counter;
4 counter = 0;
5 counter = counter + 1; // update value
6 }
}
[Line 3] counter (int, 32 bits) ➔ Undefined Value (لا قيمة له)
[Line 4] counter = 0; ➔ 0 (تم التخزين المبدئي بالصفر)
[Line 5] counter = counter + 1; ➔ 1 (تم تحديث القيمة ومسح القديمة)
💡 طريقة التحديث بالذاكرة: يتم حساب الجانب الأيمن أولاً بالاعتماد على القيمة الحالية للعداد 0 + 1 = 1، ثم يتم إسناد الناتج إلى العداد في اليسار ليقوم بمسح واستبدال القيمة القديمة.
قاعدة هامة للامتحان: المتغيرات من نوع int تحجز مساحة 32-bit بالذاكرة دوماً لتخزين الأعداد الصحيحة. Updating destroys previous memory state.
مسودة التتبع والرسم
06/23
ارسم خلية العداد بالذاكرة بعد التحديث
03. ARITHMETIC OPERATORS المعاملات الحسابية الخمسة بجافا
07/23
+ Addition (الجمع)
- Subtraction (الطرح)
* Multiplication (الضرب)
/ Division (القسمة)
% Modulus (باقي القسمة العشري)
x = 10 + 5;
// 10 and 5 are called operands (المعاملات الرياضية)
// + is the operator (المعامل البرمجي)
y = x * 10 + 5;
// x and 10 are operands of *
// x*10 and 5 are operands of +
انتبه للامتحان: يُطلق على القيم أو المتغيرات التي تُجرى عليها العمليات اسم المعاملات الرياضية (Operands). Arithmetic operations structure.
مسودة وتطبيق المعاملات
07/23
اكتب تعريفاً مختصراً لـ Operand باللغة العربية
03. ARITHMETIC OPERATORS: DIVISION مخاطر وقواعد القسمة البرمجية بجافا
08/23
عند قسمة عدد صحيح على صحيح آخر، تقوم جافا بقطع وحذف الجزء العشري تماماً (Truncated) من الناتج النهائي ولا تقوم بتقريبه!
int x = 15; int y = 2;
int z = x / y; ➔ z becomes 7 (NOT 7.5!)
double z2 = x / y; ➔ z2 becomes 7.0 (Still truncated!)
للحصول على ناتج كسر عشري دقيق، يجب أن يكون أحد الطرفين على الأقل أو كلاهما يحمل فواصل عشرية بالذاكرة.
int x = 15; double y = 2.0;
double z = x / y; ➔ z becomes 7.5 (since y is double)
double a = 15.0; double b = 2.0;
double c = a / b; ➔ c becomes 7.5
تنبيه للامتحان: نسيان قاعدة قطع الكسور الصحيحة يسبب خسارة درجات تتبع مخرجات الأكواد بكثرة. Integer division truncates decimal part.
مسودة وحساب نواتج القسمة
08/23
احسب ناتج: double res = 5 / 2;
03. ARITHMETIC OPERATORS: MODULUS معامل باقي القسمة المتبقي
09/23
% (Mod): هو معامل مخصص لحساب القيمة العددية المتبقية بعد إجراء عملية القسمة الصحيحة بين رقمين.
📌 قاعدة هامة للامتحان: ناتج باقي القسمة دائماً وأبداً يكون أصغر تماماً من القيمة العددية للمقسوم عليه (Divisor).
x = 5 % 2; ➔ x = 1 (1 < 2)
x = 24 % 2; ➔ x = 0 (زوجي)
x = 21 % 7; ➔ x = 0 (من مضاعفات 7)
x = 8 % 3; ➔ x = 2 (2 < 3)
⚠️ تنبيه: العملية ليست تبديلية (X % Y != Y % X)، ويجب أن تكون المعاملات من نوع أعداد صحيحة.
تذكر: ناتج باقي قسمة رقم صغير على رقم كبير يعطي دائماً نفس الرقم الصغير (مثال: 3 % 5 = 3). Modulus is essential for parity checks.
مسودة وحساب المودولوس
09/23
أوجد ناتج العمليات: 2 % 10 و 14 % 5
03. OPERATOR PRECEDENCE أولويات وترتيب تنفيذ العمليات
10/23
PRIORITY 1
( )
تمتلك الأقواس الأولوية العليا المطلقة؛ ويتم تنفيذ العمليات بداخلها أولاً من الداخل إلى الخارج.
PRIORITY 2
* / %
تمتلك نفس رتبة الأولوية؛ وعند تكرارها يتم حسابها بالترتيب التتابعي من اليسار إلى اليمين.
PRIORITY 3
+ -
تمتلك رتبة أولوية منخفضة؛ وعند تكرارها يتم حسابها بالترتيب التتابعي من اليسار إلى اليمين.
تنبيه للامتحان: تذكر دائماً مبدأ "اليسار أولاً" لتنفيذ العمليات المتساوية بالرتبة داخل التعبير. Left-to-right evaluation associative rule.
مسودة ترتيب الأولويات
10/23
كيف ترتب حساب 5 + 3 * 2 بالذاكرة؟
03. PRECEDENCE EXAMPLES تطبيقات عملية وتتبع حساب التعبيرات
11/23
Expression: 3 * 7 - 6 + 2 * 5 / 4 + 6
• Step 1: 3 * 7 = 21 ➔ 21 - 6 + 2 * 5 / 4 + 6
• Step 2: 2 * 5 = 10 ➔ 21 - 6 + 10 / 4 + 6
• Step 3: 10 / 4 = 2 (قسمة صحيحة!) ➔ 21 - 6 + 2 + 6
• Step 4: 21 - 6 = 15 ➔ 15 + 2 + 6
• Step 5: 15 + 2 + 6 = 23 (النتيجة النهائية)
Expression: 3 * (7 - 6) + 2 * 5 / (4 + 6)
• Step 1: (7 - 6) = 1 ➔ 3 * 1 + 2 * 5 / (4 + 6)
• Step 2: (4 + 6) = 10 ➔ 3 * 1 + 2 * 5 / 10
• Step 3: 3 * 1 = 3 ➔ 3 + 2 * 5 / 10
• Step 4: 2 * 5 = 10 ➔ 3 + 10 / 10
• Step 5: 10 / 10 = 1 ➔ 3 + 1 = 4 (النتيجة النهائية)
لاحظ جيداً: أدت إضافة الأقواس إلى تغيير الناتج تماماً من 23 إلى 4، فانتبه للتفاصيل! Brackets alter evaluation trees.
مسودة حل تمرين الأولوية
11/23
حل وتتبع بنفسك: 2 * 3 + 12 / 4 % 2
04. COMPOUND OPERATORS معاملات الحساب والإسناد المركبة
12/23
توفر لغة جافا خمسة معاملات مركبة للاختصار وتسهيل دمج العمليات الحسابية مع عملية الإسناد المباشر بالذاكرة:
| المعامل المركب | المثال البرمجي (Short form) | المعنى المكافئ له بالتفصيل (Equivalent to) | شرح التأثير بالذاكرة |
|---|---|---|---|
| += | x += y | x = x + y | إضافة قيمة y إلى x وحفظ المجموع في x |
| -= | x -= y | x = x - y | طرح قيمة y من x وحفظ النتيجة في x |
| *= | x *= y | x = x * y | ضرب x في y وحفظ ناتج الضرب في x |
| /= | x /= y | x = x / y | قسمة x على y وحفظ ناتج القسمة في x |
| %= | x %= y | x = x % y | حساب باقي القسمة وحفظ الباقي في x |
ملاحظة هامة جداً: الجانب الأيمن يحسب بالكامل أولاً ككتلة واحدة محاطة بأقواس وهمية قبل إجراء العملية المركبة! RHS evaluated first with imaginary brackets.
مسودة وحساب الاختصارات
12/23
أوجد ناتج x *= y + 7 إذا كان x=10 و y=5
04. COMPOUND OPERATORS: TRACING تتبع خلايا المعاملات المركبة بالذاكرة
13/23
int x = 10;
int y = 5;
x *= y; // x = x * y
يتم الحساب مباشرة: x = 10 * 5 = 50.
تتحول قيمة x بالذاكرة إلى 50 بينما تظل قيمة y ثابتة دون تغيير 5.
int x = 10;
int y = 5;
x *= y + 7; // x = x * (y + 7)
❌ الخطأ الكارثي الشائع بالامتحان: تتبعها كـ x = x * y + 7 فيكون الناتج الخاطئ 57.
✓ الحل البرمجي الصحيح: جافا تقوم بوضع أقواس وهمية حول الجانب الأيمن بالكامل، وتحسبه أولاً: (y + 7) = (5 + 7) = 12.
ثم تضرب الناتج في x: x = 10 * 12 = 120 !
نصيحة المذاكرة: تذكر دائماً وضع الأقواس للطرف الأيمن لتجنب خسارة درجات أسئلة التتبع! RHS evaluated as a unified single group.
مسودة وحساب العمليات المركبة
13/23
أوجد قيمة x للعملية: x += 5 * 2 إذا كان x=4
05. INCREMENT & DECREMENT معاملات الزيادة والنقصان بـ 1
14/23
Pre-Increment (++x): قم بالزيادة بـ 1 أولاً، ثم نفذ العملية البرمجية (Increment then act).
Post-Increment (x++): نفذ العملية البرمجية الحالية أولاً، ثم قم بزيادة القيمة بـ 1 لاحقاً بالذاكرة (Act then increment).
Pre-Decrement (--x): اطرح 1 أولاً، ثم نفذ العملية الحالية بالذاكرة (Decrement then act).
Post-Decrement (x--): نفذ العملية الحالية أولاً، ثم اطرح 1 لاحقاً بالذاكرة (Act then decrement).
قاعدة هامة: إذا استخدم المتغير بمفرده في سطر مستقل، فلا يوجد أي فارق في النتيجة النهائية بين القبلي والبعدي. Standalone updates yield the same result.
مسودة معاملات الزيادة
14/23
اكتب تعليقاً على قاعدة الاستخدام المنفرد
05. INCREMENT: TRACING تتبع تفصيلي لأخطر معاملات الامتحان
15/23
int x = 3;
int y = ++x; // increment, then assign
تُعادل برمجياً الخطوتين التاليتين بالترتيب:
1. x = x + 1; (x becomes 4)
2. y = x; (y becomes 4)
النتيجة النهائية بالذاكرة: x = 4, y = 4
int x = 3;
int y = x++; // assign, then increment
تُعادل برمجياً الخطوتين التاليتين بالترتيب:
1. y = x; (y receives old value 3)
2. x = x + 1; (x becomes 4)
النتيجة النهائية بالذاكرة: x = 4, y = 3
تنبيه: محاولة استخدام المعاملات على تعبير رياضي مثل ++(x+1) تنتج خطأ في الترجمة (Syntax Error). Only apply to variables.
تتبع قيم الذاكرة للزيادة
15/23
أوجد ناتج: System.out.println(x++) إذا كان x=7
06. RELATIONAL OPERATORS المعاملات العلائقية وصح/خطأ
16/23
== equal to (يساوي)
!= not equal to (لا يساوي)
< less than (أصغر)
<= less or equal (أصغر أو يساوي)
> greater than (أكبر)
>= greater or equal (أكبر أو يساوي)
📌 ناتج المقارنة العلائقية هو قيمة منطقية دائماً من نوع boolean (True / False).
int x = 10, y = 15;
// Unicode('a') = 97, Unicode('z') = 122
char ch1 = 'a', ch2 = 'z';
result = (x < y); // true (10 < 15)
result2 = (ch1 >= ch2); // false (97 >= 122)
قاعدة للامتحان: يتم تخزين ناتج المقارنة دائماً في متغير يحمل نوع البيانات boolean. Relational output is boolean.
مسودة العمليات العلائقية
16/23
أوجد ناتج مقارنة: 'b' > 'a'
07. LOGICAL OPERATORS المعاملات المنطقية وجدول الحقيقة
17/23
| In | Out |
|---|---|
| true | false |
| false | true |
تقوم بعكس الحالة المنطقية الحالية مباشرة.
| A | B | Result |
|---|---|---|
| T | T | T |
| T | F | F |
| F | T | F |
| F | F | F |
تعطي True فقط إذا كان كلا الطرفين صحيحين معاً.
| A | B | Result |
|---|---|---|
| T | T | T |
| T | F | T |
| F | T | T |
| F | F | F |
تعطي True إذا كان أحد الطرفين على الأقل صحيحاً.
تنبيه: المعاملات المنطقية تقبل المتغيرات والتعبيرات ذات القيمة boolean فقط كمعاملات لها. Strict logical constraints apply.
مسودة تتبع الجداول المنطقية
17/23
أوجد ناتج: true || false && false
08. OPERATORS PRECEDENCE TABLE الجدول الشامل لأولويات جميع المعاملات
18/23
| المعامل البرمجي (Operator) | الوصف والتسمية | اتجاه الحساب والتجميع (Associativity) |
|---|---|---|
| ( ) | الأقواس الحسابية والبرمجية العليا | من الداخل إلى الخارج (inside-out) |
| ++ , -- | معاملات التحديث القبلية والبعدية | من اليسار إلى اليمين (left-to-right) |
| * , / , % | الضرب، القسمة، وباقي القسمة المتبقي | من اليسار إلى اليمين (left-to-right) |
| + , - | الجمع والطرح الحسابي الثنائي | من اليسار إلى اليمين (left-to-right) |
| < , > , <= , >= | المقارنات والعمليات العلائقية | من اليسار إلى اليمين (left-to-right) |
| == , != | معاملات التطابق والمساواة وعدمها | من اليسار إلى اليمين (left-to-right) |
| && | معامل الربط والوصل المنطقي AND | من اليسار إلى اليمين (left-to-right) |
| = , += , -= , *= , /= , %= | معاملات الإسناد المباشر والمركب المنخفضة | من اليسار إلى اليمين (left-to-right) |
تنبيه للامتحان: تذكر دائماً أن معامل AND (&&) يمتلك أولوية تنفيذ أعلى من معامل OR (||). Complete Java precedence rules.
تتبع وحفظ جدول الأسبقية
18/23
أوجد ناتج تتبع تعبير يجمع الحساب والمنطق
08. COMPLEX LOGIC EVALUATION أمثلة تتبع منطقية معقدة للامتحان
19/23
// Values in RAM:
int x = 24, y = 35, z = 20;
char ch1 = 'a'; // Unicode: 97
char ch2 = 'A'; // Unicode: 65
char ch3 = '<'; // Unicode: 60
char ch4 = '5'; // Unicode: 53
boolean result;
Expression 1: (x >= y) && (ch1 < ch3) ➔ (24 >= 35) && (97 < 60) ➔ false && false ➔ result = false
Expression 2: (ch2 == ch4) || (x > z) ➔ (65 == 53) || (24 > 20) ➔ false || true ➔ result = true
Expression 3: !(ch1 < ch2) ➔ !(97 < 65) ➔ !(false) ➔ result = true
انتبه في الامتحان: تذكر جلب قيم الحروف العشرية من جدول ASCII لإجراء المقارنات بشكل دقيق. Unicode values govern char comparisons.
مسودة وحساب التعبيرات المنطقية
19/23
أوجد ناتج: (y > x) && !(z <= 20)
09. TYPE CASTING تحويل البيانات وقواعد الإكراه
20/23
هو تحويل وحيد الاتجاه تلقائي يقوم به مترجم جافا دون تدخل منك عند خلط أنواع البيانات بالمعادلة؛ ولكن قد ينتج عنه فقدان غير متوقع لبعض القيم والدقة الحسابية.
double result = 15 / 2; // result = 7.0 (Loss of .5!)
هو إجبار المترجم على التحويل يدوياً لنوع محدد بكتابة اسم النوع محاطاً بأقواس قبل التعبير المطلوب تحويله لتأمين النتائج والحسابات.
Syntax: (dataTypeName) expression;
double val = (double) 15 / 2; // val = 7.5 (No loss!)
نصيحة المذاكرة المعتمدة: تجنب خلط أنواع البيانات المتباينة دون تحويل صريح لتفادي الأخطاء المنطقية الكارثية. Always use explicit casting when mixing types.
مسودة وحساب نواتج التحويل
20/23
احسب ناتج: (int) (7.9) و (double) (25)
09. TYPE CASTING EXAMPLES تتبع أمثلة وتطبيقات التحويل يدوياً
21/23
(int) (7.9) ➔ 7 (يحذف الكسر تماماً)
(double) (25) ➔ 25.0
(double) (15 / 2) ➔ (double)(7) = 7.0 (Loss!)
(double)(15) / 2 ➔ 15.0 / 2 = 7.5 (No Loss!)
📌 لاحظ الفارق الكبير بالناتج وموضع الأقواس الوهمية في الذاكرة.
يُمكننا التحويل الصريح بين الحروف وقيمها المقابلة بجدول أسكي (ASCII) بسهولة تامة:
char ch = 'a'; // Code of 'a' = 97
int unicode = (int) ch; ➔ unicode = 97
int x = 98;
char ch2 = (char) x; ➔ ch2 = 'b'
تذكر للامتحان: يتم التحويل أولاً قبل تنفيذ أي عملية خارجية ما لم تُحاط العملية الإجمالية بأقواس. Brackets lock explicit casting priorities.
مسودة وحساب نواتج التحويل
21/23
احسب ناتج: (int) (7.8 + (double) (15 / 2))
SELF-CHECK تمارين التقييم الذاتي - الجزء الأول
22/23
• 23 + 7 % 2 - 3; ➔ 23 + 1 - 3 = 21
• 15.0 + 3.0 * 2.0 / 5.0; ➔ 15.0 + 6.0 / 5.0 = 16.2
• 30.0 % 6 + 1; ➔ 0.0 + 1 = 1.0
• y *= 2 * x + 5 - z; // x=5, y=7, z=10
➔ y = y * (2 * 5 + 5 - 10) = 7 * 5 = 35
• z %= x; // z=10 % 5 ➔ 0
اكتب كود جافا كامل لتبديل قيم متغيرين في الذاكرة (Swapping)، بحيث إذا كانت x = 5 و y = 7، بعد التبديل تصبح x = 7 و y = 5.
// Solution using a temporary cell (temp):
int temp = x; // temp gets 5
x = y; // x gets 7
y = temp; // y gets 5
نصيحة المذاكرة: تذكر دائماً استخدام متغير مؤقت (temp) لحفظ القيمة المفقودة قبل عملية المسح بالذاكرة. Swapping is a core algorithmic skill.
حل وتتبع تمارين التقييم
22/23
تتبع قيم الذاكرة بالكامل لبرنامج Swapping
SELF-CHECK تمارين التقييم الذاتي - الجزء الثاني
23/23
1 public class Trace {
2 public static void main(String[] args) {
3 int firstNum, secondNum; char ch; double z;
4 firstNum = 4;
5 secondNum = 2 + firstNum * 6; // 2 + 4 * 6 = 26
6 z = (firstNum + 1) / 2.0; // (4+1)/2.0 = 2.5
7 ch = 'A';
8 firstNum = (int) (z) + 8; // (int)(2.5) + 8 = 2 + 8 = 10
9 firstNum = secondNum--; // assign old 26 first, then secondNum=25
10 }
}
| السطر (Line) | firstNum | secondNum | ch | z |
|---|---|---|---|---|
| Line 4 | 4 | Undefined | Undefined | Undefined |
| Line 5 | 4 | 26 | Undefined | Undefined |
| Line 6 | 4 | 26 | Undefined | 2.5 |
| Line 7 | 4 | 26 | 'A' | 2.5 |
| Line 8 | 10 | 26 | 'A' | 2.5 |
| Line 9 | 26 | 25 | 'A' | 2.5 |
نصيحة الامتحان: انتبه لتفاصيل الزيادة/النقصان البعدية (Post-decrement) في سطر 9! تم إسناد الـ 26 أولاً ثم طرح 1. End of Chapter 2 Slides set. Excel your exams!
التتبع والحل النهائي للتمرين
23/23
أعد تتبع السطر 9 واكتب تفاصيل تبديل الذاكرة