MENU ▽ بیلگی
آذربایجان تورکجه‌سینده بیلگی‌لر

  • آنا صفحه‌سی
  • فلسفه
  • کامپیوتر
  • بیزه گؤره
  • ؜۸-جی فصل: فانکشنین آناتومی‌سی

    C کیتابلیقلاری فانکشن‌لرله دولودور و چوخ ایشلری گؤره بیلسه‌لر ده، بوتون ایشلری گؤره بیلمزلر.

    بونا گؤره ده اؤز فانکشنی‌نیزی قوشدورمالیسینیز. داها دوغروسو هر پروقرامچی‌نین اؤزونه مخصوص یوٚزلرجه کیتابلیغی اولماسا دا، اوْن‌لارجا واریدیر.

    بو فصلده سیزین اوچون فانکشنی معرفی ائده‌جه‌ییک و نئجه بیر فانکشنی یارادیب و نصب ائتمه‌یی، چاغیرماغی، أل تاپماغی و بوشلاماغی دا اؤگرنه‌جکسینیز.

    C پروقراملاما دیلینده بوتون آیری زادلار تکین، فانکشنین ده موشخص ایستایلی وار و اونو پروقرامینیزا گتیرمک اوچون، اؤزل دبلر (رسوم، قواعد) وار.

    فانکشنین «نوع»، «آد» و «آرقومانی» وار:

    «نوع» دئمک، فانکشنین قایتاردیغی میقدار‌دیر (بوراخیش‌لار تکین).

    «آد» ایسه فانکشنی تانیتدیران اؤزل ایسمدیر.

    «آرقومان» دا صیفر، بیر یوخسا نئچه ساییدا فانکشنه گئچیریلن میقدار ساییلیر (آلیشلار تکین).

    آشاغیداکی alpha (آلفا) فانکشنی‌دیر و آلیشی دا یوخ، بوراخیشی دا یوخدور. بئله‌لیک‌له اونو بوش بیر فانکشن حسابا گتیریریک.

    void alpha (void)

    void بیر نوع موتغیر ساییلیر و «منیم نسه بیر موتغیریم یوخدور» تکین اؤزونو آنلاتیر.

    count فانکشنی صحیح و اینتیجر بیر فانکشن‌دیر. بو فانکشن اینتیجر میقدار آلیر یوخسا اؤره‌تیر (تولید ائدیر) و داها آرقومانی دا یوخدور.

    int count (void)

    فانکشنی ایستیفاده ائتممیش‌دن قاباق، اونو کامپایلر اوچون تانیتمالیسینیز. بو یول ایله کامپایلر اونو دوٚز چالیشماسی اوچون اؤنجه‌دن یوْخلایا بیلر (چئک و کونترول).

    فانکشن‌لر آدلاری ایله چاغیرلانیرلار و سونرا پارانتز یازیلیر. بیر فانکشنی چاغیراندا، دستورالعمل‌لری کونترول اولا بیلرلر و فانکشن قورتولاندان سونرا، سونراکی دستورالعمل‌لر ایله پروقرامین آخینتی‌سی داوام ائده‌جک.

    سونراکی میثال بونو بیراز آچیقلاماق اوچون یازیلیب‌دیر:

    #include <stdio.h>
    void blorf(void);
    int main ()
    {
    puts("The main () function always runs first");
    blorf();
    puts("Thanks, blorf()");
    return(0);
    }
    void blorf(void)
    {
    puts("The blorf() function runs when it's called");
    }

    اؤنجه‌دن ده تانیدیغینیز main فانکشنی ائله بوتون c پروقرام‌لاریندا ایستیفاده اولان فانکشن‌دیر.

    ۲-جی سطرده‌کی blorf فانکشنی ده گؤره بیلیرسینیز و فانکشنین نوع و آرقومانیسینی کامپایلر اوچون معرفی ائدیر و کامپایلر ده پروتوتایپی کونترول ائتمک ایله فانکشنین دوزگون ایشلنمگینی یوْخلایا بیلر. پروتوتایپ ایسه بیر دستورالعمل اولدوغونا گؤره، سمی-کلون ایله قورتولور.

    ۶-جی سطر فانکشنی چاغیریر و آرقومانی اولماماسینا گؤره ده پارانتز ایچی بوش گؤرونور.

    دیقّت ائتدیگینیز ۱۱-جی سطرده، blorf فانکشنی تعریف ائتمیشیک.

    ایندی ایکی (blorf) دستورو ایستیفاده ائدین:

    #include <stdio.h>
    void blorf(void);
    int main ()
    {
    puts("The main () function always runs first");
    blorf();
    blorf();
    puts("Thanks, blorf()");
    return(0);
    }
    void blorf(void)
    {
    puts("The blorf() function runs when it's called");
    }

    بوراخیش صفحه‌سینده ایکی یول ۱۲-جی سطرده‌کی دستورالعملین ایجرا اولماسی تکین بیر زاد گؤرونه‌جک.

    داها آرتیق، آیری سطرلرده بوراخیش چاپ اولاجاق، ائله بیل ‎\n کاراکتری قوللانمیشیق.

    #include <stdio.h>
    void cheers(void);
    int main()
    {
    puts("Everyone gets free dinner!");
    cheers();
    puts("Everyone gets free dessert!");
    cheers();
    puts("Everyone pays higher taxes!");
    return(0);
    }
    void cheers(void)
    {
    int x;
    for(x=0;x<3;x++)
    printf("Huzzah! ");
    putchar('\n');
    }
    Output Terminal
    Everyone gets free dinner!
    Huzzah! Huzzah! Huzzah!
    Everyone gets free dessert!
    Huzzah! Huzzah! Huzzah!
    Everyone pays higher taxes!
    
    Process returned 0 (0x0)   execution time : 0.031 s
    Press any key to continue.

    گؤردویونوز تکین cheers فانکشنی تعریف‌له‌مک اوچون، ۱۲-جی سطرده void cheers(void)‎ یازیلیب و سونرا سمی-کلون دا یوخدور.

    سونرا دا یئرینه آکولاد آچیب و cheers فانکشنی تعریف ائتمیشیک.

    ایندی آشاغیداکی پروقراما باخین:

    #include <stdio.h>
    void cheers(void);
    int main()
    {
    puts("Everyone gets free dinner!");
    cheers();
    puts("Everyone gets free dessert!");
    cheers();
    printf("%d\n", x);
    puts("Everyone pays higher taxes!");
    return(0);
    }
    void cheers(void)
    {
    int x;
    for(x=0;x<3;x++)
    printf("Huzzah! ");
    putchar('\n');
    }

    کامپایلر بونو کامپایل ائتمک اوچون ایراد وئره‌جک!

    ۹-جو سطرده‌کی x موتغیری، main فانکشنه تعریف اولمویوب.

    بیزیم x موتغیریمیز، cheers فانکشنینده تعریف اولوب، بونا گؤره ده main اوچون بللی دئییل.

    ائله مهم موضوع دا بودور.

    x موتغیری تانیتماق اوچون، حتما اونو main فانکشنین ایچینده تعریف ائتملی‌ییک.

    البته سونراکی مبحث‌لرده داها چوخ لوکال و گلوبال موتغیرلر و میقدارلار اوچون توضیح ایرائه وئره‌جه‌ییک. main فانکشنین آچیق آکولادیندان سونرا، x موتغیری تعریف ائدین.

    اؤنجه int x;‎ و سونرا x=21;‎ یازین:

    #include <stdio.h>
    void cheers(void);
    int main()
    {
    int x;
    x=21;
    puts("Everyone gets free dinner!");
    cheers();
    puts("Everyone gets free dessert!");
    cheers();
    printf("%d\n", x);
    puts("Everyone pays higher taxes!");
    return(0);
    }
    void cheers(void)
    {
    int x;
    for(x=0;x<3;x++)
    printf("Huzzah! ");
    putchar('\n');
    }
    Output Terminal
    Everyone gets free dinner!
    Huzzah! Huzzah! Huzzah!
    Everyone gets free dessert!
    Huzzah! Huzzah! Huzzah!
    21
    Everyone pays higher taxes!
    
    Process returned 0 (0x0)     execution time : 0.003 s
    Press ENTER to continue.

    خروجیده یازیلان ‎21 حرف‌لریندن سونرا، یئنی سطر باشلانیب. بونو نظرده آلین و گلین آیری میثالی یازاق. باشداکی میثال‌دا، کامپایلر cheers فانکشنینده‌کی x و main فانکشنینده‌کی x موتغیرلری، آیری زادلار تانییر.

    سونراکی میثال‌دا، فانکشن قورتارمامیش‌دان قاباق، return;‎ دستورالعملی ایله فانکشن‌دن چیخیریق.

    #include <stdio.h>
    void cheers(void);
    int main()
    {
    int x;
    x=21;
    puts("Everyone gets free dinner!");
    cheers();
    puts("Everyone gets free dessert!");
    cheers();
    printf("%d\n", x);
    puts("Everyone pays higher taxes!");
    return(0);
    }
    void cheers(void)
    {
    int x;
    for(x=0;x<3;x++)
    printf("Huzzah! ");
    return;
    putchar('\n');
    }

    21دن سونرا یئنی سطر باشلاماییب و عیلّتی ده موشخص‌دیر.

    ۲۰-جی سطرده‌کی return;‎ اوچون، ۲۱-جی سطرده‌کی دستورالعمل ایجرا اولماییب.

    Output Terminal
    Everyone gets free dinner!
    Huzzah! Huzzah! Huzzah! Everyone gets free dessert!
    Huzzah! Huzzah! Huzzah! 21
    Everyone pays higher taxes!
    
    Process returned 0 (0x0)     execution time : 0.003 s
    Press ENTER to continue.

    بیر زادی دیقّت ائدین. بوش ‎return;‎، فانکشن‌دن چیخار.

    بونو main فانکشن‌ده‌کی ‎return(0);‎ دستورو تکین یازمایین، یوخسا کامپایلر ایخطار گؤستره‌جک. نه‌دن‌لیگی ده بللی‌دیر، void فانکشنی بیر زاد قایتارمیر.

    آنجاق main فانکشنیی int اولدوغونا گؤره، اوراداکی return فرقلی‌دیر و حتما بیر اینتیجیر و صحیح عددی قایتارمالی‌دیر. ائله قاباقجا بو دستورالعملی، توتوشدورمالار اوچون ده ایشلتمیشدیک.

    قاباقکی پروقراما باخمیاراق، فانکشن‌لرین چوخ ساییسی آلیش/بوراخیش I/O ایله چالیشیرلار و ایطیلاعاتی آلیب اوسوتونده بیر ایش گؤروب و سونرا تولید ائتدیگی یئنی ایطیلاعاتی بوراخیرلار و پروقرام‌لارین اساس ایشلری ائله بودور.

    بو یئنی بؤلومده، فانکشن اوچون آلینان و وئریلن آرقومان‌لار و میقدارلارا گؤره صؤحبت ائده‌جه‌ییک و بیر یوخسا نئچه ساییدا میقدار و آرقومانی نئجه بیر فانکشن اوچون ایختیصاص وئرمه‌یی باشا دوشه‌جکسینیز. آشاغیداکی فانکشنی repeat آدلاندیرمیشیق و بیر اینتیجر آرقومانی آلیر.

    #include <stdio.h>
    void repeat(int count);
    int main()
    {
    puts("At first the raven was like:");
    repeat(1);
    puts("But then he was all:");
    repeat(5);
    return(0);
    }
    void repeat(int count)
    {
    int x;
    for(x=0;x<count;x++)
    puts("Nevermore!");
    }
    Output Terminal
    At first the raven was like:
    Nevermore!
    But then he was all:
    Nevermore!
    Nevermore!
    Nevermore!
    Nevermore!
    Nevermore!
    
    Process returned 0 (0x0)     execution time : 0.004 s
    Press ENTER to continue.

    اؤنجه repeat فانکشنه گؤره دانیشاق.

    فانکشنین ایچینه count تکین بیر اینتیجر موتغیر گیره بیلر. بونو فانکشنین آرقومانی تکین گؤره بیلرسینیز.

    سونرا x تکین داها بیر اینتیجیر تعریف اولونور و آردی‌جا دا for حلقه‌سی ایله x موتغیری صیفر عدد'دن count میقداریناجان ساییر.

    سونرا puts دستورالعملی ایله Nevermore!‎ جومله‌سی بوراخیش صفحه‌سینده چاپ اولور.

    دئمه‌لی بو فانکشنین ایشی، Nevermore!‎ جومله‌یی count ساییدا چاپ ائتمک‌دیر.

    ایندی گلین main قیسمتی بحث ائدک.

    ۶-جی سطرده، تعریف ائتدیگیمیز فانکشنی چاغیرمیشیق. یعنی repeat(1);‎ دستورالعملی.

    سونرا ۷-جی سطرده آیری بیر جومله چاپ ائدیریک و ۸-جی سطرده، گئنه ده repeat فانکشنی چاغیریریق. البته بو یول اونون اوچون ‎5 عددی گؤندریریک. بو یعنی ۵ یول ‎Nevermore!‎ جومله‌سی چاپ اولسون.

    اؤنجه گؤرونتویه چکدیگیمیز بوراخیشدا بو پروقرامین نتیجه‌سینی گؤره بیلرسینیز.

    تاماما آیدین‌دیر. اؤنجه بیر یول ‎Nevermore!‎ چاپ اولوب و سونرا دا ۵ یول.

    ایندی آشاغیداکی کودا باخین:

    #include <stdio.h>
    void product(float a, float b, float c);
    int main()
    {
    float x,y,z;
    printf("Type three numbers, separated by spaces: ");
    scanf("%f %f %f",&x,&y,&z);
    product(x,y,z);
    return(0);
    }
    void product(float a, float b, float c)
    {
    float p;
    p = a * b * c;
    printf("%f * %f * %f = %f\n",a,b,c,p);
    }

    اؤنجه فانکشن: ۳ ساییدا اعشاری میقداری آلان و product آدی ایله بیر فانکشن تعریف ائدیریک.

    a و b و c بو فانکشن اوچون آلیشلاردیرلار. سونرا بو موتغیرلره باخاراق، p تکین بیر موتغیر حساب اولور و نهایت‌ده چاپ اولماق دستورالعملی وار.

    ۱-جی سطر‌ده stdio.h باشلیق فایلی چاغیرلانیر.

    ۲-جی سطرده product فانکشنین دستورالعمل‌لری یئرلشیب‌دیر و سونرا main و بو دا قاباقجا ساییلارجا صؤحبت ائتدیگیمیزه گؤره بللی‌دیر.

    ۷-جی سطرده ۳ ساییدا اعشاری میقداری ایشله‌ییجی‌دن آلماق اوچون scanf فانکشنی قوللانمیشیق.

    ۸-جی سطرده ایسه product فانکشنی چاغیرمیشیق. بو فانکشنه ده ۳ ساییدا حاضیرلانمیش میقدارلاری آرقومان اولاراق ایختیصاص وئرمیشیک. البته فانکشن یازماق اوچون آرقومان‌لارین ساییسیندا محدودیت یوخدور و نئچه ساییدا آرقومان ایسته‌سنیز تعریف ائده بیلرسینیز.

    باشقا بیر میثال ایله ساده‌جه آرقومان‌لارین نوع‌لارینی دگیشیریک:

    #include <stdio.h>
    void bar(char c, int count);
    int main()
    {
    int x;
    for(x=1;x<6;x++)
    bar('*',x);
    return(0);
    }
    void bar(char c, int count)
    {
    int x;
    for(x=0;x<count;x++)
    putchar(c);
    putchar('\n');
    }
    Output Terminal
    *
    **
    ***
    ****
    *****
    
    Process returned 0 (0x0)     execution time : 0.004 s
    Press ENTER to continue.

    پروقرام‌داکی bar فانکشنی نه‌دیر؟

    آیدین‌دیر، پارانتز ایچینده ایکی آرقومان وار. ایلک آرقومان کاراکتر و ایکینجی ایسه اینتیجر موتغیرلر تعریف اولوب‌لار. فانکشن ده ایکینجی اینتیجیر ساییدا، کاراکتری چاپ ائدیر.

    مثلا ‎bar('*',5);‎ فانکشنی، اولدوز کاراکتری‌نی ۵ یول چاپ ائدیر. بو ساده اؤرنکلره باخمایاراق، فانکشن‌لرین چوخ ساییلاری، میقدار دا قایتارا بیلیرلر.

    سونراکی میثال‌دا، gimmeAnA تکین فانکشن وار و کاراکترسل بیر میقداری قایتاریر و اینپوت دا آلمیر.

    #include <stdio.h>
    char gimmeAnA(void);
    int main()
    {
    char grade;
    grade = gimmeAnA();
    printf("On this test you'r received an %c.\n",grade);
    return(0);
    }
    char gimmeAnA(void)
    {
    return('A');
    }

    ۱۲-جی سطرده‌کی قایتارما دستورو گؤره بیلرسینیز. بو دستورالعمل، A کاراکتری‌نی قایتاریر.

    ۶-جی سطرده ایسه grade موتغیری، gimmeAnA();‎ فانکشنین میقداری ایله بیر توتوروق.

    میقداری دا بیلیرسینیز، اؤنجه‌کی قایتاریلان A کاراکتری‌دیر. gimmeAnA()‎ فانکشنی چاغیران‌جا، پارانتز ایچری‌سینی بوش بوراخدیق. عیلّتی بللی‌دیر، void اولماسیندان اؤتور نسه بیر آرقومان دا آلمیر.

    grade تکین بیر موتغیری تعریف ائتمه‌دن ده بونو یاپا بیلرسینیز و فانکشنی دیرک و موستقیم printf اوچون یازا بیلرسینیز.

    printf("On this test your received an %c.\n",gimmeAnA());
    #include <stdio.h>
    float product(float a, float b, float c);
    int main()
    {
    float a,x,y,z;
    printf("Type three numbers, separated by spaces: ");
    scanf("%f %f %f",&x,&y,&z);
    a = product(x,y,z);
    printf("%f * %f * %f = %f\n",x,y,z,a);
    return(0);
    }
    float product(float a, float b, float c)
    {
    float p;
    p = a * b * c;
    return(p);
    }

    ۱۲-جی سطرده فانکشن تعریف ائدیریک. اعشاری اولماق بو product فانکشنین اوچون «نوع» تانینیر.

    نوع آد آرقومان‌لار
      float    product    (float a, float b, float c) 

    سونرا ۳ ساییدا a , b , c تکین موتغیرلر ده آرقومان تانینیرلار.

    سونرا p تکین اعشاری موتغیر تعریف اولور و میقداری دا (a * b * c) رابیطه‌سی ایله تعیین اولور.

    ۱۶-جی سطرده‌کی دستورالعمل ایله، فانکشنین حسابلادیغی p موتغیرین میقداری، فانکشن اوچون قایتاریلان میقدار تعیین اولور.

    ۸-جی سطرده‌، ‎product(x,y,z)‎ فانکشنی بیر ریاضی رابیطه تکین چالیشاراق، x و y و z موتغیرلری ضرب ائده‌رک نتیجه‌سینی حساب ائدیر.

    بو حساب اولان میقدار، سونرا a موتغیر اوچون ایختیصاص وئریلیر.

    اصلینده چوخ راحات‌دیر و دولاشیق اولماماسینی اوماریرام.

    کامپایل و ایجرا ائدین و ۳ ساییدا عدد پروقراما وئره‌رک، نتیجه‌یه ده باخین.

    میقدارلارین آراسینا فاصیله قویماق ایله اونلار بر-بیرلریندن آییرا بیلرسینیز. آنجاق بیر میقداری وئرن‌دن سونرا ENTER ده وورا بیلرسینیز.

    Output Terminal
    Type three numbers, separated by spaces: 1 3 4
    1.000000 * 3.000000 * 4.000000 = 12.000000
    Process returned 0 (0x0)     execution time : 5.503 s
    Press ENTER to continue.

    اوٚستده‌کی پروقرام‌دا، حتی ۱۵-جی سطرده‌کی دستورالعملی سیلیب و اونو موستقیمم ۱۶-جی سطرده‌کی قایتارما دستورالعملینده یئرلشدیره بیلرسینیز. یعنیreturn(a * b * c);‎

    البته حتما ده رابیطه‌نین ضرب اولماسینا لزوم و گر‌ک یوخدور، ایسته‌دیگینیز رابیطه‌یی قوللانا بیلرسینیز.

    مثلا a*b*c یئرینه a+b+c ده یازین و یئنیدن کامپایل و ایجرا ائدین.

    داها یاخشی و اویغون گؤرونمک اوچون، ۹-جو سطرده‌کی printf فانکشنین فورمت-ایسترینگ بؤلومونده، اویغون رابیطه‌نین شماتیک جومله‌سینی چاپ ائتمک اوچون یئرلشدیرین. داها یاخشی و اویغون اؤرنک بو فانکشن اوچون، سونراکی میثال‌دیر:

    #include <stdio.h>
    int max(int x, int y);
    void isLarger(int big);
    int main()
    {
    int a,b,larger;
    printf("Type two integers separated by a space: ");
    scanf("%d %d",&a,&b);
    larger = max(a,b);
    if(a == larger)
    isLarger(a);
    else
    isLarger(b);
    return(0);
    }
    int max(int x, int y)
    {
    if(x > y)
    return(x);
    return(y);
    }
    void isLarger(int big)
    {
    printf("Value %d is larger.\n",big);
    }

    بو میثال‌داکی max فانکشنی، C دیلی‌نین اؤگرنمه‌سی اوچون لاپ گوٚونلی و ساغلام‌لاردان بیری‌دیر.

    داها آرتیق بیر فانکشن‌دن چوخو تعریف ائتمه‌یی گؤسترمک اوچون، isLarger فانکشنی ده تعریف ائتمیشیک.

    گؤردویونوز پروقرام‌دا، a و b تکین موتغیرلرین آراسیندا هانکی‌سینین بویوک اولماسینی تاپماق اوچون بیر فانکشنی تعریف ائتمیشیک.

    بوراخیش دا بئله اولاجاق:

    Output Terminal
    Type two integers separated by a space: 11 17
    Value 17 is larger.
    
    Process returned 0 (0x0)     execution time : 14.825 s
    Press ENTER to continue.

    یاخشی، دیقت ائتسنیز اوست‌ده‌کی پروقرام‌دا ایکی میقدار آراسیندا فاصیله یازماغی ایسته‌میشدیک.

    بونو راحاتجاسینا دگیشه بیلرسینیز. ساده‌جه ۸-جی سطرده‌کی scanf فانکشنی اوچون، فورمت ایسترینگی مثلا بئله یازین: ‎scanf ("%d,%d",&a,&b);‎

    بئله‌لیک‌له ایکی عددین آراسیندا کاما (,) ایشلتملی اولاجاقسینیز. بیر زاد دا یازماسانیز، اینتر دوگمه‌یی ایشلده بیلرسینیز.

    C پروقراملاما دیلینده، یالنیز ۱ ساییدا میقداری فانکشن اوچون قایتارماق اولار.

    داها دوغروسو نئچه میقداری قایتارا بیلمسیز و بونو نه‌دن احتیاج اولماسینی دا دوٚشونه بیلمریک. بو ایشی گؤرمک اوچون نسه بیر ضرورت یوخدور.

    دوٚزن (array) و ایستراکچر تکین موتغیرلری فانکشن‌دن نئجه قایتارماغی گلنکی فصلین موضوعودور.

    فعلا فانکشنین قایتاردیغی میقداری تک ساییلی نظرده آلین.

    main فانکشنه گؤره داها آرتیق بیر آچیقلاما:

    main فانکشنی بیر اینتیجیر فانکشن‌دیر و return اوچون ده حتما بیر صحیح عدد یازمالی‌سینیز، آنجاق بو فانکشنین پارانتزی‌نین ایچری‌سینده بیر زاد یازیلمیر.

    ایستیفاده ائتدیگی آرقومان‌لاری بیلسک ده، یازماقلارینا احتیاج یوخدور، آنجاق بو ایشی اؤزونوز تعریف ائدن فانکشن‌لر ایله ائده بیلمسیز.

    ساده‌جه main فانکشنی اوچون پارانتزی بوش بوراخیریق. یالنیز و یالنیز main اوچون.