طيب اليوم إن شاء الله بدنا نكمل على موضوع ال
variables اللي أخذناه المحاضرة الماضية ونشوف بعض
الأمور الجديدة يعني المحاضرة الماضية أهم الأمور
اللي اتكلمنا فيها إيش بده يحصل لو أنا أتعامل في
نفس الـ statement مع data types من أنواع مختلفة يعني
مثلا شفنا لو أنا عندي float و integer هل بنفع احط
integer في float؟ هل بنفع احط float في double؟ هل
بنفع احط double في integer؟ هذا الكلام اللي
اتكلمنا فيه صح ولا لأ؟ وقلنا الخلاصة أنه أنا لما
يكون عندي الـ data من الـ type الصغير بنفع احطها في
الـ data من الـ type الكبير لكن العكس مباشرة لأ صح؟
وبعدين قلنا لما أعمل أي عملية حسابية ما بين رقمين
من نوعين مختلفين بتم تحويل اللي من النوع الصغير مش
الصغير اللي من النوع الصغير للنوع الكبير يعني
مثلا بعمل عملية حسابية ما بين double و integer جمع
أو طرح أو ضرب أو قسمة لـ double و integer الـ
integer هيصير double وبعدين بيعمل عملية الحسابية
فناتج بكون double طيب لأن بناء على الكلام هذا لو
أنا قلت
قد إيش يا جماعة قيمة الـ X هنا؟ تلاتة، ليش؟ لأن سبعة
integer على اتنين integer هيطلع integer، تمام؟
الكمبيوتر بيشيله في الـ integer، فبيطلع الناتج تلاتة
طيب،
لو أنا قلت زي هيك، أول حاجة .. أول
حاجة العبارة هذه اللي هنا، صح ولا خطأ؟ double X
يساوي سبعة على اتنين طب إيش الناتج؟ تلاتة ونص؟ مين
بيقول تلاتة ونص؟ طيب تعالى نشوف الناتج اعمل run
هاي الناتج تلاتة فاصلة صفر واحد بيقول ليش ما حفظش
على الأكثر؟ قولنا يا جماعة القاعدة تبهوا معايا
القاعدة إن أنت دائما اعمل على اليمين والناتج إيش ما
يطلع يحطه في الشمال يعني في الأول هو عنده سبعة و
اتنين integer على integer الناتج هيطلع integer قد إيش
الناتج هيطلع من سبعة على اتنين تلاتة لسه ما علي
علاقة باللي موجود على اليمين ما عليش علاقة بال
double ولا أنت ولا فيه ما عليش علاقة فيه سبعة على
اتنين طلع تلاتة integer الآن بدي أحط تلاتة integer
في الـ X الآن integer من فهنحطه في double بنفع مش
هيقولنا الطنجرة الصغيرة بتيجي في الطنجرة الكبيرة
بنفع ما فيش أي مشكلة تمام بس لما يحطه حط جنبه صفر
تمام هذه ما لهاش قيمة طبعا الصفر فنتيجة طلع طلع
تلاتة طب واحد بيقول أنا بده يحفظ على الأكثر كيف
تمام عشان اتحافظ على الأكثر لازم أحد الرقمين اللي
بتعمل فيهم العملية الحسابية على الأقل يكون double
أو float صح يعني لو أجيت على السبعة مثلا كتبت
جنبها F أو D صح أو point zero خلاص هيك أنت حفظت على
الأكثر هذه الناتج طالع تلاتة ونص طبعا بنفع أحط هنا
integer بنفعش ليش عشان الضوء أحمر اه ليش لأنه صار
double بنفعش نحطه في integer طيب يا جماعة هذا اللي
احنا اتفقنا عليه المحاضرة الماضية إن القيمة أو
الـ data type الصغير بنفع نحطه في الـ data type
الكبير لكن شيء زي هيك
integer x يساوي 3.5 هذا خطأ لأن double في integer
هل نستطيع غصبًا أن نضع double في integer في حالات
معينة أخرى مباشرة بكدرش أضعها مستحيل لكن احنا قلنا
في النظرية التنجلة اللي حكيناها إنه ممكن التنجلة
الكبيرة تحطها في التنجلة الصغيرة بشرط إيش تدجدجها
وتخبطها وتكسرها لحد ما تقدر تحطها في التنجلة
الصغيرة فهل بنقدر نعمل الدجدج هدف بالبرامج؟ اه
بنقدر نعملها كيف؟ في عملية اسمها casting تمام
casting
الـ casting باختصار شديد هي عملية التحويل تمام من
big data type إلى
small data type بدي
أحول من big data type لـ small data type تمام الآن
مباشرة double في integer بنفعش double في float
بنفعش أيضا صح ولا لأ طب كيف أنا بدي أجبر الـ double
أنه ينحط في الـ float؟ بقوله بتعملها casting إيش
هنا كلمة casting؟ يعني بتيجي جابل الرقم هذا بعد
اليساوي هنا وبتكتب النوع اللي بدك تحوله، تمام؟
يعني هذا double لإيش بدنا نحوله احنا؟ بدنا نحوله
لـ integer، تمام؟ هيك بطل يطلع error هلجيت فعليا إيش
اللي بيصير يا جماعة؟ قولنا القاعدة اللي حكيناها إنه
اعمل اللي على يمينو الناتج بتحطه على الشمال لأن
تلاتة ونص تلاتة ونص بيعملها casting كتابة بين
قوسين جابلها كلمة integer إيش هو بيعملها ضمنيا بيحول
الـ double لـ integer طبعا هذه لها ثمن أنت لما تخبط
في الطنجرة هتكسرها صح ولا لأ التلاتة ونص هذا الـ
double لما تحولها لـ integer هيصير في data loss إيش
هي data loss فقد بيانات إيش البيانات هتنفقد من
غير ما أنا أقول لك إيش التلاتة ونص إيش هيروح منها
لما تحولها لـ integer كل الكسر هيروح يعني فعليا هو
بيروح للتلاتة ونص يحولها لـ integer هتصير تلاتة و
بعدين بيروح بحطها في الـ X هيك أعمل run طبعا لك الـ X بـ
3 أنت بتلزم عملية الـ casting يا جماعة بس لو أنا
بده أحول من النقل الكبير لصغير طب لما يكون عند
صغير لكبير بتلزم عملية الـ casting؟ ما بتلزمش يعني
أنا فعليا لما يكون عندي double X يساوي 3.5 F هذا
بدها double؟ ما بدهاش double هو ضمنيا الـ float هيحوله
لـ Double صح ولا إيه يا جماعة؟ لو رحت أنا كتبت قبله
Double ما هو أنت دائما الـ casting بتحول للنوع
الموجود وين؟ الموجود هنا صح؟ أنا .. هذا إيش عملت
أنا؟ قلت له أحول الـ float لـ Double ما لهاش قيمة ماشي
هو هيحولها لـ Double وهيحطها وين؟ في الـ X لكن
لازمة هي .. لأ أنت بتلزم إنّي أحول لو كانت الجملة
هذه مثلًا مثلًا مثلًا
مثلًا مثلًا
مثلًا مثلًا مثلًا مثلًا مثلًا مثلًا مثلن مثلن مثلن
مثلن مثلن مثلن مثلن مثلن مثلن مثلن مثلن مثلن مثلنو
تعمل float هذه أو هذه نفس النتيجة تمام أنا عندي
double ما نفعش أحطه في float فاضطريت أعمله casting
طبعا هنا في فقط بيانات في الرقم هذا ما فيش لكن لو
كان أكثر في أرقام عشرية كبيرة ممكن جزء منها يروح
لما تحوله لـ float واضح يا جماعة عملت الـ casting
تمام
الأول مثلًا طيب إيش نتيجة الـ result؟
نتيجة الـ result تسعة لماذا؟ لأنه فعليا هيجيب تلاتة
ونص وهي double هيجمعها مع ستة طلع تسعة ونص صح
ولا؟ وبعدين حولتها لـ integer وحطيتها في الـ double
هيك الكسر مالو هيروح الـ result كانت تسعة لو حطيت
هنا integer برضه صح الفكرة إن الرقم هذا بدون
casting هي الفكرة هيك بدون casting زي
هيك لو بدون casting هيطلع error ليش لأن هذا double
صح ولا يا جماعة وهذا integer integer زي الـ double
هييطلع الـ double تمانية ونص صح ولا تمانية ونص
ما نفعش يحطها في الـ result فالحل هذه إنك تيجي قبل
النتيجة تحط هنا int تمام وحط قوسين هنا عشان تضمن
إيش إن النتيجة كلها يطبق عليها الـ integer هذا
عملية الـ casting يعني لما تتحول بسم كبير لنظرية
طيب مفهوم النقطة هذه يا جماعة مفهوم اللي بيلزم الـ
casting طيب خلينا الآن ننتقل لنقطة ثانية الآن
الطباعة لاحظ الآن لما كنت أفرجك أمثلة كنت عامل
جملة طباعة صح ولا اللي هي system dot out dot
println
بكتب كلمة system طبعا هذه لها تفسير إيش هي الـ
system بس حاليا أنت مش هتفهمها هذه بيسموها class
في ال java تمام هنتطرق لها هتفهمها قدام شوي بس
حاليا احنا بناخدها زيك احفظها زي ما هي ماشي فو
لاحظ أن ال system هذه هتلزمنَا في الطباعة و الإدخال
يعني أنا لما آجي أقرأ بيانات من المستخدم هتلزمني
من ال system طيب لما أنا بدي أعمل in ولا out لما
أطبع على الشاشة أنا بعمل out فعليا تمام فهو بيروح بيقوله
ايش dot dot out ايش بدك تعمل في ال out بدي أقوله
في عندي قمر اسمه print تمام في قمر اسمه print قوسين
زي هيك system dot out dot print و بفتح قوسين لأن هو
طلع لي خطأ ليش طلع لي خطأ لأنه بيقول لي أنت بدك تعمل
print لكن ما حددتيش ايش الحاجة اللي بدك تعملها
print الحاجة اللي بتعملها print لازم تنحط ما بين
قوسين يعني أنا لو بدي أطبع أي حاجة يا جماعة بقول
system.out.print وفتح قوسين زي هي هنا بدك تحط
الحاجة اللي بدك تطبعها مثلا أنا كان عندي integer x
يساوي خمسة بدي أطبع ال x باجي هنا بكتب بين القوسين
x
هذه طباعة ليه؟ طباعة لخمسة وبعدين كتب لي كلمة build
successful ايش يعني build successful؟ يعني بناء
تطبيق تم بناءه لأن في أمر .. أمر ثاني اسمه print
ln .. ln تمام؟ هذا ايش بتعمل؟ بتطبع و بنزل
مسافة، بنزل عفوا سطر جديد تمام؟ على أساس .. هذه
كويسة على أساس أن القيمة اللي بتدور عليها تكون
لحالها في سطرها الآن لو عملت run لهذه هتلاقي
طبعها الخمسة ونزل ايش سطر جديد فهذا بتطلع أفضل
للقراءة بشكل أفضل يبقى أنت داخل ال println لازم
تحط قيمة ممكن القيمة تكون variable ممكن القيمة
تكون رقم مباشرة يعني مثلا هذه 88 ممكن
تكون عملية حسابية كيف؟ يعني أنا قلت له 8 زائد 3 ما
هيعمل في الحالة هذه؟ هيعمل العملية الحسابية و
بعدين يطبع لي النتيجة هي
طبع لي النتيجة 11 طبعا أنت لما يكون عندك عملية
حسابية عندك خياران أنت يا إما تحط العملية الحسابية
في ال println يا إما ايش تعمل أنك تروح تعمل
العملية الحسابية وتحطها وين في متغير يعني أنا هنا
عملت integer X حطيت فيه مجموع ثمانية وثلاثة بعدين
بقول أطبع له ال X طبعا
يعني ايش ميزة هيك؟ أنه لأن عملية نتيجة عملية الجمع
موجودة في ال X بقدر بعدين أروح أستخدم ال X
استخدامها ثاني طبعا لكن أنت لما تحط ثمانية زي
الثلاثة نتيجة الجمع ما حفظتهاش يعني أنت لما تحط
ثمانية زي الثلاثة خليته يجمع ويطبع لك النتيجة على
طول لكن افرض أن نتيجة الجمع بدي أروح أعمل عليها عمليات
ثانية حسابية ففي الحالة هذه ممكن نستخدم متغير تمام
هنا ممكن يكون في عندك أي عملية حسابية تمام ضرب
مثلا ممكن
كمان ال println تطبع فيها نصوص كيف طبعت النصوص؟
النص احنا عشان نطبع أي جملة بدك تحط double
quotation مش single quotation single quotation لل
characters تمام ده ال car لكن لما تطبع جمل بدك تحط
double quotations دلوقت أنا حطيت جملة هنا بسمعها
الجملة فاضي صح ولا هي في عندي double quotation و
بعده على طول double quotation هو سكت يعني رضي فيها
باعتبرها جملة ايش فاضي تمام بس هي جملة طيب هاي run
طبعا شيء فاضي هيك لأن ممكن هنا تكتب مثلا hello لأن
ممكن كمان تجمع ما بين نصوص و variables مثلا لو أنا
قلت integer result يساوي خمسة لأن بدي أطبع جملة على
الشاشة أنا بدي أطبع النتيجة بدي أقول للمستخدم زي
هيك بدي أقول له result يساوي
القيمة اللي أو هاد يسميها x عشان ما تلخبطوش من ال
variable والقيمة اللي بأطبعها x خمسة تمام بدي
أطبع له result يساوي وقيمة ال x طبعا؟ يعني بدي أخل
الناتج يطبع زي هيك result يساوي خمسة الآن الجملة
هذه فيها قسمين فيها قسم نص ثابت اللي هو ايش result
يساوي وفيها قيمة المتغيرة بدي أطبعها فالآن أول
حاجة بدك تجي تعمل بدك تحط نص تكتب result يساوي
بعمل مسافة زي هيك الآن بنفع أعمل زي هيك؟ لأ هذه غلط
لإيش؟ لأنه هيعتبر ال X نص بتطبعه زي ما هو أنا بدي
أطبع قيمة ال X تمام، ايش بعملها؟ باجي هيك لأ لحظة
شوية بعدين بعمل زائد لإيش تستخدم الزائد؟ للربط
يعني أنا بدي أطبع جملة وأضيف عليها حاجة ثانية
تمام؟ وهنا تحط ال X يعني ايش هنا ايش هيعمل؟ هيطبع
الجملة هذه وبعدين أضيف عليها قيمة مين ال X اه
بعد بعد يساوي أنا عامل مسافة هنا بعد المسافة بحط
ايش قيمة ال X تمام
هاي طبعا result زائد خمسة وممكن كمان مثلا أعدل
الجملة أقول ال result يساوي خمسة meters خمس أمتار
خمس
أمتار
خمس أمتار خمس أمتار خمس أمتار خمس أمتار خمس أمتار
ماشي يا جماعة ده بتعرف كيف بتطبع ال .. البيانات
ورا بعض طبعا بدك تنتبه في حاجة صغيرة بس لازم أنوه لها
يعني مثلا أفرض كان عندي أنا هنا خمسة زائد
أربعة ايش رأيكم ايش النتيجة اللي هيطبعها هل
هيطبع لي result يساوي تسعة ولا هيطبع لي result يساوي
خمسة زائد أربعة ولا result تساوي تسعة مش هي
احتمالات ممكنة أو لا يا جماعة تعال نشوف أعمل run
result تساوي أربعة وخمسين طبعا ليش عمل زي هيك
ليش عمل زي هيك؟ هالجيت يا جماعة ال compiler بيفهمش
كثير، تمام؟ الآن أنا بدأت معه بإيش؟ بنص، مش في
عندي نص هنا، result يساوي، بعدين لما أقول له زائد
على طول هو بيطلعش كثير اللي قدامه، تمام؟ بيقول خلاص،
مادام في خمسة بعدها أربطها في النص، يبقى الخمسة
هتتحول لإيش؟ لنص تمام فصارت result يساوي خمسة و
بعدين لآجي وراها أربعة برضه يحولها لنص ف result
يساوي خمسة أربعة تمام رابطهم كلهم حولهم لنصوص مادام
أنت بدأت بنص شبك كل حاجة وراه بيصير يحولها لنص طب
واحد بيقول طب أنا بدي يطلع لي يجمع الأربعة زيادة
خمسة تمام بالضبط الأولوية ده ماللي ايش الاقواس حط
هيك هيك أنت أجبرته أنه يجمع الخمسة زيادة أربعة
بعدين يضيفها لل result تمام أعمل طباعة زي هيك الآن
هيو result يساوي تسعة تمام أيوة
تمام اه اسمكم بيقول طب ما أنت حطها جوا هيك كيف؟
هيك بدك يطبع لك إياها اه هيك بتطبعها حطها جوا ال
quotation بس أنا بدي أفرجيك ايش بيحصل لو كان في
عملية حسابية ما هو أنت .. يعني ممكن تكون عشان ما
تلخبطوش متغيرات integer x y و 6 زي هيك ف أنا لو
قلت له زي هيك x زائد y أنا متخيل أن هو هيجمعل
الرقمين لكن هو فعليا مش هيجمعهم هيحط 56 إذا أنا
بدي أجمعهم بتحط ايش أقواس عشان تجبره يعمل الجمع أو
لاحظ معايا طب افرض أنا بدأت زي هيك x زائد y زائد
meters ايش رأيكم ايش هي النتيجة هنا قولنا ال
compiler الجامعة بيفهمش كثير بيطلع بيطلع خطوة خطوة
الآن هو بدأ في ايش في نص ولا في رقم؟ رقم بعدين يجي
رقم مادام رقمين يجي ورا بعض هيجمعهم شوف كيف الفرق
جبل جبل هو بيطلع على الخطوة اللي هو واقف عندها جبل
كان يبدأ بنص فخلاص بيقول جال بدأت بنص يقول الهيش
مكتفي هيتحول لإيش لنصوص لأن أنا بدأت برقم فمادام في
رقم وراه بأجمعه فهمت؟ وين الفكرة؟ فهين هيجي x زائد
y هيروح يجمعهم هتصير 11 تمام؟ وبعدين يكتب meter
يعني هنا أنت مش محتاج تحط أقواس بس عشان هذه أمور
صغيرة غالبا الواحد بتعلمها مع التجربة تمام؟ بس
أحنا بنقولكوا إياها على أساس إنه لو جربت ما تقولش
ليش مرة عملها هيك و ليش مرة عملها بطريقة ثانية
تمام؟ فهو دائما بيمشي خطوة خطوة إذا بدأت معاه برقم
بيكمل معاك أرقام و بيجمعها دي بدأت معاه بنص هيشبك
الباقي كل نص ماشي يا جماعة طيب
الآن يا جماعة بظل في عندنا خطوة عشان نقدر نعمل
برامج فعلية يعني احنا شوفنا كيف أنت تطبع على
الشاشة شوفنا كيف تعمل عمليات حسابية بظل عندنا خطوة
كيف نعمل إدخال بيانات طبعا لسه مش هناخد إدخال
البيانات الآن يعني على أساس إن مثلا نقول للمستخدم
دخلي مثلا علامات الطالب و البرنامج يشطلع مثلا ال
average يعني إيش الـ average المتوسط مثلا بدنا نعمل
برنامج يحسب مساحة الدائرة طبعا البرنامج بتقوله
دخلي مثلا نصف القطر و هو يقولك إيش مساحة الدائرة
يساوي كذا كذا يعني مثلا مثلا لو بدنا نعمل برنامج
يحسب مساحة الدائرة برنامج مساحة الدائرة إيش المدخل
له و إيش المخرج أنا بكفي أعرف عشان أحسس مساحة
الدائرة نصف القطر يبقى أنا لازم أعرف متغير طبعا
بتحدد double هل هو floating point number ولا رقم
صحيح حسب إذا أنت معنى بالكسور في مساحة الدائرة
خليها double أو float فبنقول مثلا float radius
يساوي مثلا تلاتة أنا الآن حددت أن الـ radius قيمته
تلاتة طبعا بعد هيك يا جماعة هذه القيمة حاليا
مكتوبة وكتابة بس بعد هيك هتيجي من مين؟ من المستخدم
هتيجي من المستخدم و تنحط فيه الـ result لأننا نحسب
مساحة الدائرة عشان تحسب مساحة الدائرة شو بدك تفكر؟
بدك يكون عندك متغير ثاني ليش؟ عشان أنت هتعمل عملية
حسابية و الناتج تحطه في متغير فبنعمل متغير ثاني
float اسمه area بالمناسبة هذا صح float radius يساوي
تلاتة صحيح لأن التلاتة integer حتى في float ما فيش
مشكلة float area مساحة الدائرة إيش هي طاقة نقطة
تربية طاقة مثلا 3.14 ضرب إيش
نصف القطر اللي هو مين لا ما تحطليش تلاتة اكتب إيش
radius ضرب كمان مرة أنت
معايا ولا لأ جماعة تمام حطيت ماشي 3.14 ضرب radius
ضرب radius هذا قانون مساحة الدائرة واحد بيقول ليش
ما حطيت تلاتة لحظة .. لحظة .. ليش .. ليش بكتب
التلاتة؟ أنا الفكرة يا جماعة إن أنا المدخل بغض
النظر هو تلاتة أو أربع أو عشرة هينحط في متغير اسمه
radius و بيصير أعتمد على قيمة المتغير لكن لو حطيته
تلاتة هيصير خلاص دائما يحسب على تلاتة بعد هيك
هنسينا نغير وين في السطر هذا على سبيل المثال بدل
ما نكتبوا تلاتة يجيبوا من مين؟ من الـ keyboard طب
هيك هيحسب نتيجة المساحة ويحط نتيجة في الـ float
area طبعا لسه لحد اللي أنا عندي غلط ليش؟ لأن
الفكرة بالظبط هذا تلاتة فاصلة واحد أربع اعتبره
double طبعا عندي حلين يا بتحط F زي هيك خلاص سكنت،
يا إما إلهم كلهم بتيجي هنا بتقوله float و تعالي
هيك على أساس إيش؟ للجميع، تمام؟ هي .. هيعمل عملية
حسابية و في الآخر هيحولها لـ float، أنت حر، يا هادي
يا هادي، بس أنت عندك نوع كبير، ليش هو أصلا طلع
خطأ؟ لأن عندك نوع كبير، بدك تحطه في نوع صغير صح ولا
يا جماعة النتيجة double و بدأنا نحط في float هذا غلط
فعشان يكبر لازم يكونوا من نفس النوع أو إنك تعمل
casting هيك صاروا من نفس النوع هيك المساحة جاهزة
اللي هنضل علينا نطبع للمستخدم system
.out الآن
هنشوف إيش بدأ يقوله الـ circle with radius
يساوي لحظة لحظة has the area square
meters طب تعال نشوف الجملة دي إيش معناها الجملة دي
مكوّنة من مجموعة أجزاء مربوطة في بعض إيش قلتله أنا
the circle with radius كذا إيش أنا إيش بدي أقوله
بدي أقوله الدائرة اللي محيطها هيك مساحتها هيك هيك
الجملة اللي بتتبعها بتبعاه ولا لأ بدي أقوله
الدائرة اللي محيطها هيك اه عفوا نصف قطرها هيك
مساحتها زي هيك فقلتله the circle with radius هذه
حطيتها جملة ثابتة تمام هي من هنا لهنا و بعدين جمعت
و حطيت إشارة جمع و حطيت قيمة مين الـ radius المتغير
تمام و كملت ليش أنا قاعد بقول في الجملة اللي حكيتها
إن الدائرة اللي نصف قطرها كذا مساحتها كذا أنا طبعت
نصف قطرها بقول بعدين has the area جملة ثانية لاحظ
بعد الـ radius حطيت زائد has the area و بعدين قلتله
زائد و كتبت المتغير الثاني و بعده زاد حط الجملة
square meters إيش يعني square meters متر مربع مثلا
هذه عبارة عن مجموعة حاجات مشموقة في بعض جملة بعدين
متغير بعدين جملة بعدين متغير واضحة تهدي يا شباب
طبعا الفكرة وين إنه لو اتغيرت قيمة المتغيرات هيطبع
الجملة صحيح تمام اعمل run الانهذه النهجة The
circle with radius يساوي 3 has the area 28.26
square meters لسه
هناخد إدخال البيانات لسه ماخدناش إدخال البيانات
احنا افترض إن البيانات مدخلة في الـ code نفسها طيب
يا جماعة خليني الآن نرجع شوية للـ slide طبعا بما إنه
أنا باخد وقت في الشرح العملي للـ slide ما تتوقعش إن
أنا أقرأه بالتفصيل هنمر عليه مرور سريع ماشي لأن
احنا فصلت وين أنا في العمل لو احنا بنفصل هنا هنا
مش هنخلص الموضوع تبعنا لكن الأمور النظرية مهمة لأن
في متغيرات أو مصطلحات لازم يكون واحد عارفها في
الآخر أنت لما تروح لوظيفة و تنسأل غالبا مش هيقولك
اكتب لي code في الوظيفة هيسألك أسئلة نظرية
فالمفاهيم من النظرية المهمة إنك تعرف تعبر تمام؟ طيب
initializing variables إيش هي كلمة initialize؟ هذه
كلمة مهمة تمام؟ ممكن تشوف مرة في .. كلمة initial
معناها أول أو بدائي ممتاز تمام؟ initialize هذه فعل
معناها إنك تعطي قيم مبدئية للمتغيرات
احنا عملنا initializing للـ variables كتير مثلا
أنا لما كنت أقول لك integer X أنت هنا عرفت متغير
هل عملتله initialize؟ لأ initialize إنك تعطيله
القيمة الأولية القيمة يعني لما تنشأه عطيته قيمة
أنت هيا أنا initialize أنا هذا ما عملتلهوش
initialize عشان أعمله initialize لو إجيت هيك قلتله
X يساوي خمسة أنا هنا عملتله initialize هذه معناه
initialize Initialize هي أول قيمة بتعطيها للمتغير
هذه a variable that has been declared تم تعريفه
إعلان عنه تمام but not yet given a value is said
to be uninitialized الـ variable اللي عرفته لكن
ما عطيتوش value لحد الآن بنسميه uninitialized
المفهوم uninitialized عكس غير معطى قيمة
مبدئية هذه معناه uninitialized لأن الـ
Uninitialized Class Variables لديهم قيمة مفتوحة
مفتوحة مفتوحة مفتوحة
مفتوحة مفتوحة مفتوحة مفتوحة مفتوحة مفتوحة مفتوحة
مفتوحة مفتوحة
مف it is a good practice not to rely on a default
value حاول دائما يا جماعة إنه لما تنشأ متغير
تعطيله قيمة و لو مثلا تقوله صفر تمام أو تعرف بولن
تقوله false ليش كمان ضروري تعطيله قيمة لأنه لو أنت
ما عطيتلهش قيمة الـ compiler ممكن يطلعلك error يقولك
أنت قاعد تستخدم متغير مش معطيله قيمة مثلا تعالى
أفرجك حاجة هنا
integer x و قلت له system.out.println x
هنا طلع لك error بيقول لك تعال أنت أنشأت متغير integer
لكن ما أعطيته قيمة، مش مسموح أن أنت تستخدمه اللي
ما أعطيته قيمة، هذه أنت حط كمان ال mouse على ال error
كويس لو احنا نفهم ال error بيقول variable x might
not have been initialized لازم نفهم ال error لذا
might not have been initialized إيش يعني؟ يعني أنت
مش معطي .. مش معطي قيمة مبدئية، لازم تعطيه قيمة
واحد بيقول طب ما هو صفر، ماشي صفر بس ما يرضاش أنك
تستخدمه إلا لما تعطيه قيمة مبدئية، لأن لو أعطيته أي
قيمة مثلًا صفر كتبتها كتابة، خلاص هيك سكت تمام، نفس
المبدأ، ما نفعش تعمل على متغير أي عملية حسابية ثانية
integer y يساوي x زائد خمسة، برضه هنا يطلع خطأ أنا
بجمع خمسة مع قيمة ال X، وال X ما له مش معمول له
initialize، فمهم جدًا لجماعة أنك تعمل initialize، إيش
يعني؟ طبعًا نقطة مهمة، إيش يعني تعمل initialize، أن
أنت يا إما تعطيله قيمة مبدئية في ال code أو تطلب
من المستخدم يعطيله قيمة
الآن to protect against uninitialized variable and
to keep the compiler happy assign a value at the
time the variable is declared عشان تحمي نفسك من
مشكلة ال uninitialized variable زي ما شوفنا لو كان
uninitialized variable ممكن تطلع لك خطأ ال compiler
لو استخدمته بدون ما تعمله initialize، حاول دائمًا
تعطيله قيمة مبدئية زي هيك مثلًا، هذا ملخص ال slide
هذه assignment evaluation، احنا حكينا عن ال
assignment statement صح ولا يا جماعة، ال assignment
statement في الأول بيحسب القيمة، هيها ال result is
used to set the value of the variable on the left
hand side أو هي ملخصها expression on the right hand
side، إيش يعني expression التعبير أو المعادلة
الموجودة على ال right hand side، إيش يعني ال right
hand side اللي على اليمين تمام، of the assignment
operator is evaluated first اللي موجود على اليمين
هو اللي بنعمل له تقييم، إيش يعني evaluated تقييم يعني
بتجيب قيمته يعني تمام، is evaluated first the
result، result mean النتيجة اللي على اليمين is used
to set the value of the variable on the left hand
side، set the value إيش يعني set the value تعطيه
قيمة، هذه قيمة مهمة set the value أنك تعطي قيمة
للمتغير، get the value تقرأ قيمته، on the left hand
side، هذا مثلًا، إيش وظيفة السطر هذا؟ حكينا لأ إيش
بيعمل هذا السطر الثاني ماشي، إيش بيسوي هو؟ إيه يعني
فعليًا إيش بيعمل؟ بينقص قيمة المتغير بمقدار 2 احنا
قلنا يا جماعة مثلًا أنا لو كان عندي X يساوي
X زائد 1 أنا هنا بزيد قيمة ال X ب 1 صح؟ هذا بتنقص
قيمة ال X ما لها أو المتغير هذا ب 2 لأن
هذا ال Simon compatibility compatibility ماذا يعني؟
قلناها المرة الماضية وهو التوافق، مثلًا this device
is compatible with my computer هذا الجهاز متوافق
مع جهازي، assignment compatibilities اللي هي
التوافقات في عملية ال assignment اللي هي ملخص
الكلام اللي حكيناه لما تتعامل مع أنواع مختلفة وإيش
بيصير لو أنت مستخدمهم على طرفي ال assignment
statement، هنا بيقول لك Java is strongly typed يعني
بتهتم بالأنواع الموجودة و بتدقق عليها، you cannot
for example you cannot إيش يعني؟ بتقدرش assign أنك
تمنح floating point value to a variable declared
to store an integer، بتقدرش تعطي floating point
value لمتغير أنت عرفته كإيش؟ كانتجر، sometimes بعض
الأحيان convergence between numbers are possible
تمام؟
مثلًا double variable يساوي سبعة، هذا integer في
double ما فيش مشكلة تمام، is possible even if double
variable is of type double for example، هذا ممكن
أنك تحط الصغير في الكبير، هذا بلخص لك إياها بقول لك
في المعادلة دائمًا اللي موجود على اليمين بيقدر تحطه
في الشمال، يعني ال short عفوا ال byte اللي على
الشمال بتحطه في العلي مين، ال byte بنحط في ال short
ال short بنحط في ال int، ال int بنحط في ال long، ال
long بنحط في ال float، ال float بنحط في ال double
لكن العكس إيش؟ لا، دائمًا اتجاه السهم باتجاه هذا
طبعًا المفهوم أن احنا هنا بنتعامل مع أرقام لكن في
حالة ال char و ال boolean هذا حاجات مختلفة يعني
ما نفعش مثلًا تحط char متغير من نوع integer تمام خلاص
هذا أنواع لا يمكن التحويل بينهم صح ولا ال
character ولا عمره بيصير integer صح ولا يا جماعة
type casting اللي هو تحويل النوع، a type casting
temporarily مؤقت تغيير قيمة قيمة من قيمة تحويلها
من قيمة تحويلها من قيمة تحويلها من قيمة تحويلها من
قيمة تحويلها من قيمة تحويلها من قيمة تحويلها من
قيمة تحويلها من قيمة تحويلها
من قيمة تحويلها
لأ لإيش؟ لأن هذه تسعة double لو كتبت casting مش
غلط بس مش لازمة لكن شوف المثال هذا، point يساوي بين
قوسين and distance، لأن هذا متغير إيش نوع ال
distance؟ هذا double وهذا إيش نوعه integer، بنفع تحط
مباشرة بدون هذه double في integer ما بنفعش، فحطين ال
int هنا عشان يعمل casting تمام، هذا تحويل إجباري بس
طبعًا هتفقد مين؟ الصفر تمام، هي بيقول لك أن illegal
without int، illegal يعني مش قانوني مش صح تمام واضح
هذا يا جماعة طب هذا تفسير اللي .. الآن arithmetic
operations العمليات الحسابية أيضًا مرّين عليها بشكل
سريع المحاضرة الماضية، العمليات الحسابية الأساسية
اللي هي الجمع و الطرح و الضرب و القسمة، طبعًا آه
هنا طبعًا شوف إيش ب .. الرموز هذه بيسميها operators
طبعًا و الأرقام اللي بتنجمع بيسميها operands يعني
لما أقول مثلًا
خمسة زائد ثلاثة هذا بنسميه operator تمام، هدول
المعاملات تمام بيسميهم إيش operands، هذا لازم الشرح
اللي هنا when both operands when both operands إيش
يعني when both operands لما الرقمين اللي بعمل
بينهم العملية الحسابية are of the same type the
result is of that type لما يكونوا من نفس النوع أكيد
النتيجة هتطلع من النوع نفسه، بجمع integers الناتج
بيطلع integer، when one of the operands is a
floating point type and the other is integer the
result is a floating point، هذا حكيناه لما أنا أعمل
عملية حسابية من نوعين مختلفين دائمًا بحول للنوع
الأكبر، واضح يا جماعة؟
هذا مثال بيقول لي hours worked ساعات العمل أنا محسب
مثلًا ساعات عمل لموظفين، موظف
بيشتغل بالساعة كيف بحسبه ساعات العمل؟ إيه يا جماعة
بشوف كم ساعة اشتغل وبضربها في إيش؟ في قيمة الساعة
سعر الساعة طبعًا، فالآن أنا ساعات العمل بتكون
integer ولا float ولا double؟ غالبًا integer خلاص
بنحسب الموظف نحسبه مش على خمس دقائق صح ولا نحسب
بالساعة، فبنعمل متغير اسمه hours worked الساعات
اللي تم عملها، طب هذا نوع integer وقيمته كانت مثلًا
تخيل أنها أربعين، الآن pay rate اللي هو معدل الدفع
تمام، هذا حطينا double ليش؟ لأنه مثلًا حاسب الساعة ب
ثمانية فاصلة خمسة وعشرين، الآن في الآخر أنا محسب
كده الموظف هذا الساعات عمله بدرب ال hours worked
في الـ Pay Rate النتيجة
هذه هتطلع Double ولا Integer ولا Float؟ هتطلع
Double لأن أنا بدرم Integer في Double طبعا هذه
مهمة ما أعرفها ليش؟ لأنه لما أعمل result لازم ال
result يكون من النوع Double صح؟
لو كتبت Integer هنا غلط إلا في حالة عملت Cast
تمام؟
لأ في كل الأحوال لو كتبت هنا integer طبعا غلط لأن
هنا تضرب أنت double في integer بيطلع double ممنفعش
تحطه في integer إلا لو جيت للنتيجة عملت لك cast ل
integer طبعا
الـ D ممنفعش تحطها جنب اسم ال variable يعني لما
يكون عندك خمسة و نص اكتب جنبها D لكن X ممنفعش تكتب
جنبها D، الـ D هذه بتنكتب والـ F بتنكتب جنب الأرقام
المهم هذه النتيجة بتاعة العملية هذه بتطلع double
يا جماعة فلازم المتغير اللي أحط فيه القيمة يكون
يكون double، واحد بيقول طب أنا ما بديش الكسور إذا
ما بديهاش الكسور حط هذه integer تمام واعمل عملية
ال cast واضح هذه يا جماعة واضح ولا لأ
طيب في العمليات الحسابية لو كان أنا عندي أكثر من
متغير في المعادلة expressions with two or more
operators can be viewed as a series of steps each
involving only two operands يعني إيش بيعمل
الكمبيوتر لو أنا قلت له خمسة زائد ثلاثة زائد أربعة
هيجمعهم بالترتيب صح ولا لأ؟ طبعا هو بيطلع للأولويات
مدام كله عملية جمع بيعمل به بالترتيب خلي هذه
المثال شوية لأن مش معنين فيه طيب هذه
نفس الكلام اللي حكينا if at least one of the
operands is a floating point type and the rest are
integers the result will be floating point نفس
الكلام اللي قلناه أنه دائما بيحول من الصغير ل
للكبير لما يعمل عملية حسابية طيب division operator
إيش ال division عملية القسمة طبعا طلع
معاه هنا the division operator اللي عملية القسمة
behaves as expected إيش يعني behaves as expected
يعني تتصرف كالمتوقع if one of the operands is a
floating point type يعني عملية القسمة معنى الجملة
باختصار تطلع صح زي ما أنت متوقع في حالة واحدة إن
يكون أحد الرقمين float لكن لو كانوا الاثنين
integer مش هتطلع النتيجة زي المتوقع لما عملنا سبعة
على اثنين احنا عارفين هي إنّها ثلاثة و نص لكن هي
طلعت ثلاثة مش زي المتوقع لأن الرقمين اللي بتقسم
عليهم integer لكن لو كان واحد منهم float أو double
بتطلع زي المتوقع هاي معناه الجملة when both
operands are integer types the result is truncated
not rounded هذه المهمة truncated ليس rounded لما يكون
الانتاج truncated، truncated معناه أنه يذهب إلى
الكسر ويشطبه مش بيقربه rounded، ما هي rounded يقرب
truncated معناه قطع شيلنا منه جزء يعني لو نتيجة
القسمة 3.999 وعملت لها casting أو عملت عملية قسمة
ما بين 399 ع 100 هيطلع النتيجة 3 هيطير كل كسر واحد
بيقول كيف نعمل تقريب هاخدها قدام لأن هذا المثال لو
أنا قلت لك 99 ع 100 إيش النتيجة بتاعته فعليا
كرياضيات هي 99 من 100 بس لأنه هذا integer وهذا
integer النتيجة هتطلع صفر ليش؟ لأنه طيّر الكسر كله
بغض النظر إيش قيمته طب كيف بده يحافظ على الكسر
هنا؟ خطوة واحدة، حط F أو D، هنا أو هنا، تمام؟
the mod operator في عملية حسابية ما عطيتكوا إياها
ما عطيتكوا إياها لقيتها اسمها ال mod أو باقي قسمة
إيش يعني ال mod هذا يا جماعة تعالوا نجربه نجربه و
ننهي فيه المحاضرة الآن
integer x يساوي عشرة و integer y يساوي ثلاثة الآن
system.out.println
عشرة على ثلاثة ثلاثة
ثلاثة ثلاثة ثلاثة ثلاثة ثلاثة ثلاثة ثلاثة ثلاثة
ثلاثة ثلاثة ثلاثة ثلاثة ثلاثة
وحطيت الرمز هذا اللي هو رمز النسبة المئوية طبعا
طلع لإيش واحد إيش هو الواحد؟ باقي القسمة عشرة على
ثلاثة يساوي ثلاثة والباقي واحد طبعا فهي دائما
المدّة بتجيب لك باقي القسمة مش نتيجة القسمة باقي
القسمة طب شوف الآن المثال هذا
تسعة على ثلاثة تسعة
على ثلاثة بيطلع ثلاثة تسعة مض ثلاثة سبعة
مض اثنين
ثلاثة والباقي واحد يعني هنا اعمل run هي كتبت لك
واحد يبقى ال mod بتجيب باقي القسمة الآن السؤال ليش
بالزمن أصلا إن أجيب باقي القسمة في تطبيقات بالزمها
باقي القسمة الآن بكرا لو بدنا نعمل برنامج يشوف لك
العدد زوجي ولا فردي أصلا أنت في الرياضيات كيف تعرف
العدد زوجي أو فردي إذا باقي القسمة على اثنين صفر
كيف يعني برمجيا كل عدد بقسم على اثنين أصلا غلطة
تقول إن بقسم على اثنين صح السبعة بتقسم على اثنين
بقسم على اثنين بدون باقي قسمة هي الصح تمام هذا كده
الترجمة برمجيا إذا باقي القسمة صفر بيكون العدد
زوجي غير ذلك بيكون فردي يبقى في بعض العمليات
البرمجية بلزمني أعرف باقي القسمة حالة ثانية تمام
لو أنا قلت لك الزمن اللي أخذه جهاز معين 4000 ثانية
4000 second قلت لك حول ليها لدقيقة ولا ثانية لأ
لما تجسم على ستين هذه بالثانية لما تجسم على ستين
بيطلع بالدقيقة ولما تجيب باقي قسمتك على ستين بيطلع
الباقي ما هو أنت لما تجسم على ستين تمام بيجيب لك
دقيقة وفيه قصور صح ولا؟ تمام؟ هو مش بالضبط هيقسم
على ستين تمام؟ لما تقسم على ستين الصحيح هذا عدد
الدقائق طب الباقي جداش ضال ثواني هو باقي قسمته على
ستين ففي .. أنا بس بديك أمثلة وين هيلزمنا .. باقي
قسمة العدد أولي أو لأ؟ ما هو العدد الأولي؟ اللي
مجموع قواسمه اثنين نفسه والواحد ماشي بس هذا القانون
مش دائما صح ليش؟ لأن الواحد مش أولي بقسم نفسه على
واحد عشانك أنا أدق منك لما أقول لك مجموع قواسم
اثنين صح؟ مجموع قواسم اثنين الواحد مجموع قواسمه
واحد تمام فبرضه عشان أعرف العدد الأولي بدي أشوف
قواسم العدد إيش هي قواسم العدد؟ إيش هو قواسم
العدد؟ اللي بيقسم عليه بدون باقي يمكنك تجيب باقي
القسمة واضح يا جماعة؟ هاي معناه المد operation ماشي
يا جماعة أعطوكوا العافية ونكمل المحاضرة اللي جاي
إن شاء الله