Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C] построение графа, рисунок графа 
:(
    Опции темы
DrWeb
Дата 1.12.2007, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 25.11.2007
Где: Украина, Донецк

Репутация: 1
Всего: 1



нужно нарисовать бесконтурный граф по матрице весов smile .Можно не код,а хотя бы алгоритм или навеять мысль smile 

реализовать надо на Turbo C++ 3.0

Это сообщение отредактировал(а) DrWeb - 1.12.2007, 01:05
PM MAIL WWW   Вверх
Kuvaldis
Дата 1.12.2007, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 32
Всего: 61




M
Kuvaldis
Не забываем указывать язык программирования в названии темы



--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
Puoar
Дата 1.12.2007, 06:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 10.11.2007

Репутация: 1
Всего: 1



Цитата(DrWeb @  1.12.2007,  01:04 Найти цитируемый пост)
реализовать надо на Turbo C++ 3.0

В чем сложность? Если не надо использовать графику то можно подумать...  

PM MAIL   Вверх
DrWeb
Дата 1.12.2007, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 25.11.2007
Где: Украина, Донецк

Репутация: 1
Всего: 1



нужно в графическом режиме нарисовать. я думал так: через rand создать массивы y-координат и х-координат.затем расставить точки по созданным координатам и соединить их линиями.надо подумать-у меня есть время до 6 декабря-дата когда надо сдать индивидуалку.строить граф не обязательно,но мне хочется это сделать.подскажите хотя бы алгоритм или ченить подобноеsmile
PM MAIL WWW   Вверх
Puoar
Дата 1.12.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 10.11.2007

Репутация: 1
Всего: 1



Ок я что-то подобное делал но в текстовом режиме просто точки расставлял по монитору, до шестого напишу сюда или в PM если не зделаешь...
PM MAIL   Вверх
DrWeb
Дата 1.12.2007, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 25.11.2007
Где: Украина, Донецк

Репутация: 1
Всего: 1



придумал 

Код

#include <graphics.h>
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>

int Gd=DETECT,Gm,ErrC;
int mx,my;
int maxnodes=20;

void init_graph();
void draw_graf();
int rnd(int,int);

int rnd(int a,int b)
{
 return a+abs(random(b-a+1));
}

void init_graph()
{
 clrscr();
 initgraph(&Gd,&Gm,"\drivers");
 ErrC=graphresult();
 if (ErrC!=grOk)
 {
  cout<<"Error:"<<grapherrormsg(ErrC);
  getch();
  exit(-1);
 }
 setbkcolor(BLACK);
 mx=getmaxx();
 my=getmaxy();
}

void draw_graf()
{
 int y_c[20],x_c[20],i,j,tmp;
 for (i=1;i<=maxnodes;i++)
 {
  tmp=rnd(15,200);
  for (j=1;j<=i;j++)
   if (tmp==x_c[j])
    tmp=rnd(15,200);
   x_c[i]=tmp;
 }
  for (i=1;i<=maxnodes;i++)
 {
  tmp=rnd(15,200);
  for (j=1;j<=i;j++)
   if (tmp==y_c[j])
    tmp=rnd(15,200);
  y_c[i]=tmp;
 }
 for (i=1;i<=maxnodes;i++)
  cout<<x_c[i]<<" ";
 cout<<endl;
 for (i=1;i<=maxnodes;i++)
  cout<<y_c[i]<<" ";
 for (i=1;i<=maxnodes;i++)
 {
  circle(x_c[i],y_c[i],2);
  if (i+1<=maxnodes)
   line(x_c[i],y_c[i],x_c[i+1],y_c[i+1]);
 }
}

main()
{
 clrscr();
 init_graph();
 draw_graf();
 getch();
 return 0;
}



ток теперь надо придумать как сделать чтобы рисунок нормально видно было smile 

Это сообщение отредактировал(а) DrWeb - 1.12.2007, 17:11
PM MAIL WWW   Вверх
DrWeb
Дата 1.12.2007, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 25.11.2007
Где: Украина, Донецк

Репутация: 1
Всего: 1



написал:строится граф по матрице весов дуг.осталось придумать как номера вершин расставить и направления,но основная работа сделана smile 
Код

#include <graphics.h>
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>

int Gd=DETECT,Gm,ErrC;
int mx,my;
int maxnodes=0;
int a[20][20];

void init_graph();
void draw_graf();
int rnd(int,int);

int rnd(int a,int b)
{
 return a+abs(random(b-a+1));
}

void init_graph()
{
 clrscr();
 initgraph(&Gd,&Gm,"\drivers");
 ErrC=graphresult();
 if (ErrC!=grOk)
 {
  cout<<"Error:"<<grapherrormsg(ErrC);
  getch();
  exit(-1);
 }
 setbkcolor(BLACK);
 mx=getmaxx();
 my=getmaxy();
}

void draw_graf()
{
 int y_c[20],x_c[20],i,j,tmp;
 int rad=2;
 for (i=1;i<=maxnodes;i++)
 {
  tmp=rnd(mx/2-100,mx/2+100);
  for (j=1;j<=i;j++)
   if (tmp==x_c[j])
    tmp=rnd(mx/2-100,mx/2+100);
  x_c[i]=tmp;
 }
 for (i=1;i<=maxnodes;i++)
 {
  tmp=rnd(my/2-100,my/2+100);
  for (j=1;j<=i;j++)
   if (tmp==y_c[j])
    tmp=rnd(my/2-100,my/2+100);
  y_c[i]=tmp;
 }
 for (i=1;i<=maxnodes;i++)
 {
  for (j=1;j<=maxnodes;j++)
   if (x_c[j]>x_c[j+1])
   {
    x_c[j]=x_c[j]+x_c[j+1];
    x_c[j+1]=x_c[j]-x_c[j+1];
    x_c[j]=x_c[j]-x_c[j+1];
   }
 }
 for (i=1;i<=maxnodes;i++)
 {
  if (x_c[i+1]-x_c[i]<=30)
   x_c[i+1]=x_c[i]+35;
 }
 x_c[1]=x_c[2]-35;
 for (i=1;i<=maxnodes;i++)
  cout<<x_c[i]<<" ";
 cout<<endl;
 for (i=1;i<=maxnodes;i++)
  cout<<y_c[i]<<" ";
 for (i=1;i<=maxnodes;i++)
  for (j=1;j<=maxnodes;j++)
 {
  setcolor(GREEN);
  circle(x_c[i],y_c[i],2);
  if (a[i][j]!=0)
   if (i+1<=maxnodes)
   {
    setcolor(BLUE);
    line(x_c[i],y_c[i],x_c[j],y_c[j]);
   }
 }
}

main()
{
 clrscr();
 cout<<"Enter maxnodes:";
 cin>>maxnodes;
 for (int i=1;i<=maxnodes;i++)
  for (int j=1;j<=maxnodes;j++)
  {
   cout<<"Enter a["<<i<<"]["<<j<<"] : ";
   cin>>a[i][j];
  }
 init_graph();
 draw_graf();
 getch();
 return 0;
}


PM MAIL WWW   Вверх
DrWeb
Дата 1.12.2007, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 25.11.2007
Где: Украина, Донецк

Репутация: 1
Всего: 1



чтобы расставить вершины я сделал.надо после нарисовки самой вершины дописать:
Код

char *p;
setcolor(RED);
outtextxy(x_c[i]-10,y_c[i],itoa(i,p,10));


вот mail где я генерирую матрицу
Код

main()
{
 clrscr();
 cout<<"Enter maxnodes:";
 cin>>maxnodes;
 for (int i=1;i<=maxnodes;i++)
  for (int j=1;j<=maxnodes;j++)
  {
   a[i][j]=rnd(0,3);
   cout<<a[i][j]<<" ";
  }
 init_graph();
 draw_graf();
 getch();
 return 0;
}



если вершин больше 9,то граф строитс,но прога сразу вылетает с ошибкой и компилятор вырубается.че не так?подскажите? smile

Добавлено @ 18:35
до меня дошло!! smile 
вот тут ошибка
Код

outtextxy(x_c[i]-10,y_c[i],itoa(i,p,10));


так надо smile 
Код

outtextxy(x_c[i]-10,y_c[i],itoa(i,p,50));


похоже свою проблему я сам и решил smile 

Это сообщение отредактировал(а) DrWeb - 1.12.2007, 19:48
PM MAIL WWW   Вверх
Puoar
Дата 3.12.2007, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 10.11.2007

Репутация: 1
Всего: 1



Цитата(DrWeb @  1.12.2007,  18:24 Найти цитируемый пост)
похоже свою проблему я сам и решил

+1 smile
Я так и не нашел тот исходник, но помню что основная проблема была с вычислением позиции всего графа  и каждой точки на плоскости(мониторе) процентном соотношении чтоб он весь вместился ...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0710 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.