بسم الله الرحمن الرحيم و الصلاة و السلام على اخير الانبياء سيدنا محمد صلى الله عليه و سلم
ملاحظة : سيتم وضع بعض الدروس البسيطة + درس read/write file يوم الاربعاء مع الامثلة و الاسئلة و الاختبارات البرمجية بأذن الله لضيق الوقت.
الكائن cin
الملخص : الكائن cin يُستخدم لقراءة البيانات من الكيبورد.
طول الفترة الماضية قمنا بكتابة برامج ببيانات ثابتة.منغير منعطى للمستخدم ادخال بيانته الخاصة, قمنا بتثبيت نتائج للمتغيرات. هذه الانواع من البرامج محدودة الامكانيات لأنها لا تعمل مع معطيات مفتوحة اى اننا عندما نريد عمل الة حاسبة لن نقوم بادخال المتغيرات كل مرة داخل السورس كود هذا لن ينفع .
فى الواقع, اغلبية البرامج تطلُب من المستخدم ادخال الارقام المراد استعمالها فى المتغيرات. هذا يعنى اننا لن نقوم بتغيير اعدادات السورس كود كل مرة.
ببساطة بما ان ال cout هى الكائن الخاص بالطباعة على الscreen فال cin هى الخاصة بالكتابة من على الكيبورد
// This program asks the user to enter the length and width of
// a rectangle. It calculates the rectangle's area and displays
// the value on the screen.
#include <iostream>
using namespace std;
int main()
{
int length, width, area;
cout << "This program calculates the area of a ";
cout << "rectangle.\n";
cout << "What is the length of the rectangle? ";
cin >> length;
cout << "What is the width of the rectangle? ";
cin >> width;
area = length * width;
cout << "The area of the rectangle is " << area << ".\n";
system("pause");
return 0;
}المخرجات :
This program calculates the area of a rectangle.
What is the length of the rectangle? 10[Enter]
What is the width of the rectangle? 20[Enter]
The area of the rectangle is 200.
بدل ان نقوم بمعرفة المساحة الخاصة بمستطيل واحد, هذا البرنامج يستطيع معرفة مساحة اى مستطيل. الارقام التى تم تخزينها داخل المتغيرات length و width ادخلت بواسطة المستخدم اثناء عمل البرنامج
cout << "What is the length of the rectangle? "; cin >> length;
فى هذان السطران و بالتحديد الصطر الاول الكائن cout بطباعة
اقتباسWhat is the length of the rectangle?
السطر التالى له
cin >> length;
يقوم باستقبال البيانات من الكيبورد
العلامة
>>
تأتى هنا تمام مثل cout لكن بأختلاف الجهة فقط , هذه العلامة تشير الى ان ال cin سوف تضع شئ ما فى المتغير التالى له
فى هذا السطر الكائن cin وضع شيئا ما فى المتغير length .
ببساطة الخطوات التالية هى الخطوات الاساسية فى استقبال مدخلات للبرنامج الخاص بك
1 – استخدام الكائن cout لكى تعرض السؤال على الشاشة
2 – استخدام الكائن cin لأستقبال المدخلات من الكيبورد
السؤال الذى تطبعه على الشاشة يجب ان يدُل على شئ المثال التالى يوضح ذلك
اقتباسWhat is the length of the rectangle?
سألنا هنا عن طول المسطتيل لكى يعرف القارئ ان يدخل طول المسطتيل,عند اذ يقوم المستخدم بأدخال الطول الخاص بالمستطيل. (لاحظ نحن نتكلم عن الطول فقط)
حسنا لاحظ التالى فى جملة ال cout تكون السهم هكذا
<<
و لاحظ المعنى. المعنى هنا انها تعُطى شئ اى انها تعطى النص الى الشاشة
بعكس ال cin و السهم هكذا
>>
و معناها انها تأخذ شئ , هنا تأخذ مننا نحن المدخلات :D.
الكائن cin يسبب الى انتظار البرنامج حتى يتم ادخال البيانات من الكيبودرة و يتم ضغط الزر [Enter].
لن يعمل اى سطر فى البرنامج قبل ان يتم ادخال البيانات المطلوبة ب cin .
الكائن cin يقوم تلقائيا بتحويل البيانات المأخوذة من المستخدم من الكيبورد الى بيانات تخزن فى المتغيرات .
مثال : لو اليوزر ادهل 10 , ستقرأ كحروف '1' و '0' لأنك ادخلتهم من الكيبورد لكن ال cin ذكية كفاية لمعرفة ان هذا الرقم سيدخل الى int قبل ان يتم تخزينها فى المتغير length. ال cin ايضا ذكية كفاية لمعرفة ان الرقم 10.7 ليس له القدرة على ان يتم وضعه داخل متغير int لو المستخدم ادخل رقم floating point داخل متغير int فسوف تلقائيا يقوم بقراءة فقط الجزء قبل الكسر.
ملاحظة : يجب عليك استخدام مكتبة iostream لأستخدام هذا الكائن (cin)
ملاحظة : اختصار كلمة cin هو "see in" و اختصار كلمة cout هى "see out"
ادخال اعداد مزدوجة
الكائن cin ربما يستخدم لأدخال اكثر من ناتج فى نفس السطر
سوف نستخدم المثال السابق مع تغيير بسيط و هو
ادخال ال length و ال width فى سطر واحد
سيتم ادخال ال length اولا ثم ال width
المثال:
// This program asks the user to enter the length and width
// a rectangle. It calculates the rectangle's area and displays
// the value on the screen.
#include <iostream>
using namespace std;
int main()
{
int length, width, area;
cout << "This program calculates the area of a ";
cout << "rectangle.\n";
cout << "Enter the length and width of the rectangle ";
cout << "separated by a space.\n";
cin >> length >> width;
area = length * width;
cout << "The area of the rectangle is " << area << endl;
system("pause");
return 0;
}المخرجات
اقتباسThis program calculates the area of a rectangle.
Enter the length and width of the rectangle separated by a space.
10 20[Enter]
The area of the rectangle is 200
فى مخرجات هذا المثال , المستخدم ادخل 10 و 20 اذا ال 10 تم ادخالها ل length و ال 20 لل width.
لاحظ ان المستخدم ابعد الارقام عن بعض بأستخدام الفراغات,هكذا كيف يعرف الكائن cin اين يبدء المتغير التالى.
لا يفرق كم هى عدد الفراغات .
مثال .... من الممكن استخاد الفراغات التالية :
10 20
الكائن cin ايضا يقدرعلى قراءة اكثر من متغير فى سطر واحد فى اكثر من شكل مثال :
// This program demonstrates how cin can read multiple values
// of different data types.
#include <iostream>
using namespace std;
int main()
{
int whole;
double fractional;
char letter;
cout << "Enter an integer, a double, and a character: ";
cin >> whole >> fractional >> letter;
cout << "whole: " << whole << endl;
cout << "fractional: " << fractional << endl;
cout << "letter: " << letter << endl;
system("pause");
return 0;
}المخرجات:
اقتباسEnter an integer, a double, and a character: 4 5.7 b[Enter]
whole: 4
fractional: 5.7
letter: b
كما رئيت فى المثال المدخلات وُضعت تمام كما اردنا فى اماكن متغيراتها لكن ماذا يحدث لو لم ندخلها مثل الترتيب الماضى, مثال:
اقتباسEnter an integer, a double, and a character: 5.7 4 b[Enter]
whole: 5
fractional: 0.7
letter: 4
عندا يكتب المستخدم الارقام التى يريدها هذه الارقام اولا يتم تخزينها فى مساحة ذ اكرة اسمها keyboard buffer.
اذا,عندما يدهل المستخدم 5.7, 4, b يتم تخزينهم فى ال keyboard buffer .
عندما يتم ضغط على Enter الكائن cin يُدخل رقم 5 الى المتغير whole لأنه لا يأخذ كسور.ثم يأخذ ال .7 و يقوم بتخزينها فى المتغيير fractional. المسافة بينهم و بين الرقم التالى (4) يتم تفاديها ثم يتم أخذ الر قم 4 و وضعه فى ال char (راجع شابتر 2) لأننا هنا نأخذ فقط 3 متغيرات فأن ال b يتم وضعه فى ال keyboard buffer . فى هذه الحالة سيتم وضع ال 5 داخل ال whole و من ثم يخزن ال .7 الى fractional و الحرف '4' داخل letter.
من المهم ان يتم ادخال المتغيرات فى نفس الترتيب
ادخال النصوص
الكائن cin يقدر على قرائة النصوص و تخزينها داخل الذاكرة ك نص بطريقة لغة ال C . C-Strings عبارة عن مصفوفة من ال character. فى هذا الفصل سوف نأخذ بعض الاساسيات فى المصفوفات.
المصفوفة هى مثل مجموعة من المتغيرات بنفس الاسم, تخزن مع بعضها البعض فى الذاكرة .
هذا مثال لمصفوفة ال char :
char company[12]
الرقم داخل القوس هو رقم مساحة المصفوفة. الاسم الخاص للمصفوفة هو company, و هى كافية كفاية لكى تحمل12 حرف.
تذكر, مهما حدث ان ال C-strings يوجد بها ال null terminator التى تحدثنا عنها فى شابتر 2 اذا فأنها كافية فقط لحمل 11 حرف لأنه يوجد حرف دائم لل null terminator
ملاحظة:لو مصفوفة ال char مصنوعة لحمل النصوص يجب عليك ان تقوم بعمل مساحة اضافية للمصفوفة لكى تحمل ال null terminator .
البرنامج التالى يوضح كيفية ادخال النصوص
//This program demonstrates how cin can read a string into
//a character array.
#include <iostream>
using namespace std;
int main()
{
char name[21]
cout << "What is your name? ";
cin >> name;
cout << "Good morning " << name << endl;
system("pause");
return 0;
}المخرجات :
اقتباسWhat is your name? Charlie[Enter]
Good morning Charlie
هيا لشرح طريقة عمل المصفوفة:
قمنا بعمل
char name[21]
الاسم الخاص بالمصفوفة هو name و هى كافية كفاية لحتواء 21 حرف. لكن تذكر ال null terminator تأخذ 1 بايت اذا فالحجم الواقعى هو 20.
تحذير : لو ادخل المستخدم نص اكبر من مساحة المصفوفة فأن البرنامج سوف يخرج نتائج غريبة و يقوم بتدمير البرنامج كاملا.
لاحظ اننا عندما قمنا بأدخال النص فقد قمنا بالتالى فى الكود:
cin >> name; cout << "Good morning " << name << endl;
عندما تقوم بادخال مصفوفة من النصوص , نستخدم اسم المصفوفة فقط و ليس المصفوفة + الرقم الجانبى للمصفوفة
cin >> name[21]; cout << "Good morning " << name[21] << endl;
هذا المثال لن يعمل كما قولنا سابقا
المثال تالى يوضح اكثر من مصفوفة لل char فى برنامج واحد
//This program reads two strings into two character arrays.
#include <iostream>
using namespace std;
int main()
{
char first[16], last[16];
cout << "Enter your first and last names and i will\n";
cout << "reverse them>\n":
cin >> first >> last;
cout << last << ", " << first << endl;
system("pause");
return 0;
}المخرجات :
اقتباسEnter your first and last names and I will
Reverse them.
Johnny Jones[Enter]
Jones, Johnny
المصفوفاتين الخاصة ب first و last كبيرة كفاية لكى تحمل 15 حرف نصى. فى السطر :
cin >> first >> last;
الكائن cin قراء كل مصفوفة على حدى.
ملاحظة : لو تريد ادخال نصوص تحتوى على مسافات فهذا لن يحدث بأستخدام طريقة الادخال ماضية. لاحقا فى هذا الفصل سوف نتعلم ذلك.
فى المشاركة القادمة سوف نتحدث عن التعبيرات الرياضية فى البرمجة
هذا السؤال يدعوا موجه, اى انه يسأل المستخدم بأدخال البيانات التى يحتاجها. يجب على البرامج ايا كان ان يعرض الموجه (الجملة النصية) قبل ادخال ال cin . هى ليست قاعدة لكنها لكى تُعرف المستخدم ان هنا ستقوم بأدخال بياناتك بأستخدام الكيبورد.ملاحظة : الزر Enter يَضغط عليه بعد اخر رقم قد كُتب