تبلیغات :
آکوستیک ، فوم شانه تخم مرغی، صداگیر ماینر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 5 از 6 اولاول 123456 آخرآخر
نمايش نتايج 41 به 50 از 54

نام تاپيک: آموزش پيشرفته C

  1. #41
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    بافر ، حافظه اي است كه به فايل ها اختصاص مي يابد تا اعمال ورودي خروجي
    بر روي آنها با سرعت بيشتري انجام گيرد. در حين خروج از برنامه خوب است كه جهت
    اطمينان بيشتر ، به ماشين دستور داد تا كليه داده هاي موجود در بافرها را به
    فايل مربوطه منتقل مي نمايد. براي اين منظور مي توان از تابع ()fflush استفاده
    نمود . اگر كار اين تابع با موفقيت انجام شود ، مقداري كه توسط آن برگردانده
    مي شود برابر با صفر وگرنه برابر با EOF خواهد بود ( EOF ماكرويي است كه در
    فايل stdio.h تعريف شده است ) . الگوي تابع ()fflush در فايل stdio.h قرار
    داشته و بصورت زير است : int fflush( FILE *fp)

    در الگوي فوق ، fp فايلي را مشخص ميكند كه تابع ()fflush بايد بر روي آن عمل
    نمايد . اگر fp ذكر نشود تابع ()fflush بر روي كليه فايل هايي كه بعنوان خروجي
    باز شده اند عمل مي كند . بعنوان مثال ، دستور (f)fflush موجب مي شود تا كليه به فايل با اشاره گر f ، در اين فايل نوشته شوند

  2. #42
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    اگر لازم باشد كه داده ها با فرمت خاصي در فايل نوشته و يا از آن خوانده شوند
    مي توان از دو تابع ()fprintf و ()fscanf استفاده نمود . اين دو تابع دقيقا"
    كار توابع ()printf و ()scanf را در ورودي خروجي معمولي ( غير از فايل )
    انجام مي دهند . الگوي اين توابع در فايل stdio.h قرار داشته و به صورت زير
    مي باشند :

    int fprintf( FILE *fp/ "*control_string/..."/ char arg/)...
    int fscanf( FILE *fp/ "*control_string/..."/ char arg/)...


    در الگوي فوق ، fp اشاره گري است كه مشخص ميكند اعمال اين توابع بايد بر روي
    چه فايلي انجام شود . control-srstring مشخص مي كند كه داده ها (args) بايد با
    چه فرمتي نوشته و يا خوانده شوند .

    مثال : برنامه اي كه يك رشته و يك عدد صحيح را از ورودي خوانده و آنرا در يك
    فايل مي نويسد و سپس از اين فايل خوانده و در صفحه نمايش چاپ مي كند .

    #include "stdio.h"
    #include "stdlib.h"
    #include "io.h"

    void main(void)
    {
    FILE *fp;
    char s[80] / number[10];
    int t;
    if((fp=fopen("test"/"w"))==NULL)
    {
    printf("cannot open file \n" );
    exit(1 );
    }
    printf("\n enter a string: ");
    gets(s);
    strcat(s/"\n");
    printf("\n enter anumber:");
    gets(number);
    t=atoi(number);
    fprintf(fp/"%s%d"/s/t );
    fclose(fp );
    if((fp=fopen("test"/"r"))==NULL)
    {
    printf("cannot open file\n");
    exit(1);
    }
    fscanf(fp/"%s%d"/&s/&t);
    printf("\nstring=%s/digit=%d"/s/t);
    }


    نمونه اي از خروجي برنامه مثال بالا :

    enter a string:hello!
    enter a number:123
    string=hello! / digit=123


    در مورد تابع ()fprintf و ()fscanf بايد توجه داشت كه عليرغم اينكه ورودي
    خروجي بااين دو تابع آسان است اما اطلاعات به همان صورتي كه در صفحه نمايش ظاهر
    مي شوند در فايل ذخيره مي گردند . بعنوان مثال ، عدد 267 كه در صفحه نمايش ، 3
    بايت را اشغال مي كند اگر توسط تابع ()fprintf بر روي فايل نوشته شود نيز 3
    بايت را اشغال خواهد كرد ( توجه داريم كه عدد 267 يك عدد صحيح است و مي تواند
    در دو بايت ذخيره شود ) . اين بدين معني است كه هر رقم بصورت كاراكتر تلقي
    مي گردد . اگر اين عدد توسط تابع ()fscanf از روي فايل خوانده شود ، بايد عمل
    تبديل كاراكتر به عدد صورت گيرد كه مستلزم صرف وقت است . براي جلوگيري از اين كه از دو تابع ()fread و ()fwrite استفاده گردد .

  3. #43
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    همانطوركه تاكنون مشاهده گرديد توابع زيادي براي انجام اعمال ورودي خروجي
    فايل وجود دارند . دو تابع ()fprintf و ()fscanf براي نوشتن و خواندن انواع
    مختلفي از داده ها و با فرمت هاي متفاوت بر روي فايل بكار مي روند . البته اين
    دو تابع از سرعت كمي برخوردارند كه توصيه مي شود از آنها استفاده نگردد . براي
    ورودي خروجي ركورد و همچنين ساير ورودي خروجيها ميتوان از دو تابع ()fread
    و ()fwrite استفاده نمود كه از سرعت بالايي برخوردارند . الگوي اين توابع در
    فايل stdio.h قرار داشته و بصورتهاي زير مي باشند :

    int fread( void *buffer/ int num_byte/ int count/ FILE *fp)
    int fwrite( void *buffer/ int num_byte/ int count/ FILE *fp)


    در الگوهاي فوق ، پارامتر buffer در مورد تابع fread به ساختمان داده يا
    متغيري اشاره مي كند كه داده هاي خوانده شده از فايل بايد در آن قرار گيرند و
    اين پارامتر تابع ()fwrite به محلي از حافظه اشاره مي كند كه داده هاي موجود در
    آن محل بايد در فايل نوشته شوند . پارامتر num_byte در هر دو تابع طول داده اي
    كه بايد خوانده يا نوشته شود را مشخص مي كند . پارامتر count تعداد عناصري است
    كه طول آن توسط num_byte مشخص مي گرديد و بايد در فايل نوشته و يا از فايل
    خوانده شوند . اشاره گر fp به فايلي اشاره مي كند كه توابع freadو fwriteو بايد
    بر روي آنها عمل كنند . بعنوان مثال مجموعه دستورات زير را در نظر بگيريد :

    char table [20];( 1)
    char arr [10];( 2)
    fwrite( table/ sizeof( char)/ 20/ fp);( 3)
    fread( arr/ sizeof( char)/ 10/ fp);( 4)


    دستورات (1) و (2) رشته هايي به طول هاي 20 و 10 را تعريف مي كنند . دستور
    (َ3) ، 20 بايت از اطلاعات موجود در آرايه table را در فايلي كه fp به آن اشاره
    مي كند مي نويسد . دستور (4) تعداد 10 بايت از اطلاعات را از فايلي كه fp به آن
    اشاره مي كند خوانده و در متغير arr قرار مي دهد . توابع ()fread و ()fwrite
    بيشتر در ورودي خروجي ركورد مورد استفاده قرار مي گيرند .

    مثال 1: برنامه اي كه نام ، تعداد ساعت كار و حق الزحمه ساعتي كارمندان
    موسسه اي را دريافت كرده و در يك فايل قرار ميدهد و سپس بااستفاده ازاين اطلاعات
    حقوق آنها را محاسبه كرده و به خروجي منتقل مي كند .

    #include "stdio.h"
    #include "stdlib.h"
    main)(
    {
    FILE *p;
    char numstr[10];
    int i / salary ;
    struct em
    {
    char name [10] ;
    int hp;
    int h;
    } emp ;
    clrscr )(;
    p=fopen("employ.dat"/"wb+" );
    if( p==NULL)
    {
    printf("cannot open output file");
    printf("\n press a key... " );
    getch )(;
    exit(1 );
    }
    gotoxy(14/2 );
    puts("<< data entry >>");
    gotoxy(3/3 );
    printf(" name hour pay");
    printf(" hour " );
    gotoxy(3/4 );
    printf("--------- ----------");
    printf("------ ");
    i=5 ;
    while( 1)
    {
    gotoxy(3/i );
    gets(emp.name);
    if(!emp.name[0])
    break ;
    gotoxy(21/i );
    gets(numstr );
    emp.hp=atoi(numstr );
    gotoxy(34/i );
    gets(numstr );
    emp.h=atoi(numstr );
    i++ ;
    fwrite(&emp/sizeof(struct em)/1/p);
    }
    rewind(p );
    clrscr)(;
    gotoxy(7/2 );
    puts(" << OUTPUT >> " ) ;
    gotoxy(3/3 );
    puts(" name salary ");
    gotoxy(3/4 );
    puts("-------- -----------");
    i=5 ;
    fread(&emp / sizeof(struct em)/1/p);
    while(!feof(p))
    {
    gotoxy(3/i );
    puts(emp.namp);
    gotoxy(21/i );
    printf("%d"/ emp.hp*emp.h );
    i++ ;
    fread(&emp/sizeof(struct em)/1/p);
    }
    gotoxy(6/++i );
    puts("press a key... ");
    getch )(;
    }


    نمونه اي از خروجي برنامه مثال 1 :

    << data entry >>
    name hour pay hour
    ------ ---------- --------
    ali 120 100
    reza 500 50
    ahmad 200 10

    << OUTPUT >>
    name salary
    -------- ----------
    ali 12000
    reza 25000
    ahmad 2000

    press a key...



    مثال 2: برنامه اي كه يك بانك اطلاعاتي از دانشجويان تشكيل مي دهد . اطلاعاتي
    در بانك قرار مي گيرند عبارتند از : نام دانشجو ، شماره دانشجويي ، نمره و
    جنسيت دانشجو .
    قبل از مشاهده ليست برنامه بهتر است نگاهي به نمودار سلسله مراتبي برنامه و
    وظايف توابع داشته باشيم :
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | main )(|

    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |

    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤ
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ||init_list)(||| menu )(|| enter )(||display )(|| save )(|| load )(|

    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
    |

    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ||init_list)(||

    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ شكل ( الف )
    نمودار سلسله مراتبي برنامه مثال 2

    وظيفه تابع ()main : فراخواني توابع مطابق شكل ( الف ) .
    وظيفه تابع init-lslist : مقداردهي اوليه به ليست ( باNULL كردن اولين كاراكتر ( . name

    وظيفه تابع ()menu : ظاهر نمودن منويي در صفحه نمايش .
    وظيفه تابع ()enter : اخذ اطلاعات از صفحه كليد و قرار دادن آن در ليست .
    وظيفه تابع ()display : چاپ محتويات ليست در صفحه نمايش .
    وظيفه تابع ()save : انتقال محتويات ليست به فايل .
    وظيفه تابع ()load : انتقال اطلاعات از فايل به ليست .

    ليست برنامه مثال 2 :

    #include "stdio.h"
    #include "stdlib.h"
    #define SIZE 100
    struct student
    {
    char name [10] ;
    int stno / --- ;
    float grade ;
    } list[SIZE] ;
    int menu(void );
    void init_list(void )/ enter(void );
    void display(void )/ save(void );
    void load(void );
    main)(
    {
    char chois ;
    init_list)(;
    for(;
    {
    switch(menu))(
    {
    case 'e':
    enter)(;
    break;
    case 'd':
    display)(;
    break;
    case 's':
    save )(;
    break;
    case 'i':
    load )(;
    break ;
    case 'q':
    exit(0 );
    }
    }
    }
    void init_list(void)
    {
    register int t ;
    for( t=0 ; t < SIZE ; t++)
    *list[t].name='\0' ;
    }
    void enter(void)
    {
    register int i ;
    int row ;
    char numstr[10];
    for( i=0 ; i < SIZE ; i++)
    if( !list[i].name)
    break ;
    if(i==SIZE)
    {
    printf("\n list is full " );
    printf("press a key... " );
    getch )(;
    }
    clrscr )(;
    gotoxy(10/2 );
    puts("<< INPUT DATA >>");
    gotoxy(1/3 );
    printf(" name stno ");
    printf(" gread ---(1/2)" ) ;
    gotoxy(1/4 );
    puse( "-- ----- ------- ");
    printf("------- -----" );
    row=5 ;
    for(;
    {
    gotoxy(1/row);
    gets(list[i].name);
    if(!list[i].name[0]);
    break ;
    gotoxy(12/row);
    gets(numstr );
    list[i].stno=atoi(numstr );
    gotoxy(20/row);
    gets(numstr );
    list[i].grade=atoi(numstr );
    gotoxy(30/row);
    gets(numstr );
    list[i].---=atoi(numstr );
    row ++ ;
    i ++ ;
    }
    }
    void display(void)
    {
    register int t ;
    int row ;
    clrscr )(;
    gotoxy(10/2 );
    puts("<< OUTPUT DATA >> " );
    gotoxy(1/3 );
    printf(" name stno gread ");
    printf(" ---(1/2)" );
    gotoxy(1/4 );
    puse( " ----- ---- ------- ");
    printf("--------" );
    row=5 ;
    for( t=0 ; t < SIZE ; t++)
    {
    if(*list[t].name)
    {
    gotoxy(1/row);
    printf("%s"/list[t].name);
    gotoxy(12/row);
    printf("%d"/list[t].stno);
    gotoxy(20/row);
    printf("%.2f"/list[t].grade );
    gotoxy(30/row);
    printf("%d"/list[t].--- );
    row ++ ;
    }
    }
    gotoxy(5/row+2);
    printf(" press a key... ");
    getch )(;
    }
    void save(void)
    {
    FILE *fp ;
    register int i ;
    fp=fopen("st"/wb");
    if(fp==NULL)
    {
    printf("\n cannot open file");
    printf("\n press a key... ");
    getch )(;
    return ;
    }
    for(i=0 ; i < SIZE ; i++)
    if(*list[i].name)
    fwrite(&list[i]/
    sizeof(struct student)/1/fp );
    clrscr )(;
    gotoxy(20/10 );
    printf("data saved.press a key.");
    getch )(;
    }
    void load(void)
    {
    FILE *fp ;
    register int i ;
    fp=fopen("st"/rb");
    if(fp==NULL)
    {
    printf("\n cannot open file");
    printf("\n press a key... ");
    getch )(;
    return ;
    }
    init_list )(;
    for(i=0 ; i < SIZE ; i++)
    {
    fread(&list[i]/
    sizeof(struct student)/1/fp);
    if(feof(fp))
    {
    clrscr )(;
    gotoxy(20/10 );
    printf("data loaded.press a key.");
    getch )(;
    return ;
    }
    }
    }
    menu(void)
    {
    char s[80] ;
    clrscr )(;
    do {
    gotoxy(20/4);
    printf("E )enter data ");
    gotoxy(20/6);
    printf("D )display on screan");
    gotoxy(20/8);
    printf("L )load file");
    gotoxy(20/10);
    printf("S )save in file");
    gotoxy(20/12);
    printf("Q )quit");
    gotoxy(20/14);
    printf("enter your select:");
    gets(s );
    }while(!strchr("edlsq"/tolower(*s)));
    return tolower(*s );
    }


    در برنامه مثال 2 از تابع ()tolower استفاده شده است .
    براي آشنايي با نحوه عملكرد برنامه ، نتيجه دوبار اجراي آن را در زير مشاهده
    مي كنيد :
    نتيجه حاصل از اجراي اول :

    E )enter data
    D )display on screan
    L )load file
    S )save in file
    Q )quit
    enter your select:e
    << INPUT DATA >>
    name stno grade ---(1/2)
    -------- ----- ---- ------
    reza 123 12.4 1
    mohammad 321 16.6 1
    mina 543 11.5 2

    E )enter data
    D )display on screan
    L )load file
    S )save in file
    Q )quit
    enter your select:d
    << OUTPUT DATA >>
    name stno grade ---(1/2)
    -------- ----- ---- ------
    reza 123 12.4 1
    mohammad 321 16.6 1
    mina 543 11.5 2
    press a key...

    E )enter data
    D )display on screan
    L )load file
    S )save in file
    Q )quit
    enter your select:s
    data saved.press a key.

    E )enter data
    D )display on screan
    L )load file
    S )save in file
    Q )quit
    enter your select:q


    نتيجه حاصل از اجراي دوم :
    E )enter data
    D )display on screan
    L )load file
    S )save in file
    Q )quit
    enter your select:l
    data loaded.press a key.

    E )enter data
    D )display on screan
    L )load file
    S )save in file
    Q )quit
    enter your select:d
    << OUTPUT DATA >>
    name stno grade ---(1/2)
    -------- ----- ---- ------
    reza 123 12.4 1
    mohammad 321 16.6 1
    mina 543 11.5 2
    press a key...

    E )enter data
    D )display on screan
    L )load file
    S )save in file

  4. #44
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    حل يك مساله از طريق فايلهاي ترتيبي

    تاكنون با نحوه تشكيل فايل هاي ترتيبي و چگونگي دسترسي به اطلاعات موجود در
    آن آشنا شده ايم . اكنون مساله پيچيده تري را در نظر مي گيريم : يك فايل داده به
    نام old حاوي اطلاعات مربوط به دانشجويان است كه بايد بازسازي گردد . منظور از
    بازسازي فايل ، حذف ركورد ، تغيير ركورد و يا اضافه نمودن ركورد جديدي به فايل
    است . فرمت ركوردهاي فايل old بصورت زير مي باشد :
    نمره | درس | نام دانشجو | شماره دانشجويي |
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ 4 20 10 2


    نمونه اي از اطلاعات موجود در فايل old بصورت زير است :

    نمره نام درس نام دانشجو فيلد كليد ( شماره دانشجويي )
    ؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤ 1234 Ali pascal 15
    2345 Ahmad pascal 19
    3456 Reaz C 18
    5678 Jafar C 14
    6789 Jalal pascal 13
    9999 zzzz zzzz 9


    براي بازسازي فايل old ركوردهاي تراكنش در فايلي بنام trans قرار دارند .
    فرمت ركوردهاي اين فايل بصورت زير مي باشد :
    |
    نمره | درس | نام دانشجو | تراكنش | شماره دانشجويي |
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ 4 1 20 10 2

    در فرمت فوق ، تراكنش مشخص مي كند كه ركورد بايد حذف ، اضافه و يا تغيير
    نمايد . اگر تراكنش برابر با I ركورد بايد اضافه گردد ، اگر برابر با D باشد
    ركورد بايد حذف گردد و اگر برابر با C باشد ركورد بايد تغيير نمايد .

    نمونه اي از محتويات فايل trans بصورت زير است .

    نمره نام درس نام دانشجو نوع تغييرات فيلد كليد ( شماره دانشجويي )
    ؤؤؤؤ ؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤ 20
    pascal Ahmad تغيير محتويات ركورد 2345 20
    C Ritchie اضافه 4567 13
    pascal Jalal حذف 6789 9999 zzz zzz zzz 9


    نتيجه حاصل از تركيب دو فايل oldو transو فايل جديدي بنام new است كه حاوي
    جديدترين اطلاعات مي باشد و محتويات آن بصورت زير است :

    نمره نام درس نام دانشجو فيلد كليد ( شماره دانشجويي )
    ؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤ 1234 Ali pascal 15
    2345 Ahmad pascal 20
    3456 Reaz C 19
    4567 Ritchie C 20
    5678 Jafar C 14
    9999 zzz zzz 18


    چگونگي تركيب فايل هاي oldو transو و تشكيل فايل new در شكل ( الف ) مشاهده
    مي گردد .
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
    گزارش خطا | | فايل old | o
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤ ؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
    ؤ >ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ<ؤ|
    برنامه بازسازي |
    ؤ >ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ<ؤ
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤ ؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
    فايل new | n | فايل | tatrans
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
    شكل ( الف ) . بازسازي فايل ترتيبي

    همانطور كه در شكل ( الف ) مشاهده مي گردد ، اگر در حين بازسازي خطايي رخ
    دهد ، مثلا" ركوردي كه در فايل old وجود نداشته باشد ولي سعي در حذف آن داشته
    باشيم ، پيام خطاي مناسبي در صفحه نمايش چاپ مي شود . شكل ( ب ) نمودار سلسله
    مراتبي برنامه بازسازي فايل ترتيبي را نشان مي دهد .
    ؤؤؤؤؤؤؤؤؤؤؤؤ | main )(|

    ؤؤؤؤؤؤؤؤؤؤؤؤ |

    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤ | | | | |

    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ|ؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |syserr)(|||get_master_record||||get_transaction_r ecord||do_nintial_status|

    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ|ؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
    ؤؤؤؤؤؤؤؤؤؤ | |
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤ | | |
    |
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |apply_transaction||do_final_status||copy_correspo nding||put_master_record||
    |
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | | | | |

    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ| ؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ||copy_corresponding|| |error| |||copy_corresponding|| |get_master_record|

    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ| ؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
    |

    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ || put_master_record ||

    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
    شكل ( ب ) . نمودار سلسله مراتبي بازسازي فايل ترتيبي



    ليست برنامه بازسازي فايل ترتيبي . # include
    # define READONLY "r"
    # define WRITEONLY "w"
    # define FALSE 0
    # define TRUE 1
    typedef int boolean;

    # define NAMESIZE 21
    # define SUBJECTSIZE 11
    # define TRAILER 9999

    # define INSERT 'I'
    # define DELETE 'D'
    # define CHANGE 'C'

    char *prog;
    FILE *fopen)(
    int fclose)(/fscanf)(/fprinter
    boolean get_transaction_record)(
    boolean get_master_record)(
    boolean put_master_record)(

    void do_inital_status)(
    void do_final_status)(
    void apply_transation)(
    void copy_corresponding)(
    void syserr)(/error)(

    main(argc/argv)
    int argc
    char *argv[]
    {
    cgar b[21]/c[11]
    int a/d
    FILE *fpold/*fptrans/*fpnew
    int current_key
    boolean allocated
    char tran_transaction
    int old_identification
    tran_identification
    new_identification
    char old_name[NAMESIZE]
    tran_name[NAMESIZE]
    new_name[NAMESIZE]
    char old_subject[SUBJECTSIZE]
    tran_subject [SUBJECTSIZE]
    new_subject[SUBJECTSIZE]
    int old_grede/tran_grade
    new_grade

    prog=argv[0]
    if(argc !=4 )syserr(1/
    "usage:&s file1 file2 file3\n"/prog)

    else if((fpold=fopen(argv[1]/
    READONLY))==NULL)
    syserr(2/
    "cannot open &s\n"/argv[1])
    else if(( fptrans=fopen( argv[2]/
    READONL))==NULL
    syserr(2/"cannot open &s\n"/argv[2])
    else if (( fopew=fopen( argv[3]/
    WRITEONLY))==NULL
    syserr(2/"cannot open &s\n"/argv[3]);
    else
    {
    get_master_record(fpold/
    &old_identification/
    old_name/old_subject/&old_grade);
    get_transction_record(fptrans/
    &tran_identification/
    &tran_transaction/
    &tran_name/tran_subject/
    &tran_grade
    current_key=tran_identification <
    old_identification ?
    tran_identification:
    old_identification ;
    while(current_key != TRAILER)
    {
    do_initial_status(current_key/
    &allocated/
    fpold/&old_identifcation/
    old_name/old_subject/&old_grade);
    *new_identification'
    new_name/new_sudject/&new_grade);
    while(current_key==
    tran_identification
    {
    apply_transaction( &allocated'
    tran_identification/
    tran_transaction/
    tran_subject/tran_grade/
    &new_identification/new_name/
    new_subject/&new_grade);
    get_transction_record(fptrans/
    &tran_identification/
    &tran_transaction/tran_name
    tran_subject/&tran_grade/
    }
    do_final_status( fpnew/allocated/
    new_identification/new_name/
    new_subject/new_grade);
    current_key=tran_identification<
    old_identification ?
    tran_identification:
    old_identification ;
    }
    copy_corresponding(
    &new_identification/new_name/
    new_subject/&new_grade/9999/
    "zzzzzzzzzzzzzzzzzzzz"/
    "zzzzzzzzzz"/9);
    put_master_record(fpnew/
    new_identification/
    new_name/new_subject/new_grade );
    fclose(fpold);
    fclose(fptrans);
    fclose(fpnew);
    }
    }

    boolean get_transaction_record(fp/
    identification/
    transaction/ name/suhject/grade)
    FILE *fp;
    int *identification;
    char *transaction;
    char *name;
    char *subject;
    int *grade;
    {
    if( fscanf( fp/ "%4d%c%20s%10%2d"/
    identification/
    transaction/name/subject/grade)==5)
    return(TRUE);
    else
    return(FALSE);

    }

    boolean get_master_record(fp/
    identification/name/subject/grede)
    FILE *fp;
    int *identification;
    char *name;
    char *subject;
    int *grade;
    {
    if( fscanf( fp/"%4d%20s%10s%2d"/
    identification/
    name/sunject/grade)==4)
    return(TRUE);
    else
    return(FALSE);

    }

    boolean put_master_record(fp/
    identification/name/subject/grade)
    FILE *fp;
    int *identification;
    char *name;
    char *subject;
    int *grade;
    {
    if(fprintf(fp/
    "%6d %-20s %-10s %2d\n"/
    identification/name/
    subject/grade)!=EOF)return(TRUE);
    else
    return(FALSE);
    }


    void apply_transaction(allocated/
    tran_identification/
    tran_transaction/tran_name/
    tran_subject/tran_grade/
    new_identification/new_name/
    new_subject/new_grade)
    boolean *allocated;
    char tran_transaction;
    int tran_identification/
    *new_identification;
    char *tran_name/ *new_name;
    char *tran_subject/ *new_subject;
    int tran_grade/ *new_grade;

    {
    switch(tran_transaction)
    {
    case INSERT:
    if(*allocated==TRUE)
    error(INDSERT/
    "record already exists\n"/
    tran_identification);
    else
    {
    copy_corresponding(
    new_identification/
    new_name/new_subject/
    tran_grade);
    *allocated=TRUE;
    }
    break;
    case DELETE:
    if(*allocated==FALSE)
    error(DELETE/
    "tecord dose not exist\n"/
    tran_identification);
    else
    *allocated=FALSE;
    break;
    case CHANGE:
    if(*allocated==FALSE)
    error(CHANFE/
    "record dose not exist\n"/
    tran_identification);
    else
    copy_corresponding(
    new_identification/
    new_name/new_subject/
    new_grade/
    tran_identification/
    tran-name/tran_subject/
    tran_grade);
    break;
    }
    }

    void do_initial_status(current_key/
    allocated/fp/old_identification/
    old_name/old_subject/old_grade/
    new_identificatinl/new_name/
    new_subject/new_grade)
    int current_key;
    boolean *allocated;
    FILE *fp'
    int *old_identification/
    *new_identification/
    char *old_name/ *new_name;
    char *old_subject/ *new_subject;
    int *old_grade/ *new_grade;
    {
    if(*old_identification==current_key)
    {
    copy_corresponding(
    new_identification/new_name/
    new_subject/new_grade/
    *old_identification/
    old_name/old_subject/*old_grade);
    *allocated=TRUE;
    get_master_record(fp/
    old_identification/
    old_name/old_subject/old_grade);
    }
    else
    *allocated=FALSE;
    }

    void do_final_status(fp/allocated/
    identification/name/subject/grade)

    FILE *fp;
    boolean allocated;
    int identification;
    char *name;
    char grade;
    int
    {
    if(allocated==TRUE)
    put_master_record(fp/identification/
    name/subject/grade);
    }

    void copy_corresponding(
    dest_identification/dest_name/
    dest_subject/dest_grade/
    sou_identification/
    sou_name/sou_subject/sou_grade)
    int *dest_identification/
    sou_identification;
    char *dest_name/ *sou_name;
    char *dest_subject/ *sou_subject;
    int *dest_grade/ sou_grade;
    {
    *dest_identification=
    sou_identification;
    strcpy(dest_name/sou_name);
    strcpy(dest_subject/sou_subject);
    *dest_grade=sou_grade;
    }

    void syserr( errcode/message/argument)
    int errcode;
    char *message/argument ;
    {
    fprintf(stderr/"%s[%2d]:"/prog/
    errcode);
    fprintf(stderr/message/argument);
    exit(errcode);
    }

    void error( code/message/id)
    char code;
    char *message;
    int id;
    {
    printf("%c %30s %4d\n"/
    code/message/id);
    }


    اجراي برنامه بازسازي فايل ترتيبي و محتويات فايل هاي داده :


    فايل new 2345 ahmad pascal 20
    3456 reza c 19
    4567 richie c 20
    5678 jafar c 14
    9999 zzzzzzzzzzzzzzzzzzzz zzzzzzzzzz 9

    فايل old 1234ali pascal 15
    2345ahmad pascal 18
    3456reza c 19
    5678jafar c 14
    6789jafar pascal 13
    9999zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 9

    فايل trans 2345cahmad pascal 20
    4567Irichie c 20
    6789Kjalal pascal 13
    9999zzzzzzzzzzzzzzzzzzz

  5. #45
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    دسترسي تصادفي به فايل ( ورودي خروجي تصادفي )

    دربرنامه هايي كه تاكنون نوشته اند،ازسازمان فايل ترتيبي براي ذخيره وبازيابي
    اطلاعات استفاده شده است . در اين قسمت چگونگي تشكيل تصادفي مطرح شده و طريقه
    دسترسي به اطلاعات موجود در آنها مورد بررسي قرار مي گيرند.
    براي دسترسي تصادفي به فايل هااز تابع ()fseek استفاده مي شود.الگوي اين تابع
    در فايل stdio.h قرار داشته و بصورت زير مي باشد :
    int fseek( FILE *fp/ long num_byte/ int origin)


    اساس كار تابع ()fseek به اين صورت است كه : با شروع از يك محل در فايل كه
    توسط پارامتر origin مشخص مي شود ، " موقعيت سنج فايل " را به طول num-btbyte
    بايت تغيير مكان مي دهد. يعني تغييرمكان " موقعيت سنج فايل " بطور نسبي بوده و
    نسبت به محلي كه توسط origin محل 100 فايل را بعنوان مبدا حركت مشخص كند و طول num-byte
    برابر با 200 باشد ، " موقعيت سنج فايل " به محل 300 منتقل خواهدشد.
    مقاديري كه origin مي تواند بپذيرد در جدول ذيل آمده اند .

    ( مبداحركت ) origin نام ماكرويي كه بيانگراين مبدااست

    ابتداي فايل SEEK_SET
    موقعيت فعلي فايل SEEK_CUR
    انتهاي فايل SEEK_END


    مقادير معتبر پارامتر origin در تابع fseek O

    جدول فوق گوياي اين است كه اگرپارامتر origin برابربا SEEK_SET باشد،"موقعيت
    سنج فايل " ازابتداي فايل به طول num_byte بايت به طرف انتهاي فايل حركت ميكند.
    اگرپارامتر origin برابر باSEEK_CUR باشد،"موقعيت سنج فايل " نسبت به محل خودش
    به اندازه num_byte بايت به طرف انتهاي فايل حركت مي كند . اگر پارامتر origin
    برابر با SEEK_END باشد، " موقعيت سنج فايل " به اندازه num_byte بايت ، طول
    فايل را افزايش مي دهد و سپس به اين محل اشاره مي نمايد .
    محلي كه براي هر ركورد در فايل تصادفي درنظر گرفته مي شود، "ناحيه ركورد" نام
    دارد . چون هر ركورد در ناحيه مربوط به خودش نوشته مي شود . ممكن است چندين
    ناحيه ركورد بين ركوردهاي فايل خالي باقي بماند. به عنوان مثال ،فرض مي كنيم در
    يك فايل مربوط به كارمندان ، طول ركورد 100 بوده تعداد كارمندان 5 نفر بوده و
    شماره كارمندي آنها 100 ، 500 ، 600 ، 800 ، 900 باشد . پس از قرار گرفتن
    مشخصات اين كارمندان درفايل ،99 ناحيه ركورد (99x100 بايت ) قبل از ركورد اول
    و 399 ناحيه ركورد قبل از ركورد دوم و ... به هدر مي روند ، اين موارد را شايد
    بتوان به عنوان يكي از معايب فايل تصادفي در نظر گرفت ولي معمولا" مكانيزمهايي ي بهبود اين حالت منظور مي شود .

  6. #46
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    دستگاههاي ورودي خروجي استاندارد

    وقتي اجراي يك برنامه به زبان C آغازميشود، 5 فايل بطور اتوماتيك بازميشوند
    كه اشاره گرهاي آنها در جدول زير مشاهده مي گردند .


    اشاره گر دستگاه (فايل ) نام دسگاه (فايل )


    stdin
    دستگاه ورودي استاندارد (صحفه كليد) stdout
    دستگاه خروجي استاندارد (صفحه نمايش ) stderr
    دستگاه استانداردجهت ثبت پيامهاي خطا(صفحه نمايش ) stdprn
    دستگاه استاندارد چاپ (چاپگر موازي ) stdaux
    پورت سري (serial port)



    بعنوان مثال ، مجموعه دستورات زير را در نظر بگيريد :


    putc(ch/stout );( 1)
    printf(stout/%d/%d"/a/b );( 2)
    fscanf(stdin/"%d/%d"/&X/&Y );( 3)



    دستور (1) موجب مي شود تا كاراكتر ch در صفحه نمايش نوشته شود : دستور (2)
    موجب مي شود تا متغيرهاي Xو Yو از صفحه كليد خوانده شوند .
    دستگاه هاي استاندارد ورودي خروجي همانطور كه بطور اتوماتيك باز مي شوند،به
    طور اتوماتيك نيز بسته خواهند شد و نياز به بستن آنها توسط برنامه نويس نيست .

  7. #47
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    توابع كتابخانه اي ( قسمت اول )

    توابع ، جهت انجام اعمال رياضي ، كاراكتري ، رشته اي ، مقايسه ، تبديل انواع
    و غيره مورد استفاده قرار مي گيرند. در اعمال رياضي مي توان توليد اعداد تصادفي
    محاسبه قدرمطلق اعداد و لگاريتم را نام برد و در اعمال كاراكتري مي توان خواند
    و نوشتن كاراكترها و در مورد اعمال رشته اي مي توان انتقال رشته اي به رشته ديگر
    مقايسه رشته ها و ... را نام برد . بطور كلي مي توان گفت كه توابع در زبان C از
    تنوع بسيار زيادي برخوردارند .
    در زبان C هر تابع داراي الگويي است كه اين الگو نوع تابع و نوع پارامترهاي
    آن را مشخص مي كند . الگوي هر تابع در يك فايل header قرار دارد . ضمن بررسي
    توابع ، الگوي آنهاذكر شده و فايل header كه اين الگو در آنجا قرار دارد معرفي
    مي گردد . به دليل اين كه درك مفاهيم بعضي از توابع نياز به داشتن اطلاعاتي در
    موضوعات مختلف است .

  8. #48
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    مقدمه
    نمي دانم تا حالا به مشكل "زبانها" برخورد كرده ايد يا نه ... بنظر من تمامي زبانها در 99 درصد موارد شبيه به هم هستند ... اين مطلب پايه تحقيقي شد براي اينكه يكي از دوستان خوبمان بنام "اردلان شاهقلي " اين مطلب را تهيه و يكي از دوستان ديگرمان بنام سركار خانم "نادري " زحمت تايپ انرا بكشند ...
    اميد وارم اين مطلب هر چند ناقص كمك خوبي براي يادگيري هر دو زبان باشد



    وكيلي


    زبان C زبان Pascal
    ;(عبارت 2& ",عبارت 1Scanf (" ;( ) read
    ; (عبارت 2 , " عبارت 1") Printf ; ( ) write
    نكته : دستورات Scanf و Printf داراي دو عبارت اول و دوم ميباشند .
    نكته : در دستور Scanf به جاي عبارت اول از كاراكترهاي كنترلي فرمت استفاده ميشود.
    نكته : در دستور Scanf به جاي عبارت دوم (بعد از علامت & ) اسم متغيرهايي كه بايد خوانده شوند مي آيد . البته با توجه به كاراكترهاي كنترلي فرمت عبارت اول .
    نكته : در دستور Printf به جاي عبارت 1 از كاراكترهاي كنترلي استفاده ميشود . ( البته در اين دستور ميتوان بسيار عبارت اول يك متن را به ............. قرار داد و ديگر احتياجي به عبارت دوم نيست ) در ضمن ميتوا ن از تركيب از حالت بالا هم استفاده كرد .
    نكته : عبارت دوم در دستور Printf ............. اسم متغير به همراه بعضي از كاراكترهاي كنترلي ميباشد .
    ; ) & , " ln (" Scanf ;( )ln read
    ; ) , " ln (" Printf ; ( )ln write

    جدول كاراكترهاي كنترلي دستورPrintf ( ) و( ) Scanf
    كاراكتر توضيحات
    \f موجب انتقال كنترل به صفحه جديد مي شود
    \n موجب انتقال كنترل به خط جديد ميشود
    \t به اندازه ي 8 كاراكتر فاصله ايجاد ميشود
    \" چاپ دبل كتيشن
    \' چاپ كتيشن
    \O NULL ( رشته ي ....... )
    \\ Back slash
    \V انتقال كنترل به 8 سطر بعد
    جدول كاراكترهاي كنترلي فرمت
    كاراكتر توضيحات
    %c كاراكتر
    %d اعداد صحيح دهدهي مثبت و منفي
    %i اعداد صحيح دهدهي مثبت و منفي
    %e نمايش علمي عدد همراه با حرف e
    %E نمايش علمي عدد همراه با حرف E


    جدول كاراكترهاي كنترلي فرمت
    كاراكتر توضيحات
    %f نمايش اعداد اعشاري
    %g نمايش اعداد اعشاري
    %G نمايش اعداد اعشاري
    %S رشته اي از كاراكترها
    %p اشاره گرها

    در زبان C براي ورود اطلاعات انواع ديگري از توابع را داريم كه معادل آنها همان read در پاسكال ميباشد. (readln) و .............دستور هم معادل Write موجود ميباشد.
    C Pascal
    getch ( );= نام متغير كاراكتري read( );
    getche ( ); = نام متغير كاراكتري read( );
    getchar ( ); = نام متغير كاراكتري read( );

    Putch ( ) ; Write ( );
    Putchar ( ) ; Write ( );

    البته دستورات فوق فقط براي خواندن يك char ميباشند.
    دو دستور زير برا دريافت و نوشتن string در C ميباشند .
    ; (نام متغير رشته اي) gets
    ; (نام متغير رشته اي) Puts

    انواع داده ها برابر است با
    C Pascal
    int integer
    Flout real
    Char char
    (آرايه اي از char ميباشد. ) string
    Int boolean

    معادل بعضي از دستورات Pascal در C در پائين آمده است .
    C Pascal
    = = =
    = = :
    ! < >
    <= <=
    >= >=
    != not
    && And
    || or
    ++Xيا ++X inc(x)
    X-- يا --X dic(x)
    { begin
    } End;
    } End.
    } End
    break; break;

    C Pascal
    (شرط ) if then شرط if 1)

    { begin


    } end
    Else else
    { begin


    } end;
    (عمليات ; شرط خاتمه ; مقادير اوليه= متغبرهاFor ( Do مقدار نهائي to مقدار اوليه = : متغير حلقه 2) For
    { begin




    } end;
    البته در زبان C حلقه ي for ميتواند هر كدام و با ................ تمام مراحل را ( عمليات يا شرط خاتمه با دستوارات انتساب نداشته باشد . )
    در صورتي كه حلقه ي for به صورت زير نوشته شود مانند حلقه ي while در پاسكال عمل خواهد كرد .(بصورت بينهايت)
    For (; ; )

    C Pascal
    ) شرط ادامه ي حلقه While ( do شرط ادامه ي حلقه 1) while

    { Begin


    } End;

    do 2) repeat

    ; ( شرط ادامه ي حلقه While ( ;(شرط خروج از حلقه) until

    (نام متغير) Switch of نام متغير 3) Case
    { begin :حالت اول
    :{ حالت اول case
    End ;
    Break; begin: حالت دوم
    }
    :{ حالت دوم case end;
    Break;
    } : begin حالت n ام
    :{ حالت case end;
    Break; Else Begin
    Defualt : End;
    end;
    }

    }
    همان طوري كه مي دانيد C تشكيل شده است از يك سري تابع و حتي برنامه ي اصلي آن هم يك تابع است كه بصورت زير آنرا مي نويسيم .
    Void Main ( )
    {

    }
    C مانند پاسكال داراي تابع مي باشد و اين توابع مي توانند كار رويه ها را هم انجام دهند .
    C Pascal
    ; ( نام متغير ها / نوع متغير ها ) نام تابع نوع تابع ; ( نوع تابع : ( نام متغير ها ) نام تابع Function
    { begin


    } End;
    برابر تعريف آرايه ها در C داريم .
    زبان Pascal
    نوع آرايه of ] مقدار انتسابي .. مقدار ابتدائي [ Array : نام آرايه
    زبان C
    ]طول هر خانه[ ] تعداد خانه هاي آن [ نام آرايه نوع آرايه

    در زبان C اولين خانه ي آرايه ها داراي انديس صفر ميباشد .
    در زبان C متغيري به نام string وجود ندارد و بجاي آن از آرايه اي از نوع char استفاده ميشود .
    C پاسكال
    Char x[ ]; x:string;
    در زبان C آخرين خانه ي يك آرايه از char ها با '/0' پر خواهد شد . ( '/0' انتهاي يك string ميباشد . )
    براي كپي كردن يك string در ديگري از تابع
    C پاسكال
    ;( متغير دوم و نام متغير اول Strcpy( Pchar;: (متغير دوم ونام متغير اول strcopy (
    در هر دو زبان مقدار متغير دوم و متغير اول كپي ميشود . ( البته دستور strcopy در unit، string زبان پاسكال قرار دارد .)
    ;( متغير دوم و نام متغير اول ) strcut ; Pchar : ( متغير دوم و نام متغير اول ) strcut
    در هر دو زبان مقدار متغير دوم به انتهاي مقدار متغير اول مي چسبد و در متغير اول قرار مي گيرند . ( دستور فوق در unit string پاسكال قرار دارد . )

  9. #49
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    اشاره گرها
    C پاسكال
    نام اشاره گر * نوع اشاره گر نوع اشاره گر ^ : نام اشاره گر
    نكته : در زبان C هميشه بايد در هنگام ارسال آرايه ها به تابع آخرين عنصر آن معلوم باشد البته مي توان تمامي عناصر را هم معلوم كرد و يا آخرين عنصر را به تابع فرستاد .
    در زبان C ميتوان اشاره گري از نوع آرايه تعريف كرد با استفاده از دستور Malloc بصورت زير
    Int*P
    P= ( int *)Malloc ( n* size of ( int))
    با دو دستور بالا ابتدا اشاره گر p از نوع int ساخته شده سپس يك آرايه ي n عنصري از نوع int به p نسبت داده ميشود .
    ارزش دهي اوليه اشاره گرها درC
    ; "رشته " = نام رشته Char *
    نكته : ساختمان ها در زبان C معادل ركوردها در زبان پاسكال ميباشند .
    C پاسكال
    نام ساختمان struct record = نام ركورد
    { ;نوع فيلد : نام فيلد اول
    ; نام فيلد نوع فيلد ;نوع فيلد : نام فيلد دوم
    ; نام فيلد نوع فيلد '
    ' '
    '
    ; نام فيلد نوع فيلد ;نوع فيلد : نام فيلد n ام
    }; end;

    در زبان پاسكال در ............. var ميتوان به صورت زير متغير هائي از نوع record تعريف كرد و در زبان C داريم .
    ; اسامي متغير ها نام ساختمان Str var
    ; نام ركورد : نام متغير نكته : در زيان C ميتوان متغير هاي ساختمان را بصورت زير تعريف كرد
    نام ساختمان Struct
    {
    ; نام فيلد نوع فيلد
    ; نام فيلد نوع فيلد
    '
    '
    ; نام فيلد نوع فيلد
    نام متغير ها }
    براي دسترسي به عناصر داده ها و ركورد ها داريم
    C پاسكال
    نام فيلد . نام ساختمان نام فيلد . نام ركورد
    براي تعريف آرايه اي از ركورد ها و يا ساختمان ها به صورت زير عمل ميكنيم .
    C پاسكال
    نام ساختمان struct type
    { record= نام ركورد
    ; نام فيلد نوع فيلد ; نوع فيلد : نام فيلد
    ; نام فيلد نوع فيلد '
    ' '
    ' ; نوع فيلد : نام فيلد
    ; نام فيلد نوع فيلد end;
    } var
    ; [n ] نام آرايه نام ساختمان Strust ; نام ركورد of [1..n] array : نام آرايه

    C پاسكال
    ( نام رشته ) a to i = ; ( عددي براي چك كردن و نام عدد و نام رشته ) vul
    دو دستور بالا در C و در پاسكال يك مقدار رشته اي را ميگيرد و به يك مقدار int تبديل ميكند .
    نكته : ميتوان يك اشاره گر از نوع ساختمان داشته باشيم به صورت زير

    C پاسكال
    نام ساختمان strust
    {
    ; نام فيلد نوع فيلد
    ; نام فيلد نوع فيلد
    '
    '
    ; نام فيلد نوع فيلد
    ; نام اشاره گرها * و نام متغير }
    و بصورت زير هم ميتوان عمل كرد
    ; نام اشاره گر * نام ساختمان struct
    نكته : اگر اشاره گر از نوع ساختمان داشته باشيم ميتوان براي دسترسي به عناصر ساختمان بصورت زير عمل كرد .
    نام فيلد . ( نام اشاره گر *)
    نام فيلد نام اشاره گر
    در زبان C اين امكان وجود دارد كه ساختماني را به گونه اي تعريف كنيم كه طول عناصر آنرا بر حسب bit مشخص كرد .
    C پاسكال
    نام ساختمان struct
    {
    ; طول فيلد : نام فيلد نوع فيلد
    ; طول فيلد : نام فيلد نوع فيلد
    '
    '
    '
    ; طول فيلد : نام فيلد نوع فيلد
    ; نام اشاره گر * و نام متغير ها }
    نكته : اگر يك ساختمان از نوع بيتي داشته باشيم : (1 نمي توان به آدرس آنها مراجعه كرد
    (2 نمي توان بصورت آرايه تعريف شود
    (3 تركيبي از ساختمان بيتي و معمولي ممكن است
    يونيون ها : محلي از حافظه است كه توسط دو يا چند متغير به طور اشتراكي مورد استفاده قرار مي گيرد. عناصر يونيون ها تمامي از يك مدل حافظه شروع ميشوند .
    در يونيون ها فضاي اشغال شده برابر است با فضاي مورد نياز براي بزرگترين فيلد .
    C
    نام يونيون union
    {
    ; نام فيلد و نوع فيلد
    '
    '
    ; نام فيلد و نوع فيلد
    ; نام اشاره گرها * و نام متغير ها }
    نكته : ميتوان هر يك از فيلد هاي يك union خود يك struct يا union ديگر نيز باشند .

    C پاسكال
    اسم جديد نوع موجود typedet type
    انواع داده شمارشي :

    C
    نام نوع شمارشي enum
    {
    عنصر اول
    عنصر دوم
    '
    '
    عنصر n ام
    ; نام اشاره گرها * و نام متغير ها }
    ; نام متغير ها نام نوع شمارشي enum

    نكته : مقدار عددي عنصر اول صفر و عنصر n ام مقدار عددي n را ميگيرد .
    فايل ها : برابر تعريف يك متغير از نوع فايل داريم
    C پاسكال
    نام اشاره گر فايل * FILE var
    نام ركورد مورد نظر of file : نام متغير فايل
    و براي كار با فايل ها دستورات زير را داريم يا
    ; text :
    C پاسكال
    ; ( "فرمت باز شدن" و " آدرس فايل" ) fopen = نام اشاره گر فايل
    ; ( نام اشاره گر فايل ) f close
    ; ( نام اشاره گر فايل ) rewind
    تابع rewind باعث ميشود كه اشاره گر به ابتداي فايل اشاره كند .
    ; ( نام اشاره گر فايل و نام متغير كاراكتري ) putc
    ; ( " و " ) fputc
    ;( نام اشاره گر فايل ) getc= نام متغير كاراكتري
    ;( نام اشاره گر فايل ) fgetc= نام متغير كاراكتري
    ;( نام اشاره گر فايل و نام متغير رشته اي ) fputs
    ; ( نام اشاره گر فايل و طول آن و نام متغير رشته اي ) fgets
    دستور زير چك ميكند كه آيا اشاره گر به انتهاي فايل رسيده است يا خير
    اگر اشاره گر به انتها رسيده باشد مقدار 1 و در غير اينصورت صفر را بر ميگرداند.
    ; ( نام اشاره گر فايل ) fremove ( اگر انجام شود مقدار صفر و در غير اينصورت مقدار ديگر ارجاع ميشود . )
    در زبان C تابعي وجود دارد كه اگر در هنگام كار با فايل اشكالي پيش آيد ارزش 1 و در غير اينصورت ارزش صفر را بر ميگرداند كه بصورت زير است .
    ; ( نام اشاره گر فايل ) ferror

    C پاسكال
    دستور زير باعث مي شود يك كاراكتر حرف كوچك به كاراكتر حرف بزرگ تبديل شود .
    ; ( نام متغير كاراكتري ) foupper= نام متغير كاراكتري
    در زبان C ميتوان يك struct را درون فايل قرار داد و يا از آن خواند .
    C
    ;( نام اشاره گر فايل و تعداد خواندن و (نام ساختمان Struct ) Sizeof و نام متغير ساختمان Fread (&
    ;( و " و " و " &amp fwrite
    پاسكال
    ; ( نام متغير فايل و نام متغير ركورد read(
    ;( نام متغير فايل و نام متغير ركوردWrite (
    ; ( نام متغير كاراكتري follower = نام متغير كاراكتري
    دستور حذف يك كاراكتر را به حرف كوچك تبديل ميكند .

    Linklist

    C پاسكال
    { نام ساختمان struct ; نام ركورد ^ = نام اشاره گر
    ; نام فيلد نوع فيلد record = نام ركورد
    " " نوع فيلد : اسم فيلد
    " " " "
    ; نام فيلد نوع فيلد " "
    ; نام فيلد آدرس * نام ساختمان struct ; نوع فيلد : نام فيلد
    }; ; نام اشاره گر : اسم فيلد آدرس
    End;
    نكته : در زبان C براي تعريف اشاره گر هاي خارجي داريم :
    C پاسكال
    ; نام اشاره گر * نام ساختمان struct
    براي ايجاد گره داريم
    C پاسكال
    ((نام ساختمان struct)sizeof)Malloc ( *نام ساختمان struct)= نام اشاره گر ساختمان var ; نام ركورد : نام متغير

  10. #50
    در آغاز فعالیت
    تاريخ عضويت
    Nov 2005
    پست ها
    2

    پيش فرض

    خيلي ممنون از لطفتون
    دوستار شما Magic

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •