دالة الإدخال في الخوارزميات
مفهوم إدخال البيانات من المستخدم
ما المقصود من إدخال البيانات؟
في البرامج التي كنا نكتبها سابقاً, كنا نكتب جميع كودات البرنامج ثم نقوم بتشغيله, فيتم تنفيذ كامل البرنامج دفعة واحدة, و عند إنتهائه يعرض لنا الوقت الذي إستغرقه الكمبيوتر منذ أن قمنا بتشغيل البرنامج و حتى إنتهائه.
ستتعلم في هذا الدرس كيف تتفاعل مع البرنامج عندما يكون شغالاً.
فعلياً, ستجعل البرنامج يطلب منك إدخال معلومات (مثل إسمك, عمرك أو أي عدد), بعدها ستجعله ينتظرك لإدخال المعلومات من لوحة المفاتيح ( أي الـ Keyboard ).
ما الهدف الحقيقي من هذا الدرس؟
الهدف الحقيقي من الدرس أن تتعلم طريقة إنشاء برامج تناسب جميع المستخدمين.
من الآن و حتى إنتهاء سلسلة دروس الخوارزميات ستجهز برامجك للمستخدم و تنتظر منه إدخال معلوماته الخاصة, ثم تجعل برنامجك يتعامل مع المعلومات التي قام المستخدم بإدخالها.
كيف نتعامل مع البيانات التي سيدخلها المستخدم؟
إذا أردت أن يقوم المستخدم بإدخال المعلومات إلى البرنامج فعليك تجهيز مكان في الذاكرة ( أي تعريف متغيرات ) من أجل تخزين المعلومات التي سيدخلها المستخدم قبل أن تجعل البرنامج يطلب منه إدخال المعلومات.
دائماً عندما تريد من المستخدم أن يدخل أي معلومة, إجعل البرنامج يطلب منه أن يدخلها ثم خزنها في متغير.
إذاً, سابقاً كنا نضع قيم مباشرةً لجميع المتغيرات التي نستخدمها, أما الآن سنجعل المستخدم هو الذي يضع القيم للمتغيرات.
إدخال بيانات من المستخدم في الخوارزميات
في الخوارزميات نستخدم الدالة Read()
لقراءة أي شيء سيدخله المستخدم من لوحة المفاتيح سواء رقم أو نص لأننا نكتب الخوارزمية على الورقة و ليس على الكمبيوتر.
بينما في لغة جافا و في أي لغة برمجة أخرى, نستخدم دالة إدخال تتوافق مع نوع البيانات التي سيتم إدخالها.
لا تقلق إذا لم تفهم المقصود الآن لأنك ستفهم كل شيء من التمارين.
في هذا المثال بواسطة دالة الـ Print()
سيطلب البرنامج من المستخدم أن يدخل رقماً,
بعدها سيتم تجهيز متغير إسمه a
في الذاكرة لتخزين الرقم الذي نريد من المستخدم إدخاله أثناء تشغيل البرنامج.
في الأخير بواسطة دالة الـ Read()
سوف يقوم البرنامج بانتظار المستخدم لإدخال الرقم.
بعد أن يتم إدخال الرقم سيتم تخزينه في المتغير a
.
في الخوارزميات نكتب Read()
في حال أردنا من المستخدم إدخال أي نوع من معلومات.
طريقة جعل البرنامج يقبل المعلومات من المستخدم في لغة جافا
في لغة جافا لكي تجعل البرنامج يقبل معلومات من المستخدم عليك إتباع ثلاث خطوات.
إستدعاء الكلاس Scanner
الذي يحتوي على دوال إدخال المعلومات من المستخدمين.
أي يجب كتابة السطر التالي فوق كود الكلاس مباشرةً.
import java.util.Scanner;
الخطوة الثانية
إنشاء كائن من هذا الكلاس لأنك لا تستطيع إستخدام دوال الكلاس Scanner
إلا من خلال الكائن الذي يشير إليه.
أي يجب كتابة السطر التالي في الدالة main()
.
Scanner input = new Scanner(System.in);
الخطوة الثالثة
إستدعاء إحدى دوال إدخال المعلومات من هذا الكائن و تخزين ما سيدخله المستخدم في متغير من نفس نوع الدالة.
هنا كمثال إستخدمنا الدالة nextInt()
, ستتعرف لاحقاً على دوال أخرى و متى تستخدم كل واحدة منهم.
int a = input.nextInt();
أنت الآن تدرس الخوارزميات و ليس لغة جافا. لذلك ليس مطلوباً منك أن تفهم معنى هذه الأوامر حرفياً, و يكفي أن تفهم فكرتهم و مكان كتابتهم فقط.
مع الإشارة إلى أنك يجب أن تدون هذه الخطوات كملاحظات لأنك ستحتاج كتابتها عند تجربة أي خوارزمية على الكمبيوتر تطلب فيها من المستخدم أن يدخل أي عدد أو نص عند تشغيل البرنامج.
خطوات إدخال بيانات من المستخدم في جافا
المثال التالي يعلمك طريقة جعل البرنامج يطلب من المستخدم أن يدخل رقم و يخزّنه في متغير.
إذاً, عند تشغيل البرنامج سيطلب منك إدخال أي رقم.
بعد إدخال الرقم و النقر على الزر Enter سيقوم بعرض الرقم الذي أدخلته أثناء عمل البرنامج.
import java.util.Scanner; public class TestScanner { public static void main (String[] args) { Scanner input = new Scanner(System.in); int a; System.out.print("Enter a number: "); a = input.nextInt(); System.out.print("You have entered the number: " +a+ "\n"); } }
قمنا بتجربة الكود و إدخال الرقم 5 أثناء التشغيل, فكانت النتيجة كالتالي.
دوال إدخال المعلومات الموجودة في الكلاس Scanner
لغة جافا توفر لك العديد من الدوال التي تسمح لك بإدخال المعلومات و كل واحدة منهم تستخدم لغرض محدد.
أمثلة
إذا كنت تريد من المستخدم أن يكتب إسمه, فأنت بحاجة لدالة الإدخال التي تستخدم لقراءة النص الذي سيكتبه المستخدم.
في حال كنت تريد من المستخدم أن يكتب عمره, فأنت بحاجة لدالة الإدخال التي تستخدم لقراءة الرقم الذي سيكتبه المستخدم و هكذا.
الجدول التالي يحتوي على الدوال التي سنستخدمها لقراءة المعلومات من المستخدم.
الدوال | دواعي الإستخدام |
---|---|
nextLine() |
تستخدم لإستقبال نص من المستخدم, أي لإستقبال قيمة نوعها String |
nextInt() |
تستخدم لإستقبال عدد صحيح ( أي بدون فاصلة ) من المستخدم, أي لإستقبال قيمة نوعها int |
nextDouble() |
تستخدم لإستقبال عدد عشري ( أي يحتوي على فاصلة ) من المستخدم, أي لإستقبال قيمة نوعها double |
تمارين شاملة حول إدخال البيانات من المستخدم
دالة إدخال البيانات Read في الخوارزميات - التمرين الأول
أكتب برنامج يطلب من المستخدم إدخال إسمه و مهنته و عمره, ثم يعرض له المعلومات التي قام هو بإدخالها بشكل مرتب.
قم بتجهيز متغيرات لتخزين المعلومات التي سيدخلها المستخدم.
أطلب من المستخدم إدخال إسمه.
ثم خزن النص الذي يقوم بإدخاله.
أطلب من المستخدم إدخال مهنته.
ثم خزن النص الذي يقوم بإدخاله.
أطلب من المستخدم إدخال عمره.
ثم خزن الرقم الذي يقوم بإدخاله.
قم بعرض جميع المعلومات التي قام المستخدم بإدخالها.
لنفترض أن المستخدم أدخل المعلومات التالية عند تشغيل البرنامج:
Mhamad كإسم.
Programmer كنوع العمل.
20 كعمر.
كود الجافا
import java.util.Scanner; public class User_Information { public static void main (String[] args) { Scanner input = new Scanner(System.in); String name; String job; int age; // name هنا طلبنا من المستخدم إدخال إسمه و قمنا بتخزينه في المتغير System.out.print("Enter your Name: "); name = input.nextLine(); // job هنا طلبنا من المستخدم إدخال وظيفته و قمنا بتخزينه في المتغير System.out.print("Enter your Job: "); job = input.nextLine(); // age هنا طلبنا من المستخدم إدخال عمره و قمنا بتخزينه في المتغير System.out.print("Enter your age: "); age = input.nextInt(); // هنا عرضنا جميع المعلومات التي قام المستخدم بإدخالهم System.out.print("\n----------- user info ------------\n"); System.out.print("Name: " +name+ "\n"); System.out.print("Job: " +job+ "\n"); System.out.print("Age: " +age+ "\n"); } }
import java.util.Scanner;
هنا قمنا بإستدعاء الكلاس Scanner
لأنه يحتوي على دوال الإدخال.
Scanner input = new Scanner(System.in);
هنا أنشأنا منه كائن إسمه input
لكي نستطيع إستخدام دوال الإدخال منه.
String name; String job; int age;
هنا قمنا بتجهيز المتغيرات لتخزين المعلومات التي سنطلبها من المستخدم.
name = input.nextLine();
الجملة input.nextLine();
تجعل البرنامج ينتظر المستخدم حتى يدخل أي نص.
إذاً هنا كأننا قلنا للكمبيوتر : " إحفظ الإسم الذي سيدخله المستخدم في المتغير name
".
بمعنى آخر, جعلنا قيمة المتغير name
تساوي النص الذي سيدخله المستخدم.
job = input.nextLine();
الجملة input.nextLine();
تجعل البرنامج ينتظر المستخدم حتى يدخل أي نص.
إذاً هنا كأننا قلنا للكمبيوتر : " إحفظ إسم الوظيف الذي سيدخله المستخدم في المتغير job
".
بمعنى آخر, جعلنا قيمة المتغير job
تساوي النص الذي سيدخله المستخدم.
age = input.nextInt();
الجملة input.nextInt();
تجعل البرنامج ينتظر المستخدم حتى يدخل عدد صحيح.
إذاً هنا كأننا قلنا للكمبيوتر : " إحفظ العمر الذي سيدخله المستخدم في المتغير age
".
بمعنى آخر, جعلنا قيمة المتغير age
تساوي العدد الذي سيدخله المستخدم.
System.out.print("\n----------- user info ------------\n"); System.out.print("Name: " +name+ "\n"); System.out.print("Job: " +job+ "\n"); System.out.print("Age: " +age );
هنا قمنا بعرض جميع المعلومات التي أدخلها المستخدم.
دالة إدخال البيانات Read في الخوارزميات - التمرين الثاني
أكتب برنامج يطلب من المستخدم إعطائه عدد صحيح و خزنه في المتغير N
.
بعدها يقوم بجمع جميع الأرقام من 1 إلى N
.
الـ S
هو المتغير الذي سيحتوي على مجموع كل الأرقام الموجودة من 1 إلى N
.
الـ i
هو المتغير ( العداد ) الذي يزيد واحد في كل دورة.
الـ N
هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.
الحلقة تبدأ من 1 و تتوقف عند N
, أي عند العدد الّي أدخله المستخدم.
import java.util.Scanner; public class Sum { public static void main (String[] args) { Scanner input = new Scanner(System.in); int S = 0; int N; System.out.print("Enter a value for N : "); N = input.nextInt(); for (int i=1; i <=N; i++) { S = S + i; } System.out.print("The sum is: " +S+ "\n" ); } }
الهدف من هذا السؤال أننا هذه المرة جعلنا النتيجة النهائية غير ثابتة. إذاً هنا النتيجة النهائية مرتبطة بالعدد الذي سيدخله المستخدم.
System.out.print("Enter a value for N : "); N = input.nextInt();
قيمة المتغير N
سيدخلها المستخدم, إذاً المستخدم هو الذي يعطي قيمة للمتغير N
و بالتالي هو من سيحدد عدد دورات الحلقة و القيمة النهائية للمتغير S
.
for (int i=1; i <=N; i++) { S = S + i; }
هنا في كل دورة من دورات الحلقة, سيتم إضافة قيمة العداد i
على قيمة المتغير S
.
System.out.print("The sum is: " +S+ "\n" );
هنا قمنا بعرض قيمة المتغير S
النهائية.
دالة إدخال البيانات Read في الخوارزميات - التمرين الثالث
أكتب برنامج يطلب من المستخدم إعطائه عدد صحيح ثم يعرض له ناتج جمع جميع الأرقام المفردة الموجودة بين 1 و العدد الذي أدخله المستخدم.
المتغير S
هو المتغير الذي سيحتوي على مجموع كل الأرقام المفردة الموجودة من 1 إلى N
.
الـ i
هو المتغير ( العداد ) الذي يزيد واحد في كل دورة.
الـ N
هو المتغير الذي يخزن العدد الذي سيدخله المستخدم.
الحلقة تبدأ من 1 و تتوقف عند N
, أي عند العدد الذي أدخله المستخدم.
كود الجافا
import java.util.Scanner; public class Sum_Odd_Numbers { public static void main (String[] args) { Scanner input = new Scanner(System.in); int S = 0; int N; System.out.print("Enter a value for N : "); N = input.nextInt(); for (int i=1; i <=N; i++) { if ( i%2 == 1 ) { S = S + i; } } System.out.print("The sum is: " +S+ "\n" ); } }
شرح الكود
System.out.print("Enter a value for N : "); N = input.nextInt();
قيمة المتغير N
سيدخلها المستخدم, إذاً المستخدم هو الذي يعطي قيمة للمتغير N
و بالتالي هو من سيحدد عدد دورات الحلقة و القيمة النهائية للمتغير S
.
for (int i=1; i <=N; i++) { if ( i%2 == 1 ) { S = S + i; } }
هنا في كل دورة من دورات الحلقة, إذا كانت قيمة العداد i
عبارة عن رقم مفرد سيتم إضافتها على قيمة المتغير S
.
System.out.print("The sum is: " +S+ "\n" );
هنا قمنا بعرض قيمة المتغير S
النهائية.
دالة إدخال البيانات Read في الخوارزميات - التمرين الرابع
المطلوب
أكتب برنامج يطلب من المستخدم إعطائه عددين صحيحين ثم يعرض له جميع الأرقام المزدوجة بين هذين العددين.
إرشادات
الـ a
هو المتغير الذي سنخزن فيه أول عدد يدخله المستخدم.
الـ b
هو المتغير الذي سنخزن فيه ثاني عدد يدخله المستخدم.
الـ i
هو المتغير ( العداد ) الذي يزيد واحد في كل دورة.
كود الجافا
import java.util.Scanner; public class Display_Even_Numbers { public static void main (String[] args) { Scanner input = new Scanner(System.in); int a; int b; System.out.print("Enter first number: "); a = input.nextInt(); System.out.print("Enter second number: "); b = input.nextInt(); System.out.print("\n"); System.out.print("The even numbers between " +a+ " and " +b+ " are: \n"); for (int i=a; i <=b; i++) { if ( i%2 == 0 ) { System.out.print(i+ "\n"); } } } }
شرح الكود
int a; int b;
سنخزن العدد الأول الذي سيدخله المستخدم في المتغير a
.
سنخزن العدد الثاني الذي سيدخله المستخدم في المتغير b
.
المتغيران a
و b
هما من سيحدد عدد دورات الحلقة.
System.out.print("Enter first number: "); a = input.nextInt(); System.out.print("Enter second number: "); b = input.nextInt();
هنا طلبنا من المستخدم إدخال العدد الأول و وضعناه في المتغير a
.
ثم طلبنا من المستخدم إدخال العدد الثاني و وضعناه في المتغير b
.
System.out.print("The even numbers between " +a+ " and " +b+ " are: \n");
هنا أخبرنا المستخدم أننا سنظهر له جميع الأعداد المزدوجة الموجودة بين الرقمين اللذين أدخلهما.
for (int i=a; i <=b; i++) { if ( i%2 == 0 ) { System.out.print(i+ "\n"); } }
عدد دورات الحلقة غير محدد و السبب أن الحلقة تتكرر من العدد الأول إلى العدد الثاني الذي أدخله المستخدم, أي ( من a
إلى b
).
هنا عندما تكون قيمة العداد i
مزدوجة سيتم عرضها, و بهذه الطريقة نكون قد عرضنا جميع الأرقام المزدوجة بين العددين اللذين أدخلهما المستخدم.
دالة إدخال البيانات Read في الخوارزميات - التمرين الخامس
المطلوب
أكتب برنامج يطلب من المستخدم إعطائه عددين صحيحين, ثم يقارن العددين اللذين قام المستخدم بإدخالهما ثم يخبره نتيجة المقارنة.
إرشادات
العدد الأول سنخزنه في المتغير a
.
العدد الثاني سنخزنه في المتغير b
.
النتيجة المطلوبة
لنفترض أن المستخدم أدخل العددين: 4 و 9.
لنفترض أن المستخدم أدخل العددين: 8 و 2.
لنفترض أن المستخدم أدخل العددين: 5 و 5.
كود الجافا
import java.util.Scanner; public class Compare_Two_Numbers { public static void main (String[] args) { Scanner input = new Scanner(System.in); int a; int b; System.out.print("Enter first number: "); a = input.nextInt(); System.out.print("Enter second number: "); b = input.nextInt(); System.out.print("Result: "); if ( a > b ) { System.out.print(a+ " > " +b+ "\n" ); } else if ( a < b ) { System.out.print(a+ " < " +b+ "\n" ); } else { System.out.print(a+ " = " +b+ "\n" ); } } }
شرح الكود
int a; int b;
قمنا بتجهيز المتغيرات a
و b
لتخزين الأعداد التي سيدخلها المستخدم عند تشغيل البرنامج.
System.out.print("Enter first number : "); a = input.nextInt(); System.out.print("Enter second number : "); b = input.nextInt();
هنا طلبنا من المستخدم إدخال عددين, و خزّنا العددين في المتغيرات a
و b
.
if ( a > b ) { System.out.print(a+ " > " +b+ "\n" ); } else if ( a < b ) { System.out.print(a+ " < " +b+ "\n" ); } else { System.out.print(a+ " = " +b+ "\n" ); }
بعد إدخال العددين, سيقوم البرنامج بمقارنة العددين كالتالي:
إذا كانت قيمة
a
أكبر من قيمةb
سينفذ أمر الطباعة الموجود في الشرط الأول.إذا كانت قيمة
a
أصغر من قيمةb
سينفذ أمر الطباعة الموجود في الشرط الثاني.إذا كانت قيمة
a
تساوي قيمةb
سينفذ أمر الطباعة الموجود في الشرط الثالث.
دالة إدخال البيانات Read في الخوارزميات - التمرين السادس
المطلوب
أكتب برنامج يطلب من المستخدم إعطائه ثلاثة أعداد صحيحة, ثم يقارن الأعداد التي قام المستخدم بإدخالها ثم يخبره فقط من هو العدد الأكبر بينهم.
العدد الأول سنخزنه في المتغير a
.
العدد الثاني سنخزنه في المتغير b
.
العدد الثالث سنخزنه في المتغير c
.
لا تستطيع مقارنة أكثر من عددين دفعة واحدة, لذا عليك مقارنة كل عددين على حدا حتى تصل للعدد الأكبر.
قارن العدد الأول مع العدد الثاني و خزن العدد الأكبر في متغير مؤقت, ثم قارن قيمة المتغير المؤقت مع العدد الثالث
import java.util.Scanner; public class Maximum { public static void main (String[] args) { Scanner input = new Scanner(System.in); int a; int b; int c; int max_ab; System.out.print("Enter first number : "); a = input.nextInt(); System.out.print("Enter second number : "); b = input.nextInt(); System.out.print("Enter third number : "); c = input.nextInt(); if ( a > b ) { max_ab = a; } else { max_ab = b; } if ( max_ab > c ) { System.out.print("the maximum is : " +max_ab+ "\n"); } else { System.out.print("the maximum is : " +c+ "\n"); } } }
int a; int b; int c;
قمنا بتجهيز المتغيرات a
و b
و c
لتخزين الأعداد التي سيدخلها المستخدم عند تشغيل البرنامج.
int max_ab;
المتغير max_ab
سنستخدمه لاحقاً عند مقارنة الأعداد الثلاثة التي سيدخلها المستخدم.
سنستخدمه فقط لتخزين العدد الأكبر بين أول رقمين يدخلهما المستخدم.
System.out.print("Enter first number : "); a = input.nextInt(); System.out.print("Enter second number : "); b = input.nextInt(); System.out.print("Enter third number : "); c = input.nextInt();
هنا طلبنا من المستخدم إدخال ثلاث أعداد, و وضعنا هذه الأعداد بالترتيب في المتغيرات a
و b
و c
.
if ( a > b ) { max_ab = a; } else { max_ab = b; }
بعد إدخال الأعداد الثلاثة, سيقوم البرنامج بمقارنة أول عددين تم إدخالهما, أي a
و b
و سيضع العدد الأكبر في المتغير max_ab
.
إذا كانت قيمة المتغير
a
أكبر من قيمة المتغيرb
, سيتم وضع قيمة المتغيرa
في المتغيرmax_ab
.إذا كانت قيمة المتغير
a
أصغر أو تساوي قيمة المتغيرb
, سيتم وضع قيمة المتغيرb
في المتغيرmax_ab
if ( max_ab > c ) { System.out.print("the maximum is : " +max_ab+ "\n"); } else { System.out.print("the maximum is : " +c+ "\n"); }
في الأخير سيقوم البرنامج بمقارنة العدد الأكبر بين أول عددين مع العدد الأخير, أي سيقارن قيمة المتغير max_ab
مع قيمة المتغير c
.
إذا كانت قيمة المتغير
max_ab
أكبر من قيمة المتغيرc
سيعرض للمستخدم أن قيمة المتغيرmax_ab
هي العدد الأكبر.إذا كانت قيمة المتغير
max_ab
أصغر من قيمة المتغيرc
أو تساويها سيعرض للمستخدم أن قيمة المتغيرc
هي العدد الأكبر.