مادة CPCS 202، برمجة 1 (Programming I). هي أول مادة برمجة حقيقية تدرسها في كلية الحاسبات وتقنية المعلومات (FCIT) بجامعة الملك عبدالعزيز. هذه المادة هي الأساس اللي يُبنى عليه كل شيء بعدها: البرمجة كائنية التوجه، هياكل البيانات، هندسة البرمجيات، وحتى مشروع التخرج. لو بنيت أساسك صح هنا، باقي المشوار يصير أسهل بكثير.
المادة تستخدم لغة جافا (Java) كلغة تدريس، والمرجع المعتمد هو كتاب “Introduction to Java Programming, Comprehensive” لـ Y. Daniel Liang، وهو من أشهر كتب تعليم جافا في العالم.
ما تحتاج أي خبرة برمجية سابقة، المادة تبدأ معك من الصفر. بس لازم تكون مستعد تتمرن كثير لأن البرمجة مهارة عملية قبل ما تكون نظرية.
📋 ملخص سريع
- رمز المادة: CPCS 202، برمجة 1 (Programming I)
- الساعات المعتمدة: 3 ساعات (3 نظري + 1 لاب عملي)
- المتطلب السابق: لا يوجد. هذه أول مادة برمجة
- اللغة المستخدمة: Java
- الكتاب المقرر: “Introduction to Java Programming, Comprehensive”، Y. Daniel Liang
- المستوى: المستوى الثالث في خطة علوم الحاسب
- يقود إلى: CPCS 203 (برمجة 2، البرمجة كائنية التوجه)
ليش مادة CPCS 202 مهمة؟
قبل ما ندخل في التفاصيل، خلنا نفهم ليش هذه المادة أساسية:
- البوابة لكل مواد البرمجة: ما تقدر تاخذ CPCS 203 أو أي مادة برمجية ثانية بدونها
- تبني طريقة تفكيرك البرمجي: مو بس تتعلم syntax، تتعلم كيف تحلل مشكلة وتحولها لكود
- أساسيات تنفعك في أي لغة: المفاهيم اللي تتعلمها (متغيرات، شروط، حلقات، دوال) موجودة في كل لغات البرمجة
- الدرجة مهمة: كثير من الشركات تسأل عن معدلك في مواد البرمجة الأساسية
نظرة عامة على مادة CPCS 202
المادة تتوزع على 15 أسبوع تقريبا بهذا الترتيب:
| الأسابيع | الموضوع | فصول الكتاب (Liang) |
|---|---|---|
| 1-2 | مقدمة في جافا وبيئة التطوير | Ch 1-2 |
| 3-4 | المتغيرات وأنواع البيانات والعمليات الحسابية | Ch 2-3 |
| 5-6 | جمل الشرط (if/else, switch) | Ch 3-4 |
| 7-8 | الحلقات (for, while, do-while) | Ch 5 |
| 9-10 | الدوال (Methods) | Ch 6 |
| 11-13 | المصفوفات (Arrays) أحادية وثنائية البعد | Ch 7-8 |
| 14-15 | مراجعة شاملة ومشروع نهائي | ، |
ℹ️ ملاحظة مهمة عن اللاب
اللاب العملي يكون أسبوعي وهو جزء أساسي من الدرجة. كل أسبوع تطبّق الموضوع اللي درسته في المحاضرة. لا تهمل اللاب، كثير من أسئلة الاختبار تجي من تمارين اللاب بالضبط.
1. مقدمة في جافا وبيئة التطوير (الأسابيع 1-2)
أول شيء تتعلمه هو: ما هي البرمجة؟ وكيف الكمبيوتر يفهم الكود؟ وليش جافا؟
إعداد بيئة العمل
راح تحتاج تنزّل JDK (Java Development Kit) وبيئة تطوير مثل Eclipse أو IntelliJ IDEA أو حتى NetBeans. في الغالب المادة تستخدم Eclipse.
أول برنامج لك في جافا
// أول برنامج - يطبع رسالة ترحيب
public class HelloWorld {
public static void main(String[] args) {
System.out.println("مرحبا بالعالم!"); // طباعة نص
System.out.println("أنا أتعلم جافا في CPCS 202");
}
}
مفاهيم أساسية تفهمها من البداية
- كل برنامج جافا لازم يكون داخل class
- التنفيذ يبدأ من
main method - كل سطر ينتهي بـ فاصلة منقوطة
; System.out.println()تطبع نص وتنزل سطر جديد
💡 نصيحة للمبتدئين
لا تحاول تفهم كل شيء في السطر الأول (public static void main). في هذه المرحلة، احفظه كقالب وركّز على ما يكون داخل الـ main. راح تفهم كل كلمة فيه لما توصل CPCS 203.
2. المتغيرات وأنواع البيانات (الأسابيع 3-4)
هنا تبدأ تتعامل مع البيانات. المتغيرات هي “صناديق” تخزّن فيها قيم.
أنواع البيانات الأساسية في جافا
// أنواع البيانات الأساسية (Primitive Types)
int age = 20; // عدد صحيح
double gpa = 4.75; // عدد عشري
char grade = 'A'; // حرف واحد
boolean passed = true; // قيمة منطقية (true أو false)
String name = "أحمد"; // نص (سلسلة محارف)
العمليات الحسابية والمنطقية
int x = 10, y = 3;
System.out.println(x + y); // 13 - جمع
System.out.println(x - y); // 7 - طرح
System.out.println(x * y); // 30 - ضرب
System.out.println(x / y); // 3 - قسمة صحيحة (انتبه! مو 3.33)
System.out.println(x % y); // 1 - باقي القسمة
قراءة مدخلات من المستخدم
import java.util.Scanner;
public class InputExample {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("أدخل اسمك: ");
String name = input.nextLine(); // قراءة نص
System.out.print("أدخل عمرك: ");
int age = input.nextInt(); // قراءة عدد صحيح
System.out.println("مرحبا " + name + "! عمرك " + age);
}
}
⚠️ خطأ شائع: القسمة الصحيحة
لما تقسم int / int النتيجة تكون int، يعني 10 / 3 = 3 مو 3.33. لو تبي النتيجة عشرية، لازم واحد من الأرقام يكون double:
10.0 / 3 أو (double) 10 / 3
هذا من أكثر الأخطاء اللي يخسر فيها الطلاب درجات في الاختبار.
3. جمل الشرط، Selection Statements (الأسابيع 5-6)
تعبت من البرامج اللي تسوي نفس الشيء كل مرة؟ جمل الشرط تخلي برنامجك ياخذ قرارات.
جملة if / else
// حساب التقدير بناء على المعدل
double gpa = 3.8;
if (gpa >= 4.5) {
System.out.println("ممتاز");
} else if (gpa >= 3.75) {
System.out.println("جيد جدا");
} else if (gpa >= 2.75) {
System.out.println("جيد");
} else if (gpa >= 2.0) {
System.out.println("مقبول");
} else {
System.out.println("راسب");
}
جملة switch
// تحديد اسم اليوم من رقمه
int day = 3;
switch (day) {
case 1: System.out.println("الأحد"); break;
case 2: System.out.println("الاثنين"); break;
case 3: System.out.println("الثلاثاء"); break;
case 4: System.out.println("الأربعاء"); break;
case 5: System.out.println("الخميس"); break;
default: System.out.println("عطلة نهاية الأسبوع");
}
الشروط المتداخلة (Nested if)
// التحقق من أهلية التسجيل
int credits = 15;
double gpa = 3.0;
if (credits >= 12) {
if (gpa >= 2.0) {
System.out.println("مؤهل للتسجيل الكامل");
} else {
System.out.println("مؤهل للتسجيل المحدود");
}
} else {
System.out.println("غير مؤهل - أكمل الساعات المطلوبة");
}
⚠️ خطأ شائع: = مقابل ==
المقارنة تستخدم == (يساوي) وليس = (إسناد). لو كتبت if (x = 5) بدل if (x == 5) جافا راح تعطيك خطأ. هذا خطأ يتكرر كثير في أول اختبار.
4. الحلقات، Loops (الأسابيع 7-8)
تبي تكرر عملية 100 مرة بدون ما تكتب 100 سطر؟ الحلقات هي الحل.
حلقة for
// طباعة الأرقام من 1 إلى 10
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
حلقة while
// جمع أرقام من المستخدم حتى يدخل 0
Scanner input = new Scanner(System.in);
int sum = 0;
int number;
System.out.print("أدخل رقم (0 للإنهاء): ");
number = input.nextInt();
while (number != 0) {
sum += number; // sum = sum + number
System.out.print("أدخل رقم (0 للإنهاء): ");
number = input.nextInt();
}
System.out.println("المجموع = " + sum);
حلقة do-while
// قائمة خيارات تتكرر حتى يختار المستخدم الخروج
Scanner input = new Scanner(System.in);
int choice;
do {
System.out.println("1. عرض الدرجات");
System.out.println("2. حساب المعدل");
System.out.println("3. خروج");
System.out.print("اختيارك: ");
choice = input.nextInt();
if (choice == 1) {
System.out.println("عرض الدرجات...");
} else if (choice == 2) {
System.out.println("حساب المعدل...");
}
} while (choice != 3);
كثير من طلاب CPCS 202 يعتبرون الحلقات المتداخلة أصعب جزء في المادة. لو حسيت إنها معقدة، هذا طبيعي. خذ وقتك وتتبع الكود خطوة بخطوة.
الحلقات المتداخلة (Nested Loops)
تعبت من الحلقات المتداخلة؟ الحيلة إنك تفهم إن الحلقة الداخلية تنفذ بالكامل مع كل دورة من الحلقة الخارجية.
// طباعة مثلث من النجوم
for (int i = 1; i <= 5; i++) { // الحلقة الخارجية: عدد الصفوف
for (int j = 1; j <= i; j++) { // الحلقة الداخلية: عدد النجوم في كل صف
System.out.print("* ");
}
System.out.println(); // سطر جديد بعد كل صف
}
// النتيجة:
// *
// * *
// * * *
// * * * *
// * * * * *
💡 متى تستخدم كل حلقة؟
- for: لما تعرف عدد التكرارات مسبقا (مثلا: كرر 10 مرات)
- while: لما ما تعرف عدد التكرارات وتعتمد على شرط (مثلا: كرر حتى المستخدم يدخل 0)
- do-while: مثل while بس تضمن التنفيذ مرة واحدة على الأقل (مثلا: القوائم)
واجب الحلقات المتداخلة صعب عليك؟
كثير من طلاب CPCS 202 يطلبون مساعدتنا في هذا الجزء بالذات. أرسل الواجب على واتساب ونرد عليك بعرض سعر خلال ساعة.
أرسل واجبك على واتساب5. الدوال، Methods (الأسابيع 9-10)
الدوال هي أول خطوة نحو كود منظم وقابل للقراءة. بدل ما تكتب كل شيء في main في كتلة واحدة يصعب تتبعها، تقسّم البرنامج لأجزاء صغيرة، كل جزء يسوي شيء محدد.
تعريف واستدعاء الدوال
// دالة تحسب مربع رقم
public static int square(int n) {
return n * n;
}
// دالة تحسب الحد الأقصى بين رقمين
public static int max(int a, int b) {
if (a > b) {
return a;
} else {
return b;
}
}
نستدعي هذه الدوال من داخل main لتجربتها:
public static void main(String[] args) {
int result = square(5); // result = 25
int bigger = max(10, 20); // bigger = 20
System.out.println("مربع 5 = " + result);
System.out.println("الأكبر = " + bigger);
}
دوال بدون قيمة راجعة (void)
// دالة تطبع خط فاصل
public static void printLine() {
System.out.println("========================");
}
// دالة ترحّب بالمستخدم
public static void greet(String name) {
System.out.println("مرحبا يا " + name + "!");
}
Method Overloading (تعدد الدوال بنفس الاسم)
// نفس الاسم لكن بارامترات مختلفة
public static int add(int a, int b) {
return a + b;
}
public static double add(double a, double b) {
return a + b;
}
public static int add(int a, int b, int c) {
return a + b + c;
}
ℹ️ الفرق بين Parameter و Argument
- Parameter (معامل): المتغير في تعريف الدالة، مثلا
int nفيsquare(int n) - Argument (وسيط): القيمة الفعلية لما تستدعي الدالة، مثلا
5فيsquare(5)
هذا الفرق يجي في الاختبارات النظرية كثير!
6. المصفوفات، Arrays (الأسابيع 11-13)
المصفوفات تخليك تخزّن مجموعة بيانات من نفس النوع في متغير واحد. بدل ما تعرّف 30 متغير لدرجات 30 طالب، تعرّف مصفوفة وحدة.
المصفوفات أحادية البعد (1D Arrays)
// إنشاء مصفوفة وتعبئتها
int[] grades = {85, 92, 78, 95, 88};
// إنشاء مصفوفة فارغة
double[] scores = new double[5]; // 5 عناصر كلها 0.0
// الوصول للعناصر (الفهرس يبدأ من 0)
System.out.println(grades[0]); // 85 - أول عنصر
System.out.println(grades[4]); // 88 - آخر عنصر
// المرور على كل العناصر
for (int i = 0; i < grades.length; i++) {
System.out.println("الطالب " + (i+1) + ": " + grades[i]);
}
خوارزميات شائعة على المصفوفات
int[] numbers = {45, 12, 78, 34, 90, 23};
// إيجاد المجموع والمتوسط
int sum = 0;
for (int i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
double average = (double) sum / numbers.length;
System.out.println("المتوسط = " + average);
// إيجاد أكبر قيمة
int max = numbers[0]; // نفترض أول عنصر هو الأكبر
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] > max) {
max = numbers[i];
}
}
System.out.println("أكبر قيمة = " + max);
المصفوفات ثنائية البعد تحتاج تركيز أكثر، الحلقتين المتداخلتين مع الفهارس ممكن تلخبطك في البداية، بس مع التمرين تصير سهلة.
المصفوفات ثنائية البعد (2D Arrays)
// جدول درجات: 3 طلاب × 4 مواد
int[][] grades = {
{85, 90, 78, 92}, // الطالب الأول
{88, 76, 95, 80}, // الطالب الثاني
{70, 85, 88, 91} // الطالب الثالث
};
// المرور على كل العناصر
for (int i = 0; i < grades.length; i++) { // الصفوف (الطلاب)
int studentSum = 0;
for (int j = 0; j < grades[i].length; j++) { // الأعمدة (المواد)
studentSum += grades[i][j];
}
double avg = (double) studentSum / grades[i].length;
System.out.println("الطالب " + (i+1) + " - المعدل: " + avg);
}
⚠️ خطأ شائع: ArrayIndexOutOfBoundsException
لو عندك مصفوفة بحجم 5، آخر فهرس هو 4 (مو 5). كثير من الطلاب يكتبون i <= array.length بدل i < array.length ويطيح البرنامج. تذكّر: الفهرس يبدأ من 0 وينتهي عند length - 1.
واجب المصفوفات ثنائية البعد محيّرك؟
واجبات المصفوفات من أكثر الواجبات اللي يطلب فيها طلاب FCIT مساعدة. أرسل لنا تفاصيل الواجب ونحله لك مع شرح كامل.
تواصل معنا عبر واتسابأخطاء شائعة في CPCS 202 وكيف تتجنبها
خلنا نجمع أكثر الأخطاء اللي يخسر فيها الطلاب درجات:
الأخطاء الأكثر تكرارا
- نسيان الفاصلة المنقوطة
;، جافا ما تسامح في هذا - = بدل == في الشروط،
if (x = 5)غلط، الصحif (x == 5) - القسمة الصحيحة،
10 / 3يعطي3مو3.33 - فهرس المصفوفة، يبدأ من 0 مو من 1
- عدم إغلاق الأقواس
{}، خصوصا في الحلقات المتداخلة - استخدام
==لمقارنة النصوص، الصح تستخدم.equals()مثل:name.equals("أحمد") - نسيان
breakفي switch، بدون break البرنامج يكمل لكل الحالات - Infinite loop، حلقة ما تنتهي لأنك نسيت تحدّث المتغير
أخطر هذي الأخطاء في الاختبار هي رقم 3 ورقم 6. ليش؟ لأنهم ما يعطون compile error — الكود يشتغل بشكل طبيعي، لكن النتيجة غلط. طالب ياخذ صفر في سؤال كامل وهو متأكد إن كوده صح.
نصائح للاب العملي
اللاب في CPCS 202 يكون عادة مرة في الأسبوع وهو جزء مهم من درجتك. إليك بعض النصائح:
- اكتب الكود بنفسك، لا تنسخ من زميلك. حتى لو الكود صح، لو ما كتبته بنفسك ما راح تتعلم
- جرّب الأخطاء، لما يطلع لك error، اقرأ رسالة الخطأ. جافا واضحة في رسائلها
- ابدأ بحل بسيط، لا تحاول تكتب الحل المثالي من أول مرة. اكتب شيء يشتغل أول، بعدين حسّنه
- سوّي test بأرقام بسيطة، قبل ما تسلّم، جرّب برنامجك بمدخلات مختلفة
- لا تخاف تسأل، الـ TA موجود يساعدك
نصائح للاختبارات
اختبارات CPCS 202 عادة تتنوع بين:
أنواع الأسئلة المتوقعة
- تتبع الكود (Trace): يعطيك كود ويسألك عن المخرجات، لازم تنفذ الكود خطوة بخطوة
- اكتشاف الأخطاء: يعطيك كود فيه أخطاء وتصلحها
- اكتب كود: يعطيك مسألة وتكتب الحل بجافا
- أسئلة نظرية: مثل الفرق بين while و do-while، أو أنواع البيانات
استراتيجية المذاكرة
خطة مذاكرة فعالة لـ CPCS 202
- راجع سلايدات المحاضرة، ركّز على الأمثلة مو بس التعريفات
- حل تمارين الكتاب، Liang فيه تمارين ممتازة في نهاية كل فصل
- أعد حل تمارين اللاب، بدون ما تشوف الحل
- حل اختبارات سابقة، إذا لقيت اختبارات سنوات سابقة، هذه أفضل طريقة تجهّز نفسك
- اكتب الكود بيدك على ورق، في الاختبار ما فيه compiler يصحح لك، تمرّن تكتب كود بدون أخطاء
- سوّ مجموعة دراسة، اشرح لزميلك واسأله يشرح لك
💡 نصيحة ذهبية للاختبار
في سؤال تتبع الكود، ارسم جدول للمتغيرات وحدّث القيم مع كل سطر. هذي الطريقة تقلل الأخطاء بشكل كبير وتوفر وقت. الدكتور يحب يشوف شغلك مرتب.
ربط المادة بمسارك الأكاديمي
بعد ما تنهي CPCS 202 بنجاح، المادة التالية هي CPCS 203، برمجة 2 (البرمجة كائنية التوجه). في CPCS 203 راح تتعلم كيف تنظم كودك باستخدام الكلاسات والكائنات والوراثة، وكل شيء تعلمته في CPCS 202 راح تستخدمه هناك.
لو تبي شرح أعمق لأساسيات جافا، اقرأ دليلنا الشامل لتعلم جافا، يغطي المفاهيم بتفصيل أكثر مع أمثلة إضافية.
خلاصة
مادة CPCS 202 مو مادة صعبة. بس الفرق بين طالب يفهمها وطالب ما يفهمها هو ببساطة كم ساعة قضى يكتب كود فعلي — مو يقرأ أو يشوف شرح.
شيء مهم تاخذه معك: المفاهيم اللي تعلمتها هنا موجودة في كل لغات البرمجة. لو فهمت الحلقات والدوال والمصفوفات بجافا، تقدر تتعلم Python أو JavaScript في وقت أقل بكثير مما تتوقع. CPCS 202 مو فقط “مادة جافا” — هي مادة “كيف تفكر كمبرمج”.
افتح الـ IDE، اكتب كل مثال في هذا المقال، عدّله وشوف وش يصير.
واجب CPCS 202 ضاغطك والديدلاين قريب؟
فريقنا متخصص في مواد كلية الحاسبات بجامعة الملك عبدالعزيز. أرسل لنا الواجب على واتساب وراح نرد عليك بعرض سعر خلال ساعة، شرح + حل كامل.
أرسل واجبك الآن