Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /home/alrashdi/public_html/blog/wp-content/themes/suffusion/functions/media.php on line 666

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /home/alrashdi/public_html/blog/wp-content/themes/suffusion/functions/media.php on line 671

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /home/alrashdi/public_html/blog/wp-content/themes/suffusion/functions/media.php on line 684

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /home/alrashdi/public_html/blog/wp-content/themes/suffusion/functions/media.php on line 689

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /home/alrashdi/public_html/blog/wp-content/themes/suffusion/functions/media.php on line 694
برمجة – Abdulaziz Al Rashdi
مايو 312013
 

بعد انقطاع طويل ها هي عودة جديدة لمواصلة المشوار، قد يكون الوقت محاكي لـ ” تجري الرياح بما لا تشتهي السفن ” لكن طالما هناك متسع فإن المسيرة مستمرة في طرح الدروس هنا بإذن الله.

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

Continue reading »

مارس 052012
 

درس بسيط لقطع حبل الانقطاع في الفترة المنصرمة 😀

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

Continue reading »

نوفمبر 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 وهكذا ..

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

نوفمبر 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);
 }
}

صورة للناتج:

 

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

نوفمبر 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 />";
}
?>

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