Форум программистов, компьютерный форум, киберфорум
Наши страницы

Поля структуры внутри класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вывести в консоль оцифрованную координатную сетку http://www.cyberforum.ru/cpp-beginners/thread1311370.html
Написать программу, которая выводит на экран оцифрованную координатную сетку. ( в консоли ) Помогите пожалуйста сделать задачу.
C++ Каждый элемент матрицы заменить суммой элементов подматрицы, расположенной слева вверху Нужно решение и если не сложно объяснить что да как. Задачи положено переписывать! http://www.cyberforum.ru/cpp-beginners/thread1311361.html
Консольный HASH под *nix C++
Приветствую! Есть задачка выдавать некий HASH в консоли. по сути реализация my_func(oper,in_str): string * oper = 1. - шифрование * oper = 2. - дешифрование { constant hex_key.
C++ После редактирования структуры не выводится первая строка
После редактирования структуры не выводится первая строка... ? Структура struct Trafic { int Trafic_id; int dogovor_id; int kolichistvo ; unsigned date ;
C++ Написать программу: решение СНУ методом итераций http://www.cyberforum.ru/cpp-beginners/thread1311338.html
Решить систему нелинейных уравнений с точностью до 0.001 методом итераций: tg xy=x**2 0.7x**2+2y**2=1 Программа есть, не понимаю, почему он не считает и не ругается. Помогите пожалуйста! :cry:...
C++ Дан двумерный массив с размерностью n, вывести все отрицательные значения Дан двумерный массив с размерностью n, вывести все отрицательные значения. подробнее

Показать сообщение отдельно
greendaizer
0 / 0 / 0
Регистрация: 20.01.2013
Сообщений: 70

Поля структуры внутри класса - C++

26.11.2014, 11:16. Просмотров 274. Ответов 4
Метки (Все метки)

Здравствуйте, почему при выполнении метода movingNode поля элемента структуры node (координаты x и y) не меняются?

Метод:

C++
1
2
3
4
5
void movingNode(node &node1, double dx, double dy)
    {
        node1.x += dx;
        node1.y += dy;
    }
Программа целиком:

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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <cstdlib>
#include <ctime>
#include <math.h>
 
using namespace std;
 
class graph
{
public:
    struct node
    {
        int id;
        double radius; 
        double x;
        double y;
        int degree;
        list <int> arclist;
    };
 
    vector <node> nodes;
    int numberOfNodes;
    int numberOfArcs;
    bool connected;
    //double generalRadius;
    //double instantOfTime;
 
    node creatingNode(int inId)
    {
        node outNode;
        outNode.id = inId;
        outNode.degree = 0;
        outNode.radius = rand() % 10;
        outNode.x = rand() % 10;
        outNode.y = rand() % 10;
        return outNode;
    }
 
    void addingArc(node &node1, node &node2)
    {
        node1.arclist.push_back(node2.id);
        node1.degree++;
        node2.arclist.push_back(node1.id);
        node2.degree++;
        numberOfArcs++;
    }
 
    double calculatingDistance(node &node1, node &node2) // Вычисляет расстояние между вершинами u и v
    {
        return sqrt((node2.x - node1.x)*(node2.x - node1.x) + (node2.y - node1.y)*(node2.y - node1.y));
    }
 
    bool arcExist(node &node1, node &node2) // Проверяем, достаёт ли сигнал одной вершины до другой
    {
        if (node2.radius >= calculatingDistance(node1, node2) || node1.radius >= calculatingDistance(node1, node2))
            return true;
        else
            return false;
    }
 
    bool isConnected()
    {
        for (int i = 0; i < nodes.size(); i++)
        if (nodes[i].degree == 0)
            return false;
        return true;
    }
 
    graph()
    {
        numberOfNodes = rand() % 10;
        bool flag1=true;
 
        for (int i = 0; i < numberOfNodes; i++)
        {
            node cNode = creatingNode(i);
            nodes.push_back(cNode);
        }
            
        for (int i = 0; i < nodes.size(); i++)
        for (int j = 0; j < nodes.size(); j++)
        if (arcExist(nodes[i], nodes[j]) && i < j)
            addingArc(nodes[i], nodes[j]);  
 
        connected = isConnected();
 
    };
    
    bool findingArc(node &node1, node &node2)
    {
        for (list<int>::iterator it = node1.arclist.begin(); it != node1.arclist.end(); it++)
        if (*it == node2.id)
            return true;
 
        return false;
    }
 
    node gettingNode(int id1)
    {
        for (int i = 0; i < nodes.size(); i++)
        if (nodes[i].id == id1)
            return nodes[i];
    }
 
    void deleteArc(node &node1, node &node2)
    {
        node1.arclist.erase(find(node1.arclist.begin(), node1.arclist.end(), node2.id));
        node2.arclist.erase(find(node2.arclist.begin(), node2.arclist.end(), node1.id));
    }
 
    void movingNode(node &node1, double dx, double dy)
    {
        node1.x += dx;
        node1.y += dy;
    }
 
    void deleteNode(node &node1)
    {
        for (int i = 0; i < nodes.size(); i++)
        if (i == node1.id)
            nodes.erase(nodes.begin()+i);
 
        //Надо удалить эту вершину из всех арклистов, т.е. все рёбра, которые входят в неё.
    }
 
    void printingGraph()
    {
        cout << "Вершины:" << endl;
        for (int i = 0; i < nodes.size(); i++)
            cout << nodes[i].id << " радиус: " << nodes[i].radius << " координаты: " << nodes[i].x << " " << nodes[i].y << " степень: " << nodes[i].degree << endl;
        cout << "Рёбра:" << endl;
 
        for (int i = 0; i < nodes.size(); i++)
        for (list<int>::iterator it = nodes[i].arclist.begin(); it != nodes[i].arclist.end(); it++)
        {
            cout << nodes[i].id << " " << *it << endl;
        }   
    }
 
    void printingArclist(node &node1)
    {
        for (list<int>::iterator it = node1.arclist.begin(); it != node1.arclist.end(); it++)
        {
            cout << *it << " " << endl;
        }
    }
};
 
int main()
{
    srand(time(NULL));
    setlocale(LC_ALL, "Russian");
    graph aleshenka;
    int b=0;
    /*for (int i = 0; i < 10000; i++)
    {
        graph p;
        if (p.connected)
            b++;
    }
    cout << b << endl; */
    aleshenka.printingGraph();
//    aleshenka.deleteNode(aleshenka.gettingNode(1));
//  cout << aleshenka.gettingNode(2).radius << endl;
/*  if (aleshenka.arcExist(aleshenka.gettingNode(1), aleshenka.gettingNode(3)))
    {
        aleshenka.deleteArc(aleshenka.gettingNode(1), aleshenka.gettingNode(3));
 
        aleshenka.printingArclist(aleshenka.gettingNode(1));
    }
*/
    aleshenka.movingNode(aleshenka.gettingNode(2), 3.0, 4.0);
    aleshenka.printingGraph();
  
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru