Разбираюсь в коде С#
Есть задачка: На плоскости задано множество точек А и точка 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("Троек нет");
}
}
}
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
Удали код и напиши заново. Красиво, понятно.
Меня интересует не это в данной ситуации. Сначала работоспособность, а потом - оформление.
Да много чего: имена переменных, вложенные циклы и вложенные в них же условия. Мало кто станет трейсить код в уме и угадывать, что в нём происходит.Проще всё удалить и написать заново, чтобы было понятно и себе, и другим.
Код:
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("Троек нет");
}
}
}
}
}
}
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("Троек нет");
}
}
}
}
}
}
Круто. Теперь, когда есть комментарии, ты и сам понимаешь, как работает алгоритм и можешь его исправить, так? Ведь проблема была в том, что ты запутался в алгоритме. Теперь-то она решена.
Я затрудняюсь его доработать, поэтому и спрашиваю здесь. Вы бы могли мне помочь его довести до ума?
Смотри