Форум программистов, компьютерный форум 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
15.12.2012, 18:58  [ТС]     Определить, сколько может быть построено квадратов с вершинами в заданых точках
Цитата Сообщение от Wolkodav Посмотреть сообщение
векторах хранятся начало и конец вектора
начало и конец - это только координаты вектора, то бишь координаты точек. а номера точек, я так понял, имеется ввиду порядок, в каком вводишь вначале программы. у меня есть одна идея, как напишу, код сюда.

Добавлено через 1 час 12 минут
вот и все

добавил несколько переменых во все структуры: в точки - номер точки; в вектора - номера точек, образ. данный вектор; в квадраты - те же точки, равные точкам, образ. вектор, образовавший два квадрата.

весь код:
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include "stdafx.h"
#include <locale.h>
#include <iostream>
 
void main()
{
    setlocale(0,"");
    struct point{//структура для координат точек
        int numb;//номер точки
        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
        //номера точек, обар. данный вектор
        int iNumber1;
        int iNumber2;
    } iVector[10],iVecAmount;
    struct squares{
        int amount;//кол-во квадратов
        //координаты
        point first;
        point second;
        point third;
        point fourth;
        //номера точек, обар. данный квадрат
        int iNumber1;
        int iNumber2;
    } iSquare[20],iSquAmount;
    printf("Введите кол-во точек(до 10): ");
    int points;
    scanf("%i",&points);
    //заполняем массив точек
    for (int i=0; i<points; i++){
        printf("\nВведите через пробел координаты %iй точки (x y): ",i+1);
        scanf("%i %i",&iPoint[i].x,&iPoint[i].y);
        iPoint[i].numb=i+1;
    }
    //заполняем массив векторов
    for (int j=0/*для вектора*/, i=0; i<points-1;  i++){
        for (int k=i+1; k<points; 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;
                iVector[j].iNumber1=iPoint[i].numb;
                iVector[j].iNumber2=iPoint[k].numb;
                iVector[j].axis[0]='y';//указываем параллельно какой оси расположен вектор
                iVector[j].axisLine[0]='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;
                iVector[j].iNumber1=iPoint[i].numb;
                iVector[j].iNumber2=iPoint[k].numb;
                iVector[j].axis[0]='x';
                iVector[j].axisLine[0]='y';//указываем перпендикулярно какаой оси расположен вектор
                j++;
            }
            iVecAmount.amount=j;
        }
    }
    //ищем квадраты и заполнем соответствующий массив
    for (int i=0, j=0; i<iVecAmount.amount; i++){
        if (iVector[i].axis[0] == '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;
            //находим точки, образовавшие данный квадрат(те же, что и вектор)
            iSquare[j].iNumber1=iVector[i].iNumber1;
            iSquare[j].iNumber2=iVector[i].iNumber2;
            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;
            iSquare[j].iNumber1=iVector[i].iNumber1;
            iSquare[j].iNumber2=iVector[i].iNumber2;
            j++;
        }
        if (iVector[i].axis[0] == '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;
            //находим точки, образовавшие данный квадрат
            iSquare[j].iNumber1=iVector[i].iNumber1;
            iSquare[j].iNumber2=iVector[i].iNumber2;
            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;
            iSquare[j].iNumber1=iVector[i].iNumber1;
            iSquare[j].iNumber2=iVector[i].iNumber2;
            j++;
        }
        iSquAmount.amount=j;
    }
    for (int i=0; i<points; i++){
        printf("%iя точка, координаты - (%i,%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 %c:%i\n",i+1,iVector[i].length,iVector[i].axis[0],iVector[i].begin,iVector[i].axis[0],iVector[i].end, iVector[i].axisLine[0], iVector[i].line);
    }
    printf("\nПолучено квадратов - %i шт.",iSquAmount.amount);
    for (int i=0; i<iSquAmount.amount; i++){
        printf("\nкоординаты %iго квадрата:\n",i+1);
        printf("\t(%i,%i); (%i,%i); (%i,%i); (%i,%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);
        printf("\n\tэтот квадрат образован %iй и %iй точками",iSquare[i].iNumber1,iSquare[i].iNumber2);
    }
    printf("\n");
    system("pause");
}
получился громоздким, но это ничего. это хорошо. ибо нужно как можно больше строк. теперь возьмусь за функции)

http://s1.hostingkartinok.com/upload...1bfb22a6ac.png
 
Текущее время: 18:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru