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 पुढील पोस्ट मध्ये... 
   

Friday, 15 August 2014

Function of getch function in C language

DOS based TC compiler वापरतांना प्रथमच C language शिकणाऱ्या प्रोग्रॅमरना "getch हे फंक्शन मेन फंक्शन मध्ये शेवटी लिहायचे असते" किंवा फार-फार तर "का लिहायचे" इतकेच माहीत असते. या पलीकडे getch, getche, getchar, gets, fget, इत्यादी एकसारखी फंक्शन्स अंगावर आली की गोंधळ होतोच. म्हणूनच ही पोस्ट. अर्थात हा गोंधळ कमी करण्यासाठी. हा गोंधळ पुर्णपणे जाइल याची शाश्वती मी देत नाही कारण इतक्या वर्षाच्या अनुभवानंतर मला ती पोस्ट लिहायची इच्छा झाली.  

या सर्व फंक्शन बद्दल लिहीण्यासारखे व सांगण्यासारखे खुप असल्यामुळे मी या ठिकाणी एकाच पोस्ट मध्ये सर्व फंक्शन्स न घेता अनेक स्वतंत्र पोस्ट मध्ये लिहीन... 


प्रथम आपण ही कोणती कोणती फंक्शन्स आहेत पाहुया. 
  1. getch
  2. getche
  3. getchar
  4. fgetchar
  5. gets
  6. getc
  7. fgetc
  8. fgets
getch( )
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 अशा काही लायब्ररी उपलब्ध आहेत ज्यामध्ये डोकावुन तुम्हाला नेमके काय हवे तसे फंक्शन वापरावे लागेल...! 


Saturday, 24 May 2014

तऱ्हेवाईक चुका...! (Types of Errors in C Language)



अनेक विद्यार्थ्यांची C हीच पहीली प्रोग्रॅमिंग लॅंग्वेज असते. त्यामुळे प्रोग्रॅम लिहीण्यापेक्षा तो कंपाइल व रन करून पुढील प्रोग्रॅमला जाण्याची अतोनात घाई कायम दिसते. नंतर ती घाई कमी होत जाते हा भाग वेगळा…! पण सुरवातीला तर कंपाइल केलेल्या कोड मध्ये zero errors आहेत ना या कडेच सर्व लक्ष केंद्रीत असते. त्यावेळी काही warning असल्या तर अर्थातच त्या दुर्लक्षीत केल्या जातात.

हाच धागा पकडून मी C programming मध्ये कोणत्या स्वरूपाच्या errors असतात हे लिहीणार आहे. आवडले तर वाचा नाहीतर warning सारखे सोडून द्या…!


C programming language मध्ये Errors ची वर्गवारी 3 प्रकारात करता येइल.
  1. Compiler Message 
    1. Compiler Warnings
    2. Compile Time Errors
  2. Linker Errors
  3. Run time errors
    1. Fatal Errors
    2. Logical Errors
Compiler Message
कंपायलर च्या सहाय्याने आपण लिहीलेला सोर्स कोड मशीन कोड मध्ये convert करण्याचा प्रयत्न करतांना जर काही अडचणी आल्या तर युझर ला तो (कंपायलर) message च्या स्वरूपात देण्याचा प्रयत्न करतो
Compiler Warning
Warning अर्थ असा असतो की तुम्ही कोड मध्ये काही तरी चुकला आहात. नियम बाह्य पद्धतीने कोडचा काही भाग लिहीला आहे. पण त्या इतक्याही गंभीर नाहीत की कोड कंपाइल होणार नाही. त्या फक्त सुचना असतात. तुम्ही दुर्लक्ष करून पुढे गेला तर प्रोग्रॅम कंपाइल होतो. पण पुढे अशा काही अडचणी आल्या तर या शोधायला फार वेळ लागतो. म्हणून compiler warning कडे दुर्लक्ष करू नये. समजा तुम्ही main function चा रिटर्न टाईप integer लिहीला आहे व return 0 स्टेटमेंट लिहायचे विसरून गेला तर तुम्हाला warning मिळेल
Compiler Errors
तुमच्या सोर्स कोड मध्ये काही चुका अशा केल्या आहेत ज्या मुळे कोड कंपाइल करायला म्हणजेच मशीन कोड मध्ये convert करायला अडचणी येत आहेत अशा प्रकारच्या सुचनांना compiler errors म्हणतात. या मध्ये तुम्ही कोड दुरूस्त केल्या शिवाय पुढे जाउ शकत नाही. शक्यतो या लॅंग्वेजच्या सिंटॅक्स संबंधी असतात. उदा. semi colon किंवा फंक्शन चा closing brace अथवा अर्धवट double quote pair अशा मुळे त्या येतात. व्हेअरेबल डिक्लेअर न करता जरी वापरण्याचा प्रयत्न केला तर तुम्हाला कंपाइल टाइम एरर मिळेल
Errors आणी warnings या शक्यतो लाइन नंबर्स सहीत देण्याचे काम कंपायलर करतो. प्रत्येक कंपायलरची पद्धत थोडीफार वेगवेगळी असू शकते. शिवाय error अथवा warning शोधतांना message मध्ये असणारा line number व त्या अलीकडील line सुद्धा तपासून पहावी


Linker Errors
प्रोग्रॅम कंपाइल केल्या नंतर execution च्या पुर्वी link करण्याचा exclusive option कंपायलर मध्ये असू शकतो. अथवा execution करतांना सुद्धा linker error मिळु शकते. तुम्ही कॉल केलेल्या फंक्शन ची definition मिळाली नाही अथवा लायब्ररी मधील फाइल अथवा लायब्ररी मिळाली नाही तर तुमच्या तयार झालेल्या object file ला इतर object file शी linking न झाल्यामुळे व executable तयार होत नसल्यामुळे तुम्हाला linker error मिळेल. तुम्ही include केलेल्या library चा path चुकला असेल तरी सुद्धा तुम्हाला linker error मिळू शकते

Run Time Errors
प्रोग्रॅम कंपाइल व लिंक झाल्या नंतर रन करतांना सुद्धा अडचणी येउ शकतात. या वेळी येणाऱ्या अडचणींना व मिळणाऱ्या messages ना run time errors म्हणता येइल. गंमत म्हणजे या प्रोग्रॅम रन होतांना अथवा पुर्णपणे रन झाल्यानंतर सुद्धा येउ शकतात.      
Fatal Error
तुमची executable file crash करण्याची अथवा होण्याची शक्यता असणाऱ्या प्रोग्रॅम मधील काही चुकांमुळे या errors मिळतात. Array चा इंडेक्स, pointer, इत्यादी मुळे जर आल्या तर त्याला आपण segmentation fault म्हणतो. अथवा एखाद्या नंबर ला zero ने divide केल्यामुळे सुद्धा fatal error येते.

Logical Error
तुम्हाला एखादे स्टेटमेंट हवे तसे execute न होता भलत्याच पद्धतीने execute होते व वरील पैकी कोणत्याच प्रकारची error न मिळता output मिळते पण चुकीचे output मिळते. अथवा काहीवेळा बरोबर व काहीवेळा चुकीचे output मिळते अशा प्रकारच्या unpredictable errors ना logical errors म्हणतात. शोधायला सर्वात अवघड म्हणजे या errors कारण याचे कारण शोधुन काढायला लागते. शक्यतो कोणत्याही प्रकारचा message मिळत नाही
For similar interesting notes and audio visual e-contents visit our site C Marathi
For similar notes in Marathi on programming languages visit our blog C Marathi Blog
 

 
 

Do you like the C Marathi e-learning concept?