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

Entesar Khaled

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

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

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

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

    213

كل منشورات العضو Entesar Khaled

  1. أهلًا بك، يمكنك إيجاد مبرمجين عرب أكفاء للقيام بمشروعك بعد توضيحة على منصة مستقل https://mostaql.com/ بالتوفيق...
  2. أهلًا بكِ، مقدمة بسيطة عن SDN لوحِظ أن هناك تحسن مستمر في سرعة العمود الفقري للإنترنت حيث بلغ معدل نقل البيانات من 10 إلى 100 جيجابايت في الثانية الواحدة ومع وجود خوادم عملاقة وظهور الحوسبة السحابية فقد تم حل مشكلة تخزين ومعالجة البيانات الضخمة جزئياً أما مشكلة عناوين الإنترنت فقد أنتهت مع بدأ الإعتماد على عناوين الإنترنت من النوع السادس ولكن بقيت أحد المشاكل التى يريد الجميع لها حل وهى الإعتماد على ببنية تحتية قوية ومؤمنة وبسيطة ذو تكلفة منخفضة وسهل التعامل معها وحل المشاكل التى تحدث بها وهو ما لا يتحقق مع الوضع الحالى فعتاد الشبكة الحقيقي لو كان يقدم ما تريده فإن تكلفتة المرتفعة تجعلك تفكر أكثر من مرة قبل تنفيذ خطواتك. من هنا بدأ البحث عن حلول بديلة وبالتحديد داخل نطاق مفهوم الـ Network Overlay فالتقنية الناشئة software-defined networking تعرف ب (SDN) وهى بإختصار الجيل القادم للبنية التحتية في هندسة الشبكات لأنها تقوم بعمل ما لا نستطيع عمله مع العتاد التقليدي ...ما يحدث في العتاد التقليدى الذى نستخدمة حالياً أن هذا الراوتر والسويتش يحتويا على جزئين أساسين وهما السيد والخادم أو العقل والجسد أو Control Plane و Data Plane أو Network Topology و Network Control وكلها أسماء تلخص ما يقوم به هذا العتاد فوظيفة الجزء الأول تتلخص أنه المسئول عن إتخاذ القرارات وعمل Process كتوجيه الترافيك لمكان ما, أما الجزء الثاني فهو المسئول عن تنفيذ كل القرارات التى يتخذها الجزء الأول لكن الجديد في تقنية SDN أنه سيتم الفصل بينهما وسيتم وضع الجزء الأول على خوادم ذو إمكانيات عالية أما الجزء الثاني فسيبقي على العتاد المعتاد كما هو وهذا التغير سيقوم بتسريع الشبكة عشرات المرات عن الطريقة التقليدية لأن كل الأحمال ستكون على الخوادم للمزيد يمكنكي الإكمال بالصور لتوضيح الشرح من خلال مصدر النص موقع networkSet ... لماذا بايثون لـ SDN؟ أولاً ، قد تسألي "لماذا Python لِـ SDN؟" هناك الكثير من اللغات الأخرى للاختيار من بينها... لكن فيما يلي أهم الأسباب التي تميز Python وتدعو لإختيارها: -- إنها لغة سهلة للتعلم والفهم وغرضية التوجه. ربما ستحتاجين جهد إضافي لإتقانها، لكن البدء بها سهل للغاية. -- إنه غرض عام.... مع بايثون يمكنك القيام بكل شيء من جمع البيانات إلى تغييرات تكوين البرمجة إلى الألعاب. -- إنها مدعومة على نطاق واسع...و هي اللغة المفضلة لمعظم مزودي خدمات SDN. يمكنك في البداية متابعة مصادر تعلم البايثون لتتمكني من تعلم الشبكات بهذة اللغة وستفيدك الروابط التالية كأمثلة لمصادر إذا كنتي تفضلين المحتوى العربي فسيفيدك توثيق موسوعة حسوب ...ودروس أكاديمية حسوب ... وموقع هرماش.... لتعلم البايثون الدخول ل SDN مع Python ... كتب برمجة شبكات... مقال linkedIn بخطة للبدئ بالبايثون حتى الشبكات SDN... كل التوفيق.
  3. وعليكم السلام، يمكن فعل ذلك بعدة طرق وهذه إحداها...مع مراعاة حالة الحرف z public class Test { public static void Main() { string str1; char[] arr1; int l,i; l=0; char ch; Console.Write("Input the string : "); str1 = Console.ReadLine(); l=str1.Length; arr1 = str1.ToCharArray(0, l); // Converts string into char array. for(i=0; i < l; i++) { ch=arr1[i]; if (ch== 'z') Console.Write('a'); else if (ch== 'Z') Console.Write('A'); else Console.Write((char)(((int)ch) + 1)); } } }
  4. أهلا بك، يمكنك فعل ذلك بعد رفع المشروع على استضافة فتشارك إعداداتها لزميلك... لكن إن أردت أن تتيح الدخول لقاعدة بيانات واحدة وكان حسابك على الإستضافة يحتوي أكثر من قاعدة بيانات فيمكنك متابعة طريقة إتاحة قاعدة واحدة من بينهم حسب تعليمات الشركة التي حجزت عندها الدومين مثلا في هذا الرابط ستجد الطريقة لذلك على إستضافة namecheap بالتوفيق...
  5. وعليكم السلام @خليل قيسي، سأضيف أن أكاديمية حسوب تقدم دورة تطوير تطبيقات الويب باستخدام لغة PHP التي تعتمد على التطبيق العملي وعلى بناء مشاريع حقيقية، فإلى جانب تعلّم الأساسيات ستتعلم كيف تبني تطبيقات حقيقية اعتمادًا على لغة PHP بحد ذاتها، وكيف تبني تطبيقات اعتمادًا على إطار العمل Laravel، ستبدأ الدورة بأساسيات البرمجة باستخدام لغة PHP ومن أبسط المفاهيم البرمجية إلى المفاهيم المتقدمة وأفضل الأساليب المتبعة في البرمجة. الدورة هي عبارة عن مساق تدريبي كامل يبدأ من الصفر وينتهي عند إبداعك وبناء تطبيقك الأوّل ورفعة على إستضافة للعرض. تقدم الأكاديمية أيضاً دورة تطوير التطبيقات باستخدام لغة JavaScript التي ستبدأ بأساسيات البرمجة باستخدام لغة JavaScript حيث ستعرض بأسلوب هندسي ممتع ومن أبسط المفاهيم البرمجية إلى المفاهيم المتقدمة بالإضافة إلى استعراض أفضل الأساليب المتبعة في البرمجة. وهذة الدورة أيضاً هي عبارة عن مساق تدريبي كامل يبدأ من الصفر وينتهي عند إبداعك وبناء تطبيقك الأوّل اعتمادًا على بيئة Node.js ومكتبة React.js، الأمر الذي سيؤهلّك للعمل كمطوّر نظم خلفية وواجهات أمامية محترف ويضعك على الطريق الصحيح في مشوارك المهني. يمكنك الإطلاع على جميع دورات الأكاديمية من https://academy.hsoub.com/. كل التوفيق...
  6. أهلاً بك، الأندرويد ستديو محرر لتطبيقات تعمل في نظام الأندرويد... لكن التطبيقات العالمية مثل الواتس والفيس الى آخره اعتمادها الكي على api الخاص في قواعد البيانات للشركة وبرمجتهم تكون عن طريق لغة برمجية تساعد في تصدير التطبيق للأندرويد وال ios معاً. تلك التطبيقات العالمية هي تطبيقات هجينة تم برمجتها بتقنيات الويب HTML, CSS, Javascript وتعرُض داخل متصفح النظام (Native Browser) ولهذا السبب يمكن للتطبيقات الهجينة دعم منصات عدة بدون إعادة برمجة التطبيق لكل نظام، وللتعامل مع عناصر منصة الجهاز الأصلية يتم استخدام إضافات Plugins مكتوبة باللغة الأم. وهذا يعني أنه يمكن تشغيلها على الأجهزة المحمولة (الأندرويد والIOS).
  7. أهلا بك، يمكنك التغلب على ذلك باستخدام أحد المواقع التي تهدف إلى حل هذه المشكلة. مثل Campsite وهو عبارة عن خدمة عبر الإنترنت تهدف إلى حل هذه المشكلة من خلال إنشاء صفحة مقصودة مخصصة تحتوي على سلسلة من الصور والروابط. عند التسجيل ، يمكنك الحصول على عنوان موقع campsite.bio والذي يمكنك إدراجه في ملفك الشخصي في Instagram. أو يمكنك استخدام Metricool وهو منصة قوية لوسائل الإعلام الاجتماعية مع العديد من الميزات ، واحدة منها هي اضافة رابط الى انستقرام...تابع المقال التالي من موقع الصوت الإخباري. يمكنك التعرف أكثر على طريقة إضافة رابط موقعك الخاص على إنشتغرام من خلال هذا الفيديو. بالتوفيق...
  8. أهلاً بك، أن تضع كل كلاس في ملف تحت باكيج المشروع يكون أفضل بكثير من أن تضعهم كلهم في ملف واحد ..وذلك في البداية أسهل للمبرمج في اكتشاف الاخطاء فتحدد أي الأجزاء بالظبط التي تحتاج لتصحيح...أفضل في التجريب والإختبار أثناء مرحلة الإنشاء فتجرب كل كلاس على حدة وتطور عليها بعينها بسهولة...إفترض أنك أرسلت المشروع لشركة واحتاجت تطوير لهذا النظام بعد فترة سيكون التعامل مع المشروع كملفات كل منها يحتوي كلاس تقوم بوظيفة معينه أفضل بكثير من التدقيق في الملف الواحد الطويل والبحث عن أي كلاس او متغير فيها...تقسيم البناء واستخدام طبقات متجزئة في تصميم المشاريع هو أحد مبادئ هندسة البرمجيات المستخدمة لإنتاج أنظمة بالكفاءة اللازمة والتقنية المتعارف عليها بين محللي النظم...من وجهه نظرة عامية أيضا وبمنطق " فَرِّق تَسُد " فإن تقسيم المشروع على عدة ملفات بناء على وظيفة كل قسم يكون الأفضل.
  9. أهلا بك، لا، لا يمكن بأي حال في لغات السكريبات مثل php و js و python إعادة أو إلغاء تعريف الثوابت بعد تعريفها...ولا تغيير قيمتها. بالتوفيق...
  10. أهلا بك، في حلقة التكرار هذة يمكنك الوصول لجميع المجلدات كما تريد ...الأن يمكنك إدخال برنامجك في حلقة التكرار باستبدال مسارك بالمتغير path$ لديّ ...لاحظ نتيجة هذا البرنامج في الصورة المرفقة. <?php $dirs = array_filter(glob('*'), 'is_dir'); foreach ($dirs as $dir) { $path="c:/xampp/htdocs/todo/".basename($dir)."/index.html"; echo $path.'<br> <br>'; } ?> تُرشِّح الدالة array_filter()‎ عناصر المصفوفة باستخدام دالة يحددها المستخدم وهنا حددنا الدالة glob()‎ التي تبحث عن مسارات محدَّدة لملفات أو مجلَّدات تتطابق مع نمط مُعطى، أنشأنا حلقة تكرار على هذه المجلدات وفي كل مرة قمنا بإستخدام الدالة basename()‎ لتعيد لنا اسم الملف أو المجلَّد الأساسي (basename) بعد تمرير مساره إليها. بالتوفيق ...
  11. أهلا بك، يمكنك متابعة تثبيت روبي على مختلف الأنظمة من خلال شبكة كيف وتوثيق موسوعة حسوب بالتوفيق...
  12. أهلا بك، هذة الشيفرة بلغة #C ستؤدي المطلوب مع مراعاة المسافات بين الأرقام بناءً على عدد الخانات...سيكون الناتج كما في الصورة المرفقة public class Exercise { public static void Main() { Console.Write(" "); Console.Write(0); Console.Write(" "); for (int n = 1; n <100; n++) { if(n%10==0) Console.Write("\n"); Console.Write(n.ToString()); if(n<10) Console.Write(" "); else Console.Write(" "); } } } بالتوفيق...
  13. وعليكم السلام ورحمة الله وبركاته صحيح، يمكنك طباعة الثوابت في جملة الطباعة في جميع لغات البرمجة ففي لغة php يمكنك ذلك سواء تم تعريفها باستخدام الدالة define()‎ أو باستخدام الكلمة المفتاحية const (منذ الإصدار 5.3.0 من PHP) مثال: <?php const CONSTANT = 'Hello World'; echo CONSTANT; //Hello world سيطبع define("MY_CONSTANT", "Hello world."); echo MY_CONSTANT; //Hello world سيطبع ?> مثال في لغة javaScript : const MY_FAV = 7; alert( MY_FAV ); console.log( MY_FAV ); //سيظهر 7 بالتوفيق...
  14. وعليكم السلام ورحمة الله وبركاته... مرحباً أحمد، إنشائك لمجمّع الأفلام من خلال برمجة ووردبريس يوفرلك عدة خصائص ومميزات، فمثلا يوفلك نظام القوالب الذي يمكنك من تغيير أي تصميم بسلاسةٍ وسهولة من خلال تغيير الثيم، كما يوفر لك لوحة تحكّم بطريقة متكاملّة لإدارة النظام، ستكون قادر على تكوين تصنيفات بشكل متداخل (شجري) للأفلام ومشاركتها مع مجموعة من الأشخاص. بالإضافة لذلك فإنه يمكنك متابعة قائمة الزوار الّذين قاموا بالكتابّةُ والتعليق في المدونّةُ ويمكنك أيضاً إيقاف (IP) معيّن من الكتابة والتعليق. لكن قد تحتاج في نظام الووردبرسس الى الهوست والدومين لنشر مدونتك تماما كما في المواقع المبرمجة بتكويد خاص ...إلا أن الثانية تعتمد على إنشاء الإضافات المتوفرة في وورد بريس من الصفر لذلك تستغرق وقت وتكلفه أعلى من بناء أنظمة ووردبريس. يلجأ بعض أصحاب المشاريع للبرمجة الخاصة تجنباً للتقيد في نطاق ووردبريس وتكون مفصلة من الصفر على طلبهم فتناسبهم أكثر ويشعرون أنها أكثر رسميةً وأماناً... فإن كنت تتطلع إلى العفوية والسهولة وتكلفة أقل في الإنجاز فيمكنك إختيار ووردبريس لإنشاء مجمع الأفلام الوثائقية. بشكل عام، كثرة المقالات في المدونة لا يؤدي إلى حذفها... لكن يجب أن تطلع على سياسة الخصوصية للأفلام قبل إرفاقها في المدونة أو الموقع أياً كان بناؤه أو محتواه...حتى لا يتم التبليع عنك من قبل مالكي هذه الأفلام وتدخل بمشاكل أكبر من حذف مدونتك !!! كل التوفيق ...
  15. أهلا هدى، الخوارزمية العامة لتبديل قيمة أي متغيّرين أو عنصرين لمصفوفة بأي نوع؛ فنحن بحاجة دائماً إلى متغير ثالث نستخدمه بشكل مؤقت حتى نتم من خلاله عملية التبديل. الآن، سنستخدم متغير ثالث إسمه temp لنتم من خلاله عملية التبديل. إذاً المتغير temp سيكون مجرد وسيط في عملية التبادل. كود جافا لخوارزمية التبديل العامة int A = 5; int B = 10; int temp; temp = B; // و التي تساوي 10 temp في المتغير B هنا وضعنا قيمة المتغير B = A; // و التي تساوي 5 B في المتغير A هنا وضعنا قيمة المتغير A = temp; // و التي تساوي 10 A في المتغير temp هنا وضعنا قيمة المتغير مرفق شرح الكود السابق كود جافا لتبديل قيم العنصرين الخامس والثالث بمصفوفة أحادية البعد class Replace { public static void main(String[] args) { int[] myArray = { 10, 20, 30, 40, 50 }; System.out.println ("العنصر الثالث قبل التبديل:" +myArray[2]+"\nالعنصرالخامس قبل ا لتبديل:" +myArray[4]); int temp = myArray[2]; myArray[2] = myArray[4]; myArray[4] = temp; System.out.println ("العنصر الثالث بعد التبديل:" +myArray[2]+"\nالعنصر الخامس بعد التبديل:" +myArray[4]); } } مصدر موقع هرماش بالتوفيق ...
  16. أهلا يزن تقريبا مساقات المستويين الثالث والرابع في تخصص هندسة البرمجيات هي هذة المساقات: -- في المستوى الثالث: الأتمتة والأسمبلي والشبكات وأنظمة التشغيل وجرافيك حاسوب وتحليل وتصميم الأنظمة ونظم قواعد البيانات وهندسة متطلبات البرمجيات والخوارزميات والجبر خطي -- وفي المستوى الرابع: إدارة البرمجيات وأمن المعلومات وتطوير ونمذجة البرمجيات وتصميم المترجمات واختبار البرمجيات بغض النظر عن طريقة سير الخطة الدراسية لهذة السنة والتي تليها، إلا إنك ستجد هنا مراجع لأغلب المساقات التي ذكرتها في الأعلى ... منها كتب ومنها مواقع ... Automation theory Assembly1 Assembly2 Operating systems Analysis and design of systems Database systems Software Requirements Engineering Software Management Information Security Software Testing1 Software Testing2 أتمنى أن تفيدك! ونفضل أيضاً أن تحدد لنا المساقات التي تريد أن تتقوى بها بالتحديد. بالتوفيق ...
  17. وعليكم السلام، يمكن أن تجعل لكل frame كلاس منفصلة وعند الضغط على زر Signup من خلال كلاس SignupFrame يتم إنشاء new object من كلاس LoginFrame. العملية ستتم من خلال إضافة ActionListener وبالعربية "مستمع الحدث" للزر المراد إجراء أحداث من خلالة كإظهار صفحة أخرى أو تنفيذ عملية حسابية أو استدعاء دالة أو حفظ معلومات بقاعدة البيانات أو أي شيئ تريد القيام به عند الضغط على هذا الزر. إذا أردت شرح ActionListener وطريقة إضافته للزر في Java GUI فستجده في هذا الفيديو بالعربية هنا المثال الذي طلبته مطبقاً باللطريقة السابقة import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.awt.event.*; import java.util.*; class LoginFrame extends JFrame { private JTextField user,pass; private JLabel userL,passL; private JButton ok,cancel; public LoginFrame(){ super("Login"); setBounds(515,210,280,175); setLayout(null); user = new JTextField(); pass = new JTextField(); userL = new JLabel("User Name"); passL = new JLabel("Password"); ok = new JButton("Login"); cancel = new JButton("Cancel"); ok.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { System.exit(0); } }); cancel.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { System.exit(0); } }); add(user); add(pass); add(userL); add(passL); add(ok); add(cancel); userL.setBounds(20, 10, 120,30); user.setBounds(140, 10, 120,30); passL.setBounds(20, 60, 120,30); pass.setBounds(140, 60, 120,30); ok.setBounds(30, 110, 100,30); cancel.setBounds(150, 110, 100,30); setVisible(true); } public static void main (String[] args) { new SignUpFrame(); } } class SignUpFrame extends JFrame implements ActionListener{ JLabel title, idLabel, nameLabel, genderLabel, addressLabel, contactLabel; JTextField idField, nameField, genderField, addressField, contactField; JButton registerButton, exitButton; JRadioButton male, female; ButtonGroup bg; JPanel panel; String gender = ""; DefaultTableModel model; SignUpFrame() { setSize(300, 360); setLayout(null); title = new JLabel("Registration Form"); title.setBounds(60, 7, 200, 30); idLabel = new JLabel("ID"); idLabel.setBounds(30, 50, 60, 30); nameLabel = new JLabel("Name"); nameLabel.setBounds(30, 85, 60, 30); genderLabel =new JLabel("Gender"); genderLabel.setBounds(30, 120, 60, 30); addressLabel = new JLabel("Address"); addressLabel.setBounds(30, 155, 60, 30); contactLabel = new JLabel("Contact"); contactLabel.setBounds(30, 190, 60, 30); idField = new JTextField(); idField.setBounds(95, 50, 100, 30); nameField = new JTextField(); nameField.setBounds(95, 85, 100, 30); male = new JRadioButton("Male"); male.setBounds(95, 120, 60, 30); male.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { gender= "Male"; } }); female = new JRadioButton("Female"); female.setBounds(155,120, 70, 30); female.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { gender ="Female"; } }); bg = new ButtonGroup(); bg.add(male); bg.add(female); addressField = new JTextField(); addressField.setBounds(95, 155, 100, 30); contactField = new JTextField(); contactField.setBounds(95, 190, 100, 30); exitButton = new JButton("Exit"); exitButton.setBounds(25, 230, 80, 30); exitButton.addActionListener(this); registerButton = new JButton("Register"); registerButton.setBounds(110, 230, 100, 30); registerButton.addActionListener(this); add(title); add(idLabel); add(nameLabel); add(genderLabel); add(addressLabel); add(contactLabel); add(idField); add(nameField); add(male); add(female); add(addressField); add(contactField); add(exitButton); add(registerButton); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); setVisible(true); } public void actionPerformed(ActionEvent ae) { if(ae.getSource()==registerButton)new LoginFrame(); else System.exit(0); } } بالتوفيق...
  18. أهلا بك، عندما تقوم بعرض بيانات مكتوبة باللغة العربية من قاعدة البيانات MySQL وتتفاجأ بظهور رموز و علامات استفهام، المشكلة في هذه الحالة هو عدم تعرف المتصفح على نوعية الترميز أو أن هذه البيانات لم يتم حفظها بطريقة صحيحة في قاعدة البيانات، والحل هو جعل قاعدة البيانات بترميز عام. لتفادي هذا المشكل منذ البداية، يجب علينا أن نتصرف على هذا النحو: عند الدخول على واجهة تدبير قاعدة البيانات، تأكد من أن الترميز لدى السيرفر هو ترميز عام utf8_general_ci. عند إنشاء قاعدة بيانات أيضا، اختر الترميز العام utf8_general_ci. يمكنك كذلك إنشائها من خلال الاستعلام SQL: CREATE DATABASE database_name DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; هكذا يطبق الترميز العام على الجداول والحقول فيصبح الترميز بالنسبة للجداول و الحقول عاما utf8_general_ci. ولتعديل ترميز قاعدة بيانات موجودة مسبقا: لتغيير ترميز قاعدة البيانات: ALTER DATABASE database_name CHARACTER SET utf8 COLLATE utf8_general_ci; لتغيير ترميز الجداول: ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; لتغيير ترميز الحقول: ALTER TABLE table_name MODIFY column_name VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci; هذا من جهة قاعدة البيانات لكن بقيت خطوة أخيرة يتم فيها تحديد الترميز الخاص بمعالجة بيانات الاتصال، وهي أن نضيف بعض الاستعلامات SQL إلى ملف الإتصال بهذا الشكل: $srv = 'localhost'; $db = 'test'; $user = 'root'; $pwd = ''; try { $bdd = new PDO('mysql:host='.$srv.';dbname='.$db,$user,$pwd); //تحديد الترميز الخاص بمعالجة بيانات الاتصال $bdd->query("SET NAMES utf8"); $bdd->query("SET CHARACTER SET utf8"); } catch (Exception $e) { die('error !'.$e->getMessage()); } أنصح بتحديد الترميز utf8_general_ci لحظة إنشاء قاعدة البيانات، لكي يطبق الترميز العام على كل الجداول وحقولها فترث بذلك الترميز من قاعدة البيانات. بالتوفيق ...
  19. أهلا إبتهال، لا يجب عليكي أبداً تعلم رفع التصميم على تطبيق الموبايل ولا تطبيق الديسكتوب ولا تطبيق الويب. لأنة في الأساس المبرمجين يتعاملون مع برامج مختلفة تماما عن برامج منسقي واجهات المستخدم ... فلا يرفع التصميم على التطبيقات وإنما ينفذ بلغة البرمجة المناسبة لإنشاء واجههات مماثلة تماما لما تم تصميمة تربط مباشرة مع الأكواد البرمجية المكونة للتطبيق. ما يحصل فعليا وما هو متعارف علية أن يقوم مصمم UI بتنسيق جميع واجهات التطبيق ثم يعرضه للمبرمج كما هو أو يقطعه كصور منفردة ليسهل على مطور التطبيق أن يبرمج هذا التصميم صورة صورة، ويمكن إدراج أحد الصور إن لزم داخل التطبيق بحيث تكون بامتداد صورة لا أن يتم تركيب التصميم كاملا مع enteractions الخاصة ب UI . بالتوفيق...
  20. أهلا بك، فيما يلي أحد طرق بناء دالة تقوم بطباعة أرقام العدد بالمعكوس. public int ReverseInt(int num) { int result=0; while (num>0) { result = result*10 + num%10; num /= 10; } Console.Write("Number in reverse order: " + result); return result; } لاحظ في البداية أن الأسهل إستخدام حلقة التكرار من نوع while وليس for لكن إذا أردت التغيير فلن تحتاج إلا لاستبدال جملة while فقط بجملة for for(int i=0;num>0;i++) في كلا الحالتين لهذة الطريقة سيطبع الناتج خارج حلقة التكرار. أبسط طريقة لفهم الدالة السابقة هي أن نجربها على عدد إفتراضي، لنفترض أننا سندخل العدد 123، المتوقع من الدالة أن تطبع العدد بالمعكوس 321. من خلال التتبع ستلاحظ أن عدد مرات التكرار سيكون نفس عدد الأرقام التي يتكون منها num في الوضع البتدائي: num=123 result=0 الشرط لعبور حلقة التكرار صحيح ومتحقق لحلقة التكرار الأولى: result=0*10+123%10 result=3 num=123/10 num=12 لحلقة التكرار الثانية: result=3*10+12%10 result=32 num=12/10 num=1 لحلقة التكرار الثالثة: result=32*10+1%10 result=321 num=1/10 num=0 النواتج: num=0 result=321 الشرط لدخول حلقة التكرار غير متحقق بهذا نكون قد حصلنا على العدد معكوساً من خلال استخراج أحاده ثم تقليص خاناته واستخراج خانه الأحاد الجديدة وبحلقة تكرار للخوارزمية البسيطة تحصل على الرقم المعكوس. بالتوفيق
  21. أهلا بك، البرنامج التالي سيساعدك لطباعة مربع من النجوم بالطول الذي يدخله المستخدم وبحلقة لوب for واحدة فقط. دعني أذكر التوضيح لكل مجموعة من الأسطر على حده ثم أعيد البرنامج كاملا في النهاية. في البداية نتحقق أن الطول المدخل ليس صفر أو عدد سالب، وإن حدث سنتجاهل الأمر ونطبع نصاً فارغاً، وفي حين كان الطول المخل هو 1 سنطبع نجمة واحد كناتج للبرنامج، ماعدا ذلك نستطيع أن نعتبر الأطوال المدخلة هي أطوال قابلة أن تكون ضلعاً لمربعٍ من النجوم. إذن الأن هدف البرنامج هو استقبال طول ضلع المربع من المستخدم ورسمه على الشاشة باستخدام النجوم. public static string CreateASCIISquare(int squareSideLength, char c = '*') { if (squareSideLength < 1) return ""; if (squareSideLength == 1) return c.ToString(); الفكرة هي أن تتم الطباعة سطر سطر وعدد السطور سيكون نفس الطول المدخل، سنجعل السطر الأول والأخير(الضلعان العلوي والسفلي للمربع)يحتويان على نجوم بعدد الطول المدخل (ليتحقق شرط الأعمدة تساوي الطول المدخل وتساوي عدد السطور) ، والأسطر الداخلية ستحتوي على نجمتين فقط على كل طرف نجمة واحدة بينهما فراغ، وبتكرار طباعة الأسطر الداخلية بهذا الترتيب عدد معين من المرات ستحصل على فراغ في النتصف وحدوده نجوم بشكل مربع تماما أي الطول والعرض متساويان وسيكون عدد الصفوف مساوياً لعدد الأعمدة. var horizontalOuterRow = new String(c, squareSideLength); var horizontalInnerRow = $"{c}{new string(' ', squareSideLength - 2)}{c}"; var squareBuilder = new StringBuilder(); سنبدأ بالطباعة على الشاشة وإظهار السطر الأول كما حددناه squareBuilder.AppendLine(horizontalOuterRow); يلزم الأن حلقة التكرار for لطباعة الأسطر الداخلية بالطريقة التي ذكرناها، لكن لاحظ أن الحلقة ستستمر بعدد الأسطر الداخلية فقط حيث أننا في النهاية سنضيف السطر الأخير تماما كما أضفنا السطر الأول بشكل منفصل عن حلقة التكرار إذن الحلقة ستتكر بعدد أقل من عدد السطور الكلي(طول الضلع)بمقدار 2 وهذا النقصان سببه الضلعان العلوي والسفلى الذان يضافان على الشاشة بدون تدخل من حلقة التكرار for (int i = 0; i < squareSideLength - 2; i++) { squareBuilder.AppendLine(horizontalInnerRow); } سنضيف الأن الضلع السفلي بشكل منفصل كما اتفقنا في إضافة الضلع العلوي squareBuilder.Append(horizontalOuterRow); إنتهت عملية الطباعة وسنرجع ناتج الدالة return squareBuilder.ToString(); } البرنامج كاملا public static string CreateASCIISquare(int squareSideLength, char c = '*') { if (squareSideLength < 1) return ""; if (squareSideLength == 1) return c.ToString(); var horizontalOuterRow = new String(c, squareSideLength); var horizontalInnerRow = $"{c}{new string(' ', squareSideLength - 2)}{c}"; var squareBuilder = new StringBuilder(); squareBuilder.AppendLine(horizontalOuterRow); for (int i = 0; i < squareSideLength - 2; i++) { squareBuilder.AppendLine(horizontalInnerRow); } squareBuilder.Append(horizontalOuterRow); return squareBuilder.ToString(); } بالتوفيق...
  22. أهلا بك، للبدء في عالم البرمجة يجب معرفة الهدف من تعلمها أولاً لأنها وسيلة لتقديم حلول لمشاكل موجودة عبر الأجهزة والتقنيات التي نستخدمها وستلاحظ ذلك بعد تطوير الأفكار وتحويلها إلى تطبيق يمكن الإستفادة منه لحل مشكلة للمستخدم. أنت اخترت البدئ بلغة c++ وهذا خيار ممتاز حيث أنها مدخل للغة الجافا ولغات أخرى في حال أردت لاحقا التخصص في مجال الديسكتوب أو الأندرويد. بشكل عام وهذا ما ينطبق على لغة ++C فإن أفضل الطرق لتعلم البرمجة هي بناء برامج و مشاريع شخصية بسيطة ثم تطويرها على مراحل، وعن طريق حل تمارين برمجية (يمكن البحث عنها عبر جوجل "Programming Exercises" هناك تمارين حسب كل لغة)، يمكنك مثلا البدئ بحل تمارين تمني تفكيرك البرمجي بشكل كبير من خلال مستويات متسلسلة للأسئلة باللغة التي تختارها عبر موقع codewars.com فبعد إنتهائك من تعلم نقطة جديدة تتمرن على كيفية مواجهتها واقعيا وبذلك تقوى في كل جانب جديد من لغة c++ تتعلمة، قد تجد صعوبة في البداية لكن تطبيق هذه الطريقة مفيد وممتع في نفس الوقت فمع الممارسة ستجد الأمر سهل. الوثائق Documentation هي المرجع الرئيسي للغة البرمجة أو التقنية التي ستتعلمها لذا لا يمكن الإستغناء عنها إلا في حالة إن كانت طريقة تنظيم الوثائق سيئة وتصميمها سيء، في هذه الحالة أنصحك بالإعتماد على كتاب تعليمي مناسب يمكن إتخاذه كمرجع للغة ولك أن تختار أي مرجع أو توثيق يريحك بالطبيعة التي تعتاد عليها أو تستفيد من تجربة أخيك في إختيار مرجع التعلم طبعا ستحتاج للتطبيق العملي المستمر لكل جملة برمجية جديدة تتعلمها وتخطر ببالك من خلال برنامج سطح مكتب سهل الإستخدام والتحكم كبرنامج ++Dev C ويمكنك متابعة فيديو بطريقة تنزيل وتثبيت هذا البرنامج جميع من تميز في مجالات البرمجة المختلفة كان بالبداية لا يعرف شيئ وبدون أي خلفية عن أي لغة برمجة، فهذا شعور طبيعي كمبتدئ! لكن خلال وقت وجيز من التعلم ستصبح قادر على إنشاء برامج بسيطة ثم متقدمة ثم احترافية... بالتوفيق.
  23. أهلا بك في البداية، سأوضح ما تعنيه الخوارزميات ومدى ارتباطها بلغات البرمجة. تعرف الخوارزمية على أنها مجموعة محدودة من القواعد والطرق التي تعطي سلسلة من العمليات لحل نوع معين من المشاكل خطوة بخطوة بواسطة جهاز الكمبيوتر. قد تتضمن خطوات تعريف الخوارزمية التشعب أو التكرار بناءً على المشكلة التي يتم تطوير الخوارزمية لها. في حين يتم تعريف خطوات الخوارزمية بلغة بشرية مفهومة ومستقلة عن أي لغة برمجة فيمكننا تنفيذها بعد ذلك بأي لغة برمجة من اختيارنا. إلى جانب كونها مجرد مجموعة محدودة من القواعد التي تعطي سلسلة من العمليات لحل نوع معين من المشاكل ، فإن الخوارزمية المحددة جيدا تحتوي على خمس ميزات مهمة: -- المحدودية. يجب دائمًا إنهاء الخوارزمية بعد عدد محدد من الخطوات. -- الوضوح. يجب تحديد كل خطوة من الخوارزمية بدقة؛ يجب أن يتم تحديد الإجراءات التي يجب تنفيذها بدقة وبشكل لا لبس فيه لكل حالة. -- المدخال. الخوارزمية تحتوي على صفر أو أكثر من المدخلات، أي الكميات التي تعطى لها في البداية قبل أن تبدأ الخوارزمية. -- المخرج. تحتوي الخوارزمية على مخرج أو أكثر، أي الكميات التي لها علاقة محددة بالمدخلات. -- الفعالية. ومن المتوقع عمومًا أن تكون الخوارزمية فعالة أيضًا. وهذا يعني أن جميع العمليات التي يتعين إجراؤها في الخوارزمية يجب أن تكون أساسية بشكل كاف بحيث يمكن من حيث المبدأ أن تتم بالضبط وفي فترة زمنية محدودة. هل ترى أي علاقة؟ نعم، هناك علاقة، الخوارزمية ليست سوى فكرة لحل مشكلة بمساعدة لغة برمجة. الخوارزميات مفيدة لتعلم البرمجة بشكل عام وهي جيدة لأي مطور معرفة. لكن صحيح أنه يجب أن تتعلم الخوارزميات لتجعلك مبرمجًا عامًا بشكل أفضل، إلا أنها لن تساعد بشكل وثيق في استخدام جافا سكريبت ، باستثناء بعض الحالات الخاصة. JavaScript هي لغة مخصصة للعمليات غير المتزامنة التي تستند إلى الأحداث مثل جلب البيانات ومعالجة DOM، إنها ليست لغة حسابات بحته فليس من الضروري جدا أن تتعلم خوارزميات قبل تعلم جافا سكريبت. هناك كتب تتحدث عن تنفيذ الخوارزميات بلغات محددة ومنهم من ينفذ علم الخوارزميات مع جافا سكريبت. لكن مع ذلك، أنت لا تحتاج حقًا إلى استخدام الخوارزميات لبرمجة جافا سكريبت في معظم الأوقات. دورة تطوير واجهات المستخدم من أكاديمية حسوب تحولك لمطوّر واجهات مستخدم دون الحاجة لامتلاك معرفة سابقة بالبرمجة، ولا حتى معرفة سابقة بتفاصيل الخوارزميات، فبها ستتمكن من تعلّم تطوير واجهات المستخدم خطوة بخطوة اعتمادًا على التجربة العملية والمادة العلمية التي يتفاعل معها الطالب. كل التوفيق...
  24. أهلا بك، إليك هذين الكتابين وعدد صفحاتهم حوالي 50 صفحة لكل كتاب: كتاب بايثون بلمسة للمبتدئين و كتاب احترف البايثون أنصحك أيضاً بمراجعة موسوعة حسوب؛ إذ تحتوي على توثيق شامل للغة Python بالتوفيق...
×
×
  • أضف...