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

Kais Hasan

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

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

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

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

    26

كل منشورات العضو Kais Hasan

  1. العفو، هذا واجبنا. إن المكون Entry بشكل عام يستعمل لإدخال نص و ليس لعرض نص، في حال كنت متأكداً بأنه لن يتم إدخال نص يمكن القيام بذلك كما يلي: Entry1.insert(0, str(...)) يجب وضع ما تريده بدلاً من الثلاث نقاط. في حال كان من الممكن أن يتم إدخال نص و لكن تريد محي النص المدخل و إظهار ما تريده فقط يمكن القيام بذلك كما يلي: n = len(Entry1.get()) Entry1.delete(0, n) Entry1.insert(0, str(...)) و لكن أنصحك باستعمال المكون label في حال كنت تريد عرض شيء فقط بدون إدخال.
  2. عفوا و لكن هل يمكنك توضيح الخطأ عبر لقطة شاشة، او تحديد تماما ما الذي يحدث.
  3. في حال كان السيرفر يعمل على linux يمكنك استعمال ما يدعى بال cron و الذي يمكن عن.طريقه جدولة أي تعليمة تريد تنفيذها. الصورة التالية توضح كيفية اضافة جدولة: يمكنك الإطلاع أكثر على الأمر من هنا.
  4. إن القيم تصبح سلاسل نصية في ال combo box لذلك كل ما عليك هو تحويلها إلى رقم كما يلي: d[int(value1)]
  5. كل ما عليك القيام به هو استعمال القاموس d، أي بدلا من طباعة value1 نقوم بطباعة d[value1]، و بذلك نحصل على القيمة المقابلة.
  6. نعم كل ما ذكرته صحيح، لكن التابع يجب ان يضع القيمة الموافقة و ليس فقط أن يطبع عبارة ok، يمكنك طباعة المتغير event لترى ماذا يحوي.
  7. في البداية قم باستخراج الأعمدة التي تريدها إلى لائحة، كما قمت بذلك مع الأسماء مثلاً، بعد ذلك يمكننا المرور على اللائحتين و وضع قيمة أحدهما كمفتاح و الأخرى كقيمة (ما نضعه في ال combo يكون المفتاح و القيمة ما يقابله)، سأعطيك مثالاً على لائحتين عشوائيتين: a = ["n1", "n2", "n3"] b = [11, 22, 33] d = {k:v for (k, v) in zip(a, b)} print(d) # {'n1': 11, 'n2': 22, 'n3': 33} تعليمة zip تقوم بوضع القيم المتقابلة من اللائحتين سوياً، و من ثم قمت بتحويل هذه القيم إلى مفاتيح و قيم في قاموس. بعد أن يصبح لديك هذا القاموس يجب عليك أن تربط حدث اختيار قيمة من ال combobox بتابع يقوم بأخذ القيمة الحالية لل combo و عرض ما يقابلها من العمود الآخر بناء على هذا القاموس الذي قمنا بكتابته، لقد قمت بذكر التعليمة التي تسمح لنا بالربط في تعليق سابق.
  8. انت تقوم باستعمال قاموس لملئ الخانات في ال combo box، و أصبح لديك غرض من الصف الخاص بال combo box، هذا الصف لديه حدث هو اختيار قيمة، يمكنك ربط هذا الحدث بتابع، هذا التابع سيأخذ القيمة الحالية لل combo box و ينظر ما يقابلها، يمكنك إيجاد المتقابلات عن طريق صنع قاموس اضافي مفاتيحه القيم من ال combo box و القيم هي ما يقابل هذه المفاتيح، أي ما تريد عرضه في ال Entry. من فضلك قم بمحاولة استعمال هذه الأفكار و تجربة ذلك، إعطاءك الحل بشكا مباشر ليست أفضل طريقة للتعلم.
  9. للقيام بهذا الأمر نقوم باستعمال ال events، إنه مفهوم عام في تطوير تطبيقات سطح المكتب، نقوم بربط تابع ما بحدث ما، مثلاً هنا يمكنك ربط تابع ما بحدث اختيار قيمة من ال combo box. هناك مثلاً الحدث <<ComboboxSelected>> و الذي يحدث عندما يتم اختيار قيمة من ال combo box، يمكنك تمرير تابع ليتم استدعاءه في هذه الحالة كما يلي: combo.bind("<<ComboboxSelected>>", callbackFunc) هنا callbackFunc هو التابع الذي سيتم استدعاءه عند حدوث الحدث المطلوب، في هذا التابع يمكنك الحصول على القيمة التي تم اختيارها (لا أذكر بالضبط اسم الطريقة و لكن يمكنك طباعة ما يتم تمريره لهذا التابع لرؤية كيفية ذلك). عند الحصول على القيمة يمكنك عندها ببساطة تغيير قيمة ال entry إلى تلك القيمة.
  10. مرحباً شادي، أفترض أنك تقصد بكتابة اسم السائق هو كتابته في أحد الأعمدة مثل جدول لكل رحلة و كل سائق، أي لديك عمود يحوي أسماء السائقين و عدد مرات تكرار اسم السائق يدل على عدد الرحلات. في هذه الحالة يمكنك استعمال التعليمة COUNT على العمود الخاص بالسائقين، بحيث من أجل كل سائق تكون المعادلة الخاصة به هي COUNT لاسم هذا السائق في عمود السائقين. في حال لك يكن هذا ما تريده من فضلك أرفق ملف اكسيل يحوي مثالاً يدوياً عن الأمر حتى يمكنني تزويدك بالمعادلة المطلوبة. تحياتي لك.
  11. هناك حزمة تدعى label_marker يمكنك عن طريقها إضافة marker يحمل نص بحيث يظهر النص مباشرة، يمكنك استعمالها مع مكتبة google_maps_flutter للقيام بإضافة ما تريد إلى الخريطة على شكل marker و له نص. في حال كان لديك المتغير الذي نضع فيه ال markers (سأفترض أنك على دراية بكيفية القيام بذلك في مكتبة google_maps_flutter ) فإنه يمكنك إضافة marker يحمل نص بالطريقة التالية: markers.addLabelMarker(LabelMarker( label: "TextToShow", markerId: MarkerId("idString"), position: LatLng(10.0, 11.0), backgroundColor: Colors.green, )).then((value) { setState(() {}); }, ); لاحظ هنا كيفية بساطة استعمال هذه الحزمة، فيمكنك وضع النص في الخاصية label و باقي الخصائص أعتقد أنها بسيطة مثل المعرف الخاص بال marker و موقعه و لون الخلفية. يمكنك الإطلاع أكثر على هذه الحزمة من هنا.
  12. هناك ما يسمى escaping كل لغة تقوم به بشكل مختلف، و هو عبارة عن إضافة رمز ما للدلالة ان الرمز الذي يليه هو رمز خاص، مثلا في c++ نقوم بذلك باستعمال الرمز \ عليك البحث عن كيفية القيام بال escaping ضمن اللغة التي تستعملها.
  13. إن كورس علوم الحاسوب مناسب لمتطلباتك، فهو يحتوي على الأساس النظري المطلوب لتكون مهندس و ليس فقط مبرمج. إن مهندس البرمجيات يكون لديه خبرة و معلومات اكبر بالناحية النظرية التي تشمل التخطيط و التصميم الخاص بالبرنامج، على عكس المبرمج الذي ينفذ مهتم برمجية محددة.
  14. في حال كنت تريد التجريب فقط، فإن AWS تقدم استضافة مجانية لمدة 3 أشهر، مع الكثير من الخيارات التي يمكنك الإختيار بينها. الاستضافة المجانية ضمن LightSail و هي خدمة داخل AWS و تعطيك وصول إلى قاعدة بيانات و كل ما يلزمك من أجل رفع موقع من تخزين سحابي و حتى خيار أن تقوم بالرفع ضمن docker container، لقد قمت بتجريب هذه الاستضافة مع docker container و كانت ممتازة، و أعتقد حتى بدون docker container ستكون ممتازة فهي تقدم كل الخدمات التي من الممكن أن تحتاجها، و في حال أحببت يمكنك تمديد الاستضافة بمبلغ ليس بالكبير (حسب ما أذكر حوالي ال 25 دولار). كما أن Google Cloud Hosting تقدم أيضاً استضافة مجانية لفترة، بشكل أساسي تقوم بإعطاءك 300 دولار يمكنك إنفاقها كما تشاء على خدمات غوغل الخاصة بالاستضافة، أيضاً هي خيار أكثر من جيد.
  15. كإضافة على ما ذكره المدرب في جوابه السابق، فإن الموضوع لا يقتصر على المعلومات، حيث أنه ينبغي عليك أن تقوم بمحاولة تجريب ما تعملته لوحدك و محاولة التعديل و التغيير لرؤية ما الذي سيحدث عندها، حيث أنه في أي كورس لا يتم ذكر كل التعديلات الممكنة فهذا غير ممكن من ناحية الوقت كما أنه ليس من الجيد القيام بذلك، حيث أن الأفكار واحدة مهما اختلف التعديل و لكن عندما تقوم أنت بالتجريب لوحدك قد تكتشف أنك لم تفهم فكرة ما بشكل جيد و تقرر العودة و مشاهدة الدرس الخاص بهذه الفكرة مجدداً. أيضاً من الجيد القيام بمشاريع عندما تصبح على إلمام جيد بكل الأفكار الموجودة في الكورس و تكون قد جربت التعديل و التغيير فيها، القيام بمشاريع هو أفضل طريقة لتعلم الأمور، حيث أنك لن تبحث عن شيء ما لم تحتجه و هذا ما يجعل ما تتعلمه غير قابل للنسيان بسهولة، على عكس ما تتعلمه بشكل نظري فقط.
  16. سأساعدك في كيفية إيجاد قيم العمود الأول من القاموس و أعتقد أنك عندها تستطيع إضافتهم بسهولة إلى ال combo (يجب أن يكون هناك تعليمة جاهزة لإضافة list). سأستعمل قاموس شبيه بما قمت بكتابته و لكن سأضع قيم عشوائية من أجل المثال فقط. d = { 1: {"Employee-number":11,"Employee-name":"n1","employee-phone":111,"Employee-email":"e1"}, 2: {"Employee-number":22,"Employee-name":"n2","employee-phone":222,"Employee-email":"e2"}, 3: {"Employee-number":33,"Employee-name":"n3","employee-phone":333,"Employee-email":"e3"} } numbers = [row["Employee-number"] for row in d.values()] names = [row["Employee-name"] for row in d.values()] print(numbers) print('-'*20) print(names) # output: # [11, 22, 33] # -------------------- # ['n1', 'n2', 'n3'] يمكن جلب قيم أي عمود بنفس الطريقة، لاحظ هنا أن values تقوم بجلب القيم الخاصة بالقاموس، في حال كنت تريد المفاتيح بالإضافة إلى القيم يمكنك استعمال items بدلاً من values، و ستجلب لك المفتاح و القيمة المقابلة له.
  17. مرحباً آمنة، يمكننا كتابة ذلك بالطريقة التالية: using System; public class Test { public static void Main() { string str_n = Console.ReadLine(); int n = int.Parse(str_n); int i = 0; int sum = 0; do { i++; if (i % 2 == 1) sum -= i; else sum += i; } while(i < n); Console.WriteLine(sum); } } لاحظي هنا أننا نمر في الحلقة طالما i أصغر من n لأنه عندما يصبح n نكون فعلياً قد أضفنا (أو طرحنا) قيمته، و لذلك لا داعي للإكمال بعد ذلك. و في كل مرة نقوم بزيادة i في البداية (لاحظي أنا بدأت من الصفر و نحن لا نريده فلا خطأ في الزيادة من البداية). ثم نقوم في كل مرة باختبار فيما إذا كان i فردي عن طريق حساب باقي قسمته مع ال 2، في حال كان باقي القسمة 1 فهذا يعني أن العدد فردي، و إلا يكون زوجي، في حال كان فردي نقوم بطرح قيمته من المجموع و إلا نقوم بإضافته إلى المجموع. في حال كان هناك أي جزء آخر غير مفهوم في الكود من فضلك قومي بذكره حتى أستطيع شرحه لك. تحياتي لك.
  18. مرحباً جمال، إن هذه البنى تشكل حجر الأساس للكثير مما هو موجود في لغات البرمجة من أمور جاهزة، مثلاً في ال c++ يوجد ما يسمى map و هي مبنية على أساس أحد أنواع الأشجار، بالإضافة إلى ال set و غيرها الكثير. هذه البنى موجودة في كل لغات البرمجة، مثلاً في بايثون ما يقابل ال map هو ال dict. هذه البنى سمحت بتسهيل الكثير من العمليات، فمثلاً ال map في c++ يمكنك وضع قيم فيها و استخراج قيمة بسرعة كبيرة و هذا ما سمحت به الأشجار. تطبيقات أخرى غير هذه البنى هي قواعد البيانات، فقد تم بناء أغلبها باستعمال أحد أنواع الأشجار، و هذا ما سمح لنا بعمليات البحث و الإضافة و الحذف و التحديث السريعة جداً و المرنة جداً. بشكل عام أي استعمال لبنى المعطيات أو أي تخزين أو عمليات بحث و تحديث و حذف ستجد الأشجار موجودة فيه. ال linked-lists أيضاً مفيدة، ففي حال لم تكن تريد غير حذف و إضافة سريعين في أي مكان فهي تكفي، لكن بشكل عام لن تجد لها تطبيقات كثيرة مثل الأشجار، لكن كما ذكرت في حال كنت تريد إضافة و حذف سريعين و لا تريد بحث سريع فهي أسهل للكتابة بكثير من أنواع الأشجار المستعملة في العمليات الأخرى. تحياتي لك.
  19. بشكل عام يمكنك القيام بذلك بأي فريموورك، التشعب و التردد في اختيار ما تريد استعماله هو مشكلة شائعة جداً، كل ما عليك القيام به هو عدم القلق من فكرة اختيارك لخيار خاطئ لأنه لا وجود لخيار خاطئ. نعم قد تكون فريم وورك احسن من أخرى في تطبيق معين و لكن بالمجمل كل له نقاط قوة و ضعف. أنصحك بأن تبدأ بفريم وورك تستعمل لغة برمجة أنت على دراية بها، فهذا سيسرع عملية تعلمها.
  20. يمكنك القيام بأي عملية تريدها على مصفوفة باستعمال map و التي تقوم بتطبيق تابع معين على كل عنصر من عناصر المصفوفة. حسب ما فهمت فأنت تريد طرح قيمة معينة من كل عنصر في المصفوفة، يمكنك القيام بذلك كما يلي (سأعطيك مثال مبسط على مصفوفة أرقام): const a = [1, 4, 9, 16]; const new_a = a.map(x => x - 4) console.log(new_a); // [-3, -2, 0, 4, 12] هنا لاحظ كيف قمت بطرح القيمة 4 من كل عنصر من عناصر المصفوفة، طبعاً map لا تقوم بالتعديل على المصفوفة مباشرة و إنما تقوم بإنشاء مصفوفة جديدة.
  21. يمكنك تجربة مكتبة fletr و التي تسمح لك بكتابة تطبيقات فلاتر باستعمال البايثون..اي يمكن تضمينها في ملفات البايثون الخاصة بك لاستعمالها. الشرح عن كيفية استعمالها طويل و يمكنك الاطلاع عليها من هنا.
  22. إن هذا العامل هو اختصار لعدة عمليات في عملية واحدة، فبواسطته يمكنك تحديد فيما إذا كان طرفاه متساويان أو أحدهما أكبر من الآخر. و هو يدلنا على ذلك من خلال قيمة معادة كما يلي: في حال كان الطرفان متساويان يعيد 0. في حال كان الطرف على اليمين أكبر من الطرف على اليسار يعيد -1. في حال كان الطرف على اليسار أكبر من الطرف على اليمين يعيد 1. و بالتالي يمكنك استعماله في حال احتجت لهذه العمليات في شرط واحد.
  23. من فضلك هل يمكنك تحديد أي تطبيق و المزيد من التفاصيل حتى نستطيع مساعدتك؟ في حال كان السؤال تابع لأحد الدروس فمن الأفضل نشر السؤال في قسم التعليقات أسفل الدرس. و في حال كنتي تقصدين سطر الأوامر فيمكن الوصول إليه بكتابة cmd في خانة البحث
  24. من غير الجيد تخزين هذه الملفات في قاعدة البيانات، من الأفضل أن يتم تخزينها في وسط تخزين خارجي و وضع المسار الخاص بها فقط. هذا أفضل من ناحية الأداء، بالإضافة إلى أنه أوفر، حيث أن تكلفة التخزين لقاعدة البيانات أكبر بكثير من تكلفة التخزين العادي. يمكنك التخزين على إحدى خدمات التخزين على السحاب التي توفرها الكثير من الشركات و منها AWS, Google و غيرها الكثير،و نقوم بوضع رابط الصورة أو الملف في قاعدة البيانات فقط.
  25. من فضلك قومي بمحاولة حل التمرين لوحدك في البداية،فإعطاءك الحل مباشرة لن يساعدك في تحسين مهاراتك البرمجية. يمكننا مساعدتك في الفكرة العامة و في حال حاولتي و ظهر لك أخطاء أيضاً يمكننا مساعدتك، لكن لا يمكننا إعطاءك الحل فوراً. هنا كما تلاحظين مرة نريد أن نجمع العدد و مرة نريد طرحه، و كما يمكن الملاحظة فإننا نريد جمع الأعداد الفردية و طرح الزوجية. بالتالي هنا لدينا عدة مكونات، حلقة للمرور على الأعداد يفترض أنك تستطيعين كتابة هذا الجزء، و إلا قومي بالتحقق من مقالات حسوب و تعلم ما يلزم لكتابة الحلقة. نريد أيضاً شرط للتحقق فيما إذا كان العدد فردي أم زوجي، سأترك لك وظيفة التفكير في كيفية التحقق من ذلك، و لكنه شرط بسيط و غير معقد. حسب الشرط السابق إما علينا أن نجمع أو نطرح، بالطبع سنجمع أو نطرح إلى متحول يمثل المجموع نكون قد عرفناه قبل الحلقة. لا فرق بين الحلقات بشكل يؤثر على الفكرة، أي الفكرة تبقى نفسها و لكن فقط علينا الانتباه إلى أين نحن في الحلقة و متى يجب أن تتوقف الحلقة.
×
×
  • أضف...