Learn C programming Language Part- 2


Pointer
आज Hindi के इस C/C++ programming language tutorial को आगे बढ़ाते हुए हम pointer के बारे में और जानेंगे.
पिछली बार हमने इस C/C++ programming language tutorial में int pointer का example देखा था परन्तु pointer किसी भी datatype का हो सकता है. struct का भी pointer हो सकता है. हम struct pointer का एक example देखते हैं. अगर आपको struct का use करना नहीं आता तो पहले इसे पढ़ लें. C/C++ struct hindi में पढ़ने के लिए यहाँ click करें. 
#include <stdio.h>
struct rectangle {
  int width;
  int length;
};
int main() {
  struct rectangle r1;
  r1.width = 10;
  r1.length = 15;
  struct rectangle* r2;
  r2 = &r1;
  printf("Original width=%d, length=%d ", (*r2).width, (*r2).length);
  r1.width = 20;
  r1.length = 25;
  printf("r1 changed, width=%d, length=%d ", (*r2).width, (*r2).length);
  (*r2).width = 5;
  (*r2).length = 10;
  printf("*r2 changed, width=%d, length=%d ", r1.width, r1.length);
  return 0;
}
ऊपर दिए C/C++ program को चला कर देख लें. उसका output यहाँ समझते हैं. main में हमने पहले struct rectangle type का variable r1 define किया है और pointer r2 declare किया है जो struct rectangle का address store कर सकता है. उसमे r1 का address डाल दिया गया है. अब r1 एक variable है और r2 pointer है जिसमे r1 का address है इसलिए अगर हम r1 में value change करते हैं तो r2 से value read करने पर changed value मिलेगी. इसी तरह r2 में value change करते हैं तो r1 से read करने पार changed value मिलेगी.
ऊपर दिए गए program को ध्यान से देखिये. r2 address(pointer) है r1 का, इसलिए *r2 हमें struct rectangle देगा(pointer वाले address की value * लगाने पर आती है इसलिए *r2 और r1 एक ही हैं. इसी तरह (*r2).width और r1.width भी एक ही हैं दोनों में से किसी एक को change करने पर दूसरा भी change हो जाता है.)
Important Note about pointer
1. (*r2).width लिखने का shortcut r2->width भी होता है. program मे (*r2).width की जगह r2->width और (*r2).length कि जगह r2->length भी लिख सकते हैं. आप ऊपर दिए गए program में यह लिखकर चलाकर देखें.
2. कोई भी variable declare करने का मतलब है कि उसमे कोई value नहीं डाली(जैसे int x;) और define करने का मतलब है कि उसमे value भी डाल दी है(जैसे int x=1;) अगर आपने pointer सिर्फ declare किया है और उसमे किसी variable का address नहीं डाला तो उससे value read करने में(* का use करके जैसे *r2) program crash हो जायेगा और segmentation fault दे देगा.
आज के लिए इतना ही. अभी pointer के बारे में बहुत कुछ जानना बाकी है. 

Pointer II
आज Hindi के इस C/C++ programming language tutorial को आगे बढ़ाते हुए हम pointer के बारे में और जानेंगे.
नीचे दिए गए इस example को देखिये और सोचिये कि यह क्या print करेगा, आपको इसका actual output देखकर आश्चर्य होगा.
#include <stdio.h>
void add1(int i) {
  i = i + 1;
}
int main() {
  int x = 5;
  printf("before adding x = %d ", x);
  add1(x);
  printf("after adding x = %d ", x);
  scanf("%d", &x);
  return 1;
}
run करने पर इसका output यह आएगा.
before adding x = 5 
after adding x = 5 
अब समझते हैं कि यह output क्यों आ रहा है. अगर आप add1 function देखेंगे तो उसमे जो parameter(argument) pass किया जाता है उसकी value 1 बढ़ा रहा है. main में पहले x की value 5 है इसलिए पहली बार x = 5 print हुआ है. उसके बाद add1 function में x को pass किया है इसलिए x की value 1 बढ़ जाना चाहिए परन्तु उसकी value 5 ही है और इसीलिए बाद में भी x = 5 ही print हो रहा है.
इसका कारण यह है कि जब add1 function call हुआ तो उसमे pass किये गए variable x की एक अलग copy बन गयी, add1 function ने उस copy की value change की है, इसलिए original x की value change नहीं हुई.
जब भी कोई function call होता है उसमे pass किये गए variable की copy बन जाती है और वह copy call किये गए function को दी जाती है. इसलिए call किया गया function अगर arguments की value change करता है तो original variable की value change नहीं होती, copy की value change होती है.
अब नीचे वाला C++ program देखिये जो pointer का use करके लिखा गया है और सोचिये कि इसका output क्या होगा
#include <stdio.h>
void add1(int* i) {
  *i = *i + 1;
}
int main() {
  int x = 5;
  printf("before adding x = %d ", x);
  add1(&x);
  printf("after adding x = %d ", x);
  scanf("%d", &x);
  return 1;
}
run करने पर इसका output यह आएगा.
before adding x = 5 
after adding x = 6 
अब इसे समझते हैं कि यहाँ function call करने पर x की value बढ़ क्यों गयी. यहाँ add1 function int नहीं लेता बल्कि int variable का address लेता है, और उस address पर जो भी value होती है उसे 1 बढ़ा देता है. 
main में जब add1 function को call किया है तो उसमे x का address pass किया है. ऊपर बताये गए अनुसार x के address की एक copy बनेगी जो add1 function को दी जायेगी. अगर add1 function address को change करता तो x की value change नहीं होती पर add1 function उस address में store variable की value change कर रहा है. चाहे वह original address हो या address की copy, address तो उसी variable का ही रहेगा, इसलिए अगर हम उस address पर store variable को change करते हैं original variable भी change हो जायेगा.
अभी pointer के बारे में और जानना भी बाकी है. इसलिए आगे के लेखों का wait करें.




Array and pointer
आज Hindi के इस C/C++ programming language tutorial को आगे बढ़ाते हुए हम array को pointer के तरीके से जानेंगे.
हम नीचे दिए गए तरीके से array define करते हैं.
int A[10];
A[0] = 0; A[1] = 10; A[2] = 20; ...
इसमें A एक pointer ही होता है. A में array के पहली position वाले int का address store रहता है. A पहली position वाले int का address है, इसलिए A+1 दूसरी position वाले int का address हो जायेगा, A+2 तीसरी position वाले int का...
चूंकि A address है इसलिए *A का मान 0 आएगा(ऊपर A[0] = 0 है), *(A+1) का मान 10 आएगा, *(A+2) का मान 20 आएगा. ध्यान दे कि *(A)+1 और *(A+1) एक ही नहीं हैं. *(A)+1 का मतलब है A में जहाँ का address है उस position पर stored value पर 1 जोड़ना, जबकि *(A+1) का मतलब है A में जहाँ का address है उस position एक आगे वाली position पर stored value. इस तरह हमारे पास किसी array के किसी position(index) पर value को access करने के दो तरीके हैं. A[n] और *(A+n)
इसका एक example देखते हैं.?
#include <stdio.h>

int main() {
  int A[] = {1,2,3,4};
  printf("[%d, %d, %d, %d] ",A[0], A[1], A[2], A[3]);

  *A = 10;
  *(A+1) = 20;
  *(A+2) = 30;
  *(A+3) = 40;
  printf("[%d, %d, %d, %d] ",A[0], A[1], A[2], A[3]);

  A[0] = 0; A[1] = 2; A[2] = 4; A[3] = 6;
  printf("[%d, %d, %d, %d] ", *A, *(A+1), *(A+2), *(A+3));

  scanf("%d", A);
  return 0;
}
इसको run करके output का अध्ययन करें.




Avoid pointer

अभी तक हमने जाना कि किसी भी pointer को define करते समय यह बताना पड़ता है कि वह किस तरह के variable का address store करेगा. int* p में p int का address store करेगा. void pointer वह होता है जो किसी भी तरह के variable का address store कर सकता है. इसलिए जब void pointer से value पढते हैं तो उस समय यह बताना पड़ता है कि वह value हम int की तरह पढ़ना चाहते हैं या char या float...
इसे हम एक example की help से समझते हैं.?
#include <stdio.h>

int main() {
  void* p;
  int i = 65;
  p = &i;
  printf("int value = %d ", (int) *p);
  char c = 'h';
  p = &c;
  printf("char value = %c ", (char) *p);

  scanf("%d", &i);
  return 0;
}
ऊपर दिए गए example में जो pointer define किया गया है वो int* p से न करके void* p से किया गया है. इसलिए यह pointer किसी भी datatype के variable का address store कर सकता है. ऊपर दिए गए program में पहले हमने int का address store किया है फिर char का. जब हम int pointer से value read करते हैं तो program को पता होता है कि इसमें value भी int होगी, पर जब void pointer से value पढ़ते हैं तो program को पता नहीं होता कि इसमें किस datatype कि value है इसलिए हमें यह पता होना चाहिए की उसमे किस datatype की value stored हैं जिससे कि हम पढ़ी गयी value को उस datatype में typecast कर सकें. इसीलिए ऊपर दिए गए example में जब हमने void pointer में int का address store किया है तो उसे print करते समय (int) *p के द्वारा stored value को int में बदला गया(typecast) है. ध्यान दें यहाँ *p से value पढ़ी गयी है जैसा कि हमने pointer वाले पाठ में भी देखा था और उसके पहले (int) लगाने से पढ़ी गयी value int में बदल गयी. इसी तरह char के साथ भी किया गया है. void pointer में किसी struct का address भी store कर सकते हैं, और उससे value पढ़ते समय वापस struct में typecast कर सकते हैं.
malloc and free
आपने pointer के बारे में पढ़ा होगा। जब कोई भी variable define करते हैं तो वह memory में चला जाता है(अर्थात उस variable के लिए memory allocate होती है) और pointer का use करके उस memory का address ले सकते हैं. memory allocate करने का दूसरा तरीका है malloc.
malloc(4) call करने पर 4 byte memory allocate हो जाएगी। और उसका address return हो जायेगा. आपको याद होगा की int 4 byte जगह लेता है, इसलिए malloc(4) call करने पर एक int के लिए memory मिल जाएगी.
malloc एक memory का address देता है उसमे किसी भी type का data रख सकते हैं चाहे int हो या float string double char array कुछ भी, इसलिए malloc void pointer (void*) return करता है. उसका use int store करने के लिए इस तरह करेंगे.?
1 int* i = (int*) malloc(4); //malloc void* देता है. उसमे int रखने के लिए int pointer(int*)में typecast किया गया
2 *i = 1;
3 printf("%d",*i);
अलग अलग system में int अलग अलग memory भी ले सकता है, जरुरी नहीं की 4 byte ही ले. C में एक function होता है sizeof जो यह बता देता है की कोई datatype कितनी जगह लेगा.
जैसे sizeof(int) 4 देगा(अगर आपके system में int 4 byte ले रहा है).इसलिए हम int के लिए memory लेने के लिए malloc(sizeof(int )) use करते हैं.अगर 10 int store करने की जगह चाहिए तो इस तरह कर सकते हैं.?
1 int* a = (int*) malloc(10*sizeof(int));
2 int i;
3 for(i=0;i<10;i++) *(a+i) = 12;// *(a+0), *(a+1), *(a+2), *(a+3) ... etc
यहाँ पर malloc(10*sizeof(int)) 10 int की memory बना देगा और उस memory के पहले byte का address दे देगा. इसके बाद हम पहली byte(a) पर पहला int store करेंगे.  दूसरा int अगली byte यानि (a+1) पर store होगा. (a+1) सिर्फ अगली byte का address होगा. उस address पर value store/read करने के लिए *(a+1) का use होगा(आपको याद होगा कि address(pointer) p पर value store/read करने के लिए *p का use करते हैं)
अगर ये सारे user से input में लेने हैं तो इस तरह ?
1 int* a = (int*) malloc(10*sizeof(int));
2 int i;
3 for(i=0;i<10;i++) scanf("Please enter number: %d", a+i);// *(a+0), *(a+1), *(a+2), *(a+3) ... etc 
जब आप कोई variable define करते हैं तो उसके लिए अपने आप memory बनती है. जब आप उस variable का use बंद कर देते हैं तो वह memory अपने आप free हो जाती है. पर अगर आपने malloc का use करके memory ली है तो वह कभी अपने आप free नहीं होगी. उसे free करने के लिए आप free call करना पड़ेगा. for example ?
1 int* a = (int*) malloc(10*sizeof(int));
2 //use memory
3 free(a);
अगर memory free नहीं करते तो आपका program memory(RAM) लेता ही जायेगा. अगर बहुत सारी memory ले ली तो आपका system slow या hang भी हो सकता है.जब वह program बंद होता तो उसके द्वारा ली गयी सारी memory अपने आप free हो जाती है.


हमने C का basic जान लिया है, परन्तु #include <stdio.h> क्यों लिखते हैं ये नहीं जाना. आज इस यह और इससे related बाते जानेंगे.
शुरू में हमने पढ़ा था कि हम program लिखते हैं, उसके बाद computer उसे machine की भाषा में बदलता है. इस प्रक्रिया(process) को कहते हैं program को compile करना. यह compile करने कि प्रक्रिया कई चरणों(steps) में होती है. आज हम इसके पहले step को जानेंगे. इसके साथ ही हम यह भी जान लेंगे कि हर program के शुरू में #include <stdio.h> क्यों लिखते हैं.
हम जानते हैं कि printf एक function है. यह function stdio.h नाम की file में defined (declared) है. जब program को compile करते हैं तो पहले step में compiler #include <stdio.h> को हटाकर उसकी जगह stdio.h file का content डाल देता है. इस process को pre-processing कहते हैं. ऐसा करने से program को यह पता चल जाता है कि printf function कहाँ किस तरह से defined है और उसे किस तरह से run करना है. अन्यथा error आ जायेगी कि printf function नहीं मिल रहा.
stdio का मतलब है Standard Input and Output. इस file(stdio.h) में वो सब function defined हैं जो input/output लेने के काम आते हैं. printf output को print करने के काम आता है जबकि scanf input लेने के काम आता है. दोनों ही function stdio.h file में defined हैं.
Pre-processing
किसी भी program में जो line # से start होती हैं उन्हें pre-processor कहते हैं. Compiler पहले step में इन्हें process करके program को modify कर देता है. जैसा कि ऊपर बताया गया है. #include एक pre-processing directive हैं जो उसके बाद लिखे गए file के content को उसकी जगह लिख देता है. कुछ और भी pre-processing directive होते हैं जिनके बारे में नीचे बताया गया है.
#define ABC 1
#define किसी भी constant को define करने के लिए उपयोग में लाया जाता है. #define ABC 1 लिखने पर जहाँ जहाँ program में ABC लिखा होगा उसकी जगह 1 compiler पहले step में 1 लिख देगा. #define को macro भी कहते हैं.
#define ADD4(a) (a+4)
यह भी एक macro है जो parameter ले सकता है. इसका use करने पर program compile करने के 1st step में जहाँ भी ADD4(x) लिखा होगा वहां (x+4) लिख जायेगा जहाँ x कुछ भी हो सकता है, variable या कुछ और. जैसे कि अगर ADD4(5) लिखा है तो उसकी जगह (5+4) हो जायेगा.
#ifdef xyz
...
#endif
अगर हमने #define का use करके xyz कहीं define किया है तो #ifdef और #endif के बीच में लिखा हुआ program compile होगा अन्यथा दोनों के बीच लिखा हुआ program हटा दिया जायेगा.
Note: एक pre-processor एक line में ही लिखा जाता है. एक line में एक से ज्यादा pre-processor या एक pre-processor एक से ज्यादा line में नहीं लिख सकते, अन्यथा program नहीं चलेगा.
#include का example हम शुरू से देखते आये हैं. नीचे अन्य pre-processor commands के example भी देखते हैं.?
#include <stdio.h>
#define AREA(r) (PI*r*r)
#define PI 3.14159

int main() {
  int rad = 10;
  float area = AREA(rad);
  printf("Area of circle is %f ", area);

  scanf("%d", &r);
  return 0;
}
ऊपर दिए गए program में AREA(rad) की जगह (PI*rad*rad) और फिर इसकी जगह (3.14159*rad*rad) हो जायेगा. ध्यान दे कि यह function call करने के बराबर नहीं है. function call करने में function द्वारा return की हुई value area को मिल जाती पर यहाँ पर AREA(rad) कि जगह (3.14159*rad*rad) लिख दिया जाता है और बिना कोई function call किये यहीं से जो value calculate होती है वो area को मिल जाती है.
अगर आपको यह लेख पसंद आया हो तो अपने दोस्तों को भी बताएं क्योंकि ये उनके लिए भी उपयोगी सिद्ध हो सकता है!! नीचे दिए गए link के माध्यम से इसे आसानी से facebook twitter और Google Buzz पर भी Share कर सकते हैं.





Arithmetic Operators 
आज Hindi के इस C/C++ programming language tutorial को आगे बढ़ाते हुए हम arithmetic operators के बारे में और जानेंगे. 
operator यानि संक्रिया. operator एक function की तरह ही है जिसे एक चिन्ह के द्वारा लिख सकते हैं, जो एक या एक से अधिक मान लेता है और output में एक मान देता है(एक मान return करता है) इनकी जानकारी नीचे दी गयी है. 
1. +: यह दो संख्याए लेता है और उनका sum return करता है. जैसे कि 5+3 8 return करेगा, इसलिए a = 5+3 लिखने पर a की value 8 हो जाती है.
2. -:यह दो संख्याए लेता है और उनका difference return करता है.
3. ,*:यह दो संख्याए लेता है और उनका product return करता है.
4. /:यह दो संख्याए लेता है और उनका भागफल(divisor) return करता है.
5. %:यह दो संख्याए लेता है और उनका शेषफल(remainder) return करता है.
ऊपर दिए गए operator arithmetic operator हैं. ?
1 int a = 5;
2 int b = 3;
3 a + b;
ऊपर दिए गए program की तीसरी line में a और b को add किया गया है जो कि 8 return करेगा. a और b की value change नहीं होंगी. return value 8 को हमने किसी variable में save नहीं किया इसलिए यह lost हो जायेगा. नीचे example में हमने उस return value को c में save किया है. ?
1 int a = 5;
2 int b = 3;
3 int c = a + b;
= भी एक operator है जो अपने right side लिखे गए expression की value को left side में लिखे गए variable में डाल देता है. जैसे कि ऊपर c = a+b लिखने पर right side में a+b 8 देगा इसलिए c की value 8 हो जायेगी. ?
1 int a = 5;
2 int b = 3;
3 a = b;
ध्यान दे कि ऊपर दिए गए example में a = b लिखने के बाद a में 3(b की value) आ जायेगा, b में 5 नहीं आएगा क्योंकि = अपने left side में लिखे variable में right side की value डालता है, इसका उल्टा नहीं करता. यह भी ध्यान दें कि left side में सिर्फ एक variable ही होना चाहिए, कुछ और नहीं. यदि a+b = c लिखेंगे तो c में a+b की value नहीं आएगी बल्कि program error दे देगा, क्योंकि left side में सिर्फ एक variable नहीं है बल्कि a+b है. = में एक बात और है कि यह अपने right side के expression की value return भी करता है. ?
1 int a = 5;
2 int b = 3;
3 int c,d;
4 d = (c = a % b);//% शेषफल देता है.
ऊपर दिए गए example में c = a%b करने से c की value 2 हो जायेगी और यह(c=a%b) 2 return भी करेगा इसलिए d = (c=a%b) लिखने से return value भी d में भी आ जायेगी.
ऊपर दिए गए सभी operators जिस तरह का input(int,float etc.) लेते हैं उसी तरह का output देते हैं. जैसे कि अगर 30/8 करेंगे तो 3 आएगा. 30 और 8 दोनों int हैं इसलिए result भी int आएगा, दशमलव में मान नहीं आएगा, दशमलव के बाद वाले अंक हट जायेंगे. agar 30.0/8.0 करेंगे तो 3.75 आएगा.
ऊपर दिए गे सभी operator, binary operator हैं. इसका मतलब यह हुआ कि वो 2 संख्याए लेते हैं. अब हम कुछ unary operators के बारे में जानेंगे जो सिर्फ एक ही संख्या लेते हैं.
1. x++ और ++x : ये दोनों ही variable x की value 1 बढ़ा देते हैं. x++ x की पुरानी value return करेगा और ++x x की नयी value return करेगा. अगर सिर्फ x++ या ++x लिखना हो तब दोनों एक है हैं परन्तु यदि इनका use किसी expression में करना हो तब ध्यान रखना चाहिए. नीचे example से और स्पष्ट हो जायेगा.  ?
1 int a = 5;
2 int b = a++;
3 int c = ++a;
4 int d = (b++) + (++c);
ऊपर दिए गए program में दूसरी line run होने के बाद a की value 1 बढ़कर 6 हो जायेगी पर चूंकि a++ पुरानी value return करता है इसलिए b में 5 जायेगा. तीसरी line run होने के बाद a की value 6 से बढ़कर 7 हो जायेगी और c में 7 जायेगा क्योंकि ++a a की नयी value return करता है. चौथी line run होने के बाद b की value 5 से बढ़कर 6, c की value 7 से बढ़कर 8 हो जायेगी, d में 13 जायेगा(d = b की पुरानी value + c की बढ़ी हुई value = 5+8)
x-- और --x भी ठीक इसी तरह कम करते हैं परन्तु यह x की value 1 कम करते हैं. ये दोनों operator(++ और --) सिर्फ int(पूर्णांक) के लिए हैं. float और double datatype में use करने पर error आएगी.





