ट्रैक
/
C++
C++
/
अभ्यास
/
लसाग्ना
लसाग्ना

लसाग्ना

सीखने का अभ्यास

परिचय

बुनियादी बातें

C++ की यात्रा शुरू करने के लिए हम वेरिएबल, फंक्शन कॉल और कमेंट से शुरुआत करेंगे।

कमेंट

कमेंट दो तरह के होते हैं: सिंगल-लाइन और मल्टी-लाइन। एक ही लाइन में // के बाद आने वाली हर चीज़ को कंपाइलर नज़रअंदाज़ कर देता है। मल्टी-लाइन कमेंट को C-स्टाइल कमेंट भी कहा जाता है। इन्हें /* और */ के बीच लिखा जाता है। इन दोनों के बीच आने वाली हर चीज़ भी नज़रअंदाज़ कर दी जाती है।

वेरिएबल

C++ एक ऐसी भाषा है जिसमें हर चीज़ का टाइप होता है। सभी टाइप कंपाइल के समय ही पता होने चाहिए, और आम तौर पर आपको उन्हें साफ़-साफ़ लिखना पड़ता है। वेरिएबल का टाइप बाद में नहीं बदल सकता। years नाम का एक पूर्णांक वेरिएबल इस तरह घोषित किया जा सकता है:

int years;

वेरिएबल बनाते समय ही उन्हें शुरुआती वैल्यू दे देना अच्छा तरीका है। C++ में इसके लिए अलग-अलग तरीके हैं। कर्ली ब्रैकेट वाला तरीका आधुनिक C++ के ज़्यादा करीब है, लेकिन बराबर के चिह्न वाला तरीका भी बहुत आम है।

int tomatoes{80};
int potatoes = 40;
Caution

C++ में बिना शुरुआती वैल्यू वाले वेरिएबल इस्तेमाल करने की अनुमति है। जब तक वेरिएबल को जानबूझकर कोई वैल्यू नहीं दी जाती, वह अपरिभाषित रहता है और उसमें कुछ भी हो सकता है। वेरिएबल को वैल्यू दिए बिना इस्तेमाल करने से होने वाली एरर और अपरिभाषित व्यवहार से बचने के लिए यह सलाह दी जाती है कि हमेशा शुरुआती वैल्यू दे दीजिए। अपरिभाषित व्यवहार की वजह से आपका प्रोग्राम सबसे बुरे मौके पर क्रैश हो सकता है, जबकि उससे पहले वह ठीक चल रहा था। इसे जितना ज़ोर दिया जाए कम है: हर हाल में अपरिभाषित व्यवहार से बचिए।

अंकगणितीय ऑपरेशन

*, + या - जैसे अंकगणितीय ऑपरेटर किसी एक्सप्रेशन का हिस्सा हो सकते हैं, जैसे 3 * 2 या tomatoes + potatoes।

वेरिएबल की वैल्यू बदलना

आप वेरिएबल को फिर से वैल्यू असाइन कर सकते हैं, जब तक उनका टाइप नहीं बदलता:

tomatoes = tomatoes - 5; // tomatoes is now 75
potatoes = (32 * 2) + 11; // potatoes is now 75 as well

फंक्शन

हर फंक्शन के पास एक नाम, एक रिटर्न टाइप और पैरामीटर की एक लिस्ट होती है, जो खाली भी हो सकती है। always_fortyseven नाम का एक फंक्शन, जो हमेशा 47 लौटाता है, ऐसा दिखेगा:

int always_fortyseven() {
    return 47;
}

यहाँ vip_fee है, जिसमें एक पैरामीटर है:

int vip_fee(int standard_fee) {
    /*
    vip_fee calculates the vip fee based on the standard_fee.
    */
    int vip_multi{3};
    return standard_fee * vip_multi;
}

या फिर total_fee, जो तीन पैरामीटर लेता है और एक दूसरे फंक्शन को कॉल करता है।

int total_fee(int vips, int adults, int kids) {
    /*
    total_fee calculates the total price for a group of VIP and adult guests with kids.
    Kids get a flat discount on the standard fee.
    VIP guest fees are calculated by calling vip_fee.
    */
    int standard_fee{30};
    int kids_discount{15};

    int kids_total_fee = kids * (standard_fee - kids_discount);
    int vips_total_fee = vips * vip_fee(standard_fee);
    int adult_total_fee = adults * standard_fee;

    return vips_total_fee + adult_total_fee + kids_total_fee;
}

C++ में फंक्शन कुछ दूसरी भाषाओं की तरह अंतिम स्टेटमेंट की वैल्यू नहीं लौटाते। कोड के कंपाइल होने के लिए return कीवर्ड ज़रूरी है।

व्हाइटस्पेस

व्हाइटस्पेस का इस्तेमाल सोर्स कोड को फॉर्मेट करने के लिए होता है और इसमें स्पेस, टैब या नई लाइनें शामिल हैं। कंपाइलर अनचाहे व्हाइटस्पेस को नज़रअंदाज़ कर देता है, इसलिए आप उसका इस्तेमाल अपने कोड को व्यवस्थित करने के लिए कर सकते हैं। व्हाइटस्पेस का समझदारी से इस्तेमाल आपके कोड को पढ़ने में आसान बना सकता है। फॉर्मेटिंग के अलग-अलग मानक हैं, लेकिन ये सब परंपरा हैं और कंपाइलर इन्हें लागू नहीं करता।

// Formatting makes it easier to find bugs

int eggs_yolks =  3;
int      yeast = 15;

int flour=500;int sugar=200;// compact, but difficult to read

निर्देश

लूसियन की प्रेमिका घर लौट रही है, और उसने अभी तक उनकी सालगिरह का खाना नहीं बनाया है!

इस अभ्यास में आप कुछ कोड लिखकर लूसियन की मदद करेंगे, ताकि वह अपनी पसंदीदा रेसिपी की किताब से एक शानदार लाज़ान्या बना सके।

आपके सामने चार काम हैं, जो सब लाज़ान्या पकाने में लगने वाले समय से जुड़े हैं।

1. ओवन का अपेक्षित समय मिनटों में तय कीजिए

ovenTime() फंक्शन बनाइए। यह कोई आर्गुमेंट नहीं लेता और बताता है कि लाज़ान्या को ओवन में कितने मिनट रहना चाहिए। रेसिपी की किताब के अनुसार, ओवन का अपेक्षित समय 40 मिनट है:

ovenTime();
// => 40

2. ओवन में बाकी बचा समय मिनटों में निकालिए

remainingOvenTime(int actualMinutesInOven) फंक्शन बनाइए। इस फंक्शन को आर्गुमेंट के रूप में वे मिनट मिलते हैं जितनी देर लाज़ान्या अब तक ओवन में रही है। यह फंक्शन लौटाता है कि पिछले काम में तय हुए अपेक्षित ओवन समय के आधार पर लाज़ान्या को ओवन में अभी और कितने मिनट रहना है।

remainingOvenTime(30);
// => 10

3. तैयारी में लगने वाला समय मिनटों में निकालिए

preparationTime(int numberOfLayers) फंक्शन बनाइए। इसे आर्गुमेंट के रूप में उतनी परतें मिलती हैं जितनी आपने लाज़ान्या में लगाई हैं। यह फंक्शन लौटाता है कि लाज़ान्या तैयार करने में आपके कितने मिनट लगे, अगर हर परत तैयार करने में आपको 2 मिनट लगते हैं।

preparationTime(2);
// => 4

4. बीता हुआ कुल समय मिनटों में निकालिए

elapsedTime(int numberOfLayers, int actualMinutesInOven) फंक्शन बनाइए, जो दो आर्गुमेंट लेता है: पहला आर्गुमेंट उन परतों की संख्या है जो आपने लाज़ान्या में लगाई हैं, और दूसरा आर्गुमेंट उन मिनटों की संख्या है जितनी देर लाज़ान्या ओवन में रही है। यह फंक्शन लौटाता है कि लाज़ान्या पकाने में आपने कुल कितने मिनट काम किया, यानी तैयारी में लगे मिनटों और इस समय लाज़ान्या के ओवन में बिताए मिनटों का जोड़।

elapsedTime(3, 20);
// => 26
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
C++ Exercism

लसाग्ना शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और C++ को 19 कॉन्सेप्ट100 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।