OBJECT ORIENTED AND MULTICORE PROGRAMMING LABORATORY

Similar documents
Introduction Of Classes ( OOPS )

Object Oriented Programming. A class is an expanded concept of a data structure: instead of holding only data, it can hold both data and functions.

OBJECT ORIENTED PROGRAMMING USING C++ CSCI Object Oriented Analysis and Design By Manali Torpe

END TERM EXAMINATION

VALLIAMMAI ENGINEERING COLLEGE

Object Oriented Programming. Assistant Lecture Omar Al Khayat 2 nd Year

I BCS-031 BACHELOR OF COMPUTER APPLICATIONS (BCA) (Revised) Term-End Examination. June, 2015 BCS-031 : PROGRAMMING IN C ++

Short Notes of CS201

CS201 - Introduction to Programming Glossary By

VALLIAMMAI ENGNIEERING COLLEGE SRM Nagar, Kattankulathur DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING QUESTION BANK

Lesson Plan. Subject: OBJECT ORIENTED PROGRAMMING USING C++ :15 weeks (From January, 2018 to April,2018)


Object Oriented Programming 2012

Jayaram college of Engineering and Technology, Pagalavadi. CS2203 Object Oriented Programming Question Bank Prepared By: S.Gopalakrishnan, Lecturer/IT

Object oriented programming with C++

3.Constructors and Destructors. Develop cpp program to implement constructor and destructor.

CS 6456 OBJCET ORIENTED PROGRAMMING IV SEMESTER/EEE

Chapter 1: Object-Oriented Programming Using C++

Interview Questions of C++

SRM ARTS AND SCIENCE COLLEGE SRM NAGAR, KATTANKULATHUR

Savitribai Phule Pune University, Pune Second Year of Computer Engineering (2015 Course) : Object Oriented Programming Lab Teaching Scheme

Get Unique study materials from

PROGRAMMING IN C AND C++:

Cpt S 122 Data Structures. Course Review Midterm Exam # 2

SHREE RAMCHANDRA COLLEGE OF ENGINEERING. Laboratory Manual

Classes: Member functions // classes example #include <iostream> using namespace std; Objects : Reminder. Member functions: Methods.

1. Describe History of C++? 2. What is Dev. C++? 3. Why Use Dev. C++ instead of C++ DOS IDE?

Unit IV Contents. ECS-039 Object Oriented Systems & C++

JAYARAM COLLEGE OF ENGINEERING AND TECHNOLOGY Pagalavadi, Tiruchirappalli (An approved by AICTE and Affiliated to Anna University)

Syllabus for Bachelor of Technology. Computer Engineering. Subject Code: 01CE1303. B.Tech. Year - II

Babaria Institute of Technology Computer Science and Engineering Department Practical List of Object Oriented Programming with C

Object Oriented Programming(OOP).

STRUCTURING OF PROGRAM

Time : 3 hours. Full Marks : 75. Own words as far as practicable. The questions are of equal value. Answer any five questions.

PVG s College of Engineering Nashik. Department of Computer Engineering OBJECT ORIENTED PROGRAMMING LABORATORY

Data Structures using OOP C++ Lecture 3

KOM3191 Object Oriented Programming Dr Muharrem Mercimek OPERATOR OVERLOADING. KOM3191 Object-Oriented Programming

CS201 Some Important Definitions

OBJECT ORIENTED PROGRAMMING. Ms. Ajeta Nandal C.R.Polytechnic,Rohtak

AN OVERVIEW OF C++ 1

Next week s homework. Classes: Member functions. Member functions: Methods. Objects : Reminder. Objects : Reminder 3/6/2017

Object-Oriented Programming

Cpt S 122 Data Structures. Introduction to C++ Part II

CS304 Object Oriented Programming Final Term

STUDY NOTES UNIT 1 - INTRODUCTION TO OBJECT ORIENTED PROGRAMMING

More C++ : Vectors, Classes, Inheritance, Templates. with content from cplusplus.com, codeguru.com

Preface... (vii) CHAPTER 1 INTRODUCTION TO COMPUTERS

Inheritance, and Polymorphism.

DHANALAKSHMI COLLEGE OF ENGINEERING, CHENNAI DEPARTMENT OF ELECTRICAL AND ELECTRONICS ENGINEERING CS6456 OBJECT ORIENTED PROGRAMMING

More C++ : Vectors, Classes, Inheritance, Templates

Introduction to Programming Using Java (98-388)

CS 376b Computer Vision

Object-Oriented Programming (OOP) Fundamental Principles of OOP

Tokens, Expressions and Control Structures

Introduction to C++ Systems Programming

Computer Programming C++ (wg) CCOs

calling a function - function-name(argument list); y = square ( z ); include parentheses even if parameter list is empty!

Programming, numerics and optimization

CHOICE BASED CREDIT SYSTEM (With effect from )

Object Oriented Programming. Solved MCQs - Part 2

Object-Oriented Programming

Constructor - example

Data type of a pointer must be same as the data type of the variable to which the pointer variable is pointing. Here are a few examples:

Introduction to Computers and C++ Programming p. 1 Computer Systems p. 2 Hardware p. 2 Software p. 7 High-Level Languages p. 8 Compilers p.

Absolute C++ Walter Savitch

C++ Programming Fundamentals

PROGRAMS. EXCELLENT ACADEMY OF ENGINEERING. Telephone: / NORMAL PROGRAM

Intro to OOP Visibility/protection levels and constructors Friend, convert constructor, destructor Operator overloading a<=b a.

Course Text. Course Description. Course Objectives. StraighterLine Introduction to Programming in C++

Object-Oriented Design (OOD) and C++

Introduction to C++ Friends, Nesting, Static Members, and Templates Topic #7

B.C.A 2017 OBJECT ORIENTED PROGRAMMING USING C++ BCA303T MODULE SPECIFICATION SHEET

22316 Course Title : Object Oriented Programming using C++ Max. Marks : 70 Time: 3 Hrs.

RAJIV GANDHI COLLEGE OF ENGINEERING AND TECHNOLOGY DEPARTMENT OF INFORMATION TECHNOLOGY OBJECT ORIENTED PROGRAMMING QUESTION BANK UNIT I 2 MARKS

Object Oriented Programming

Recharge (int, int, int); //constructor declared void disply();

+2 Volume II OBJECT TECHNOLOGY OBJECTIVE QUESTIONS R.Sreenivasan SanThome HSS, Chennai-4. Chapter -1

PROGRAMMING IN C++ COURSE CONTENT

OBJ. ORI.& MULT. PROG., M.C.Q. BANK, FOR UNIT -2, SECOND YEAR COMP. ENGG. SEM-4, 2012 PATTERN, U.O.P. UNIT-2

Input And Output of C++

Preface to the Second Edition Preface to the First Edition Brief Contents Introduction to C++ p. 1 A Review of Structures p.

COIMBATORE EDUCATIONAL DISTRICT

I BSc(IT) [ Batch] Semester II Core: Object Oriented Programming With C plus plus - 212A Multiple Choice Questions.

And Even More and More C++ Fundamentals of Computer Science

Problem Solving with C++

CS3157: Advanced Programming. Outline

CMSC 202 Section 010x Spring Justin Martineau, Tuesday 11:30am

KLiC C++ Programming. (KLiC Certificate in C++ Programming)

CGS 2405 Advanced Programming with C++ Course Justification

Fast Introduction to Object Oriented Programming and C++

Sri Vidya College of Engineering & Technology

11. Arrays. For example, an array containing 5 integer values of type int called foo could be represented as:


CS304 Object Oriented Programming

PROGRAMMING IN C++ (Regulation 2008) Answer ALL questions PART A (10 2 = 20 Marks) PART B (5 16 = 80 Marks) function? (8)

OOPS Viva Questions. Object is termed as an instance of a class, and it has its own state, behavior and identity.

Object Oriented Design

CS201- Introduction to Programming Current Quizzes

A brief introduction to C++

Module Operator Overloading and Type Conversion. Table of Contents

Transcription:

LABORATORY MANUAL OBJECT ORIENTED AND MULTICORE PROGRAMMING LABORATORY SE-COMP SEMESTER-II TEACHING SCHEME EXAMINATION SCHEME Lectures: 3 Hrs/Week Theory: 50 Marks Practical: 2 Hrs/Week On-Line: 50 Marks Practical: 50 Marks Term Work: 25 Marks DEPARTMENT OF COMPUTER ENGINEERING DNYANGANGA COLLEGE OF ENGINEERING AND RESEARCH, PUNE 2014-2015 ZES s DCOER, Pune-411041 Page 1

LIST OF ASSIGNMENTS Subject: Object Oriented and Multicore Programming Subject Code: 210247 Group A 1. Create a class named weather report that holds a daily weather report with data member day_of_month, hightemp, lowtemp, amount_rain and amount_snow. The constructor initializes the fields with default values: 99 for day_of_month, 999 for hightemp,-999 for low emp and 0 for amount_rain and amount_snow. Include a function that prompts the user and sets values for each field so that you can override the default values. Write a C++/Java/Python program that creates a monthly report. a) Menu driven program with options to Enter data and Display report b) Report Format 2. A book shop maintains the inventory of books that are being sold at the shop. The list includes details such as author, title, price, publisher and stock position. Whenever a customer wants a book, the sales person inputs the title and author and the system searches the list and displays whether it is available or not. If it is not, an appropriate message is displayed. If it is, then the system displays the book details and requests for the number of copies required. If the requested copies book details and requests for the number of copies required. If the requested copies are available, the total cost of the requested copies is displayed; otherwise the message Required copies not in stock is displayed.design a system using a class called books with suitable member functions and Constructors. Use new operator in constructors to allocate memory space required.implement C++ program for the system. 3. Develop an object oriented program in C++ to create a database of the personnel information system containing the following information: Name, Date of Birth, Blood group, Height, Weight, Insurance Policy, number, Contact address, telephone number, driving license no. etc ZES s DCOER, Pune-411041 Page 2

Construct the database with suitable member functions for initializing and destroying the data viz constructor, default constructor, copy, constructor, destructor, static member functions, friend class, this pointer, inline code and dynamic memory allocation operators-new and delete. 4. Design a C++ Class Complex with data members for real and imaginary part. Provide default and parameterized constructors. Write a program to perform arithmetic operations of two complex numbers using operator overloading (using either member functions or friend functions). 5. Write a C++ program to perform String operations i. = Equality ii. == String Copy iii. + Concatenation iv. << To display a string v. >> To reverse a string vi. Function to determine whether a string is a palindrome To find occurrence of a sub-string. Use Operator Overloading. 6. Develop an object oriented program in C++ to create a database of the personnel information system containing the following information: Name, Date of Birth, Blood group, Height, Weight, Insurance Policy number, Contact address, telephone number, driving licence no. etc Construct the database with suitable member functions for initializing and destroying the data viz constructor, default constructor, copy constructor, destructor, static member functions, friend class, this pointer, inline code and dynamic memory allocation operators-new and delete. 7. Write a program in C++ using function template to read two matrices of different data types such as integers and floating point values and perform simple arithmetic operations on these matrices separately and display it. 8. Design a C++ base class consisting of the data members such as name of the student, roll number and subject. The derived class consists of the data members subject code, internal assessment and university examination ZES s DCOER, Pune-411041 Page 3

marks. Construct a virtual base class for the item name of the student and roll number. The program should have the facilities. i) Build a master table ii) List a table iii) Insert a new entry iv) Delete old entry v) Edit an entry vi) Search for a record 9. Create a C++ class named Television that has data members to hold the model number and the screen size in inches, and the price. Member functions include overloaded insertion and extraction operators. If more than four digits are entered for the model, if the screen size is smaller than 12 or greater than 70 inches, or if the price is negative or over $5000 then throw an integer. Write a main() function that instantiates a television object, allows user to enter data and displays the data members.if an exception is caught, replace all the data member values with zero values. Group B 1. Implement C++/Java/Python program to create a base class called shape. Use this class to store two double type values that could be used to compute the area of figures. Derive two specific classes called function get_data() to initialize base class data members and another member function display_area() to compute and display the area of figures. Make classes to suit their requirements. Using these three classes, design a program that will accept dimension of a triangle or a rectangle interactively, and display the area. Remember the two values given as input will be treated as lengths of two sides in the case of rectangles, and as base and height in the case of triangles, and used as follows: Area of rectangle= x*y Area of triangle =1/2*x*y 2. Implement C++/Java/Python program to implement a base class consisting of the data members such as name of the student, roll number and subject. The derived class consists of the data members subject code,internal assessment and university examination marks. The program ZES s DCOER, Pune-411041 Page 4

should have the facilities. i) Build a master table ii) List a table iii) Insert a new entry iv) Delete old entry v) Edit an entry vi) Search for a record. Use virtual functions. 3. Implement C++/Java/Python program to write a class template to represent a generic vector. Include following member functions: To create the vector. To modify the value of a given element To multiply by a scalar value To display the vector in the form (10,20,30, ) 4. Implement C++/Java/Python program for bubble sort using function template 5. Write a C++/Java program for the following: Create a class named Television that has data members to hold the model number and the screen size in inches, and the price. Member functions include overloaded insertion and extraction operators. If more than four digits are entered for the model, if the screen size is smaller than 12 or greater than 70 inches, or if the price is negative or over $5000 then throw an exception. Write a main() function that instantiates a television object, allows user to enter data and displays the data members.if an exception is caught,replace all the data member values with zero values. Group C 1. Write a concurrent program to implement the Odd-Even Merge Sort. Effective use of Multicore Architecture Core 1 and Core 2 effectively is expected. 2. Write a concurrent program to implement the Dining philosopher s problem. Effective use of Multicore Architecture is expected. ZES s DCOER, Pune-411041 Page 5

GROUP A: ASSIGNMENTS (All Mandatory) ZES s DCOER, Pune-411041 Page 6

Experiment No:1 Title: Monthly Weather Report using Constructor, Destructor. Aim: Create a class named weather report that holds a daily weather report with data members day_of_month, hightemp, lowtemp, amount_rain and amount_snow. The constructor initializes the fields with default values: 99 for day_of_month, 999 for hightemp,-999 for low emp and 0 for amount_rain and amount_snow. Include a function that prompts the user and sets values for each field so that you can override the default values. Write a C++/Java/Python program that creates a monthly report. a) Menu driven program with options to Enter data and Display report b) Report Format Prerequisites: Data Structures and problem Solving Objectives: To learn the concept of constructor and destructor in C++. To study the representation, implementation and applications of data structures To study implementation of data structures using OOP concepts To compare the benefits of static and dynamic data structures Theory: Constructor A class constructor is a special member function of a class that is executed whenever we create new objects of that class. A constructor will have exact same name as the class and it does not have any return type at all, not even void. Constructors can be very useful for setting initial values for certain member variables. Why you should define a constructor? Uninitialized member fields have garbage in them. This creates the possibility of a ZES s DCOER, Pune-411041 Page 7

serious bug (e.g., an uninitialized pointer, illegal values, inconsistent values...). Characteristics of a constructor: 1. They should be declared in the public section 2. They are invoked automatically when the objects are created. 3. They cannot be inherited 4. They cannot be virtual A constructor is similar to a function, but with the following differences. 1. No return type. 2. No return statement. Types of Constructor 1. Default Constructor 2. Parameterized constructor 3. Copy constructor 4. Constructor with default arguments 5. Dynamic constructor Destructor A destructor is a special member function of a class that is executed whenever an object of its class goes out of scope or whenever the delete expression is applied to a pointer to the object of that class. A destructor will have exact same name as the class prefixed with a tilde (~) and it can neither return a value nor can it take any parameters. Destructor can be very useful for releasing resources before coming out of the program like closing files, releasing memories etc. Whenever the object of the class is created, the constructor is called. Constructor is responsible for assigning initial values for all its data members. It has the same name as its class. Whenever an object is no longer needed,it has to be deleted from the memory, then we write a destructor for it. It takes the same name of their class preceded by a tilde (~) ZES s DCOER, Pune-411041 Page 8

Facilities: Linux Operating Systems, GCC, Eclipse framework, VC++. Algorithm: 1. Start 2. Read day_of_month, hightemp, lowtemp, amount_rain and amount_snow. 3. Print report with all information. 4. Stop Input: i. High temperature ii. Low temperature iii. Amount of rain iv. Amount of snow Output: Display report with high temperature, low temperature, amount of rain, amount of snow. Display the result in following format: hightemp lowtemp amount_rain amount_snow 1 2... 28/30/31 -------------------------------------------------------------------- Average Let S be the solution perspective of the class Weather Report such that S={s, e, i, o, f, DD, NDD, success, failure} ZES s DCOER, Pune-411041 Page 9

s=initial state that is constructor of the class and e be the end state or destructor of the class. i= input of the system. o=output of the system. DD-deterministic data it helps identifying the load store functions or assignment functions. NDD- Non deterministic data of the system S to be solved. Success-desired outcome generated. Failure-Desired outcome not generated or forced exit due to system error. For class Weather_Report: s=initial state or constructor of the class weather() s={weather()}- sets the default values for all five variables to respective values given in assignment. Input i=(i1,i2) I1={day_of_moth,hightemp,lowtemp,amount_rain,amount_snow} Variables declared-ndd Day_of_month={1,-------,n} n Ø. n=30 or 31. Hightemp={1,------,n} n Ø. n=999. lowtemp={-999,------,n} n Ø. n=6. amount_rain={1,------,n} n Ø. n=10. amount_snow={1,------,n} n Ø. n=10. I2={99,999,-999,0,0} Default values set all integers Deterministic Data because of function weather(),memory requirement based on DD. Hence let weather():i1i2 be an ONTO mapping function shown by fig ZES s DCOER, Pune-411041 Page 10

Draw Association figure here of mapping values of I1 to I2: Day Hightemp Lowtemp Amount -rain Amount-snow 99 999-999 0 0 f= {display ( ), override ( ), avg ( )} display ( )={details of all variable values} override( )={ default values get overwritten and stored by values specified in this function} avg( )={sum of values / no. of days} Success- desired output is generated in tabular form as Weather Report with default as well as overwritten values along with average. Failure- desired output is not generated in tabular form as weather Report. Conclusion: Hence, we have successfully studied concept of constructor and destructor in object oriented programming language. Questions: 1. What is dynamic initialization of a variable? 2. Difference between a assignment operator and a copy constructor 3. What are the benefits of OOP? 4. Explain Destructor? 5. Explain copy constructor 6. Give example of a constructor with default values. 7. Give pictorial representation of object from your program. ZES s DCOER, Pune-411041 Page 11

8. Memory allocation for static members. 9. Memory allocation for array of objects. 10. Difference between class variables and static variables 11. Pictorial representation of object from your program. 12. Explain types of constructor with example. 13. Uses of constructor 14. What is object and member function. 15. What is dynamic constructor.explain with examples? 16. Difference between constructor and destructor. Practice Assignments: 1. Create a class named STUDENT that holds student information Stdname, StdRollno, Stdclass, Marks of subject, Percentage. The constructor initializes the fields with default values. Include a function that prompts the user and sets values for each field so that you can override the default values. Write a program that creates a report for N number of students. 2. Create a class BANK that holds Account holder information Accname, AccNo, Balance. The constructor initializes the fields with default values. Include a function that prompts the user and sets values for each field so that you can override the default values. Write a program that creates a report for N number of Account Holder. 3. Create a class CRICKET that holds Name of Player, Century Scored, Runs Scored, Average, Economy, Wickets, and Catches etc. The constructor initializes the fields with default values. Include a function that prompts the user and sets values for each field so that you can override the default values. Write a program that creates a report for N number of Cricketers. ZES s DCOER, Pune-411041 Page 12

Experiment No:2 Title: Book shop s inventory management using member functions and constructors. Aim: A book shop maintains the inventory of books that are being sold at the shop. The list includes details such as author, title, price, publisher and stock position. Whenever a customer wants a book, the sales person inputs the title and author and the system searches the list and displays whether it is available or not. If it is not, an appropriate message is displayed. If it is, then the system displays the book details and requests for the number of copies required. If the requested copies book details and requests for the number of copies required. If the requested copies are available, the total cost of the requested copies is displayed; otherwise the message Required copies not in stock is displayed. Design a system using a class called books with suitable member functions and Constructors. Use new operator in constructors to allocate memory space required. Implement C++ program for the system. Prerequisites: Data Structures and problem Solving Objectives: To study the representation, implementation and applications of data structures To learn the concept of dynamic memory allocation and deallocation (use of new and delete operator). To compare the benefits of static and dynamic data structures ZES s DCOER, Pune-411041 Page 13

Theory: The new and delete operators: There is following generic syntax to use new operator to allocate memory dynamically for any data-type. new data-ty Here, data-type could be any built-in data type including an array or any user defined data types include class or structure. Let us start with built-in data types. For example we can define a pointer to type double and then request that the memory be allocated at execution time. We can do this using the new operator with the following statements: double* pvalue = NULL; // Pointer initialized with null pvalue = new double; // Request memory for the variable The memory may not have been allocated successfully, if the free store had been used up. So it is good practice to check if new operator is returning NULL pointer and take appropriate action as below: double* pvalue = NULL; if(!(pvalue = new double )) { cout << "Error: out of memory." <<endl; exit(1); } The malloc() function from C, still exists in C++, but it is recommended to avoid using malloc() function. The main advantage of new over malloc() is that new doesn't just allocate memory, it constructs objects which is prime purpose of C++. At any point, when you feel a variable that has been dynamically allocated is not anymore required, you can free up the memory that it occupies in the free store with the delete operator as follows: delete pvalue; // Release memory pointed to by pvalue Let us put above concepts and form the following example to show how new and delete ZES s DCOER, Pune-411041 Page 14

work: #include <iostream> using namespace std; int main () { double* pvalue = NULL; // Pointer initialized with null pvalue = new double; // Request memory for the variable *pvalue = 29494.99; // Store value at allocated address cout << "Value of pvalue : " << *pvalue << endl; delete pvalue; // free up the memory. return 0; } If we compile and run above code, this would produce the following result: Value of pvalue : 29495 Facilities: Linux Operating Systems, GCC, Eclipse framework, VC++. Algorithm: 1. Start 2. Read book details such as author, title, price, publisher and stock position. 3. Print all information of book. 4. Stop Input: Details about books such as author, title, price, publisher and stock position Output: Display required book s details. Conclusion: Hence, we have successfully studied concept of new and delete operator. ZES s DCOER, Pune-411041 Page 15

Questions: 1. What are new and delete? 2. What is dynamic allocation of a variable? 3. Difference between a new and a delete 4. Memory allocation for static members. 5. Memory allocation for array of objects. 6. Difference between class variables and static variables 7. Pictorial representation of object from your program. 8. What is object and member function. ZES s DCOER, Pune-411041 Page 16

Experiment No:3 Title: Personnel information system using constructor, destructor, static member functions, friend class, this pointer, inline code and dynamic memory allocation. Aim: Develop an object oriented program in C++ to create a database of the personnel information system containing the following information: Name, Date of Birth, Blood group, Height, Weight, Insurance Policy, number, Contact address, telephone number, driving license no. etc Construct the database with suitable member functions for initializing and destroying the data viz constructor, default constructor, copy, destructor, static member functions, friend class, this pointer, inline code and dynamic memory allocation operators-new and delete. Prerequisites: Data Structures and problem Solving Objectives: To learn the concept of constructor, default constructor, copy, destructor, static member functions, friend class, this pointer, inline code and dynamic memory allocation operators-new and delete. Theory: A special method of the class that will be automatically invoked when an instance of the class is created is called as constructor. Following are the most useful features of constructor. 1) Constructor is used for Initializing the values to the data members of the Class. ZES s DCOER, Pune-411041 Page 17

2) Constructor is that whose name is same as name of class. 3) Constructor gets Automatically called when an object of class is created. 4) Constructors never have a Return Type even void. 5) Constructor is of Default, Parameterized and Copy Constructors. The various types of Constructor are as follows:- Constructors can be classified into 3 types 1. Default Constructor 2. Parameterized Constructor 3. Copy Constructor 1. Default Constructor:- Default Constructor is also called as Empty Constructor which has no arguments and It is Automatically called when we creates the object of class but Remember name of Constructor is same as name of class and Constructor never declared with the help of Return Type. Means we can t declare a Constructor with the help of void Return Type., if we never Pass or declare any Arguments then this called as the Copy Constructors. 2. Parameterized Constructor: - This is another type constructor which has some Arguments and same name as class name but it uses some Arguments So For this We have to create object of Class by passing some Arguments at the time of creating object with the name of class. When we pass some Arguments to the Constructor then this will automatically pass the Arguments to the Constructor and the values will retrieve by the Respective Data Members of the Class. 3. Copy Constructor: - This is also another type of Constructor. In this Constructor we pass the object of class into the Another Object of Same Class. As name Suggests you Copy, means Copy the values of one Object into the another Object of Class.This is used for Copying the values of class object into an another object of class So we call them as Copy Constructor and For Copying the values We have to pass the name of object whose values we wants to Copying and When we are using or passing an ZES s DCOER, Pune-411041 Page 18

Object to a Constructor then we must have to use the & Ampersand or Address Operator. Destructor: As we know that Constructor is that which is used for Assigning Some Values to data Members and For Assigning Some Values this May also used Some Memory so that to free up the Memory which is Allocated by Constructor, destructor is used which gets Automatically Called at the End of Program and we doesn t have to Explicitly Call a Destructor and Destructor Cant be Parameterized or a Copy This can be only one Means Default Destructor which Have no Arguments. For Declaring a Destructor we have to use ~tiled Symbol in front of Destructor. Static members A class can contain static members, either data or functions. A static member variable has following properties: It is initialized to zero when the first object of its class is created. No other initialization is permitted. Only one copy of that member is created for the entire class and is shared by all the objects of that class. It is the visible only within the class but its lifetime is the entire program. Static data members of a class are also known as "class variables", because there is only one unique value for all the objects of that same class. Their content is not different from one object static members have the same properties as global variables but they enjoy class scope. For that reason, and to avoid them to be declared several times, we can only include the prototype (its declaration) in the class declaration but not its definition (its initialization). In order to initialize a static data-member we must include a formal definition outside the class, in the global scope of this class to another. Because it is a unique variable value for all the objects of the same class, it can be referred to as a member of any object of that class or even directly by the class name (of course this is only valid for static members. ZES s DCOER, Pune-411041 Page 19

A static member function has following properties A static function can have access to only other static members (fun or var) declared in the same class A static function can be called using the class name instead of its object name Class_name :: fun_name; Static member functions are considered to have class scope. In contrast to non static member functions, these functions have no implicit this argument; therefore, they can use only static data members, enumerators, or nested types directly. Static member functions can be accessed without using an object of the corresponding class type. The following restrictions apply to such static functions: 1. They cannot access non static class member data using the member-selection operators (. or >). 2. They cannot be declared as virtual. 3. They cannot have the same name as a non static function that has the same argument types. E.g. // static members in classes class StaticTest { private: static int x; public: static int count() }; int StaticTest::x = 9; int main() { { return x; printf_s("%d\n", StaticTest::count()); } Output 9 } ZES s DCOER, Pune-411041 Page 20

Friend functions: In principle, private and protected members of a class cannot be accessed from outside the same class in which they are declared. However, this rule does not affect friends. Friends are functions or classes declared as such. If we want to declare an external function as friend of a class, thus allowing this function to have access to the private and protected members of this class, we do it by declaring a prototype of this external function within the class, and preceding it with the keyword friend. Properties of friend function: It is not in the scope of the class to which it has been declared as friend. Since it is not in the scope of the class, it cannot be called using the object of that class It can be invoked like a normal function w/o the help of any object. It can be declared in private or in the public part of the class. Unlike member functions, it cannot access the member names directly and has to use an object name and dot operator with each member name. // friend functions #include <iostream> using namespace std; class CRectangle { int width, height; public: void set_values (int, int); int area () {return (width * height);} friend CRectangle duplicate (CRectangle); }; void CRectangle::set_values (int a, int b) { width = a; ZES s DCOER, Pune-411041 Page 21

height = b; } CRectangle duplicate (CRectangle rectparam) { CRectangle rectres; rectres.width = rectparam.width*2; rectres.height = rectparam.height*2; return (rectres); } int main () { CRectangle rect, rectb; rect.set_values (2,3); rectb = duplicate (rect); cout << rectb.area(); return 0; } The duplicate function is a friend of CRectangle. From within that function we have been able to access the members width and height of different objects of type CRectangle, which are private members. Notice that neither in the declaration of duplicate() nor in its later use in main() have we considered duplicate a member of class CRectangle. Friend classes Just as we have the possibility to define a friend function, we can also define a class as friend of another one, granting that second class access to the protected and private members of the first one. // friend class ZES s DCOER, Pune-411041 Page 22

#include <iostream> using namespace std; class CSquare; class CRectangle { int width, height; public: int area () {return (width * height);} void convert (CSquare a); }; class CSquare { private: int side; public: void set_side (int a) {side=a;} friend class CRectangle; }; void CRectangle::convert (CSquare a) { width = a.side; height = a.side; } int main () { CSquare sqr; CRectangle rect; sqr.set_side(4); ZES s DCOER, Pune-411041 Page 23

rect.convert(sqr); cout << rect.area(); return 0; } In this example, we have declared CRectangle as a friend of CSquare so that CRectangle member functions could have access to the protected and private members of CSquare, more concretely to CSquare::side, which describes the side width of the square.. Pointers: A pointer is a derived data type that refers to another data variable by storing the variables memory address rather than data. Declaration of pointer variable is in the following form : Data_type * ptr_var; Eg int * ptr; Here ptr is a pointer variable and points to an integer data type. We can initialize pointer variable as follows int a, *ptr; // declaration ptr = &a //initialization Pointers to objects: Consider the following eg item X; // where item is class and X is object Similarly we can define a pointer it_ptr of type item as follows Item *it_ptr ; Object pointers are useful in creating objects at runtime. We can also access public members of the class using pointers. Eg item X; item *ptr = &X; ZES s DCOER, Pune-411041 Page 24

the pointer ptr is initialized with address of X. we can access the member functions and data using pointers as follows ptr->getdata(); ptr->show(); this pointer: C++ uses a unique keyword called this to represent an object that invokes a member function. this is a pointer that points to the object for which this function was called. This unique pointer is automatically passed to a member function when it is called. Important notes on this pointer: this pointer stores the address of the class instance, to enable pointer access of the members to the member functions of the class. this pointer is not counted for calculating the size of the object. this pointers are not accessible for static member functions. this pointers are not modifiable. Facilities: Linux Operating Systems, GCC, Eclipse framework, VC++. Algorithm: 1. Start 2. Read personnel information such as Name, Date of Birth, Blood group, Height, Weight, Insurance Policy, number, Contact address, telephone number, driving license no.. 3. Print all information from database. 4. Stop Input: Personnel information such as Name, Date of Birth, Blood group, Height, Weight, Insurance Policy, number, Contact address, telephone number, driving license no. ZES s DCOER, Pune-411041 Page 25

Output: Display personnel information from database. The result in following format: Name DOB. Driving License No 1 2... n Conclusion: Hence, we have successfully studied concept of constructor, default constructor, copy constructor, destructor, static member functions, friend class, this pointer, inline code and dynamic memory allocation operators-new and delete. Questions: 1. What is static Function? 2. What is friend function? State the advantage of using the friend function. 3. What is friend class? Explain with examples. 4. Explain with examples pointers to object. 5. What is this pointer? Explain with examples. 6. State the advantages of this pointer. 7. What are inline functions? 8. How do we declare member of a class static? 9. What are demerits of friend function? 10. What is concept of constructor, destructor? 11. What are types of constructors? Practice Assignments: 1. Develop an object oriented program in C++ to create a database of the Student information system containing the following information: Name, ZES s DCOER, Pune-411041 Page 26

Date of Birth, Class, Marks, Contact address, telephone number, etc Construct the database with suitable member functions for initializing and destroying the data viz constructor, default constructor, copy constructor, destructor, static member functions, friend class, this pointer, inline code and dynamic memory allocation operators-new and delete. 2. Develop an object oriented program in C++ to create a database of the Employee information system containing the following information: Name, Date of Birth, Empcode, Contact address, telephone number, etc Construct the database with suitable member functions for initializing and destroying the data viz constructor, default constructor, copy constructor, destructor, static member functions, friend function, this pointer, inline code and dynamic memory allocation operators-new and delete. ZES s DCOER, Pune-411041 Page 27

Experiment No: 4 Title: Complex numbers operator overloading Aim: Design a C++ Class Complex with data members for real and imaginary part. Provide default and parameterized constructors. Write a program to perform arithmetic operations of two complex numbers using operator overloading (using either member functions or friend functions). Prerequisites: Data Structures and problem Solving Objectives: To learn the concept of constructor, default constructor, copy, constructor, parameterized constructor s operator overloading using friend function. Theory: Operator Overloading It is a specific case of polymorphism where different operators have different implementations depending on their arguments. In C++ the overloading principle applies not only to functions, but to operators too. That is, of operators can be extended to work not just with built-in types but also classes. A programmer can provide his or her own operator to a class by overloading the built-in operator to perform some specific computation when the operator is used on objects of that class. An Example of Operator Overloading Complex a(1.2,1.3); //this class is used to represent complex numbers Complex b(2.1,3); //notice the construction taking 2 parameters for the real and imaginary part Complex c = a+b; //for this to work the addition operator must be overloaded ZES s DCOER, Pune-411041 Page 28

Arithmetic Operators Arithmetic Operators are used to do basic arithmetic operations like addition, subtraction, multiplication, division, and modulus. The following table list the arithmetic operators used in C++. Operator Action + Addition - Subtraction * Multiplication / Division % Modulus With C++ feature to overload operators, we can design classes able to perform operations using standard operators. Here is a list of all the operators that can be overloaded: Over loadable operators + - * / = < > += -= *= /= << >> <<= >>= ==!= <= >= ++ -- % & ^! ~ &= ^= = && %= [] To overload an operator in order to use it with classes we declare operator functions, which are regular functions whose names are the operator keyword followed by the operator sign that we want to overload. The format is: type operator operator-symbol (parameters) {/*...*/ } The operator keyword declares a function specifying what operator-symbol means when applied to instances of a class. This gives the operator more than one meaning, or "overloads" it. The compiler distinguishes between the different meanings of an operator by examining the types of its operands. Facilities: Linux Operating Systems, GCC, Eclipse framework, VC++. ZES s DCOER, Pune-411041 Page 29

Algorithm: 1. Start 2. Read two complex numbers. 3. Perform arithmetic operations on two complex numbers 4. Print the output. 5. Stop Input: Complex numbers with real and imaginary values for two complex numbers. Example : Complex No 1: Real Part : 5 Imaginary part : 4 Complex No 2: Real Part : 5 Imaginary part : 4 Output: Numbers after performing arithmetic operations in following format: Operation Performed: Complex No: 1 Operation Symbol: Complex No: 2 ------------------------------------------------- RESULT Conclusion: Hence, we have studied concept of operator overloading. Questions: 1. What is operator overloading? 2. What are the rules for overloading the operators? 3. State clearly which operators are overloaded and which operator are not overloaded? ZES s DCOER, Pune-411041 Page 30

4. State the need for overloading the operators. 5. Explain how the operators are overloaded using the friend function. 6. What is the difference between overloading and overriding? 7. What is operator function? Describe the syntax? 8. When is Friend function compulsory? Give an example? 9. How Many arguments required in the definition of an overloaded unary operator? Practice Assignments: 1. Design a Class Complex with data members for real and imaginary part. Provide default and parameterized constructors. Write a program to perform arithmetic operations of two complex numbers using operator overloading. Overload << to accept two complex numbers 2. Design a Class Complex with data members for real and imaginary part. Provide default and parameterized constructors. Write a program to perform arithmetic operations of two complex numbers using operator overloading. Overload >> to display output of the above performed operations on complex numbers 3. Write a class to represent the vector (a series of float value). Include member function to create a vector and to modify. Overload operator * to multiply by a scalar value. Overload << to display scalar value. ZES s DCOER, Pune-411041 Page 31

Experiment No: 5 Title: Aim: String operations operator overloading Write a C++ program to perform String operations i. = Equality ii. == String Copy iii. + Concatenation iv. << To display a string v. >> To reverse a string vi. Function to determine whether a string is a palindrome To find occurrence of a sub-strings. Use Operator Overloading. Prerequisites: Data Structures and problem Solving Objectives: To learn the concept of operator overloading in terms of different string operations. Theory: Strings in C++: Strings can be defines as class objects which can be then manipulated like a built in data types. Since the strings vary greatly in size, we use new to allocate memory for each string and a pointer variable to point to the string array. Thus we must create string objects that can hold these two pieces of information, namely length and location which are necessary for string manipulations. A typical string class will look as Class string { Char *p; Int len; // length of string Public :.// mem fun to initialize and manipulate strings.. }; ZES s DCOER, Pune-411041 Page 32

Pointers are useful to allocate arrays dynamically i.e. we can decide the array size at run time. c++ incorporates the option to use standard operators to perform operations with classes in addition to with fundamental types. For example: int a, b, c; a = b + c; This is obviously valid code in C++, since the different variables of the addition are all fundamental types. Nevertheless, it is not so obvious that we could perform an operation similar to the following one: struct { string product; float price; } a, b, c; a = b + c; In fact, this will cause a compilation error, since we have not defined the behavior our class should have with addition operations. However, thanks to the C++ feature to overload operators, we can design classes able to perform operations using standard operators. Facilities: Linux Operating Systems, GCC, Eclipse framework, VC++. Algorithm: 1. Start 2. Read strings. 3. Perform String operations. 4. Print output. 5. Stop ZES s DCOER, Pune-411041 Page 33

Input: Enter String1: Hello Enter String2: World. Output: Display the result in following format: Operation Performed: RESULTSTRING Conclusion: Hence, we have studied concept of operator overloading. Questions: 1. Give the number of arguments for overloading unary and binary operator? 2. Which operators can t be overloaded? 3. Which operators can t be overloaded with friend functions? 4. What are inline functions? 5. Memory allocation for strings Practice Assignments: Write a C++ program to perform following operations on the strings. 1 > To Check two strings 2 + concatenation by friend functions 3 - To delete a substring 4 + concatenation using friend function 5 += To concat the two strings ZES s DCOER, Pune-411041 Page 34

Experiment No: 6 Title: Aim: Personnel information system using inheritance Develop an object oriented program in C++ to create a database of the personnel information system containing the following information: Name, Date of Birth, Blood group, Height, Weight, Insurance Policy number, Contact address, telephone number, driving licence no. etc Construct the database with suitable member functions for initializing and destroying the data viz constructor, default constructor, copy constructor, destructor, static member functions, friend class, this pointer, inline code and dynamic memory allocation operators-new and delete. Prerequisites: Data Structures and problem Solving Objectives: To learn concept of Inheritance, different types of inheritance: Single level, Multi level, Multiple, Hybrid. Theory: Inheritance Inheritance is the process by which objects can acquire the properties of objects of other class. In OOP, inheritance provides reusability, like, adding additional features to an existing class without modifying it. This is achieved by deriving a new class from the existing one. The new class will have combined features of both the classes. Types of Inheritance 1. Single inheritance 2. Multiple inheritance 3. Multilevel inheritance 4. Hierarchical inheritance ZES s DCOER, Pune-411041 Page 35

5. Hybrid Inheritance There are three types of class inheritance: public, private and protected The protected access specifier is similar to private. Its only difference occurs in fact with inheritance. When a class inherits from another one, the members of the derived class can access the protected members inherited from the base class, but not its private members. Difference between public, private and protected A member (either data member or member function) declared in a private section of a class can only be accessed by member functions and friends of that class A member (either data member or member function) declared in a protected section of a class can only be accessed by member functions and friends of that class, and by member functions and friends of derived classes A member (either data member or member function) declared in a public section of a class can be accessed by anyone The following table indicates how the attributes are inherited in the three different types of inheritance: Access specifier in the base class private Public protected public inheritance private inheritance protected inheritance The member is The member is The member is private. public. protected. The member is The member is The member is private. private. private. The member is The member is The member is private. protected. protected. What a derived class inherits Every data member defined in the parent class (although such members may ZES s DCOER, Pune-411041 Page 36

not always be accessible in the derived class!) Every ordinary member function of the parent class (although such members may not always be accessible in the derived class!) The same initial data layout as the base class What a derived class doesn't inherit The base class's constructors and destructor The base class's assignment operator The base class's friends What a derived class can add New data members New member functions New constructors and destructor New friends Multiple inheritance Allows you to create a derived class that inherits properties from more than one base class. Because a derived class inherits members from all its base classes, ambiguities can result. For example, if two base classes have a member with the same name, the derived class cannot implicitly differentiate between the two members. In the following example, classes A, B, and C are direct base classes for the derived class X: class A { /*... */ }; class B { /*... */ }; class C { /*... */ }; class X : public A, private B, public C { /*... */ }; Facilities: Linux Operating Systems, GCC, Eclipse framework, VC++. Algorithm: ZES s DCOER, Pune-411041 Page 37

1. Start 2. Read personnel information such as Name, Date of Birth, Blood group, Height, Weight, Insurance Policy, number, Contact address, telephone number, driving license no.. 3. Print all information from database. 4. Stop Input: Three Base classes (B1, B2, and B3) which contains data members 1. name, date of birth, blood group 2. height and weight 3. insurance policy number and contact address Create Derived class which consist data members telephone numbers and driving license number Output: 1. Display table containing all data Member 2. Insert a new entry 2. Delete entry 3. Edit entry 4. Search for a record Conclusion: Hence, we have successfully studied concept of inheritance. Questions: 1. What are the different forms of inheritance? 2. When do we use protected access specifier? 3. How does containership differ from inheritance? 4. What are Virtual Functions? How to implement virtual functions in C 5. Explain protected mode ZES s DCOER, Pune-411041 Page 38

6. Diagram of multiple inheritance 7. What's the difference between public, private, and protected? 8. Pictorial representation of object from your program Practice Assignments: 1. Design a base class with Employee name, date of birth, blood group and another base class consisting of the data members such as designation and salary. Design one more base class consisting of the insurance policy number and contact address. The derived class contains the data member telephone numbers and driving license number. Write a menu driven program to carry out the following things: Build a master table Display Insert a new entry Delete entry Edit Search for a record ZES s DCOER, Pune-411041 Page 39

Experiment No: 7 Title: Aim: Templates Write a program in C++ using function template to read two matrices of different data types such as integers and floating point values and perform simple arithmetic operations on these matrices separately and display it. Prerequisites: Data Structures and problem Solving Objectives: To understand concept of Template and Template function. Theory: C++ templates provide a way to re-use source code. C++ provides two kinds of templates: 1. Class templates 2. Function templates. Use function templates to write generic functions that can be used with arbitrary types. For example, one can write searching and sorting routines which can be used with any arbitrary type.c++ Function templates are those functions which can handle different data types without separate code for each of them. For a similar operation on several kinds of data types, a programmer need not write different versions by overloading a function. It is enough if he writes a C++ template based function. This will take care of all the data types. Class Templates A class template definition looks like a regular class definition, except it is prefixed by the keyword template. Once code is written as a C++ class template, it can support all data types. Declaration of C++ class template should start with the keyword template. A parameter ZES s DCOER, Pune-411041 Page 40

should be included inside angular brackets. The parameter inside the angular brackets, can be either the keyword class or typename. This is followed by the class body declaration with the member data and member functions. template <class T>. class class_name { // class member specification // with anonymous type T wherever appropriate }; T is a type parameter and it can be any type. Defining member functions - C++ Class Templates: If the functions are defined outside the template class body, they should always be defined with the full template definition. Other conventions of writing the function in C++ class templates are the same as writing normal c++ functions. Advantages of C++ Class Templates: One C++ Class Template can handle different types of parameters. Compiler generates classes for only the used types. If the template is instantiated for int type, compiler generates only an int version for the c++ template class. Templates reduce the effort on coding for different data types to a single set of code. Testing and debugging efforts are reduced. Function templates There are lot of occasions, where we might need to write the same functions for different data types. A favorite example can be addition of two variables. The variable can be integer, float or double. The requirement will be to return the corresponding return type based on the input type. If we start writing one function for each of the data type, then we will end up with 4 to 5 different functions, which can be a night mare for maintenance. ZES s DCOER, Pune-411041 Page 41

C++ templates come to our rescue in such situations. When we use C++ function templates, only one function signature needs to be created. The C++ compiler will automatically generate the required functions for handling the individual data types. Eg: Add function. Template <class T> T Add(T a, T b) { Return a+b; } This c++ function template definition will be enough. Now when the integer version of the function, the compiler generates an Add function compatible for integer data type and if float is called it generates float type and so on. Here T is the typename. This is dynamically determined by the compiler according to the parameter passed. The keyword class means, the parameter can be of any type. It can even be a class. Facilities: Linux Operating Systems, GCC, Eclipse framework, VC++. Algorithm: 1. Start 2. Read two matrices of different data types such as integers and floating point values. 3. Perform simple arithmetic operations on these matrices separately. 4. Display output. 5. Stop Input: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ZES s DCOER, Pune-411041 Page 42

Output: 2 2 2 2 2 2 2 2 2 Conclusion: Hence, we have successfully studied concept of Template and function template. Questions: 1. Distinguish between overloaded functions and function templates? 2. What is the difference between macro and template? 3. What is the use of class template? 4. What is the difference between class template & function template? 5. What do you mean by a class template instantiation? 6. Can we use static data members in class template? 7. How to define a member function outside of its template? 8. How to define and declare the function template? 9. List the advantages & disadvantages of function template. 10. Can we overload the function template? Practice Assignments: 1. Write C++ programs to create a template class QUEUE with add and delete member functions. Using it, implement a queue of integers and doubles. 2. Write a program to create a class template LINKED LIST with insert & delete operations. Using it, implement singly linked list of integer & floating point values. 3. Write a program to define and declare a function template to fine a to the power of b with a and b taking int, float and double values. ZES s DCOER, Pune-411041 Page 43

Experiment No: 8 Title: Aim: Virtual functions and files Design a C++ base class consisting of the data members such as name of the student, roll number and subject. The derived class consists of the data member s subject code, internal assessment and university examination marks. Construct a virtual base class for the item name of the student and roll number. The program should have the facilities. i) Build a master table ii) List a table iii) Insert a new entry iv) Delete old entry v) Edit an entry vi) Search for a record Prerequisites: Data Structures and problem Solving Objectives: To understand how to perform various operations on files. To understand the concept of Virtual Function Theory: C++ Virtual Function - Properties: 1. A member function of a class 2. Declared with virtual keyword 3. Usually has a different functionality in the derived class 4. A function call is resolved at run-time The difference between a non-virtual c++ member function and a virtual member function is, the non-virtual member functions are resolved at compile time. This mechanism is called static binding. Whereas the c++ virtual member functions are resolved during run-time. This mechanism is known as dynamic binding. C++ Virtual Function - Reasons: The most prominent reason why a C++ virtual function will be used is to have a different functionality in the derived class. ZES s DCOER, Pune-411041 Page 44

Rules for virtual functions: When virtual functions are created for implementing late binding, we should observe some basic rules that satisfy the compiler requirements. 1. The virtual functions must be member of the same class 2. They cannot be static members 3. They are accessed by using object pointers 4. A virtual function can be a friend of another class. Input/output with files C++ provides the following classes to perform output and input of characters to/from files: ofstream: Stream class to write on files ifstream: Stream class to read from files fstream: Stream class to both read and write from/to files. These classes are derived directly or indirectly from the classes istream, and ostream. We have already used objects whose types were these classes: cin is an object of class istream and cout is an object of class ostream. Therefore, we have already been using classes that are related to our file streams. And in fact, we can use our file streams the same way we are already used to use cin and cout, with the only difference that we have to associate these streams with physical files Opening files using open() The function open () can be used to open multiple files that use same stream object. File_stream_class stream _object; Stream_object.open ( filename, mode); Eg fstream inoutfile; Inoutfile.open( book.dat ); Where filename is a null-terminated character sequence of type const char * (the same type that string literals have) representing the name of the file to be opened, and mode is an optional parameter with a combination of the following flags: ZES s DCOER, Pune-411041 Page 45

ios::in ios::out Open for input operations. Open for output operations. ios::binary Open in binary mode. Set the initial position at the end of the file. ios::ate If this flag is not set to any value, the initial position is the beginning of the file. All output operations are performed at the end of the file, appending ios::app ios::trunc the content to the current content of the file. This flag can only be used in streams open for output-only operations. If the file opened for output operations already existed before, its previous content is deleted and replaced by the new one. All these flags can be combined using the bitwise operator OR ( ). For example, if we want to open the file example.bin in binary mode to add data we could do it by the following call to member function open(): ofstream myfile; myfile.open ("example.bin", ios::out ios::app ios::binary); For ifstream and ofstream classes, ios::in and ios::out are automatically and respectivelly assumed, even if a mode that does not include them is passed as second argument to the open() member function. The default value is only applied if the function is called without specifying any value for the mode parameter. If the function is called with any value in that parameter the default mode is overridden, not combined. File streams opened in binary mode perform input and output operations independently of any format considerations. Non-binary files are known as text files, and some translations may occur due to formatting of some special characters (like newline and carriage return characters). ZES s DCOER, Pune-411041 Page 46

Since the first task that is performed on a file stream object is generally to open a file, these three classes include a constructor that automatically calls the open() member functions and has the exact same parameters as this member. Therefore, we could also have declared the previous myfile object and conducted the same opening operation in our previous example by writing: ofstream myfile ("example.bin", ios::out ios::app ios::binary); Combining object construction and stream opening in a single statement. Both forms to open a file are valid and equivalent. To check if a file stream was successful opening a file, you can do it by calling to member is_open() with no arguments. This member function returns a bool value of true in the case that indeed the stream object is associated with an open file, or false otherwise: if (myfile.is_open()) { /* ok, proceed with output */ } Closing a file When we are finished with our input and output operations on a file we shall close it so that its resources become available again. In order to do that we have to call the stream's member function close(). This member function takes no parameters, and what it does is to flush the associated buffers and close the file: myfile.close( ); Once this member function is called, the stream object can be used to open another file, and the file is available again to be opened by other processes. Checking state flags eof() Returns true if a file open for reading has reached the end. ZES s DCOER, Pune-411041 Page 47

Functions for manipulation of file pointers : All the actions on the file pointers take place automatically by default. The file stream classes support following functions to manage file pointers manually. tellg() and tellp() These two member functions have no parameters and return a value of the member type pos_type, which is an integer data type representing the current position of the get stream pointer (in the case of tellg) or the put stream pointer (in the case of tellp). seekg() and seekp() These functions allow us to change the position of the get and put stream pointers. Both functions are overloaded with two different prototypes. The first prototype is: seekg ( position ); seekp ( position ); Using this prototype the stream pointer is changed to the absolute position position (counting from the beginning of the file). The type for this parameter is the same as the one returned by functions tellg and tellp: the member type pos_type, which is an integer value. Facilities: Linux Operating Systems, GCC, Eclipse framework, VC++. Algorithm: 1. Start 2. Read data members such as name of the student, roll number and subject. 3. Perform operations. 4. Print Output 5. Stop Input: Enter the students Details- Name, Age etc ZES s DCOER, Pune-411041 Page 48

Output: 1. Master table containing all data Member 2. Display 3. Insert a new entry 4. Delete entry 5. Edit 6. Search for a record Conclusion: Hence, we have successfully studied concept of Template and function template. Questions: 1. What is a virtual function? 2. When do we make a virtual function pure? 3. What is virtual base class? 4. What is an abstract class? 5. What are two different ways to open the file? 6. Explain seekg(), seekp(), tellg(), tellp(); 7. Differentiate between ate mode and app mode. 8. Explain the technique of static and dynamic binding Practice Assignments: 1. Write a C++ program to generate Fibonacci series of n numbers using run time binding. The series initials are 0 and 1. 2. Write a C++ program to print the factorial of a given number using dynamic binding. 3. Write a C++ program to maintain the employee record using file handling. ZES s DCOER, Pune-411041 Page 49

Experiment No: 9 Title: Aim: Exception Handling Create a C++ class named Television that has data members to hold the model number and the screen size in inches, and the price. Member functions include overloaded insertion and extraction operators. If more than four digits are entered for the model, if the screen size is smaller than 12 or greater than 70 inches, or if the price is negative or over $5000 then throw an integer. Write a main() function that instantiates a television object, allows user to enter data and displays the data members.if an exception is caught, replace all the data member values with zero values. Prerequisites: Data Structures and problem Solving Objectives: To understand the concept of Exception handling Theory: One benefit of C++ over C is its exception handling system. An exception is a situation in which a program has an unexpected circumstance that the section of code containing the problem is not explicitly designed to handle. In C++, exception handling is useful because it makes it easy to separate the error handling code from the code written to handle the chores of the program. Doing so makes reading and writing the code easier. Furthermore, exception handling in C++ propagates the exceptions up the stack; therefore, if there are several functions called, but only one function that needs to reliably deal with errors, the method C++ uses to handle exceptions means that it can easily handle those exceptions without any code in the intermediate functions. One consequence is that functions don't need to return error codes, freeing their return values for program logic. ZES s DCOER, Pune-411041 Page 50

When errors occur, the function generating the error can 'throw' an exception. For example, take a sample function that does division: const int DivideByZero = 10; //... double divide(double x, double y) { if(y==0) { throw DivideByZero; } return x/y; } The function will throw DivideByZero as an exception that can then be caught by an exception-handling catch statement that catches exceptions of type int. The necessary construction for catching exceptions is a try catch system. If you wish to have your program check for exceptions, you must enclose the code that may have exceptions thrown in a try block. For example: try { divide(10, 0); } catch(int i) { if(i==dividebyzero) { cerr<<"divide by zero error"; ZES s DCOER, Pune-411041 Page 51

The catch statement catches exceptions that are of the proper type. You can, for example, throw objects of a class to differentiate between several different exceptions. It is often more useful for you to create a class that stores information on exceptions as they occur. For example, it would be more useful if you had a class to handle exceptions. class DivideByZero { public: double divisor; DivideByZero(double x); }; DivideByZero::DivideByZero(double x) : divisor(x) {} int divide(int x, int y) { if(y==0) { throw DivideByZero(x); } } try { divide (12, 0); } catch (DivideByZero divzero) { cerr<<"attempted to divide "<<divzero.divisor<<" by zero"; } ZES s DCOER, Pune-411041 Page 52

If you wish to catch more than one possible exception, you can specify separate catch blocks for each type of exception. It's also possible to have a general exception handler that will respond to any thrown exception. To use it, simply use catch (...) for the catch statement and print a general warning of some kind. The handy thing to remember about exception handling is that the errors can be handled outside of the regular code. This means that it is easier to structure the program code, and it makes dealing with errors more centralized.. In C, you might see some error handling code to free memory and close files repeated five or or six times, once for each possible error. A solution some programmer s preferred was to use a goto statement that jumped all the way to the cleanup code. Now, you can just surround your code with a try-catch block and handle any cleanup following the catch (possibly with an additional copy of your cleanup routine inside the catch block if you intend to throw the exception again to alert the calling function of an error). Facilities: Linux Operating Systems, GCC, Eclipse framework, VC++. Algorithm: 1. Start 2. Read television details such as model number, screen size in inches and the price. 3. Print data members. 4. Stop Input: Class Television Data members: model number, screen size, price Member functions: ZES s DCOER, Pune-411041 Page 53

Overloaded Insertion and Extraction operators. Get data, Display data. Output: If exception is caught display error message. Conclusion: Hence, we have successfully studied concept of exception handling. Questions: 1. How exception is handled in c++? 2. When should a program throw exception? 3. When do we use multiple catch handlers? Practice Assignments: 1. Perform Division by zero exceptional handling? 2. Perform Array Index out of range exceptional handling? ZES s DCOER, Pune-411041 Page 54

GROUP B: ASSIGNMENTS (Any Two) ZES s DCOER, Pune-411041 Page 55

Experiment No: 1 Title: Aim: Area of rectangle and triangle using inheritance. Implement C++/Java/Python program to create a base class called shape. Use this class to store two double type values that could be used to compute the area of figures. Derive two specific classes called function get_data() to initialize base class data members and another member function display_area() to compute and display the area of figures. Make classes to suit their requirements. Using these three classes, design a program that will accept dimension of a triangle or a rectangle interactively, and display the area. Remember the two values given as input will be treated as lengths of two sides in the case of rectangles, and as base and height in the case of triangles, and used as follows: Area of rectangle= x*y Area of triangle =1/2*x*y Prerequisites: Data Structures and problem Solving Objectives: To learn the concept of inheritance. To study the representation, implementation and applications of data structures To study implementation of data structures using OOP concepts Theory: Inheritance Inheritance is the process by which objects can acquire the properties of objects of other class. In OOP, inheritance provides reusability, like, adding additional features to an existing class without modifying it. This is achieved by deriving a new class from the existing one. The new class will have combined features of both ZES s DCOER, Pune-411041 Page 56

the classes. Types of Inheritance 1. Single inheritance 2. Multiple inheritance 3. Multilevel inheritance 4. Hierarchical inheritance 5. Hybrid Inheritance There are three types of class inheritance: public, private and protected The protected access specifier is similar to private. Its only difference occurs in fact with inheritance. When a class inherits from another one, the members of the derived class can access the protected members inherited from the base class, but not its private members. What a derived class inherits Every data member defined in the parent class (although such members may not always be accessible in the derived class!) Every ordinary member function of the parent class (although such members may not always be accessible in the derived class!) The same initial data layout as the base class What a derived class doesn't inherit The base class's constructors and destructor The base class's assignment operator The base class's friends What a derived class can add New data members New member functions New constructors and destructor New friends ZES s DCOER, Pune-411041 Page 57

E.g. Suppose that we want to declare a series of classes that describe polygons like our CRectangle, or like CTriangle. They have certain common properties, such as both can be described by means of only two sides: height and base. This could be represented in the world of classes with a class CPolygon from which we would derive the two other ones: CRectangle and CTriangle. The class CPolygon would contain members that are common for both types of polygon. In our case: width and height. And CRectangle and CTriangle would be its derived classes, with specific features that are different from one type of polygon to the other. Classes that are derived from others inherit all the accessible members of the base class. That means that if a base class includes a member A and we derive it to another class with another member called B, the derived class will contain both members A and B. In order to derive a class from another, we use a colon (:) in the declaration of the derived class using the following format: Class derived_class_name: public base_class_name { /*...*/ }; Where derived_class_name is the name of the derived class and base_class_name is the name of the class on which it is based. The public access specifier may be replaced by any one of the other access specifiers protected and private. This access specifier describes the minimum access level for the members that are inherited from the base class. // derived classes #include <iostream> using namespace std; ZES s DCOER, Pune-411041 Page 58

class CPolygon { protected: int width, height; public: void set_values (int a, int b) { width=a; height=b;} }; class CRectangle: public CPolygon { public: int area () { return (width * height); } }; class CTriangle: public CPolygon { public: int area () { return (width * height / 2); } }; int main () { CRectangle rect; CTriangle trgl; rect.set_values (4,5); trgl.set_values (4,5); cout << rect.area() << endl; cout << trgl.area() << endl; return 0; } The objects of the classes CRectangle and CTriangle each contain members inherited from CPolygon. These are: width, height and set_values(). ZES s DCOER, Pune-411041 Page 59

Multiple inheritance Allows you to create a derived class that inherits properties from more than one base class. Because a derived class inherits members from all its base classes, ambiguities can result. For example, if two base classes have a member with the same name, the derived class cannot implicitly differentiate between the two members. In the following example, classes A, B, and C are direct base classes for the derived class X: class A { /*... */ }; class B { /*... */ }; class C { /*... */ }; class X : public A, private B, public C { /*... */ }; Facilities: Linux Operating Systems, GCC, Eclipse framework, VC++. Algorithm: 1. Start 2. Read the values as length of two sides. 3. Print output. 4. Stop Input: Length of base and height. Output: Area of rectangle. Conclusion: Hence, we have successfully implemented class shape, to calculate the area of rectangle. ZES s DCOER, Pune-411041 Page 60

Questions: 1. What are the different forms of inheritance? 2. When do we use protected access specifier? 3. What are Virtual Functions? How to implement virtual functions in C 4. Explain protected mode. 5. Diagram of multiple inheritance 6. What's the difference between public, private, and protected? ZES s DCOER, Pune-411041 Page 61

Experiment No: 2 Title: Bubble sort using function template. Aim: Implement C++/Java/Python program for bubble sort using function template Prerequisites: Data Structures and problem Solving Objectives: To understand the concept of function template. Theory: Function templates Function templates are special functions that can operate with generic types. This allows us to create a function template whose functionality can be adapted to more than one type or class without repeating the entire code for each type. In C++ this can be achieved using template parameters. A template parameter is a special kind of parameter that can be used to pass a type as argument: just like regular function parameters can be used to pass values to a function, template parameters allow to pass also types to a function. These function templates can use these parameters as if they were any other regular type. The format for declaring function templates with type parameters is: template<classidentifier>function_declaration; template<typenameidentifier>function_declaration; For example, to create a template function that returns the greater one of two objects we could use: 1 template <class mytype> 2 mytype GetMax (mytype a, mytype ZES s DCOER, Pune-411041 Page 62

3 b) { 4 return (a>b?a:b); } Here we have created a template function with mytype as its template parameter. This template parameter represents a type that has not yet been specified, but that can be used in the template function as if it were a regular type. As you can see, the function template GetMax returns the greater of two parameters of this stillundefined type. Template is a powerful feature of Object oriented programming. They give the flexibility to a programmer for using any data type in a function without rewriting the whole boring function for each data type again and again. Here in this program we have written a function for Bubble sort and we have added a template tag before the function so that, the parameter will be of the data type Name. Everything is same except some variable data types. Take a look at the below program, you ll get a clear idea. In the main function we are passing some predefined values into the bubble function by calling the function bubble(a,6) where a is the array containing integers and 6 is the size of array. After passing the values into the function we are displaying the sorted order. You can also rewrite the main function in a way that the user will enter the data and size of the array. Bubble sort The simplest sorting algorithm is bubble sort. The bubble sort works by iterating down an array to be sorted from the first element to the last, comparing each pair of elements and switching their positions if necessary. This process is repeated as many times as necessary, until the array is sorted. Since the worst case scenario is that the array is in reverse order, and that the first element in sorted array is the last element in the starting array, the most exchanges that will be necessary is equal to the length of the array. Here is a simple example: Given an array 23154 a bubble sort would lead to the following sequence of partially sorted arrays: ZES s DCOER, Pune-411041 Page 63

21354, 21345, 12345. First the 1 and 3 would be compared and switched, then the 4 and 5. On the next pass, the 1 and 2 would switch, and the array would be in order. The basic code for bubble sort looks like this, for sorting an integer array: for(int x=0; x<n; x++) { for(int y=0; y<n-1; y++) { if(array[y]>array[y+1]) { int temp = array[y+1]; array[y+1] = array[y]; array[y] = temp; } } } Notice that this will always loop n times from 0 to n, so the order of this algorithm is O(n^2). This is both the best and worst case scenario because the code contains no way of determining if the array is already in order. A better version of bubble sort, known as modified bubble sort, includes a flag that is set if an exchange is made after an entire pass over the array. If no exchange is made, then it should be clear that the array is already in order because no two elements need to be switched. In that case, the sort should end. The new best case order for this algorithm is O(n), as if the array is already sorted, then no exchanges are made. You can figure out the code yourself! It only requires a few changes to the original bubble sort. Algorithm Bubble Sort: Bubble(A, N) //Let A be an array with N elements. //This algorithm sorts the elements in array A. Repeat for I = 0 to N: Repeat for J = 0 to N-1: ZES s DCOER, Pune-411041 Page 64

If A[J] > A[J + 1], then Interchange A[J] & A[J +1]. End for End for. End Bubble Sort Facilities: Linux Operating Systems, GCC, Eclipse framework, VC++. Algorithm: 1. Start 2. Read the numbers as integers or characters. 3. Sort them according to ascending order. 4. Print values as output. 5. Stop Input: Integer values, Character values. Output: Sorted order of integers as well as characters. Conclusion: Hence, we have successfully implemented bubble sort using function template Questions: 1. What is template? 2. What is function template? 3. How to sort elements using bubble sort? 4. What is Complexity of bubble sort? ZES s DCOER, Pune-411041 Page 65

Experiment No: 3 Title: Aim: Exception Handling Create a C++ class named Television that has data members to hold the model number and the screen size in inches, and the price. Member functions include overloaded insertion and extraction operators. If more than four digits are entered for the model, if the screen size is smaller than 12 or greater than 70 inches, or if the price is negative or over $5000 then throw an integer. Write a main() function that instantiates a television object, allows user to enter data and displays the data members.if an exception is caught, replace all the data member values with zero values. Prerequisites: Data Structures and problem Solving Objectives: To understand the concept of Exception handling. Theory: ZES s DCOER, Pune-411041 Page 66

One benefit of C++ over C is its exception handling system. An exception is a situation in which a program has an unexpected circumstance that the section of code containing the problem is not explicitly designed to handle. In C++, exception handling is useful because it makes it easy to separate the error handling code from the code written to handle the chores of the program. Doing so makes reading and writing the code easier. Furthermore, exception handling in C++ propagates the exceptions up the stack; therefore, if there are several functions called, but only one function that needs to reliably deal with errors, the method C++ uses to handle exceptions means that it can easily handle those exceptions without any code in the intermediate functions. One consequence is that functions don't need to return error codes, freeing their return values for program logic. When errors occur, the function generating the error can 'throw' an exception. For example, take a sample function that does division: const int DivideByZero = 10; //... double divide(double x, double y) { if(y==0) { throw DivideByZero; } return x/y; } The function will throw DivideByZero as an exception that can then be caught by an exception-handling catch statement that catches exceptions of type int. The necessary construction for catching exceptions is a try catch system. If you wish to have your program check for exceptions, you must enclose the code that may have exceptions thrown in a try block. For example: try { ZES s DCOER, Pune-411041 Page 67

divide(10, 0); } catch(int i) { if(i==dividebyzero) { cerr<<"divide by zero error"; } } The catch statement catches exceptions that are of the proper type. You can, for example, throw objects of a class to differentiate between several different exceptions. It is often more useful for you to create a class that stores information on exceptions as they occur. For example, it would be more useful if you had a class to handle exceptions. If you wish to catch more than one possible exception, you can specify separate catch blocks for each type of exception. It's also possible to have a general exception handler that will respond to any thrown exception. To use it, simply use catch (...) for the catch statement and print a general warning of some kind. The handy thing to remember about exception handling is that the errors can be handled outside of the regular code. This means that it is easier to structure the program code, and it makes dealing with errors more centralized.. Facilities: Linux Operating Systems, GCC, Eclipse framework, VC++. Algorithm: 1. Start 2. Read television details such as model number, screen size in inches and the price. 3. Print data members. ZES s DCOER, Pune-411041 Page 68

4. Stop Input: 1. Class Television 2. Data members: model number, screen size, price 3. Member functions: 4. Overloaded Insertion and Extraction operators. 5. Get data, Display data. Output: If exception is caught display error message. Conclusion: Hence, we have successfully studied concept of exception handling. Questions: 1. How exception is handled in c++? 2. When should a program throw exception? 3. When do we use multiple catch handlers? Practice Assignments: 1. Perform Division by zero exceptional handling? 2. Perform Array Index out of range exceptional handling? ZES s DCOER, Pune-411041 Page 69

Experiment No: 4 Title: Employee bio-data using inheritance Aim: Create employee bio-data using following classes: i) Personal record ii) Professional record iii) Academic record Assume appropriate data members and member function to accept required data & print bio-data. Create biodata using multiple inheritance using C++/Java/Python. Prerequisites: Data Structures and problem Solving Objectives: To learn concept of Inheritance. Theory: Inheritance Inheritance is the process by which objects can acquire the properties of objects of other class. In OOP, inheritance provides reusability, like, adding additional features to an existing class without modifying it. This is achieved by deriving a new class from the existing one. The new class will have combined features of both the classes. Types of Inheritance 1. Single inheritance 2. Multiple inheritance 3. Multilevel inheritance 4. Hierarchical inheritance 5. Hybrid Inheritance There are three types of class inheritance: public, private and protected The protected access specifier is similar to private. Its only difference occurs in fact with inheritance. When a class inherits from another one, the members of the derived class can access the protected members inherited from the base class, but not its private members. Difference between public, private and protected ZES s DCOER, Pune-411041 Page 70

A member (either data member or member function) declared in a private section of a class can only be accessed by member functions and friends of that class A member (either data member or member function) declared in a protected section of a class can only be accessed by member functions and friends of that class, and by member functions and friends of derived classes A member (either data member or member function) declared in a public section of a class can be accessed by anyone The following table indicates how the attributes are inherited in the three different types of inheritance: Access specifier in the base class Private Public protected public inheritance private inheritance protected inheritance The member is The member is The member is private. public. protected. The member is The member is The member is private. private. private. The member is The member is The member is private. protected. protected. What a derived class inherits Every data member defined in the parent class (although such members may not always be accessible in the derived class!) Every ordinary member function of the parent class (although such members may not always be accessible in the derived class!) The same initial data layout as the base class What a derived class doesn't inherit The base class's constructors and destructor The base class's assignment operator ZES s DCOER, Pune-411041 Page 71

The base class's friends What a derived class can add New data members New member functions New constructors and destructor New friends Facilities: Linux Operating Systems, GCC, Eclipse framework, VC++. Algorithm: 1. Start 2. Read employee information i.e. personal, professional academic. 3. Print all information from database. 4. Stop Input: Base class which consist data members name of employee, qualification and etc. Three derived classes (B1, B2, and B3) which contains data members relevant to personal, professional and academic details. Output: 1. Display table containing all data Member 2. Insert a new entry Conclusion: Hence, we have successfully studied concept of inheritance. Questions: 1. What are the different forms of inheritance? 2. When do we use protected access specifier? ZES s DCOER, Pune-411041 Page 72

3. How does containership differ from inheritance? 4. What are Virtual Functions? How to implement virtual functions in C 5. Explain protected mode 6. Diagram of multiple inheritance 7. What's the difference between public, private, and protected? 8. Pictorial representation of object from your program Practice Assignments: 1. Design a base class with Employee name, date of birth, blood group and another base class consisting of the data members such as designation and salary. Design one more base class consisting of the insurance policy number and contact address. The derived class contains the data member telephone numbers and driving license number. Write a menu driven program to carry out the following things: Build a master table Display Insert a new entry Delete entry Edit Search for a record ZES s DCOER, Pune-411041 Page 73

Experiment No: 4 Title: Employee bio-data using inheritance Aim: Create employee bio-data using following classes: i) Personal record ii) Professional record iii) Academic record Assume appropriate data members and member function to accept required data & print bio-data. Create biodata using multiple inheritance using C++/Java/Python. Prerequisites: Data Structures and problem Solving Objectives: To learn concept of Inheritance. Theory: Inheritance Inheritance is the process by which objects can acquire the properties of objects of other class. In OOP, inheritance provides reusability, like, adding additional features to an existing class without modifying it. This is achieved by deriving a new class from the existing one. The new class will have combined features of both the classes. Types of Inheritance Single inheritance Multiple inheritance Multilevel inheritance Hierarchical inheritance Hybrid Inheritance There are three types of class inheritance: public, private and protected The protected access specifier is similar to private. Its only difference occurs in fact with inheritance. When a class inherits from another one, the members of the derived class can access the protected members inherited from the base class, but not its private members. ZES s DCOER, Pune-411041 Page 74

Difference between public, private and protected A member (either data member or member function) declared in a private section of a class can only be accessed by member functions and friends of that class A member (either data member or member function) declared in a protected section of a class can only be accessed by member functions and friends of that class, and by member functions and friends of derived classes A member (either data member or member function) declared in a public section of a class can be accessed by anyone The following table indicates how the attributes are inherited in the three different types of inheritance: Access specifier in the base class Private Public protected public inheritance private inheritance protected inheritance The member is The member is The member is private. public. protected. The member is The member is The member is private. private. private. The member is The member is The member is private. protected. protected. What a derived class inherits Every data member defined in the parent class (although such members may not always be accessible in the derived class!) Every ordinary member function of the parent class (although such members may not always be accessible in the derived class!) The same initial data layout as the base class What a derived class doesn't inherit The base class's constructors and destructor ZES s DCOER, Pune-411041 Page 75

The base class's assignment operator The base class's friends What a derived class can add New data members New member functions New constructors and destructor New friends Facilities: Linux Operating Systems, GCC, Eclipse framework, VC++. Algorithm: 5. Start 6. Read employee information i.e. personal, professional academic. 7. Print all information from database. 8. Stop Input: Base class which consist data members name of employee, qualification and etc. Three derived classes (B1, B2, and B3) which contains data members relevant to personal, professional and academic details. Output: 3. Display table containing all data Member 4. Insert a new entry Conclusion: Hence, we have successfully studied concept of inheritance. Questions: 1. What are the different forms of inheritance? ZES s DCOER, Pune-411041 Page 76

2. When do we use protected access specifier? 3. How does containership differ from inheritance? 4. What are Virtual Functions? How to implement virtual functions in C 5. Explain protected mode 6. Diagram of multiple inheritance 7. What's the difference between public, private, and protected? 8. Pictorial representation of object from your program Practice Assignments: 1. Design a base class with Employee name, date of birth, blood group and another base class consisting of the data members such as designation and salary. Design one more base class consisting of the insurance policy number and contact address. The derived class contains the data member telephone numbers and driving license number. Write a menu driven program to carry out the following things: Build a master table Display Insert a new entry Delete entry Edit Search for a record ZES s DCOER, Pune-411041 Page 77

Experiment No: 5 Title: Aim: POSIX-spawn() function to create a process Using multi-core programming implement POSIX-spawn() function to create a process Prerequisites: Basic Concepts on Multicore Programming and Data Structures and problem SolvingConcepts. Objectives: To learn concept of Process Creation using posix_spwan() function. Theory: Portable Operating System Interface (POSIX) is a standard that defines a standard operating system interface and environment, including a command interpreter (or shell ) and common utility programs to support applications portability at the source code level. The standard is intended be used by both applications developers and system implementors. To make this book accessible to the broadest possible audience of system and application developers we choose to present OS API material using the POSIX standard. The major operating system environments ZOS, Solaris, AIX, Windows, Mac OS X, Linux, HP -UX, IRIX all claim basic support for the POSIX standard. While each of these environments has its own proprietary APIs, each also has support for the POSIX standard. Since the concepts, examples, and programs we discuss are based on the POSIX standard, you can try them out in virtually any environment. The POSIX standard plays the role of a cross - platform pseudocode that allows us to cover the main concepts of multicore programming in a language that can be implemented in all of the major environments. Further, POSIX implements a kind of common denominator OS interface. Using posix_spawn() Similarly to the fork - exec() and system() methods of process creation, the posix_spawn() functions create new child processes from specified process images. But the posix_spawn() functions create child processes with more fine - grained control during creation. While the POSIX API also supports the fork - exec() class of functions, we focus on the posix_spawn ZES s DCOER, Pune-411041 Page 78

functions for process creation to achieve greater cross - platform compatibility. Some platforms may have trouble implementing fork(), so the posix_spawn() functions can be used as substitution. These functions control the attributes that the child process inherits from the parent process, including: File descriptors Scheduling policy Process group id User and group id Signal mask Synopsis #include < spawn.h > int posix_spawn(pid_t *restrict pid, const char *restrict path, const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t *restrict attrp, char *const argv[restrict], char *const envp[restrict]); int posix_spawnp(pid_t *restrict pid, const char *restrict file, const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t *restrict ZES s DCOER, Pune-411041 Page 79

attrp, char *const argv[restrict], char *const envp[restrict]); The difference between these two functions is that posix_spawn() has a path parameter and posix_spawnp() has a file parameter. The path parameter in the posix_spawn() function is the absolute or relative pathname to the executable program file. file in posix_spawnp() is the name of the executable program. If the parameter contains a slash, then file is used as a pathname. If not, the path to the executable is determined by PATH environment variable. Facilities: Linux Operating Systems, GCC, Eclipse framework, VC++. Input: Process Id, Path, Process State, Process Priority and process environment variable. Output: New Process with Id. Conclusion: posix_spawn() is used to create new process. Questions: 1. What is posix_spawn() function? 2. What syntax of posix_spawn() function? ZES s DCOER, Pune-411041 Page 80

Experiment No: 6 Title: Aim: Simple Interface Class for POSIX Process. Implement a simple interface class for a POSIX Process using multi-core programming. Prerequisites: Basic Concepts on Multicore Programming and Data Structures and problem Solving Concepts. Objectives: To learn concept of Simple Interface Class for POSIX Process. Theory: Portable Operating System Interface (POSIX) is a standard that defines a standard operating system interface and environment, including a command interpreter (or shell ) and common utility programs to support applications portability at the source code level. The standard is intended be used by both applications developers and system implementors. To make this book accessible to the broadest possible audience of system and application developers we choose to present OS API material using the POSIX standard. The major operating system environments ZOS, Solaris, AIX, Windows, Mac OS X, Linux, HP -UX, IRIX all claim basic support for the POSIX standard. While each of these environments has its own proprietary APIs, each also has support for the POSIX standard. Since the concepts, examples, and programs we discuss are based on the POSIX standard, you can try them out in virtually any environment. The POSIX standard plays the role of a cross - platform pseudocode that allows us to cover the main concepts of multicore programming in a language that can be implemented in all of the major environments. Further, POSIX implements a kind of common denominator OS interface. Interface An interface is a collection of abstract methods. A class implements an interface, thereby inheriting the abstract methods of the interface. An interface is not a class. Writing an interface is similar to writing a class, but they are two different concepts. A class describes the attributes and behaviors of an object. An interface contains behaviors that a class implements. ZES s DCOER, Pune-411041 Page 81

Unless the class that implements the interface is abstract, all the methods of the interface need to be defined in the class. This simple interface class can be used to add a more object - oriented approach to process management. However, an interface is different from a class in several ways, including: You cannot instantiate an interface. An interface does not contain any constructors. All of the methods in an interface are abstract. An interface cannot contain instance fields. The only fields that can appear in an interface must be declared both static and final. An interface is not extended by a class; it is implemented by a class. An interface can extend multiple interfaces. Facilities: Linux Operating Systems, GCC, Eclipse framework, VC++. Input: Process Id, Path, Process State, Process Priority and process environment variable. Output: Output from header file method execution. Conclusion: Interface class is used to add a more object - oriented approach to process management. Questions: 1. What is Interface Class? 2. What are uses of Simple Interface Class? ZES s DCOER, Pune-411041 Page 82

Experiment No: 7 Title: Aim: POSIX semaphore Implement POSIX semaphore using multi-core programming Prerequisites: Basic Concepts on Multicore Programming and Data Structures and problem Solving Concepts. Objectives: To learn concept of Posix Semaphore. Theory: The POSIX semaphore defines a named binary semaphore. The name corresponds to a pathname in the filesystem. Table below lists the basic functions for using a semaphore along with a brief description. Facilities: Linux Operating Systems, GCC, Eclipse framework, VC++. ZES s DCOER, Pune-411041 Page 83

Input: New Processes with attribute. Output: Path between multiple processes. Conclusion: Working of Posix semaphore is studied. Questions: 1. What is posix semaphore? 2. What are uses of posix semaphore? ZES s DCOER, Pune-411041 Page 84

GROUP C: ASSIGNMENTS (Any one) ZES s DCOER, Pune-411041 Page 85

Experiment No: 1 Title: Matrix Multiplication. Aim: Write a concurrent program for Matrix Multiplication. Effective use of Multicore Architecture is expected. Prerequisites: Data Structures and problem Solving Objectives: To understand the concept of multicore programming, shared memory, concurrent model. To analyze speedup achieved by the parallel algorithm when increases the size of the input data and the number of cores of the architecture. To understand the concept of multithreading. Theory: Given a matrix A(m r) m rows and r columns, where each of its elements is denoted aij with 1 i m and 1 j r, and a matrix B(r n) of r rows and n columns, where each of its elements is denoted bij with 1 i r, and 1 j n, the matrix C resulting from the operation of multiplication of matrices A and B, C = A B, is such that each of its elements is denoted ij with 1 i m and 1 j n, and is calculated follows The simplest way of multiplying two matrices takes about n3 steps.the number of operation required to multiply A x B is: m n (2r-1) For simplicity, we will work with square matrices of size n x n. Considered the number of ZES s DCOER, Pune-411041 Page 86

processors available in parallel machines as p. The matrixes to multiply will be A and B. Both will be treated as dense matrices (with few 0's), the result will be stored it in the matrix C. It is assumed that the processing nodes are homogeneous, due this homogeneity it is possible achieve load balancing. Implementation Consider two square matrices A and B of size n that have to be multiplied: 1. Partition these matrices in square blocks p, where p is the number of processes available. 2. Create a matrix of processes of size p1/2 x p1/2 so that each process can maintain a block of A matrix and a block of B matrix. 3. Each block is sent to each process, and the copied sub blocks are multiplied together and the results added to the partial results in the C sub-blocks. 4. The A sub-blocks are rolled one step to the left and the B sub-blocks are rolled one step upward. 5. Repeat steps 3 y 4 sqrt(p) times. Algorithm Matrix-Multiply(A, B) 1 if columns [A] rows [B] 2 then error "incompatible dimensions" 3 else 4 for i =1 to rows [A] 5 for j = 1 to columns [B] 6 C[i, j] =0 7 for k = 1 to columns [A] ZES s DCOER, Pune-411041 Page 87

8 C[i, j]=c[i, j]+a[i, k]*b[k, j] 9 return C To multiply two matrixes sufficient and necessary condition is "number of columns in matrix A = number of rows in matrix B. Loop for each row in matrix A. Loop for each columns in matrix B and initialize output matrix C to 0. This loop will run for each rows of matrix A. Loop for each columns in matrix A. Multiply A[i,k] to B[k,j] and add this value to C[i,j]. Return output matrix C. Input: Two Matrices Output: Product of two matrices. Conclusion: The distribution of data and computing division across multiple processors offers many advantages: With Multicore architecture, it is required less effort in terms of the timing required for data handling, since each process has its own portion. Multicore architecture offers flexibility for data exchange. Questions: 1. What is Multithreading? 2. Explain Multicore architecture? 3. What are advantages of using Multicore architecture? ZES s DCOER, Pune-411041 Page 88

Experiment No: 2 Title: Dining philosopher s problem using concurrent programming. Aim: Write a concurrent program to implement the Dining philosopher s problem. Effective use of Multicore Architecture is expected. Prerequisites: Data Structures and problem Solving Objectives: To understand the concept of multicore programming, shared memory, semaphore, deadlock, concurrent model. To understand the concept of multithreading. Theory: The dining philosopher s problem is an example problem often used in concurrent algorithm design to illustrate synchronization issues and techniques for resolving them. Illustration of the dining philosophers problem Five silent philosophers sit at a table around a bowl of spaghetti. A fork is placed ZES s DCOER, Pune-411041 Page 89