الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما الخطأ في هذا الكود الخاص بـ FIFO

مغلقمُجاب
بدأه tantie L في 12 أبريل 2014 · 5 رد · 696 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته اخواني اخواتي اساتذتي الكرام

من بعد اذنكم ارجو منكم ان تساعدونني على معرفة الخطأ في هذا الكود 

هدف هذا الكود هو محاكاة استراتيجية FIFO  التي يتبعها مسير الذاكرة لتحميل البرامج المتربصة الى الذاكرة ليتم تشغيلها و هي تعتمد على طريقة اول الواصلين هو اول الخارجين او المحملين من اجل التنفيذ، كتبت الكود و نفذته مرتين الاولى نجحت و الثانية لم تنجح فحاولت معرفة السبب و اصلاحه لكنني لم استطع ذلك، لذلك فضلا منكم اخوتي اساتذتي هل يمكنكم مساعدتتي على معرفة هذا الخطأ و ما الطريقة لتصحيحه؟ و الله وكيل اجركم و ثوابكم 

هذا هو الكود، كله يعتمد على القوائم لانه المطلوب، اعلم انه طويل جدا فاسطره 250 لكن ما باليد حيلة هذا ما تمكنت منه :blush:

#include<stdio.h>#include<stdlib.h>typedef struct liste//القائمة الخاصة بسلسلة المرجع{    int a;    struct liste *ptrn;}chaine_ref;typedef struct liste1//القائمة الخاصة بعدد الامكنة المحدد للبرنامج{    int a,age,Dp;//المتغير 1 خاص بمحتوى الخانة و 2 خاص بمدة مكوث جزء البرنامج في تلك الخانة و 3 عدد مرات تحميل الصفحات او اجزاء البرنامج    struct liste *ptrn;}case_memoire;chaine_ref *criation_chaine(chaine_ref *tete)//ايجاد سلسلة المراجع{    chaine_ref *p,*n_m;    int x,i=0;    tete=NULL;    p=tete;    while(i!=-1)//شرط التوقف    {        p=(chaine_ref*)malloc(sizeof(chaine_ref));        printf("entrer le numero de page svp : ");        scanf("%d",&x);        p->a=x;        p->ptrn=NULL;        if(tete!=NULL)            n_m->ptrn=p;        else            tete=p;        n_m=p;        printf("(si vous voulez arriter ecrivez -1) : ");        scanf("%d",&i);    }    return tete;}void aff_chain_ref(chaine_ref *tete)//الدالة الخاصة بطباعة السلسة المرجعية{    chaine_ref *p;    p=tete;    printf("la chaine de reference est :\n");    while(p!=NULL)    {        printf("%d ",p->a);        p=p->ptrn;    }}case_memoire *criation_case(case_memoire *tete,int n)//ايجاد القائمة الخاصة بمحتوايات حصة البرنامج من الذاكرة{    case_memoire *p,*n_m;    int i=0;    tete=NULL;    p=tete;    while(i<n)    {        p=(case_memoire*)malloc(sizeof(case_memoire));        p->a=-1;//قيم ابتدائية للمساعدة        p->age=0;//نفس الشيء        p->Dp=n;//اول قيمة لعدد مرات تحميل صفحات البرنامجو هو عدد الخانات المخصصة للبرنامج في الذاكرة        p->ptrn=NULL;        if(tete!=NULL)            n_m->ptrn=p;        else            tete=p;        n_m=p;        i++;    }    return tete;}case_memoire *nbr_defaut_page(case_memoire *tete)//الدالة التي تحسب عدد مرات تحميل صفحات البرنامج{    case_memoire *p;    p=tete;    while(p!=NULL)    {        p->Dp++;        p=p->ptrn;    }    return tete;}void aff_case_memo(case_memoire *tete)//الدالة التي تطبع محتويات حصة البرنامج من الذاكرة{    case_memoire *p;    p=tete;    printf("\n:::::::::::::::::::::::::::::\n");    while(p!=NULL && p->a>=-1 && p->a<=9 && p->age>-1 && p->age<=9)//شرط طباعة المحتويات لانه في بعض الاحيان عندما تكون هناك خانات متبقية من حصة البرنامج في الذاكرة في المرحلة الاخيرة فانه يظهر محتوى عشوائيو انا لا اريده    {        printf("%d\n",p->a);        p=p->ptrn;    }}case_memoire *mis_a_jour(case_memoire *tete)// الدالة التي تقوم بتحديث مدة مكوث مراجع الصفحات في خانات الذاكرة{    case_memoire *p;    p=tete;    while(p!=NULL)    {         p->age++;         p=p->ptrn;    }    return tete;}case_memoire *ptr_max(case_memoire *tete,int *t)//الدالة التي تجد اطول مكوث و تقوم بادراج المرجع الجديد مكانه{    case_memoire *p,*max;    p=tete;    max=tete;//متغير لايجاد المكوث الاطول و ياخذ قيمة راس القائمة    while(p!=NULL)    {        if(p->age>=max->age)        {            max=p;            p=p->ptrn;        }        else            p=p->ptrn;    }    p=tete;    while(p!=NULL && p!=max && p->a!=t[1])// اعود و ابحث عن القيمة المساوية لاكبر مكوث في الذاكرة    {         p=p->ptrn;    }    if(p->a==t[1])//هنا مشكلتي و هي احيانا تنجح و احيانا ﻻ و هي ان وجد البرنامج اية قيمة مساوية لاول قيمة في جدول السلسلة فانه يعيد القائمة كما هي و يغادر لكنها لا تعمل جيدا    {       return tete;    }    if(p==max)//هنا الشرط الثاني لتوقف الحلقة و هو ايجاد قيمة مساوية لاكبر مكوث    {       if(p->a!=t[1])//اقوم بشرط و هو اختلاف قيمته عن قيمة اول قيمة للسلة المرجعية       {            p->age=0;//اعيد عمره صفرا            p->a=t[1];//و اسند اول قيمة في الجدول له            tete=nbr_defaut_page(tete);//احسب عدد مرات تحميل الصفحات            aff_case_memo(tete);//اطبع محتوى الذاكرة        }       tete=mis_a_jour(tete);//ثم اقوم بتحديث فترة مكوث الصفحات في الذاكرة       return tete;    }}chaine_ref *chaine_ref_organizer(chaine_ref *tete,chaine_ref *tete2)//هذه الدالة تقوم بتنظيم السلسلة المرجعية و تحذف القيم المتكررة بشكل متتال مثل 11 او 222 و هكذا{    chaine_ref *P,*Q,*n_m;    int i=0;    P=tete2;    tete=NULL;    Q=tete;    while(P!=NULL)    {        if(P==tete2)            {               Q=(chaine_ref*)malloc(sizeof(chaine_ref));               Q->a=P->a;               Q->ptrn=NULL;               tete=Q;               P=P->ptrn;            }        else        {            if(P->a!=Q->a)            {               Q=(chaine_ref*)malloc(sizeof(chaine_ref));               Q->a=P->a;               Q->ptrn=NULL;               n_m->ptrn=Q;               P=P->ptrn;            }            else                P=P->ptrn;        }        n_m=Q;     }    return tete;}case_memoire *FIFO(chaine_ref *tete,case_memoire *tete2,int n_c,int *t,int l)//هذه هي الدالة الخاصة بهذه الاستراتيجية{    chaine_ref *p;    case_memoire *q,*old;    int i=n_c,j=l-n_c;    p=tete;    q=tete2;    //هنا اقوم بملئ الذاكرة بالقيم المرجعية كاول خطوة ثم اتابع تحميل البقية    while(q!=NULL && p!=NULL && i>0)    {        q->a=p->a;        q->age=i;        p=p->ptrn;        q=q->ptrn;        i=i-1;    }    aff_case_memo(tete2);    //هنا اقوم بحذف القيم التي تم ادراجها في الذاكرة عن طريق ازاحة قيم الجدول بعدد خانات الذاكرة    for(i=0;i<l;i++)        t=t[i+n_c];   //هنا  تأتي المراحل الاخرى و هي تحميل بقية السلسلة المرجعية في الذاكرة    while(j>0)// متغير الحلقة اخذ قيمة ابتدائية هي الفرق بين طول السلسلة المرجعية و عدد خانات الذاكرة لانه يبدأ عمله بع ادراج الدفع الاولى    {        tete2=ptr_max(tete2,t);// انادي الدالة التي تبحث عن اكبر مكوث و تدرج القيمة التالية حيث توابعها هي خانات الذاكرة و جدول السلسلة المرجعية الجديد        for(i=0;i<l;i++)//احذف القيمة التي تم ادراجها            t=t[i+1];        j--;    }    return tete2;}int chaine_ref_lenth(chaine_ref *tete)//الدالة التي تحسب لي طول السلسة المرجعية بعد تنظيمها{    chaine_ref *p;    int x;    p=tete;    while(p!=NULL)    {        x++;        p=p->ptrn;    }    return x;}//البرنامج الرئيسيmain(){    int n_page,Tpage,nbr_case,Tpgm,i=0,lenth_chaine,Tmc,*t;/*النتغيرات على الترتيب    عدد صفحات البرنامج    حجم الصفحة الواحدة    عدد خانات الذاكرة الخاصة بالبرنامج    حجم البرنامج    متغير لتحريك الحلقة    طول السلسلة المرجعية    حجم الذاكرة    جدول يحمل السلسلة المرجعية المنظمة و تتم عليه عمليات الحذف*/    chaine_ref *tete_chaine,*chaine_referense,*tete_chaine_or,*p;/*قائمة للمراجع قبل و بعد تنظيمها*/    case_memoire *tete_case_memory,*case_memory;/*قائمة الذاكرة*/    do    {        printf("entrer la taille de pgm svp : ");        scanf("%d",&Tpgm);    }while(Tpgm<=0);    do    {        printf("entrer la taille de votre MC svp : ");        scanf("%d",&Tmc);    }while(Tmc<=0);    do    {        printf("entrer la taille de votre page svp : ");        scanf("%d",&Tpage);    }while(Tpage<=0);    n_page=Tpgm/Tpage;//حساب عدد صفحات البرنامج    nbr_case=Tmc/Tpage;//حساب عدد الخانات المخصصة للبرنامج في الذاكرة    chaine_referense=criation_chaine(tete_chaine);    case_memory=criation_case(tete_case_memory,nbr_case);    chaine_referense=chaine_ref_organizer(tete_chaine_or,chaine_referense);    lenth_chaine=chaine_ref_lenth(chaine_referense);    aff_chain_ref(chaine_referense);    aff_case_memo(case_memory);    // ايجاد الجدول الخاص بالسلسلة المحرفية تبعا للقائمة المنظمة    p=chaine_referense;    while(p!=NULL)    {        t=(int*)malloc(sizeof(int));        t=p->a;        p=p->ptrn;        i++;    }    case_memory=FIFO(chaine_referense,case_memory,nbr_case,t,lenth_chaine);}

و هذه صور للتنفيذ مرتين

الاولى ناجحة

 

n4x8hi.png

 

و هذه هي الثانية و الخطا في المرحلة الثالثة من المفترض ان لا يدر 6 لانها موجودة لكنه ادرجها 

 

ssIuf4.png

 

بارك فيكم ربي 

بالتوفيق

تم تعديل هذه المشاركة بواسطة tantie L في 12 أبريل 2014 في 17:35

ابتسم للدنيا تبتسم لك و افعل الخير و انساه و لا تنسى أي أمر سيء قمت به حتى لا تكرره


لا تنسونا من صالح دعائكم أعانكم الله و ثبتكم على سواء السبيل


:)  :lol:  ^_^ 

#2

اعذريني فليس لدي الوقت الكافي لتنقيح الكود ,

ولكن أرجو منك ذكر ما يلي :

1- هدف الكود (بماذا يقوم ؟ )

2- دخل الكود (ماذا يجب أن ندخل له )

3- خرج الكود ( الخرج المتوقع من الكود )

4- أمثلة دخل وخرج

 

ومن أجل أن تتمكني من التنقيح بنفسك , ابحثي عن القسم المسؤول عن العملية التي لم تتم بشكل صحيح في البرنامج
بالتوفيق

#3

لا عليك ابدا اخي الكريم

هدف الكود هو محاكات تقنية FIFO لمسير الذاكرة عندما يقوم بادراج البرامج في الذاكرة لتنفيذها و هي first in first out

تقوم بادخال حجم البرنامج حجم الذاكرة و حجم صفحة البرنامج (فالبرنامج يكون مقسما لصفحات او اجزاء حتى يتم تنفيذ عدة برامج في نفس الوقت) ثم تقوم بادخال ارقام الصفحات او ما يسمى السلسلة المرجعية و هي عبارة عن @ الخاصة بالصفحات

خرج الكود هو ان يطبع لك حالة الذاكرة بعد كل ادراج صفحة فيها ثم في الاخير يظهر لك قيمة عدد مرات الادراج

و كمثال ساتخذ المثال الذي لم ينجح معي و هو كالاتي 

حجم البرنامج 1000

حجم الذاكرة 400

حجم صفحة البرنامج 100

السلسلة المرجعية : 356839612360

من المفترض ان يكون الخرج هكذا :

3            9          9            9               9           6          6

5     ->    5  ->    1   ->      1     ->       1   ->     1   ->    0

6            6         6             2               2           2          2

8            8         8             8               3           3          3

بالاضافة الى عدد مرات الادراج و هو 10 // هذه فقط لم اظهرها لكنها تعمل

و بشأن نصيحتك لي اخيالكريم مصطفى فقد فعلت لكنني لم اتمكن من ذلك و قد وضحت ما افكر فيه في هذا الجزء من الكود

case_memoire *ptr_max(case_memoire *tete,int *t)//الدالة التي تجد اطول مكوث و تقوم بادراج المرجع الجديد مكانه
{
    case_memoire *p,*max;
    p=tete;
    max=tete;//متغير لايجاد المكوث الاطول و ياخذ قيمة راس القائمة
    while(p!=NULL)
    {
        if(p->age>=max->age)
        {
            max=p;
            p=p->ptrn;
        }
        else
            p=p->ptrn;
    }
    p=tete;
    while(p!=NULL && p!=max && p->a!=t[1])// اعود و ابحث عن القيمة المساوية لاكبر مكوث في الذاكرة
    {
         p=p->ptrn;
    }
    if(p->a==t[1])//هنا مشكلتي و هي احيانا تنجح و احيانا ﻻ و هي ان وجد البرنامج اية قيمة مساوية لاول قيمة في جدول السلسلة فانه يعيد القائمة كما هي و يغادر لكنها لا تعمل جيدا
    {
       return tete;
    }
    if(p==max)//هنا الشرط الثاني لتوقف الحلقة و هو ايجاد قيمة مساوية لاكبر مكوث
    {
       if(p->a!=t[1])//اقوم بشرط و هو اختلاف قيمته عن قيمة اول قيمة للسلة المرجعية
       {
            p->age=0;//اعيد عمره صفرا
            p->a=t[1];//و اسند اول قيمة في الجدول له
            tete=nbr_defaut_page(tete);//احسب عدد مرات تحميل الصفحات
            aff_case_memo(tete);//اطبع محتوى الذاكرة
        }

       tete=mis_a_jour(tete);//ثم اقوم بتحديث فترة مكوث الصفحات في الذاكرة
       return tete;
    }
}

وفقك الله اخي الكريم

تم تعديل هذه المشاركة بواسطة tantie L في 13 أبريل 2014 في 19:21

ابتسم للدنيا تبتسم لك و افعل الخير و انساه و لا تنسى أي أمر سيء قمت به حتى لا تكرره


لا تنسونا من صالح دعائكم أعانكم الله و ثبتكم على سواء السبيل


:)  :lol:  ^_^ 

#4

اخي الكريم لقد تم حل المشكل في هذا الكود اشكر لك حسن مساعدتك لي اخي الكريم مصطفى  ^_^

ابتسم للدنيا تبتسم لك و افعل الخير و انساه و لا تنسى أي أمر سيء قمت به حتى لا تكرره


لا تنسونا من صالح دعائكم أعانكم الله و ثبتكم على سواء السبيل


:)  :lol:  ^_^ 

#5

هلّا وضعت الحل كي يستفاد به من يأت من بعدك؟

مدونتي: C++ Tips and Tricks

#6 أفضل إجابة

عذرا على قلة انتباهي اخي الكريم C++er 

فقط قمت باظافة دالة اخرى تقوم بالمقارنة بين اول قيمة في مصفوفة المراجع و قيم محتويات قائمة الذاكرة 

هذا هو الكود الجديد

#include<stdio.h>#include<stdlib.h>typedef struct liste//القائمة الخاصة بسلسلة المرجع{    int a;    struct liste *ptrn;}chaine_ref;typedef struct liste1//القائمة الخاصة بعدد الامكنة المحدد للبرنامج{    int a,age,Dp;//المتغير 1 خاص بمحتوى الخانة و 2 خاص بمدة مكوث جزء البرنامج في تلك الخانة و 3 عدد مرات تحميل الصفحات او اجزاء البرنامج    struct liste *ptrn;}case_memoire;chaine_ref *criation_chaine(chaine_ref *tete,int tpage)//ايجاد سلسلة المراجع{    chaine_ref *p,*n_m;    int x,i=0;    tete=NULL;    p=tete;    while(i!=-1)//شرط التوقف    {        p=(chaine_ref*)malloc(sizeof(chaine_ref));        do        {            printf("entrer le numero de page svp (inferieur a taille de page): ");            scanf("%d",&x);        }while(x>=tpage);        p->a=x;        p->ptrn=NULL;        if(tete!=NULL)            n_m->ptrn=p;        else            tete=p;        n_m=p;        printf("(si vous voulez arriter ecrivez -1) : ");        scanf("%d",&i);    }    return tete;}void aff_chain_ref(chaine_ref *tete)//الدالة الخاصة بطباعة السلسة المرجعية{    chaine_ref *p;    p=tete;    printf("la chaine de reference est :\n");    while(p!=NULL)    {        printf("%d ",p->a);        p=p->ptrn;    }}case_memoire *criation_case(case_memoire *tete,int n)//ايجاد القائمة الخاصة بمحتوايات حصة البرنامج من الذاكرة{    case_memoire *p,*n_m;    int i=0;    tete=NULL;    p=tete;    while(i<n)    {        p=(case_memoire*)malloc(sizeof(case_memoire));        p->a=-1;//قيم ابتدائية للمساعدة        p->age=0;//نفس الشيء        p->Dp=n;//اول قيمة لعدد مرات تحميل صفحات البرنامجو هو عدد الخانات المخصصة للبرنامج في الذاكرة        p->ptrn=NULL;        if(tete!=NULL)            n_m->ptrn=p;        else            tete=p;        n_m=p;        i++;    }    return tete;}case_memoire *nbr_defaut_page(case_memoire *tete)//الدالة التي تحسب عدد مرات تحميل صفحات البرنامج{    case_memoire *p;    p=tete;    while(p!=NULL)    {        p->Dp++;        p=p->ptrn;    }    return tete;}void aff_case_memo(case_memoire *tete,int tpage)//الدالة التي تطبع محتويات حصة البرنامج من الذاكرة{    case_memoire *p;    p=tete;    printf("\n:::::::::::::::::::::::::::::\n");    while(p!=NULL && p->a>=-1 && p->a<tpage && p->age>-1 && p->age<tpage)//شرط طباعة المحتويات لانه في بعض الاحيان عندما تكون هناك خانات متبقية من حصة البرنامج في الذاكرة في المرحلة الاخيرة فانه يظهر محتوى عشوائيو انا لا اريده    {        printf("%d\n",p->a);        p=p->ptrn;    }}case_memoire *mis_a_jour(case_memoire *tete)// الدالة التي تقوم بتحديث مدة مكوث مراجع الصفحات في خانات الذاكرة{    case_memoire *p;    p=tete;    while(p!=NULL)    {         p->age++;         p=p->ptrn;    }    return tete;}int il_est_repeter(case_memoire *tete,int t)// الدالة الجديدة{    case_memoire *p;    int existe=1;    p=tete;    while(p!=NULL && existe==1)    {        if(p->a==t)           existe=0;        else           p=p->ptrn;    }    if(existe==1)       return 1;//القيمة ليست موجودة    else       return 0; // القيمة موجودة}case_memoire *ptr_max(case_memoire *tete,int t,int tpage)//الدالة التي تجد اطول مكوث و تقوم بادراج المرجع الجديد مكانه{    case_memoire *p,*max;    int existe;    p=tete;    max=tete;//متغير لايجاد المكوث الاطول و ياخذ قيمة راس القائمة    while(p!=NULL)    {        if(p->age>=max->age)        {            max=p;            p=p->ptrn;        }        else            p=p->ptrn;    }    existe=il_est_repeter(tete,t);    p=tete;    while(p!=NULL && p!=max && existe==1)// اعود و ابحث عن القيمة المساوية لاكبر مكوث في الذاكرة    {         p=p->ptrn;    }    if(existe==0)    {       return tete;    }    if(p==max && existe==1)//هنا الشرط الثاني لتوقف الحلقة و هو ايجاد قيمة مساوية لاكبر مكوث    {       //if()//اقوم بشرط و هو اختلاف قيمته عن قيمة اول قيمة للسلة المرجعية       {            p->age=0;//اعيد عمره صفرا            p->a=t;//و اسند اول قيمة في الجدول له            tete=nbr_defaut_page(tete);//احسب عدد مرات تحميل الصفحات            aff_case_memo(tete,tpage);//اطبع محتوى الذاكرة        }       tete=mis_a_jour(tete);//ثم اقوم بتحديث فترة مكوث الصفحات في الذاكرة       return tete;    }}chaine_ref *chaine_ref_organizer(chaine_ref *tete,chaine_ref *tete2)//هذه الدالة تقوم بتنظيم السلسلة المرجعية و تحذف القيم المتكررة بشكل متتال مثل 11 او 222 و هكذا{    chaine_ref *P,*Q,*n_m;    int i=0;    P=tete2;    tete=NULL;    Q=tete;    while(P!=NULL)    {        if(P==tete2)            {               Q=(chaine_ref*)malloc(sizeof(chaine_ref));               Q->a=P->a;               Q->ptrn=NULL;               tete=Q;               P=P->ptrn;            }        else        {            if(P->a!=Q->a)            {               Q=(chaine_ref*)malloc(sizeof(chaine_ref));               Q->a=P->a;               Q->ptrn=NULL;               n_m->ptrn=Q;               P=P->ptrn;            }            else                P=P->ptrn;        }        n_m=Q;     }    return tete;}case_memoire *FIFO(chaine_ref *tete,case_memoire *tete2,int n_c,int *t,int l,int tpage)//هذه هي الدالة الخاصة بهذه الاستراتيجية{    chaine_ref *p;    case_memoire *q,*old;    int i=n_c,j=l-n_c;    p=tete;    q=tete2;    //هنا اقوم بملئ الذاكرة بالقيم المرجعية كاول خطوة ثم اتابع تحميل البقية    while(q!=NULL && p!=NULL && i>0)    {        q->a=p->a;        q->age=i;        p=p->ptrn;        q=q->ptrn;        i=i-1;    }    aff_case_memo(tete2,tpage);    //هنا اقوم بحذف القيم التي تم ادراجها في الذاكرة عن طريق ازاحة قيم الجدول بعدد خانات الذاكرة    for(i=0;i<l;i++)        t=t[i+n_c];   //هنا  تأتي المراحل الاخرى و هي تحميل بقية السلسلة المرجعية في الذاكرة    while(j>0)// متغير الحلقة اخذ قيمة ابتدائية هي الفرق بين طول السلسلة المرجعية و عدد خانات الذاكرة لانه يبدأ عمله بع ادراج الدفع الاولى    {        tete2=ptr_max(tete2,t[1],tpage);// انادي الدالة التي تبحث عن اكبر مكوث و تدرج القيمة التالية حيث توابعها هي خانات الذاكرة و جدول السلسلة المرجعية الجديد        for(i=0;i<l-j+2;i++)//احذف القيمة التي تم ادراجها            t=t[i+1];        j--;    }    return tete2;}int chaine_ref_lenth(chaine_ref *tete)//الدالة التي تحسب لي طول السلسة المرجعية بعد تنظيمها{    chaine_ref *p;    int x;    p=tete;    while(p!=NULL)    {        x++;        p=p->ptrn;    }    return x;}//البرنامج الرئيسيmain(){    int n_page,Tpage,nbr_case,Tpgm,i=0,lenth_chaine,Tmc,*t;/*النتغيرات على الترتيب    عدد صفحات البرنامج    حجم الصفحة الواحدة    عدد خانات الذاكرة الخاصة بالبرنامج    حجم البرنامج    متغير لتحريك الحلقة    طول السلسلة المرجعية    حجم الذاكرة    جدول يحمل السلسلة المرجعية المنظمة و تتم عليه عمليات الحذف*/    chaine_ref *tete_chaine,*chaine_referense,*tete_chaine_or,*p;/*قائمة للمراجع قبل و بعد تنظيمها*/    case_memoire *tete_case_memory,*case_memory,*q;/*قائمة الذاكرة*/    do    {        printf("entrer la taille de pgm svp : ");        scanf("%d",&Tpgm);    }while(Tpgm<=0);    do    {        printf("entrer la taille de votre MC svp : ");        scanf("%d",&Tmc);    }while(Tmc<=0);    do    {        printf("entrer la taille de votre page svp : ");        scanf("%d",&Tpage);    }while(Tpage<=0);    n_page=Tpgm/Tpage;//حساب عدد صفحات البرنامج    nbr_case=Tmc/Tpage;//حساب عدد الخانات المخصصة للبرنامج في الذاكرة    printf("\n/ remarque / svp entrez les num de pages, non chaine des adresse...\n\n");    chaine_referense=criation_chaine(tete_chaine,Tpage);    case_memory=criation_case(tete_case_memory,nbr_case);    chaine_referense=chaine_ref_organizer(tete_chaine_or,chaine_referense);    lenth_chaine=chaine_ref_lenth(chaine_referense);    aff_chain_ref(chaine_referense);    aff_case_memo(case_memory,Tpage);    // ايجاد الجدول الخاص بالسلسلة المحرفية تبعا للقائمة المنظمة    t=(int*)malloc(lenth_chaine*sizeof(int));    p=chaine_referense;    while(p!=NULL && i<lenth_chaine)    {        t=p->a;        p=p->ptrn;        i++;    }    case_memory=FIFO(chaine_referense,case_memory,nbr_case,t,lenth_chaine,Tpage);    q=case_memory;    printf("\nle nbr de defaut de page est : %d\n===================================\n",q->Dp);}

ارجو ان يكون جيدا نوعا ما 

في امان الله

2

ابتسم للدنيا تبتسم لك و افعل الخير و انساه و لا تنسى أي أمر سيء قمت به حتى لا تكرره


لا تنسونا من صالح دعائكم أعانكم الله و ثبتكم على سواء السبيل


:)  :lol:  ^_^ 

هذا الموضوع مغلق.

مواضيع مشابهة