انا المسلم
الرجاء تسجيل الدخول (مع تحيات منتدى انا المسلم )
انا المسلم
الرجاء تسجيل الدخول (مع تحيات منتدى انا المسلم )

انا المسلم


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




https://emadghost.yoo7.com
بسم الله الرحمن الرحيم

تم يحمد الله إفتتاح قسم جديد خاص بأجهزة الريسيفر والدش والكروت والكامات

وأيضاً شفرات ART- SHoWTIME -وإيضاً الجزيرة الرياضية

وسوفت وير جميع إجهزة الريسيفر
      

 

 الفصل الثالث : الإدخال و الإخراج ( I/O )

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


ذكر
عدد الرسائل : 595
العمر : 42
الموقع : https://emadghost.yoo7.com
المزاج : رايق
 . : الفصل الثالث : الإدخال و الإخراج ( I/O ) 15781610
نقاط : 311
تاريخ التسجيل : 10/05/2008

الفصل الثالث : الإدخال و الإخراج ( I/O ) Empty
مُساهمةموضوع: الفصل الثالث : الإدخال و الإخراج ( I/O )   الفصل الثالث : الإدخال و الإخراج ( I/O ) I_icon_minitimeالأربعاء أكتوبر 15, 2008 10:47 am

الفصل الثالث : الإدخال و الإخراج ( I/O )
حتى الآن قمنا بالطباعة على الشاشة باستخدام الدالة printf لطباعة الخرج وفقا لصيغة محددة (فورمات). و لكن قد يحتاج المبرمج لإدخال البيانات في وقت تنفيذ البرنامج ويستلزم ذلك استخدام دواللإدخال البيانات، وهو ما سنتعرض له الآن بشيء من التفصيل.أما الدالة المناظرة للدالة printf، والمخصصه لإدخال البيانات وفقا لصيغة محددة، فهي الدالة scanf ، ويعتبر الحرف " f" الذيتنتهي به كل من الدالتين هو الحرف الأول من كلمة "format " والمثال التالي يوضح كيفية استخدام الدالة scanf لإدخال البيانات.

CODE
#include
main()
{
float x,y,z;
scanf (“%f”,&x);
scanf (“%f”,&y);
z=x+y;
printf(“the sum of the numbers you entered is : %.2f\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n”,z);}
يبدأ البرنامج بالإعلان عن ثلاثة متغيرات من النوع الحقيقي " x,y,z " ثم يتم استقبال قيمة المتغير " x" من لوحة الأزرار بموجب العبارة :
CODE
scanf ("%f",&x)
ثم يتم استقبال المتغير الثاني"y" بعبارة مماثلة ثم يتم جمع المتغيرين " x,y " وتخصيص الناتج للمتغير " z"وفي النهاية نطبع قيمة المتغير " z " المحتوي على المجموع.
عند تشغيل البرنامج سوف ينتظر إدخال قيمة المتغير "x" فإذا أدخلنا العدد المطلوب وأتبعنا ذلك بالضغط على الزر Enter ، فإن البرنامج يتوقف مرة أخرى
منتظرا إدخال قيمة المتغير " y " متبوعة بالضغط على الزر Enter وعندئذ يوافينا البرنامج بالنتيجة.والآن فلننظر بتفحص لإحدى العبارات التي تحتوي على الدالة scanf فنلاحظ ما يلي:
1- ضرورة استخدام توصيف للفورمات بنفس الأسلوب المتبع مع الدالة printf وفي المثال السابق قد استخدمنا التوصيف " %f " الذي يناظر المتغير الحقيقي "x" أو " y".
2- لم تستخدم الدالة المتغير " x" أو "y" صراحة بل استخدمت صورة محورة منه وهي (&x) ، وهذه الصورة الجديدة تسمى مؤشر العنوان ( address operator )
وهي عبارة عن عنوان المتغير لا المتغير نفسه. أما المؤثر الجديد & فيسمى مؤثر العنوان إلى ( address-of operator)
إدخال أكثر من قيمة متغير واحد بنفس العبارة:
تماما كما مع الدالة printf يمكننا مع الدالة scanf استخدام عبارة واحدة ودالة واحدة لاستقبال قيم عدة متغيرات كما في المثال التالي
CODE
#include
main()
{
float x,y,z;
scanf (“%f%f”,&x,&y);
z=x+y;
printf(“the sum of the numbers you entered is : %.2f\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n”,z);}
نلاحظ أن الجزء الخاص بالفورمات ( والواقع بين علامتي الاقتباس ) يحتوي على توصيفين للفورمات " %f %f " بنفس عدد المتغيرات التي تأتي مفصولة عن بعضها البعض باستخدام الفاصلة " , "( أنظر العبارة المحتوية على الدالة scanf)ومن الملاحظات الهامه أن ترتيب الفورمات في الدالة scanf يجب أن يكون بنفس ترتيب المتغيرات التي سيتم إدخالها. وهذه الملاحظة غير واضحة في المثال السابق نظرا لأن كلا المتغيرين المراد إدخالهما من نفس النوع.
الفصل بين المدخلات:
في المثال السابق كانت المتغيرات تدخل كل على حدة متبوعا بالضغط على الزر Enter ، ولكن ماذا لو أردنا إدخال المتغيرين في سطر واحد؟؟؟المثال التالي يوضح الطريقة الجديدة لإدخال المتغيرين في سطر واحد ويتم الفصل بينهما بفاصلة ، ويتم ذلك بكتابة الفاصلة في البرنامج نفسه كفاصل بين توصيفات الفورمات.
CODE
#include
main()
{
int x;
float y,z;
scanf (“%d,%f”,&x,&y);
z=x+y;
printf(“the sum of %d and %f is : %.2f\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n”,x,y,z);}
.
الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://emadghost.yoo7.com
Admin
المدير العام
المدير العام
Admin


ذكر
عدد الرسائل : 595
العمر : 42
الموقع : https://emadghost.yoo7.com
المزاج : رايق
 . : الفصل الثالث : الإدخال و الإخراج ( I/O ) 15781610
نقاط : 311
تاريخ التسجيل : 10/05/2008

الفصل الثالث : الإدخال و الإخراج ( I/O ) Empty
مُساهمةموضوع: الباقي   الفصل الثالث : الإدخال و الإخراج ( I/O ) I_icon_minitimeالأربعاء أكتوبر 15, 2008 10:48 am

رسالة لتنبية مستخدم البرنامج :
من عيوب الدالة
scanf أنها لا يمكن استخدامها لطباعة أي نص على الشاشة كما مع دوال الدخل
في لغة مثل البيسك . وهذا معناه ضرورة الاستعانة بدالة الطباعة printf إذا
أردنا أن نطبع علىالشاشة رسالة تنبه المستخدم إلى أن البرنامج ينتظر إدخال
بيان مثل:Please Enter the numberفي المثال التالي نرى صورة محسنة لإدخال
قيمتي متغيرين مع طباعة الرسائل اللازمة لتنبية المستخدم.
CODE
#include
main()
{
float x,y,z;
printf(“Enter the first number : ”);
scanf (“%f”,&x);
printf(“Enter the second number : ”);
scanf (“%f”,&y);
z=x+y;
printf(“the sum of the numbers you entered is :
%.2f\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n”,z);}
ملاحظة هامة:
لا يوصى باستخدام الدالة scanf لاستقبال الحرفيات من لوحة المفاتيح، حيث
يتطلب الأمر احتياطات كثيرة . ولاستقبال الحرفيات من لوحة المفاتيح توجد
طرق أفضل سيأتي الحديث عنها.
طرق جديدة للتعامل مع الحرفيات:
لقد رأينا من قبل كيف يمكننا تخزين الحرفي بالاستعانة بالمؤشرات حيث يشير
المؤشر إلى الرمز الأول من الحرفي المختزن في الذاكرة . هذا من ناحية
بداية الحرفي . أما من ناحية نهاية الحرفي فإن البرنامج من تلقاء نفسه
يضيف إلى مؤخرة الحرفي الرمز الصفري ( NULL character ) وهو الرمز رقم صفر
في جدول الكود آسكي.ويفيد هذا الرمز في تمييز مؤخرة الحرفي و بالتالي في
تحديد طوله لتسهيل التعامل معه قراءة وكتابة ومعالجة بالطرق المختلفة.وفي
الواقع أن هذه الطريقة برغم ما تحتويه من تفصيلات فنية دقيقة لكنها أفضل
من الطرق المستخدمة في اللغات الأخرى التي تتوفر بها المتغيرات
الحرفية ( string variables )، فمع هذه الطريقة في لغة C لا توجد أية قيود
على طول الحرفي المستخدم.وهنا سنتناول طريقة أخرى لتمثيل الحرفيات وهي
مصفوفة الرموز ( character
arrays ) ومن اسم هذه الطريقة يتضح أنه يتم حجز خانات الذاكرة اللازمة للحرفي مقدما.
الأعلان عن مصفوفة الرموز:
لننشئ مصفوفة من الرموز فإننا نبدأ بالإعلان عنها في بداية البرنامج .
ويشمل الإعلان اسم المصفوفة وسعتها ( size ) أي الحد الأقصى لعدد الرموز
بها .فمثلا الجملة التالية يتم فيها الإعلان عن مصفوفة رموز بالاسم (
employee_name ):
CODE
char employee_name[20];
في هذا الإعلان يتم حجز عشرين خانة في الذاكرة تتسع كل منها لرمز واحد ، كما تخصص الخانة الأخيرة للرمز الصفري( NULL ).
ولشحن هذه المصفوفة بأحد الحرفيات، فإن دالة خاصة تستخدم لهذا الغرض وهي
الدالة ( strcpy ( a, ) حيث " a " هو اسم مصفوفة الرموز، و "b" هو الحرفي
المراد تخزينه في المصفوفة.
والمثال التالي يوضح الإعلان عن مصفوفة
رموز بالاسم " a" تتسع لعشرين رمزا ثم ننسخ إلى عناصرها الحرفي " Hello
again " وفي النهاية نطبع محتويات المصفوفة باستخدام دالة الطباعةprintf
مع استخدام الفورمات المناسبة للحرفيات s%.
CODE
#include
#include
main()
{
char a[20];
strcpy(a,”Hello again”);
printf(“
%s\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n”,a);}
ومن الملاحظ في هذا البرنامج ظهور توجيه جديد هو :
CODE
#include
إن
هذا التوجيه يصبح لازما عند استخدام الدالة strcpy حيث أن الملف "
string.h" هو الملف الذي يحتوي على تعريف الدالة " strcpy " وبقية دوال
الحرفيات، ويطلق على هذا الملف اسم ملف العناوين للحرفيات " string header
file" والآن سنتناول طريقة عمل البرنامج بشىء من التفصيل، ولنبدأ بدالة
الطباعة printf . فعندما تتعامل مع مصفوفة الرموز " a " فغنها تقرأ و
تطبععناصر المصفوفة واحدا بعد الآخر حتى تصادف الرمز الصفري فتتوقف.أما عن
طريقة تخزين الرموز في المصفوفة فهناك نقاط جديرة باهتمامنا .إننا عندما
نعلن عن المصفوفة " 4); font-size: 11px; line-height: 135%;"
align="center" border="0" cellpadding="3" cellspacing="1" width="95%"]
CODE
a[0], a[1],…………………..,a[19]
ولا
يشترط عندما نخصص أحد الحرفيات لهذه المصفوفة أن نشغل جميع العناصر (
الخانات) ففي المثال السبق مثلا عدد رموز الحرفي كانت 11 حرفا و استخدم
العنصر الثاني عشر من المصفوفة لتخزين الرمز الصفري.
طرق مختلفة لإدخال الحرفيات:
ذكرنا من قبل أنه لا يوصى باستخدام الدالة scanf لإدخال الحرفيات من لوحة
المفاتيح .والآن سنستعرض البدائل المختلفة التي تتيحها اللغة لإدخال
الحرفيات.الدالة gets :يعتبر اسم الدالة اختصارا للعبارة " get string "
وهي تقوم بقراءة الحرفي المدخل من لوحة المفاتيح ، وتضيف إليه الرمز
الصفري ( NULL ) ثم تقوم بتخصيصه للمتغير المطلوب و الذي يستخدم كدليل
للدالة. وصيغة الدالة كالآتي:gets(a);حيث " a " مصفوفة الرموز.والمثال
التالي يوضح استخدام هذه الدالة.
CODE
#include
main()
{
char employee_name[20];
gets(employee_name);
printf(“ Employee:
%s\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n”,employee_name);
}
وعندما
يبدأ البرنامج سوف ينتظر منك إدخال الحرفي المطلوب وهو اسم الموظف "
employee name " ثم يخصصه لمصفوفة الرموز المكونة من عشرين عنصرا. وفي
النهاية يطبع البرنامج الاسم على الشاشة كتأكيد لتمام الاستلام و
الحفظ.ويمكننا هنا إدخال الاسم محتويا على مسافات خالية وذلك على العكس من
الدالة scanf التي تعتبر المسافة الخالية مماثلة للضغط على المفتاح
Enter.ولكن هناك قيد على الحرفي المدخل إذ يجب مراعاة ألا يزيد طوله عن
الحجم المحجوز للمصفوفة مع العلم بأن المترجم يستغل خانة من المصفوفة
لتخزين الرمز الصفري. ففي هذا المثال لا يمكن إدخال أكثرمن 19 رمز فقط.
الدالة fgets :
تستخدم هذه الدالة لقراءة حرفي من ملف أو جهاز للدخل ( input device ).
ويتم تعريف الملف ( أو جهاز الإدخال ) ضمن صيغة الدالة نفسها كالتالي:
CODE
fgets( a, n, stdin );
حيث
" a " مصفوفة رموزو " n " الحد الأقصى للرموز المدخلة.و " stdin" اسم جهاز
الدخل القياسي ( لوحة المفاتيح )ويمكن بالطبع استبدال جهاز الدخل القياسي
stdin باجهزة أخرى حسب الموقف و لكننا في الوقت الحالي سوف نكتفي بلوحة
المفاتيح كجهاز للدخل .عند استخدام هذه الدالة في إدخال الحرفيات فإنها
تضيف إلى مؤخرة الحرفي كلا من
:1- علامة السطر الجديد
(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n
).
2- الرمز الصفري ( NULL ).ولذلك فإنه مع هذه الدالة لابد وأن نخصص
عنصرين في المصفوفة لهذين الرمزين .والمثال التالي يوضح استخدام هذه الدالة
CODE
#include
main()
{
char employee_name[20+2];
fgets(employee_name,22,stdin);
printf(“ Employee:
%s\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n”,employee_name);
}
الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://emadghost.yoo7.com
Admin
المدير العام
المدير العام
Admin


ذكر
عدد الرسائل : 595
العمر : 42
الموقع : https://emadghost.yoo7.com
المزاج : رايق
 . : الفصل الثالث : الإدخال و الإخراج ( I/O ) 15781610
نقاط : 311
تاريخ التسجيل : 10/05/2008

الفصل الثالث : الإدخال و الإخراج ( I/O ) Empty
مُساهمةموضوع: الباقي 2   الفصل الثالث : الإدخال و الإخراج ( I/O ) I_icon_minitimeالأربعاء أكتوبر 15, 2008 10:49 am

طرق مختلفة لطباعة الحرفيات:
سنتناول الآن بعضا من دوال الخرج التي تصلح لطباعة الحرفيات بطريقة
مبسطة.الدالة puts: اسم هذه الدالة إختصار للعبارة " put string " وهي
الدالة المقابلة لدالة
الدخل gets وصيغة هذه الدالة كالآتي:
CODE
puts ( a);
حيث
a ثابت حرفي ، أو مصفوفة رموز.والمثال التالي يوضح استخدام هذه الدالة
لطباعة رسالة لتنبيه المستخدم قبل استخدام الدالة gets لاستقبال البيان
CODE
#include
main()
{
char employee_name[20+1];
puts(“Enter employee_name: ”);
gets(employee_name);
puts(employee_name);
}
وعند
تنفيذ البرنامج نلاحظ أن الاسم المدخل قد جاء على سطر مستقل بعد رسالة
التنبيه . وذلك لأن الدالة puts عندما تطبع حرفيا على الشاشة تطبع في
مؤخرته علامة السطر الجديد "
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n"الدالة
fputs: هذه الدالة هي المناظرة للدالة fgets فهي تستخدم لإرسال الخرج إلى
ملف أو جهاز الخرج المذكور اسمه ضمن بارامترات الدالة.
وصيغة الدالة كالآتي:
CODE
fputs( a, stdout );
حيث
a مصفوفة رموز أو ثابت حرفي.و " stdout " اسم جهاز الخرج القياسي وهو جهاز
الشاشة.ومن الطبيعي استبدال جهاز الشاشة كما يتطلب التطبيق.والدالة fputs
تختلف عن puts في أنها لا تطبع علامة السطر الجديد في نهاية الحرفي
الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://emadghost.yoo7.com
 
الفصل الثالث : الإدخال و الإخراج ( I/O )
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1
 مواضيع مماثلة
-
» دوال الإدخال و الإخراج في لغة سي
» الفصل الرابع : المؤثرات
» الفصل الخامس : اتخاذ القرار
» الفصل السادس : الحلقات التكرارية
» مفاجأة لعشاق Red Alert الجزء الثالث وصل

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
انا المسلم :: (`'·.¸ (`'·.¸* البـرمجـة * ¸.·'´) ¸.·'´) :: Turbo C plus plus- c-
انتقل الى: