Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 1
Регистрация: 26.12.2011
Сообщений: 46

Вывести на ребрах их вес

29.12.2011, 16:04. Показов 962. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В теме этот вопрос уже поднимался, но ответа так и не поступило.
Что неправильно в этой программе? Несколько весов выводится верно - посередине, а несколько - где-то в стороне или выше.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for(int i=1; i<StringGrid1->ColCount; i++)
  for(int j=i; j<StringGrid1->ColCount; j++)
    if(  Form1->StringGrid1->Cells[i][j] != 0) {
      if(koortoch[i].x == koortoch[j].x) { // если ребро вертикально 
        tx = koortoch[j].x;
        ty = (koortoch[j].y + koortoch[i].y)/2;
        Form1->Image1->Canvas->TextOutA(tx,ty,Form1->StringGrid1->Cells[i][j]);
      }
      if(koortoch[i].y == koortoch[j].y) { //если ребро горизонтально
        ty = koortoch[j].y;
        tx = (koortoch[j].x + koortoch[i].x)/2;
        Form1->Image1->Canvas->TextOutA(tx,ty,Form1->StringGrid1->Cells[i][j]);
      }
      else {
        ty = (koortoch[j].y + koortoch[i].y)/2;
        tx = (koortoch[j].x + koortoch[i].x)/2;
        Form1->Image1->Canvas->TextOutA(tx,ty,Form1->StringGrid1->Cells[i][j]);
      }
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.12.2011, 16:04
Ответы с готовыми решениями:

Вывести список пассажиров, вес которых превышает средний вес
Здравствуйте. Необходимо вывести список пассажиров, вес которых превышает средний вес. не могли бы вы подсказать что не так (всё...

Вывести список спортсменов моложе 25 лет, чей вес превышает 70 килограмм. Вывести отдельно мужчин и женщин
Здравствуйте, помогите, пожалуйста. Составить список участников соревнований из 10 человек с заданным структурным типом. Вывести список в...

Избавиться от рубцов на ребрах куба
Здравствуйте! Заметил при работе с Unity следующую деталь: при определенном ракурсе, на ребрах куба можно заметить &quot;рубцы&quot;,...

5
1 / 1 / 1
Регистрация: 26.12.2011
Сообщений: 46
29.12.2011, 17:10  [ТС]
Из головы вылетело: вот сам проект, с большой долей вероятности допускаю, что там может быть косяк с переменными...
Завтра программу сдавать, это единственная нерешенная проблема(( Помогите, пожалуйста(
Вложения
Тип файла: rar Krr.rar (2.3 Кб, 8 просмотров)
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
29.12.2011, 22:44
Цитата Сообщение от Karkat Посмотреть сообщение
Из головы вылетело: вот сам проект
Вы неправильно проект выложили, самое главное забыто: Курсач\Новая папка\Новая папка\Unit1(.cpp && .dfm && .h)
Лучше текст весь выложите, проще будет...
0
1 / 1 / 1
Регистрация: 26.12.2011
Сообщений: 46
30.12.2011, 13:09  [ТС]
BRcr, черт, точно... Хотя в общем-то уже все, сам разобрался и работу сдал
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
30.12.2011, 15:33
Karkat, разобрался - покажите результат, может быть интересно другим участникам.
0
1 / 1 / 1
Регистрация: 26.12.2011
Сообщений: 46
30.12.2011, 16: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
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
181
182
183
184
185
186
//---------------------------------------------------------------------------
 
#include <vcl.h>
 #include <algorithm>
#pragma hdrstop
#include <vector>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
using namespace std;
TForm1 *Form1;
 
int a, b, c, d;
TPoint koortoch[50];   //массив точек
int n; //счетчик текущей вершины
int versh=-1; //понадобится нам для обработки различных ситуаций при нажатии мыши
const int N = 30;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
if (Button==0)//если нажата правая кнопка мыши
{
Image1->Canvas->Pen->Width = 10;//радиус наших шариков
Image1->Canvas->TextOut(X+15,Y,IntToStr(n+1)); //выводится созданный по счету шарик
koortoch[n]=Point(X,Y);    //массив точек
n++; //увеличиваем номер вершины
Form1->StringGrid1->ColCount=n+1;//количество столбцов матр. смежности увеличивается
Form1->StringGrid1->RowCount=n+1; //количество строк матр. смежности увеличивается
 
for(int i=0;i<=n;i++)//в цикле проставляем номера столбцов и строк
{
Form1->StringGrid1->Cells[0][i]=i;
Form1->StringGrid1->Cells[i][0]=i;
}
 
Image1->Canvas->Pen->Color = clHighlight;//устанавливаем цвет вершин
Image1->Canvas->Ellipse(X,Y,X+10,Y+10); //рисуем эллипс
}
 
if (Button==1)//если нажата левая кнопка мыши
{
 if (versh==-1)//если пока не запомнили ни одну из вершин
  {
   for(int i=0;i<n;i++) //проверяем попал ли щелчок мыши на какую-то из вершин
    if (X<koortoch[i].x+10&&X>koortoch[i].x-10&&Y<koortoch[i].y+10&&Y>koortoch[i].y-10)
     {
     versh=i;//если попали, то запоминаем вершину по которой щелкнули
     break;
     }
  }
  else //если по одной из вершин уже раннее щелкнули(запомнили), то
  {
   int toversh=-1;
   for(int i=0;i<n;i++)//проверяем не попал ли щелчок на одну из вершин
    if (X<koortoch[i].x+10&&X>koortoch[i].x-10&&Y<koortoch[i].y+10&&Y>koortoch[i].y-10)
     {
     toversh=i;//если попал, то соединяем вершины
     break;
     }
   if ((toversh!=-1)&&(versh!=toversh))//если щелкнули сначала по одной, а потом по другой вершине
   {
   //по номеру вершины узнаем ее конкретные координаты x и y
  Image1->Canvas->MoveTo(koortoch[versh].x,koortoch[versh].y);
 
  Image1->Canvas->Pen->Width = 1;//ширина линии , которой соединяем вершины
//рисуем линию между вершинами по которым щелкнули мышкой
  Image1->Canvas->LineTo(koortoch[toversh].x,koortoch[toversh].y);
 
  //заполняем матрицу смежности:
  Form1->StringGrid1->Cells[versh+1][toversh+1]=1;
  Form1->StringGrid1->Cells[toversh+1][versh+1]=1;
  versh=-1;
   }
  }
}
for(int i=1; i<Form1->StringGrid1->ColCount; i++)
    for(int j=1; j<Form1->StringGrid1->RowCount; j++)
                if(    Form1->StringGrid1->Cells[i][j]!=1)
                         Form1->StringGrid1->Cells[i][j]=0;
 
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
Image1->Picture=NULL;
Image1->Canvas->Rectangle(0,0,Width,Height);
        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Image1->Picture=NULL;
 Image1->Canvas->Rectangle(0,0,Width,Height);
 for(int i=0;i<n+1;i++)
 for(int j=0;j<n+1;j++)
 StringGrid1->Cells[j][i]=""; //в цикле очищаем матрицу смежности
 n=0;//обнуляем счетчик вершин
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 
int m = 50;
vector < pair < int, pair<int,int> > > g (m); // вес; вершина 1; вершина 2
int cost = 0;
 
 
// переписываем значения из StringGrid в структуру вектор
int k = 0;
for(int i=1; i<Form1->StringGrid1->ColCount; i++)
    for(int j=i; j<Form1->StringGrid1->ColCount; j++)
        if(Form1->StringGrid1->Cells[i][j] != NULL)
        {
            g[k].first = StrToInt(Form1->StringGrid1->Cells[i][j]);
            g[k].second.first = i;
            g[k].second.second = j;
            k++;
        };
// сортируем полученный массив
sort (g.begin(), g.end());
// создаем идентификатор поддерева
vector<int> tree_id (n);
// и присваиваем каждому поддереву номер
for (int i=0; i<n; ++i)
    tree_id[i] = i;
 
for (int i=0; i<m; ++i)
{
    int a = g[i].second.first-1;
    int b = g[i].second.second-1;
    int l = g[i].first;
 
 
    if (tree_id[a] != tree_id[b]) //проверяем идентификационные номера двух вершин
    {
        cost += l;
 
        int old_id = tree_id[b]; //номер компоненты последней вершины
        int new_id = tree_id[a];  //номер компоненты первой вершины из двух
        for (int j=0; j<n; ++j)
            if (tree_id[j] == old_id)
            {
                                Image1->Canvas->Pen->Color = clBlue;
                                Image1->Canvas->Pen->Width = 3;
                Image1->Canvas->MoveTo(koortoch[a].x, koortoch[a].y);
                Image1->Canvas->LineTo(koortoch[b].x, koortoch[b].y);
 
                tree_id[j] = new_id;
            };
    }
}
    Form1->ListBox1->Items->Append("Вес остовного дерева:");
    Form1->ListBox1->Items->Append(IntToStr(cost));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
 for(int i=1; i<Form1->StringGrid1->ColCount; i++)
        for(int j=1; j<Form1->StringGrid1->ColCount; j++)
        if(  Form1->StringGrid1->Cells[i][j]!=0)
                Form1->StringGrid1->Cells[i][j] = Form1->StringGrid1->Cells[j][i];
 
 for(int i=1; i<Form1->StringGrid1->ColCount; i++)
    for(int j=1; j<Form1->StringGrid1->RowCount; j++)
                if(  Form1->StringGrid1->Cells[i][j]!=0)
                {
                        a = koortoch[i-1].x;
                        b = koortoch[i-1].y;
                        c = koortoch[j-1].x;
                        d = koortoch[j-1].y;
                        Image1->Canvas->TextOut((a+c)/2,(b+d)/2,Form1->StringGrid1->Cells[i][j]);//вывод веса на ребрах
                };
 
 
}
//---------------------------------------------------------------------------
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.12.2011, 16:15
Помогаю со студенческими работами здесь

Сумма чисел на ребрах пирамиды
В каждой вершине треугольной пирамиды написано число. На каждом ребре написана сумма чисел, стоящих на его концах. Известно, что сумма...

Вывести вес частей яблока
Было яблоко. Его разделили на две равные части. Потом каждую из его частей еще разделили не две равные части и такие действия (деление...

Вывести название и вес выбранных предметов
Имеются сведения о багаже пассажира. Всего предметов N. Выбрать из заданных предметов любые такие, чтобы их суммарный вес не превышал 30...

В файл записаны фамилии и вес людей.Изменить вес каждого человека на з% . Нужно реализовать в МатЛабе
В файл записаны фамилии и вес людей.Изменить вес каждого человека на з% . Нужно реализовать в МатЛабе.

Определить, на каком дне рождения вес съеденной пищи превысит собственный вес Винни – Пуха
На каждом следующем дне рождения Винни – Пух съедает столько же пищи, сколько на двух предыдущих. На двух первых днях рождения у Пятачка и ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru