Форум программистов, компьютерный форум CyberForum.ru

Определить, сколько может быть построено квадратов с вершинами в заданых точках - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ как добавить в код промежуточный результат? http://www.cyberforum.ru/cpp-beginners/thread730849.html
Нужно сделать так, чтобы программа выдавала промежуточный результат - к примеру, если число 100 (8х8 + 6х6) - чтобы это было выведено на экран (чтобы юзеру не пришлось считать в уме и проверять) + исправить - в ряде чисел, которые выдает программа, не должно быть 1 (не является суммой квадратов двух нат. чисел) //Дан интервал натуральных чисел . Напечатать на экране в все те // числа,...
C++ Переписать с языка с# на с++ Добрый день. Прошу помочь переписать программу с языка с# язык с++ Ниже мой исходник на с# using System; using System.Collections.Generic; using System.Windows.Forms; using System.Drawing; using System.Threading; public delegate void Del(bool z); public class First : Form http://www.cyberforum.ru/cpp-beginners/thread730831.html
C++ Вирус способный клонировать себя в Windows
Требуется создать класс объектов типа «файлы, которые способны клонировать себя (размножаться) в файловой системе Windows, меняя при этом своё имя» Возможно у кого-то есть готовые варианты или хотябы что-то может посоветовать?
C++ Как записать массив в файл в виде матрицы?
Объявить квадратные матрицы A,B,C,D размерностью 3х3 элемента, заполнить их случайными значениями в диапазоне -100..100. Вычислить матрицу E=A*B+C*D (сумму и произведение матриц определять сложением и произведением соответствующих элементов матриц). В программе определить функции сложения и произведения матриц. Полученную в результате матрицу записать в файл. #include <stdio.h> #include...
C++ Преобразовать все строки массива к нижнему регистру http://www.cyberforum.ru/cpp-beginners/thread730810.html
Преобразовать все строки массива к нижнему регистру
C++ частоты встречаемости английских символов в файле Напишите программу, которая определяет частоты встречаемости английских символов в файле подробнее

Показать сообщение отдельно
zerO2hacK
1 / 1 / 0
Регистрация: 06.03.2012
Сообщений: 72
14.12.2012, 22:34  [ТС]     Определить, сколько может быть построено квадратов с вершинами в заданых точках
Wolkodav,
ща я допилю свой вар-т и скину код. листы не буду использовать, хочу чеб побольше было писанины, побольше строк.

Добавлено через 1 час 15 минут
вот что я понял...есть вектор - расстояние между двумя точками. если есть этот вектор, то с двух сторон от него(справа/слева или сверху/снизу) есть два квадрата. остальные точки можно расчитать просто с помощью длинны этого вектора.

весь код:
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
    struct point{//структура для координат точек
        int x;
        int y;
    } iPoint[10];
    struct vector{//ст-ра векторов - расстояние м\у точками ???
        int begin;//начало вектора
        int end;//конец
        int line;//отступ от оси, паралельно которой распаложен //new
        int length;//длинна вектора(из большего - меньшее)
        int amount;//сколько всего таких векторов
        char axis[1];//вдлоль какой оси
        char axisLine[1];//перпендикулярно какаой оси //new
    } iVector[10],iVecAmount;
    struct squares{
        int amount;//кол-во квадратов
        char numbers[4];//номера точек, образ. этот квадрат
        //координаты
        point first;
        point second;
        point third;
        point fourth;
    } iSquare[20],iSquAmount;
    printf("Введите кол-во точек(до 10): ");
    int points;
    scanf("%i",&points);
    //заполняем массив точек
    for (int i=0, numb=1; i<points; i++){
        printf("\nВведите через пробел координаты %iй точки (x y): ",i+1);
        scanf("%i %i",&iPoint[i].x,&iPoint[i].y);
        //strcpy(iPoint[i].num,"");
    }
    //заполняем массив векторов
    for (int j=0/*для вектора*/, i=0; i<points-1;  i++){
        for (int k=i+1; k<points-1; k++){
            if(iPoint[i].x == iPoint[k].x){//вдоль y
                iVector[j].length=(iPoint[i].y>iPoint[k].y)?(iPoint[i].y-iPoint[k].y):(iPoint[k].y-iPoint[i].y);//вычисляем длинну вектора
                iVector[j].begin=(iPoint[i].y>iPoint[k].y)?iPoint[i].y:iPoint[k].y;//присваиваем начало вектора
                iVector[j].end=(iPoint[i].y<iPoint[k].y)?iPoint[i].y:iPoint[k].y;//конец
                iVector[j].line=iPoint[i].x;
                strcpy(iVector[j].axis,"y");//указываем параллельно какой оси расположен вектор
                strcpy(iVector[j].axisLine,"x");//указываем перпендикулярно какаой оси расположен вектор
                j++;
            }
            if(iPoint[i].y == iPoint[k].y){//вдоль x
                iVector[j].length=(iPoint[i].x>iPoint[k].x)?(iPoint[i].x-iPoint[k].x):(iPoint[k].x-iPoint[i].x);
                iVector[j].begin=(iPoint[i].x>iPoint[k].x)?iPoint[i].x:iPoint[k].x;
                iVector[j].end=(iPoint[i].x<iPoint[k].x)?iPoint[i].x:iPoint[k].x;
                iVector[j].line=iPoint[i].y;
                strcpy(iVector[j].axis,"x");
                strcpy(iVector[j].axisLine,"y");//указываем перпендикулярно какаой оси расположен вектор
                j++;
            }
            iVecAmount.amount=j;
        }
    }
    //ищем квадраты и заполнем соответствующий массив
    for (int i=0, j=0; i<iVecAmount.amount; i++){
        if (iVector[i].axis == "y"){
            //находим координаты вершин квадрата в след. порядке:
            //1--2
            //|  |
            //4--3
            //влево от вектора
            iSquare[j].first.x=iVector[i].line-iVector[i].length;
            iSquare[j].first.y=iVector[i].begin;
            iSquare[j].second.x=iVector[i].line;
            iSquare[j].second.y=iVector[i].begin;
            iSquare[j].third.x=iVector[i].line;
            iSquare[j].third.y=iVector[i].end;
            iSquare[j].fourth.x=iVector[i].line-iVector[i].length;
            iSquare[j].fourth.y=iVector[i].end;
            //находим точки, образовавшие данный квадрат
            //?????
            j++;
            //вправо от вектора
            iSquare[j].first.x=iVector[i].line;
            iSquare[j].first.y=iVector[i].begin;
            iSquare[j].second.x=iVector[i].line+iVector[i].length;
            iSquare[j].second.y=iVector[i].begin;
            iSquare[j].third.x=iVector[i].line+iVector[i].length;
            iSquare[j].third.y=iVector[i].end;
            iSquare[j].fourth.x=iVector[i].line;
            iSquare[j].fourth.y=iVector[i].end;
            //????
            j++;
        }
        if (iVector[i].axis == "x"){
            //вверх от вектора
            iSquare[j].first.x=iVector[i].begin;
            iSquare[j].first.y=iVector[i].line+iVector[i].length;
            iSquare[j].second.x=iVector[i].end;
            iSquare[j].second.y=iVector[i].line+iVector[i].length;
            iSquare[j].third.x=iVector[i].end;
            iSquare[j].third.y=iVector[i].line;
            iSquare[j].fourth.x=iVector[i].begin;
            iSquare[j].fourth.y=iVector[i].line;
            //находим точки, образовавшие данный квадрат
            //?????
            j++;
            //вниз от вектора
            iSquare[j].first.x=iVector[i].begin;
            iSquare[j].first.y=iVector[i].line;
            iSquare[j].second.x=iVector[i].end;
            iSquare[j].second.y=iVector[i].line;
            iSquare[j].third.x=iVector[i].end;
            iSquare[j].third.y=iVector[i].line-iVector[i].length;
            iSquare[j].fourth.x=iVector[i].begin;
            iSquare[j].fourth.y=iVector[i].line-iVector[i].length;
            //????
            j++;
        }
        iSquAmount.amount=j;
    }
    for (int i=0; i<points; i++){
        printf("%iя точка, координаты - X:%i Y:%i\n",i+1,iPoint[i].x,iPoint[i].y);
    }
    for (int i=0; i<iVecAmount.amount; i++){
        printf("Длинна %iго вектора - %i - его координаты - %c1:%i %c2:%i %c2:%i\n",i+1,iVector[i].length,iVector[i].axis,iVector[i].begin,iVector[i].axis,iVector[i].end, iVector[i].axisLine, iVector[i].line);
    }
    for (int i=0; i<iSquAmount.amount; i++){
        printf("координаты %iго квадрата:\n");
        printf("\tX1:%i Y1:%i; X2:%i Y2:%i;\tX3:%i Y3:%i; X4:%i Y4:%i",iSquare[i].first.x,iSquare[i].first.y,iSquare[i].second.x,iSquare[i].second.y,iSquare[i].third.x,iSquare[i].third.y,iSquare[i].fourth.x,iSquare[i].fourth.y);
    }
Добавлено через 11 минут
не правильно как то тут заполняется:

C++
1
2
3
strcpy(iVector[j].axis,"x");
...
strcpy(iVector[j].axis,"y");
Добавлено через 1 минуту
выводит непонятно что, и изза этого не верно проверяется условие:
C++
1
2
3
iVector[i].axis == "x")
...
(iVector[i].axis == "y")
Добавлено через 33 минуты
вместо:
C++
1
strcpy(iVector[j].axis,"x");
сделал:
C++
1
iVector[j].axis[0]='x';
теперь все ок. квадраты есть!))
осталось с этим разобраться:

Цитата Сообщение от zerO2hacK Посмотреть сообщение
ввожу четыре точки, где по-сути должно быть 3 вектора. но изза Код C++1
for (int k=i+1; k<points-1; k++)points-1...один вар-т не рассматривается....как быть?
Добавлено через 1 час 0 минут
все! нашел ошибку
C++
1
2
    for (int j=0/*для вектора*/, i=0; i<points-1;  i++){
        for (int k=i+1; k<points-1; k++){
я зачем то и во втором цикле -1 поставил. убрал. все норм ищет)

Добавлено через 1 минуту
теперь осталось только выявить точки, с помощью которых был образован квадрат. пока что голова вообще не соображает.
 
Текущее время: 22:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru