منتديات المبرمج العراقي

موقع عراقي يختص بالبرمجة ومشاريعها واكوادها
 
الرئيسيةس .و .جبحـثالأعضاءالمجموعاتالتسجيلدخول

شاطر | 
 

 البرمجة بلغة سي الدرس السادس

اذهب الى الأسفل 
كاتب الموضوعرسالة
المبرمج العراقي
Admin


المساهمات : 24
تاريخ التسجيل : 04/07/2008

مُساهمةموضوع: البرمجة بلغة سي الدرس السادس   الأربعاء يوليو 09, 2008 6:44 pm

5-التحكم في الفورمات

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

ويتم ذلك باستخدام علامات خاصة لتعديل مواصفات الفورمات يطلق عليها علامات تعديل الفورمات ( format modifiers )
والشكل التالي يوضح طرقا مختلفة لطباعة الرقم الحقيقي 25

الوصف | التأثير على شكل الناتج | النتيجة

%.0f | حذف جميع الأصفار الزائدة | 25
%.3f | إظهار ثلاث أصفار فقط بجوار العلامة | 25.000


ومن هذا الجدول نلاحظ أن الرقم السابق للحرف f يتحكم في عدد الأصفار التي تظهر على يمين العلامة العشرية.

والمثال التالي يوضح برنامجا لطباعة العدد 75 بصور مختلفة


CODE

#include <stdio.h>
main()
{
float x;
x=75;
printf(“%.0f\n”,x);
printf(“%.1f\n”,x);
printf(“%.2f\n”,x);
}




وعند تنفيذه نحصل على الناتج الموضح بالشكل


CODE

75
75.0
75.00




والآن ماذا لو كان العدد المطلوب طباعته محتويا على كسر عشري مثل
25.8756
واستخدمنا تعديلا في الفورمات لطباعته ؟ إن ما يحدث في هذه الحالة هو تقريب العدد إلى عدد من الخانات العشرية بحسب الرقم المستخدم في الفورمات

ويمكنك تجربة البرنامج التالي لطباعة قيمة الكسر ¾ في صور مختلفة وبدرجات مختلفة من التقريب.


CODE

#include <stdio.h>
main()
{
printf(“%.0f\n”,3.0/4.0);
printf(“%.1f\n”,3.0/4.0);
printf(“%.2f\n”,3.0/4.0);

}





وناتج هذا المثال هو الموضح بالشكل

CODE

1
0.8
0.75






6- متغير الرمز ( char variable ) :

ذكرنا فيما سبق أننا سنلتقي مع أنواع أخرى من المتغيرات، والآن بعد أن تعرفنا على المتغيرات العددية نتعرف على نوع آخر من المتغيرات وهو ما يصلح لتخزين رمز واحد ( character) ويطلق على هذا النوع من المتغيرات الاسم ( char ).

و الرموز التي يمكن تخزينها في هذا النوع من المتغيرات فهي قد تكون رموزا موجودة في جدول الكود آسكي ( ASCII code table) وهو جدول يحتوي الرموز المعتمدة من هيئة المواصفات القياسية الأمريكية، ويضم جميع الحروف والأرقام والعلامات الخاصة وعلامات التحكم والأرقام الكودية المناظرة لكل منها.

و للإعلان عن متغير رمز بالاسم "a" مثلا نستخدم العبارة التالية:
char a;
ولتخصيص رمز ما لهذا المتغير فإننا نضعه بين علامتي اقتباس مفردتين كالآتي
a = 'Z'
و بهذا التخصيص أصبح متغير الرمز "a " محتويا على الحرف " Z"، ولطباعة محتويات المتغير الرمز نحتاج إلى توصيف جديد للفورمات وهو التوصيف" %c"

,هذا التوصيف يحتوي على الحرف الأول من كلمة character وهو مخصص لطباعة الرموز.

