Arab Langage C

265

Transcript of Arab Langage C

بنظرة سريعة الكتابحمتويات ١٨............................ .................................................................حول الكتاب

١٩...................................................................................................ة ملقدما ........................................................................... C أساسيات يف لغة– الفصل األول ٢٢............................. ....................................................ةاألدوات الالزم ١,١ ٢٥.................................................................................. C لغةدء معالب ١,٢ ٣٤..................................................... Variables and Constants ملتغريات و الثوابت ا١,٣ ٤٥........................................................................... Comments لتعليقات ا١,٤ ٤٨.................................................................................. inputإلدخال ا ١,٥ ٥١............................................................................. Operators ملؤثرات ا١,٦ ٦٠....................................................................... if, else, else…if لقرارات ا١,٧ ٦٤.................................................................................... C لغةناصرع١,٨ ٦٩........................................... ....................لخص للفصل األول، مع إضافات م١,٩

....................................................................... )٢( C أساسيات يف لغة–الفصل الثاين ٨١................................................................................... Switch لقرار ا٢,١ ٨٦.................................................................. Repeated loop لقات التكرار ح٢,٢ ١٠٠............................................................................. Arrays ملصفوفات ا٢,٣ ١١٤............................................................................ Pointers املؤشرات ٢,٤ ١٢٥............................................................................. Functions لدوال ا٢,٥ ١٣٥................................................................... Header files امللفات الرأسية ٢,٦ ١٣٨........................................................ Files I/O اإلدخال و اإلخراج يف امللفات ٢,٧ ١٤٧........................................................................... structures التراكيب ٢,٨ ١٥٧.............................................................. تملخص للفصل الثاين، معا إضافا ٢,٩

.............................................................................. C التقدم يف لغة–الفصل الثالث ١٧٦......................................................................... Enumeration احلساب ٣,١ ١٨٢............................................... Command-line Arguments وسائط الدالة الرئيسية٣,٢ ١٨٥.......................................................... Directives(Preprocessor) التوجيهات ٣,٣ ١٩٢...................................................................دوال ذات وسائط غري حمددة ٣,٤ ١٩٥............................................................... Standard Library املكتبة القياسية ٣,٥

٢٤١..................................................................................................ة اخلامت

.................................................. ...................................)الصور(األشكال جدول ..............................................................................................اجلداول جدول ...............................................................................................الربامج جدول

..................................................................................................املراجعأهم

جدول احملتويات ١٨........................................................................ .....................حول الكتاب

١٩...................................................................................................ة ملقدما ........................................................................... C أساسيات يف لغة–الفصل األول

٢٢..................................................................................... األدوات الالزمة ١,١ ٢٢..................................................................... texts editor حمرر نصوص ١,١,١ ٢٢............................................................................. compiler مترجم١,١,٢ ٢٤................................................................................. linker املربط ١,١,٣

٢٥...................................................................................... C البدء مع لغة ١,٢ ٢٩............................................................................عداد التعامل مع األ ١,٢,١ ٣٢. ............................................................................. األخطاء احملتملة١,٢,٢ ٣٣............................ ........................................................... متارين١,٢,٣

٣٤..................................................... Variables and Constants املتغريات و الثوابت١,٣ ٣٥..................................................................... Variable Type نوع املتغري ١,٣,١

٣٥............................................................. int متغري األعداد الصحيحة١,٣,١,١ ٣٥............................................................. float متغري األعداد احلقيقية ١,٣,١,٢ ٣٦........................................................... double متغري األعداد احلقيقية١,٣,١,٣ ٣٦.......................................................... short متغري األعداد الصحيحة ١,٣,١,٤ ٣٦........................................................... long متغري األعداد الصحيحة١,٣,١,٥ ٣٧...................................................................... char رموز متغري ال١,٣,١,٥

٣٧.................................................................... Variable Name اسم املتغري ١,٣,٢ ٣٧.....................................................................Variable Value قيمة املتغري١,٣,٣ ٣٧............................ .............................................. أمثلة حول املتغريات١,٣,٤ ٤٠...............................................................ة ألعداد املوجبة و األعداد السالب ا١,٣,٥ ٤٣..............................................................................ة األخطاء احملتمل ١,٣,٦ ٤٤.......................................................................................ن متاري ١,٣,٧

٤٥...........................................................................Comments عليقات الت١,٤ ٤٥............................................................................... فائدة التعليقات ١,٤,١ ٤٥.............................................................................. أنواع التعليقات ١,٤,٢

٤٥............................................................ التعليقات بالنصوص الطويلة ١,٤,٢,١ ٤٥..................................................................... التعليقات باألسطر ١,٤,٢,٢

٤٦.............................................................. املربجمون التعليقات كيف يستعمل١,٤,٣ ٤٦.............................................................................. األخطاء احملتملة ١,٤,٤ ٤٧....................................................................................... متارين ١,٤,٥

٤٨..................................................................................... Input اإلدخال ١,٥ ٥٠.............................................................................. األخطاء احملتملة ١,٥,١

٥٠.......................................................................................رين متا١,٥,٢ ٥١................................................................................Operators املؤثرات١,٦

٥١........................................................ arthimetic operators املؤثرات احلسابية ١,٦,١ ٥١........................................................... (++)increment مؤثر الزيادة١,٦,١,١ ٥٢..........................................................)--( decrement مؤثر النقصان١,٦,١,٢ ٥٣.................................................................)%( باقي القسمةمؤثر ١,٦,١,٣

٥٣.......................................................... relational operators املؤثرات العالقية١,٦,٢ ٥٤............................................................. logical operators املؤثرات املنطقية١,٦,٣ ٥٥............................................................................... مؤثرات أخرى١,٦,٤ ٥٧............................ ..................................)bitwize( مؤثرات خاصة بالبتات ١,٦,٥ ٥٩.............................................................................. تملة األخطاء احمل١,٦,٦ ٥٩....................................................................................... متارين١,٦,٧

٦٠.......................................................................... if, else, else…if القرارات١,٧ ٦٠................................................................................... if استعمال١,٧,١ ٦١................................................................................ else استعمال١,٧,٢ ٦٢............................................................................. else…if تعمال اس١,٧,٣ ٦٣.............................................................................. األخطاء احملتملة١,٧,٤ ٦٣....................................................................................... متارين١,٧,٥

٦٤........................................................................................ C عناصر لغة١,٨ ٦٤......................................................................... Comments التعليقات١,٨,١ ٦٤.................................................................. Keywords الكلمات احملجوزة ١,٨,٢ ٦٤.......................................................................... Identifiers املعرفات ١,٨,٣

١,٨,٣,١ Trigraphs .............................................................................٦٥ ٦٥........................................................................... Constants الثوابت ١,٨,٤

٦٦......................................................................... الثوابت النصية ١,٨,٤,١ ٦٧........................................................................وابت الرقمية الث١,٨,٤,٢

٦٨............................................................................... Tokens الرموز ١,٨,٥ ٦٨................................................................ String literals السالسل النصية١,٨,٦ ٦٨.............................................................................. األخطاء احملتملة ١,٨,٧ ٦٨....................................................................................... متارين ١,٨,٨

٦٩..................................................................فصل األول، مع إضافات ملخص لل١,٩ ٦٩................................................................................ برامج تدريبية١,٩,١

٦٩.......................................................... الربنامج األول، عمر املستخدم١,٩,١,١ ٧٠........................................................ الربنامج الثاين، آلة حاسبة بسيطة ١,٩,١,٢ ٧١................................................. الربنامج الثالث، استخراج القيمة املطلقة١,٩,١,٣ ٧٢........................................................ بع، أخذ العدد الكبري الربنامج الرا١,٩,١,٤

٧٢................................................................... getchar و putchar الدالتني١,٩,٢ ٧٣.......................................................................... gets و puts الدالتني١,٩,٣ ٧٤..................................................................... wscanf و wprintf الدالتني١,٩,٤ ٧٤........................................................ getche و الدالة getch و putch الدالتني١,٩,٥ ٧٦..................................................................... wchar_tجوزة الكلمة احمل١,٩,٦ ٧٦................................................................. wmain و main الدالة الرئيسية١,٩,٧ ٧٨..................................................................... رموز اإلخراج و اإلدخال١,٩,٨ ٧٩.............................................................................. األخطاء احملتملة١,٩,٩

٧٩...................................................................................... متارين١,٩,١٠ ........................................................................ )٢( C ساسيات يف لغة أ–الفصل الثاين

٨١...................................................................................... Switch القرار٢,١ ٨٣......................................................................... case الكلمة احملجوزة٢,١,١ ٨٤........................................................................ break الكلمة احملجوزة٢,١,٢ ٨٤......................................................................... default الكلمة اوزة ٢,١,٢ ٨٤.............................................................................. األخطاء احملتملة٢,٨,٧ ٨٥....................................................................................... متارين٢,٨,٨

٨٦.................................................................... Repeated loop حلقات التكرار٢,٢ ٨٦......................................................................... while التكرار بواسطة٢,٢,١ ٨٨.................................................................... do…while التكرار بواسطة٢,٢,٢ ٩٠........................................................................... for التكرار بواسطة٢,٢,٣ ٩٢......................................................................... goto التكرار بواسطة٢,٢,٤ ٩٣................................................................... املفهوم العام حللقات التكرار٢,٢,٥ ٩٧..................................................................... continue الكلمة احملجوزة٢,٢,٧ ٩٨................................................................................ ASCII جدول ٢,٢,٨ ٩٨.............................................................................. األخطاء احملتملة٢,٢,٩

٩٨...................................................................................... متارين٢,٢,١٠ ١٠٠................................................................................ Arrays املصفوفات ٢,٣

١٠١..................................................................... أساسيات يف املصفوفات٢,٣,١ ١٠٢.................................................................... املصفوفات الثنائية األبعاد٢,٣,٢ ١٠٤.................................................................... املصفوفات الثالثية األبعاد٢,٣,٢ ١٠٥............................................................. مصفوفة ذات حجم غري معروف٢,٣,٣ ١٠٦................................................................. )النصوص( السالسل احلرفية ٢,٣,٤

١٠٩........................................................................... gets الدالة ٢,٣,٤,١ ١٠٩......................................................... strncpy و الدالة strcpy الدالة٢,٣,٤,٢ ١١٠.......................................................... strncat و الدالة strcat الدالة ٢,٣,٤,٣

١١١........................................................... طرق أخرى لتعامل مع املصفوفات٢,٣,٥

١١٢............................................................................. األخطاء احملتملة٢,٣,٦ ١١٣...................................................................................... متارين٢,٣,٧

١١٤............................................................................... Pointers املؤشرات ٢,٤ ١١٤................................................................... Pointer Typeنوع املؤشر ٢,٤,١ ١١٤................................................................... Pointer Name اسم املؤشر٢,٤,٢ ١١٦...................................................................... املؤشرات و املصفوفات٢,٤,٣ ١١٧........................................................................ التعامل مع النصوص٢,٤,٤ ١٢٠........................................................................... reference املرجع٢,٤,٥ ١٢٠............................................................................. void مؤشر لـ٢,٤,٦ ١٢١.............................................................................. مؤشر ملصفوفة٢,٤,٧ ١٢٢................................................................................ مؤشر ملؤشر٢,٤,٨ ١٢٣............................................................................. األخطاء احملتملة٢,٤,٩

١٢٣.................................................................................... متارين٢,٤,١٠ ١٢٥................................................................................ Functions الدوال٢,٥

١٢٨................................................................... Function Type نوع الدالة٢,٥,١ ١٣١.................................................................. Function Name اسم الدالة٢,٥,٢ ١٣١.......................................................... Function Parameters الدالةوسائط ٢,٥,٣ ١٣١..................................................................................... األوامر ٢,٥,٤ ١٣٢......................................................................... macros ات املختصر٢,٥,٥ ١٣٢................................................................... الفرق بني اإلجراء و الدالة ٢,٥,٦ ١٣٢............................................................... من نوع دوال وسائط دوال هلا ٢,٥,٧ ١٣٣............................................................................. األخطاء احملتملة ٢,٥,٨ ١٣٤...................................................................................... متارين ٢,٥,٩

١٣٥...................................................................... Header files ة امللفات الرأسي٢,٦ ١٣٦.......................................................................... اسم امللف الرأسي ٢,٦,١ ١٣٦................................................................. مىت نستعمل امللفات الرأسية ٢,٦,٢ ١٣٦............................................................................. األخطاء احملتملة ٢,٦,٣ ١٣٧...................................................................................... متارين ٢,٦,٤

١٣٨.......................................................... Files I/O اإلخراج يف امللفات اإلدخال و٢,٧ ١٣٨......................................................................... اإلخراج يف امللفات٢,٧,١

١٤٠......................................................................... fopen الدالة٢,٧,١,١ ١٤١......................................................................... fclose الدالة ٢,٧,١,٢ ١٤١........................................................................... exit الدالة٢,٧,١,٣

١٤١.................................................................... ة امللف إضافة نص يف اي٢,٧,٢ ١٤٢......................................................................... اإلدخال يف امللفات٢,٧,٣ ١٤٣....................................................................... +r و +a و +w النمط٢,٧,٤

١٤٣........................................................................... +w النمط٢,٧,٤,١ ١٤٣........................................................................... +a النمط٢,٧,٤,٢ ١٤٣............................................................................ +r النمط ٢,٧,٤,٣

١٤٣....................................................... دوال أخرى خاصة بالتعامل مع امللفات٢,٧,٥ ١٤٣.......................................................... fscanf الدالةو fprintf الدالة٢,٧,٥,١ ١٤٤............................................................. fputs الدالةو fgets الدالة٢,٧,٥,٢ ١٤٥............................................................ fputc الدالةو fgetc الدالة ٢,٧,٥,٣

١٤٦............................................................................. األخطاء احملتملة٢,٧,٦ ١٤٦...................................................................................... متارين٢,٧,٧

١٤٧............................................................................. structures التراكيب٢,٨ ١٤٧..................................................................... Struct Name اسم البنية٢,٨,١ ١٥١...................................................... union البنيات باستخدام الكلمة احملجوزة٢,٨,٢ ١٥٣.......................................................... املصفوفات و املؤشرات على البنيات٢,٨,٣ ١٥٥........................................................................ إعالن بنية داخل بنية ٣,٨,٤ ١٥٥............................................................................. األخطاء احملتملة ٢,٨,٥ ١٥٦...................................................................................... متارين ٢,٨,٦

١٥٧................................................................. ملخص للفصل الثاين، معا إضافات٢,٩ ١٥٧.................................................................... void وسيط معىن دالة ا ٢,٩,١ ١٥٨....................................................................... static الكلمة احملجوزة٢,٩,٢ ١٥٩.................................................................... typedef الكلمة احملجوزة ٢,٩,٣ ١٦١............................................................................... برامج تدريبية٢,٩,٤

١٦١................................................................ الربنامج األول، النسخ٢,٩,٤,١ ١٦٢................................................................ وسيطني تبادل قيم بني ٢,٩,٤,٢ ١٦٣...................................................................وابت التغري يف قيم ث٢,٩,٤,٣ ١٦٣.................................................................. عكس سلسلة نصية٢,٩,٤,٤ ١٦٤........................................... ل من النظام العشري إىل النظام الثنائي التحوي٢,٩,٤,٥ ١٦٤....................................... التحويل من احلروف الصغرية إىل احلروف الكبرية٢,٩,٤,٦

١٦٥.............................................................. wcsncpy و الدالة wcscpy الدالة٢,٩,٥ ١٦٦.............................................................. wcsncat و الدالة wcscat الدالة٢,٩,٦ ١٦٦................................................................ putwchar و getwchar الدالة٢,٩,٧ ١٦٧..................................................................... putws_ و getws_ الدالة٢,٩,٨ ١٦٧...................................................................... )صورة( ASCII جدول ٢,٩,٩

١٦٨.............................................................. معلومات أكثر حول املتغريات٢,٩,١٠ ١٦٨..................................................................... املتغريات احمللية٢,٩,١٠,١ ١٦٩.......................................................... )العامة( املتغريات اخلارجية ٢,٩,١٠,٢ ١٦٩............................................................. extern الكلمة احملجوزة٢,٩,١٠,٣

١٧٠............................................................... auto الكلمة احملجوزة٢,٩,١٠,٤ ١٧١............................................................ register الكلمة احملجوزة ٢,٩,١٠,٥

١٧١..................................................................... sizeof الكلمة احملجوزة٢,٩,١١ ١٧٢....................................................................... استدعاء دالة لنفسها٢,٩,١٢ ١٧٣...................................................................التحكم يف طباعة النتائج ٢,٩,١٣ ١٧٣........................................................................... األخطاء احملتملة٢,٩,١٤ ١٧٣.................................................................................... متارين٢,٩,١٥

.............................................................................. C التقدم يف لغة–لفصل الثالث ا ١٧٦........................................................................... Enumeration احلساب٣,١

١٨٦........................................................... Enumeration Nameب اس اسم احل٣,١,١ ١٨٦........................... ..................................................احلساب ثوابت ٣,١,٢ ١٨٠............................................................................. األخطاء احملتملة ٣,١,٣ ١٨٠...................................................................................... متارين ٣,١,٤

١٨٢.............................................. Command-line Arguments وسائط الدالة الرئيسية٣,٢ ١٨٢................................................................. الوسيط األول لدالة الرئيسية ٣,٢,١ ١٨٣.................................................................. الوسيط الثاين لدالة الرئيسية ٣,٢,٢ ١٨٤.............................................................................األخطاء احملتملة ٣,٢,٣ ١٨٤...................................................................................... متارين ٣,٢,٤

١٨٥........................................................... Directives(Preprocessor) التوجيهات ٣,٣ ١٨٥.......................................................................... include# التوجيه ٣,٣,١ ١٨٥........................................................................... define# التوجيه٣,٣,٢ ١٨٦............................................................................. undef# التوجيه ٣,٣,٣ ١٨٧..................................................... endif# و if، #elif، #else# التوجيهات ٣,٣,٤ ١٨٧............................................................ ifndef# و التوجيه ifdef# التوجيه ٣,٣,٥ ١٨٩.............................................................................. line# التوجيه ٣,٣,٦ ١٨٩............................................................................. error# التوجيه ٣,٣,٧ ١٩٠.......................................................................... pragma# التوجيه ٣,٣,٨ ١٩٠............................................................ Predefined Names األمساء املعرفة ٣,٣,٩

١٩٠...........................................................................األخطاء احملتملة ٣,٣,١٠ ١٩١....................................................................................متارين ٣,٣,١١

١٩٢...................................................................... دوال ذات وسائط غري حمددة ٣,٤ ١٩٤.............................................................................األخطاء احملتملة ٣,٤,١ ١٩٤......................................................................................متارين ٣,٤,٢

١٩٥................................................................ Standard Library املكتبة القياسية٣,٥ ١٩٥...................................................................... assert.h امللف الرأسي ٣,٥,١ ١٩٥...................................................................... ctype.h امللف الرأسي ٣,٥,٢

١٩٥....................................................................... isalnum الدالة ٣,٥,٢,١ ١٩٦....................................................................... isalpha الدالة ٣,٥,٢,٢ ١٩٦......................................................................... iscntrl الدالة ٣,٥,٢,٣ ١٩٧........................................................................ isdigit الدالة ٣,٥,٢,٤ ١٩٧....................................................................... isgraph الدالة ٣,٥,٢,٥ ١٩٨....................................................................... islower الدالة ٣,٥,٢,٦ ١٩٨........................................................................ isprint الدالة ٣,٥,٢,٧ ١٩٩....................................................................... ispunct الدالة ٣,٥,٢,٨ ١٩٩....................................................................... isspace الدالة ٣,٥,٢,٩

٢٠٠..................................................................... isupper الدالة ٣,٥,٢,١٠ ٢٠٠..................................................................... isxdigit الدالة ٣,٥,٢,١١ ٢٠١......................................................... tolower و toupper الدالتني ٣,٥,٢,١٢

٢٠١...................................................................... errno.h امللف الرأسي ٣,٥,٣ ٢٠١........................................................................ perror الدالة ٣,٥,٣,١

٢٠٤....................................................................... float.h امللف الرأسي ٣,٥,٤ ٢٠٤...................................................................... limits.h امللف الرأسي ٣,٥,٥ ٢٠٥...................................................................... locale.h امللف الرأسي ٣,٥,٦ ٢٠٥...................................................................... math.h امللف الرأسي ٣,٥,٧

٢٠٦........................................................................... sin الدالة ٣,٥,٧,١ ٢٠٦........................................................................... cos الدالة ٣,٥,٧,٢ ٢٠٧........................................................................... tan الدالة ٣,٥,٧,٣ ٢٠٧........................................................................... exp الدالة ٣,٥,٧,٤ ٢٠٧........................................................................... log الدالة ٣,٥,٧,٥ ٢٠٨.......................................................................... pow الدالة ٣,٥,٧,٥ ٢٠٨.......................................................................... sqrt الدالة ٣,٥,٧,٦ ٢٠٨........................................................................... ceil الدالة ٣,٥,٧,٧ ٢٠٩.......................................................................... floor الدالة ٣,٥,٧,٨ ٢٠٩.......................................................................... fabs الدالة ٣,٥,٧,٩

٢٠٩....................................................................... ldexp الدالة ٣,٥,٧,١٠ ٢٠٩....................................................................... fmod الدالة ٣,٥,٧,١١

٢١٠..................................................................... setjmp.h امللف الرأسي٣,٥,٨ ٢١١...................................................................... signal.h امللف الرأسي ٣,٥,٩

٢١١......................................................................... raise الدالة ٣,٥,٩,١ ٢١١.................................................................... stdarg.h امللف الرأسي ٣,٥,١٠ ٢١٢.................................................................... stddef.h امللف الرأسي ٣,٥,١١ ٢١٣..................................................................... stdio.h امللف الرأسي ٣,٥,١٢

٢١٣....................................................................... printf الدالة٣,٥,١٢,١ ٢١٤...................................................................... sprintf الدالة ٣,٥,١٢,٢ ٢١٤...................................................................... vprintf الدالة ٣,٥,١٢,٣ ٢١٥..................................................................... vfprintf الدالة٣,٥,١٢,٤ ٢١٥..................................................................... vsprintf الدالة ٣,٥,١٢,٥ ٢١٦....................................................................... scanf الدالة٣,٥,١٢,٦ ٢١٦...................................................................... fscanf الدالة ٣,٥,١٢,٧ ٢١٦...................................................................... sscanf الدالة٣,٥,١٢,٨ ٢١٧....................................................................... fgetc الدالة ٣,٥,١٢,٩

٢١٧....................................................................... fgets الدالة ٣,٥,١٢,١٠ ٢١٨...................................................................... fputc الدالة ٣,٥,١٢,١١ ٢١٨...................................................................... fputs الدالة ٣,٥,١٢,١٢ ٢١٨....................................................................... getc الدالة ٣,٥,١٢,١٣ ٢١٩................................................................... getchar الدالة ٣,٥,١٢,١٤ ٢١٩...................................................................... gets الدالة ٣,٥,١٢,١٥ ٢١٩...................................................................... putc الدالة ٣,٥,١٢,١٦ ٢٢٠................................................................... putchar الدالة ٣,٥,١٢,١٧ ٢٢٠...................................................................... puts لدالةا ٣,٥,١٢,١٨ ٢٢٠.................................................................... ungetc الدالة ٣,٥,١٢,١٩ ٢٢٠..................................................................... fopen الدالة ٣,٥,١٢,٢٠ ٢٢١................................................................... freopen الدالة ٣,٥,١٢,٢١ ٢٢٢..................................................................... fclose الدالة ٣,٥,١٢,٢٢ ٢٢٢................................................................... remove الدالة ٣,٥,١٢,٢٣ ٢٢٢................................................................... rename الدالة ٣,٥,١٢,٢٤ ٢٢٣.................................................................... tmpfile الدالة ٣,٥,١٢,٢٥ ٢٢٣...................................................................... fread لدالةا ٣,٥,١٢,٢٦ ٢٢٣..................................................................... fwrite الدالة ٣,٥,١٢,٢٧ ٢٢٤...................................................................... fseek الدالة ٣,٥,١٢,٢٨ ٢٢٥....................................................................... ftell الدالة ٣,٥,١٢,٢٩ ٢٢٥.................................................................... rewind الدالة ٣,٥,١٢,٣٠ ٢٢٦....................................................................... feof الدالة ٣,٥,١٢,٣١

٢٢٦..................................................................... stdlib.h امللف الرأسي ٣,٥,١٣ ٢٢٦......................................................................... atof الدالة ٣,٥,١٣,١ ٢٢٧......................................................................... atoi الدالة ٣,٥,١٣,٢ ٢٢٧......................................................................... atol الدالة ٣,٥,١٣,٣ ٢٢٧........................................................................ rand الدالة ٣,٥,١٣,٤

٢٢٨....................................................................... srand الدالة ٣,٥,١٣,٥ ٢٢٨....................................................................... abort الدالة ٣,٥,١٣,٦ ٢٢٩......................................................................... exit الدالة ٣,٥,١٣,٧ ٢٢٩....................................................................... atexit الدالة ٣,٥,١٣,٨ ٢٢٩..................................................................... system الدالة ٣,٥,١٣,٩

٢٣٠....................................................................... abs الدالة ٣,٥,١٣,١٠ ٢٣٠....................................................................... labs الدالة ٣,٥,١٣,١١ ٢٣٠........................................................................ div الدالة ٣,٥,١٣,١٢ ٢٣١....................................................................... ldiv الدالة ٣,٥,١٣,١٣

٢٣١.................................................................... string.h امللف الرأسي ٣,٥,١٤ ٢٣١....................................................... strncpy و الدالة strcpy لدالةا ٣,٥,١٤,١ ٢٣٢........................................................ strncat و الدالة strcat الدالة ٣,٥,١٤,٢ ٢٣٣...................................................... strncmp و الدالة strcmp الدالة ٣,٥,١٤,٣ ٢٣٣........................................................ strrchr و الدالة strchr الدالة ٣,٥,١٤,٤ ٢٣٤....................................................... strcspn و الدالة strspn الدالة ٣,٥,١٤,٥ ٢٣٤..................................................................... strpbrk الدالة ٣,٥,١٤,٦ ٢٣٥....................................................................... strstr الدالة ٣,٥,١٤,٧ ٢٣٥....................................................................... strlen الدالة ٣,٥,١٤,٨ ٢٣٥...................................................................... strerror الدالة ٣,٥,١٤,٩

٢٣٦..................................................................... strtok الدالة٣,٥,١٤,١٠ ٢٣٦..................................................................... time.h امللف الرأسي ٣,٥,١٥

٢٣٧........................................................................ clock الدالة ٣,٥,١٥,١ ٢٣٨......................................................................... time الدالة٣,٥,١٥,٢ ٢٣٩...................................................................... difftime الدالة ٣,٥,١٥,٣ ٢٣٩.................................................................... localtime الدالة ٣,٥,١٥,٤ ٢٤٠..................................................................... asctime الدالة ٣,٥,١٥,٥ ٢٤٠........................................................................ ctime الدالة٣,٥,١٥,٦

٢٤١..................................................................................................ة اخلامت .................................................. ...................................)الصور(األشكال جدول ..............................................................................................اجلداول جدول ...............................................................................................الربامج جدول

..................................................................................................املراجعأهم

18

لـه و صـحبه علـى آ و صلى اهللا عليه حممدنبينا و الصالة و السالم على سيد املرسلني العاملني رب اهللاحلمد

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

الكتاب و قرأراء هذه الكتاب، لذا أرجو لكل من ق أخطاء أخرى من مالحظة أنتظرتلزو الالذي استطعت مالحظته، علـى بريـدي اإلليكتـروين بتنبيهي أن يقوم )يةوو خاصة املعن (وجد به أخطاء سواء كانت أخطاء إمالئية أو معنوية

com.yahoo@ounis_khalil ضع اخلطأ يف موضوع هذا الكتاب يو، أو ميكن أن . الحظي حيث سيتم إنشاء قائمة ألمساء ميعين عمل مجاعي( عها يف الصفحات األوىل من الكتابأخطاء هذا الكتاب و وض(.

مـن هـذا ) األوىل من هذا الكتاب أي ميكنهم إعادة القراءة النسخةهذا لكي أبني لقراء (و من أخطاء النسخة األوىل

اليت جتاهلتـها يف األماكن، و بعض "Cالبدء مع لغة "ل، بعض األخطاء يف اجلزء الفصل األو : كل من الكتاب كانت يف ، و أخريا "املؤشرات"ل الثاين فتوجد أخطاء يف جزء ص، أما الف "املتغريات و الثوابت "و قسم " Operatorsاملؤثرات "قسمـ ". تبة القياسيةاملك"و " Command-line Arguments"ل الثالث يف كل من صالف يف ةو طبعا توجد أخطاء أخرى متفرق

.)الكن ال تتوقع الكثري( هناك إضافات يف الكتابأكيدو . الكتاب مل أذكرها

:السابقةالنسخة النسخة مثل هفصول هذاإلدخال و اإلخراج، التعليقات و املؤثرات، القـرارات و : Cيف الفصل األول مفاهيم و مبادئ أساسية يف لغة §

.، مع ملخص للفصل األولCاصر لغة عن، حلقات التكـرار، املـصفوفات و املؤشـرات، Switch الفصل الثاين مكمل للفصل األول يف كل من القرار §

.امللفات الرأسية، اإلدخال و اإلخراج يف امللفات و التراكيب، و أخريا ملخص للفصل الثاينالدوال، .Cاملكتبة القياسية للغة خمتصرات و دوال ،وابت ثأهممكمل للكتاب، مع إضافة الفصل الثالث §

أي .)شـاركنا اخلـري ( مفيـد شيءب مفتوح لكل من يريد إضافة حرف، كلمة، مجلة أو جمل، أجزاء أو أي و الكتا

.تعليقات أو مالحظات أهال و سهال ، اجلزائرخليل أونيس

+٢١٣٦٤٥٧٦٦١٨، )من الداخل( ٠٦٤٥٧٦٦١٨ ٢٠٠٦- ٠٨- ١٩ : تاريخ اإلنتهاء من النسخة

19

تدعى بلغة اآللة low-level language على لغة بدائية منخفضة املستوىكانت الربجمة تتميف أيام بداية احلاسوب

Machine language ،يتم الربجمة عليها بأوامر و ، حيث كانت تفهمها اآللة مباشرةمثلتكونة من الواحد خبيوط طويلة م و +٤,٥صور بـني حمو هو high ، و الواحد يعين فولت+ ٠,٥ و -٠,٥ بني حمصورةهي و low الصفر تعين ( و الصفر assembly أي مبا يسمى بالنظام الثنائي، و كانت الربجمة عليها صعبة و معقدة حىت مت تطوير لغة التجميع )فولت+ ٥,٥

language، من اللغات املنخفضة املستوى هي و low-level languages سبة لـلغة اآللـة، ن بالة كانت سهلثحي ،أيضا .MOV و ADD مثل مفهومة كلمات نستعمل أوامر ذات الواحد و الصفرفبدل استعمال سالسل من

مما صوص كان التعامل معها بالكلمات و الن و، C و COBOL، BASICمع مرور الوقت مت تطوير لغات برجمة أخرى مثل

: بعض اللغاتعنخمتصرة و هذه معلومات .جعل هذه اللغات مقروئة، Fortran Languageلغة فورتران . IBM من قبل شركة ١٩٥٦، مت تطويرها يف عام Assembly Language لغة اجلميع

من قبل فريق يترأسـه ١٩٥٤مت تطويرها يف عام أي صيغة الترمجة، Formula Translation خمتصرة من Fortranو كلمة ، COBOL Languageلغـة كوبـول . ت تستخدم بكثرة يف التطبيقات الرياضية، حيث كانJohn Backus جون باكوس ١٩٥٩، أي لغة موجهة لألعمال التجارية، مت تطويرها يف عـام Common Business Oriented Languageإختصار لـ

-Beginner's All، إختصار لــ Basic Languageلغة البازيك . IBMجلنة قصرية مكونة من ثالثة شركات منها من قبل

Purpose Symbolic Instruction Code شفرة رموز لتعليمات مجيع األغراض للمبتـدأين، و مت تطويرهـا يف عـام ، أي، و أخذت شهرة كـبرية Thomas Kurtzتوماس كورز األستاذ و John Kemeny من قبل األستاذ جون كيمين ١٩٦٣

من قبل ١٩٥٨ يف عام اتطويرهمت ، Algorithmic Language، إختصار لـ Algol Languageلڤول آلغة . )إىل حد اآلن(، و اسم هذه اللغة مأخوذ من اسـم Pascal Languageلغة باسكال . جمموعة من علماء حواسيب أوروبيني و أمريكيني

و تذكر أنا كل مـن .Niklaus Wirth من قبل نيكلوس ويرث ١٩٧٠، و مت تطويرها عام Blaise Pascalالعامل الفرنسي .اللغات السابقة هي أقدم لغات برجمة

Operatingو أنظمة التشغيل Systems Programmingمن لغات األغراض العامة، و تستعمل بكثرة يف برجمة النظم Cلغة

Systems، مت تطويرها يف السبعينات من طرف كني تومـسن Ken Thompson و دنـيس ريتـشي Dennis Ritchie يف بلغـة احيث أا قريبة من األجهزة و شـبيه low-level languagesن اللغات املنخفضة املستوى مC لغة .Bellخمتربات ألـا لغـة mid-level language يف عملها، و لكن البعض يعتربها لغة متوسطة املستوى assembly languageالتجميع

.وبغة مستقلة عن البنية الصلبة للحاس، و هي لالشيءحتاكي لغة اإلنسان بعض

20

اللغـة علـى أن هذه ، حيث ركزا مطوري Unix لربجمة نظام يونيكس Cقام كني تومسن و دنيس ريتشي بتطوير لغة مت ١٩٧٣يف عـام .أقـصر و يف وقت تكون لغتهم سهلة االستعمال حيث ميكن كتابة برامج كبرية مع قلة األخطاء

مشتقة من لغة نفسها B لغة الـ و كانت( B لغة الـ ألا كانت مشتقة من C بشكل رمسي، و مسيت بلغة Cإطالق لغة BCPL مارتن ريتشاردز اليت قام بتطويرها Martin Richards هـي خمتـصرة مـن ، و١٩٦٧ يف عام Basic Combined

Programming Language،كني تومـسن يف عـام اليت قام بتطويرها ) حيث كان الفرق بني اللغتني هو نوع البيانات، و ذلك هو C يف األجبدية هو B، و الذي يلي احلرف الذي يعمل بهBell من اسم املختربBذ احلرف حيث أخ١٩٦٩

بـتأليف أول كتاب هلذه Brian Kernighan براين كارنيغان و دنيس ريتشيقام ١٩٧٨ يف عام .C سبب تسميتها بلغةساسي هلذه اللغة، و كان الكتاب معـروف و الذي يعترب املرجع األ The C Programming Language اللغة و مسي بـ

بشكل كبري و الذي C هو كثرة استعمال لغة K&R C و السبب يف تسميته بـ )K&R C )Kernighan & Ritchie C بنسخةحىت أصبح كل من تلك النسخ غري متوافقة مـع بعـضها و Cأدى إىل تطوير مكتبات و دوال يف نسخ خمتلفة من لغة

النسخة القياسية مت إطالق ١٩٨٩ يف عام .C تشاا، و هذا ما أدى إىل تعريف نسخة قياسية للغة كادت أن تكون غري م اللجنة الوطنية األمريكية أي American National Standards Institute C و هي خمتصرة من ANSI C و مسيت بـ C للغة

القياسية يف خمتلف أحناء Cظمة العاملية للمعاير مت إطالق لغة للمعاير و املن اللجنة الوطنية األمريكية للمعاير، و بتعاون بني ـ و هي ISO C العامل و مسيت بـ و كانـت النـسخة .International Organization for Standardization إختصار لـ

بـة بكتابـراين كارنيغـان و دنيس ريتشي قام ١٩٨٨يف عام ( K&R C عن نسخة الشيء خمتلفة بعض Cالقياسية للغة .)ANSI C أي، C لنسخة القياسية للغة The C Programming Language الثانية من كتابالنسخة

كني تومسندنيس ريتشي

.................................................................................... ة األدوات الالزم١,١ ...................................................................................... C البدء مع لغة١,٢ .........................................................Variables and Constants املتغريات و الثوابت١,٣ ............................................................................... Comments التعليقات١,٤ ..................................................................................... Input اإلدخال ١,٥ ................................................................................. Operators املؤثرات١,٦ ........................................................................... if, else, else…if القرارات ١,٧ ....................................................................................... C عناصر لغة ١,٨ ................................................................ ... ملخص للفصل األول،مع إضافات١,٩

، كيفية اإلعالن عن املتغريات و الثوابـت، Cسنتعلم املبادئ األولية على كيفية الربجمة يف لغة يف هذا الفصل : مقدمة

.اإلدخال و اإلخراج، مع اجلمل الشرطية بالتوفيق إن شاء اهللا

:قال اهللا تعاىل ﴾ يرفع اهللا الذين آمنوا منكم والذين أوتوا العلم درجات ﴿

صدق اهللا تعاىل

22

و أي . linker و مـربط compiler، متـرجم texts editor هي ثالثة أشياء ال أكثر، حمرر نصوص Cأدوات لغة

ن االستغناء عن أداة من هذه و ال ميك . برنامج تتم كتابته جيب أن مير على هذه األدوات، و يف اية ينتج امللف التنفيذي يف املترمجات احلديثة أصبح كل من األدوات مدجمة مع بعضها مما جعلها أكثر سهول يف االستعمال، فمثال لو . األدوات

. أردنا ترمجة و ربط برنامج، زر واحد من لوحة املفاتيح أو نقرة من الفأرة تقوم ترمجة و ربط املشروع مث تنفيذ الربنامج . Consoleسابقة فكانت تتم هذه العمليات على شكل أوامر من أما يف ال

:texts editorحمرر نصوص ١,١,١

نقوم بكتابة الـربامج Cاخلطوة األول يف الربجمة هي كتابة الربنامج، و طبعا ذلك يتم عرب حمررات نصوص، و يف لغة الـيت ال )القدمية(، هناك بعض املترمجات c. على صيغة ، فقط نراعي أن يتم حفظ مصدر الربنامجعلى أي حمرر نصوص

أن Cو من شروط امللفات النصية للغة . يهمها امتداد امللف النصي للربنامج، و لكن من األفضل استعمال الصيغة الرمسية ، كـال مـن Windows يف أنظمة Notepad و Linux يف أنظمة KWrite، مثال حمرر ASCIIتكون النصوص مكتوبة بنظام

.Linux يف أنظمة KWord أو Windows يف أنظمة Wordال ميكن استعمال احملرر . ASCII يعتمدان على شفرة حمررين

:compiler مترجم١,١,٢، إن مل تكون هناك أخطاء يف قواعد اللغة املصدرية إىل لغة منخفضة املستوى لفاتتقوم املترمجات بترمجة أو حتويل امل

، حيث بعد الترمجـة مباشرة Machine Language أو إىل لغة اآللة Assembly Language ميكن أن تترجم إىل لغة التجميع حتتوي هذه امللفات على تعليمات التجميع أو اآللة مم يسهل عملية ربط لغتني أو أكثـر .obj. يتم إنشاء ملفات بصيغة

.C يف لغة Pascalمع بعضها، فمثال ميكننا استدعاء دوال من لغة

حيث يقوم بترمجـة ++Visual C يوجد املترجم Windows من املترمجات يف أغلب األنظمة، مثال يف أنظمةعديديوجد الو املقدم من شركة ++Dev-C، و يوجد كذلك املترجم MicroSoft، و هو مقدم من طرف شركة ++C و C كال اللغتني Bloodshedو مترمجات أخرى مثل ، Turbo C، Quick C، Pelles C، .... النسبة للمترجمب Visual C++ فهو غري جماين.

:من املترمجات اانية و ميكن حتميله من الرابط التايل ++Dev-Cاملترجم html.devcpp/net.bloodshed.www://http

23

حيث ميكن حتميله من و األكثر استعمالنا يف اجلامعات،،قدمها أيضا من املترمجات اانية، و هو من أTurbo C املترجم :الرابط التايل

html.downloadTC/misc/stephenp~/edu.pitt.www://http

: ميكن حتميله من الرابط التايل وهاأيضا من املترمجات اانية و يعترب من أفضل Pelles C املترجمhtm.download/pellesc/com.smorgasbordet.www://http

، كل ما حتتاجـه Linux و Unix من نسخ ة مع أي نسخة، فال حتتاج إىل مترمجات ألا مدجم Linux و Unix أنظمة يف أما و هذا ال يعين أنه ال يوجد مترمجات لتلك األنظمة، بل يوجد و رمبا عددها أكثر مـن الـيت هـي .و حمرر نصوص ه

.Windowsموجودة على نظام :Linux أنظمةو Windows أنظمةيف كل من عديدة مترمجات جمانيةحيث توجدأدخل على الرابط التايل

shtml.cpp/compilers/com.thefreecountry.www://http

ـ IDEا ةمتوفرمجيع املترمجات احلديثة Integrated خمتـصرة مـن IDEطلح؟، أوال الكلمـة ص، ماذا يعين هـذا امل

Development Environmentير متكاملة على املـربمج يف أي بيئة تطوير متكاملة، حيث تساعد املترمجات ذات بيئة تطوففي السابق كانت الترمجة و الربط تتم على شكل أوامر، أما يف البيئـات التطـوير كل من التحرير، الترمجة و الربط،

، أما كتابة الربامج أو عرب نقرة من الفأرة املفاتيحاملتكاملة فأصبحت عملية الربط و الترمجة تتم عرب زر واحد من لوحة Qtأداة حىت ،Unix/Linuxررات نصوص مستقلة عن املترجم، و هذه الظاهرة موجودة إىل حد اآلن يف أنظمة فتتم عرب حم

يف هذا األنظمة، و نأخـذ مثـاال ة و هنا أيضا كنت أريد أن نرى كيف تتم الترمج .تعتمد على أوامر لترمجة و الربط : نكتب)Konsoleمثال (ر خط األوام، فمن cprog.cلذلك، مثال لدينا برنامج حمفوظ بإسم

cc cprog.c

و طبعا .cc بدل gcc فسنكتب األمر ++C فقط، أما إذا كان مدمج مع لغة Cهذه يف حالة أن الربنامج معتمد على لغة

:توجد طرق أخرى مثل

cc –o cprog cprog.c

:تكون كتايلأما عملية تنفيذ الربنامج فهنا ستكون لديك إمكانية إعادة تسمية الربنامج،

./cprog

24

:linker املربط١,١,٣

ملفـات أو، exe. بامتداد مث يعطينا الربامج التنفيذية و اليت تكون غالبا obj.يقوم املربط جبمع امللفات ذات الصيغة . و ميكن أن تكون هذه امللفات مكتوبة مبختلف اللغات،dll. و اليت تكون بإمتداد ةكي الديناميالربط اتمكتب

إنشاء ملف تنفيذيمرحلة: ١,١,١الشكل

25

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

ـ سـم إك main.c، ميكن كتابـة c. مع إنشاء ملف نصي جديد و احلرص على أن يتم حفظه بامتداد Console بيئة ال :للملف النصي و الذي سنقوم بالكتابة عليه الربنامج األول و هو

#include<stdio.h> main() { printf("Hello, World!"); }

1 2 3 4 5 6

Cالربنامج األول يف لغة : ١,٢,١الربنامج : مالحظة :، أي نكتب الربنامج على الشكل التايل بكتابة الربنامج بدون الترقيماتقم

#include<stdio.h> main() { printf("Hello, World!"); }

Cالربنامج األول يف لغة : ١,٢,١الربنامج علـى Hello, World تها، يقوم هذا الربنامج عند ترمجته و تنفيذه بطباعة اجلملـة الربنامج اليت ميكن كتابهذا من أبسط

ـ الشاشة و هي مقسمة إىل <Code( #include<stdio.h( ه الشفرة السطر األول من الربنامج ب .Console يف بيئة ال .أزرقة اللون include# غالبا ما تكون الكلمة و،<>include# األول هو، قسمني

، يف هذا القسم نقوم بكتابة stdio.h ، حيث يوجد امللف< > و القسم الثاين هو ما بني الرمزين أكرب من و أصغر من

، و هي عديدة و كل ) من املترجم الذي تستعمله includeميكنك أن تراها يف الد ( لرأسيةأمساء مللفات تسمى بامللفات ا خمتصر مـن stdio.hامللف الرأسي . حيث حيتوي على ثوابت و دوال تسهل علينا الربجمة ،ملف منها له جماله اخلاص

Standard Input Outputأما ، .h فهو امتداد امللف الرأسي و هو خمتصر من Header File. فائدة الكلمـة #include من امللفات الرأسية، عديديوجد ال .إىل مشروعنا < > هو ضم امللف الرأسي املوجود بني الرمزين أكرب من و أصغر من

.فيما بعدسنتطرق إليها

26

نـها، و ال و هي الدالة الرئيسية ألي مشروع و ال ميكن االستغناء ع ()main يف السطر الثالث يوجد اسم دالة و هي يبدأ الربنامج بالتنفيذ بشكل مترتب، أما القوسني بعد اسم الدالـة هذه الدالة من و .ميكن التغري يف امسها إال يف حاالت

و } يف السطر الرابع توجد احلاضنة .و ليست متغري أو ثابت )و أا دالة بدون وسائط ( أا دالة على فهما اللذان يبينان .main لةاليت تعين بداية الدا

، و هي خمتصرة من stdio.h يف امللف الرأسي موجودة و هي عبارة عن دالة printf يف السطر اخلامس توجد الكلمة

print format ، ما هو بداخل أقواس الدالة إىل الشاشة، و يف مثالنـا هـذا )إخراج(أي صيغة الطبع، و هي تقوم بطبع ، " " اقتباسينياجلمل دائما داخل الشاشة، و تكون إخراجها إىل سيتم و هي اجلملة اليت ! Hello, World يوجد النص

بصفة printf تستعمل الدالة .)أو التعليمات (لسطر التعليمة و يف اية السطر نكتب الفاصلة املنقوطة و هي تعين اية ا .وب اخلاصة باحلاسScreen اإلخراج و هي الشاشةةعامة يف عرض أو إخراج معلومات إىل أدا

و }و تسمى حاضنة البداية .main و اليت تعين اية الدالة الرئيسية { و أخريا السطر السادس حيث موجود به احلاضنة

:، صورة توضيحيةblock و ما بينهما بالـ { حاضنة النهاية

block: ١,٢,١الشكل :إىل قسمني مثل ! Hello, World ميكن كتابة الربامج السابق بطرق خمتلفة، حيث ميكن تقسيم اجلملة

#include<stdio.h> main() { printf("Hello, "); printf("World!"); }

1 2 3 4 5 6 7

)٢( C الربنامج األول يف لغة :١,٢,٢الربنامج ملـة و ميكن أيضا كتابـة اجل .و هنا سيتم طبع اجلملة كاملة يف سطر واحد، و تقسيمها ال يعين أن كل كلمة يف سطر

: أو ميكن كتابة الدالني يف سطر واحد، مثال.printf حرفيا، كل حرف بدالة من

27

#include<stdio.h> main() { printf("Hello, "), printf("World!"); }

1 2 3 4 5 6

)٣( Cالربنامج األول يف لغة : ١,٢,٣الربنامج :أو

#include<stdio.h> main() { printf("Hello, "); printf("World!"); }

1 2 3 4 5 6

)٤( Cالربنامج األول يف لغة : ١,٢,٤الربنامج :و توجد طريقة ال ميكن استعماهلا و هي

#include<stdio.h> main() { printf("Hello, World!"); }

1 2 3 4 5 6 7

)٥( C الربنامج األول يف لغة :١,٢,٥الربنامج ، و لتفـادي هـذه printf نبهك املترجم عن وجود أخطاء، منها نسيان قوس النهاية لدالـة عند ترمجة هذا املثال سي

:، و تصبح الدالة كاآليتprintf يف اية السطر األول من الدالة anti-slash ضعواألخطاء نقوم ب

printf("Hello, \ World!");

)٦( Cالربنامج األول يف لغة : ١,٢,٦الربنامج يف اية الربنامج فإن املترجم لـن )stdio.h الذي يتمثل يف ضم امللف الرأسي (سابق إن كتبنا السطر األول يف املثال ال ، و ستنجم أخطاء عن ذلك، لذا جيب دائما أن يكون ضم امللفات الرأسية قبـل الـدوال املـراد printf جيد الدالة

.روع ضم امللفات يف بدابة كل مشيتماستعماهلا و يستحسن دائما أن :بني الكلمتني، مثال n\ يف سطر آخر و ذلك بإضافة الرمز ! World يف سطر و الكلمة ,Hello ميكن كتابة الكلمة

#include<stdio.h> main() {

1 2 3 4

28

printf("Hello, \nWorld!"); }

5 6

)٧( Cالربنامج األول يف لغة : ١,٢,٧الربنامج :لأو كتابة كل من الكلمات يف دالة مث

#include<stdio.h> main() { printf("Hello, "); printf("\n"); printf("World!"); }

1 2 3 4 5 6 7 8

)٨( Cالربنامج األول يف لغة : ١,٢,٨ الربنامجبـسطر n\ و ستجد أن كل من الكلمتني يف سطر، يتم استبدال الرمز n\ عند ترمجة الربنامج و تنفيذه فلن جتد الرمز

.New line يعين n د حيث ال يتم طباعة الرمز، و احلرفجدي :يلييف ثالثة أسطر كما يف ميكن كتابة املثال األول

#include<stdio.h> main(){printf("Hello, World!");}

1 2 3

)٩( Cالربنامج األول يف لغة : ١,٢,٩ الربنامجستالحظ أنه ميكن اسـتعمال ل مثل السابق بدون أخطاء، حيث مت مجع مجيع األسطر يف السطر الثالث، و الربنامج يعم

: يف نفس السطر، و ميكن استعمال أكثر من ذلك مثل)اية الدالة( { و احلاضنة)بداية الدالة( } احلاضنة

#include<stdio.h> main(){ printf("Hello, World!");}

1 2 3 4

)١٠( Cالربنامج األول يف لغة : ١,٢,١٠الربنامج .لدالة الرئيسية { } اضنتنياحل الوظائف و الدوال املراد إستعماهلا داخل ، األوامر أخرى، و لكن جيب أن تكونو طرق

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

#include<stdio.h> main(){ printf("Hello, World!");}

1 2

)١١( Cالربنامج األول يف لغة : ١,٢,١١الربنامج

29

مـن قواعـد ( تتطلب سطرا كامال هلا include# إذا ترمجة هذا املثال فسينبهك املترجم عن وجود خطأ ألن الكلمة و مسيت بقبل املعاجل ألنه يتم تنفيذها preprocessor أو قبل املعاجل directive بالتوجيه include#تدعى الكلمة .)اللغة

علـى الرأسـي املطلوب إىل املشروع، حيث حيتوي ذلك امللف الرأسي قبل الترمجة، و هي تقوم بضم حمتويات امللف و ميكن متيزها بالرمز directive توجد الكثري من التوجيهات .براجمنابرجمة دوال تساعدنا يف جمموعة من ثوابت، بنيات و

.، سنعرفها يف الدروس القادمة# :، مثالmain داخل الدالة الرئيسية block ميكن أيضا وضع

#include<stdio.h> main() { printf("Hello, World!\n"); { printf("Hello, World!\n"); } printf("Hello, World!\n"); }

1 2 3 4 5 6 7 8 9 10

)١٢( Cل يف لغة الربنامج األو: ١,٢,١٢الربنامج داخل الدالة الرئيسية، أو استعمال block الدالة الرئيسية، و ميكن إنشاء أكثر من block و يتم التعامل معها كالتعامل مع

block داخل block آخر.

:عدادلتعامل مع األ ا١,٢,١ القسمة و الضرب، ، الطرح،مع مثل اجل عليها التعامل مع األعداد هو طباعة األعداد على الشاشة و استعمال مؤثرات

، و رمبا تقول أن األمر سهل فقط نقوم بكتابة األعداد الـيت نريـدها printf و سنتعامل مع األعداد باستخدام الدالة ، صحيح ميكن استعمال تلك الطريقة و لكن املترجم هنا سيتعامل مع األعداد على printf يف الدالة تداخل االقتباسا

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

،i% أو d% الرمـز باالستعمال رمز لتعامل معه، مثال األعداد الصحيحة يتم التعامل معها نوع من األعداد لكل C يف لغة أما األعداد احلقيقيـة ، هذا بالنسبة لألعداد الصحيح، Integer من الرمز الثاين خمتصر و Decimal األول خمتصر من الرمز بالتعامل مع كل خاصة أخرى ، و أيضا توجد رموز float خمتصر من f و احلرف ،f% الرمز باستخدامتعامل معها فيتم ال . احلروف و النصوص، سنتطرق إليها فيما بعدمن

: الصحيحة، لكتابة عدد من نوع األعداد الصحيحة نكتب كما يليعدادنذهب إىل التعامل مع األ

30

#include<stdio.h> main() { printf("%d", 20); }

1 2 3 4 5 6

طباعة عدد صحيح:١,٢,١٣الربنامج العدد املـراد بكتابة، و بعد االقتباسيني نقوم و بني االقتباسيني printf هنا وضعنا رمز األعداد الصحيحة داخل الدالة

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

#include<stdio.h> main() { printf("%d", 20+5); }

1 2 3 4 5 6

استعمال اجلمع: ١,٢,١٤الربنامج إظهار أكثر من رقـم و ذلـك و ميكن . بنفس الطريقة الضرب القسمة و ،ملؤثرات مثل الطرح باقي ا استعمالو ميكن : مثل ما يليواضحة تكون األرقام حىت من الرمز السابق مع فصله d% الرمزبزيادة

#include<stdio.h> main() { printf("%d %d", 20+5, 87); }

1 2 3 4 5 6

طبع عددين: ١,٢,١٥الربنامج اسـتعمال و نفصلهما بفاصلة، ميكـن بعد الرقم السابق لما نظيف رمز األعداد الصحيحة نقوم بكتابة الرقم اإلضايف ك

:أكثر من عددين و بطريقة منظمة فمثال إذا أردنا أن نقوم بكتابة عملية اجلمع فسنكتب كما يلي

#include<stdio.h> main() { printf("%d + %d = %d\n", 20, 5, 20+5); }

1 2 3 4 5 6

عملية مجع: ١,٢,١٦الربنامج

31

:استعماهلا لكيفية مثالو هذا .d% بدل الرمز f% فقط نستعمل الرمزاحلقيقيةو نفس الطريقة مع األعداد

#include<stdio.h> main() { printf("%f + %f = %f\n", 1.0, 2.14, 1.0+2.14); }

1 2 3 4 5 6

و إظهار أعداد حقيقيةمجع : ١,٢,١٧الربنامج :مالحظة

ة أي أا أعداد وضعنا النقطة يف مكان الفاصلة، هكذا كي مييز املترجم على أا قيم لألعداد حقيقي يف املثال السابقة ـ هلا فواصل اء، أما إذا وضعت الفاصلة يف مكان النقطة فسيعتربها املترجم منفصلة عن األخرى و هكذا سـتنجم أخط

.ن الفاصلة تستعمل يف فصل وسائط دالةكثرية، و تذكر أ c% نـضع f% و d% السابقة فقـط بـدل الرمـزين ق مثل الطر طريقة استعماهلا ص ف النصو أما رموز طبع األحرف و

أي سلـسلة String خمتصر من s و احلرف ،للنصوص s% و نضع الرمز character خمتصر من c لألحرف، حيث حرف :ااستعماهل يوضح طريقة بالنسبة للحروف فهذا مثال .حروف

#include<stdio.h> main() { printf("%c", "a"); }

1 2 3 4 5 6

طباعة حرف: ١,٢,١٨الربنامج :و ميكن استعمال هذا املثال أيضا

#include<stdio.h> main() { printf("%c", 'a'); }

1 2 3 4 5 6

)٢(طباعة حرف : ١,٢,١٩الربنامج :، و يف حالة أردنا طبع نص نكتب كما يليa امج احلرفهنا سيطبع الربن

#include<stdio.h> main() {

1 2 3 4

32

printf("%s\n", "Hello, World!"); }

5 6

طباعة نص: ١,٢,٢٠الربنامج :و ميكن أيضا كتابة كل كلمة أو حرف يف إقتباسني مثل

#include<stdio.h> main() { printf("%s", "Hello, " "\n" "World"); }

1 2 3 4 5 6

)٢(طباعة نص : ١,٢,٢١الربنامج أو x%الرمز التعامل معها باستخدام يكون بأرقام النظام السداسي عشر و اليت ةو توجد رموز أخرى منها من هي خاص

%X 0 منحيث تبدأx 0 أوX 0 ، مثال الرقمx000F و الرمز ، %o ى سـنعرفها يف ألعداد النظام الثماين، و رموز أخـر .الدروس القادمة

:تملة األخطاء احمل١,٢,٢ أو Main ال ميكن كتابتها main املترمجات تفرق بني احلروف الكبرية و احلروف الصغرية، مثال الدالة C يف لغة .١

MAIN.

:، مثال ال ميكن كتابةmain رج الدالة الرئيسيةاأو دوال أخرى خ printf ال ميكن استعمال الدالة .٢

#include<stdio.h> printf("Hello, World!\n"); main() { }

1 2 3 4 5 6 7 8

١اخلطأ : ١,٢,٢٢الربنامج .الة الرئيسية، سنتعرف على ذلك يف الدروس القادمةإال يف حالة استعمال دوال ا دوال أخرى مث ربطتها بالد

للربنامج حىت يتم تـصحيح يالتنفيذكن إنشاء امللف ال مي كثريا ما يتم نسيان الفاصلة املنقوطة، و إن مت نسياا .٣ .اخلطأ

33

، و سبب ذلك هو عندما يتم اإلعالن ()main ال ميكن استعمال الفاصلة املنقوطة يف اية سطر الدالة الرئيسية .٤ عن دالة و إعطاءها أوامر ال جيب أن نكتب الفاصلة املنقوطة، ليست مثل دوال معرفة سـابقا مثـل الدالـة

printf.

املترجم سينبهك عن وجـود فإن " " االقتباس، إن كتبنا النص املراد طبعه بدون رموز printf يف دالة الطبع .٥ .خطأ

: متارين١,٢,٣ .األوىل يف سطر و الثانية يف سطر آخرمرتني، ! Hello, World اجلملةأكتب برنامج يقوم بطباعة .١ .كل حرف يف سطر، ! Hello, World اجلملةأكتب برنامج يقوم بطباعة .٢

؟اختيارنا من اسمإىل main الدالة الرئيسيةاسمهل ميكن تغري .٣ ؟main عن الدالة الرئيسيةاالستغناءهل ميكن .٤ الدالة الرئيسية أكثر من مرة؟استعمالهل ميكن .٥ .٣,٥ من ٢أكتب برنامج يقوم بطبع نتيجة طرح العدد .٦

.)c%( ز األحرفورم باستخدام Hello أكتب برنامج يقوم بطباعة الكلمة .٧

.)s%s%( الرمز اخلاص بطبع النصوص مرتنيباستعمالأكتب برنامج يقوم بكتابة نصيني .٨

34

، حيث RAM أي Random Access Memoryاملتغريات هي جمموعة من البايتات يتم حجزها يف الذاكرة العشوائية

. كل بايت يتم الوصول إليها عرب عنوان . استرجاعها يف أي وقت ميكن ،يم متغرية يف تلك البايتات احملجوزة يتم وضع ق تالترانزستورا حتتوي على عدد من Chip عبارة عن رقاقة RAM الـ . قطع التيار دو تفقد هذه الذاكرة مجيع بياناا عن

Transistors و املكثفات Capacitor كـرة تقـدر و مكثف يشكالن وحـدة ذا رترانزستو تقدر باملاليني، حيث واحد، و كل بيات من هـذه Byte بتات تشكل واحد بايت ٨حيث ، ١ أو القيمة ٠حيل هذا البت إما القيمة ، Bitبالـبت

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

real mode يف النمط احلقيقي الذاكرة و العناوين: ١,٣,١الشكل د احلقيقية من املتغريات و الثوابت، منها متغريات خاص باألعداد الصحيح و أخرى باألعدا أنواع تعديوجد C يف لغة

و كأنك حتجز مكانـا أوال مث (باإلعالن عن املتغريات و الثوابت قبل استعماهلا ، و دائما نقوم ...و أخرى باألحرف و مث القيمة اليت سـيحتويها املتغرياسمغري هي كتابة نوع املتغري مث طريقة اإلعالن عن مت .))أي وضع قيمة (تقوم باجللوس

:صورة توضيحية املتغري، )هذا يف حالة إعطاءه قيمة مباشرة(

35

طريقة اإلعالن عن متغري: ١,٣,٢الشكل :Variable Type نوع املتغري ١,٣,١

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

:أنواع املتغريات هي. توجد حالة خاصة هنا و هي األعداد احلقيقية ألا ليست كغريها

:int األعداد الصحيحة متغري١,٣,١,١

تغري م يأخذ، حيث Variable_Type يف مكان int متغري من نوع األعداد الصحيحة بكتابة الكلمة عن عالناإلنقوم ب أي أن أقصى قيمة ميكن ، احتمال ٦٥٥٣٦ بت و تساوي ١٦ بايت و اليت تساوي ٢مساحة قدرها Integer من نوع

يف حالـة ضـم األعـداد ٣٢،٧٦٧ إىل -٣٢،٧٦٨ من ابتداء، أو من الصفر ، ابتداء ٦٥٥٣٥أن حيملها املتغري هي ـ بت، حيث أقصى قي ٣٢ تساوي أي )حسب املترجم و منطه ( بايت ٤و ميكن أن يكون حجمها .السالبة أن ن مة ميك

:مثال .)يف حالة أن املتغري ال حيتوي إال على قيم موجبة(الصفر من ، ابتداء٤٢٩٤٩٦٧٢٩٦حتملها هي

#include<stdio.h> main() { int Variable_Name = 0; }

1 2 3 4 5 6

اإلعالن عن متغري من نوع عدد صحيحطريقة : ١,٣,١الربنامج :float قيقية األعداد احل متغري١,٣,١,٢

بايت، حيث ٤، حجمها float الكلمة باستخداماألعداد احلقيقية هي األعداد اليت هلا فواصل، و يتم اإلعالن عنها :مثال .3.4E+38 إىل1.2E-38 تبدأ من

#include<stdio.h> main() {

1 2 3 4

36

float Variable_Name = 0.0; }

5 6

وع عدد حقيقياإلعالن عن متغري من نطريقة : ١,٣,٢الربنامج :double متغري األعداد احلقيقية١,٣,١,٣double هي ضعف float، الكلمة باستخدامو يتم اإلعالن عنها double ، بايت و تبدأ مـن ٨حيث حجمها

2.3E-308 1.7 إىلE+308. مثال:

#include<stdio.h> main() { double Variable_Name = 0.0; }

1 2 3 4 5 6

)٢(اإلعالن عن متغري من نوع عدد حقيقي طريقة : ١,٣,٣الربنامج :short متغري األعداد الصحيحة١,٣,١,٤

، Variable_Type يف مكـان short هو أيضا من متغريات األعداد الصحيحة حيث نقوم باإلعالن عنه بكتابة الكلمة كن أن حيملها املـتغري هـي ، أي أن أقصى قيمة مي احتمال ٦٥٥٣٦ بت و تساوي ١٦ بايت و اليت تساوي ٢ حجمه

:مثال . يف حالة ضم األعداد السالبة٣٢،٧٦٧إىل -٣٢،٧٦٨ من ، أو ابتداء ابتداء من الصفر٦٥٥٣٥

#include<stdio.h> main() { short Variable_Name = 0; }

1 2 3 4 5 6

)٢(اإلعالن عن متغري من نوع عدد صحيح طريقة : ١,٣,٤الربنامج :long األعداد الصحيحة متغري١,٣,١,٥

، Variable_Type يف مكـان long هو أيضا من متغريات األعداد الصحيحة حيث نقوم باإلعالن عنه بكتابة الكلمة يف ( من الـصفر ابتداء، ٤٢٩٤٩٦٧٢٩٦ملها هي حي بت، حيث أقصى قيمة ميكن أن ٣٢ساوي ي بايت أي ٤ حجمه

:مثال .)حالة أن املتغري ال حيتوي إال على قيم موجبة

#include<stdio.h> main() { long Variable_Name = 0; }

1 2 3 4 5 6

)٣(اإلعالن عن متغري من نوع عدد صحيح طريقة : ١,٣,٥الربنامج

37

:char رموز متغري ال١,٣,١,٥ بـت ٨ بايـت أي ١ ، حجمه Variable_Type يف مكان char من أصغر املتغريات، يتم اإلعالن عنه بكتابة الكلمة

.ASCIIحيث كل رقم ميثل برمز يف جدول ،١٢٧ إىل -١٢٨أو من ٢٥٥ إىل ٠ من ابتداء احتمال ٢٥٦حيث حيمل :مثال

#include<stdio.h> main() { char Variable_Name = 'A'; }

1 2 3 4 5 6

اإلعالن عن متغري من نوع حريفطريقة : ١,٣,٦الربنامج :Variable Name املتغرياسم ١,٣,٢

حتدثنا سابقا عن عناوين، توجد مالحظة قوية هنا جيب التنبه ا، و هي أننا نرى املتغريات أمساء، أما اجلهـاز فـرياه ، إمنا أمساء واضحة عناوين بدون اللجوء إىل العناوينعناوين، اإلسم جمرد أداة استعملت لتسهيل عملية الوصول إىل تلك

:ملتغري حدود ال جيب جتاوزها و هي االسمو . توضح سبب اإلعالن عنها

. حرف٣١ املتغري أكثر من اسمأن ال يتجاوز § . املتغري بأرقاماسمأن ال يبدأ § .... املتغري حيتوي على مؤثرات مثل اجلمع و الطرح واسمأن ال يكون § .)_ الرمز ءباستثنا...(و } و # و % املتغري حيتوي على رموز مثلاسمأن ال يكون § . اسم املتغري مستعمل سابقا يف دالة أو متغري آخرأن ال يكون § .أن ال يكون اسم املتغري من أمساء الكلمات احملجوزة §

:Variable Value قيمة املتغري ١,٣,٣

و قيمة املتغري .float قيمة عدد حقيقي int مثال ال ميكن أن نعطي للمتغري فجيب مراعاة قيمة املتغري حسب نوعه، أو نضع به قيمة إستقبلنا من ( مباشرة بعد اإلعالن عنه، أو نقوم باإلعالن عنه و نضع به قيمة فيما بعد ميكن أن نعطيها له

.)املستخدم مثال

: أمثلة حول املتغريات١,٣,٤

38

سأقدم أمثلة خمتلفة حول طريقة استعمال املتغريات، و نبدأ مبتغريات أعداد صحيحة حيث نقوم بإعالن عـن مـتغري :على الشاشة، املثال Varمث نقوم بطباعة القيمة املوجودة يف املتغري ، ٥لقيمة و به اVarباسم

#include<stdio.h> main() { int Var = 5; printf("%d\n", Var); }

1 2 3 4 5 6 7 8

طباعة حمتوى متغري من نوع عدد صحيحطريقة : ١,٣,٧الربنامج ، و يف ٥ و به القيمـة )عدد صحيح ( int و من نوع Var ن عن متغري باسم يف هذا املثال، يف السطر اخلامس مت اإلعال

اء للمتغريات قيم، سـأعطي و توجد طرق أخرى إلعط ، Var لطباعة قيمة املتغري printfالسطر السابع استعملنا الدالة :األوىل هي اإلعالن عن املتغري يف سطر مث إعطاءه قيمة يف سطر آخر مثل، طريقتني

#include<stdio.h> main() { int Var; Var = 5; printf("%d\n", Var); }

1 2 3 4 5 6 7 8 9

حتديث قيمة متغري و طبعهاطريقة : ١,٣,٨الربنامج : و الثاين به قيمة املتغري األول، مثال٥و الطريقة الثانية هي اإلعالن عن متغريين، األول به القيمة

#include<stdio.h> main() { int Var_1 = 5; int Var_2 = Var_1; printf("%d\n", Var_2); }

1 2 3 4 5 6 7 8 9

حتديث قيمة متغري معطاة من متغري آخرطريقة : ١,٣,٩الربنامج :مثال آخر

#include<stdio.h> main()

1 2 3

39

{ int Num1, Num2, Num3; Num1 = 5; Num2 = 7; Num3 = Num1 + Num2; printf("%d + %d = %d\n", Num1, Num2, Num3); }

4 5 6 7 8 9 10 11

ناتج مجع بني عددين صحيني يف متغري: ١,٣,١٠الربنامج يف السطر اخلامس مت اإلعالن عن ثالثة متغريات يف نفس السطر حيث نقوم بفصل بني اسم متغري و آخر بفاصلة، و هنا

Num1 ، و يف السطر السادس و السطر السابع أعطينا للمـتغري )int( ستكون مجيع املتغريات من نوع أعداد صحيحة

و املـتغري Num1 نتيجة اجلمع بني املـتغري Num3 ، و يف السطر الثامن أعطينا للمتغري ٧ القيمة Num2 و املتغري ٥القيمة Num2 كن إستعماهلا مع مـتغريات و نفس الطرق السابقة مي .، و أخريا السطر العاشر و الذي يقوم بطباعة نتائج الربنامج

ليست خمتلفة كثري، حيث ميكننا أيضا أن نعطيه استعمالهفطريقة char، أما املتغري long و short و float من نوع ي تفهـم ، و لك ASCII عند طباعته ال يطبع عددا، إمنا احلرف الذي حيمل ذلك الرقم يف جدول حيث عدد بدل احلرف

:إليك املثال التايل char ع متغريات من نواستعمالطريقة

#include<stdio.h> main() { char ch = 'a'; printf("%c\n", ch); }

1 2 3 4 5 6 7 8

طباعة حرف موجود يف متغري حريفطريقة : ١,٣,١١الربنامج نعطيه عددا يطبع ، أما إذا أردنا أن‘ ‘مع مراعاة أن يكون داخل a احلرف الذي ch يف السطر اخلامس أعطني للمتغري

:، و سيصبح املثال السابقة كما يليASCII يف جدول٩٧فهو الرقم a لنا احلرف

#include<stdio.h> main() { char ch = 97; printf("%c\n", ch); }

1 2 3 4 5 6 7 8

أسكيطباعة حرف باإلعتماد على رقمه يف جدول طريقة :١,٣,١٢الربنامج من الصفر، و كل رقـم ميثـل ابتداء ٢٥٥ هي charميكن أن حيملها متغري من نوع أقصى قيمة أنابقا سو كما قلنا

.برمز

40

: األعداد املوجبة و األعداد السالبة١,٣,٥

عنـد افتراضيةلك األوىل تكون د سالبة ملتغري فتوجد طريقتني لذ أعداد موجبة و أعدا استعماليف حالة أنك أردت ميكنه أن حيمل كال من األعداد السالبة int Num عندما نقوم باإلعالن عن متغري مثال ، أي أنه املتغرياسمكتابة نوع و

:مثال، االستعمالمن ناحية احلجم و int Num مثلو هي signed Num ةجبة، أو ميكن كتابوو امل

#include<stdio.h> main() { signed Num = 5; printf("%d\n", Num); }

1 2 3 4 5 6 7 8

متغري ذات إشارة:١,٣,١٣الربنامج هذا بالنسبة للمتغريات اليت حتتوي على أعداد موجبة و أعداد سالبة، أما يف حالة أردنا أعداد موجبة فقط فسنـستعمل

: هو موضح يف املثال التايلمامثل املتغري، اسمقبل unsigned الكلمة

#include<stdio.h> main() { unsigned Num = 5; printf("%u\n", Num); }

1 2 3 4 5 6 7 8

متغري بدون إشارة:١,٣,١٤الربنامج مـتغري استعمالتعماهلا ك مت اإلعالن عن املتغري الذي ال حيتوي على أعداد سالبة يف السطر اخلامس و كما أن طريقة إس

أي أعداد unisgned اليت سيتم طبعها من نوع الذي خيرب املترجم أنا القيمة u% طبيعي، و هنا نتعرف على الرمز اجلديد .بدون إشارة

:مالحظة إىل ٠،حيث ميكن أن يبدأ من كما قلنا سابقا احتمال ٢٥٦ فإنه سيحتوي char عي مثال يعند اإلعالن عن متغري طب

، عداد سالبة أ استعمال يف حالة ١٢٧ إىل -١٢٨ يبدأ من ، و ميكن أيضا أن إىل أعداد سالبة حالة عدم احلاجة يف ٢٥٥ :و لكي تعرف السبب يف ذلك إليك الشرح

بايـت ١بايت، و كما نعرف أن ٢ هو فحجمه int بايت أما ١حجمه char مثال متغري من نوع لكل متغري حجمه، بـت ١ حيث هذا يعين أن ٠ أو ١ بت يساوي إما ١ بت، و ٨حجمه char أي أن متغري من نوع ، بت ٨ يساوي

41

إن مل تكن حتتوي على أعداد ٢٥٥ و تنتهي عند ٠ تبدأ من احتمال ٢٥٦ بت فلديها ٨ أما ،)١ أو ٠( احتمالنيلديه بت أمـا ٧ char متغري من نوع أي سيصبح حجم ٨، بت من ١سالبة، أما يف حالة أردنا أعداد سالب فسيتم سحب

و هذا جدول .احتمال ١٢٨ تساوي بت ٧، و -أو اإلشارة + البت الثامن سنتركه لإلشارة، و سيحمل إما اإلشارة :اتتغريمن امل نوع لقيم احملتملة لكالبه

القيم احلجم النوعchar و signed char ١٢٧ إىل -١٢٧ من بايت١ char و unsigned char ٢٥٥ إىل ٠ من بايت١ int و signed int ٣٢،٧٦٧ إىل -٣٢،٧٦٨ من بايت٢ int و unsigned int ٦٥٥٣٥ إىل ٠ من بايت ٢

short و signed short ٣٢،٧٦٧ إىل -٣٢،٧٦٨ من بايت٢ short و unsigned short ٦٥٥٣٥ إىل ٠ من بايت ٢ long و signed long ٢،١٤٧،٤٨٣،٦٤٧ إىل-٢،١٤٧،٤٨٣،٦٤٨من بايت ٤ long و unsigned long ٤،٢٩٤،٩٦٧،٢٩٥ إىل ٠ من بايت ٤

أنواع املتغريات و أحجامها: ١,٣,١اجلدول ، هي عكس املتغريات، ميكن أن تكون عدد، حرف، أو نص، حيث ال ميكن التغري قيمتها أي تـصبح قابلـة لثوابتا

مث نقوم بطبع املـتغري ٥للقراءة فقط، سأعطي مثال، حيث هذا مثال به متغري من نوع أعداد صحيحة، و نعطيه القيمة : طباعة قيمة املتغري و ها هو املثال مث نعيد٨على الشاشة مث نقوم بتحديث املتغري إىل القيمة

#include<stdio.h> main() { int num; num = 5; printf("%d\n", num); num = 8; printf("%d\n", num); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14

حتديث قيمة متغريطريقة :١,٣,١٥الربنامج

42

و اآلن سنكتب نفس الربنامج السابق مع إضـافة . ، و هذه الطريقة صحيح ٨إىل ٥من num هنا سيتم تغري قيمة املتغري :بسيطة، املثال

#include<stdio.h> main() { const int num; num = 5; printf("%d\n", num); num = 8; printf("%d\n", num); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14

اإلعالن عن ثابت و التحديث يف قيمته طريقة :١,٣,١٦الربنامج ثابت، num و اليت تعين أن املتغري int num إىل املتغري const اإلضافة موجودة يف السطر اخلامس، و هي إضافة الكلمة

ري، و يف مثالنا السابقة ال توجد قيمة للمتغ و هنا الربنامج لن يعمل و السبب هو أنه ال ميكن حتديث القيمة األوىل لثوابت num و جيب دائما إعطاء قيم لثوابت مباشرة بعد اإلعالن عنها و إال ستكون عبارة عن ثوابت مت اإلعالن عنه أن بعدما ،

:ذات أعداد عشوائية ثابتة ال ميكن التحديث فيها، و هذا املثال السابق بعد التصحيح

#include<stdio.h> main() { const int num = 5; printf("%d\n", num); }

1 2 3 4 5 6 7 8

طريقة اإلعالن عن ثابت:١,٣,١٧الربنامج :مباشرة بعد نوع املتغري مثل const و ميكن أيضا كتابة الكلمة

#include<stdio.h> main() { int const num = 5; printf("%d\n", num); }

1 2 3 4 5 6 7 8

)٢(طريقة اإلعالن عن ثابت :١,٣,١٨الربنامج

43

define# الكلمة باستعمالو يوجد نوع آخر من الثوابت، و هي .و ميكن استعمال نفس أنواع املتغريات على الثوابت

:و طريقة إستعماهلا موضحة كما يف الصورة التالية

طريقة اإلعالن عن ثابت: ١,٣,٣الشكل :حيث سيصبح املثال السابقة كما يلي

#include<stdio.h> #define num 5 main() { printf("%d\n", num); }

1 2 3 4 5 6 7 8

)٣( طريقة اإلعالن عن ثابت :١,٣,١٩الربنامج preprocessor و كما قلت سـابقا، أن . يف السطر السابع قيمته طباعة، مث ثالثيف السطر ال num مت اإلعالن عن الثابت

.ال تنتهي بفواصل منقوطة preprocessors و مجيع، preprocessors من الـ define# ، و هذا يعين أن# تبدأ بالرمز

: األخطاء احملتملة١,٣,٦ .ال ميكن وضع قيمة أكثر من قيمة املتغري القصوى .١ .block كلال ميكن اإلعالن عن املتغريات إال يف بداية .٢ مـن ختتلف أعداد عشوائية على الشاشة فستأيت ذلك املتغري قيمة أردت طبع و ،يف حالة مل يتم تعني قيمة ملتغري .٣

.جهاز آلخر . املتغري مسافة واحدة على األقلاسمجيب احلرص على أن بني نوع املتغري و .٤ . املتغري أو بعد اإلعالن عنهاسمبعد const ال ميكن كتابة الكلمة .٥ . متغري أو ثابتاسمال ميكن تغري .٦ .ال ميكن اإلعالن عن متغريين بنفس االسم .٧

44

: متارين١,٣,٧ . الرموز اخلاصة بطباعتهاباستخدام ،١٥ و ٣,١٤أكتب برنامج يقوم بطباعة العديدين .١ ؟ ٦٥٥٣٥قيمة أكثر من int ماذا حيدث إن أعطني ملتغري من نوع .٢ . أو ثوابتاستخدام متغريات، بدون ٦٥بدل الرقم A أكتب برنامج يقوم بطباعة احلرف .٣ .char باستخدام، ٦٥بدل الرقم A أكتب برنامج يقوم بطباعة احلرف .٤لث يكون الناتج احلاصل بـني ا، أما الث ٨٩ و الثاين ١٨أكتب برنامج به ثالثة متغريات، املتغري األول به القيمة .٥

. القسمة و الضرب، الطرح،املتغري األول و الثاين يف كل من اجلمع، األوىل ني األوىل و الثـاين نتيجة اجلمع بحيث الثالثة هي preprocessor #defineأكتب برنامج به ثالثة من .٦

.١٥ و الثاين ا القيمة ٥ا القيمة

45

التعليقات هي جمموعة من سالسل نصية نستعملها لتوضيح أوامر يف مصادر براجمنا، و ميكن أن حتتـوي تلـك

. رموز يقوم املترجم بتجاهلها، أو أحرف،النصوص على أرقام

: فائدة التعليقات١,٤,١ئدة التعليقات ميكنك أن تالحظها يف الكثري من األمثل املفتوحة املصدر املوجودة على اإلنترنت، مثال جتـد مثـال فا

.لربنامج ما كبري و غري واضح، و هنا يلجئ املربمج إىل استعمال التعليقات جلعلها أكثر وضوح

:أنواع التعليقات ١,٤,٢ :يوجد نوعني من التعليقات مها

:عليقات بالنصوص الطويلة الت١,٤,٢,١

هي حتديد بداية التعليق و اليت تبدأ استخدامهاالتعليقات بالنصوص الطويلة هي نصوص ا أكثر من سطر، و طريقة : مثاليف اية التعليق، */ و نضع /* بـ

/* My First Program: Hello, World! */ #include<stdio.h> /* Standart Input Output Header File*/ main() /*main function*/ {/*Start of main function*/ printf("Hello, World!");/*to print Hello, World!*/ }/*End of main function*/

1 2 3 4 5 6 7 8 9 10 11

التعليقات بالنصوص الطويلة:١,٤,١الربنامج :سطراألالتعليقات ب ١,٤,٢,٢

ـ هي جتاهل السطر التعليقات باألسطر هـذا مثـال القياسية، ++Cمتت إضافتها يف لغة ، // التعليقي حيث تبدأ ب :يوضح طريقة إستعماهلا

//My First Program: //Hello, World!

1 2 3

46

#include<stdio.h> //Standart Input Output Header File main() //main function {//Start of main function printf("Hello, World!");//to print Hello, World! }//End of main function

4 5 6 7 8 9

التعليقات السطرية: ١,٤,٢الربنامج .، و لكن الكثري من املترمجات تدعمهايف التعليقاتالقياسية C و هذه الطريقة ليست من طرق لغة

:كيف يستعمل املربجمون التعليقات ١,٤,٣

مل التعليقات يف تبني أو توضيح تعليمات يف الربامج، فمثال يستعمل مربجمون آخرون التعليقات لتبني اسـم ال تستع :، مثالامللف، كاتبه، شرح خمتصر مث تاريخ إنشاء امللف

/*****************************************************************************/ /*author : Khalil Ounis *//*Date : 2006/01/01 *//*Information : This is small program show */ /* how programmers use comments */ /* All rights reserved (c) 2006/2007 *//*****************************************************************************/ /*****************************************************************************/ /*Function : Principal function */ /*Input : None */ /*Output : None */ /*****************************************************************************/ main() { /*Empty project*/ }/*Main function end*/

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

كيفية استعمال التعليقات: ١,٤,٣الربنامج : األخطاء احملتملة١,٤,٤ة التعليق يعترب تعليق، و هذا ييف التعليقات بالنصوص الطويلة إن مل يتم حتديد اية التعليق فإن كل ما هو بعد بدا .١

:مثال توضيحي

/*comment #include<stdio.h> main() { printf("Hello, World!"); }

1 2 3 4 5 6 7

١اخلطأ : ١,٤,٤الربنامج

47

.هنا الربنامج كله عبارة عن تعليق، أي أن املشروع فارغ

: تعليق فمثالنضعه إىل ما االنتباهيف التعليقات السطرية جيب .٢

//#include<stdio.h> main() { printf("Hello, World!"); }

1 2 3 4 5 6

٢اخلطأ : ١,٤,٥الربنامج include# غري معرفة سابقا، و هذا اخلطأ سببه هو جعل الكلمة احملجوزة printfك املترجم على أن الدالة هنا سيخرب

.stdio.h عبارة عن تعليق، و هنا سيتم جتاهل ضم امللف الرأسي stdio.hاخلاصة بضم امللف الرأسي

: متارين١,٤,٥

. يف هذا الدرس ال توجد متارين

48

بواسطة الدالة لاإلدخا، اآلن سنعرف كيفية printf الدالة باستخدام اإلخراج الدروس السابقة مل ندرس إال يف

، فقـط األوىل scanf و printf ، التشابه كبري جدا بني الـداليتني scanfحاليا سنرى الدالة دوال خاصة باإلخراج، اإلدخال لوحة أداءهلقراءة أو استقبال املعلومات من scanfتستعمل الدالة .خاصة باإلخراج و الثانية خاصة باإلدخال

: برنامج يطلب من املستخدم إدخال قيمة مث نعطيه القيمة اليت قام بإدخاهلابكتابةاآلن سنقوم .keyboard املفاتيح

/*اإلدخال*/#include<stdio.h> main() { int usr_val; /* دمهنا سنضع القیمة اليت سیدخلها املستخ */ printf("Enter a value: ");/*هنا نطلب من املستخدم إدخال قیمة*/ scanf("%d", &usr_val); /* یقموم اجلهاز بإنتظار دخول قیمة من املستخدم*/ printf("Your value is: %d\n", usr_val);/* و هنا نطبع القیمة اليت أدخلت*/ }

1 2 3 4 5 6 7 8 9 10 11

إلدخال قيمة صحيحةscanfطريقة إستعمال الدالة : ١,٥,١الربنامج نقوم فيـه ، األول وسيطنيو داخلها ستجد scanf الدالة باستخدامالربنامج موضح بالتعليقات، يف السطر التاسع قمنا

حيـث printf سابقا يف الدالة ه درسن ذيو ال d% بتحديد نوع القيمة اليت سيدخلها املستخدم حيث هنا وضعنا الرمز يعين وضع القيمة الـيت أدخلـها &، و الرمز usr_val& الثاين يوجد وسيطو يف ال ، صحيحةقلنا أا خاص باألعداد ال

، إال هنـا تكـون قيمـة . يف الدروس القادمة &، و ستفهم السبب إضافة الرمز usr_valاملستخدم يف عنوان املتغري

usr_val وم بطباعتها على الشاشةقد أصبحت القيمة اليت أدخلها املستخدم مث نق.

املثال السابق خاص بإدخال األعداد الصحيحة، أما بالنسبة لباقي أنواع املتغريات فسنستعمل نفس الطريقة فقط نقـوم

، فمثال إذا أردنا من املستخدم أن يقوم بإدخال رمز بدل رقـم نـضع إستقبالهإىل نوع املتغري الذي نريد d% بتغري الرمز :، و هذا مثال يوضح ذلكscanf الةيف الد c% الرمز

#include<stdio.h> main() { char usr_char; printf("Enter a character: "); scanf("%c", &usr_char); printf("Your character is: %c\n", usr_char); }

1 2 3 4 5 6 7 8 9 10

49

حرف إلدخال scanf طريقة إستعمال الدالة :١,٥,٢الربنامج إدخال قيمة ثانية، و نعطيه النتـائج جبميـع ملستخدم إدخال قيمة، مث يطلب منه اآلن سنقوم بكتابة برنامج يطلب من ا

:املؤثرات األساسية

#include<stdio.h> main() { int val1, val2; printf("1)Enter a value: "); scanf("%d", &val1); printf("2)Enter a value: "); scanf("%d", &val2); printf("%d + %d = %d\n", val1, val2, val1+val2); printf("%d - %d = %d\n", val1, val2, val1-val2); printf("%d * %d = %d\n", val1, val2, val1*val2); printf("%d / %d = %d\n", val1, val2, val1/val2); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

)٢( إلدخال قيمة صحيحة scanfطريقة إستعمال الدالة : ١,٥,٣الربنامج املثال واضح، قمنا باإلعالن عن متغريين يف السطر اخلامس، مث طلبنا من املستخدم إدخال قيمة يف السطر السابع و قمنا

ذنا القيمة الثانية يف السطر احلادي و بعدها طلبنا من املستخدم إدخال القيمة الثانية مث أخ ،بأخذ القيمة يف السطر الثامن ، و scanf متعدد يف الدالـة إدخال استعمالو ميكن .١٦ و ١٥ ،١٤، ١٣، مث طبعنا النتائج يف كل من السطر رعش

: املتعدداإلدخال باستخدامثال السابقة املهذا

#include<stdio.h> main() { int val1, val2; printf("Enter two value: "); scanf("%d%d", &val1, &val2); printf("%d + %d = %d\n", val1, val2, val1+val2); printf("%d - %d = %d\n", val1, val2, val1-val2); printf("%d * %d = %d\n", val1, val2, val1*val2); printf("%d / %d = %d\n", val1, val2, val1/val2); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14

)٣( إلدخال قيمة صحيحة scanf طريقة إستعمال الدالة :١,٥,٤الربنامج

50

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

: األخطاء احملتملة١,٥,١ األول من هذه الدالة خاص بنوع وسيط، ال )اإلخراج( لطباعة scanf األول من الدالة وسيطلال ميكن استخدام ا .١

.الرموز اليت سيستقبلها الربنامج من املستخدم .النتائج غري صحيحةفستكون & عن الرمزاالستغناءيف حالة .٢ املـتغريات ه عدد سنفغريات إىل عدد املتغريات املراد فحصها، جيب أن يكون عدد رموز أنواع املت االنتباهجيب .٣

.املراد فحصها

: متارين١,٥,٢الربنامج بإخبار املستخدم أن قوم ي مث امسهأكتب برنامج يطلب من املستخدم إدخال احلرف األول و األخري من .١

".احلرف األخري الذي أدخله املستخدم"و ينتهي باحلرف " احلرف األول الذي أدخله املستخدم"إسم يبدأ بـ

51

:للمؤثرات أنواع أمههما ثالثة و هي

:)arthimetic operators( املؤثرات احلسابية١,٦,١

،و توجـد )*( و الضرب )/(، القسمة )-(، الطرح )+(هي املؤثرات احلسابية األساسية و اليت تتمثل يف كل من اجلمع .)%(القسمة و باقي )--(، النقصان)++(الزيادة: و هيCمؤثرات أخرى خاص بلغة

عن كل من مـؤثرات الزيـادة و ة سنأخذ أمثل . عنها سابقا ةا أمثل ن القسمة و الضرب فقد أخذ ، الطرح ،بالنسبة للجمع :النقصان و باقي القسمة

:)++( increment مؤثر الزيادة١,٦,١,١

صـة يف حلقـات تعترب مؤثرات الزيادة و النقصان من أهم املؤثرات، تـستعمل يف الكـثري مـن الـربامج و خا مؤثر الزيادة يعين زيادة رقم واحد إىل املتغري الذي نريد الزيادة إليه، و هذا مثال .)سندرسها يف الدروس القادمة (التكرار

:يوضح ذلك

#include<stdio.h> main() { int Inc; Inc = 0; printf("Inc = %d\n", Inc); Inc++; printf("Inc = %d\n", Inc); ++Inc; printf("Inc = %d\n", Inc); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

طريقة إستعمال مؤثر الزيادة: ١,٦,١الربنامج

و .٢ مث ١ مث ٠ مؤثر الزيادة يف كال من السطر العاشر و السطر الرابع عشر، و نتائج الربنامج تكـون باستعمالقمنا : طرق أخرى مثلاستعمالميكن

printf("Inc = %d\n", Inc);

1 2

52

Inc = Inc+1; printf("Inc = %d\n", Inc); Inc += 1; printf("Inc = %d\n", Inc);

3 4 5 6 7 8 9

)٢(طريقة إستعمال مؤثر الزيادة : ١,٦,٢الربنامج

و لكن يف الـسابقة ++Inc لـاو اليت موجود يف السطر الثالث، هي مطابقة متام Inc = Inc+1 الطريقة األوىل هيثالثة أرقـام، كـذلك Inc فسيتم اإلضافة إىل املتغري Inc = Inc+3 يعين إن كتبنا ١ ميكن أن نقوم بزيادة أكثر من

عند الزيادة بالواحد، و ++ استعمالو لكن يستحسن دائما .متام Inc = Inc+1 ، هي مثلInc += 1 الطريقة الثانيةيف بداية اسم ++ و الفرق بني أن يكون املؤثرين .ثر من واحد فسنستعمل الطرق األخرى يف حالة أن زيادة ستكون أك

:املتغري أو ايته هو موضح يف املثال التايل

#include<stdio.h> main() { int Inc; Inc = 0; printf("Inc = %d\n", Inc); printf("Inc = %d\n", Inc++); printf("Inc = %d\n", Inc); printf("Inc = %d\n", ++Inc); printf("Inc = %d\n", Inc); }

1 2 3 4 5 6 7 8 9 10 11 12 13

)٣(طريقة إستعمال مؤثر الزيادة : ١,٦,٣الربنامج

يعين طباعته ++، و يف السطر التاسع أيضا و معنا ذلك عند كتابة متغري قم املؤثر ٠ يف السطر الثامن سيتم طباعة العدد و يف السطر احلـادي .ألننا قمنا بالزيادة يف السطر التاسع ١ و يف السطر العاشر سيتم طبع العدد .نفيذ مؤثر التزايد مث ت

.٢، و كذلك يف السطر الثاين عشر سيتم طباعة العدد ٢ عشر سيتم تنفذ مؤثر التزايد أوال مي طباعة النتيجة اليت هي

:)--( decrement مؤثر النقصان١,٦,١,٢

باستخدام مؤثر و هذا املثال السابق --نضع ++ نتعامل مع املؤثر النقصان مثلما تعاملنا مع مؤثر الزيادة فقط بدل س :النقصان

#include<stdio.h> main()

1 2 3

53

{ int Dec; Dec = 2; printf("Dec = %d\n", Dec); Dec--; printf("Dec = %d\n", Dec); --Dec; printf("Dec = %d\n", Dec); }

4 5 6 7 8 9 10 11 12 13 14 15 16 17

طريقة إستعمال مؤثر النقصان: ١,٦,٤الربنامج

: نفس الطرق السابقة يف النقصاناستعمالو ميكن أيضا

printf("Dec = %d\n", Dec); Dec = Dec-1; printf("Dec = %d\n", Dec); Dec -= 1; printf("Dec = %d\n", Dec);

1 2 3 4 5 6 7 8 9

)٢(طريقة إستعمال مؤثر النقصان : ١,٦,٥الربنامج

:)%( مؤثر باقي القسمة١,٦,١,٣

و ٥ سهل فمثال لو أردنا أن جند باقي القسمة بني العـدد استعماله من املؤثرات املهمة، و طريقة اعتبارهأيضا ميكن :، و هذا مثال توضيحي3%5 نكتب ٣ العدد

#include<stdio.h> main() { printf("%d\n", 5%3); }

1 2 3 4 5 6

طريقة إستعمال مؤثر باقي القسمة:١,٦,٦الربنامج :)relational operators(ة املؤثرات العالقي١,٦,٢

، )false( أو خاطئة )true( ، حيث تكون النتيجة إما صحيحة قيمة أخرى و قيمةهي مؤثرات تعتمد على املقارنة بني :ذا مثال يوضح ذلكو ه

#include<stdio.h> 1

54

main() { printf("%d\n", 5<3); printf("%d\n", 5==3); printf("%d\n", 5>3); }

2 3 4 5 6 7 8

طريقة إستعمال املؤثرات العالقية: ١,٦,٧الربنامج

:هنا ستجد نتائج الربنامج .٣ ليس أقل من ٥ألن العدد : ٠ .٣وي العدد ال يسا٥ألن العدد : ٠ .٣من أكبري ٥ألن العدد : ١

و لـيس ٣==٥ كتبنا يف السطر الـسادس ، و أيضا ستالحظ أنه )false( تعين صحيح ١و )true( تعين خطأ ٠حيث

و .فسيخربك املترجم عن وجود خطـأ == مكان = ، و إذا وضعت == و ذلك ألننا نقارن و عند املقارنة نكتب ٣=٥ـ =< بـ C من أو يساوي و ميثل يف لغة يوجد كذلك املؤثر أكرب ، و املـؤثر ال => ، و مؤثر أصغر من أو يساوي بـ

.=! يساوي بـ

:)logical operators(ة املؤثرات املنطقي١,٦,٣

: و لكن هلا رموزها اخلاصة و هي يف نتيجتهاو هي مؤثرات تعتمد على املؤثرات العالقية "و"و اليت تعين &&

"أو"و اليت تعين ||

"ال" يعين يتو ال !

:و هذا مثال يوضح ذلك

#include<stdio.h> main() { printf("%d\n", 5<3 && 5>3); printf("%d\n", 5==3 && 3==5); printf("%d\n", 5>3 && 5<3); printf("%d\n", 5<3 || 5>3); printf("%d\n", 5==3 || 3==5); printf("%d\n", 5>3 || 5<3);

1 2 3 4 5 6 7 8 9 10 11 12

55

printf("%d\n", !(5<3)); printf("%d\n", !(5==3)); printf("%d\n", !(5>3)); }

13 14 15 16

طريقة إستعمال املؤثرات املنطقية: ١,٦,٨الربنامج

:نتائج الربنامج هي .3>5 خاطئة و هي عالقةألنه توجد : ٠ . كال العالقتني خطاءتنيألن: ٠ .3>5د عالقة خاطئة و هي ألنه توج: ٠ .3<5ألنه توجد عالقة صحيحة و هي : ١ .ألن كال العالقتني خطاءتني: ٠ .3<5ألنه توجد العالقة صحيحة و هي : ١ .٣ ليست أصغري من ٥ألن : ١ .٣ ال تساوي ٥ألن : ١ .٣ أكرب من ٥ألن : ٠

: مؤثرات أخرى١,٦,٤ بت، و هي تقوم بإزاحة Left Shift يسمى مبؤثر اإلزاحة اليسارو >> املؤثر: منها C توجد مؤثرات أخرى خاص بلغة

:مثال توضيحي لطريقة استعماله، إىل اليسار)أو بيتات( من بيات واحدة

#include<stdio.h> main() { printf("%d\n", 1<<7); }

1 2 3 4 5 6

مؤثر اإلزاحة إىل اليسار: ١,٦,٩الربنامج

: و الصورة التالية توضح ذلك، ١٢٨هنا الناتج سيكون

56

اإلزاحة إىل اليسار: ١,٦,١الشكل

:و هذا مثال توضيحي لطريقة استعماله، Right Shift إىل اليمني ةاإلزاحو يسمى مبؤثر ،<< هواملؤثر املعاكس لسابق

#include<stdio.h> main() { printf("%d\n", 128>>7); }

1 2 3 4 5 6

مؤثر اإلزاحة إىل اليمني: ١,٦,١٠ الربنامج

:صورة توضيحية

اإلزاحة إىل ميني: ١,٦,٢الشكل

:، مثالdefine# ، و هو يستعمل مع التوجيه# رثاملؤ

#include<stdio.h> #define printer(str) printf(#str "\n") main() { printer(Hello); }

1 2 3 4 5 6 7 8 9

# طريقة إستعمال املؤثر :١,٦,١١الربنامج

57

:مثالأي الدمج، Merge و ميكن تسميتهما بالـ، define# التوجيهمعتم التعامل معهما ، أيضا يمعا ## ينرثاملؤ

#include<stdio.h> #define MergingName(str, strplus) str##strplus main() { char MergingName(ch, 1) = 'H'; char MergingName(ch, 2) = 'e'; char MergingName(ch, 3) = 'l'; char MergingName(ch, 4) = 'l'; char MergingName(ch, 5) = 'o'; printf("%c%c%c%c%c\n", ch1, ch2, ch3, ch4, ch5); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

##طريقة إستعمال املؤثرين : ١,٦,١٢الربنامج

:)bitwize( اصة بالبتاتخ مؤثرات ١,٦,٥. ، تقوم باملقارنة بني بتات بدل البيتات، و هي مشابه للمؤثرات السابقة bitsهي جمموعة من املؤثرات خاصة بالبتات

حيتاج إىل شرط واحد صـحيح، صـورة " أو" وحده، و قلنا سابقا أن املؤثر |و الذي هو الرمز OR" أو"نبدأ باملؤثر :توضيحية

| ORإستعمال املؤثر أو : ١,٦,٣الشكل

فسيكون الناتج صفر ألن كال البتات حيتوي على القيمـة ٠ يقارن مع بت به قيمة ٠العملية هي إذا كان بت به القيمة أي ١ فسيكون الناتج واحد ألنه توجـد القيمـة ١ يقارن مع بت به القيمة ٠ أي خطأ، و إذا كان بت به القيمة ٠

: مثال.حيتاج إىل قيمة صحيحة واحدة حىت يكون الناتج صحيح" أو"ر صحيح حيث قلنا أن املؤث

#include<stdio.h> main() { int x = 1; /* 1 decimal = 00000001 Binary*/ x = x|4; /* 4 decimal = 00000100 Binary*/ /* = 00000101 Binary, x = 5 decimal*/ printf("x = %d\n", x); }

1 2 3 4 5 6 7 8 9

58

| ORطريقة إستعمال املؤثر أو : ١,٦,١٣الربنامج

:، صورة توضيحية& و يكون بإستخدام الرمز AND "و"بعد هذا املؤثر يأيت املؤثر

& ANDإستعمال املؤثر و : ١,٦,٤الشكل

فـسيكون ٠ قيمة البت الثـاين و٠، حيث إذا كانت قيمة بت إىل أن تكون كال القيمتني صحيحتني " و"حيتاج املؤثر أي خاطئة ألن املـؤثر ٠ فأيضا ستكون النتيجة ٠ و اآلخر ١ ألن كال بتات خاطئني، و إذا كانت قيمة بت ٠الناتج

: مثال. أي صحيح١ فستكون النتيجة هنا ١ و اآلخر ١حيتاج إىل قيمتني صحيحتني، أما إذا كان بت " و"

#include<stdio.h> main() { int x = 1; /* 1 decimal = 00000001 Binary*/ x = x&4; /* 4 decimal = 00000100 Binary*/ /* = 00000000 Binary, x = 0*/ printf("x = %d\n", x); }

1 2 3 4 5 6 7 8 9

& ANDطريقة إستعمال املؤثر و : ١,٦,١٤الربنامج

إذا كـان ٠ إال أنه سيكون الناتج ORو ليس كسابقه، و لكنه مشابه للمؤثر ، و ه XOR و بعد هذا املؤثر سنرى املؤثر :، صورة توضيحية^، و ذلك عرب الرمز ١كال البتات به القيمة

^ XORإستعمال املؤثر : ١,٦,٥الشكل

59

٠آلخر بـه القيمـة و ا ١، و إذا كان بت به قيمة ٠ فسيكون الناتج ٠ و الثاين به القيمة ٠هنا إذا كان بت به القيمة ثر و ؤ أي خاطئ و هذا هو الفرق بني هذا امل ٠ فسيكون الناتج ١، أما إذا كان كال البتات به القيمة ١فسيكون الناتج

: مثال.ORمؤثر

#include<stdio.h> main() { int x = 4; /* 4 decimal = 00000100 Binary*/ x = x^4; /* 4 decimal = 00000100 Binary*/ /* = 00000000 Binary, x = 0*/ printf("x = %d\n", x); }

1 2 3 4 5 6 7 8 9

^ XORطريقة إستعمال املؤثر : ١,٦,١٥الربنامج

لتثبيت بت AND "و"، و ال يستعمل هذا املؤثر لوحده، و يستعمل بكثر مع املؤثر ~ عرب الرمز NOT" ال" و أخريا املؤثر يف بت ثالث نريد تصفريه فسيكون ١ و مثاال على ذلك إذا كان لدين القيمة . التأثري على باقي البتات بدون ٠ما على

:ذلك كتايل

#include<stdio.h> main() { int x = 5; /* 5 decimal = 101 Binary*/ x = x& ~4; /* 4 decimal = 100 Binary*/ /* = 001 Binary, x = 1*/ printf("x = %d\n", x); }

1 2 3 4 5 6 7 8 9

~ NOTطريقة إستعمال املؤثر ال : ١,٦,١٦الربنامج

: األخطاء احملتملة١,٦,٦ .توجد أخطاء حمتملة يف هذا الدرسال

: متارين١,٦,٧ ؟ printf داخل الدالةكن أن نقوم بالتزايد و التناقصهل مي .١ املؤثرات العالقية ؟ يف١ و القيمة ٠ماذا تعين القيمة .٢ ؟ ! و || و && ماذا تعين كل من .٣

60

للمقارنة بني عالقة حيث تكون إما صحيحة أو خاطئة، يف )و ميكن تسميتها باجلمل الشرطية ( تتستعمل القرارا

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

:if استعمال ١,٧,١

:ألقي نظرة على الصورة التالية if استعماللكي تفهم طريقة

طريقة إعالن شرط ذات أمر واحد: ١,٧,١الشكل ألنه ال يوجد سوى أمر واحد لتنفيذه، و هذه صورة يف حالة وجـود { و } بدون الرمز مثال ا يوجدالصورة السابقة

:أكثر من أمر

طريقة إعالن شرط ذات عدة أوامر: ١,٧,٢الشكل :مثال

#include<stdio.h> main() { int usr_val; printf("Enter a value: "); scanf("%d", &usr_val);

1 2 3 4 5 6 7 8

61

if(usr_val <100) { printf("%d are less than 100\n", usr_val); } if(usr_val >100) { printf("%d are great than 100\n", usr_val); } }

9 10 11 12 13 14 15 16 17 18 19

ifطريقة إستعمال : ١,٧,١الربنامج

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

ـ block الـ ـ if اخلاص ب و ميكـن .if الذي يلي block ، و يف حالة أن املقارنة خاطئة فسيتم جتاهل ما هو داخل ال :كتابة الربنامج ذه الطريقة

#include<stdio.h> main() { int usr_val; printf("Enter a value: "); scanf("%d", &usr_val); if(usr_val <100) printf("%d are less than 100\n", usr_val); if(usr_val >100) printf("%d are great than 100\n", usr_val); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

)٢( ifطريقة إستعمال : ١,٧,٢الربنامج . أمر واحد إالما ألنه يف كال الشرطني ال يوجد

:else استعمال ١,٧,٢

، سـنكتب اآلن الربنـامج الـسابق اوحدهل استعماهلادائما حيث ال ميكن if مع الكلمة else تستعمل الكلمة :else باستخدام

#include<stdio.h> main() {

1 2 3 4

62

int usr_val; printf("Enter a value: "); scanf("%d", &usr_val); if(usr_val<100) printf("%d are less than 100\n", usr_val); else printf("%d are great than 100\n", usr_val); }

5 6 7 8 9 10 11 12 13 14

elseطريقة إستعمال : ١,٧,٣مج الربنا

إن مل تكـن .else يف السطر الثاين عشر و سترى أن املثال سيعمل مثل املثال السابق و هنا جتد فائدة else استعملنا :و هذه صورة توضح لطريقة عملهما .else فسيتم تنفيذ if املقارنة صحيح يف

else و ifطريقة عمل : ١,٧,٣الشكل :else…if استعمال ١,٧,٣

فسيقول لك أن النتيجة الـيت ١٠٠ إذا قمت بتنفيذ الربنامج و أعطيته القيمة else استعماليف املثال السابق لطريقة :معا، و هذا مثال يوضح ذلك else…if نستعمل الكلمتنيشكلة، و لتفادي هذا امل١٠٠ أدخلتها أكرب من

#include<stdio.h>

1 2

63

main() { int usr_val; printf("Enter a value: "); scanf("%d", &usr_val); if(usr_val<100) printf("%d are less than 100\n", usr_val); else if(usr_val==100) printf("%d are equal 100\n", usr_val); else printf("%d are great than 100\n", usr_val); }

3 4 5 6 7 8 9 10 11 12 13 14 15 16

else…ifطريقة إستعمال : ١,٧,٤الربنامج

فسنطبع ما هـو ١٠٠ فإذا كانت أقل من ١٠٠ ثال هو املقارنة بني القيمة اليت أدخلها املستخدم واملو طريقة عمل هذا ن املقارنة الثانية و هي إذا كـا االنتقال إىلفسيتم ١٠٠ و يف حالة أن القيمة أكرب من اخلاص باملقارنة، block موجود يف

اخلـاص block يف حالة أا صحيح يقوم الربنامج بطباعة ما هو موجود يف ،١٠٠ العدد الذي أدخله املستخدم يساوي .else اخلاص بـ block الـباملقارنة الثانية، يف حالة أن كال املقارنتني خاطئة فسيتم تنفيذ ما هو موجود يف

: األخطاء احملتملة١,٧,٤ .تني ملقارنة واحدةمر else استعمالال ميكن .١

.if بدون else استخدامال ميكن .٢

: متارين١,٧,٥خيربه الربنامج ٤٠ ، إذا كان عمر املستخدم أقل من ٤٠ أكتب برنامج يقوم باملقارنة بني عمر املستخدم و العدد .١

ره أربعني ، و إذا كان عم ٤٠ بأن عمره أقل من األربعني، و يف حالة العكس خيربه الربنامج بأن عمره أكرب من .سنة ٤٠ خيربه الربنامج بأن عمره

.else استعمالأكتب نفس الربنامج السابقة و لكن بدون .٢

الربنامج أنه قد هي عدد خيرب أ، و عند إدخال ٩ أكتب برنامج يطلب من املستخدم إدخال قيمة ال تتعدى العدد .٣ .)else…if لباستعما( أدخل ذلك العدد

64

:و اليت هي C عناصر لغةيف هذا الدرس سنتعرف على

:Comments التعليقات ١,٨,١

و تنتهي * و النجمة / slash تبدأ بالرمز التعليقات هي سلسلة من الرموز .و قد درسنها سابقا C هي من عناصر لغة ، و لكـن C الطريقة السابقة هي الطريقة الوحيدة يف لغة .، و ميكن أن حيمل التعليق أي رموز أو أرقام */slash بنجمة و

.// الكثري من املترمجات تدعم طريقة أخرى من التعليق و هي التعليق السطري حيث يبدأ بالرمزين

:Keywords الكلمات احملجوزة ١,٨,٢

و مسيت بالكلمـات أساسية يف اللغة و اليت يكون لوا يف أغلب املترمجات أزرق، هي كلمات الكلمات احملجوزة تعترب كلمات حمجوزة و الكثري منها، و هذا elseو int، char، double، if كل من ابقا،احملجوزة ألا حمجوزة س

:C يف لغة األساسيةجدول جلميع الكلمات احملجوزة

float struct void return volatile else char int static case typedef continue for register signed short default switch union break while auto unsigned long goto extern enum sizeof do const if double

Cالكلمات احملجوزة للغة : ١,٨,١اجلدول

.، و سندرس مجيع الكلمات احملجوزة يف الدروس القادمة٣٣عددها ، asm و الكلمة احملجوزة

:Identifiers املعرفات ١,٨,٣حرفا، و ال ميكن أن يبدأ اسم املعرف برقم، الرمز بدايتها جيب أن تكون ام، املعرفات هي سلسلة من حروف أو أرق

، كل مـن األحـرف حرفا ٣١ يعترب حرفا، و ال ميكن أن يتعدى اسم املعرف أكثر من underscore و الذي يدعى _تعمل يف أمسـاء جدول لألحرف اليت ميكن أن تـس .خمتلفة، و ال ميكن استعمال معرف مرتني الصغري و األخر الكبرية

:املعرفات

األرقام األحرف _a b c d e f g h i j k l m n o p q r s t u v w x y z

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

٩ ٨ ٧ ٦ ٥ ٤ ٣ ٢ ١ ٠

65

حدود أمساء املعرفات: ١,٨,٢اجلدول

:Trigraphs سالسل١,٨,٣,١ : ، و هذا جدول توضيحي هلذه الرموزبديليهيقوم املترجم باستبداهلا إىل رموز هي سالسل مكونة من ثالثة رموز

Trigraphs الرمز الذي يقابله

??= # ??< { ??> } ??( [ ??) ] ??/ \ ??’ ^ ??! | ??- ~

Trigraphs: ١,٨,٣اجلدول

: تلك الرموزاستعمالو هذا مثال يوضح طريقة

??=include<stdio.h> main() ??< printf("Hello, World!\n"); ??>

1 2 3 4 5 6

Trigraphsإستعمال رموز : ١,٨,١الربنامج :ميكن أيضا استعمال تلك الرموز داخل النصوص مثلنامج يعمل بدون أخطاء، و و الرب

#include<stdio.h> main() { printf("??=\n"); printf("??<\n"); printf("??>\n"); printf("??(\n"); printf("??)\n"); printf("??//\n"); printf("??'\n"); printf("??!\n"); printf("??-\n"); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14

)٢( Trigraphsإستعمال رموز : ١,٨,٢الربنامج :Constants الثوابت١,٨,٤

66

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

: الثوابت النصية١,٨,٤,١ define# بالنسبة للموجه ، const أو الكلمة احملجوزة define# الثوابت النصية هي تكون إما باالستعمال املوجه

:فهذا مثال له

#include<stdio.h> #define Const_Str "Hello, World!\n" main() { printf(Const_Str); /*can't write Const_Str = "Hello, World2!\n"*/ }

1 2 3 4 5 6 7 8 9 10

الثوابت النصية: ١,٨,٣الربنامج أما الثوابـت باسـتخدام .فهي ثابتة و ال ميكن التغري فيها define# و أي نصوص أو أحرف معرفة باستخدام املوجه

:فسأعطي مثال حلرف ثابت، املثال const الكلمة احملجوزة

#include<stdio.h> main() { const char ch = 'a'; printf("%c\n", ch); /*you can't use this: ch = 'b'; printf("%c\n", ch); because it's a constant*/ }

1 2 3 4 5 6 7 8 9 10 11 12 13

ثابت حريف: ١,٨,٤الربنامج و C و توجد رموز ثابتة أخرى خاصة بلغة .فسندرسها فيما بعد const باستخدام الكلمة احملجوزة ثوابت النصية أما ال

:هي موضحة على اجلدول التايل

الرمز التأثري الرمز التأثري

a\، تقوم بإصدار صوت من اإلنذار ’\ ' طباعة الرمز

67

Alert اللوحة األم،

Backspace \b ،الفضاء اخللفي \" " طباعة الرمز

Form feed \f صفحة جديدة، ?\ ? طباعة الرمز

New line \n سطر جديد، \\ \ طباعة الرمز

،مبؤشر الكتابة إىل بداية السطرالعودة 0oo\ الثماينألعداد نظام Carriage return

\r

t\ فراغات يف االجتاه األفقي ٨ xhh\ ألعداد نظام السداسي عشر

v\ االجتاه العموديفراغات يف ٨

Cثوابت خاصة بلغة : ١,٨,٤اجلدول

: الثوابت الرقمية١,٨,٤,٢ هي اإلعالن عن ثوابت ا قيم ثابتة ال ميكن التحديث فيها أثناء الربنامج، و ميكن أن تكون أي نوع مـن األعـداد

short, long, int, unsigned, signed, float, double ،ا يف كـل مـن املوجـه و ميكن أيضا اإلعالن عنه

#define و الكلمة احملجوزة constمثال حول املوجه ، #define:

#include<stdio.h> #define Const_Num 5 main() { printf("%d\n", Const_Num); /*can't write Const_Num = 6;*/ }

1 2 3 4 5 6 7 8 9 10

الثوابت الرقمية: ١,٨,٥الربنامج فإننا ال نقوم بتحديد نوعه، املوجه نفسه يقوم بتحديد نوع القيمة define# ن ثوابت باستخدام املوجه عند اإلعالن ع

:const و هذا مثال باستخدام الكلمة احملجوزة .املدخلة

#include<stdio.h> main() { int Const_Num = 5; printf("%d\n", Const_Num); /*can't write Const_Num = 6;*/ }

1 2 3 4 5 6 7 8 9

68

)٢( الرقميةالثوابت : ١,٨,٦الربنامج :Tokens الرموز١,٨,٥

.املعرفات، الكلمات احملجوزة، الثوابت، السالسل النصية، املؤثرات و الفواصل: هي ستة فئات و هي

:String literals السالسل النصية١,٨,٦فهم هذا اجلزء من الدروس ت، س "..." باقتباسينيروف حماطة السالسل النصية أي الثوابت النصية، هي سالسل من ح

.القادمة

: األخطاء احملتملة١,٨,٧ . ال توجد أخطاء حمتملة يف هذا الدرس

: متارين١,٨,٨ .ال توجد متارين يف هذا الدرس

69

.خص سنحاول تغطية و فهم أكثر ملا درسناه، و يف هذا امللCما درسناه حىت اآلن هو جزء شبه كبري من لغة

حية لطريقة تعامل هذه الدالة مـع ، و هنا توجد صورة توضي ، و قلنا أا خاصة باإلخراج printfدرسنا من قبل الدالة :، الصورةd% رموز مثل

printfطريقة عمل الدالة : ١,٩,١الشكل ، و أيضا نفـس d% دال القيم املدخل أو القيم املعطاة يف مكان الرمز من الصورة نفهم أنه عند تشغيل الربنامج يتم استب

:، صورة توضيحيةscanf الفكرة مع الدالة

scanfطريقة عمل الدالة : ١,٩,٢الشكل : برامج تدريبية١,٩,١

:ل برنامج، مع شرح سريع لكCيف هذا اجلزء من الدرس سنرى بعض الربامج اليت يستعملها كثريا املبتدأين يف لغة

: الربنامج األول، عمر املستخدم١,٩,١,١ :يقوم هذا الربنامج بإعطاء املستخدم عمره، وذلك عرب إدخال العام احلايل و العام الذي ولد به املستخدم، املثال

#include<stdio.h> main() { int num1, num2; printf("the year currently: "); scanf("%d", &num1);

1 2 3 4 5 6 7 8

70

printf("the year of your born: "); scanf("%d", &num2); printf("You have %d years!\n", num1-num2); }

9 10 11 12 13 14

عمر املستخدم: ١,٩,١الربنامج الية، و يف السطر الثامن اإلعالن عن متغري يف السطر اخلامس، و يف السطر السابع طلبنا من املستخدم إدخال السنة احل مت

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

.احلالية على سنة املستخدم

:الربنامج الثاين، آلة حاسبة بسيطة ١,٩,١,٢لب من املستخدم اختيار إشارة للعمليـة يطهذا الربنامج عبارة عن آلة حاسبة بسيطة ذات حدود ال ميكن جتاوزها،

:اليت سيقوم ا، مث إدخال قيمتني اللذان سيجري عليهما العملية، املثال

#include<stdio.h> main() { int num1, num2; char Char; printf("1:(+)\n2:(-)\n3:(/)\n4:(*)\nEnter a choice: "); scanf("%c", &Char); printf("Enter the first number: "); scanf ("%d", &num1); printf("Enter the second number: "); scanf("%d", &num2); if(Char == '+' || Char == '1') printf("%d + %d = %d\n", num1, num2, num1+num2); else if(Char == '-' || Char == '2') printf("%d - %d = %d\n", num1, num2, num1-num2); else if(Char == '/' || Char == '3') printf("%d / %d = %d\n", num1, num2, num1/num2); else if(Char == '*' || Char == '4') printf("%d * %d = %d\n", num1, num2, num1*num2); else printf("Error in choice!\nExiting...\n"); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

71

آلة حاسبة بسيطة: ١,٩,٢الربنامج غريين من نوع أعداد صحيحة، و يف السطر السادس قمنا باإلعالن عـن مـتغري يف السطر اخلامس قمنا باإلعالن عن مت

يف السطر الثامن طلبنا من املستخدم بإختيار اإلشارة .حريف و الذي سيكون اإلشارة اليت سنقوم باستعماهلا يف العمليات مـن الـسطر .اسع على شكل رمز أو املؤثر الذي يريد استعماله، و أخذنا املؤشر الذي إختاره املستخدم يف السطر الت

يف السطر السابع عشر قمنا باستعمال .احلادي عشر إىل السطر اخلامس عشر، قمنا بأخذ األعداد اليت أدخلها املستخدم ـ ١أو الرقم + يساوي املؤثر Char شرط و هو إذا كان الرمز الذي أدخله املستخدم يف املتغري شرط، يف حالـة أن ال

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

: القيمة املطلقةاستخراج الربنامج الثالث، ١,٩,١,٣

:استخراج قيمة مطلقة لعدد يقوم بإدخاله املستخدم، املثالهذا الربنامج يقوم ب

#include<stdio.h> main() { int num, x; printf("Enter a number: "); scanf ("%d", &num); if(num<0) x = -num; else x = num; printf("|%d|=%d\n", num, x); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

استخراج القيمة املطلقة: ١,٩,٣الربنامج يف السطر اخلامس قمنا باإلعالن عن متغريين، األول للعدد الذي سيقوم بإدخاله املستخدم، و املتغري الثاين هـو الـذي

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

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

.السطر اخلامس عشر قمنا بطباعة النتائج

72

: الربنامج الرابع، أخذ العدد الكبري١,٩,١,٤ :يقوم هذا الربنامج بأخذ العدد األكرب بني عددين يقوم بإدخاهلما املستخدم، املثال

#include<stdio.h> main() { int num1, num2, max; printf("Enter a number: "); scanf("%d", &num1); printf("Enter another number: "); scanf("%d", &num2); if(num1>num2) max = num1; else max = num2; printf("max = %d\n", max); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

أخذ العدد الكبري: ١,٩,٤نامج الربيف السطر اخلامس قمنا باإلعالن عن ثالثة متغريات، األول و الثاين ألعداد اليت سيقوم بإدخاهلا املـستخدم، و املـتغري

من السطر السابع إىل السطر احلادي عـشر، طلبنـا مـن .الثالث لعدد األكرب بني العددين الذي أدخلهما املستخدم يف السطر الثالث عشر قمنا باستعمال شرط و هو إذا كان العدد األول الذي أدخله املستخدم .دديناملستخدم إدخال ع

ألا األكرب، و يف حالة أن الشرط خاطئ فهذا يعـين أن num1 يساوي قيمة املتغري max أكرب من العدد الثاين فإن املتغري و .ألنه األكـرب num2 هي قيمة املتغري maxكون قيمة املتغري العدد الثاين الذي أدخله املستخدم أكرب من األول و هنا ست

.أخريا السطر الثامن عشر و هو يقوم بطباعة النتائج

:getchar و putchar الدالتني١,٩,٢ و هي خمتصرة من getchar و الدالة put character و هي خمتصرة من putchar اآلن سنرى دالتني جديدتني و مها

get character ،الدالتني من دوال امللف الرأسي stdio.h. الدالة putchar تستعمل إلخراج األحرف، مثال لو أردنـا :سنكتب ! Hello, World أن نكتب اجلملة

#include<stdio.h> main() { putchar('H');

1 2 3 4 5

73

putchar('e'); putchar('l'); putchar('l'); putchar('o'); putchar(','); putchar(' '); putchar('w'); putchar('o'); putchar('r'); putchar('l'); putchar('d'); putchar('\n'); }

6 7 8 9 10 11 12 13 14 15 16 17 18

putcharطريقة إستعمال الدالة : ١,٩,٥الربنامج فهي تأخذ من getchar أما الدالة .printf استعمال لطباعة النصوص، و يف هذه احلالة ستفضل استعماهلاو ال ميكن

:املستخدم حرف و تضعه يف متغري، و هذا مثال

#include<stdio.h> main() { char ch; putchar(':'); ch = getchar(); putchar(ch); }

1 2 3 4 5 6 7 8 9 10 11 12

getcharطريقة إستعمال الدالة : ١,٩,٦الربنامج ، و هنا الطريقـة صـحيحة ألن الدالـة وسائطال حتتوي على getchar ألن الدالة ()ch = getchar و هنا كتبناgetcharتقوم بإرجاع قيمة و هي احلرف الذي أدخله املستخدم .

:gets و puts الدالتني١,٩,٣

الدالة .get string ةو الثاني put string ، و األوىل خمتصرة منstdio.h لفاملأيضا من دوال gets و puts الدالتني

puts مشابه لدالة printf و هي تستعمل لطباعة النصوص، و ختتلف عن الدالة االختالفاتمع بضع ،printf يف:

.تضع كل نص يف سطر puts ، ألن الدالةn\ ميكنك جتاهل وضع رمز السطر اجلديد -١

.d% ي أا ال تتعامل مع رموز مثل، أال ميكنها التعامل مع متغريات من نوع أرقام أو أحرف puts الدالة -٢

74

:puts و هذا مثال عن الدالة

#include<stdio.h> main() { puts("Hello, World!"); puts("Goodbay, World!"); }

1 2 3 4 5 6 7

putsطريقة إستعمال الدالة : ١,٩,٧الربنامج ل معها باألرقام و األحرف، سنتطرق إليها يف الدروس تقوم بإدخال نصوص، و ال ميكن التعام فهي gets أما عن الدالة

.بعدالقادمة، ألننا مل نتعامل مع النصوص

:wscanf و wprintf الدالتني١,٩,٤

، wide scan format و wide printf format و لكنها عريضة و هي خمتصرة من scanf و printf مها نفس الدالتني

:استعماهلماهذا مثال يوضح طريقة

#include<stdio.h> main() { int num, x; wprintf(L"Enter a number: "); wscanf(L"%d", &num); if(num<0) x = -num; else x = num; wprintf(L"|%d|=%d\n", num, x); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

wscanfو الدالة wprintطريقة إستعمال الدالة : ١,٩,٨الربنامج .long يعين L و احلرف

:getche و الدالة getch و putch الدالتني١,٩,٥

جتد الـدالتني يف امللـف الرأسـي linux ، يف أنظمة C مها من الدوال القياسية يف لغة getche و putcheالدالتني

stdio.h أما يف أنظمة ،Windows فستجدها يف امللف الرأسي conio.h )نخمتصر م Console Input Output( ، أمـا

75

و ،Windows و لكنها متوفر يف مجيع املترمجات تقريبا علـى أنظمـة C ليس من الدوال القياسية للغة فهي getch الدالة .تستعمل بكثرة

، و stdio.h فيمكنك اإلعتماد على امللف الرأسي ANSI C هي النسخة القياسية C إذا كانت النسخة اليت لديك من لغة لـدالةمتشاا getch ، و الدالة putchar هي نفس الدالة putch الدالة .getch النسخة القياسية ال توجد الدالة يف

getchar مع بعض االختالفات:

.فال تسمح لك بذلك getch تسمح لك برؤية ما قمت بإدخاله، أما getchar الدالة -١

أخذ احلرف األول من احلروف املدخلـة، أمـا حيث سيتم getchar ميكن إدخال أكثر من حرف يف الدالة -٢

getch فال تستطيع إدخال أكثر من حرف.

:getch و putch مثال حول

#include<stdio.h> #include<conio.h> /* Just in Windows and DOS OS compilers */ main() { char ch; ch = getch(); putch(c); putch('\n'); }

1 2 3 4 5 6 7 8 9 10 11

putch و الدالة getchطريقة إستعمال الدالة : ١,٩,٩الربنامج يف السطر الثامن حيـث سـتالحظ أن getch يف السطر الثاين، مث استعملنا الدالة conio.h قمنا بضم امللف الرأسي

فهو يعترب n\ عاشر، و بالنسبة لرمز، مث استعملنا الدالة يف كال السطرين التاسع و ال getchar طريقة استعماهلا مثل الدالة مستعملة بكثرة و خاصة يف اية الربنامج و ذلـك ألـا getch و يف الكثري من الربامج ستجد أن الدالة .رمز واحد

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

#include<stdio.h> #include<conio.h> /* Just in Windows and DOS OS compilers */ main() { char ch; ch = getch(); putch(ch); putch('\n');

1 2 3 4 5 6 7 8 9 10

76

printf("Press any key to exit\n"); getch(); /*pause */ }

11 12 13 14

)٢( putch و الدالة getchطريقة إستعمال الدالة : ١,٩,١٠الربنامج أمـا . لن خيرج الربنامج مباشرة، سينتظر أن يقوم املستخدم بالضغط على أي زر كي يقوم الربنامج باخلروج حيث هنا

:فقط عند استعماهلا تظهر للمستخدم الرمز الذي قام بإدخاله، مثال getch فهي نفسها getche الدالة

#include<stdio.h> #include<conio.h> /* Just in Windows and DOS OS compilers */ main() { char c; c = getche(); putch('\n'); putch(c); putch('\n'); }

1 2 3 4 5 6 7 8 9 10 11 12

getcheطريقة إستعمال الدالة : ١,٩,١١الربنامج :wchar_t الكلمة احملجوزة١,٩,٦

wide-character خمتصرة من wchar_t لكلمة، حيث اchar طريقة استعماهلا مثل طريقة استعمال الكلمة احملجوزة

type استعماهلابايت، مثال لطريقة ٢ و حجمها:

#include<stdio.h> main() { wchar_t wch = 'a'; printf("%c\n", wch); }

1 2 3 4 5 6 7 8

wchar_t الكلمة احملجوزةطريقة إستعمال : ١,٩,١٢الربنامج :wmain و main الدالة الرئيسية١,٩,٧

wmainهي دالة رئيسية حيث يبدأ الربنامج بتنفيذ األوامر منها، باجتاه واحد و بطريقة منظمة، الدالـة main الدالة

و لكنها عريضة، و كل الدوال و الكلمات احملجـوزة العريـضة main هي نفسها )Cن الدوال القياسية للغة ت م ليس(ـ أ نظام احلروف الدويل املوحد تستعمل يف ال و هذا مثال main مثل wmain استعمالو طرقة .Unicode و مبا يسمى ب :بسيط حوهلا

77

#include<stdio.h> wmain() { wprintf(L"Hello, World!\n"); }

1 2 3 4 5 6

wmainالدالة : ١,٩,١٣الربنامج :يف بعض املترمجات إن كتبت الربنامج التايل

#include<stdio.h> main() { }

1 2 3 4 5 6

mainالدالة : ١,٩,١٤الربنامج مع القيمة return جيب أن ترجع قيمة، و إلرجاع قيمة لدالة الرئيسية نكتب الكلمة احملجوزة main حيذرك بأن الدالة

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

#include<stdio.h> main() { return 0; }

1 2 3 4 5 6

إرجاع قيمة لدالة الرئيسية: ١,٩,١٥الربنامج جيب إرجاع قيمة intو مجيع الدوال من نوع ، int و سبب إرجاع قيمة لدالة الرئيسية هو الوضع االفتراضي هلا و هو

:و هذا يعين أنه ميكن كتابة، هلا

#include<stdio.h> int main() { return 0; }

1 2 3 4 5 6

)٢(إرجاع قيمة لدالة الرئيسية : ١,٩,١٦الربنامج للقيام بـإجراءات و void ، حيث تستعمل int بدل void أما إذا أردت عدم إرجاع قيمة لدالة الرئيسية فيمكن كتابة

:ال ميكن إرجاع هلا قيمة، و هذا مثال

#include<stdio.h>

1 2

78

void main() { }

3 4 5 6

ادي إرجاع قيمة لدالة الرئيسية تف:١,٩,١٧الربنامج :اإلدخال و اإلخراج رموز ١,٩,٨

:موضحة على اجلدول التايل printf رموز اإلخراج اخلاصة بالدالة

الشرح الرمز%d, %i لألعداد الصحيحة و ميكن استعماهلما لكل من األنواع int, short, long

%f, %e, %g من األنواعلألعداد احلقيقية و ميكن استعماهلم لكل float, double %u لألعداد بدون إشارة و ميكن استعماله لكل مـن األنـواع unsigned, int,

short, long %c للرموز و األحرف و يستعمل مع املتغريات احلرفية char %s للنصوص أو السالسل احلرفية و ميكن استعماله مع char[] و char* %o ألعداد النظام الثماين %x ألعداد النظام السداسي %p للمؤشرات %ld ألعداد صحيحة طويلة Long Decimal و تستعمل يف long int %lu ألعداد طويلة بدون إشارة long unsigned

printfرموز الدالة : ١,٩,١اجلدول :على اجلدول التايل scanf و رموز اإلدخال اخلاصة بالدالة

الشرح الرمز

%d, %i صحيحة و ميكن استعماهلما لكل من األنواعلألعداد ال int, short, long

%f, %e, %g لألعداد احلقيقية و ميكن استعماهلم لكل من األنواع float, double %u لألعداد بدون إشارة و ميكن استعماله لكل مـن األنـواع unsigned, int,

short, long %c رفيةللرموز و األحرف و يستعمل مع املتغريات احل char %s للنصوص أو السالسل احلرفية و ميكن استعماله مع char[] و char*

79

%o ألعداد النظام الثماين %x ألعداد النظام السداسي %ld ألعداد صحيحة طويلة Long Decimal و تستعمل يف long int %lu ألعداد طويلة بدون إشارة long unsigned

scanfرموز الدالة : ١,٩,٢اجلدول :األخطاء احملتملة ١,٩,٩

. ال توجد أخطاء حمتملة يف هذا الدرس

: متارين١,٩,١٠أكتب برنامج يطلب من املستخدم إدخال عدد، مث يقوم بالربنامج بإخباره إن كان العدد الذي أدخله فردي أو .١

.زوجي ؟ و ملاذا؟puts أو الدالة printf أيهما أفضل يف اإلخراج الدالة .٢

؟ conio.h ، و ما هي الدوال اليت درستها من امللف الرأسيconio ذا تعين الكلمةما .٣ فيما تستعمل الكلمات احملجوزة و الدوال العريضة؟ .٤، و ماذا تعني تلك القيمـة يف الدالـة االفتراضيملاذا نقوم بإرجاع قيمة لدالة الرئيسية يف حالة أا يف الوضع .٥

الرئيسية؟

...................................................................................... switch ارالقر ٢,١ ..................................................................... repeated loops حلقات التكرار ٢,٢ .................................................................................. arrays املصفوفات ٢,٣ ................................................................................. pointers املؤشرات٢,٤ .................................................................................. Functions الدوال٢,٥ ........................................................................ Header files امللفات الرأسية٢,٦ ............................................................. Files I/O اإلدخال و اإلخراج يف امللفات٢,٧ ............................................................................... structures التراكيب٢,٨ ................................................................... ملخص للفصل الثاين، معا إضافات٢,٩

، طريقة switchحيث سنتعرف إىل كيفية إستعمال القرار ، Cيف هذا الفصل سننتقل إىل املرحلة الثانية من لغة : مقدمة

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

.Cيعين إاء أساسيات لغة التركيبية، و إاء هذا الفصل بالتوفيق إن شاء اهللا

:قال اهللا تعاىل ﴾ وقال الذين أوتوا العلم ويلكم ثواب اهللا خري ملن آمن وعمل صاحلا ﴿

صدق اهللا تعاىل

81

و. إلختبار قيمة متغرية مع قيم ثابتة صحيحة، حيث كل قيمة ثابتة تعترب كشرط أو مقارنة switchيستعمل القرار

: الكثري من احلاالت منها يفت القرارا هذهسيغنينا عن باقي ،else…if و if، else لقراراتل مشابهswitchالقرار

:إليك هذا املثال الذي كتبناه سابقا و الذي هو عبارة عن آلة حاسبة بسيطة

#include<stdio.h> main() { int num1, num2; char Char; printf("1:(+)\n2:(-)\n3:(/)\n4:(*)\nEnter a choice: "); scanf("%c", &Char); printf("Enter the first number: "); scanf ("%d", &num1); printf("Enter the second number: "); scanf("%d", &num2); if(Char == '+' || Char == '1') printf("%d + %d = %d\n", num1, num2, num1+num2); else if(Char == '-' || Char == '2') printf("%d - %d = %d\n", num1, num2, num1-num2); else if(Char == '/' || Char == '3') printf("%d / %d = %d\n", num1, num2, num1/num2); else if(Char == '*' || Char == '4') printf("%d * %d = %d\n", num1, num2, num1*num2); else printf("Error in choice!\nExiting...\n"); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

if, else, else…if بإستخدام آلة حاسبة بسيطة :٢,١,١الربنامج :ذا مثال باستخدامهاأفضل، و ه switch هنا ميكننا استعمال القرار

#include<stdio.h> main() { int num1, num2; char Char; printf("1:(+)\n2:(-)\n3:(/)\n4:(*)\nEnter a choice: "); scanf("%c", &Char);

1 2 3 4 5 6 7 8 9

82

printf("Enter the first number: "); scanf ("%d", &num1); printf("Enter the second number: "); scanf("%d", &num2); switch(Char) { case '+': case '1': printf("%d + %d = %d\n", num1, num2, num1+num2); break; case '-': case '2': printf("%d - %d = %d\n", num1, num2, num1-num2); break; case '/': case '3': printf("%d / %d = %d\n", num1, num2, num1/num2); break; case '*': case '4': printf("%d * %d = %d\n", num1, num2, num1*num2); break; default: printf("Error in choice!\nExiting...\n"); break; } }

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

switch بإستخدام آلة حاسبة بسيطة: ٢,١,٢الربنامج هنا سنالحظ أن عدد أسطر الربنامج أكثر من السابق، و هذا ال يهم، الذي يهم هو طريقة كتابة الربنامج حيث تكـون

، يف مثالنـا الـسابقة وسيطم بتتبع نتيجة املتغري املوجود داخل ال ، و الذي يقو وسيط switch للقرار .منظمة و مفهومة اآلن سأشرح .وسيط ال يف و يتم تنفيذها حسب نتيجة املتغري املوجود ،حاالت switch ، و للقرار Charاستعمالنا املتغري

: بالتفصيلسابقالاملثال ستخدامها، و يف السطر التاسع يأخذ الربنامج نوع يف السطر الثامن طلبنا من املستخدم إدخال نوع العملة اليت يريد ا

طلبنا من املستخدم إدخال العدد األول مث العدد الثاين إلجراء العمليـة العملية، و يف السطر احلادي عشر و الرابع عشر رنة بـني حيث هنا ستتم املقا Char يف داخله املتغري وسيطو به switch بينهما، و يف السطر السابع عشر يأيت القرار

و احلاالت املوجودة، يف السطر التاسع عشر و العشرين سيقوم الربنامج باملقارنة بـني Char القيمة املوجد داخل املتغري فإذا كانت مقارنة واحدة صحيحة فسيتم تنفيذ السطر الواحد و العشرين قم اخلروج Charباملتغري ١ و الرقم + اإلشارة

اين و العشرين بدون متابعة املقارنة مع احلاالت األخرى، و يف حالـة أن املقارنـة أو يف السطر الث switch من القرار

83

، و يف الـسطر ...و هكذا Char إىل احلالة اليت بعدها و تأيت املقارنة معها و معا املتغري االنتقالالشرط مل يتحقق فسيتم .بعدها إن مل يتحقق أي شرط من الشروط السابقة و سيتم تنفيذ ما هو defaultالثامن و ثالثني جتد الكلمة احملجوزة

. يف املقارنة األوىل و األخريةسأجعل املثال السابق مفهوم أكثر، لذا سأقوم باملقارنة بينه و بني املثال الذي قبله

case '+': case '1': printf("%d + %d = %d\n", num1, num2, num1+num2); break;

19 20 21 22

:فهو if, else, else…if ، أما يف القراراتswitch القرارهذا يف

if(Char == '+' || Char == '1') printf("%d + %d = %d\n", num1, num2, num1+num2);

17 18

: السطرينو هنا ستالحظ أن

case '+': case '1':

19 20

:هو نفسه

Char == '+' || Char == '1'

:default حملجوزةأما الكلمة ا

default: printf("Error in choice!\nExiting...\n");

38 39

:يف املثال السابق else فهي

else printf("Error in choice!\nExiting...\n");

29 30

.)else و ifهنا ستفضل (double و float ة مثليال ميكن استعمال متغري من نوع أعداد حقيق switch و يف القرار

:case الكلمة احملجوزة٢,١,١

84

، و هي تعين كلمة حالة، switch يف القرار ها مؤخر، و هي ال تستعمل إال ن الكلمات احملجوزة و اليت تعلمن هي م ، switch القراروسيطو املتغري املوجود يف ١هنا سيتم املقارنة بني الرقم ’case ‘1بعد اسم احلالة يأيت الشرط، فمثال

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

:break الكلمة احملجوزة٢,١,٢

، يف حالـة case و هي تعين االنقطاع، و هي تستعمل مع الكلمة احملجـوزة switch ميكن استعماهلا داخل القرار .switch لقة القرار، و عملها هو اخلروج من احلاالستغناء عنها فستأيت نتائج غري مرغوب ا

:default الكلمة اوزة٢,١,٣

و هي الوضع االفتراضي، أي أنه إن مل تتحقق أي حالة من احلاالت السابقة فسيتم switch أيضا تستعمل مع القرار .تنفيذ ما هو بعدها

: األخطاء احملتملة٢,١,٤فيجب عليك استعمال متغري من نـوع case يف حالة أنك أردت استعمال احلالة مباشرة باستخدام الرقم بعد .١

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

#include<stdio.h> main() { int num1, num2; int Char; printf("1:(+)\n2:(-)\n3:(/)\n4:(*)\nEnter a choice: "); scanf("%d", &Char); printf("Enter the first number: "); scanf ("%d", &num1); printf("Enter the second number: "); scanf("%d", &num2); switch(Char) { case 1: printf("%d + %d = %d\n", num1, num2, num1+num2);

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

85

break; case 2: printf("%d - %d = %d\n", num1, num2, num1-num2); break; case 3: printf("%d / %d = %d\n", num1, num2, num1/num2); break; case 4: printf("%d * %d = %d\n", num1, num2, num1*num2); break; default: printf("Error in choice!\nExiting...\n"); } }

21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

١اخلطأ : ٢,١,٣الربنامج .و مكان استعماهلا break جيب دائما االنتباه إىل الكلمة احملجوزة .٢

: متارين٢,١,٥ :أكتب برنامج به قائمة رئيسية للعبة، حيث سيكون هلا أربع خيارات و هي -١

و Option و اخليار الثاين هـو . هذا اخليار خمربه بأن اللعبة قد بدأاستعمالند و ع Start Game اخليار األول هو About اخليار الثالث هو .اليت به هي أيضا أربع خيارات لكل من تعديل الصوت و الصورة و الفأرة و لوحة التحكم

Game و اخليار األخري هو اخلروج من اللعبة .و اليت ستضع فيها معلومات عنك Exit Game.

86

معىن حلقات التكرار بصفة عامة هي تكرار شيء، و يف الربجمة التكرار يكون حللقة يتم تكرارها ملـرات يقـوم

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

:while طةالتكرار بواس ٢,٢,١ : شرح لطريقة استعماهلاا، و هذه صورة if طريقة استعماهلا مشابه قليال لطريقة استعمال الكلمة احملجوزة

while التكرار بواسطة: ٢,٢,١الشكل فـسيتم تنفيـذ ال تتغري ثابت أو أن قيمته شرط و إن كان ،الشرط خاطئ صبح يحىت سيتم تنفيذ األوامر بدون توقف

سيبقى تنفيذ األوامر بدون توقف لذا جيب أن نستعمل مؤثرات الزيادة أو النقـصان أو أي، وامر مرات ال حدود هلا األاآلن سأعطي مثال بسيط حول طريقة استعمال التكرار بواسطة الكلمة . أراد احللقة مىت فنعطي احلرية للمستخدم بإيقا

:٣ ىلإ ١ من تصاعديحيث يقوم بطباعة عد while احملجوزة

#include<stdio.h> main() { int i; i = 1; while(i!=4) { printf("\a%d ,", i); i++; } printf(" Go!\n"); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

87

while التكرار بواسطة: ٢,٢,١الربنامج و الذي سيكون العداد i ، و هنا استعملنا املتغري اية يف حلقات التكرار دائما نستعمل متغريات و إىل ستكون احللقة بال

، و يف السطر ١ حيث سيبدأ العد من الرقم ١، يف مثالنا أعطيناه القيمة يبدأ ا للحلقة، و جيب أيضا إعطاء للمتغري قيمة تنفيذ ما هو داخل حيث سيتم ٤ يساوي i أن ال يكون املتغري )مقارنة(شرط مع while الثامن وضعنا الكلمة احملجوزة

ـ block الـ و ٤ يساوي iحيث سيتم اخلروج من احللقة إن كان املتغري (تصبح املقارنة خاطئة إىل أن while اخلاص ب و عـدم ، استعملنا مؤثر الزيادة يف السطر احلادي عشر ه، و ستجد أيضا أن )يكون خاطئ س i !=4 شرطهذا يعين أن ال

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

#include<stdio.h> #include<conio.h> // Just in Windows and DOS OS compilers main() { char ch; printf("Press any key(q=exit): "); ch = getche(); while(ch != 'q') { printf("\nPress any key(q=exit): "); ch = getche(); } printf("\nExiting...\n"); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

)٢( while التكرار بواسطة: ٢,٢,٢الربنامج لكـي ال getche إدخال أي حرف، و استعمالنا الدالة استعملنا متغري حريف يف السطر السادس مث طلبنا من املستخدم

مع شرط أن ال while نسمح للمستخدم بإدخال أكثر من حرف، و يف السطر احلادي عشر استعمالنا الكلمة احملجوزة .q ، حيث هنا سيبقى الربنامج يعمل بال اية إال إذا ضغط املستخدم على احلـرف q ساوي احلرف ي ch املتغري كوني

ـ while ا االستغناء عن الشرط يف الكلمة احملجوزة ميكنن اخلاص ا باستعمال املقارنـة عـرب block و كتابته داخل الـ if الكلمة احملجوزة تنهي او اليت قلنا عليها سابقا أbreak اخلاص ا الكلمة احملجوزة block حيث سيكون داخل ال

:احللقات، هذا املثال السابق بعد التعديل

#include<stdio.h> #include<conio.h> /* Just in Windows and DOS OS compilers */ main()

1 2 3 4

88

{ char ch; printf("Press any key(q=exit): "); ch = getche(); while(1) { if(ch == 'q') break; printf("\nPress any key(q=exit): "); ch = getche(); } printf("\nExiting!\n"); }

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

)٣( while التكرار بواسطة: ٢,٢,٣الربنامج كي تكون احللقة بال اية، و while الكلمة احملجوزة وسيطيف )C يف لغة true و الذي يعين (١و هنا استعملنا الرقم

ناء يف املثال السابق ميكننا االستغ .switch ال تستعمل فقط يف الكلمة احملجوزة break هنا ستالحظ أن الكلمة احملجوزة :عن السطر الثامن و التاسع و جنعل الشرط املوجود يف السطر الثالث عشر يف آخر احللقة حيث سيصبح املثال كما يلي

#include<stdio.h> #include<conio.h> /* Just in Windows and DOS OS compilers */ main() { char ch; while(1) { printf("\nPress any key(q=exit): "); ch = getche(); if(ch == 'q') break; } printf("\nExiting!\n"); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

)٤( while التكرار بواسطة: ٢,٢,٤الربنامج ـ يف هذا املثال سيتم تنفيذ األوامر املوجود يف ـ block ال حتقـق حـىت و إن قل، رة واحدة على األ م while اخلاص ب

.، حيث تستعمل هذه طريقة غالبا أو رمبا ال تستعمل أصالwhile احللقة ميزاتو لكنها ليست من ، الشرط

:do…while التكرار بواسطة٢,٢,٢

89

ـ هـو أن while و do…while و الفرق بني ،مع بعض اإلضافات while طريقة استعماهلا مثل الطريقة السابقة ل، مرة واحدة شرط صحيح كانت ال إال إذا ال يقوم بتنفيذ األوامر املوجود فيه و ال مرة واحدة while امباستخدالتكرار

إن و مرة واحدة على األقل حـىت اخلاص به block املوجود بالـ فسيتم تنفيذ األوامر do…while أما التكرار بواسطة يث ستكون بـه حخاص ا block مث نقوم بوضع do طريقة استعماهلا هي كتابة الكلمة احملجوزة .شرط خاطئ ال كان

:، و هذه صورة توضيحيةشرطمع ال while نكتب { و الذي هو block و يف رمز اية الـ،األوامر املراد تنفيذها

do…while التكرار بواسطة: ٢,٢,٢الشكل :do…while هذه األمثلة السابق باستخدامو

:تصاعديمثال العد ال

#include<stdio.h> #include<conio.h> /* Just in Windows and DOS OS compilers */ main() { int i; i = 1; do { printf("\a%d ,", i); i++; }while(i != 4); printf(" Go!\n"); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

do…while التكرار بواسطة: ٢,٢,٥الربنامج :و هذا مثال املتغري احلريف

90

#include<stdio.h> #include<conio.h> /* Just in Windows and DOS OS compilers */ main() { char ch; do { printf("\nPress any key(q=exit): "); ch = getche(); }while(ch != 'q'); printf("\nExiting...\n"); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

)٢( do…while التكرار بواسطة: ٢,٢,٦الربنامج . ال توجد طريقة أحسن من األخرى ألن كل طريقة و مكان استعماهلا لكنهنا ستجد أن عدد األسطر قد قل، و

:for التكرار بواسطة٢,٢,٣

.و سـهولتها لبـساطتها ريقة األكثر اسـتعماال مال، هي الط تعترب هذه الطريقة من أسهل الطرق السابقة يف االستع : و يتم الفصل بينها بفاصلة منقوطة حبيثوسائطثالثة for للكلمة احملجوزة

. األول نضع به قيمة اليت سيبدأ ا العدادوسيطال .١ . يتم اخلروج من احللقةخاطئط كان الثاين هو الشرط، يف حالة أن الشروسيطال .٢ .) النقصان مؤثرغالبا ما يكون مؤثر الزيادة أو( الثالث هو املؤثروسيطال .٣

:صورة توضيحية

91

for التكرار بواسطة: ٢,٢,٣الشكل : سيكون على هذه الطريقةالتصاعديمثال العد

#include<stdio.h> #include<conio.h> /* Just in Windows and DOS OS compilers */ main() { int i; for(i=1;i<=3;i++) { printf("\a%d ,", i); } printf(" Go!\n"); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14

for التكرار بواسطة: ٢,٢,٧الربنامج وسـيط أي يف أول for هنا نقوم أوال باإلعالن عن املتغري يف بداية الربنامج مث نعطي املتغري قيمة داخل الكلمة احملجوزة

٣ العـدد i الثاين حيث جيب أن ال يتعدى املتغري وسيط يف ال قارنة، مث امل اد تلك القيمة هي بداية العد هلا حيث ستكون

الثالث استعملنا مـؤثر وسيط، و يف ال ) خاطئ و سيتم اخلروج من احللقة شرطصبح ال ي فس ٣ العدد i إذا تعدى املتغري ( .الزيادة

األول و األخري، و سنستعمل وسيط عن ال باالستغناءلف قليال، حيث سنقوم طريقة ختت الأما بالنسبة ملثال املتغري احلريف ف

هنا هو أن ال يساوي املتغري يتم اخلروج من احللقة، و الشرط كان الشرط خاطئ حيث إن شرطال الثاين لوضع وسيطال

ch احلرف q ) سيصبح الشرط خاطئ إذا كان املتغريch يساوي احلرف q( هذا الشكل، و الربنامج سيكون على:

#include<stdio.h> #include<conio.h> /* Just in Windows and DOS OS compilers */ main() { char ch; printf("Press any key(q=exit): "); ch = getche(); for(;ch!='q';) { printf("\nPress any key(q=exit): "); ch = getche(); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

92

printf("\nExiting...\n"); }

17 18

)٢( for التكرار بواسطة: ٢,٢,٨الربنامج األول و األخري و لكن جيب أن نتـرك مكانـا هلمـا، و وسيطنييف السطر احلادي عشر استعملنا التكرار مع جتاهل ال

. يتم اخلروج من احللقة خاطئكان الثاين و هو الشرط الذي يف حالة وسيطاستعملنا ال

:goto التكرار بواسطة ٢,٢,٤

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

:املكان الذي نريد الذهاب إليه، هذه صورة توضيحية

gotoطريقة الذهاب إىل مكان ما يف الربنامج عرب : ٢,٢,٤الشكل : التايللو لكن هذا الكود ال يكفي، جيب أن نضع اسم املكان حيث سيكون على الشك

gotoإنشاء إسم ملكان ميكن الذهاب إليه عرب : ٢,٢,٥الشكل

:سأضع مثال بسيط مفهوماآلن

#include<stdio.h> main() { goto fin; printf("Begin!\n"); fin: printf("End!\n"); }

1 2 3 4 5 6 7 8 9 10

goto طريقة إستعمال: ٢,٢,٩الربنامج

93

سم املكان الذي و اسم املكان، و هنا ا goto the_name_of_place هنا عند تنفيذ الربنامج سيتم جتاهل كل ما بنيإذا أردنـا .يف بداية الربنامج fin و هو موجود يف السطر الثامن، و أردنا الذهاب إىل املكان finهو إليه نريد االنتقال

:طريقة سهلة، نكتب كما يليالالرجوع إىل بداية الربنامج ف

#include<stdio.h> main() { begin: goto fin; printf("Begin!\n"); fin: printf("End!\n"); goto begin; }

1 2 3 4 5 6 7 8 9 10 11 12

)٢( gotoطريقة إستعمال : ٢,٢,١٠الربنامج ربنامج يقوم بتكرار حنـدده حنـن فـسنقوم ال، و إذا أردنا أن جنعل هنا ستجد تأثر التكرار، حيث هنا حلقتنا لن تنتهي :لشرط، و سيصبح املثال على هذا الشكلباستعمال متغري و الذي سيكون العداد مث مؤثر مث ا

#include<stdio.h> main() { int i; i = 0; printf("Begin!\n"); begin: printf("%d ,", i); i++; if(i==10) goto fin; else goto begin; fin: printf("\nEnd!\n"); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

gotoالتكرار بواسطة : ٢,٢,١١الربنامج .goto وضعنا تكرار بواسطة الكلمة احملجوزةو هنا نكون قد

:تكرارلقات ال املفهوم العام حل٢,٢,٥

94

: فكل ما عليك معرفته هوةلكي تفهم التكرار بصفة عاميها جتاهل وضع بداية التكرار، مثل ببداية العداد، هنا توجد حاالت ميكن ف لكل حلقة تكرار بداية و اليت تسمى .١

.استعمال متغريات حرفية يتم اخلروج من احللقة، حيث جتاهل وضع الشرط ينتج حلقة غري خاطئكان يف حالة ،لكل حلقة تكرار شرط .٢

.منتهيةلكل حلقة مؤثر سواء مؤثر الزيادة أو النقصان، هنا أيضا توجد حاالت ميكن فيها جتاهل وضع مـؤثر، مثـل .٣

.ال متغريات حرفيةاستعم

:مثالنا األول يف هذا الدرس هو

#include<stdio.h> main() { int i; i = 1; while(i!=4) { printf("\a%d ,", i); i++; } printf(" Go!\n"); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

)٥( whileالتكرار بواسطة : ٢,٢,١٢الربنامج : عامة موجود على الصورة التاليةو شرحه بصفة

95

whileشرح لعملية التكرار يف : ٢,٢,٦الشكل :do…while ، و هذه صورة أخرى عن التكرار بواسطةwhile هذه الصورة لتكرار بواسطة

do…whileشرح لعملية التكرار يف : ٢,٢,٧الشكل :for و أخريا صورة توضيحية للتكرار بواسطة

forشرح لعملية التكرار يف : ٢,٢,٨الشكل مجيـع . تستعمل يف التكرار غالبا ما ميكننا جتاهلها ألا طريقة إضافية و هي الطريقة تلك ،goto و تبقى طريقة التكرار

ؤثر خارج حيث ميكن أن نقوم بكتابة كل من بداية العداد و الشرط و امل الطرق السابقة ميكن استعماهلا بطريقة أخرى، :، و هذا مثل طبيعيwhile, do...while, for كل منوسائط

96

#include<stdio.h> main() { int i; for(i=1;i<=3;i++) { printf("\a%d ,", i); } printf(" Go!\n"); }

1 2 3 4 5 6 7 8 9 10 11 12 13

)٣( forالتكرار بواسيطة : ٢,٢,١٣الربنامج :ثال السابق و لكن بطريقة أخرىو هنا نفس امل

#include<stdio.h> main() { int i; i=1; for(;;) { if(i>3) break; printf("\a%d ,", i); i++; } printf(" Go!\n"); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

)٤( forالتكرار بواسيطة : ٢,٢,١٤الربنامج :ا هذا املثال إليك صورة توضحهو لكي تفهم

بطريقة أخرى for: ٢,٢,٩الشكل

97

ـ ، do…while و while ، ميكن اسـتعمال for باستخدام هنا ثالامل ستجد أن النتيجة ستكون نفسها، و و هنا نفس ب .الفكرة

:continue الكلمة احملجوزة٢,٢,٧

بـدون إكمـال رجوع إىل بداية احللقة الب، حيث تقوم داخل حلقات التكرار continue تستعمل الكلمة احملجوزة :، و كي تعرف أمهيتها جرب املثال التايلماهو بعدها من أوامر

#include<stdio.h> main() { int i; i = 1; while(1) { if(i<=3) { printf("\a%d ,", i); ++i; } printf(" Go!\n"); break; } }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

)٦( whileالتكرار بواسيطة : ٢,٢,١٥الربنامج أما هذا الربنامج لن يطبع إىل العدد ٣ إىل ١ هذا املثال لن يعمل كما ينبغي، نريد من الربنامج أن يقوم بعد تصاعدي من

إىل يف اية املقارنة و سيـصبح املثـال continue وزة، و كي يعمل الربنامج بطريقة صحيحة نظيف الكلمة احملج ١ :السابق كما يلي

#include<stdio.h> main() { int i; i = 1; while(1) { if(i<=3) { printf("\a%d ,", i); ++i;

1 2 3 4 5 6 7 8 9 10 11 12 13

98

continue; } printf(" Go!\n"); break; } }

14 15 16 17 18 19 20 21

continue الكلمة احملجوزة: ٢,٢,١٦الربنامج .for و do…while و ميكن استعمال املثال السابق على كل من

:ASCII جدول٢,٢,٨

:و رقمه، و ذلك باستخدام املثال التايل ASCII باستخدام حلقات التكرار ميكننا معرفة كل رمز يف جدول

#include<stdio.h> main() { int i; for(i=0;i<=255;i++) printf("%d: %c\n", i, i); }

1 2 3 4 5 6 7 8 9 10

بإستخدام حلقات التكرار ASCII جدول طباعة :٢,٢,١٧الربنامج ، و سبب يف ذلك أخرى و ١٣ ،٩، ٨ ،٧ و الرقم ٠و ستجد عند تشغيل الربنامج أن بعض الرموز مل تطبع منها الرقم

أي سطر جديد( هو زر الدخول يف لوحة املفاتيح١٣و الرقم 0\ هو الرمز٠ا ال تقوم بأعمال ظاهرة فمثال الرقم أ(.

: األخطاء احملتملة٢,٢,٩ .جيب دائما االنتباه إىل الشرط و طريقة استعماهلا .١ و إن كان الـشرط مرة واحدة على األقل، حىت هيتم تنفيذ أوامر do…while تذكر دائما أن التكرار بواسطة .٢

.خاطئ

.(;;)for تنتج حلقة غري منتهية، حيث ستكون على الشكلالوسائطفارغة for استعمال حلقة التكرار .٣

.عين حلقة بال ايةي while(1) الطريقةاستعمال .٤

. يعين حلقة بال اية)أو تكرار بدون شرط(بدون شرط continue استعمال الكلمة احملجوزة .٥

: متارين٢,٢,١٠

99

.، بالطرق الثالثة٠ إىل ١٠٠أكتب برنامج يقوم بالعد التنازيل من .١ .، بالطرق الثالثة١٠٠ إىل ٠ بطباعة األعداد الثنائية من يقومأكتب برنامج .٢

100

تكون و باستخدام اسم واحد، و ميكن أن ،تستعمل املصفوفات إلدارة جمموعة كبرية من البيانات هلا نفس النوع

، و طرق استعماهلا فائدة املصفوفات كبرية . ال ميكن استعماهلا معا الدوال أي نوع من أنواع املتغريات، و من املصفوفة متغري و كل متغري به ٢٠ فتخيل أنه طلب منك بناء برنامج به أكثر منبشكل كبريكثرية و متنوعة، و لكي ترى فائدا

:قوم بتحديدها املستخدم، و إليك املثالقيمة رمبا نقوم بتحديدها حنن أو ي

#include<stdio.h> main() { int arr1, arr2, arr3, arr4, arr5, ...,arr25; printf("Arr1: "); scanf("%d", arr1); printf("Arr2: "); scanf("%d", arr2); printf("Arr3: "); scanf("%d", arr3); printf("Arr4: "); scanf("%d", arr4); printf("Arr5: "); scanf("%d", arr5); ... printf("Arr25: "); scanf("%d", arr25); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 .. .. .. .. .. .. ..

متغري٢٠برنامج به أكثر من : ٢,٣,١الربنامج قيم، مث ماذا لو أردنـا يعطي هلا ج إن قمنا بكتابة مجيع املتغريات و ترك املستخدم كم سيكون عدد أسطر الربنام ...ختيل

هنـا . غري مرن و غري مفهوم ، سطر و سيكون الربنامج جامد ٢٠٠طبع النتائج، سيكون عدد أسطر الربنامج أكثر من ، كل ما ستفعله هو كتابـة تغرياتتكمن فائدة املصفوفات، طريقة استعملها و التعامل مها مشابه لطريقة التعامل مع امل

:نوع املصفوفة مث امسها مث يأيت حجمها و هذه صورة توضيحية

101

طريقة اإلعالن عن مصفوفة: ٢,٣,١الشكل :و اآلن سأكتب املثال السابق باستخدام املصفوفات

#include<stdio.h> main() { int arr[24]; int i; for(i=0;i<25;i++) { printf("Arr%d: ", i); scanf("%d", &arr[i]); } printf("***********- LIST -***********\n"); for(i=0;i<25;i++) { printf("Arr%d: %d\n", i, arr[i]); } }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

تخدام املصفوفات متغري بإس٢٠برنامج به أكثر من : ٢,٣,٢الربنامج اآلن أصبح الربنامج أكثر مرونة و مفهوم مع قلة عدد األسطر، إن كان هذا املثال صعب فيمكن الرجوع إليه بعدما تقرأ

.هذا الدرس جيدا

: أساسيات يف املصفوفات٢,٣,١لذاكر كل واحدة فهذا يعين أننا قمنا بأخذ أربعة أماكن يف ا int arr[4] أي٤إذا كانت لدين مصفوف ا العدد

، توجد طريقتني إلعطاء قيمة للمصفوفات، الطريقة األوىل هي كتابة املصفوفة مث بعدها مباشـرة intمهنا حبجم املتغري :القيم اليت ا، مثال توضيحي

#include<stdio.h> main() { int arr[4] = {10, 12, 13, 15}; printf("[%d][%d][%d][%d]\n", arr[0], arr[1], arr[2], arr[3]); }

1 2 3 4 5 6 7 8

طريقة إعطاء قيم ملصفوفة: ٢,٣,٣الربنامج

102

حيث ستكون طريقة وضع القيم منظمة، مثال إن وضعنا ثالثة قيم ملصفوفة ذات أربعة أماكن فإن املكان الرابع سـيبقى ألن ،٠ حيث مجيع املصفوفات تبدأ من ٠ف ، و ترى أنه عندما طبعنا النتائج يف السطر السابع بدأنا باملصفو بدون قيمة

:ال ميكن استعمال املثال السابق ذه الطريقة . يعترب قيمة٠

#include<stdio.h> main() { int arr[4]; arr[4] = {10, 12, 13, 15}; printf("[%d][%d][%d][%d]\n", arr[0], arr[1], arr[2], arr[3]); }

1 2 3 4 5 6 7 8 9

)٢(طريقة إعطاء قيم ملصفوفة : ٢,٣,٤نامج الرب أي أنه جيب إعطاء القيم مباشرة بعد اإلعالن عن املصفوفة، توجد طريقة أخرى و هي اإلعالن عن املصفوفة مث إعطـاء

:كل صف قيمته و هذا مثال عن طريقة استعماهلا

#include<stdio.h> main() { int arr[4]; arr[0] = 10; arr[1] = 12; arr[2] = 13; arr[3] = 15; printf("[%d][%d][%d][%d]\n", arr[0], arr[1], arr[2], arr[3]); }

1 2 3 4 5 6 7 8 9 10 11 12

)٣(طريقة إعطاء قيم ملصفوفة : ٢,٣,٥الربنامج .و هي الطريقة اليت تستعمل بكثرة

: املصفوفات الثنائية األبعاد٢,٣,٢

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

:طبيعية مث نظيف إليها صف آخر و هذا مثال سأقوم بشرحه

#include<stdio.h> main()

1 2 3

103

{ int arr2d[2][2]; int i,j; arr2d[0][0] = 10; arr2d[0][1] = 20; arr2d[1][0] = 30; arr2d[1][1] = 40; for(i=0;i<=1;i++) { for(j=0;j<=1;j++) { printf("arr2d[%d][%d] = %d\n", i, j, arr2d[i][j]); } } }

4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

مصفوفات ثنائية األبعادطريقة اإلعالن عن : ٢,٣,٦الربنامج منا بإنشاء املصفوفة الثنائية، أعطني قيم لكل صف من صفوف املصفوفات يف كل من السطر الثامن قيف السطر اخلامس

ية األبعـاد مصفوفات ثنائ .[1] ، و السطر احلادي عشر و الثاين عشر للمصفوفة الثانية [0] و التاسع للمصفوفة األوىل مـن ٢ هي املصفوفات ا مصفوفات، أي مصفوفة رئيسية و مصفوفة ثانوية، فإذا كانت لدينا مصفوفة رئيسية حبجـم

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

:قيم سابقة، الطريقة األوىل وضعنها يف املثال السابق، أما الطريقة الثانية فهي

#include<stdio.h> main() { int arr2d[2][2] = {{10, 20}, {30, 40}}; int i,j; for(i=0;i<=1;i++) { for(j=0;j<=1;j++) { printf("arr2d[%d][%d] = %d\n", i, j, arr2d[i][j]); } } }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

)٢(طريقة اإلعالن عن مصفوفات ثنائية األبعاد : ٢,٣,٧الربنامج .و هي مشاا لطريقة استعماهلا يف املصفوفات ذات بوعد واحد

104

:ملصفوفات الثالثية األبعاد ا٢,٣,٢ عمل مصفوفات ذات أربعة أو مخسة أبعاد، بنفس الطرق السابقة، فمثال إذا أردنا وضـع مـصفوفة حىت اآلن ميكن

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

#include<stdio.h> main() { int arr3d[2][2][2] = {{{10, 20},{30, 40}}, {{50, 60},{70, 80}}}; int i, j, k; for(i=0;i<=1;i++) { for(j=0;j<=1;j++) { for(k=0;k<=1;k++) { printf("arr3d[%d][%d][%d] = %d\n", i, j, k, arr3d[i][j][k]); } } } }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

مصفوفات ثالثية األبعادطريقة اإلعالن عن : ٢,٣,٨الربنامج :و يف حالة ترك املستخدم يقوم بإدخال القيم نكتب

#include<stdio.h> main() { int arr3d[2][2][2]; int i, j, k; for(i=0;i<=1;i++) { for(j=0;j<=1;j++) { for(k=0;k<=1;k++) { printf("arr3d[%d][%d][%d] : ", i, j, k); scanf("%d", &arr3d[i][j][k]); } } } for(i=0;i<=1;i++) {

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

105

for(j=0;j<=1;j++) { for(k=0;k<=1;k++) { printf("arr3d[%d][%d][%d] = %d\n", i, j, k, arr3d[i][j][k]); } } } }

22 23 24 25 26 27 28 29 30 31

)٢(مصفوفات ثالثية األبعاد طريقة اإلعالن عن : ٢,٣,٩الربنامج :مصفوفة ذات حجم غري معروف ٢,٣,٣

م أي أن حجـم املـصفوفة ميكننا إنشاء مصفوفة ذات حجم غري معروف، حيث ستكون املصفوفة ديناميكية احلج معطـاة سـابقا أي ال ميكـن سيزيد حسب الطلب، و لكن من شروط املصفوفات الديناميكية جيب أن تكون القيم

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

#include<stdio.h> main() { int arr[] = {10, 20, 30}; printf("%d\n", arr[0]); printf("%d\n", arr[1]); printf("%d\n", arr[2]); }

1 2 3 4 5 6 7 8 9 10

وفة ذات حجم غري معروففاإلعالن عن مصطريقة : ٢,٣,١٠الربنامج :يف السطر اخلامس

int arr[] = {10, 20, 30}; 5

هي الطريقة الوحيدة اليت ميكن استعماهلا حاليا، و ال ميكن استعماهلا يف مصفوفات ثانوية، أي مثال يف املصفوفات الثالثية

:ميكن استعمال مثل اآليتاألبعاد ال

int arr3d[][][] = {{{10, 20},{30, 40}}, {{50, 60},{70, 80}}};

اإلمكانيات الوحيدة يف املصفوفات الثنائية و الثالثية األبعاد أو أكثر هي وضع املصفوفة الرئيسية بدون حجم، و كـي :يصبح املثال السابق صحيح نكتب

106

int arr3d[][2][2] = {{{10, 20},{30, 40}}, {{50, 60},{70, 80}}};

:)نصوصال( فيةسالسل احلرال ٢,٣,٤

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

حيث يكون حجمها هو احلد األقصى لعدد احلروف اليت ميكن إدخاهلـا، مثـال char إعطاء حجم ملصفوفة من نوع :توضيحي

#include<stdio.h> main() { char text[14] = "Hello, World!"; printf("%s\n", text); }

1 2 3 4 5 6 7 8

طريقة اإلعالن عن سلسلة حرفية: ٢,٣,١١الربنامج :أو ميكن جتزئة النص كما يلي

#include<stdio.h> main() { char text[14]; text[0] = 'H'; text[1] = 'e'; text[2] = 'l'; text[3] = 'l'; text[4] = 'o'; text[5] = ','; text[6] = ' '; text[7] = 'w'; text[8] = 'o'; text[9] = 'r'; text[10] = 'l'; text[11] = 'd'; text[12] = '!'; text[13] = '\0'; printf("%s\n", text); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

107

)٢(طريقة اإلعالن عن سلسلة حرفية : ٢,٣,١٢الربنامج و الذي يعين اية السلسلة، و عدم وجوده سيعطي نتائج غري مرغوب فيها، أما 0\ قمنا بإضافة الرمز يف السطر العشرين

: و سيتم إضافته تلقائيا، و إذا انتبهت إىل املثال السابق يفإضايفيف الطريقة األوىل فيكفي أن نعطيه مكان

char text[14] = "Hello, World!"; 5

مكان، املكان الرابع عشر سيكون لرمز ١٤ و حنن قمنا حبجز )الفراغ يعترب حرف ( ١٣ فستالحظ أن عدد األحرف هو

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

#include<stdio.h> main() { char usr_name[255]; int i; i = 0; printf("Your name: "); scanf("%s", &usr_name); while(usr_name[i] != '\0') { ++i; } printf("%s = %d characters\n", usr_name, i); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

حساب عدد أحرف إسم مستخدم: ٢,٣,١٣الربنامج و هو أقصى احتمال ميكـن مكان ٢٥٥ حبجم ،usr_name باسم فيةعالن عن سلسلة حر يف السطر اخلامس قمن باإل

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

بانتـهاء شر قمنا بإنشاء حلقة ال تنتهي إال و هو الرمز اخلاص بالسالسل احلرفية، و يف السطر الثاين ع string خمتصر من :ألخرية إليك الصورة التالية، و كي تفهم هذه ااسم املستخدم

108

طريقة وضع البيانات يف املصفوفات: ٢,٣,٢الشكل و إذا أردت جعل الربنامج أكثر مرونـة و .و يف السطر السابع عشر يقوم الربنامج بطباعة اسم املستخدم و عدد أحرفه

:أكثر تعمق جرب هذا املثال

#include<stdio.h> main() { char usr_name[255]; int i; i = 0; printf("Your Fullname: "); scanf("%s", &usr_name); while(usr_name[i]!='\0') { printf("%i: %c\n", i+1, usr_name[i]); ++i; } printf("%s = %d characters\n", usr_name, i); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

)٢(حساب عدد أحرف إسم مستخدم : ٢,٣,١٤الربنامج

109

:gets الدالة٢,٣,٤,١

هي خاص بإدخـال النـصوص .يف الفصل األول، و لكننا مل نتحدث عن طريقة استعماهلا getsحتدثنا عن الدالة :أفضل، مثال gets(string_name) نستعمل scanf("%s", &string_name) حيث بدل استعمال

#include<stdio.h> main() { char usr_name[255]; puts("Your name:"); gets(usr_name); puts("nice to meet you"); puts(usr_name); }

1 2 3 4 5 6 7 8 9 10 11 12

getsالدالة : ٢,٣,١٥الربنامج ن كتبت امسني و فـصلت بينـهما إ gets هو عند إدخال األمساء، يف الدالة gets و الدالة scanf و الفرق بني الدالة

و تقوم بطبع ما هو قبل الفـراغ ال األول فإنه ستتوقف عند الفراغ scanfبفراغ فسيقوم بطباعة كالمها، أما يف الدالة .أكثر

:strncpy و الدالة strcpy الدالة ٢,٣,٤,٢

بالتعامـل مـع الـسالسل ةاصاخلحيث به جمموعة من الدوال string.h من دوال امللف الرأسي strcpy الدالة :، مثالو لصق احلروف من سلسلة إىل أخرى تقوم بنسخ و هي ،string copy ، و اسم الدالة خمتصر مناحلرفية

#include<stdio.h> #include<string.h> main() { char String[] = "String!"; char Empty_String[20]; strcpy(Empty_String, String); printf("Empty_String = %s\n", Empty_String); }

1 2 3 4 5 6 7 8 9 10 11 12

strcpy الدالة: ٢,٣,١٦الربنامج

110

الثاين نكتب وسيط األول من الدالة نقوم بالكتابة فيه اسم السلسلة احلرفية اليت نريد أن ننسخ ا النص، و يف ال وسيطال هي مثـل الدالـة الـسابقة ، و string.h الرأسيمن دوال امللف strncpy أيضا الدالة .السلسلة اليت نريد نسخها

strcpy إضافة بسيطة و هي حتديد عدد األحرف اليت نريد نسخها، مثالمع:

#include<stdio.h> #include<string.h> main() { char String[] = "String!"; char Empty_String[20]; strncpy(Empty_String, String, 3); printf("Empty_String = %s\n", Empty_String); }

1 2 3 4 5 6 7 8 9 10 11 12

strncpy الدالة: ٢,٣,١٧الربنامج .نقوم بتحديد عدد األحرف اليت نريد نسخها strncpy الثالث من الدالةوسيطيف ال

:ة التايلو ميكن أيضا كتاب

#include<stdio.h> #include<string.h> main() { char Empty_String[20]; strcpy(Empty_String, "String!"); printf("Empty_String = %s\n", Empty_String); }

1 2 3 4 5 6 7 8 9 10 11

)٢( strcpy الدالة: ٢,٣,١٨الربنامج :strncat و الدالة strcat الدالة٢,٣,٤,٣

، و هي تقوم نسخ نص string concatenate ، و هي خمتصرة منstring.h من دوال امللف الرأسي strcat الدالة :و إضافته يف اية سلسلة حرفية، مثال

#include<stdio.h> #include<string.h> main() { char String[20] = "String!"; strcat(String, ", String2");

1 2 3 4 5 6 7 8

111

printf("String = %s\n", String); }

9 10 11

strcat الدالة: ٢,٣,١٩الربنامج الثـاين نقـوم وسيطنقوم بكتابة اسم السلسلة اليت سنضيف إليها النص، و يف ال strcat األول من الدالة وسيطيف ال

مع إضافة بسيطة و هي حتديد عدد األحرف اليت نريـد نـسخها، strcat مثل الدالة strncat الدالة .بكتابة النص :مثال

#include<stdio.h> #include<string.h> main() { char String[20] = "String!"; strncat(String, ", String2", 3); printf("String = %s\n", String); }

1 2 3 4 5 6 7 8 9 10 11

strncat الدالة: ٢,٣,٢٠الربنامج .ها نقوم بتحديد عدد األحرف اليت نريد نسخ الثالثوسيطيف ال

: طرق أخرى لتعامل مع املصفوفات٢,٣,٥ :، حيث أا مكافئة للسابقة، و هذا مثال طبيعيarr[0] = 10 يف مكان 10 = (arr+0)* كتابةميكننا

#include<stdio.h> main() { int arr[1]; arr[0] = 10; printf("%d\n", arr[0]); }

1 2 3 4 5 6 7 8 9

أخرى لتعامل مع املصفوفاتطرق : ٢,٣,٢١الربنامج :و هذا املثال السابق باستعمال الطريقة الثانية

#include<stdio.h> main() { int arr[1];

1 2 3 4 5

112

*(arr+0) = 10; printf("%d\n", *(arr+0)); }

6 7 8 9

)٢(أخرى لتعامل مع املصفوفات طرق : ٢,٣,٢٢الربنامج الـضرب و القـسمة ، الطرح ، مثل اجلمع اتو ميكن استعمال مؤثر .(arr+0)* رةشف ال ا نفسه يه arr[0] الشفرة

:لإلشارة إىل عنصر من مصفوفة مثل

#include<stdio.h> main() { int arr[2]; arr[0+0] = 10; printf("%d\n", arr[0+0]); /* or printf("%d\n", arr[0]); */ arr[0-0] = 20; printf("%d\n", arr[0-0]); /* or printf("%d\n", arr[0]); */ arr[1*1] = 30; printf("%d\n", arr[1*1]); /* or printf("%d\n", arr[1]); */ arr[1/1] = 40; printf("%d\n", arr[1/1]); /* or printf("%d\n", arr[1]); */ }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

)٣(أخرى لتعامل مع املصفوفات طرق : ٢,٣,٢٣الربنامج : األخطاء احملتملة٢,٣,٦ : التايل بكتابةت، مث أردت وضع قيم للمصفوفة و قمarr و امسها٢ لديك مصفوفة حبجم ض أنهرنف .١

int arr[2] ; arr[0] = 10 ; arr[8] = 20 ;

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

:هي

int arr[2] ; arr[0] = 10 ; arr[1] = 20 ;

113

0\ احلرفية عند كتابة نص مباشرة بعد اإلعالن عنها فيجب عليك دائما وضع مكان إضايف لرمزيف السالسل .٢

.و إال ستكون النتائج غري صحيحة

.ال تستعمل إال يف إدخال النصوص gets الدالة .٣

: متارين٢,٣,٧ puts باستخدام الدالتني ( أكتب برنامج يطلب من املستخدم إدخال امسه، مث يطبع له الربنامج عدد أحرف امسه .١

.)gets و

باسـتخدام (يطلب من املستخدم إدخال أعداد حقيقية، مث يقـوم الربنـامج بإعـادة طبعهـا أكتب برنامج .٢ .)املصفوفات

مث قم بعمل حلقة تقوم بعد عدد رموز أو أحـرف تلـك ! Hello, World أكتب برنامج به مصفوفة ا النص .٣مع طريقة استعمال سليمة يعـين ١٢ جيب أن تكون النتيجة )حرفا فإن النتيجة خاطئة ١٣ إذا وجدت (اجلملة

.١- بدون استعمال

114

طريقة اإلعالن عن مؤشر .لذاكرةاملؤشرات تشري إىل عناوين يف ا C كلمة مؤشر تعين اإلشارة إىل شيء، و يف لغة

مـتغري أو عنـوان و اإلختالف بني املؤشر و املتغري هو أن املؤشر يشري إىل عنوان مماثلة لطريقة اإلعالن عن املتغريات، إال (يف األنظمة احلديث ال ميكن إعطائها عناوين عشوائية و توجد مالحظة هنا و هي أن املؤشرات . عشوائي يف الذاكرة

لذا هنا سنرى فقط طريقة التعامل مع املؤشرات و املـتغريات، و هـذه . و ذلك لتشدد احلماية فيها ) ت خاصة يف حاال :طريقة اإلعالن عن مؤشرلصورة توضح

طريقة اإلعالن عن مؤشر: ٢,٤,١الشكل .ذي يكون قبل اسم املؤشرر الضرب يف املؤشرات و الثالفرق الوحيد بني اإلعالن عن متغري و اإلعالن عن مؤشر هو مؤ

:Pointer Type نوع املؤشر٢,٤,١

بايت فيجب علينا اإلعالن عـن مؤشـر ٢نوع املؤشر يكون حسب رغبنا، مثال لو أردنا اإلشارة إىل متغري حجمه ,int, float, double هي نفسها أنواع املتغريات،و هيعللمؤشرات أنوا. بايت من الذاكرة٢ميكنه الوصول إىل

long, short, unsigned, signed, char, .

:Pointer Name اسم املؤشر٢,٤,٢

:السم املؤشر شروط هي نفسها شروط املتغريات و هي . حرف٣١أن ال يتجاوز اسم املؤشر أكثر من § .أن ال يبدأ اسم املؤشر بأرقام § ....أن ال يكون اسم املؤشر حيتوي على مؤثرات مثل اجلمع و الطرح و § .)_ الرمز ءباستثنا(... و} و # و %يكون اسم املؤشر حيتوي على رموز مثل أن ال §

115

.أن ال يكون اسم املؤشر مستعمل سابقا يف دالة أو متغري أو مؤشر آخر § .أن ال يكون اسم املؤشر من أمساء الكلمات احملجوزة §

يف حاالت، و يف العناوين جند قيم و لكل يف الذاكرة و ال ميكن أن نعطيها قيم مباشرة إال ملواقع املؤشرات حتمل عناوين

:عنوان قيمته، مثال

#include<stdio.h> main() { int *ptr, i; i = 10; ptr = &i; printf("*ptr = %d\n", *ptr); }

1 2 3 4 5 6 7 8 9 10

طريقة اإلعالن عن مؤشر: ٢,٤,١الربنامج يف ١٠ القيمـة i، أعطينا للمتغري i و اسم املتغري هو ptr ، اسم املؤشر هو موجود يف السطر اخلامس مع متغري املؤشر

فهـذا Variable_Name& أي أنه عند كتابة i عنوان املتغري ptr السطر السادس، و يف السطر السابع أعطينا للمؤشر ، و يف ptr عنوان املؤشـر و الذي يعين القيمة املوجود يف ptr* و أخريا السطر التاسع حيث كتبتا يعين عنوان متغري،

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

:، جرب املثال السابق ذه الطريقةptr راملؤش

#include<stdio.h> main() { int *ptr, i; i = 10; ptr = &i; *ptr = 100; printf("*ptr = %d\n", *ptr); }

1 2 3 4 5 6 7 8 9 10 11

طريقة إستعمال مؤشر: ٢,٤,٢الربنامج و سيقوم حبذف القيمة السابقة املوجـود يف ، i لديه عنوان و هو عنوان املتغري ألنه ptr هنا ميكننا إعطاء قيمة للمؤشر

:و لكي تفهم املؤشرات جيدا جرب املثال التايل .١٠٠ و يقوم بتحديثها إىل العدد i عنوان

116

#include<stdio.h> main() { int *ptr, i; i = 10; ptr = &i; printf("i = %d\n", i); printf("*ptr = %d\n", *ptr); printf("&i = %p\n", &i); printf("ptr = %p\n", ptr); }

1 2 3 4 5 6 7 8 9 10 11 12 13

)٢(طريقة إستعمال مؤشر : ٢,٤,٣الربنامج و ptrو القيمة املوجود يف عنوان املؤشـر i ع و العاشر قمنا بطباعة كل من القيمة املوجودة يف املتغري يف السطر التاس

جيب أن (لكي نرى قيمة موجودة داخل مؤشر نكتب مؤثر الضرب قبل امسه و أيضا ميكننا وضع قيمة له بنفس الطريقة و يف السطر احلادي عشر و السطر الثاين عشر قمنا بطباعة كـل مـن ، )يكون لديه عنوان كي نستطيع وضع له قيمة

و ميكن اسـتعماله مـع pointer و هو خمتصر من p% ا الرمز ، و تالحظ أنه وضعن ptr و عنوان املؤشر i عنوان املتغري :صورة توضيحية للمثال السابق .املؤشرات أو عنوان ملتغري حيث قمنا باستعماله كي يتم طباعة العناوين بشكل صحيح

الذاكرة و العناوين: ٢,٤,٢الشكل : املؤشرات و املصفوفات٢,٤,٣

ممـا جيعلنـا نـصل إىل )مثال++ بإستخدام املؤثر (ننا نشري إىل عنوان ميكننا التقدم به شبيها باملصفوفات، أل املؤشرات :و هنا مثال يوضح الشبه بني املؤشرات و املصفوفات .جمموعة من بيتات متسلسلة

117

#include<stdio.h> main() { int arr[2]; int *ptr; arr[0] = 10; arr[1] = 20; ptr = &arr[0]; printf("%d\n", ptr[0]); printf("%d\n", ptr[1]); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

إستعمال املؤشر على طريقة املصفوفات:٢,٤,٤الربنامج تاسع أعطينا قيم للمصفوفة، و ، مث قمنا باإلعالن عن مؤشر، و يف السطر الثامن و ال ٢ قمنا باإلعالن عن مصفوفة حبجم

عنوان بداية املصفوفة، و يف السطر الثالث عشر و الرابع عشر قمنا بطباعـة ptr احلادي عشر أعطينا للمؤشر يف السطر :و ميكننا كتابة املثال السباق ذه الطريقة .ptr ما هو موجود يف عنوان املؤشر

#include<stdio.h> main() { int arr[2]; int *ptr; *(arr+0) = 10; *(arr+1) = 20; ptr = &*(arr+0); printf("%d\n", *(ptr+0)); printf("%d\n", *(ptr+1)); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

طريقة أخرى لتعامل مع املؤشرات: ٢,٤,٥الربنامج :و ميكن أيضا كتابته بالطريقة التالية

#include<stdio.h> main() { int arr[2]; int *ptr; arr[0] = 10; arr[1] = 20;

1 2 3 4 5 6 7 8 9

118

ptr = &arr[0]; printf("%d\n", *ptr); printf("%d\n", *++ptr); }

10 11 12 13 14 15

)٢(طريقة أخرى لتعامل مع املؤشرات : ٢,٤,٦الربنامج :مثال ال ميكن تطبيقه على املصفوفاتو هذا

#include<stdio.h> main() { int arr[2]; int *ptr; arr[0] = 10; arr[1] = 20; ptr = &arr[0]; printf("%d\n", arr); printf("%d\n", ++arr); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

إمكانيات املؤشر مقارنة مع املصوفات: ٢,٤,٧الربنامج : التعامل مع النصوص٢,٤,٤

:دام املؤشرات مشابه للتعامل مع النصوص باستخدام املصفوفات،مثالالتعامل مع النصوص باستخ

#include<stdio.h> main() { char *str = "Hello, World!"; printf("%s\n", str); }

1 2 3 4 5 6 7 8

التعامل مع النصوص بإستخدام املؤشرات: ٢,٤,٨الربنامج فيوجد شروط جيب التقيد ا و إال ستحدث أخطاء رمبا يف املصدر الربنامج أما إذا أردنا استخدام املؤشرات يف اإلدخال

:أو أثناء تشغيل الربنامج، فمثال ال ميكننا استعمال مثل ما هو يف املثال التايل

#include<stdio.h> main() { char *str;

1 2 3 4 5

119

printf("Enter a string: "); scanf("%s", str); printf("%s\n", str); }

6 7 8 9 10

)٢(التعامل مع النصوص بإستخدام املؤشرات : ٢,٤,٩الربنامج str حتديد للمؤشر م هذه الطريقة، و السبب يف ذلك هو عد يف املترمجات اجلديد رمبا لن يسمح لك املترجم باستعمال

str ن عن متغري حريف و نعطي للمؤشر ا، أي أنه بال عنوان، و لكي تصبح طريتنا صحيح فيجب على األقل اإلعال عنوان

:و سيصبح املثال على الشكل التايل strعنوان ذلك املتغري و الذي سيكون بداية املؤشر

#include<stdio.h> main() { char *str; char adr_str; str = &adr_str; printf("Enter a string: "); scanf("%s", str); printf("%s\n", str); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14

)٣(التعامل مع النصوص بإستخدام املؤشرات : ٢,٤,١٠الربنامج

ذلك ألننا استعملنا مؤشر و الوضـع االفتراضـي ،& بدون الرمز str احلادي عشر قمنا بكتابة و ستالحظ يف السطر :مثال توضيحي، scanf يف الدالة& رمز العنوان و ميكننا أيضا كتابة اسم مصفوفة بدون .للمؤشرات هي عنواا

#include<stdio.h> main() { char arr[255]; printf("Enter a string: "); scanf("%s", arr); printf("%s\n", arr); }

1 2 3 4 5 6 7 8 9 10 11

)٤(التعامل مع النصوص بإستخدام املؤشرات : ٢,٤,١١الربنامج :يات املؤشرات أنه ميكن أن نعطيه قيم مصفوفة باستخدامو من إمكان

#include<stdio.h>

1 2

120

main() { int arr[3] = {10, 20, 30}; int *ptr; int i; ptr = arr; for(i=0;i<=2;i++) printf("ptr[%d] = %d\n", i, ptr[i]); }

3 4 5 6 7 8 9 10 11 12 13

)٥(ل مع النصوص بإستخدام املؤشرات التعام: ٢,٤,١٢الربنامج .arr = ptr و ال ميكننا كتابة العكس،

:reference املرجع٢,٤,٥

:املرجع هو أخذ عنوان متغري، عند كتابة

#include<stdio.h> main(){ int ref; int *ptr; ref = 10; ptr = &ref; }

1 2 3 4 5 6 7 8

املرجع: ٢,٤,١٣الربنامج ـ ـ ptr هنا ال مث اسم متغري يعين أخذ عنوان ذلك املتغري، و تـسمى & كتابة املؤثر . املرجع هو ref& هو املؤشر، و ال

.reference باملرجعالعمليةهذه

:void ر لـش مؤ٢,٤,٦ليس هلا حجم كي يتم احلفظ فيه ، وسبب يف ذلك أنه void الكلمة احملجوزة ال ميكننا اإلعالن عن متغري باستخدام

:حيث يعترب األكثر مرونة مع املؤشرات، مثال void القيم املرادة، و لكننا ميكن أن نقوم باإلعالن عن مؤشر لـ

#include<stdio.h> main() { void *p_void; /* can't use void v_void; */ (int)p_void = 10; printf("(int)p_void = %d\n", p_void);

1 2 3 4 5 6 7 8 9 10

121

(char)p_void = 'H'; printf("(char)p_void = %c\n", p_void); (char *)p_void = "Hello"; printf("(char *)p_void = %s\n", p_void); }

11 12 13 14 15 16

void مؤشر لـ: ٢,٤,١٤الربنامج نوع القيمة اليت سـنقوم نكتب Type ، يف مكان Pointer_Name(Type) نكتب void عندما نريد وضع قيم ملؤشر

.بإدخاهلا، مث اسم املؤشر مث نعطيه القيمة

: مؤشر ملصفوفة٢,٤,٧

: كل عنصر من تلك املصفوفة ميكن أي حيمل عنوانا، مثال أنعندما نعلن عن مؤثر ملصوفة فهذا يعين

#include<stdio.h> main() { int *arr[2]; int a = 10, b = 20; printf("A = %d, ", a); printf("B = %d\n", b); arr[0] = &a; *arr[0] = 5; arr[1] = &b; *arr[1] = 10; printf("A = %d, ", a); printf("B = %d\n", b); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

مؤشر ملصفوفة: ٢,٤,١٥الربنامج و ميكن أيضا استعمال مؤشر لسلسلة حرفية حيث كل عنـصر . أو ثالثية األبعاد صفوفة ثنائية و ميكن استعمال مؤشر مل

:من تلك السلسلة ميكن أن حيمل نص مثل

#include<stdio.h> main(){ char *arr[] = {"Text 1", "Text 2", "Text 3"}; printf("arr[0] = %s\n", arr[0]); printf("arr[1] = %s\n", arr[1]); printf("arr[2] = %s\n", arr[2]); }

1 2 3 4 5 6 7 8 9

122

)٢(مؤشر ملصفوفة : ٢,٤,١٦الربنامج : مؤشر ملؤشر٢,٤,٨

مؤشر ملتغري يعين أن نشري إىل عنوان املتغري، و مؤشر ملؤشر يعين أن نشري إىل عنـوان . مؤشر ملؤشر قليلة االستعمال :مؤشر، مثال

#include<stdio.h> main() { int p; int *pt; int **ptr; p = 10; printf("p = %d\n", p); pt = &p; ptr = &pt; **ptr = 5; printf("p = %d\n", p); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

مؤشر ملؤشر: ٢,٤,١٧الربنامج مؤشر ملؤشر من نوع احلريف حيـث كـل و ميكن أن نقوم بإعالن عن .مت اإلعالن عن مؤشر ملؤشر يف السطر السابع :مؤشر ميكن أن حيمل سلسلة من حروف مثل

#include<stdio.h> main(){ char *AdrPtr; char **ptr = &AdrPtr; ptr[0] = "Text 1"; ptr[1] = "Text 2"; ptr[2] = "Text 3"; printf("ptr[0] = %s\n", ptr[0]); printf("ptr[1] = %s\n", ptr[1]); printf("ptr[2] = %s\n", ptr[2]); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14

)٢(مؤشر ملؤشر : ٢,٤,١٨الربنامج .أو أكثر ،int *****ptr عنو ميكن عمل أكثر من مؤشر ملؤشر، أي ميكن اإلعالن

123

: األخطاء احملتملة٢,٤,٩ :بدون عنوان، أي ال ميكن كتابة كما يف املثال التايليف املترمجات اجلديد ال يسمح بإعطاء قيمة ملؤشر .١

#include<stdio.h> main() { int *ptr; *ptr = 10; printf("%d\n", *ptr); }

1 2 3 4 5 6 7 8 9

١اخلطأ : ٢,٤,١٩الربنامج :و أيضا ال ميكن كتابة

#include<stdio.h> main() { int *ptr; int i; *ptr = i; }

1 2 3 4 5 6 7 8 9

٢ اخلطأ : ٢,٤,٢٠الربنامج :ال ميكن إعطاء عنوان ملتغري طبيعي .٢

#include<stdio.h> main() { int *ptr; int i; i = ptr; }

1 2 3 4 5 6 7 8 9

٣اخلطأ : ٢,٤,٢١الربنامج : متارين٢,٤,١٠

:أكتب الربنامج التايل باستخدام املؤشرات .١

#include<stdio.h> main()

1 2 3

124

{ char usr_name[255]; int i; i = 0; printf("Your Fullname: "); scanf("%s", &usr_name); while(usr_name[i]!='\0') { printf("%i: %c\n", i+1, usr_name[i]); ++i; } printf("%s = %d characters\n", usr_name, i); }

4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

١التمرين : ٢,٤,٢٢الربنامج

125

. أماكن خمتلفة يف الربنامج حيث ميكن استدعاءها من واحد اسم حتت الدوال هي جمموعة من األوامر و البيانات

ا التقليل يف شفرة الربنامج و حجم الربنامج، مما جيله أكثر و من فوائدها ، subroutine يالثانوو هي مبا تعرف بـالروتني :الصورة التالية توضح طريقة اإلعالن عن دالة. تنظيما

طريقة اإلعالن عن دالة: ٢,٥,١الشكل فـسيكون برناجمنـا ! Hello, World إذا أردنا عمل دالة تقوم بطباعة اجلملـة .وسائطو ميكن أن ال حتتوي الدالة على

:كالتايل

#include<stdio.h> void Func_HelloWorld() { printf("Hello, World!\n"); } main() { Func_HelloWorld(); }

1 2 3 4 5 6 7 8 9 10 11

طريقة اإلعالن عن دالة: ٢,٥,١الربنامج مث نقوم بإعطائها األوامر بعد الدالة )prototype يسمى بالنموذج ( هذه طريقة، أما الطريقة الثانية فهي اإلعالن عن الدالة

:بح املثال السابق كالتايلالرئيسية و سيص

#include<stdio.h> void Func_HelloWorld();

1 2 3

126

main() { Func_HelloWorld(); } void Func_HelloWorld() { printf("Hello, World!\n"); }

4 5 6 7 8 9 10 11 12 13

)٢(طريقة اإلعالن عن دالة : ٢,٥,٢الربنامج و توجد طريقة أخرى و لكن ال يفضل استعماهلا من ناحية التنظيف و أيـضا .ث التنظيم و هي الطريقة األفضل من حي :بعض املترمجات ال تقبلها و هي

#include<stdio.h> main() { Func_HelloWorld(); } void Func_HelloWorld() { printf("Hello, World!\n"); }

1 2 3 4 5 6 7 8 9 10 11

)٣(ريقة اإلعالن عن دالة ط: ٢,٥,٣الربنامج ، و Func_HelloWorld الدالة prototype منوذج و إن كان مترمجك قد نبهك عن وجود خطأ فسيكون عن اخلطأ عن

الكلمـة .، يعين أا طريقة صحيحة فقط بعض املترمجات ال تـدعمها C لك يف األصل هذه الطريقة هي من طرق لغة ذ وسيطسنقوم بكتابة دالة ا .بايت، و هي ال تقوم بإرجاع أي قيم ٠ حجمها تستعمل مع الدوال حيث void احملجوزة

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

#include<stdio.h> void Func_Print(const char *str); main() { Func_Print("Func_Print:\n"); Func_Print("Hello, World!\n"); } void Func_Print(const char *str) { printf("%s", str); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14

طريقة اإلعالن عن دالة ذات وسيط: ٢,٥,٤الربنامج

127

و لقـسمة ا، الطـرح ن أن نقوم بعمل دالة تقوم بـاجلمع، هذه ليست إال أمثلة بسيطة حول طريقة عمل الدوال، ميك :الضرب، سيكون املثال على الشكل التايل

#include<stdio.h> void Func_Add(const int num1, const int num2); void Func_Sub(const int num1, const int num2); void Func_Mul(const int num1, const int num2); void Func_Div(const int num1, const int num2); main() { Func_Add(30, 10); Func_Sub(30, 10); Func_Mul(30, 10); Func_Div(30, 10); } void Func_Add(const int num1, const int num2) { printf("%d + %d = %d\n", num1, num2, num1+num2); } void Func_Sub(const int num1, const int num2) { printf("%d - %d = %d\n", num1, num2, num1-num2); } void Func_Mul(const int num1, const int num2) { printf("%d * %d = %d\n", num1, num2, num1*num2); } void Func_Div(const int num1, const int num2) { printf("%d / %d = %d\n", num1, num2, num1/num2); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

طريقة اإلعالن عن دالة ذات وسيطني: ٢,٥,٥الربنامج :عل هذا الربنامج أكثر مرونة بالطريقة التاليةو ميكن أن جن

#include<stdio.h> void Func_(const int num1, const char sign, const int num2); main() { Func_(30, '+', 10); Func_(30, '-', 10); Func_(30, '*', 10);

1 2 3 4 5 6 7 8 9

128

Func_(30, '/', 10); } void Func_(const int num1, const char sign, const int num2) { switch(sign) { case '+': printf("%d %c %d = %d\n", num1, sign, num2, num1+num2); break; case '-': printf("%d %c %d = %d\n", num1, sign, num2, num1-num2); break; case '*': printf("%d %c %d = %d\n", num1, sign, num2, num1*num2); break; case '/': printf("%d %c %d = %d\n", num1, sign, num2, num1/num2); break; default: printf("ERROR!\n"); break; } }

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

طريقة اإلعالن عن دالة ذات أكثر من وسيطني: ٢,٥,٦الربنامج :Function Type نوع الدالة٢,٥,١

أو أعـداد حقيقيـة int ، ميكن استعمال دالة من نوع أعداد صحيحة املتغري دوال أنواع و هي نفسها أنواع ـ ال ل

float. اية الدالة نقوم بإرجـاع قيمـة بالنسبة لدوال من نوع أعداد صحيحة فهي هلا قيمة تقوم بإرجاعها، أي يف :كما يف املثال التايل return باستخدام الكلمة احملجوزة

#include<stdio.h> int Int_Func(const int num); main() { printf("%d\n", Int_Func(5)); } int Int_Func(const int num) { return num; }

1 2 3 4 5 6 7 8 9 10 11 12 13

إعالن عن دالة من نوع عدد صحيح: ٢,٥,٧الربنامج ميكننا كتابـة printfلدالة و يف السطر السابع، يف ا،Int_Func إىل الدالة int num وسيطهنا قمنا بإرجاع قيمة ال

ألا بدون void دوال اليت تقوم بإرجاع قيم كما يف هذا املثال، و ال ميكن استعمال هذه الطريقة مع الكلمة احملجوزة

129

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

#include<stdio.h> Int_Func(const int num); main() { printf("%d\n", Int_Func(5)); } Int_Func(const int num) { return num; }

1 2 3 4 5 6 7 8 9 10 11 12 13

ع اإلفتراضي لدالة بدون حتديد نوعهاالوض: ٢,٥,٨الربنامج :و ميكن أيضا كتابة اسم متغري بدون نوع، مث نقوم بكتابة نوعه أسفل اسم الدالة اليت هي بعد الدالة الرئيسية، مثال

#include<stdio.h> Int_Func(const int num); main() { printf("%d\n", Int_Func(5)); } Int_Func(num) const int num; { return num; }

1 2 3 4 5 6 7 8 9 10 11 12 13 14

طريقة أخرى لإلعالن عن وسيط لدالة: ٢,٥,٩الربنامج :و ميكن استعمال املثال

#include<stdio.h> int Int_Func(const int num); main() { printf("%d\n", Int_Func(5)); } int Int_Func(const int num) { return num;

1 2 3 4 5 6 7 8 9 10 11 12

130

} 13 الطريقة اإلفتراضية لإلعالن عن وسيط لدالة: ٢,٥,١٠الربنامج

:short باستخدام

#include<stdio.h> short Short_Func(const short num); main() { printf("%d\n", Short _Func(5)); } short Short _Func(const short num) { return num; }

1 2 3 4 5 6 7 8 9 10 11 12 13

shortإعالن عن دالة من نوع : ٢,٥,١١الربنامج فهذا مثـال لطريقـة char بنفس الطريقة، أما long ،float ،double ،signed ،unsigned من و باستخدام كل

:استعماهلا

#include<stdio.h> char Char_Func(const char ch); main() { printf("%c\n", Char_Func('C')); } char Char_Func(const char ch) { return ch; }

1 2 3 4 5 6 7 8 9 10 11 12 13

charإعالن عن دالة من نوع : ٢,٥,١٢الربنامج :و الدوال اليت ترجع قيم ميكن إعطاءها ملتغري طبيعي مباشرة مثل

#include<stdio.h> int Int_Func(const int num); main() { int i = Int_Func(5); printf("i = %d\n", i); }

1 2 3 4 5 6 7 8 9 10

131

int Int_Func(const int num) { return num*2; }

11 12 13 14 15

إعطاء ملتغري قيمة ترجعها دالة: ٢,٥,١٣الربنامج :شرات، مثالو ميكن أيضا عمل دالة تقوم بإرجاع سلسلة حرفية باستخدام املؤ

#include<stdio.h> char *string(char *str){ return str; } main() { printf("%s\n", string("Hello, World!")); }

1 2 3 4 5 6 7 8 9 10

*charإعالن عن دالة من نوع : ٢,٥,١٤الربنامج :Function Name اسم الدالة٢,٥,٢

:تغريالسم الدالة حدود و هي مثل اسم امل . حرف٣١الدالة أن ال يتجاوز اسم § .بأرقامالدالة أن ال يبدأ اسم § ....حيتوي على مؤثرات مثل اجلمع و الطرح والدالة أن ال يكون اسم § .)_ الرمز ءباستثنا(... و}و # و %حيتوي على رموز مثل الدالة أن ال يكون اسم § .لة أخرىأن ال يكون اسم الدالة مستعمل سابقا يف متغري أو دا § .أن ال يكون اسم الدالة من أحد أمساء الكلمات احملجوزة §

:Function Parameters الدالةوسائط ٢,٥,٣

,unsigned , signed, short حيث تكون من األنواعاتطلباتن هي متغريات نقوم بوضعها على حسب مالوسائط

long, int, float, double, char, char*, char[]. عبارة عن مـصفوفات أو وسائط أن تكون الو ميكن أيضا .مؤشرات من كل األنواع

: األوامر٢,٥,٤

.main األوامر ميكن كتابتها حبرية مثل ما نكتبها على الدالة الرئيسية

132

:macros املختصرات ٢,٥,٥ : عنها، و هذا مثال لطريقة اإلعالنأي املختصرات macros ال تسمى بدوال و لكنها شبيها هلا، تسمى بالـ

#include<stdio.h> #define Add(a, b) (a+b) main() { int a, b; a = 50; b = 100; printf("%d + %d = %d\n", a, b, Add(a, b)); }

1 2 3 4 5 6 7 8 9 10 11 12

طريقة اإلعالن عن خمتصر:٢,٥,١٥الربنامج مثال .define# عها، سيتم حتديد نوع املتغري تلقائيا من املوجه و هنا عند استعمال متغريات ال ميكن كتابة أو حتديد نو

:آخر

#include<stdio.h> #define PrintF_(String) printf("%s", String) main() { PrintF_("Macro...\n"); }

1 2 3 4 5 6 7 8

إستدعاء دالة من خمتصر: ٢,٥,١٦الربنامج : الفرق بني اإلجراء و الدالة٢,٥,٦

هو دالة ال تقـوم Procedure اإلجراءات ميكن القول عليها هي نفسها الدوال ألا مدمج معها، و اإلجراء C يف لغة أو int قيم مثل الـدوال مـن نـوع عتسمى إجراء ألا ال ترج void بإرجاع قيمة و ميكن القول أن دوال من نوع

float الدوال فهي تقوم بعمليات و تعطي نتيجة، حيث تقوم اإلجراءات بتنفيذ أوامر أما أو غريها.

: من نوع دوالوسائط دوال هلا ٢,٥,٧

:ميكننا عمل دوال ا دوال أخرى، و ذلك كتايل

#include<stdio.h> void CallFunc(void Func_Name(void));

1 2 3

133

void Function(); main(){ CallFunc(Function); } void CallFunc(void Func_Name(void)){ printf("Call Function:\n"); Func_Name(); } void Function(){ printf("This is a function!\n"); }

4 5 6 7 8 9 10 11 12 13 14 15 16 17

دالة ذات وسيط لدالة أخرى: ٢,٥,١٧الربنامج وسـائط رى، أو استدعاء دوال أخرى يف أخ وسائط عبارة عن دوال ترجع قيم، أو دوال ا وسائطو ميكن أن تكون ال

: أخرىوسائط دوال هلا بارامارتو هذا مثال لطريقة استعمال. الدوال، و أكثر من ذلك

#include<stdio.h> void CallFunc(void Func_Name(int a, int b)); void Function(int a, int b); main(){ CallFunc(Function); } void CallFunc(void Func_Name(int a, int b)){ printf("Call Function:\n"); Func_Name(10, 20); } void Function(int a, int b){ printf("%d + %d = %d\n", a, b, a+b); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

دالة ذات وسيط لدالة أخرى ذات وسائط: ٢,٥,١٨الربنامج :اء احملتملة األخط٢,٥,٨ :، مثالالفواصل املنقوطة يف اية دوال نقوم بإعطائها أوامرال نضع .١

#include<stdio.h> void Function(); main() { Function(); } void Function();

1 2 3 4 5 6 7 8 9 10

134

{ /*Empty Funtion;*/ }

11 12 13

١اخلطأ : ٢,٥,١٩الربنامج ، عند اإلعالن عن دالة بدون أوامر جيب كتابة الفاصلة املنقوطة يف اية الدالة، أما العاشرو اخلطأ يف السطر

.عند اإلعالن عن دوال لكي نعطي هلا أوامر فال جيب أن نكتب فاصلة منقوطة يف اية الدالة .ال ميكن اإلعالن عن دالتني بنفس االسم .٢

: متارين٢,٥,٩ const char وسـيط و ا ال StrLen نص، حيث يكون اسم الدالة أكتب دالة تقوم بـ عد عدد أحرف .١

*str.

int وسـيط مع ال abs أكتب دالة تقوم بإخراج القيمة املطلقة للعدد الذي أدخله املستخدم، اسم الدالة هو .٢

value.

135

تساعدنا بت، مناذج دوال و بنيات ثواعبارة عن ملفات رأسية، حيث توجد ا conio.h و stdio.h كل من

ة ملف رأسي بـه سنقوم بكتاب .رس عن طريقة إنشاء ملفات رأسية و طريقة استعماهلا ديف براجمنا، سنتحدث يف هذا ال ، و يكون اسـم h. القيمة و الضرب، أوال نقوم بإنشاء ملف نصي و حفظه على صيغة دوال لكل من اجلمع، الطرح،

:و نكتب فيه املثال التايلمثال، functions.h ملفنا الرأسي

/*Functions Header file*/ int Add(int num1, int num2) { return num1+num2; } int Sub(int num1, int num2) { return num1-num2; } int Mul(int num1, int num2) { return num1*num2; } int Div(int num1, int num2) { return num1/num2; }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

إنشاء ملف رأسي: ٢,٦,١الربنامج و قـم ،functions.h الرأسـي يف نفس املكان الذي قمت بإنشاء فيه امللفمث قم بإنشاء امللف الرأسي للمشروع

:ما يليفيه بالكتابة

#include<stdio.h> #include"functions.h" main() { int num1 = 30, num2 = 10; printf("%d + %d = %d\n", num1, num2, Add(num1, num2)); printf("%d - %d = %d\n", num1, num2, Sub(num1, num2)); printf("%d * %d = %d\n", num1, num2, Mul(num1, num2)); printf("%d / %d = %d\n", num1, num2, Div(num1, num2)); }

1 2 3 4 5 6 7 8 9 10 11 12

ضم امللف الرأسي: ٢,٦,٢الربنامج

136

و لكن بطريقة خمتلفة و هي وضع اسم امللف بني إقتباسني و functions.h ثاين قمنا بإضافة امللف الرأسي يف السطر ال ، أما إذا main.c الرئيسي موجود يف نفس املكان الذي موجود به امللف النصي functions.h ذلك ألن امللف الرأسي

:أردت كتابة

#include<stdio.h> #include<functions.h> main() { int num1 = 30, num2 = 10; printf("%d + %d = %d\n", num1, num2, Add(num1, num2)); printf("%d - %d = %d\n", num1, num2, Sub(num1, num2)); printf("%d * %d = %d\n", num1, num2, Mul(num1, num2)); printf("%d / %d = %d\n", num1, num2, Div(num1, num2)); }

1 2 3 4 5 6 7 8 9 10 11 12

includeضم ملف رأسي موجود بالد : ٢,٦,٣الربنامج أي يف (stdio.h يف نفس املكان الذي موجود به امللـف الرأسـي functions.h الرأسي فيجب عليك وضع امللف

.) املوجود يف جملد املترجمincludeالد

: اسم امللف الرأسي٢,٦,١ يف بداية اسم امللف الرأسي و أيضا ميكن استعمال مؤثرات اجلمع و الطرح، و الرموز اليت ال ميكن ميكن كتابة أرقام

٢٥٦ السم امللف الرأسي هوو أقصى حد ميكن إعطاءه ، % # | < > " * \ & : ? / :استعماهلا يف اسم امللف الرأسي هي

.رمز

: مىت نستعمل امللفات الرأسية٢,٦,٢

كثري دوال الرياضيات يف برامج فيستحسن تستعمل امللفات الرأسية عند كتابة برامج كبرية، مثال إذا كنت تستعمل بل، و إذا كنـت حيث تضع به مجيع الدوال اليت تريد استعماهلا يف املـستق math.h أن تقوم بكتابة ملف رأسي باسم

حيث تكون به أغلـب دوال graphics.h أو design.h قم بإنشاء ملف رأسي هلا باسم تستعمل دوال الرسم أيضا .الرسم، و هكذا حىت تكون لديك مكتبة كبرية خاصة بك

: األخطاء احملتملة٢,٦,٣ .عند إضافة ملف رأسي جيب التأكد أنه موجود يف نفس مكان املشروع .١

137

:ين متار٢,٦,٤، مث قم و اليت تقوم بإخراج القيمة املطلقة للعدد املدخل abs حيث به الدالة math.h أكتب ملف رأسي باسم .١

. يف برناجمكabsباستعمال الدالة

138

فاتقراءة امللفات، و إنشاء املل(سنعرف يف هذا الدرس طريقة التعامل مع امللفات يف كل من اإلدخال و اإلخراج

.)و كتابة عليها

: اإلخراج يف امللفات٢,٧,١ ملفات ذات امتداد يقوم بتحديده املربمج، حيث حتتوي تلك امللفات )إنشاء( اإلخراج يعين بناء برنامج يقوم بإخراج

املثال األول يف هذا الدرس سيكون عبارة عن برنامج يطلب من املستخدم كتابة اسم امللف الـذي يريـد .على بيانات :إنشاءه مع امتداده، و يطلب منه أيضا إدخال النص الذي يريد حفظه يف امللف، املثال

#include<stdio.h> main() { FILE *File; char FileName[255]; char String[255]; printf("Enter the name of file(with type)\n[MAX Character 255]: "); gets(FileName); printf("Creating File...\n"); File = fopen(FileName, "w"); printf("File Created.\n"); printf("TEXT:\n"); gets(String); printf("Save Text to the file %s...\n", FileName); fprintf(File, "%s", String); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

طريقة فتح ملف: ٢,٧,١الربنامج .FILEمجيع تتطلب مؤشر للبنية امللفات ب اخلاصة دوالالو ذلك ألن FILE للبنيةيف السطر اخلامس قمنا بإنشاء مؤشر

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

ألخـذ scanf بدل الدالة gets و يف السطر العاشر قمنا باستعمال الدالة .٢٥٥ عدد األحرف اليت ميكن إدخاهلا هو :اسم امللف، و سبب ذلك هو

139

test امللف فرمبا يقوم املستخدم بإدخال اسم مكون من كلمتني منفصلتني مثلإلدخال اسم scanf إن استعملنا الدالة

test.txt فهنا الدالة scanf ستتوقف عن الفراغ أي أن اسم امللف سيكون test و بدون امتداد، و هـذا هـو سـبب منا بإعطاء املؤشـر و يف السطر الثالث عشر ق .ألا تأخذ االسم كامل حىت و إن كانت فراغات gets استعمال الدالة

File عنوان الدالة fopen و اليت هي خمتصرة من file open األول خاص باسم امللـف و وسيط، الوسيطني، الدالة هلا و توجد ، write و الذي يعين w الثاين فهو النمط أي نوع استخدام امللف، و هنا استعملنا الكتابة لذا كتبنا الرمز وسيطال

و يف السطر السابع عشر ينتظر الربنامج من املستخدم لكي يقوم بإدخـال نـص و .ا بعد أحرف أخرى سنعرفها فيم و أخريا السطر العشرين حيث توجد الدالة اليت تقوم بإدخال النص إىل .لنفس السبب السابق gets استعمالنا هو الدالة

فهي تتعامـل مـع printf لفات أما و لكنها تتعامل مع امل printf و هي مثل الدالة fprintfامللف، و الدالة هي األول و وسيطو هو ال printf إضايف على الدالةوسيطو هلا file print format خمتصرة من fprintfالشاشة، الدالة

و أيـضا نفـس طريقـة printf الدالة وسائط فهي نفسها وسائطهو مؤشر امللف الذي نريد الكتابة فيه أما باقي ال مع جعل الربنـامج أكثـر ( ن بكتابة املثال السابق باستخدام املؤشرات و الدوال و امللفات الرأسية سنقوم اآل .استعماهلا :و نقوم بالكتابة عليه التايل fileio.h أوال نقوم بإنشاء ملف رأسي باسم . استعماهلا كي نعتاد علي)مرونة

/*fileio.h header file for files functions*/ #include<stdlib.h> /*for exit() fonction*/ void CreateFile(const char *FileName, /*for the name of file*/ const char *String) /*for text of file*/ { FILE *FileOut; if(*FileName == '\0') { printf("Error in the name of file!\n"); exit(1); } if((FileOut = fopen(FileName, "w"))==NULL){ printf("Can't create file!\n"); exit(1); }else{ fprintf(FileOut, "%s", String); } fclose(FileOut); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

طريقة إنشاء ملف: ٢,٧,٢الربنامج :وىل من الربنامج، و شرحه هوهذا امللف هو املرحلة األ

140

، و أضـفناه السـتعمال الدالـة standard library و هو خمتصر من stdlib.h يف السطر الثالث أضفنا امللف الرأسيexit(…) قمنا باإلعالن عن الدالة .و اليت تقوم باخلروج من الربنامج بدون تنفيذ باقي األوامر CreateFile يف السطر

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

ر السادس عشر قمنا مبقارنة أخرى و هـي و يف السط .لتجنب األخطاء و تنبيه املستخدم عن وجود خطأ يف اسم امللف :هي NULL حيث NULL و FileOut بني املؤشر

#define NULL 0

يف <>أحسن من الصفر، املقارنة هي إن كانت أخطاء مثل إدخال أحرف غري متفق عليها مثـل NULL و يفضل كتابة

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

و هنا لن يتم اخلـروج مـن false و تعين خطأ ٠ هنا سيتم اخلروج من الربنامج، أو true و تعين صحيح ١الوضع أما و اليت تقوم بإغالق امللف file close و هي خمتصرة من fclose و أخريا السطر الثاين و العشرين و هي الدالة .الربنامج

، اآلن fileio.h هذا بالنسبة للملف الرأسي . ستالحظ ذلك فيما بعد نه حىت ميكننا استعماله مرة أخرى عند االنتهاء م :main.c نقوم بإنشاء امللف الرئيسي ملشروعنا باسم

#include<stdio.h> #include"fileio.h" main() { char FileName[255]; char String[255]; printf("Enter the name of file(with type)\n"); printf("[MAX Character 255]: "); gets(FileName); printf("TEXT:\n"); gets(String); printf("Creating File and save text...\n"); CreateFile(FileName, String); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

fileio.h من امللف الرأسي CreateFileعمال الدالة تإس: ٢,٧,٣الربنامج :fopen الدالة٢,٧,١,١

141

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

طريقة فتح ملف: ٢,٧,١الشكل :fclose الدالة٢,٧,١,٢

واحـد و هـو وسيط امللفات و هلا ، و هي أيضا خاصة بالتعامل مع stdio.h و هي أيضا من دوال امللف الرأسي كي نستطيع قراءا مرة أخرى ا هي ، و فائدة إغالقها لكي يتم إغالقهالبنية، نكتب فيه اسم مؤشر * FILE لـمؤشر

.يف الربنامج

:exit الدالة٢,٧,١,٣

١ كانت القيمة ، إذا ٠ أو القيمة ١ واحد حيث ميكن أن حيمل القيمة وسيط، هلا stdlib.h من دوال امللف الرأسي

.فسيتم جتاهلها ٠ تعين اخلروج من الربنامج مباشرة بدون تنفيذ باقي األوامر، أما إذا كانت

: إضافة نص يف اية امللف٢,٧,٢

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

:، يف السطر السادس عشرa نكتب احلرف

if((FileOut = fopen(FileName, "w"))==NULL){ 16

:و يصبح على الشكل التايل

if((FileOut = fopen(FileName, "a"))==NULL){ 16

142

.appending يعين a و احلرف

: اإلدخال يف امللفات٢,٧,٣

امللف الرأسي الـسابق يف نفس .و يف امللفات هي قراءة حمتوى ملف و استعماله يف الربنامج اإلدخال تعين القراءة،

fileio.h قم بإضافة التايل:

void DisplayFile(const char *FileName) { FILE *FileIn; char String[1024]; if(*FileName == '\0') { printf("Error in name of file!\n"); exit(1); } if((FileIn = fopen(FileName, "r"))==NULL){ printf("Can't Open file!\n"); exit(1); }else{ fgets(String, 1024, FileIn); printf("%s", String); } fclose(FileIn); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

إنشاء دالة تقوم بعرض حمتوى ملف: ٢,٧,٤الربنامج وسـيط الدالة حتتوي علـى .هنا نكون قد أعلنا عن الدالة اليت ستقوم بقراءة امللفات، و هي مشابه بدالة إنشاء امللفات

الرابع قمنا باإلعالن عن مصفوفة و هناك نقوم بوضع نص يف السطر .واحد و هو سلسلة حرفية السم امللف املراد قراءته يف السطر السادس عشر .read يعين r ، احلرف w بدل r استعملنا النمط fopen يف السطر الثاين عشر، يف الدالة .امللف

، وسـائط ة ، هلا ثالثfile get stringو هي خمتصرة من stdio.h و هي من دوال امللف الرأسي، fgets استعملنا الدالة fgets تقوم الدالة .FILE *FileIn الثاين حلجم السلسلة و الثالث ملؤشر ملف اإلدخال، األول السم السلسلة احلرفية

، مث طبـع عبارة عن سلسلة حروف األول و الذي هو وسائط يف ال ) الثاين وسائطحبجم ال (بوضع سلسلة حروف امللف .يف السطر السابع عشرسلسلة حروف

:main.c يف امللف الرأسي الرئيسي ()main بإضافة األوامر التالية يف اية الدالة الرئيسيةو اآلن قم

printf("/////////Reading\\\\\\\\\n"); DisplayFile(FileName);

1 2

143

.امللفحمتوى الستعراضو هنا استعملنا الدالة

:+r و +a و +w النمط٢,٧,٤

و اآلن سنرى نفـس ،)لقراءة ملف ( r و ) ملف ايةإلضافة نص يف ( a و )للكتابة( w درسنا سابقا كل من األمناط :األمناط السابقة مع إضافات و هي

:+w النمط٢,٧,٤,١

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

:+a النمط٢,٧,٤,٢

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

:+r النمط٢,٧,٤,٣

.هذا النمط للقراءة و الكتاب و لكن جيب أن يكون امللف موجود .اليت تستعمل بكثرةن غري مهمة، األمناط السابقة هي املهمة و ها و لك،d و b، s، r، t و توجد أمنط أخرى و هي

: خاصة بالتعامل مع امللفات دوال أخرى٢,٧,٥

،stdio.h و مجيعها من دوال امللف الرأسي توجد دوال عديدة لتعامل مع امللفات و كلها شبيه باليت قرأا سابقا، :الدوال هي

:fscanf الدالةو fprintf الدالة٢,٧,٥,١

و ،file scan file و هي خمتصرة مـن scanf فهي مكافئة للدالة fscanf لةدرسنها سابقا، أما الدا fprintf الدالة : سريع مثالأي أا خاصة باإلدخال للملفات،، ملف قيم منبل تأخذها من، ال تأخذ قيم من املستخدم هنالكنها

#include<stdio.h> main() { FILE *FileOut;

1 2 3 4 5

144

char Str[100]; int Var; FileOut = fopen("fscanf.txt", "w+"); fprintf(FileOut, "%s %d", "Hello", 255); fseek(FileOut, 0, SEEK_SET); fscanf(FileOut, "%s", Str); fscanf(FileOut, "%d", &Var); printf("%s\n", Str); printf("%d\n", Var); fclose(FileOut); }

6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

fscanf و الدالة fprintf إستعمال الدالة :٢,٧,٥الربنامج ، ١٠٠ يف السطر السادس سلسلة حرفية حبجم .FileOut باسم FILE يف السطر اخلامس قمنا باإلعالن عن مؤشر للبنية

يف السطر التاسع .وجودة يف امللف يف السطر السابع متغري و هو الذي سيحمل القيمة امل .و هي اليت ستحمل نص امللف يف السطر احلادي عشر وضعنا يف امللـف سلـسلة .قمنا بوضع اسم امللف الذي سنفتحه و نقرأ منه البيانات املوجودة

و هي من دوال امللـف الرأسـي fseek يف السطر الثالث عشر توجد دالة و هي .٢٥٥ و القيمة Hello حرفية و هي

stdio.h و هي خمتصرة من file seek وسـائط ، و هي حترك مؤشر امللف إىل مكان يقوم بتحديده املربمج، هلا ثالثـة لكي يـتم ٠ الثالث و غالبا ما تكون وسيطو الثاين هو عدد البايتات اليت يبدأ منها ال FILEاألول هو اسم ملؤشر البنية :بت و هي الثالث هو وضع املؤشر و له ثالثة ثواوسيطقراءة مجيع البيانات، و ال

١. SEEK_SET ؤشر امللف يف البدايةو هو وضع م.

٢. SEEK_CUR و هو املوقع احلايل ملؤشر امللف.

٣. SEEK_END ايته و هو وضع مؤشر امللف يف.

الثـاين وسيطيف ال ٠ كي نبدأ بقراءة بيانات امللف من البداية و وضعنا القيمة SEEK_SET و يف مثالنا السابق استعمالنا

و يف السطر الرابع عشر قمنا بفحص سلسلة احلروف املوجود يف امللف و نـسخه يف .مجيع البيانات كي نقرأ نفحص و نسخه يف املتغري ٢٥٥ يف السطر اخلامس عشر قمنا بفحص العدد الصحيح .Hello ، و هو النص Str السلسلة احلرفية

Var. و يف السطر الثامن عشر و التاسع عشر قمنا بطباعة النتائج.

:fputs و fgets الدالة٢,٧,٥,٢

145

و لكنها خاصة بامللفات و هي خمتصرة مـن puts هي مكافئة للدالة fputs درسنها سابقا، و الدالة fgets الدالةfile put stringو هي تقوم بطباعة النصوص يف امللفات و ليست مثل الدالة ، puts حيث تقوم بطباعـة نـص علـى

:fputs الشاشة، مثل سريع حول الدالة

#include<stdio.h> main() { FILE *FileOut; FileOut = fopen("fputs.txt", "w"); fputs("Hello, World!\n", FileOut); fclose(FileOut); }

1 2 3 4 5 6 7 8 9 10 11

fputs الدالةإستعمال : ٢,٧,٦الربنامج ـ وسيطاألول هو النص املراد طبعه، و ال وسيطحيث ال fputs استعملنا الدالة يف السطر التاسع ر الثاين هو اسـم املؤش

FileOut حيث فيه سيتم طباعة النص.

:fputc الدالةو fgetc الدالة٢,٧,٥,٣

:قوم بطباعة حرف واحد إىل ملف معني، مثالت fputc تأخذ حرف واحد من ملف، و الدالة fgetc الدالة

#include<stdio.h> main() { FILE *FileOut; FILE *FileIn; char ch; FileOut = fopen("fputc.txt", "w"); FileIn = fopen("fputc.txt", "r"); fputc('A', FileOut); fclose(FileOut); ch = fgetc(FileIn); fclose(FileIn); printf("%c\n", ch); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

fputc و الدالة fgetc الدالةإستعمال : ٢,٧,٧الربنامج

146

و ميكـن .فسترى نتائج غري مرغوب ا، و هنا ستعرف أمهيتـها fclose الدالة ن مل تستعمل إيف السطر الثالث عشر :كتابة املثال السابق على هذه الطريقة

#include<stdio.h> main() { FILE *FileInOut; char ch; FileInOut = fopen("fputc.txt", "w"); fputc('A', FileInOut); fclose(FileInOut); FileInOut = fopen("fputc.txt", "r"); ch = fgetc(FileInOut); fclose(FileInOut); printf("%c\n", ch); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

)٢( fputc و الدالة fgetc الدالةال إستعم: ٢,٧,٨الربنامج هذه هي الدوال املهمة حاليا يف العامل مع امللفات، توجد دوال أخرى كثرية حول التعامل مع امللفات و سندرسـها يف

.C درس املكتبة القياسية للغة

: األخطاء احملتملة٢,٧,٦ . ال توجد أخطاء حمتملة يف هذا الدرس

:متارين ٢,٧,٧ results.dat يقوم بعمليات اجلمع و الطرح الضرب و القسمة، و يتم حفظ النتـائج يف ملـف تب برنامج أك .١

.تلقائيا

147

، و املـتغريات يف ا هي جمموعة من متغري واحد أو أكثر جتمع حتت اسم واحد يسهل استعماهل )البنيات(التراكيب

تكون به متغريات خمتلفة األنواع، و التراكيب ميكن أن حتمل أي التراكيب ليس مثل املتغريات يف املصفوفات، ميكن أن حىت مصفوفات أو مؤشرات أو تراكيب داخل تراكيب أخرى، و مجيع املتغريات املوجود داخل C نوع من متغريات لغة

.التراكيب تسمى بأعضاء لتراكيب

و نقوم بفتح حاضنة و نكتب املتغريات و الثوابت مث اسم البنية struct لإلعالن عن بنية نقوم بكتابة الكلمة احملجوزة : فاصلة منقوطة، صورة توضيحيةوضعمث نغلق احلاضنة مع )األعضاء(اليت نريدها

طريقة اإلعالن عن بنية: ٢,٨,١الشكل :Struct Name اسم البنية ٢,٨,١

:اسم البنية له شروط مثل شروط اسم املتغري و هي . حرف٣١أكثر من البنية أن ال يتجاوز اسم § .بأرقام البنيةأن ال يبدأ اسم § ....حيتوي على مؤثرات مثل اجلمع و الطرح و البنيةأن ال يكون اسم § .)_ الرمز ءباستثنا(...و } و # و %حيتوي على رموز مثل البنيةأن ال يكون اسم § .رىأن ال يكون اسم البنية مستعمل سابقا السم دالة أو متغري أو بنية أخ § .أن ال يكون اسم البنية من أحد أمساء الكلمات احملجوزة §

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

148

#include<stdio.h> struct _2D { int x; int y; }; main() { struct _2D Struct_2D; int x, y; printf("Enter X: "); scanf("%d", &Struct_2D.x); printf("Enter Y: "); scanf("%d", &Struct_2D.y); for(x=0;x<=Struct_2D.x;x++) { printf("%c", 219); for(y=0;y<Struct_2D.y;y++) printf("%c", 219); printf("\n"); } }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

طريقة اإلعالن و إستعمال البنيات: ٢,٨,١ج الربنام يف السطر الثالث قمنا باإلعالن عن البنيـة .هذا الربنامج يقوم برسم املربعات حسب القيم اليت يقوم بإدخاهلا املستخدم

_2D. يف السطر اخلامس و السادس قمنا باإلعالن عن متغريين و x و y 2_ عضوين للبينة ان ، حيث يعتربD. يف الـسطرو الـذي سـيتم Struct_2D و االسم 2D_ مع اسم البنية السابقة struct احلادي عشر قمنا بكتابة الكلمة احملجوزة

، و ال ميكن اسـتعمال struct بدون الكلمة احملجوزة 2D Struct_2D_العمل عليه يف هذا الربنامج، و ال ميكن كتابةأمـا بـاقي . هذا ايف برناجمن Struct_2D و اليت هي 2D_ ذا جيب أن نقوم بإعالن عن متغري للبنية مباشرة ل 2D_ البنية

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

struct _2D Struct_2D_1, Struct_2D_2;

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

struct _2D 1

149

{ int x; int y; }Struct_2D;

2 3 4 5

:ية فنفصل بني اسم و اسم بفاصلة مثلو يف حالة نريد التعريف عن أكثر من اسم البن

struct _2D { int x; int y; }Struct_2D_1, Struct2D_2;

1 2 3 4 5

:و يصبح املثال على الشكل التايل

#include<stdio.h> struct _2D { int x; int y; }Struct_2D; main() { int x, y; printf("Enter the position X: "); scanf("%d", &Struct_2D.x); printf("Enter the position Y: "); scanf("%d", &Struct_2D.y); for(x=0;x<=Struct_2D.x;x++) { printf("%c", 219); for(y=0;y<Struct_2D.y;y++) printf("%c", 219); printf("\n"); } }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

)٢(طريقة اإلعالن و إستعمال البنيات : ٢,٨,٢الربنامج :و توجد طرق أخرى لتعامل مع البنيات، مثال ميكن إعطاء قيمة سابقة ملتغري يف بنية و استعماله يف الربنامج، مثال

#include<stdio.h> struct _Value

1 2 3

150

{ int x; float y; char *Str; }Value; main() { Value.x = 10; Value.y = 10.00; Value.Str = "Hello, World"; printf("%d\n", Value.x); printf("%f\n", Value.y); printf("%s\n", Value.Str); }

4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

)٣( بنياتطريقة اإلعالن و إستعمال ال: ٢,٨,٣الربنامج :أو ميكن إعطاء القيم مباشرة بعد التعرف عن اسم للبنية مثل

#include<stdio.h> struct _Value { int x; float y; char *Str; }Value = {10, 10.00, "Hello, World"}; main() { printf("%d\n", Value.x); printf("%f\n", Value.y); printf("%s\n", Value.Str); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

إعطاء قيم ألعضاء بنية مباشرة بعد التعري عن إسم املبنية: ٢,٨,٤الربنامج :و ال ميكن إعطاء قيمة عند اإلعالن عن البنية مثل

struct _Value { int x = 10; float y = 10.00; char *Str = "Hello World"; };

1 2 3 4 5 6

:و ال معىن الستعمال البنية أصال ألنه ميكن كتابة Value_ ة ال معىن للبنيةألن يف هذه احلال

#include<stdio.h>

1 2

151

int x = 10; float y = 10.00; char *Str = "Hello World"; main() { printf("%d\n", x); printf("%f\n", y); printf("%s\n", Str); }

3 4 5 6 7 8 9 10 11 12

أفضل من إستعمال أعضاء البنية: ٢,٨,٥الربنامج :union البنيات باستخدام الكلمة احملجوزة٢,٨,٢

بنفس الطرق السابقة، و الفرق الوحيد بني استعمال union ميكنننا اإلعالن عن البنيات باستعمال الكلمات احملجوزة unionهو عند اسـتعمال البنيـات باسـتخدام union و الكلمة احملجوزة struct البنية باستخدام الكلمة احملجوزة

:مثال أنظر إىل املثال التايل struct فالنتائج لن تكون مثل البنيات اليت بـ

#include<stdio.h> union _Union { int x; int y; }Union; main() { Union.x = 10; Union.y = 15; printf("Union.x = %d\n", Union.x); printf("Union.z = %d\n", Union.y); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

union إستخدام بنية معرفة بـطريقة : ٢,٨,٦الربنامج :و أيضا ستختلف النتائج إن استعملت التايل، ١٥ ١٥ فسيتكون ١٥ ١٠يف هذا الربنامج بدل أن تكون النتائج

#include<stdio.h> union _Union { int x; int y; }Union; main() { Union.y = 15; Union.x = 10;

1 2 3 4 5 6 7 8 9 10 11 12 13

152

printf("Union.x = %d\n", Union.x); printf("Union.z = %d\n", Union.y); }

14 15 16

)٢( unionطريقة إستخدام بنية معرفة بـ : ٢,٨,٧الربنامج و البنيات باسـتخدام الكلمـة احملجـوزة struct ستنتاج الفرق بني البنيات باستخدام الكلمة احملجوزة كنك اآلن ا مي

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

#include<stdio.h> union _Union { int x1, x2; int y1, y2; }Union; main() { Union.x1 = 10; printf("Value of Union.x1 = %d\n", Union.x1); printf("Value of Union.x2 = %d\n", Union.x2); printf("Value of Union.y1 = %d\n", Union.y1); printf("Value of Union.y2 = %d\n", Union.y2); printf("Address of Union.x1 = %p\n", &Union.x1); printf("Address of Union.x2 = %p\n", &Union.x2); printf("Address of Union.y1 = %p\n", &Union.y1); printf("Address of Union.y2 = %p\n", &Union.y2); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

)٣( unionطريقة إستخدام بنية معرفة بـ : ٢,٨,٨الربنامج :، مثالموثوقةا متغريات خمتلفة األنواع فستكون النتائج غري union عند استعمال بنيات باستخدام الكلمة احملجوزةو

#include<stdio.h> union _Union { int x; float y; }Union; main() { Union.x = 10; Union.y = 15.00; printf("Union.x = %d\n", Union.x); printf("Union.z = %f\n", Union.y); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

153

)٤( unionطريقة إستخدام بنية معرفة بـ : ٢,٨,٩الربنامج جفستكون نتيجتها غري مرغوبة، و ميكنك اسـتنتا x ريا املتغ مستكون صحيحة، أ y متغري العدد احلقيقي بالنسبة لنتيجة

.السبب : املصفوفات و املؤشرات على البنيات٢,٨,٣

بل أقصد البنية نفسها، بالنسبة للمصفوفات مع البنية فهي ، ال أقصد بنية ا أعضاء من نوع مصفوفات أو مؤشرات :شبيه بطريقة اإلعالن عن مصفوفات طبيعية، مثال

#include<stdio.h> struct _Arr { int x; }Arr[2]; main() { Arr[0].x = 10; Arr[1].x = 20; printf("Arr[0].x = %d\n", Arr[0].x); printf("Arr[1].x = %d\n", Arr[1].x); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

املصفوفات على البنيات: ٢,٨,١١الربنامج :و أيضا ميكن كتابة

struct _Arr { int x; }Arr[2] = {10, 20};

1 2 3 4

:بدل

Arr[0].x = 10; Arr[1].x = 20;

1 2

، أو أكثر بنفس الطرق السابقة اليت درسنها يف درس املصفوفات ثنائية أو ثالثية األبعاد مصفوفة لبنية و ميكن أيضا كتابة

: ألنواع عديدة مثلو ميكن أيضا كتابة مصفوفة لبنية حتتوي على متغريات

154

#include<stdio.h> struct _Arr { int x; float y; char *Str; }Arr[2] = { {10, 10.00, "Str1"}, {20, 20.00, "Str2"} }; main() { /*Arr[0] :*/ printf("Arr[0].x = %d\n", Arr[0].x); printf("Arr[0].y = %f\n", Arr[0].y); printf("Arr[0].Str = %s\n", Arr[0].Str); /*Arr[1] :*/ printf("Arr[1].x = %d\n", Arr[1].x); printf("Arr[1].y = %f\n", Arr[1].y); printf("Arr[1].Str = %s\n", Arr[1].Str); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

)٢( البنياتاملصفوفات على: ٢,٨,١٢الربنامج :و هذا مثال للمؤشرات

#include<stdio.h> struct _ptr { int x; }Addr_ptr, *ptr; main() { ptr = &Addr_ptr; ptr->x = 10; printf("ptr->x = %d\n", ptr->x); /*Or*/ (*ptr).x = 20; printf("(*ptr).x = %d\n", (*ptr).x); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

املؤشرات على البنيات: ٢,٨,١٣الربنامج

155

طريقة استعمال مؤشر لبنية ختتلف قليال عن استعمال مؤشرات طبيعية، بالنسبة لإلعالن فهي نفسها، أما إعطاء العنوان و يف السطر احلادي عشر .Adrr_ptr عنوانا و هو عنوان البنية ptr يف السطر العاشر أعطينا للمؤشر .و القيمة ختتلف .مث اسم العضو، مث قيمته <- ، و يتم إعطاء قيم ألعضاء مؤشر بنية عرب الرمزين١٠ القيمة x أعطينا للعضو

:بنية داخل بنيةإعالن ٢,٨,٤

يم استعمال بنية داخل بنية، مثال إذا أردنا أن نرسم خط مستقيم، هذا حيتاج إىل نقتطني، األوىل هي بداية املستق ميكن :مثال ،y و x و الثانية هي اية املستقيم، و جيب أن يكون لكل نقطة مكاا على شاشة احلاسوب يف كل من

#include<stdio.h> struct _line { struct _point { int x; int y; }point_1, point_2; }line; main() { /*point 1:*/ line.point_1.x = 10; line.point_1.y = 10; /*point 2:*/ line.point_2.x = 100; line.point_2.y = 10; }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

إعالن بنية داخل بنية: ٢,٨,١٤الربنامج كـي كتابتها مباشرة عند point_ ، و جيب أن نقوم بالتعرف ألمساء line_ داخل البنية point_ البنيةو هنا استعملنا

.y و x نستطيع استعمال املتغريين

: األخطاء احملتملة٢,٨,٥ :ال ميكن استعمال بنية مباشرة مثل .١

#include<stdio.h> struct Struct { int x, y; };

1 2 3 4 5 6 7

156

main() { Struct.x = 10; Struct.y = 20; }

8 9 10 11 12

١اخلطأ : ٢,٨,١٥الربنامج .نفس االسممن اإلعالن عن بنيتني ال ميكن .٢

: متارين٢,٨,٦، و نطلب من املـستخدم int و كلها من النوع hh, mm, ssا ثالثة أعضاء و هي time بنية بسمأكتب .١

ـ time إدخال الساعة و الدقيقة و الثانية احلالية و نعطي تلك القيم للبنية الـساعة علـى الطريقـة عمث نطب

HH :MM :SS.

157

، و ذلك يعين أنه عند & ، و قلنا أنه جيب أن نعطيه اسم متغري مع مؤثر العنوان scanf درسنا سابقا دالة اإلدخال

:كتابة

#include<stdio.h> main() { int i; scanf("%d", &i); }

1 2 3 4 5 6 7 8

scanfالدالة : ٢,٩,١الربنامج و ميكن كتابة املتغري بـدون تتعامل مع املؤشرات، scanf ألن الدالة ،i عنوان املتغري قيمة املدخلة يف فهنا سيتم وضع ال

. و لكن النتائج لن تكون صحيحةمؤثر،

:void وسيط معىن دالة ا ٢,٩,١

:مثل void وسيطأحيانا ما جتد يف بعض األمثل دوال ا

#include<stdio.h> Function(void); main() { } Function(void) { }

1 2 3 4 5 6 7 8 9 10 11 12 13

void وسيطمعىن دالة ا : ٢,٩,٢الربنامج :، مثالوسيطأو جتد الدالة الرئيسية نفسها ا هذا ال

main(void) { }

1 2 3 4

)٢( void وسيطمعىن دالة ا : ٢,٩,٣الربنامج

158

هو معىن كتابة دوال ا و هذ إجنليزية و هي تعين فراغ، void ة اخلاص ا ال يعين شيء، و كلم وسيطال مثل هذه الدوال ، و مثل تلك الدوال ميكن جتاهل كتابـة الكلمـة وسائطالتأكيد على أن الدالة فارغة ال من هذا النوع، يعين وسيطا

:، حيث أن كال من هذه األمثلةvoidاحملجوزة

#include<stdio.h> Function(); main() { } Function() { }

1 2 3 4 5 6 7 8 9 10 11 12 13

)٣( void وسيطمعىن دالة ا : ٢,٩,٤الربنامج : املثالو

main() { }

1 2 3 4

)٣( void وسيطمعىن دالة ا : ٢,٩,٥الربنامج .مكافئة لألمثلة السابقة

:static الكلمة احملجوزة٢,٩,٢ : ثابت بطرقة ستفهمها من هذا املثالاتغريات حيث جتعلهتعين ساكن و هي تستعمل مع امل static كلمة

#include<stdio.h> main() { int x; for(x=0; x<10; x++) { static int Static = 0; Static++; printf("%d\n", Static); }

1 2 3 4 5 6 7 8 9 10 11 12 13

159

} 14 static حملجوزةالكلمة اطريقة إستعمال : ٢,٩,٦الربنامج

، و اسـتعملنا ٠ داخل حلقة و أعطيناه القيمة Static مع املتغري static استعملنا الكلمة احملجوزة يف السطر التاسع إذا قمنـا بإزالـة .، و يف السطر الثاين عشر قمنا بطباعة النتائج Static مؤشر الزيادة يف السطر العاشر مع نفس املتغري

عشرة مرات، أما عند استعماهلا فسترى أن ١ فستكون النتائج ثابتة و هي Static من املتغري static الكلمة احملجوزة :بكثرة يف الدوال، مثال static و تستعمل الكلمة احملجوزة .النتيجة غري ثابتة و تعمل بتزايد

#include<stdio.h> int Test_static(int a); main() { int i; for(i=0;i<=10;i++) printf("%d * %d = %d\n", i, i, Test_static(i)); } int Test_static(int a) { static int c = 0; int a_c = a*c; c++; return a_c; }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

)٢( static الكلمة احملجوزةطريقة إستعمال : ٢,٩,٧الربنامج فـستكون static إن مل نقم بتحديد قيمة ملتغري .٠ فستكون مجيع النتائج static لة الكلمة احملجوزة حالة إزا و يف .تلقائيا، و ليس مثل املتغريات الطبيعية اليت تنتج قيم عشوائية ٠ قيمته

:typedef الكلمة احملجوزة٢,٩,٣

هي تعطي إمكانيات اإلعالن عنها مثل البنية، مع كل من املتغريات و البنيات، و typedef تستعمل الكلمة احملجوزة :مثال

#include<stdio.h> typedef int Decimal; main() { /* or typedef int Decimal; here */

1 2 3 4 5 6 7

160

Decimal Var_1, Var_2; Decimal Var_3; Var_1 = 10; Var_2 = 20; Var_3 = Var_1 + Var_2; printf("%d\n", Var_3); }

8 9 10 11 12 13 14 15 16

typedef الكلمة احملجوزةطريقة إستعمال : ٢,٩,٨الربنامج يف الـسطر .Decimal باسـم typedef مع الكلمة احملجوزة int الثالث قمنا باإلعالن عن متغري من نوع يف السطر

و تعاملنـا معـا تلـك Var_3 و Var_2 و Var_1 لإلعالن عن املتغريات Decimal استعملنا املتغري و التاسع الثامنحيث حجمها سـيكون Decimal بـ int و يف مثالنا هذا استبدلنا الكلمة احملجوزة .املتغريات كأي كتغريات أخرى

:أما بالنسبة للمبنية فهي نفسها مشابه مثال .قيمحجم النوع الذي مت اإلعالن به، و ال ميكن إعطاءها

#include<stdio.h> struct _2D { int x, y; }; main() { struct _2D A; struct _2D B; A.x = 10; B.y = 20; printf("%d\n", A.x); printf("%d\n", B.y); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

)٢( typedef الكلمة احملجوزةطريقة إستعمال : ٢,٩,٩الربنامج :مرونة من السابقة، مثالو لكنها جتعلها أكثر

#include<stdio.h> typedef struct _2D { int x, y; }Struct1, Struct2; main() { Struct1 S1_1, S1_2; Struct2 S2_1, S2_2;

1 2 3 4 5 6 7 8 9 10 11 12

161

S1_1.x = 10, S1_2.x = 20; S2_1.y = 30, S2_2.y = 40; }

13 14 15

)٣( typedef الكلمة احملجوزةطريقة إستعمال : ٢,٩,١٠الربنامج :فال ميكن إعطاءها قيم سابقة مثل typdef متغريات أو دوال أو بنيات مع الكلمة احملجوزةعند استعمال: مالحظة

#include<stdio.h> main() { typedef float PI; PI = 10.00; printf("%f\n", PI); }

1 2 3 4 5 6 7 8

)٤( typedef الكلمة احملجوزةطريقة إستعمال : ٢,٩,١١ج الربنام

: برامج تدريبية٢,٩,٤ بشكل مبسط، مع شرح سريع لكـل C فهم لغة يف هذا اجلزء من الدرس سنرى بعض الربامج اليت ستساعدك على

:برنامج

:النسخ الربنامج األول، ٢,٩,٤,١

:حروف إىل سلسلة حروف أخرى فارغة، املثاليف هذا الربنامج نقوم بكتابة دالة تقوم بنسخ سلسلة :str.h امللف

/*string.h strcopy(pointers) */ void strcopy(char *From, char *To){ while((*To++ = *From++)!='\0') ; } /*strcopy(arrays); void strcopy(char From[], char To[]){ int i; i = 0; while((To[i] = From[i])!='\0') ++i; }*/

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

str.h امللف، النسخ: ٢,٩,١٢الربنامج

162

:امللف الرئيسي

/*main.c*/ #include<stdio.h> #include"str.h" main() { char *From = "STRING"; char Empty[6]; strcopy(From, Empty); printf(Empty); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14

النسخ، امللف الرئيسي: ٢,٩,١٣الربنامج كـي Empty ، مث نطبع حمتوى السلـسلة Empty إىل السلسلة From ما هو موجود يف السلسلة هنا الدالة ستقوم بنسخ

.نتأكد من النتائج

:وسيطنيقيم بني تبادل٢,٩,٤,٢

الثـاين يف وسيط الثاين و قيمة ال وسيط األول يف ال وسيطقوم بوضع قيمة املتغري ال يف هذا الربنامج نقوم بإنشاء دالة ت : األول، املثالوسيطال

#include<stdio.h> void Change(int *a, int *b) { int c; c = *a; *a = *b; *b = c; } main() { int a, b; a = 5; b = 10; printf("a = %d, b = %d\n", a, b); Change(&a, &b); printf("a = %d, b = %d\n", a, b); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

163

وسيطنيتبادل قيم بني : ٢,٩,١٤الربنامج مـل مـع و هنا نرى فائدة التعاامج ستكون خاطئة،فإن النتائج الربن a, *b* يف مكان املؤشرين اتإذا استعملنا متغري .عناوين الذاكرة

:ابتو ث التغري يف قيم٢,٩,٤,٣

:مثال لكن عرب املؤشرات ميكننا ذلك، قلنا سابقا أنه ال ميكن التغري يف قيم ثوابت، و

#include<stdio.h> main() { const int Const = 10; int *ptr = &Const; printf("Const = %d\n", Const); *ptr = 5; printf("Const = %d\n", Const); }

1 2 3 4 5 6 7 8 9 10 11 12

تغري قيمة ثابت: ٢,٩,١٥الربنامج : عكس سلسلة نصية٢,٩,٤,٤

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

#include<stdio.h> #include<string.h> void Reverse_Str(char *); main() { char *str = "Hello, World!"; printf("%s\n", str); Reverse_Str(str); printf("%s\n", str); } void Reverse_Str(char *String){ int i = strlen(String)-1, j = 0; char ch; while(j<i){ ch = String[j];

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

164

String[j] = String[i]; String[i] = ch; j++, i--; } }

21 22 23 24 25

عكس سلسلة نصية: ٢,٩,١٦الربنامج : التحويل من النظام العشري إىل النظام الثنائي٢,٩,٤,٥

: باقي األنظمة، املثالمن خالل هذا الربنامج ميكنك استنتاج كيفية التحويل إىل

#include<stdio.h> void ConvertToBinary(int); main() { int Decimal; printf("Decimal Number: "); scanf("%d", &Decimal); printf("%d in Binary = ", Decimal); ConvertToBinary(Decimal); } void ConvertToBinary(int num){ int i = 0, Binary[32]; while(num>0){ if((num%2)==0){ Binary[i] = 0; num /= 2, ++i; } else { Binary[i] = 1; num /= 2, ++i; } } --i; while(i>=0) { printf("%d", Binary[i]), --i; } printf("\n"); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

التحويل من النظام العشري إىل النظام الثنائي: ٢,٩,١٧الربنامج : التحويل من احلروف الصغرية إىل احلروف الكبرية٢,٩,٤,٦

165

: الصغرية إىل احلروف الكبرية، املثاليف هذا الربنامج نقوم بإنشاء دالة تقوم بتحويل سلسلة حرفية من احلروف

#include<stdio.h> void To_Capital_letter(char ch[]); main() { char *ch = "hello"; printf("Small Letters: %s\n", ch); To_Capital_letter(ch); printf("Capital Letters: %s\n", ch); } void To_Capital_letter(char ch[]) { int i=0; while(ch[i]!='\0'){ if(ch[i]>=97 && ch[i]<=122) ch[i] = ch[i]-32; ++i; } }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

التحويل من احلروف الصغرية إىل احلروف الكبرية: ٢,٩,١٨الربنامج .حرف الكبرية إىل األحرف الصغرية، استنتج ذلكو ميكن أيضا استعمال العكس، من األ

:wcsncpy و الدالة wcscpy الدالة٢,٩,٥

wide character و امسها خمتصر من string.h و هي من دوال امللف الرأسي strcpy مكافئة للدالة wcscpyالدالة

string copyتقوم بنفس عمل الدالة ، strcpy فقط هي لألحرف العريضة، مثال:

#include<stdio.h> #include<string.h> main() { wchar_t *wStr = L"Hello"; wchar_t Empty[20]; wcscpy(Empty, wStr); wprintf(L"%s\n", Empty); }

1 2 3 4 5 6 8 9 10 11 12 13

wcscpy الدالةطريقة إستعمال : ٢,٩,١٩الربنامج :، مثالstring.h و هي من دوال امللف الرأسي strncpy مكافئة للدالة wcsncpy و أيضا الدالة

166

#include<stdio.h> #include<string.h> main() { wchar_t *wStr = L"Hello"; wchar_t Empty[20]; wcsncpy(Empty, wStr, 4); wprintf(L"%s\n", Empty); }

1 2 3 4 5 6 7 8 9 10 11 12

wcsncpy الدالةمال طريقة إستع: ٢,٩,٢٠الربنامج :wcsncat و الدالة wcscat الدالة٢,٩,٦

:، مثالstrncat و strcat مكافئة للدالتني wcsncat و wcscat و كال من الدالتني

#include<stdio.h> #include<string.h> main() { wchar_t *wStr = L"Hello"; wchar_t *wStr2 = L", World!"; wcscat(wStr, wStr2); wprintf(L"%s\n", wStr); /* wcsncat(wStr, wStr2, 4); wprintf(L"%s\n", wStr); */ }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

wcsncat و الدالة wcscat الدالةطريقة إستعمال : ٢,٩,٢١الربنامج

:putwchar و getwchar الدالة٢,٩,٧

get wide، وامسها خمتصر مـن stdio.h ، و هي من دوال امللف الرأسيgetchar ئة لدالةمكاف getwchar الدالة

characterو أيضا الدالة ، putwchar مكافئة لدالة putcharو خمتصرة من ، put wide characterمثال ،:

#include<stdio.h> main() { wchar_t wch; wch = getwchar();

1 2 3 4 5 6 7

167

putwchar(wch); }

8 9

putwchar الدالةو getwchar الدالةطريقة إستعمال : ٢,٩,٢٢الربنامج :putws_ و getws_ الدالة٢,٩,٨

، stdio.h، و مها من دوال امللف الرأسي puts مكافئة لدالة putws_ ، و الدالة gets مكافئة لدالة getws_ الدالة :، مثالwide string خمتصرين من ws و كل من احلرفني اإلضافيني

#include<stdio.h> main() { wchar_t wch[255]; _getws(wch); _putws(wch); }

1 2 3 4 5 6 7 8 9

putws_ الدالةو getws_ الدالةطريقة إستعمال : ٢,٩,٢٣الربنامج :)صورة( ASCIIجدول ٢,٩,٩

هو جدول موعة من الرمـوز ، American Standard Code for Information Interchange خمتصرة من ASCII كلمة : ، الرموز على اجلدول التايلاحلاسبات متثل رموز يف مستندة على األجبدية الرومانية

: بكتابة التايلعمل أي رمز من الرموز السابقة قمإذا أردت است

#include<stdio.h> main() { printf("The number %d is the character %c in ASCII code.\n", 210, 210); }

1 2 3 4 5 6

أسكيطباعة حرف عرب رقمه يف جدول : ٢,٩,٢٤الربنامج ، و ميكن اختيار أي رمز من الرموز الـسابقة فقـط ╥ و هو الرمز ASCII من جدول ٢١٠و هنا سيتم طبع الرمز رقم

.)رمز( الرقم و نطبعه على شكل حرفنكتب

168

أسكيجدول : ٢,٩,١الشكل : معلومات أكثر حول املتغريات٢,٩,١٠

ة عامة، أما املتغريات احملليـة فصي متغريات عامة ميكن استعماهلا ب توجد متغريات خارجية و متغريات حملية، األوىل ه .فهي متغريات هلا حدودها

: املتغريات احمللية٢,٩,١٠,١

:اإلعالن عنها، مثالهي متغريات ميكن استعماهلا يف الدالة اليت مت

#include<stdio.h> void Func() { int a; /*Local Variable*/ } main() { int b; /*Local Variable*/ }

1 2 3 4 5 6 7 8 9 10 11

املتغريات احمللية: ٢,٩,٢٥الربنامج

169

aتغريات حملية حيث ال ميكن استعمال املـتغري يعتربا م يف الدالة الرئيسية b و املتغري Func يف الدالة a من املتغري هنا كل

، و main ألنه معرف يف الدالة Func يف الدالة b ، و ال ميكن استعمال املتغري Func يف الدالة الرئيسية ألنه خاص بالدالة .هذا هو مفهوم املتغريات احمللية

):العامة( املتغريات اخلارجية ٢,٩,١٠,٢

أي يف الربنامج بأكمله، و يتم اإلعالن عنها خارج مجيع الـدوال، ، يف مجيع الدوال هي متغريات ميكن التعامل معها :مثال

#include<stdio.h> int ab; /*External Variable*/ void Func() { ab = 10; /*Use The External Variable ab*/ } main() { Func(); printf("%d\n", ab); /*print The External Variable ab*/ }

1 2 3 4 5 6 7 8 9 10 11 12 13 14

املتغريات اخلارجية: ٢,٩,٢٦نامج الربمث Func قيمة يف الدالـة ab ، أعطني للمتغري هو املتغري العام للربنامج، حيث ميكن التعامل معه يف مجيع الدوال abاملتغري

إذا مل تكن للمتغريات .يف السطر الثالث عشر abملتغري اخلارجي يف الدالة الرئيسية مث طبع حمتوى ا Func قنا بتنفيذ الدالة . تلقائيا٠العامة قيم سابقة فستكون قيمها

:extern الكلمة احملجوزة٢,٩,١٠,٣

مع املتغريات داخل دوال، و تستعمل جلعل متغري حملي مشترك مع متغري خارجي، externتستعمل الكلمة احملجوزة : مثالبقيم خمتلفة،عن متغري حملي و متغري خارجي بنفس االسم و لكن مثال ميكننا اإلعالن

#include<stdio.h> int ab; void Func() { int ab; ab = 10;

1 2 3 4 5 6 7 8

170

printf("%d\n", ab); } main() { ab = 5; Func(); printf("%d\n", ab); }

9 10 11 12 13 14 15 16 17

extern الكلمة احملجوزةطريقة إستعمال : ٢,٩,٢٧الربنامج ، أما إذا أردنـا أن جنعـل ab ال عالقة له مع املتغري اخلارجي Func املوجود داخل الدالة ab احمللي يف هذا املثال املتغري

:إىل املتغري احمللي، مثال extern ضيف الكلمة احملجوزةنقيمتهما مشترك

#include<stdio.h> int ab; void Func() { extern int ab; ab = 10; printf("%d\n", ab); } main() { ab = 5; Func(); printf("%d\n", ab); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

)٢( extern الكلمة احملجوزةطريقة إستعمال : ٢,٩,٢٨الربنامج .ab املتغري الداخليهي نفس قيمة ab قيمة املتغري اخلارجيهنا ستكون

:auto الكلمة احملجوزة٢,٩,١٠,٤

املتغريات لتبني أن تلك أي آيل، و تستعمل مع automatic مع املتغريات، و هي تعين auto وزةتستعمل الكلمة احملج :، مثالstatic املتغريات افتراضية أي طبيعية و ليست ساكنة

#include<stdio.h> void Func() { static int Static = 0; auto int Auto = 0; printf("Static = %d\n", Static++); printf("Auto = %d\n", Auto++);

1 2 3 4 5 6 7 8 9

171

} main() { int i = 0; while(i<=3){ Func(); i++; } }

10 11 12 13 14 15 16 17 18 19 20

auto مة احملجوزةالكلطريقة إستعمال : ٢,٩,٢٩الربنامج .auto بدون استخدام الكلمة احملجوزة Auto املتغريو ميكن كتابة

:register الكلمة احملجوزة٢,٩,١٠,٥

العددية، و ال ميكن استعماهلا مع مصفوفات أو بنيات أو متغريات خارجية أو مـتغريات أيضا تستعمل مع املتغرياتتعين وضع تلك املتغريات يف سجل احلاسـوب، و سـجل registerوزة ساكنة، استعمال متغريات ا الكلمة احملج

:، مثال)CPU )Central Processing Unit وحدة املعاجلة املركزيةاحلاسوب موجود يف

#include<stdio.h> main() { register Reg_Var = 4; printf("Reg_Var = %d\n", Reg_Var); }

1 2 3 4 5 6 7 8

register الكلمة احملجوزةطريقة إستعمال : ٢,٩,٣٠الربنامج .و ال ميكن استعمال اإلدخال ملتغريات السجل

:sizeof الكلمة احملجوزة٢,٩,١١

أحجام البيانات، و منها ميكن معرفة احلجم الكامل املستعمل لربامج، تكون ةملعرف sizeof تستعمل الكلمة احملجوزة :ة أحجام أنواع املتغريات، مثال ملعرفbytes النتيجة بالبايت

#include<stdio.h> main() { int SizeOfArray[800];

1 2 3 4 5 6 7

172

printf("short = %d Byte(s)\n", sizeof(short)); printf("int = %d Byte(s)\n", sizeof(int)); printf("unsigned = %d Byte(s)\n", sizeof(unsigned)); printf("signed = %d Byte(s)\n", sizeof(signed)); printf("long = %d Byte(s)\n", sizeof(long)); printf("float = %d Byte(s)\n", sizeof(float)); printf("double = %d Byte(s)\n", sizeof(double)); printf("SizeOfArray = %d Byte(s)\n", sizeof(SizeOfArray)); }

8 9 10 11 12 13 14 15 16

sizeof الكلمة احملجوزةطريقة إستعمال : ٢,٩,٣١الربنامج .املثاليضا معرفة حجم مصفوفة كما يف وهنا ستتعرف على أحجام أنواع املتغريات اليت تريدها، و ميكن أ

:دعاء دالة لنفسها است٢,٩,١٢

رار، حيث نستدعي دالة من نفسها، إن مل تكون شروط يف الدالة فستكون الدالـة ميكننا إضافة هذه الطريقة إىل التك :بال اية، مثال

#include <stdio.h> void Func(int num) { printf("%d\n", num); Func(num+1); } main() { Func(5); }

1 2 3 4 5 6 7 8 9 10 11 12

استدعاء دالة لنفسها: ٢,٩,٣٢الربنامج قصى من القـيم يصل إىل احلد األ نا استدعينا الدالة لنفسها يف السطر السادس، و يف هذا الربنامج سيتم التكرار إىل أن ه

ألنه العدد األقصى الذي ميكن أن حيملـه ٦٥٥٣٥ اليت ميكن أن حيملها نوع املتغري، و ها سيتوقف الربنامج عند الرقم : حمدود نستعمل شرط مثل التايلاربتكر، لنجعل الدالة تقوم int num املتغري

#include <stdio.h> void Func(int num) { if(num <= 10) { printf("%d\n", num); Func(num+1); } }

1 2 3 4 5 6 7 8 9 10 11

173

main() { Func(5); }

12 13 14 15

)٢( استدعاء دالة لنفسها: ٢,٩,٣٣الربنامج .١٠ إىل العدد ٥لتكرار من العدد هنا سيقوم الربنامج با

:التحكم يف طباعة النتائج ٢,٩,١٣

ميكننا التحكم يف طريقة طبع النتائج، سواء كانت النتائج عبارة عن أرقام أو حروف، فمثال إذا ، printf يف الدالة : الطرق التاليةكان لدينا عدد حقيقي له أربعة أرقام وراء الفاصلة و ال نريد طباعة إال إثنني منها نستعمل

#include<stdio.h> main(int argc, char *argv[]){ char str[] = "Hello, World!"; float flt = 3.1415F; /*String*/ printf("%s\n", str); printf("%5s\n", str); printf("%-5s\n", str); printf("%5.5s\n", str); printf("%-5.5s\n", str); printf("\n"); /*Float number*/ printf("%10.0f\n", flt); printf("%.1f\n", flt); printf("%.2f\n", flt); printf("%.3f\n", flt); printf("%.4f\n", flt); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

طباعة النتائجالتحكم يفطريقة : ٢,٩,٣٤الربنامج .جرب كل واحدة من الطرق السابقة حىت تستنتج كل طريقة و فائدا

: األخطاء احملتملة٢,٩,١٤

. ال توجد أخطاء حمتملة يف هذا الدرس

: متارين٢,٩,١٥

174

.أكتب برنامج يقوم بالتحويل من النظام العشري إىل النظام السداسي عشر .١

.............................................................................. Enumeration احلساب ٣,١ .................................................... Command-line Arguments وسائط الدالة الرئيسية٣,٢ ............................................................... Directives(Preprocessor) التوجيهات ٣,٣ ........................................................................دوال ذات وسائط غري حمددة ٣,٤ ................................................................... Standard Library القياسية املكتبة ٣,٥

هلا الفصل، و مـا )و ال أقول بسيطة (، مل يبقى إىل أشياء صغرية Cاملطاف، هنا سننهي طريقنا يف لغة اية : مقدمة

.جعله يكون طويال هو املكتبة القياسية لكثرة دواهلا بالتوفيق إن شاء اهللا

:قال اهللا تعاىل ﴿ قل هل يستوي الذين يعلمون و الذين ال يعلمون ﴾

صدق اهللا تعاىل

176

، و يتم اإلعالن عنها باستخدام الكلمة احملجوزة int هو جمموعة من ثوابت أعداد صحيحة )Enumeration(احلساب

enum و اليت هي خمتصرة من enumeration ا للبنية يف اإلعالن عنها و طريقة التعامل معهاصورة و هذه .، و هي مشا :باتاستوضيحية لطريقة استعمال احل

طريقة اإلعالن عن احلساب: ٣,١,١ل الشك :Enumeration Name باساسم احل ٣,١,١

: البنيات و الدوال، و الشروط هي،ب شروط هي نفسها الشروط السابقة للمتغرياتاسسم احلال

. حرف٣١أكثر من احلساب أن ال يتجاوز اسم § .بأرقاماحلساب أن ال يبدأ اسم § ....ثرات مثل اجلمع و الطرح وحيتوي على مؤاحلساب أن ال يكون اسم § .)_ الرمز ءباستثنا(... و} و # و %حيتوي على رموز مثل احلساب أن ال يكون اسم § .حساب آخر بنية أو ، متغري،مستعمل سابقا السم دالةاحلساب أن ال يكون اسم § .اء الكلمات احملجوزةمسمن أحد أاحلساب أن ال يكون اسم §

:باسثوابت احل ٣,١,٢

177

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

:و هو enum لمة احملجوزةسنقوم اآلن بكتابة أبسط مثال لكيفية استعمال الك .الثوابت

#include<stdio.h> enum _COLOR { RED = 0, BLUE, GREEN }; main() { enum _COLOR Color; /*Color = RED;*/ Color = BLUE; /*Color = GREEN;*/ if(Color == RED){ printf("Color = %d\n", Color); }else if(Color == BLUE){ printf("Color = %d\n", Color); }else if(Color == GREEN){ printf("Color = %d\n", Color); }else printf("Error!\n"); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

enumطريقة إستعمال : ٣,١,١الربنامج :التاليةو ميكن أيضا كتابة املثال بالطريقة

#include<stdio.h> enum _COLOR { RED = 0, BLUE, GREEN }Color; main() { /*Color = RED;*/ Color = BLUE; /*Color = GREEN;*/ if(Color == RED){ printf("Color = %d\n", Color); }else if(Color == BLUE){

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

178

printf("Color = %d\n", Color); }else if(Color == GREEN){ printf("Color = %d\n", Color); }else printf("Error!\n"); }

19 20 21 22 23 24

)٢ (enumطريقة إستعمال : ٣,١,٢الربنامج :مثل كتابة COLOR_ حسابو ميكن أيضا إعطاء القيمة املختار مباشرة عند اإلعالن عن معرف لل

enum _COLOR Color = BLUE;

:أو كتابة

enum _COLOR { RED = 0, BLUE, GREEN }Color = BLUE;

ا قيم فهذا يعين enum عند استعمال الكلمة احملجوزة قلنا سابقا أنه .سنشرح اآلن املثال السابق مع القليل من التفاصيل

و ثوابـت الكلمـة .بثوابـت enum التغري فيها، و ميكن تسمية أعضاء الكلمة احملجوزة أن تلك القيم ثابتة و ال ميكن .int بكتابة أمساءها بدون كتابة نوعها، حيث قلنا سابقا أن نوعها هو أعداد صحيحةنقوم enum احملجوزة

و ميكن أن ال نعطـي .٢ يساوي GREEN و الثابت ١ يساوي BLUE و هذا يعين أن الثابت 0 القيمة RED أعطينا لثابت .تلقائيا إن مل تكن لديه قيمة سابقة ٠ ، ألنه يتم إعطاءه القيمة٠ القيمة RED للثابت

إن مل تكن لديها قيم، و هذا يعين ٠ فهنا ستصبح مجيع الثوابت السابقة حتمل القيمة ٠ القيمة BLUE أما إذا أعطينا لثابت و ميكن أن .١ فسيحمل القيمة GREEN أما الثابت ٠أيضا حيمل القيمة BLUE و الثابت ٠ سيحمل القيمة RED أن الثابت

:بات مثل البنيات، مثالاسطي أكثر من معرف للحعن

#include<stdio.h> enum _COLOR { RED = 0, BLUE, GREEN }; main() {

1 2 3 4 5 6 7 8 9 10 11

179

enum _COLOR cRed = RED, cBlue = BLUE, cGreen = GREEN; }

12 13 14 15

)٣( enumطريقة إستعمال : ٣,١,٣الربنامج :ب مثلاسأو اإلعالن عنها مباشرة بعد احل

#include<stdio.h> enum _COLOR { RED = 0, BLUE, GREEN }cRed = RED, cBlue = BLUE, cGreen = GREEN; main() { }

1 2 3 4 5 6 7 8 9 10 11 12 13

)٤( enumطريقة إستعمال : ٣,١,٤الربنامج :و توجد طرق أخرى كثرية ميكن استعماهلا مع احلسابات منها إعطاء ملتغري قيمة حساب مثل

#include<stdio.h> enum _NUMBER { Num = 10, Num2 = 20 }; main() { enum _NUMBER Number = Num; int i = 0; printf("i = %d\n", i); i = Number; printf("Number = %d\n", Number); printf("i = %d\n", i); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

)٥( enumطريقة إستعمال : ٣,١,٥الربنامج :و ميكن أيضا استعمال اإلدخال على احلساب مثل

#include<stdio.h> enum _COLOR

1 2 3

180

{ BLACK, WHITE, RED, GREEN, BLUE }; main() { enum _COLOR Color; printf("colors:\n"); printf("0)BLACK\n1)WHITE\n2)RED\n3)GREEN\n4)BLUE\n"); printf("choose a color:"); scanf("%d", &Color); if(Color == BLACK){ printf("Your choice are Black\n"); }else if(Color == WHITE){ printf("Your choice are White\n"); }else if(Color == RED){ printf("Your choice are Red\n"); }else if(Color == GREEN){ printf("Your choice are Green\n"); }else if(Color == BLUE){ printf("Your choice are Blue\n"); } }

4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

)٦( enumطريقة إستعمال : ٣,١,٦الربنامج : األخطاء احملتملة٣,١,٣ :مباشرة مثلاحلساب ال ميكن استعمال اسم .١

#include<stdio.h> enum _NUMBER { Zero, One }; main() { enum _NUMBER = ZERO; }

1 2 3 4 5 6 7 8 9 10 11 12

١اخلطأ : ٣,١,٧الربنامج . من نفس االسمحسابنيال ميكن اإلعالن عن .٢

: متارين٣,١,٤

181

، مث قم باستخدام معرفة On و الثاين باسم Off به ثابتني، األول باسم POWER_ باسم حسابأكتب برنامج به .١، فإذا كانت النتيجـة scanfة باستخدام الدالة و استعملها لإلدخال مباشر Power باسم POWER_ للحساب حىت فسيبقى الربنامج يستمر )On (١ فسيتم اخلروج من الربنامج، أما إذا كانت العكس أي Off أي ٠ املدخل

.٠ هي Power تصبح القيمة املدخلة للحساب

182

و مثال على ذلك . كن إعتبارها كوسائط للربنامج الدالة الرئيسية خمتلفة عن غريها من الوسائط، حيث مي وسائط

و الـذي يقـوم del مثال، بعض من هذه األوامر حتتاج إىل وسائط مثل األمر DOSاألوامر اليت يتم إستدعاءها يف نظام . مثالs/ و p/حبذف ملف، و من وسائطه هي إسم امللف الذي سيتم حذفه، و بعض الوسائط خياراية مثل اخليار

:لوسيط األول لدالة الرئيسيةا ٣,٢,١

أي عداد، و هو معرف على شكل متغري من نـوع األعـداد argument count إختصار لـ argcأو مبا يعرف بـ و هي إلسـم ١الصحيحة، و يف هذا الوسيط يكون به عدد وسائط الربنامج اليت مت إدخاهلا، و تكون قيمة هذا املتغري

، هنا ستكون del filename.ext /p، و نكتب مثال delاملثال السابق و الذي هو األمر و مثال على ذلك نأخذ . الربنامج، و القيمة الثالثة filename.ext، و الثانية هي اسم امللف del الربنامج إسم و مسار هي ثالثة، األوىل هي argcقيمة املتغري

أي الفـصل (وسائط الربنامج باإلعتماد على الفراغات يقوم حبساب argc، و من هذا املثال نستنتج أن املتغري p/للخيار :مثال تطبيقي. )بني خيار و آخر مبساحة

#include<stdio.h> main(int argc) { printf("Program have %d argument(s).\n", argc); }

1 2 3 4 5 6

الوسيط األوىل لدالة الرئيسية: ٣,٢,١الربنامج : مث قم بإنشاء امللف التنفيذي له و من منفذ األوامر قم بتنفيذ الربنامج على الشكلtest.cسم و هنا قم حبفظ الربنامج با

test this_is_the_first_argument and_this_is_the_second_argument

:و ناتج هذه الربنامج يكون على الشكل

Program have 3 argument(s).

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

ميكن إعطاءه إسم آخر، ألن املترجم يأخذها على شكل وسائط و ليس أمسـاء، و argcو هنا املتغري . argc-1كتابة .argcم لكن بعض املترمجات تأخذ هذه الوسائط على شكل أمساء، أي أمنه ال ميكن التغري يف اإلس

183

:الوسيط الثاين لدالة الرئيسية ٣,٢,٢إىل اآلن عرفنا عدد الوسائط املدخل لربناجمنا، و لكن كيف ميكننا أن نرى تلك الوسائط، أي القيم اليت ا، ذلـك

، حيث يكون عبارة عن argument vector إختصار لـ argvيكون عرب الوسيط الثاين لدالة الرئيسية أي مبا يعرف بـ :، مثالفات، كل مصفوفة تأخذ وسيطمصفو

#include<stdio.h> main(int argc, char *argv[]) { int i; printf("Program have %d argument(s).\n", argc); for(i=0;i<argc;i++) printf("argv[%d]= %s\n", i, argv[i]); }

1 2 3 4 5 6 7 8 9 10 11 12

سيط الثاين لدالة الرئيسيةالو: ٣,٢,٢الربنامج :مثل املثال السابق، نقوم بتنفيذ الربنامج على الشكل

test this_is_the_first_argument and_this_is_the_second_argument

:و ناتج الربنامج يكون على الشكل التايل

Program have 3 argument(s): argv[0] = C:\...\...\TEST.EXE argv[1] = this_is_the_first_argument argv[2] = this_is_the_second_argument

:فهذا مثال شبه كاملهذه جمرد أمثلة لتبني طريقة عمل هذه الوسائط ال أكثر، أم طريقة استعماهلا و اإلعتماد عليها

#include<stdio.h> #include<conio.h> main(int argc, char *argv[]) { char ch; if(argc<2){ printf("Delete one or more files.\n\n"); printf("Usage: DEL FILENAME\n"); } else{

1 2 3 4 5 6 7 8 9 10 11

184

printf("Delete %s file, are you sure? (Y/N): ", argv[1]); if((ch=getche())=='y' || ch=='Y'){ printf("\nDeleting %s...\n", argv[1]); remove(argv[1]); printf("%s deleted.\n", argv[1]); } } }

12 13 14 15 16 17 18 19

ملفاتبرنامج ذات وسائط يقوم حبذف : ٣,٢,٣الربنامج ، أي أن الوسائط املطلوبة غري متوفرة، ٢يف السطر السابع قمنا بعمل شرط و هو إن كان عدد وسائط الربنامج أقل من

إذا كان عدد وسائط الربنامج أكثر من إثنني فإننا نقوم بعمليـة احلـذف . ستخدم طريقة استعمال الربنامج ممث نظهر لل .)argv[0]( أي بعد سلسلة اسم و مسار الربنامج argv[1]سلة حيث يكون اسم امللف املراد حذفه يف السل

: األخطاء احملتملة٣,٢,٣ . على األقل، و هي إلسم و مسار الربنامج١ حتمل القيمة argc املتغريتأكد دائما أن .١

: متارين٣,٢,٤

.ال توجد متارين يف هذا الدرس

185

# ملترجم يتم تنفيذها قبل البدأ يف الترمجة، و ميكن متيزها دائما بالرمز التوجيهات هي عبارة عن تعليمات خاص با

.يف بداية اسم كل تعليمة، و هي كثرية و سنتحدث عن كل منها مع البعض من التفاصيل

:include# التوجيه٣,٣,١

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

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

:كتبن

#include<FileName.h>

الطريقة الثانية هي ضـم ملـف رأسـي .FileName الذي نريد ضمه إىل مشروعنا يف مكان و هنا نكتب اسم امللف

:موجود يف نفس الد املوجود به مشروعنا، و طريقة ضم امللفات يف هذه احلالة تكون كالتايل

#include"FileName.h"

، و )include(م عندما نريد إضافة ملف رأسي من الـد املتـرج <> كتابة الرمزين لطريقتني هو و الفرق الوحيد بني ا include# و ميكن أن نقول أن التوجيه . يف حالة أن امللف الرأسي موجود يف نفس الد املشروع " "كتابة اإلقتباسني

.خاص بربط امللفات ببعضها البعض

:define# التوجيه٣,٣,٢

يف اإلعالن الثوابت و اليت حتدثنا عنها سابقا، و أيـضا يـستعمل يف اإلعـالن عـن define# ل التوجيه يستعم :فهي كتايل define# ، بالنسبة لإلعالن عن الثوابت باستخدام التوجيهMacrosاملختصرات

#define Constant_Name Constant_Value

186

و أما عـن . نكتب قيمة الثابت Constant_Value ، و يف مكان نقوم بكتابة اسم الثابت Constant_Name يف مكان يقوم يقوم بتحديدها تلقائيا حيث ميكن استعمل أي نوع من األنواع، define# نوع القيمة املعطاة للثابت فإن التوجيه

:مثال

#define String "Hello" #define Character 'H' #define fNumber 3.14 #define iNumber 10

1 2 3 4

:فهي مشابه للدوال، و طريقة استعملها كتايل Macros أما بالنسبة للمختصرات

#define Macro_Add(i, j) i+j

و i و قيمته هي اجلمع بني الثابت )و أيضا هنا ال نقوم بتحديد نوع تلك الثوابت (، وسيطنيهنا قمنا بإنشاء خمتصر به

:، مثال كاملj الثابت

#include<stdio.h> #define Macro_Add(i, j) i+j main(){ int l; l = Macro_Add(10, 20); printf("%d\n", l); /*or*/ printf("%d\n", Macro_Add(10, 20)); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

خمتصر يقوم بعملية مجع: ٣,٣,١الربنامج :undef# التوجيه٣,٣,٣ الثوابت و املختصرات اليت نريد أن نقوم بإلغاءها ، حيث تقوم بإلغاء define# هو معاكس لتوجيه undef# وجيهالت

:، مثالdefine# و إعادة تعرفيها، و لكن يف حالة الثوابت فيجب أن تلك الثوابت معلنة باستخدام التوجيه

#include<stdio.h> #define Constant 5 #define Macro_Add(i, j) i+j

1 2 3 4

187

#undef Constant #undef Macro_Add main(){ printf("%d\n", Constant); /*Error: 'Constant': undeclared identifier*/ Macro_Add(5, 10); /*Errors*/ }

5 6 7 8 9 10 11 12 13 14

undef# التوجيهطريقة إستعمال : ٣,٣,٢الربنامج ، و يف السطر الرابع قمنـا بـاإلعالن عـن ٥ و أعطيناه القيمة Constant عن الثابت ر الثالث قمنا باإلعالن يف السط ، مث قمنا بإلغاء كل من الثابت و املختصر يف السطر السادس و السطر السابع، و عند اسـتعمال Macro_Add املختصر .أخطاءك املترجم عن وجود بعد إلغاءمها فسينبه Macro_Add أو املختصر Constant الثابت

:endif# و if، #elif، #else# التوجيهات٣,٣,٤

، else و ifالطريقة معا كل من هي توجيهات تستعمل لعمليات شرطية قبل الترمجة، و طريقة استعملها هي نفس و هـو else# يهمعا، و أخري التوج else if مشابه الستعمال elif# ، و التوجيهif مشابه لشرط if# فهنا التوجيه

:يعين اية الشروط، مثال endif# و التوجيه. else أيضا مشابه لشرط

#include<stdio.h> #define dNum 20 #if dNum == 10 #define Result "dNum = 10" #elif dNum == 20 #define Result "dNum = 20" #else #define Result "dNum = ??" #endif main(){ printf("%s\n", Result); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

endif# و if، #elif، #else# التوجيهاتطريقة إستعمال : ٣,٣,٣الربنامج :ifndef# و التوجيه ifdef# التوجيه٣,٣,٥

:ثاليف حالة أننا أردنا أنرى نرى إن كان هناك ثابت أو خمتصر معرف سابق، م ifdef# يستعمل التوجيه

#include<stdio.h> #define dNum

1 2 3

188

#ifdef dNum #define Result "dNum Defined" #else #define Result "dNum Undefined" #endif main(){ printf("%s\n", Result); }

4 5 6 7 8 9 10 11 12 13

ifdef# التوجيهطريقة إستعمال : ٣,٣,٤الربنامج سابقا، و ميكن كتابـة املثـال dNum الثابت ألننا قمنا باإلعالن عن ،dNum Defined الربنامج هي هنا ستكون نتيجة :السابق ذه الطريقة

#include<stdio.h> #define dNum #if defined dNum #define Result "dNum Defined" #else #define Result "dNum Undefined" #endif main(int argc, char *argv[]){ printf("%s\n", Result); }

1 2 3 4 5 6 7 8 9 10 11 12 13

ifdef#طريقة أخرى مكافئة لـ : ٣,٣,٥الربنامج :، مثالifdef# معاكس لتوجيه ifndef# جيهو التو

#include<stdio.h> #define dNum #ifndef dNum #define Result "dNum Undefined" #else #define Result "dNum Defined" #endif main(){ printf("%s\n", Result); }

1 2 3 4 5 6 7 8 9 10 11 12 13

ifndef# التوجيهطريقة إستعمال : ٣,٣,٦الربنامج :و ميكن أيضا كتابة هذا مثال بالطريقة التايل

189

#include<stdio.h> #define dNum #if !defined dNum #define Result "dNum Undefined" #else #define Result "dNum Defined" #endif main(){ printf("%s\n", Result); }

1 2 3 4 5 6 7 8 9 10 11 12 13

ifndef#طريقة أخرى مكافئة لـ : ٣,٣,٧الربنامج :line# التوجيه٣,٣,٦

، و ذلك غري مهم إال يف عملية بنـاء سطر للملف احلايل أو سطر مللف غري احلايل لتحديد line# يستعمل التوجيه :املترمجات، و طريقة استعمله كالتايل

#line LineNumber

، و الطريقة LineNumber حتديد رقم سطر للملف احلايل، حيث نكتب رقم السطر يف مكان هذه الطريقة يف حالة أردنا

:األخرى هي

#line LineNumber "FileName"

ستفهم طريقة استعمال هذا التوجيه أكثر " ".طريقة جيب دائما كتابة اسم امللف دالة االقتباسني و عند استعمال هذه ال

.)سندرسها فيما بعد( املختصرات املعرفةعندما تعرف

:error# التوجيه٣,٣,٧

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

#ifndef dNum #error dNum are not declared! #endif main(){ }

1 2 3 4 5 6 7

190

error# التوجيهطريقة إستعمال : ٣,٣,٨الربنامج .غري معرف سابقا dNum ، أي أن الثابتerror# و اخلطأ هو الرسالة املكتبة بعد التوجيه يعملهنا الربنامج لن

:pragma# توجيهال ٣,٣,٨

تلف من مترجم آلخـر، يستحـسن ملترجم حسب رغبة املربمج، و هي خت لتحكم يف ا pragma# يستعمل التوجيه .مراجعة املساعد اخلاص باملترجم الذي تستعمله

:Predefined Names األمساء املعرفة ٣,٣,٩

يف بداية و اية اسم املختـصر، و Underscore جاهزة، و ميكن متيزها بالرمزين Macros هي جمموعة من املختصرات :هذا جول جلميع األمساء املعرفة

الشرح املختصر

__LINE__ ثابت عشري حيمل رقم سطر املصدر احلايل __FILE__ سلسلة حرفية حتمل اسم امللف اجلاري ترمجته __TIME__ سلسلة حرفية حتميل الوقت الذي مت فيه الترجم __DATE__ حتميل التاريخ الذي سلسلة حرفية __STDC__ إذا كان املترجم املستعمل مترجم قياسي للغة ١ تكون قيمة هذا الثابت C .

األمساء املعرفة: ٣,٣,١اجلدول :ل حول طريقة استعمال تلك األمساءامث

#include<stdio.h> main(){ printf("Line: %d\n", __LINE__); printf("File: %s\n", __FILE__); printf("Date Of Compilation: %s\n", __DATE__); printf("Time Of Compilation: %s\n", __TIME__); printf("ANSI C(0=false, 1=true): %d\n", __STDC__); }

1 2 3 4 5 6 7 8 9

األمساء املعرفةإستعمال : ٣,٣,٩الربنامج : األخطاء احملتملة٣,٣,١٠

.خطاء حمتملة يف هذا الدرس ال توجد أ

191

: متارين٣,٣,١١

. ال توجد متارين يف هذا الدرس

192

جيـب أوال أن نـوفر هلـا الدوال تلك استعمالدرسنا سابقا الدوال، و قلنا أنه ميكن عمل هلا وسائط، و عند

: هذا املثال اليت تريدها، فمثال ال ميكن عمل مثلما هو موضح يفالوسائط

#include<stdio.h> int Add(int a, int b); main(){ int a = 10, b = 20, c = 30, d; d = Add(a, b, c); printf("%d\n", d); } int Add(int a, int b){ return a+b; }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

ا وسيطنيتوفري ثالثة وسائط لدالة : ٣,٤,١الربنامج فقط، أما حنن فقد مررنا هلـا وسائطحتتوي على Add الثامن و هو أن الدالة هنا الربنامج لن يعمل، و اخلطأ يف السطر

وسـائط نزيد عليها هلما وسائط غري حمددة و ميكن أن scanf و الدالة printf و ستستنتج أن الدالتني .وسائطثالثة :و جعلها أكثر مرونة من السابقة printf ستنساخ صغري لدالةنا، و سنقوم اآلن بعمل احسب رغبات

#include<stdio.h> #include<stdarg.h> void NewPrintf(char *, ...); main(){ NewPrintf("%d\a, %d\a, %d\a\n", 1, 2, 3); NewPrintf("Hello!\n"); } void NewPrintf(char *format, ...){ va_list Argument; char *str; int Decimal; va_start(Argument, format); for(str=format;*str;str++){ if(*str != '%'){ putchar(*str); continue; }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

193

switch(*++str){ case 'd': case 'i': case 'D': case 'I': Decimal = va_arg(Argument, int); printf("%d", Decimal); break; default: putchar(*str); break; } } va_end(Argument); }

24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

وسائط غري حمددةطريقة اإلعالن دالة ذات : ٣,٤,٢الربنامج ، و هو امللف الذي سـيعطينا standard argument ، و اسم امللف خمتصر منstdarg.h الرأسيأوال جيب ضم امللف

يف السطر الرابع قمنا باإلعالن عـن الدالـة اجلديـد لطبعـة باسـم . جلعل الدوال هلا وسائط غري حمددة اإلمكانيات

NewPrintf مترير لدالة عـدد مستتفهي تعين أنه ... الرئيسي، أما تلك النقاط طوسي واحد و هو ال وسيط، حيث هلا ، variable list خمتصرة منو، و هva_list يف السطر الثاين عشر قمنا باإلعالن عن مؤشر لـ . غري حمددةوسائطمن ال

يف الـسطر .NewPrintf الدالة وسائط، حيث سيحمل هذا املؤشر عدد stdarg.h و هو من مؤشرات امللف الرأسي ـ وسيط، ال وسيطني، حيث له va_start السادس عشر قمنا باستعمال املختصر ، و va_list األول هو مؤشـر لـ

يف السطر التاسـع و .format ، و هنا سنقوم بتمرير املؤشر NewPrintf األول لدالة وسيط الثانية هو مترير ال وسيطال األول مؤشر وسيط، الوسيطني، و له variable argument ر من، و هو خمتصva_arg قمنا باستعمال املختصرالعشرين

اإلضايف مث نقلـه إىل املـتغري وسيط الثاين هو نوع املتغري الذي سيتم أخذ قيمته من مكان ال وسيط، و ال va_list لـ

Decimalو هذا مثال لكيفية جعل املثال األول يعمل بشكل صحيح، املثال .، مث طبعه مباشرة:

#include<stdio.h> #include<stdarg.h> int Add(int NumOfArg, ...); main(){ int a = 10, b = 20, c = 30, d; d = Add(3, a, b, c); printf("%d\n", d); } int Add(int NumOfArg, ...){ va_list Arg; int sum = 0, i;

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

194

va_start(Arg, NumOfArg); for(i=0;i<NumOfArg;i++) sum += va_arg(Arg, int); return sum; }

17 18 19 20 21 22 23 24

)٢(طريقة اإلعالن دالة ذات وسائط غري حمددة : ٣,٤,٣الربنامج : األخطاء احملتملة٣,٤,١

. ال توجد أخطاء حمتملة يف هذا الدرس

: متارين٣,٤,٢ . ال توجد متارين يف هذا الدرس

195

القياسية، و كل جمموعة منـها موجـودة يف C خمتصرات و دوال لغة ، ثوابت أهمعرف على نتيف هذا الدرس س

.دورهاملف رأسي ذات اسم يدل على

:assert.h امللف الرأسي٣,٥,١

واحد، و هي دالة تقوم باملقارنة بني قيمـتني حيـث وسيطا ، assert حيتوي هذا امللف الرأسي على دالة و هي فسيتم استعداء تلك الدالة ٠ صفر أي صحيحة، إن كانت النتيجة خاطئة أي ال غريأو ، تكون النتيجة إما صفر أي خاطئة

، حيث يقوم ذلك املختصرة بطباعة اخلطأ مع اسم امللف املوجود به اخلطأ و رقم السطر أثناء تـشغيل macro كمختصر ، و لن تقوم الدالـة assert الربنامج، و هنا سيتوقف الربنامج، أما إن كانت النتيجة غري الصفر فسيتم جتاهل املختصر

assert بعمل شيء، مثال:

#include<stdio.h> #include<assert.h> main(){ assert(10<20); /*true*/ assert(20<10); /*false*/ }

1 2 3 4 5 6 7

assertاملختصر /الدالة: ٣,٥,١الربنامج يف كل من الـسطر اخلـامس و assert يف السطر الثاين، و استعملنا الدالة assert.h أوال قمنا بضم امللف الرأسي

مقارنة صحيح، و يف هذه احلالة سيتم جتاهل الدالة، و لن يقوم assert لدالة هيف السطر اخلامس قمنا بإعطاء .السادسمقارنة خاطئة، و هنـا سـيتم assert يف السطر السادس أعطينا لدالة .ىء من طرف هذه الدالة الربنامج بعمل أي ش main.c يف امللف 10>20 و الذي سيقوم بطباعة اخلطأ أثناء تشغيل الربنامج، و اخلطأ هو assert التحويل إىل املختصرة

.٦ يف السطر

:ctype.h امللف الرأسي٣,٥,٢

، و character type توي على جمموعة من الدوال اخلاص أنواع الرموز، و امسه خمتصر منحي ctype.h امللف الرأسي . واحد و هو ملتغري حيمل رقم الرمزوسيطمجيع دواله ذات

:isalnum الدالة٣,٥,٢,١

196

قيمة لرمـز التستعمل هذا الدالة إلختبار القيمة املعطاة هلا، إذا كانت من ، و is alphanumericاسم الدالة خمتصر من :، مثال٠حريف أو رقمي فستكون النتيجة غري الصفر، أما يف حالة العكس فنتيجة ستكون

#include<stdio.h> #include<ctype.h> main(){ int c = 1, c2 = 65; printf("%d = %c\n", isalnum(c), c); printf("%d = %c\n", isalnum(c2), c2); }

1 2 3 4 5 6 7 8 9

isalnum الدالة: ٣,٥,٢ربنامج اليف الـسطر الثـامن .عبارة عن أيقونـة ASCII يف جدول ١ أي خاطئة، ألن الرقم ٠يف السطر السابع ستكون النتيجة

.، و هو من الرموز احلرفيةASCII يف جدول A هو احلرف ٦٥ أي صحيحة، ألن الرقم ١ ستكون النتيجة

:isalpha الدالة٣,٥,٢,٢

إذا كانت من حروف األجبديـة أم ال، إذا هلا القيمة املعطاةإلختبار، و تستعمل is alphabetic تصر مناسم الدالة خم :، مثال٠ ، و يف حالة العكس فستكون النتيجة١كان من احلروف األجبدية فنتيجة ستكون

#include<stdio.h> #include<ctype.h> main(){ int c = 49, c2 = 65; printf("%d = %c\n", isalpha(c), c); printf("%d = %c\n", isalpha(c2), c2); }

1 2 3 4 5 6 7 8 9

isalpha الدالة: ٣,٥,٣الربنامج .، و هو ليس من احلروف األجبديـة ASCII يف جدول ١ هو العدد ٤٩ ، ألن الرقم ٠ يف السطر السابع، ستكون النتيجة .من احلروف األجبدية A ، و احلرفASCII يف جدول A هو احلرف ٦٥ لعدد، ألن ا١ يف السطر الثامن ستكون النتيجة

:iscntrl الدالة٣,٥,٢,٣

و رمـوز إذا كانت من رمـوز الـتحكم، هلا القيمة املعطاة بإختبار تقوم، و هيis control اسم الدالة خمتصر منة غري الصفر أي صحيحة، أما إذا كانت ، و هنا ستكون النتيج ٢٥٥ إىل ١٢٨ ، و أيضا من ٣١ و ٠التحكم تكون بني

:فستكون النتيجة خاطئة ألن كل من تلك الرموز عبارة عن أرقام و حروف ال أكثر، مثال ١٢٧ و ٣٢ القيمة بني

197

#include<stdio.h> #include<ctype.h> main(){ int c = 65, c2 = 0; printf("%d = %c\n", iscntrl(c), c); printf("%d = %c\n", iscntrl(c2), c2); }

1 2 3 4 5 6 7 8 9

iscntrl الدالة: ٣,٥,٤الربنامج و هو ليس من رمـوز ASCII يف جدول A حيمل احلرف ٦٥ أي خاطئة، ألن الرقم ٠ يف السطر السابع النتيجة ستكون

.ASCIIم يف جدول من رموز التحك ٠ يف السطر الثامن ستكون النتيجة غري الصفر أي صحيحة، ألن الرقم .التحكم

:isdigit الدالة٣,٥,٢,٤

إذا كانت من األرقام العشرية حيث تكون النتيجة غري الصفر إن كانـت هلا تقوم هذه الدالة بإختبار القيمة املعطاءة فـستكون ASCIIمن جـدول ٥٧ و ٤٨ ، و يف حالة أن النتيجة مل تكن بني الرقم ٥٧ و ٤٨ القيمة املعطاة بني الرقم

:أي خاطئة، مثال ٠ ةالنتيج

#include<stdio.h> #include<ctype.h> main(){ int c = 65, c2 = 48; printf("%d = %c\n", isdigit(c), c); printf("%d = %c\n", isdigit(c2), c2); }

1 2 3 4 5 6 7 8 9

isdigit الدالة: ٣,٥,٥الربنامج يف .ليس رقما A و احلرف ASCII يف جدول A هو احلرف ٦٥ ة، ألن الرقم أي خاطئ ٠ يف السطر السابع ستكون النتيجة

.٠ هو الرقم ASCII يف جدول ٤٨ السطر الثامن ستكون النتيجة غري الصفر، ألن الرقم

:isgraph الدالة٣,٥,٢,٥

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

#include<stdio.h> #include<ctype.h>

1 2 3

198

main(){ int c = 0, c2 = 48; printf("%d = %c\n", isgraph(c), c); printf("%d = %c\n", isgraph(c2), c2); }

4 5 6 7 8 9

isgraph الدالة: ٣,٥,٦الربنامج يف السطر الثـامن .عبارة عن رمز مرئي ASCII يف جدول ٠ أي خاطئة، ألن الرقم ٠ يف السطر السابع ستكون النتيجة

.و هو رمز غري مرئي ٠ هو الرقم ASCII يف جدول ٤٨ ستكون النتيجة غري الصفر، ألن الرقم

:islower الدالة٣,٥,٢,٦

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

#include<stdio.h> #include<ctype.h> main(){ int c = 65, c2 = 97; printf("%d = %c\n", islower(c), c); printf("%d = %c\n", islower(c2), c2); }

1 2 3 4 5 6 7 8 9

islower الدالة: ٣,٥,٧الربنامج لـيس مـن A، و الرمـز ASCII يف جدول A هو الرمز ٦٥ أي خاطئة، ألن الرقم ٠ يف السطر السابع ستكون النتيجة

aهو الرمز ASCII جدول يف ٩٧ يف السطر الثامن ستكون النتيجة غري الصفر أي صحيحة، ألن الرقم .احلروف الصغرية

.الصغريةالرمز و هو من

:isprint الدالة٣,٥,٢,٧

فستكون النتيجـة ASCII من جدول ١٢٦ و ٣٢ هلا، إذا مل كانت القيمة بني تقوم هذه الدالة بإختبار القيمة املعطاة أما إذا كانت القـيم غـري ذلـك ،)الفراغ يعترب رمز أيضا (غري الصفر، و هي الرموز املستعملة يف الطباعة اإلفتراضية

:أي خاطئة، مثال ٠ فستكون النتيجة

#include<stdio.h> #include<ctype.h> main(){ int c = 1, c2 = 65;

1 2 3 4 5

199

printf("%d = %c\n", isprint(c), c); printf("%d = %c\n", isprint(c2), c2); }

6 7 8 9

isprint الدالة: ٣,٥,٨الربنامج عبارة عن رسم إلبتسامة، و ال تستعمل اإلبتسامات ASCII يف جدول ١ ، ألن الرقم ٠ يف السطر السابع ستكون النتيجة

و ASCII يف جـدول A هو احلرف ٦٥ يف السطر الثامن ستكون النتيجة غري الصفر، ألن الرقم .يف النصوص اإلفتراضية .هو حرف ميكن استعماله يف النصوص اإلفتراضية

:ispunct الدالة٣,٥,٢,٨

، و هي تقوم بإختبار القيمة املعطاة هلا، إذا كانت من أحـد رمـوز التـرقني is punctuation اسم الدالة خمتصر من :أي خاطئة، مثال ٠فستكون النتيجة غري الصفر أي صحيحة، أما غري رموز الترقني فستكون النتيجة

#include<stdio.h> #include<ctype.h> main(){ int c = 44, c2 = 65; printf("%d = %c\n", ispunct(c), c); printf("%d = %c\n", ispunct(c2), c2); }

1 2 3 4 5 6 7 8 9

ispunct الدالة: ٣,٥,٩الربنامج ، الفاصـلة مـن ASCII هو الفاصلة يف جدول ٤٤ يف السطر السابع ستكون النتيجة غري الصفر أي صحيحة، ألن الرقم

، و ASCII يف جـدول A هـو احلـرف ٦٥ يف السطر الثامن ستكون النتيجة صفر أي خاطئة، ألن الرقم .موز الترقني ر .احلروف ليست رموز ترقني

:isspace الدالة٣,٥,٢,٩

٩ هلا، إذا كانت من رموز الفضاء األبيض أما ال، و رموز الفضاء األبيض تبدأ من تقوم الدالة بإختبار القيمة املعطاة ، و يف هذه احلالة ستكون النتيجة غري الصفر أي صحيح، أما إن مل تكون القيمة املعطاة من أحد الرموز الفضاء ١٣ إىل

:مثال أي خاطئة، ٠ األبيض فإن النتيجة ستكون

#include<stdio.h> #include<ctype.h> main(){ int c = 9, c2 = 97;

1 2 3 4 5

200

printf("%d = %c\n", isspace(c), c); printf("%d = %c\n", isspace(c2), c2); }

6 7 8 9

isspace الدالة: ٣,٥,١٠الربنامج هو من أحد رمـوز الفـضاء ASCII يف جدول ٩ يف السطر السابع ستكون النتيجة غري الصفر أي صحيحة، ألن الرقم

، و هو ليس مـن a هو احلرف ASCII جدول يف ٩٧ أي خاطئة، ألن الرقم ٠ يف السطر الثامن ستكون النتيجة .األبيض .رموز الفضاء األبيض

:isupper الدالة٣,٥,٢,١٠

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

#include<stdio.h> #include<ctype.h> main(){ int c = 65, c2 = 97; printf("%d = %c\n", isupper(c), c); printf("%d = %c\n", isupper(c2), c2); }

1 2 3 4 5 6 7 8 9

isupper الدالة: ٣,٥,١١الربنامج و هـو مـن A هو احلرف ASCII جدول يف ٦٥ يف السطر السابع ستكون النتيجة غري الصفر أي صحيحة، ألن الرقم

و هـو a هو احلرف ASCII يف جدول ٩٧ أي خاطئة، ألن الرقم ٠ يف السطر الثامن ستكون النتيجة .األحرف الكبرية .ليس حرف كبري

:isxdigit الدالة٣,٥,٢,١١

ملعطاة هلا، إذا كانت القيمة من ، و تقوم هذا الدالة بإختبار الدالة اis hexadecimal digital اسم هذا الدالة خمتصر من غري الصفر أي صحيحة، أما إذا كانت غري تلك النتيجةفستكون ٩ – ٠ و من A-F أعداد النظام السداسي عشر أي من

:أي خاطئة، مثال ٠القيم فستكون النتيجة

#include<stdio.h> #include<ctype.h> main(){ int c = 70, c2 = 71;

1 2 3 4 5

201

printf("%d = %c\n", isxdigit(c), c); printf("%d = %c\n", isxdigit(c2), c2); }

6 7 8 9

isxdigit الدالة: ٣,٥,١٢الربنامج F ، و احلـرف ASCIIيف جدول F هو احلرف ٧٠ يف السطر السابع ستكون النتيجة غري الصفر أي صحيحة، ألن الرقم

صفر أي خاطئـة، ألن النتيجةيف السطر الثامن ستكون .١٥ هو العدد من النظام السداسي عشر و يف النظام العشري .ليس من النظام السداسي عشر G ، و هو احلرفASCII يف جدول G هو احلرف ٧١ الرقم

:tolower و toupper الدالتني٣,٥,٢,١٢

م بتحويـل األحـرف تقو tolower تقوم بتحويل األحرف الصغري إىل األحرف الكبرية، و الدالة toupper الدالة :، مثالtoupperالكبرية إىل أحرف صغرية أي عكس ما تقوم به الدالة

#include<stdio.h> #include<ctype.h> main(){ int c = 'a', c2 = 'B'; printf("%c = %c\n", c, toupper(c)); printf("%c = %c\n", c2, tolower(c2)); }

1 2 3 4 5 6 7 8 9

tolower و toupper الدالتني: ٣,٥,١٣الربنامج حيـث toupperو هو على شكل حرف صغري، مث إعادة كتابته بعد متريره لدالة a يف هذا الربنامج يتم طباعة احلرف على شكل حرف كبري، مث إعادة كتابته بعـد متريـره لدالـة B طباعة احلرف مستتسيصبح من األحرف الكبرية، و

tolower حرف صغريحيث حتويله إىل .

:errno.h امللف الرأسي٣,٥,٣

. األخطاء أثناء وقت تـشغيل الربنـامج كشفجمموعة من املختصرات تستعمل ل errno.h يوجد يف امللف الرأسي .perror حيث تستعمل تلك املختصرات مع الدالة

:perror الدالة٣,٥,٣,١

202

واحد و هو وسيطلدالة . بطباعة أخطاء خاصة بامللفات، و هي دالة تقومprint error خمتصر من perror اسم الدالة إىل رسـالة شـيء إن مل نريد إضافة فراغه ةالسلسل طباعتها قبل طباعة اخلطأ، أو ميكن ترك مستتسلسلة حلروف اليت

:اخلطأ، مثال حول طريقة استعمال الدالة

#include<stdio.h> #include<stdlib.h> #include<errno.h> main(){ FILE *File; char FileName[255]; perror("situation"); printf("Enter The File Name: "); gets(FileName); File = fopen(FileName, "r"); if(!File){ perror("situation"); printf("errno = %d\n", errno); exit(1); }else{ perror("situation"); printf("File Founded!\n"); fclose(File); } }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

perror الدالة: ٣,٥,١٤الربنامج و اليت ستكون هذه الكلمة قبـل رسـالة situation مع مترير هلا النص perror يف السطر التاسع قمنا باستعمال الدالة

يف السطر السابع عشر، فإن perror استعمال الدالة .No error ستكونةالرسال و لكن هنا ال يوجد أي خطأ و اخلطأ، موجود فسيتم طباعة الرسالة عدم وجود امللف، و أيـضا قمنـا باسـتعمال كان اسم امللف الذي طلبه املستخدم غري

ستم طباعة رقم رسالة اخلطأ الذي مت إجياده، رسـالة ، حيث printfيف السطر الثامن عشر عرب الدالة errno املختصرثوابت تستعمل لتبني على رسالة اخلطأ اليت نريد إرساهلا، من أهم تلك الثوابت errno و للمختصر .٢اخلطأ هنا رقمها

:هي

الرسالة اسم الثابتEINVAL Invalid argument ERANGE Result too large EBADF Bad file descriptor EDOM Domain error EACCES Permission denied

203

EMFILE Too many open files EEXIST File exists E2BIG Arg list too long EXDEV Improper link ECHILD No child processes EAGAIN Resource temporarily unavailable ENOEXEC Exec format error ENOMEM Not enough space ENOENT No such file or directory ENOSPC No space left on device

errnoثوابت املختصر : ٣,٥,١اجلدول :و توجد رسائل أخرى ميكن رأيتها باستخدام التكرار، مثال

#include<stdio.h> #include<errno.h> main(){ int i; for(i=0;i<=42;i++){ errno = i; printf("%d:", i); perror(""); } }

1 2 3 4 5 6 7 8 9 10 11 12

)٢( perror الدالة: ٣,٥,١٥الربنامج :، و هي على الشكل التايلerrno.h و كل رقم منها له ثابت معرف يف امللف الرأسي

#define EPERM 1 #define ENOENT 2 #define ESRCH 3 #define EINTR 4 #define EIO 5 #define ENXIO 6 #define E2BIG 7 #define ENOEXEC 8 #define EBADF 9 #define ECHILD 10 #define EAGAIN 11 #define ENOMEM 12 #define EACCES 13 #define EFAULT 14 #define EBUSY 16 #define EEXIST 17 #define EXDEV 18 #define ENODEV 19 #define ENOTDIR 20 #define EISDIR 21 #define EINVAL 22 #define ENFILE 23

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

204

#define EMFILE 24 #define ENOTTY 25 #define EFBIG 27 #define ENOSPC 28 #define ESPIPE 29 #define EROFS 30 #define EMLINK 31 #define EPIPE 32 #define EDOM 33 #define ERANGE 34 #define EDEADLK 36 #define ENAMETOOLONG 38 #define ENOLCK 39 #define ENOSYS 40 #define ENOTEMPTY 41 #define EILSEQ 42

23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

errno.hثوابت امللف الرأسي : ٣,٥,١٦الربنامج :float.h امللف الرأسي٣,٥,٤

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

قيمته اسم الثابتFLT_RADIX 2 FLT_ROUNDS 1 FLT_MAX 1E+37

FLT_MAX_EXP 128 DBL_MAX 1E+37

DBL_MAX_EXP 1024 FLT_DIG 6 DBL_DIG 15

FLT_EPSILON 1E-5 DBL_EPSILON 1E-9 FLT_MANT_DIG 24 DBL_MANT_DIG 53

FLT_MIN 1E-37 FLT_MIN_EXP -125 DBL_MIN 1E-37

DBL_MIN_EXP -1021

float.hثوابت امللف الرأسي :٣,٥,٢اجلدول ، توجد ثوابت أخرى كثرية ميكن رأيته يف امللف float.h املوجود يف امللف الرأسي تعترب هذا الثوابت من أهم الثوابت

.float.h الرأسي

:limits.h امللف الرأسي٣,٥,٥

:ذا امللف الرأسي جمموعة من الثوابت ألحجام مجيع األنواع املتكاملة، الثوابت هي

205

قيمته اسم الثابتCHAR_BIT 8 CHAR_MIN -128 INT_MIN -32767 LONG_MIN -2147483647 SHRT_MIN -32768 SCHAR_MIN -128 LONG_MAX 2147483647 SCHAR_MAX 127 SHRT_MAX 32767 UCHAR_MAX 255 UINT_MAX 65535 ULONG_MAX 4294967295 USHRT_MAX 65535 INT_MAX 32767 CHAR_MAX 127

limits.hثوابت امللف الرأسي :٣,٥,١اجلدول .limits.hتوجد ثوابت أخرى ميكن رأيتها يف امللف الرأسي و

:locale.h امللف الرأسي٣,٥,٦، )املنـاطق ( املواقـع تروتينيا، خمتصرات و دوال مستعمل من قبل ثوابتذا امللف الرأسي جمموعة من تراكيب،

: على الشكل التايلوابت هذا امللف الرأسيث

#define LC_ALL 0 #define LC_COLLATE 1 #define LC_CTYPE 2 #define LC_MONETARY 3 #define LC_NUMERIC 4 #define LC_TIME 5 #define LC_MIN LC_ALL #define LC_MAX LC_TIME

1 2 3 4 5 6 7 8

locale.h امللف الرأسيثوابت : ٣,٥,١٧الربنامج . أو البالد اليت تريد استعمال أصنافها يف برناجمك، منها اللغة املنطقةترب هذا امللف الرأسي مهم، هو خاص بتحديد ال يع

. باقي حمتوياتهلرؤية locale.h ألقي لنظرة على امللف الرأسي

:math.h امللف الرأسي٣,٥,٧بالنسبة للثوابت فهي معرفة .خلاص بالرياضيات املختصرات و الدوال ا الثوابت و حيمل هذا امللف الرأسي جمموعة من

:على الشكل التايل

206

#define M_E 2.71828182845904523536 #define M_LOG2E 1.44269504088896340736 #define M_LOG10E 0.434294481903251827651 #define M_LN2 0.693147180559945309417 #define M_LN10 2.30258509299404568402 #define M_PI 3.14159265358979323846 #define M_PI_2 1.57079632679489661923 #define M_PI_4 0.785398163397448309616 #define M_1_PI 0.318309886183790671538 #define M_2_PI 0.636619772367581343076 #define M_2_SQRTPI 1.12837916709551257390 #define M_SQRT2 1.41421356237309504880 #define M_SQRT1_2 0.707106781186547524401

1 2 3 4 5 6 7 8 9 10 11 12 13

math.h امللف الرأسيثوابت : ٣,٥,١٨الربنامج .math.h أما املختصرات و الدوال فسندرس أمهها، أما الباقي فيمكن رأيتها من امللف الرأسي

:sin الدالة٣,٥,٧,١

، القيمة اليت مت متريرها إليهـا sine جيب بإرجاعو هي تقوم ، double واحد و هو ملتغري من نوع وسيط sinلدالة :مثال

#include<stdio.h> #include<math.h> main(){ double x = 3.14/2; printf("sine x = %f\n", sin(x)); }

1 2 3 4 5 6 7 8

sin الدالة: ٣,٥,١٩ربنامج ال :cos الدالة٣,٥,٧,٢

للقيمـة جيب التمام و هي تقوم بإرجاع ، double واحد من نوع وسيط، و هلا cosine خمتصر من cos اسم الدالة :، مثالاليت مت متريرها إليها

#include<stdio.h> #include<math.h> main(){ double x = 3.14/2; printf("cosine x = %f\n", cos(x)); }

1 2 3 4 5 6 7 8

207

cos الدالة: ٣,٥,٢٠الربنامج :tan الدالة٣,٥,٧,٣

القيمة اليت الظلو هي تقوم بإرجاع ،double واحد ملتغري من نوع وسيط، و هلا tangent خمتصر من tan اسم الدالة :، مثالمت متريرها إليها

#include<stdio.h> #include<math.h> main(){ double x = 3.14/4; printf("tangent x = %f\n", tan(x)); }

1 2 3 4 5 6 7 8

tan الدالة: ٣,٥,٢١الربنامج :exp الدالة٣,٥,٧,٤

، حيث تكون القيمة املعطاة له هـي double واحد من نوع وسيط، و هلا exponential خمتصر من exp اسم الدالة أس eمثال ،:

#include<stdio.h> #include<math.h> main(){ double x = 3.0; printf("exponential x = %f\n", exp(x)); }

1 2 3 4 5 6 7 8

exp الدالة: ٣,٥,٢٢الربنامج :log الدالة٣,٥,٧,٥

، و تقوم الدالـة بإرجـاع double واحد و هو ملتغري من نوع وسيط، و ا logarithm خمتصر من logاسم الدالة :ية القيمة اليت مت متريرها إليها، مثالغاريتملو

#include<stdio.h> #include<math.h> main(){ double x = 100.0; printf("logarithm x = %f\n", log(x)); }

1 2 3 4 5 6 7 8

log الدالة: ٣,٥,٢٣الربنامج

208

:pow الدالة٣,٥,٧,٥، و الثاين أيضا مـتغري double األول هو متغري من نوع وسيط، ال طنيوسي، و ا power خمتصر من pow اسم الدالة

: الثاين، مثالوسيط قيمة الأس الثاين يكون عدد وسيط، حيث الdouble من نوع

#include<stdio.h> #include<math.h> main(){ double x=5.0, y=3.0; printf("%f\n", pow(x, y)); }

1 2 3 4 5 6 7 8

pow الدالة: ٣,٥,٢٤ج الربنام :sqrt الدالة٣,٥,٧,٦

، و هي تقوم بإرجاع اجلذر التربيعي double واحد ملتغري من نوع وسيط، و هلا square خمتصر من sqrt اسم الدالة :للقيمة املعطاة له، مثال

#include<stdio.h> #include<math.h> main(){ double x=9.0; printf("%f\n", sqrt(x)); }

1 2 3 4 5 6 7 8

sqrt الدالة: ٣,٥,٢٥الربنامج :ceil الدالة ٣,٥,٧,٧ذ العدد املعطاة هلا علـى شـكل عـدد ، و هي تقوم بأخ double واحد و هو ملتغري من نوع وسيط ceil للدالة

هـي نفـسها فستكون النتيجة ٣,٠ ، أما إذا كانت ٤ فستكون النتيجة ٣,١ هلا هي ةاملعطاصحيح، فإذا كانت القيمة

:، مثال٣,٠

#include<stdio.h> #include<math.h> main(){ double x=9.5; printf("%f\n", ceil(x)); }

1 2 3 4 5 6 7 8

ceil الدالة: ٣,٥,٢٦الربنامج

209

:floor الدالة٣,٥,٧,٨ :، مثال٣,٠ جةفستكون النتي ٣,١ ، فإذا كانت القيمة املعطاة هلاceil هي معاكس لدالة floor الدالة

#include<stdio.h> #include<math.h> main(){ double x=10.5; printf("%f\n", floor(x)); }

1 2 3 4 5 6 7 8

floor الدالة: ٣,٥,٢٧الربنامج :fabs الدالة٣,٥,٧,٩

عدد الذي مت متريـره هلـا، ، و تقوم هذه الدالة بإرجاع القيمة املطلقة للfloat absolute خمتصر من fabs اسم الدالة :مثال

#include<stdio.h> #include<math.h> main(){ double x=-10.5, y=10.5; printf("%f\n", fabs(x)); printf("%f\n", fabs(y)); }

1 2 3 4 5 6 7 8 9

fabs الدالة: ٣,٥,٢٨الربنامج :ldexp الدالة٣,٥,٧,١٠

حيث تقوم هذه الدالـة ، int الثاين متغري من نوع وسيط، و ال double ري من نوع ، األول ملتغ وسيطنيهلذه الدالة : الثاين، مثالوسيط قيمة الأس ٢ األول يف وسيطبضرب قيمة ال

#include<stdio.h> #include<math.h> main(){ double x=2.0, y=4.0; printf("%f\n", ldexp(x, y)); /*y = 2*2*2*2, x = 2; x*y = 32.000000*/ }

1 2 3 4 5 6 7 8

ldexp الدالة: ٣,٥,٢٩الربنامج :fmod الدالة٣,٥,٧,١١

210

األول على قيمة وسيط، حيث تقوم هذه الدالة بقسمة قيمة ال double متغريان من نوع ، كالمها وسيطنيهلذه الدالة : الثاين، مثالوسيطال

#include<stdio.h> #include<math.h> main(){ double x=2.0, y=4.0; printf("%f\n", fmod(x, y)); }

1 2 3 4 5 6 7 8

fmod الدالة: ٣,٥,٣٠الربنامج :setjmp.h امللف الرأسي٣,٥,٨

واحـد و وسيطعلى setjmp ، حيث حتتوي الدالة longjmp و setjmp حيتوي هذا امللف الرأسي على دالتني مها ، األول للبنيـة وسيطنيعلى longjmp نفس امللف الرأسي، و حتتوي الدالة يف ةو هي معرف jmp_buf هو مؤشر لبنية

jmp_buf ملتغري من نوع الثاين وسيطو ال int. تستعمل الدالة setjmp مع الدالة longjmp و اهلدف منهما هو القفز ،الـة معنيـة، و ال ميكـن للقفز من مكان آلخر يف د gotoإىل خمتلف أماكن الربنامج، فمثال نستعمل الكلمة احملجوزة

:، مثال)Global(استعماهلا للقفز العام

#include<stdio.h> #include<setjmp.h> #include<stdlib.h> void Return(void); jmp_buf jmp; main(){ int value; value = setjmp(jmp); { printf("Block 1:\n"); if(value==1){ printf("longjmp = %d\n", value); exit(1); } } { printf("Block 2:\n"); printf("Call Return...\n"); Return(); } } void Return(void){

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

211

longjmp(jmp, 1); }

28 29

jmp_buf، و البنية setjmpالدالة : ٣,٥,٣١الربنامج :signal.h امللف الرأسي٣,٥,٩

.raise، و الدالة املستعملة بكثرة هي الدالة raise و signalحيتوي هذه امللف الرأسي على دالتني مها

:raise الدالة٣,٥,٩,١اك يف ذاكـرة و عملها هو إاء الربنامج يف حاالت مثل حدوث إنته ،int من نوع وسيطتوي هذه الدالة على حت

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

الشرح قيمته اسم الثابتSIGABRT يف حالة اإلنتهاء الغري الطبيعي للربنامج، يستدعي الدالة ٢٢abort

SIGFPE ضييف حالة خطأ ريا ٨

SIGILL يف حالة حدوث أمر غري شرعي ٤

SIGINT املقاطعة ٢

SIGSEGV يف حالة حدوث إنتهاك لذاكرة ١١

SIGTERM اء ١٥جالربنامإ raiseأهم الثوابت اليت تستعمل مع الدالة :٣,٥,١اجلدول

:stdarg.h الرأسي امللف٣,٥,١٠

حيتـوي .، و هو خاص باستعمال الوسائط املتعددة لـدوال standard argumentاسم هذا امللف الرأسي خمتصر من اليت سيتم اسـتعماهلا وسائط، و هو الذي سيحمل عدد الوسائط أو va_list على املؤشر stdarg.h امللف الرأسي

، حيث حيتوي هـذا املختـصر علـى va_start ؤشر باستخدام املختصر امل initialize يف الدالة، و جيب دائما تشغيل و بعد . األول لدالة وسيط الثاين هو اسم ال وسيطالذي سيتم تشغيله، و ال va_list األول هو ملؤشر وسيط، ال وسيطنيم الذي سـيت val_list لـ األول هو مؤشر وسيط، ال وسيطني، و الذي حيتوي على va_arg نستعمل املختصر ذلك

سيتم أخذه، و يف النهاية نقوم بإاء تـشغيل املؤشـر الذي وسيطنضع فيه نوع ال الثاين وسيطاستعماله يف الدالة، و ال

va_list و ذلك باستخدام املختصر va_endمثال ،:

#include<stdio.h> 1

212

#include<stdarg.h> void Arg_List(int list, ...); /*Function prototype*/ main(){ Arg_List(5, 10, 20, 30, 40, 50); } void Arg_List(int list, ...){ va_list pList; int iArg=0, i; printf("There are %d argument(s)\n", list); va_start(pList, list); /*initialize the pList pointer*/ for(i=01;i<=list;i++){ iArg = va_arg(pList, int); printf("argument %d = %d\n", i, iArg); } va_end(pList); }

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

va_list، و املؤشر va_end و الدالة va_arg، الدالة va_startالدالة : ٣,٥,٣٢الربنامج :stddef.h امللف الرأسي٣,٥,١١

و هو معرف على الشكل NULL ، و هو حيتوي على الثابتStandard Definition لف الرأسي خمتصر مناسم هذا امل :التايل

#define NULL 0

:و هو معرف على الشكل التايل size_t على املتغريو حيتوي

typedef unsigned size_t;

:و طريقة استعماله كتايل

#include<stdio.h> #include<stddef.h> main(){ size_t uInt = 65535; printf("%u\n", uInt); }

1 2 3 4 5 6 7 8

213

size_tاملتغري : ٣,٥,٣٣الربنامج :، و هو معرف بطريقتني مهاptrdiff_t على املتغريو حيتوي أيضا

typedef long ptrdiff_t;

:و الطريقة

typedef int ptrdiff_t;

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

#include<stdio.h> #include<stddef.h> main(){ ptrdiff_t Int = 65535; ptrdiff_t Long = 2147483647; printf("Int = %d\n", Int); printf("Long = %d\n", Long); }

1 2 3 4 5 6 7 8 9 10

ptrdiff_t املتغري: ٣,٥,٣٤الربنامج :stdio.h امللف الرأسي٣,٥,١٢

، حيث حيتوي على أهم الدوال و Standard Input Output يعرب من أهم امللفات الرأسية القياسية، و امسه خمتصر مناملختصرات اليت ميكن استعماهلا يف أغلب الربامج، و دراسة مجيع تلك الدوال و املختصرات بأمثل يأخذ الكـثري مـن

ينقسم هذا امللف الرأسي إىل أصناف، لكل . تلك الدوال و املختصرات و اهلدف منها أمساءكتفي مبعرفة نلذا الصفحات .صنف جمموعة من الدوال و املختصرات اخلاصة به

:printf الدالة٣,٥,١٢,١

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

#include<stdio.h> main(){

1 2 3

214

int Number = 100; char Char = 'A'; char String[] = "Hello, World!\n"; printf("%d\n", Number); printf("%c\n", Char); printf(String); }

4 5 6 7 8 9 10 11

printf الدالة: ٣,٥,٣٥الربنامج :sprintf الدالة٣,٥,١٢,٢

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

#include<stdio.h> main(){ char Buffer[255]; sprintf(Buffer, "Number = %d\nCharacter = %c\nString = %s\n", 100, 'A', "Hello, World!"); printf(Buffer); }

1 2 3 4 5 6 7 8 9 10

sprintf الدالة: ٣,٥,٣٦الربنامج :vprintf الدالة٣,٥,١٢,٣ :، مثالva_list على شكلوسائطو لكنها تأخذ ال printfمثل الدالة

#include<stdio.h> #include<stdarg.h> void ArgLst(char *format, ...); main(){ int Number = 100; char Char = 'A'; char String[] = "Hello, World!"; ArgLst("Number = %d\nChar = %c\nStrin = %s\n",\ Number, Char, String); } void ArgLst(char *format, ...){ va_list Lst; va_start(Lst, format); vprintf(format, Lst); va_end(Lst); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

215

vprintf الدالة: ٣,٥,٣٧الربنامج :vfprintf الدالة٣,٥,١٢,٤

: فقط هي خاصة بالتعامل مع امللفات، مثالvprintf هي مطابقة لدالة

#include<stdio.h> #include<stdarg.h> void ArgLst(char *format, ...); main(){ int Number = 100; char Char = 'A'; char String[] = "Hello, World!"; ArgLst("Number = %d\nChar = %c\nStrin = %s\n",\ Number, Char, String); } void ArgLst(char *format, ...){ va_list Lst; FILE *File; File = fopen("Info.txt", "w"); va_start(Lst, format); vfprintf(File, format, Lst); va_end(Lst); fclose(File); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

vfprintf الدالة: ٣,٥,٣٨الربنامج :vsprintf ة الدال٣,٥,١٢,٥

:، مثالvprintf و الدالة sprintfهذه الدالة مدجمة مع كل من الدالة

#include<stdio.h> #include<stdarg.h> void ArgLst(char *format, ...); main(){ int Number = 100; char Char = 'A'; char String[] = "Hello, World!"; char buffer[255]; ArgLst(buffer, "Number = %d\nChar = %c\nStrin = %s\n",\ Number, Char, String); printf(buffer); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

216

void ArgLst(char *buffer, char *format, ...){ va_list Lst; va_start(Lst, format); vsprintf(buffer, format, Lst); va_end(Lst); }

17 18 19 20 21 22 23 24

vsprintf الدالة: ٣,٥,٣٩الربنامج :scanf الدالة٣,٥,١٢,٦

:تقوم هذه الدالة باستقبال الرموز من لوحة املفاتيح، و هي دالة خاصة باإلدخال، مثال

#include<stdio.h> main(){ char string[255]; printf("Your name, Please: "); scanf("%s", string); printf("Nice to meet you %s!\n", string); }

1 2 3 4 5 6 7 8 9

scanf الدالة: ٣,٥,٤٠الربنامج :fscanf الدالة٣,٥,١٢,٧

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

#include<stdio.h> main(){ FILE *File; char buffer[255]; File = fopen("Info.txt", "r"); fscanf(File, "%s", buffer); printf("%s\n", buffer); }

1 2 3 4 5 6 7 8 9 10 11 12

fscanf الدالة: ٣,٥,٤١الربنامج :sscanf الدالة٣,٥,١٢,٨

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

#include<stdio.h> main(){ char buffer[] = "Hello, World! 15";

1 2 3 4

217

char string1[255], string2[255]; int number; sscanf(buffer, "%s%s%d", string1, string2, &number); printf("String = %s %s\n", string1, string2); printf("Number = %d\n", number); }

5 6 7 8 9 10 11 12 13

sscanf الدالة: ٣,٥,٤٢الربنامج :fgetc الدالة٣,٥,١٢,٩

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

#include<stdio.h> main(){ FILE *File; char ch; File = fopen("Info.txt", "r"); while(feof(File)==0){ ch = fgetc(File); printf("%c", ch); } }

1 2 3 4 5 6 7 8 9 10 11 12 13

fgetc الدالة: ٣,٥,٤٣الربنامج :fgets الدالة٣,٥,١٢,١٠ :فقط تأخذ سطر كامل بدل حرف واحد، مثال fgetcمثل الدالة

#include<stdio.h> main(){ FILE *File; char buffer[255]; File = fopen("Info.txt", "r"); while(feof(File)==0){ fgets(buffer, 255, File); printf(buffer); } fclose(File); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

fgets الدالة: ٣,٥,٤٤الربنامج

218

:fputc الدالة٣,٥,١٢,١١ :وم هذه الدالة بكتابة حرف إىل ملف نصي، مثالتق

#include<stdio.h> main(){ FILE *File; File = fopen("Info.txt", "w"); fputc('A', File); fclose(File); }

1 2 3 4 5 6 7 8 9 10

fputc الدالة: ٣,٥,٤٥الربنامج :fputs الدالة٣,٥,١٢,١٢

:لسلة حرفية يف ملف نصي، مثالتقوم هذه الدالة بكتابة س

#include<stdio.h> main(){ FILE *File; File = fopen("Info.txt", "w"); fputs("Hello, World!", File); fclose(File); }

1 2 3 4 5 6 7 8 9 10

fputs الدالة: ٣,٥,٤٩الربنامج :getc الدالة٣,٥,١٢,١٣

:، مثالوسائطتوي على و لكنها ال حت fgetc مثل الدالة

#include<stdio.h> main(){ FILE *File; char ch; File = fopen("Info.txt", "r"); while(feof(File)==0){ ch = getc(File); printf("%c", ch); } fclose(File);

1 2 3 4 5 6 7 8 9 10 11 12 13 14

219

} 15 getc الدالة: ٣,٥,٤٧الربنامج

:getchar الدالة٣,٥,١٢,١٤ :، مثال من املستخدمتقوم هذه الدالة باإلدخال، حيث تستقبل حرف واحد فقط

#include<stdio.h> main(){ char ch; printf("Enter a character: "); ch = getchar(); printf("Your character is: %c\n", ch); }

1 2 3 4 5 6 7 8 9

getchar الدالة: ٣,٥,٤٨الربنامج :gets الدالة٣,٥,١٢,١٥

:تقوم هذه الدالة اإلدخال أيضا، و هي تستقبل سلسلة حرفية من املستخدم، مثال

#include<stdio.h> main(){ char str[255]; printf("Enter a string(Max character 255): "); gets(str); printf("Your string are: %s\n", str); }

1 2 3 4 5 6 7 8 9

gets الدالة: ٣,٥,٤٩الربنامج :putc الدالة٣,٥,١٢,١٦ :، مثالfputc مثل الدالة

#include<stdio.h> main(){ FILE *File; File = fopen("Info.txt", "w"); putc('A', File); fclose(File); }

1 2 3 4 5 6 7 8 9 10

putc لةالدا: ٣,٥,٥٠الربنامج

220

:putchar الدالة ٣,٥,١٢,١٧ :تقوم هذه الدالة بطباعة حرف على شاشة احلاسوب، مثال

#include<stdio.h> main(){ char ch = 'A'; printf("ch = "); putchar(ch); putchar('\n'); }

1 2 3 4 5 6 7 8 9

putcharالدالة : ٣,٥,٥١الربنامج :puts الدالة٣,٥,١٢,١٨

وم هذه الدالة بطباعة سلسلة حرفية على شاشة احلاسوب،حيث يتم الرجوع إىل سطر جديـد يف كـل سلـسلة تق :حرفية، مثال

#include<stdio.h> main(){ char str1[] = "Line 1: Hello, World!"; char str2[] = "Line 2: Hello, World!"; puts(str1); puts(str2); }

1 2 3 4 5 6 7 8 9

puts الدالة: ٣,٥,٥٢الربنامج :ungetc الدالة٣,٥,١٢,١٩

:تقوم هذه الدالة حبذف حرف من ملف نصي، مثال

#include<stdio.h> main(){ FILE *File; File = fopen("Info.txt", "w"); ungetc('A', File); fclose(File); }

1 2 3 4 5 6 7 8 9 10

ungetc لةالدا: ٣,٥,٥٣الربنامج :fopen الدالة٣,٥,١٢,٢٠

221

األول لسلسلة حرفية اليت هي اسم وسيط، ال وسيطنيتستعمل هذه الدالة لقراءة و كتابة امللفات، حيث حتتوي على الثاين هو النمط الذي سيتم استعماله مع امللف، حيث يكون ذلك النمط إمـا الوسيطامللف الذي سيتم التعامل معه، و

:راءة أو كلهما على امللفات، مثالللكتابة أو الق

#include<stdio.h> main(){ FILE *File; File = fopen("FileName.Ext", "r"); if(File==NULL) printf("File does not exist!\n"); else printf("File exist now!\n"); File = fopen("FileName.Ext", "w"); if(File!=NULL) printf("File Created!\n"); if(File==NULL) printf("File does not exist!\n"); else printf("File exist now!\n"); fclose(File); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

fopen الدالة: ٣,٥,٥٤الربنامج :freopen الدالة٣,٥,١٢,٢١

أو stdin ،stdout مـا إو الذي يكون FILE إضايف ملؤشر بينة وسيطمع fopen مثل الدالة الدالة هذه ملتستعstderr ،مثال:

#include<stdio.h> main(){ FILE *File; File = freopen("Info.txt", "w", stderr); if(!File) fprintf(stdout, "Error!\n"); else fprintf(File, "String!"); fclose(File); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14

freopen الدالة: ٣,٥,٥٥الربنامج

222

:fclose الدالة٣,٥,١٢,٢٢و هي تقوم بغلق مجيـع fcloseall_ تقوم هذه الدالة بغلق ملف حيث ميكن استعماله مرة أخرى، و توجد الدالة

:امللفات اليت مت إغالقها، مثالامللفات الغري مغلق و ترجع قيمة لعدد

#include<stdio.h> main(){ FILE *File1, *File2, *File3; File1 = fopen("Info1.txt", "w"); File2 = fopen("Info2.txt", "w"); File3 = fopen("Info3.txt", "w"); fclose(File1); printf("%d file(s) closed by _fcloseall()\n",\ _fcloseall()); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14

fclose الدالة: ٣,٥,٥٦الربنامج :remove الدالة٣,٥,١٢,٢٣

:تقوم هذه الدالة حبذف امللفات، مثال

#include<stdio.h> main(){ FILE *File; /*Create temporary.tmp*/ File = fopen("temporary.tmp", "w"); fclose(File); /*remove temporary.tmp*/ remove("temporary.tmp"); }

1 2 3 4 5 6 7 8 9 10 11 12

remove الدالة: ٣,٥,٥٧الربنامج :rename الدالة٣,٥,١٢,٢٤

:تقوم هذه الدالة بإعادة تسمية ملف، مثال

#include<stdio.h> main(){ printf("Rename Info.txt To Data.dat...\n"); rename("Info.txt", "Data.dat"); printf("Operation Terminate...\n");

1 2 3 4 5 6

223

} 7 rename الدالة: ٣,٥,٥٨الربنامج

:tmpfile الدالة٣,٥,١٢,٢٥للربنامج، حيث يتم حذف امللف املؤقت عنـد اخلـروج مـن temporary file تقوم هذه الدالة بإنشاء ملف مؤقت

:أو اية الربنامج، مثالالربنامج

#include<stdio.h> main(){ FILE *File; printf("Create a Temporary File...\n"); File = tmpfile(); printf("Temporary File Created...\n"); /*At exit*/ printf("Temporary File deleted...\n"); }

1 2 3 4 5 6 7 8 9 10 11 12

tmpfile الدالة: ٣,٥,٥٩امج الربن :fread الدالة٣,٥,١٢,٢٦

األول وسيط، ال وسائطتقوم هذه الدالة بقراءة حمتوى ملف و وضع نسخة هلا يف سلسلة حرفية، و حتتوي على أربعة و ،البايتـات الثاين هو حجم احملتوى الواحد ب وسيطهو لسلسلة احلرفية اليت سيتم وضع فيها نسخة من نص امللف، و ال

:، مثالFILE األخري و مؤشر للبنية وسيط الثالث هو عدد األحرف اليت نريد نسخها، و الوسيطال

#include<stdio.h> main(){ FILE *File; char buffer[255]; File = fopen("Info.txt", "r"); fread(buffer, sizeof(char), 255, File); printf("%s\n", buffer); }

1 2 3 4 5 6 7 8 9 10 11

fread الدالة: ٣,٥,٦٠الربنامج :fwrite الدالة٣,٥,١٢,٢٧

:، مثالfread الدالةوسائط، و هلا نفس fread لدالةةتقوم هذه الدالة بالكتابة على امللفات، و هي الدالة املعاكس

#include<stdio.h>

1 2

224

main(){ FILE *File; char buffer[] = "String!"; File = fopen("Info.txt", "w"); fwrite(buffer, sizeof(char), 7, File); fclose(File); }

3 4 5 6 7 8 9 10 11

fwrite الدالة: ٣,٥,٦١الربنامج :fseek الدالة٣,٥,١٢,٢٨

ـ وسيط، ال وسائطتقوم هذه الدالة بالتحكم يف مكان مؤشر مللف نصي، حيث حتتوي على ثالثة و مؤشـر األول ه البايتاتو هو عدد long الثاين هو متغري من نوع وسيطو هو امللف الذي سيتم حتديد مكان مؤشره، و ال FILE للبنية الثالث، وسيط بعد املؤشر الذي مت حتديده يف ال بايتات فسيتم جتاهل مخسة ٥ الثالث، مثال إذا أعطيناه القيمة وسيطمن ال

نقوم بتحديد املؤشر لنص، و له ثوابت و هـي وسيط، و من هذا ال int ري من نوع الثالث، و هو متغ وسيطو أخريا ال SEEK_CUR و SEEK_SET و SEEK_ENDمثال ،:

#include<stdio.h> main(){ FILE *File; char ch_set, ch_cur, ch_end; File = fopen("Info.txt", "r"); /*Beginning of file*/ fseek(File, 0L, SEEK_SET); printf("SEEK_SET Begin:\n"); while(feof(File)==0){ ch_set = fgetc(File); printf("%c", ch_set); } printf("\nSEEK_SET End.\n"); /*Current position of file pointer*/ fseek(File, 0L, SEEK_CUR); printf("SEEK_CUR Begin:\n"); while(feof(File)==0){ ch_cur = fgetc(File); printf("%c", ch_cur); } printf("\nSEEK_CUR End.\n"); /*End of file*/ fseek(File, 0L, SEEK_END); printf("SEEK_END Begin:\n");

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

225

while(feof(File)==0){ ch_end = fgetc(File); printf("%c", ch_end); } printf("\nSEEK_END End.\n"); }

33 34 35 36 37 38

fseek الدالة: ٣,٥,٦٢الربنامج :ftell الدالة٣,٥,١٢,٢٩

:تقوم هذه الدالة بإرجاع قيمة ملكان مؤشر النص احلايل، مثال

#include<stdio.h> main(){ FILE *File; int Position; char buff[3]; File = fopen("Info.txt", "r"); /* Move the pointer of file 3 bytes by reading character*/ fread(buff, sizeof(char), 3, File); Position = ftell(File); printf("Position after read 3 characters is %d\n",\ Position); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

ftell الدالة: ٣,٥,٦٣الربنامج :rewind الدالة٣,٥,١٢,٣٠

:، مثالfseek(File, 0L, SEEK_SET) تقوم هذه الدالة بإرجاع مؤشر ملف إىل البداية، و هي مكافئة لـ

#include<stdio.h> main(){ FILE *File; char ch; File = fopen("Info.txt", "r"); fseek(File, 0L, SEEK_END); printf("fseek(File, 0L, SEEK_END):\n"); while(feof(File)==0){ ch = fgetc(File); printf("%c", ch); } printf("\n----------------\n"); rewind(File);

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

226

printf("rewind(File):\n"); while(feof(File)==0){ ch = fgetc(File); printf("%c", ch); } printf("\n"); }

19 20 21 22 23 24 25 26

rewind الدالة: ٣,٥,٦٤الربنامج :feof الدالة٣,٥,١٢,٣١

إذا مؤشـر ٠ اية امللف، حيث ترجع هذه الدالة القيمة وصل إىل تقوم هذه الدالة بإختبار إذا كان مؤشر ملف قد :امللف يف النهاية، و ترجع قيمة غري الصفر إن مل يكن املؤشر يف اية امللف، مثال

#include<stdio.h> main(){ FILE *File; File = fopen("Info.txt", "r"); fseek(File, 0L, SEEK_END); if(feof(File)==0) printf("Position of pointer is in the end of file\n"); else printf("Position of pointer is not in the end of file\n"); }

1 2 3 4 5 6 7 8 9 10 11 12 13

feof الدالة: ٣,٥,٦٥الربنامج :stdlib.h امللف الرأسي٣,٥,١٣

ث حيتوي هذا امللف الرأسي على جمموعة من الدوال يف كـل مـن ، حيStandard Library خمتصر من stdlib االسم . و دوال أخرى)التخزين( دوال حتويل األرقام، دوال ختصيص الذاكرة

:atof الدالة٣,٥,١٣,١

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

#include<stdio.h> #include<stdlib.h> main(){ char str[3] = "123"; double num;

1 2 3 4 5 6 7

227

num = atof(str); printf("%f\n", num); }

8 9 10 11

atof الدالة: ٣,٥,٦٦الربنامج :atoi الدالة٣,٥,١٣,٢

، int إال أا حتول أعداد السلسلة احلرفية إىل أعداد صحيحة من نوع atof تقوم هذه الدالة بنفس ما تقوم به الدالة :مثال

#include<stdio.h> #include<stdlib.h> main(){ char str[3] = "123"; int num; num = atoi(str); printf("%d\n", num); }

1 2 3 4 5 6 7 8 9 10 11

atoi الدالة: ٣,٥,٦٧الربنامج :atol الدالة٣,٥,١٣,٣

إال أا حتول أعداد السلسلة احلرفية إىل أعداد صحيحة مـن نـوع atoi تقوم هذه الدالة بنفس ما تقوم به الدالة longمثال ،:

#include<stdio.h> #include<stdlib.h> main(){ char str[3] = "123"; long num; num = atoi(str); printf("%ld\n", num); }

1 2 3 4 5 6 7 8 9 10 11

atol الدالة :٣,٥,٦٨الربنامج :rand الدالة٣,٥,١٣,٤

:تقوم هذه الدالة بتوليد أرقام عشوائية، مثال

#include<stdio.h> #include<stdlib.h>

1 2

228

main(){ int i, j=0; for(i=0;i<=10;i++){ j=rand()%100; printf("j = %d\n", j); } }

3 4 5 6 7 8 9 10

rand الدالة: ٣,٥,٦٩الربنامج ١٠٠، و ميكننا أن جنعلها أكثر أو أقل من ذلك فقط نقوم بالتغري يف العدد ١٠٠و هنا لن تتعد األعداد العشوائية العدد .الذي موجود بعد رامز باقي القسمة

:srand الدالة ٣,٥,١٣,٥

متغري من حلظـة ألخـرى ، حيث جيعل تلك القيم العشوائية rand مولد األرقام العشوائية تقوم هذه الدالة بتشغيل :، مثالtime عندما منرر له الدالة

#include<stdio.h> #include<stdlib.h> #include<time.h> main(){ int i; srand(time(NULL)); for(i=0;i<=10;i++){ printf("%d\n", rand()%100); } }

1 2 3 4 5 6 7 8 9 10 11 12 13

srandالدالة : ٣,٥,٧٠الربنامج :abort الدالة٣,٥,١٣,٦

رسالة خترب املستخدم أن إظهار الربنامج و فبإيقاتستعمل هذه الدالة يف حالة وجود أخطاء يف الربنامج، حيث تقوم :طريقة إنتهاء الربنامج غري طبيعية، مثال

#include<stdio.h> #include<stdlib.h> main(){ FILE *File; if(!(File=fopen("FileName.txt", "r"))){ printf("Can't open file\n"); abort();

1 2 3 4 5 6 7 8 9

229

} fclose(File); }

10 11 12 13

abort الدالة: ٣,٥,٧١الربنامج :exit الدالة٣,٥,١٣,٧

و هـو EXIT_FAILURE ، حيث يوجد ثوابت باسـم ١ا القيمة تقوم هذه الدالة باإلاء الربنامج إذا مت التمرير إليه : و الذي يعين اخلروج السليم للربنامج، مثال٠و هو القيمة EXIT_SUCCESS ، و الثابت١نفسه القيمة

#include<stdio.h> #include<stdlib.h> main(){ FILE *File; if(!(File=fopen("FileName.txt", "r"))){ printf("Can't open file\n"); exit(EXIT_FAILURE); }else exit(EXIT_SUCCESS); fclose(File); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14

exit الدالة: ٣,٥,٧٢الربنامج :atexit الدالة ٣,٥,١٣,٨

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

#include<stdio.h> #include<stdlib.h> void AtExit(){ printf("Program - end\n"); } main(){ atexit(AtExit); printf("Program - start\n"); }

1 2 3 4 5 6 7 8 9 10 11 12

atexitالدالة : ٣,٥,٧٣الربنامج :system الدالة٣,٥,١٣,٩

:أوامر النظام مثال إذا أردنا مسح شاشة اجلهاز باستخدام أوامر النظام نكتبتقوم هذه الدالة بتنفيذ

230

#include<stdio.h> #include<stdlib.h> main(){ printf("Message!\n"); /*In DOS OS*/ system("cls"); /*In Unix/Linux OS*/ system("clear"); }

1 2 3 4 5 6 7 8 9 10 11 12 13

system الدالة: ٣,٥,٧٤ج الربنام :abs الدالة٣,٥,١٣,١٠

:للعدد الذي مت متريره إليها، مثال int تقوم هذه الدالة بإرجاع القيمة املطلقة من النوع

#include<stdio.h> #include<stdlib.h> main(){ int i=-10, j=20; printf("absolute value if 'i' is %d\n", abs(i)); printf("absolute value if 'j' is %d\n", abs(j)); }

1 2 3 4 5 6 7 8 9

abs الدالة: ٣,٥,٧٥الربنامج :labs الدالة ٣,٥,١٣,١١ :، مثالlong إال أا ترجع القيمة املطلق من النوع absنفس الدالة

#include<stdio.h> #include<stdlib.h> main(){ long i=-10, j=20; printf("absolute value if 'i' is %d\n", labs(i)); printf("absolute value if 'j' is %d\n", labs(j)); }

1 2 3 4 5 6 7 8 9

labsالدالة : ٣,٥,٧٦الربنامج :div الدالة٣,٥,١٣,١٢

:ل مثا،int و الناتج يكون من نوع الثاين،وسيط األول على قيمة الوسيطتقوم هذه الدالة بتقسيم قيمة ال

#include<stdio.h> #include<stdlib.h>

1 2

231

main(){ int a=12, b=6; printf("%d/%d = %d\n", a, b, div(a, b)); }

3 4 5 6 7 8

div الدالة: ٣,٥,٧٧الربنامج :ldiv الدالة٣,٥,١٣,١٣

: مثال،long ن من نوع الثاين، و الناتج يكووسيط األول على قيمة الوسيطتقوم هذه الدالة بتقسيم قيمة ال

#include<stdio.h> #include<stdlib.h> main(){ long a=12, b=6; printf("%d/%d = %d\n", a, b, ldiv(a, b)); }

1 2 3 4 5 6 7 8

ldiv الدالة: ٣,٥,٧٨الربنامج :string.h امللف الرأسي٣,٥,١٤

ـ اموعة توجد جمموعتني من الدوال، string.h يف امللف الرأسي ، string و هي تعين str األوىل تبدأ أمساءها بـ اموعة و سندرس أهم دوال هذا امللف الرأسي، و اليت أغلبها تبـدأ .memory و هي تعين mem الثانية تبدأ أمساءها ب .str بـ

:strncpy و الدالة strcpy الدالة٣,٥,١٤,١

األول هو سلـسلة وسيط، ال وسيطنيا strcpy ية، الدالة األوىل تقوم كال من الدالتني بنسخ نص إىل سلسلة حرف ا ثالثـة strncpy و الدالة الثانية . الثاين هو النص الذي سيتم نسخه وسيطاحلروف اليت سيتم نسخ فيها النص، و ال

الثالث فهو عـدد وسيط، أما ال strcpy األول و الثاين لدالة وسيط الثاين مها نفس ال وسيط األول و ال وسيط، ال وسائط :األحرف اليت نريد نسخها، مثال

#include<stdio.h> #include<string.h> main(){ char str[] = "Hello"; char empty[5]; char empty2[5]; strcpy(empty, str); strncpy(empty2, str, 3);

1 2 3 4 5 6 7 8 9 10 11

232

printf("empty = %s\n", empty); printf("empty2 = %s\n", empty2); }

12 13 14

strncpy و الدالة strcpy الدالة: ٣,٥,٧٩الربنامج :ا نص سابقا، فسيتم حذفه، مثال empty أما إذا كانت السلسلة

#include<stdio.h> #include<string.h> main(){ char str[] = "Hello"; char empty[5] = "empty"; strcpy(empty, str); printf("empty = %s\n", empty); }

1 2 3 4 5 6 7 8 9 10 11

)٢( strcpy الدالة: ٣,٥,٨٠الربنامج :strncat و الدالة strcat الدالة٣,٥,١٤,٢

تقوم بنسخ نص و إضافته إىل strncat بنسخ نص و إضافته إىل سلسلة حرفية، و أيضا الدالة strcat تقوم الدالة :strcat األحرف اليت نريد إضافتها، مثال لطريقة استعمال الدالةة حرفية مع حتديد عددسلسل

#include<stdio.h> #include<string.h> main(){ char str[] = "Hello"; printf("str = %s\n", str); strcat(str, ", World"); printf("str = %s\n", str); }

1 2 3 4 5 6 7 8 9 10

strcat الدالة: ٣,٥,٨١الربنامج :strncat و هذا مثال لطريقة استعمال الدالة

#include<stdio.h> #include<string.h> main(){ char str[] = "Hello"; printf("str = %s\n", str); strncat(str, ", World", 3); printf("str = %s\n", str); }

1 2 3 4 5 6 7 8 9 10

strncat الدالة: ٣,٥,٨٢لربنامج ا

233

:strncmp و الدالة strcmp الدالة٣,٥,١٤,٣باملقارنة بني سلسلتني، إذا كانت السلسلة احلرفية األوىل هي األكرب فستكون النتيجة أكرب مـن strcmp تقوم الدالة

تقـوم strncmp أيـضا الدالـة ، و ٠، و يف حالة أن السلسلة احلرفية الثانية هي األكرب فستكون النتيجة أصغر من ٠ بني سلسلتني مع حتديد عدد حروف السلسلة احلرفية األوىل اليت نريد مقارنتها مع السلسلة احلرفية الثانية، مثال باملقارنة

:strcmp حول طريقة استعمال الدالة

#include<stdio.h> #include<string.h> main(){ char str1[] = "Hello"; char str2[] = "Hello2"; int cmp = strcmp(str1, str2); if(cmp>0) printf("str1 > str2\n"); else printf("str1 < str2\n"); }

1 2 3 4 5 6 7 8 9 10 11 12 13

strcmp الدالة: ٣,٥,٨٣الربنامج :strncmp و هذا مثال لطريقة استعمال الدالة

#include<stdio.h> #include<string.h> main(){ char str1[] = "Hello"; char str2[] = "Hello2"; int cmp = strncmp(str1, str2, 3); if(cmp>0) printf("str1 > str2\n"); else printf("str1 < str2\n"); }

1 2 3 4 5 6 7 8 9 10 11 12 13

strncmp الدالة: ٣,٥,٨٤الربنامج :strrchr و الدالة strchr الدالة٣,٥,١٤,٤

للبحث عن مكان حرف يف سلسلة حرفية، و إذا كان احلرف الذي نريد البحث عنـه يف strchr تستعمل الدالة تأخـذ و لكنـها strchr مثل الدالة strrchr السلسلة احلرفية موجود مرتني فسيتم أخذ مكان أول حرف، و الدالة

:احلرف األخري بدل األول، مثال

#include<stdio.h> 1

234

#include<string.h> main(){ char str[] = "Hello", *strdest; char ch = 'l'; int result; printf("%s\n", str); printf("12345\n"); strdest = strchr(str, ch); result = (int)(strdest-str+1); printf("First '%c' in position %d\n", ch, result); strdest = strrchr(str, ch); result = (int)(strdest-str+1); printf("Last '%c' in position %d\n", ch, result); }

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

strrchr و الدالة strchr الدالة: ٣,٥,٨٥الربنامج :strcspn و الدالة strspn الدالة٣,٥,١٤,٥

ميكن معرفة عدد جمموعة من األحرف يف سلسلة حرفية، حيث جيـب أن تكـون تلـك strspn ام الدالة باستخدحديد مكان جمموعة من فهي تقوم بت strcspn ، أما الدالة ٠األحرف هي بداية السلسلة احلرفية و إال ستكون النتيجة

:احلروف يف سلسلة حرفية، مثال

#include<stdio.h> #include<string.h> main(){ char str1[] = "HHHeeelllooo"; char str2[] = "He"; char str3[] = "lllooo"; int result; result = strspn(str1, str2); printf("There are %d character(s) of '%s' in string '%s'\n",\ result, str2, str1); result = strcspn(str1, str3); printf("First '%s' in string '%s' is start at character %d\n",\ str3, str1, result); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

strcspn و الدالة strspn الدالة: ٣,٥,٨٦الربنامج . رغبات املربمجو لكن مرونة الدالتني ليست كبرية، لذا يفضل أن يتم كتابتهما من جديد على حسب

:strpbrk الدالة٣,٥,١٤,٦

235

بنسخ سلسلة حرفية و لصقها يف سلسلة حرفية أخرى، حيث جيب أن نقوم بتحديـد بدايـة strpbrkتقوم الدالة :النسخة باستخدام أحرف، مثال

#include<stdio.h> #include<string.h> main(){ char str[] = "Hello"; char *result = strpbrk(str, "l"); printf("%s\n", result); }

1 2 3 4 5 6 7 8 9

strpbrk الدالة: ٣,٥,٨٧الربنامج :strstr الدالة٣,٥,١٤,٧

:يف إختالف بسيط و هي أا تبحث عن مكان نص بدل حرف واحد، مثال strchr مطابقة لدالة strstrالدالة

#include<stdio.h> #include<string.h> main(){ char str1[] = "Hello, World!", str2[] = "World"; char *strdest = strstr(str1, str2); int result; result = (int)(strdest-str1+1); printf("The word '%s' is at position %d in string '%s'\n",\ str2, result, str1); }

1 2 3 4 5 6 7 8 9 10 11 12 13

strstr الدالة: ٣,٥,٨٨لربنامج ا :strlen الدالة٣,٥,١٤,٨

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

#include<stdio.h> #include<string.h> main(){ char str[] = "Hello"; int result = strlen(str); printf("'%s' = %d character(s)\n", str, result); }

1 2 3 4 5 6 7 8 9

strlen الدالة: ٣,٥,٨٩الربنامج :strerror الدالة٣,٥,١٤,٩

236

:مثالحتمل هذه الدالة جمموعة من رسائل األخطاء اخلاص بالسالسل احلرفية،

#include<stdio.h> #include<string.h> #include<stdlib.h> main(){ char str[10]; printf("Enter a string (Max 10 characters): "); if((strlen(gets(str)))>10){ printf("%s\n", strerror(12)); exit(1); }else printf("'%s' = %d character(s)\n",\ str, strlen(str)); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

strerror الدالة: ٣,٥,٩٠الربنامج .ام التكرارية باقي الرسائل باستخدؤو ميكن ر

:strtok الدالة٣,٥,١٤,١٠

:حندد جمموعة من األحرف أو الرموز لسلسلة حرفية حيث ال يتم طباعتها، مثال strtok باستعمال الدالة

#include<stdio.h> #include<string.h> main(){ char *string, str[] = "(Hello, World)", tok[] = " (),I"; int i; string = strtok(str, tok); for(i=0;i<2;i++){ printf("%s\n", string); string = strtok(NULL, tok); } }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

strtok الدالة: ٣,٥,٩١الربنامج :time.h امللف الرأسي٣,٥,١٥

الرأسي و حيتوي هذا امللف مبعاجلة التاريخ و الوقت، على جمموعة من الدوال اخلاصة time.h حيتوي امللف الرأسي :و هي معرفة بالشكل التايل tm على بنية باسم

237

struct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst; };

1 2 3 4 5 6 7 8 9 10 11

:و مها معرفان على الشكل التايل time_t و clock_t و حيتوي أيضا على متغريين باسم

typedef long time_t; typedef long clock_t;

.time.h يف امللف الرأسيا ميكن رأيته الدوالسنتحدث عن أهم دوال هذا امللف الرأسي، أما الباقي

:clock الدالة٣,٥,١٥,١

من الصفر، و قسمة قيمة هذه الدالة على الثابت إبتداءا عند بداية الربنامج، لة بالعد، حيث يبدأ عدها تقوم هذه الدا

CLOCKS_PER_SEC أو CLK_PER_SEC يرجع الوقت بالثواين، مثال:

#include<stdio.h> #include<time.h> main(){ for(;;){ printf("%d\n", clock()/CLOCKS_PER_SEC); if((clock()/CLOCKS_PER_SEC)==5) break; } }

1 2 3 4 5 6 7 8 9 10

clock الدالة: ٣,٥,٩٢الربنامج يف حالة أردنـا العـد ٦٠و ميكن أن جنعل العد بالدقائق أو الساعات أو األيام، فقط نقوم بقسم الطريقة السابقة على

إذا أردنا أن يكـون ٢٤ساعات، و نزيد أيضا القسمة على إذا أردنا العد يكون بال ٦٠بالدقائق، و نزيد القسمة على :استخدام هذه الدالة ميكن عمل دالة تأخر تساعدنا كثريا يف براجمنا، الدالة ستكون كتايلبو . العد باأليام

#include<stdio.h> #include<time.h>

1 2

238

void delay(int second); main(){ int waitsec; printf("wait(in seconds): "); scanf("%d", &waitsec); delay(waitsec); printf("Time terminated...\n"); } void delay(int second){ int sec; for(;;){ sec = clock()/CLOCKS_PER_SEC; if(sec==second) break; } }

3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

إنشاء دالة نقوم باإلنتظار لوقت حمدد: ٣,٥,٩٣الربنامج :time الدالة٣,٥,١٥,٢

:، مثال١٩٧٠ جانفي ١ يف اليوم ٠٠:٠٠تقوم هذه الدالة بإرجاع عدد الثواين اليت مرت من الساعة

#include<stdio.h> #include<time.h> main(){ time_t Seconds, Minutes, Hours, Days; Seconds = time(NULL); Minutes = Seconds/60; Hours = Minutes/60; Days = Hours/24; printf("%ld\tseconds since 01/01/1970.\n", Seconds); printf("%ld\tminutes since 01/01/1970.\n", Minutes); printf("%ld\t\thours since 01/01/1970.\n", Hours); printf("%ld\t\tdays since 01/01/1970.\n", Days); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

time الدالة: ٣,٥,٩٤الربنامج ، و ميكن كتابـة NULL الذي مت متريره إليه فارغ وسيطألن ال Seconds بإرجاع قيمة للمتغري time هنا ستقوم الدالة

:املثال السابقة بالطريقة التالية

#include<stdio.h> #include<time.h> main(){

1 2 3 4

239

time_t Seconds, Minutes, Hours, Days; time(&Seconds); Minutes = Seconds/60; Hours = Minutes/60; Days = Hours/24; printf("%ld\tseconds since 01/01/1970.\n", Seconds); printf("%ld\tminutes since 01/01/1970.\n", Minutes); printf("%ld\t\thours since 01/01/1970.\n", Hours); printf("%ld\t\tdays since 01/01/1970.\n", Days); }

5 6 7 8 9 10 11 12 13 14 15 16

)٢( time الدالة: ٣,٥,٩٥الربنامج :difftime الدالة٣,٥,١٥,٣، و الدالة تقوم بإرجاع الفرق بني الوقت األول املوجـود يف time_t من نوع ، كالمها ملتغريات وسيطنيهلذه الدالة

وسيط األول على ال وسيط الثاين بالثواين،أي تقوم بطرح قيمة ال وسيط األول و بني الوقت الثاين و املوجود يف ال وسيطال :الثاين، مثال

#include<stdio.h> #include<time.h> main(){ time_t Start, End; int i; Start = time(NULL); for(i=0;i<=40000;i++){ printf("%d\n", i); } End = time(NULL); printf("Loop taken %.0f seconds to terminate...\n",\ difftime(End, Start)); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

difftime الدالة: ٣,٥,٩٦الربنامج :localtime الدالة٣,٥,١٥,٤

:، مثالtm إىل التوقيت حملي مث متريرها إىل أعضاء البنية١٩٠٠لة بتحويل عدد الثواين من عام تقوم هذه الدا

#include<stdio.h> #include<time.h> main(){ time_t Seconds; int Year, Month, Day, Hour, Minute, Second; struct tm* Time; time(&Seconds);

1 2 3 4 5 6 7 8 9

240

Time = localtime(&Seconds); Year = Time->tm_year+1900, Month= Time->tm_mon+1, Day = Time->tm_mday; Hour = Time->tm_hour, Minute = Time->tm_min, Second = Time->tm_sec; printf("Date: %.4d/%.2d/%.2d\n",Year, Month, Day); printf("Time: %.2d:%.2d:%.2d\n", Hour, Minute, Second); }

10 11 12 13 14 15 16 17 18 19 20

localtime الدالة: ٣,٥,٩٧الربنامج :asctime الدالة٣,٥,١٥,٥

DDD MMM D HH :MM :SSتقوم هذه الدالة بتحويل بيانات البنية اليت مت متريرها إليها إىل سلسلة حروف من الشكل

YYYYمثال ،:

#include<stdio.h> #include<time.h> main(){ time_t Seconds; struct tm* Time; time(&Seconds); Time = localtime(&Seconds); printf("Date/Time: %s", asctime(Time)); }

1 2 3 4 5 6 7 8 9 10 11 12 13

asctime الدالة: ٣,٥,٩٨الربنامج :ctime الدالة٣,٥,١٥,٦

DDD MMM D HH :MM :SS إىل سلسلة حروف من الـشكل ()time تقوم هذه الدالة بتحويل عدد الثواين الدالة

YYYYمثال ،:

#include<stdio.h> #include<time.h> main(){ time_t Seconds; time(&Seconds); printf("Date/Time: %s", ctime(&Seconds)); }

1 2 3 4 5 6 7 8 9 10

ctime الدالة: ٣,٥,٩٩الربنامج

241

، و نـضع )أي الربنامج الذي سنقوم بربجمته( إىل روما، و لنفرض أن روما هي هدفنا يف الربجمة تؤديكل الطرق

سنجد أن الفرق بني طريق و أخرى ليس بكبري، فمثال رمبا نذهب على . إىل روما هي اللغات الربجمة تؤديالطرق اليت ، و هذه هو الفرق بني لغة برجمـة و أخـرى، ...، أوبطيءطريق جنده سهل، أو طريق جنده صعب، أو طريق سريع أو

:مثال

: هو)التجميع( Assembly و لغة ++C الفرق بني لغة

جعلها، ألا لغة عالية املستوى، و من ميزات اللغات العالية املستوى هي ++C ستجد سهولة كبرية يف فهم لغة § املستوى هـي لغـات املنخفضة املستوى، و اللغات منخفضةالتجميع هي لغة غة حتاكي لغة اإلنسان، أما لغة ل

.حتاكي لغة احلاسوب مما جيعلها لغة صعبة .++Cستجد حجم برنامج مكتوب بلغة التجميع أصغري من حجم برنامج مكتوب بلغة §

.و هذا هو الفرق بني كل لغة و أخرى تقريبا

خليل أونيس

)الصور(األشكال جدول ........................................................................... C أساسيات يف لغة–الفصل األول .................................................................................. األدوات الالزمة ١,١

٢٤........................................................ مرحلة إنشاء ملف تنفيذي: ١,١,١الشكل ............................................................ ........................C البدء مع لغة١,٢

٢٦.......................................................................... block: ١,٢,١الشكل ...................................................Variables and Constants املتغريات و الثوابت١,٣

٣٤.................................... real modeالذاكرة و العناوين يف النمط احلقيقي : ١,٣,١الشكل ٣٥.......................................................... متغريطريقة اإلعالن عن : ١,٣,٢الشكل ٤٣.......................................................... طريقة اإلعالن عن ثابت: ١,٣,٣الشكل

....... .....................................................................Comments التعليقات١,٤ ...................................................................................input اإلدخال ١,٥ ................................ ..............................................Operators املؤثرات١,٦

٥٦................................................................ اإلزاحة إىل اليسار: ١,٦,١الشكل ٥٦.................................................................. اإلزاحة إىل ميني: ١,٦,٢الشكل ٥٧........................................................... | ORإستعمال املؤثر أو : ١,٦,٣الشكل ٥٨.......................................................... & ANDإستعمال املؤثر و : ١,٦,٤ل الشك

٥٨............................................................ ^ XORإستعمال املؤثر : ١,٦,٥الشكل .................................... ...................................if, else, else…if القرارات١,٧

٦٠................................................. طريقة إعالن شرط ذات أمر واحد: ١,٧,١الشكل ٦٠................................................ طريقة إعالن شرط ذات عدة أوامر: ١,٧,٢الشكل ٦٢............................................................. else و ifطريقة عمل : ١,٧,٣الشكل

......................................................................................C عناصر لغة١,٨ ................................................................ ملخص للفصل األول، مع إضافات ١,٩

٦٩.......................................................... printfطريقة عمل الدالة : ١,٩,١الشكل ٦٩.......................................................... scanfطريقة عمل الدالة : ١,٩,٢الشكل

....................................................................... )٢( C أساسيات يف لغة–الفصل الثاين ....................................................................................Switch القرار٢,١

. .................................................................Repeated loop حلقات التكرار٢,٢ ٨٦........................................................... while التكرار بواسطة: ٢,٢,١الشكل ٨٩...................................................... do…while التكرار بواسطة: ٢,٢,٢الشكل ٩١.............................................................. for التكرار بواسطة: ٢,٢,٣الشكل ٩٢.................................. gotoطريقة الذهاب إىل مكان ما يف الربنامج عرب : ٢,٢,٤الشكل ٩٢...................................... gotoإنشاء إسم ملكان ميكن الذهاب إليه عرب : ٢,٢,٥الشكل ٩٥.................................................... while يف شرح لعملية التكرار: ٢,٢,٦الشكل ٩٥................................................ do…whileشرح لعملية التكرار يف : ٢,٢,٧الشكل ٩٥...................................................... forشرح لعملية التكرار يف : ٢,٢,٨الشكل ٩٦.............................................................. بطريقة أخرى for: ٢,٢,٩الشكل

................................................................................Arrays املصفوفات٢,٣ ١٠١...................................................... طريقة اإلعالن عن مصفوفة: ٢,٣,١الشكل ١٠٨.............................................. طريقة وضع البيانات يف املصفوفات: ٢,٣,٢الشكل

...............................................................................Pointers املؤشرات٢,٤ ١١٤........................................................ ن عن مؤشرطريقة اإلعال: ٢,٤,١الشكل ١١٦.............................................................. الذاكرة و العناوين: ٢,٤,٢الشكل

.............. ..................................................................Functions الدوال٢,٥ ١٢٥.......................................................... طريقة اإلعالن عن دالة: ٢,٥,١الشكل

.....................................................................Header files امللفات الرأسية٢,٦ .......................................................... Files I/O اإلدخال و اإلخراج يف امللفات٢,٧

١٤١................................................................ طريقة فتح ملف: ٢,٧,١الشكل . ............................................................................structures التراكيب ٢,٨

١٤٧.......................................................... طريقة اإلعالن عن بنية: ٢,٨,١الشكل .................................................................ت ملخص للفصل الثاين، معا إضافا ٢,٩

١٦٨.................................................................. جدول أسكي: ٢,٩,١الشكل .............................................................................. C التقدم يف لغة–الفصل الثالث ...........................................................................Enumeration احلساب٣,١

١٧٦..................................................... طريقة اإلعالن عن احلساب: ٣,١,١الشكل

.............................................. Command-line Arguments وسائط الدالة الرئيسية ٣,٢ ..................... ......................................Directives(Preprocessor) التوجيهات ٣,٣ ...................................................................... دوال ذات وسائط غري حمددة ٣,٤ ................................................................Standard Library املكتبة القياسية ٣,٥

داولاجلجدول ........................................................................... C أساسيات يف لغة–الفصل األول .................................................................................. األدوات الالزمة ١,١ .............................................................. ......................C البدء مع لغة١,٢ ...................................................Variables and Constants املتغريات و الثوابت١,٣

٤١............................ ...........................أنواع املتغريات و أحجامها: ١,٣,١اجلدول ............................................................................Comments التعليقات١,٤ ...................................................................................input اإلدخال ١,٥ ..................................................... .........................Operators املؤثرات١,٦ ............................ ...........................................if, else, else…if القرارات١,٧ .............................. ........................................................C عناصر لغة١,٨

٦٤......................................................... Cالكلمات احملجوزة للغة : ١,٨,١اجلدول ٦٥............................................................. حدود أمساء املعرفات: ١,٨,٢اجلدول

٦٥....................................................................... Trigraphs: ١,٨,٣اجلدول

٦٧.............................................................. Cثوابت خاصة بلغة : ١,٨,٤اجلدول

................................................................ملخص للفصل األول، مع إضافات ١,٩ ٧٨................................................................ printfدالة رموز ال: ١,٩,١اجلدول ٧٩................................................................ scanfرموز الدالة : ١,٩,٢اجلدول

....................................................................... )٢( C أساسيات يف لغة–الفصل الثاين .............................. ......................................................Switch القرار٢,١ ............................. .....................................Repeated loop حلقات التكرار٢,٢ ............................................................................. ...Arrays املصفوفات٢,٣ .............................. .................................................Pointers املؤشرات٢,٤ ......................... .......................................................Functions الدوال٢,٥ ............................. ........................................Header files امللفات الرأسية٢,٦ .......................................................... Files I/O اإلدخال و اإلخراج يف امللفات٢,٧ ............................................................................ .structures التراكيب ٢,٨ .................................................................ت ملخص للفصل الثاين، معا إضافا ٢,٩

.............................................................................. C التقدم يف لغة–الفصل الثالث

............................. ..............................................Enumeration احلساب٣,١ .............................................. Command-line Arguments وسائط الدالة الرئيسية ٣,٢ ............................ ...............................Directives(Preprocessor) التوجيهات ٣,٣

١٩٠.................................................................. األمساء املعرفة: ٣,٣,١اجلدول ...................................................................... دوال ذات وسائط غري حمددة ٣,٤ ............................ ....................................Standard Library املكتبة القياسية ٣,٥

٢٠٣......................................................... errnoثوابت املختصر : ٣,٥,١اجلدول ٢٠٤..................................................... float.hثوابت امللف الرأسي : ٣,٥,٢اجلدول ٢٠٥.................................................... limits.hثوابت امللف الرأسي : ٣,٥,١اجلدول ٢١١....................................... raiseأهم الثوابت اليت تستعمل مع الدالة : ٣,٥,١اجلدول

الربامججدول ........................................................................... C أساسيات يف لغة–الفصل األول .................................................................................. األدوات الالزمة ١,١ ............................................................................... .....C البدء مع لغة١,٢

٢٥............................. .............................Cالربنامج األول يف لغة : ١,٢,١الربنامج ٢٦............................. .........................)٢( Cالربنامج األول يف لغة : ١,٢,٢الربنامج ٢٧...................................................... )٣( Cالربنامج األول يف لغة : ١,٢,٣الربنامج ٢٧...................................................... )٤( Cالربنامج األول يف لغة : ١,٢,٤الربنامج ٢٧...................................................... )٥( Cول يف لغة الربنامج األ: ١,٢,٥الربنامج ٢٧...................................................... )٦( Cالربنامج األول يف لغة : ١,٢,٦الربنامج ٢٨...................................................... )٧( Cالربنامج األول يف لغة : ١,٢,٧الربنامج ٢٨...................................................... )٨( Cالربنامج األول يف لغة : ١,٢,٨الربنامج ٢٨...................................................... )٩( Cالربنامج األول يف لغة : ١,٢,٩الربنامج ٢٨.................................................. )١٠( Cلغة الربنامج األول يف : ١,٢,١٠الربنامج ٢٨.................................................. )١١( Cالربنامج األول يف لغة : ١,٢,١١الربنامج ٢٩.................................................. )١٢( Cالربنامج األول يف لغة : ١,٢,١٢الربنامج ٣٠.............................................................. طباعة عدد صحيح:١,٢,١٣الربنامج ٣٠................................................................ استعمال اجلمع: ١,٢,١٤الربنامج ٣٠................................................................... طبع عددين: ١,٢,١٥الربنامج ٣٠.................................................................... عملية مجع: ١,٢,١٦الربنامج ٣١..................................................... مجع و إظهار أعداد حقيقية: ١,٢,١٧الربنامج ٣١.................................................................. اعة حرفطب: ١,٢,١٨الربنامج ٣١.............................................................. )٢(طباعة حرف : ١,٢,١٩الربنامج ٣٢.................................................................... طباعة نص: ١,٢,٢٠الربنامج ٣٢................................................................ )٢(طباعة نص : ١,٢,٢١الربنامج ٣٢....................................................................... ١اخلطأ : ١,٢,٢٢الربنامج

...................................................Variables and Constants املتغريات و الثوابت١,٣

٣٥..................................... طريقة اإلعالن عن متغري من نوع عدد صحيح: ١,٣,١الربنامج ٣٦..................................... طريقة اإلعالن عن متغري من نوع عدد حقيقي: ١,٣,٢الربنامج ٣٦................................. )٢(طريقة اإلعالن عن متغري من نوع عدد حقيقي : ١,٣,٣الربنامج ٣٦................................. )٢(طريقة اإلعالن عن متغري من نوع عدد صحيح : ١,٣,٤الربنامج ٣٦................................. )٣(طريقة اإلعالن عن متغري من نوع عدد صحيح : ١,٣,٥الربنامج ٣٧........................................... طريقة اإلعالن عن متغري من نوع حريف: ١,٣,٦الربنامج ٣٨.................................... طريقة طباعة حمتوى متغري من نوع عدد صحيح: ١,٣,٧الربنامج ٣٨................................................. اطريقة حتديث قيمة متغري و طبعه: ١,٣,٨الربنامج ٣٨..................................... طريقة حتديث قيمة متغري معطاة من متغري آخر: ١,٣,٩الربنامج ٣٩........................................... ناتج مجع بني عددين صحيني يف متغري: ١,٣,١٠الربنامج ٣٩....................................... طريقة طباعة حرف موجود يف متغري حريف: ١,٣,١١ج الربنام

٣٩......................... طريقة طباعة حرف باإلعتماد على رقمه يف جدول أسكي: ١,٣,١٢الربنامج ٤٠............................................................... متغري ذات إشارة: ١,٣,١٣الربنامج ٤٠.............................................................. متغري بدون إشارة: ١,٣,١٤الربنامج ٤١....................................................... طريقة حتديث قيمة متغري: ١,٣,١٥الربنامج ٤٢.................................... ابت و التحديث يف قيمتهطريقة اإلعالن عن ث: ١,٣,١٦الربنامج ٤٢........................................................ طريقة اإلعالن عن ثابت: ١,٣,١٧الربنامج ٤٢.................................................. .)٢(طريقة اإلعالن عن ثابت : ١,٣,١٨الربنامج ٤٣.................................................. .)٣(طريقة اإلعالن عن ثابت : ١,٣,١٩الربنامج

............................................................................Comments التعليقات١,٤ ٤٥..................................................... .التعليقات بالنصوص الطويلة: ١,٤,١الربنامج ٤٦.............................................................. .التعليقات السطرية: ١,٤,٢الربنامج ٤٦........................................................ .كيفية استعمال التعليقات: ١,٤,٣الربنامج ٤٦....................................................................... .١اخلطأ : ١,٤,٤الربنامج ٤٧....................................................................... .٢اخلطأ : ١,٤,٥الربنامج

............................. ......................................................input اإلدخال ١,٥ ٤٨................................ . إلدخال قيمة صحيحةscanfطريقة إستعمال الدالة : ١,٥,١الربنامج

٤٩....................................... . إلدخال حرفscanfطريقة إستعمال الدالة : ١,٥,٢الربنامج ٤٩............................ .)٢( إلدخال قيمة صحيحة scanfدالة طريقة إستعمال ال: ١,٥,٣الربنامج ٤٩............................ .)٣( إلدخال قيمة صحيحة scanfطريقة إستعمال الدالة : ١,٥,٤الربنامج

....... .......................................................................Operators املؤثرات١,٦ ٥١...................................................... طريقة إستعمال مؤثر الزيادة: ١,٦,١الربنامج

٥٢.................................................. )٢(طريقة إستعمال مؤثر الزيادة : ١,٦,٢الربنامج

٥٢.................................................. )٣(طريقة إستعمال مؤثر الزيادة : ١,٦,٣الربنامج

٥٣..................................................... طريقة إستعمال مؤثر النقصان: ١,٦,٤الربنامج

٥٣................................................ )٢(طريقة إستعمال مؤثر النقصان : ١,٦,٥الربنامج

٥٣................................................ .طريقة إستعمال مؤثر باقي القسمة: ١,٦,٦ج الربنام ٥٤.................................................. طريقة إستعمال املؤثرات العالقية: ١,٦,٧الربنامج

٥٥.................................................. طريقة إستعمال املؤثرات املنطقية: ١,٦,٨الربنامج

٥٥.......................................................... مؤثر اإلزاحة إىل اليسار: ١,٦,٩الربنامج

٥٦......................................................... مؤثر اإلزاحة إىل اليمني: ١,٦,١٠الربنامج

٥٦........................................................ # طريقة إستعمال املؤثر :١,٦,١١الربنامج

٥٧..................................................... ##طريقة إستعمال املؤثرين : ١,٦,١٢الربنامج

٥٨................................................... | ORطريقة إستعمال املؤثر أو : ١,٦,١٣الربنامج

٥٨................................................. & ANDطريقة إستعمال املؤثر و : ١,٦,١٤الربنامج

٥٩................................................... ^ XORطريقة إستعمال املؤثر : ١,٦,١٥الربنامج

٥٩................................................. ~ NOTؤثر ال طريقة إستعمال امل: ١,٦,١٦الربنامج

.......................................................................if, else, else…if القرارات١,٧ ٦١.............................................................. ifطريقة إستعمال : ١,٧,١الربنامج

٦١......................................................... .)٢( ifطريقة إستعمال : ١,٧,٢الربنامج ٦٢............................................................ elseطريقة إستعمال : ١,٧,٣الربنامج

٦٣........................................................ else…ifطريقة إستعمال : ١,٧,٤الربنامج

......................................................................................C عناصر لغة١,٨ ٦٥...................................................... .Trigraphsإستعمال رموز : ١,٨,١الربنامج

٦٥................................................... .)٢( Trigraphsإستعمال رموز : ١,٨,٢الربنامج ٦٦................................................................. .الثوابت النصية: ١,٨,٣الربنامج ٦٦.................................................................... .ثابت حريف: ١,٨,٤الربنامج ٦٧................................................................. .الثوابت الرقمية: ١,٨,٥الربنامج ٦٨............................................................ .)٢(الثوابت الرقمية : ١,٨,٦الربنامج

................................................................إضافات ملخص للفصل األول، مع ١,٩ ٧٠.................................................................. .عمر املستخدم: ١,٩,١الربنامج ٧١............................................................... .آلة حاسبة بسيطة: ١,٩,٢الربنامج ٧١......................................................... .استخراج القيمة املطلقة: ١,٩,٣الربنامج ٧٢............................................................... .أخذ العدد الكبري: ١,٩,٤الربنامج ٧٣................................................. .putcharطريقة إستعمال الدالة : ١,٩,٥الربنامج ٧٣................................................. .getcharطريقة إستعمال الدالة : ١,٩,٦الربنامج ٧٤..................................................... .putsطريقة إستعمال الدالة : ١,٩,٧الربنامج

٧٤.................................. .wscanf و الدالة wprintطريقة إستعمال الدالة : ١,٩,٨نامج الرب ٧٥.................................... .putch و الدالة getchطريقة إستعمال الدالة : ١,٩,٩الربنامج ٧٦............................... )٢( putch و الدالة getchطريقة إستعمال الدالة : ١,٩,١٠الربنامج ٧٦................................................ .getcheطريقة إستعمال الدالة : ١,٩,١١الربنامج ٧٦..................................... .wchar_t طريقة إستعمال الكلمة احملجوزة: ١,٩,١٢الربنامج ٧٧................................................................. .wmainالدالة : ١,٩,١٣الربنامج ٧٧.................................................................. .mainالدالة : ١,٩,١٤الربنامج ٧٧..................................................... .إرجاع قيمة لدالة الرئيسية: ١,٩,١٥الربنامج ٧٧................................................. .)٢(إرجاع قيمة لدالة الرئيسية : ١,٩,١٦الربنامج ٧٨............................................... .تفادي إرجاع قيمة لدالة الرئيسية: ١,٩,١٧الربنامج

....................................................................... )٢( C أساسيات يف لغة–الفصل الثاين ....................................................................................Switch القرار٢,١

٨١................................ .if, else, else…ifآلة حاسبة بسيطة بإستخدام : ٢,١,١الربنامج ٨٢............................................ .switchآلة حاسبة بسيطة بإستخدام : ٢,١,٢الربنامج

٨٥....................................................................... .١اخلطأ : ٢,١,٣الربنامج ............................................ ......................Repeated loop حلقات التكرار٢,٢

٨٧......................................................... .while التكرار بواسطة: ٢,٢,١الربنامج ٨٧..................................................... .)٢( while التكرار بواسطة: ٢,٢,٢الربنامج ٨٨..................................................... .)٣( while التكرار بواسطة :٢,٢,٣الربنامج ٨٨..................................................... .)٤( while التكرار بواسطة: ٢,٢,٤الربنامج ٨٩..................................................... .do…while التكرار بواسطة: ٢,٢,٥الربنامج ٩٠................................................ .)٢( do…while التكرار بواسطة: ٢,٢,٦الربنامج ٩١............................................................ .for التكرار بواسطة: ٢,٢,٧الربنامج ٩٢........................................................ )٢( for التكرار بواسطة: ٢,٢,٨الربنامج ٩٢.......................................................... .gotoطريقة إستعمال : ٢,٢,٩الربنامج ٩٣.................................................... .)٢( gotoطريقة إستعمال : ٢,٢,١٠الربنامج

٩٣......................................................... .gotoالتكرار بواسطة : ٢,٢,١١نامج الرب ٩٤................................................... .)٥( whileالتكرار بواسطة : ٢,٢,١٢الربنامج ٩٦..................................................... .)٣( forالتكرار بواسيطة : ٢,٢,١٣الربنامج ٩٦..................................................... .)٤( forالتكرار بواسيطة : ٢,٢,١٤الربنامج ٩٧.................................................. .)٦( whileالتكرار بواسيطة : ٢,٢,١٥الربنامج ٩٨................................................. ...continue جوزةالكلمة احمل: ٢,٢,١٦الربنامج ٩٨.................................. .بإستخدام حلقات التكرار ASCII طباعة جدول: ٢,٢,١٧الربنامج

......... .......................................................................Arrays املصفوفات٢,٣ ١٠٠.................................................. . متغري٢٠برنامج به أكثر من : ٢,٣,١الربنامج ١٠١.............................. . متغري بإستخدام املصفوفات٢٠برنامج به أكثر من : ٢,٣,٢الربنامج ١٠١...................................................... .طريقة إعطاء قيم ملصفوفة: ٢,٣,٣الربنامج ١٠٢................................................. .)٢(طريقة إعطاء قيم ملصفوفة : ٢,٣,٤الربنامج ١٠٢................................................. .)٣(طريقة إعطاء قيم ملصفوفة : ٢,٣,٥الربنامج ١٠٣...................................... .طريقة اإلعالن عن مصفوفات ثنائية األبعاد: ٢,٣,٦الربنامج ١٠٣............................... ...)٢(طريقة اإلعالن عن مصفوفات ثنائية األبعاد : ٢,٣,٧الربنامج

١٠٤..................................... .طريقة اإلعالن عن مصفوفات ثالثية األبعاد: ٢,٣,٨الربنامج ١٠٥................................. .)٢(طريقة اإلعالن عن مصفوفات ثالثية األبعاد : ٢,٣,٩الربنامج ١٠٥........................... .طريقة اإلعالن عن مصفوفة ذات حجم غري معروف: ٢,٣,١٠الربنامج ١٠٦............................................. .حرفيةطريقة اإلعالن عن سلسلة : ٢,٣,١١الربنامج ١٠٧......................................... .)٢(طريقة اإلعالن عن سلسلة حرفية : ٢,٣,١٢الربنامج ١٠٧........................................... .حساب عدد أحرف إسم مستخدم: ٢,٣,١٣الربنامج ١٠٨....................................... .)٢(حساب عدد أحرف إسم مستخدم : ٢,٣,١٤الربنامج ١٠٩................................................................ .getsالدالة : ٢,٣,١٥الربنامج ١٠٩............................................................. .strcpy الدالة: ٢,٣,١٦الربنامج ١١٠........................................................... .strncpy الدالة: ٢,٣,١٧الربنامج ١١٠........................................................ .)٢( strcpy الدالة: ٢,٣,١٨الربنامج ١١١............................................................. .strcat الدالة: ٢,٣,١٩الربنامج ١١١............................................................ .strncat الدالة: ٢,٣,٢٠الربنامج ١١١.............................................طرق أخرى لتعامل مع املصفوفات : ٢,٣,٢١الربنامج ١١٢....................................... .)٢( طرق أخرى لتعامل مع املصفوفات :٢,٣,٢٢الربنامج ١١٢....................................... .)٣(طرق أخرى لتعامل مع املصفوفات : ٢,٣,٢٣الربنامج

................. ..............................................................Pointers املؤشرات٢,٤ ١١٥...................................................... .طريقة اإلعالن عن مؤشر: ٢,٤,١الربنامج ١١٥.......................................................... طريقة إستعمال مؤشر: ٢,٤,٢الربنامج ١١٦.................................................... .)٢(طريقة إستعمال مؤشر : ٢,٤,٣الربنامج ١١٧......................................... .إستعمال املؤشر على طريقة املصفوفات: ٢,٤,٤الربنامج ١١٧.............................................. .طريقة أخرى لتعامل مع املؤشرات: ٢,٤,٥الربنامج ١١٨......................................... .)٢(طريقة أخرى لتعامل مع املؤشرات : ٢,٤,٦الربنامج ١١٨.......................................... .إمكانيات املؤشر مقارنة مع املصوفات: ٢,٤,٧الربنامج ١١٨....................................... .التعامل مع النصوص بإستخدام املؤشرات: ٢,٤,٨الربنامج ١١٩................................... .)٢(التعامل مع النصوص بإستخدام املؤشرات : ٢,٤,٩الربنامج ١١٩ ..................................)٣(التعامل مع النصوص بإستخدام املؤشرات : ٢,٤,١٠الربنامج

١١٩................................. .)٤(ام املؤشرات التعامل مع النصوص بإستخد: ٢,٤,١١الربنامج ١٢٠................................. .)٥(التعامل مع النصوص بإستخدام املؤشرات : ٢,٤,١٢الربنامج ١٢٠...................................................................... .املرجع: ٢,٤,١٣الربنامج ١٢١............................................................ .void مؤشر لـ: ٢,٤,١٤ الربنامج ١٢١.............................................................. .مؤشر ملصفوفة: ٢,٤,١٥الربنامج ١٢٢.......................................................... .)٢(مؤشر ملصفوفة : ٢,٤,١٦الربنامج ١٢٢................................................................ .مؤشر ملؤشر: ٢,٤,١٧الربنامج ١٢٢............................................................ .)٢(مؤشر ملؤشر : ٢,٤,١٨الربنامج ١٢٣.................................................................... .١اخلطأ : ٢,٤,١٩الربنامج ١٢٣.................................................................... .٢ اخلطأ: ٢,٤,٢٠الربنامج ١٢٣.................................................................. ...٣اخلطأ : ٢,٤,٢١الربنامج ١٢٤.................................................................. .١التمرين : ٢,٤,٢٢الربنامج

................................................................................Functions الدوال٢,٥ ١٢٥........................................................ .طريقة اإلعالن عن دالة: ٢,٥,١الربنامج ١٢٦................................................... .)٢(طريقة اإلعالن عن دالة : ٢,٥,٢الربنامج ١٢٦................................................... .)٣(طريقة اإلعالن عن دالة : ٢,٥,٣الربنامج ١٢٦............................................ .طريقة اإلعالن عن دالة ذات وسيط: ٢,٥,٤الربنامج ١٢٧........................................... .طريقة اإلعالن عن دالة ذات وسيطني: ٢,٥,٥الربنامج ١٢٨.................................. .طريقة اإلعالن عن دالة ذات أكثر من وسيطني: ٢,٥,٦الربنامج ١٢٨............................................ إعالن عن دالة من نوع عدد صحيح: ٢,٥,٧الربنامج ١٢٩...................................... .الوضع اإلفتراضي لدالة بدون حتديد نوعها: ٢,٥,٨الربنامج ١٢٩.......................................... .ةطريقة أخرى لإلعالن عن وسيط لدال: ٢,٥,٩الربنامج ١٣٠................................... .الطريقة اإلفتراضية لإلعالن عن وسيط لدالة: ٢,٥,١٠الربنامج ١٣٠.............................................. .shortإعالن عن دالة من نوع : ٢,٥,١١الربنامج ١٣٠................................................ .charإعالن عن دالة من نوع : ٢,٥,١٢الربنامج ١٣١................................................. .إعطاء ملتغري قيمة ترجعها دالة: ٢,٥,١٣الربنامج ١٣١.............................................. .*charإعالن عن دالة من نوع : ٢,٥,١٤الربنامج

١٣٢..................................................... .طريقة اإلعالن عن خمتصر:٢,٥,١٥الربنامج ١٣٢...................................................... .إستدعاء دالة من خمتصر: ٢,٥,١٦الربنامج ١٣٣................................................. .رىدالة ذات وسيط لدالة أخ: ٢,٥,١٧الربنامج ١٣٣..................................... .دالة ذات وسيط لدالة أخرى ذات وسائط: ٢,٥,١٨الربنامج ١٣٤..................................................................... ١اخلطأ : ٢,٥,١٩الربنامج

.....................................................................Header files لفات الرأسية امل٢,٦ ١٣٥............................................................. .إنشاء ملف رأسي: ٢,٦,١الربنامج ١٣٥.............................................................. ضم امللف الرأسي: ٢,٦,٢الربنامج ١٣٦......................................... .includeضم ملف رأسي موجود بالد : ٢,٦,٣الربنامج

.......................................................... Files I/O اإلدخال و اإلخراج يف امللفات٢,٧ ١٣٨.............................................................. .تح ملفطريقة ف: ٢,٧,١الربنامج ١٣٩............................................................. .طريقة إنشاء ملف: ٢,٧,٢الربنامج ١٤٠............................. .fileio.h من امللف الرأسي CreateFileإستعمال الدالة : ٢,٧,٣الربنامج ١٤٢............................................. .إنشاء دالة تقوم بعرض حمتوى ملف: ٢,٧,٤الربنامج ١٤٤........................................... .fscanf و الدالة fprintfإستعمال الدالة : ٢,٧,٥الربنامج ١٤٥....................................................... .fputs إستعمال الدالة: ٢,٧,٦الربنامج ١٤٥........................................ .fputc و الدالة fgetc إستعمال الدالة: ٢,٧,٧الربنامج ١٤٦................................... .)٢( fputc و الدالة fgetc إستعمال الدالة: ٢,٧,٨الربنامج

................................ .............................................structures لتراكيبا ٢,٨ ١٤٨............................................... طريقة اإلعالن و إستعمال البنيات: ٢,٨,١الربنامج ١٤٩.......................................... )٢(طريقة اإلعالن و إستعمال البنيات : ٢,٨,٢الربنامج ١٥٠.......................................... )٣( طريقة اإلعالن و إستعمال البنيات: ٢,٨,٣الربنامج ١٥٠........................... إعطاء قيم ألعضاء بنية مباشرة بعد التعري عن إسم املبنية: ٢,٨,٤الربنامج ١٥١................................................ .ضل من إستعمال أعضاء البنيةأف: ٢,٨,٥الربنامج ١٥١.......................................... .unionطريقة إستخدام بنية معرفة بـ : ٢,٨,٦الربنامج ١٥٢..................................... .)٢( unionطريقة إستخدام بنية معرفة بـ : ٢,٨,٧الربنامج ١٥٢..................................... .)٣( unionطريقة إستخدام بنية معرفة بـ : ٢,٨,٨الربنامج

١٥٣..................................... .)٤( unionطريقة إستخدام بنية معرفة بـ : ٢,٨,٩الربنامج ١٥٣....................................................... املصفوفات على البنيات: ٢,٨,١١الربنامج ١٥٤.................................................. )٢( املصفوفات على البنيات: ٢,٨,١٢الربنامج ١٥٤........................................................ املؤشرات على البنيات: ٢,٨,١٣الربنامج ١٥٥......................................................... إعالن بنية داخل بنية: ٢,٨,١٤الربنامج ١٥٦..................................................................... ١اخلطأ : ٢,٨,١٥الربنامج

.................................................................ت ملخص للفصل الثاين، معا إضافا ٢,٩ ١٥٧................................................................. .scanfالدالة : ٢,٩,١الربنامج ١٥٧...................................................... void معىن دالة ا وسيط: ٢,٩,٢الربنامج ١٥٧.................................................. )٢( void ا وسيطمعىن دالة : ٢,٩,٣الربنامج ١٥٨.................................................. )٣( void معىن دالة ا وسيط: ٢,٩,٤الربنامج ١٥٨.................................................. )٣( void معىن دالة ا وسيط: ٢,٩,٥الربنامج ١٥٩....................................... .static طريقة إستعمال الكلمة احملجوزة: ٢,٩,٦الربنامج ١٥٩................................... )٢( static طريقة إستعمال الكلمة احملجوزة: ٢,٩,٧الربنامج ١٦٠..................................... .typedef طريقة إستعمال الكلمة احملجوزة: ٢,٩,٨الربنامج ١٦٠................................. .)٢( typedef طريقة إستعمال الكلمة احملجوزة: ٢,٩,٩الربنامج ١٦١............................... .)٣( typedef طريقة إستعمال الكلمة احملجوزة: ٢,٩,١٠الربنامج ١٦١............................... .)٤( typedef ة إستعمال الكلمة احملجوزةطريق: ٢,٩,١١الربنامج ١٦١........................................................ .str.h النسخ، امللف: ٢,٩,١٢الربنامج ١٦٢....................................................... .النسخ، امللف الرئيسي: ٢,٩,١٣الربنامج ١٦٣....................................................... .تبادل قيم بني وسيطني: ٢,٩,١٤الربنامج ١٦٣.............................................................. .تغري قيمة ثابت: ٢,٩,١٥الربنامج ١٦٤......................................................... .عكس سلسلة نصية: ٢,٩,١٦الربنامج ١٦٤.................................. .التحويل من النظام العشري إىل النظام الثنائي: ٢,٩,١٧الربنامج ١٦٥.............................. .التحويل من احلروف الصغرية إىل احلروف الكبرية: ٢,٩,١٨الربنامج ١٦٥............................................... .wcscpy طريقة إستعمال الدالة: ٢,٩,١٩الربنامج ١٦٦.............................................. .wcsncpy طريقة إستعمال الدالة: ٢,٩,٢٠الربنامج

١٦٦............................. .wcsncat و الدالة wcscat طريقة إستعمال الدالة: ٢,٩,٢١الربنامج ١٦٧......................... .putwchar و الدالة getwchar طريقة إستعمال الدالة: ٢,٩,٢٢الربنامج ١٦٧.............................. .putws_ و الدالة getws_ طريقة إستعمال الدالة: ٢,٩,٢٣الربنامج ١٦٧........................................ل أسكيطباعة حرف عرب رقمه يف جدو: ٢,٩,٢٤الربنامج ١٦٨.............................................................. .املتغريات احمللية: ٢,٩,٢٥الربنامج ١٦٩........................................................... .املتغريات اخلارجية: ٢,٩,٢٦الربنامج

١٧٠.................................... .extern طريقة إستعمال الكلمة احملجوزة: ٢,٩,٢٧نامج الرب ١٧٠................................. )٢( extern طريقة إستعمال الكلمة احملجوزة: ٢,٩,٢٨الربنامج ١٧١....................................... .auto طريقة إستعمال الكلمة احملجوزة: ٢,٩,٢٩الربنامج ١٧١.................................. .register طريقة إستعمال الكلمة احملجوزة: ٢,٩,٣٠الربنامج ١٧٢...................................... sizeof طريقة إستعمال الكلمة احملجوزة: ٢,٩,٣١الربنامج ١٧٢......................................................... .استدعاء دالة لنفسها: ٢,٩,٣٢الربنامج ١٧٣.................................................... .)٢(استدعاء دالة لنفسها : ٢,٩,٣٣الربنامج ١٧٣............................................... .التحكم يف طباعة النتائجطريقة : ٢,٩,٣٤الربنامج

.............................................................................. C التقدم يف لغة–الفصل الثالث ...........................................................................Enumeration احلساب٣,١

١٧٧......................................................... .enumطريقة إستعمال : ٣,١,١الربنامج ١٧٨.................................................... .)٢ (enumطريقة إستعمال : ٣,١,٢الربنامج ١٧٩.................................................... .)٣( enumطريقة إستعمال : ٣,١,٣الربنامج ١٧٩.................................................... .)٤( enumطريقة إستعمال : ٣,١,٤الربنامج ١٧٩.................................................... .)٥( enumطريقة إستعمال : ٣,١,٥الربنامج ١٨٠.................................................... .)٦( enumطريقة إستعمال : ٣,١,٦الربنامج ١٨٠...................................................................... .١اخلطأ : ٣,١,٧الربنامج

.............................................. Command-line Arguments وسائط الدالة الرئيسية ٣,٢ ١٨٢................................................... .يةالوسيط األوىل لدالة الرئيس: ٣,٢,١الربنامج ١٨٣.................................................... .الوسيط الثاين لدالة الرئيسية: ٣,٢,٢الربنامج ١٨٤........................................ .رنامج ذات وسائط يقوم حبذف ملفاتب: ٣,٢,٣الربنامج

................................ ...........................Directives(Preprocessor) التوجيهات ٣,٣ ١٨٦........................................................ .خمتصر يقوم بعملية مجع: ٣,٣,١الربنامج ١٨٧............................................... .undef# طريقة إستعمال التوجيه: ٣,٣,٢الربنامج ١٨٨................... .endif# و if، #elif، #else# طريقة إستعمال التوجيهات: ٣,٣,٣الربنامج ١٨٨............................................... .ifdef# طريقة إستعمال التوجيه: ٣,٣,٤الربنامج ١٨٨.............................................. .ifdef#فئة لـ طريقة أخرى مكا: ٣,٣,٥الربنامج ١٨٩............................................. .ifndef# طريقة إستعمال التوجيه: ٣,٣,٦الربنامج ١٩٠............................................ .ifndef#طريقة أخرى مكافئة لـ : ٣,٣,٧الربنامج

١٩٠........................................................ .إستعمال األمساء املعرفة: ٣,٣,٩ لربنامجا ...................................................................... دوال ذات وسائط غري حمددة ٣,٤

١٩٢............................................ .توفري ثالثة وسائط لدالة ا وسيطني: ٣,٤,١الربنامج ١٩٣...................................... .طريقة اإلعالن دالة ذات وسائط غري حمددة: ٣,٤,٢الربنامج ١٩٤................................. .)٢(طريقة اإلعالن دالة ذات وسائط غري حمددة : ٣,٤,٣الربنامج

................................................................Standard Library سيةاملكتبة القيا ٣,٥ ١٩٥....................................................... .assertاملختصر /الدالة: ٣,٥,١الربنامج ١٩٦............................................................. .isalnum الدالة: ٣,٥,٢الربنامج ١٩٦.............................................................. .isalpha الدالة: ٣,٥,٣الربنامج ١٩٧.............................................................. .iscntrl الدالة: ٣,٥,٤الربنامج ١٩٧.............................................................. .isdigit الدالة: ٣,٥,٥الربنامج ١٩٨.............................................................. .isgraph الدالة: ٣,٥,٦الربنامج ١٩٨.............................................................. .islower الدالة: ٣,٥,٧الربنامج ١٩٩.............................................................. .isprint الدالة: ٣,٥,٨الربنامج ١٩٩.............................................................. .ispunct الدالة: ٣,٥,٩الربنامج ٢٠٠........................................................... .isspace الدالة: ٣,٥,١٠الربنامج ٢٠٠............................................................. .isupper الدالة: ٣,٥,١١الربنامج ٢٠١........................................................... .isxdigit الدالة: ٣,٥,١٢الربنامج ٢٠١.............................................. .tolower و toupper تنيالدال: ٣,٥,١٣الربنامج

٢٠٢.............................................................. .perror الدالة: ٣,٥,١٤الربنامج ٢٠٣.......................................................... )٢( perror الدالة: ٣,٥,١٥الربنامج ٢٠٤.............................................. .errno.hثوابت امللف الرأسي : ٣,٥,١٦الربنامج ٢٠٥............................................. .locale.h ثوابت امللف الرأسي: ٣,٥,١٧الربنامج ٢٠٦................................................ .math.h ثوابت امللف الرأسي: ٣,٥,١٨الربنامج ٢٠٦.................................................................. .sin الدالة: ٣,٥,١٩الربنامج ٢٠٧.................................................................. .cos الدالة: ٣,٥,٢٠الربنامج ٢٠٧.................................................................. .tan الدالة:٣,٥,٢١الربنامج ٢٠٧.................................................................. .exp الدالة: ٣,٥,٢٢الربنامج ٢٠٧.................................................................. .log الدالة: ٣,٥,٢٣الربنامج ٢٠٨.................................................................. .pow الدالة: ٣,٥,٢٤الربنامج ٢٠٨................................................................. .sqrt الدالة: ٣,٥,٢٥الربنامج ٢٠٨................................................................ .ceil الدالة: ٣,٥,٢٦الربنامج ٢٠٩............................................................... .floor الدالة: ٣,٥,٢٧الربنامج ٢٠٩................................................................ .fabs الدالة: ٣,٥,٢٨الربنامج ٢٠٩............................................................... .ldexp الدالة: ٣,٥,٢٩الربنامج ٢١٠................................................................. .fmod الدالة: ٣,٥,٣٠الربنامج ٢١١............................................ jmp_buf، و البنية setjmpالدالة : ٣,٥,٣١الربنامج ٢١٢ ........va_list، و املؤشر va_end و الدالة va_arg، الدالة va_startالدالة : ٣,٥,٣٢الربنامج ٢١٣.............................................................. .size_tاملتغري : ٣,٥,٣٣الربنامج ٢١٣.......................................................... .ptrdiff_tتغري امل: ٣,٥,٣٤الربنامج ٢١٤............................................................. .printfالدالة : ٣,٥,٣٥الربنامج ٢١٤............................................................ .sprintfالدالة : ٣,٥,٣٦الربنامج ٢١٥............................................................ .vprintfالدالة : ٣,٥,٣٧الربنامج ٢١٥........................................................... .vfprintfالدالة : ٣,٥,٣٨الربنامج ٢١٦........................................................... .vsprintfالدالة : ٣,٥,٣٩الربنامج ٢١٦................................................................ scanfالدالة : ٣,٥,٤٠الربنامج

٢١٦.............................................................. .fscanfالدالة : ٣,٥,٤١الربنامج ٢١٧.............................................................. .sscanfالدالة : ٣,٥,٤٢الربنامج ٢١٧............................................................... .fgetcالدالة : ٣,٥,٤٣الربنامج ٢١٧............................................................... .fgetsالدالة : ٣,٥,٤٤الربنامج ٢١٨............................................................... .fputcالدالة : ٣,٥,٤٥الربنامج ٢١٨............................................................... .fputsالدالة : ٣,٥,٤٩الربنامج ٢١٩................................................................ .getcالدالة : ٣,٥,٤٧الربنامج ٢١٩............................................................ .getcharالدالة : ٣,٥,٤٨الربنامج ٢١٩................................................................ .getsالدالة : ٣,٥,٤٩الربنامج ٢١٩................................................................ .putcالدالة : ٣,٥,٥٠الربنامج ٢٢٠............................................................ .putcharالدالة : ٣,٥,٥١الربنامج ٢٢٠................................................................ .putsالدالة : ٣,٥,٥٢الربنامج ٢٢٠.............................................................. .ungetcالدالة : ٣,٥,٥٣الربنامج ٢٢١............................................................... .fopenالدالة : ٣,٥,٥٤الربنامج ٢٢١............................................................ .freopenالدالة : ٣,٥,٥٥الربنامج ٢٢٢.............................................................. .fcloseالدالة : ٣,٥,٥٦الربنامج ٢٢٢.............................................................. .removeالدالة : ٣,٥,٥٧الربنامج ٢٢٣.............................................................. .renameالدالة : ٣,٥,٥٨الربنامج ٢٢٣............................................................ .tmpfileالدالة : ٣,٥,٥٩الربنامج ٢٢٣............................................................... .freadالدالة : ٣,٥,٦٠الربنامج ٢٢٤.............................................................. .fwriteالدالة : ٣,٥,٦١الربنامج ٢٢٥............................................................... .fseekالدالة : ٣,٥,٦٢الربنامج

٢٢٥............................................................... .ftellالدالة : ٣,٥,٦٣نامج الرب ٢٢٦.............................................................. .rewindالدالة : ٣,٥,٦٤الربنامج ٢٢٦................................................................. feofالدالة : ٣,٥,٦٥الربنامج ٢٢٧................................................................ .atofالدالة : ٣,٥,٦٦الربنامج ٢٢٧................................................................ .atoiالدالة : ٣,٥,٦٧الربنامج

٢٢٧................................................................ .atolالدالة : ٣,٥,٦٨الربنامج ٢٢٨................................................................ .randالدالة : ٣,٥,٦٩الربنامج ٢٢٨............................................................... .srandالدالة : ٣,٥,٧٠الربنامج ٢٢٩............................................................... .abortالدالة : ٣,٥,٧١الربنامج ٢٢٩................................................................ .exitالدالة : ٣,٥,٧٢الربنامج ٢٢٩.............................................................. .atexitالدالة : ٣,٥,٧٣الربنامج ٢٣٠.............................................................. .systemالدالة : ٣,٥,٧٤الربنامج ٢٣٠.................................................................. .absالدالة : ٣,٥,٧٥الربنامج ٢٣٠................................................................ .labsالدالة : ٣,٥,٧٦ الربنامج ٢٣١.................................................................. .divالدالة : ٣,٥,٧٧الربنامج ٢٣١................................................................ .ldivالدالة : ٣,٥,٧٨الربنامج ٢٣٢............................................ .strncpy و الدالة strcpy الدالة: ٣,٥,٧٩الربنامج ٢٣٢......................................................... .)٢( strcpy الدالة: ٣,٥,٨٠الربنامج ٢٣٢............................................................... strcat الدالة: ٣,٥,٨١الربنامج ٢٣٢............................................................. .strncat الدالة: ٣,٥,٨٢الربنامج ٢٣٣.............................................................. .strcmp الدالة: ٣,٥,٨٣الربنامج ٢٣٣............................................................. .strncmp الدالة: ٣,٥,٨٤الربنامج ٢٣٤............................................ .strrchr و الدالة strchr الدالة: ٣,٥,٨٥الربنامج ٢٣٤............................................ .strcspn و الدالة strspn الدالة: ٣,٥,٨٦الربنامج ٢٣٥............................................................. .strpbrk الدالة: ٣,٥,٨٧الربنامج ٢٣٥.............................................................. .strstr الدالة: ٣,٥,٨٨الربنامج ٢٣٥.............................................................. .strlen الدالة: ٣,٥,٨٩الربنامج ٢٣٦........................................................... .strerror الدالة: ٣,٥,٩٠الربنامج ٢٣٦.............................................................. .strtok الدالة: ٣,٥,٩١الربنامج ٢٣٧............................................................... .clock الدالة: ٣,٥,٩٢الربنامج ٢٣٨.......................................... .إنشاء دالة نقوم باإلنتظار لوقت حمدد: ٣,٥,٩٣الربنامج ٢٣٨................................................................. .time الدالة: ٣,٥,٩٤الربنامج

٢٣٩............................................................ .)٢( time الدالة: ٣,٥,٩٥الربنامج ٢٣٩........................................................... .difftime الدالة: ٣,٥,٩٦الربنامج ٢٤٠.......................................................... .localtime الدالة: ٣,٥,٩٧الربنامج ٢٤٠............................................................. .asctime الدالة: ٣,٥,٩٨الربنامج ٢٤٠............................................................... .ctime الدالة: ٣,٥,٩٩الربنامج

املراجعأهم

The C Programming Language Book, Second Edition By Brian Kernighan And Dennis Ritchie [Prentice Hall 1988; ISBN 0-131-10362-8] Fundamentals Programming Family Book, First Edition By IBM International 1985 Turbo C Manuel De Référence Book, By Borland International 1988 [FR] Wikipedia, the free encyclopedia: www.wikipedia.org CProgramming.com Your resource for C and C++: www.cprogramming.com C Pocket Reference Book, By Peter Prinz And Ulla Kirch-Prinz [O'Reilly November 2002; ISBN : 0-596-00436-2] UNIX System Calls and Subroutines using C Book, By Nikos Drakos 1997 Teach Yourself C in 21 Days Book, By Peter Aitken And Bradley L. Jones [Macmillan Computer Publishing]

The End