Recap of C (Lecture 01)-KG4hjVDw-p8 32.4 KB
Newer Older
Vandan Mujadia's avatar
Vandan Mujadia committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
C++ प्रोग्रामिंग में आपका स्वागत है।
 यह 20 घंटे का पाठ्यक्रम होगा, जहां हम C ++ प्रोग्रामिंग भाषा के विभिन्न पहलुओं के बारे में बात करेंगे और इसे स्वाभाविक रूप से लगभग 40 मॉड्यूल में विभाजित किया जाएगा, जो आप एक के बाद एक अध्ययन करेंगे।
 इस पाठ्यक्रम का मुख्य जोर यह सिखाने के लिए है कि कैसे C ++ प्रोग्रामिंग भाषा का उपयोग जटिल सॉफ्टवेयर सिस्टम को डिजाइन करने और कार्यान्वित करने में किया जाना चाहिए।
 चूँकि, आप सभी को पता होगा कि C ++ ऑब्जेक्ट ओरिएंटेड या ऑब्जेक्ट आधारित प्रोग्रामिंग लैंग्वेज है और मैं मानता हूँ कि आप C भाषा जानते हैं, हो सकता है कि आप बहुत गहराई से न जानते हों, लेकिन आपके पास C लैंग्वेज की सामान्य जानकारी है | इसलिए, हम वहीँ से शुरू करेंगे, मॉड्यूल 1 में, हम मुख्य रूप से C प्रोग्रामिंग के विभिन्न विशिष्ट पहलुओं को उपयोग करने के बारे में पुन: बात करेंगे।
 यह केवल यह सुनिश्चित करने के लिए है कि आप कर सकते हैं, यदि आवश्यक हो तो आप उन अवधारणाओं को फिर से देख सकते हैं और इससे पहले कि हम C++ भाषा में गहराई से जाएं, आप सभी C प्रोग्रामिंग की आवश्यकताओं से परिचित हो सकते हैं| क्योंकि C भाषा, C++ मूल भाषा है।
 इसलिए, हम पहले C भाषा की पुनरावृत्ति के साथ आरंभ करेंगे| इसलिए, हम विभिन्न अवधारणाओं को फिर से सीखने के उद्देश्य से, विशेष रूप से C भाषा और प्रोग्रामिंग (programming) पहलुओं के अलावा C स्टैंडर्ड लाइब्रेरी(standerd library) को देखेंगे।
 हम C प्रोग्राम ( program) के ढांचे (structure) के बारे में संक्षेप में चर्चा करेंगे, कि C प्रोग्राम ( program) को संभवतः कैसे बनाया जाना है।
 अब तक आपने केवल 1 या 2 फ़ंक्शन (function) का उपयोग करके केवल एक ही फ़ाइल (file) के संदर्भ में कोड(code) लिखा है।
 उनमें से एक main (function) होना चाहिए| जैसा कि आप जानते हैं, हम देखेंगे कि कैसे बेहतर तरीके से प्रोग्राम(program) लिखे जा सकते हैं और इसके साथ ही हमारे पास एक C ++ प्रोग्रामिंग भाषा के लिए नींव होगी ।
 ये मॉड्यूल की रूपरेखा के संदर्भ में किए जाने वाले विभिन्न बिंदु है।
 प्रस्तुति के रूप में, हम आपकी स्क्रीन के बाईं ओर आगे बढ़ेंगे, आप इस रूपरेखा को देखेंगे और इस पर प्रकाश डाला जाएगा कि हम किस विशेष विषय के बारे में बात कर रहे हैं।
 तो, यह पहला प्रोग्राम (program ) "Hello World" है, जो मुझे यकीन है कि आप सभी ने अध्ययन किया है।
 यह केरिंग और रिची (kerning and ritchie’s ) की प्रसिद्ध पुस्तक में शुरुआती प्रोग्राम है।
 हम<stdio> library से 'printf' का उपयोग टर्मिनल पर "Hello World" को प्रिंट करने के लिए करते हैं, जो औपचारिक रूप से <stdio> आउट फाइल (out file) है ।
 main फंक्शन (function) वह जगह है, आप यहां देख सकते हैं, जहां से एक्सिक्यूसन (exicution) शुरू होता है |फिर आप इस स्ट्रिंग (string) को प्रिंट करते हैं और ` \n 'प्रिंट करते हैं, जिसका अर्थ है कि आप मूल रूप से अगली लाइन (line) में जाते हैं यानि नई लाइन (line) में ।
 C में कई प्रकार के डेटा टाइप(data types) हैं; केर(char) जिसे केरेक्टर(character) के रूप में जाना जाता है, , इंट (int) पूर्ण संख्या के लिए, फ्लोट (float) और डबल(double) ; फ्लोटिंग पॉइंट संख्या के लिए हैं।
 अब, यहां मुझे यह उल्लेख करना चाहिए कि आपके द्वारा आमतौर पर उपयोग किए जाने वाले C को C89 के रूप में जाना जाता है, C89 C का पहला मानक (standerd) है जो ANSI द्वारा बनाया गया था, मानकीकरण संगठन और बाद में 99 में, एक और मानक जारी किया गया था, इसे C99 कहा जाता है, इसलिए अधिकांश संकलक (compiler) आज C99 मानक का अनुसरण करते हैं।
 हम उम्मीद करेंगे कि C99 का भी पालन किया जाएगा।
 इसलिए, जब हम C के बारे में बात करते हैं, तो हम हाइलाइट (highlight) करने की कोशिश करेंगे, अगर कुछ चीजें C99 में भिन्न हो गई हैं।
 तो, जैसा कि आप देख सकते हैं कि डेटा प्रकार के संदर्भ में, एक नया डेटा प्रकार बूल (bool) है, जिसे C99 में जोड़ा गया है।
 C89 में, आप अभी भी बूलियन मान रख सकते हैं, जो पूर्णांक मान होने के आधार पर सही(true) या गलत(false) हो सकता है।
 यदि , यह 0 है तो यह गलत(false) है; अन्यथा यह सच (true) है।
 लेकिन C99 में, एक अलग प्रकार का बूल(bool) है।
 प्रत्येक डेटा टाइप(datatype) जैसा कि आप जानते हैं, इन अंतर्निहित(built-in) डेटा टाइप (type) का साइज़(size) बाइट्स (bytes) में दिया जाता है और इसे प्राप्त करने के लिए आप `sizeof 'ऑपरेटर का उपयोग कर सकते हैं।
 आप enumerated टाइप को परिभाषित कर सकते हैं जो मूल रूप से पूर्णांक मान (integer value)हैं जिन्हें कुछ प्रतीकात्मक नाम दिए गए हैं।
 C में अन्य डेटा प्रकारों में वोइड (void) शामिल हैं।
 वोइड (void डाटाटाइप(datatype) का उपयोग बहुत दिलचस्प है और जैसा कि हम C ++ में जाते हैं, हम वोइड (void) के विभिन्न उपयोग देखेंगे।
 जब आपको एक datatype का उपयोग करने की आवश्यकता होगी, आप void का उपयोग कर सकते हैं, लेकिन यह वास्तव में कोई datatype नहीं है।
 यह ऐसा है, जब हम अंकगणित करते हैं तो हमारे पास एक 0. होता है, मैं 0 से x जोड़ सकता हूं और यह x नहीं बदलता है।
 इसलिए, जैसा कि हम कहते हैं कि प्रत्येक प्रणाली को 0. की आवश्यकता है, इसलिए void एक प्रकार की प्रणाली है, जैसा कि हम C ++ में अधिक देखेंगे।
 इस बिल्ट-इन (built-in) type के आधार पर, विभिन्न देरिवेड टाइप(derived type) हैं जो ऐरे (array), स्ट्रक्चर (structure), यूनियन(union) और पॉइंटर(pointer) का समर्थन करते हैं| हमारे पास फंक्शन(function) हो सकते हैं जिन्हें सामान्यतः कॉल (call) जाता है| C में स्ट्रिंग (string) एक प्रकार है जिसे इन दिनों C स्ट्रिंग (C string) कहा जाता है।
 अगर सच कहें तो C में string एक datatype नहीं है, इसे आप जब C ++ में जाएंगे तो अच्छे से समझेंगे ।
 C string वास्तव में function का एक हेडर(header) संग्रह है , जो हमें C में स्ट्रिंग्स में हेरफेर करने की अनुमति देता है।
 अंत में, डेटा टाइप्स (datatypes) को उनके size के लिए मॉडिफाइड (modified) किया जा सकता है ये साइंड (signed) या अनसाइंड( unsigned) होंगे और इन 4 प्रकार के मॉडिफाइर (modifiers) का उपयोग C में किया जाता हैं | अब हम C वेरियबल (veriable) की तरफ आगे बढ़ेंगे, उनके नामों को कुछ तरीकों से परिभाषित किया जा सकता है जो अल्फा (alphabates) या अंडरस्कोर (underscore: ‘_’) से शुरू होते हैं और फिर अल्फा न्यूमेरिक (alpha-numeric)के साथ विस्तारित होते हैं।
 यहां विभिन्न variable के नामों के कुछ उदाहरण दिए गए हैं, जब एकल अक्षरों या 1-2 अक्षरों के साथ variable के नाम देना अक्सर सुविधाजनक होता है तब भी यह सलाह दी जाती है कि आप variable के उन नामों का उपयोग करें जो कुछ अर्थ रखते हैं।
 इसलिए, हम केरेक्टर को ‘endOfSession’ कह रहे हैं, आप इसे केवल ‘c’, या ‘d’ या ‘a’ कह सकते हैं, लेकिन इसे नाम में देना बेहतर है, जिससे यह समझा जा सके कि variable का क्या अर्थ है।
 जब veriable घोषित (declare) किए जाते हैं, जैसे यहाँ घोषित किए हैं, तब variable को इनिशियलाइज़(initialize) भी किया जा सकता हैं।
 वह initialization वैकल्पिक है।
 इसलिए, जब हम कहते हैं कि int i को 10. के साथ इनिशियलाइज़(initialize) किया गया है।
 इसका मतलब है कि `i 'एक int type का variable है है जिसका declration के साथ 10 initial value हो जाएगी ।
 इसलिए, यदि आप इनिशियलाइज़(initialize) नहीं कराते हैं, तो यह uninitialized variable है जिसकी initial value अज्ञात होगी ।
 निश्चित रूप से, उन सभी variable को इनिशियलाइज़(initialize) करना बहुत अच्छा है जिन्हें हम घोषित (declare) करते हैं और परिभाषित (define) करते हैं।
 C में कई लिटरल्स (litrals) हैं जो मूल रूप से अंतर्निहित (built-in) type की fixed value हैं जो इस बात पर निर्भर हैं कि आप एक विशेष litral कैसे लिखते हैं, उस litral का type तय किया गया है।
 उदाहरण के लिए, यदि आपके पास केवल अंकों का अनुक्रम है तो यह दशमलव (decimal) पूर्णांक प्रकार बन जाता है, लेकिन यदि आप 0 के साथ उपसर्ग करते हैं, तो यह एक अष्टक (octal) प्रकार का माना जाता है, जिसका base 8 है ।
 यदि आप इसे 0x के साथ उपसर्ग करते हैं, तो इसे हेक्साडेसिमल (hexadecimal) litral माना जाता है।
 char टाइप litral को ‘ ‘ के भीतर, string टाइप litral को “ “ के भीतर लिखा जाता है| C99 के साथ, कॉन्स्ट टाइप (const type) का परिचय है, जो स्थिरांक (costant) हैं और हम गहराई से उस पर अधिक चर्चा करेंगे जब हम C ++ करेंगे।
 इसलिए, C89 में litral निश्चित मूल्य (fixed value)हैं, लेकिन C99 में, उन्हें contant प्रकार का डेटा माना जाता है।
 इसलिए, C99 में ‘212’ को एक कास्ट इंट (const int) माना जाएगा।
 C में कई ऑपरेटर (operators) हैं, आप उनमें से कई से परिचित होंगे।
 जैसे सामान्य या बाइनरी ऑपरेटर (binary operator) ; जोड़ (+), घटाव(-), गुणा(*) से होते हैं।
 नेगेसन(negation) की तरह युनरी (unary) oprator हैं।
 यहां टर्नरी ऑपरेशन (ternary) भी हैं जैसे की ?: ।
 प्रत्येक ऑपरेटर की एक निश्चित समता(arity) होती है जो ऑपरेंड (oprand) पर निर्भर करती है, जो कि 1, 2 या 3 हो सकते हैं एक एक्सप्रेशन (expression) में ऑपरेटर का मूल्यांकन उनकी पूर्वता (precedence) के क्रम के अनुसार किया जाता है।
 कुछ operator में उच्चतरता होती है, कुछ में कम पूर्वता होती है।
 तो, हम जानते हैं कि यदि एक ही एक्सप्रेशन (expression) में गुणन (*)और साथ ही साथ जोड़(+) है तो गुणन (*) पहले करना होता है।
 इसी तरह, यदि एक एक्सप्रेशन (expression) में एक जैसे, एक से अधिक ऑपरेटर हैं, तो उनके मूल्यांकन का क्रम सहक्रियाशीलता (associativity)पर निर्भर करेगा और कुछ ऑपरेटर के लिए दाएं से बाएं हैं, कुछ ऑपरेटर के लिए बाएं से दाएं हैं।
 इसलिए, यहां मैंने अलग-अलग उदाहरण दिखाए हैं।
 यह सिर्फ आपके संदर्भ के लिए है, आप निश्चित रूप से यह जानते हैं।
 यदि आप ऐसा नहीं करते हैं, तो कृपया इसे बेहतर समझने के लिए पाठ को देखें।
 अब, C में अगली अवधारणा एक एक्सप्रेशन (expression) है।
 मेरे पास वेरिएबल(variable) हैं और मेरे पास ऑपरेटर(operator) हैं।
 मेरे पास literal हैं जिनके साथ मैं एक्सप्रेशन (expression) बना सकता हूं।
 तो, एक्सप्रेशन (expression) को इस तरह से परिभाषित किया जाता है कि एक पुनरावर्ती रूप(recursive form) कहेंगे कि प्रत्येक litral एक एक्सप्रेशन (expression) है।
 यदि मैं संख्या 5 कहता हूं, तो यह अपने आप में एक एक्सप्रेशन (expression) है।
 प्रत्येक variable एक एक्सप्रेशन (expression) है और अगर मेरे पास दो एक्सप्रेशन (expression) हैं और उन्हें एक बाइनरी(binary) ऑपरेटर से जोड़ते हैं तो यह एक नया एक्सप्रेशन (expression) बन जाता है।
 इसी तरह, मेरे पास युनरी(unary) ऑपरेटर, टर्नरी(ternery) ऑपरेटर आदि हो सकते हैं।
 जब कोई भी फ़ंक्शन कॉल किया जाता है तो वह एक एक्सप्रेशन (expression) है।
 तो, मूल बिंदु यह है कि एक्सप्रेशन (expression) का वेल्यु(value) होना चाहिए; C में किसी भी चीज़ का एक मान (value) होता है जिसे एक एक्सप्रेशन (expression) कहा जाता है इसलिए, यहां दिए गए variables के लिए अलग-अलग उदाहरण दिए जा सकते हैं और नीचे अलग-अलग एक्सप्रेशन (expression) दिए गए हैं।
 अब, C में एक्सप्रेशन (expression) स्वयं नहीं हो सकता है।
 इसलिए, एक्सप्रेशन (expression) को स्टेटमेंट(statement) के रूप में मौजूद होना चाहिए।
 एक स्टेटमेंट(statement) कमांड (command) की एक छोटी इकाई है जिसे आप C प्रोग्राम में निर्दिष्ट कर सकते हैं।
 तो, सबसे सरल या सबसे छोटा स्टेटमेंट(statement) जो आपके पास हो सकता है जिसे एक Null स्टेटमेंट(statement) कहा जाता है, ये एक अर्धविराम (semicolon ‘;’ ) है।
 अन्यथा, यदि आपके पास एक एक्सप्रेशन (expression) है, तो आप इसे अर्धविराम के साथ समाप्त कर सकते हैं और एक बार जब आप इसे अर्धविराम के साथ समाप्त करते हैं तो यह एक स्टेटमेंट(statement) बन जाता है।
 इसलिए, यदि आप नीचे दिए गए उदाहरण को देखते हैं, तो 'i + j' एक्सप्रेशन (expression) स्टेटमेंट(statement) में एक एक्सप्रेशन (expression) है क्योंकि ‘i’ तथा ‘j' variable हैं और + उन्हें जोड़ने वाला एक ऑपरेटर है, लेकिन जिस क्षण आप `i + j; 'लिखते हैं, यह एक स्टेटमेंट(statement) बन जाता है।
 यह कहीं भी स्वतंत्र रूप से हो सकता है, इसी तरह के उदाहरण फ़ंक्शन कॉल एवं असाइनमेंट के लिए दिखाए गए हैं ।
 एक्सप्रेशन (expression) स्टेटमेंट(statement) के अलावा, C में कई कंट्रोल (control) स्टेटमेंट(statement) या कंट्रोल (control) constructs हैं, जो मूल रूप से program में control फ्लो (flow) को प्रबंधित करने की अनुमति देते हैं।
 इसके लिए वहाँ सिलेक्शन (selection) स्टेटमेंट(statement) और लूप (loop) स्टेटमेंट(statement) आदि हैं।
 हम अगली स्लाइड में उनके बारे में थोड़ा और देखेंगे और अगर एक के बाद एक कई स्टेटमेंट(statement) आते हैं जिन्हें उपयोग के लिए समूहीकृत (group) करने की आवश्यता होती है, और फिर हम उनके दोनों तरफ करली ब्रेसिज़ (curly braces ‘{}’) की एक जोड़ी डालते हैं।
 हम कहते हैं कि यह एक ब्लॉक (block)बन गया है और इस तरह के एक स्टेटमेंट(statement) को एक कंपाउंड स्टेटमेंट(compound statement) कहा जाता है।
 इसलिए, स्टेटमेंट(statement) का पूरा खंड एक compund है जिसे आप नीचे एक उदाहरण देख सकते हैं।
 अब, कंट्रोल construct की बात करते है जो एक C program का प्रमुख क्षेत्र हैं जो मूल रूप से आपको बताता हैं कि program का निष्पादन (execution) कैसे हो सकता है।
 एक statement के execute होने के बाद दूसरा कोनसा statement execute होगा ये नियंत्रण करने के लिए हमारे पास अलग-अलग तरीके हैं।
 C प्रोग्राम में डिफ़ॉल्ट (default) रूप से नियंत्रण फॉलथ्रू (fall through) के माध्यम से होता है, जिसका अर्थ है कि एक बार एक statement execute होने के बाद तुरंत अगला statement execute होगा, लेकिन हम इसे control flow द्वारा बदल सकते हैं ।
 तो, control flow का पहला प्रकार एक सिलेक्शन स्टेटमेंट(selection statement ) है जोकि ‘if” या ‘if-else’ है | उदाहरण में, जैसा कि आप देख सकते हैं कि हम कह रहे हैं, यदि if(a < b ) true है तो आप उस यौगिक कथन (compound statement) को अनुसरण करता है।
 आप आसानी से समझ सकते हैं कि कंपाउंड स्टेटमेंट क्या कह रहा है इसमें आप तीसरे वेरिएबल का उपयोग करके ‘a’ और ‘b' के मान को इंटरचेंज करते हैं।
 यदि आप अगले उदाहरण को देखते हैं, तो यह ‘if-else' प्रकार का statement दिखा रहा है, जहाँ ‘if(x<5)’ की कंडीशन (condition) अगर true होती है तो यह एक statement है, अन्यथा यदि स्थिति false है तो एक और statement है।
 आप देख सकते हैं कि false हिस्से में एक कंपाउंड स्टेटमेंट(compound statement) है, जबकि true के लिए ये एक single statement है, इन्हे कई तरीकों से किया सकता है।
 आप एक variable की value का उपयोग विविध तरीके से कर सकते हैं।
 switch-case में आप सूचीबद्ध case में से किसी एक को लेते है , हमने variable 'i' का उपयोग किया है और आप किस पर switch करते हैं ये variable की value पर निर्भर करता है| इसलिए, यदि i की value 1 है, तो case 1 वन का चयन किया जाएगा, जिसके द्वारा ‘x' 6 हो जाएगा | यदि i का मान सारे case में मौजूद नहीं है तो हमारे पास एक डिफ़ॉल्ट केस (default case ) है, जिसे निष्पादित (execute) किया गया है ।
 ‘case’जैसे स्टेटमेंट हमने switch में दिखाए हैं, उन्हें लेबल स्टेटमेंट भी कहा जाता है क्योंकि उनके लिए एक लेबल होता है।
 फिर हमारे पास पुनरावृति (iteration) के statement हैं जहां आप दोहरा सकते हैं आमतौर पर इन को लूप स्टेटमेंट्स (loop statements) कहा जाता है, यहां आपके पास एक ‘for’ लूप हो सकता है जिसमें तीन भाग होते हैं।
 एक प्रारंभिक भाग ‘i 'को 0 से assign किया गया है, जो शुरू में किया जाता है।
 दूसरा condition वाला हिस्सा जहाँ हर बार लूप(loop) नियंत्रित किया जाता है और आप लूप में जारी रहते हैं बशर्ते कि condition true बनी रहे| और एक बॉडी (body) है जो मूल रूप से ‘for’ स्टेटमेंट का अनुसरण करती है, जो निर्देशों या कथनों का अनुक्रम है लूप के एक भाग के रूप में निष्पादित किया जाता है और ‘++i’ जिससे लूप स्टेटमेंट का अंत होता है।
 इसी प्रकार, हमारे पास ‘while' लूप तथा “do-while“ loop है | इसके अलावा अंतिम प्रकार के control statement के लिए ‘go to’, ‘continue’, ‘break’ और ‘return’ हैं।
 जैसा कि आप जानते हैं, C सलाह देता है कि आपको ‘go to” का उपयोग नहीं करना चाहिए, इसलिए, हम ‘go to’ का उदाहरण नहीं दिखा रहे हैं।
 यदि आप C प्रोग्राम को अच्छी तरह से डिज़ाइन करते हैं तो आपके पास ‘go to’ का उपयोग करने का कोई कारण नहीं होगा।
 इसलिए, अपने नियंत्रण प्रवाह को प्राप्त करने के लिए अलग-अलग loop या switch स्टेटमेंट के साथ केवल ‘continue’और ‘break’ का उपयोग करने का प्रयास करें, लेकिन आपको फ़ंक्शन से लौटने के लिए ‘return’ की आवश्यकता होगी।
 तो, ये चार प्रकार के के नियंत्रण निर्माण (control construct) हैं जो मौजूद हैं।
 हमने इस मॉड्यूल में अब तक देखा है, कि C प्रोग्राम के मूल घटक क्या हैं, जैसे आप IO कैसे करते हैं, आप डेटा type का उपयोग करते हुए variable कैसे परिभाषित करते हैं? आप उन्हें कैसे initialize करते हैं? ऑपरेटरों का उपयोग करके उन्हें expression कैसे बनाया जाए? program के प्रवाह को नियंत्रित करने के लिए expression को statement और विभिन्न नियंत्रण प्रवाह statement में कैसे परिवर्तित किया जाए? तो इसके साथ, हम इस भाग को समाप्त करेंगे और इसके बाद हम derived types और उनके C में उपयोग करने के बारे में बात करेंगे।