Professional Documents
Culture Documents
Week1 Notes
Week1 Notes
● لغة C
● مرحبا بالعالم
● المترجمات
● النصوص
● مكعبات برنامج Scratchفي لغة C
● أنواع البيانات ،رموز الطباعة ،العالمات الحسابية
● امثة أخرى
● الشاشات
● الذاكرة ،وعدم الدقة ،والتجاوز
لغة C
سوف نتعلم اليوم لغة جديدة وهي لغة ،Cوهى لغة برمجة لديها كل مميزات Scratchواكثر ولكن ربما تبدو أكثر تعقيدا حيث انها
لغة كتابية
>#include <stdio.h
)int main(void
{
;)"printf("hello, world\n
}
بالرغم من أن الكلمات قد تبدو جديدة اال ان الفكرة هى ذاتها عند استخدامنا مكعبي ”“when green flag clickedو “ ”say hello worldفي
برنامج Scratch
على الرغم من ان هذه االكواد قد تبدو مبهمة بالنسبة لك ،فقط تذكر ان ثلثي طالب هذا المسار لم يدرسو علوم الحاسب من قبل لذلك ال
تخف و في البداية أحب أن أقتبس عبارة من معهد " MITإن محاولة استيعاب كل هذه المفاهيم الجديدة قد تشعر وكأنها تشرب من
خرطوم الحريق" .تأكد من أنه بحلول نهاية المسار سنكون لديك خبرة في تعلم وتطبيق هذه المفاهيم.
يمكننا مقارنة الكثير من التركيبات في ،Cبالمكعبات التي رأيناها و استخدمناها بالفعل في .Scratchطريقة كتابة الجملة أقل أهمية بكثير
من المبادئ ،التي قدمناها بالفعل.
مرحبا بالعالم
● كما رأينا في scratchان البرنامج يبدأ من مكعب “ ،”when green flag clickedفبمجرد ضغطك على العلم األخضر يبدأ البرنامج
بتنفيذ ما بداخل المكعبات .في لغة Cهناك كود مماثل يقوم بنفس المهمة و هو
)int main(void
والذى سوف نتحدث عنه اكثر في االسابيع المقبلة .يتبع هذا السطر ب عالمتى {} و بداخلهم البرنامج الخاص بنا
)int main(void
{
}
;)"printf("hello, world
ال printf functionهي المسؤولة عن طباعة اي شئ على الشاشة ،حيث ان حرف fيرمز إلى ،formatحيث تعنى أننا يمكننا تنسيق
النص المطبوع بطرق مختلفة .بعد ذلك األقواس () التى نكتب بداخلها ما نريد طباعته ،يجب أن نحيط النص المراد طباعته عالمات
تنصيص مزدوجة " " وفى النهاية نضيف ; والتى تشير الى نهاية السطر البرمجي
● لجعل البرنامج يعمل ،نحتاج الى سطر آخر في بداية الكود وهو
>#include <stdio.h
الذى يعرف كيف تعمل printfالتي نريد استخدامها .فى مكان ما هنا على الحاسب الخاص بنا يوجد ملف يوجد ملف ،stdio.hوالذى
يحتوى على الكود الذى يتيح لنا استخدام printfو ولنجعل الكود الخاص بنا يتضمن هذا الملف نستخدم #includeفي بداية البرنامج
● عندما اردنا كتابة أول برنامج على scratchقمنا بفتح الموقع الخاص به .بالمثل لنبدأ بكتابة و تشغيل أول برنامج لنا سنستخدم
،CS50 Sandboxو هي بيئة افتراضية تتضمن مجموعة من المكتبات واألدوات المثبتة بالفعل لكتابة البرامج بلغات متعددة
● في الجزء العلوي ،هناك محرر كود بسيط ،حيث يمكننا كتابة النص .في األسفل ،لدينا نافذة لكتابة األوامر من خاللها terminal
window
● إلنشاء ملف نكتب بداخله الكود الخاص بنا ،سنضغط على رمز +و ننشئ ملف جديد بأسم hello.cو نكتب بداخله
● ننهي ملف برنامجنا بـ c.لإلشارة إلى أنه مخصص كبرنامج مكتوب بلغة ،Cالحظ أن الكود الخاص بنا ملون ،بحيث يكون أكثر وضوحً ا.
المترجمات
● بمجرد أن نحفظ الكود الذى كتبناه ،والذى يسمى ( ) source codeالكود المصدري ،نحتاج إلى تحويلها إلى ( ) machine codeكود اآللة،
وهي تعليمات ثنائية (مكون من صفر و واحد) يفهمها الكمبيوتر مباشرة.
● نستخدم برنامجً ا يسمى مترجم ( )compilerلتحويل الكود المصدرى الخاص بنا إلى كود اآللة.
● للقيام بذلك ،نستخدم نافذة كتابة األوامر ،التي لديها موجه األوامر )$( .في اليسار والذي يمكننا كتابة األوامر .بعده
● نكتب ( clang hello.cحيث تعني " clangلغة ،"Cوهو مترجم كتبه مجموعة من األشخاص) .ولكن قبل أن نضغط على ،enterاضغط
على أيقونة المجلد في الجزء العلوي األيسر من .CS50 Sandboxسنرى ملفنا يسمى .hello.cلذلك نضغط على enterفي نافذة
كتابة األوامر ،سنجد ملف آخر ظهر يسمى a.outوالتى تعنى (المخرجات بلغة ) assemblyبداخل هذا الملف يوجد الكود الخاص بنا
مكتوب بلغة األلة ،اآلن يمكننا كتابة ./a.outفي نافذة كتابة األوامر لتشغيل البرنامج a.outالموجود في المجلد الحالي .لقد قمنا للتو
بكتابة ،ترجمة ،وتشغيل برنامجنا األول!
النصوص
● بعد ان قمنا بتشغيل البرنامج وجدنا hello, world$حيث ان موجه األوامر في ذات السطر الموجود به خرج البرنامج ،على ما يبدو أننا
نحتاج لسطر جديد بعد البرنامج الخاص بنا لذلك سنقوم بتحديث البرنامج لنجعله يحتوى على هذا السطر باضافة هذا الرمز n\ :
>#include <stdio.h
)int main(void
{
};)"printf("hello, world\n
● نحن اآلن بحاجة إلى أن نتذكر إعادة ترجمة برنامجنا باستخدام clang hello.cقبل أن نتمكن من تشغيله بعد التحديث
● السطر 2من برنامجنا فارغ عن قصد ألننا نريد بدء جزء جديد من الكود (مثل بدء فقرات جديدة في المقاالت) .انه ليس ضرورى لكى
يعمل برنامجنا بشكل صحيح ،ولكنه يساعد البشر على قراءة البرامج بسهولة أكبر.
● يمكننا أيضا تغيير اسم برنامجنا من a.outإلى شيء آخر،عن طريق اضافة اختيارات اضافية ( )command-line argumentsالى
البرنامج في نافذة كتابة األوامر على سبيل المثال يمكننا كتابة clang -o hello hello.cحيث ان o hello-تخبر برنامج clangأن يحتفظ بالكود
hello/. المترجم في ملف يسمى helloبدال من a.outحيث نستطيع تشغيله فيما بعد عن طريق كتابة
● في نافذة كتابة األوامر يمكننا كتابة امر اخر مثل lsو التى تشير الى اظهار جميع الملفات في المجلد الحالى
$ ls
a.out* hello* hello.c
● " * " تشير إلى أن هذه الملفات قابلة للتشغيل بواسطة الحاسب الخاص بنا
● يمكننا استخدام األمر rmوهو اختصار لكلمة removeلحذف ملف:
$ rm a.out
?'rm: remove regular file 'a.out
● يمكننا كتابة yاو yesلتأكيد األمر و استخدام امر lsمرة ثانية لنتأكد من أن الملف قد تم مسحه نهائيا
● اآلن ،دعونا نحاول الحصول على مدخالت من المستخدم ،كما فعلنا في Scratchعندما أردنا أن نقول ":"Hello , David
) "" ● في البداية نحتاج أن نسأل المستخدم ان يدخل نص (( )Stringصفر أو أكثر من الحروف داخل عالمتي تنصيص مزدوجة
مثل )”("", "ba", “bananasف نستخدم function get_stringونضع بداخل أقواسها السؤال الذى نريد أن نسأله للمستخدم مثل
"What is your name?\n".على اليسار نريد انشاء متغير )(variableاسمه answerوالذى ستكون قيمته ما يقوم المستخدم بكتابته .عالمة
= ستقوم بوضع القيمة التي في اليمين في المتغير الذي في اليسار .هذا المتغير سيحتوى على نص (حيث سيقوم المستخدم بكتابة
answer نص) لذلك نوع هذا المتغير سيكون stringلذلك سنجد كلمة stringعلى يسار المتغير
● بعد ذلك نحتاج قيمة المتغير answerبداخل printf functionلتقوم بطباعتها ،فنقوم بحجز مكان لهذا المتغير باستخدام s%بداخل
الجملة التى سنقوم بطباعتها هكذا " ،"hello, %s\nثم نعطى printfقيمة اخرى (اختيار آخر) و هو المغير answerحيث يعنى هذا وضع
s% قيمته مكان
● إذا كتبنا شئ خاطئ مثل
;)printf("hello, world"\n
حيث أن \ nخارج عالمات التنصيص سيرسل المترجم ( )compilerلنا رسالة بأنه يوجد خطأ :
● السطر األول من رسالة الخطأ تخبرنا بان ننظر الى السطر الخامس الحرف 26في ملف ،hello.cحيث أن المترجم يتوقع ان يوجد هنا
قوس وليس "\"
● لتبسيط االمور في البداية سنقوم باضافة مكتبة (مجموعة من االكواد ) الى الملف الخاص بنا ،حيث ستجعلنا قادرين على استخدام
cs50.h نوع المتغيرات ،stringو كذك ،get_string functionكل ما سنحتاجه هو includeملف
>#include <cs50.h
>#include <stdio.h
)int main(void
{
;)"string name = get_string("What's your name?\n
;)"printf("hello, name\n
}
>#include <stdio.h
)int main(void
{
;)"string name = get_string("What's your name?\n
;)printf("hello, %s\n", name
}
● اذا قمنا بترجمة ( )compilingهذا الكود سنجد به العديد من األخطاء ،احيانا يكون السبب خطأ واحد ولكن يقوم المترجم بترجمة
األكواد الصحيحة بعده بشكل خاطئ لذلك دائما ما نبدأ بأول خطأ
● نحن لم نكن نقصد stdinبدال من ،stringلذا هذه الرسالة قد تبدو غير مفيدة .في الحقيقة نحن بحاجة الضافة ملف آخر على الكود
الخاص بنا لتعريف النوع ( stringسنعرف لماذا في األسابيع المقبلة)
● لذا سنقوم باضافة ملف آخر و هو ،cs50.hوالذى يحتوى على ،function get_stringو اشياء اخرى عديدة
>#include <cs50.h
>#include <stdio.h
)int main(void
{
;)"string name = get_string("What's your name?\n
;)printf("hello, %s\n", name
}
● عندما نقوم بترجمة هذا الملف االن سنجد انه يوجد به خطأ واحد
● على ما يبدو اننا بحاجة الن نخبر المترجم أن يقوم باضافة ملف مكتبة ،50CSلذا سنقوم بكتابة clang -o string string.c -lcs50،حيث تشير
l-الى linkوالتى تعنى ربط (ربط الملف الخاص بالمكتبة بالكود الخاص بنا)
string.cالى ،stringو تفعل تمام كل ما يفعله clang - ● يمكننا اختصار ذلك بكتابة make stringحيث ان makeتستخدم clangلترجمة الملف
o string string.c -lcs50.
● اما مكعب " "1 change counter byيكافئه ;counter = counter + 1فى ،Cعالمة "=" هنا ال تعنى تساوى كما في الرياضايات ولكنها تعنى
ضع القيمة التي في اليمين في المتغير الذي على اليسار وتعنى هنا ..ضع في متغير counterقيمة 1+ counterالحظ هنا اننا ال نحتاج
;counter += 1او ;++counter ان نكتب intمرة اخرى حيث اننا قد عرفنا المتغير counterمن قبل بأنه من النوع intيمكننا ايضا ان نكتب
كالهما نفس المعنى ،ولكنهم فقط اختصارات كتابية و تسمى “”syntactic sugar
● اما ال conditionفكافئها
● الحظ اننا في Cنستخدم { و } لنوضح كيف توجد االكواد داخل بعضها البعض
● يوجد ايضا if-else conditions
● الحظ ان االسطر التى ال تتضمن تنفيذ أمر معين مثل ifال تنتهى ب عالمة ;
● لدينا أيضا else ifفي لغة C
)if (x < y
{
;)"printf("x is less than y\n
}
)else if (x > y
{
;)"printf("x is greater than y\n
}
)else if (x == y
{
;)"printf("x is equal to y\n
}
)while (true
{
;)"printf("hello, world\n
}
شرطا ،لذلك نستخدم trueكتعبير منطقي ( )boolean expressionلضمان تشغيل ال loopالى األبد .سيقوم
ً ● تتطلب ً while
أيضا
دائما في هذه الحالة) ،ثم يقوم بتشغيل الكود بداخل
ً برنامجنا بالتحقق مما إذا كان ( )conditionتساوى ( trueوهو ما سيحدث
األقواس {} بعد ذلك سوف يكرر ذلك حتى تتغير قيمة ال( )conditionالى ( falseوالذي لن يحدث في هذه الحالة).
while ● يمكننا تكرار كود محدد عدة مرات باستخدام
;int i = 0
)while (i < 50
{
;)"printf("hello, world\n
;i++
}
● لقد أنشأنا متغير ،iواعطينا له قيمة 0بعد ذلك سنقوم بتكرار عدة أسطر من االكواد ونزيد قيمة ال iبمقدار 1في كل مرة ما دامت
قيمة ال iاقل من 50
● األقواس {} حول االكواد تشير الى ان هذه األسطر من الكود ستتكرر .يمكننا كتابة اسطر اخرى بعد هذه األقواس إذا كان هناك باقى
للبرنامج المراد كتابته
● يمكننا أيضا استخدام forحيث انها احدى طرق التكرار( )loopsالشائعة
● في البداية ننشئ متغير يسمى iو نعطى له قيمة 0ثم نتحقق هل i < 50في كل دورة قبل تنفيذ اى سطر بداخل هذا ال loopإذا كانت
قيمة هذا ال expressionتساوى trueسنقوم بتنفيذ الكود و في نهاية الدورة سقوم بإضافة 1إلى قيمة iالحالية و نقوم بتكرار هذا
حتى تصبح قيمة ال conditionتساوي false
امثلة اخرى
● يمكنك تعديل كل من االمثلة التالية بالضغط على رابط sandbox
● في ملف ،int.cنطلب من المستخدم قيمة عددية صحيحة ك مدخالت للبرنامج و يكون مخرجات البرنامج قيمة عددية صحيحة أيضا
>#include <cs50.h
>#include <stdio.h
)int main(void
{
;)"int age = get_int("What's your age?\n
;int days = age * 365
;)printf("You are at least %i days old.\n", days
}
ً
طويال أو معقدً ا ،فقد يكون من األفضل تقسيمه على سطرين أو حتى ثالثة أسطر لتسهيل القراءة. ● بمجرد أن يصبح السطر
● في ملف ،float.cنحصل على مدخالت من نوع أرقام ذات عالمة عشري
>#include <cs50.h
>#include <stdio.h
)int main(void
{
;)"float price = get_float("What's the price?\n
;)printf("Your total is %.2f\n", price * 1.0625
}
● واالن اذا قمنا بترجمة و تشغيل الملف سنرى السعر بعد إضافة الضرائب له
● يمكننا تحديد عدد األرقام بعد العالمة العشرية مع رموز الطباعة مثل 2f.%والتى تعنى رقمين بعد العالمة العشرية
● في ملف ،parity.cنتحقق ما اذا كان رقم ما زوجى أو فردى
>#include <cs50.h
>#include <stdio.h
)int main(void
{
;)" int n = get_int("n:
)if (n % 2 == 0
{
;)"printf("even\n
}
else
{
;)"printf("odd\n
}
}
● باستخدام عالمة %يمكننا معرفة باقى قسمة الرقم nعلى ال 2اذا كان باقى القسمة 0فهذا يعني ان الرقم زوجى و اذا كان غير ذلك
نعرف أنه فردى
● ال داعي أن تقلق من القيمة التى يدخلها المستخدم حيث ان get_intالتى بمكتبة 50CSتتأكد من ان القيمة المدخلة تتفق في النوع مع
القيمة المراد إدخالها
● في ملف ،conditions.cنكتب برنامج نستخدم فيه الشروط التى تعرضنا لها من قبل.
// Conditions and relational operators
#include <cs50.h>
#include <stdio.h>
int main(void)
{
// Prompt user for x
int x = get_int("x: ");
// Compare x and y
if (x < y)
{
printf("x is less than y\n");
}
else if (x > y)
{
printf("x is greater than y\n");
}
else
{
printf("x is equal to y\n");
}
}
) وهى مالحظة (تكتب بأي لغة) لن يقوم المترجم بترجمتها (ألنها ليست كودcomment( تسمى تعليق// ● السطور التي تبتدئ بعالمة
)برمجى
والتى تعني تغيير المجلد الحالي الى مجلد آخر و الذي،cd src1 ● عندما أراد ديفيد أن يشغل هذا البرنامج كتب في نافذة كتابة االوامر
ليشغل البرنامجconditions/. وmake conditions يحتوي على الملف المراد تشغيله حتى يستطيع أن يكتب
src1. يستطيع ان يعرف انه في المجلد،pwd ● باستخدام أمر
sandbox بدون اى اختبارات فإنه يأخذنا للخلف لمجلد البداية فيcd ● عند كتابة االمر
: يمكننا ان نطلب من المستخدم ان يؤكد او يرفض امر ما،agree.c ● في ملف
//logical operator
#include <cs50.h>
#include <stdio.h>
int main(void)
{
// Prompt user to agree
char c = get_char("Do you agree?\n");
● يمكنك استخدام هذه العالمة || ،لتحقيق orمنطقية ،والتى تعنى اذا كان احد الشرطين trueفان ال conditionستكون true
● وإذا كان الشرطين ال يساوي trueلن يحدث شئ حيث ان ال conditionستكون false
● واآلن لنقوم بتنفيذ برنامج السعال الذي أنشأناه في األسبوع السابق
>#include <stdio.h
)int main(void
{
;)"printf("cough\n
;)"printf("cough\n
;)"printf("cough\n
}
>#include <stdio.h
)int main(void
{
)for (int i = 0; i < 3; i++
{
;)"printf("cough\n
}
}
● في هذا البرنامج سنبدأ العد من الصفر لذلك ستكون قيم iتساوى 0و 1و 2قبل ان ينتهى البرنامج والتي تكافئ 3دورات .يمكننا
الحصول على نفس التأثير اذا كتبنا
.
>#include <stdio.h
;)void cough(void
)int main(void
{
)for (int i = 0; i < 3; i++
{
;)(cough
}
}
)void cough(void
{
;)"printf("cough\n
}
● لقد عرفنا ال ,;(void cough(voidقبل أن نستخدمها في .main functionحيث ان مترجم لغة cيعمل من أعلى ألسفل لذلك يجب أن
main نخبره أن cough functionموجودة قبل أن نستخدمها .بهذه الطريقة يعرف المترجم انها موجودة الحقا في الكود و تبقى ال
functionقريبة من البداية
( cough(void ● حيث ان cough functionال تاخذ اى مدخالت فهي تكتب
● يمكننا اختصار coughأكثر
>#include <stdio.h
)int main(void
{
;)cough(3
}
● االن اذا كنا نريد طباعة “ ”coughاى عدد من المرات يمكننا فقط استدعاء ذات ال .functionالحظ انه عند كتابتنا ،(void cough(int n
nو بداخل ،coughنستخدم هذا ال nفي ال for loop فهذا يعني أن cough functionتاخذ مدخالت من النوع ،intو الذى نشير إليه ب
المستخدم لطباعة “ ”coughالعدد المراد من المرات
لنلقى نظرة على ملف positive.c ●
>#include <cs50.h
>#include <stdio.h
)int main(void
{
;)" int i = get_positive_int("Positive integer:
;)printf("%i\n", i
}
● أن مكتبة 50csال تحتوى على get_positive_int functionولك يمكننا كتابة واحدة خاصة بنا.
ان (int get_positive_int(string promptالتي أنشأناها ستأخذ مدخالت من النوع stringو التى سنشير إليها ب promptو الذى سيظهر ●
i. للمستخدم .و القيمة الناتجة منها ستكون من النوع ،intو التى ستقوم ال main functionبتخزينها في متغير يسمى
● بداخل ،get_positive_intنقوم بتعريف متغير ،int n ،بدون اعطائه اى قيمة ثم نقوم باستخدام شئ جديد وهو ،do... while ،والتى تقوم
بفعل شئ ما اوال ثم تقوم ب التحقق من شرط معين و تكرار فعل هذا الشئ حتى يصبح الشرط يساوى false
● بمجرد ان نحصل على n>1سينتهى ال loopو يمكننا ارسال هذه القيمة باستخدام كلمة returnو فى ال ،main functionيمكننا ان
نجعل int iيساوي هذه القيمة
الشاشات
● قد نرغب في برنامج يقوم بطباعة جزء من شاشة من لعبة فيديو مثل .Super Mario Brosفي ملف mario0.c،لدينا:
// Prints a row of 4 question marks
>#include <stdio.h
int main(void)
{
printf("????\n");
}
mario2.c : ثم نقوم طباعتها باستخدام كما فى،عالمات االستفهام التي يريدها ً● يمكننا أن نطلب من المستخدم ادخال عدد
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int n;
do
{
n = get_int("Width: ");
}
while (n < 1);
for (int i = 0; i < n; i++)
{
printf("?");
}
printf("\n");
}
mario8.c ويمكننا طباعة مجموعة من األشكال ثنائية األبعاد باستخدام كما فى ●
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int n;
do
{
n = get_int("Size: ");
}
while (n < 1);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("#");
}
printf("\n");
}
}
● الحظ انه يوجد لدينا loops 2متداخلتين .حيث ان ال loopالخارجي يستخدم المتغير iلتكرار كل شئ بالداخل عدد nمن المرات ،بينما
ال loopالداخلى يستخدم متغير ،jلكرار شئ ما عدد nمن المرات في كل مرة بمعنى اخر ال loopالخارجى يقوم بطباعة عدد nمن
الصفوف و ال loopالداخلى يقوم بطباعة عدد nمن االعمدة او عالمة #في كل صف
● تتوفر أمثلة أخرى لم تتم تغطيتها في المحاضرة يمكن ايجادها في “ ”Source Codeفي هذا الرابط Week 1.
)int main(void
{
// Prompt user for x
;)" float x = get_float("x:
طباعتها باستخدام 50f.% ● يمكننا تحديد عدد األرقام العشرية التي نريد
● هذا هو ما حصلنا عليه
x: 1
y: 10
x / y = 0.10000000149011611938476562500000000000000000000000
● اتضح أن هذا يسمى عدم دقة الفاصلة العائمة( ،)floating-point imprecisionحيث ليس لدينا عدد بتات كافية لتخزين جميع القيم
الممكنة ،لذلك يتعين على الكمبيوتر تخزين أقرب قيمة ممكنة إلى 1مقسومة على .10
رؤية مشكلة مشابهة في ملف overflow.c : ● يمكننا
>#include <stdio.h
>#include <unistd.h
)int main(void
{
)for (int i = 1; ; i *= 2
{
;)printf("%i\n", i
;)sleep(1
}
}
● فى ،for loopقمنا بتعيين قيمة iتساوي ،1وتضاعفها ب ( *= 2وسنستمر في القيام بذلك إلى األبد ،حيث انه ليس هناك شرط)
● نستخدم ً
أيضا sleepمن unistd.hللسماح لبرنامجنا بالتوقف في كل مرة.
● اآلن ،عندما ندير هذا البرنامج ،نرى العدد يزداد ويكبر ،حتى نجد
1073741824
'overflow.c:6:25: runtime error: signed integer overflow: 1073741824 * 2 cannot be represented in type 'int
-2147483648
0
0
...
● على ما يبدو ان البرنامج ادرك ان ال intال يستطيع تخزين القيمة التالية و قام بطبع خطأ و بعد ذلك قام بمضاعفة الرقم على اى
حال و أصبحت ال iقيمة سالبة و بعد ذلك اصبحت صفر
● تسمى هذه المشكلة ،integer overflowحيث ان يصبح قيمة ال integerكبيرة جدا(اكبر من المساحة المحجوزة له ) يمكن تمثيل
ذلك ب اضافة 1الى 999حيث سيصبح الناتج 1000ولكن في حين ان كل ما تملكه هو 3اماكن فقط فإن الناتج سيصبح 000
● نشأت مشكلة Y2Kألن العديد من البرامج قامت بتخزين السنة التقويمية برقمين فقط ،مثل 98لعام ،1998و 99لعام .1999ولكن
عندما اقترب عام ،2000كانت البرامج تخزن ،00مما يؤدي إلى التشويش بين عامي 1900و .2000
● تعرضت طائرة من طراز بوينج ً 787
أيضا لخطأ حيث تحدث overflowللعداد الموجود في المولد بعد عدد معين من األيام من
التشغيل المستمر ،حيث لم يعد من الممكن تخزين عدد الثواني التي كانت تعمل فيها في هذا العداد.
● لقد رأينا بعض المشاكل التي يمكن أن تحدث ،ولكن اآلن نفهم سببها وكيفية الوقاية منها.
سوف نستخدم CS50 Labالمبني على CS50 Sandboxمع مجموعة المشكالت لهذا األسبوع ،،،لكتابة بعض البرامج مع بعض ●
اإلرشادات الموجودة في ال walkthroughsلتساعدنا س