Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2015, 14:41   #1
Neostat
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 49
По умолчанию C# задача на массив.

Всем доброго времени суток!
Уважаемые форумчане,помогите пожалуйста решить вот такую задачу:

"Дан массив А из n точек.Найти наибольший периметр треугольника,вершины которого принадлежат различным точкам массива А,и сами эти точки(точки выводятся в том же порядке,к котором они перечислены при задании массива А)."

Заранее огромное спасибо.

P.S. Если честно , то я пытался её делать,но мне кажется алгоритм поиска точек не правильный..И я плохо себе представляю ,как реализовать динамический массив. У меня в задаче,как видите, сразу даётся два массива x,y из 6 элементов,а нужно чтобы точки вводились с клавиатуры и их было ровно столько,сколько захочет пользователь.В общем расчитываю только на помощь этого сообщества.

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
const int n = 6;
int[] x = new int[n] { 2, 11, 5, -2, 5, -4 };
int[] y = new int[n] { 7, 13, 3, -5, 9, -1 };
int a, b, c,aB,bB,cB;
double P,PB;

aB = 0;
cB = 0;
bB = 0;

Console.WriteLine("Координаты точек: ");
for (int i = 0; i < n; i++)
{
Console.Write("({0},{1}) ", x[i], y[i]);
}
Console.WriteLine();

PB = 0;
for (a = 0; a < n - 2; a++)
for (b = a + 1; b < n - 1; b++)
for (c = b + 1; c < n; c++)
{
P = Math.Sqrt((x[b] - x[a])*(x[b] - x[a])  + (y[b] - y[a])*(y[b] - y[a])) 
  + Math.Sqrt((x[c] - x[b])*(x[c] - x[b])+ (y[c] - y[b])* (y[c] - y[b])) 
  + Math.Sqrt((x[c] - x[a])*(x[c] - x[a]) + (y[c] - y[a])*(y[c] - y[a]));
if (P > PB)
{
PB = P;
aB = a;
bB = b;
cB = c;
}
}

Console.WriteLine("Площадь большего треугольника равна {0:F4} И сами точки: ({1},{2}),({3},{4}),({5},{6})"
     ,PB, x[aB], y[aB], x[bB], y[bB],x[cB], y[cB]);

}
}
}

Последний раз редактировалось Stilet; 11.05.2015 в 14:59.
Neostat вне форума Ответить с цитированием
Старый 12.05.2015, 17:33   #2
Neostat
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 49
По умолчанию

апну тему. Хотя бы кто-нибудь скажите правильно я площадь считаю?

Последний раз редактировалось Neostat; 12.05.2015 в 17:56.
Neostat вне форума Ответить с цитированием
Старый 13.05.2015, 06:39   #3
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Цитата:
Хотя бы кто-нибудь скажите правильно я площадь считаю?
У вас в задании речь не о площади, а о периметре же, верно?

Уж не знаю позволят ли вам преподаватели, но в C# всё для этого уже есть, не надо ничего высчитывать самому. Есть классы Point и Vector.

Создаём массив (как вы говорите динамический) точек:
Цитата:
List<Point> points = new List<Point>();
Добавляем точки:
Код:
points.Add(new Point(5, -4));
points.Add(new Point(15, 6));
Расстояние между точками:
Код:
Vector v = Point.Subtraction(points[0], points[1]);
Console.WriteLine(v.Length.ToString());
Круче конечно будет написать класс треугольника, и в нём реализовать метод getPerimeter =)
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Старый 13.05.2015, 08:20   #4
Neostat
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 49
По умолчанию

Да периметр,ошибся. Я пробовал сделать так, но нам можно пользоваться только массивами и циклами(

Код:
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace N
{
    class Program
    {
        static void Main(string[] args)
        {
            var points = new Point[]
            {
                new Point(1, 2),
                new Point(2, 3),
                new Point(4, 5),
                new Point(8,9), 
                new Point(10,12), 
                new Point(17,-17), 
            };
 
            var tr = Triangle.GenerateTriangle(points);
            Console.WriteLine("Количество треугольников {0}",tr.Length);
 
            Console.WriteLine(tr.Max(q=>q.Perimets()));
            Console.ReadKey();
 
        }
    }
 
    struct Point
    {
        public int X { get; set; }
        public int Y { get; set; }
 
        public Point(int x,int y) : this()
        {
            X = x;
            Y = y;
        }
 
        public override string ToString()
        {
            return string.Format("X={0} Y={1}", X, Y);
        }
    }
 
    class Triangle
    {
        public Point[] points = new Point[3];
        public Triangle(Point p1,Point p2,Point p3)
        {
            points[0] = p1;
            points[1] = p2;
            points[2] = p3;
        }
 
        public double Perimets()
        {
            return Lentgh(points[0], points[1]) + Lentgh(points[1], points[2]) + Lentgh(points[0], points[2]);
        }
 
        public double Lentgh(Point p1, Point p2)
        {
            return Math.Sqrt(Math.Pow(p2.X - p1.X, 2) + Math.Pow(p2.Y - p1.Y, 2));
        }
 
       public static Triangle[] GenerateTriangle(Point[]points)
        {
            Random rnd=new Random(DateTime.Now.Millisecond);
 
            List<Triangle> tl=new List<Triangle>();
            for (int i = 0; i < points.Length; i++)
            {
                for (int j = i+1; j < points.Length; j++)
                {
                    for (int k = j+1; k < points.Length; k++)
                    {
                        tl.Add(new Triangle(points[i],points[j],points[k]));
                    }
                }
 
            }
            return tl.ToArray();
        }
    }
 
}

Последний раз редактировалось Stilet; 13.05.2015 в 08:50.
Neostat вне форума Ответить с цитированием
Старый 13.05.2015, 10:04   #5
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Если вам можно пользоваться LINQ, то думаю и Point + Vector тоже сойдут.
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на массив MrRifleman Общие вопросы C/C++ 2 01.04.2012 13:55
задача на массив. malyshka2202 Паскаль, Turbo Pascal, PascalABC.NET 0 12.12.2011 16:02
Задача на массив С++ zaki Помощь студентам 0 12.06.2011 11:11
Задача.Массив Fender92 Паскаль, Turbo Pascal, PascalABC.NET 1 17.03.2011 12:30
Задача на массив foxzibit123 Паскаль, Turbo Pascal, PascalABC.NET 4 25.07.2010 21:16