Контрольная работа по «Программированию и компьютерам»

Автор работы: Пользователь скрыл имя, 10 Июня 2014 в 18:53, контрольная работа

Описание работы

1)Инкапсуляция
Построить класс для работы с датами. Предусмотреть ввод даты, метод ввода, Придумать представление. Метод подсчета разности 2-х дат (в днях).
Мин дат 1 января 1 года
Макс 31 декабря 9999
По григорианскому считать. Високосные года считать по григорианскому календарю.

2) Инкапсуляция
На базе класса даты создать произвольный класс
Дата + число = какой то день
Дата - число = также как вверху

3)Полиморфизм
Есть класс событий, включающий название событие и либо дату, либо время.
Ввод в массив
Название события, тип события(дата-время), от того что введем программа разветвляется.

Содержание работы

Инкапсуляция
4
2
Инкапсуляция
5
3
Полиморфизм

Файлы: 1 файл

коновал.docx

— 28.78 Кб (Скачать файл)

Министерство образования и науки Российской Федерации

 

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»

Факультет информационных технологий.

Кафедра программного обеспечения.

 

 

 

Контрольная работа

по дисциплине Объектно-ориентированное программирование

 

 

 

 

ОГУ 230000.65.4109.09 ПЗ

 

 

 

                        Проверил:       

                                                        _____________Коновал Я.М.

                                                              «__»________ 2014 г.

 

                        Выполнил:

                                                           Студент гр з-12ПИнж(б)РПиС-1

                                                      ____________Р.Н.Никифоров

                                                             «__»________ 2014 г.

 

 

 

 

 

 

 

 

 

 

Оренбург 2014.

Задание на контрольную работу

                                        

1)Инкапсуляция

Построить класс для работы с датами. Предусмотреть ввод даты, метод ввода, Придумать представление.  Метод подсчета разности 2-х дат (в днях).

Мин дат 1 января 1 года

Макс 31 декабря 9999

По григорианскому считать. Високосные года считать по григорианскому календарю.

 

2) Инкапсуляция

На базе класса даты создать произвольный класс

Дата + число = какой то день

Дата - число = также как вверху

 

3)Полиморфизм

Есть класс событий, включающий название событие и либо дату, либо время.

Ввод в массив

Название события, тип события(дата-время), от того что введем программа разветвляется.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Содержание

 

1

Инкапсуляция 

4

2

Инкапсуляция 

5

3

Полиморфизм 

7


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Инкапсуляция

#include <iostream>

#include <windows.h>

#include <iomanip>

 

using namespace std;

 

int InputDat();

 

class Date

{

    public:

    int day;

    int month;

    int year;

    Date()

    {

        day = 0;

        month = 0;

        year = 0;

    }

};

 

 

int main()

{

    SetConsoleCP(1251);

    SetConsoleOutputCP(1251);

    system ("color a");

    cout << "Эта программа вычисляет усложненные даты с классами" << endl;

 

}

 

int InputDat(Date a)

{

    cout << "Введите  дату в формате дд мм гг" << endl;

    cin >> a.day >> a.month >> a.year;

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Инкапсуляция

 

#include <iostream>

#include <math.h>

#include <windows.h>

 

using namespace std;

 

class data{

protected:

int day;

int month;

int year;

 

public:

void inputDat()

{

cout << "Введите  дату в формате дд мм гг" << endl;

cin >> day >> month >> year;

cout << endl;

}

 

static int differenceDat(data a,data b)

{

int i,j;

int amountDay = 0;

 

if ((b.year-a.year-1)>=1)

{

 

   for (i=1;a.year+i<b.year;i++)

   if (((fmod(a.year+i,4)==0) && (fmod(a.year+i,100)!=0)) || (fmod(a.year+i,400)==0)) amountDay=amountDay+366; else amountDay=amountDay+365;

}

 

  if (a.year!=b.year)

  {

 

     if (a.month<12)

     {

         for (i=a.month+1;i<=12;i++)

         {

         if ((i==1) || (i==3) || (i==5) || (i==7) || (i==8) || (i==10) || (i==12)) amountDay=amountDay+31;

         if ((i==4) || (i==6) || (i==9) || (i==11)) amountDay=amountDay+30;

         if (i==2)

         if (((fmod(a.year,4)==0) && (fmod(a.year,100)!=0)) || (fmod(a.year,400)==0)) amountDay=amountDay+29; else amountDay=amountDay+28;

         }

     }

 

     if (b.month>1)

     {

        for (i=1;i<=b.month-1;i++)

        {

        if ((i==1) || (i==3) || (i==5) || (i==7) || (i==8) || (i==10) || (i==12)) amountDay=amountDay+31;

        if ((i==4) || (i==6) || (i==9) || (i==11)) amountDay=amountDay+30;

        if (i==2)

        if (((fmod(b.year,4)==0) && (fmod(b.year,100)!=0)) || (fmod(b.year,400)==0)) amountDay=amountDay+29; else amountDay=amountDay+28;

        }

     }

 

  } else

    {

    for (i=a.month+1;i<=b.month-1;i++)

      {

      if ((i==1) || (i==3) || (i==5) || (i==7) || (i==8) || (i==10) || (i==12)) amountDay=amountDay+31;

      if ((i==4) || (i==6) || (i==9) || (i==11)) amountDay=amountDay+30;

      if (i==2)

      if (((fmod(a.year,4)==0) && (fmod(a.year,100)!=0)) || (fmod(a.year,400)==0)) amountDay=amountDay+29; else amountDay=amountDay+28;

      }

    }

 

   if ((a.month==b.month) && (a.year==b.year))

   {

     for (i=a.day;i<b.day;i++)

     amountDay=amountDay+1;

   }

   else

   {

   if ((a.month==1) || (a.month==3) || (a.month==5) || (a.month==7) || (a.month==8) || (a.month==10) || (a.month==12))

   for (i=a.day;i<31;i++)

   amountDay=amountDay+1;

 

   if ((a.month==4) || (a.month==6) || (a.month==9) || (a.month==11))

   for (i=a.day;i<30;i++)

   amountDay=amountDay+1;

 

   if (a.month==2)

   {

    if (((fmod(a.year,4)==0) && (fmod(a.year,100)!=0)) || (fmod(a.year,400)==0))

     {

     for (i=a.day;i<29;i++) amountDay=amountDay+1;

     }

    else

     {

     for (i=a.day;i<28;i++) amountDay=amountDay+1;

     }

    }

 

   for (i=1;i<b.day;i++) amountDay=amountDay+1;

   amountDay=amountDay+1;

  }

  if (b.year<a.year){

 

cout<<"Вторая  дата меньше предыдущей!"<<endl;

 

amountDay=-amountDay;

}

  return amountDay;

}

 

};

 

int main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

data a;

a.inputDat();

data b;

b.inputDat();

int difference = data::differenceDat(a,b);

cout << difference << endl;

system("pause");

}

 

 

Полиморфизм

 

#include <iostream>

#include <math.h>

#include <windows.h>

 

using namespace std;

 

class data

{

public:

int day;

int month;

int year;

 

bool YearIsLeap()

    {

        if(year%4 == 0)

        {

            if(year%100 == 0)

            {

                if(year%400 == 0)

                {

                    return true;

                }

 

                return false;

            }

 

        return true;

        }

 

    return false;

    }

 

 

void inputDat()

{

cout << "Введите  дату в формате дд мм гг" << endl;

cin >> day >> month >> year;

cout << endl;

}

void input(int d, int m, int y)

    {

        day = d;

        month = m;

        year =y;

    }

    void output()

    {

        cout << endl << day << " " << month << " " << year << endl;

    }

 

static int differenceDat(data a,data b)

{

int i,j;

int amountDay = 0;

 

if ((b.year-a.year-1)>=1)

{

 

   for (i=1;a.year+i<b.year;i++)

   if (((fmod(a.year+i,4)==0) && (fmod(a.year+i,100)!=0)) || (fmod(a.year+i,400)==0)) amountDay=amountDay+366; else amountDay=amountDay+365;

}

 

  if (a.year!=b.year)

  {

 

     if (a.month<12)

     {

         for (i=a.month+1;i<=12;i++)

         {

         if ((i==1) || (i==3) || (i==5) || (i==7) || (i==8) || (i==10) || (i==12)) amountDay=amountDay+31;

         if ((i==4) || (i==6) || (i==9) || (i==11)) amountDay=amountDay+30;

         if (i==2)

         if (((fmod(a.year,4)==0) && (fmod(a.year,100)!=0)) || (fmod(a.year,400)==0)) amountDay=amountDay+29; else amountDay=amountDay+28;

         }

     }

 

     if (b.month>1)

     {

        for (i=1;i<=b.month-1;i++)

        {

        if ((i==1) || (i==3) || (i==5) || (i==7) || (i==8) || (i==10) || (i==12)) amountDay=amountDay+31;

        if ((i==4) || (i==6) || (i==9) || (i==11)) amountDay=amountDay+30;

        if (i==2)

        if (((fmod(b.year,4)==0) && (fmod(b.year,100)!=0)) || (fmod(b.year,400)==0)) amountDay=amountDay+29; else amountDay=amountDay+28;

        }

     }

 

  } else

    {

    for (i=a.month+1;i<=b.month-1;i++)

      {

      if ((i==1) || (i==3) || (i==5) || (i==7) || (i==8) || (i==10) || (i==12)) amountDay=amountDay+31;

      if ((i==4) || (i==6) || (i==9) || (i==11)) amountDay=amountDay+30;

      if (i==2)

      if (((fmod(a.year,4)==0) && (fmod(a.year,100)!=0)) || (fmod(a.year,400)==0)) amountDay=amountDay+29; else amountDay=amountDay+28;

      }

    }

 

   if ((a.month==b.month) && (a.year==b.year))

   {

     for (i=a.day;i<b.day;i++)

     amountDay=amountDay+1;

   }

   else

   {

   if ((a.month==1) || (a.month==3) || (a.month==5) || (a.month==7) || (a.month==8) || (a.month==10) || (a.month==12))

   for (i=a.day;i<31;i++)

   amountDay=amountDay+1;

 

   if ((a.month==4) || (a.month==6) || (a.month==9) || (a.month==11))

   for (i=a.day;i<30;i++)

   amountDay=amountDay+1;

 

   if (a.month==2)

   {

    if (((fmod(a.year,4)==0) && (fmod(a.year,100)!=0)) || (fmod(a.year,400)==0))

     {

     for (i=a.day;i<29;i++) amountDay=amountDay+1;

     }

    else

     {

     for (i=a.day;i<28;i++) amountDay=amountDay+1;

     }

    }

 

   for (i=1;i<b.day;i++) amountDay=amountDay+1;

   amountDay=amountDay+1;

  }

  if (b.year<a.year){

 

cout<<"Вторая  дата меньше предыдущей!"<<endl;

 

amountDay=-amountDay;

}

  return amountDay;

}

 

};

 

class dat: public data

{

    public:

    void Summa(int amount)

    {

        int i;

        i = DateToDays();

        cout << i << endl;

        i+=amount;

        cout << i << endl;

        DaysToDate(i);

    }

 

    int DateToDays()

    {

        dat temp;

        temp.input(1,1,1);

        int i = dat::differenceDat(temp,*this);

        return i;

    }

    void DaysToDate(int amount)

    {

        dat temp;

        temp.input(1,1,1);

        while (amount > 0)

        {

            while(temp.day < temp.CountDayInMonth() && amount > 0)

            {

                temp.day++;

                amount--;

            }

            if (amount > 0)

            {

                if( temp.month < 12 )

                {

                    temp.day = 1;

                    temp.month++;

                    amount--;

                }

                else

                {

                    temp.day = 1;

                    temp.month = 1;

                    temp.year++;

                    amount--;

                }

            }

        }

        day = temp.day;

        month = temp.month;

        year = temp.year;

    }

    int CountDayInMonth()

    {

        switch (month)

        {

            case 1:

            case 3:

            case 5:

            case 7:

            case 8:

            case 10:

            case 12: return 31;

            case 4:

            case 6:

            case 9:

            case 11: return 30;

            case 2:

            {

                if (YearIsLeap())

                {

                    return 29;

                }

                else{return 28;}

            }

        }

 

 

    }

};

 

int main()

{

    SetConsoleCP(1251);

    SetConsoleOutputCP(1251);

    dat a;

    a.inputDat();

    int amount;

    cout << "Введите количество дней" << endl;

    cin >> amount;

    a.Summa(amount);

    a.output();

    system("pause");

}

 


Информация о работе Контрольная работа по «Программированию и компьютерам»