والمثال التالي يوضح برنامجا قمنا فيه بالإعلان عن متغير رمز بالاسم " first_letter"
ثم خصصنا لهذا المتغير الحرف " A" ثم طبعنا محتويات المتغير باستخدام التوصيف %c.
وعند تنفيذ هذا البرنامج فإنه يطبع على الشاشة الحرف A.


CODE

#include <stdio.h>
main()
{
char first_letter;
first_letter = ‘A’;
printf(“%c\n”,first_letter);
}




ومن أهم خصائص متغير الرمز أننا نستطيع أن نطبعه بطريقتين مختلفتين:
1- باستخدام الفورمات %c.
2- باستخدام الفورمات %d.

في الحالة الأولى كما رأينا في المثال السابق فأن الرمز المختزن هو الذي يظهر على الشاشة.

أما لو استخدمنا الفورمات %d فإن رقم الكود آسكي المناظر للرمز هو الذي يظهر على الشاشة.

والمثال التالي يوضح استخدام نوعي موصفات الفورمات مع متغير الرمز


CODE

#include <stdio.h>
main()
{
char first_letter;
first_letter = ‘A’;
printf(“%c\n”,first_letter);
printf(“%d\n”,first_letter);

}





6- تخزين الحرفيات والمؤشرات(String & Pointer ) في لغة C:

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

ولكن لغة C لاتحتوي متغيرا من هذا النوع بل تختزن الحرفيات بطرية خاصة كرموز متتابعة.

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

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

وتختلف طريقة الأعلان عن المؤشر بحسب البيان المخزون فيه، فإذا كان المؤشر يشير إلى عدد صحيح مثلا فيسمى في هذة الحالة ( مؤشر إلى عدد صحيح ) ويعلن عنه بعبارة كالعبارة التاليه:
int *a;

أما لو كان يشير إلى رمز من الرموز فيسمى في هذه الحالة مؤشر إلى رمز أو ( character pointer) ويعلن عنه بعبارة كالعبارة التاليه:

char * a
ونلاحظ أنه في كلتا الحالتين فأن " a" هو اسم المؤشر الذي اخترناه وهو يأتي مسبوقا بالعلامة " * " التي تدل على كونه مؤشرا. أما نوع المؤشر فهو يتم تحديدة وفقا لنوع البيان المشار إلية فقد يكون عددا صحيحا ( int ) أو حقيقيا ( real ) أو رمزا ( char ) وهي الأنواع الثلاثة التي عرفناها في لغة C

والمثال التالي يوضح كيفية تخصيص متغير حرفي وطباعته على الشاشة، ونلاحظ أنه لطباعة الحرفي نقوم بطباعة المؤشر الذي يشير إليه مع استخدام توصيف جديد للفورمات وهو ( %s )


CODE

#include <stdio.h>
main()
{
char *a;
a = “Welcome C programmer”;
printf(“%s\n”,a);
}




وناتج البرنامج هو الموضح بالشكل التالي

CODE

Welcome C programmer




وعند الأعلان عن مؤشر بالعبارة
char *a;
فأن هذا يؤدي إلى خلق الآتي:
1- المؤشر " a " الذي يشير إلى أول حرف من الحرفي.
2- المتغير" *a " الذي يحتوي على أول حرف من الحرفي.

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

والمثال التالي يساعدنا على تعميق مفهوم المؤشر، فهو يبدأ بإعلان عن متغير رمز " a " ثم يختزن فيه الحرفي " Hello again "، ويطبع محتويات العديد من المتغيرات المتعلقة بالحرفي.


CODE

#include <stdio.h>
main()
{
char *a;
a = “Hello again”;
printf(“%s\n”,a);
printf(“%c\n”,*a);
printf(“%d\n”,a);
printf(“%p\n”,a);
printf(“%d\n”,*a);
}
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://iq-prog.rigala.net
 
البرمجة بلغة سي الدرس السادس
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
منتديات المبرمج العراقي :: لغات البرمجة :: منتدى البرمجة العام-
انتقل الى: