Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 24.11.2015
Сообщений: 15
1

Вычислить площадь большей окружности, меньшей окружности и кольца, образованного ими

17.04.2016, 14:01. Показов 2954. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите! Разработайте программу с использованием класса Ring (кольцо), в котором реализовано вычисление площади большей окружности, меньшей окружности и кольца, образованного ими. Класс должен содержать конструктор по умолчанию и конструктор инициализации.

В программе должно быть объявлено не менее 3-х объектов класса с вызовом для них соответствующих методов.

 Комментарий модератора 
Не создавайте дубли тем! Если нужно поднять тему, просто оставьте в ней сообщение.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2016, 14:01
Ответы с готовыми решениями:

площадь кольца, ширина которого равна h, а отношение радиуса большей окружности к радиусу меньшей окружности равно d
Помогите пожалуйста с задачей Вычислите площадь кольца, ширина которого равна h, а отношение...

Определить, во сколько раз радиус большей окружности больше радиуса меньшей окружности
Здравствуйте все! В общем проблема такова: имеется задание: "Известны длины трех окружностей....

Генерировать по случайным координатам окружности, так, чтобы они не вышли за рамки известной большей окружности
Столкнулся с такой проблемой: Моя задача требует генерировать по случайным координатам окружности,...

Класс "Окружность" с данными центр и радиус окружности. Вычислить длину и площадь окружности.
Объявить класс и определить для него конструктор по умолчанию, конструктор инициализации....

17
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
17.04.2016, 14:22 2
Цитата Сообщение от kriss007 Посмотреть сообщение
вычисление площади большей окружности, меньшей окружности и кольца, образованного ими.
Площадь окружности: https://www.cyberforum.ru/cgi-bin/latex.cgi?\pi {r}^{2}
Значение пи получите через Math.PI, значение радиуса получите от пользователя.

Площадь кольца — разница площадей большей и меньшей окружностей.

Будут проблемы с написанием кода — задавайте вопросы.
0
44 / 41 / 44
Регистрация: 08.05.2016
Сообщений: 119
10.05.2016, 21:20 3
Класс внутри файла Ring.cs (требуется прописать соотв. неймспесы и директивы)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    public class Ring
    {
        public double InnerRadius = 0;
        public double OuterRadius = 0;
 
        public double InnerSquare
        { get { return Math.PI * InnerRadius * InnerRadius; } }
        public double OuterSquare
        { get { return Math.PI * InnerRadius * InnerRadius; } }
        public double Square
        { get { return OuterSquare - InnerSquare; } }
 
        // Конструктор инициализации. Конструктор по умолчанию создаётся самим шарпом.
        public Ring(double r1, double r2)
        {
            this.InnerRadius = Math.Min(r1, r2);
            this.OuterRadius = Math.Max(r1, r2);
        }
 
        public override string ToString()
        { return String.Format("Inner: {0}; Outer: {1}", this.InnerRadius, this.OuterSquare); }
    }
Файл Program.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace RingsTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Ring a = new Ring(1, 2);
            Ring b = new Ring(6, 3);
            Ring c = new Ring(1 / a.OuterSquare, 1 / b.InnerSquare);
 
            Console.WriteLine(c.Square);
        }
    }
}
2
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
10.05.2016, 21:37 4
Цитата Сообщение от Hares Посмотреть сообщение
public double OuterSquare
* * * * { get { return Math.PI * InnerRadius * InnerRadius; } }
Опечатка
C#
1
public double OuterSquare { get { return Math.PI * OuterRadius * OuterRadius; } }
2
44 / 41 / 44
Регистрация: 08.05.2016
Сообщений: 119
10.05.2016, 21:39 5
Да, она самая. Спасибо.
0
Эксперт .NETАвтор FAQ
10410 / 5140 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
11.05.2016, 10:06 6
Hares, Нет смысла делать min/max в конструкторе, если у вас все равно поля InnerRadius, OuterRadius открытые и доступны на запись.
0
44 / 41 / 44
Регистрация: 08.05.2016
Сообщений: 119
11.05.2016, 10:10 7
У System.Drawing.Point свойства X и Y тоже открыты на чтение и запись. Тем не менее, конструктор с x и y там есть. Это не аргумент. Просто удобнее записать в одну строчку, чем в три (пустой конструктор, присвоить внутренний радиус, присвоить внешний)
0
Эксперт .NETАвтор FAQ
10410 / 5140 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
11.05.2016, 10:37 8
Цитата Сообщение от Hares Посмотреть сообщение
свойства X и Y тоже открыты на чтение и запись. Тем не менее, конструктор с x и y там есть.
В Point X и Y могут принимать любые значения. Поэтому там они открыты на запись. И в конструкторе там просто происходит присвоение, без логики.

Вы же пытаетесь(судя по конструктору) сделать так, что бы InnerRadius всегда был меньше OuterRadius. Это правильно. Но в вашей реализации это не имеет смысла, потому что потом полям InnerRadius и OuterRadius все равно можно присвоить любые значения, и данные станут неконсистентными.

Нужно:
1) Либо переложить ответственность за контроль за данными на вызывающую сторону, и тогда конструктор будет выглядеть так:
C#
1
2
3
4
5
        public Ring(double innerRadius , double outerRadius)
        {
            this.InnerRadius = innerRadius;
            this.OuterRadius = outerRadius;
        }
При этом поля остаются открытыми на запись.

2) Либо же делать контроль данных на стороне класса Ring. Но тогда поля нужно переделать в свойства, и в них контролировать условие InnerRadius <= OuterRadius.

И еще. Вы пытаетесь в конструкторе додумать за вызывающую сторону (угадывать где внешний радиус, а где - внутренний). Это плохо. Кажется что это упростит жизнь вызывающей стороне, но на самом деле это просто скроет ее ошибки. Если данные - неправильные нужно кидать исключение, а не додумывать что имел ввиду вызывающий код.

PS Не подумайте что я придираюсь, просто раз вы так подробно расписываете классы, то давайте их расписывать до конца правильно.
1
44 / 41 / 44
Регистрация: 08.05.2016
Сообщений: 119
11.05.2016, 11:17 9
PS Не подумайте что я придираюсь, просто раз вы так подробно расписываете классы, то давайте их расписывать до конца правильно.
В прочем, всё так. Мне просто сначала было чутка лениво писать.

Цитата Сообщение от Storm23 Посмотреть сообщение
Если данные - неправильные нужно кидать исключение, а не додумывать что имел ввиду вызывающий код.
В некоторых математических ситуациях это упрощает дело.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class Ring
{
    private double innerRadius = 0;
    private double outerRadius = 0;
 
    public double InnerRadius
    {
        get { return innerRadius; }
        set
        {
            if (value <= outerRadius)
                innerRadius = value;
        }
    }
    public double OuterRadius
    {
        get { return outerRadius; }
        set
        {
            if (value >= innerRadius)
                outerRadius = value;
        }
    }
 
    public double InnerSquare
    { get { return Math.PI * innerRadius * innerRadius; } }
    public double OuterSquare
    { get { return Math.PI * outerRadius * outerRadius; } }
    public double Square
    { get { return OuterSquare - InnerSquare; } }
 
    // Конструктор инициализации. Конструктор по умолчанию создаётся самим шарпом.
    public Ring(double r1, double r2)
    { SetRadius(r1, r2); }
 
    public void SetRadius(double r1, double r2)
    {
        this.innerRadius = Math.Min(r1, r2);
        this.outerRadius = Math.Max(r1, r2);
    }
 
    public override string ToString()
    { return String.Format("Inner: {0}; Outer: {1}", this.innerRadius, this.outerRadius); }
}
Добавлено через 20 минут
А вообще, как мне тут нашёптывает Storm23 (и нашёптывает верно), правильный вариант, с учётом психологии языка будет выглядеть так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class Ring
{
    private double innerRadius = 0;
    private double outerRadius = 0;
 
    public double InnerRadius
    {
        get { return innerRadius; }
        set
        {
            if (value <= outerRadius)
                innerRadius = value;
            else
                throw new ArgumentException("Inner Radius should not exceed Outer one");
        }
    }
    public double OuterRadius
    {
        get { return outerRadius; }
        set
        {
            if (value >= innerRadius)
                outerRadius = value;
            else
                throw new ArgumentException("Inner Radius should not exceed Outer one");
        }
    }
 
    public double InnerSquare
    { get { return Math.PI * innerRadius * innerRadius; } }
    public double OuterSquare
    { get { return Math.PI * outerRadius * outerRadius; } }
    public double Square
    { get { return OuterSquare - InnerSquare; } }
 
    // Конструктор инициализации. Конструктор по умолчанию создаётся самим шарпом.
    public Ring(double inner, double outer)
    { SetRadius(inner, outer); }
 
    public void SetRadius(double inner, double outer)
    {
        if (inner <= outer)
        {
            this.innerRadius = inner;
            this.outerRadius = outer;
        }
        else
            throw new ArgumentException("Inner Radius should not exceed Outer one");
    }
 
    public override string ToString()
    { return String.Format("Inner: {0}; Outer: {1}", this.innerRadius, this.outerRadius); }
}
2
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
11.05.2016, 11:45 10
Цитата Сообщение от Hares Посмотреть сообщение
// Конструктор инициализации. Конструктор по умолчанию создаётся самим шарпом.
Конструктор по умолчанию не создается шарпом, если существует конструктор с параметрами.
2
44 / 41 / 44
Регистрация: 08.05.2016
Сообщений: 119
11.05.2016, 12:20 11
Цитата Сообщение от golubyatnikovtv Посмотреть сообщение
Конструктор по умолчанию не создается шарпом, если существует конструктор с параметрами.
Да, спутал со структурой.

После наших перешёптываний с Storm23 родился такой вариант:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
public class Ring
{
    public class RingException : Exception
    {
        public RingException()
            : base("Inner Radius should not exceed Outer one")
        { }
        public RingException(string message)
            : base(message)
        { }
    }
 
    private double innerRadius = 0;
    private double outerRadius = 0;
 
    public double InnerRadius
    {
        get { return innerRadius; }
        set
        {
            if (isValid(value, outerRadius))
                innerRadius = value;
            else
                throw new RingException();
        }
    }
    public double OuterRadius
    {
        get { return outerRadius; }
        set
        {
            if (isValid(innerRadius, value))
                outerRadius = value;
            else
                throw new RingException();
        }
    }
    public double InnerSquare
    { get { return Math.PI * innerRadius * innerRadius; } }
    public double OuterSquare
    { get { return Math.PI * outerRadius * outerRadius; } }
    public double Square
    { get { return OuterSquare - InnerSquare; } }
 
    protected virtual bool isValid(double inner, double outer)
    { return inner <= outer; }
 
 
    public void SetRadius(double inner, double outer)
    {
        if (isValid(inner, outer))
        {
            this.innerRadius = inner;
            this.outerRadius = outer;
        }
        else
            throw new ArgumentException("Inner Radius should not exceed Outer one");
    }
 
    public override string ToString()
    { return String.Format("Inner: {0}; Outer: {1}", this.innerRadius, this.outerRadius); }
 
    public Ring()
    { SetRadius(0, 0); }
 
    public Ring(double r)
    { SetRadius(0, r); }
 
    public Ring(double inner, double outer)
    { SetRadius(inner, outer); }
}
1
1 / 1 / 0
Регистрация: 21.09.2015
Сообщений: 79
19.05.2016, 10:49 12
а как это все вывести?
0
44 / 41 / 44
Регистрация: 08.05.2016
Сообщений: 119
19.05.2016, 11:02 13
Console.WriteLine вам в помощь
0
1 / 1 / 0
Регистрация: 21.09.2015
Сообщений: 79
19.05.2016, 11:15 14
я в курсе...но куда дописать чтобы результат появился и что именно? е подскажете?
0
44 / 41 / 44
Регистрация: 08.05.2016
Сообщений: 119
19.05.2016, 11:16 15
Смотря что и как вы хотите выводить... Тут уж только вы решаете
0
1 / 1 / 0
Регистрация: 21.09.2015
Сообщений: 79
19.05.2016, 11:36 16
вывести площади большей окружности, меньшей окружности и кольца, образованного ими.

Добавлено через 8 минут
помогите пожалуйста
0
44 / 41 / 44
Регистрация: 08.05.2016
Сообщений: 119
19.05.2016, 11:40 17
В таком случае смотрите самый верхний ответ. Там есть запускающая функция внутри файла Program.cs. Только, единственное что, нужно поменять радиусы во втором случае местами -- сначала внутренний, потом внешний
0
1 / 1 / 0
Регистрация: 21.09.2015
Сообщений: 79
19.05.2016, 11:44 18
ну...там есть а куда его вписывать...я просто навичок
0
19.05.2016, 11:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.05.2016, 11:44
Помогаю со студенческими работами здесь

Рассчитать площадь кольца, зная радиусы его внешней и внутренней окружности
в основной программе вводятся внешний r и внутренний r радиусы кольца. в модуле рассчитывается...

Задан радиус окружности. Определите длину окружности и площадь соответствующего круга
Помогите пожалуйста , не знаю как сделать !

Найти радиус окружности и площадь круга по заданной длине окружности
Дана длина L окружности. Найти ее радиус R и площадь S круга, ограниченного этой окружностью,...

По заданному радиусу окружности R определить длину окружности и площадь круга.
По заданному радиусу окружности R определить длину окружности и площадь круга.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru