C#   Уроки программирования с нуля. Си-шарп для чайников   C#

Здравствуйте, гость!
Вход
Регистрация


Наследование в Си-шарп. Конструктор базового класса
В этом уроке мы рассмотрим с вами один из базовых принципов объектно-ориентированного программирования – наследование.

Начнем рассмотрение наследования из жизненных ситуаций. Для примера, возьмем такие понятия, как человек и студент. У любого человека есть имя, рост, вес и другие общие характеристики. Студент же является частным случаем человека, у него также есть имя, рост, вес, но кроме этого, он учится в некотором ВУЗе, на определенной специальности и имеет средний балл. С точки зрения наследования, в этом случае, студент является наследником понятия человек. Еще один пример можно привести с животными. Животное - это общее понятие. Животных можно поделить на рыб, птиц и млекопитающих. Каждый из этих групп животных различаются некоторым характеристиками, но у всех них есть общие особенности животных.

А теперь перейдем к программированию

В программировании наследование позволяет создавать новый класс на базе другого. Класс, на базе которого создается новый класс, называется базовым, а базирующийся новый класс – наследником или производным классом. В класс-наследник из базового класса переходят поля, свойства, методы и другие члены класса.

Объявление нового класса, который будет наследовать другой класс, выглядит так:

class [имя_класса] : [имя_базового_класса]
{
   // тело класса
}

Приведу простой пример использования наследования. На основе базового класса Животное создаются два класса Собака и Кошка, в эти два класса переходит свойство Имя животного:

class Animal
{
   public string Name { get; set; }
}
class Dog : Animal
{
   public void Guard()
   {
     // собака охраняет
   }
}
class Cat : Animal
{
   public void CatchMouse()
   {
     // кошка ловит мышь
   }
}
class Program
{
  static void Main(string[] args)
   {
     Dog dog1 = new Dog();
     dog1.Name = "Барбос"; // называем пса
     Cat cat1 = new Cat();
     cat1.Name = "Барсик"; // называем кота
     dog1.Guard(); // отправляем пса охранять
     cat1.CatchMouse(); // отправляем кота на охоту
   }
}

Вызов конструктора базового класса в Си-шарп

В базовом классе и классе-наследнике могут быть объявлены конструкторы, и тут возникает вопрос – какой конструктор за что должен отвечать, и как их вызывать. Логично будет сказать то, что конструктор базового класса будет создавать ту часть объекта, которая принадлежит базовому классу (ведь из базового класса о наследнике ничего неизвестно), а конструктор из наследника будет создавать свою часть.

Когда конструктор определен только в наследнике, то здесь всё просто – при создании объекта сначала вызывается конструктор по умолчанию базового класса, а затем конструктор наследника.

Когда конструкторы объявлены и в базовом классе, и в наследнике – нам необходимо вызывать их оба. Для вызова конструктора базового класса используется ключевое слово base. Объявление конструктора класса-наследника с вызовом базового конструктора имеет следующую структуру:

[имя_конструктора_класса-наследника] ([аргументы]) : base ([аргументы])
{
   // тело конструктора
}

В базовый конструктор передаются все необходимые аргументы для создания базовой части объекта.

Приведу пример вызова базового конструктора. Есть тот же класс Животное и класс Попугай. В классе Животное есть только свойство Имя, и конструктор, который позволяет установить это имя. В классе Попугай есть свойство Длина клюва и конструктор, в котором мы задаем эту длину. При создании объекта Попугай мы указываем два аргумента – имя и клюв, и дальше аргумент Имя передается в базовый конструктор, он вызывается, и после его работы выполнение передается конструктору класса Попугай, где устанавливается длина:

class Animal
{
   public string Name { get; set; }

   public Animal(string name)
   {
     Name = name;
   }
}
class Parrot : Animal
{
   public double BeakLength { get; set; } // длина клюва

   public Parrot(string name, double beak) : base(name)
   {
     BeakLength = beak;
   }
}
class Dog : Animal
{
  public Dog(string name) : base (name)
   {
     // здесь может быть логика создания объекта Собака
   }
}
class Program
{
   static void Main(string[] args)
  {
     Parrot parrot1 = new Parrot("Кеша", 4.2);
     Dog dog1 = new Dog("Барбос");
   }
}

Доступ к членам базового класса из класса-наследника

Здесь стоит отметить, что в классе-наследнике мы можем получить доступ к членам базового класса которые объявлены как public, protected, internal и protected internal. Члены базового класса с модификатором доступа private также переходят в класс-наследник, но к ним могут иметь доступ только члены базового класса. Например, свойство, объявленное в базовом классе, которое управляет доступом к закрытому полю, будет работать корректно в классе-наследнике, но отдельно получить доступ к этому полю из класса-наследника мы не сможем.

Домашнее задание

Создайте базовый класс Геометрическая фигура, предусмотрите в нем общие поля/свойства, например координаты центра фигуры, с помощью конструктора должна быть возможность задать центр. На базе этого класса создайте два новых – Треугольник и Окружность. В этих классах должны быть свои особые поля, например радиус для окружности. В оба класса добавьте метод Нарисовать, в котором могла бы быть специфическая логика рисования фигуры. Создайте объекты треугольник и окружность.

PS. Не забываем подписываться на обновления по электронной почте в форме ниже!
Понравилась статья? Подпишись на рассылку и узнавай первым о новых уроках по почте!


Поделиться с друзьями:
21 июл 2013 02:36
Алексей 09 фев 2017 21:31

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

namespace ConsoleApplication4
{
class Car // класс машина
{
public double MileAge { get; set; } // свойство пробег. Свойство как на запись так и на чтение
public double Fuel { get; set; } // свойство топливо. Свойство как на запись так и на чтение
// можно свойства сделать не такими "легкодоступными":
// public double MileAge { private get; set; } // свойство только на запись
// public double Fuel { get; private set; } // свойство только на чтение

public Car() // конструктор с предустановленными значениями
{
MileAge = 150; // конструктор устанавливает пробег в 150
Fuel = 11; // конструктор устанавливает топливо на 11
}
public Car(double Miles, double Liters) // конструктор с передачей в него стартовых значений
{
MileAge = Miles; // конструктор устанавливает значение пробег, передаваемое при создании объекта
Fuel = Liters; // конструктор устанавливает значение топлива, передаваемое при создании объекта
}

}
// ------------------------------------------------------------------------------------------------------------
class SportCar :Car // класс - наследник класса Car
{
public double MaxSpeed { get; set; } // свойство скорость, в базовом классе отсутсвует


public SportCar(double SetMaxSpeed) : base()
// конструктор с предустановленными значениями для нового свойства
// (остальные свойства определяются конструкторами (!!!) базового класса)
// и здесь "работает" тот конструктор, который БЕЗ параметров
{
MaxSpeed = SetMaxSpeed; // конструктор устанавливает значение скорости, передаваемое при создании объекта.
}
public SportCar(double SetMaxSpeed, double Miles, double Liters) : base(Miles, Liters)
// конструктор с предустановленными значениями для нового свойства
// (старые свойства определяются конструкторами (!!!) базового класса)
// и здесь "работает" тот конструктор, который С параметрами
{
MaxSpeed = SetMaxSpeed; // конструктор устанавливает значение скорости, передаваемое при создании объекта.
MileAge = Miles; // конструктор устанавливает значение пробег, передаваемое при создании объекта
Fuel = Liters; // конструктор устанавливает значение топлива, передаваемое при создании объекта
}
}
// ------------------------------------------------------------------------------------------------------------
class Program
{
static void Main(string[] args)
{
Car Lada = new Car(); // создаем объект Lada. Конструктор вызывается c предустановленными значениями
Console.WriteLine("Свойства объекта Lada: пробег = {0}, топливо = {1}.", Lada.MileAge, Lada.Fuel);

Car ZAZ = new Car(10, 20); // создаем объект ZAZ. Конструктор вызывается с передачей значений для инициализации свойств
Console.WriteLine("Свойства объекта ZAZ: пробег = {0}, топливо = {1}.", ZAZ.MileAge, ZAZ.Fuel);

SportCar McLaren_1 = new SportCar(333);
// передается только значение скорости, значит значения пробега и топлива должны быть равны тем, что по умолчанию в базовом классе
Console.WriteLine("Свойства объекта McLaren_1: скорость = {2}, пробег = {0}, топливо = {1}.", McLaren_1.MileAge, McLaren_1.Fuel, McLaren_1.MaxSpeed);

SportCar McLaren_2 = new SportCar(333, 500, 250);
// передается как значение скорости, так и значения пробега и топлива
Console.WriteLine("Свойства объекта McLaren_2: скорость = {2}, пробег = {0}, топливо = {1}.", McLaren_2.MileAge, McLaren_2.Fuel, McLaren_2.MaxSpeed);

Console.ReadLine();


}
}
}


segorcag 07 фев 2017 18:35
Ведущая компания в России и странах СНГ по продаже авиабилетов «Airline-online»

Крупнейшая международная компания по продаже А/В билетов
срочно набирает сотрудников на постоянную основу для несложной
работы через интернет, с ежедневными выплатами от 11 000 руб.

Работая в нашей компании Вы получаете:

- Соблюдение трудового кодекса
- Полный соцпакет, оплачиваемый отпуск, больничный, санаторий.
- Высокий доход
- Каждый наш сотрудник на дому гарантированно получает от 11 000 руб. в день.
- Гарантированные стабильные выплаты заработанных денег.
- Выплаты происходят ежедневно на банковские карты или электронные кошельки.

Пройдите регистрацию на нашем сайте. ( www.poisk-rabota.tk )

Без вложений, опыт и профессиональные навыки не требуются!

vegorcag 05 фев 2017 18:52
Увлекательная подработка за компьютером.
Мы предлагаем: Достойная зарплата без задержек, справка 2-НДФЛ, карьерный рост, бесплатное обучение,
свободный график, страховые взносы в Пенсионный фонд, официальный договор (по желанию).
График Вашей работы, устанавливаете по своим возможностям.
Ваш возраст и образование значения не имеют.
Обязательные условия: наличие компьютера и интернета.
Ваши действия:
1. На сайте ( off-rabota.tk ) скачайте и установите приложение.
2. Ознакомьтесь с содержимым.
3. Пройдите несложную регистрацию.
4. Обязательно, пройдите курсы обучения. (Бесплатно)
5. Начинайте зарабатывать!
Зарплату мы перечисляем только на банковскую карту любой платёжной системы.
(Для работы советуем оформить отдельную карту)
ВНИМАНИЕ! Весь процесс регистрации, обучения совершенно бесплатны. Не попадитесь в руки мошенников!

-----JGHHJ16FU16G1U6F51J6F1J6R1UY6F5Y-----

Юрец 05 ноя 2016 02:01

namespace NasledKONST
{
class Figura// родительский класс
{
int width;
int hight;

public int Width//свойство
{
get { return width; }
set { width = value; }
}
public int Hight//свойство
{
get { return hight; }
set { hight = value; }
}

public Figura( int w, int h)//родительский конструктор
{
Width = w;
Hight = h;
}

}

class DrugayaFigura : Figura// создаем новый класс на основе исходного
{
string name;
public string Name// свойство для дочернего класса
{
get { return name; }
set { name = value; }
}

public DrugayaFigura(string n, int w, int h) : base (w, h)// вызывем конструктор с использованием родительского класса
{
Name = n;
}

public int Ploshad()// метод нахождения площади фигуры
{
return Width * Hight;
}
}


class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите высоты и ширину для фигуры базового класса");

//вводим высоту и присваиваем обычной переменной
Console.WriteLine("Введите высоту");
int h = Int32.Parse(Console.ReadLine());

//вводим ширину и присваиваем обычной переменной
Console.WriteLine("Введите ширину");
int w = Int32.Parse(Console.ReadLine());

//создаем экземпляр класса и присваиваем значения через конструктор
Figura basFigName = new Figura(w,h);

Console.WriteLine("Значения высоты и ширины равны {0}, {1}", basFigName.Hight, basFigName.Width);
Console.ReadKey();
////////////////////

Console.WriteLine("Введите название, высоту и ширину для фигуры класса потомка");
//вводим название и присваиваем обычной переменной
Console.WriteLine("Введите название фигуры");
string nm = Console.ReadLine();

//вводим высоту и присваиваем обычной переменной
Console.WriteLine("Введите высоту");
int hh = Int32.Parse(Console.ReadLine());

//вводим ширину и присваиваем обычной переменной
Console.WriteLine("Введите ширину");
int ww = Int32.Parse(Console.ReadLine());

DrugayaFigura drFig = new DrugayaFigura(nm, ww, hh);// создаем экземпляр класса наследника, используя конструктор родительского класса

Console.WriteLine("Мы создали {0} с высотой {1} и шириной {2} \nПлощадь этой фигуры равна {3}", drFig.Name, drFig.Hight, drFig.Width, drFig.Ploshad());
Console.ReadKey();

}
}
}


Баринов ФИлипп 05 авг 2016 23:00
Специфическая логика рисования - это имеется ввиду, что способ рисования каждой фигуры - разный, То есть нахождение площади - смысл один, реализации разные.

Александр Михалев 18 май 2016 19:51
Евген, насколько я знаю, можно. Только наследник который наследуется у другого наследника не будет иметь возможности получить доступ к полям базового класса, а лишь к тем которые были объявлены в первом наследнике. Я могу ошибаться, если что пусть меня поправят, но по моему так.

Евген 01 май 2016 12:48
У меня есть есть вопрос: можно ли создать класс наследник от класса, который сам наследник?

bas-tion.ru 28 апр 2016 19:46
Посмотрел выполненные задания, похоже не я один не понял. Кто-то площадь вычисляет, кто-то просто прописал метод CreateSomething()

bas-tion.ru 28 апр 2016 19:38
Не могу понять, что значит следующее выражение из домашнего задания:

...добавьте метод Нарисовать, в котором могла бы быть специфическая логика рисования фигуры...

Что это за "специфическая логика"?

Если я попрошу кого-нибудь:
"Мой друг, нарисуйте мне круг методом, в котором необходимо использовать особую (специфическую) логику, пожалуйста."
Что в ответ я услышу?

Максим 26 апр 2016 23:32
Вот полная программа с интерактивным меню.
На исключения уже времени нету =)

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

namespace Lessons_3
{
class Figure
{
public double CenterX { set; get; }
public double CenterY { set; get; }
public Figure(double centerx, double centery)
{
CenterX = centerx;
CenterY = centery;
}
}

class Circle : Figure
{
public double Range { set; get; }
public Circle(double centerx, double centery, double range) : base(centerx, centery)
{
Range = range;
}
}
class Triangle : Figure
{
public double Side_one { set; get; }
public double Side_two { set; get; }
public double Side_three { set; get; }
public Triangle(double centerx, double centery, double side_one, double side_two, double side_three) : base(centerx, centery)
{
Side_one = side_one;
Side_two = side_two;
Side_three = side_three;
}
}
class Program
{
public static void SetCircle(Circle[] Figure, Triangle[] Triangle)
{
bool Set = false;
double CenterX;
double CenterY;
double Range;
Console.Write("Введите X координату центра окружности : ");
CenterX = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите Y координату центра окружности : ");
CenterY = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите величину радиуса окружности : ");
Range = Convert.ToDouble(Console.ReadLine());
Console.Write("\n\n\n");
Circle CircleNew = new Circle(CenterX, CenterY, Range);
for (byte i = 0; i < Figure.Length; i++)
{
if (Figure[i] == null && Set == false)
{
Figure[i] = CircleNew;
Set = true;
}
}
Menu(Figure, Triangle);
}
public static void DrawCircle(Circle[] Figure, Triangle[] Triangle)
{
Console.Write("\n\n\n");
for (byte i = 0; i < Figure.Length; i++)
{
if (Figure[i] != null)
{
Console.WriteLine("Окружность # " + (i+1) + ".");
Console.WriteLine("X координата центра : " + Figure[i].CenterX + ".");
Console.WriteLine("Y координата центра : " + Figure[i].CenterY + ".");
Console.WriteLine("Радиус окружности : " + Figure[i].Range + ".\n\n\n");
}
}
Menu(Figure, Triangle);
}
public static void SetTriangle(Triangle[] Figure, Circle[] Circle)
{
bool Set = false;
double CenterX;
double CenterY;
double SideOne;
double SideTwo;
double SideThree;
Console.Write("Введите X координату центра треугольника : ");
CenterX = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите Y координату центра треугольника : ");
CenterY = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите величину первой стороны треугольника : ");
SideOne = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите величину второй стороны треугольника : ");
SideTwo = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите величину третьей стороны треугольника : ");
SideThree = Convert.ToDouble(Console.ReadLine());
Console.Write("\n\n\n");
Triangle TriangleNew = new Triangle(CenterX, CenterY, SideOne, SideTwo, SideThree);
for (byte i = 0; i < Figure.Length; i++)
{
if (Figure[i] == null && Set == false)
{
Figure[i] = TriangleNew;
Set = true;
}
}
Menu(Circle, Figure);
}
public static void DrawTriangle(Triangle[] Figure, Circle[] Circle)
{
Console.Write("\n\n\n");
for (byte i = 0; i < Figure.Length; i++)
{
if (Figure[i] != null)
{
Console.WriteLine("Треугольник # " + (i + 1) + ".");
Console.WriteLine("X координата центра : " + Figure[i].CenterX + ".");
Console.WriteLine("Y координата центра : " + Figure[i].CenterY + ".");
Console.WriteLine("Величина 1 стороны : " + Figure[i].Side_one + ".");
Console.WriteLine("Величина 2 стороны : " + Figure[i].Side_two + ".");
Console.WriteLine("Величина 3 стороны : " + Figure[i].Side_three + ".\n\n\n");
}
}
Menu(Circle, Figure);
}
public static void DrawFigure(Circle[] Circle, Triangle[] Triangle)
{
Console.Write("\n\n\n");
for (byte i = 0; i < Circle.Length; i++)
{
if (Circle[i] != null)
{
Console.WriteLine("Окружность # " + (i + 1) + ".");
Console.WriteLine("X координата центра : " + Circle[i].CenterX + ".");
Console.WriteLine("Y координата центра : " + Circle[i].CenterY + ".");
Console.WriteLine("Радиус окружности : " + Circle[i].Range + ".\n\n\n");
}
}
for (byte i = 0; i < Triangle.Length; i++)
{
if (Triangle[i] != null)
{
Console.WriteLine("Треугольник # " + (i + 1) + ".");
Console.WriteLine("X координата центра : " + Triangle[i].CenterX + ".");
Console.WriteLine("Y координата центра : " + Triangle[i].CenterY + ".");
Console.WriteLine("Величина 1 стороны : " + Triangle[i].Side_one + ".");
Console.WriteLine("Величина 2 стороны : " + Triangle[i].Side_two + ".");
Console.WriteLine("Величина 3 стороны : " + Triangle[i].Side_three + ".\n\n\n");
}
}
Menu(Circle, Triangle);
}
public static void Menu(Circle[] Circle, Triangle[] Triangle)
{
bool Correctly = true;
byte Choice = 0;
Console.WriteLine("1 - Обозначить окружность.");
Console.WriteLine("2 - Обозначить треугольник.");
Console.WriteLine("3 - Нарисовать окружность.");
Console.WriteLine("4 - Нарисовать треугольник.");
Console.WriteLine("5 - Нарисовать все фигуры.");
Console.WriteLine("6 - Выход из программы.\n\n\n");
do
{
Choice = Convert.ToByte(Console.ReadLine());
Correctly = true;
switch (Choice)
{
case 1: SetCircle(Circle, Triangle); break;
case 2: SetTriangle(Triangle, Circle); break;
case 3: DrawCircle(Circle, Triangle); break;
case 4: DrawTriangle(Triangle, Circle); break;
case 5: DrawFigure(Circle, Triangle); break;
case 6: Console.WriteLine("Благодарим за использование нашего ПО.\nЖдем вас снова!"); Console.ReadKey(); break;
default: Console.WriteLine("Нет такого пункта в меню , введите ещё раз."); Correctly = false; break;
}
} while (Correctly == false);
}
static void Main(string[] args)
{
Circle[] circle = new Circle[100];
Triangle[] triangle = new Triangle[100];
Console.WriteLine("Приветствуем вас в нашей программе для консольного рисования фигур!\n");
Menu(circle, triangle);
}
}
}


Рома 27 мар 2016 15:34

using System;

namespace ConsoleApplication15
{
class geomf
{
public int center { get; set; }

public geomf(int x,int y)
{
center = x;
center = y;
}
}
class Elipse : geomf
{
public int r;
public Elipse(int x,int y) : base(x, y)
{
Console.Write("Radius of elipse: ");
r = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("This is eslipse with radius : " + r + " at (" + x + " / " + y+")");
Console.ReadLine();
}
}
class Sqaure : geomf
{
public int s;
public int a;
public Sqaure(int x, int y) : base(x, y)
{
Console.Write("Enter side of a square: ");
a = Convert.ToInt32(Console.ReadLine());
s = a * a;
Console.WriteLine("This is square with side: " + a + " at (" + x + " / " + y+") and total " + s + "." );

}
}
class Program
{
public static int GetCoordainates()
{
Console.Write("Enter coorditates : " );
int Coordinate = Convert.ToInt32(Console.ReadLine());
return (Coordinate);
}
static void Main(string[] args)
{

int X = GetCoordainates();
int Y = GetCoordainates();
Sqaure sq = new Sqaure(X, Y);
Elipse el = new Elipse(X, Y);
Console.ReadKey();



}
}
}


dmitry_zon 17 фев 2016 16:13

namespace Lesson17
{
class GeometricObj
{
public double AxisX;
public double AxisY;
public GeometricObj (double OsX, double OsY)
{
OsX=AxisX;
OsY=AxisY;
}
}
class Circle:GeometricObj
{
public double Radius;
public Circle(double AxisX, double AxisY):base(AxisX, AxisY)
{
Radius = AxisX > AxisY ? AxisX / AxisY : AxisY / AxisX;
Console.WriteLine("This is a circle with radius " + this.Radius + " whith center at " + AxisX + "/" + AxisY);
}
}
class Square:GeometricObj
{
public double TotalSquare;
public Square(double AxisX, double AxisY):base(AxisX, AxisY)
{
TotalSquare = AxisX * AxisY;
Console.WriteLine("This is a squre with a side length " + Math.Sqrt(TotalSquare) + " and central coordinates " + AxisX + "/" + AxisY);
}
}
class Program
{
public static int GetCoordinates()
{
Console.WriteLine("Enter a coordinate");
int Coordinate = Convert.ToInt32(Console.ReadLine());
return Coordinate;
}
static void Main(string[] args)
{
int X= GetCoordinates();
int Y= GetCoordinates();
Circle Krug = new Circle(X, Y);
Console.ReadKey();
Square Kvadrat = new Square(X, Y);
Console.ReadKey();
}
}
}

voloshyn-i 15 фев 2016 01:19
class Geometric
{
public double Centre { get; set; }

public Geometric (double centre) // конструктор
{
Centre = centre;
}
}
class Triangle : Geometric
{
public double Vertices { get; set; } // вершины
public Triangle(double centre, double vert)
: base(centre)
{
Vertices = vert;
}
public void Draw(double a, double b, double c)
{
}

}
class Circle : Geometric
{
public double Radius { get; set; } // вершины
public Circle(double centre, double rad)
: base(centre)
{
Radius = rad;
}

public void Draw(double centre, double rad)
{
}
}
class Program
{
static void Main(string[] args)
{
Circle c1 = new Circle(2, 4.2);
Triangle t1 = new Triangle(3, 5);
Console.WriteLine(t1.Centre);
Console.WriteLine(t1.Vertices);

t1.Draw(1, 2, 5);


Console.ReadKey();
}
}

Kolsky 27 дек 2015 12:50
Усложнил себе задачу, решил попробовать отрисовать символьные фигуры) Результат не из лучших.

/*
* Сделано в SharpDevelop.
* Пользователь: Kolsky
* Дата: XX.XX.XXXX
* Время: XX:YY
*/
using System;

namespace h
{
class GeoShape
{
public double area;
}
class Circle:GeoShape
{
public Circle(int r)//Считает площадь круга
{
this.area=Math.PI*r;
}
public void Draw(int r)
{
string s="";
for (int i=0;i<=2*r+1;i++)
{
for (int u=0;u<=2*r+1;u++)
{
s+=Convert.ToInt32(Math.Sqrt(Math.Pow(r-i+1,2)+Math.Pow(r-u+1,2)))<=r?"+":" ";
}
s+="\r\n";
}
Console.WriteLine(s);
}
}
class Triangle:GeoShape
{
public Triangle(int alpha,double a,double b)//Считает площадь из значений угла и 2-х прилежащих сторон
{
this.area=0.5*a*b*Math.Sin(alpha*Math.PI/180);
}
public void Draw(int a,int ah,int h)
{
int bh=a-ah+1;
string s="";
for(int u=1;u<=a;u++) if (u==ah) s+="+";else s+=" ";
for(int i=h-1;i>=1;i--)
{
s+="\r\n";
for(int u=1;u<ah;u++)
{
if ((float)i/u<=(float)h/ah) s+="+"; else s+=" ";
}
for(int u=bh;u>=1;u--)
{
if ((float)i/u<=(float)h/bh) s+="+"; else s+=" ";
}
}
Console.WriteLine(s);
}
}
class Program
{
public static void Main(string[] args)
{
try
{
int y=Convert.ToInt32(Console.ReadLine());//Радиус окружности
Circle A1=new Circle(y);
A1.Draw(y);//Рисуем круг
int a=Convert.ToInt32(Console.ReadLine());//Длина основания треугольника
int ah=Convert.ToInt32(Console.ReadLine());//Расстояние от левого края треугольника до точки пересечения a и h
int h=Convert.ToInt32(Console.ReadLine());//Высота, проведённая к основанию
Triangle C1=new Triangle(a,ah,h);
C1.Draw(a,ah,h);//Рисуем треугольник
Console.ReadKey(true);
}
catch(Exception)
{
Console.WriteLine("Йибриф бай льфуст ут рихфнис");
Console.ReadKey(true);
}
}
}
}

Max64 20 ноя 2015 00:45
Подскажите,пожалуйста. Почему у меня не подсчитывается значение площади треугольника? И какие есть недочеты?

class GeoFigure
{
public double centre1{ get; set;}
public double centre2 { get; set; }
public GeoFigure()
{
}
public GeoFigure(double centre1, double centre2)
{
this.centre1 = centre1;
this.centre2 = centre2;
}
}
class Triangle : GeoFigure
{
public double height { get; set; }
public double osnovanie{ get; set; }
public Triangle(double height, double osnovanie)
{
this.height = height;
this.osnovanie = osnovanie;
}
public double GetSquare()
{
return 1 / 2 * (height * osnovanie);
}
public void ToDraw()
{
Console.WriteLine("Треугольник с высотой {0} и основанием {1}", height, osnovanie);
}
}
class Circle : GeoFigure
{
public double diameter { get; set; }
public Circle(double centre1, double centre2, double diameter) : base(centre1, centre2)
{
this.diameter = diameter;
}
public double GetRadius()
{
return diameter / 2;
}
public void ToDraw()
{
Console.WriteLine("Окружность с диаметром {0}", diameter);
}

}
class Program
{
static void Main(string[] args)
{
Triangle triangle1 = new Triangle(3,20);
Circle circle1 = new Circle(5,2,4);
Console.WriteLine("Площадь треугольника равна = {0}",triangle1.GetSquare());
Console.WriteLine("Радиус окружности = {0}", circle1.GetRadius());
triangle1.ToDraw();
circle1.ToDraw();
Console.ReadLine();
}
}

Dipe 02 ноя 2015 11:36
С математикой не сильно дружу, по этому сделал на более понятном для себя примере. С автомобилями


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

namespace ConsoleApplication1
{
class Car
{
private string Model { get; set; }
private string Mark { get; set; }
private string Variant { get; set; }
public Car(string mark, string model)
{
Mark = mark;
Model = model;
Console.WriteLine("Mark: " + Mark);
Console.WriteLine("Model: " + Model);
}
public Car(string variant)
{
Variant = variant;
Console.WriteLine("Variant of car: " + Variant);
}
}

class VW : Car
{
public int Year{get; set;}
public VW(string mark, string model, int year)
: base(mark, model)
{
Year = year;
Console.WriteLine("Made in: " + Year);
}
}

class Porshe : Car
{
public Porshe(string mark, string model)
: base(mark, model)
{ }
}

class Ferrari : Car
{
public Ferrari(string mark, string model)
: base(mark, model)
{

}
}

class BMW : Car
{
public int Year { get; set; }

public BMW(string mark, string model, int year)
: base(mark, model)
{
Year = year;
Console.WriteLine("Made in: " + Year);
}
public BMW(string variant)
: base(variant)
{

}
}


class Program
{
static void Main(string[] args)
{
VW auto = new VW("VW", "Passat", 2013);
Console.WriteLine();
Porshe autoPorshe = new Porshe("Porshe", "911");
Console.WriteLine();
Ferrari autoFerrari = new Ferrari("Ferrari", "");
Console.WriteLine();
BMW autoBMW = new BMW("BMW", "z-150", 1983);
BMW autoB = new BMW("Coupe");

Console.ReadLine();
}
}
}


Влад 19 сен 2015 23:23

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

namespace ConsoleApplication6
{
class Figure
{
protected string Name { get; set; }
protected int CentreX { get; set; }
protected int CentreY { get; set; }



public Figure(string name, int x, int y)
{
CentreX = x;
CentreY = y;
Name = name;

}
}

class Triangle : Figure
{
public int Height { get; set; }


public Triangle(string name, int x, int y, int height)
: base(name, x, y)
{

Height = height;

Console.WriteLine("Фигура - {0}, Центр = X({1}),Y({2}), Высота = {3} ", name, x, y, height );

}


}

class Square : Figure
{
public int Radius { get; set; }


public Square(string name, int x, int y, int radius)
: base(name, x, y)
{

Radius = radius;

Console.WriteLine("Фигура - {0}, Центр = X({1}),Y({2}), Радиус = {3} ", name, x, y, radius);

}


}

class Program
{
static void Main(string[] args)
{

Triangle triangle = new Triangle("Треугольник", 4, 4, 10);
Console.WriteLine(new string('-', 50));
Square square = new Square("Квадрат", 3, 7, 5);



Console.ReadKey();
}
}
}

Влад 19 сен 2015 23:22
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication6
{
class Figure
{
protected string Name { get; set; }
protected int CentreX { get; set; }
protected int CentreY { get; set; }



public Figure(string name, int x, int y)
{
CentreX = x;
CentreY = y;
Name = name;

}
}

class Triangle : Figure
{
public int Height { get; set; }


public Triangle(string name, int x, int y, int height)
: base(name, x, y)
{

Height = height;

Console.WriteLine("Фигура - {0}, Центр = X({1}),Y({2}), Высота = {3} ", name, x, y, height );

}


}

class Square : Figure
{
public int Radius { get; set; }


public Square(string name, int x, int y, int radius)
: base(name, x, y)
{

Radius = radius;

Console.WriteLine("Фигура - {0}, Центр = X({1}),Y({2}), Радиус = {3} ", name, x, y, radius);

}


}

class Program
{
static void Main(string[] args)
{

Triangle triangle = new Triangle("Треугольник", 4, 4, 10);
Console.WriteLine(new string('-', 50));
Square square = new Square("Квадрат", 3, 7, 5);



Console.ReadKey();
}
}
}

ROOT 23 авг 2015 10:25
//Домашнее задание//
Слегка усложнил себе задачу, добавив больше фигур и методов.

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

namespace Work
{
class GeometricalFigures
{
protected string name { get; set; }
protected int Center_x { get; set; }
protected int Center_y { get; set; }
public GeometricalFigures(string Name, int x,int y)
{
Center_x = x;
Center_y = y;
name = Name;
}
}
class Circle : GeometricalFigures
{
public int Radius;
public int radius
{
get
{
return Radius;
}
set
{
Radius = value;
}
}
public Circle(int rad,int x, string Name, int y) : base(Name,x,y)
{
radius = rad;
}
public double CircleLength { get; set; } // длина оркужности
public double CircleS { get; set; } // площадь окружности
public double CircleAngle; // угол окружности
public double ArcLength { get; set; } // длина дуги
public double ArcS { get; set; } // площадь кругового сектора
public double circleangle // свойство для угла
{
get
{
return CircleAngle;
}
set
{
if (value < 1)
CircleAngle = 1;
else if (value > 359)
CircleAngle = 359;
else
CircleAngle = value;
}
}
public Circle(int rad,int x, string Name, int y, double circlength, double circleangle, double arclength,double arcs,double circles) : base(Name,x,y)
{
CircleLength = circlength;
CircleS = circles;
CircleAngle = circleangle;
ArcLength = arclength;
ArcS = arcs;
}
public void Draw1()
{
Console.Clear();
Console.WriteLine("--------------------------------------");
Console.WriteLine("Вы создали окружность с именем \"{0}\", радиусом {1} и координатами центра(x:{2},y:{3}).\nВоспользовавшись дополнительными возможностями создания оркужности,\nстали доступны следующие данные:\nДлина окружности = {4}\nПлощадь окружности = {5}\nЗаданный угол(для нахождения значений других параметров)= {6}\nДлина дуги = {7}\nПлощадь кругового сектора = {8}", name, radius, Center_x, Center_y, CircleLength, CircleS, CircleAngle, ArcLength, ArcS);
Console.WriteLine("--------------------------------------");
}
public void Draw2()
{
Console.Clear();
Console.WriteLine("--------------------------------------");
Console.WriteLine("Вы создали окружность с именем \"{0}\", радиусом {1} и координатами центра(x:{2},y:{3}).",name, radius, Center_x, Center_y);
Console.WriteLine("--------------------------------------");
}
}
class Triangle: GeometricalFigures
{
public int A { get; set; }
public int B { get; set; }
public int C { get; set; }
public Triangle(string Name, int a,int b,int c,int x,int y) : base(Name,x,y)
{
A = a;
B = b;
C = c;
}
public void Draw()
{
Console.Clear();
Console.WriteLine("--------------------------------------");
Console.WriteLine("Вы создали треугольник с именем \"{0}\", сторонами {1},{2} и {3} и координатами центра(x:{4},y:{5}).",name,A,B,C,Center_x,Center_y);
Console.WriteLine("--------------------------------------");
}
}
class Square : GeometricalFigures
{
public int A { get; set; }
public int S { get; set; }
public Square(string Name, int a,int s,int x, int y) : base (Name,x,y)
{
A = a;
S = s;
}
public void Draw()
{
Console.Clear();
Console.WriteLine("--------------------------------------");
Console.WriteLine("Вы создали квадрат c именем \"{4}\" со стороной {0}, площадью {1} и координатами центра (x:{2},y:{3}).",A,S,Center_x,Center_y,name);
Console.WriteLine("--------------------------------------");
}
}
class Program
{
public static void Error()
{
Console.Clear();
Console.WriteLine("ОШИБКА! Перейдите в меню и выберите пункт действия");
Console.ReadKey();
Console.Clear();
}
public static void Work(int f)
{

try
{
Console.Clear();
Console.Write("Введите координаты центра:\nx: ");
int sel_x = Convert.ToByte(Console.ReadLine());
Console.Write("y: ");
int sel_y = Convert.ToByte(Console.ReadLine());
Console.Write("Введите имя фигуры: ");
string sel_name = Console.ReadLine();
if (f == 1)
{
Console.Write("Введите радиус: ");
int sel_rad = Convert.ToByte(Console.ReadLine());
Console.WriteLine("\nДля создания окружности в программе имеется расширенный спектр возможностей!\nЕсли вы желаете им воспользоваться, нажмите 1\nЖелаете создать круг со стандартными параметрами, нажмите 2");
int selection = Convert.ToInt32(Console.ReadLine());
if (selection == 1)
{
Console.Clear();
Console.WriteLine("Загрузка дополнительных параметров...\n\n\t\t\t\t...\n\n\n\n\nНажмите любую клавишу...");
Console.ReadKey();
Console.Clear();
Console.Write("Введите угол для окружности(он необходим для дальнейшего использования расширенных возможностей): ");
double sel_CircleAngle = Convert.ToDouble(Console.ReadLine());
double sel_CircleLength = 2 * Math.PI * sel_rad;
double sel_CircleS = Math.PI * sel_rad * sel_rad;
double sel_ArcLength = (Math.PI * sel_rad * sel_CircleAngle) / 180;
double sel_ArcS = (Math.PI * sel_rad * sel_rad * sel_CircleAngle) / 360;
Circle new_cr2 = new Circle(sel_rad, sel_x, sel_name, sel_y,sel_CircleLength,sel_CircleAngle,sel_ArcLength,sel_ArcS,sel_CircleS);
new_cr2.Draw1();
}
else if (selection == 2)
{
Circle new_cr = new Circle(sel_rad, sel_x, sel_name, sel_y);
new_cr.Draw2();
}
}
else if (f == 2)
{
Console.Write("Задайте значение сторон треугольника\n1-ая: ");
int sel_a = Convert.ToByte(Console.ReadLine());
Console.Write("2-ая: ");
int sel_b = Convert.ToByte(Console.ReadLine());
Console.Write("3-я: ");
int sel_c = Convert.ToByte(Console.ReadLine());
Triangle new_tr = new Triangle(sel_name, sel_a, sel_b, sel_c, sel_x, sel_y);
new_tr.Draw();
}
else if (f == 3)
{
Console.Write("Введите сторону квадрата: ");
int sel_a = Convert.ToByte(Console.ReadLine());
int sel_s = sel_a * sel_a;
Square new_sq = new Square(sel_name, sel_a, sel_s, sel_x, sel_y);
new_sq.Draw();
}
Console.ReadLine();
Console.Clear();
MainMenu();
}
catch(Exception)
{
Error();
MainMenu();
}
}
public static void MainMenu()
{
try
{
Console.Clear();
Console.WriteLine("\t\t\t\tГлавное меню\n---------------------------\n1 окружность\n2 треугольник\n3 квадрат\n4 выход");
int select = Convert.ToInt32(Console.ReadLine());
if (select == 1)
{
Work(1);
Console.ReadKey();
}
else if (select == 2)
{
Work(2);
Console.ReadKey();
}
else if (select == 3)
{
Work(3);
Console.ReadKey();
}
else if (select == 4)
{
return;
}
else
{
Error();
MainMenu();
}
}
catch (Exception)
{
Error();
MainMenu();
}
}
static void Main(string[] args)
{
MainMenu();
}
}
}

Александр 10 авг 2015 16:40
Спасибо за урок!

namespace ConsoleApplication22_Sharp_Class_4_NASLE
{
class Program
{
static void Main(string[] args)
{
Ellipse ellipse = new Ellipse(50, 10, 10);
Console.WriteLine("{0},{1},{2}",ellipse.radius,ellipse.x,ellipse.y);
Console.ReadKey();
Console.Clear();
Triangle triangle = new Triangle(true, 20, 25);
Console.WriteLine("{0},{1},{2}", triangle.rectangular, triangle.x, triangle.y);
Console.ReadKey();
}
}
class Geometric_Figur
{
internal int x, y;

public Geometric_Figur(int x, int y) //координаты центра геометрической фигуры
{
this.x = x;
this.y = y;
}
}
class Ellipse : Geometric_Figur
{
public int radius {get; set;}

public Ellipse(int rad, int x, int y) //радиус окружности и координаты ее центра
: base(x, y)
{
radius = rad;
}
}
class Triangle : Geometric_Figur
{
public bool rectangular {get; set;}

public Triangle(bool rect, int x, int y) //прямоугольный ли треугольник и координаты его центра
: base(x, y)
{
rectangular = rect;
}
}
}

Очень Юра 22 июл 2015 18:47
Спасибо за урок. Из-за проверок довольно громоздко получилось.

class GeomFigure
{
protected int Center_x { get; set; }
protected int Center_y { get; set; }
protected GeomFigure(int x, int y)
{
this.Center_x = x;
this.Center_y = y;
}
}
class Circle : GeomFigure
{
private int radius;
public int Radius
{
get
{
return radius;
}
set
{
if (value == 0)
radius = 1;
else if (value < 0)
radius *= -1;
else radius = value;
}
}
public Circle(int x, int y, int radius) : base(x,y)
{
Radius = radius;
}
public void Draw()
{
// рисую круг
Console.WriteLine("-----------------------------");
Console.Write("Мы создали круг с координатами центра (x:{0},y:{1}) и радиусом: {2}", Center_x, Center_y, Radius);
}
}
class Triangle : GeomFigure
{
private int edgelength;
public int EdgeLength
{
get
{
return edgelength;
}
set
{
if (value == 0)
edgelength = 1;
else if (value < 0)
edgelength *= -1;
else edgelength = value;
}
}
public Triangle(int x, int y, int edge) : base(x, y)
{
EdgeLength = edge;
}
public void Draw()
{
// нахожу координаты вершин правильного треугольника
// относительно его центра для рисования
double bx = Center_x;
double by = Center_y + (EdgeLength / 2 * Math.Sqrt(3));
double cx = Center_x + (EdgeLength / 2);
double cy = Center_y - (EdgeLength / Math.Sqrt(3));
double ax = Center_x - (EdgeLength / 2);
double ay = cy;
Console.WriteLine("-----------------------------");
Console.WriteLine("Мы создали равносторонний треугольник\nс координатами центра: (x:{0},y:{1})\nдлиной ребра: {2}", Center_x, Center_y, EdgeLength);
Console.Write("координатами вершин: A (x:{0:0.##},y:{1:0.##}), B (x:{2:0.##},y:{3:0.##}), C (x:{4:0.##},y:{5:0.##})", ax, ay, bx, by, cx, cy);
}
}
class Program
{
public static void ErrorMessage () //функция обработки ошибок
{
Console.WriteLine("Ошибка ввода данных! Нажмите любую клавишу и выберите номер пункта.");
Console.ReadKey();
Console.Clear();
}
public static void ConsoleWork(bool iscircle) //функция операций
{
Console.WriteLine("Укажите координаты центра:");
Console.Write("x: ");
int temp_x = Convert.ToByte(Console.ReadLine());
Console.Write("y: ");
int temp_y = Convert.ToByte(Console.ReadLine());
if (iscircle)
{
Console.Write("укажите радиус: ");
int temp_r = Convert.ToByte(Console.ReadLine());
Circle circle1 = new Circle(temp_x, temp_y, temp_r);
circle1.Draw();
}
else if (!iscircle)
{
Console.Write("укажите длину ребра: ");
int temp_s = Convert.ToByte(Console.ReadLine());
Triangle triangle1 = new Triangle(temp_x, temp_y, temp_s);
triangle1.Draw();
}
Console.ReadLine();
Console.Clear();
}
public static void ConsoleMenu () //рекурсивная функция основного меню
{
bool circle;
byte punct;
try
{
do
{
Console.WriteLine("Выберите фигуру для создания:");
Console.WriteLine("-----------------------------");
Console.WriteLine("1 круг\n2 треугольник");
punct = Convert.ToByte(Console.ReadLine());
if (punct == 1)
ConsoleWork(circle = true);
else if (punct == 2)
ConsoleWork(circle = false);
else
{
ErrorMessage();
}
}
while (punct != 1 || punct != 2);
}
catch (Exception)
{
ErrorMessage();
ConsoleMenu();
}
}
static void Main(string[] args)
{
ConsoleMenu();
}
}

AlPer 02 июл 2015 22:14

abstract class GeometricalFigure
{
protected int X { get; set; }
protected int Y { get; set; }

public GeometricalFigure(int x, int y)
{
X = x;
Y = y;
}

abstract public void Draw();
}

class Rectangle : GeometricalFigure
{
protected int RadiusVp { get; set; }
int Ax, Ay;
int Bx, By;
int Cx, Cy;

public Rectangle(int x, int y, int radiusVP, int ax, int ay, int bx, int by,int cx, int cy)
: base(x, y)
{
RadiusVp = radiusVP;
Ax = ax; Ay = ay;
Bx = bx; By = by;
Cx = cx; Cy = cy;
}
override public void Draw()
{
Console.WriteLine("Я рисую треугольник. \nКоординаты центра вписанной окружности {0}, {1} с радиусом {2}.", X, Y, RadiusVp);
Console.WriteLine("Координаты вершин треугольника: "+
string.Format("\nТочка A: {0},{1}\nТочка B: {2},{3}\nТочка C: {4},{5}", Ax, Ay, Bx, By, Cx, Cy));
}
}

class Circle : GeometricalFigure
{
protected int Radius { get; set; }

public Circle(int x, int y, int radius)
: base(x, y)
{
Radius = radius;
}

override public void Draw()
{
Console.WriteLine("Я рисую окружность с координатами: {0}, {1} и радиусом {2}.", X, Y, Radius);
}
}

class Programm
{
static void PrintMenu()
{
Console.Clear();
Console.WriteLine("Выберите фигуру: \n1. Окружность\n2. Треугольник");

switch (Console.ReadLine())
{
case "1":
Circle circle1 = new Circle(20, 34, 11);
circle1.Draw();
break;
case "2":
Rectangle rectangle1 = new Rectangle(20, 34, 11, 1, 2, 3, 4, 5, 6);
rectangle1.Draw();
break;
default:
Console.WriteLine("Не то нажали");
break;
}
}

static void Main()
{
PrintMenu();
Console.ReadLine();
}
}

Юлия 15 июн 2015 04:02
{
class Figure
{

public int X;
public int Y;

public Figure()
{ X = 0; Y = 0; }
public Figure(int X, int Y)
{
this.X = X; this.Y = Y;
}
}
class Round : Figure
{
public int r { get; set; }
public Round(int X,int Y, int r) {}
public void Paint() { }


}

class Treug : Figure
{
public int a { get; set; } //a,b,c - длины сторон треугольника
public int b { get; set; }
public int c { get; set; }
public Treug(int X,int Y, int a, int b, int c) { }
public void Paint() { }
}


class Program
{
static void Main(string[] args)
{
Round Round1 = new Round(5,4,6);
Treug Treug1 = new Treug(6,8,10,12,5);
Round1.Paint();
Treug1.Paint();
}
}
}

Александр_Бугай 14 май 2015 12:36
class Figure
{
public int centerX;
public int centerY;
public int square;
public Figure()
{
centerX = Convert.ToInt32(Console.ReadLine());
centerY = Convert.ToInt32(Console.ReadLine());
}

}
class Triangle : Figure
{
public int angle;
internal void Draw()
{
}
}
class Circle : Figure
{
public int radius;
internal void Draw()
{
}
}

class Program
{
static void Main(string[] args)
{
Triangle myTriangle = new Triangle();
Circle myCircle = new Circle();

}
}

phoenixpakko 24 апр 2015 17:09
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/* Создайте базовый класс Геометрическая фигура, предусмотрите в нем общие поля/свойства, например координаты центра фигуры,
* с помощью конструктора должна быть возможность задать центр. На базе этого класса создайте два новых – Треугольник и Окружность.
* В этих классах должны быть свои особые поля, например радиус для окружности. В оба класса добавьте метод Нарисовать, в котором
* могла бы быть специфическая логика рисования фигуры. Создайте объекты треугольник и окружность.*/
namespace ConsoleApplication1
{
/* Описание класса ГЕОМ.ФИГУРА */
class GeometricFigure
{
protected int centerX { get; set; } // Координаты центра Х
protected int centerY { get; set; } // Координаты центра Y

protected GeometricFigure() // Конструктор для неопределенной фигуры
{
centerX = 0;
centerY = 0;
}
protected GeometricFigure(int centerX, int centerY) // Конструктор для фигуры с определенным центром
{
this.centerX = centerX;
this.centerY = centerY;
}
}
/* Конец описания класса ГЕОМ.ФИГУРА */

/* Описание класса ТРЕУГОЛЬНИК */
class Triangle : GeometricFigure
{
internal double side_A_Length { get; set; } //Длинна стороны А
internal double side_B_Length { get; set; } //Длинна стороны В
internal double side_C_Length { get; set; } //Длинна стороны С
internal byte angle_A { get; set; } //Угол А
internal byte angle_B { get; set; } //Угол В
internal byte angle_C { get; set; } //Угол С

internal Triangle() : base() // Конструктор для неопределенного (с единичными сторонами) треугольника с центром в точке (0,0)
{
side_A_Length = 1;
side_B_Length = 1;
side_C_Length = 1;
angle_A = 60;
angle_B = 60;
angle_C = 60;
}
internal Triangle(int centerX, int centerY, double sA, double sB, double sC, byte aA, byte aB, byte aC) : base(centerX, centerY)
// Конструктор для определенного треугольника с указанным центром, сторонами и углами
{
this.side_A_Length = sA;
this.side_B_Length = sB;
this.side_C_Length = sC;
this.angle_A = aA;
this.angle_B = aB;
this.angle_C = aC;
}

internal void Draw() // Простой метод (доступ к полям объекта) рисования треугольника
{
Console.WriteLine("Рисуем треугольник с центром в точке ({0},{1})", centerX, centerY);
Console.WriteLine("Рисуем одну сторону, длинной {0} и угол {1} градусов", side_A_Length, angle_A);
Console.ReadKey();
Console.WriteLine("Рисуем вторую сторону, длинной {0} и угол {1} градусов", side_B_Length, angle_B);
Console.ReadKey();
Console.WriteLine("Рисуем третью сторону, длинной {0} и угол {1} градусов", side_C_Length, angle_C);
Console.WriteLine("Треугольник готов");
Console.ReadKey();
}
}
/* Конец описания класса ТРЕУГОЛЬНИК */

/* Описание класса КРУГ */
class Circle : GeometricFigure
{
internal double radius { get; set; } // Радиус круга

internal Circle()
: base() // Конструктор для неопределенного круга с центром в точке (0,0) и нулевым радиусом
{
radius = 0;
}

internal Circle(double radius, int centerX, int centerY) : base (centerX, centerY)
// Конструктор для определенного круга с указанным центром и указанным заранее радиусом
{
this.radius = radius;
}
internal void Draw() // Простой метод (доступ к полям объекта) рисования круга
{
Console.WriteLine("Рисуем круг радиусом {2}, с центром в точке x={0}, y={1}", centerX, centerY, radius);
Console.WriteLine("Круг готов");
Console.ReadKey();
}
}
/* Конец описания класса КРУГ */

/* Основной раздел программы */
class Program
{
static void Main(string[] args)
{
Circle Krug1 = new Circle(); // Создаем простой круг
Triangle Treugolnik1 = new Triangle(); // Создаем простой треугольник
Circle Krug2 = new Circle(5, 10, 10); // Создаем определенный круг с радиусом 5 и центром в точке (10,10)
Triangle Treugolnik2 = new Triangle(2,7,3,4,5,30,60,90); // Создаем простой круг

Krug1.Draw();
Krug2.Draw();
Treugolnik1.Draw();
Treugolnik2.Draw();
}
}
}

stahma 04 мар 2015 00:14
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class GeometryFigures
{
public double x { get; set; }
public double y { get; set; }
public GeometryFigures(double X, double Y)
{
x = X;
y = Y;
}
}
class circle : GeometryFigures
{
public int r { get; set; }
public circle(double X, double Y, int R)
: base(X, Y)
{
r = R;

}
public void draw()
{
Console.WriteLine("Рисуем фигуру");
}

class triangle : GeometryFigures
{
public int perimetr { get; set; }
public triangle(double X, double Y, int Perimetr)
: base(X, Y)
{
perimetr = Perimetr;
}
public void Draw()
{
Console.WriteLine("Рисуем фигуру");
}
}

class Program
{
static void Main(string[] args)
{
circle circle1 = new circle(2.5,3.5,5);
triangle triangle1 = new triangle(1, 1, 8);
}
}
}
}

Виталий 11 фев 2015 20:37
-- admin --

Это свойство, которое я (сейчас сам не понимаю зачем) вставил в метод. Оно вычисляет периметр круга.

Спасибо, сам не нашел эту ошибку.

Oper 11 фев 2015 10:28
Ну, вот, как то так:

using System;

namespace L17
{
//Создайте базовый класс Геометрическая фигура,
//предусмотрите в нем общие поля/свойства,
//например координаты центра фигуры,

//с помощью конструктора должна быть возможность задать центр.

//На базе этого класса создайте два новых – Треугольник и Окружность.
//В этих классах должны быть свои особые поля, например радиус для окружности.
//В оба класса добавьте метод Нарисовать, в котором могла бы быть специфическая логика рисования фигуры.
//Создайте объекты треугольник и окружность.

class GemetricFigure
{
protected int[] PositionOfCenterOfFigure = new int[2];
public GemetricFigure(int x, int y)
{
PositionOfCenterOfFigure[0] = x;
PositionOfCenterOfFigure[1] = y;
}

public int[] PositionOfCenter
{
get
{
return PositionOfCenterOfFigure;
}
set
{
PositionOfCenterOfFigure = value;
}
}
}

class Triangle : GemetricFigure
{
private double a, b, c;
public Triangle(double a, double b, double c, int x = 0, int y = 0) : base(x, y)
{
this.a = a;
this.b = b;
this.c = c;
}

public void Draw()
{
Console.WriteLine("Произошел вызов метода, который нарисовал треугольник на координатной оси с центром по координатам x={0} и y={1}\n", PositionOfCenterOfFigure[0], PositionOfCenterOfFigure[1]);
}

public double Perimeter
{
get
{
return a + b + c;
}
}
}

class Circle : GemetricFigure
{
private double Radius;
public Circle(double Radius, int x = 0, int y = 0) : base(x, y)
{
this.Radius = Radius;
}
public void Draw()
{
Console.WriteLine("Произошел вызов метода, который нарисовал окружность на координатной оси с центром по координатам x={0}, y={1} и радиусом={2}\n", PositionOfCenterOfFigure[0], PositionOfCenterOfFigure[1], Radius);
}

public double Perimeter
{
get
{
return 2 * Math.PI * Radius;
}
}
}

class Program
{
static void Main(string[] args)
{
//Создаем треугольник со сторонами 11, 5.1 и 7.382, и координатами центра треугольника (-30; 11)
Triangle myTriangle = new Triangle(11, 5.1, 7.382,- 30, 11);
//Создаем окружность с радиусом 7.32 и координатами центра окружности (0; 0)
Circle myCircle = new Circle(7.32);

//Рисуем фигуры
myTriangle.Draw();
myCircle.Draw();

//Узнаем координаты фигур
Console.WriteLine("Координаты треугольника: ({0};{1})", myTriangle.PositionOfCenter[0], myTriangle.PositionOfCenter[1]);
Console.WriteLine("Координаты окружности: ({0};{1})\n", myCircle.PositionOfCenter[0], myCircle.PositionOfCenter[1]);

//Поменяеем координаты фигур
myTriangle.PositionOfCenter[0] = 8;
myTriangle.PositionOfCenter[1] = 3;
myCircle.PositionOfCenter[0] = -5;
myCircle.PositionOfCenter[1] = -1;

//Узнаем координаты фигур
Console.WriteLine("Координаты треугольника: ({0};{1})", myTriangle.PositionOfCenter[0], myTriangle.PositionOfCenter[1]);
Console.WriteLine("Координаты окружности: ({0};{1})\n", myCircle.PositionOfCenter[0], myCircle.PositionOfCenter[1]);

//Узнаем периметры фигур
Console.WriteLine("Периметр треугольника равен: {0}", myTriangle.Perimeter);
Console.WriteLine("Периметр окружности равен: {0}\n", myCircle.Perimeter);

Console.ReadKey();
}
}
}

Максим 02 фев 2015 15:23
Виталий
---
Что это за конструкция, то ли метод, то ли свойство:

public void ofperimeter
{
set { perimeter = radius * 3.14; }
}

Виталий 02 фев 2015 09:41
По личным причинам (хотя правильнее сказать по лени) весь Январьзанимался какой ни-будь ерундой вместо си шарпа. Сегодня заставил себя доделать домашку которую пытался сделать на прошлой неделе:


public class figure
{
public int perimeter {get; set;}

public figure()
{

}
}

class circle : figure
{
public int radius;

public void ofperimeter
{
set { perimeter = radius * 3.14; }
}
}
class Program
{
circle krug1 = new circle(radius = 2);
}

AlexWolf 28 янв 2015 13:04
Надеюсь все верно...


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

namespace ConsoleApplication1
{
class Geometry
{
public int coordX { get; set; }
public int coordY { get; set; }
public string color;
public bool rad;
public Geometry(int coordX, int coordY, string color, bool rad)
{
this.coordX =coordX;
this.coordY = coordY;
this.color = color;
this.rad = rad;
}
}
class Ring : Geometry
{
public int radius;
public string mat;
public Ring(int radius, string mat, int coordX, int coordY, string color, bool rad) : base(coordX, coordY, color, rad)
{
this.radius=radius;
this.mat=mat;
}
public void Draw()
{
Console.WriteLine("Создан круг в координатах X" + coordX + " Y" + coordY + " " + color + " цвета, " + (rad ? "радиоктивный, " : "экологически безопасный, ") + "радиусом " + radius + "m, из "+mat);
}
public void customcoordinate()
{
try
{
Console.WriteLine("введите координаты X для нового объекта");
coordX = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("введите координаты Y для нового объекта");
coordY = Convert.ToInt32(Console.ReadLine());
}
catch (FormatException)
{
coordY = coordY;
coordX = coordX;
Console.WriteLine("Ошибка ввода координат! Допустимы только числа. Координата установленна по умолчанию.");
}
}
}

class Triangle : Geometry
{
public bool rvstrn;
public string mat;
public Triangle(bool rvstrn, string mat, int coordX, int coordY, string color, bool rad) : base(coordX, coordY, color, rad)
{
this.rvstrn = rvstrn;
this.mat = mat;
}
public void Draw()
{
Console.WriteLine("Создан "+(rvstrn ? "равносторонний" : "прямоугольный")+ " треугольник в координатах X" + coordX + " Y" + coordY + " " + color + " цвета, " + "из " + mat);
}
public void customcoordinate()
{
try
{
Console.WriteLine("введите координаты X для нового объекта");
coordX = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("введите координаты Y для нового объекта");
coordY = Convert.ToInt32(Console.ReadLine());
}
catch (FormatException)
{
coordY = coordY;
coordX = coordX;
Console.WriteLine("Ошибка ввода координат! Допустимы только числа. Координата установленна по умолчанию.");
}
}
}

class Program
{
static void Main(string[] args)
{
Ring circle1 = new Ring(2, "металла", 25, 35, "красного", false);
Ring circle2 = new Ring(5, "радия", 50, 35, "серебристо-белого", true);
Triangle tri1 = new Triangle(true, "дерева", 25, 65, "бурого", false);
Triangle tri2 = new Triangle(false, "пластика", 25, 130, "голубого", false);
Console.WriteLine("Для создания объектов нажимайте любую кнопку.");
Console.ReadKey();
circle1.Draw();
Console.ReadKey();
circle2.customcoordinate();
circle2.Draw();
Console.ReadKey();
tri1.Draw();
Console.ReadKey();
tri2.customcoordinate();
tri2.Draw();
Console.ReadKey();
}
}
}


baks85 27 янв 2015 21:38

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

namespace ConsoleApplication1
{
class GeoFig
{
public int Senterx { get; set; }
public int Sentery { get; set; }

public GeoFig (int senterx, int sentery)
{
Senterx = senterx;
Sentery = sentery;
}
public GeoFig ()
{
Senterx = 0;
Sentery = 0;
}
}
class Circle : GeoFig
{
private int radius;

public void Drawfig ()
{
Console.WriteLine("Поздравляю, вы нарисовали круг");
}
public int Radius
{
get
{ return radius; }
set
{
if (value < 1)
{
Console.WriteLine("радиус не может быть равен или меньше ноля, задано базовое значение радиуса \"1\"");
radius = 1;
}
else
radius = value;
}
}
public Circle (int senterx, int sentery, int radius) : base (senterx, sentery)
{
this.radius = radius;
}
public Circle(int senterx, int sentery) : base (senterx, sentery)
{
radius = 1;
}
public Circle(int radius) : base ()
{
Radius = radius;
}
}

class Triangle : GeoFig
{
public int Dotx2, Dotx3;
public int Doty2, Doty3;
public void Drawfig()
{
Console.WriteLine("Поздравляю, вы нарисовали треугольник");
}
public Triangle (int senterx, int sentery, int dotx2, int doty2, int dotx3, int doty3) : base (senterx, sentery)
{
Dotx2 = dotx2;
Doty2 = doty2;
Dotx3 = dotx3;
Doty3 = doty3;
}
}
class Program
{
static void Main(string[] args)
{
Circle krug = new Circle(2,3,3);
Console.WriteLine("радиус круга - " +krug.Radius +"\r\n" +"координаты центра - " +"Х=" +krug.Senterx +" " +"Y=" +krug.Sentery);
krug.Drawfig();

Triangle treugolnik = new Triangle(1,1,2,2,3,3);
Console.WriteLine("\r\nточка 1 Х=" + treugolnik.Senterx + " Y=" + treugolnik.Sentery + "\r\nточка 2 Х=" + treugolnik.Dotx2 + " Y=" +treugolnik.Doty2 +"\r\nточка 3 Х=" +treugolnik.Dotx3 +" Y=" +treugolnik.Doty3);
treugolnik.Drawfig();

Console.ReadKey();
}
}
}


Диманиак 28 ноя 2014 23:32
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplicationTest
{
class GeometricFigure
{
protected int CenterX { get; private set; }
protected int CenterY { get; private set; }
public GeometricFigure(int centerx, int centery)
{
CenterX = centerx;
CenterY = centery;
}
}
class Triangle : GeometricFigure
{
private int Point1X;
private int Point1Y;
private int Point2X;
private int Point2Y;
private int Point3X;
private int Point3Y;
public Triangle(int point1x, int point1y, int point2x, int point2y, int point3x, int point3y, int centerx = 0, int centery = 0)
: base(centerx, centery)
{
Point1X = point1x;
Point1Y = point1y;
Point2X = point2x;
Point2Y = point2y;
Point3X = point3x;
Point3Y = point3y;
Console.WriteLine("Треугольник создан: (" + Point1X+","+Point1Y+") - (" + Point2X+","+Point2Y+") - (" + Point3X+","+Point3Y+")");
}
public void Draw()
{
Console.WriteLine("Треугольник нарисован");
}
}
class Circle : GeometricFigure
{
private double Radius;
public Circle(int centerx, int centery, double radius)
: base(centerx, centery)
{
if (radius < 0)
{
Console.WriteLine("Радиус не может быть меньше нуля. Радиус установлен равным нулю.");
radius = 0;
}
Radius = radius;
Console.WriteLine("Окружность создана: (" + CenterX + "," + CenterY + ") R = " + Radius);
}
public void Draw()
{
Console.WriteLine("Окружность нарисована");
}
}
class Program
{
static void Main()
{
Triangle triangle1 = new Triangle(5,7,10,15,3,1,1,1);
triangle1.Draw();
Circle circle1 = new Circle(10, 10, 6);
circle1.Draw();
Console.ReadKey();
}
}
}

Мен 06 ноя 2014 15:40
все ок.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Наследование_базового_класса
{
class Geometry_figure
{
public int center_x {get; set;}//поле
public int center_y {get; set;}//поле
}

class treygolnic : Geometry_figure
{
public int dliinna {get; set;}// поле
public bool resON;//поле

public void resuvat_treygolnic()//метод
{
resON = true;
Console.WriteLine("im syka typoi xyu: "+ resON.ToString()+" v tockah: "+center_x+" "+center_y);
}
}

class okrygnost : Geometry_figure//класс
{
public int radiys {get; set;}//поле
public bool resON;//поле

public void resuvat_okrygnost()//метод
{
resON = true;
Console.WriteLine("i narisoval kryg: " + resON.ToString()+ " s radiusom "+ this.radiys.ToString());
}
}


class Program
{
static void Main(string[] args)
{
int x = Convert.ToInt32(Console.ReadLine());//зчитывание координат центра
int y = Convert.ToInt32(Console.ReadLine());//зчитывание координат центра

Geometry_figure cord = new Geometry_figure();//создание поля базового класса
cord.center_x = x;//переприсвоение значений х и у center_x и center_у соответственно
cord.center_y = y;

Console.WriteLine(cord.center_x.ToString()+" "+ cord.center_y.ToString());//вывод координат

Console.WriteLine("resuvat 1-triugol, 2-okrug");
int yes = Convert.ToInt32(Console.ReadLine());

switch (yes)//в завизимости од значения свитча (1/2)
{
case 1:
treygolnic tre = new treygolnic();
tre.dliinna = Convert.ToInt32(Console.ReadLine()); //присовение значения длинны
tre.center_x = x;//присвоение координат центра фигуры базового класса, как координат центра триугольника
tre.center_y = y;//присвоение координат центра фигуры базового класса, как координат центра триугольника
Console.WriteLine("dlinna: "+tre.dliinna);//вывод длинны

tre.resuvat_treygolnic();//вызов метода рисования

break;
case 2:
okrygnost okr = new okrygnost();
okr.radiys = Convert.ToInt32(Console.ReadLine());//присвоение начения радиуса
Console.WriteLine("radius: "+okr.radiys);//вывод радиуса

okr.resuvat_okrygnost();//вызов метода рисования
break;
}
Console.ReadKey();
}
}
}


Мен 06 ноя 2014 12:53
У меня возникла проблема:
класс создал, поля тоже. свойство есть. Но как сделать так чтобы с помощью конструктора можно было задать центр?

Максим 03 сен 2014 15:05
Garrett
---
Да

Garrett 03 сен 2014 01:46
А возврат введенного значения тогда будет value.x?

Максим 03 сен 2014 00:04
Garrett
---
Вместо структур воспользуйтесь классами и наследованием, тогда создание экземпляра будет в стиле:

ArcheryValue value = new ArcheryValue(60);

Garrett 02 сен 2014 22:53
А подскажите, как лучше тогда поступить:
я привык работать в другом языке (одна из ERP, но похоже на C#) с типами данных - когда есть определенный тип со своим именем, оно остается неизменным, а вот его параметры можно менять. Например, размер допустимой строки или тип числа. Соответственно, переопределяются и все наследники.

Я почитал про C# и вроде бы для пользовательских типов данных принято пользоваться структурами.
Скажем, есть у меня в коде такое свойство разных объектов как SkillValue. Я его задаю как Int. Одним из SkillValue является, например, SmithValue, также может быть AlchemyValue, ArcheryValue и т.п. Я хочу иметь возможность при желании в одном месте поменять int на double или на float и получить таким образом переопределенные типы всех наследников.

Это я реализовал, задав следующее

public struct SkillValue
{
public int x;

public SkillValue(int p1)
{
x = p1;
}
}

public struct ArcheryValue
{
public SkillValue x;

public ArcheryValue(SkillValue p1)
{
x = p1;
}
}

но в итоге объявление новой переменной соответствующего типа превращается в какую-то хрень. Во всяком случае, такое от меня требует компилятор (и оно работает)

public ArcheryValue startUnitArchery = new ArcheryValue(new SkillValue(60));

А вызывается значение этой переменной у меня тоже мудрено:
startUnitAuthority.x.x

Я что-то напутал? Или перемудрил? Или проще забить на такую оптимизацию?

Заранее спасибо за совет

Максим 02 сен 2014 17:09
Garrett
---
Структуры нельзя наследовать

Garrett 02 сен 2014 11:09
Подскажите, а наследование у struct бывает?
Я пытался со своими типами данных работать. Но там что-то с наследованием не получилось...

Максим 31 авг 2014 14:27
mumm
---
При выводе вы указываете только имя объекта, нужно еще поле или метод:

tr1.Centr

mumm 31 авг 2014 11:31
Когда вызываю, данные не выводятся на экран. В чем причина?

class Class1
{

static void Main(string[] args)
{
triangle tr1 = new triangle(20,"Прямоугольный");
Console.WriteLine(tr1);
Console.ReadKey();
}

}

class geometrical_shapes
{
public int Centr { get; set; }


public geometrical_shapes(int centr)
{
Centr = centr;
}
}

class triangle : geometrical_shapes
{
public string Type { get; set; }

public triangle(int centr ,string type) : base(centr)
{
Type = type;
}

}

Medeu 08 авг 2014 18:08
Спасибо Вам большое !

Максим 08 авг 2014 14:31
Medeu
---
Всё хорошо, метод risunok можно было определить в базовом классе, но это рассматривается в следующих уроках

Medeu 07 авг 2014 17:15
здравствуйте, Админ. где пропустил грубые, нелепые ошибки? оцените мою домашку )


class GeometrcFigura
{
public double x { get; set; }
public double y { get; set; }

public GeometrcFigura(double x, double y)
{
this.x = x;
this.y = y;
}


}

class Treugolnik : GeometrcFigura
{
private double a, h;

public Treugolnik (double x, double y) : base (x,y)
{

}


public double A
{
get
{
return a;
}

set
{
if (value < 0) Console.WriteLine("Основание не может быть меньше 0\n");
else a = value;

}
}

public double H
{
get
{
return h;
}

set
{
if (value < 0) Console.WriteLine("Высота не может быть меньше 0\n");
else h = value;

}
}

public void risunok()
{

double s;
s = (A * H) / 2;
Console.WriteLine(" центр фигуры ({0},{1})\n Основание треугольника = {2}\n Высота треугольника = {3}\n Площадь треугольника = {4}", x, y, A, H, Math.Round(s));

}
}

class Okruzhnost : GeometrcFigura
{
private double r;

public Okruzhnost (double x,double y ) : base (x,y)
{

}
public double R
{
get
{
return r;
}

set
{
if (value < 0) Console.WriteLine("Радиус не может быть меньше 0\n");
else r = value;

}



}

public void risunok ()
{
double s;
s = Math.PI * r * r;
Console.WriteLine("Центр фигуры ({0},{1})\n радиус окружности = {2}\n площадь окружности = {3}", x, y, R, Math.Round(s));

}


}
class Program
{

static void Main(string[] args)
{
bool start = true;
while (start)
{
Console.WriteLine("\nВыберите геометрическую фигуру\n треугольник - 1, окружность - 2, выйти - 3");
try
{
int choose = int.Parse(Console.ReadLine());
if (choose == 1)
{
double x, y, a, h;

Console.WriteLine("Введите координаты центра треугольника");
Console.Write("x= ");
x = Convert.ToDouble(Console.ReadLine());
Console.Write("y= ");
y = Convert.ToDouble(Console.ReadLine());
Treugolnik treugolnik1 = new Treugolnik(x, y);
do
{
Console.WriteLine("Введите основание треугольника");
a = Convert.ToDouble(Console.ReadLine());
treugolnik1.A = a;
}
while (a <= 0);

do
{
Console.WriteLine("Введите высоту треугольника");
h = Convert.ToDouble(Console.ReadLine());
treugolnik1.H = h;
}
while (h <= 0);

treugolnik1.risunok();
}

else if (choose == 2)
{
double x, y, r;
Console.WriteLine("Введите координаты центра окружности");
Console.Write("x= ");
x = Convert.ToDouble(Console.ReadLine());
Console.Write("y= ");
y = Convert.ToDouble(Console.ReadLine());
Okruzhnost okruzhnost1 = new Okruzhnost(x, y);

do
{
Console.WriteLine("Введите радиус окружности");
r = Convert.ToDouble(Console.ReadLine());
okruzhnost1.R = r;
}
while (r <= 0);


okruzhnost1.risunok();
}
else if (choose == 3) start = false;
else Console.WriteLine();

}

catch (Exception error)
{
Console.WriteLine(error.Message);
}
}




}
}
}

AlexSerikov 07 июл 2014 19:59
Admin
----------------
Премного благодарен Вам. Как всегда, ответ простой и понятный :)

Максим 07 июл 2014 19:33
AlexSerikov
---
Есть такое общее соглашение - поля для внутренних нужд объекта, для взаимодействия с внешним миром - свойства.

Кроме этого, со свойством можно сделать так:

bool bState {get; private set;} // свойство только на чтение

AlexSerikov 06 июл 2014 19:03
Ничего особенного, но мне хотелось бы знать, я все правильно понял ? А так же я прошу, уважаемый Admin, объясните мне одну деталь. Из прошлого урока я кое-что не понял. Какой смысл делать автоматическое свойство, если можно просто использовать открытое поле (да, это не правильно, предоставлять доступ к полю, но...) ? Если будет автоматическое свойство, тогда поле будет private, но я все-равно получу доступ к ЗАКРЫТОМУ полю через set и все-равно установлю любое значение полю. В чем смысл ? Я понимаю, зачем свойства нужны, но автоматическому я не могу придумать никакой пользы. Уж проще создать поле и сделать его public.
А теперь код:

namespace sampleClasses
{
class Geometry
{
private int angl;
public int Angles
{
get
{
return angl;
}
set
{
if (value == 0) Console.WriteLine("Нет углов");
else angl = value;
}
}
private string Name;
private int CenterCoordinatesX;
private int CenterCoordinatesY;
public Geometry(string Name, int CenterCoordinatesX, int CenterCoordinatesY)
{
this.Name = Name;
this.CenterCoordinatesX = CenterCoordinatesX;
this.CenterCoordinatesY = CenterCoordinatesY;
}
}
class Circle : Geometry
{
public double Radius;
public Circle(string Name, int CenterCoordinatesX, int CenterCoordinatesY) : base (Name, CenterCoordinatesX, CenterCoordinatesY)
{
Console.WriteLine("Фигура "+Name+" создана");
}
public void Draw()
{
Console.WriteLine("Нарисована");
}
}
class Triangle : Geometry
{
public bool rectangular;
public Triangle(string Name, int CenterCoordinatesX, int CenterCoordinatesY): base(Name, CenterCoordinatesX, CenterCoordinatesY)
{
Console.WriteLine("Фигура " + Name + " создана");
}
public void Draw()
{
Console.WriteLine("Нарисована");
}
}
class Program
{

static void Main()
{
Circle myCircle = new Circle("Круг", 5, 5);
myCircle.Angles = 0;
myCircle.Draw();
myCircle.Radius = 5;
Console.WriteLine("S="+ Math.Pow(myCircle.Radius, 2)*Math.PI);

Triangle myTriangle = new Triangle("Прямоугольный треугольник", 15, 15);
myTriangle.Angles = 3;
Console.WriteLine("Количество углов "+myTriangle.Angles);
myTriangle.rectangular = true;
if (myTriangle.rectangular) Console.WriteLine("Один из углов = 90 градусов");
myTriangle.Draw();
Console.ReadKey();
}
}
}

Максим 04 фев 2014 15:11
palazhevich
---
Очень хорошо

palazhevich 03 фев 2014 00:05
Добрый вечер. Что то вот так.

class GeometricalFigure
{ public int X { get; set; }
public int Y { get; set; }
public GeometricalFigure(int x, int y)
{ this.X = x; this.Y = y; }
}
class Triangle : GeometricalFigure
{ public int Height { get; set; }
public Triangle(int X, int Y, int height): base(X, Y)
{ this.Height = height; }
public void Draw()
{ Console.WriteLine(" x| B+ \n | + \n | +++ \n | +");
Console.WriteLine(" | + + + \n | .O \n | + + + \n | +");
Console.WriteLine(" | A+++++++++C \n | N \n |_______________y");
}
public void writeTriangle()
{ Console.WriteLine(" Треугольник ABC:");
Console.WriteLine("Координаты центра вписанной окружности O: {0},{1}\nВысота треугольника BN: {2}", X, Y, Height);
} }
class Circle : GeometricalFigure
{ public int Radius { get; set; }
public Circle(int X, int Y, int radius): base(X, Y)
{ this.Radius = radius; }
public void Draw()
{ Console.WriteLine(" x| \n | +++ \n | + + \n |");
Console.WriteLine(" | + + \n | + .O +");
Console.WriteLine(" | + + \n | \n | + +");
Console.WriteLine(" | +++ \n |_______________________y");
}
public void writeCircle()
{ Console.WriteLine(" Окружность:");
Console.WriteLine("Координаты центра окружности O: {0},{1}\nРадиус окружности R: {2}", X, Y, Radius);
}}
class Program
{ static void Main(string[] args)
{ do
{ int figure;
Console.WriteLine();
Console.WriteLine("Выберете геометрическую фигуру: треугольник - 1, окружность - 2 ");
figure = Convert.ToInt32(Console.ReadLine());
if (figure == 1)
{ int x, y, h;
Console.WriteLine("Введите координаты центра вписанной окружности: \nх: ");
x = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("y: ");
y = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Введите значение высоты треугольника: ");
h = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
Triangle triangle1 = new Triangle(x, y, h);
triangle1.writeTriangle();
Console.WriteLine();
triangle1.Draw();
}
else if (figure == 2)
{ int x, y, r;
Console.WriteLine("Введите координаты центра окружности: \nх: ");
x = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("y: ");
y = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Введите радиус окружности: ");
r = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
Circle circle1 = new Circle(x, y, r);
circle1.writeCircle();
Console.WriteLine();
circle1.Draw();
}}
while (true);}}}

nikolay 03 дек 2013 14:00
Admin, спасибо буду исправлять

Максим 02 дек 2013 21:20
nikolay
---
Однозначно правильного решения не бывает. Но здесь у вас есть некоторые нехорошие моменты:

1. В классе GeometricFigure объявлено свойство Radious, но ведь не любая геом. фигура имеет радиус, у треугольника его нет. Это свойство должно было быть в классе Окружность. Понимаю, что в случае с треугольником имелся в виду радиус вписанной окружности. Но так не делается. Тогда уж нужно было в классе Triangle объявить поле типа Cycle, которое и представляло бы вписанную окружность, и уже у нее получать радиус.

2. side = (side + side + side) / 2; // в поле сторона вы записали полупериметр. Когда необходимо получить значение стороны, теперь мы получим полупериметр...Нужно было для этого отдельную переменную создать.

3. GetTriangalSque - метод, который начинается с Get (получить), должен по логике что-то возвращать. Думаю, тут лучше было бы убрать этот метод, и его реализацию перенести в свойство TriangalSqauer:

public double TriangalSqauer
{
get
{
side = (side + side + side) / 2;
return Radious * side;
}
}

nikolay 02 дек 2013 16:06
а так правильно?

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

namespace BasicClass
{
public class GeometricFigure
{
public double Radious {get; set;}
public GeometricFigure(double r)
{
this.Radious = r;
}
}

class Triangle : GeometricFigure
{
private double LenghtOfSideTriangal {get; set;}
public double TriangalSqauer;
private double side {get; set;}

public Triangle(double r, double lengh1, double p): base(r)
{
this.LenghtOfSideTriangal = lengh1;
this.side = p;

}

public void GetTriangalSquer()
{
side = (side + side + side)/2;
TriangalSqauer = Radious * side;
}
}


class Cycle: GeometricFigure
{
const double Pi = 3.14;
public double CycleSquare;

public Cycle(double r): base(r)
{

}

public void DrawCycle()
{
CycleSquare = Pi * Math.Pow(Radious, 2);
}

}


class Program
{
static void Main(string[] args)
{
Triangle triangle1 = new Triangle(30, 15, 15);
Cycle cycle1 = new Cycle(35);

triangle1.GetTriangalSquer();
cycle1.DrawCycle();
Console.WriteLine("Squar of Triangal =" + triangle1.TriangalSqauer);
Console.WriteLine(cycle1.CycleSquare);
Console.ReadKey();

}
}
}


Максим 25 ноя 2013 21:19
Dima
---
Очень хорошо. RadiusOfRound тоже нужно было сделать свойством, и более точная константа ПИ объявлена в классе Math - Math.PI

Dima 24 ноя 2013 13:47
namespace proga
{
class Geometricfigures
{
public int x { get; set; }
public int y { get; set; }
public Geometricfigures(int x, int y)
{ this.x = x;
this.y = y;
}
}
class Triangle:Geometricfigures
{
public int HeightOfTriangle { get; set; }
public int Osnovanie { get; set; }
public Triangle(int HeightOfTriangle, int Osnovanie,int x, int y):base(x,y)
{ this.HeightOfTriangle = HeightOfTriangle;
this.Osnovanie = Osnovanie;
}
public double GetArea()
{
return 0.5*HeightOfTriangle*Osnovanie;
}
}
class Round : Geometricfigures
{public double RadiusOfRound;

public Round(double RadiusOfRound,int x, int y):base(x,y)
{

this.RadiusOfRound = RadiusOfRound;
}

public double GetArea()
{ return Math.Pow(3.14,2) * RadiusOfRound; }
}


class Program
{

static void Main(string[] args)
{
int xOfTriangle = 34;
int yOfTriangle = 50;
int xOfRound = 11;
int yOfRound = 78;
int HeightOfTriangle=3;
int Osnovanie=7;
string treugolnik = "площадь треугольника";
string krug = "площадь круга";
double RadiusOfRound = 4;
Triangle tre = new Triangle( HeightOfTriangle, Osnovanie,xOfTriangle,yOfTriangle);
Round round = new Round(RadiusOfRound,xOfRound,yOfRound);
Console.WriteLine(treugolnik + ": " + tre.GetArea() + ", координаты " + xOfTriangle + ":" + yOfTriangle);
Console.WriteLine(krug+":"+round.GetArea()+", координаты "+xOfRound+":"+yOfRound);

Console.ReadKey();

}
}
}

RomanS 14 ноя 2013 18:56
Спасибо.

Максим 14 ноя 2013 18:02
RomanS
---
Если базовый конструктор ожидает аргументы, в любом случае необходимо вызывать базовый через ключевое слово base. Будет работать только такая схема:
public Класс-наследник(аргументы только для базового конструктора) : base (аргументы только для базового конструктора)

RomanS 14 ноя 2013 13:23
В данном уроке описаны две ситуации: 1 - конструктор задан только для класса-наследника, 2 - конструктор задан И для базового класса, И для класса-наследник. Возник такой теоретический вопрос: если существует ситуация, когда в базовом классе конструктор нужен (для инициализации полей,общих для всех объектов классов-наследников, значениями аргументов, которые ему передаются), а в классах-наследниках конструкторы не нужны (так как эти классы-наследники, к примеру, нужны просто для реализации полиморфизма относительно переданных базовому классу аргументов), то можно ли создать экземпляр класса наследника вот так:

Класс_наследник объект = new Класс-наследник(аргументы ТОЛЬКО для базового конструктора);

БЕЗ прописывания конструкторов классов-наследников вот так:

public Класс-наследник(аргументы только для базового конструктора) : base (аргументы только для базового конструктора)

????
Повторюсь, вопрос носит исключительно теоретический характер.
Заранее спасибо.

Максим 09 ноя 2013 15:28
RomanS
---
Хочу сказать, что качество кода на очень хорошем уровне. Можно было только не создавать некоторые переменные:

double area;
area = 0.5 * triangle_base * heigth;
return area;

Здесь создание переменной не очень то необходимо, можно так:

return 0.5 * triangle_base * heigth;

Ну и это:
area = Figure1.GetArea();
Console.WriteLine("Площадь трапеции равна " + area);

Можно так:

Console.WriteLine("Площадь трапеции равна " + Figure1.GetArea());

А на счет модификаторов, то вы объявили открытые поля, что не желательно делать. Можно было в этом случае использовать автоматические свойства.

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

RomanS 08 ноя 2013 09:53
Слегка изменил задание. В очередной раз понимаю, что не понимаю полностью где какой модификатор доступа корректнее всего использовать.
using System;
class Figure
{
public double heigth;
public Figure(double heigth)
{
this.heigth = heigth;
}
}
class Trapezium : Figure
{
public double trapezium_top_base;
public double trapezium_bottom_base;
public Trapezium(double trapezium_top_base, double trapezium_bottom_base, double h) : base(h)
{
this.trapezium_top_base = trapezium_top_base;
this.trapezium_bottom_base = trapezium_bottom_base;
}
public double GetArea()
{
double area;
area = 0.5 * (trapezium_bottom_base + trapezium_top_base) * heigth;
return area;
}
}
class Triangle : Figure
{
public double triangle_base;
public Triangle(double triangle_base, double h) : base(h)
{
this.triangle_base = triangle_base;
}
public double GetArea()
{
double area;
area = 0.5*triangle_base*heigth;
return area;
}
}
class Program
{
static void Main()
{
Console.WriteLine("Введите высоту фигуры:");
try
{
double area;
double h = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Выбирете тип фигуры [1 - трапеция, 2 - треугольник]:");
int figure = Convert.ToInt32(Console.ReadLine());
switch(figure)
{
case 1:
Console.WriteLine("Выбрана трапеция.");
Console.WriteLine("Введите длину большего основания:");
double trapezium_bottom_base = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Введите длину меньшего основания:");
double trapezium_top_base = Convert.ToDouble(Console.ReadLine());
Trapezium Figure1 = new Trapezium(trapezium_bottom_base, trapezium_top_base, h);
area = Figure1.GetArea();
Console.WriteLine("Площадь трапеции равна " + area);
Console.ReadKey();
break;
case 2:
Console.WriteLine("Выбран треугольник.");
Console.WriteLine("Введите длину основания:");
double triangle_base = Convert.ToDouble(Console.ReadLine());
Triangle Figure2 = new Triangle(triangle_base, h);
area = Figure2.GetArea();
Console.WriteLine("Площадь треугольника равна " + area);
Console.ReadKey();
break;
default:
Console.WriteLine("Необходимо ввести либо 1, либо 2!");
Console.ReadKey();
break;
}
}
catch(Exception error)
{
Console.WriteLine("Необходимо ввести число!");
Console.ReadKey();
}
}
}

Максим 10 окт 2013 18:06
Lili
---
Ух, очень много у вас тут получилось нехороших моментов.

Ваш вопрос: если наши поля объявлены как public, зачем тогда мы используем {get;set;}?

{get;set;} - это означает, что мы обявили автоматическое СВОЙСТВО, а не поле (вам стоит заглянуть в Урок 16. Свойства в Си-шарп). С каким модификатором доступа должно объявляться свойство зависит от конкретной ситуации. Обычные поля вообще не следует объявлять как public.

Насчет константы. Вы объявили число Pi в классе фигуры, и эту константу унаследовали окружность и треугольник. В классе фигуры да, Pi нужно, но в треугольнике не очень. Можно было объявить ее только в классе окружность. Теперь о ее видимости. Вы сделали ее public, это означает что она видна всем. Получается, что в любом объекте окружность она будет доступна. Но это неправильно. Число Pi никак не характеризует окружность, в отличии от таких свойств, как радиус, координаты центра. Поэтому такую константу следует сделать закрытой. И не забывайте про модификатор protected, который делает поле/свойство/... доступным в классе наследнике, и закрытым где либо еще. Например, если все таки число Pi должно было быть в обоих классах треугольник и окружность, его стоило бы объявить как protected. Оно было бы доступно в наследниках, но закрыто уже в объектах.

Идем дальше. В классе треугольник есть конструктор, который устанавливает площадь и сторону. Дальше вы объявляете метод, который считает и возвращает высоту, и при этом, он СНОВА принимает площадь и сторону. Площадь Square уже была назначена конструктором базового класса, но это свойство вы объявили закрытым, и, соответственно, в классе треугольник не можете его использовать. Нужно было объявить Square как public. Со стороной еще проще, Side уже установлена конструктором и доступна в классе треугольник, нужно было использовать Side в методе Height, а не передавать лишний раз. Этот метод мог бы выглядеть так (установив при этом Square как public):

public double Height()
{
h = 2 * Square / Side;
return h;
}
}

В идеале, метода Height не должно было быть, и следовало бы реализовать это через свойство:

public double Height
{
get
{
return 2 * Square / Side;
}
}

И еще по поводу имен. Название метода должно отображать ДЕЙСТВИЕ, здесь должен участвовать глагол. GetHeight() - получить высоту. Существительными же называются поля/свойства. Height - имя для поля/свойства.

Lili 09 окт 2013 14:10
namespace yrok17_nasledovanie
{
class Geometrical
{
private double Square { get; set; }
public const double Pi = 3.14;


public Geometrical(double s)
{
Square = s;
}
}
class Triangle : Geometrical
{
private double Side { get; set; }
private double h { get; set; }

public Triangle(double s, double a) : base(s)
{
Side = a;
}
public double Height(double s, double a)
{
h = 2 * s / a;
return h;
}
}
class Circle : Geometrical
{
private double Diametr { get; set; }
private double length { get; set; }

public Circle(double s, double d):base(s)
{
Diametr = d;
}
public double CircleLengh( double d)
{
length = Pi * d;
return length;
}
}

class Program
{
static void Main(string[] args)
{
Triangle tr1 = new Triangle(48, 12);
tr1.Height(48,12);
Console.WriteLine("высота треугольника = " + tr1.Height(48,12));

Circle cir1 = new Circle(56, 16);
cir1.CircleLengh(16);
Console.WriteLine("длина окружности = " + cir1.CircleLengh(16));

}
}
}
а если я константу Пи делаю private, как я осуществляю к ней доступ, чтоб вычислить мою длину окружности? или это вообще незначительно и вполне можно ее оставлять public?

Lili 08 окт 2013 21:55
объясните, пожалуйста
если наши поля объявлены как public, зачем тогда мы используем {get;set;}?

Андрей 07 окт 2013 21:31
Спасибо, помогло!

Максим 07 окт 2013 01:38
Андрей
---
Size только на чтение, а вот Font можно изменить:
MyButton.Font = new Font(MyButton.Font.FontFamily, 30);

Андрей 04 окт 2013 22:27
Cоздал класс MyButton наследник класса Button. Пытаюсь изменить размер шрифта вот так: MyButton.Font.Size = 5; пишет "Невозможно присвоить значение свойству или индексатору "System.Drawing.Font.Size" -- доступ только для чтения". Можно ли как-то получить доступ?

Максим 02 сен 2013 23:35
Alex
---
Вы правы. Пользователь hojiakbar просто ошибся, и тот фрагмент кода должен был выглядить так как вы и написали:

public Triangle(int a, int b, int x, int y): base(x, y)
{
this.a = a;
this.b = b;
}

Alex 02 сен 2013 17:49
public Triangle(int a, int b, int x, int y): base(x, y)
{
a = this.a;
b=this.b;
}

В уроке посвященном this. недопонял, а сейчас окончательно запутался. С помощью this. мы обращаемся к полям конкретного объекта класса, в котором this. используется. Не могу в таком случае понять логику данного фрагмента кода. Переменным, которые содержат введенные пользователем значения присваиваются значения свойств данного объекта? Или имелось все таки ввиду:
public Triangle(int a, int b, int x, int y): base(x, y)
{
this.a = a;
this.b = b;
}
т.е. мы свойству создаваемого объекта класса Triangle присваиваем значения переданных в конструктор a и b.
Или я все таки не правильно понял как работает this. Помогите разобраться пожалуйста...

hojiakbar 24 авг 2013 23:31
class GeometricFigura
{
private int abcisa{get;set;}
private int ordinatus{ get; set; }
public static double Pi;
public GeometricFigura(int abcisa, int ordinatus)
{
Pi = 3.14;
this.abcisa = abcisa;
this.ordinatus = ordinatus;
}
}
class Circle : GeometricFigura
{
public int radius { get; set; }
public Circle(int r, int x, int y):base(x,y)
{
radius = r;
}
public void CreateCircle()
{}
}
class Triangle : GeometricFigura
{
public int a { get; set; }
public int b { get; set; }
public int angleRadian { get; set; }
public Triangle(int a, int b, int x, int y): base(x, y)
{
a = this.a;
b=this.b;
}
public void CreateTriangle()
{}
}
class Program
{
static void Main(string[] args)
{
int a = Convert.ToInt16(Console.ReadLine());
int b = Convert.ToInt16(Console.ReadLine());
Triangle triangle = new Triangle(a,b,0,0);
triangle.angleRadian = Convert.ToInt16(Console.ReadLine());
triangle.CreateTriangle();
}
}

Lucifer 23 июл 2013 02:00
Было полезно.


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

Имя (обязат.)
E-mail (обязат., не публикуется)


Для вставки ваших программ пользуйтесь кнопкой "исходный код"
Вёрстка сайта с нуля

Уникальный Видеокурс!

"Научись верстать сайты и заработай на этом!"

Получить видеокурс

Подпишись на курс по программированию, и узнавай первым о новых уроках!

RSS подписка Страничка Вконтакте Мы в Twitter
Бесплатный курс по основам PHP
Ошибка в тексте? Выделите ее мышкой и нажмите Ctrl+Enter
Поблагодарить автора: Номер карты (ПриватБанк)
5168 7572 4170 8660
WebMoney
R372544961915 U685637142028 Z999792764387
Наверх
Система Orphus