Nov 242011
 

ربما لم أضع الدروس بالترتيب الصحيح، إذ انه من المفترض أن يكون هذا الدرس من أوائل الدروس. يفترض الآن أن هناك العديد من الأمثلة في الدروس السابقة للعمليات.
هناك العديد من العمليات والتعابير في لغات البرمجة، وفي العادة تستخدم في العمليات الرياضية وفي الأوامر الشرطية. والجدول الآتي يوضح بعض هذه العمليات:

العملية الشرح مثال
+ تستخدم لعمليات الجمع 1+ 2
++ أضف 1 i++
تستخدم لعمليات الطرح 1 – 2
اطرح 1 i–
* تستخدم لعمليات الضرب 1 * 2
/ تستخدم لعمليات القِسمة 1 / 2
% تستخدم لعرض الباقي من عملية القسمة 1 % 2
التعابير
== للتساوي a == b
=! لا يساوي a != b
< و > تستخدم لعمليات المقارنة، أكبر أو أصغر من a > b
=< أو => أكبر أو يساوي / أصغر أو يساوي a >= b
|| أو“or” – أي يتحقق
أحد الشروط
a == b || c == d
&& و “and” – يجب أن
تتحقق كل الشروط
a == b && c == d

العمليات ليست معقدة وتم شرحها في دروس سابقة ومن الأمثلة السابقة:

sum = a + b;

هي عملية جمع، حاصل ناتج جمع المتغير a مع b، أو للطرح:

sub = a - b;

حاصل طرح a من b وهكذا ..

سيتم شرح الأوامر الشرطية في درس لاحق بإذن الله 🙂

Nov 212011
 

في درس اليوم سنحتاج لكافة ما تعلمناه في الدروس السابقة، وسأقوم بتدريج الدرس من الأسهل فما فوق. قبل البدأ في الدرس والأمثلة، هناك جزء مهم لم يتم شرحه في المقدمات السابقة بشكل وافي، وهو المكتبات المرفقة مع Java. إذ أن Java تحتوي على عدة مكتبات من شأنها المساعدة على معالجة البرنامج وأيضًا التسهيل والاختصار على المستخدم. في Java لإدراج مكتبة معينة نستخدم الكلمة المفتاحية import تتليها مسافة ثم اسم المكتبة قبل اسم الكائن أو class. مثال:

import java.util.scanner;

في المثال هناك اسم احد المكاتب الجاهزة في Java، وقد قمت بتضمينها جزء معين منها وهو “scanner” الخاص بالمدخلات، ويمكننا تضمين كافة اجزاء مكتبة معينة بالطريقة الآتية:

import java.util.*;

أي نستبدل الجزء بـ”*” ويقصد بها التعميم على جميع افرع المكتبة المحددة

في الدرس الذي بعنوان البرنامج الأول باستخدام Java تم شرح طريقة كتابة برنامج بسيط بـJava، وأيضًا شُرحت بعض المعطيات في الكائن. وفي درس آخر بعنوان المتغيرات والمصفوفات في Java تم وضع شرح حول المتغيرات وأنواعها. انتهينا من المقدمة التجهيزية :mrgreen: .

 

الجزء الاول لدرس المدخلات: الادخال لمتغير بسيط:

صنع برنامج لعمل عملية حسابية بين رقمين، اسم الكائن هو testinput، والمتغيرات a للرقم الأول، b للرقم الثاني، sum لناتج الجمع و input للمدخلات.

مثلما ذُكِر في المقدمة، سنقوم بتضمين إحدى مكتبات Java المرفقة مسبقًا إلى البرنامج للتعامل مع المدخلات فسنضع في السطر الأول أمر الاستيراد أو التضمين:

import java.util.*;

بعد امر الاستيراد سنقوم ببدأ بقية البرنامج بشكل اعتيادي ليكون كالتالي:

