DBMS Lab - Assignment 1, 2, 3, 4 || KD Edition || B.Tech Diaries

Assignment #1

  1. Create a table called EMP with the following structure:
    Name Type
    EMPNO NUMBER(6)
    ENAME VARCHAR2(20)
    JOB VARCHAR2(10)
    DEPTNO NUMBER(3)
    SAL NUMBER(7, 2)
    Allow NULL for all columns except ENAME and JOB.
    
    CREATE TABLE EMP (
        EMPNO NUMBER(6),
        ENAME VARCHAR2(20) NOT NULL,
        JOB VARCHAR2(10) NOT NULL,
        DEPTNO NUMBER(3),
        SAL NUMBER(7,2)
    );
  2. Add a column experience to the EMP table. EXPERIENCE numeric null allowed.
    
    ALTER TABLE EMP ADD (
        EXPERIENCE NUMBER(2)
    );
  3. Modify the column width of the job field of emp table.
    
    ALTER TABLE EMP MODIFY (
        JOB VARCHAR2(16)
    );
  4. Create the EMP1 table with ENAME and EMPNO, add constraints to check the EMPNO value while entering (i.e.) EMPNO>100
    
    CREATE TABLE EMP1 (
        ENAME VARCHAR2(20) NOT NULL,
        EMPNO NUMBER(6) CONSTRAINT B CHECK(EMPNO>100)
    );

Assignment #2

  1. Write query to select all the columns of emp table.
    
    SELECT * FROM EMP;
    EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
    7839 KING PRESIDENT - 17-NOV-81 5000 - 10
    7698 BLAKE MANAGER 7839 01-MAY-81 2850 - 30
    7782 CLARK MANAGER 7839 09-JUN-81 2450 - 10
    7566 JONES MANAGER 7839 02-APR-81 2975 - 20
    7788 SCOTT ANALYST 7566 19-APR-87 3000 - 20
    7902 FORD ANALYST 7566 03-DEC-81 3000 - 20
    7369 SMITH CLERK 7902 17-DEC-80 800 - 20
    7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
    7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
    7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
    7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
    7876 ADAMS CLERK 7788 23-MAY-87 1100 - 20
    7900 JAMES CLERK 7698 03-DEC-81 950 - 30
    7934 MILLER CLERK 7782 23-JAN-82 1300 - 10
  2. Write query to select only EMPNAME, ENAME and JOB.
    
    SELECT ENAME, EMPNO, JOB FROM EMP;
    ENAME EMPNO JOB
    KING 7839 PRESIDENT
    BLAKE 7698 MANAGER
    CLARK 7782 MANAGER
    JONES 7566 MANAGER
    SCOTT 7788 ANALYST
    FORD 7902 ANALYST
    SMITH 7369 CLERK
    ALLEN 7499 SALESMAN
    WARD 7521 SALESMAN
    MARTIN 7654 SALESMAN
    TURNER 7844 SALESMAN
    ADAMS 7876 CLERK
    JAMES 7900 CLERK
    MILLER 7934 CLERK
  3. Write query to select unique JOBs.
    
    SELECT UNIQUE JOB FROM EMP;
    JOB
    ANALYST
    CLERK
    SALESMAN
    MANAGER
    PRESIDENT
  4. Write a query to select only those employees who are salesman.
    
    SELECT * FROM EMP 
        WHERE JOB = 'SALESMAN';
    EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
    7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
    7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
    7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
    7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
  5. Select employee name, grade and salary in the order of their salary.
    
    SELECT ENAME, EMPNO, DEPTNO FROM EMP 
        ORDER BY SAL;
    EMPNO ENAME DEPTNO
    SMITH 7369 20
    JAMES 7900 30
    ADAMS 7876 20
    MARTIN 7654 30
    WARD 7521 30
    MILLER 7934 10
    TURNER 7844 30
    ALLEN 7499 30
    CLARK 7782 10
    BLAKE 7698 30
    JONES 7566 20
    FORD 7902 20
    SCOTT 7788 20
    KING 7839 10
  6. Mgmt is considering a pay raise, however they want to find out, if they give a flat $200 increment to all, then what % each person is getting. So in your result, display ENAME, SAL and PCTINCR
    
    SELECT ENAME, SAL, 200/SAL*100 AS PCTINCR 
        FROM EMP;
    ENAME SAL PCTINCR
    KING 5000 4
    BLAKE 2850 7.01754385964912280701754385964912280702
    CLARK 2450 8.16326530612244897959183673469387755102
    JONES 2975 6.72268907563025210084033613445378151261
    SCOTT 3000 6.66666666666666666666666666666666666667
    FORD 3000 6.66666666666666666666666666666666666667
    SMITH 800 25
    ALLEN 1600 12.5
    WARD 1250 16
    MARTIN 1250 16
    TURNER 1500 13.33333333333333333333333333333333333333
    ADAMS 1100 18.18181818181818181818181818181818181818
    JAMES 950 21.05263157894736842105263157894736842105
    MILLER 1300 15.38461538461538461538461538461538461538
  7. Express work experience of each of the employees by using sysdate and hiredate in terms of no of years.
    
    SELECT 
        TO_CHAR(HIREDATE, 'DD.MM.YYYY') "HIREDATE", 
        TO_CHAR(SYSDATE, 'DD.MM.YYYY') "Today", 
        (SYSDATE-HIREDATE)/365 "EXPERIENCE" 
    FROM EMP;
    hiredate Today experience
    17.11.1981 03.01.2023 41.15791945712836123795027904616945712849
    01.05.1981 03.01.2023 41.70586466260781329274479959411466260795
    09.06.1981 03.01.2023 41.59901534753932014205986808726534753945
    02.04.1981 03.01.2023 41.78531671740233384069000507356671740247
    19.04.1987 03.01.2023 35.73600164890918315575849822425164890932
    03.12.1981 03.01.2023 41.11408384069000507356671740233384069014
    17.12.1980 03.01.2023 42.07572767630644342973110096397767630658
    20.02.1981 03.01.2023 41.89764548452562151192288178589548452575
    22.02.1981 03.01.2023 41.89216603247082699137493658041603247096
    28.09.1981 03.01.2023 41.29490575849822425164890918315575849836
    08.09.1981 03.01.2023 41.3497002790461694571283612379502790463
    23.05.1987 03.01.2023 35.64285096397767630644342973110096397781
    03.12.1981 03.01.2023 41.11408384069000507356671740233384069014
    23.01.1982 03.01.2023 40.97435781329274479959411466260781329288

Assignment #3

  1. List down number of employees, minimum salary, maximum salary for each department.
    
    SELECT 
        COUNT(ENAME) AS COUNT, MAX(SAL) AS MAX, MIN(SAL) AS MIN, DEPTNO 
        FROM EMP 
        GROUP BY DEPTNO;
    COUNT MAX MIN DEPTNO
    6 2850 950 30
    3 5000 1300 10
    5 3000 800 20
  2. Update Email ID, if department id is
    1. <= 10, update the EMAIL field by appending @oracle.com
      
      ALTER TABLE EMP ADD(
          EMAIL VARCHAR(32)
      );
      UPDATE EMP 
          SET EMAIL=CONCAT(LOWER(ENAME),'@oracle.com') 
          WHERE DEPTNO<=10;
    2. <= 20, update the EMAIL field by appending @oracle.co.uk
      
      UPDATE EMP 
          SET EMAIL=CONCAT(LOWER(ENAME),'@oracle.co.uk') 
          WHERE DEPTNO>10 AND DEPTNO<=20;
    3. Else update it as @oracle.co.in
      
      UPDATE EMP 
          SET EMAIL=CONCAT(LOWER(ENAME),'@oracle.co.in') 
          WHERE DEPTNO>20;
      SELECT ENAME, EMAIL FROM EMP;
      ENAME EMAIL
      KING king@oracle.com
      BLAKE blake@oracle.co.in
      CLARK clark@oracle.com
      JONES jones@oracle.co.uk
      SCOTT scott@oracle.co.uk
      FORD ford@oracle.co.uk
      SMITH smith@oracle.co.uk
      ALLEN allen@oracle.co.in
      WARD ward@oracle.co.in
      MARTIN martin@oracle.co.in
      TURNER turner@oracle.co.in
      ADAMS adams@oracle.co.uk
      JAMES james@oracle.co.in
      MILLER miller@oracle.com
    4. Apart from 'Delete' and 'Truncate' statement can also be used for deleting the rows. Comment on their difference.
      When execute the DELETE command, the DBMS logs all removed rows. This means it is easier to recover from a mistake, than it would a mistaken TRUNCATE. When we TRUNCATE a table, less information is logged. This means the TRUNCATE statement executes very fast; however, it does so at the expense of not logging each row deleted.
    5. Display a department id wise count of employees
      • Getting salary more than 1200
        
        SELECT DEPTNO, COUNT(1) AS "COUNT" FROM EMP 
        WHERE SAL > 1200 
        GROUP BY DEPTNO;
        
        DEPTNO COUNT
        30 5
        10 3
        20 3
      • Apart from the above condition, select only those departments which has an average salary in excess of 1600
        
            SELECT DEPTNO, COUNT(1) AS "COUNT" FROM EMP
            WHERE SAL > 1200 
            HAVING AVG(SAL) > 1600
            GROUP BY DEPTNO;
        DEPTNO COUNT
        30 5
        10 3
        20 3
    6. Explain how two levels of filtering is happening based on firstly WHERE clause secondly HAVING clause based on this particular scenario.
      HAVING clause is used for cases where there are aggregate functions like COUNT, SUM, AVG, etc. WHERE clause is used for extract only those records that fulfil a specified condition and works for binary operation only.
    7. We want to add a new row in the employees table with employee id 1000, First Name = 'Scott', Last Name = 'Tiger', Email = 'Stiger@oracle.co.uk', HireDate = 01/02/2014, Job id = 'PR_Prsdnt'(Title = 'Company President')
      
      INSERT INTO EMP(EMPNO, DEPTNO, ENAME, EMAIL, HIREDATE, JOB, SAL) 
      VALUES(1000, 80, 'SCOTT', 'Stiger@oracle.co.uk', TO_DATE('01/02/2014','dd/mm/yyyy'), 'PR_PRSDNT', 5000);
    8. Issue necessary insert statements
      
      INSERT INTO DEPT(DEPTNO, DNAME, LOC)
      VALUES(80, 'DATABASE', 'EDINBURGH');
    9. After the update is over in the email column, use INSTR and SUBSTR to display email id and domain information separately.
      
      SELECT 
          SUBSTR(EMAIL,1,INSTR(EMAIL,'@')-1) AS EMAIL_ID, 
          SUBSTR(EMAIL,INSTR(EMAIL,'@')+1) AS DOMAIN 
      FROM EMP WHERE EMPNO=1000;
      EMAIL_ID DOMAIN
      Stiger oracle.co.uk
    10. Display day, month and year of the hire date of the employees.
      
      SELECT EXTRACT(DAY FROM TO_DATE(HIREDATE, 'dd-mm-rr')) AS DAY, 
      EXTRACT(MONTH FROM TO_DATE(HIREDATE, 'dd-mm-rr')) AS MONTH, 
      EXTRACT(YEAR FROM TO_DATE(HIREDATE, 'dd-mm-rr')) AS YEAR FROM EMP;
      DAY MONTH YEAR
      17 11 1981
      1 5 1981
      9 6 1981
      2 4 1981
      19 4 1987
      3 12 1981
      17 12 1980
      20 2 1981
      22 2 1981
      28 9 1981
      8 9 1981
      23 5 1987
      3 12 1981
      23 1 1982
      1 2 2014

Assignment #4

Level I

  1. Display name of employees, department name and job name for each employee.
    
    SELECT ENAME, DNAME, JOB FROM EMP E, DEPT D 
        WHERE E.DEPTNO=D.DEPTNO;
    ENAME DNAME JOB
    KING ACCOUNTING PRESIDENT
    BLAKE SALES MANAGER
    CLARK ACCOUNTING MANAGER
    JONES RESEARCH MANAGER
    SCOTT RESEARCH ANALYST
    FORD RESEARCH ANALYST
    SMITH RESEARCH CLERK
    ALLEN SALES SALESMAN
    WARD SALES SALESMAN
    MARTIN SALES SALESMAN
    TURNER SALES SALESMAN
    ADAMS RESEARCH CLERK
    JAMES SALES CLERK
    MILLER ACCOUNTING CLERK
    SCOTT DATABASE PR_PRSDNT
  2. Display the department name along with no of employees and average salary of that department.
    
    SELECT DNAME, CNT, AVG_SAL
    FROM (
        SELECT DEPTNO, COUNT(*) AS CNT, AVG(SAL) AS AVG_SAL FROM EMP GROUP BY DEPTNO 
    ) E 
    INNER JOIN DEPT D
    ON D.DEPTNO = E.DEPTNO;
    DNAME CNT AVG_SAL
    SALES 6 1566.666666666666666666666666666666666667
    ACCOUNTING 3 2916.666666666666666666666666666666666667
    RESEARCH 5 2175
    DATABASE 1 5000
  3. For each department, find out no. of jobs the employees are assigned to
    
    SELECT JOBS, DNAME 
    FROM (
      SELECT COUNT(UNIQUE JOB) AS JOBS, DEPTNO FROM EMP GROUP BY DEPTNO
    ) E, DEPT D 
    WHERE E.DEPTNO=D.DEPTNO;
    JOBS DNAME
    3 SALES
    3 ACCOUNTING
    3 RESEARCH
    1 DATABASE
  4. Check for correctness of the above queries in terms of count, if you want to bring in all entries, how would you achieve the same?
    
    SELECT * FROM EMP;
  5. Group by the employees based on the first character of employee first name. Display the results in alphabetic order (descending) of first character.
    
    SELECT SUBSTR(ENAME, 1, 1) AS ALPHA, COUNT(1) AS CNT FROM EMP 
    GROUP BY SUBSTR(ENAME, 1, 1) 
    ORDER BY SUBSTR(ENAME, 1, 1) DESC;
    ALPHA CNT
    W 1
    T 1
    S 3
    M 2
    K 1
    J 2
    F 1
    C 1
    B 1
    A 2

Level II

Table - EmployeeDetails

EmpId FullName ManagerId DateOfJoining
121 John Snow 321 01/31/2014
321 Walter White 986 01/30/2015
421 Kuldeep Rana 876 27/11/2016

Table - EmployeeSalary

EmpId Project Salary
121 P1 8000
321 P2 1000
421 P1 12000

CREATE TABLE EMPSAL (EMPID NUMBER(3), 
    PROJECT VARCHAR(2), 
    SAL NUMBER(7,2), 
    CONSTRAINT PK_EMPID PRIMARY KEY(EMPID) 
);
CREATE TABLE EMPDET  
(
    EMPID NUMBER(3),  
    FNAME VARCHAR(16),  
    MGID NUMBER(3), 
    JDT DATE, 
    CONSTRAINT PK_MGID PRIMARY KEY(MGID), 
    CONSTRAINT FK_EMPID FOREIGN KEY(EMPID) REFERENCES EMPSAL(EMPID) 
);
INSERT INTO EMPSAL VALUES(121, 'P1', 8000);
INSERT INTO EMPSAL VALUES(321, 'P2', 1000);
INSERT INTO EMPSAL VALUES(421, 'P1', 12000);
INSERT INTO EMPDET VALUES(121, 'JOHN SNOW', 321, DATE '2014-01-31');
INSERT INTO EMPDET VALUES(321, 'WALTER WHITE', 986, DATE '2015-01-30');
INSERT INTO EMPDET VALUES(421, 'KULDEEP RANA', 876, DATE '2016-11-27');
  1. Write a SQL query to fetch the count of employees working in project 'P1'.
    
    SELECT COUNT(*) AS COUNT FROM EMPSAL 
        WHERE PROJECT='P1';
    COUNT
    2
  2. Write a SQL query to fetch employee names having salary greater than or equal to 5000 and less than or equal 10000.
    
    SELECT FNAME FROM EMPSAL 
        INNER JOIN EMPDET ON EMPSAL.EMPID=EMPDET.EMPID 
        WHERE EMPSAL.SAL BETWEEN 5000 AND 10000;
    FNAME
    John Snow
  3. Write a SQL query to fetch project-wise count of employees sorted by project's count in descending order.
    
    SELECT PROJECT, COUNT(*) AS COUNT FROM EMPSAL 
        GROUP BY PROJECT 
        ORDER BY COUNT DESC;
    PROJECT COUNT
    P1 2
    P2 1
  4. Write a query to fetch only the first name(string before space) from the Full Name column of EmployeeDetails table.
    
    SELECT SUBSTR(FNAME,1,INSTR(FNAME,' ')-1) AS FIRSTNAME 
        FROM EMPDET;
    FIRSTNAME
    John
    Walter
    Kuldeep
  5. Write a query to fetch employee names and salary records. Return employee details even if the salary record is not present for the employee.
    
    SELECT FNAME, SAL FROM EMPDET 
    LEFT JOIN EMPSAL ON EMPSAL.EMPID=EMPDET.EMPID;
    FNAME SAL
    John Snow 8000
    Walter White 1000
    Kuldeep Rana 12000
  6. Write a SQL query to fetch all the Employees who are also managers from EmployeeDetails table.
    
    SELECT * FROM EMPDET E 
    WHERE EXISTS (SELECT * FROM EMPDET S WHERE E.EMPID = S.MGID);
    EMPID FNAME MGID JDT
    321 Walter White 986 30-JAN-15
  7. Write a SQL query to fetch all employee records from EmployeeDetails table who have a salary record in EmployeeSalary table.
    
    SELECT * FROM EMPDET E 
    WHERE EXISTS (SELECT * FROM EMPSAL S WHERE E.EMPID = S.EMPID);
    EMPID FNAME MGID JDT
    121 John Snow 321 31-JAN-14
    321 Walter White 986 30-JAN-15
    421 Kuldeep Rana 876 27-NOV-16
  8. Write a SQL query to fetch duplicate records from a table.
    
    SELECT EMPID, FNAME, MGID, JDT FROM EMPDET 
        GROUP BY EMPID, FNAME, MGID, JDT 
        HAVING COUNT(*) > 1;
  9. Write a SQL query to remove duplicates from a table without using temporary table.
    
    DELETE FROM EMPSAL 
    WHERE ROWID NOT IN (SELECT MAX(ROWID) FROM EMPSAL GROUP BY EMPID);
  10. Write a SQL query to fetch only odd rows from table.
    
    SELECT E.EMPID, E.PROJECT, E.SAL FROM ( 
    SELECT ROW_NUMBER() OVER(ORDER BY EMPID) AS ROWNUMBER, EMPID, PROJECT, SAL FROM EMPSAL) E 
    WHERE MOD(E.ROWNUMBER, 2) = 1;
    EMPID PROJECT SAL
    121 P1 8000
    421 P1 12000
  11. Write a SQL query to fetch only even rows from table.
    
    SELECT E.EMPID, E.PROJECT, E.SAL FROM ( 
    SELECT ROW_NUMBER() OVER(ORDER BY EMPID) AS ROWNUMBER, EMPID, PROJECT, SAL FROM EMPSAL) E 
    WHERE MOD(E.ROWNUMBER, 2) = 0;
    EMPID PROJECT SAL
    321 P2 1000
  12. Write a SQL query to create a new table with data and structure copied from another table.
    
    SELECT * INTO EMPSALARY 
        FROM EMPSAL;
  13. Write a SQL query to create an empty table with same structure as some other table.
    
    SELECT * INTO EMPSALARY FROM EMPSAL 
        WHERE 1=0;
  14. Write a SQL query to fetch common records between two variables.
    
    SELECT * FROM EMPSAL 
        INTERSECT SELECT * FROM MGSAL;
  15. Write a SQL query to fetch records that are present in one table but not in another table.
    
    SELECT * FROM EMPSAL 
        MINUS SELECT * FROM MGSAL;
  16. Write a SQL query to find current date-time.
    
    SELECT getdate();
  17. Write a SQL query to fetch all the Employees details from EmployeeDetails table who joined in year 2016.
    
    SELECT * FROM EMPDET 
    WHERE JDT BETWEEN DATE '2016-01-01' AND DATE '2016-12-31';
    EMPID FNAME MGID JDT
    421 Kuldeep Rana 876 27-NOV-16
  18. Write a SQL query to fetch top n records.
    
    SELECT * FROM EMPSAL 
        ORDER BY SAL DESC 
        FETCH NEXT 2 ROWS ONLY;
    EMPID PROJECT SAL
    421 P1 12000
    121 P1 8000
  19. Write a SQL query to find the nth highest salary from table.
    
    SELECT * FROM (
        SELECT * FROM EMPSAL ORDER BY SAL DESC FETCH NEXT 2 ROWS ONLY
    ) ORDER BY SAL ASC 
    FETCH NEXT 1 ROWS ONLY;
    EMPID PROJECT SAL
    121 P1 8000
  20. Write SQL query to find the 3rd highest salary from table without using TOP/limit keyword.
    
    SELECT SAL 
        FROM EMPSAL EMP1 
        WHERE 2 = ( 
            SELECT COUNT( DISTINCT( EMP2.SAL ) ) FROM EMPSAL EMP2 
            WHERE EMP2.SAL > EMP1.SAL 
        );
    SAL
    1000
Share:

History Paper 8 || BA Diaries || World History - Part 1

আন্তর্জাতিক ইতিহাস

  1. দাঁতাত রাজনীতির বৈশিষ্ট্য ও ব্যর্থতা আলোচনা কর। (Analyse the features and failures of Détente Politics)

    ঠাণ্ডা লড়াইয়ের প্রথম পর্যায়ের ফলাফল ছিল অমীমাংসিত। যার ফলে বিশ্ব ব্যাপি সামরিক কৌশলের অচলাবস্থার মধ্য দিয়ে উষ্ণতার আভাস ফুঁটে ওঠে। বার্লিন প্রাচীর মার্কিন যুক্তরাষ্ট্র ও সোভিয়েত ইউনিয়ার স্ব স্ব অঞ্চলের প্রভাব প্রতিপত্তিকে প্রতিষ্ঠা করেছিল। এর ফলে স্বসস্ত্র সংঘর্ষের সম্ভবনা হয়ে ছিল ক্ষীণ। সোভিয়েত ইউনিয়ান ও মার্কিন যুক্তরাষ্ট্রের পারস্পারিক নীতির পরিবর্তন ঘটে। দুই দেশই অস্ত্র প্রতিযোগিতার অসারত্ব উপলব্ধি করে।

    অস্ট্রিয়া চুক্তি সম্পর্কের উষ্ণতার বৃদ্ধির জন্য মার্কিন যুক্তরাষ্ট্র নিজেকে কোরিয়া থেকে সরিয়ে আনে। ১৯৬৬ খ্রিঃ অস্ট্রিয়ার চুক্তি অনুসারে রাশিয়া অন্যান্য দেশের সঙ্গে অস্ট্রিয়া থেকে সৈন্য বাহিনী প্রত্যাহার করে নেয়। তবে এই উষ্ণতা ছিল সামরিক। বরং এই উষ্ণতা উভয়কে কিছুটা হত বুদ্ধি করে ছিল। উভয়ই বিশ্বের নিজেদের প্রভাবাধিন প্রলয় সৃষ্টিতে স্বচেষ্ট ছিল। এর প্রমাণ কঙ্গো, কিউবা, কোরিয়া এবং সুয়েজ খাল প্রশ্নে উভয়ে মত বিরোধ। আবার ইসরায়েল যুদ্ধেও উভয়ে পরস্পর বিরোধী নীতি গ্রহণ করে ছিল। একদিকে মার্কিন যুক্তরাষ্ট্র, হাঙ্গেরি ও চেকোস্লোভাকিয়ায় সোভিয়েত হস্তক্ষেপে সমালোচনা করে, অন্যদিকে ভিয়েতনাম যুদ্ধে সোভিয়েত ইউনিয়ান মার্কিন নীতির বিরুদ্ধে তীব্র প্রতিক্রিয়া ব্যাক্ত করে। এইভাবে ১৯৭০ পর্যন্ত এই দুই শক্তির মধ্যে সঞ্চিত হতে থাকে স্নায়ু যুদ্ধের উত্তেজনা।

    দাঁতাত অর্থ ১৯৪৬ থেকে ১৯৭০ পর্যন্ত ঠাণ্ডা লড়াইয়ের অধ্যায় অতিক্রম করার পর ৭০-এর দশকে এসে এই উত্তেজনা ক্রমশ স্থীমিত হয়ে পড়ে। এই পর্বকে কেউ বলেন নতুন ঠাণ্ডা লড়াই, আবার কেউ বলেন দাঁতাত। 'দাঁতাত' হল একটি ফরাসি শব্দ যার অর্থ হল উত্তেজনা কমিয়ে আন্তঃরাষ্ট্র সম্পর্ককে স্বাভাবিক করে তোলা। ৫০-এর দশকে ফরাসি রাষ্ট্রপতি দ্য গোল প্রথম কূটনৈতিক অর্থে শব্দটি প্রয়োগ করেছিলেন। দাঁতাতের অর্থ কিন্তু যাবতীয় বিরোধ ভুলে যাওয়া নয়। দাঁতাত হল অতীতের উত্তেজনা ভুলে উভয় রাষ্ট্র ও গোষ্ঠীর মধ্যে আলাপ আলোচনার মধ্যে বিরোধের মীমাংসার জন্য আগ্রহ প্রদর্শন। ৭০-এর দশকে মার্কিন রাষ্ট্রপতি রিচার্ড নিক্সনের নিরাপত্তা উপদেষ্টা হেনরি কিসিঞ্চার সোভিয়েত-মার্কিন সম্পর্কের ক্ষেত্রে দাঁতাত শব্দটি প্রথম প্রয়োগ করে। তবে ঠিক কবে থেকে দাঁতাতের সূচনা হয়েছিল তা নিয়ে মত পার্থক্য আছে। অনেকের মতে ১৯৬২ তে কিউবার ক্ষেপণাস্ত্র সংকটের কেন্দ্র করে যে উত্তেজনার সৃষ্টি হয়েছিল তাতে উভয় পক্ষ সংযত না হলে আর একটা বিশ্ব যুদ্ধ ঘটতে পারত। নিক্সন মার্কিন কংগ্রেসকে বলেন, সোভিয়েত ইউনিয়ানকে প্রবল প্রতিপক্ষ রূপে গণ্য না করে উভয়ের মধ্যে একটা বোঝাপড়ার সম্পর্কে গড়ে তোলা প্রয়োজন।

    ব্যাপক দাঁতাতের অর্থ ব্যাপক। দাঁতাত বলতে শুধু সোভিয়েত-মার্কিন উত্তেজনা প্রশমন বোঝায় না। চীনের সঙ্গে এই দুই দেশের সম্পর্কের উন্নতিকেও বোঝান হয়। মার্কিন যুক্তরাষ্ট্র যে দাঁতাতকে ব্যাপক অর্থে গ্রহণ করতে চেয়েছিল তার প্রমাণ হল ১৯৭০-এর দশকের সূচনায় চীনের সঙ্গে সম্পর্ক স্বাভাবিক করার তাদের প্রয়াস। বস্তুত ১৯৬৯-৭০ খ্রিস্টাব্দে আলাপ আলোচনার যুগের সূচনা হয়েছিল বলে মার্কিন যুক্তরাষ্ট্র মনে করে নিক্সনের মস্কো ও বেজিং সফরের পর স্বাক্ষরিত হয় Strategic Arms Limitations Treaty(SALT)। ১৯৭১-৭৫-এর মধ্যে রুশ মার্কিন রাষ্ট্রপ্রধানদের মধ্যে বহুবার শীর্ষ সম্মেলন আয়োজিত হয়। এই সময় আন্তর্জাতিক পরিস্থিতির পরিবর্তনকে 'দাঁতাত' বলা হয়।

    আমেরিকার উপর চাপ অভ্যন্তরীণ ও আন্তর্জাতিক চাপে দাঁতাতের প্রতি আগ্রহ দেখতে বাধ্য হয়। ভিয়েতনাম যুদ্ধ দেশের অভ্যন্তরে মার্কিন নীতির পরিবর্তনের জন্য একটা চাপ সৃষ্টি করে ছিল। আন্তর্জাতিক ক্ষেত্রে জোট নিরপেক্ষ আন্দোলন সূচনা করে ছিল আর একটা চাপ। তাছাড়া ইউরোপীয় ও জাপানিপুঞ্জির প্রতিদ্বন্দ্বতাও আমেরিকাকে সংযত হতে বাধ্য করে ছিল। এই সময় ইসরায়েলকে সমর্থন করে আমেরিকা আরব দেশগুলির বিরাগ ভাজন হয়েছিল। ফলে আমেরিকা ঠাণ্ডা লড়াই জনিত উত্তেজনার হ্রাসে উদ্যোগী হতে বাধ্য হয়। অন্যদিকে পূর্ব ইউরোপের সংকট এবং চীনের সঙ্গে বিরোধ সোভিয়েত রাশিয়াকে চাপের মুখে ফেলে দেয়। তাই চীন-সোভিয়েত বিরোধে সুযোগে আমেরিকা-চীনের সঙ্গে সম্পর্ক স্থাপনে আগ্রহী হয়। ফলে রাশিয়াকে ও দাঁতাতের কথা ভাবতে হয়।

    ফরাসি নীতি দাঁতাতের প্রভাবে মার্কিন যুক্তরাষ্ট্র যেমন চীনের সুসম্পর্ক গড়ে তুলতে আগ্রহী হয়েছিল। তেমনি ইউরোপের অন্যান্য দেশেও দাঁতাতের প্রভাব লক্ষ্য করা জায়। ১৯৬০-এর দশকে রাষ্ট্রপতি দ্য গোল প্রাচ্য ও পাশ্চাত্যের মধ্যে বোঝা-পোড়ায় মন দেন। তিনি ফ্রান্সকে উত্তর আটলান্টিক(NATO) থেকে বিযুক্ত করেন এবং সোভিয়েত ইউনিয়ানের প্রতি নমনীয় দৃষ্টিভঙ্গি গ্রহণ করেন। দ্য গোল নতুন ইউরোপীয় বিধি ব্যাবস্থা গড়ে সোভিয়েত রাশিয়ার সঙ্গে যুক্ত করতে আগ্রহী হন।

    জার্মানি চুক্তি শুধু ফ্রান্স নয়, পশ্চিম জার্মানির মনভাবেও পরিবর্তনের ছোঁয়া লেগেছিল। ১৯৬৯ খ্রিঃ সোশ্যাল ডেমোক্রেটিক দল-এর নেতা উইলি ব্রান্ট চ্যানসেলার হয়ে পূর্ব ইউরোপের সাম্যবাদী শিবিরে সঙ্গে বোঝাপড়ার সিধান্ত নেন। পূর্ব ইউরোপের যে সমস্ত দেশের জনগণ নাৎসি আক্রমণের শিকার হয়েছিল তাদের সাহায্যের কথা ঘোষণা করা হয়। ১৯৭০-এ জার্মানি সোভিয়েত ইউনিয়ানের সঙ্গে অনাক্রমণ চুক্তিতে স্বাক্ষর করেন। পরের বছর আমেরিকা, ব্রিটেন, ফ্রান্স আর সোভিয়েত রাশিয়া বার্লিন চুক্তি স্বাক্ষর করেন। এই সময় দুই জার্মানির মধ্যে সম্প্রীতি গড়ে তোলার জন্য উদ্যোগী হন। তিনি জার্মানি ডেমোক্রেটিক রেপাবলিককে স্বীকৃতি নেন এবং পোল্যান্ডের সঙ্গে সীমান্তে মীমাংসা করে নেন। এই ভাবে দাঁতাতের প্রভাবে দুই বৃহৎ জোটের বাইরে পারস্পরিক বোঝাপড়ার পরিবেশ সৃষ্টি হয়।

    পূর্ব ইউরোপের ভাঙ্গন দাঁতাতের মাধ্যমে এই বোঝাপড়া বৃদ্ধি পেলে ইউরোপীয় সমব্যায় আরও সহত হয়। দাঁতাতের ঠিক আগে পশ্চিমের সঙ্গে অসম প্রতিযোগিতার কারণে অর্থনৈতিক সংকট পূর্ব ইউরোপের রাজনৈতিক ক্ষেত্রে সমস্যার কারণ হয়ে দাঁড়িয়ে ছিল। ডেভিড রেনল্ডস মনে করেন এই পরিস্থিতিতে দাঁতাত সোভিয়েত জোটকে ধরে রাখতে সাহায্য করেছিল। কিন্তু দাঁতাতের একটা দ্বৈত্য চরিত্র ছিল। পশ্চিমী সাহায্য পূর্ব ইউরোপের কোন কোন দেশের অর্থনৈতিক উন্নতি ঘটলেও মূল্যবৃদ্ধির সংকট সৃষ্টি করে। দেখা যায় রাজনৈতিক অসন্তোষ। এইভাবে দাঁতাত পূর্ব ইউরোপের ভাঙ্গনের সম্ভবনা সৃষ্টি করে।

    দুই মহাশক্তির মধ্যে বোঝাপড়ার ক্ষেত্রে তিনটি দিক উল্লেখযোগ্য- (ক) সংস্কৃতিক ও অর্থনৈতিক সংযোগিতা, (খ) সংকট মোচন ও নিয়ন্ত্রণ, এবং (গ) অস্ত্র সংবরণ

    ব্যর্থতা দাঁতাত অবশ্য কোন সুনিশ্চিত স্থায়ী বিষয় হয়ে উঠতে পারেনি। কারণ দাঁতাত সংঘাতের সম্ভবনা ও উত্তেজনা হ্রাস করলেও স্থায়ী শান্তির পথ দেখাতে পারেনি। এটি ছিল সংঘাত ও মৈত্রীর মধ্যবর্তীর অবস্থা একেস্থায়ী শান্তি না বলে দীর্ঘকালীন যুদ্ধ বিরতি বলা যায়। দাঁতাত উত্তেজনা হ্রাস করলেও আদর্শগত প্রতিদ্বন্দ্বিতার অবসান ঘটতে পারেনি। অস্ত্র সংবরণ চুক্তিতে স্বাক্ষর করলেও গোপনে দুই বৃহৎ শক্তিবর্গ অস্ত্রবৃদ্ধির প্রকল্প জারি রাখে। ফলে ভিয়েতনাম, মধ্যপ্রাচ্য ও আফগানিস্থানকে কেন্দ্র করে পুনঃরায় ঠাণ্ডাযুদ্ধের সৃষ্টি হয়।

    ১৯৭০-এর দশকে অ্যাঙ্গোলা, আফ্রিকা বিশ্ব রাজনীতির ঝটিকা কেন্দ্রে পরিণত হয়। এখানকার রাজনৈতিক সংকট মার্কিন-সোভিয়েত সংঘাতের ক্ষেত্র প্রস্তুত করেন। ১৯৭৫-এ পর্তুগালের কাছ থেকে অ্যাঙ্গোলা স্বাধীনতা লাভের পূর্বেই এখানে গৃহযুদ্ধ শুরু হয়ে যায়, এই গৃহযুদ্ধ জড়িয়ে পড়ে মার্কিন যুক্তরাষ্ট্র ও সোভিয়া। অ্যাঙ্গোলার রাজনীতিতে সক্রিয় হস্তক্ষেপের কোন প্রস্তুতি বা স্বার্থ আমেরিকার ছিল না। কিন্তু কিউবায় সোভিয়েত ইউনিয়ান হস্তক্ষেপ করায় আমেরিকার অ্যাঙ্গোলায় মনোযোগ দিতে বাধ্য হয়। অ্যাঙ্গোলায় জাতিয় ফ্রন্তেরর প্রতি মার্কিন ও চীনের সমর্থন রাশিয়াকে উৎবৃঙ্গ করেছিল। আমেরিকা মনে করেছিল অ্যাঙ্গোলায় সোভিয়েত হস্তক্ষেপ দুই দেশের বোঝাপড়াকে নষ্ট করছে। কিন্তু রাশিয়া মনে করে সাম্রাজ্যবাদ বিরোধী মুক্তি সংগ্রামে সাহায্য দান দাঁতাত থেকে সরে আসা নয়।

    ১৯৭৯ খ্রিঃ আফগানিস্থান ও ইরানের ঘটনা মার্কিন-সোভিয়েত দাঁতাত বিপণ করে।। উভয়ের মধ্যে মত বিরোধ দেখা যায়। আফগানিস্থানে রাশিয়া সশস্ত্র হস্তক্ষেপের সিদ্ধান্ত গ্রহণ করে। এই হস্তক্ষেপের মাধ্যমে রাশিয়া আঞ্ছলিত এবং বিশ্ব রাজনীতিতে প্রভাব বৃদ্ধি করতে চেয়েছিল। কিন্তু এই ঘটনা মার্কিন সোভিয়েত দাঁতাতের উপর প্রতিকূল প্রভাব ফেলেছিল।

    মার্কিন যুক্তরাষ্ট্র তৃতীয় বিশ্বের বিভিন্ন স্থানে বিশেষ করে ল্যাতিন আমেরিকায় হস্তক্ষেপ নীতি অব্যহত রেখেছিল। মধ্যপ্রাচ্য মাকিন যুক্তরাষ্ট্র রাশিয়াকে অগ্রাহ্য করে একত্বটা শান্তি প্রতিষ্ঠায় উদ্যোগী হয়। গ্রেনেডায় মার্কিন আগ্রাসন সোভিয়েত-মার্কিন সম্পর্ককে তিক্ত করেছিল। তবে ১৯৮৫-এর পর থেকে সোভিয়েতও মনভারের পরিবর্তন শুরু হয়। গর্বাবে, গ্লাসনস্ত ও পেরেস্ত্রৈকা ঘোষণা করলে এর ফলে উভয় রাষ্ট্রপ্রধানের মধ্যে একাধিক শীর্ষ সম্মেলন নতুন দাঁতাতের পথ প্রস্তুত করে।

    এই ক্ষণস্থায়ী দাঁতাতের কিছু ইতিবাচক দিকছিল। কিছুদিনের জন্য হলেও দাঁতাত আন্তর্জাতিক ক্ষেত্রে উত্তেজনা হ্রাস করে। পূর্ব ও পশ্চিম ইউরোপের মধ্যে সম্পর্ক অনেকটা স্বাভাবিক হয় এবং অস্ত্র প্রতিযোগিতা হ্রাস পায়।

  2. লিগ অফ নেশানস বা জাতি সংঘের ব্যর্থতা কারণ। (Reasons for the failure of League of Nations)

    ইউরোপকে যুদ্ধ থেকে মুক্ত রাখার জন্য এবং স্থায়ী শান্তি প্রতিষ্ঠার জন্য উনিশ শতকের বিভিন্ন সময়ে বিভিন্ন রাষ্ট্রগুলি সমবেত ভাবে প্রচেষ্টা চালিয়ে ছিল। জাতি সংঘের ছিল মুক্ত কূটনীতি, পারস্পরিক সহযোগিতা ও যৌথ নিরাপত্তা ব্যবস্থা, কিন্তু জাতি সংঘের উদ্দেশ্য ব্যর্থ হয়। প্রাথমিক কিছু সাফল্য লাভের পর ত্রিশের দশকে আন্তর্জাতিক রাজনীতিতে যে সঙ্কটের কালো মেঘ জমতে থাকে তার প্রভাবে জাতি সংঘ দূর্বল হয়ে পড়ে।

    হ্যানস মরগেনথাউ তাঁর 'Politics Among Nations' গ্রন্থে জাতি সংঘের ব্যর্থতার কারণগুলিকে তিনটি শ্রেণিতে ভাগ করেছে - সংবিধানিক ত্রুটি, কাঠামোগত দুর্বলতা ও রাজনৈতিক ব্যর্থতা।

    সাংবিধানিক দুর্বলতা লিগের সমবেত নিরাপত্তা ব্যবস্থা বহু বাঁধা বিঘ্নের দ্বারা কণ্টকিত ছিল। জাতি সংঘের চুক্তিপত্রের কোথাও যুদ্ধ বেআইনি বলে ঘোষিত হয়নি। চুক্তিপত্র অনুসারে কয়েকটি বিশেষ ক্ষেত্রে সদস্য রাষ্ট্রসমূহকে যুদ্ধেলিপ্ত হতে নিষেধ করা হয়েছিল। লিগ চুক্তিপত্রে ছিদ্রের সুযোগে যুদ্ধ ঘোষণা সম্ভব হয়েছিল। লিগ চুক্তিপত্রের ১৫ সংখ্যক ধারা অনুসারে গৃহীত শান্তিপূর্ণ মীমাংসার সাধারণ সভার সংখ্যাগরিষ্ঠ ভোটে গৃহীত না হলে যুদ্ধ ঘোষণা করার পথে বাঁধা ছিল না। লিগে আপোষ মীমাংসা গ্রহণ করার জন্য কোন রাষ্ট্রকে বাধ্য করা সম্ভব ছিল না। শাস্তি মূলক ব্যবস্থা অবলম্বনের পথে অনেক বাঁধা ছিল। এই ব্যবস্থা কার্যকর করার জন্য প্রয়োজন ছিল সদস্য রাষ্ট্রগুলির সহযোগিতা কিন্তু জাতিয় স্বার্থ নিয়ন্ত্রিত আন্তর্জাতিক রাজনীতিতে সার্বিক মত ঐক্য ছিল একান্ত অসম্ভব। লিগের হাতে কোন আন্তর্জাতিক সামরিক বাহিনী ছিল না। এটাই ছিল লিগের প্রধানতম সাংবিধানিক দুর্বলতা।

    সীমাবদ্ধতা একইভাবে কার্যগত দুর্বলতা লিগকে একটা সীমাবদ্ধ অসম্পূর্ণ প্রতিষ্ঠানে পরিণত করে। প্রথম বিশ্বযুদ্ধ উত্তর আন্তর্জাতিক রাজনীতিতে অনেক মৌলিক পরিবর্তন ঘটে যায় বিশ্ব রাজনীতি আর ইউরোপ কেন্দ্রিক ছিল না। কিন্তু মার্কিন যুক্তরাষ্ট্র ও জাপান বিশ্ব রাজনীতিতে প্রভাব ফেলেছিল। কিন্তু মার্কিন যুক্তরাষ্ট্র লিগের সদস্য পথ গ্রহণ করেনি। অথচ রাষ্ট্রপতি উইলসন যে চোদ্দদশ শর্ত পেশ করেন তার ভিত্তিতে লিগ গড়ে ওঠে। অন্যদিকে ইউরোপের অন্যতম রাষ্ট্র জার্মানি ও সোভিয়েত রাশিয়াকে ইচ্ছাকৃত ভাবে লিগের সদস্য পথ দেওয়া হয়নি। তাই আপাতত দৃষ্টিতে লিগ একটা আন্তর্জাতিক সংস্থা হলেও তা কার্যক্ষেত্রে ইউরোপের মধ্যে সীমাবদ্ধ ছিল। আন্তর্জাতিক শান্তি ও নিরাপাত্তার জন্য প্রয়োজন ছিল লিগকে আন্তর্জাতিক সংগঠনে পরিণত করা। কিন্তু লিগ মূলক ব্রিটেন ও ফ্রান্সের নিয়ন্ত্রণ ছিল যারা পরিচালিত হয়ে ছিল জাতিয় স্বার্থের দ্বারা।

    ভার্সাই চুক্তি ও সদস্য পদত্যাগ জাতি সংঘের চুক্তিপত্রকে ভার্সাই সন্ধির অন্তর্ভুক্ত করা হয়েছিল। কিন্তু জার্মানি এই সন্ধিকে মনে করেছিল একটা কঠোর চুক্তি যা বলপূর্বক তার উপর আরোপিত হয়েছে। লিগের কাঠামোগত দুর্বলতার আর একটা দিক হল সদস্য রাষ্ট্রগুলির সদস্যপদ প্রত্যাহারের প্রবণতা। চুক্তি পত্রের এক নম্বর ধারায় কোন সদস্য রাষ্ট্রকে দুবছরের বিগ্রপ্তি মাধ্যমে সদস্যপদ নাকোচের অধিকার দেওয়া হয়। বহু রাষ্ট্র এই সুযোগে সদস্যপদ প্রত্যাহার করে। ৩০-এর দশকে জাপান, জার্মানি, ইতালি প্রভৃতি রাষ্ট্র জাতি-সংঘ ত্যাগ করে। ফলে দ্বিতীয় বিশ্বযুদ্ধের সময় সদস্য সংখ্যাক্রমে দাঁড়ায় মাত্র ৪৮।

    প্রতিষ্ঠান লিগ ছিল সার্বভৌম রাষ্ট্রগুলি সহযোগিতামূলক প্রতিষ্ঠান, কিন্তু এই আন্তর্জাতিক সংস্থা পরিচালনার জন্য যে মানসিকতা ও সহযোগিতার মনভাব থাকা প্রয়োজন তা অধিকাংশ রাষ্ট্রের ছিল না। প্রথম বিশ্বযুদ্ধের অবসানের অল্পকালের মধ্যে আন্তর্জাতিক রাজনীতির ক্ষেত্রে গোপন চুক্তি, অস্ত্র সম্ভার প্রতিযোগিতা এবং শক্তিসাম্যের নীতি প্রবর্তিত হয়েছিল। সদস্য রাষ্ট্রগুলি জাতিয় স্বার্থের ঊর্ধ্বে উঠতে পারেনি। ফ্রান্স জার্মানির আক্রমণের বিরুদ্ধে প্রতিরোধ মূলক ব্যবস্থার জন্য লিগের সহযোগিতা অপেক্ষা বিভিন্ন রাষ্ট্রের সঙ্গে চুক্তির সঙ্গে বেশি গুরুত্ব দিয়েছিল। স্বার্থের খাতিরে ইতালিকে তোষণ করা জন্য ইংল্যান্ড ও ফ্রান্স ইতালি কর্তৃক আবিসিনিয়া আক্রমণের বিরোধিতা না করে সমবেত নিরাপত্তার স্বার্থকে বিসর্জন দিয়েছিল। ব্রিটেন সর্বদায় স্বীয়ে সাম্রাজ্য রক্ষার স্বার্থে ব্যস্ত ছিল। এই কারণে লিগের চুক্তিপত্র অনুসারে আক্রমণ করার বিরুদ্ধে শাস্তিমূলক ব্যবস্থা গ্রহণে যে ক্ষমতা ছিল তা প্রয়োগ করা সম্ভব হয়নি। একইভাবে জাপানের ম্যাঞ্চুরিয়া আক্রমণ করলে বৃহৎ রাষ্ট্রগুলির নিঃস্পৃহতার কারণে লিগ কোন ব্যবস্থা গ্রহণ করতে পারেনি।

    বিরোধী দুটি জোট আসলে যুদ্ধ উত্তর কালে আন্তর্জাতিক রাজনীতিকে দুটি পরস্পর ধ্যান ধারনার সমাবেশ ঘটেছিল। এক দিকে ছিল কিছু রাষ্ট্র যারা ১৯১৯-এর বিধিব্যাবস্থা সংরক্ষণ স্থায়ী করতে আগ্রহী, অন্যদিকে এই বিধি ব্যবস্থার বিরোধী সংশোধন বাদী গোষ্ঠী। এই দুটি পরস্পর বিরোধী রাষ্ট্রের অবস্থান জাতি সংঘের সংহতিকে বিপন্ন করে তুলেছিল।

    শান্তি ও গণতন্ত্র বিপন্ন ৩০-এর দশকে রাজনীতি পরিস্থিতিকে জটিল করে তুলেছিল এই সমস্ত সংশোধন বাদী রাষ্ট্র গোষ্ঠী। একে চার্চিল 'ত্যাটিলার কূটনীতি' বলেছেন ওদিকে বিট্রেন ও ফ্রান্স লিগের ভিতরে ও বাইরে কোন সক্রিয় প্রতিরোধ মূলক ব্যবস্থা গড়ে তুলতে আগ্রহী ছিল না। কারণ তারা মনে করেছিল যে, বোঝাপড়া নীতি গ্রহণ না করে প্রতিরোধ গড়ে তুলতে গেলে শান্তি বিনয় করার ঝুঁকি নিতে হবে ফলে গণতন্ত্র বিরোধী একনায়কতন্ত্রীর দেশগুলির আগ্রাসী নীতি বিরুদ্ধে ব্যবস্থা গ্রহণ করতে লিগ ব্যর্থ হয়। চার্চিল মনে করেছিলেন যে, যদি ইংল্যান্ড লিগের কাঠামোর মধ্যে যৌথ নিরাপত্তা ব্যাবস্থার সঠিক নেতৃত্ব দিত তাহলে শান্তিও গণতন্ত্র বিপন্ন হত না।

    বস্তুত লিগের ব্যর্থতার জন্য বৃহৎ শক্তিগুলির তন্ত্রদ্বন্দ্ব প্রধানত দায়ি ছিল। অর্থনৈতিক ক্ষেত্রে প্রতিযোগিতা ও উপনিবেশের প্রশ্নে সাম্রাজ্যবাদী শক্তিগুলির মধ্যে দ্বন্দ্ব লিগের ব্যর্থতার অন্যতম কারণ। ইতালি, জাপান ও জার্মানিতে যথাক্রমে ফ্যসিবাদ, জঙ্গিবাদ ও ন্যসিবাদের অভ্যুত্থান লিগকে অসহায় করে তুলেছিল। অথচ পশ্চিমী রাষ্ট্রগুলির কাছে ফ্যাসিবাদ অপেক্ষা সোভিয়েত রাশিয়ার সমাজতন্ত্রবাদ অধিকতর ভয়ের কারণ হয়েছিল। লিগের সমবেত নিরাপত্তা নীতি বিসর্জন দিয়ে ব্রিটেন ও ফ্রান্সের রাষ্ট্রনীতির প্রধান অঙ্গে পরিণত হয়েছিল। রুশনীতি ও নাৎসি তোপের পরিণতি ছিল লিগের ব্যর্থতা।

    লিগের প্রতিষ্ঠাতাদের আশাও আদর্শ সফল হয়নি, কিন্তু শান্তি রক্ষায় লিগের ব্যর্থতার অর্থ এই নয়য়ে আন্তর্জাতিক সহযোগিতার ক্ষেত্রে লিগের কোন অবদান নেই। অনেক ক্ষেত্রে লিগ স্থাপন এবং বিবাদের মীমাংসা করতে পেরেছিল। সামাজিক, মানসিক ও আর্থিক ক্ষেত্রে লিগের প্রচেষ্টা প্রশংসনীয়। প্রথম আন্তর্জাতিক সংগঠন হিসাবে পরীক্ষা নিরীক্ষা একেবারে অর্থহীন ছিল না। কারণ এই সংগঠনই সম্মেলিত জাতিপুঞ্জ প্রতিষ্ঠার ক্ষেত্রে প্রেরণায় উৎসরূপে পারগনিত হয়েছিল।

  3. কমিউনিস্ট চীনের উত্থান কীভাবে তৎকালীন আন্তর্জাতিক রাজনীতিকে প্রভাবিত করেছিল? (How the rise of Communist China impacted the world politics of the time?)

    ১৯৪৫ খ্রিঃ কুও-মিন-তান ও কমিউনিস্টদের মধ্যে যে গৃহযুদ্ধ শুরু হয় তাতে কমিউনিস্ট দল জয়ী হলে চীনে কমিউনিস্ট সরকার প্রতিষ্ঠিত হয়। কমিউনিস্ট চীনের অভ্যুত্থান দ্বিতীয় বিশ্বযুদ্ধের পর বিশ্বের ইতিহাসে অন্যতম উল্লেখযোগ্য ঘটনা যা বিশ্বের রাজনীতিতে বিরাট পরিবর্তনের সূচনা করে। এতদিন চীনের উপর মার্কিন যুক্তরাষ্ট্রের পরোক্ষ আধিপত্য ছিল। কিন্তু কমিউনিস্টদের অভ্যুত্থানের ফলে চীনের সত্তা আবার ফিরে এল। মাও-সে-তুং মার্কসবাদ ও লেনিনবাদকে প্রয়োগ করে চীনকে তার উপযুক্ত আসনে প্রতিষ্ঠিত করলেন।

    সেই সঙ্গে আন্তর্জাতিক ক্ষেত্রে চীন বৃহৎ শক্তির মর্যাদা পেল। চীনের ক্রম বর্ধমান সামরিক শক্তি এবং বৈজ্ঞানিক উন্নতির সঙ্গে সঙ্গে চীনের অর্থনীতিরও বিকাশ ঘটল। চীনে সামরিক শক্তি, অর্থনৈতিক বিকাশ এবং বিপুল লোকবল তাকে আন্তর্জাতিক রাজনীতিতে প্রভাব বিস্তারে সুযোগ করে দেয়।

    কোরিয়া চীনে কমিউনিস্ট অভ্যুত্থানের মাত্র চার মাস পরে চীন কোরিয়া যুদ্ধে জড়িয়ে পড়ে মার্কিন সৈন্য দক্ষিণ কোরিয়ার সপক্ষে উত্তর কোরিয়া আগ্রসন করলেও রাষ্ট্র সংঘ উত্তর কোরিয়াকে আক্রমকারি বলে ঘোষণা করে, এবং তার বিরুদ্ধে রাষ্ট্র সংঘ বাহিনী প্রেরিত হয়। রাষ্ট্র সংঘ বাহিনী প্রধান জেনারেল ম্যাক অর্থার চীনের সীমানায় উপস্থিত হলে, চীন রাষ্ট্র সংঘ বাহিনীকে বিতাড়িত করে। পরে ১৯৫৪ ক্রিস্তাব্দে জেনেভা সম্মেলনে শান্তি স্থাপিত হয়। কোরিয়ায় এই ঘটনা প্রমাণ করে যে, পূর্ব এশিয়ার রাজনীতিতে চীনের অভ্যুত্থান গুরুত্বপূর্ণ পরিবর্তন এনেছে এবং চীনকে অবহেলা করে পূর্ব এবং দক্ষিণ-পূর্ব এশিয়ার শক্তি সাম্য নিধারন করা সম্ভব নয়।

    তিব্বত ক্ষমতা লাভের পর চীনের কমিউনিস্ট সরকার পূর্বতন দাবি ও অধিকারগুলি পুনঃস্থাপনে তৎপর হয়েছিল। ফলে চীন তিব্বতের উপর তার সার্বভৌমত্বের দাবি পেশ করেন। এই সূত্রে ১৯৫০ খ্রিঃ তিব্বতে চীন সৈন্য প্রবেশ করে। ফলে তিব্বতে শতাব্দী ব্যাপী বিছিন্নতার অবসান ঘটে। ভারতও তিব্বতে চীনের সার্বভৌমত্ব স্বীকার করে নিয়েছিল।

    ভিয়েতনাম ইন্দো-চীনেও ফরাসি সাম্রাজ্যবাদের বিরুদ্ধে উত্তর ভিয়েতনামের হো-চি-মিন সরকার চীনের কাছ থেকে মূল্যবান সাহায্য লাভ করে। পরবর্তীকালে যুক্তরাষ্ট্র উত্তর ভিয়েতনামের বিরুদ্ধে দখিন ভিয়েতনামের সাহায্য করলে চীন সরকার উত্তর ভিয়েতনামকে সমর্থন করে। বিশ্বের বিভিন্ন অংশে সরকার চীনের বিরুদ্ধাচরণ করছে। এই অভিযোগে চীন শ্রীলংকা, ব্রহ্মদেশ, সুইজারল্যান্ড, কোরিয়া প্রভৃতি রাষ্ট্রের সঙ্গে কূটনৈতিক সম্পর্ক ছিন্ন করে। ১৯৬৭ খ্রিঃ ব্রহ্মদেশ থেকে চীনের আর্থিক সাহায্য সম্পর্কিত প্রতিনিধি দলকে প্রত্যাহার করা হয়। একই ঘটনা ঘটে কোরিয়ায়। তবে আফ্রিকার রাষ্ট্রগুলির সঙ্গে চীনের ঘনিষ্ঠ সম্পর্ক গড়ে উঠে। ইংল্যান্ড ও ফ্রান্স কমিউনিস্ট চীনকে শুধুমাত্র স্বীকৃতিই দেয়নি, রাষ্ট্র সংঘের সদস্য করার পক্ষে মত দিয়েছিল।

    মার্কিন বিরোধী তবে চীনের কমিউনিস্ট সরকার প্রতিষ্ঠা মার্কিন যুক্তরাষ্ট্রের অভিপ্রেত ছিল না। এই জন্যই কমিউনিস্টদের বিরুদ্ধে মার্কিন সরকার বিপুল পরিণামে সাহায্য দিয়েছিল চিয়াং কাইশেককে। শুধু তাই নয় চিয়াং কাইশেক ফরমোজায় আশ্রয় গ্রহণ করলে মার্কিন সপ্তম নৌবহর ফরমোজায় নিরাপত্তার দায় গ্রহণ করেছিল। মার্কিন সরকারের পৃষ্ঠপোষকতায় ফরমোজায় রাষ্ট্র সংঘের নিরাপত্তা পরিসদের সদস্য পদলাভ করে। কমিউনিস্ট চীনের প্রতি মার্কিন যুক্তরাষ্ট্রের এই অবাঞ্ছিত আচরণের উত্তর চীন ফরমোজায় অধিকৃত কুময়োত মাৎস দ্বীপ আক্রমণ করে। এই পরিপেক্ষিতে মার্কিন সরকার চীনের সঙ্গে আলাপ আলোচনার জন্য আগ্রহ প্রকাশ করে।

    রুশ বিরোধী চীন ও রাশিয়া উভয়ই কমিউনিস্ট রাষ্ট্র হলেও চীনের কমিউনিস্ট অভ্যুত্থানের পর উভয়ের মধ্যে বিরোধের সূচনা হয়। প্রথম দিকে অবশ্য দুই দেশের মধ্যে সহযোগিতার সম্পর্ক গড়ে উঠেছিল। ১৯৫৩ খ্রিস্টাব্দে রাশিয়া ম্যাঞ্ছুরিয়ার রেলপথের উপর তার দাবি ত্যাগ করে। পোর্ট আর্থার চীনকে ফিরিয়ে দেওয়া হয় রাশিয়া প্রায় এক বিলিয়ন রুবেল চীনকে ঋণ হিসেবে দেয়, কিন্তু রুশ-চীন মৈত্রী স্থায়ী হয়নি। মোঙ্গোলিয়া, ম্যাঞ্চুরিয়া ও সিংকিয়াং অঞ্চলে রাশিয়া ও চীনের মধ্যে সীমানা বিরোধ উভয় দেশে মৈত্রীর পথে বাঁধা হয়ে দাঁড়িয়েছিল। অতীতে চীনের দুর্বলতার সুযোগে চীনের কয়েকটি স্থানে জারতন্ত্র তার প্রভাব বিস্তার করেছিল। কমিউনিস্ট চীনের অভ্যুত্থানের ফলে এই সমস্ত স্থানকে কেন্দ্র করে উভয়ের দেশের মধ্যে বিরোধের সূচনা হয়। ১৯৬৯ খ্রিঃ ডামনেস্কি দ্বীপকে কেন্দ্র করে রুশ-চীন সংঘর্ষ হয়েছিল।

    কুশ্চেভ আদর্শগত দিক থেকে বিচার করলে রুশো-চীনের বিরোধের কারণ কুশ্চেভের সহবস্থান নীতি। চীন মার্কিন যুক্তরাষ্ট্রের সঙ্গে রাশিয়ার সহবস্থান নীতিকে সমর্থন করতে পারেনি। ১৯৫৬ থেকে উভয়ের মধ্যে বিরোধ শুরু হয়। ১৯৬২ খ্রিঃ রাশিয়া কিউবা থেকে রকেট অপসারণ করতে অসম্মত হলে চীন তার সমালোচনা করেছিল। অপরদিকে চীন-ভারত সংঘর্ষে রাশিয়া চীনকে সমর্থন করেনি। ১৯৬৯ খ্রিঃ মস্কোতে কমিউনিস্ট রাষ্ট্রগুলির যে সম্মেলন হয় তাতে চীন যোগদান করেনি।

    ভারতের সঙ্গে সম্পর্ক চীন আণবিক অস্ত্রের অধিকারী হবার পর, আন্তর্জাতিক শক্তি সাম্যের ক্ষেত্রে গুরুতর পরিবর্তনের সূচনা হয়। ভারত ও চীন পরস্পরের প্রতিবেশী। ম্যাঞ্চু রাজবংশের পতনের পর ১৯১৪ খ্রিঃ চীন ভারত সীমানা নিধারনের জন্য যে সম্মেলন হয় তাতে যোগদান করে তিব্বত ও চীনের প্রতিনিধিরা। ব্রিটিশ প্রতিনিধি স্যার অর্থার ম্যাকমোহন উভয় দেশের মধ্যে সীমানা নিধারন করেন এই সীমানাকে উভয় দেশ স্বীকৃতি দিয়েছিল। চীনে কমিউনিস্ট সরকার প্রতিষ্ঠিত হলে স্বাধীন ভারত তাকে স্বীকৃতি দেয়। ভারত ও চীন পঞ্চশীল চুক্তিতে সাক্ষর দান করে। বান্দুং সম্মেলন পঞ্চশীল চুক্তিকে স্বীকৃতি দিয়েছিল। কিন্তু ১৯৫৫ থেকে ১৯৬২ পর্যন্ত চীনের ভারত সীমানা লঙ্ঘনকে কেন্দ্র করে উভয় দেশের মধ্যে সম্পর্কের অবনতি ঘটতে থাকে। শেষ পর্যন্ত ১৯৬২ খ্রিঃ ভারত-চীন সীমান্তে উভয় দেশের সৈন্যদের মধ্যে ব্যাপক সংঘর্ষ শুরু হয়। ওই বছর কলম্বতে আফ্র-এশিয়ার ৬-টি রাষ্ট্রের সম্মেলনে ভারত ও চীনের মধ্যে শান্তিস্থাপনের জন্য প্রস্তাব পেশ করা হয়েছিল। ভারত এই প্রস্তাব গ্রহণ কিন্তু চীন অসম্মতি গ্যাপন করেন।

    অন্যান্য অন্যান্য রাষ্ট্রের সঙ্গে চীনের সম্পর্কের মধ্যে এশিয়ায় তার নেতৃত্বে প্রতিষ্ঠা লক্ষ্যনিয় হয়ে উঠেছিল। কোরিয়া ভিয়েতনাম প্রভৃতি দেশের সঙ্গে চীনের ঐতিহাসিক সম্পর্ককে চীন বিশেষ মূল্য দিয়েছিল। বান্দুং ও জেনেভা সম্মেলনে চীন বৃহৎ শক্তি হিসাবে মর্যাদা পায়।

    মার্কিন যুক্তরাষ্ট্রের সঙ্গে চীনের সম্পর্ক নিধারিত হয় কোরিয়া যুদ্ধের সময়। আসলে কমিউনিস্ট চীনের উত্থান মার্কিন যুক্তরাষ্ট্রকে বিব্রত করেছিল, কারণ এর ফলে এশিয়া শক্তি সাম্যে বিরাট পরিবর্তন ঘটে যায়। কোরিয়া যুদ্ধের সময় মার্কিন সেনাপতি জেনারল ম্যাক আর্থার চীনে পারমানবিক বোমা ব্যাবহার করতে চেয়েছিলেন। এই পরিকল্পনা কার্যকর নাহলেও মার্কিন যুক্তরাষ্ট্র দীর্ঘকাল চীনকে জাতিপুঞ্জ থেকে বিছিন্ন করে রেখেছিল।

    দ্বিতীয় বিশ্বযুদ্ধের পর আপাতদৃষ্টিতে বিশ্বের শক্তিগুলি রাশিয়া এবং মার্কিন যুক্তরাষ্ট্র এই দুই শিবিরে বিভক্ত হয়ে গেলেও কমিউনিস্ট চীনের উত্থান দুই বৃহৎ শক্তির কাছে অসস্থির বিষয় হয়ে উঠেছিল। এতদিনে এশিয়ার শক্তির সাম্যে জাপানের যে প্রভাব ছিল তা ধীরে ধীরে সরে যায়। চীন এশিয়া তথা আন্তর্জাতিক রাজনীতিতে প্রভাব বিস্তার করতে থাকে।

  4. ঠান্ডা লড়াইয়ের অবসানের কারণ কি? (What are the reasons for the end of Cold War?)

    আন্তর্জাতিক ক্ষেত্রে প্রায় তিন দশক ঠান্ডা লড়াই আন্তর্জাতিক শক্তি সাম্যকে বজায় রেখেছিল। বিশেষজ্ঞদের মতে ১৯৯০-এ ঠান্ডা লড়াইয়ের আনুষ্ঠানিক সমাপ্তি ঘটলেও। ১৯৭০-এর দশকে মধ্য ভাগ থেকে ঠান্ডা লড়াই অন্তর্হিত হয়। তবে উল্লেখযোগ্য হয়, আন্তর্জাতিক ক্ষেত্রে সংকট ও যুদ্ধ বিগ্রহের আশংকা মার্কিন যুক্তরাষ্ট্র ও সোভিয়েত রাশিয়া আলোচনার মাধ্যমে সম্পূর্ণ ভাবে সমস্যা সমাধানের চেষ্টা করলেও আনুষ্ঠানিক ভাবে ঠান্ডা লড়াইয়ের অবসানের জন্য কোন উদ্যোগ নেয়নি। ১৯৭০-এর দশক থেকে আন্তর্জাতিক ক্ষেত্রে এমন কিছু ঘটনা ঘটর ও পরিস্থিতির সৃষ্টি হয়, যা শেষ পর্যন্ত ১৯৯০ খ্রিঃ ঠান্ডা যুদ্ধের অবসান ঘটায়।

    হেলসিঙ্কি হেলসিঙ্কি সম্মেলনের শেষে বিশ্বের প্রায় সমস্ত বৃহৎ শক্তি ইউরোপে নিরাপত্তা ও অর্থ-সামাজিক সহযোগিতার ব্যপারে ঐক্যমত প্রসার করেন। মার্কিন যুক্তরাষ্ট্র ও সোভিয়েত রাশিয়া এই সম্মেলনের গুরুত্বপূর্ণ ভূমিকা ভূমিকা পালন করেন। হেলসিঙ্কি সম্মেলনের পর এজাতীয় একাধিক সম্মেলনে, বৃহৎ শক্তি বর্গের মধ্যে যে সহযোগিতা, সম্পত্তি ও বন্ধুত্বের বাতাবরণ তৈরি হয়, তা বৃহৎ দুই শক্তির মধ্যে ঠান্ডা লড়াইয়ের উত্তেজনা হ্রাস করেছিল।

    গর্বাচেভ ১৯৮৬ খ্রিঃ রাশিয়ায় গর্বাচেভের ক্ষমতা লাভ করে। ঠান্ডা লড়াই এর গুরুপুর্ন ভূমিকা লাভ করেছিল। ১৯৮৮ খ্রিঃ ডিসেম্বর গর্বাচেভ তাঁর ভাষণে বলেন যে, সমস্ত রাষ্ট্রেই স্বাধীন মতামত ও সিদ্ধান্ত গ্রহণের ক্ষমতা এনেছে। এই গ্লাসনস্ত বা মুক্ত চিন্তার ঘোষণা পূর্ব ইউরোপের জনগণকে সাহসী করে তুলেছিল। ফলে যে বার্লিন প্রাচীর প্রায় তিন দশক ধরে ইউরোপের ঠান্ডা লড়াইয়ের প্রতীক হিসাবে অবস্থান করেছিল তা অবসান হয়।

    উভয় দেশে অর্থনৈতিক বিপর্যয় ক্ষমতা লাভের পর রাশিয়ার সঙ্কটজনক আর্থিক অবস্থার পেক্ষিতে গর্বাচেভ উপলব্ধি করেন যে, বৃহৎ শক্তি মর্যাদা লাভের বাসনায় রাশিয়াকে যথেষ্ট আর্থিক ক্ষতি স্বীকার করতে হয়েছে। তাই তিনি রাশিয়ায় অভ্যন্তরন সংস্কারে পাশাপাশি বৈদেশিক নীতিতে পরিবর্তন আনেন। সংঘাত থেকে সরে এসে রাশিয়া সমঝতার পথ অনুসরণ করেন ফলে ঠান্ডা লড়াই সীমিত হয়ে পড়ে, সোভিয়েত রাশিয়ার তুলনায় মার্কিন অর্থনীতি অনেক উন্নত ও স্থীতিশীল হলেও ঠান্ডা লড়াইয়ের কারনে আমেরিকাকে যথেষ্ট আর্থিক খেসারত দিতে হয়েছিল। উপসাগরীয় অঞ্চলে ব্যয় বহুল সামরিক ঘাঁটি বজায় রাখার ফলে মার্কিন অর্থনীতি উপর চাপ পড়ে। তা ছাড়া বিভিন্ন আঞ্চলিক সংঘর্ষ এবং ভিয়েতনাম, এ্যাঙ্গোলা ও আফগানিস্থানে ছায়া যুদ্ধের ফলে উভয় দেশের অর্থনীতি ক্ষতিগ্রস্থ হয়।

    দাঁতাত ঠান্ডা লড়াইয়ের অবসানে দাঁতাতের একটা ভূমিকা ছিল। দাঁতাতের ফলে এই দুই মহা শক্তিশালী রাষ্ট্র পরস্পরের কাছে আসতে সক্ষম হয়। এ ব্যাপারে পশ্চিম জার্মানি রাষ্ট্র প্রধান Willy Brandt Ostopolitik সূচনা করলে বোঝা পড়ার সম্ভনা দেখা দেয়। সমরাস্ত্র নিয়ে প্রতিযোগিতা অনেকটা নিয়ন্ত্রিত হয়।

    দ্বি মেরুকরণ দ্বিতীয় বিশ্বযুদ্ধের অর্ব্বহিত পড়ে আমেরিকা ও রাশিয়া আন্তর্জাতিক ক্ষেত্রে নিজ নিজ প্রভাব বৃদ্ধির জন্য নিজেদের অনুগামী রাষ্ট্রের সংখ্যা বৃদ্ধি করতে স্বচেষ্ট হয়। এই সময় বিশ্ব স্পষ্টত দুটি গোষ্ঠীতে বিভক্ত হয়ে পড়ে। সৃষ্টি হয় বিশ্ব রাজনীতির ডিবি মেরুকরণ এই পরিস্থিতিতে ঠান্ডা লড়াই তীব্র আকার নেয়। কিন্তু কিছুদিনের মধ্যে এই দুই বৃহৎ শক্তির অনুগামী রাষ্ট্রগুলি শর্তহীন আনুগত্য প্রদর্শন না করে স্বাধীন বৈদেশিক নীতি অনুসরণের সিদ্ধান্ত নেয়। মার্কিন জোটের সদস্য ফ্রান্সের রাষ্ট্রপতি দ্য গোল একছত্র মার্কিন আধিপত্যের বিরুদ্ধে বিদ্রোহ ঘোষণা করে ফ্রান্সকে এক স্বতন্ত্র শক্তিরূপে বিশ্ব রাজনীতিতে প্রতিষ্ঠা করতে উদ্যোগী হয়। এরপর ব্রিটেন ও ফ্রান্সের পথ অনুসরণ করে। ফলে সৃষ্টি হয় বহু কেন্দ্রিকতার একই ভাবে সোভিয়েত শিবিরে ও ভাঙন লক্ষ্য করা যায়। পূর্ব ইউরোপে দেশ সমূহে ১৯৫০-এর দশক থেকেই সোভিয়েত আধিপত্য বাদের বিরুদ্ধে যে ক্ষোভের সৃষ্টি হয়েছিল তা বিদ্রোহের রূপ নেয়। তা ছাড়া ১৯৬০-এর দশকের মধ্যভাগে চীন-সোভিয়েত মত বিরোধ সমাজতান্ত্রিক সমাজের ভাঙন ধরিয়ে ছিল। ফলে দুই বৃহৎ শক্তি নিজ অনুগামী রাষ্ট্র সমূহের উপর নির্মাঙ্কুশ প্রাধান্য বিস্তারে ব্যর্থ হয়। এই পরিস্থিতে ঠান্ডা লড়াই তীব্রতা হারিয়ে ছিল।

    তৃতীয় বিশ্ব তৃতীয় বিশ্বের দেশগুলি উপলব্ধি করেছিল ঠান্ডা লড়াই অব্যহত থাকলে তাদের মত উন্নয়নশীল দেশ সমূহের বিকাশ ব্যহত হবে। কারণ দুই বৃহৎ শক্তির মধ্যে ঠান্ডা লড়াইয়ের অবসম্ভার পরিণাম হল বিশ্বব্যাপী অস্ত্র প্রতিযোগিতা বৃদ্ধি। এই প্রতিযোগিতায় জড়িয়ে পড়লে তৃতীয় বিশ্বের দেশগুলো বাঁধা পাবে। তাই প্রায় শতাধিক তৃতীয় বিশ্বের দেশ নির্জোট আন্দোলন গড়ে তোলে, এবং প্রথম থেকেই দ্বি-মেরু করেনের বিরোধিতা করেন। রাষ্ট্রগুলি পৃথকভাবে দূর্বল হলেও তাদের সম্মেলিত চাপকে ঠান্ডা লড়াইয়ের তীব্রতা হ্রাসের কারণ রূপে গণ্য করা যায়।

    প্যারিস সনদ ১৯৭৫ খ্রিঃ ৩৫টি দেশ হেলসিঙ্কিতে ইউরোপীয় সহযোগিতা ও নিরাপত্তার যে ভিত্তি প্রতিষ্ঠা করে তাকে আরো সুদৃঢ় করার জন্য গর্বাচেভের উদ্যোগে ১৯৯০-এর নভেম্বর মাসে প্যারিসের সনদ স্বাক্ষরিত হয়। এই সনদ ইউরোপে সহযোগিতা ও নিরাপত্তা সুদৃঢ় করার পাশাপাশি ঠান্ডা লড়াইয়ের অবসানের গুরুত্ব পূর্ন ভূমিকা পালন করেছিল। প্যারিস সনদে ইউরোপীয় রাষ্ট্র সমব্যয় প্রতিষ্ঠা করার প্রস্তাব - রাশিয়া, ব্রিটেন ও ফ্রান্স এই তিন বৃহৎ শক্তির দূরত্ব হ্রাস করেছিল।

    ১৯৮৯ খ্রিঃ এমন কতগুলি ঘটনা ঘটে যা আন্তর্জাতিক সম্পর্কের গতি প্রকৃতিকে সম্পূর্ণ বদলে দেয় ওই বছর দুই জার্মানির ঐক্যবদ্ধ হয় এবং পূর্ব ইউরোপে সাম্যবাদের অবসান সূচিত হয়। ফলে ঠান্ডা লড়াইয়ের ভিত্তি রূপে ইউরোপে কাষ্টমোগত বিভাজন ছিল তার অবসান ঘটে। এই পরিবর্তন আন্তর্জাতিক রাজনীতিতে সোভিয়েত ইউনিয়নের আধিপত্যের অবসান ঘটায় এরপরে দুই বছরের মধ্যে সোভিয়েত রাষ্ট্র ব্যবস্থা ভেঙে পড়ে। রাশিয়া থেকে সাম্যবাদ বিদায় ছিল। দূর্বল রাশিয়া কাছে ঠান্ডা লড়াই অপ্রাসঙ্গিক হয়ে পড়ে। ফলে পশ্চিম এশিয়া সহ তৃতীয় বিশ্বের বিভিন্ন অঞ্চলে দুই বৃহৎ শক্তির মধ্যে যে ছায়া যুদ্ধ চলছিল তার অবসান ঘটে।

    ঠান্ডা লড়াইয়ের অবসানে পারমাণবিক অস্ত্র সংবরণের সদিচ গুরুত্বপূর্ণ ভূমিকা পালন করেছিল। পারমাণবিক অস্ত্রের ভয়াবহতা উপলব্ধি করে দুই বৃহৎ শক্তি সংযত হয়েছিল। জর্জ ব্রুশ এবং গর্বাচেভ উভয়ই পারমাণবিক অস্ত্র ধ্বংস করতে সম্মত হয়। এই সিদ্ধান্ত ঠান্ডা লড়াইয়ের অবসানের গুরুত্বপূর্ণ পদক্ষেপ।

  5. বিশ্বায়ন ও তার প্রভাব। (Globalisation and its impact)

    আন্তর্জাতিক সম্পর্কের ক্ষেত্রে বিশ্বায়ন বহু আলোচিত এবং বিতর্কিত বিষয়। একথাটি ৭০-এর দশকের মঝামাঝি প্রথম চালু করে আমেরিকান এক্সপ্রেস ব্যাংক তাদের ক্রেডিট কার্ডের বিজ্ঞাপনে। অধ্যাপক জেমস রোসেণু বিশ্বায়নের কতগুলি বৈশিষ্ট্য তুলে ধরেছেন। সেগুলি হল - মুক্ত বাজার পুঁজির অবাধ বিচরণ, তথ্য ও প্রযুক্তির প্রসার, জাতীয় অর্থনীতি আন্তর্জাতিকীকরন।

    চ্যাটার্জীর বক্তব্য অধ্যাপক পার্থ চ্যার্টার্জীর বক্তব্য হল ইতিহাসের তথ্য থেকে দেখা যায় উনিশ শতকের শেষ দিকে একটা বড় ধরনের বিশ্বায়ন চলছিল। বিশ্বের বিভিন্ন অংশে ব্যাপক পরিমান মূলধন রপ্তানী হচ্ছিল ইউরোপ থেকে। আন্তর্জাতিক মূলধনের আদান প্রদান ধরলে উনিশ শতকের শেষে যতটা বিশ্বায়ন হয়েছিল আজও তা সে জায়গায় পৌঁছায়নি। তথাপি বিংশ শতাব্দীর শেষদিকে এবং একবিংশ শতকে বিশ্বায়নের বিষয়টি গুনগত দিক দিয়ে পৃথক বলে অধ্যাপক চ্যাটার্জী মনে করেন।

    অর্থ সংকট দ্বিতীয় বিশ্বযুদ্ধোত্তর কালে সোভিয়েত ইউনিয়নসহ ইউরোপীয় রাষ্ট্রগুলি অর্থনৈতিক সংকটের সম্মুখিন হয়েছিল। কিন্তু মার্কিন যুক্তরাষ্ট্রের ক্ষেত্রে তা হয়নি। ইউরোপের অন্যান্য দেশগুলিও পুঁজির অভাব জনিত সংকটের মুখে পড়েছিল। তাই ইউরোপের দেশগুলিতে মার্কিন পুঁজিবিনিয়োগের একটা সুযোগ দেখা দেয়। মার্কিন যুক্তরাষ্ট্রের উদ্যোগে গড়ে ওঠে বিশ্বব্যংক। বিশ্বব্যাংকে প্রথম থেকেই মার্কিন ডলারের আধিপত্য ছিল। বিশ্বব্যাংক মারফত ইউরোপ ও তৃতীয় বিশ্বের বাজারে ঋণ অর্থনীতি হিসাবে আমেরিকা ডলার বিনিয়োগ করে।

    ইউরো-ডলার সৃষ্টি ১৯৪৮-১৯৫২ খ্রিঃ মধ্যে আমেরিকা ইউরোপের দেশগুলিও জাপানের ১৭ মিলিয়ন ডলার চড়া সুদে ঋণ দেয়। ফলে ইউরোপ ও জাপানে ডলারের চাহিদা বৃদ্ধি পায়। ১৯৫৬ থেকে আমেরিকা ও ইউরোপের অনেক ব্যাংক বিভিন্ন সংস্থাতে প্রচুর ডলার ঋণ হিসাবে বিনিয়োগ করে। এই ভাবে ইউরো ডলারের সৃষ্টি হয়।

    উন্নয়নশীল দেশ বিশ্বায়নের মধ্যে দিয়ে উন্নত দেশগুলির লক্ষ্য হল যত বেশি সম্ভব মুনাফা অর্জন। অর্থনৈতিক অগ্রগতির সঙ্গে সঙ্গে মানুষের ক্রয় ক্ষমতা বৃদ্ধি পায় ও ভোগ্য পণ্যের চাহিদা বাড়ে। ফলে নানাবিধ পণ্যের বাজার সৃষ্টি হয়। তবে উন্নত দেশগুলির তুলনার উন্নয়নশীল দেশগুলিতে ক্রয় ক্ষমতা সীমিত বলে পণ্যের চাহিদা সীমিত। বর্তমান ভোগবাদী অর্থনীতি উন্নয়নশীল দেশগুলির সমাজ ও অর্থনীতির উপর নেতিবাচক প্রভাব ফেলেছে। উন্নয়নশীল দেশের মুক্ত বাজারে ধনী ও মধ্যবিত্ত শ্রেণী বিভিন্ন ভোগ্য পণ্য ক্রয়ের দিকে ঝুকেছে। অপর দিকে নিম্ন মধ্যবিত্ত এবং দরিদ্র শ্রেণী দূর্বল ক্রয় ক্ষমতার জন্য এই বাজারের বাইরে থেকে যাচ্ছে। ফলে ধনী দরিদ্রের বৈষম্য আরো তীব্র হচ্ছে। শুধু তাই নয় মুক্ত বাজারের বহু দ্রব্যের অবধি ও অনিয়ন্ত্রিত ব্যবহারের ফলে পরিবেশ দূষিত হচ্ছে।

    অন্তরাষ্ট্রীয় ক্ষেত্রে পণ্য চলাচলে বিধি নিষেধ তুলে দেওয়া বিশ্বায়নের অন্যতম শর্ত। এজন্য আমদানি ও অন্তর্দেশীয় শুল্কের মধ্যে ভারসাম্য রাখা দরকার। এ কাজটি সম্পন্ন করার দায়িত্ব বিশ্ববাণিজ্যিক সংস্থার। বলা হয় এর ফলে জাতীয় সংস্কার হবে। শিল্প বাণিজ্যের বিকাশ ঘটবে, সরকারী এ বাড়বে, শিল্পে এবং কৃষিতে সরকারী ভর্তুকি বন্ধ হয়। কিন্তু উন্নয়নশীল দেশগুলির পক্ষে এই নিয়ম বাস্তবে পরিণত করা কঠিন।

    বিশ্ব অর্থনীতি সব দেশের রাজনীতিতে ভীষণভাবে প্রভাবিত করেছে। সবচেয়ে বেশি প্রভাব ফেলেছে আন্তর্জাতিক মূলধন নিয়ন্ত্রণকারী প্রতিষ্ঠানগুলি। ফলে যে দেশ বিদেশী পুঁজির উপর বেশি নির্ভরশীল এই প্রতিষ্ঠানগুলি সে দেশ থেকে সরে যাবার ভয় দেখিয়ে সুবিধাজনক শর্ত আদায় করে। এর ফলে রাষ্ট্রের সার্বভৌমত্বকর হয়। বিশ্ব-ব্যাংকও একথা স্বীকার করে নিয়েছে বিশ্বায়নের ফলে ধনী ও দরিদ্র রাষ্ট্রের মধ্যে ব্যবধান ক্রমশই বেড়ে চলেছে।

    বিশ্বায়নের দরুন প্রযুক্তি ও যন্ত্রনির্ভর উৎপাদনের উপর জোর দেওয়ার ফলে শ্রমিক ছাটাই-এর সমস্যা দেখা দেয়। ফলে শ্রমিকদের অধিকার ও নিরাপত্তা প্রশ্নটি গৌণ হয়ে দাড়ায়। বিশ্বায়নের ফলে কমধনীর রাষ্ট্রগুলির ক্রমশই ঋণের জলে জড়িয়ে পড়েছে। স্থানীয় সংস্কৃতি বিপন্ন হচ্ছে। বিশ্বায়নের দরুন বিভিন্ন রাষ্ট্রের সীমানা তুলনামূলক ভাবে নমনীয় হয়ে ওঠায় সেই সুযোগকে কাজে লাগাচ্ছে সন্ত্রাসবাদীরা এবং মাদক দ্রব্যের চোরাচালানকারিরা। ভারতে বিশ্বায়ন প্রক্রিয়া শুরু হয়েছিল ১৯৮০ সালে নরসিমা রায় আন্তর্জাতিক অর্থসংস্থা ও বিশ্বব্যাংকের কাছ থেকে বিপুল পরিমানে ঋণ নিয়েছিল। বিশ্ববাজারের কাছে সে সময় ভারতের অর্থনীতিকে মুক্ত করে দেওয়া হয়। ফলে ভারতে বাণিজ্য ঘাটতি ছিল প্রায় ৬০০ কোটি ডলার। ১৯৯৪-৯৫ এ বৈদেশিক ঋণের বোঝা ভারী হয়ে ওঠে। ফলে ১৯৯৬ থেকে ভারত বিশ্বায়নের সঙ্গে সামঞ্জস্য বজায় রেখে অর্থনৈতিক ক্ষেত্রে সংস্কার শুরু করে। এই সংস্কারের কুফল মুদ্রাস্ফীতির হার বৃদ্ধি। ফলে সাধারণ মানুষের স্বার্থ বিপন্ন হয়েছে। এই প্রবনতা রোধ করার ক্ষমতা ভারতের নেই। শুধু তাই নয় বিশ্বায়ন বদলে দিয়েছে গণতন্ত্র, জাতীয়তা এবং দেশ প্রেমের ধারনা।

Share:

Project 1 || Wong Edition || C++ Project || B.Tech Diaries

Project #1 - Sorted Date List

  • Read a sequence of dates from file input.
  • Permissible formats for dates include
    dd/mm/yyyy e.g. 01/01/1970
    
    d MMM yyyy e.g. 1 JAN 1970
    
    MMM d, 1970 e.g. JAN 1, 1970
    
    MMMM d, yyyy e.g. January 1, 1970.
    
  • Sort and output the dates such that the later dates come first.
  • Use functions from the STL's: `<string>`, `<algorithm>`, `<regex>`, `<iterator>`, `<array>`.
  • Create your customised MyDate class.

Solution:


#include <iostream>
#include <string>
#include <algorithm>
#include <regex>
#include <iterator>
#include <array>
#include <fstream>
#include <iomanip>

#define N 25

class Date
{
private:
    int day;
    int month;
    int year;
    std::array<std::string, 12> _months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};

public:
    Date()
    {
        day = 9999;
        month = 9999;
        year = 9999;
    }
    Date(std::string str_date)
    {
        day = 1;
        month = 1;
        year = 1970;
        _date_parser(str_date);
    }
    ~Date() {}
    bool is_valid()
    {
        if (day > 31 || day < 1)
            return false;
        if (month > 12 || month < 1)
            return false;
        if (year > 9999 || year < 1000)
            return false;
        return true;
    }
    void _date_parser(std::string str_date)
    {
        std::string _months_abbr_pattern = "", _months_pattern = "";
        for (size_t i = 0; i < _months.size(); i++)
        {
            _months_abbr_pattern += _months[i].substr(0, 3);
            if (_months.size() - 1 != i)
            {
                _months_abbr_pattern += "|";
            }
        }
        for (size_t i = 0; i < _months.size(); i++)
        {
            _months_pattern += _months[i];
            if (_months.size() - 1 != i)
            {
                _months_pattern += "|";
            }
        }

        std::array<std::regex, 10> patterns({
            std::regex("([0-2][1-9]|3[0-1])\\s*[, /\\-]\\s*(0[1-9]|1[0-2])\\s*[, /\\-]\\s*([1-5]\\d{3})"),
            std::regex("([1-9]|[1-2][1-9]|3[0-1])\\s*[, /\\-]\\s*(" + _months_abbr_pattern + ")\\s*[, /\\-]\\s*([1-5]\\d{3})", std::regex::icase),
            std::regex("(" + _months_abbr_pattern + ")\\s*[, /\\-]\\s*([1-9]|[1-2][1-9]|3[0-1])\\s*[, /\\-]\\s*([1-5]\\d{3})", std::regex::icase),
            std::regex("(" + _months_pattern + ")\\s*[, /\\-]\\s*([1-9]|[1-2][1-9]|3[0-1])\\s*[, /\\-]\\s*([1-5]\\d{3})", std::regex::icase),
        });

        std::smatch match;
        bool check = false;
        for (size_t i = 0; i < patterns.size(); i++)
        {
            if (std::regex_match(str_date, patterns[i]))
            {
                std::regex_search(str_date, match, patterns[i]);
                switch (i)
                {
                case 0:
                    day = std::stoi(match[1].str());
                    month = std::stoi(match[2].str());
                    year = std::stoi(match[3]);
                    break;
                case 1:
                    day = std::stoi(match[1].str());
                    month = _months.size();
                    for (size_t i = 0; i < _months.size(); i++)
                    {
                        if (_months[i].substr(0, 3) == match[2].str())
                        {
                            month = i + 1;
                            break;
                        }
                    }
                    year = std::stoi(match[3]);
                    break;
                case 2:
                    day = std::stoi(match[2].str());
                    month = _months.size();
                    for (size_t i = 0; i < _months.size(); i++)
                    {
                        if (_months[i].substr(0, 3) == match[1].str())
                        {
                            month = i + 1;
                            break;
                        }
                    }
                    year = std::stoi(match[3]);
                    break;
                case 3:
                    day = std::stoi(match[2].str());
                    month = _months.size();
                    for (size_t i = 0; i < _months.size(); i++)
                    {
                        if (_months[i] == match[1].str())
                        {
                            month = i + 1;
                            break;
                        }
                    }
                    year = std::stoi(match[3]);
                    break;
                }
                check = true;
                break;
            }
        }
        if (!check)
            std::cout << "Invalid Format" << std::endl;
    }

    bool operator>(Date d)
    {
        if (year > d.year)
            return true;
        else if (year == d.year)
        {
            if (month > d.month)
                return true;
            else if (month == d.month)
            {
                if (day > d.day)
                    return true;
                else
                    return false;
            }
            else
                return false;
        }
        return false;
    }

    bool operator<(Date d)
    {
        if (year < d.year)
            return true;
        else if (year == d.year)
        {
            if (month < d.month)
                return true;
            else if (month == d.month)
            {
                if (day < d.day)
                    return true;
                else
                    return false;
            }
            else
                return false;
        }
        return false;
    }

    std::string _str()
    {
        std::string str_date = "";
        str_date += std::to_string(day) + " ";
        str_date += _months[month - 1] + " ";
        str_date += std::to_string(year);
        return str_date;
    }

    friend std::ostream &operator<<(std::ostream &os, Date &date)
    {
        os << date._str();
        return os;
    }
};

std::array<Date, N> get_dates(std::string filename)
{
    std::ifstream infile;
    std::string str_date;

    std::array<Date, N> date_array;
    std::cout << "Get Dates from " << filename << " ... " << std::endl;
    int i = 0;
    infile.open(filename);
    while (std::getline(infile, str_date))
    {
        if (str_date != "")
            date_array[i++] = Date(str_date);
    }
    infile.close();

    return date_array;
}

int main(int argc, char const *argv[])
{
    std::array<Date, N> dates = get_dates("date_list.txt");

    std::cout << "Sorting Dates ... " << std::endl;
    std::sort(dates.begin(), dates.end());

    std::array<Date, N>::iterator it;
    for (it = dates.begin(); it != dates.end(); it++)
    {
        if (it->is_valid())
            std::cout << *it << std::endl;
    }

    return 0;
}

Input (date_list.txt):


30/01/3055
30-02-4849
30 01, 3459
16/11/5509
30-06/1571
13-Aug-1768
30/ Apr/1002
2 May 2668
29 JAN, 5802
31 Jul 2224
Jan 7 3106
Apr 31 1632
Mar 6 ,3214
Feb 19, 5063
Sep 6-3652
April 30, 5889
January 13 ,4035
May 21 2671
June 30, 4785
JANUARY 4 2324

Output:


Get Dates from date_list.txt ... 
Sorting Dates ...
30 April 1002
30 June 1571
31 April 1632
13 August 1768
31 July 2224
4 December 2324
2 May 2668
21 May 2671
30 January 3055
7 January 3106
6 March 3214
30 January 3459
6 September 3652
13 January 4035
30 June 4785
30 February 4849
19 February 5063
16 November 5509
29 December 5802
30 April 5889

Share:

Programming with C++ - Day8 || Wong Edition || B.Tech Diaries

Lab #8 - Standard Template Library (STL)

Resources

Question 1 - Acrobatics with Strings

Write a program that creates 2 strings then prints out the letters they have in common.

Solution:


#include <bits/stdc++.h>

// Question 1
void commonLetters(std::string s1, std::string s2)
{
    std::string s = "";
    auto it = std::set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), std::back_inserter(s));
    std::cout << s << std::endl;
}

int main(int argc, char const *argv[])
{
    std::string s1 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nec feugiat in fermentum posuere urna. Nunc sed blandit libero volutpat sed cras ornare. Commodo quis imperdiet massa tincidunt nunc pulvinar sapien et ligula. A scelerisque purus semper eget. Pellentesque elit ullamcorper dignissim cras tincidunt lobortis. Mattis aliquam faucibus purus in massa tempor nec feugiat nisl. Tortor id aliquet lectus proin. Nulla posuere sollicitudin aliquam ultrices sagittis. Sed adipiscing diam donec adipiscing. Bibendum enim facilisis gravida neque convallis a cras.",
                s2 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sit amet nisl suscipit adipiscing bibendum. Sed viverra ipsum nunc aliquet bibendum enim facilisis gravida. Ipsum suspendisse ultrices gravida dictum fusce ut placerat orci nulla. Et magnis dis parturient montes. Blandit massa enim nec dui nunc mattis enim ut tellus. Tempus quam pellentesque nec nam aliquam. Aenean pharetra magna ac placerat vestibulum lectus mauris ultrices eros. Tristique nulla aliquet enim tortor at auctor urna nunc id. In fermentum et sollicitudin ac orci phasellus. Senectus et netus et malesuada fames ac.";
    commonLetters(s1, s2);
    return 0;
}

Output:


Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ut iumvvrsuuuussrvidauv

Question 2 - Sorting Vehicles

Create instances of the Vehicle class (from Lab #7) e.g. 3 BUSes, 4 CARs, 2 AUTOs, 5 SCOOTERs.

Store them in a Vector and sort them according to size.

Solution:


#include <bits/stdc++.h>

// Question 2
class Vehicle
{
private:
    std::string name;
    int legs;
    double cost;

public:
    Vehicle()
    {
    }
    Vehicle(std::string n, int l, double c)
    {
        legs = l;
        cost = c;
        name = n;
    }
    ~Vehicle()
    {
    }

    double _cost()
    {
        return cost;
    }

    bool operator>(Vehicle v)
    {
        return (legs > v.legs) || (legs == v.legs && cost > v.cost);
    }
    bool operator<(Vehicle v)
    {
        return (legs < v.legs) || (legs == v.legs && cost < v.cost);
    }

    bool operator==(Vehicle v)
    {
        return (legs == v.legs) && (cost == v.cost);
    }

    std::string to_string()
    {
        return name + "(" + std::to_string(legs) + "," + std::to_string(cost) + ")";
    }

    operator std::string() const
    {
        return name + "(" + std::to_string(legs) + "," + std::to_string(cost) + ")";
    }

    friend std::ostream &operator<<(std::ostream &out, Vehicle &v)
    {
        out << v.to_string();
        return out;
    }
};

void sortVehicles(std::vector<Vehicle> &vehicles)
{
    struct
    {
        bool operator()(Vehicle v1, Vehicle v2)
        {
            return v1._cost() > v2._cost();
        }
    } smallerSize;

    std::sort(vehicles.begin(), vehicles.end(), smallerSize);
    // return vehicles;
}

int main(int argc, char const *argv[])
{
    std::vector<Vehicle> vehicles;
    vehicles.push_back(Vehicle("car", 4, 100));
    vehicles.push_back(Vehicle("car", 4, 200));
    vehicles.push_back(Vehicle("car", 4, 300));
    vehicles.push_back(Vehicle("car", 4, 400));
    vehicles.push_back(Vehicle("bus", 4, 400));
    vehicles.push_back(Vehicle("bus", 4, 300));
    vehicles.push_back(Vehicle("bus", 4, 200));
    vehicles.push_back(Vehicle("auto", 3, 400));
    vehicles.push_back(Vehicle("auto", 3, 300));
    vehicles.push_back(Vehicle("scooter", 2, 50));
    vehicles.push_back(Vehicle("scooter", 2, 100));
    vehicles.push_back(Vehicle("scooter", 2, 120));
    vehicles.push_back(Vehicle("scooter", 2, 150));
    vehicles.push_back(Vehicle("scooter", 2, 200));
    sortVehicles(vehicles);
    for (Vehicle v : vehicles)
    {
        std::cout << v << std::endl;
    }
    return 0;
}

Output:


car(4,400.000000)
bus(4,400.000000)
auto(3,400.000000)
car(4,300.000000)
bus(4,300.000000)
auto(3,300.000000)
car(4,200.000000)
bus(4,200.000000)
scooter(2,200.000000)
scooter(2,150.000000)
scooter(2,120.000000)
car(4,100.000000)
scooter(2,100.000000)
scooter(2,50.000000)

Question 3 - Rectangles and Squares

Using the Rectangle class from Lab #3, create a Square class.

Store instances of Rectangle and Square in a single Vector.

Sort them according to their area. [Hint: use Vector<Rectangle *>]

Solution:


    #include <bits/stdc++.h>

    // Question 3
    class Rectangle
    {
    private:
        int length, breadth;
        std::string colour;
    
    public:
        Rectangle();
        Rectangle(int, int, std::string);
        ~Rectangle();
        int getArea();
        std::string print();
        int compare(Rectangle);
        int _length();
        int _breadth();
        std::string _colour();
    };
    
    int Rectangle::_length()
    {
        return length;
    }
    
    int Rectangle::_breadth()
    {
        return breadth;
    }
    
    std::string Rectangle::_colour()
    {
        return colour;
    }
    
    Rectangle::Rectangle()
    {
        length = 0;
        breadth = 0;
        colour = "";
    }
    
    Rectangle::Rectangle(int length, int breadth, std::string colour)
    {
        this->length = length;
        this->breadth = breadth;
        this->colour = colour;
    }
    
    Rectangle::~Rectangle()
    {
    }
    
    int Rectangle::getArea()
    {
        return this->length * this->breadth;
    }
    
    std::string Rectangle::print()
    {
        std::stringstream ps;
        ps << "\nLength: " << this->length
           << "\nBreadth: " << this->breadth
           << "\nColour: " << this->colour
           << "\nArea: " << this->getArea() << std::endl;
        return ps.str();
    }
    
    int Rectangle::compare(Rectangle rect)
    {
        if (this->getArea() > rect.getArea())
            return 1;
        else if (this->getArea() < rect.getArea())
            return -1;
        return 0;
    }
    
    class Square : public Rectangle
    {
    
    private:
    public:
        Square();
        Square(int, std::string);
        ~Square();
        std::string print();
    };
    
    Square::Square()
    {
    }
    Square::Square(int side, std::string color) : Rectangle(side, side, color)
    {
    }
    
    Square::~Square()
    {
    }
    
    std::string Square::print()
    {
        std::stringstream ps;
        ps << "\nSide: " << this->_length()
           << "\nColour: " << this->_colour()
           << "\nArea: " << this->getArea() << std::endl;
        return ps.str();
    }
    
    int main(int argc, char const *argv[])
    {
        std::vector<Rectangle> rectangles;
        rectangles.push_back(Square(5, "S red"));
        rectangles.push_back(Square(10, "S blue"));
        rectangles.push_back(Square(15, "S green"));
    
        rectangles.push_back(Rectangle(5, 10, "R red"));
        rectangles.push_back(Rectangle(10, 15, "R blue"));
        rectangles.push_back(Rectangle(15, 20, "R green"));
    
        std::sort(rectangles.begin(), rectangles.end(), [](Rectangle a, Rectangle b)
                  { return a.compare(b) < 0; });
    
        for (Rectangle r : rectangles)
        {
            std::cout << r.print() << std::endl;
        }
    
        return 0;
    }      

Output:


    Length: 5
    Breadth: 5
    Colour: S red
    Area: 25
    
    
    Length: 5
    Breadth: 10
    Colour: R red
    Area: 50
    
    
    Length: 10
    Breadth: 10
    Colour: S blue
    Area: 100
    
    
    Length: 10
    Breadth: 15
    Colour: R blue
    Area: 150
    
    
    Length: 15
    Breadth: 15
    Colour: S green
    Area: 225
    
    
    Length: 15
    Breadth: 20
    Colour: R green
    Area: 300

Share: