مدونة IDev مدونة IDev
random

آخر المواضيع

random
جاري التحميل ...

تعرف عن لغة البرمجة C مع 15 تمرين من التمارين المطلوبة





لغة البرمجة C هي لغة شعبية ومنتشرة بشكل لا يصدق، ومن السهل معرفة سبب ذلك. حيث تعتبر البرمجة بلغة C فعّالة، وتمنح المبرمج قدراً كبيراً من السيطرة. وقد وضِعَت العديد من لغات البرمجة الأخرى مثل ++C، جافا Java، وبايثون Python باستخدام C.

في حال كنت مبرمجاً، فإنّ فرص عدم استخدامك للغة البرمجة C على وجه الخصوص تتزايد بشكل يومي، إلّا أنّ هنالك العديد من الأسباب التي تجعل من لغة البرمجة C مفيدة للغاية، حتى لو لم تكن تستخدم هذه اللغة بانتظام. وإليك هذه الأسباب:

سيكون بإمكانك قراءة وكتابة التعليمات البرمجية (الكود) للبرمجيّات التي يمكن استخدامها على أنواع مختلفة ومتعدّدة من المنصّات الحاسوبيّة، بدءاً من المتحكّمات المصغّرة Microcontrollers وحتّى الحواسيب المكتبيّة، والحواسيب المحمولة وأنظمة تشغيل الهواتف المحمولة.

سيكون بمقدورك أن تدرك بشكل أفضل ما تفعله اللغات عالية المستوى في الظل، مثل إدارة الذاكرة وتحرير خلاياها من المعلومات غير المستخدمة والخاصّة بالبرامج المغلقة، وذلك من أجل زيادة مقدرة الحاسوب على تشغيل برامج أكثر في آنٍ معاً Garbage Collector. وهذا الإدراك يمكن أن يساعدك على كتابة برامج تعمل بكفاءة أكبر.

إذا كنت متخصصًا في تكنولوجيا المعلومات IT، فقد تستفيد أيضاً من تعلّم لغة البرمجة C. حيث يقوم محترفو تكنولوجيا المعلومات غالباً بكتابة وصيانة وتشغيل برامج نصيّة scripts كجزء من عملهم اليومي. البرنامج النصي هو مجموعة من التعليمات التي يتوجّب على نظام التشغيل الحاسوبي اتباعها.

من أجل تشغيل بعض البرامج النصية، يضع الحاسوب بيئة تنفيذ متحكّم بها تدعى Shell. وبما أنّ معظم أنظمة التشغيل تشغّل الـShells بالاعتماد على لغة C، فإنّ الكتابة بلغة C -بالتالي- تعد عملاً طبيعيًا يقوم به المتخصصون بتكنولوجيا المعلومات.

تغطي سلسلة المقالات هذه التاريخَ وراء لغة C، كما تشرح سبب تصنيف لغة البرمجة C من اللغات المهمّة، وتطرح أمثلة مكتوبة بلغة C كما تستكشف بعض السمات الهامة لهذه اللغة، بما في ذلك أنواع البيانات، والعمليات، والدوال (التوابع)، والمؤشرات وإدارة الذاكرة. وبالرغم من أنّ هذه السلسلة ليست دليلاً إرشاديًا للبرمجة بلغة C، إلّا أنّها توضّح الأسباب التي تجعل البرمجة بلغة C فريدة من نوعها بشكل مغاير عن الطرق التقليدية التي تبدأ فيها الفصول الأولى من الكتب المتخصصة بالبرمجة بلغة C في العادة.

دعونا نبدأ بالكشف عن المصدر الذي جاءت منه لغة البرمجة C، نبيّن كيف تطوّرت وما هو الدور الذي تلعبه في مجال تطوير البرمجيات اليوم.

ما هي لغة البرمجة C


إنّ أبسط طريقة لتعريف لغة البرمجة C هي أن ندعوَها بلغة البرمجة الحاسوبيّة، ما يعني أنّه بإمكانك كتابة برامج يستطيع الحاسوب تنفيذها باستخدام هذه اللغة. قد تكون النتائج تطبيقات حاسوبيّة كبيرة من حيث الحجم والأداء، كمتصفح الويب الخاص بك، أو مجموعة صغيرة من التعليمات مضمنةً في معالج مصغّر أو مكونات حاسوبيّة أخرى.

تم العمل على إنتاج لغة C في سبعينيات القرن الماضي في مختبرات بيل، ويعود الفضل في المقام الأول لعمل كين تومسون Ken Thompson ودنيس ريتشي Dennis Ritchie. كان الهدف من تطويرها هو حاجة المبرمجين إلى مجموعة من التعليمات الأكثر سهولة في التعامل مع نظام التشغيل UNIX، والذي كان يتطلّب -في ذلك الوقت- كتابة التعليمات بلغة التجميع Assembly. البرمجة بلغة التجميع ليست بالعملية السهلة والبسيطة، لأنّ تعليماتها تُخاطب بنية الحاسب بشكل مباشر، ما يجعل من الصعوبة بمكان كتابة البرنامج وتصحيحه، كما أنّها عملية مملة وتستهلك وقتًا كبيرًا من أجل إضافة وتعديل البرنامج ليقوم بمهمة معينة، حتى وإن كانت بسيطة. [المصدر: King]

كانت محاولة تومسون الأولى لعمل لغة برمجة عالية المستوى تُسمى B، تعتمد بشكل أساسي على لغة البرمجة BCPL.
وعندما احتاجت مختبرات Bell نظام التشغيل Unix نموذج PDP-11، قام تومسون بإعادة العمل على لغة B لتتوافق أكثر مع المتطلبات الجديدة لنظام حاسوبي أجدد وأفضل. ومن هنا تمت ولادة لغة C وريثة لغة B في العام 1973. كانت لغة C مستقرة كفاية لدرجة يمكن فيها إعادة كتابة نظام Unix بحد ذاته باستخدام هذه اللغة الواعدة في تلك الآونة. [المصدر: King].

قبل استخدام مختبرات Bell للغة C بشكل فاعل، كانت هناك حاجة من قبل مبرمجين آخرين لدليل يشرح استخدام هذه اللغة. فخلال عام 1978 ومن خلال كتاب "البرمجة بلغة C The "C Programming Language من قِبل بريان كيرنيغان Brian Kernighan وريتشي، والمعروف من قبل الهواة بـ K&R أو "الكتاب الأبيض"، حيث أصبح المصدر الرئيسي للبرمجة بلغة C حتى كتابة هذه السطور. والطبعة الثانية من K&R والتي نشرت أصلاً في عام 1988، لاتزال متاحة على نطاق واسع. ويطلق على الإصدار الأصلي K & R C بناء على هذا الكتاب.

لضمان عدم نشوء صيغ مختلفة للغة C من قبل المهتمين بها، وضع مطورو هذه اللغة في ثمانينيات القرن الماضي أساسيات ومعايير لها. فمعيار الولايات المتحدة للغة C، المعهد القومي الأمريكي للمعايير ANSI X3.159-1989، الذي أصبح كذلك رسميًا في عام 1989. وتبعه معيار المنظمة الدولية للمعيار رقم ISO/IEC 9899:1990. إصدارات C بعد K & R اعتمدت في مرجعيتها المعايير السابقة وكذلك الإصدارات اللاحقة أيضًا مثل C89, C90 and C99. يمكن ملاحظة أن C89 يطلق عليها أحيانًا ANSI C أو ANSI/ISO أو ISO C.

كانت لغة C واستخدامها في UNIX مجرد جزء واحد من الطفرة في تطوير نظام التشغيل خلال ثمانينيات القرن الماضي. على الرغم من جميع التحسينات التي تميزت بها لغة C عن سابقاتها من اللغات الأخرى، إلّا أنّها ظلت غير مناسبة لتطوير تطبيقات برمجية أكبر. ومع تطور صناعة الحواسيب زادت الحاجة لعملية إنتاج البرمجيات بشكلٍ أسهل، ما دفع المبرمجين لبناء مترجمات compilers خاصة بهم، والعمل، بالتالي، على إنتاج لغات برمجة أخرى باستخدام لغة البرمجة C. هذه اللغات الجديدة بسّطت عملية إنتاج البرامج المعقدة في ذلك الآن. على سبيل المثال، لغتي Java و ++C كلاهما طورتا من لغة C وجعلتا تطوير البرامج المبنية على الكيانات (تقنية برمجية قائمة على إعادة استخدام نصوص البرامج) أمراً سهلاً.

الآن وبعد أن ألقينا نظرة على خلفية الأحداث، لنلقِ نظرة على آليات لغة C.

كتابة وترجمة تعليمات لغة C


تعرف C على أنّها لغة تعتمد على مترجم، أي أنك بحاجة لمترجم لتحويل البرنامج المصدر (الكود البرمجي) إلى برنامج قابل للتنفيذ على الحاسب. يكتب البرنامج المصدر بأحد برامج تحرير النصوص، والذي يتيح للمبرمج إمكانيّة فتح وقراءة البرنامج المكتوب بلغة C. ومن الأمثلة على برامج تحرير النصوص، برنامج المفكرة الذي يأتي مع نظام التشغيل Windows، وكذلك TextEdit في نظام MAC، وأيضا gedit في نظام UNIX.

الملف التنفيذي executable file هو ببساطة: البرنامج الذي يتم تنفيذه على الحاسب. يفحص مترجم لغة C البرنامج المصدر، وفي حالة كان خالياً من الأخطاء، تتم ترجمته إلى ملف تنفيذي.

قبل البدء بالحديث عن البرنامج المكتوب بلغة C، يجب أن نلقي نظرة على المترجمات المتوفرة. إذا كنت من مستخدمي أنظمة التشغيل MAC OS X H أو أحد منشورات نظام UNIX مثل Ubuntu، فإنه من الممكن أن تنصب مترجم لغة C لحاسوبك إذا قمت بتنصيب مستلزمات إنتاج برامج بلغة C لنظام التشغيل الذي تعتمده.
مترجمات لغة C المجانية تعتمد بالأساس على نظام تلقين الكمبيوتر الأوامر بشكل مكتوب، ما يعني أنّك ستشغّلهم من خلال موجه الأوامر الذي يمكن الوصول له من خلال نافذة الطرفية. أحد أوامر ترجمة برنامج مكتوب بلغة الآلة هو cc أو gcc، بالإضافة إلى بعض الخيارات والمعلومات الممرّرة والتي تمثل بعض الكلمات المستخدمة كخيارات تساعد في عملية الترجمة، وذلك قبل الضغط على Enter للبدء بتنفيذ عملية الترجمة.

اذا كنت من مستخدمي نظام التشغيل Windows أو كنت من محبي استخدام الواجهة الرسومية ففضلاً عن إعطاء أوامر مكتوبة، يمكنك أن تُثبّت بيئة التطوير المُتكاملة (IDE) لبرمجة C على جهاز الكمبيوتر. بيئة التطوير المتكاملة هي واجهة واحدة بحيث يمكنك كتابة التعليمات البرمجية، ترجمة البرنامج، اختباره والعثور بسرعة على الأخطاء وإصلاحها. بالنسبة لنظام التشغيل Windows يمكنك شراء برنامج ++Microsoft Visual C وهو بيئة تطويرية متكاملة لكل من C و ++C. كذلك برنامج Eclipse يعتبر من البرامج الجيدة للبرمجة بلغة C لأنّه مجاني ويعتمد على Java ويعمل على بيئات تشغيل مختلفة مثل Windows و MAC و Linux كما أنّ له برامج فرعية متاحة لعملية ترجمة برامج مكتوبة بلغة C والعديد من اللغات أخرى.

في لغة C كما في لغات البرمجة الأخرى، يكون رقم إصدار المترجم أمرًا غاية في الأهميّة. فالمبرمج يرغب دائمًا استخدام نسخة من مترجم لغة C أحدث من نسخة اللغة نفسها. إذا كنت تستخدم IDE، تأكد من ضبط الإعدادات الخاصة بك للتأكد من أن الـIDE يستخدم بالنسخة الصحيحة من لغة C. إذا كنت ممن يفضل ونتزويد الكمبيوتر بأوامر نصيّة، فيمكنك تزويده بالمعلومات اللازمة لترجمة البرنامج بشكل صحيح، مثل:
gcc –std c99 –o myprogram.exe myprogram.c

في الأمر أعلاه، يعد gcc الأمر الرئيسي الذي يقوم بالترجمة الفعليّة، وأمّا ما تبقى من الأمر فهي خيارات لضبط عملية الترجمة من البرنامج المصدر للبرنامج التنفيذي. تمت إضافة خيار -std متبوعاً بـ c99 لإعلام المترجم باستخدام النسخة القياسية للغة رقم c99 في عملية الترجمة. الخيار o- والذي يليه myprogram.exe يعنيان تحديد اسم الملف الناتج عن عمليّة الترجمة، وبدون هذا الخيار فإنّ المترجم يستخدم الاسم a.out بدلاً من الاسم المحدد في الأمر أعلاه بشكل تلقائي. والخيار الأخير myprogram.c يحدّد اسم البرنامج المصدر المراد ترجمته والمكتوب بلغة C. وباختصار، الأمر أعلاه يطلب من مترجم C تحويل البرنامج myprogram.c إلى ملف تنفيذي باسم myprogram.exe بواسطة المترجم gcc واعتماد المعيار c99 في عملية الترجمة.
يمكنك تصفح الويب للحصول على قائمة كاملة من الخيارات التي يمكنك استخدامها مع المترجم الخاص بك، سواء أكان ذلك gcc أو أي مترجم آخر.

بعد تثبيت المترجم على حاسوبك، أنت الآن جاهز للبرمجة بلغة C دعنا نبدأ بالتعرف على أبسط برنامج مكتوب بلغة C.

برنامج مكتوب بلغة C :
1 -Programme pour convertir décimal en binaire :

#include <stdio.h>
#include <stdlib.h>
#define N 5

int main()
{
    int A[N],i,n,Q,R;
    printf("entrer un nombre : ");
    scanf("%i",&n);
    do{
        Q=n/2;
        R=n%2;
        n=Q;
      }while(n=0);
    for(i=0;i<N;i++)
    {
        A[i]=R;
    }
    for(i=0;i<N;i++)
    {
        printf("%i\n",A[i]);
    }
    return 0;
}

2- Programme pour Determinant de matrice

#include<stdio.h>
#define L 3
#define C 2


int main()
{
  int a[L][C],i,j;
  int determinant=0;
  //********************************************//

  for(i=0;i<L;i++)
      for(j=0;j<C;j++)

           scanf("%d",&a[i][j]);
  //******************************************//
  printf("\nLe matrice est: \n");
  for(i=0;i<L;i++){
      printf("\n");
      for(j=0;j<C;j++)
           printf("%d\t",a[i][j]);}
  //****************************************//
  for(i=0;i<C;i++)
    determinant = determinant + (a[0][i]*(a[1][(i+1)%3]*a[2][(i+2)%3] - a[1][(i+2)%3]*a[2][(i+1)%3]));
    printf("\n\nDeterminant de matrice est :%d",determinant);
  //***************************************//
getch();
}

3- Programme pour equation 2eme degré

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    int a,b,c,delta;
    float  x1,x2;
    printf(" \n*********************************\n Entrez la valeur de a :");
    scanf(" %i",&a);
    printf(" Entrez la valeur de b :");
    scanf(" %i",&b);
    printf(" Entrez la valeur de c :");
    scanf(" %i",&c);
    delta=b*b-4*a*c;
    printf("*********************************\n delta=%i\n*********************************",delta);

     if (delta>0){
        x1=-b-sqrt(delta)/2*a;
        x2=-b+sqrt(delta)/2*a;
        printf("\n le resultat de %iX+%iX^2+%i est :",a,b,c);
        printf("\n x1=%.2f\tx2=%.2f\n*********************************",x1,x2);
    }
    else if(delta==0){
        x1=-b/2*a;
        printf(" \nle resultat de %iX+%iX^2+%i est :",a,b,c);
        printf(" \n x1=%d\n*********************************",x1);
    }
    else{
        printf("\n il n'a y pas de solution\n*********************************\n");
    }




 getch();

        return 0;
}

4-Programme pour l'intégrale 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int main()
{
    int i,X0=2,Xn=5;
    float S=0,h=1;
    for(i=0;i<(Xn-X0)/h;i++)
    {
        S+=((pow(X0+i*h,2)+pow(X0+(i+1)*h,2))*h)/2;
    }
    printf("S=%f",S);

    return 0;

}

5-Programme pour Min et Max

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int pmin,pmax,i;
    int t[6];
    for(i=0;i<6;i++){
        printf("T[%d]=",i);
        scanf("%d",&t[i]);
        if(i==0 || t[i]>t[pmax]){
            pmax=i;
        }
        if(i==0 || t[i]<t[pmin]){
            pmin=i;
        }
    }
    printf("\n \t Max=%d , PosMax=%d \n \t Min=%d , PosMin=%d \n ",t[pmax],pmax,t[pmin],pmin);
    return 0;
}

6-Programme pour recherche des occurrences 
#include <stdio.h>
#include <stdlib.h>

int c=-1,i=-1;
int rechercher(int *t,int n,int x)
{
    int k,cmp=1;
    c=c+cmp;
    if(c<=n)
    {
        i++;
        if(t[i]==x){
            return i;
        }
        else
            return rechercher(t,n,x);

    }else
        return -1;
}

int main()
{
   int *t;
    int j,x,n,m;
    printf("Entrez un nombres :");
    scanf("%d",&n);
    t=malloc(n*sizeof(int));
    for(j=0;j<=n;j++)
        t[j]=j;
    printf("Entrez le nombres a chercher:");
    scanf("%d",&x);
   m=rechercher(t,n,x);
   if(i==-1){printf("non ");

   }else
        printf("\n\tle nombre  occurrences   est %d\n",m);

    return 0;
}

7-Programme pour span vide

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,j,n,e=1;
    printf("Entrez le nombre des lignes:");
    scanf("%d",&n);
    printf("\n\t**********SAPIN 02*************\n");
    for(i=1;i<=n;i++){
        for(j=1;j<=n-i;j++)
            printf(" ");
        if(i==1)
            printf("*");
        else if(i==n){
                    for(j=1;j<=2*n-1;j++)
                        printf("*");
                    }else{
                            printf("*");
                            for(j=1;j<=e;j++)
                                        printf(" ");
                            printf("*");
                            e+=2;
                    }
        printf("\n");
    }
    return 0;
}

8-Programme pour  triangle des etoiles
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,i,j;
    printf("Entrez le nombre des lignes:");
    scanf("%d",&n);
    printf("\n\t*********triangle des etoiles************\n");

    for(i=1;i<=n;i++){
        printf("L=%2d | ",i);
        for(j=i;j>=1;j--)
            printf("%3d",i);
        printf("\n");
    }

    return 0;
}

9-Programme pour triangle de pascal

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int **t;
    int i,j,n;
    printf("Entrez le degré du triangle de pascal:");
    scanf("%d",&n);
    t=malloc((n+1)*sizeof(int*));
    for(i=0;i<=n;i++)
        *(t+i)=malloc((n+1)*sizeof(int));
    for(i=0;i<=n;i++){
        //t[i][0]=1;
        *(*(t+i))=1;
      //  t[i][i]=1;
        *(*(t+i)+i)=1;
    }
    for(i=2;i<=n;i++)
            for(j=1;j<i;j++)
              //  t[i][j]=t[i-1][j]+t[i-1][j-1];
                *(*(t+i)+j)=*(*(t+i-1)+j)+*(*(t+i-1)+j-1);

    //-----------affichage du triangle
    for(i=0;i<=n;i++){
        printf("L=%2d ",i);
            for(j=0;j<=i;j++)
                printf("%2d ",t[i][j]);

    putchar('\n');
    }

    return 0;
}

10-Programme pour insérer un élément dans un tableau

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,i,elmt,pos;
    //1--declaration du pointeur
    int *t;
    printf("Entrez le nombre des éléments du tableau");
    scanf("%d",&n);
    //2-- creation physique du tableau
    t=malloc(n*sizeof(int));
    //-- la lecture du tableau
    for(i=0;i<n;i++){
        printf("t[%d]=",i);
        scanf("%d",t+i);
        //scanf("%d",&t[i]);
    }
    printf("entrez l element a inserer et sa position:");
    scanf("%d%d",&elmt,&pos);
    //3-- mise a jour du tableau
    realloc(t,(n+1)*sizeof(int));
    for(i=n;i>pos;i--)
        *(t+i)=*(t+i-1);
      //  t[i]=t[i-1];
    *(t+pos)=elmt;
  //  t[pos]=elmt;

    //-- l'affichage du tableau
    for(i=0;i<n+1;i++)
        printf("\n\t t[%d]=%d\n",i,*(t+i));

    return 0;
}

11-Programme pour supprimer un élément dans un tableau


#include <stdio.h>

#include <stdlib.h>

int main()
{
    int *t;
    int i,pos,n;
    printf("Entrez le nombre des elements du tableau:");
    scanf("%d",&n);
    t=malloc(n*sizeof(int));
    for(i=0;i<n;i++){
        printf("T[%d]=",i);
        scanf("%d",t+i);
    }
    printf("Entrez la position de l'element a supprimer:");
    scanf("%d",&pos);
    for(i=pos;i<n-1;i++)
        *(t+i)=*(t+i+1);
    n--;
    realloc(t,n*sizeof(int));
    for(i=0;i<n;i++)
                printf("\n\t T[%d]=%d",i,*(t+i));
    return 0;
}

12-Programme pour Tri à bulles

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,j,k,n=7,x;
    int t[]={10,6,8,2,9,1,3};
    for(k=0;k<n;k++)
        printf("\tT[%d]=%2d",k,t[k]);
    putchar('\n');
    for(i=0;i<n;i++){
        for(j=0;j<n-i;j++){
            if(t[j]>t[j+1]){
                x=t[j];
                t[j]=t[j+1];
                t[j+1]=x;
            }

        }
for(k=0;k<n-i;k++)
        printf("\tT[%d]=%2d",k,t[k]);
    putchar('\n');

    }
        printf("********apres le tri************\n");

    for(i=0;i<n;i++)
        printf("\n\t T[%d]=%2d",i,t[i]);
    putchar('\n');
    return 0;
}

13-Programme pour Tri par insertion

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int t[]={10,6,8,2,5,3,1};
    int i,j,k,elm,n=7,pos;
    for(i=1;i<n;i++){
        pos=i;elm=t[i];
        for(j=i-1;(j>=0 && t[j]>elm);j--){
                t[pos]=t[j];
                pos--;
        }
        if(pos!=i)
            t[pos]=elm;

    }
    printf("\n\t ********apres le tri********\n");
    for(i=0;i<n;i++)
    printf("\tT[%d]=%d\n",i,t[i]);
    return 0;
}

14-Programme pour tri par selection v1

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int t[]={10,6,8,2,5,3,1};
    int i,j,k,x,n=7;
    for(i=0;i<n;i++)
    printf("\n\tT[%d]=%d\n",i,t[i]);
    for(i=0;i<n-1;i++){
        for(j=i+1;j<n;j++){
            if(t[i]>t[j]){
                x=t[i];
                t[i]=t[j];
                t[j]=x;
            }
        }
        for(k=0;k<n;k++)
    printf("T[%d]=%d**",k,t[k]);
    putchar('\n');
    }

    printf("\n\t ********apres le tri********\n");
    for(i=0;i<n;i++)
    printf("\n\tT[%d]=%d\n",i,t[i]);
    return 0;
}

15-Programme pour tri par selection v2

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int t[]={10,6,8,2,5,3,1};
    int i,j,k,x,n=7,posmin;
    for(i=0;i<n;i++)
    printf("\tT[%d]=%d\n",i,t[i]);
    for(i=0;i<n-1;i++){
            posmin=i;
        for(j=i+1;j<n;j++){
            if(t[posmin]>t[j])
                posmin=j;

        }
        //printf("\n\t T[%d]=%d",posmin,t[posmin]);
                if(posmin!=i){
                    x=t[i];
                    t[i]=t[posmin];
                    t[posmin]=x;
                }
    }
    printf("\n\t ********apres le tri********\n");
    for(i=0;i<n;i++)
    printf("\n\tT[%d]=%d\n",i,t[i]);
    return 0;
}

.



التعليقات



إذا أعجبك محتوى مدونتنا نتمنى البقاء على تواصل دائم ، فقط قم بإدخال بريدك الإلكتروني للإشتراك في بريد المدونة السريع ليصلك جديد المدونة أولاً بأول ،

إتصل بنا

جميع الحقوق محفوظة

مدونة IDev