Вы находитесь на странице: 1из 7

Ds & OOPs Lab ManualScribd Upload Search Explore DocumentsBooks - FictionBooks - Non-fictionHealth & MedicineBrochures/CatalogsGovernment DocsHow-To Guides/ManualsMagazines/NewspapersRecipes/MenusSchool Work+

all categoriesFeaturedRecentPeopleAuthorsStudentsResearchersPublishersGovernment & NonprofitsBusinessesMusiciansArtists & DesignersTeachers+ all categoriesMost FollowedPopularSign Up|Log InWe've updated our privacy policy! Click here to read about it.inShare0Embed DocCopy LinkReadcastCollectionsCommentGo BackDownload SYLLABUSEC 2209 DATA STRUCTURES AND OBJECT ORIENTED PROGRAMMING LAB 1. Basic Programs for C++ Concepts.2. Array implementation of List Abstract Data Type (ADT) .3. Linked list implementation of List ADT .4. Cursor implementation of List ADT .5. Stack ADT - Array and linked list implementations.The next two exercises are to be done by implementing the following source files(a) Program source files for Stack Application 1(b) Array implementation of Stack ADT(c) Linked list implementation of Stack ADT(d) Program source files for Stack Application 2An appropriate header file for the Stack ADT should be #included in (a) and (d) 6. Implement any Stack Application using array implementation of Stack ADT (byimplementing files (a) and (b) given above) and then using linked list implementation of Stack ADT (by using files (a) and implementing file (c))7. Queue ADT Array and linked list implementations8. Search Tree ADT Binary Search Tree9. Heap Sort10. Quick SortLIST OF EQUIPMENTS AND COMPONENTS FOR A BATCH OF 30 STUDENTS ( 1per Batch)S.NoName of the equipments / ComponentsQuzntity RequiredRemarks1P IV Computer Variable DC Power Supply30 Nos2C and C++ Compiler 30 UsersConsumables (Minimum of 25 Nos. each)Nil1 CONTENTS Basic Programs for C++Ex. No: 1(i)Control StatementsDate:AIM:To implement control statements to check whether the given number is prime or not using C++ Language.2S.NoDATENAME OF THE EXPERIMENTPAGENO.MARKSSIGN1(a)Control Statements31(b)Function Overloading and Default Arguments51(c)Constructor, Destructor &Copy Constructor81(d)Operator Overloading and Type Conversion111(e)Inheritance and Virtual Function141(f)Files182Implementation of List ADT using array203Linked List Implementation of List ADT244Cursor Implementation using List365(a)Array Implementation of Stack415(b)Implementation of stack using Linked List476Implementation of the stack application usingarray547(a)Array Implementation of Queue637(b)Implementation of Queue using Linked List728Implementation of Binary Search Tree809Heap Sort8410Implementation of Quick Sort using array93 ALGORITHM:Step 1: Start the program.Step2: Read the input value a.Step3: Check whether the given number is divisible by same number or any other number (using for loop).Step4: (a) Check whether the remainder is equal to zero.(b) If not, execute the loop until the number of iteration is equal to the inputValue.Step 5: (a) If the number of iteration is equal to the input, then displayNumber is Prime.(b) If not, display Number is not Prime.Step 6: Stop.PROGRAM:.#include<iostream.h>#include<stdlib.h>void main(){int n,i;cout<<"\n Enter the number";cin>>n;for(i=2;i<=n/2;++i)if(n%i==0){cout<<"\n Number is not prime";exit(0);}cout<<"\n Number is prime";}3 RESULT:Ex. No: 1(ii)Function Overloading and Default ArgumentsDate:AIM:To implement function overloading with default arguments.ALGORITHM:Step 1: Include the needed header files.4 Step 2: Define function overloading.Step 3: Create a function by giving your name as the function name.3.1: Create another function with same name with singleargument(parameter).3.2: Create another function with same name but with more than oneargument (parameter).Data types can be of your own wish.Step 4: Define the default argument.Step 5: Create a function by giving your name as the

function name and pass twoarguments to the function and assign the value to the parameters.5.1: Call that function into main function with or without passing anargument.Step 6: End of main.a.PROGRAM-Function Overloading#include<iostream.h>#include<conio.h>void sum(int i,int j){cout<<"\nthe conjugate is";cout<<i;if(j>0)cout<<"-j"<<j;}void conju(int a,int b){cout<<"\nthe complex number entered is:";cout<<a;if(b>0)cout<<"+j"<<b;sum(a,b);}void conju(int a){int b;cout<<"\nenter the value of the imaginary part";5 cin>>b;cout<<"\nthe complex number is:";cout<<a;if(b>0)cout<<"+j"<<b;sum(a,b);}void conju(){int a,b;cout<<"\nenter the real part";cin>>a;cout<<"\nenter the imaginary part";cin>>b;cout<<"\nthe entered complex number is:";cout<<a;if(b>0)cout<<"+j"<<b;sum(a,b);} void main(){int a,b;clrscr();cout<<"enter the real part:";cin>>a;cout<<"\nenter the imaginary part:";cin>>b;conju(a,b);conju(a);conju();getch();}RESULT:b. PROGRAMUsing Default Argument #include<iostream.h>#include<conio.h>void conju(int a=2,int b=3){cout<<the complex no is;cout<<a;if(b>0)cout<<+j<<b;6 cout<<the conjugate is;cout<<a;if(b>0)cout<<-j<<b;}Void main(){conju();getch();}RESULT:Ex. No: 1(iii)Constructor, Destructor &Copy ConstructorDate:AIM:To implement the program using constructor, destructor and copyconstructor.ALGORITHM:7 Step 1: Include the needed header files.Step 2: Create a class named complex.2.1: Create the function inside the class with single parameter that has samename as the class name with no return types and assign any real andimaginary values to the complex number.Step 3: Create two objects (one with argument and the other with no argument).3.1: Copy that parameterized object into non parameterized object. Theobject acquires the property of assigned object.Step 4: Create the function inside the class with single parameter that has samename as the class name started with tilde (~) symbol with no return typeand assign any real and imaginary values to the complex number.4.1:Create a normal function outside the class. Within that function createthe object with same name.4.2:if that function is called into the main function ,then the destructor iscalled automatically.Step 5 : End of main.PROGRAM:#include<iostream.h>#include<conio.h>class area{float i,j,k;float area1,area2;public:area(){i=5;j=2;k=7;}area(int r)8 {i=r;cout<<"\n\nenter the length";cin>>j;cout<<"\n\nenter the breath";cin>>k;}area(int r,int l,int b){i=r;j=l;k=b;}void calcu(){area1=3.14*i*i;area2=j*k;}void show(){cout<<"\n\nthe radius of the circle is "<<i;cout<<"\n\nthe area of the circle is "<<area1;cout<<"\n\nthe length oh the rectangle is "<<j;cout<<"\n\nthe breath oh the rectangle is "<<k;cout<<"\n\nthe area of the rectangle is "<<area2;}~area(){cout<<"\n\nthe destructor is created";}};void main(){area a;clrscr();a.calcu();a.show();area b(5);b.calcu();b.show();area c(4,7,9);c.calcu();c.show();area a1=c;a1.calcu();9 a1.show();getch();}RESULT:Ex. No: 1(iv)Operator Overloading and Type ConversionDate:AIM:To implement the complex number class with necessary operator overloading and type conversion.ALGORITHM:Step 1: Include the needed header files.10 Step 2: Create a class named complex.2.1: Declare two variable x, y of float type.2.2: Create an initialization constructor with a floating point argument.2.2.1: Assign the value to variable a and y.2.3: Declare a friend function named sum (complex, complex).2.4: Declare a friend function named share (complex) inside the class.Step 3: Define the sum function to add two complex numbers by using classobjects.Step 4: Define the show function to display sum up

results of complex numbers.Step 5:Create main function with5.1: Create 3 objects of complex type.5.2: Create the constructor with 2 arguments variable and save it in 1stobject.5.3: Call the constructor with another 2 value & store it in the 2ndobject.5.4: Call the sum function with 1sttwo objects & store it in 3rdobject.5.5: Call the show function thrice with 3 objects to display the result.Step 6: End of main.a. PROGRAM: - Operator Overloading #include<iostream.h>#include<conio.h>class load{int a,b;public:void get(){cin>>a>>b;}void show( ){cin>>a >>b;}int operator +( load s1)11 {if((a>s1.a)&&(b>s1.b)){return 1;}else{return 0;}}}; void main(){load x,y;clrscr( );x.get();y.get();if(x+y){cout<<x is big;}else{cout<<y is big;}getch();}b. PROGRAM: -Type Conversion Class to basic#include<iostream.h>#include<conio.h>class tc{int hr,min,sec;public :void get(){Cin>>hr>>min>>sec;}Void show( )12 {Cout>>hr,min,sec;}operator int ( ){return hr*3600+min *60 +sec;}};void main(){int s;tc s1;clrscr();s1.get();s= s1;cout<< s;getch();}RESULT:Ex. No: 1(v)Inheritance and Virtual FunctionDate:AIM: To implement a program using inheritance and also to implement it byusing virtual function.ALGORITHM:13 Step 1: Include the needed header files.Step 2: Create a class named base.2.1 Create another class named derived and inherit the base class.2.2 Create an object using derived class object .Call the derived function andalso base class function.Step 3:Create a function in base class3.1 Create another class in the derived class and inherit the base class.3.2 Function that has a same name in base and derived class is known asfunction overriding.3.3 .Assign derived class location to base class using keyword new andcreate the objeat to the base class and call functions in both base class andderived classStep 4:End of programa. PROGRAM :Inheritance #include<iostream.h>#include<conio.h>Class A{Protected:int a; public:void getA(){Cin>> a;}Void showA( ){Cout<< a;}};Class B: public A{Protected:Int b;Public:Void get AB()14 Get A();Cin>>b;}Void show AB( ){Show A( );Cout<<b;}};Class ct{Protected:Int ans;Public:Void show(){Cout<<ans;}};Class large :public B,public ct;{Protected:int c; public:void getdata( ){getAB();cin>>c;}Void calculate( ){if(a>b)if(a>c)ans=a;else ans=c;else if (b>c)ans=b;else ans=c;}Void showdata( ){showAB( );15 cout<<c;ct : : show ( );} };void main( ){Clrscr( );large b; b.getdata( ); b.calculate( ); b.showdata( );getch( );} b. PROGRAM: Virtual Function #include<iostream.h>#include<conio.h>Class ece{Public:Virtual void show(){Cout<<base class from show;}};Class dep: public ece{Public:void show(){<<n;Cout<<derived class show;}};Void main(){Clrscr();ece a,*b;dep c,*d;B=&a; b->show(); b=&c;16 b -> show();getch( );}RESULT:Ex. No: 1(vi) FilesDate:AIM:To implement files concept by complex addition.ALGORITHM:Step 1:Include the needed header files.Step 2: Create a main() function.2.1:Create an ofstream object to open the file1.17 2.1.1:Read two complex number with operator.2.1.2:Close file 1.Step 2.2: Create an ifstream object to open file2 to read the content of file 1.2.2.1:if(c=(getch()= =))2.2.1.1 if(c+++++)2.2.1.2:add the two complex number.2.2.1.3:else if(c++= =-)2.2.1.4:subtract the two complex number.2.2.1.5:ELSE IF(C++ = =*)2.2.1.6:multiply the two complex number.2.2.2:open file3 to store the result.Step 2.3:close file3.Step 2.4:close file2.Step 3:End of program.PROGRAM:#include<iostream.h>#include<conio.h>#include<stdlib.h>#include< fstream.h>void main(){ifstream infile;ofstream outfile;char file[10],file1[10],ch;cin>>file;infile.open(file);if(infile.fail()){cout<<"not found";exit(1);}if(!infile.fail()){cout<<"found";getch();}cin>>file1;outfile.ope n(file1);if(outfile.fail()){cout<<"not found";}if(!outfile.fail()){cout<<"found";18

}while(!infile.eof()){ch=infile.get();outfile.put(ch);}getch();infile.close();ou tfile.close();}RESULT:Ex. No: 2 Implementation of List ADT using arrayDate:AIM:To write a C++ program for array implementation of list.Linked list:List means collection of elements in sequential order. In memory can store the list in twoways, one way is we can store elements in sequential memory locations. This is known as arrays.19 And the other way is, we can use pointers or links to associate the elements sequentially. Thisknown as Linked Lists.Implementations of listsThere are two types of implementations.List of sequentially stored elements- Using ArraysMuthuRajArunNaveenSelvamMalik 10203040\0A [ 0 ] A [ 1 ] A [ 2 ] A [ 3 ] A [ 4 ]Basic List operations1.Create of list2.Search a particular element from on list3.Insert of any element in the list4.Delete of any element from the list5.Display of listALGORITHM:Step 1:StartStep 2: Get the no-of element to be inserted into the list from the user.Step 3: Now enter the element into the list.Step 4: Then display the option for the user to perform insertion or deletion or tolocate numbers.Step 5: Check whether the position exists in the list or not if it does not exists weshould display LIST IS FULL.20ImplementationsStatic Implementationi. e. Using ArraysDynamic Implementationi. e. Using Linked List Step 6: If the position is greater than the given no-of list or it is lese than zero thanwe should display THE POSITION DOES NOT EXISTS.Step 7: Transform the elements through the position by a [i+1] = a [i ] then theelements is inserted in a position.Step 8: Then we should display the list.Step 9: Position is got by using for statement and by a[i]=a[i+1]Step 10: Locate the elements, got from the list.Step 11: If it is equal display not located else number not found.Step 12: Stop.List using arrayMax_size = 5Create a linked list10203040\0A [ 0 ] A [ 1 ] A [ 2 ] A [ 3 ] A [ 4 ]Insert 501020304050\0A [ 0 ] A [ 1 ] A [ 2 ] A [ 3 ] A [ 4 ]A [ 5 ]Delete 301020-14050\0A [ 0 ] A [ 1 ] A [ 2 ] A [ 3 ] A [ 4 ] A [ 5 ]Search 401020-14050\021 A [ 0 ] A [ 1 ] A [ 2 ] A [ 3 ] A [ 4 ] A [ 5 ]The element 40 is found the position is 3.Display of List1020304050\0A [ 0 ] A [ 1 ] A [ 2 ] A [ 3 ] A [ 4 ]A [ 5 ]The element is 10 the array position is 0The element is 20 the array position is 1The element is 30 the array position is 2The element is 40 the array position is 3The element is 50 the array position is 4PROGRAM:22 RESULT:Ex. No: 3Linked List Implementation of List ADTDate:AIM:To write a C++ program to implement list using linked list.LINKED LISTList means collection of elements in sequential order. We can use pointers or links toassociate the elements sequentially. This known as Linked Lists.23 A linked list is a set of nodes where each node has two fields data and a link. Wheredata field stores the actual piece of information and link field is used to point to next node.Basically link field is nothing but the address only.Structure of nodeIMPLEMENTATIONS OF LISTSThere are two types of implementations.List of elements with associated Pointers - Using Linked ListA Linked list of integers. Note that the link field of last node consists of NULL which indicates end of linked list.C structureTypedef struct linked{Int data;/ * data field * /Struct linked * next;/ * link field * /}node;While declaring C structure for a linked list 24datalink NaveenRajArunNULL20103040NULLImplementationsStatic Implementationi. e. Using ArraysDynamic Implementationi. e. Using Linked List Declare a structure in which two members are there i.e. data member and next pointer member.The data member can be character or integer or real kind of data depending upon the typeof the information that the linked list is having.The next member is essentially of a pointer type. And the pointer should be of structuretype. Because the next field holds the address of next node. And each node is basicallya structure consisting of data and next.BASIC LIST OPERATIONS1. Create of linked list.2. Display of linked list.3. Insertion of any element in the list.4. Deletion of any element from the list.5. Search a

particular element from on list.CREATION OF LINKED LISTCreating a single linked list starts with creating a node. Sufficient memory has to beallocated for creating a node.First create a memorynode * p; p = ( node * ) malloc ( sizeof ( node ) );is used to allocate sufficient memory for the structure of type node. After allocating memory for the structure of type node. The information the items(data) to be readfrom the user. The information is stored in the memory allocated by using malloc ( ) function of type node. p -> data = d; p -> next = NULL;The starting address of the list is assigned to the head pointer in the statement.head = p;data nextPHEAD25ArunNULL INSERTION OF ANY ELEMENT IN THE LISTOne of the most primitive operations that can be done in a list is the insertion of a node.Memory is to be allocated for the new node P( in a similar way that is done while creating a list ) before reading the data. The new node will contain empty data field and empty link field. Thedata field of the new node is then stored with the information read from the user. The link fieldof the new node is assigned NULL.Insertion of a node as a beginning nodeInsertion of a node as an end nodeInsertion of a node as a middle nodeINSERTION OF A NODE AS A BEGINNING NODECheck whether the list is empty or not. (i.e. check whether the head pointer is pointing to NULL or not). The head pointer is made to point the data field of the new node by assigning theaddress of the new node. The link field of the new node is made to point the data field of the firstnode in the list by assigning the address of the first node. New node is Pnode * p;p = ( node * ) malloc ( sizeof ( node ) );p -> data = d;p -> next = head;head = p;BEFORE INSERTIONPhead AFTER INSERTIONHEAD / P INSERTION OF A NODE AS AN END NODE263040NULL2010NULL103040NULL20 Check whether the list is empty or not. The link field of the node is made to point the datafield of the new node (by assigning the address of the new node). The link field of the new nodeis set to NULL.node * p,* q;q = head;p = ( node * ) malloc ( sizeof ( node ) );p -> data = d;p -> next = NULL;while ( q-> next ! = NULL ){q = q -> next;}q -> next = p;BEFORE INSERTIONHEAD/ qP AFTER INSERTIONHEAD qPINSERTION OF A NODE AS A MIDDLE NODEIf we want to insert the new node in an intermediate position in the list, the followingsteps are followed.Check whether the list is empty or not.Get the address of the preceding node after which the new node is to be inserted.The link field of the preceding node is made to point the data field of the new node (byassigning the address of the new node).The link field of the new node is made to point the data field of the node after the newnode. (by assigning its address).27102030NULL40NULL103040NULL20 node * p,* q;q = head;p = ( node * ) malloc ( sizeof ( node ) );p -> data = d;while (q -> data ! = n && q ! = NULL )q = q -> next;if ( q-> data = = n ){p -> next = q-> next;q -> next = p;}elseprintf("\n Not found");Insert after 20BEFORE INSERTIONHEAD / qPAFTER INSERTIONHEADqP DELETION OF ANY ELEMENT IN THE LIST2830NULL102040NULL10204030NULL Another primitive operation that can be done in a list is the deletion of a node. Memory isto be released for the node to be deleted. A node can be deleted from the list from three different places namely.deletion of a node as a beginning nodedeletion of a node as an end nodedeletion of a node as a middle nodeDELETION OF A NODE AS A BEGINNING NODEIf we want to delete a node from the start of the list, the following steps are followed. Setthe head pointer to the second node in the list( by assigning its address). The linked field of thedeleted node is made to point NULL.node * q;q = head;head = head -> next;free ( q );Delete 10BEFORE DELETIONHEAD / qAFTER DELETIONqHEADDELETION OF A NODE AS AN END NODERelease the last node of the list by assigning NULL to the data field of the precedingnode at the end of the list.node * p,* q;q = head;while ( q->

next ! = NULL ){p = q;29103040NULL203040NULL2010NULL q = q-> next;}p -> next = NULL;free ( q );Delete 40BEFORE DELETIONHEAD / qPAFTER DELETIONHEADPq DELETION OF A NODE AS A MIDDLE NODEThe link field of the preceding node pointing to the node to be deleted is released. Thelink field of the preceding node is made to point the data field of the node following the deletednode. The link field of the deleted node is made to point NULL.node * p,* q;q = head;if ( q -> data = = d ){Head = head -> next;Printf ( "\nThe deleted element is %d", q->data);Free ( q );return;}While ( q-> data ! = d && q ! = NULL ){p = q;q = q-> next;30103040NULL20102030NULL40NULL }If ( q -> data = = d ){P -> next = q -> next;printf("\nThe deleted element is %d", q->data);}elseprintf("\n Not found");free ( q );Delete 30BEFORE DELETIONHEAD/ qqP AFTER DELETIONHEAD/ qPqSEARCH A PARTICULAR ELEMENT FROM ON LISTTo read the information or to display the information in a linked list, You have totraversal (move) a linked list node by node until the end of the list is reached. Traversing a listinvolves the following steps.Assign the address of head pointer to a variable.Display the information in the data field.Traverse the list from one node to another by advancing the pointer.i.e. q = q -> next;node * p,* q;3110203040NULL102040NULL30NULL of 96 Leave a Comment Comment must not be empty. You must be logged in to leave a comment.SubmitCharacters: 400 Comment must not be empty.You must be logged in to leave a comment.SubmitCharacters: ...Ds & OOPs Lab Manual Download or Print2,567 ReadsInfo and Rating Category:Uncategorized. Rating: Upload Date:06/21/2011 Copyright:Attribution Non-commercial Tags:This document has no tags. Flag document for inapproriate content This is a private document. Uploaded by villixyloo FollowDownloadEmbed DocCopy LinkAdd To CollectionCommentsReadcastShareShare on Scribd: Readcast SearchTIP Press Ctrl-F F to quickly search anywhere in the document. SearchSearch History: Searching...Result 00 of 0000 results for result for p. Sections Ex. No: 1(ii) Function Overloading and Default Arguments Date: Ex. No: 2 Implementation of List ADT using array Date: Ex. No: 3 Linked List Implementation of List ADT Date: Ex. No: 4 Cursor Implementation using List Date: Ex. No: 5.a Array Implementation of Stack Date: Ex. No: 6Implement the stack application using array implementation of Stack ADT Ex. No: 7.a Array Implementation of Queue Ex. No: 10 IMPLEMENTATION OF QUICK SORT USING ARRAY Date: AIM: More from This UserRelated DocumentsMore From This User 133 p.147353 ECE Ds&Oopslabmanualdoc 3 p.Model-wt

