Sunday, March 1, 2020

Functions in C Programming with examples in hindi

Funcation of c in hindi
c language tutorial in hindi



एक फ़ंक्शन स्टेटमेंट का एक ब्लॉक है जो एक विशिष्ट कार्य करता है। मान लीजिए कि आप C भाषा में और अपने किसी प्रोग्राम में एक एप्लिकेशन बना रहे हैं, तो आपको एक से अधिक बार एक ही कार्य करने की आवश्यकता है। ऐसे मामले में आपके पास दो विकल्प हैं -

a) हर बार जब आप कार्य करना चाहते हैं तो बयानों के एक ही सेट का उपयोग करें

b) उस कार्य को करने के लिए एक फंक्शन बनाएं और उस कार्य को करने के लिए बस हर बार उसे कॉल करें।

विकल्प (बी) का उपयोग करना एक अच्छा अभ्यास है और एक अच्छा प्रोग्रामर हमेशा सी में कोड लिखते समय कार्यों का उपयोग करता है।

Funcation के प्रकार (Types of functions)


1) पूर्वनिर्धारित मानक लाइब्रेरी फ़ंक्शंस(Predefined standard library functions) - जैसे कि puts(), gets(), printf(), scanf() इत्यादि - ये ऐसे फ़ंक्शंस हैं जिनमें पहले से ही हेडर फ़ाइल्स (.h जैसे stdio.h) में एक परिभाषा है, इसलिए हम। जब भी उनका उपयोग करने की आवश्यकता हो, बस उन्हें कॉल करें।

2) उपयोगकर्ता परिभाषित कार्य (User Defined functions) - वे कार्य जो हम किसी प्रोग्राम में बनाते हैं, उपयोगकर्ता परिभाषित कार्यों के रूप में जाने जाते हैं।

इस गाइड में, हम सीखेंगे कि उपयोगकर्ता परिभाषित कार्यों को कैसे बनाया जाए और सी प्रोग्रामिंग में उनका उपयोग कैसे किया जाए

हमें C में फ़ंक्शन की आवश्यकता क्यों है


कार्य निम्न कारणों से किए जाते हैं -
a) कोड की पठनीयता में सुधार करने के लिए।
बी) कोड की पुन: प्रयोज्य में सुधार करता है, समान फ़ंक्शन को खरोंच से समान कोड लिखने के बजाय किसी भी कार्यक्रम में उपयोग किया जा सकता है।
c) यदि आप फ़ंक्शन का उपयोग करते हैं, तो कोड का डीबग करना आसान होगा, क्योंकि त्रुटियों का पता लगाना आसान है।
d) कोड के आकार को कम करता है, डुप्लिकेट सेट ऑफ स्टेट्स को फ़ंक्शन कॉल द्वारा प्रतिस्थापित किया जाता है।

किसी फ़ंक्शन का सिंटैक्स (Syntax of a function)


return_type function_name (argument list)
{
    Set of statements – Block of code
}

return_type: रिटर्न प्रकार किसी भी डेटा प्रकार का हो सकता है जैसे कि int, double, char, void, short आदि। चिंता न करें कि नीचे दिए उदाहरणों से गुजरने के बाद आप इन शर्तों को बेहतर ढंग से समझ पाएंगे।

function_name: यह कुछ भी हो सकता है, हालांकि कार्यों के लिए एक सार्थक नाम रखने की सलाह दी जाती है, ताकि केवल फ़ंक्शन के उद्देश्य को समझने में आसानी हो।

argument list: तर्क सूची में उनके डेटा प्रकारों के साथ चर नाम शामिल हैं। ये तर्क फ़ंक्शन के लिए इनपुट के प्रकार हैं। उदाहरण के लिए - एक फ़ंक्शन जिसका उपयोग दो पूर्णांक चर को जोड़ने के लिए किया जाता है, दो पूर्णांक तर्क होंगे।

ब्लॉक ऑफ़ कोड: C कथनों का सेट, जिसे जब भी फ़ंक्शन पर कॉल किया जाएगा, निष्पादित किया जाएगा।

क्या आप उपरोक्त शर्तों को भ्रमित करते हैं? - जब तक आप उन सभी को नहीं सीखते, मैं इस गाइड को खत्म नहीं करूंगा :)
एक उदाहरण लेते हैं - मान लीजिए कि आप दो पूर्णांक चर जोड़ना चाहते हैं।

आइए समस्या को विभाजित करें ताकि यह समझना आसान हो जाए -
फ़ंक्शन दो संख्याओं को जोड़ देगा, इसलिए इसमें कुछ सार्थक नाम होना चाहिए जैसे योग, जोड़, आदि। उदाहरण के लिए इस फ़ंक्शन के लिए नाम जोड़ने की सुविधा देता है।

return_type addition(argument list)


यह फ़ंक्शन जोड़ दो पूर्णांक चर जोड़ता है, जिसका अर्थ है कि मुझे इनपुट के रूप में दो पूर्णांक चर की आवश्यकता है, फ़ंक्शन हस्ताक्षर में दो पूर्णांक पैरामीटर प्रदान करता है। समारोह हस्ताक्षर होंगे -


return_type addition(int num1, int num2)


दो पूर्णांकों के योग का परिणाम पूर्णांक ही होगा। इसलिए फ़ंक्शन को पूर्णांक मान लौटना चाहिए - मुझे मेरा रिटर्न प्रकार मिला - यह पूर्णांक होगा -

int addition(int num1, int num2);


तो आपको अपना फ़ंक्शन प्रोटोटाइप या हस्ताक्षर मिल गया। अब आप सी प्रोग्राम में लॉजिक को इस तरह से लागू कर सकते हैं:

C में किसी फ़ंक्शन को कैसे कॉल करें(How to call a function in C?)


निम्नलिखित सी कार्यक्रम पर विचार करें

Example1: Creating a user defined function addition()

#include <stdio.h>
int addition(int num1, int num2)
{
     int sum;
     /* Arguments are used here*/
     sum = num1+num2;

     /* Function return type is integer so we are returning
      * an integer value, the sum of the passed numbers.
      */
     return sum;
}

int main()
{
     int var1, var2;
     printf("Enter number 1: ");
     scanf("%d",&var1);
     printf("Enter number 2: ");
     scanf("%d",&var2);

     /* Calling the function here, the function return type
      * is integer so we need an integer variable to hold the
      * returned value of this function.
      */
     int res = addition(var1, var2);
     printf ("Output: %d", res);

     return 0;
}
Output:
Enter number 1: 100
Enter number 2: 120
Output: 220

Example2: Creating a void user defined function that doesn’t return anything

#include <stdio.h>
/* function return type is void and it doesn't have parameters*/
void introduction()
{
    printf("Hi\n");
    printf("My name is Chaitanya\n");
    printf("How are you?");
    /* There is no return statement inside this function, since its
     * return type is void
     */
}

int main()
{
     /*calling function*/
     introduction();
     return 0;
}
Output:
Hi
My name is Chaitanya
How are you?

सी में कार्यों के संबंध में कुछ बिंदुओं पर ध्यान दें(Few Points to Note regarding functions in C)


1) C प्रोग्राम में main () भी एक फंक्शन है।
2) प्रत्येक C प्रोग्राम में कम से कम एक फ़ंक्शन होना चाहिए, जो कि मुख्य है ()।
3) कार्यों की संख्या की कोई सीमा नहीं है; C प्रोग्राम में किसी भी प्रकार के कार्य हो सकते हैं।
4) एक फ़ंक्शन खुद को कॉल कर सकता है और इसे "रिकर्सन" के रूप में जाना जाता है। मैंने इसके लिए एक अलग गाइड लिखा है।

C फ़ंक्शंस शब्दावली जो आपको याद होनी चाहिए
वापसी प्रकार: लौटाए गए मान का डेटा प्रकार। यह शून्य भी हो सकता है, ऐसे में फ़ंक्शन किसी भी मान को वापस नहीं करता है।

नोट: उदाहरण के लिए, यदि फ़ंक्शन रिटर्न प्रकार चार है, तो फ़ंक्शन को चार प्रकार का मान लौटाया जाना चाहिए और इस फ़ंक्शन को कॉल करते समय मुख्य () फ़ंक्शन में लौटे मूल्य को संग्रहीत करने के लिए चार डेटा प्रकार का एक चर होना चाहिए।

संरचना की तरह दिखेगा -

char abc(char ch1, char ch2)
{
   char ch3;
   
   
   return ch3;
}

int main()
{
   
   char c1 = abc('a', 'x');
   
}

More Topics on Functions in C

C प्रोग्रामिंग में फ़ंक्शन को कॉल करने का डिफ़ॉल्ट तरीका वैल्यू कॉल है। मान द्वारा फ़ंक्शन कॉल पर चर्चा करने से पहले, हम इसे समझाते समय उपयोग की जाने वाली शब्दावली को समझेंगे:

वास्तविक पैरामीटर(Actual parameters): फ़ंक्शन कॉल में आने वाले पैरामीटर।

औपचारिक पैरामीटर(Formal parameters): फ़ंक्शन घोषणाओं में दिखाई देने वाले पैरामीटर।



For example:

#include <stdio.h>
int sum(int a, int b)
{
     int c=a+b;
     return c;
}

int main(
{
    int var1 =10;
    int var2 = 20;
    int var3 = sum(var1, var2);
    printf("%d", var3);

    return 0;
}


उपरोक्त उदाहरण में चर ए और बी औपचारिक पैरामीटर (या औपचारिक तर्क) हैं। परिवर्तनीय var1 और var2 वास्तविक तर्क (या वास्तविक पैरामीटर) हैं। वास्तविक पैरामीटर भी मान हो सकते हैं। योग (10, 20) की तरह, यहां 10 और 20 वास्तविक पैरामीटर हैं।

इस गाइड में, हम फ़ंक्शन कॉल को मूल्य से चर्चा करेंगे। यदि आप संदर्भ विधि द्वारा कॉल पढ़ना चाहते हैं तो इस गाइड को देखें: संदर्भ द्वारा फ़ंक्शन कॉल।

वापस बिंदु पर आ जाओ।
मूल्य से फ़ंक्शन कॉल क्या है?
जब हम किसी फ़ंक्शन को कॉल करते समय वास्तविक पैरामीटर पास करते हैं तो इसे फ़ंक्शन कॉल वैल्यू के रूप में जाना जाता है। इस मामले में वास्तविक मापदंडों के मूल्यों को औपचारिक मापदंडों में कॉपी किया जाता है। इस प्रकार औपचारिक मापदंडों पर किए गए कार्य वास्तविक मापदंडों में प्रतिबिंबित नहीं होते हैं। 

Example of Function call by Value

जैसा कि ऊपर उल्लेख किया गया है, मूल्य द्वारा कॉल में वास्तविक तर्कों को औपचारिक तर्कों के लिए कॉपी किया जाता है, इसलिए तर्कों पर कार्य द्वारा निष्पादित कोई भी ऑपरेशन वास्तविक मापदंडों को प्रभावित नहीं करता है। इसे समझने के लिए एक उदाहरण लेते हैं:


#include <stdio.h>
int increment(int var)
{
    var = var+1;
    return var;
}

int main()
{
   int num1=20;
   int num2 = increment(num1);
   printf("num1 value is: %d", num1);
   printf("\nnum2 value is: %d", num2);

   return 0;
}

Output:
num1 value is: 20
num2 value is: 21

Explanation


हमने विधि को कॉल करते समय चर संख्या 1 को पारित किया, लेकिन चूंकि हम फ़ंक्शन को कॉल कर रहे हैं मान विधि द्वारा, केवल num1 के मूल्य को औपचारिक पैरामीटर var पर कॉपी किया जाता है। इस प्रकार var 1 में किए गए परिवर्तन को num1 में प्रतिबिंबित नहीं किया जाता है।

Example 2: Swapping numbers using Function Call by Value

#include <stdio.h>
void swapnum( int var1, int var2 )
{
   int tempnum ;
   /*Copying var1 value into temporary variable */
   tempnum = var1 ;

   /* Copying var2 value into var1*/
   var1 = var2 ;

   /*Copying temporary variable value into var2 */
   var2 = tempnum ;

}
int main( )
{
    int num1 = 35, num2 = 45 ;
    printf("Before swapping: %d, %d", num1, num2);

    /*calling swap function*/
    swapnum(num1, num2);
    printf("\nAfter swapping: %d, %d", num1, num2);
}
Output:
Before swapping: 35, 45
After swapping: 35, 45


क्यों स्वैप के बाद भी चर अपरिवर्तित रहते हैं?

कारण समान है - फ़ंक्शन को num1 और num2 के लिए मान से बुलाया जाता है। तो वास्तव में var1 और var2 स्वैप हो जाता है (num1 & num2 नहीं)। वैल्यू बाय कॉल में वास्तविक मापदंडों को केवल औपचारिक मापदंडों में कॉपी किया जाता है।

  • Function call by reference in C Programming

इससे पहले कि हम संदर्भ द्वारा फ़ंक्शन कॉल पर चर्चा करते हैं, हम उन शब्दावली को समझ सकते हैं जो हम इसे समझाते समय उपयोग करेंगे:
  • वास्तविक पैरामीटर (Actual parameters): फ़ंक्शन कॉल में आने वाले पैरामीटर।
  • औपचारिक पैरामीटर(Formal parameters): फ़ंक्शन घोषणाओं में दिखाई देने वाले पैरामीटर।
उदाहरण के लिए: हमारे पास इस तरह से एक फ़ंक्शन घोषणा है:


int sum(int a, int b);

ए और बी पैरामीटर औपचारिक पैरामीटर हैं।

हम फ़ंक्शन को इस तरह बुला रहे हैं:

int s = sum(10, 20); //Here 10 and 20 are actual parameters
or 
int s = sum(n1, n2); //Here n1 and n2 are actual parameters

इस गाइड में, हम संदर्भ विधि द्वारा फ़ंक्शन कॉल पर चर्चा करेंगे। यदि आप मूल्य विधि द्वारा कॉल पढ़ना चाहते हैं तो इस गाइड को देखें: मूल्य से फ़ंक्शन कॉल।

वापस बिंदु पर आ जाओ।

संदर्भ द्वारा फ़ंक्शन कॉल क्या है(What is Function Call By Reference?)

जब हम वास्तविक मापदंडों के पतों को पास करके किसी फ़ंक्शन को कॉल करते हैं तो फ़ंक्शन को कॉल करने का यह तरीका संदर्भ द्वारा कॉल के रूप में जाना जाता है। संदर्भ द्वारा कॉल में, औपचारिक मापदंडों पर किए गए ऑपरेशन, वास्तविक मापदंडों के मूल्य को प्रभावित करते हैं क्योंकि सभी ऑपरेशन वास्तविक मापदंडों के पते में संग्रहीत मूल्य पर किए जाते हैं। यह पहले भ्रामक लग सकता है लेकिन निम्नलिखित उदाहरण आपके संदेह को स्पष्ट करेगा।

संदर्भ द्वारा फ़ंक्शन कॉल का उदाहरण (Example of Function call by Reference)


चलो एक सरल उदाहरण लेते हैं। निम्नलिखित कार्यक्रम में टिप्पणियों को पढ़ें। 


#include <stdio.h>
void increment(int  *var)
{
    /* Although we are performing the increment on variable
     * var, however the var is a pointer that holds the address
     * of variable num, which means the increment is actually done
     * on the address where value of num is stored.
     */
    *var = *var+1;
}
int main()
{
     int num=20;
     /* This way of calling the function is known as call by
      * reference. Instead of passing the variable num, we are
      * passing the address of variable num
      */
     increment(&num);
     printf("Value of num is: %d", num);
   return 0;
}
Output:
Value of num is: 21

  Learn Function In c Programming In English

Example 2: Function Call by Reference – Swapping numbers

यहां हम संदर्भ द्वारा कॉल का उपयोग करके संख्याओं की अदला-बदली कर रहे हैं। जैसा कि आप देख सकते हैं कि स्वैप () फ़ंक्शन को कॉल करने के बाद वेरिएबल्स के मूल्यों को बदल दिया गया है क्योंकि स्वैप वैरिएबल num1 और num2 के पते पर हुआ है।

#include 
void swapnum ( int *var1, int *var2 )
{
   int tempnum ;
   tempnum = *var1 ;
   *var1 = *var2 ;
   *var2 = tempnum ;
}
int main( )
{
   int num1 = 35, num2 = 45 ;
   printf("Before swapping:");
   printf("\nnum1 value is %d", num1);
   printf("\nnum2 value is %d", num2);

   /*calling swap function*/
   swapnum( &num1, &num2 );

   printf("\nAfter swapping:");
   printf("\nnum1 value is %d", num1);
   printf("\nnum2 value is %d", num2);
   return 0;
}
Output:
Before swapping:
num1 value is 35
num2 value is 45
After swapping:
num1 value is 45
num2 value is 35

0 Comments:

Post a Comment