class testinput
{
public static void main(String[]args)
{

* لا تنسى إغلاق الأقواس بعد الانتهاء من البرنامج 🙂

الآن لنقم بتحديد انواع المتغيرات، ولنتفرض أنها اعداد صحيحة (integer) كالتالي:

int a, b, sum;

بما أنه هناك مكتبة خارجية، يجب التعريف بالمكتبة ضمن البرنامج؛ لذلك سنستخدم كلمة مفتاحية جديدة وهي new وتستخدم لإنشاء مثيل لكائن أو متغير ضمن كائن آخر ( ربما لم أكتبها بشكل صحيح – يمكن التأكد من الموسوعة الحرة).

الطريقة الصحيحة لتخصيص متغير لمكتبة التعامل مع المدخلات هو كتابة الكلمة المفتاحية Scanner يتلوها اسم المتغير ولنفترض انه input، وبعدها علامة “=” تتلوها الكلمة المفتاحية new وأخيرًا كتابة الدالة Scanner وبين قوسين كتابة System.in. (لاحظ أن كافة السطر ثوابت باستثناء المتغير input، أي يمكننا استبداله بأي اسم آخر). المثال:

Scanner input = new Scanner(System.in);

بعد ان قمنا بتهيئة مكتبة الادخال، لجلب المدخلات نستخدم الطريقة الآتية:

a = input.nextInt();
b = input.nextInt();

وهكذا بالترتيب. لاحظ استخدام “nextInt“؛ هي من ثوابت مكتبة الادخال، ولها انواع اخرى بنفس الوزن مثل:

input.nextDouble();

input.nextFloat();

input.nextChar();

النوع تحدده حسب نوع المتغير الذي يتم تخزين البيانات به

بعد أن قمنا بتخزين المدخلات في المتغيرات a و b سنقوم بتخزين حاصل جمعهما في المتغير sum كالتالي:

sum = a+b;

وببساطة نتابع بقية البرنامج:

System.out.print(a + " + " + b + " = " + sum);
}
}

شفرة البرنامج كاملة:

import java.util.*;
class testinput
{
 public static void main(String[]args)
 {
  int a, b, sum;
  Scanner input = new Scanner(System.in);
  System.out.print("Enter 2 numbers: ");
  a = input.nextInt();
  b = input.nextInt();

  sum = a+b;

  System.out.print(a + " + " + b + " = " + sum);
 }
}

صورة للناتج:

الجزء الثاني من الدرس: الادخال لمصفوفة:

الاختلاف بسيط عن الطريقة السابقة، لكن اكمالًا لتقصير في شرح درس المتغيرات السابق؛ سأقوم بتوضيح طريقة تعيين حجم المصفوفة بالشكل الصحيح. هنا سنقوم باستخدام الكلمة المفتاحية new مرة أخرى.

لعمل متغير باسم numbers بطول (2) أو مكانين للتخزين، نكتب الكلمة المفتاحية int[] (لاحظ الاقواس المربعة) ويتلوها اسم المتغير وهو numbers وعلامة “=” ثم نكتب الكلمة المفتاحية new وأخيرًا نكرر int لكن هذه المرة مع حجم المتغير بين القوسين المربعين [2]. المثال:

int[] numbers = new int[2];

أيضًا عن المثال في الجزء الأول، سنضطر لتغيير المتغيرات a و b إلى متغير المصفوفة ورقم الفهرسة (index) ليكون:

numbers[0] عوضًا عن a
numbers[1] عوضًا عن b

البرنامج كاملًا بعد التعديلات اللازمة:

import java.util.*;
class testinput
{
 public static void main(String[]args)
 {
  int[] numbers = new int[2];
  int sum;
  Scanner input = new Scanner(System.in);
  System.out.print("Enter 2 numbers: ");
  numbers[0] = input.nextInt();
  numbers[1] = input.nextInt();

  sum = numbers[0]+numbers[1];

  System.out.print(numbers[0] + " + " + numbers[1] + " = " + sum);
 }
}

الجزء الثالث والأخير من الدرس: استخدام التكرار في الادخال ومعالجة المدخلات:

للتذكير: يمكن الوصول لدرس التكرارات عبر الدرس التكرار في C, Java و PHP.

بذكر التكرار والادخال، نستنج أن الطريقة الأفضل للمتغيرات هي استخدام المصفوفات، لأن المصفوفات تحتوي على رقم فهرس (index) ومن خلال التكرار يمكن التحكم بها. قبل البدأ في الادخال، للتوضيح سأضع مثالًا لكيفية عرض محتوى مصفوفة معينة باستخدام التكرار. المثال التالي مع الشرح:

class testloop
{
 public static void main(String[]args)
 {
  // المصفوفة مع بعض القيم
  int[] numbers = {10,33,21,53,22};
  //تعريف متغير حساب التكرار
  int i;
  /* أمر التكرار
   *  لاحظ استخدام
   *  numbers.length
   *  الغرض من ذلك هو تحديد طول المصفوفة تلقائيًا دون الحاجة لكتابة الرقم يدويًا
   *  ويمكن كتابة الرقم ليكون حسب المثال السابق 5
   *  لاحظ أن شرط المصفوفة هو أن يكون متغير حساب التكرار أصغر من حجم المصفوفة
   *  لأن المصفوفة تبدأ من الصفر، بالتالي فإن آخر فهرس هو 4
  */

  for(i=0;i<numbers.length;i++)
  {
   /* طباعة محتوى المصفوفة
    *  لاحظ ان متغير حساب التكرار هو بمكان رقم الفهرس
    *  حسب الأمثلة السابقة دون التكرار
   */
   System.out.print(numbers[i] + "\n");
  }
 }
}

(يفضل نسخ الشفرة السابقة لمحرر Java لتظهر بشكل صحيح)

 

حان الوقت لتطبيق المثال السابق للعمليات الحسابية وباستخدام التكرار، الاختلاف ليس بالكثير، الشفرة كاملة:

import java.util.*;
class testinput
{
 public static void main(String[]args)
 {
  // تحديد نوع المصفوفة وطولها
  int[] numbers = new int[5];
  // تحديد نوع متغير حساب التكرار ومتغير تخزين حاصل الجمع
  int i,sum;
  // تحديد قيمة متغير حساب المجموع بصفر لتجنب الأخطاء في بداية العملية الحسابية
  sum = 0;
  Scanner input = new Scanner(System.in);
  System.out.print("Enter 5 numbers: ");
  // أمر التكرار، لتخزين المدخلات فقط
  for(i=0;i<numbers.length;i++)
  {
   numbers[i] = input.nextInt();
  }
  /* أمر التكرار للعمليات الحسابية
   * لاحظ طريقة كتابة المتغير
   * ويقصد به جمع القيم السابقة في متغير حساب المجموع مع محتوى المصفوفة
   * ويمكن كتابته بطرق أخرى مثل:
   * sum += numbers[i];
  */
  for(i=0;i<numbers.length;i++)
  {
   sum = sum + numbers[i];
  }  

  System.out.print("sum = " + sum);
 }
}

صورة للناتج:

 

يمكن طرح الاستفسارات في التعليقات أسفل الدرس 🙂

Nov 162011
 

بما أن اوامر التكرار تشبه بعضها بعضًا بشكل كبير، في هذا الدرس سيتم شرحها لـ3 لغات برمجية مختلفة. للدروس السابقة يمكنك العودة للأقسام من القائمة الجانبية.

هناك عِدة أهداف من أوامر التكرار أهمها هو تجنب تكرار الشفرة لذات الغرض أكثر من مرة، لنتفرض أنك ترغب بعمل برنامج لحساب حاصل جمع 10 ارقام، بالتالي سيكون عليك تكرار الشفرات 10 مرات لكل رقم على حدى، لكن يمكن اختصار السطور باستخدام أوامر التكرار.

في Java, C و PHP، هناك 3 انواع من أوامر التكرار وهي:

  1. while
  2. do-while
  3. for

وتستخدم بالطريقة الآتية:

1. while

أولًا: تحديد متغير بقيمة أولية ولنفترض أنه i والقيمة الأولية هي 1.

ثانيًا: كتابة الكلمة المفتاحية while وبين قوسين كتابة “expression” أو تعبير رياضي من خلاله تحدد القيمة النهائية للتكرار، لنتفرض أننا نريد إيقاف التكرار عندما تبلغ قيمة i الرقم 10 مثلًا، فيمكن كتابة التعبير (i < 11) – اي المتغير أصغر من 11 أو (i <= 10) – أي المتغير اصغر أو يساوي 10.

ثالثًا: داخل كتلة التكرار “أي بين { و }” تضع ذات المتغير بشكل متزايد؛ مثلًا: i++ أو i= i+1 أو يمكن بطرق أخرى. عدم وضع التزايد قد يسبب حمل زائد على الذاكرة بالتالي إيقاف عمل البرنامج، وذلك يعتمد على المترجم.

2. do-while

أولًا: تحديد متغير بقيمة أولية ولنفترض أنه i والقيمة الأولية هي 1.

ثانيًا: كتابة الكلمة المفتاحية do ويتلوها قوسي الكتلة “أي { و }”.

ثالثًا: داخل كتلة التكرار “أي بين { و }” تضع ذات المتغير بشكل متزايد؛ مثلًا: i++ أو i= i+1 أو يمكن بطرق أخرى. عدم وضع التزايد قد يسبب حمل زائد على الذاكرة بالتالي إيقاف عمل البرنامج، وذلك يعتمد على المترجم.

رابعًا: كتابة الكلمة المفتاحية while وبين قوسين كتابة “expression” أو تعبير رياضي من خلاله تحدد القيمة النهائية للتكرار، لنتفرض أننا نريد إيقاف التكرار عندما تبلغ قيمة i الرقم 10 مثلًا، فيمكن كتابة التعبير (i < 11) – اي المتغير أصغر من 11 أو (i <= 10) – أي المتغير اصغر أو يساوي 10.

3. for

تلخص كافة الخطوات في while في سطر واحد ليكون كالتالي:

كلمة for المفتاحية وبين القوسين بالترتيب: نكتب قيمة المتغير الأولية ونضع “؛” (فاصلة منقوطة) وبعدها التعبير الرياضي (مثلا i<=10) ونضع “؛” وأخيرًا نضع امر التزايد ليكون مثلًا i++

 

الآن سأقوم بوضع الأمثلة لتصل المعلومة بشكل أفضل، أولًا: Java:

class testloop
{
public static void main(String[]args)
{
int i;

//type 1
i=1;
System.out.print("Type 1 (while): \n");
while(i <= 10)
{
System.out.print(i + "\n");
i++;
}

//type 2
i=1;
System.out.print("\nType 2 (do-while): \n");
do
{
System.out.print(i + "\n");
i++;
}
while(i <= 10);

//type 3
System.out.print("\nType 3 (for): \n");
for(i=1;i<=10;i++)
{
System.out.print(i + "\n");
}
}
}

ثانيًا: C:

#include <stdio.h>
main()
{
int i;

//type 1
i=1;
printf("Type 1 (while): \n");
while(i<=10)
{
printf("%d \n", i);
i++;
}

//type 2
i=1;
printf("\nType 2 (do-while): \n");
do
{
printf("%d \n", i);
i++;
}
while(i<=10);

//type 3
printf("\nType 3 (for): \n");
for(i=1;i<=10;i++)
{
printf("%d \n", i);
}

}

ثالثًا: PHP:

<?PHP
// Type 1
$i=1;
echo "type 1 (while):<br />\n";
while($i <= 10)
{
echo $i."<br />";
$i++;
}

// Type 2
$i=1;
echo "type 2 (do-while):<br />\n";
do
{
echo $i."<br />";
$i++;
}
while($i <= 10);

// Type 3
echo "type 3 (for):<br />\n";
for($i=1;$i<=10;$i++)
{
echo $i."<br />";
}
?>

هل توافقني على أنها متشابهة جدًا ؟ 😀

Oct 312011
 