96 p.Ds & OOPs Lab Manual Next 1 p.A a A19 p.CS2311Prev Related52 p.5.1.QueueFrom chittesir52 p.4.1.StackFrom chittesir52 p.SYBSc (DS)From chittesirNext51 p.18360103-Data-Structures-Using-C-Modern-College5From jk198851 p.Data Structures Using C [Modern College5]From X-MEN-NILESH101 p.Data Structure BCA14From api_user_11797_KeerthesH Prev Next50 p.Overview Of Data StructureFrom Viji Vinayaka50 p.StacksFrom Viji Vinayaka50 p.Data StructuresFrom Viji VinayakaPrev Next65 p.Primary operations defined on a Queue:From Ranjan Patnaik65 p.What is Data Structure?From Ranjan Patnaik65 p.DS-IntroFrom Ranjan PatnaikPrev Next65 p.Merge sort Method :From Ranjan Patnaik65 p.Abstract Data TypeFrom Ranjan Patnaik65 p.DS-IntroFrom Ranjan PatnaikPrev Next30 p.Ece-ds & Oops- ManualFrom gautham39 p.data strFrom Supreeth Mohan27 p.datastructFrom sarikbansalPrev Next27 p.datastructFrom sarikbansal13 p.Simulation of Scheduling AlgoFrom Kanika Kapoor26 p.datastructFrom sekhar1245Prev Next74 p.Data Structure Book Part1From renukumars107 p.Unit IIFrom api_user_11797_smartguysee80 p.l9-linkedlistFrom Anvesh NaiduPrev Next80 p.l9-linkedlistFrom Mrr Hapiness44 p.Stack and QueueFrom dasbhadar44 p.Pop StackFrom dasbhadarPrev Next44 p.Stack QueueFrom dasbhadar80 p.l9-linkedlistFrom Ashish YadavPrevUse your Facebook login and see what your friends are reading and sharing.Other login optionsLogin with FacebookSignupI don t have a Facebook account email address (required) create username (required) password (required) Send me the Scribd Newsletter, and occasional account related communications. Sign Up Privacy policy You will receive email notifications regarding your account activity. You can manage these notifications in your account settings. We promise to respect your privacy. Why Sign up?1. Discover and Connect With people of similar interests2. Publish Your Documents Quickly and easily3. Share Your Reading Interest On Scribd and social sites like Facebook and TwitterAlready have a Scribd account?email address or username password Log In Trouble logging in? Login SuccessfulNow bringing you back... Reset Your Password Back to Login Please enter your email address below to reset your password. We will send you an email with instructions on how to continue.Email Address: You need to provide a login for this account as well.Login Submit LoginDs & OOPs Lab ManualvillixylooFile Types Available: PDF, DOC, TXTLogin with FacebookUse my Scribd LoginSkip Loginemail address or username password Log In Trouble logging in? Upload Search Follow Us!scribd.com/scribdtwitter.com/scribdfacebook.com/scribdAboutPressBlogPartner sScribd 101Web StuffSupportFAQDevelopers / APIJobsTermsCopyrightPrivacyCopyright 2012 Scribd Inc.Language:EnglishChoose the language in which you want to experience Scribd:EnglishEspaolPortugus

Вам также может понравиться