قائمة المدونات الإلكترونية

الخميس، 28 أبريل 2011

عمليات الإخراج للبيانات والمعلومات

القواعد العامة لكتابة الملف المصدري
  The Basics Rules To Write Source Code                      
- ملفات التوجيه للدوالThe Guidance(Control) File            
- القواعد العامة الخاصة بإخراج البيانات The Rules Of Output   
- عمليات الإخراج المختلفة للبيانات المختلفة علي الشاشة
- استخدام دالة printf() 
- استخدام دالة puts() 
- استخدام دالة putch 
- استخدام دالة putchar
-  عمليات الإخراج المختلفة للبيانات المختلفة علي الطابعة fprintf() 




15 التعليقات:

غير معرف يقول...

دوال الاخراج :

أولاً:
دالة الإخراج :


printf( );


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


الأول يكون دائم من نوع سلسلة حرفية و المتغير الاول إجباري , أما المتغير الثاني فهو غير إجباري و يكون من نوع va_list طبعاً هو ليس من الأنواع القياسية

في لغة سي و لكنه مفيد جدا في أن الدالة تأخذ عدد غير محدد من القيم مثل ما يحصل مع الدالة printf و scanf و لكن عمل هذا النوع معقد جداً

و لن أتطرق له هنا ...المهم لو اردنا أن نطبع الجملة التالية :


Hi I am Talal


ما علينا إلا كتابة الآتي:


printf ("Hi I am Talal");


ولكن ماذا لو أردنا أن نكتبها هكذا:


Hi I am
Talal


سوف نكتبها هكذا :


printf ("Hi I am nTalal");


لاحظ هنا وجود علامة الـ n وهي تعني new line ( سطر جديد )
وهناك الكثير من العلامات التي تؤدي اغراض معينة مثل:
1. نقل المؤشر 8 مسافات و نستخدم لذلك علامة t .
2. إخراج صوت الصافرة ( بيب ) , ونستخدم العلامة a.
3. إرجاع المؤشر مسافة خلفية و نستخدم لذلك b .

ولكن ماذا لو اردت أن نطبع العلامة ؟!؟
الحل هو كتابتها كالتالي:


printf ("Hi I am Talal");


سنلاحظ أن المخرج على الشاشة هو :


Hi I am Talal


والحال ايضاً نفس الشئ مع الـ ؟ و الـ ' و الـ "
فما عليك إلا كتابتها مرتين ؟؟ و "" و ' ' .

ولنرى الان هذا البرامج على السريع :


#include "stdio.h"
main ( )
{
int a = 5, b = 10, c ;
float f = 45.5 ;
char ch = 'Y' ;
char name[10] = "Talal" ;

c = a + b ;
printf ("The int c = %d n",c) ;
printf ("The float f = %f n",f) ;
printf ("The char ch = %c n",ch) ;
printf ("The string name = %sn",name) ;
return 0 ;
}


لاحظ أن المخرجات ستكون بالشكل التالي :


The int c = 15
The float f = 45.5
The char ch = Y
The string name = Talal


لاحظ أن %d تكون توصيف لمتغير من نوع int ,
و الـ %f تكون لتوصيف متغير من نوع float ,
والـ %c تكون لتوصيف متغير من نوع char أي حرف واحد ,
والـ %s تكون لتوصيف متغير من نوع string حرف أو أكثر .


توثيق الجزء السابق :
66.147.242.89/~alobaidl/hamzaschool/showthread.php?p...

وهناك أكواد أخرى تؤدي نتائج مختلفة فمثل الكود \t معناه tab أي مسافة جدولة خالية ويشمل الجدول التالي على الأكواد المستخدمة مع الدالة()printf والتي تؤدي أشكال خرج مختلفة.

الكود الاستخدام مثال
\n
الانتقال لسطر جديد

printf("\n")
\t
نقل المؤشر بعد 8 مسافات

printf("\t")
\a
إخراج صوت الصافرة

printf("\a")
\b إرجاع المؤشر مسافة خلفية printf("\b")
\xdd طباعة الحرف المناظر للكود المكتوب بالنظام السادس عشر hexadecimal printf("\x41")
\ddd طباعة الحرف المناظر للكود المكتوب بالنظام الثماني octal printf("\101")
\\ طباعة الشرط المائلة printf("\\")
\? طباعة علامة الاستفهام printf("\?")
\' طباعة العلامة ( ' ) printf("\'")
\" طباعة علامة التنصيص printf("\'")


أكواد طباعة أنواع البيانات:

الكود الاستخدام مثال
%d توصيف لمتغير (أو ثابت)رقمي صحيح int printf("%d",-10)
%f توصيف لمتغير(أو ثابت) رقمي حقيقي float printf("%f",5.7)
%c توصيف لمتغير(أو ثابت) char (حرف واحد) printf("%c",'a')
%s توصيف لعبارة حرفية string (حرق أو أكثر من حرف) printf("%s","ab")
%u توصيف لمتغير (أو ثابت) رقمي صحيح بدون إشارة printf("%u",10)
%x توصيف لمتغير (أو ثابت) بالنظام السادس عشر hex printf("%x",a)
%o توصيف لمتغير(أو ثابت) بالنظام الثماني octal printf("%o",67)
ملاحظات:يمكن أن تستخدم الأكواد %d أو%f لتحديد عدد الأرقام التي تظهر على الشاشة فمثلاً الصورة %.3f يعني طباعة ثلاث أرقام بعد العلامة العشرية فمثلاً الرقم 534.56378 يظهر بالصورة 534.564.

توثيق الجزء السابق :
computer.atlas4e.com/Project_E1/Project/chapter15/chapter15.htm

شيماء البيلى أحمد البيلى
الفرقة الرابعة
شعبة اعداد معلم الحاسب الالى

غير معرف يقول...

قواعد بناء البرنامج:-

- البرنامج التالى يمثل أبسط تركيب لبرنامج مكتوب بلغة C
كود:
# include < stdio .h >
main ( )
{
printf ( " hello egypt " ) ;
}
- يبدأ البرنامج بالعبارة < ……h > # include وبين العلامتين اسم ملف التوجيه الخاص بالدوال المستخدمة فى البرنامج – يمكن كتابة أكثر من include .
- يتكون البرنامج من دالة رئيسية main ( ) وتبدأ بالقوس { وتنتهي بالقوس } .
- جميع كلمات ودوال اللغة تكتب بالحروف الصغيرة .
- تنتهي كل عبارة بفاصله منقوطة ( ; ) يجوز كتابة أى ملاحظات أو تعليقات خاصة بالبرنامج بوصفها بين العلامين /* */ لأى عدد من السطور  جسم الدالة يوضع ما بين الأقواس { }

حيث انه يعد مثال مبسط على دالة الاخراج print f

تعليق ايمان نصر - الفرقة الرابعة

غير معرف يقول...

بالفعل دوال الاخراج هى كما تم ذكرها ونريد أن نذكر وظيفة كل دالة فى عملية الاخراج حيث ان :-

1-الدالة puts(); خاصةبطباعة المتغيرات الحرفية أوالجمل اى لطباعةسلسلة من الحروف على الشاشة وبدون توصيف لشكل الاخراج والقاعدةالخاصة بها
Puts("message'); او puts("variable")

2-الدالة putch(); والدالة putchar(); خاصة بطباعة حرف واحدعلى الشاشة والقاعدة الخاصة بها putch ("variable"); وهى نفس قاعدة الدالةputchar();

3-الدالة printf();خاصة بطباعة العامة للجمل والأحرف وهى الأكثر استخداما والقاعدة الخاصة بها يوجد 8 قواعد نذرها كالتالى:-
Printf("operator message");
2-printf("descriptor operator",var1);
3-printf("descriptor operator",var1,var2);
4-printf("message descriptor operator",var1");
5- printf("message descriptor operator",var1,var2");
6-printf("message");
7-printf(";
8-printf("descriptor" var1,var2);



تعليق ايمان نصر - الفرقة الرابعة

حياه اسماعيل يقول...

*** ملفات التوجيه:
**هي عبارة عن ملفات تضم عدد من الدوال الجاهزة
و كل ملف توجيه خاص دوال معينة
*تسمح لك لغة C++ بالتحكم في عملية الترجمة وذلك بإضافة التوجيهات اللازمة للمترجم إلى البرنامج.
ملاحظات::::::::
- يبدأ البرنامج بالعبارة ويوضع بين العلامتين <> اسم ملف التوجيه الخاص بالدوال المستخدمة فى البرنامج
– يمكن كتابة أكثر من include .
- الأسطر التي تبدأ بالعلامة # تعتبر توجيهات للمعالج المبدئي preprocessor directives مثل الأمر #include.
** بإمكان المترجم أن يقوم بترجمة البرنامج الغير منظم أو منسق . ولكن الفرق الوحيد هو أن البرنامج الغير منظم يصعب على القارئ متابعتة و فهمة، أما بالنسبة للمترجم فليس هناك فرق، وسيقوم المترجم بترجمة البرنامج سواء كان منظماً أم لا. وإذا أردت كتابة نص أي برنامج فمن الأفضل:
- أن تجمع توجيهات المترجم و التي تبدأ بالحرف # على شكل مجموعة (إذا كانت أكثر من توجيه)
- يجب أن تُكتب كل توجيه على سطر مستقل حتى تتم عملية الترجمة بنجاح. أما إذا كتبت أكثر من توجيه على نفس السطر فإن عملية الترجمة لن تتم بنجاح.
- يكتب كل توجيه في بداية السطر دون ترك مسافة بين بداية سطر التوجيه و الهامش.
** مثلاً يمكنك أن تأمر المترجم بإضافة ملف معين إلى نص برنامجك قبل البدء بعملية الترجمة وذلك باستخدام التوجيه #include، أو استبدال رمزاً بقيمة معينة باستخدام التوجيه #define لذا هناك نوعين من العبارات (التعليمات) في البرنامج:
عبارات تنفيذية مثل عبارة cout في البرنامج،
و عبارات تتحكم في عمل المترجم مثل #include وتسمى مثل هذه العبارات بتوجيهات المترجم. وتبتدئي توجيهات المترجم بالحرف # ويقوم بتنفيذها برنامج يسمى المعالج المبدئي Preprocessor. فمثلاً يقوم المعالج المبدئي بالبحث في نص البرنامج المكتوب الذي تم تحريره عن العبارات التي تبدأ بالحرف # و يقوم بتنفيذها ثم حذفها من نص البرنامج. أي أن المعالج المبدئي مسؤولاً عن تنفيذ توجيهات المترجم والتي تؤدي إلى إضافة أو إجراء بعض التعديلات على نص البرنامج، أي توسيع البرنامج الأصلي

غير معرف يقول...

الإخراج (output)
هي عملية استرجاع المعلومات و إظهارها بطريقة يستطيع المستخدم فهمها. مثل
الشاشة و السماعات و الطابعة.
وهناك قواعد عامة لكتابة الملف المصدرى:
1-يمكن ان يحتوى ملف البرنامج المصدرى على جمل استرشاديةويجب ان تبدا الرسالة بعلامتى
/* ثم الرسالة- ثم العلامتين -*/
2-ثم تحميل او فتح ملفات التوجيه الخاصة بدوال اللغة
3-يبداالبرنامج بالدالة الاساسيةmain()
4-ثم كتابة القوس الكبير {
5-ثم جزء الاعلان عن المتغيرات والثوابت
6-ثم جزء التخصيص للمتغيرات وتستخدم الفاصلة المنقوطةمعها
7-ثم جزء اوامر اللغة او البرنامج الخاص بالتوصيف وعمليات المعالجة المختلفة
8-ثم غلق الدالة الرئيسية بالقوس الاخر}
وهناك الطباعة لانواع مختلفة من البيانات باستخدام الدالة العامة printf()
اولا الطباعة والاخراج للرسائل على الشاشة
ثانيا الطباعة والاخراج لقيم متغيرات صحيحة
مثال:
# include
main()
{
int a;
a=10;
printf("the value is");
printf(%d,a);
return 0;
}
ثالثا الطباعة والاخراج لقيم متغيرات حرفية
رابعا الطباعة والاخراج بكود شفرة ascii

الاسم:عزيزة عبد الحميد سلطان
الفرقة الرابعة
قسم اعداد معلم الحاسب الالى

غير معرف يقول...

http://www.mediafire.com/?4se7hyd4j9y7oky

مشاركتي علي هذا الرابط لان الموقع لا يقبل الان

أحمد نصر الدين السيد

غير معرف يقول...

أساسيات لغة السي:
1- تحتل الدالة الأساسية main() أهمية كبيرة لأنها ترشد المبرمج إلى بداية البرنامج ، ومن الضروري وجودها في كل برنامج.

2- يتبع كلمة main هلالين ( ) وتدل على بداية دالة . وبعد هذا يأتي الرمز { ليدل على بداية الدالة والرمز } ليدل على نهايتها.

3- لإضافة تعليقات في البرنامج فيجب أن يحدد التعليق بين الرموز/ * */ كما في المثال / * Hello in c4arab*/ وباستعمال هذان الرمز فإنك تخبر الآلة بتجاهل هذه الجملة وعدم تنفيذها ، وهي ضرورية كثيرا حينما تتبادل البرنامج مع غيرك ليتسنى لهم فهم برنامجك من خلال التعليقات التي تكون قد أضفتها من خلال برنامجك ، وكذلك فإن هذه التعليقات سوف تفيدك كثيرا حينما ترجع بعد فترة طويلة من الوقت إلى برنامجك و بهذا سوف تستفيد منه في معرفة نوع برنامجك ، وأيضا هنالك نقطة مهمة فإنك بمقدورك كتابة التعليقات باللغة العربية ما دام المترجم compiler سوف يتجاهلها.
سوف اتكلم لاحقا عن التعليقات بشكل موسع وذلك لأهميتها.

4- يجب استعمال semicolons الفاصلة المنقوطة عند نهاية كل جملة وهي تدل على انتهاء الجملة كما في المثال الآتي:



printf("Hello in c4arab");




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

main()
{
printf("Hello everyone");
}



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

main(){printf("Hello everyone");}
6-لغة السي تفرق بين الحروف الصغيرة والحروف الكبيرة ، وهكذا فهي تفرق بين scanf و Scanf .
توثيق :
http://pramgnet.ahlamontada.com/t497-topic
سالى الدالى

غير معرف يقول...

#include
void main(void)
{
puts("hi….this is the first program for me");
}



والآن دعنا نفهم معا كل كلمة في البرنامج بالتفصيل.
طبعا كما تلاحظ فإنه في بداية البرنامج كتبنا العبارة التالية

#include



فيا ترى ماذا تعني وهي هي مهمة؟
تسمى تلك توجيهات المترجم ، والتوجيه #include سوف يقوم بمهمة معينة وهي إخبار المترجم بأن يضم الملف stdio.h إلى البرنامج الذي تقوم بكتابته .
بالطبع تتسائل الآن بينك وبين نفسك لماذا أضفنا ؟؟
لقد أضفناها وذلك لأننا احتجنا إلى كتابة الأمر puts وهذا الأمر لن يتعرف عليه برنامج المترجم إلا إذا كتبنا الملف .
وطبعا الملف stdio.h يحتوي على أوامر ومعلومات وإعلانات كثيرة تهمنا كثيرا في كتابة البرنامج لذلك من وجهة نظري اعتبر هذا الملف هو جوهر الملفات في برنامج المترجم.
لا تنشغل كثيرا بفهم النقطة السابقة فشيئا شيئا سوف تستوعبه كثيرا مع كتابة البرامج في الدروس القادمة.
والآن انتقلنا للسطر التالي في البرنامج وهو

void main(void)



يا ترى ماذا نعني بتلك العبارة السابقة؟

لتبسيط الأمر سوف أقوم بتقسيم العبارة السابقة إلى ثلاثة أقسام كالتالي:
(المتغيرات) اسم الدالةfunction_name القيمة التي ترجع بعد الإجراء

إذن في البرنامج السابق كتبنا void مكان القيمة التي ترجع بعد الإجراء ونعني بكلمة void بأن البرنامج لن يرجع بأي قيمة ، يا ترى هل استوعبت كلامي؟؟؟ مرة أخرى أقول بأنك سوف تستوعبه شيئا فشيئا عند كتابة المزيد من البرامج.
ثم كتبنا مكان اسم الدالة main وهذه الدالة رئيسية ومهمة في معظم البرامج التي تكتب بلغة السي ، وطبعا نستطيع إضافة أكثر من دالة لكي تقوم الدالة بوظيفة معينة وسوف نذكر المزيد من الدالات خلال الدروس القادمة.
وبعد أن أنهينا كتابة الإجراء
قمنا بوضع القوس
{
وطبعا كتبنا في داخله العبارة التي نريد تنفيذها ولقد كانت بهذه الطريقة

puts("hi…..this is the first program for me")



الأمرputs يقوم بطباعة العبارة التي تليه لكي تظهر كما هي مكتوبة أي تقوم بوظيفة الكتابة على الشاشة وطبعا هنالك أكثر من إجراء تستطيع استخدامه لغرض الكتابة على الشاشة.
طبعا تذكر أن العبارة التي تريد طباعتها يجب أن تكون بين قوسين
( ---------------)
ويجب أن تكون الجملة محاطة بعلامات الترقيم
("-------------")
وأيضا بعد الانتهاء منها يجب وضع الفاصلة المنقوطة في النهاية بعد غلق القوس
("------------");
وأخيرا بعد الانتهاء من هذا الإجراء يجب غلقه بالقوس
}
وهذا يدل على نهاية البرنامج
الخلاصة:
الشكل العام لكتابة أي برنامج هو:

#include< إسم الملف>
القيمة التي ترجع للإجراء إسم الدالة (المتغيرات)
{
-----------;
-----------;
الأوامر المطلوب تنفيذها
-----------;
-----------;
}
الشكل العام لبرنامج C++:-

استدعاء المكتبات : Libraries call
الإعلان عن الثوابت : Constants declaration
الإعلان عن المتغيرات العامة : Global variables declaration
الدالة الرئيسية : (main)
بداية البرنامج : {
الإعلان عن المتغيرات المحلية : Local variables declaration
عبارات البرنامج : Program statements
مردود الدالة : Return
نهاية البرنامج : }

اسم الدالة : Function_name
بداية الدالة : {
المتغيرات المحلية : Local variables
العبارات : Dtatements
المردود : Return
نهاية الدالة : }
التوثيق:
http://pramgnet.ahlamontada.com/t497-topic
تعليق:سالى الدالى

غير معرف يقول...

دالة الطباعة أو دالة الإخراج printf .

الشكل العام للدالة في البرنامج :

هناك شكلان لهذه الدالة , الأول شكل يقوم بطباعة جملة معينة فقط أو تعليق معين مثل :

;("printf("Comments

حيث Comments : أي جملة أو تعليق يرغب المبرمج في إضافته .

والشكل الآخر لدالة printf لا يختلف كثيراً عن الشكل الأول , إلا أنه مصحوب بقيم للمتغيرات أو نتائج معينة , مثل :

;(Printf(“Comments and Formats”,variable

حيث Comments : جملة أو تعليق مناسب لرسالة الطباعة .

Formats : نوع المتغير المطلوب طباعته .

Variable: رمز المتغير حسب تعريفه في البرنامج .


والآن نقوم بكتابة برنامج يقوم باستقبال قيمة عددية x,y مع إيجاد مجموعهما .


The Program :
كود:

#include #include void main() { int x,y,sum=0; clrscr(); printf(“Enter Value Of X = “); scanf(“%d”,&x); printf(“Enter Value Of Y = “); ScanF(“%d”,&y); Sum=x+y; Printf(“ Sum = X + y = %d + %d = %d ”,x,y,sum) ; getch(); }















في المثال السابق قمنا بتعريف مكتبين هما :

مكتبة : وهذه المكتبة مهمة حتى تقوم كل من دالتي scanf , و printf بالعمل .

وكتبة : وهذه المكتبة مهمة حتى تقوم كل من دالتي clrscr , و getch بالعمل , والأولى تقول بتنظيف الشاشة , والتانية تقوم بإيقاف الشاشة عند نهاية البرنامج حتى يتمكن المبرمج من رؤية نتائج برامجه .

طبعا كل مكتبة تحتوي على عدد من الدوال , ولا تعمل هذه الدوال من دون مكتابتها الخاصة , ويمكن للمبرمج معرف هذه المكتبات والدوال من المساعدة الخاصة بالبرنامج ( Help ) .

بعد تعريف المكتبتين قمنا بتعريف المتغيرات , وهيا :

x : المتغير الأول .
y : المتغير الثاني .
sum : حاصل جمع المتغيرين , وقمنا بتصفيره حتى لا يتم الأخذ بأي قيمة أخرى له قد تكون عالقة في ذاكرة الجهاز .

بعد تعريف المتغيرين قمنا بطباعة جملة توضيحية وظيفتها طباعة جملة على الشاشة توضح للمبرمج ضرورة إدخال قيمة للمتغير X , وهيا توضيحية .

وبعد ذلك قمنا بكتابة دالة scanf وظيفتها استقبال قيمة X وتخزينها في ذاكرة الجهاز .

ونفس الشيء بالنسبة للمتغير Y .

وبعد ذلك قمنا بإيجاد حاصل جمع كل من x,y , وتخصيص قيمة الجمع للمتغير sum في جملة رياضية منطقية .

وبعد ذالك قمنا بكتابة جملة طباعة printf , وظيفتها طباعة رسالة معينة عن جمع العددين , وحاصل هذا الجمع .

وبعد ذلك قمنا بكتابة جملة getch ووظيفتها كما سبق وذكرها إيقاف الشاشة حتى يتمكن المبرمج من رؤية نتائج برنامجه .
...
توثيق:
http://www.h50h.com/vb/t20327.html
......
محمد جمال الدين محمود

غير معرف يقول...

السلام عليكم
الإدخال و الإخراج ( 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);
}

يتبع بالمزيد.....
مني مصطفي عرابي

غير معرف يقول...

تكملة التعليق
تكملة التعليق:-

رسالة لتنبية مستخدم البرنامج :

من عيوب الدالة 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"

يتبع بالمزيد....

التوثيق
http://www.science-collector.com/vb/t678.html

مني مصطفي عرابي

غير معرف يقول...

تكملة التعليق:-

والآن سنتناول طريقة عمل البرنامج بشىء من التفصيل، ولنبدأ بدالة الطباعة printf . فعندما تتعامل مع مصفوفة الرموز " a " فغنها تقرأ و تطبع عناصر المصفوفة واحدا بعد الآخر حتى تصادف الرمز الصفري فتتوقف.

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

إننا عندما نعلن عن المصفوفة " [a[20" فإن عناصر المصفوفة تأخذ الأرقام المسلسلة من " 0 " إلى " 19" كالتالي:

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);
}

طرق مختلفة لطباعة الحرفيات:

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

الدالة 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 في أنها لا تطبع علامة السطر الجديد في نهاية الحرفي.

التوثيق
http://www.science-collector.com/vb/t678.html

مني مصطفي عرابي

غير معرف يقول...

ويمكن الإشارة إلى دوال تحسين الادخال والإخراج وهى كالتالى :-
دوال تحسين المدخلات و المخرجات:
•دالة مسح الشاشة ()clrscr
ملف التوجيه conio.h
وتستخدم لمسح الشاشة ووضع المؤشر في أول عمود من الصف الأول على الشاشة و تستخدم بالشكل التالي.
•دالة تغيير موضع المؤشر ()gotoxy
ملف التوجيه conio.h
تستخدم لوضع المؤشر في العمود x من الصف Y وتأخذ الصورة التالية:
gotoxy(10,30);
وتعني انتقال المؤشر إلى العمود رقم 10 من الصف 30
•دالة تغير لون الكتابة ()textcolor
ملف التوجيه conio.h
تستخدم لتغير لون الكتابة التي ستطبع بعد الدالة وتأخذ الصيغة:
textcolor(color no); or textcolor(color name);
حيث يتم تحديد اللون إما برقم اللون أو باسمه ولابد من كتابة اسم اللون بالحروف الكبيرة فقط
دالة تغير لون الخلفية()textbackground
ملف التوجيه conio.h
وتستخدم لتغير لون خلفية الكتابة التي ستطبع بعد تحديد لون الخلفية بها وتأخذ الصيغة التالية:
textbackground(color no); or textbackground(color name);
ومعاملات هذه الدالة هي نفس معاملات الدالة السابقة ()textcolor مع ملاحظة أن الدالة ()textbackground لا تستخدم سوى الألوان من رقم 1 إلى رقم 7 المذكورين في الجدول السابق.
•دوال الإدخال و الإخراج التي تستخدم الألوان
سبق أن أشرنا إلى أن دالة الإخراج ()printf ودالة الإدخال ()scanf وكذلك باقي الدوال التي تم شرحها قد صممت بحيث تعمل باللون الأبيض على الأسود ولا تتأثر بدوال تغير الألوان فإن هناك مجموعة من الدوال المقابلة للدوال السابقة و التي صممت للتعامل بالألوان المحددة و كلها مسبوقة بالحرف c مثل ()cprintf() scanf() cputs() cgets وكلها تابعة لملف التوجيه conio.h
ويمكن اضافة امثلة عليها فى جزء التطبيق التالى

تعليق :- إيمان نصر - الفرقة الرابعة

غير معرف يقول...

دوال الإدخال و الإخراج :
أن كل دالة مرتبطة بملف توجيه معين حيث يستدعى هذا الملف في أول البرنامج بالعبارة include# فمثلاً الدالة ()printf معرفة بالملف stdio.h وتكتب العبارة في أول البرنامج حتى يتعرف المترجم على الدالة و هكذا مع باقي الدوال.

• دالة الطباعة على الشاشة ()printf
ملف التوجيه stdio.h
تستخدم الدالة () printf لطباعة البيانات بجميع أنواعها (int, char, string, float…) على الشاشة فقط.
وتأخذ الدالة عدة صور وكذلك معاملات وأكواد تحدد شكل المخرجات.
وسنوضح فيما يلي مثال لكل صورة مع الشرح
مثال:
printf ("welcome with Computer Science")
وفي هذا المثال يتم طباعة ما بين علامتي التنصيص" "كما هو على الشاشة وبالتالي نحصل على النتيجة التالية:
welcome with Computer Science
مثال:


Printf ("\n Welcome\n with \n Computer Science")

وفي هذا المثال: الكود \n معناه new line أي سطر جديد وعندما يجد المترجم \n يترجمها إلى سطر جديد وبالتالي نحصل على النتيجة التالية:

Welcome
with
Computer Science

وهناك أكواد أخرى تؤدي نتائج مختلفة فمثل الكود \t معناه tab أي مسافة جدولة خالية ويشمل الجدول التالي على الأكواد المستخدمة مع الدالة()printf والتي تؤدي أشكال خرج مختلفة.
الكود الاستخدام مثال
\n

الانتقال لسطر جديد
printf("\n")
\t

نقل المؤشر بعد 8 مسافات
printf("\t")
\a

إخراج صوت الصافرة
printf("\a")
\b إرجاع المؤشر مسافة خلفية printf("\b")
\xdd طباعة الحرف المناظر للكود المكتوب بالنظام السادس عشر hexadecimal printf("\x41")
\ddd طباعة الحرف المناظر للكود المكتوب بالنظام الثماني octal printf("\101")
\\ طباعة الشرط المائلة printf("\\")
\? طباعة علامة الاستفهام printf("\?")
\' طباعة العلامة ( ' ) printf("\'")
\" طباعة علامة التنصيص printf("\'")



•طباعة قيم المتغيرات على الشاشة:لطباعة القيم الموجودة بالمتغيرات نستخدم أكواد معينة لتحدد نوع البيانات المراد طباعتها بالدالة () printf، انظر للمثال التالي:

#include
void main(){
int a=5;
float b=1.5;
printf("a = %d",a);
printf("\nb = %f",b);
}

فيكون الناتج

a = 5
b = 1.500000

في هذا المثال عندما يقابل مترجم اللغة العلامة% ينظر إلى الحرف التالي لهذه العلامة ويعتبر هذا الحرف توصيف لقيمة موجودة بعد العلامة، وكل حرف يحدد نوع معين من البيانات ففي هذا المثال نلاحظ:
d% تعني int أي رقم صحيح بينما f% تعني float أي رقم حقيقي .

ويوضح جدول التالي أكواد طباعة أنواع البيانات:
الكود الاستخدام مثال
%d توصيف لمتغير (أو ثابت)رقمي صحيح int printf("%d",-10)
%f توصيف لمتغير(أو ثابت) رقمي حقيقي float printf("%f",5.7)
%c توصيف لمتغير(أو ثابت) char (حرف واحد) printf("%c",'a')
%s توصيف لعبارة حرفية string (حرق أو أكثر من حرف) printf("%s","ab")
%u توصيف لمتغير (أو ثابت) رقمي صحيح بدون إشارة printf("%u",10)
%x توصيف لمتغير (أو ثابت) بالنظام السادس عشر hex printf("%x",a)
%o توصيف لمتغير(أو ثابت) بالنظام الثماني octal printf("%o",67)

ملاحظات:يمكن أن تستخدم الأكواد %d أو%f لتحديد عدد الأرقام التي تظهر على الشاشة فمثلاً الصورة %.3f يعني طباعة ثلاث أرقام بعد العلامة العشرية فمثلاً الرقم 534.56378 يظهر بالصورة 534.564.

.


تعليق:-
هبة احمد السعيد امين

غير معرف يقول...

•دالة الإدخال العامة () scanf
هي دالة الإدخال الرئيسية التي تسمح بإدخال جميع أنواع البيانات وهي تأخذ نفس المعاملات التي تأخذها الدالة()printf للتعامل مع البيانات والموجودة بالجدول السابق.

والصورة العامة للدالة()scanf هي:
int scanf (const char*format [,address,…]);

مثال التالي يوضح استخدام الدالة()scanf حيث يقوم باستقبال مجموعة قيم مختلفة النوع وطباعتها على الشاشة.

#include
void main(){
int a;
float b;
char ch='Y';
char name[10];
printf("\n Enter your name:");
scanf("%s",name);
printf("a =");
scanf("%d",&a);
printf("b =");
scanf("%f",&b);
printf("\nWlecome %s",name);
printf("\n\t a = %d",a+1);
printf("\n\t b= %.2f",b);
printf("\n\t c = %c",ch);
}

فيكون الناتج

Enter your name:Ahmed
a=12
b=4.5
Welcome Ahmed
a = 12
b = 4.50
c = Y

ونلاحظ أن الدالة ()scanf تستقبل قيمة صحيحة وتخزنها في المتغير a وقيمة حقيقية وتخزنها في المتغير b ولكن ماذا يعني المؤثر & ؟
a& تعني تخزين القيمة الصحيحة في المكان المخزن عنوانه في المتغير a بمعنى أن a يشير إلى عنوان المكان الذي تخزن فيه القيمة . وبالتالي العلامة & تجعل المتغير يشير إلى عنوان المكان.ويوضع المؤثر & فقط مع البيانات الصحيحة و الحقيقية و الحرف ولا يوضع مع متغير العبارة الحرفية string .
تعليق:-
هبة احمد السعيد امين

إرسال تعليق