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

E.Nourddine

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

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

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

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

    18

إجابات الأسئلة

  1. إجابة E.Nourddine سؤال في أين أجد Files in hidden subdirectories في لوحة التحكم؟ كانت الإجابة المقبولة   
    يرجى تتبع المراحل التالية:
    بعد عملية login على الاستضافة
    اضغط أيقونة File Manager.
    تأكد من تحديد الخاصية  Show Hidden Files.
    اضغط Go
    المراحل بالصور:


    المصدر:
    How to show hidden files (htaccess) when using cPanel's File Manager cPanel Login
  2. إجابة E.Nourddine سؤال في على ماذا تعتمد سرعة لغات البرمجة؟ كانت الإجابة المقبولة   
    جميع لغات البرمجة دون استثناء تمر بعدّة مراحل ترجمة نحو لغة المعالج CPU، والذي يقوم بدوره بتنفيذ الكود ، الاختلاف الرئيسي هو في عدد وسرعة المراحل المُنجزة من أجل الوصول إلى لغة hexacodes/opcode المفهومة من قبلCPU.
    كمثال على ذلك، لغة Python تُعتبر من أبطئ اللغات لأنها مصممة لتكتب بلغة أقرب ما تكون إلى المستخدم، أضف إلى ذلك عدم تعيين نوع المتغيرات أثناء التعريف -declaration-، مما يدفع عملية الترجمة إلى القيام بعدد كبير من المراحل، نظراً  لنوعية البرمجة المستعملة.
    بالمقارنة مع لغة سي أو سي بلس بلس، فهي تتوفر على ضوابط وإرشادات كثيرة، في طريقة الكتابة، طريقة تعريف المتغيرات، حيث نجدها أكثر صرامة من مثيلتها Pythion، ما يعطي لـ سي أو سي بلس بلس سرعة في ترجمة الكود إلى لغة المعالج CPU.
    How is speed of a programming language decided
  3. إجابة E.Nourddine سؤال في كيف أنشئ تعليقات و ردود لموقعي؟ كانت الإجابة المقبولة   
    التعليقات والردود نبرمجها بالاستعانة بلغة برمجة ولنقل Php مثلا بالاضافة إلى ذلك نستعمل قاعدة بيانات لتخزين التعليقات والردود المسجلة، ليتم إظهارها كلما دعت الضرورة لذلك.
    نستعين بالمثال التالي، حيث ننشئ جدول في قاعدة بيانات mysqlبالشكل على الهيئة التالية:
    database name --> downdropcomment table name --> commenttable table values --> name--> varchar(20) job --> varchar (25) message --> varchar (250) الصفحة المسؤولة عن إظهار حقول اضافة التعليق:
    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Comment system using php and mysql</title> </head> <body> <form name="comment" method="post" action="comment.php" onSubmit="return validation()"> <table width="500" border="0" cellspacing="3" cellpadding="3" style="margin:auto;"> <tr> <td align="right" id="one">Name :<span style="color:#F00;">*</span></td> <td><input type="text" name="namename" id="tnameid"></td> </tr> <tr> <td align="right" id="one">Work :<span style="color:#F00;">*</span></td> <td><input type="text" name="job" id="tjobid"></td> </tr> <tr> <td align="right" id="one"></td> <td><textarea name="message" id="tmessageid"></textarea></td> </tr> <tr> <td align="right" id="one"></td> <td><input type="submit" name="submit" id="submit" value="Submit Comment"></td> </tr> </table> </form> </body> </html> نحصل على الشكل التالي في صفحةHtml:

    في صفحة أخرى من نوع php تحت اسم coomment.php:
    <?php include("db.php"); if(isset($_POST['submit'])) { $name=$_POST['namename']; $job=$_POST['job']; $message=$_POST['message']; $insert=mysql_query("insert into commenttable (name,job,message)values ('$name','$job','$message')")or die(mysql_error()); header("Location:index.php"); } ?> لاظهار التعليقات:
    <?php include("db.php"); $select=mysql_query("select * from commenttable"); while($row=mysql_fetch_array($select)) { echo "<div id='sty'>"; echo "<img src='files/fav icon.png'"."' width='50px' height='50px' align='left' />"; echo "<div id='nameid'>".$row['name']."</div>"; echo "<div id='msgid'>".$row['message']."</div>"; echo "</div><br />"; } ?> المصدر: Comment System using PHP and MySql
  4. إجابة E.Nourddine سؤال في كيف أربط تطبيق #C بسكريبت Python؟ كانت الإجابة المقبولة   
    يتضح لنا من خلال رابط الموقع الرسمي لـ#C بخصوص إمكانية عمل run لسكريبت بلغة Python أن ذلك ممكن، بل ويقدم الموقع أيضا شروحات حول الموضوع، لكن سأقتصر عليك الطريق، مبرزا بمثالٍ توضيحي كيفية عمل ذلك.
    نعتبر السكريبت التالي المكتوب بـ Python:
    if __name__ == '__main__': f = open(sys.argv[1], 'r') s = f.read() f.close() print s لتشغيل السكريبت وإعادة قيمةs المطبوعة، بلغة #C نستخدم الكود التالي:
    private void run_cmd(string cmd, string args) { ProcessStartInfo start = new ProcessStartInfo(); start.FileName = "my/full/path/to/python.exe"; start.Arguments = string.Format("{0} {1}", cmd, args); start.UseShellExecute = false; start.RedirectStandardOutput = true; using(Process process = Process.Start(start)) { using(StreamReader reader = process.StandardOutput) { string result = reader.ReadToEnd(); Console.Write(result); } } } مع الاشارة إلى المتغير cmd هو مسار تواجد ملف السكريبت -Python file-.
    للاستفادة أكثر:
    قسم دروس سي شارب &nbsp;على أكاديمية حسوب. Two ways to run Python programs from C# [Python.NET] Issues with running a phyton script from c#
  5. إجابة E.Nourddine سؤال في كيف يمكن حذف سطر أو عمود من مصفوفة بلغة c++؟ كانت الإجابة المقبولة   
    لحذف جميع العناصر سنستعمل حلقة التكرار for، بحيث ستتصفح جميع العناصر وبالتالي تطبيق دالة delete:
    for (int i = 0; i < rows ; ++i){ delete [] results[i]; } في حال أردنا حذف عنصر واحد فقط-ذو الرقم الترتيبي 7-، سنستعمل الكود:
    delete [] results[7]; لحذف سطر في مصفوفة Dynamic نستخدم الشيفرة التالية:
    unsigned rowToDelete = 2; if (myVector.size() > rowToDelete) { myVector.erase( myVector.begin() + rowToDelete ); } حيث أن myVector يشير إلى المصفوفة و rowToDelete إلى السطر الذي تريد حذفه ولقد استخدمنا دالة erase() للحذف.
    نتيجة الحذف تكون كالآتي:

  6. إجابة E.Nourddine سؤال في كيف أطبع ملفًا ثنائيًا على الشاشة بعد ترتيبه بلغة سي؟ كانت الإجابة المقبولة   
    نعم يمكننا فعل ذلك، أي يمكننا ترتيب الأرقام الموجودة بداخل الملف الثنائي، وللإشارة فالملف الثنائي هو ما يصطلح عليه بالانجليزية Binary file، حيث لن نستخدم مصفوفة كما يفعل البعض، بل سنتصفح الملف الثنائي وبالمقارنة مع آخر قيمة مقارنة فيه سيتم ترتيب قيمه-، ليتم إنشاء ملف مؤقت IndexTem  لنقل القيم المرتبة بداخله، كما يوضح الكود التالي:
    void Sort() { int StructureSize, Idx1, Idx2; FILE * binaryFile; binaryFile = fopen("Index.txt","rb+"); index_type Index, IndexTemp; StructureSize = sizeof(Index); fseek(binaryFile, 0, SEEK_END); int fileSize = ftell(binaryFile); rewind(binaryFile); for (Idx1 = 0; Idx1 < fileSize; Idx1 += StructureSize) { for (Idx2 = 0; Idx2 < fileSize - StructureSize; Idx2 += StructureSize) { fread(&Index, StructureSize, 1, binaryFile); fread(&IndexTemp, StructureSize, 1, binaryFile); if (Index.id > IndexTemp.id) { fseek(binaryFile, -(StructureSize * 2), SEEK_CUR); fwrite(&IndexTemp, StructureSize, 1, binaryFile); fwrite(&Index, StructureSize, 1, binaryFile); fseek(binaryFile, -StructureSize, SEEK_CUR); } else { fseek(binaryFile, -StructureSize, SEEK_CUR); } } rewind(binaryFile); } fclose(binaryFile); } C program for bubble sort C Program to Implement Bubble Sort in C Programming
  7. إجابة E.Nourddine سؤال في كيف أربط أكتفيتي -Activities- على أندرويد؟ كانت الإجابة المقبولة   
    لتمرير البيانات ببن الأكتفيتي -activities- سنحتاج إلى استعمال Intent حيث توفر لنا إمكانية الانتقال من activity1 إلى activity2 مع نقل أي بيانات سنتحتاجها في activity2، كاسم مستخدم، عنوانه البريدي...لغرض ما.
    في الكود التالي طريقة الانتقال مع نقل بيانات KeyName:
    للإشارة الكود ينقلنا من activity1 نحو AndroidTabRes:
    Intent intent = new Intent(current.this, AndroidTabRestaurantDescSearchListView.class); intent.putExtra("keyName","value"); startActivity(intent); بداخا كود AndroidTabRes:
    String data = getIntent().getExtras().getString("keyName"); ليتم استقبال البيانات داخل AndroidTabRes.
    أمثلة أخرى:
    Passing data between activities Android Tutorial – Transfer Data Between Activities Using Intent How to Pass Data between Activities using Intents
  8. إجابة E.Nourddine سؤال في كيف أبرمج QR Reader Device على تطبيق أندرويد ستوديو؟ كانت الإجابة المقبولة   
    لحد الساعة لا أعتقد أن امكانية ربط جهاز قراءة QR rcode متاحة على أجهزة أندرويد من خلال الأدوات البسيطة -حهاز قارئ QR و جهاز ببيئة أندرويد-، إلا إذا كنّا سنستخدم كاميرا الموبايل، حيث تتيح هذه الطريقة استعمال الكاميرا كأداة لمسح QR كود  وبالتالي تحويل الصورة برمجيًا إلى شيفرة ليتم التعامل معها حسب الرموز المناسبة للشيفرة،  ولعمل ذلك أضع بين أيديك -بالاضافة إلى ما قدمه الأخ هشام- بعض الدروس والمقاللات التي ارى أنها ستغني الموضوع لديك:
    Android SDK: Create a Barcode Reader How do I write a Java code for a barcode scanner? Tutorial how to create Barcode Reader app in Android Studio 1.4 Implement barcode scanner using ZXing in Android
  9. إجابة E.Nourddine سؤال في هل يوجد فرق بين side drawer وَ navigation drawer على أندرويد ستوديو؟ كانت الإجابة المقبولة   
    بعد بعض البحث وجدت أن الأمر يتعلق بنفس التأثير، حيث تزاح الأداة عند الضغط على الزر، ومن خلال الموقع الرسمي لمطوري أندرويد
    developer.android
    يجب توفر واجهةDraw Layout والتي ستتضمن القائمة المنزلقة Navigation Drawer  بالشكل التالي:
    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- The main content view --> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- The navigation drawer --> <ListView android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:background="#111"/> </android.support.v4.widget.DrawerLayout> لعمل Initialize القائمة:
    public class MainActivity extends Activity { private String[] mPlanetTitles; private DrawerLayout mDrawerLayout; private ListView mDrawerList; ... @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mPlanetTitles = getResources().getStringArray(R.array.planets_array); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerList = (ListView) findViewById(R.id.left_drawer); // Set the adapter for the list view mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, mPlanetTitles)); // Set the list's click listener mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); ... } } إنشاء حدث تحديد المستخدم وضغطه على أحد العناصر:
    private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { selectItem(position); } } /** Swaps fragments in the main content view */ private void selectItem(int position) { // Create a new fragment and specify the planet to show based on position Fragment fragment = new PlanetFragment(); Bundle args = new Bundle(); args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position); fragment.setArguments(args); // Insert the fragment by replacing any existing fragment FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.content_frame, fragment) .commit(); // Highlight the selected item, update the title, and close the drawer mDrawerList.setItemChecked(position, true); setTitle(mPlanetTitles[position]); mDrawerLayout.closeDrawer(mDrawerList); } @Override public void setTitle(CharSequence title) { mTitle = title; getActionBar().setTitle(mTitle); } حدث فتح وغلق القائمة -عملية الازاحة-:
    public class MainActivity extends Activity { private DrawerLayout mDrawerLayout; private ActionBarDrawerToggle mDrawerToggle; private CharSequence mDrawerTitle; private CharSequence mTitle; ... @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ... mTitle = mDrawerTitle = getTitle(); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) { /** Called when a drawer has settled in a completely closed state. */ public void onDrawerClosed(View view) { super.onDrawerClosed(view); getActionBar().setTitle(mTitle); invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } /** Called when a drawer has settled in a completely open state. */ public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); getActionBar().setTitle(mDrawerTitle); invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } }; // Set the drawer toggle as the DrawerListener mDrawerLayout.setDrawerListener(mDrawerToggle); } /* Called whenever we call invalidateOptionsMenu() */ @Override public boolean onPrepareOptionsMenu(Menu menu) { // If the nav drawer is open, hide action items related to the content view boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); menu.findItem(R.id.action_websearch).setVisible(!drawerOpen); return super.onPrepareOptionsMenu(menu); } } برنامج أندرويد ستوديو يوفر إمكانية إنشاء Navigation Drawer Activity:

    الدرس المقدم من خلال الرابط المُعنون تحت اسم How to Add a Navigation Drawer in Android، نحصل على النتيجة:

     
  10. إجابة E.Nourddine سؤال في كيف أربط تطبيق أندرويد بقاعدة بيانات Mysql؟ كانت الإجابة المقبولة   
    يجب الانتباه إلى شيء مهم في هذه التقنية -ربط تطبيق أندرويد بقاعدة بيانات من نوع Mysql- وهو أن قاعدة البيانات ستتواجد على استضافة وأن التطبيق سيتواجد على هاتف المستخدم، وفي هذه الحالة ستحتاج إلى web service للقيام بالمهمة على أكمل وجه.
    أيضا سيكون من الأساسي استخدام لغة php وتقنية Json، إذ سنتبع الخطوات التالية:
    الجزء الخاص بـ PHP وَ Mysql:
    سنستعمل الموقع https://www.000webhost.com/ حيث يوفر إمكانية الحصول على استضافة مجانية.

    ننشئ بعد ذلك قاعدة البيانات الخاصة بنا:

    ستحصل على المعلومات الخاصة بك كمستخدم للتمكن من الاتصال بقاعدة البيانات.
    مثال:

    سنحتاج إلى ملف Php للاتصال بقاعدة البيانات:
    <?php $con=mysqli_connect("mysql13.000webhost.com","a2957838_anduser","mypassword123","a2957838_android"); if (mysqli_connect_errno($con)) { echo '{"query_result":"ERROR"}'; } $fullName = $_GET['fullname']; $userName = $_GET['username']; $passWord = $_GET['password']; $phoneNumber = $_GET['phonenumber']; $emailAddress = $_GET['emailaddress']; $result = mysqli_query($con,"INSERT INTO user (fullname, username, password, phone, email) VALUES ('$fullName', '$userName', '$passWord', '$phoneNumber', '$emailAddress')"); if($result == true) { echo '{"query_result":"SUCCESS"}'; } else{ echo '{"query_result":"FAILURE"}'; } mysqli_close($con); ?> باقي الخطوات يمكنك الاطلاع عليها من خلال الرابط. يمكنك أيضا مشاهدة الدرس التالي -غير مجاني-:https://teamtreehouse.com/library/build-a-weather-app مصدر:رابط لموقع أسئلة stackoverflow.
  11. إجابة E.Nourddine سؤال في هل يوجد طريقة أو برنامج لتحويل الفلاش إلى فيديو؟ كانت الإجابة المقبولة   
    أُرشدك إلى عدو مواقع تعمل أونلاين وبشكل مجاني، حيث ستتبع الخطوات التالية:
    تختار ملف الفلاش من خلال زر التصفح الموجود بالموقع. تختار نوع الملف المستخرج لإى آخر التحويل. قد تحتاج إلى ادخال بريدك الالكتروني لاستقبال الملف  على شكل رسالة تبعث لك. ضغط زر convert  لبدء عملية التحويل. المواقع:
    موقع zamzar video.online-convert. Convert Files جل المواقع لها نفس الاستراتيجية في عملية التحويل.
  12. إجابة E.Nourddine سؤال في ما هو الفرق بين  attribute  و  property؟ كانت الإجابة المقبولة   
    يمكن ايجاد الفرق بين عنصري property وّ attribute في برمجة الويب، خصوصا عند التحدث عن DOM.
    بخصوص property يمكن الحصول على قيم مختلف الخصائص properties المتعلقة بوسوم html، حيث نحصل على أنواع مختلف من القيم: boolean، string...  من خلال استعمال خاصية prop علىjQuery كما هو موضح أسفله:
    لديناوسم الرابط <a href='page2.html' class='link classes' name='linkName' id='linkID'>Hi</a> property لاستخراج قيم jQueryعند استعمال كود $('#linkID').prop('href'); // returns "http://example.com/page2.html" $('#linkID').prop('name'); // returns "linkName" $('#linkID').prop('id'); // returns "linkID" $('#linkID').prop('className'); // returns "link classes" يمكن تغيير و تحديث قيم Prop من خلال jQuery بواسط الكود:
    <a href='page2.html'>Hi</a> $('#linkID').prop('href', 'page1.html'); $('#linkID').prop('href'); // returns "http://example.com/page1.html" بالنسبة لـattribute تتعلق بلغة html اكثر منDOM، ويمكن ملاحظة الفرق مع خاصية property من خلال الكود التالي:
    <input type="checkbox" checked=true/> $('input').prop('checked'); // returns true $('input').attr('checked'); // returns "checked" تتميز خاصية attribute بحفاظها على القيم الافتراضية التي أخذها الوسم (default value)، ويمكن اعتبارها ميزة في بعض  الأحيان، كما قد تعطي القيمة الخطأ للمبرمج في حين تم تحيين قيمة الوسم، كمثال لذلك:
    <input type="text" name="username" value="user123"> $('input').prop('value', '456user'); $('input').prop('value'); // returns "456user" $('input').attr('value'); // returns "user123"  
  13. إجابة E.Nourddine سؤال في ما هي خطوات تنفيذ مشروع برمجي لغير المبرمجين؟ كانت الإجابة المقبولة   
    الطريقة الأنسب هي أن توظف مبرمجاً ملماً ومتقناً لعمله، على أن يتم الاتفاق بينكما في بادئ الأمر على كيفية العمل، حيث من الممكن أن يكون الاتفاق بشكل عام على أحد الشكلين:
        توظيف المستقل للقيام بإنجاز المهام المنوط به عملها، دون إدخاله في حيثيات الربح من التطبيق، نجاحه أو فشله، وفي هذه الحالة ستنتهي مهمته بعد إتمام البرمجة.     الطريقة الثانية التي من الممكن أن يتعاقد معك بها المستقل، أن يكون شريكا بشكل جزئي في المشروع، حيث تضمن استمراريته معك، وأيضًا تأجيل مقابل أتعابه إلى حين نجاح المشروع والربح منه. أرجو أن تطلّع على المقالين التاليين، لأنهما يصبان في صلب موضوع سؤالك:
    كيف تبدأ مشروعا تجاريا تقنيا إن كنت لا تحسن البرمجة؟ "سرقة الأفكار" في عالم ريادة الأعمال، وهم أم حقيقة؟
  14. إجابة E.Nourddine سؤال في كيف أجعل شكل الزر بيضاوي أو دائري في الفيجوال بيسك 2010؟ كانت الإجابة المقبولة   
    الطريقة المستعملة عند المبرمجين، لجعل الزر ذي تأثير بيضاوي أو بزوايا خارجية دائرية -border radius-، هي باستعمال مكتبة Drawin2D، حيث ننشئ شكل بيضوي وزوايا دائرية ليتم بعد ذلك تطبيق التأثير على الزر أثناء بناء الواجهة أي عند حدث Form1_Load، بواسط الكود التالي:
    Dim p As New Drawing2D.GraphicsPath p.StartFigure() p.AddArc(New Rectangle(0, 0, 40, 40), 180, 90) p.AddLine(40, 0, Button1.Width - 40, 0) p.AddArc(New Rectangle(Button1.Width - 40, 0, 40, 40), -90, 90) p.AddLine(Button1.Width, 40, Button1.Width, Button1.Height - 40) p.AddArc(New Rectangle(Button1.Width - 40, Button1.Height - 40, 40, 40), 0, 90) p.AddLine(Button1.Width - 40, Button1.Height, 40, Button1.Height) p.AddArc(New Rectangle(0, Button1.Height - 40, 40, 40), 90, 90) p.CloseFigure() Button1.Region = New Region(p) أيضا يمكن استعمال الطريقة المبينة في الرابط حيث تم استعمال مكتبة Microsoft Visual Basic PowerPacks.
    لنحصل على :

    الفيديوالتالي يتضمن شرحاً مفصلا للعملية:
     
  15. إجابة E.Nourddine سؤال في أريد class link list باستخدام المصفوفات بلغة ++c ؟ كانت الإجابة المقبولة   
    كتعريف لـ class linked list على لغة ++C، هي مصفوفة مكونة من بنيات بيانات تُخزّن يها بيانات لا يُشترط أن تكون من نفس النوع، وتربط بينها مؤشرات Pointersبطريقة متسلسلة.
    صورة موضحة لبنية class Linked list:

    أيضا:
    linkedlist.bmp
    الفرق بين linked list وَ مصفوفة array:
    array: محدودة الطول.
    الحذف والاضافة تتطلب وقت.
    قراءة العناصر يتم عن طريقindex.
    Linked Lists: طول قابل للتغيير.
    الحذف والاضافة فعالة.
    قراءة العناصر بالتتابع.
    مثال:
    #include <iostream> using namespace std; struct Node { int data; Node* next; }; // only for the 1st Node void initNode(struct Node *head,int n){ head->data = n; head->next =NULL; } // apending void addNode(struct Node *head, int n) { Node *newNode = new Node; newNode->data = n; newNode->next = NULL; Node *cur = head; while(cur) { if(cur->next == NULL) { cur->next = newNode; return; } cur = cur->next; } } void insertFront(struct Node **head, int n) { Node *newNode = new Node; newNode->data = n; newNode->next = *head; *head = newNode; } struct Node *searchNode(struct Node *head, int n) { Node *cur = head; while(cur) { if(cur->data == n) return cur; cur = cur->next; } cout << "No Node " << n << " in list.\n"; } bool deleteNode(struct Node **head, Node *ptrDel) { Node *cur = *head; if(ptrDel == *head) { *head = cur->next; delete ptrDel; return true; } while(cur) { if(cur->next == ptrDel) { cur->next = ptrDel->next; delete ptrDel; return true; } cur = cur->next; } return false; } /* reverse the list */ struct Node* reverse(struct Node** head) { Node *parent = *head; Node *me = parent->next; Node *child = me->next; /* make parent as tail */ parent->next = NULL; while(child) { me->next = parent; parent = me; me = child; child = child->next; } me->next = parent; *head = me; return *head; } /* Creating a copy of a linked list */ void copyLinkedList(struct Node *node, struct Node **pNew) { if(node != NULL) { *pNew = new Node; (*pNew)->data = node->data; (*pNew)->next = NULL; copyLinkedList(node->next, &((*pNew)->next)); } } /* Compare two linked list */ /* return value: same(1), different(0) */ int compareLinkedList(struct Node *node1, struct Node *node2) { static int flag; /* both lists are NULL */ if(node1 == NULL && node2 == NULL) { flag = 1; } else { if(node1 == NULL || node2 == NULL) flag = 0; else if(node1->data != node2->data) flag = 0; else compareLinkedList(node1->next, node2->next); } return flag; } void deleteLinkedList(struct Node **node) { struct Node *tmpNode; while(*node) { tmpNode = *node; *node = tmpNode->next; delete tmpNode; } } void display(struct Node *head) { Node *list = head; while(list) { cout << list->data << " "; list = list->next; } cout << endl; cout << endl; } int main() { struct Node *newHead; struct Node *head = new Node; initNode(head,10); display(head); addNode(head,20); display(head); addNode(head,30); display(head); addNode(head,35); display(head); addNode(head,40); display(head); insertFront(&head,5); display(head); int numDel = 5; Node *ptrDelete = searchNode(head,numDel); if(deleteNode(&head,ptrDelete)) cout << "Node "<< numDel << " deleted!\n"; display(head); cout << "The list is reversed\n"; reverse(&head); display(head); cout << "The list is copied\n"; copyLinkedList(head,&newHead); display(newHead); cout << "Comparing the two lists...\n"; cout << "Are the two lists same?\n"; if(compareLinkedList(head,newHead)) cout << "Yes, they are same!\n"; else cout << "No, they are different!\n"; cout << endl; numDel = 35; ptrDelete = searchNode(newHead,numDel); if(deleteNode(&newHead,ptrDelete)) { cout << "Node "<< numDel << " deleted!\n"; cout << "The new list after the delete is\n"; display(newHead); } cout << "Comparing the two lists again...\n"; cout << "Are the two lists same?\n"; if(compareLinkedList(head,newHead)) cout << "Yes, they are same!\n"; else cout << "No, they are different!\n"; cout << endl; cout << "Deleting the copied list\n"; deleteLinkedList(&newHead); display(newHead); return 0; } النتيجة:
     
    10 10 20 10 20 30 10 20 30 35 10 20 30 35 40 5 10 20 30 35 40 Node 5 deleted! 10 20 30 35 40 The list is reversed 40 35 30 20 10 The list is copied 40 35 30 20 10 Comparing the two lists... Are the two lists same? Yes, they are same! Node 35 deleted! The new list after the delete is 40 30 20 10 Comparing the two lists again... Are the two lists same? No, they are different! Deleting the copied list هناك دورة فيديو على موقع youtube:
    مصادر أخرى:
    C++ Tutorial: Intro to Linked Lists Linked Lists C++ Tutorial - Linked List Examples - 2016
  16. إجابة E.Nourddine سؤال في كيف أرسم أشكال معينة بالنجوم بلغة c++؟ كانت الإجابة المقبولة   
    الطريقة المتبعة في هذه التقنية هي كالآتي:
    الاعتماد على جدول ثنائي الأبعاد Table 2D، ليتم الاعتماد عليه كهيكل للشكل المُراد رسمه، حيث نملأ خانات محددة ونترك أخرى فارغة، حسب طبيعة الشكل.
    مثلا في حالة الحصول على شكل مثلث:
    * *** ***** ******* ********* نستعمل الكود التالي، حيث نستعمل حلقتي تكرار من نوع For loop، نملأ خانات ونترك خانات أخرى فارغة، بالشكل  المبين في الكود:
    #include <stdio.h> int main() { int row, c, n, temp; printf("أدخل رقم الأسطر المُراد إدراجها في المثلث "); scanf("%d",&n); temp = n; for ( row = 1 ; row <= n ; row++ ) { for ( c = 1 ; c < temp ; c++ ) printf(" "); temp--; for ( c = 1 ; c <= 2*row - 1 ; c++ ) printf("*"); printf("\n"); } return 0; } نحصل على الشكل:

    يمكن أيضا طباعة ورسم مثلث بأرقام عوض النجوم:
    #include<stdio.h> main() { int n, c, d, num = 1, space; scanf("%d",&n); space = n - 1; for ( d = 1 ; d <= n ; d++ ) { num = d; for ( c = 1 ; c <= space ; c++ ) printf(" "); space--; for ( c = 1 ; c <= d ; c++ ) { printf("%d", num); num++; } num--; num--; for ( c = 1 ; c < d ; c++) { printf("%d", num); num--; } printf("\n"); } return 0; } لتكون النتيجة:
    1 232 34543 4567654 567898765 مصادر:
    C program to print patterns of numbers and stars C program to print diamond pattern
  17. إجابة E.Nourddine سؤال في كيف أضيف صفحة لعمل فوتوشوب أون لاين على موقعي؟ كانت الإجابة المقبولة   
    تعتمد مثل هذه المواقع على سكريبت مكون بالأساس من تقنية Html5 التي توفر أدوات جد متطورةمثل Canvas، بالاضافة إلى Javascrip التي تمكن من توفير خاصية السحب والجر Drag and Drop.
    توفر المكتب التالية على موقع github إمكانية تضمين هذه الخدمة على موقعك، المكتبة باسم miniPaint.
    هذه صورة من Demo السكريبت:

    أيضا يمكنك اقتناء السكريبت  التالي من موقع http://codecanyon.net بسعر 10 دولار فقط.
  18. إجابة E.Nourddine سؤال في كيف يمكن تحويل فيديو لمصفوفة بايتات؟ كانت الإجابة المقبولة   
    رغم ان محترفي البرمجة لا ينصحون بتخزين ملفات الفيديو داخل قاعدةالبيانات، لما لها من تأثير سلبي على سرعة الخادم، حيث سيصبح من الصعب جلب البيانات بالسرعة المعهودة، والطريقة الأصح هي تخزين رابط الفيديو داخل قاعدة البيانات مع وصفه، ونقل الملف إلى مجلد مخصص للفيديوهات، لكن على أيٍ سأرشدك إلى موقع يعرض طريقة تخزين الفيديو على شكلbinary data.
    store video in database using C# and SQL أيضا لتستفيد من بعض الآراء حول الموضوع:
    What type of database should I store video files for a website?  
  19. إجابة E.Nourddine سؤال في هل من شرح لأنواع حلقات التكرار وأسباب استخدامها؟ كانت الإجابة المقبولة   
    تشترك حلقتي التكرار For وَWhile في تنفيذهما لحلقة واحدة أو أكثر- يعني أن كلتا الحلقتين ستنفذ أمراً على الأقل-، و من حيث الاختلافات نجد:
    طريقة الكتابة:
    While: while(condtion) { //condition تنفيذ الأوامر البرمجية داخل الحلقة عند تحقق الشرط } For: for(intialization; condition; Increment or decrement){ // intialization قيمة البدء //condition تنفيذ الأوامر البرمجية داخل الحلقة عند تحقق الشرط //decrement أو تنازلياIncrement الانتقال تصاعديا } مثال:
    for(i =0,i<20;i++){ } في While يتم التأكد أول من صحة الشرط ليتم الدخول إلى الحلقة وتنفيذ ما بها من أوامر برمجية.
    في For قيمة البدء تنفذ ليتم فيما بعد توالي قيم Index i، أي أنه لن يتم تنفيذ قيمة i مرتين.
    الاستعمال:
    While: تستعمل عند جهل -عدم تمكننا من معرفة- عدد المرات التي ستتكرر خلالها الحلقة.
    For: تستعمل عند العلم المسبق بعدد مرات تكرار الحلقة.
    الفيديو التالي يعرض الطريقة بشكل طريف:
     
  20. إجابة E.Nourddine سؤال في كيف أبعث رسالة sms إلى مجموعة من الأرقام عبر تطبيق android؟ كانت الإجابة المقبولة   
    باعتبار أن لديك مصفوفة تضم لائحة الأرقام ، سنقوم بتفحص المصفوفة عبر دالة for وبالتالي عند المرور بكل رقم، سيتم إرسال رسالةsms غلى الشخص المعني بالرقم المسجل داخل المصفوقة - السطر ذو الترتيب i- بالطريقة التالية:
    protected void sendMsg(Context context, SmsMessage smsMessage) { SmsManager smsMgr = SmsManager.getDefault(); ArrayList<string> smsMessageText = smsMgr.divideMessage(smsMessage.getMsgBody()); PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, new Intent("SMS_SENT"), 0); PendingIntent deliveredPI = PendingIntent.getBroadcast(context, 0, new Intent("SMS_DELIVERED"), 0); int AddresseesPerMessage = 10; StringBuilder builder = new StringBuilder(); String delim = ""; for (ContactItem c:smsMessage.getAddresseeList()) { // For every phone number in our list builder.append(delim).append(c.getPhoneNumber().toString()); delim=";"; if (((smsMessage.getAddresseeList().indexOf(c)+1) % AddresseesPerMessage) == 0 || smsMessage.getAddresseeList().indexOf(c)+1 == smsMessage.getAddresseeList().size()) { // using +1 because index 0 mod 9 == 0 for(String text : smsMessageText){ // Send 160 bytes of the total message until all parts are sent smsMgr.sendTextMessage(builder.toString(), null, text, sentPI, deliveredPI); } builder.setLength(0); delim=""; } } } أيضا يمكنك إنشاء class مخصصة لإرسال رسائل لمجموعة من الأرقام:
    private void MultipleSMS(String phoneNumber, String message) { String SENT = "SMS_SENT"; String DELIVERED = "SMS_DELIVERED"; PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent( SENT), 0); PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0); // ---when the SMS has been sent--- registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context arg0, Intent arg1) { switch (getResultCode()) { case Activity.RESULT_OK: ContentValues values = new ContentValues(); for (int i = 0; i < MobNumber.size() - 1; i++) { values.put("address", MobNumber.get(i).toString()); // txtPhoneNo.getText().toString()); values.put("body", MessageText.getText().toString()); } getContentResolver().insert( Uri.parse("content://sms/sent"), values); Toast.makeText(getBaseContext(), "SMS sent", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(getBaseContext(), "Generic failure", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NO_SERVICE: Toast.makeText(getBaseContext(), "No service", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NULL_PDU: Toast.makeText(getBaseContext(), "Null PDU", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_RADIO_OFF: Toast.makeText(getBaseContext(), "Radio off", Toast.LENGTH_SHORT).show(); break; } } }, new IntentFilter(SENT)); // ---when the SMS has been delivered--- registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context arg0, Intent arg1) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(getBaseContext(), "SMS delivered", Toast.LENGTH_SHORT).show(); break; case Activity.RESULT_CANCELED: Toast.makeText(getBaseContext(), "SMS not delivered", Toast.LENGTH_SHORT).show(); break; } } }, new IntentFilter(DELIVERED)); SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); } استعمال كلاس MultipleSMS داخل حلقة تكرار for التي تتصفح الأرقام الموجودة داخل المصفوفة:
    for (int i = 0; i < MobNumber.size(); i++) { String message = MessageText.getText().toString(); String tempMobileNumber = MobNumber.get(i).toString(); MultipleSMS(tempMobileNumber, message); } المصدر: sending-sms-to-multiple
  21. إجابة E.Nourddine سؤال في هل من مصادر تعليمية لـ App Inevtor ؟ كانت الإجابة المقبولة   
    يمكنك  الاستفادة من مجموعة الدروس التالية، مع الأسف لا تتوفر دروس بالعربية حاليا، لكن لا بأس بالانجليزية :
    موقع appinventor.org يقدم مجموعة دروس متسلسلة ومفيدة. ثم: درس آخر -فرنسي اللغة-:  
  22. إجابة E.Nourddine سؤال في كيف أحول لعبة بـ Html5 إلى تطبيق اندرويد؟ كانت الإجابة المقبولة   
    لفعل ذلك قم بالخطوات التالية:
    على برنامج Eclipse أنشيء تطبيق. أنشيءLayout يتوفر على <WebView>. أُنقل كود Html إلى ملف assets/ قم بعمل Load لملف file:///android_asset/ file وتكون قد حصلت على تطبيق اندرويد. ويمكنك أيضا الاستعانة بـ Adobe PhoneGap
  23. إجابة E.Nourddine سؤال في كيف أحلّ هذا المشكل على اندرويد ستوديو؟ كانت الإجابة المقبولة   
    لحل المشكل المُقابل، جرب إحدى الطريقتين:
    الطريقة الأولى:  اذهب إلى  configuration
     حدد Settings
     حدد HTTP Proxy
     عيّن  to use no proxy
     أعد تشغيل Andriod studio
    الطريقة الثانية:  
  24. إجابة E.Nourddine سؤال في كيف أربط تطبيق اندرويد بـ webservice؟ كانت الإجابة المقبولة   
    سأقدم هنا مثال عمل لربط التطبيق بـ Webservice عن طريقبروتوكول SOAP:
    Layout XML:
    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:gravity="center" android:text="Celsius to Farenheit" android:textSize="30dp" /> <EditText android:id="@+id/editText1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:numeric="integer" android:singleLine="true" /> <Button android:id="@+id/button1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:gravity="center" android:text="Convert to Farenheit" /> <TextView android:id="@+id/tv_result" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text="" android:textSize="26dp"/> </LinearLayout> التصميم سيكون كالآتي:

    أنشيء objects في WebserviceActivity:
    private final String NAMESPACE = "http://www.w3schools.com/webservices/"; private final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx"; private final String SOAP_ACTION = "http://www.w3schools.com/webservices/CelsiusToFahrenheit"; private final String METHOD_NAME = "CelsiusToFahrenheit"; private String TAG = "PGGURU"; private static String celcius; private static String fahren; Button b; TextView tv; EditText et; وظيفة onCreate():
    public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //Celcius Edit Control et = (EditText) findViewById(R.id.editText1); //Fahrenheit Text control tv = (TextView) findViewById(R.id.tv_result); //Button to trigger web service invocation b = (Button) findViewById(R.id.button1); //Button Click Listener b.setOnClickListener(new OnClickListener() { public void onClick(View v) { //Check if Celcius text control is not empty if (et.getText().length() != 0 && et.getText().toString() != "") { //Get the text control value celcius = et.getText().toString(); //Create instance for AsyncCallWS AsyncCallWS task = new AsyncCallWS(); //Call execute task.execute(); //If text control is empty } else { tv.setText("Please enter Celcius"); } } }); } Class AsyncCallWS:
    private class AsyncCallWS extends AsyncTask<String, Void, Void> { @Override protected Void doInBackground(String... params) { Log.i(TAG, "doInBackground"); getFahrenheit(celcius); return null; } @Override protected void onPostExecute(Void result) { Log.i(TAG, "onPostExecute"); tv.setText(fahren + "° F"); } @Override protected void onPreExecute() { Log.i(TAG, "onPreExecute"); tv.setText("Calculating..."); } @Override protected void onProgressUpdate(Void... values) { Log.i(TAG, "onProgressUpdate"); } } getFahrenheit():
    public void getFahrenheit(String celsius) { //Create request SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); //Property which holds input parameters PropertyInfo celsiusPI = new PropertyInfo(); //Set Name celsiusPI.setName("Celsius"); //Set Value celsiusPI.setValue(celsius); //Set dataType celsiusPI.setType(double.class); //Add the property to request object request.addProperty(celsiusPI); //Create envelope SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER11); envelope.dotNet = true; //Set output SOAP object envelope.setOutputSoapObject(request); //Create HTTP call object HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); try { //Invole web service androidHttpTransport.call(SOAP_ACTION, envelope); //Get the response SoapPrimitive response = (SoapPrimitive) envelope.getResponse(); //Assign it to fahren static variable fahren = response.toString(); } catch (Exception e) { e.printStackTrace(); } } Internet permission:
    <uses-permission android:name="android.permission.INTERNET" /> لعمل webService مع Json:
     
  25. إجابة E.Nourddine سؤال في كيف أستعمل RecyclerView عوض ListView على اندرويد ستوديو؟ كانت الإجابة المقبولة   
    على اندرويد يمكن إنشاء RecycleView بمثابة LisView، لذا ما عليك إلا ربطها بـأداة ListView، وكمثال على ذلك:
    mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); أو:
    mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));* في هذا الرابط ستجد مقارنة بين RecycleView وَ ListeView بشكل أوضح.
    الجزء الثاني:
    الموقع الرسمي: RecyclerView
×
×
  • أضف...