الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كل ما تريد معرفته عن Formated Output

بدأه XMasterrrr في 18 أكتوبر 2010 · 15 رد · 6,053 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم و به نستعين.

هو شرح مفصل و ال Output Format و بأذن الله ان لاقى نجاح سأقوم بكتابةشرح لل Input Format .

العنصر cout يمتلك الكثير من المميزات التى تؤثر على اظهار البيانات بشتى الطرق التى تريدها فى الاعداد و الجمل.

اريد شيئا بسيطا منكم الدعاء لى بالهداية و التوفيق و الكرم من الله .

يجب منك استخدام ال compiler و رئية ماذا يحدث امام عينيك انت .

حسنا المثال التالى يعرض لكن نفس الرقم لكن يعرض بأكثر من طريقة:

720

720.0

720.00000000

720

7.2e+2

+720.0

هم هم نفس الارقام لكن بأكثر من طريقة عرض.

حسنا كيف نسيطر الأن على البيانات التى نريدها ؟؟؟؟

سنرى ذلك الأن بأذن الله:

فى البداية سوف اقوم بتقسم الدرس الى عدة اقسام لأن ال format ليس بالسهل

نبتدى بال

setw

#include <iostream>
using namespace std;
int main()
 {
 int num1 = 2897, num2 = 5, num3 = 837,
 num4 = 34, num5 = 7, num6 = 1623,
 num7 = 390, num8 = 3456, num9 = 12;

 // Display the first row of numbers
 cout << num1 << " " << num2 << " " << num3 << endl;

 // Display the second row of numbers
 cout << num4 << " " << num5 << " " << num6 << endl;

 // Display the third row of numbers
 cout << num7 << " " << num8 << " " << num9 << endl;

 return 0;
 }

حسنا و الاخراج لهذا المثال هو التالى

2897 5 837

34 7 1623

390 3456 12

انظرون الى المنظر الارقام تحت بعضا لا يمكن التفريق اين السطر اليس كذلك

لكن العنصر cout يقدم لنا شيئا فريد من نوعه لحل هذه المشكلة و هو setw

حسنا سنوضحه فى المثال البسيط التالى:

value = 23;
cout << "(" << setw(5) << value << ")";

سيظهر لنا الناتج التالى

( 23)

اذا ما يفعله setw هى عمل فراغات فى الماكن الذى تحدده بالمساحة الذى تحددها

حسنا سنرى الأن المثال الذى تحدثنا عنه فى البداية و نرى الحل له

سنضع بين كل رقم 6 فواصل و سيكونون بهذا الشكل :

#include <iostream>
#include <iomanip> // Header file needed to use setw
using namespace std;

int main()
 {
 int num1 = 2897, num2 = 5, num3 = 837,
 num4 = 34, num5 = 7, num6 = 1623,
 num7 = 390, num8 = 3456, num9 = 12;
 // Display the first row of numbers
 cout << setw(6) << num1 << setw(6) << num2 << setw(6) << num3 << endl;

// Display the second row of numbers
cout << setw(6) << num4 << setw(6) << num5 << setw(6) << num6 << endl;

 // Display the third row of numbers
 cout << setw(6) << num7 << setw(6) << num8 << setw(6) << num9 << endl;

 return 0;
}

و الاخراج سيكون على الشكل التالى :

2897 5 837

34 7 1623

390 3456 12

ارئيتم التنسيق الجمالى الذى حدث ؟؟؟ هذا ما اتكلم عنه

الأن لنشرح

قمنا الأن بكتاب

cout << setw(6) << num1 << setw(6) << num2 << setw(6) << num3 << endl;

اتدرون ما الذى فعلته setw

حسنا قامت بعمل 2 فراغات فى بداية البرنامج لأن ال 4 اعداد التى بعدها تطلب ان يكون هناك مساحة لها فى ال setw و نحن اعطينا لل setw 6 مساحات فقط لعرض المتغير و المتغير الذى قمنا بأدخاله يوجد به 4 ارقم اذا سنأخذ 2 فراغ و الباقى للمتغير وضحت ؟؟؟؟

ثم طباعة اول رقم ثم 5 مسافات نعم 5 مسافات لأن المسافة السادسة هى الرقم الذى كتب

ثم 3 فراغات و ال 3 الاخرون يحتوون على الرقم الذى نريده

ظهر لنا الأن مكتبة جديدة تدعى

iomanip

هذه المكتبة تستخدم فى التنسيق الجمالى للشكل.

الأن لنتعمق بعض الشئ فى هذه الدالة الصغيرة التى ترينا شكلا جماليا رائعا.

لاحظوا ان بعض طباعة اخير setw سيعمل الرقم الذى بعده لكن من بعد ذلك لن يوجد تأثير نهائى لل setw و كأنك لم تكتبها من الاساس.

حسنا ستستغرب عندا تكتب رقم متغير اكبر من ال setw مثل التالى:

value = 18397;
cout << setw(2) << value;

المخرجات هى :

18

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

حسنا من الممكن استخدام ال setw فى ال string , floating points, int values اى من الممكن استخدامها فى اى شئ نريدها و هذا مثال على ما اقول :

#include <iostream>
 #include <iomanip>
 #include <string>
 using namespace std;

int main()
 {
10 int intValue = 3928;
11 double doubleValue = 91.5;
12 string stringObjectValue = "Jill Q. Jones";

14 cout << "(" << setw(5) << intValue << ")" << endl;
15 cout << "(" << setw(8) << doubleValue << ")" << endl;
16 cout << "(" << setw(16) << stringObjectValue << ")" << endl;
17 return 0;
}

الناتج الذى سيخرج لنا هو التالى :

) 3928)

) 91.5)

( Jill Q. Jones)

3 ملاحظات على ما سبق الأن:

اقتباس

حجم المساحات لل Floating Points يتضمن ال Decimal Point .

حجم المساحات لل Strings يتضمن كل الحروف فى ال String من بينهم المسافات.

اى فراغ عام سيكون على اليسار اوتوماتيكيا و سنرى حل لهذا فى ما يلى.

انتهى الأن درسنا عن ال setw .

المشاركة التالية تتضمن ال setprecision تعرفونها فى ما يلى بأذن الله.

تم تعديل هذه المشاركة بواسطة XMasterrrr في 18 أكتوبر 2010 في 05:58

2

.Everyone has a dream

.I never thought that I would be the one I am on now

...No Pain No Gain

مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...

تعديل: مشرف قسم السى/سى++ من 2012.

#2

بسم الله الرحمن الرحيم نبتدى

درسنا الأن عن ال serprecision

ما هى ال setprecision

هى التقريب (ان اقلل من الرقم الاخير و ارى اذا كان اكثر من 5 ام اصغر من 5 لأحسب التقريب له)

فى ال floating point حسنا ما هو التريب فلنقل ان المتغير التالى سيظهر كما هو

double test = 4.91877;

اريد ان اظهره كما هو اذا سيظهر كما هو

لكن ان اردت ان اقلل رقم من فسوف اقلل رقم الاخير

اذا فسيكون شكله كالتالى

4.9188

التالى

4.919

التالى

4.9

التالى

5

انتهينا

من المؤكد انها واضحة جدا.

حسنا فنرى المثال الان:

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
double quotient, number1 = 132.364, number2 = 26.91;

quotient = number1 / number2;
cout << quotient << endl;
cout << setprecision(5) << quotient << endl;
cout << setprecision(4) << quotient << endl;
cout << setprecision(3) << quotient << endl;
cout << setprecision(2) << quotient << endl;
cout << setprecision(1) << quotient << endl;
return 0;
}

المخرجات هى :

4.91877

4.9188

4.919

4.92

4.9

5

الأن فلندخل للشرح :

اول متغير يظهر لنا ظهر بطبيعته لأننا اردناه هكذا و لم نضع ال setprecision

و من ثم نضع ال setprecision و نبدء بالتدريج كما اوضحنا من قبل

اظن انه واضح .

فى ما بعد سوف نرى كيف التحكم فى الرقم الذى بعد ال decimal point فقط.

لو كان المتغير رقمه اقل من رقم ال setprecision سيظهر كاملا .

الجدول القادم يشرح كيف تعمل ال setprecision

اقتباس

الرقم --------------------------------------------- الكمية التى نضعها --------------------------- الرقم المرئى

28.92786 setprecision(3) 28.9

21 setprecision(5) 21

109.5 setprecision(4) 109.5

34.78596 setprecision(2) 35

اتمنى انها تكون وصلت يارب

ايضا نفس المكتبة يجب استخدامها

iomanip

المثال القادم يشرحلنا كيف دمح setw + setprecision و سوف يقوم المستخدم بأدخال الارقام التى يريديها:

#include <iostream>
 #include <iomanip>
using namespace std;

int main()
{
double day1, day2, day3, total;
cout << "Enter the sales for day 1: ";
 cin >> day1;
 cout << "Enter the sales for day 2: ";
 cin >> day2;
 cout << "Enter the sales for day 3: ";
 cin >> day3;

 total = day1 + day2 + day3;

 cout << "\nSales Figures\n";
 cout << "-------------\n";
 cout << setprecision(5);
 cout << "Day 1: " << setw(8) << day1 << endl;
 cout << "Day 2: " << setw(8) << day2 << endl;
 cout << "Day 3: " << setw(8) << day3 << endl;
 cout << "Total: " << setw(8) << total << endl;
 return 0;
}

حسنا المخرجات ستكون كالتالى :

Enter the sales for day 1: 321.57[Enter]

Enter the sales for day 2: 269.62[Enter]

Enter the sales for day 3: 307.77[Enter]

Sales Figures

-------------

Day 1: 321.57

Day 2: 269.62

Day 3: 307.77

Total: 898.96

حسنا اظنها واضحة و لا تحتاج الى شرح

انتهى الان شرح ال setprecision .

فى المشاركة القادمة سوف اشرح بأذن الله fixed و سوف تعرفون عنها فى المشاركة القادمة بأذن الله.

بسم الله الرحمن الرحيم

درسنا الأن عن ال fixed

ما هى ال fixed

اذا كان الرقم كبير جدا ليظهر مع ال setprecision فقط او ان يضعه فى هيئة e+ و الكل يعرفها.

حسنا سأعطى مثالا الأن

Enter the sales for day 1: 145678.99[Enter]

Enter the sales for day 2: 205614.85[Enter]

Enter the sales for day 3: 198645.22[Enter]

Sales Figures

-------------

Day 1: 1.4568e+005

Day 2: 2.0561e+005

Day 3: 1.9865e+005

Total: 5.4994e+005

لكى نتفادى هذا يجسوف نستخدم ال fixed

عندما يندمج ال fixed مع ال setprecision يعطون شيئا اخر فهم يقللون من الرقم الذى يأتى خلف ال decimal point فقط وليس الرقم بأكمله

هذا ما نريده و حتى من الممكن استخدام ال setw معهم ايضا :

amount1 = 125.00 * .075; // amount1 is set to 9.375
amount2 = 125.00 * .06; // amount2 is set to 7.5
cout << setprecision(4);
cout << setw(5) << amount1 << endl;
cout << setw(5) << amount2 << endl;

المخرجات ستكون بالشكل التالى :

9.375

7.5

لكن بستخدام ال fixed + setprecision سوف نقدر على حل هذا الشكل الردئ نوعا ما.

تذكر فسوف نستخد فى ال setprecision(2) فالأن لن نتحكم بالاعداد كاملة بل سوف نتحكم بال decimal point فقط

اذا المثال القادم يوضح لنا

cout << fixed << setprecision(2);
cout << setw(5) << amount1 << endl;
cout << setw(5) << amount2 << endl;

الناتج سوف يكون كالتالى :

9.38

7.50

اعتقد انها سهلة و لن نسبح بها اكثر من ذلك.

انتهينا الأن من ال fixed

سأشرح فى المشاركة القادمة بأذن الله ال showpoint تعرفون عنها اكثر فى المشاركة القادمة بأذن الله.

1

.Everyone has a dream

.I never thought that I would be the one I am on now

...No Pain No Gain

مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...

تعديل: مشرف قسم السى/سى++ من 2012.

#3

بسم الله الرحمن الرحيم و به نستعين

درسنا الأن عن ال showpoint

ما هى ال showpoint

هى اداة تعرض دائما ال decimal point حتى لو كان العدد ليس به decimal point و هذا مفيد جدا.

سوف نستخدم كل الادوات التى تعرفنا عليها منذ قليل setw + setprecision + fixed + showpoint .

#include <iostream>
#include <iomanip> // Needed to use stream manipulators
using namespace std;
int main()
{
double amount1 = 125.00 * .075; // amount1 is set to 9.375
double amount2 = 125.00 * .06; // amount2 is set to 7.5
double amount3 = 125.00 * .20; // amount3 is set to 25.0

 cout << fixed << showpoint << setprecision(2);
cout << setw(5) << amount1 << endl;
cout << setw(5) << amount2 << endl;
cout << setw(5) << amount3 << endl;

return 0;
 }

المخرجات هى :

9.38

7.50

25.00

اذا هنا تحكمنا فى خروج decimal points لكل الاعداد حتى التى لا تمتلك اى decimal point فقط للمنظر الجمالى

انتهيت الأن من درس ال showpoint

يتبقى درساُ واحد فقط و هو ال right و ال left .

ترونه فى المشاركة القادمة بأذن الله.

بسم الله الرحمن الرحيم

هذا الدرس يشرح لنا ال right & left

ما هو ال right & left

حسنا كل الامثلة السابقة كانت تضع الارقام على اليمين و هذا يضايق اى شخص اذا الحل هنا.

انتا تريد انم يظهر المثال من ال left اذا فسوف اريك كيف هذا مع ال fixed+showpoint+setprecision . لأننى اريد ان اجعلك تتحكم بها بأذن الله

#include <iostream>
#include <iomanip> // Needed to use stream manipulators
#include <string>
using namespace std;

int main()
{
string month1 = "January",
month2 = "February",
month3 = "March";
int days1 = 31,
days2 = 28,
days3 = 31;

double high1 = 22.6,
high2 = 37.4,
high3 = 53.9;

cout << fixed << showpoint << setprecision(1);
cout << "Month Days High\n";

cout << left << setw(12) << month1
 << right << setw(4) << days1 << setw(9) << high1 << endl;
cout << left << setw(12) << month2
 << right << setw(4) << days2 << setw(9) << high2 << endl;
 cout << left << setw(12) << month3
 << right << setw(4) << days3 << setw(9) << high3 << endl;

 return 0;
}

المخرجات :

Month Days High

January 31 22.6

February 28 37.4

March 31 53.9

اظن انها واضحة وضوح الشمس.

حسنا الجدول التالى يريكم ما درسناه و ما هو عملهم

اقتباس

الدالة --------------------------------- استخدامها ----------------------------------------------------------------

setw(n) تضع المساحة المحددة من المسافات الترى تريد استخدامها

fixed هى + setprecision تجعلنا نتحكم بالارقام بعد الديسيمال بوينت

showpoint تضع لنا ال ديسيمال بوينت مهما كان الرقم لا يوجد به اى ديسيمال بوينت

setprecision(n) تقرب لنا الارقام على حسب الفراغات المطلوبة

left تجل الظهور من اليسار ( يفضل استخدامه)

right تجعل الظهور من اليمين

الى هنا انتهينا و الحمدلله

بالتوفيق يارب.

حسنا احبائى فى الله اتمنى ان اكون وفقت فى ما قدمت اليكم و الحمدلله

اتمنى منكم فقط الدعاء لى بالتوفيق و الهداية بأذن الله.

ان وقف امامكم شيئا ما لا تترددوا بالسؤال .

و السلام عليكم و رحمة الله و بركاته.

ممنوع منعا باتا نقل هذا الدرس الا ان تم استأذان العضو و الادارة و ذكر المصدر

1

.Everyone has a dream

.I never thought that I would be the one I am on now

...No Pain No Gain

مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...

تعديل: مشرف قسم السى/سى++ من 2012.

#4

ما شاء الله يا أحمد ... إيه الجمال ده .. ربنا يزيدك يا أخي إن شاء الله و يهديلك نفسك ..

جاري قراءة الدرس الرائع ..

#5

ما شاء الله يا احمد

شرح رائع......

00020309t.gif

1958_1963.gif
#6

السلام عليكم و رحمة الله و بركاته

بداية قوية يا ماستر :)

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

"لا تتوقف .. إلى الأمام دائما .. نحن معك"

ننتظر المزيد من دروسك الرائعة و شرحك الأروع .. لا تحرمنا من جديدك :wink:

=============

كيفك يا أستاذ هويدي و كيفك إسراء !, أقصد نفرتاري !! :)

تحياتي للجميع.

+1 لكل مشاركة من مشاركاتك الأخيرة :), تتسحق أكثر :cool:

#7

إزيك يابو حميد ... إيه أخبارك ... عاوزين نشوفك معانا على طول ..

#8
اقتباس
إزيك يابو حميد ... إيه أخبارك ... عاوزين نشوفك معانا على طول ..

تمام و الحمد لله, انتهيت من برمجة مشروعين وبقي 3 ثلاثة مشاريع قيد البرمجة :)

نفسي ألقاك ع الماسنجر إذا أمكن (ستجد إيميلي في صفحتي الشخصية و بالتحديد في "معلوماتي")

تحياتي العطرة :wub:

#9

اهلا شباب طيب الحمدلله انى وفقت فى تقديم هذا الشرح

اصبروا بقى علشان انا تعبت ادام شوية هعمل دروس اخرى بأذن الله :)

شكرا.

.Everyone has a dream

.I never thought that I would be the one I am on now

...No Pain No Gain

مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...

تعديل: مشرف قسم السى/سى++ من 2012.

#10

الله يعينك اخى احمد المتألق

بدون مبالغة...احب وجودك فى المنتدى جداااا و الاخ حمزة كمان

00020309t.gif

1958_1963.gif
#11

* تم حذف المشاركات غير الضرورية المتداخلة بين الدروس.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#12

شكرا استاذ Xacker

.Everyone has a dream

.I never thought that I would be the one I am on now

...No Pain No Gain

مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...

تعديل: مشرف قسم السى/سى++ من 2012.

#13

ايه الحلاوه دى يا احمد باشا

ربنا يوفققك يارب

درس جميل الى الامام :)

Software Developer
Mahmoudkelany.com


 

#14

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

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#15

افضل ان يكون الدرس قصيرا على ان ارى الترتيب ليس بالشكل الجمالى ما رئيك ؟؟؟؟

.Everyone has a dream

.I never thought that I would be the one I am on now

...No Pain No Gain

مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...

تعديل: مشرف قسم السى/سى++ من 2012.

#16

الى الأمـاام بارك الله فيييك ..~

مواضيع مشابهة