Контрольная работа 5 частей. Дедов А.Н.

«Тверской государственный технический университет»
(ТвГТУ)

Кафедра ЭВМ




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





Выполнил: студент гр. ИВТ - 227
Дедов А.Н.
Проверила: Полтавцева М.А.







Тверь – 2013
Дано:
Вариант: 30
Тип полей: Int
Операции: * , += , ++ ( префиксный )
Управляющий оператор: Do while
Переопределяемые операции: ==, +


Задание часть: 1
В рамках консольного приложения создать класс А с полями а и b и свойством с.
Свойство – значение выражения (с использованием всех операций варианта) над полями а и b (выражение и типы полей – см. вариант в таблице).
Поля инициализировать при объявлении класса.
Конструктор оставить по умолчанию. Проследить, чтобы поля а и b напрямую в других классах были недоступны.
Создать класс Programm с одним методом – точкой входа (Main). В теле метода создать объект класса А, вывести на экран значение свойства с.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// инициализируем класс
A c = new A();
Console.WriteLine(c.c); // выводим значение выдаваемое свойством
Console.ReadLine();
}
}
// объявляем класс
class A
{
// Объявляем переменые
private int a = 1;
private int b = 3;
private int _c;

// объявляем свойство
public int c
{
get { // только чтение
// при обращении произойдут вычисления
_c = a;
_c += a * b;
_c += b;
return ++_c;
}
}
}
}
Результат работы программы:


Задание часть: 2
В рамках консольного приложения разработать класс В - наследник класса А с полем d того же типа и свойством с2. Свойство с2 – результат вычисления выражения
(на выбор студента с использованием операций и управляющего оператора согласно варианту) над полями a, b, d.
В теле свойства использовать управляющий оператор (см. вариант в таблице).
У класса А создать конструктор, инициализирующий его поля.
Для класса В определить 2 конструктора: один – наследуется от конструктора класса А, второй – собственный.
В теле программы создать объекты классов А и В, продемонстрировав работу всех конструкторов. Вывести значения свойства на экран.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// инициализируем класс
A c = new A();
// обращаемся к свойству с
Console.WriteLine("Результат работы конструктора класса А: {0}", c.c);
// инициализируем класс B без параметра
B b = new B();
Console.WriteLine("Результат работы конструктора класса B без параметра: {0}", b.d);
Console.WriteLine("Свойство B без параметра: {0}", b.c2);
// инициализируем класс B с параметром
B b2 = new B(10);
Console.WriteLine("Результат работы конструктора класса B с параметром: {0}", b2.d);
Console.WriteLine("Свойство B с параметром: {0}", b2.c2);
Console.ReadLine();
}
}

class A
{
// объявляем переменные
private int a;
private int b;
private int _c;

// свойство только для чтения
public int c
{
get
{
_c = a;
_c += a * b;
_c += b;
return ++_c;
}
}

// конструктор, запускается при вызове текущей функции
public A()
{
// присваиваются значения определенным ранее переменным
a = 1;
b = 3;
}
}

// класс B наследует функционал A
class B : A
{
// объявляем переменные
public int d;
// свойство только для чтения
public int c2
{
get
{
// счетчик цикла
int x = 0;
// цикл
do
{
x++; // прибавляет х до тех пор пока х будет меньше d
} while (x < d);
Console.WriteLine(" [Работа свойства] Цикл do while прошел {0} раз", d);
return d;
}
}

// конструктор, запускается при вызове текущей функции
public B(): base()
{
d = 4;
}

// конструктор, запускается при вызове текущей функции
// при условии что мы подаем на нее числовой параметр
public B(int v)
{
d += v + c;
}
}
}
Результат работы программы:


Задание часть: 3

В класс В добавить поле - массив того же типа.
Разработать конструктор для инициализации массива, который при своем вызове передает управление собственному конструктору класса В.
Размер массива – поле a, инициализация элементов массива: свойство с2, умноженное на индекс элемента массива.
В программе вывести на экран элементы массива. Для вывода использовать цикл foreach.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// инициализируем класс
B arrB2 = new B(11);

// инициализируем класс
B arrB = new B(true);
int n = 0;
Console.ForegroundColor = ConsoleColor.Green;
System.Console.WriteLine("Элементы массива arrB:");

Console.ForegroundColor = ConsoleColor.Gray;
foreach (int i in arrB.arrB)
{
n++;
System.Console.WriteLine(" [{1}] = {0}", i, n);
}
Console.ReadLine();
}
}

class A
{
// объявляем переменные
private int a;
private int b;

·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
· // объявляем массив с числовым типом данных
public List arrB;
public int c2
{
get
{
// счетчик цикла
int x = 0;
// цикл
do
{
x++; // прибавляет х до тех пор пока х будет меньше d
} while (x < d);
return d;
}
}
// конструктор
// base() - в начале вызывается базовый конструктор (это - A())
public B() : base()
{
d = 4;
}
// конструктор срабатывает если подается числовой параметр
public B(int v)
{
d += v + c;
}
// конструктор срабатывает если подается true или false
public B(bool arr)
{
if (arr == true)
{
// инициализируем массив
this.arrB = new List();
// запускаем функцию
arrInit();
}
}
public void arrInit()
{
// запускаем цикл
for (int i = 1; i <= _a; i++) // Размер массива _a
{
// добавляем в массив один элемент
this.arrB.Add(i * this.c2);
}
}

}
}



Результат работы программы:


Задание часть: 4
В классе В определить индексатор для исходного массива. Вывести в программе на экран элементы массива через индексатор.
Добавить в В еще один массив и определить индексатор и для него. Вывести на экран значения элементов второго массива через индексатор.
Второй массив инициализировать при описании (то есть НЕ в конструкторе).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/*
Вариант: 30
Часть: 2
Тип полей: Int
Операции: * , += , ++ ( префиксный )
Управляющий оператор: Do while
Переопределяемые операции: ==, +
*/
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// инициализируем класс
B arrB_second = new B(true, 11);
// инициализируем класс
B arrB = new B(true, 11);
Console.ForegroundColor = ConsoleColor.Green;
System.Console.WriteLine("Элементы массива arrB через индексатор:");

Console.ForegroundColor = ConsoleColor.Gray;
int i;
// цикл, будет пройден arrB._a раз
for (i = 0; i < arrB._a; i++)
System.Console.WriteLine(" [{0}] = {1}", i, arrB[i]);

Console.ForegroundColor = ConsoleColor.Green;
System.Console.WriteLine("Элементы второго массива arr_second через индексатор:");
Console.ForegroundC
·olor = ConsoleColor.Gray;
// вызываем функцию
// в результате работы функции каждый элмемент (arrB_second[i]) массива будет больше на 1
arrB_second.arr_secondInit();
// цикл, будет пройден arrB._a раз
for (i = 0; i < arrB._a; i++)
System.Console.WriteLine(" [{0}] = {1}", i, arrB_second[i]);

Console.ReadLine();
}
}

class A
{
// объявляем переменные
private int a;
private int b;
private int _c;

public int c // свойство
{
get
{
_c = a;
_c += a * b;
_c += b;
return ++_c;
}
}
public int _a // свойство
{
get
{
return a;
}
}
public A() // конструктор
{
a = 5;
b = 3;
}
}
// класс B наследует функционал от A
class B : A
{
// объявляем переменную
public int d;
// объявляем массивы
private List arrB, arrB_second;

public int c2 // свойство
{
get
{
int x = 0;
do
{
x++;
} while (x < d);
return d;
}
}
// конструктор
// base() - в начале вызывается базовый конструктор (это - A())
public B() : base()
{
d = 4;
}
// конструктор срабатывает если подается числовой параметр
public B(int v)
{
d += v + c;
}
// конструктор срабатывает если подается true или false и числовой параметр
public B(bool arr, int v)
{
d += v + c;
if (arr == true)
{
this.arrB = new List();
arrInit();
}
}
// функция дла наполнения второго массива
public void arr_secondInit()
{
this.arrB_second = new List();
for (int i = 1; i <= _a; i++)
{
this.arrB_second.Add(i * this.c2 + 1);
}
}
// функция дла наполнения первого массива
private void arrInit()
{
for (int i = 1; i <= _a; i++)
{
this.arrB.Add(i * this.c2);
}
}
// индексатор для массивов
public int this[int index]
{
get
{ // условие если второй массив равен 0 то работаем с первым
if (this.arrB_second == null || this.arrB_second.Count == 0)
return this.arrB[index];
return this.arrB_second[index];
}
}
}
}
Результат работы программы:

Задание часть: 5
Для класса В переопределить операции согласно варианту (см. вариант в таблице ).
В основной программе продемонстрировать использование переопределенных операций.
Разработать интерфейс для иерархии классов А и В, от которого наследуют оба
класса. Разработать интерфейс класса В.

using System;
using System.Collections.Generic;
using System.Text;
/*
Вариант: 30
Часть: 2
Тип полей: Int
Операции: * , += , ++ ( префиксный )
Управляющий оператор: Do while
Переопределяемые операции: ==, +
*/
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// инициализируем классы
B arrB = new B(true, 11);
B arrB1 = new B(true, 11);
B arrB2 = new B(true, 11);

// Проверяем на равенство
if (arrB1 == arrB2)
System.Console.WriteLine("arrB1 = arrB2");
else
System.Console.WriteLine("arrB1 != arrB2");

System.Console.WriteLine("Если сложить arrB1 и arrB2 то получим {0}", (arrB1 + arrB2).d);
// Вызов функции через интерфейс IPrintMessage
System.Console.WriteLine("Вызов функции через интерфейс IPrintMessage:");
IPrintMessage iarrB = new B(true, 11);
iarrB.PrintMessage();
// Вызов функции через интерфейс IBPrintMessage
System.Console.WriteLine("Вызов функции через интерфейс IBPrintMessage:");
IBPrintMessage iarrB2 = new B(true, 11);
iarrB2.BPrintMessage();

Console.ReadLine();
}
}

public interface IPrintMessage
{
// Определяем набор абстрактных методов
void PrintMessage();
}
public interface IBPrintMessage
{
// Определяем набор абстрактных методов
void BPrintMessage();
}
// объявляем класс и наследуем интерфейс IPrintMessage
class A : IPrintMessage
{
private int a;
private int b;
private int _c;

public int c
{
get
{
_c = a;
_c += a * b;
_c += b;
return ++_c;
}
}
public int _a
{
get
{
return a;
}
}
public A()
{
a = 5;
b = 3;
}
// функция вывода сообщения
public void PrintMessage()
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Данное сообщение - результат работы функции PrintMessage()");
Console.ForegroundColor = ConsoleColor.Gray;
}
}
// объявляем класс B который наследует класс A и другой интерфейс IBPrintMessage
class B : A, IBPrintMessage
{
public int d;
private List arrB, arrB_second;
public int c2
{
get
{
int x = 0;
// цикл, не более d
do
{
x++;
} while (x < d);
return d;
}
}
public B()
: base()
{
d = 4;
}
public B(int v)
{
d += v + c;
}
public B(bool arr, int v)
{
d += v + c;
if (arr == true)
{
this.arrB = new List();
arrInit();
}
}
public void arr_secondInit()
{
this.arrB_second = new List();
for (int i = 1; i <= _a; i++)
{
this.arrB_second.Add(i * this.c2 + 1);
}
}
private void arrInit()
{
for (int i = 1; i <= _a; i++)
{
this.arrB.Add(i * this.c2);
}
}
public int this[int index]
{
get
{
if (this.arrB_second == null || this.arrB_second.Count == 0)
return this.arrB[index];
return this.arrB_second[index];
}
}

// переопределяем операции
// вызываем метод Equals()
// это переопределение базового метода класса object, равенство
// типа "Объект 1 равен объекту 2"
public override bool Equals(object o)
{
if (o is B)
{
// если объект, с которым сравниваем текущий (this) не является
// экземпляром класса B - значит он не равен текущему объекту
//если объект, с которым сравниваем этот, имеет
// свойства c и d равными таким же свойствам этого объекта,
// значит эти оба объекта равны
if (((B)o).c == this.c && ((B)o).d == this.d) return true;
}
return false;
}

// оператор +
public static B operator +(B c, B d)
{
return new B(c.d + d.d);
}

// оператор ==
public static bool operator ==(B c, B d)
{
return c.d == d.d;
}

// оператор !=
public static bool operator !=(B c, B d)
{
return c.d != d.d;
}

// числовое значение, используемое для идентификации объекта во время
// проверки равенства.
public override int GetHashCode()
{
return this.ToString().GetHashCode();
}

// функция выводит сообщение
public void BPrintMessage()
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Данное сообщение - результат работы функции BPrintMessage()");
Console.ForegroundColor = ConsoleColor.Gray;
}
}
}
Результат работы программы:










13PAGE \* MERGEFORMAT14215




Рисунок 1Рисунок 1 Заголовок 1 Заголовок 2'ђ Заголовок 715

Приложенные файлы

  • doc 10725161
    Размер файла: 170 kB Загрузок: 0

Добавить комментарий