C Marathi™
Innovative e-Learning Methodology
Saturday, 8 October 2016
Monday, 12 September 2016
Public static void main
जावा
लॅंग्वेजच्या literature मध्ये एके ठिकाणी public static void main स्टेटमेंट ला God
Method असे म्हणले गेले आहे… महाकाय अशा या विश्वाचा सर्व कारभार परमेश्वर एकहाती ज्या
पद्धतीने सांभाळत असतो त्याच प्रमाणे हि method जावाच्या application मध्ये सर्व काही
करत असते अशा अर्थाने तर लेखकाला असे म्हणायचे असेल कि काय अशी शंका येते…!
कदाचीत
म्हणूनच public static void main हे स्टेटमेंट म्हणजे Java language ची ओळख होउन बसली
आहे. मग C/C++ language शिकुन आला असेल अथवा नसेल, अनेक विद्यार्थ्यांना या पुर्ण स्टेटमेंटचे
कुतूहल पहील्या दिवशी जे तयार होते ते अभ्यासक्रमाच्या शेवटच्या दिवशी पर्यंत तसेच
रहाते. म्हणून हि पोस्ट खास या स्टेटमेंट साठी व चौकस बुद्धीच्या विद्यार्थ्यांसाठी…!
खरं
तर यातील जवळपास सर्व शब्दांचा संबंध व एकंदरीत संपुर्ण स्टेटमेंटचा संबंध C, C++,
Procedure Oriented Programming, आणी Object Oriented Programming या चांडाळ चौकडीशी
आहे…! त्यामुळे या चौघांची चांगली ओळख नसेल तर “public static void main म्हणजे काय..?” याचा अर्थ सांगायचा असेल तर विद्यार्थ्याला पाठ करून उत्तर
देणे हाच एकमेव मार्ग शिल्लक रहातो… हे टाळायचं असेल तर ही पोस्ट तुम्हाला कामाला येते
का पहा…
जावा (Core Java असे मी म्हणते आहे… Servlet, MIDlet अशा प्रकारच्या जावा बद्दल नाही) च्या प्रत्येक प्रोग्रॅम मध्ये लिहायला लागणारे संपुर्ण स्टेटमेंट public static void main(String[ ] args) असे आहे. या मध्ये public आणी static यांना modifier म्हणतात तर void ला रिटर्न टाइप म्हणतात. गंम्मत म्हणजे main ला C आणी C++ मध्ये फंक्शन म्हणत असले तरी जावा मध्ये मात्र मेथड म्हणतात…!
public static void main च्या नंतर pair of opening व closing brackets आहेत व त्यामुळे ते फंक्शन आहे.
Single
Entry Point अशी ओळख झालेल्या या main function ला खरं तर प्रसिद्धी दिली ती C किंवा
C++ या जोडगोळीने. म्हणुनच कदाचीत त्यांनी जावा लॅंग्वेज मध्ये सुद्धा starting point of program execution मेन ला करून
टाकले.
अर्थात C आणी C++ व्यतीरीक्त Microsoft च्या C#, Visual Basic तसेच Google च्या Go, Python या तुम्हाला माहीत असलेल्या programming language तसेच D, Pike, Haskell, Lisp या तुम्ही न ऐकलेल्या लॅंग्वेजमध्ये सुद्धा main function चा उल्लेख सापडतो.
C आणी C++ मध्ये आपण मेन फंक्शन स्वतंत्रपणे लिहीतो व त्याच्या आत व इतर फंक्शनच्या आत तयार असलेल्या अथवा तयार केलेल्या क्लास चे ऑब्जेक्ट्स तयार करतो. या उलट जावा मध्ये आपण जो काही कोड लिहीतो तो क्लास च्या आत लिहीतो. त्यामुळेच C++ पेक्षा सुद्धा जावा ला परीपुर्ण ऑब्जेक्ट ओरियेंटेड प्रोग्रॅमिंग (Fully Object Oriented Programming) मेथॉडॉलॉजी म्हणतात.
C++ मध्ये आपल्याला क्लास चा प्रायव्हेट/प्रोटेक्टेड डेटा access करण्यासाठी त्याच क्लासमधील मेंबर फंक्शन्स ची मदत घ्यायला लागते व हे मेंबर फंक्शन कॉल करायचे असल्यास त्या क्लास चा ऑब्जेक्ट तयार करावा लागतो. व त्या नंतर ऑब्जेक्ट डॉट फंक्शन नेम वापरून आपण फंक्शन कॉल करतो. पण काही वेळा ऑब्जेक्ट तयार करण्यापुर्वी अथवा ऑब्जेक्टच्या मदतीशिवाय क्लास मधील फंक्शन कॉल करता यावे म्हणून object oriented programming methodology मध्ये static data व static member फंक्शनची सुविधा सुचवली गेली होती.
नेमकी
हिच सुविधा जावा वाल्यांनी चाणाक्षपणे हेरून या ठिकाणी वापरली आहे. त्यामुळेच प्रोग्रॅम
execute केल्या नंतर क्लास मध्ये असलेले मेन फंक्शन ऑब्जेक्ट तयार नसतांना सुद्धा कॉल
होते… व ते करण्याचे काम जावा चा interpreter करतो… या ठिकाणी कमांड लाइन ला कमांड
दिल्या नंतर Java Virtual Machine हे जणुकाही सर्च वॉरंट हातात पडल्या प्रमाणे
public static void main ला शोधायला बाहेर पडते…!
आता main method नाही केली स्टॅटीक तर काय अडचण येत असावी…? समजा नाही केली स्टॅटीक तर JVM ला ज्या क्लास मध्ये मेन फंक्शन लिहीले आहे त्याचा इंस्टंन्स (object) तयार करावा लागेल. ती सुविधा JVM मध्ये नाही. शिवाय तशी सुविधा दिली असतीच तर पुन्हा दुसरी अडचण उभी रहाते ती म्हणजे कंन्स्ट्रक्टर over load होत असल्यामुळे JVM पुन्हा अडचणीत सापडू शकते… भरीस भर म्हणून कि काय JVM ला हे सुद्धा माहीत नसते की प्रोग्रॅमर ऑब्जेक्ट तयार करणार आहे की नाही…!
शिवाय जावा मधील क्लास मध्ये तुम्ही जे काही डिक्लेअर करता ते reference च्या स्वरूपात असते व ऑब्जेक्ट तयार करायलाच लागतो. पण स्टॅटीक डेटा व मेथड्स या JVM च्या घर-जावई असल्या प्रमाणे JVM च्या मेमरी मध्ये जातात. अर्थातच मेन फंक्शन स्टॅटीक केल्यामुळे ते सुद्धा JVM च्या अखत्यारीत येते व execute होते…
आपल्या
घरात प्रत्येक खोलीची प्रायव्हसी वेगवेगळी असते. बेडरूम प्रायव्हेट असते… तर किचन/हॉल
बऱ्यापैकी प्रोटेक्टेड कॅटेगरी मध्ये असतो. व्हरांडा वगैरे बंगल्या मध्ये असेल तर त्याला
आपण पब्लीक सारखी कॅटेगरी म्हणू शकतो. त्याच प्रमाणे क्लास मेंबर्स हे प्रायव्हेट,
पब्लीक अथवा प्रोटेक्टेड असतात. मेन फंक्शन हे बाहेरून कॉल झाल्या शिवाय प्रोग्रॅम
execution सुरू होउ शकत नाही म्हणून या मेन फंक्शनचा access specifier पब्लीक ठेवला
आहे.
C व C++ प्रमाणेच void हा मेन फंक्शनचा return type आहे.जावा मध्ये मेन फंक्शन काही रिटर्न करत नाही म्हणून सरळ-सरळ व्हॉइड रिटर्न टाइप वापरावा असा दंडक (rule) syntax च्या माध्यमातून घालून दिल्यामुळे C आणी C++ प्रमाणे मेन फंक्शनचा रिटर्न टाइप int लिहू कि void लिहू असा संभ्रम कायमचा निकालात काढून टाकला आहे. आता मेन फंक्शन पुर्वी व्हॉइडच का लिहायचे असा प्रश्न खुप जणांना सतावत असतो. याची अनेक प्रकारे कारणे देता येतील.
१.
जावा
डिझायनरनी तसा सिंटॅक्स दिला आहे व व तसे convention आहे
२.
त्यांना
म्हणजे जावा लॅंग्वेज डिझायनर्स प्रोग्रॅम execute झाला आहे हे ऑपरेटींग सिस्टीमला
सांगण्याची गरज आहे असे मानत नाहीत. ऑपरेटींग सिस्टीमला नंतर करावी लागणारी कामे जावाची
मेमरी मॅनेजमेंट चा विभाग विनासायास पार पाडतो.
३.
C,
C++ या लॅंग्वेजमधील प्रोग्रॅम शक्यतो single threading प्रोग्रॅम असतात. मेन हाच
program entry व exit point असतो. पण Java चे प्रोग्रॅम multi thread असू शकतात. शिवाय
जरी प्रोग्रॅमरने single thread प्रोग्रॅम लिहीला तरी JVM (Java Virtual Machine) आपल्या
सोयीसाठी त्याचे threads करते व स्वत: त्यामध्ये exit code असतो. म्हणून स्वतंत्र पणे
मेन रिटर्न करण्याचे बंधन ना प्रोग्रॅमरला घातले आहे ना स्वत:ला घालुन ठेवले आहे कारण
मेन फंक्शन व्यतीरीक्त इतर कोणताहि थ्रेड शेवटी संपू शकतो….!
हे
फंक्शन array of strings असे argument घेते व Java मध्ये String (string नाही) असा
प्रि-डिफाइंड क्लास आहे. कमांड लाइन वरून प्रोग्रॅम रन करतांना जावा interpreter ला
आपण जे arguments पाठवतो त्या सर्व स्ट्रिंगचे pointers मेन फंक्शन ला array च्या स्वरूपात
पाठवले जातात. म्हणुनच public static void main(String[ ] args) अशी फंक्शन
signature आहे.
मेन
फंक्शन कोणते argument घेते असे विचारल्यास अनेक विद्यार्थी args घेते असे ठोकुन देतात.
खरं तर args हे फक्त फॉर्मल व्हेअरेबल्स चे नाव आहे. त्याचे नाव कोणतेही ठेवले तरी
चालते. उत्तर देतांना array of pointers to string असे द्यायला हवे.
या
स्टेटमेंट (खरं तर हि फंक्शन डेफीनीशन म्हणायला हवी) मध्ये ठिकाणी पब्लीक व स्टॅटीक
च्या जागांची अदलाबदल केली तरी चालते पण void हा मात्र मेन फंक्शन पुर्वीच आला पाहीजे
कारण तोच तर कंपायलरला रिटर्न टाइप सांगण्याचे काम करतो.
आत्ताच
मी जावा मधील मेन फंक्शन च्या signature बद्दल बोलले. प्रत्येकाची signature म्हणजे
त्याची एक प्रकारची ओळख असते पण गंम्मत म्हणजे जावा मधील मेन फंक्शनची signature अनेक
प्रकारे लिहीता येइल… जसे की
1. public
static void main(String[ ] argument)
2. public
static void main(String argument[ ])
3. public
static void main(String... args)
4. public
static synchronized void main(String... args)
5. public
static strictfp void main(String... args)
6. public
static final void main(String... args)
Note:
Best piece of advice I got
when learning to program, and which I pass along to you, is don't worry about
the little details you don't understand right away. Get a broad overview of the
fundamentals, then go back and worry about the details. The reason is that you
have to use some things (like public static void) in your first programs which
can't really be explained well without teaching you about a bunch of other
stuff first. So, for the moment, just accept that that's the way it's done, and
move on. You will understand them shortly…. Quote by wellknown programmer
Wednesday, 11 May 2016
Wednesday, 11 February 2015
C Programming using Xcode
आपल्याकडे
C language मधून प्रोग्रॅम लिहायचा म्हणल्या नंतर TC, TCC, gcc या कंपायलरचा अथवा फार
फार तर CodeBlock या IDE बद्दल माहीत असते. कॉलेज, युनिव्हर्सिटी किंवा पर्सनल कंप्युटर Apple Mac मशीन्स आढळत नसल्यामुळे apple mac मशीन्स वर C चा प्रोग्रॅम लिहीता येतो का, कसा लिहायचा, कसा कंपाइल करायचा असे प्रश्न पडू शकतात.
या पोस्ट मध्ये थोडी-फार माहीती या बद्दलच... ऑनलाइन असतांना अगदीच कुणी तुम्हाला X-Code, iOS, OS-X असे शब्द वापरून अडचणीत आणू नये म्हणून...!
तर, Apple या कंपनीची वैशिष्ठे म्हणजे हार्डवेअर व सॉफ्टवेअर हे दोनही ते स्वत:च तयार करतात. Apple च्या कंम्प्युटर हार्डवेअर वर जी ऑपरेटींग सिस्टीम असते तीला शक्यतो OS-X या नावाने ओळखले जाते. गंम्मत म्हणजे या ही ऑपरेटींग सिस्टीम बांधायला UNIX operating systemचाच वापर केला आहे. या उलट Apple चे जे iPhone, iPad, iPod touch आहेत त्यावरील ऑपरेटींग सिस्टीमला i-OS असे नावाने ओळखले जाते.
OS-X हि ऑपरेटींग सिस्टीम संपुर्णपणे C, C++ आणी Objective-C मध्ये डेव्हलप केली आहे... हि UNIX base Graphical User Interface ऑपरेटींग सिस्टीम असल्यामुळे Apple ने ऑपरेटींग सिस्टीम मध्ये UNIX मधील X X या अक्षराचा वापर केला आहे.
Apple च्या जवळपास सर्व डेस्कटॉप ऑपरेटींग सिस्टीम्सची versions हि Cat family वरून घेतली आहेत जसे की Cheetah, Puma, Jaguar, Tiger, Leopard, Snow Leopard, Lion, Mountain Lion वगैरे. बाकी नावे आहेत ती Kodiak व सध्याचे Yosemite हि अमेरीके मधील काही पर्यटन स्थळावरून घेतली आहेत.
याशिवाय iOS हि सर्व मोबाइल ऑपरेटींग सिस्टीम ची versions लिहीण्यासाठी सुद्धा C, C++, Objective C सहीत swift या नव्या language चा वापर केला आहे. अर्थात डेस्कटॉप प्रमाणे याला नावे न शोधता iOS-4, iOS-5, iOS-6, iOS-7 आणी आत्ताची iOS-8 अशीच नावे दिली आहेत.
या दोनही प्रकारच्या ऑपरेटींग सिस्टीम बरोबर Xcode नावाचे जे पॅकेज आहे त्यामध्ये सर्व प्रकारची डेव्हलपमेंट टुल्स provide करून दिली आहेत. म्हणून Xcode ला Interactive Development Environment (IDE) असे म्हणतात. हे पॅकेज जर तुम्ही Apple mac मशीन वर घेतले तर C language वापरून IDE मध्ये प्रोग्रॅमिंग करू शकता अथवा Linux प्रमाणे terminal window चा वापर करून regular gcc commands देउन प्रोग्रॅम कंपाइल व रन करू शकता.
Monday, 20 October 2014
Treasures of C language
C programming
language मधील माहीत नसलेल्या गमती-जमती…!
सुरवातीच्या
म्हणजे Data Types in C पासून थेट file handling पर्यंत सर्व सिंटॅक्स व काही प्रोग्रॅम
सोडवून झाले की C language झाली एकदाची शिकुन असे म्हणून सुस्कारा सोडतात. त्या नंतरच
खरं तर C language मध्ये काय काय आहे ते पुढच्या आयुष्यात कळायला सुरवात होते. अर्थात
करीअर करण्याचा नादामध्ये प्रत्येकाला वेळ मिळेलच असे नाही. त्यांच्यासाठीच हि एक गमतीशीर
पोस्ट…
Initialization of array
C च्या
program मध्ये array initialize करण्याची पद्धत म्हणजे…
int num[5] = { 11,22,33,44,55 };
Array
initialize करण्याचा हा एकमेव मार्ग आहे. पण या Array मधील ठरावीच element initialize
करायचे असतील तर…? समजा या array मधील फक्त तिसरा व पाचवा element initialize करायचा
असेल तर…? तर तुम्ही array अशा पद्धतीने लिहू शकता…
int num[5] = {[2] = 33, [4] = 55};
गंम्मत
आहे ना…? शिवाय array मधील इतर element सुद्धा 0 ला initialize करण्याचे पवित्र कार्य
करून टाकतो…! माहीत होत तुम्हाला…? तुम्हाला सुद्धा खरचं असं काही भन्नाट माहीत असेल
तर जरूर कळवा मला…
Case inside decision and loop control structure
मेनू
ड्रिव्हन प्रोग्रॅमिंग करण्याची डेनीस ने दिलेली अफलातून सुविधा म्हणजे
switch-case control structure. याचा एक ठरावीक सिंटॅक्स असतो.. व तो तुम्हाला माहीत
असेलच. पण एखाद्या केस च्या आत लुप अथवा if-else block असेल तर त्याच्या आत सुद्धा
case असू शकते. कसं काय मॅनेज करत असेल हा कंपायलर…?
हा
प्रोग्रॅमच पहा ना दिसायला साधा आहे पण खरं तर चालू आहे…!
Case with range in switch case block
समजा
युझर ने एंटर केलेले कॅरेक्टर कॅपिटल आहे की स्मॉल असे आउटपुट हवे आहे व आपण स्विच-केस
ब्लॉक वापरून लिहीणार आहोत. तर तुम्ही case ला range देउ शकता…! जसे की हा प्रोग्रॅम कसा लिहीला आहे पहा...
अशाच काही अनेक गमती-जमती पुढील काही पोस्ट मध्ये...!
Monday, 25 August 2014
Function of getche function in C language
मागील पोस्ट मध्ये मी getch या फंक्शन बद्दल लिहीले होते. एकसारखीच दिसणारी पण वेगवेगळा स्वभाव असणारी ही फंक्शन्स मी जाणीवपुर्वक एकाच पोस्ट मध्ये न समजावून सांगता अनेक स्वतंत्र पोस्ट मध्ये लिहीन असे सांगीतले होते...
या पोस्ट मध्ये getche या फंक्शनचे उद्योग कसे असतात ते पाहू. दिसायला व वागायला getch या फंक्शनचा जणू जुळा भाऊ.
हे फंक्शन सुद्धा किबोर्ड कडून एक कॅरेक्टर कि-प्रेस accept करण्याचे काम करते. खरं तर getch फंक्शन हेच काम पार पाडते. पण getch फंक्शन कोणती कि accept करून घेतली हे सांगत नाही तर getche हे फंक्शन युझर कडून कोणती कि प्रेस केली ते सांगते... म्हणून तर getch या फंक्शन नावाच्या शेवटी e जोडून टाकला आहे.
या e चा अर्थ खरं तर echo असा आहे. Science मध्ये echo चा अर्थ reflection of sound waves असा आहे. पण कंप्युटरवाल्यांनी या शब्दाला सुद्धा import केले. किबोर्डकडून टाइप होणारे कॅरेक्टर स्क्रीन वर प्रिंट करण्याच्या सवयीला सुद्धा echo म्हणतात....!
अनेक browsers वर पासवर्ड भरतांना अथवा जवळपास सगळ्या ATM मशीन वर PIN भरतांना password हा डिसप्ले होतांना ****** अशा स्वरुपात दिसतो...
आता स्ट्रिंग, लुप, इफ-एल्स, आणी त्यासोबत getch, getche या सारखी फंक्शन्स तुम्हाला कळाली असतील तरच तुम्हाला हा प्रोग्रॅम लिहीता येइल. मी प्रोग्रॅम रन झाल्यानंतर कसा रन होइल त्याची output window या ठिकाणी देत आहे.
करा हवं तर प्रयत्न प्रोग्रॅम लिहीण्याचा... सोर्स कोड मात्र स्वत: लिहायचा प्रयत्न करा. विनाकारण google करत बसू नका...
मी नंतर काही काळाने सोर्स कोड टाकते तुमच्या साठी.
उर्वरीत unformatted functions पुढील पोस्ट मध्ये...
या पोस्ट मध्ये getche या फंक्शनचे उद्योग कसे असतात ते पाहू. दिसायला व वागायला getch या फंक्शनचा जणू जुळा भाऊ.
हे फंक्शन सुद्धा किबोर्ड कडून एक कॅरेक्टर कि-प्रेस accept करण्याचे काम करते. खरं तर getch फंक्शन हेच काम पार पाडते. पण getch फंक्शन कोणती कि accept करून घेतली हे सांगत नाही तर getche हे फंक्शन युझर कडून कोणती कि प्रेस केली ते सांगते... म्हणून तर getch या फंक्शन नावाच्या शेवटी e जोडून टाकला आहे.
या e चा अर्थ खरं तर echo असा आहे. Science मध्ये echo चा अर्थ reflection of sound waves असा आहे. पण कंप्युटरवाल्यांनी या शब्दाला सुद्धा import केले. किबोर्डकडून टाइप होणारे कॅरेक्टर स्क्रीन वर प्रिंट करण्याच्या सवयीला सुद्धा echo म्हणतात....!
अनेक browsers वर पासवर्ड भरतांना अथवा जवळपास सगळ्या ATM मशीन वर PIN भरतांना password हा डिसप्ले होतांना ****** अशा स्वरुपात दिसतो...
आता स्ट्रिंग, लुप, इफ-एल्स, आणी त्यासोबत getch, getche या सारखी फंक्शन्स तुम्हाला कळाली असतील तरच तुम्हाला हा प्रोग्रॅम लिहीता येइल. मी प्रोग्रॅम रन झाल्यानंतर कसा रन होइल त्याची output window या ठिकाणी देत आहे.
करा हवं तर प्रयत्न प्रोग्रॅम लिहीण्याचा... सोर्स कोड मात्र स्वत: लिहायचा प्रयत्न करा. विनाकारण google करत बसू नका...
मी नंतर काही काळाने सोर्स कोड टाकते तुमच्या साठी.
उर्वरीत unformatted functions पुढील पोस्ट मध्ये...
Friday, 15 August 2014
Function of getch function in C language
DOS based TC compiler वापरतांना प्रथमच C language शिकणाऱ्या प्रोग्रॅमरना "getch हे फंक्शन मेन फंक्शन मध्ये शेवटी लिहायचे असते" किंवा फार-फार तर "का लिहायचे" इतकेच माहीत असते. या पलीकडे getch, getche, getchar, gets, fget, इत्यादी एकसारखी फंक्शन्स अंगावर आली की गोंधळ होतोच. म्हणूनच ही पोस्ट. अर्थात हा गोंधळ कमी करण्यासाठी. हा गोंधळ पुर्णपणे जाइल याची शाश्वती मी देत नाही कारण इतक्या वर्षाच्या अनुभवानंतर मला ती पोस्ट लिहायची इच्छा झाली.
या सर्व फंक्शन बद्दल लिहीण्यासारखे व सांगण्यासारखे खुप असल्यामुळे मी या ठिकाणी एकाच पोस्ट मध्ये सर्व फंक्शन्स न घेता अनेक स्वतंत्र पोस्ट मध्ये लिहीन...
प्रथम आपण ही कोणती कोणती फंक्शन्स आहेत पाहुया.
C language programming शिकायला सुरवात केल्यानंतर पहील्या १-२ दिवसातच printf व scanf शिवाय जर कोणते फंक्शन विद्यार्थी वापरत असतील तर ते getch library function. DOS based TC वर प्रोग्रॅम रन करायचा व नंतर output दिसले नाही तर getch function प्रोग्रॅमच्या शेवटी टाकायचे असते अशीच समजूत अनेक जणांची झालेली असते. खरं तर getch function हे get character from the keyboard या मधून तयार झाले आहे...
या फंक्शनचा prototype तुम्हाला conio.h या header file मध्ये मिळेल म्हणून ही फाइल DOS based TC environment मध्ये stdio.h या हेडर फाइल प्रमाणेच include केली जाते.
हे फंक्शन आपण ज्या ठिकाणी प्रोग्रॅम मध्ये लिहू व जितके वेळा लिहू त्या-त्या ठिकाणी तेवढ्या वेळा तुम्हाला कि प्रेस करावी लागेल. मगं ते एखादे युझर इनपुट असेल अथवा फक्त स्पेसबार असेल. किबोर्ड कडून कि-प्रेस पर्यंत console वर असलेला कर्सर तुमच्या किप्रेस ची वाट पहात असेल. डॉस बेस्ड TC compiler वर काम करतांना सुरवातीला हे फंक्शन वापरावेच लागते कारण output पहाण्यासाठी कंन्सोल window थोपवुन ठेवण्याचे काम getch कडुन पार पाडले जाते. पण या फंक्शनचे अनेक उपयोग नंतर करता येतात.
आता या प्रोग्रॅम मध्ये स्पेशल पद्धतीने जो लुप लिहीला आहे त्या मध्ये scanf function हे कॅरेक्टर input घेत आहे. जर तुम्हाला अजून एक नंबर भरायचा असेल तर y enter करायचा व या ठिकाणीच थांबायचे असेल व प्रोग्रॅम मधून बाहेर पडायचे असेल तर n enter करायचा अशा प्रकारची व्यवस्था या ठिकाणी केली आहे. scanf function हे एक कॅरेक्टर (y अथवा n) भरल्यानंतर enter key मारायला लागते.
अशा प्रकारच्या situation मध्ये तुम्ही scanf function च्या ऐवजी ch = getch() असे स्टेटमेंट जर लिहीले तर युझर ने एंटर केलेले कॅरेक्टर (y अथवा n) getch function कडून immediately accept होइल व त्याच क्षणी ch या व्हेअरेबल ला assign करण्याचे काम करेल. या ठिकाणी getch function च्या वापरांने तुमचे दोन फायदे होतील. एक म्हणजे जे कॅरेक्टर (y अथवा n) भरले आहे ते तुम्हाला दिसणार नाही व ते दिसायची गरज सुद्धा नाही. दुसरा फायदा म्हणजे तुम्हाला enter key प्रेस करण्याची गरज भासत नाही.
getch या फंक्शनचा prototype जर पाहीला तर तो char getch(void) असा आहे. त्यामुळे getch फंक्शन हे किबोर्ड कडूण accept केलेले character आहे तसे return करण्याचे काम करते. नेमकी हीच सुविधा वापरून हे रिटर्न केलेले कॅरेक्टर आपण ch या कॅरेक्टर व्हेअरेबल मध्ये collect करतो.
कधी-कधी प्रोग्रॅमचे आउटपुट अर्धी अथवा जवळपास पुर्ण स्क्रीन भरेल असे असते. हे आउटपुट लुपच्या प्रत्येक iteration मध्ये मिळते. अशावेळी पुढील iteration चे आउटपुट स्वतंत्रपणे दिसण्यासाठी सुद्धा तुम्ही clear screen व getch फंक्शनची जोडी loop मध्ये वापरू शकता.
अर्थात अशा प्रकारचे उपयोग प्रोग्रॅम करतांना कळतात. पुस्तकात असे reference शक्यतो आढळत नाहीत.
अर्थात ही पोस्ट जे विद्यार्थी DOS based TC compiler वापरतात त्यांच्यासाठीच उपयोगी आहे. Linux अथवा Unix systems वर अशा प्रकारचे फंक्शन आस्तितवात नाही कारण conio.h ही header file अन्य कोणत्याही OS वर त्याचा समावेश नाही. खरं तर conio.h हि header file मुळच्या C च्या compiler library मध्ये नव्हती. Borland International ने TC compiler launch करतांना conio.h चा समावेश केला. पण या फाइल ला standard म्हणून कधी मिळालेच नाही...!
Linux, Unix अथवा Windows based compiler मध्ये program चे output बघण्यासाठी getch सारख्या फंक्शनची व्यवस्था करण्याची गरज सुद्धा नसते. कारण output window होल्ड करण्याची in-built सुविधा या सर्वांमध्ये आहे. अन्य ठिकाणी कॅरेक्टर input करण्यासाठी मात्र त्या कंपायलर मधील अन्य सुविधा तपासण्याशिवाय तुम्हाला गत्यंतर नाही हे लक्षात असु द्या...!
Linux/Unix मध्ये curses व ncurses अशा काही लायब्ररी उपलब्ध आहेत ज्यामध्ये डोकावुन तुम्हाला नेमके काय हवे तसे फंक्शन वापरावे लागेल...!
या सर्व फंक्शन बद्दल लिहीण्यासारखे व सांगण्यासारखे खुप असल्यामुळे मी या ठिकाणी एकाच पोस्ट मध्ये सर्व फंक्शन्स न घेता अनेक स्वतंत्र पोस्ट मध्ये लिहीन...
प्रथम आपण ही कोणती कोणती फंक्शन्स आहेत पाहुया.
- getch
- getche
- getchar
- fgetchar
- gets
- getc
- fgetc
- fgets
C language programming शिकायला सुरवात केल्यानंतर पहील्या १-२ दिवसातच printf व scanf शिवाय जर कोणते फंक्शन विद्यार्थी वापरत असतील तर ते getch library function. DOS based TC वर प्रोग्रॅम रन करायचा व नंतर output दिसले नाही तर getch function प्रोग्रॅमच्या शेवटी टाकायचे असते अशीच समजूत अनेक जणांची झालेली असते. खरं तर getch function हे get character from the keyboard या मधून तयार झाले आहे...
या फंक्शनचा prototype तुम्हाला conio.h या header file मध्ये मिळेल म्हणून ही फाइल DOS based TC environment मध्ये stdio.h या हेडर फाइल प्रमाणेच include केली जाते.
हे फंक्शन आपण ज्या ठिकाणी प्रोग्रॅम मध्ये लिहू व जितके वेळा लिहू त्या-त्या ठिकाणी तेवढ्या वेळा तुम्हाला कि प्रेस करावी लागेल. मगं ते एखादे युझर इनपुट असेल अथवा फक्त स्पेसबार असेल. किबोर्ड कडून कि-प्रेस पर्यंत console वर असलेला कर्सर तुमच्या किप्रेस ची वाट पहात असेल. डॉस बेस्ड TC compiler वर काम करतांना सुरवातीला हे फंक्शन वापरावेच लागते कारण output पहाण्यासाठी कंन्सोल window थोपवुन ठेवण्याचे काम getch कडुन पार पाडले जाते. पण या फंक्शनचे अनेक उपयोग नंतर करता येतात.
आता या प्रोग्रॅम मध्ये स्पेशल पद्धतीने जो लुप लिहीला आहे त्या मध्ये scanf function हे कॅरेक्टर input घेत आहे. जर तुम्हाला अजून एक नंबर भरायचा असेल तर y enter करायचा व या ठिकाणीच थांबायचे असेल व प्रोग्रॅम मधून बाहेर पडायचे असेल तर n enter करायचा अशा प्रकारची व्यवस्था या ठिकाणी केली आहे. scanf function हे एक कॅरेक्टर (y अथवा n) भरल्यानंतर enter key मारायला लागते.
अशा प्रकारच्या situation मध्ये तुम्ही scanf function च्या ऐवजी ch = getch() असे स्टेटमेंट जर लिहीले तर युझर ने एंटर केलेले कॅरेक्टर (y अथवा n) getch function कडून immediately accept होइल व त्याच क्षणी ch या व्हेअरेबल ला assign करण्याचे काम करेल. या ठिकाणी getch function च्या वापरांने तुमचे दोन फायदे होतील. एक म्हणजे जे कॅरेक्टर (y अथवा n) भरले आहे ते तुम्हाला दिसणार नाही व ते दिसायची गरज सुद्धा नाही. दुसरा फायदा म्हणजे तुम्हाला enter key प्रेस करण्याची गरज भासत नाही.
getch या फंक्शनचा prototype जर पाहीला तर तो char getch(void) असा आहे. त्यामुळे getch फंक्शन हे किबोर्ड कडूण accept केलेले character आहे तसे return करण्याचे काम करते. नेमकी हीच सुविधा वापरून हे रिटर्न केलेले कॅरेक्टर आपण ch या कॅरेक्टर व्हेअरेबल मध्ये collect करतो.
कधी-कधी प्रोग्रॅमचे आउटपुट अर्धी अथवा जवळपास पुर्ण स्क्रीन भरेल असे असते. हे आउटपुट लुपच्या प्रत्येक iteration मध्ये मिळते. अशावेळी पुढील iteration चे आउटपुट स्वतंत्रपणे दिसण्यासाठी सुद्धा तुम्ही clear screen व getch फंक्शनची जोडी loop मध्ये वापरू शकता.
अर्थात अशा प्रकारचे उपयोग प्रोग्रॅम करतांना कळतात. पुस्तकात असे reference शक्यतो आढळत नाहीत.
अर्थात ही पोस्ट जे विद्यार्थी DOS based TC compiler वापरतात त्यांच्यासाठीच उपयोगी आहे. Linux अथवा Unix systems वर अशा प्रकारचे फंक्शन आस्तितवात नाही कारण conio.h ही header file अन्य कोणत्याही OS वर त्याचा समावेश नाही. खरं तर conio.h हि header file मुळच्या C च्या compiler library मध्ये नव्हती. Borland International ने TC compiler launch करतांना conio.h चा समावेश केला. पण या फाइल ला standard म्हणून कधी मिळालेच नाही...!
Linux, Unix अथवा Windows based compiler मध्ये program चे output बघण्यासाठी getch सारख्या फंक्शनची व्यवस्था करण्याची गरज सुद्धा नसते. कारण output window होल्ड करण्याची in-built सुविधा या सर्वांमध्ये आहे. अन्य ठिकाणी कॅरेक्टर input करण्यासाठी मात्र त्या कंपायलर मधील अन्य सुविधा तपासण्याशिवाय तुम्हाला गत्यंतर नाही हे लक्षात असु द्या...!
Linux/Unix मध्ये curses व ncurses अशा काही लायब्ररी उपलब्ध आहेत ज्यामध्ये डोकावुन तुम्हाला नेमके काय हवे तसे फंक्शन वापरावे लागेल...!
Labels:
Borland International,
conio.h,
DOS,
fgetc,
fgetchar,
function,
getc,
getch function,
getchar,
getche function,
header file,
Library functions,
Linux,
loop,
prototype,
stdio.h,
TC compiler,
Unix,
void,
Windows
Subscribe to:
Posts (Atom)