اذهب إلى المحتوى

سمير عبود

الأعضاء
  • المساهمات

    3552
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    34

كل منشورات العضو سمير عبود

  1. مرحباً .. يُمكنك عمل المطلوب من خلال البرنامج التالي: #include <iostream> using namespace std; // تعريف بنية العقدة التي تتكون منها القائمة المترابطة struct node { int data; // البيانات عبارة عن أعداد node *next; // مؤشر على العقدة القادمة }; // دالة مساعدة لطباعة البيانات بشكل معاكس إنطلاقا من عقدة ما void printReverse(node *head) { // شرط التوقف if (head == NULL) return; printReverse(head->next); // إستعمال الطريقة التعاودية cout << head->data << " "; } // تعريف صنف القائمة المترابطة class LinkedList { private: node *head,*tail; public: LinkedList() // الدالة البانية { head = NULL; tail = NULL; } void addNode(int n) // دالة لإضافة عقدة جديدة للقائمة { node *tmp = new node; tmp->data = n; tmp->next = NULL; if(head == NULL) { head = tmp; tail = tmp; } else { tail->next = tmp; tail = tail->next; } } void printList() // طباعة بيانات القائمة المترابطة { node *n = this->head; while (n != NULL) { cout << n->data << " "; n = n->next; } } void printReverseList() // طباعة بيانات القائمة المترابطة بشكل عكسي { printReverse(this->head); // إستعمال الدالة المساعدة السابقة مع تمرير رأس القائمة لها } void fillList(int total) // ملأ القائمة بعدد محدد من العناصر { int data; for (int i = 0; i < total; ++i) { cout << "data " << i << " = " << endl; cin >> data; addNode(data); // إستعمال دالة الإضافة } } }; int main() { LinkedList l; // تعريف قائمة مترابطة l.fillList(6); // ملأ القائمة ب 6 عناصر يُمكنك تغيير العدد حسب ما تريد l.printList(); // طباعة عناصر القائمة بشكلها الطبيعي cout << endl; l.printReverseList(); // طباعة عناصر القائمة بالشكل العكسي return 0; } و هذه نتيجة لتجربة البرنامج: يُمكنك تجربة البرنامج من خلال الرابط التالي: إضغط هنا للإطلاع على تفاصيل أكثر حول بنى أو هياكل المُعطيات أدعوك إلى قراءة توثيق موسوعة حسوب حول الموضوع: القوائم المترابطة توثيق موسوعة حسوب و بنى المعطيات ( Data Structure ) توثيق موسوعة حسوب بالتوفيق
  2. مرحباً ... حتى تحافظ المنصة على حقوق الطرفين تمنع التواصل خارج المنصة فإذا ما حدث خلاف بين الطرفين يُمكن الرجوع إلى صفحة نقاش المشروع و تسوية الخلاف. لذلك تجنب قدر المستطاع التواصل مع العميل خارج المنصة حتى تضمن حقوقك
  3. لاحظ أنك قمت بكتابة الدالة average داخل دالة main و هذا خطأ. قم بإضافة الإقتران average مباشرة في الكلاس MyCalculator مثل ماهو موضح في الأكواد السابقة
  4. مرحباً ... المطلوب فقط حساب معدل القيم الخمسة لذلك يمكنك عمل ذلك من خلال الأكواد التالية public class MyCalculator { int input1 = 10; int input2 = 20; int input3 = 30; int input4 = 40; int input5 = 50; public float average() { // TODO: write java code to calculate the average for all input variables float avg = (input1 + input2 + input3 + input4 + input5) / 5; return avg; } } بالتوفيق
  5. مرحباً ... إستدعاء الدالة ضمن الكلاس نفسه في دالة أخرى يكون ببساطة بالشكل التالي: لغة جافا مثلاً: class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } // في هذه الدالة قمنا بإستخدام الدوال getName و getAge public String toString() { return "Person name: " + this.getName() + ", age => " + this.getAge(); } } public class Main { public static void main(String[] args) { Person p = new Person("Samir", 25); System.out.println(p); // سيتم إستدعاء الدالة toString } } يُمكنك التجربة من خلال هذا الرابط لغة c++ مثلاً: #include <iostream> using namespace std; class Person { private: string name; int age; public: Person(string name, int age) { this->name = name; this->age = age; } const string &getName() const { return name; } void setName(const string &name) { Person::name = name; } int getAge() const { return age; } void setAge(int age) { Person::age = age; } // في هذه الدالة قمنا بإستخدام الدوال getName و getAge void putData() { cout << "Person Name: " << this->getName() << ", age => : " << this->getAge() << endl; } }; int main() { Person *p = new Person("Samir", 25); p->putData(); return 0; } يُمكنك التجربة من خلال هذا الرابط لغة جافاسكربت مثلاً: class Rectangle { constructor(height, width) { this.height = height; this.width = width; } // Getter get area() { return this.calcArea(); // إستدعاء التابع calcArea } // Method calcArea() { return this.height * this.width; } } const rec = new Rectangle(5, 10); document.querySelector('p').innerText = rec.area; // وضع مساحة المستطيل في الفقرة يُمكنك تجربة المثال من خلال هذا الرابط بالتوفيق
  6. أقصد الأكواد التي يتم تنفيذها إلى أن يحدث الخطأ حتى نعرف مكان وجوده .
  7. مرحباً أحمد ... هل بإمكانك تجربة الخطوات إلى أن يحدث الخطأ و مشاركة الكود الذي يتم تنفيذه في كل مرحلة .
  8. مرحباً... يُمكن عمل البرنامج بهذه الطريقة ستجد الشرح بالتعليقات: #include <iostream> #include <vector> using namespace std; template <typename T> // من أجل إستقبال أي نوع مصفوفة سواء نصية أو عددية أو أي نوع // دالة مُساعدة لقراءة عناصر مصفوفة void readArray(T *arr, int n) { for (int i = 0; i < n; ++i) { cout << "Enter El[" << i << "]: " << endl; cin >> arr[i]; } } template <typename T> // من أجل إستقبال أي نوع مصفوفة سواء نصية أو عددية أو أي نوع // دالة مُساعدة لطباعة عناصر مصفوفة void printArray(T *arr, int n) { cout << "["; for (int i = 0; i < n - 1; ++i) { cout << arr[i] << ", "; } cout << arr[n-1] << "]"; } template <typename T> // من أجل إستقبال أي نوع مصفوفة سواء نصية أو عددية أو أي نوع // دالة البحث في مصفوفة من أي نوع // تستقبل مصفوفة من النوع T و تبحث عن معلومة من نوع T // ترجع الدالة vector يضم جميع أماكن المعلومة في المصفوفة std::vector<int> search(T *arr, int n, T search) { std::vector<int> result; for (int i = 0; i < n; ++i) { // اللف حول عناصر المصفوفة if (arr[i] == search) { // في حالة تطابق العنصر الحالي من المصفوفة مع المعلومة التي نبحث عنها result.push_back(i); // نقوم بتخزين الموضع في ال vector } } return result; // نرجع ال vector } int main() { /* المثال الأول حيث عناصر المصفوفة عبارة عن أعداد */ int n_int; // تعريف متغير عدد لتخزين طول المصفوفة العددية cout << "Enter size of array: " << endl; // طباعة عبارة للمًستخدم تُعلمه بإدخال طول المصفوفة العددية cin >> n_int; // قراءة مُدخلات المُستخدم int array[n_int]; // تعريف مصفوفة عددية readArray(array, n_int); // قراءة عناصر المصفوفة العددية printArray(array, n_int); // طباعة عناصر المصفوفة التي أدخلها المًستخدم int s_int; // تعريف مُتغير لتخزين العدد الذي نريد البحث عنه cout << "\nEnter search: " << endl; // طباعة عبارة للمًستخدم تُعلمه بإدخال العدد الذي يريد البحث عنه في المصفوفة cin >> s_int; // قراءة العدد الذي سنبحث عنه std::vector<int> result = search(array, n_int, s_int); // إستدعاء دالة البحث و تمرير المُعاملات المطلوبة لها و تخزين الراجع cout << "\nresult: "; // طباعة عبارة لنتائج البحث printArray(&result[0], result.size()); // طباعة عناصر مصفوفة البحث /* * =============================================================================== * */ /* المثال الثاني حيث عناصر المصفوفة عبارة عن سلاسل نصية */ int n_string; // تعريف متغير عدد لتخزين طول المصفوفة النصية cout << "\nEnter size of array: " << endl; // طباعة عبارة للمًستخدم تُعلمه بإدخال طول المصفوفة النصية cin >> n_string; // قراءة مُدخلات المُستخدم string array_string[n_string]; // تعريف مصفوفة نصية readArray(array_string, n_string); // قراءة عناصر المصفوفة النصية printArray(array_string, n_string); // طباعة عناصر المصفوفة التي أدخلها المًستخدم string s_string; // تعريف مُتغير لتخزين السلسلة النصية الذي نريد البحث عنها cout << "\nEnter search: " << endl; // طباعة عبارة للمًستخدم تُعلمه بإدخال السلسلة النصية الذي يريد البحث عنها في المصفوفة cin >> s_string; // قراءة السلسلة النصية الذي سنبحث عنها std::vector<int> result_string = search(array_string, n_string, s_string); // إستدعاء دالة البحث و تمرير المُعاملات المطلوبة لها و تخزين الراجع cout << "\nresult: "; // طباعة عبارة لنتائج البحث printArray(&result_string[0], result_string.size()); // طباعة عناصر مصفوفة البحث } تم التجربة على مثالين في حالة مصفوفة عددية: و في حالة مصفوفة سلاسل نصية: تم إستخدام مفهوم ال Generics لجعل الدالة search تقبل أي نوع من أنواع البيانات. يُمكنك تجربة البرنامج من خلال: الرابط التالي بالتوفيق
  9. مرحباً مروان .. للحماية من ثغرة SQL injection يُنصح دائما بإستعمال prepared statment و parameterized queries فمثلا إن كنت تستخدم PDO تستعمل الشيفرة التالية: <?php $stmt = $pdo->prepare('SELECT * FROM table_name WHERE name = :name'); $stmt->execute([ 'name' => $name ]); و إن كنت تستخدم MySQLi تستعمل الشيفرة التالية: <?php $stmt = $dbConnection->prepare('SELECT * FROM table_name WHERE name = ?'); $stmt->bind_param('s', $name); // 's' من أجل تعيين نوع المتغير => string $stmt->execute(); و للحماية من xss أي Cross-Site Scripting يُنصح بإستعمال الفلترة و التعقيم للبيانات التي تأتي من المُستخدم قبل تخزينها في قاعدة البيانات هناك قاعدة تقول لا تثق ابدا ً بمدخلات المستخدم موضوع الحماية كبير جداً و إذا كنت تستخدم pure php بدون اي إطار عمل فسيتوجب عليك البحث عن الثغرات المشهورة و كيفية تجاوزها و تطبيق الحلول أما إن كنت تستخدم إطار عمل فستجد أنه قد تم توفير حلول لمُعظم الثغرات المشهورة من طرف مطورين الإطار بالتوفيق
  10. مرحباً خليل .. هناك العديد من الخيارات لبرمجة تطبيقات أندرويد أو تطبيقات موبايل بشكل عام: بناء تطبيقات أصيلة ( native ) بإستخدام اللغات الأصلية فمثلا للأندرويد جافا أو كوتلن و لل iOS سويفت أو أوبجكتيف سي بناء تطبيقات أصيلة بإستعمال أحد الأطر او ( frameworks ) مثل : React Native أو Flutter أو Xamarin بحيث ستقوم بكتابة الأكواد باللغة التي بُني عليها الإطار فمثلا React Native ستستخدم JavaScript و Futter لغة Dart و Xamarin لغة c# بحيث عند عملية البناء ستستخدم أدوات المنصة لتصدير التطبيق و سيتم تحويل الأكواد إلى أكواد أصيلة ( نتيف ) و لهذا يُسمى هذا النوع من التطبيقات ب ( compiled app ) و أهم ميزة لهذا النوع هو الحصول على تطبيقات بنفس أداء التطبيقات الأصيلة تقريباً و تكون متعددة المنصة أي للأندرويد و ال iOS أي cross platform إنطلاقا من كتابة كود واحد بناء تطبيقات هجينة بإستخدام منصة Cordova أو Ionic و هذه المنصات هي منصات cross platform أي ستقوم بكتابة كود واحد و هذا الكود يعمل على أنظمة متعددة سواء أندرويد أو iOS . لكن التطبيقات التي يتم بناؤها تكون عبارة عن تطبيق ويب أي أن التطبيق في الأخير سيعمل على الهاتف و كأنه تطبيق هاتف عادي لكن في الحقيقة هو عبارة عن صفحات ويب أو تطبيق ويب يعمل على المتصفح . و إن صح التعبير فمنصة cordova تقوم بتغليف تطبيق الويب بطبقة تُسمى (WebView) حتى يعمل على الهاتف و كأنه تطبيق عادي. العيب في هذه التطبيقات أنها أبطأ مقارنةً بالنوعين السابقين خصوصا في التطبيقات التي تحتاج إلى التعامل مع موارد و مُحسسات الهاتف لكن ما يٌميزها أنك لن تحتاج إلى تعلم لغات أخرى فقط html5 و CSS و جافاسكربت بالإضافة إلى كيفية التعامل مع منصة Cordova أنصحك بمشاهدة هذا المقطع لتعرف الفرق بين التطبيقات الأصيلة و التطبيقات الهجينة في حالتك يُمكنك الإتجاه صوب التطبيقات الهجينة لكن تحتاج تعلم منصة cordova و ستستخدم فقط اللغات التي بحوزتك html css javascript لبناء تطبيق موبايل و تحتاج إلى لغة بايثون لبناء Api أو web service الذي من خلاله تستطيع التواصل مع قاعدة البيانات أيضا يُمكنك التوجه نحو تعلم إطار react native فهو مبني بلغة جافاسكربت و عند بنائك لتطبيقات جوال بإستعمال هذا الإطار ستحتاج لغة جافاسكربت أيضا يوجد إطار native script فهو إطار مبني بلغة جافاسكربت يساعدك في بناء تطبيقات جوال. بالتوفيق
  11. مرحباً .. مصطلح fork هو فرع من الأصل و يعني أخذ نُسخة من مشروع أو كود برمجي و التعديل عليه بما يُناسب إحتياجاتك. جميع المواقع التي توفر خاصية نشر أكواد برمجية أو مشاريع برمجية تُوفر أيضا هذه الميزة أي fork بحيث يُمكن للمطورين نسخ هذه الأكواد بكبسة زر دون الحاجة إلى النسخ اليدوي و البدأ في التعديل عليها كإضافة ميزات جديدة أو تعديل ميزات موجودة في الكود المصدري شرط أن يكون المشروع عاماً و ليس خاصاً أي مُتاح للجميع . أما ال fork في أنظمة التشغيل فتُستعمل لإنشاء نُسخة من البرنامج قيد التنفيذ أو التشغيل او ما يُسمى بِ ( proccess ) بحيث يُصبح لدينا 2 proccess الأول هو الأب و الثاني هو الإبن و يتم تنفيذهما معاً. لغة c توفر دالة fork يُمكن إستعمالها في إنشاء proccess جديد و هذا مثال بسيط لإستعمالها: #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { fork(); // هنا تم إنشاء نُسخة من proccess قيد التنفيذ printf("مرحباً!\n"); // طباعة كلمة مرحباً return 0; // إنهاء البرنامج } و هذا البرنامج سيطبع مرحباً مرتين المرة الأولى عند تنفيذ ال proccess الأب و المرة الثانية للإبن يُمكنك تجربة هذا المثال من خلال هذا: الرابط و للدالة fork أهمية كبيرة في نُظم التشغيل و إنشاء العمليات بالتوفيق
  12. مرحباً ... إذا كنت تريد حفظ نتيجة إستعلام في ملف txt يُمكنك إستعمال الدالة التالية : <?php function save_result($result, $file_path) { $json = json_encode($result); // تحويل نتيجة الإستعلام إلى صيغة json $file = fopen($file_path, 'w'); // فتح الملف بصيغة w و التي تعني أننا نريد الكتابة فيه fwrite($file, $json); // كتابة السجلات في الملف fclose($file); // إغلاق الملف } و يُمكنك أيضاً إستعمال هذه الدالة لإسترجاع السجلات المُخزنة في الملف : <?php function get_result($file_path) { $file = fopen($file_path, 'r'); // فتح الملف للقراءة $result = json_decode(fread($file, filesize($file_path))); // عمل decode لنتيجة القراءة حتى يتم تحويل من json إلى associative array fclose($file); // إغلاق الملف return $result; } و في الملف المُرفق مثال عن إستعمال الدالتين : read_write_file.zip بالتوفيق
  13. مرحباً @بدر الزهراني3 ... يُمكنك التواصل مع الدعم الفني من خلال هذا الرابط : إضغط هنا و بعدها إفتح تذكرة للمشكلة و سيتم التواصل معك مباشرة و حل المشكلة في أقرب وقت. بالتوفيق
  14. أظن أن الإستعلام سيكون نفسه فقط ستُغير طريقة العرض و لنفرض أنك قمت مسبقاً بتخزين لغة المُستخدم في متغير بهذا الشكل: String lang = "...."; // ar or en و في الحلقة التي تقوم بها بعد جلب البيانات ستقوم بالتالي: String imageUrl = hit.getString("name_" + lang); و بهذا الشكل سيتم عرض البيانات حسب لغة المُستخدم التي يتصفح بها التطبيق بالتوفيق
  15. مرحباً مروان ... الفكرة أنك تقوم بتخزين الخانة التي تريد ترجمتها بأكثر من لغة في قاعدة البيانات مثلا name_ar و name_en بحيث في الخانة name_ar تُخزن الإسم باللغة العربية و في الخانة name_en تُخزن الإسم باللغة الإنجليزية و عندما تريد أن تعرض البيانات يُمكنك عرض الإسم حسب لغة المُستخدم . الفكرة الثانية أنك مثلا تريد عمل ترجمة لجدول users فتقوم بجعل كافة البيانات التي تحتمل ترجمة في جدول ثاني و تُسميه user_translations بحيث الجدول الأول يحتوي على البيانات التي لا تحتاج ترجمة و الجدول الثاني يحتوي على البيانات التي تحتاج ترجمة بحيث تربط الجدولين معاً بعلاقة 1 لأكثر يعني صف واحد من جدول users يكون له صف أو أكثر من جدول user_translations مثلا نريد ترجمة خانة إسمها name سيكون جدول user_translations يحتوي على الخانات التالية: id user_id name locale الخانة locale سنُخزن فيها لغة الصف فمثلا لو كنا نريد اللغتين العربية و الإنجليزية سيكون لكل صف من الجدول الأساسي صفين من الجدول الثاني صف يتم تخزين فيه الإسم باللغة العربية و تكون الخانة locale تحتوي على ar و صف يتم تخزين فيه الإسم باللغة الإنجليزية و تكون الخانة locale تحتوي على en بالتوفيق
  16. تواصلي معهم بشكل مُستمر و أخبريهم أن الحساب لم يستقبل أية أموال منذ إنشائه فأين ذهبت أرباحي و أنك قد تواصلتِ مع دعم باي بال و قالو أن المُشكلة ليست من طرفهم ( هذا إن كان الحساب لم يستقبل أية رصيد بعد ) عليك بالصبر و راحة البال في هذه الأوضاع بالتوفيق
  17. لا أدري كيف تعمل منصة منجز لكن يُمكنكِ التواصل مع الدعم الفني بها و توضيح المُشكلة لهم جيداً: أن حساب الباي بال الخاص بك لم يكن مُفعل و لم يتم إرسال الأموال و لم يتم إستقبال أية أموال على الحساب المُهم هو شرح المُشكلة جيداً لهم و الإستفسار عن ماهي الإجراءات في هذه الحالة و سيرُدون عليك
  18. مرحباً ... أنا لا أدري ما المُشكلة التي تواجهينها بالضبط لكن إن كان حساب الباي بال الخاص بك غير مُفعل و قمتِ بإرسال أموال إليه فهذه الأموال لن يتم إستقبالها و إذا ضاعت فباي بال لا يتحمل المسؤولية في هذه الحالة و أظن أنها ستعود إلى حساب المُرسل . سبق و أن حدث لي مُشكل و هو أنني أردت إرسال أرباحي إلى حساب باي بال غير مُفعل لكن العملية رُفضت غير أن الأموال لم تضيع و تم إعادتها إلى حسابي على منصة مستقل و بعد تفعيل حساب الباي بال أعدت المحاولة لكن العملية كانت تفشل كل مرة . تواصلت بعدها مع الدعم الفني لمستقل و أخبروني أن المُشكلة ليست من طرفهم و قالو بأن أتواصل مع الدعم الفني لباي بال و بعد تواصلي مع الدعم الفني لباي بال تم حل المُشكلة و تم إرسال الأرباح بنجاح بعدها ولم تحدث معي أي مُشكلة أخرى . الجيد أن الأرباح لم تضيع و كانت كل مرة تفشل العملية ترجع إلى حسابي على منصة مستقل. أيضاً حل المُشكلة إستغرق حوالي 5 أيام . عليك بالصبر في هذه الحالات. قد يتأخر الرد أحيانا من الدعم الفني لكنهم يردون في أغلب الأحيان بالتوفيق
  19. مرحبا عباس ... يُمكنك كتابة البرنامج بلغة c++ بهذا الشكل : #include <iostream> using namespace std; // دالة لقراءة عناصر مصفوفة من المُستخدم void readArray(int arr[], int n) { for (int i = 0; i < n; ++i) { cout << "Enter El[" << i << "]: " << endl; cin >> arr[i]; } } // دالة لطباعة عناصر مصفوفة void printArray(int arr[], int n) { for (int i = 0; i < n; ++i) { printf("%d ", arr[i]); } } // دالة لجمع عناصر مصفوفة عددية int sum(int arr[], int n) { int sum = 0; for (int i = 0; i < n; ++i) { sum += arr[i]; } return sum; } // دالة لحساب معدل عناصر مصفوفة عددية float avg(int arr[], int n) { return (float) sum(arr, n) / n; } int main() { // تعريف متغير سنُخزن فيه طول المصفوفة int n; cout << "Enter n: " << endl; // طباعة رسالة للمستخدم تخبره بإدخال طول المصفوفة cin >> n; // تخزين العدد المُدخل من طرف المُستخدم في المتغير n int array[n]; // تعريف مصفوفة عددية طولها هو العدد الذي أدخله المُستخدم readArray(array, n); // قراءة عناصر المصفوفة printArray(array, n); // طباعة عناصر المصفوفة cout << "\nSum = " << sum(array, n) << endl; // طباعة المجموع cout << "Moy = " << avg(array, n); // طباعة المُعدل } يُمكنك تجربة البرنامج من خلال هذا الرابط بالتوفيق
  20. مرحباً أسامة... سبب الخطأ الأخير أن الحزمة pusher/pusher-php-server v 3.4.1 تتطلب أن يكون إصدار ال PHP أكبر من أو يساوي 5.4 و أقل تماما من 7.4 في حين أن إصدار ال PHP الخاص بك هو 7.4.3 لذلك عليك البحث عن ما إذا كانت هذه الحزمة بها إصدارات تدعم إصدار ال PHP الخاص بك أو لا أو إستعمال إصدار PHP يحقق متطلبات الحزمة بما أنك قمت بحذف المجلد vendor فتحتاج أن يتنفذ الأمر composer install بنجاح حتى يقوم بإعادة تركيب مجلد ال vendor و رفع كافة الحزم التي يحتاجها المشروع بالتوفيق
  21. مرحباً أحمد .. الخطأ في الدالة fillToJTable لأن الشرط : if("select ".equals(SPart)) { strSelect = tableNameOrStatment; } else { strSelect = "select * from " + tableNameOrStatment; } لا يتحقق و بماأن الشرط لا يتحقق فإنه يدخل في البلوك else و بالتالي يُصبح الإستعلام خاطئ بهذا الشكل : select * from select * from store و هذا مايشير إليه الخطأ الخاص ب syntax لغة sql . لماذا لا يتحقق الشرط لأنك تستخدم الدالة substring بطريقة لا تُحقق الشرط دعنا نفهم ما مفهوم الدالة هذه الدالة تقوم بإقتطاع جزء من سلسلة محارف نصية بحيث تستقبل معاملين الأول ضروري و الثاني إختياري بحيث المعامل الأول هو بداية الإقتطاع و الحرف الخاص بهذا المعامل يدخل في الإقتطاع أما المُعامل الثاني فلا يدخل في الإقتطاع بمعنى لو حددنا المعاملين 0 و 1 فسيتم إقتطاع حرف واحد فقط و ليس حرفين لذلك و على هذا الأساس يجب إستخدام المعامل 0 و 7 مع الدالة substring حتى يتحقق الشرط لأن السلسلة : "select " تحتوي على 7 محارف نصية و معامل الحرف الآخير هو 6 بهذا الشكل : String SPart = tableNameOrSelectStatment.substring(0,7).toLowerCase(); بالتوفيق
  22. في جهة الخادم يُمكنك إضافة خانة في جدول البيانات تكون تحتمل تخزين القيمة null و عند تخزين البيانات تقوم بعمل فحص إذا كانت هذه القيمة موجودة تقوم بتخزينها إذا لا فسيتم تخزين null أما عند عرض البيانات تقوم بتفحص قيمة البيانات التي تُخزن فيها القيمة التي يختارها المُستخدم إذا كان الخيار المُخزن هو custom إذن ستعرض القيمة التي تم تخزينها في الخانة المُضافة بالتوفيق
  23. مرحباً .. هذا الأمر أو المفهوم يُسمى الGenerics و هو مفهوم ظهر في لغات البرمجة و إستعماله لا يقتصر على الكلاس فقط بل أيضا ال interfaces و التوابع و الإقترانات أيضاً و هذا المفهوم يخص نوع البيانات المُستخدمة (Data Types) وستجد في هذا المقال شرح عن المفهوم بالأمثلة : مفهوم الـ Generics في جافا و مقدمة عن الGenerics في الجافا و في هذه القائمة ستجد شرح لمفهوم الGenerics على شكل مقاطع فيديو و كل الكلاسات الموجودة في لغة جافا خصوصا التي تتعامل مع هياكل البيانات تستخدم هذا المفهوم . بخصوص الوراثة في جافا لتحقيقها نستخدم الكلمة المحجوزة extends بهذا الشكل : class Derived extends Base{ // content of class here } بالتوفيق
  24. مرحباً ... يمكنك عمل ذلك بإستخدام لغة جافاسكربت و ذلك بجعل البوكس مخفي لحظة تحميل الصفحة و إستخدام مستمع للحدث change على العنصر select و بإستخدام الشرط إذا كان الخيار الذي إختاره المُستخدم هو المطلوب نقوم بعرض البوكس و إذا كان الخيار غير نقوم بإخفائه على سبيل المثال <div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <form> <div class="form-group"> <label for="exampleFormControlSelect1">Example select</label> <select class="form-control" id="example_select"> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option value="custom">custom</option> </select> </div> <div class="form-group"> <input type="text" class="form-control" id="text_hidden" placeholder="any" style="display: none;"> </div> <button type="submit" class="btn btn-primary">Submit</button> </form> </div> </div> </div> بعض الكلاسات هي من إطار العمل بوتستراب لذلك إذا لم تفهم هذه الكلاسات عادي فكل ما يهمك هو هذا الجزء <select class="form-control" id="example_select"> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option value="custom">custom</option> </select> لاحظ أننا أعطينا ال select المُعرف exemple_select و أننا أعطينا ال option المطلوب القيمة custom و أيضا هذا الجزء <input type="text" class="form-control" id="text_hidden" placeholder="any" style="display: none;"> لاحظ أننا قُمنا بإخفائه بإستخدام خاصية display من css و أعطيناه المُعرف text_hidden الآن بإستخدام الجافاسكربت يُمكننا التحكم و التلاعب في العناصر و ذلك حسب المُستخدم // أضفنا مستمع على عنصر ال select و في حالة التغير سيتم تنفيذ التعليمات الموجودة في الإقتران $("#example_select").on('change', function() { if(this.value === "custom") // إذا كانت قيمة ال option الذي إختاره المُستخدم هو custom $('#text_hidden').show(); // نقوم بعرض البوكس else $('#text_hidden').hide(); // نقوم بإخفاء العنصر }); يُمكنك تجربة الأكواد من هنا بالتوفيق
  25. مرحباً بك .. أولاً للدخول في هذا المجال تحتاج إلى أخذ نظرة شاملة عنه و عن المجالات الموجودة فيه و بعدها يُمكنك إختيار مجال يُناسبك و تعلمه و أنصحك بإختيار مجال واحد و هذا المقال مفيد للتعرف على البرمجة و مجالاتها : بعد أخذ فكرة عن البرمجة أنصحك بتعلم لغة برمجة واحدة و تعلم الخوارزميات معها و هذا سيُساعدك في تعلم لغات أخرى لأن معظم المفاهيم الأساسية هي نفسها في كل اللغات البرمجية هناك فرق في طريقة الكتابة أو ما يُسمى بال syntax و للبدأ أنصحك بتعلم لغة ك c أو c++ أو بايثون و هنا بعض السلاسل التعليمية على شكل مقالات تشرح بعض لغات البرمجة سلسلة ++c للمحترفين دليل تعلم بايثون دليل تعلم جافاسكربت لديك أيضا موسوعة حسوب : مرجع المطورين العرب الذي يحتوي على توثيق لمختلف لغات البرمجة بشرح بسيط و باللغة العربية هناك العديد من القنوات التعليمية المفيدة على اليوتيوب و من بينها : قناة الزيرو ويب سكول ستجد بها العديد من قوائم التشغيل التي ستُعلمك الكثير من الأشياء هناك العديد من مصادر التعلم على الإنترنت بشكل مجاني لكن عليك أولا تحديد المجال الذي تريد أن تحترفه و بعدها يُمكنك البحث عن مصادر للتعلم و لديك أكاديمية حسوب فهي تُوفر العديد من المقالات المُفيدة أيضا يُمكنك طرح أسئلتك و ستجد من يُساعدك بالتوفيق
×
×
  • أضف...