في الدرس السابق البرنامج الأول باستخدام Java، تم شرح كيفية عرض مخرجات للمستخدم، في هذا الدرس، سنقوم بتجربة المتغيرات والمصفوفات لكن بشكل مخلص، إن كنت تبحث عن درس مفصل فيمكنك الرجوع لذات الدرس لكن بلغة C، إذ أن الاختلاف بسيط: المتغيرات والمصفوفات في C

أولا: للتذكير، لطباعة رسالة معينة نستخدم الشفرة الآتية:

class testvariables
{
public static void main(String[]args)
{
System.out.print("Hello hct.me!");
}
}

والناتج:

jGRASP UI

(في المربع في الأسفل)

ثانيًا: أنواع المتغيرات في Java:

أيضًا لنختصر الدرس، بالرجوع للأنواع في C، اضغط هنا

مثال على برنامج يقوم بعملية جمع عددين هم 2 في المتغير a و 8 في المتغير b و sum لتخزين الناتج:

class testvariables
{
public static void main(String[]args)
{
int a=2, b=8, sum;
sum = a+b;
System.out.print("the sum of " + a + " + " + b + " is equal " + sum);
}
}

قد تلاحظ تكرار علامة الجمع أكثر من مرة “+”، وللتوضيح، في Java، نستخدم “+” لدمج أكثر من متغير أو نص مقتبس في نفس السطر، مثال آخر:

import java.util.*;
class testvariables
{
public static void main(String[]args)
{
String name;
name = "Abdulaziz";
System.out.print("Hello  " + name);
}
}

الآن، وقت المصفوفات :D. لا تفرق كثيرًا عن C، المثال التالي للتوضيح:

class testvariables
{
public static void main(String[]args)
{
int sum;
int[] numbers = {2, 8};
sum = numbers[0] + numbers[1];
System.out.print("the sum of " + numbers[0] + " + "  + numbers[1] + " is equal " + sum);
}
}

لاحظ أن الفرق بسيط بين C و Java في المصفوفات، بالتالي سنترك تطبيق بقية الدرس لك كتمرين يومي إضافي :mrgreen:

Oct 232011
 

في الدرس السابق مقدمة حول Java، تطرقنا في حديث مبسط حول Java. في هذا الدرس سنتابع الحديث لكن بتدعيم الدرس بأمثلة لإيصال الفكرة بطريقة أفضل.

أولًا قبل البدأ في التطبيق العملي، يجب أن نتذكر الآتي:

  1. كل قوس، علامة اقتباس، أو قوس معكوف، يجب أن يغلق في حال فتحه.
  2. كل سطر برمجي يجب أن ينتهي بالفاصلة المنقوطة “;”.
  3. بعض الكلمات المفتاحية، تتطلب أن تكتب بنفس الطريقة في كل مرة، أي في حالة الأحرف (مثال: System != system).
  4. إضافة على النقطة السابقة، Java حساسة لحالة الأحرف، أي المتغير var لا يعادل المتغير Var، ويعتبر متغير آخر.

الآن لنبدأ التطبيق، أول نضع اسم التصنيف، ولنفترض أنه testapp

class testapp
{
}

ما سبق يعتبر كـ”الـغلاف” أو الـكائن الخاص بالتطبيق، وسنقوم بكتابة برنامجنا الأول داخل هذا التصنيف، ليكون:

class testapp
{
 public static void main(String[]args)
 {
  System.out.print("Welcome to Java hct.me visitor!");
 }
}

شرح الكلمات المفتاحية:

class: الكائن او التصنيف

public: يقصد بها أن هذه الدالة أو method، عام، ويمكن استخدامه خارج التصنيف المحدد، و private تخالفها ذلك، بحيث لا يمكن استخدم الدالة خارج ذات التصنيف

static: تعني أن الدالة يتم حلها وقت ترجمة البرنامج compiling، و Dynamic: يتم حل الدالة أثناء عمل البرنامج .. (إن صح التعبير)

main: يقصد بها الدالة الرئيسية بالبرنامج، أي التي يبدأ البرنامج بتشغيلها.

هنا، ينتهي التطبيق الأول للـJava، وسنتابع في درس آخر التطبيق الثاني في المتغيرات والمصفوفات بإذن الله 🙂