Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Разбираюсь в коде С#

79K
18 ноября 2013 года
alex7776
13 / / 18.11.2013
Всем привет!

Есть задачка: На плоскости задано множество точек А и точка d вне его. Подсчитать количество различных неупорядоченных троек точек a, b, c из А, для которых четырехугольник abcd является параллелограммом.

Я написал код с тремя вложенными циклами, но в них же и запутался. Помогите доработать код.


Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Tao.FreeGlut;
using Tao.OpenGl;

namespace zadacha
{// На плоскости задано множество точек А  и точка  d  вне его.
    // Подсчитать  количество  различных неупорядоченных троек точек a, b, c из А,  
    // для которых четырехугольник  abcd  является параллелограммом.
    class Program
    {
        static float x1, x2, x3, y1, y2, y3;
        static float x4, y4;

        static void Main(string[] args)
        {
            float[] x;
            float[] y;
            x = new float[4];
            y = new float[4];
            int i, j, k, n=10;
            string line;
           
            char[] delimited = new char[] { ' ', ',', '.' };

            using (StreamReader f = new StreamReader("test4.txt"))
                while ((line = f.ReadLine()) != null)
            {                          
                    x = new float[n];
                    y = new float[n];
                    i = 0;

                   
                    {
                        string[] nums = line.Split(delimited, StringSplitOptions.RemoveEmptyEntries);
                        x[i] = float.Parse(nums[0]);
                        y[i] = float.Parse(nums[1]);
                    }
                    for (i = 0; i < n - 1; i++)
                    {
                        for (j = 0; j < n - 1; j++)
                        {
                            if (i == j)
                                continue;
                            for (k = 0; k < n - 1; k++)
                            {
                                if ((i == k) && (j == k))
                                    continue;
                                i++;


                                if (i != 0)
                                    Console.WriteLine("Количество троек:{0}", i);
                                if (i == 0)
                                    Console.WriteLine("Троек нет");
}
}
}
Например, в файле находятся числа:
1 0
10 7
9 5
2 5
5 5
3 3
4 8
6 0
11 10
11 3
8 7
5 3
4 0

Ответ: Троек 2
414
18 ноября 2013 года
CassandraDied
763 / / 24.05.2012
Удали код и напиши заново. Красиво, понятно.
79K
18 ноября 2013 года
alex7776
13 / / 18.11.2013
А что в нем плохого (именно в оформлении)?

Меня интересует не это в данной ситуации. Сначала работоспособность, а потом - оформление.
414
18 ноября 2013 года
CassandraDied
763 / / 24.05.2012
Он неработает, потому что он непонятен. Непонятность алгоритма — частично следствие плохого оформления.
Цитата:
А что в нем плохого (именно в оформлении)?


Да много чего: имена переменных, вложенные циклы и вложенные в них же условия. Мало кто станет трейсить код в уме и угадывать, что в нём происходит.Проще всё удалить и написать заново, чтобы было понятно и себе, и другим.

79K
18 ноября 2013 года
alex7776
13 / / 18.11.2013
Соглашусь с Вами. Вот откомментил.

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Tao.FreeGlut;
using Tao.OpenGl;

namespace LabRab_5
{// На плоскости задано множество точек А  и точка  d  вне его.
    // Подсчитать  количество  различных неупорядоченных троек точек a, b, c из А,  
    // для которых четырехугольник  abcd  является параллелограммом.
    class Program
    {
        static int[] x, y;

        static void Main(string[] args)
        {


            int i = 0, k, n, s, j;
            string line;
            double a, b, c, d;
            char[] delimited = new char[] { ' ', ',', '.' };
            Console.WriteLine("Введите количество точек на плоскости");
            n = int.Parse(Console.ReadLine());
            x = new int[n];
            y = new int[n];
            using (StreamReader f = new StreamReader("test1.txt"))
            {   //пока файл не пуст, читаем строки
                while ((line = f.ReadLine()) != null)
                {//печатаем, что написали
                    Console.WriteLine(line);
                    // выделяем числа
                     string[] numbers = line.Split(delimited);
                    //занесение в массивы координат
                     x[i] = int.Parse(numbers[0]);
                    y[i] = int.Parse(numbers[1]);
                    i++;
                }
            }

            for (i = 0; i < n - 1; i++)
            {
                for (j = 0; j < n - 1; j++)
                {
                    if (i == j)
                        continue;
                    for (k = 0; k < n - 1; k++)
                    {
                        if ((i == k) || (j == k))
                            continue;
                        a = Math.Abs(x[i] - x[k]);
                        b = Math.Abs(x[j] - x[n]);
                        c = Math.Sqrt((x[j] - x[i]) * (x[j] - x[i]) + (y[j] - y[i]) * (y[j] - y[i]));
                        d = Math.Sqrt((x[n] - x[k]) * (x[n] - x[k]) + (y[n] - y[k]) * (y[n] - y[k]));
                        s = 0;
                        if ((y[k] == y[n]) && (y[i] == y[j]) && (a == b) && (c == d))
                            s++;
                        if (s != 0)
                            Console.WriteLine("Количество троек:{0}", s);
                        if (s == 0)
                            Console.WriteLine("Троек нет");
                    }
                }
            }
        }
    }
}
414
18 ноября 2013 года
CassandraDied
763 / / 24.05.2012
Круто. Теперь, когда есть комментарии, ты и сам понимаешь, как работает алгоритм и можешь его исправить, так? Ведь проблема была в том, что ты запутался в алгоритме. Теперь-то она решена.
79K
18 ноября 2013 года
alex7776
13 / / 18.11.2013
Я затрудняюсь его доработать, поэтому и спрашиваю здесь. Вы бы могли мне помочь его довести до ума?
446
18 ноября 2013 года
Meander
487 / / 04.09.2011
Смотри здесь, здесь или здесь, тоже похожие темы обсуждаются.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог