عالم برمجةوتقنية الحاسوب C. P. W
740 subscribers
496 photos
55 videos
260 files
480 links
عالم الحاسوب برمجه وتقنيه وتطوير شرح كل ما يتطلب في مجال علوم الحاسوب والبرمجة
https://t.me/programming_C_w
قنات الجرافيكس @l_d_gh
#Digitalmarketing
#programming
#AI #CPA
#learn
التواصل معي @Eng_sharaf1
Download Telegram
السؤال إلي حلو مقتدى وباقر بس بالdo(مجموع عشر إعداد يدخلها المستخدم) :

import java.util.Scanner;public class ayat{
public static void main(String[] args) {
Scanner AA = new Scanner(System.in); System.out.println("enter 10 numbers:");
int sum=0,i=0; do{int n=AA.nextInt();
sum+=n; i++;
}while(i<10); System.out.println("sum="+sum);
}}
Q: write the code of this series with it sum for n term, using do...while :

2,6,18,54,...

أكتب حل هالمتسلسلة ويه الsum مالها لnمن الحدود بأستخدام do..while
Sol/

import java.util.Scanner;public class ayat{
public static void main(String[] args) { Scanner AA = new Scanner(System.in);
System.out.println("enter n:"); int n=AA.nextInt();
int j=2,i=1,sum=0; do{
System.out.print(j+","); sum+=j;
j*=3; i++;
}while(i<=n);
System.out.println("sum="+sum);
}}
⏹️ من اهم النصائح لتحسين جودة الكود بإذن الله 📚💚

اتباع المبادئ الصلبة
(SOLID Principles)
⬅️ لكتابة كود قابل للتوسع والصيانة بسهولة.

كتابة كود نظيف ومنظم
(Clean Code)
⬅️ حافظ على بساطة الكود واجعل أجزائه مفهومة و واضحة قدر الإمكان.

التوثيق الجيد
(Documentation)
⬅️ قم بكتابة تعليقات توضيحية وتوثيق الأكواد لتسهيل فهمها من قبل الآخرين.

إعادة استخدام الكود
(Code Reusability)
⬅️ اجعل الكود قابل لإعادة الاستخدام من خلال استخدام الدوال والوحدات او الفصول البرمجية.

التنسيق الصحيح للكود
(Code Formatting)
⬅️ اتبع معايير التنسيق الموحدة للكود واستخدم أدوات مثل Prettier وESLint لتحسين تنسيق الكود.

التسمية الواضحة والمتناسقة
(Clear Naming Conventions)
⬅️ استخدم أسماء متناسقة ومعبرة للمتغيرات، والدوال، والوحدات او الفصول البرمجية.

إجراء الاختبارات الدائمة
(Continuous Testing)
⬅️ تأكد من اختبار الكود بانتظام باستخدام وحدات او فصول الاختبار بشكل مستمر لتجنب الأخطاء.

المراجعة الدورية للكود
(Code Reviews)
⬅️ اطلب من زملائك مراجعة كودك بانتظام لتحسين جودته واكتشاف الأخطاء المحتملة.

تقليل التكرار
(Avoid Code Duplication)
⬅️ تجنب تكرار الكود عن طريق استخدام الدوال والوحدات او الفصول البرمجية المشتركة.

تحسين الأداء
(Performance Optimization)
⬅️ حلل أداء الكود وابحث عن طرق لتحسينه مثل تقليل استخدام الذاكرة وتحسين سرعة التنفيذ.

استخدام أنماط التصميم
(Design Patterns)
⬅️ استعن بأنماط التصميم المعروفة مثل Singleton وFactory وObserver لحل المشاكل المتكررة بطرق منظمة وفعالة.

التعلم المستمر
(Continuous Learning)
⬅️ استمر في تعلم أفضل الممارسات والأدوات الجديدة من خلال قراءة الكتب والمستندات والمقالات وحضور الدورات التدريبية سواء كانت حضورية في الواقع او على مواقع تعليمية.

⏺️ تحسين جودة الكود يتطلب الالتزام بالممارسات الجيدة والاستمرار في التعلم والتطوير. باتباع هذه النصائح، ستتمكن من كتابة كود أكثر احترافية وفعالية بإذن الرحمن.
عتـكبـر وتنسـئ“عتمشـي وتتخطـئ،عتفشـل وتنجـح، وسـاع مـا بكيـت عتضحـك ،وسـاع ماحسيـت بضـيقـة عتـجـي بـعـدها راحـة فـ لاتفقـدش الامـل كل شـيء شـوعـة عيجـي بـعـدة عـوض من البـاري لك 🔥👀
This media is not supported in the widget
VIEW IN TELEGRAM
1👍1
البوابات المنطقية هي عناصر أساسية في علم الحاسوب والهندسة الكهربائية، حيث تُستخدم لتنفيذ عمليات منطقية على القيم الرقمية. تُعتبر البوابات المنطقية اللبنات الأساسية للدوائر الرقمية، وتعمل على إدخال إشارات كهربائية (قيم رقمية) وإنتاج إشارات كهربائية أخرى كنتيجة للعملية المنطقية.

### أنواع البوابات المنطقية:

1. بوابة AND (و):
- العملية: تُخرج البوابة 1 (True) فقط عندما تكون كل الإشارات المدخلة 1.
- الجدول الزمني:
| A | B | A AND B |
|---|---|---------|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |

- الرسم:
!AND Gate

2. بوابة OR (أو):
- العملية: تُخرج البوابة 1 (True) عندما تكون على الأقل واحدة من الإشارات المدخلة 1.
- الجدول الزمني:
| A | B | A OR B |
|---|---|--------|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |

- الرسم:
!OR Gate

3. بوابة NOT (ليس):
- العملية: تُخرج البوابة عكس الإشارة المدخلة. إذا كانت الإشارة 1، تُخرج 0، وإذا كانت 0 تُخرج 1.
- الجدول الزمني:
| A | NOT A |
|---|-------|
| 0 | 1 |
| 1 | 0 |

- الرسم:
!NOT Gate

4. بوابة NAND (ليس AND):
- العملية: تُخرج 0 فقط عندما تكون كل الإشارات المدخلة 1، والعكس صحيح.
- الجدول الزمني:
| A | B | A NAND B |
|---|---|----------|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |

- الرسم:
!NAND Gate

5. بوابة NOR (ليس OR):
- العملية: تُخرج 1 فقط عندما تكون كل الإشارات المدخلة 0.
- الجدول الزمني:
| A | B | A NOR B |
|---|---|---------|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 0 |

- الرسم:
!NOR Gate

6. بوابة XOR (OR الحصرية):
- العملية: تُخرج 1 فقط عندما تكون واحدة من الإشارات المدخلة 1، وليس كلاهما.
- الجدول الزمني:
| A | B | A XOR B |
|---|---|---------|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0
### بحث عن البوصلة الكمية

#### 1. مقدمة
تعتبر البوصلة الكمية أداة مهمة في مجالات متعددة، قطرها واسع وتغطي تطبيقاتها في الفيزياء، الرياضيات، وعلم الفضاء. تهدف إلى قياس التوجه والتوجيه في الفضاء الكمي، حيث يتم تحديد الاتجاهات باستخدام مبادئ فيزياء الكم.

#### 2. تعريف البوصلة الكمية
البوصلة الكمية هي جهاز يستند إلى مبادئ ميكانيكا الكم، ويستخدم لقياس المجالات المغناطيسية أو لتحديد اتجاه الجسيمات في حالة كميه معينة. تعتمد في عملها على ظواهر مثل التشابك الكمي، تداخل الموجات، والتعديلات التي تحدث لجسيمات بصورة غير تقليدية.

#### 3. المبدأ العمل
تستخدم البوصلة الكمية ظواهر فيزيائية مثل:
- التشابك الكمومي: حيث يُمكن لجزيئات متشابكة أن تكون مترابطة بطريقة تؤثر فيها حالة واحدة على الحالة الأخرى، بغض النظر عن المسافة بينهما.
- مبدأ عدم اليقين: الذي ينص على أنه من المستحيل قياس موقع وسرعة الجسيم بدقة مطلقة في وقت واحد، مما يؤثر على دقة القياسات.

#### 4. التطبيقات
- الاستشعار الكمي: تستخدم في مجالات مثل الاستشعار عن بعد، الحقول المغناطيسية الضعيفة، والقياسات الدقيقة.
- التكنولوجيا الكمومية: مثل الحواسيب الكمومية، حيث تساعد في تحسين الخوارزميات وتمكين الحسابات السريعة.
- العلماء والأبحاث: تستخدم لفهم أفضل للحقول الكهرومغناطيسية في بيئات معينة (مثل الفضاء).

#### 5. فوائد البوصلة الكمية
- دقة عالية: يمكن أن توفر قياسات دقيقة للغاية في المجالات المغناطيسية.
- حساسية فائقة: القدرة على اكتشاف توزيعات المجال المغناطيسي الصغيرة التي قد لا تُرى بواسطة أدوات القياس التقليدية.

#### 6. التحديات
- التعقيد التقني: تتطلب تقنيات ومعرفة متقدمة لضبطها واستخدامها بشكل فعال.
- عرضية البيانات: تحتاج البيانات الناتجة إلى فحص معمق لتحليل النتائج بشكل موثوق.

#### 7. الخاتمة
البوصلة الكمية تمثل قفزة نوعية في علم القياس، مما يساعد على فتح آفاق جديدة في فهم العالم الكمي والتركيز على التطبيقات العملية المحتملة. تتطور التكنولوجيا بسرعة، مما يفتح الباب لمزيد من الابتكارات في هذا المجال.

إذا كان لديك أي أسئلة أو تحتاج إلى تفاصيل إضافية حول موضوع معين، فلا تتردد في طرحها!
أولويات العمليات الحسابية تحدد الترتيب الذي يجب أن يتم فيه تنفيذ العمليات الرياضية في التعبيرات الرياضية. إذا لم نتبع هذه الأولويات، قد نحصل على نتائج خاطئة. إليك قواعد أولويات العمليات الحسابية بالترتيب:

1. العمليات داخل الأقواس:
- إذا كان هناك أقواس في المعادلة، فإن العمليات داخل الأقواس تُعتبر دائماً أولاً. يمكنك استخدام أقواس متنوعة: ()، ، {}.

2. القوى:
- بعد الأقواس، تُحسب القيم المرفوعة للأس، (أي القوى).

3. العمليات الجبرية الأساسية:
- ضرب والقسمة (من اليسار إلى اليمين):
- يتم معالجة الضرب والقسمة بنفس الأولوية، لذا يجب أن يتم تنفيذها من اليسار إلى اليمين حسب ظهورها.
- جمع والطرح (من اليسار إلى اليمين):
- بعد تنفيذ الضرب والقسمة، يتم تنفيذ الجمع والطرح بنفس الأولوية، أيضاً من اليسار إلى اليمين.

### ترتيب الأولويات

يمكن تلخيص أولويات العمليات في حيلة بسيطة تُعرف بـ "PEMDAS"، والتي تعني:

- P: الأقواس (Parentheses)
- E: القوى (Exponents)
- MD: الضرب والقسمة (Multiplication and Division)
- AS: الجمع والطرح (Addition and Subtraction)

### مثال توضيحي:
لنفترض أن لدينا المعادلة التالية:

[ 3 + 6 \times (5 + 4) ÷ 3 - 7 \]

1. داخل الأقواس:
[ 5 + 4 = 9 \]
المعادلة تصبح:
[ 3 + 6 \times 9 ÷ 3 - 7 \]

2. الضرب والقسمة (من اليسار إلى اليمين):
- ضرب:
[ 6 \times 9 = 54 \]
المعادلة تصبح:
[ 3 + 54 ÷ 3 - 7 \]
- قسمة:
[ 54 ÷ 3 = 18 \]
المعادلة تصبح:
[ 3 + 18 - 7 \]

3. الجمع والطرح (من اليسار إلى اليمين):
- جمع:
[ 3 + 18 = 21 \]
- طرح:
[ 21 - 7 = 14 \]

### النتيجة النهائية:
[ 14 \]

بهذا تكون قد فهمت أولويات العمليات الحسابية وكيفية تطبيقها على المعادلات.
‏إسعى ورى حلمك التايه وخلك جزوم
‏لا تحسب حساب من ساعد ولا من جحد

‏مسافة السعي خلف الحلم ماهيب يوم
‏مسافة العمر ما بين المهد واللحد

‏وإن وقفوا ضدك اللي يحبطون العزوم
‏وقّف لهم وقفة اللي ما عليه من أحد .
👍2
import java.util.Scanner;

public class NewClass {
public static void main(String[ ] args) {
Scanner in = new Scanner(System.in);

//ادخل عمرك
System.out.print("Enter your age = ");
int age = in.nextInt();

int year = 2024;
// احسب سنة الميلاد
int birthYear = year - age;

//عرض سنة الميلاد
System.out.println("Your birth year = " + birthYear);
}
}
يا الله نبدأ الفانكشنز اوووووو منا ورايح ما اريدكم تكولون فانكشنز عمي هاي كلمة قديمة انام مثقفين تكولون ميثودز الفانكشين سوالف مرحلة اولى بعد
لا اشاقة اكو فروق بين معنى الفانكشن والميثود بامور معينة راح اشرحها عن قريب بنهاية الشرح اولا لازم نعرف شني الميثود
هي مجموعة من التعليمات التي تُستخدم لِتنفيذ مهمة معينة. تُعتبر الميثود جزءًا أساسيًا من البرنامج لان انتَ وانتِ ماتكدر تشغل برنامج بلا ميثود اصلا هسة تكلي شون؟

اكلك تتذكر c++ جنا نكول الدالة (الفنكشن) الاساسية والدوال الاحتياطية؟
اي بالضبط حتى مثلا نكتب

#include<iostream>
using namespace std;

int main()
{
cout << "Hi!" << endl;
return 0;
}
main هي نفسها الدالة الاساسية اما الان بالجافا فالميثود الاساسي هي نفسها من نجي لهالمثال

public class Main {
public static void main(String[] args) {
System.out.println ("hi");
}
}
فهنا ايضًا الماين هي الميثود الاساسي زين مقتدى شني الفائدة من الميثود "باستثناء الاساسية"
سؤال جميل واجابته
مثل ما تعلمناه سابقا العام بالc++ لمن نريد نجري عمليه رياضية لعدة اعداد لاكثر من مرة ران نتطر نكتب العملية اكثر من مرة ولكن بالفنكشن الوضع مختلف فقط بكل مرة تحتاج العملية فقط تقوم باستدعاء الفنكشن اللي مهمتها هوَّ القيام بالعملية الحسابية اللي جاي تشتغل عليها التوضيح
#include <iostream>
using namespace std;
int fact (int No)
{
int f=1;
for (int i=1;i<=No; i++)
f=f*i;
return f;
}
int main()
{int num;
cout << "enter the number you want to find its Factorial" << endl;
cin >> num;
cout << "Factorial of: "<<num<<" is : "<< endl;
cout<<fact (num);
return 0;
}
هنا بc++استخدمنا دالة الfactorial علمود نجري عملية معينة واصلا هاي الدابة مو خلاص استدعيتها لعنصر واحد وفقط لا اكدر اعرف عناصر واسويلها قراءة عليه
int d =?;
cout<< fact (d);
بحيث تكدر تسوي مالا نهائي من العمليات على نفس الدالة بدون ماتكرر عملياتها اما بالجافا
import java.util.Scanner;

public class Muqtada {

public static int fact(int n) {
int r = 1;
for (int i = 1; i <= n; i++) {
r *= i;
}
return r;
}

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter the number you want to find its factorial: ");
int num = sc.nextInt();
int result = fact(num);
System.out.println("Factorial of " + num + " is: " + result);
sc.close();
}
}
نفس الشغل تقريبا بنسبة 80% اللهم اكو فرق بعدة امور بسيطة
امثله اضافيه
-دالة تحقق من عدد اذا كان زوجي او فردي
import java.util.Scanner;

public class EvenOrOdd {
public static String evenOrOdd(int x) {
return (x % 2 == 0) ? "even" : "odd";
}

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the number: ");
int x = scanner.nextInt();
System.out.println(evenOrOdd(x));
}
}
2-دالة التحقق من عدد اذا كان موجب او سالب
import java.util.Scanner;

public class CheckPositiveNegative {
public static String check(int a) {
return (a >= 0) ? "positive" : "negative";
}

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the number: ");
int x = scanner.nextInt();
System.out.println(check(x));
}
}
3-دالة تبديل swap
import java.util.Scanner;

public class SwapNumbers {
public static void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
System.out.println("After swapping\na = " + a + "\nb = " + b);
}

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter a: ");
int a = scanner.nextInt();
System.out.print("Enter b: ");
int b = scanner.nextInt();
swap(a, b);
}
}
_داله ايجاد الرقم الاكبر بين n من الارقام
import java.util.Scanner;

public class MaximumNumber {
public static int maximum(int n, int firstNumber) {
Scanner scanner = new Scanner(System.in);
int max = firstNumber;

for (int i = 1; i < n; i++) {
int x = scanner.nextInt();
if (x > max) {
max = x;
}
}
return max;
}

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.println("How many numbers do you want the maximum number among them?");
int n = scanner.nextInt();

System.out.println("Enter the values:");
int firstNumber = scanner.nextInt();

int max = maximum(n, firstNumber);
System.out.println("The max = " + max);
}
}
دالة حساب مجموع و معدل لn من الدرجات

import java.util.Scanner;

public class GradesCalculator {
public static float sum(int n) {
Scanner scanner = new Scanner(System.in);
float sum = 0;
System.out.println("Enter the marks:");
for (int i = 0; i < n; i++) {
float a = scanner.nextFloat();
sum += a;
}
return sum;
}

public static float average(float sum, int n) {
return sum / n;
}

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.print("Enter the number of marks: ");
int n = scanner.nextInt();

float totalSum = sum(n);
float avg = average(totalSum, n);

System.out.println("Sum = " + totalSum);
System.out.println("Average = " + avg);
}
}
شرح اولي للمصفوفات

المصفوفة هي بنية بيانات تخزن مجموعة من العناصر من نفس نوع البيانات. يتم تخزين هذه العناصر في مواقع ذاكرة متجاورة ويمكن الوصول إليها باستخدام الفهرس (index). توفر المصفوفات طريقة لإدارة ومعالجة مجموعة كبيرة من البيانات بكفاءة.

يمكنك الإعلان عن مصفوفة عن طريق تحديد نوع بياناتها وعدد العناصر التي ستحتوي عليها. إليك بناء الجملة التالي:
data_type[ ] array_name = new data_type[array_size];
المصفوفات تبدأ فهرستها بصفر، مما يعني أنه يتم الوصول إلى العنصر الأول باستخدام الفهرس 0، والعنصر الثاني باستخدام الفهرس 1، وهكذا. يمكنك الوصول إلى عناصر المصفوفة وتعديلها باستخدام الأقواس المربعة:
array_name[index] = new_value;
مثال:
public class Main {
public static void main(String[] args) {
int[ ] x = new int[5];
x[0] = 10;
x[1] = 20;
System.out.println(x[0]);
x[2] = 30;
x[3] = 40;
x[4] = 50;
}
}
1. int[ ] x = new int[5];

يعلن هذا السطر عن مصفوفة أعداد صحيحة تسمى x بحجم 5. وهذا يعني أن x يمكنها تخزين خمس قيم صحيحة. ومع ذلك، في هذه المرحلة، تكون القيم الموجودة في المصفوفة غير مهيأة، مما يعني أنها تحتوي على بيانات عشوائية.
2. x[0] = 10;
هنا، نقوم بتعيين القيمة 10 للعنصر الأول في المصفوفة x. ، تكون المصفوفات مفهرسة بصفر، لذلك يشير x[0] إلى العنصر الأول.
3. x[1] = 20;
وبالمثل، فإننا نخصص القيمة 20 للعنصر الثاني في المصفوفة x، وهو x[1].
4. System.out.println(x[0]);
يطبع هذا السطر قيمة العنصر الأول من المصفوفة x، وهو 10، إلى شاشة المخرجات. ويستخدم (object) System.out لإخراج القيمة.
5. x[2] = 30;, x[3] = 40;, and x[4] = 50;
نقوم بتعيين القيم 30، 40، و50 للعناصر الثالث، الرابع، والخامس في المصفوفة x على التوالي.

مثال إضافي:
public class Main {
public static void main(String[] args) {
int[ ] x = new int[5];
x[0] = 10;
x[1] = 5;
x[4] = x[0] + x[1];
System.out.println(x[4]);
}
}
المخرجات:
15
الإعلان عن مصفوفة بحجم ثابت:
public class Main {
public static void main(String[] args) {
final int t = 5;
int[ ] x = new int[t];
}
}
يعلن هذا الكود عن مصفوفة أعداد صحيحة x بحجم 5، ويتم تحديد الحجم بواسطة الثابت t، الذي تم ضبطه على 5. وتضمن الكلمة المفتاحية final عدم إمكانية تغيير t لاحقًا في البرنامج.

الإعلان عن مصفوفة مع قيم أولية:
public class Main {
public static void main(String[ ] args) {
int[] x = {1, 4, 8, 7, 2};
System.out.println(x[0]);
}
}
يعلن هذا الكود عن مصفوفة أعداد صحيحة x بحجم 5 ويقوم بتهيئتها بالقيم 1 و4 و8 و7 و2. ثم يقوم بطباعة العنصر الأول من المصفوفة، وهو 1، إلى شاشة المخرجات.

مصفوفة بدون قيم أولية:
public class Main {
public static void main(String[] args) {
int[ ] x = new int[5];
System.out.println(x[3]);
}
}
يعلن هذا الكود عن مصفوفة أعداد صحيحة x بحجم 5 ولكنه لا يقوم بتهيئة عناصرها. لذلك، عند محاولة طباعة قيمة العنصر الرابع، سيتم عرض القيمة الافتراضية وهي 0.

مصفوفة مع قيمة أولية واحدة:
public class Main {
public static void main(String[] args) {
int[ ] x = new int[5];
x[0] = 0;
System.out.println(x[3]);
}
}
يعلن هذا الكود عن مصفوفة أعداد صحيحة x بحجم 5 ويقوم بتهيئة العنصر الأول إلى 0. ثم يقوم بطباعة قيمة العنصر الرابع من المصفوفة، وهو 0، إلى شاشة المخرجات.

مصفوفة مع بعض القيم الأولية:
public class Main {
public static void main(String[] args) {
int[] x = {1, 2, 3};
System.out.println(x[3]);
}
}
يعلن هذا الكود عن مصفوفة أعداد صحيحة x بحجم 5 ويقوم بتهيئتها بالقيم 1 و2 و3. ثم يقوم بطباعة قيمة العنصر الرابع من المصفوفة، وهو 0، إلى شاشة المخرجات.
هجي اضبط
import java.util.Scanner;

public class moqtada {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        System.out.print("Enter the current year: ");
        int year = in.nextInt();

        System.out.print("Enter your age =  ");
        int age = in.nextInt();

        int birthYear = year - age;

        System.out.println("Ur year =  " + birthYear);
    }
}
.
.
.
return
.
.
.
استخدام return يعيد قيمة من الفانكشن إلى المكان الذي تم استدعاؤه منه. نستخدم return عندما نحتاج إلى إعادة نتيجة معينة من الفانكشن بعد تنفيذ بعض العمليات. خلينا نستعرض بعض الأمثلة لشرح متى وكيف نستخدم return:

🌿مثال 1: تجمع عددين وتعيد الناتج
public class Main {
public static void main(String[] args) {
int sum = add(5, 10);
System.out.println(" sum : " + sum);
}

public static int add(int a, int b) {
return a + b;
// تعيد مجموع العددين
}
}
هنا، الفانكشن add تأخذ عددين كمدخلات وتعيد ناتج جمعهما باستخدام return.

🌿🌿 مثال 2: فانكشن تتحقق من عدد زوجي
public class Main {
public static void main(String[] args) {
boolean isEven = checkEven(4);
System.out.println("Is the number even? " + isEven);
}

public static boolean checkEven(int number) {
return number % 2 == 0; // تعيد true إذا كان العدد زوجي و false إذا لم يكن كذلك
}
}
هنا، الفانكشن checkEven تتحقق إذا كان العدد زوجي وتعيد true إذا كان كذلك، وfalse إذا لم يكن كذلك.






🌿🌿🌿🌿متى لا نحتاج لاستخدام return
إذا كانت الفانكشن لا تحتاج إلى إعادة قيمة، يمكننا استخدام النوع void. مثال على ذلك:

public class Main {
public static void main(String[] args) {
printHello();
}

public static void printHello() {
System.out.println("Hello, World!"); // لا تعيد أي قيمة
}
}
هنا، الفانكشن printHello لا تعيد أي قيمة ولذلك نستخدم النوع void.

🌿مثال ثاني
داله تبديل رقمين
import java.util.Scanner;

public class Main {
// تعريف الفانكشن لتبادل قيمتين
public static void see(int a, int b) {
int sw;
sw = a;
a = b;
b = sw;
System.out.println("after swapping");
System.out.println("a = " + a);
System.out.println("b = " + b);
}

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a, b;
System.out.print("enter a and b\n");
System.out.print("a = ");
a = in.nextInt();
System.out.print("b = ");
b = in.nextInt();
see(a, b);
}
}
هنا، الفانكشن see لا تعيد أي قيمة ولذلك نستخدم النوع void

***
الخلاصه

🌿عندما نستخدم return في الفانكشن، يعني ذلك أننا نريد إعادة قيمة إلى المكان الذي تم استدعاء الفانكشن منه. يتم إنهاء تنفيذ الفانكشن عند تنفيذ return. هذا مفيد عندما نحتاج إلى نتيجة معينة من الفانكشن لنستخدمها في مكان آخر.

🌿عدم استخدام return (استخدام void)
عندما نستخدم النوع void للفانكشن، يعني ذلك أن الفانكشن لا تعيد أي قيمة. هذا مناسب عندما نريد تنفيذ بعض العمليات فقط دون الحاجة إلى إعادة قيمة


🌿🌿🌿متى نستخدم return ومتى لا نستخدمه؟
- استخدام return: عندما نحتاج إلى إعادة نتيجة معينة من الفانكشن لنستخدمها في مكان آخر.
- عدم استخدام return (استخدام void): عندما نريد تنفيذ بعض العمليات فقط دون الحاجة إلى إعادة قيمة.
إليك برنامج بلغة C++ يغطي المتطلبات التي طلبتها. سأقوم أولاً بتعريف هيكل بيانات لتخزين معلومات الطلاب، ثم سأكتب الدوال المطلوبة لتنفيذ كل وظيفة.

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

struct Student {
string name;
float grade;
};

// دالة لطباعة كل الطلاب ودرجاتهم
void printAllStudents(const vector<Student>& students) {
cout << "قائمة الطلاب ودرجاتهم:\n";
for (const auto& student : students) {
cout << "الاسم: " << student.name << " - الدرجة: " << student.grade << endl;
}
}

// دالة لطباعة الطلاب الناجحين فقط
void printPassingStudents(const vector<Student>& students, float passingGrade) {
cout << "\nالطلاب الناجحين:\n";
for (const auto& student : students) {
if (student.grade >= passingGrade) {
cout << "الاسم: " << student.name << " - الدرجة: " << student.grade << endl;
}
}
}

// دالة لطباعة الطلاب الراسبين
void printFailingStudents(const vector<Student>& students, float passingGrade) {
cout << "\nالطلاب الراسبين:\n";
for (const auto& student : students) {
if (student.grade < passingGrade) {
cout << "الاسم: " << student.name << " - الدرجة: " << student.grade << endl;
}
}
}

// دالة لطباعة الطالب الحاصل على أعلى درجة
void printTopStudent(const vector<Student>& students) {
if (students.empty()) return;
Student topStudent = students[0];

for (const auto& student : students) {
if (student.grade > topStudent.grade) {
topStudent = student;
}
}

cout << "\nالطالب الحاصل على أعلى درجة:\n";
cout << "الاسم: " << topStudent.name << " - الدرجة: " << topStudent.grade << endl;
}

// دالة لطباعة الطلاب الراسبين في القرآن (يمكن اعتبار أنهم راسبون إذا كانت درجتهم أقل من 60 مثلاً)
void printFailingInQuran(const vector<Student>& students) {
const float quranPassingGrade = 60.0; // فرضي
cout << "\nالطلاب الراسبين في القرآن:\n";
for (const auto& student : students) {
if (student.grade < quranPassingGrade) {
cout << "الاسم: " << student.name << " - الدرجة: " << student.grade << endl;
}
}
}

// دالة لطباعة تقدير الطلاب بناءً على درجاتهم
void printGrades(const vector<Student>& students) {
cout << "\nتقدير الطلاب:\n";
for (const auto& student : students) {
string grade;
if (student.grade >= 90) grade = "ممتاز";
else if (student.grade >= 80) grade = "جيد جداً";
else if (student.grade >= 70) grade = "جيد";
else if (student.grade >= 60) grade = "مقبول";
else grade = "راسب";

cout << "الاسم: " << student.name << " - الدرجة: " << student.grade << " - التقدير: " << grade << endl;
}
}

int main() {
vector<Student> students = {
{"أحمد", 95},
{"مريم", 82},
{"علي", 58},
{"سارة", 76},
{"يوسف", 40},
{"فاطمة", 61}
};

printAllStudents(students);
printPassingStudents(students, 60.0);
printFailingStudents(students, 60.0);
printTopStudent(students);
printFailingInQuran(students);
printGrades(students);

return 0;
}


### ملاحظات حول البرنامج:
1. هيكل بيانات Student: يحتوي على الاسم والدرجة.
2. الدوال: تم تعريف دوال لكل من الوظائف المطلوبة مثل طباعة جميع الطلاب، الناجحين، الراسبين، الطالب الحاصل على أعلى درجة، والراسبين في القرآن.
3. تقدير الطلاب: يتم وضع شروط لتحديد تقدير كل طالب حسب درجته.
4. النقطة القابلة للتغيير: يمكنك تغيير درجة النجاح في وظيفة printFailingInQuran وفقًا للمعايير التي ترغب بها.


@yahfsh
2
ملخص المحاضره البرمجه علوم الحاسوب صباحي يوم 16/10/2024
اخذنا
التحويل الضمني. هو تحويل يحدث تلقائيًا عندما يكون من الواضح أنه لن يحدث فقدان للمعلومات. يعني، لما تحول نوع بيانات صغير إلى نوع بيانات أكبر. مثلا تحويل عدد صحيح (int) إلى عدد عشرى مزدوج (double):

int a = 5;
double b = a; // التحويل هنا يتم تلقائيًا من int إلى double
أما التحويل الصريح، هو تحويل تتطلب فيه الصيغة الصريحة لأنه قد يؤدي إلى فقدان بيانات. مثلا، تحويل عدد عشرى مزدوج (double) إلى عدد صحيح (int):

double c = 5.5;
int d = (int) c; // هنا التحويل يتطلب الصيغة الصريحة وسيكون الناتج 5 وليس 5.5
ولازم نعرف شوكت نستفاد منهن
****
اخذنا while
و do while و for وشنو الفرق بينهن ومتى نستخدمهن وهمين اخذنا امثله شلون نتبع الفور وهسه اشرحلهن
المثال الاول
import java.util.Scanner;

public class mg {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int val, i, j;
for (i = 0, j = 10, val = 0; i< 10 && j > 5; i++, j--)
val += i - j;
System.out.println("val = " + val);}}


i = 0
j = 10
val = 0

شرط التكرار:

i < 10 && j > 5
طالما أن الشرط صحيح، تستمر الحلقة.

التكرار:

في كل مرة، يتم تحديث i بزيادة 1 (i++) وj بنقصان 1 (j--).
يتم حساب val كما يلي: val += i - j في كل دورة
المثال الثاني
for (sum = 0, cnt = 0; cnt < 10; System.out.print("Enter number:"),
n = scanner.nextInt(), sum += n, cnt++) {
System.out.println("sum= " + sum);
}

التهيئة:
- sum = 0: متغير لتخزين المجموع.
- cnt = 0: عداد للتحكم بعدد التكرارات.

شرط التكرار:
- cnt < 10: تستمر الحلقة طالما أن العداد أقل من 10.

الخطوات في كل دورة (في الجزء الذي يزيد العداد):
1. إدخال العدد: System.out.print("Enter number:") ثم قراءة n من المستخدم.
2. تحديث المجموع: sum += n.
3. زيادة العداد: cnt++.

جسم الحلقة:
- يطبع: System.out.println("sum= " + sum) في كل دورة بعد تحديث المجموع.



قبل الدخول إلى الحلقة:
- sum = 0
- cnt = 0

الدورة الأولى:
- يطبع: Enter number:
- يدخل المستخدم العدد، وليكن n = 5.
- تحديث sum: sum = 0 + 5 = 5.
- زيادة cnt: cnt = 1.
- طباعة: sum= 5.

الدورة الثانية:
- يطبع: Enter number:
- يدخل المستخدم العدد، وليكن n = 3.
- تحديث sum: sum = 5 + 3 = 8.
- زيادة cnt: cnt = 2.
- طباعة: sum= 8.

التكرار:
تتكرر هذه العملية حتى تصل إلى 10 دورات.

مثال

إذا كانت القيم المدخلة من المستخدم كالتالي:دخلت ارقام عشوائيه
Enter number: 5
sum= 5
Enter number: 3
sum= 8
Enter number: 2
sum= 10
Enter number: 1
sum= 11
Enter number: 4
sum= 15
Enter number: 6
sum= 21
Enter number: 7
sum= 28
Enter number: 8
sum= 36
Enter number: 9
sum= 45
Enter number: 0
sum= 45
انتهاء الحلقة:
بعد إدخال 10 أعداد، يصبح cnt = 10، فينتهي التكرار.

- الحلقة تطلب من المستخدم إدخال عدد في كل مرة، وتضيفه إلى sum.
- بعد 10 مرات (عندما يصبح cnt == 10)، تنتهي الحلقة
###ضروري تفهم طريقه تتبع. الفور لان كال احتمال اجيب الكم سؤال سواء بالمد او الفاينل ويريد الاخراج