logical and comparision operator

आज हम C programming के इस hindi tutorial को आगे पढ़ते हुए operators के बारे में और जानेंगे.
सबसे पहले नीचे Logical operators दिए जा रहे हैं.
1. ! - यह  एक uniary operator(NOT) है, जो केवल एक bool value लेता है और उसका उल्टा कर देता है, जैसे कि !true = false, !false = true 
2. || - यह एक binary operator(OR) है जो दो bool value लेता है उसमे से कोई भी true होने पर true देता है अन्यथा false देता है. जैसे कि true || false = true, false || false = false 
3.  && - यह एक binary operator(AND) है जो दो bool value लेता है उसमे से कोई भी false होने पर false देता है अन्यथा true देता है. जैसे कि true || false = false, false || false = false 
इनको इस तरह से समझ सकते हैं कि OR यानि अथवा(या), यानि कि अगर कोई भी एक सही(true) है तो result सही(true) होगा.  अगर दोनो गलत(false) हैं तभी result गलत(false) होगा.
इसी तरह AND यानि और(दोनो), यानि कि दोनो सही(true) है तभी result सही(true) होगा.  कोई भी गलत(false) हैं तो result गलत(false) हो जायेगा.
अब Comparison Operators को एक बार देखते हैं जिनका use पहले भी कर चुके हैं. उसके बार कुछ example में इनको use करेंगे.
1. == - यह  एक binary operator(equal) है जो दो int या दो bool value लेता है, अगर दोनो बराबर है तो bool value true देता है अन्यथा false देता है. जैसे कि (5 == 5) = true , (1 == 2) == false 
2. != - यह  एक binary operator (not equal) है जो दो int या दो bool value लेता है, अगर दोनो बराबर नहीं है तो bool value true देता है अन्यथा false देता है. जैसे कि (5 != 5) = false , (1 != 2) == true 
3. > - यह  एक binary operator (greater than) है जो दो int value लेता है, अगर पहला int बड़ा है तो bool value true देता है अन्यथा false देता है. जैसे कि (5 > 5) = false , (3 > 2) == true 
4. < - यह  एक binary operator (less than) है जो दो int value लेता है, अगर पहला int छोटा है तो bool value true देता है अन्यथा false देता है. जैसे कि (5 < 5) = false , (1 < 2) == true 
3. >= - यह  एक binary operator (greater than or equal) है जो दो int value लेता है, अगर पहला int बड़ा या बराबर है तो bool value true देता है अन्यथा false देता है. जैसे कि (5 > 5) = true , (3 > 2) == true 
4. <= - यह  एक binary operator (less than or equal) है जो दो int value लेता है, अगर पहला int छोटा या बराबर है तो bool value true देता है अन्यथा false देता है. जैसे कि (5 < 5) = true , (1 < 2) == true 
एक example से समझते हैं कि इनका use कैसे होता है. इस example में वर्ष(सन) input में लेंगे और यह print करेंगे कि फरवरी 28 की होगी या 29 की.(सामान्यतः जिस वर्ष में 4 का भाग चला जाये उसमे फरवरी 29 की होती है जिस वर्ष में 100 का भाग जाता है उसमे 400 का भाग भी जाना चाहिए, जैसे क़ी 1900,2100... में फरवरी 28 क़ी है पर 2000 में 29 की) ?
#include<stdio.h>
void main() {
  int i;
  printf("Enter the year: ");
  scanf("%d",&i);
  if(i%4==0 && i%100!=0) printf("Feb have 29 days");
  else if(i%400==0) printf("Feb have 29 days");
  else printf("Feb have 28 days");
}
% यह बताता है भाग देने पर शेष कितना आया. अगर शेष 0 आया इसका मतलब भाग चला गया. इस example में पहले हमने ये check किया है क़ी वर्ष में 4 का भाग जाये(i%4 ==0 ) और(&&) 100 का भाग न(i %100 !=0) जाये(1984, 2012) या फिर 400 का भाग चला जाये. इसी को थोडा दुसरे तरीके से भी लिख सकते हैं. ?
#include<stdio.h>
void main() {
  int i;
  printf("Enter the year: ");
  scanf("%d",&i);
  if((i%4==0 && i%100!=0) || i%400==0) printf("Feb have 29 days");
  else printf("Feb have 28 days");




   

No comments:

loading...
Powered by Blogger.