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
C – Abdulaziz Al Rashdi
نوفمبر 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 وهكذا ..

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

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

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

أكتوبر 262011
 

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

#include<stdio.h>
main()
{
    printf("Welcome to C Language, enjoy browsing http://www.alrashdi.co/blog \n");
}

ربما تكون هناك اضافة وهي “\n” ويقصد بها كتابة سطر جديد .. يمكنك التجربة عبر تكرارها بين الكلمات لترى النتيجة 🙂

مثلما شُرح سلفًا، هناك أنواع مختلفة من المتغيرات وهي char, int, float وغيرها وكل نوع يتقبل نوع معين من البيانات وللتوضيح:
char: للمدخلات الحرفية
int: عدد صحيح
float: عدد غير صحيح (رقم بفواصل مثلًا؛ لا أذكر المسمى نسبةً لعدم توافقي مع الرياضيات 😀 )

وسنقوم بعمل برنامج مبسط لعمل عملية جمع حسابية، المتغير a للرقم الأول وهو 19، والمتغير b للرقم الثاني وهو 21 وأخيرًا متغير أخير ليخزن ناتج عملية الجمع وليكن sum؛ وبما أن كافة الاعداد صحيحة سيكون النوع هو int لكافة المتغيرات..

الطريقة الأولى لتعريف المتغيرات دون ادخال القيم هي:

#include<stdio.h>
main()
{
int a,b, sum;
}

والطريقة الثانية:

#include<stdio.h>
main()
{
int a;
int b;
int sum;
}

أيضًا يمكن ادخال قيمة المتغيرات في ذات التعريف، ليكون كالتالي بالنسبة للطريقة الأولى:

#include<stdio.h>
main()
{
int a=19,b=21, sum;
}

أو التالي للطريقة الثانية:

#include<stdio.h>
main()
{
int a=19;
int b=21;
int sum;
}

ولإتمام عملية الجمع:

#include<stdio.h>
main()
{
int a=19,b=21, sum;
sum = a+b;
printf("Welcome to C Language, enjoy browsing http://www.alrashdi.co/blog \n");
printf("result of %d + %d = %d", a, b, sum);
}

لاحظ أننا قمنا بتخزين العملية الحسابية في المتغير sum، ثم عرضنا الناتج، ولإزالة الغموض عن سطر طباعة النتائج:

printf("result of %d + %d = %d", a, b, sum);

لاحظ تكرار “%d” ثلاث مرات، ومثلما ذُكر في الدرس السابق، %d ترافق النوع int، فبالتالي هي تعني 3 متغيرات من نوع int. بعد كتابة الرسالة، قمنا بتحديد قيم %d بالترتيب في بقية السطر خارج علامات الاقتباس وفصلنا بينهم بالفاصلة..

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

0 1 2 3 4 5 6 7 8 9
100 101 102 103 104 105 106 107 108 109

نلاحظ من الجدول السابق:

  1. المتغير numbers يحتوي 10 قيم مختلفة
  2. الفهرسة أو index تبدأ من الصفر، أي أن آخر فهرس يكون (طول المصفوفة – 1) وهكذا ..

المثال الآيتي يوضح كيفية تعريف المصفوفة:

#include<stdio.h>
main()
{
int numbers[10];
}

لقد تم التعريف، لكن لم ندخل القيم, ولادخال القيم:

#include<stdio.h>
main()
{
int numbers[10]={100, 101, 102, 103, 104, 105, 106, 107, 108, 109};
}

أو الطريقة الآتية:

#include<stdio.h>
main()
{
int numbers[10];
numbers[0]=100;
numbers[1]=101;
numbers[2]=102;
numbers[3]=103;
numbers[4]=104;
numbers[5]=105;
numbers[6]=106;
numbers[7]=107;
numbers[8]=108;
numbers[9]=109;
}

ولطباعة محتوى المصفوفة، نكتب اسم المتغير ورقم الفهرسة أو index، مثال:

#include<stdio.h>
main()
{
int numbers[10]={100, 101, 102, 103, 104, 105, 106, 107, 108, 109};
printf("%d is in index 5", numbers[5]);
}

 تعدد المصفوفات:

الجدول الآتي يوضح طريقة تخزين البيانات في المصفوفة المتعددة الاتجاه:

0 1 2 3 4
0 100 101 102 103 104
1 110 111 112 113 114

الجدول يوضح أن طول المصفوفة هو 5 × 2، وطريقة التعريف:

#include<stdio.h>
main()
{
int numbers[5][2];
}
وطريقة الادخال البيانات الأولى:
#include<stdio.h>
main()
{
int numbers[5][2]= {
{100, 101, 102, 103, 104},
{110, 111, 112, 113, 114}
};
}

أو الطريقة الآتية:

#include<stdio.h>
main()
{
int numbers[5][2];
numbers[0][0]=100;
numbers[1][0]=101;
numbers[2][0]=102;
numbers[3][0]=103;
numbers[4][0]=104;
numbers[0][1]=110;
numbers[1][1]=111;
numbers[2][1]=112;
numbers[3][1]=113;
numbers[4][1]=114;
}

وطريقة العرض:

#include<stdio.h>
main()
{
int numbers[5][2]= {
{100, 101, 102, 103, 104},
{110, 111, 112, 113, 114}
};
printf("%d is in index [1][0]", numbers[1][0]);
}

في العادة “التكرار” أو “loop” يرافق المصفوفات، وهو يسهل عملية تخزين البيانات، خاصة المدخلة مِن قبل المستخدم، وسيم شرح الطريقة في درس لاحق بإذن الله .. 🙂

فبراير 232010
 

يفترض أن يكون هذا الدرس تابعًا للدرس الأول، لكن قمت بفصله لتسهيل تتبع الدروس بالتدريج 🙂

هناك ثوابت أو قواعد في البرمجيات بشكل عام، عبرها يعرف المترجم (compiler) كيفية عمل البرنامج، لكن قبل ذلك ما هو المترجم (Compiler) ؟

باختصار يقوم المترجم بتحويل لغة البرمجة المفهومة من قبل البشر إلى لغة الحاسب الآلي وهي لغة التجميع (0|1)

في حالتنا يقوم المترجم بتحويل C إلى لغة الحاسب الآلي (binary) لتكون كالتالي 01010101110011 وهكذا

نعود لمحور الدرس، الأساسيات في كتابة الشفرة، في العادة يستند المبرمج لمكتبة مبرمجة مسبقة ليستخدم الدوال منها (حسب المنهج الحالي) لذلك أول سطر في البرنامج يكون طلب استدعاء ملف المكتبة، مثال:

include <stdio.h>

في السطر السابق قمنا باستدعاء ملف المكتب وبملاحظة أن امتداد الملف .h ويقصد به header

الدروس التالية ستعتمد على مكتبة stdio.h باعتبار انها المستخدمة في الدروس في الكتاب

إذًا عرفنا الآن أنه الأسطر الأولى نقوم بكتابة أوامر استدعاء ملفات المكتبات الجاهزة، الآن ننتقل لأمور أخرى.

لتكن قاعدة لديك أنه كلما تقوم بفتح قوس يجب إغلاقه، مثلا:

main () {

}

في حالة عدم إغلاقك لأحد الأقواس سواءً القوس العادي “(” أو القوس المعكوف “{” سيظهر لك خطأ فور تشغيل البرنامج.

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

main () {
printf (" TEST C ");
}

لاحظ وجود “;” نهاية سطر أمر الكتابة، وأيضًا لاحظ بأن كافة الأقواس مغلقة.

بالنسبة لإغلاق الأقواس تذكر إغلاق علامات الإقتباس أيضًا 🙂

في C نحتاج لتعريف قيم المتغيرات، مثلا المتغير a ستكون قيمته رقمية وبالتحديد رقم صحيح (أي بلا كسور)، أو المتغير b ستكون قيمته رقمية لكن مع كسور أو فواصل عشرية. وهنا أهم أنواع المتغيرات التي سنستخدمها:

Char => c%
int => %d
float => %f

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

فبراير 212010
 

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

عن لغة الـC أو تاريخها ليست لدي أدنى فكرة 😀 ولنبدأ فيما تعلمته من أساسيات اللغة.

أولًا: يجب أن تعرف أنه يوجد عدة خطوات شبه ضرورية في كل برنامج، وأغلب البرامج بها مدخلات (inputs) ،عمليات (processes) و مخرجات (outputs) وللمزيد من التوضيح نفترض أنه لدينا العملية الرياضية الآتية:

F(x) = 3x+2

x : مدخل باعتبار انك ستدخل رقم معي لحساب الناتج

3x+2 : العملية، بعد معرفة المدخل ستقوم بالعملية الحسابية بكل بساطة لنفترض أنه طلب ان نعوض x بـ4 ؛ عند حسابها في المعادلة:

(3×4)+2 = 14

الناتج 14 من المثال أعلاه: هذه النتيجة وأيضًا يمكن أن تكون من ضمن المخرجات على اعتبار ان البرنامج يعرضها في الشاشة

أتمنا أن تكون الفكرة قد وصلت، وعلى كل حال انا ما فالح في شي اسمه رياضيات 😀

ثانيًا: من أهم الأشياء في كافة لغات البرمجة هي المتغيرات (variables)، فما هو المتغير؟ في العملية الحسابية كان x عبارة من متغير. المتغيرات يمكن أن تكون متغيرات رقمية أو حروف، يعتمد على كيفية عمل البرنامج المراد برمجته. مثال آخر للمتغيرات، تريد عمل برمجية صغيرة تقوم بحساب مساحة المثلث، بالتالي تسهل على مستخدم البرنامج حساب المساحة بمجرد إدخال الأرقام

مساحة المثلث= 1/2 القاعدة × الإرتفاع

1/2 base * hight => (0.5*B) * H

قمت بوضع B كمتغير للقاعدة و H متغير للإرتفاع، ولنضع المعادلة بأكملها في متغير جديد ولنفترض ان اسمه Area

Area = (0.5*B) * H

نفترض أن  القاعدة = 4 والإرتفاع 6 ، لتخزين المتغيرات:

B= 4, H=6

البرنامج سيقوم تلقائيًا بتعويض قيمتي B و H في العملية، ستكون كالتالي نظريًا:

Area = (0.5*4) * 6

الناتج:

Area = 12

المتغير الأخير Area سيكون كمخرج:

output: Area

أتمنى أن تكون فكرة المتغيرات وصلت لكم.. سأتابع في درس آخر بإذن العزيز