Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2011, 09:27   #1
eddilou
 
Регистрация: 27.12.2010
Сообщений: 8
Вопрос Ошибка с меню

Здрасти всем, вот написал программу для рисования графов,
НО не пойму в чем проблема, выбрав 3 пункт, он начинает тупит в том плане что, когда доходит до выбора повторить ли, он виснет, т.е. нажать на ESC он выйдет а если любую иную то зависает, хотя после вызова 1 и 2 пункта все норм, подскажите в чем проблем?
вот программа
Код:
#include <graphics.h>
#include <math.h>
#include <dos.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
struct koord
 {
  int x;
  int y;
         };
void neorgraf()
{
 int N=0, M=0, i, j;
 clrscr();
 cleardevice();
 do
   {
    printf("Vvedite kolichestvo vershin: ");
    scanf("%d",&N);
    if(N<2) printf("Rebro ne mozhet soderzhat 0 ili 1 vershinu\n\n");
   } while(N<2);
 printf("Vvedite kolichestvo reber: ");
 scanf("%d",&M);
 clrscr();
 cleardevice();
 randomize();
 koord *p = new koord [N];
 for(i=0; i<N; i++)
    {
     p[i].x=random(250)+350;
     p[i].y=random(400)+50;
    }
 int **mtr;
 mtr=(int**)malloc(N*sizeof(int*));
 for(i=0; i<N; i++)
    { mtr[i]=(int*)malloc(M*sizeof(int));
      for(j=0; j<M; j++)
         {
          mtr[i][j]=random(2);
         }
    }
 char *x="X", *toch;
 for(i=0; i<N; i++)
    {
     setcolor(BLUE);
     circle(p[i].x, p[i].y, 4);
     setfillstyle(1,GREEN);
     floodfill(p[i].x, p[i].y, BLUE);
     setcolor(YELLOW);
     gcvt(i+1, 3, toch);
     outtextxy(p[i].x+6, p[i].y+3, x);
     outtextxy(p[i].x+15, p[i].y+3, toch);
    }
 int k;
 for(j=0; j<M; j++)
    {
     k=0;
     for(i=0; i<N; i++)
        {
         k+=mtr[i][j];
         if(k>2) mtr[i][j]=0;
        }
     for(i=0; i<N; i++)
        {
         if(k==1) mtr[i][j]=0;
        }
    }
 outtext("   ");
 for(j=0;j<M;j++)
    {
     setcolor(j+1);
     outtext("   g");
    }
 printf("\n");
 for(i=0;i<N; i++)
    {
     if(i<9) printf("X%d ",i+1);
     else    printf("X%d",i+1);
     for(j=0; j<M; j++)
        {
         printf("%4d", mtr[i][j]);
        }
     printf("\n");
    }
 int kn, kk;;
 for(j=0; j<M; j++)
    {
     k=0;kn=-1; kk=-1;
     for(i=0; i<N; i++)
        {
         if(kn==kk)
           {
            if(mtr[i][j]==1) kn=i;
           }
         else if (mtr[i][j]==1) kk=i;
           }
     if(kn!=-1 && kk!=-1)
       {
        setcolor(j+1);
        line(p[kn].x, p[kn].y, p[kk].x, p[kk].y);
       }
    }
 getch();
 delete p;
 closegraph();
}
eddilou вне форума Ответить с цитированием
Старый 23.04.2011, 09:29   #2
eddilou
 
Регистрация: 27.12.2010
Сообщений: 8
По умолчанию

вот продолжение т.к. огранич кол-во символов
Код:
void orgraf()
{
 int N=0, M=0, i, j;
 
 clrscr();
 cleardevice();
 do
   {
    printf("Vvedite kolichestvo vershin: ");
    scanf("%d",&N);
    if(N<2) printf("Duga ne mozhet soderzhat 0 ili 1 vershinu\n\n");
   } while(N<2);
 printf("Vvedite kolichestvo reber: ");
 scanf("%d",&M);
 clrscr();
 cleardevice();
 randomize();
 koord *p = new koord [N];
 for(i=0; i<N; i++)
    {
     p[i].x=random(250)+350;
     p[i].y=random(400)+50;
    }
 int **mtr;
 mtr=(int**)malloc(N*sizeof(int*));
 for(i=0; i<N; i++)
    { mtr[i]=(int*)malloc(M*sizeof(int));
      for(j=0; j<M; j++)
         {
          mtr[i][j]=random(3)-1;
         }
    }
 char *x="X", *toch;
 for(i=0; i<N; i++)
    {
     setcolor(BLUE);
     circle(p[i].x, p[i].y, 4);
     setfillstyle(1,GREEN);
     floodfill(p[i].x, p[i].y, BLUE);
     setcolor(YELLOW);
     gcvt(i+1, 3, toch);
     outtextxy(p[i].x+6, p[i].y+3, x);
     outtextxy(p[i].x+15, p[i].y+3, toch);
    }
 int k, one, two;
 for(j=0; j<M; j++)
    {
     k=0; one=-1; two=-1;
     for(i=0; i<N; i++)
        {
         if(mtr[i][j]==-1) k++;
         if(k==1) one=i;
         if(k==2) two=i;
         if(two!=-1) mtr[two][j]=1;
        }
     k=0; one=-1; two=-1;
     for(i=0; i<N; i++)
        {
         if(mtr[i][j]==1) k++;
         if(k==1) one=i;
         if(k==2) two=i;
         if(two!=-1) mtr[two][j]=-1;
        }
     k=0;
     for(i=0; i<N; i++)
        {
         if(mtr[i][j]==1 || mtr[i][j]==-1) k++;
         if(k>2) mtr[i][j]=0;
        }
     for(i=0; i<N; i++)
        {
         if(k==1) mtr[i][j]=0;
        }
    }
 outtext("   ");
 for(j=0;j<M;j++)
    {
     setcolor(j+1);
     outtext("   g");
    }
 printf("\n");
 for(i=0;i<N; i++)
    {
     if(i<9) printf("X%d ",i+1);
     else    printf("X%d",i+1);
     for(j=0; j<M; j++)
        {
         printf("%4d", mtr[i][j]);
        }
     printf("\n");
    }
  printf("\n\n");
  for(i=0;i<N; i++)
    {
     if(i<9) printf("X%d ",i+1);
     else    printf("X%d",i+1);
     for(j=0; j<M; j++)
        {
         if(mtr[i][j]==-1) printf("%4d", mtr[i][j]*(-1));
         else printf("%4d", mtr[i][j]);
        }
     printf("\n");
    }
 int kn, kk;
 float X, Y, l=17.5;
 for(j=0; j<M; j++)
    {
     k=0;kn=-1; kk=-1; X=0; Y=0;
     for(i=0; i<N; i++)
        {
         if(mtr[i][j]==1) kn=i;
        }
     for(i=0; i<N; i++)
        {
         if (mtr[i][j]==-1) kk=i;
        }
     if(kn!=-1 && kk!=-1)
       {
        setcolor(j+1);
        line(p[kn].x, p[kn].y, p[kk].x, p[kk].y);
        X=(l*cos((M_PI/12)+atan2((p[kn].y-p[kk].y),(p[kn].x-p[kk].x)))+p[kk].x);
        Y=(l*sin((M_PI/12)+atan2((p[kn].y-p[kk].y),(p[kn].x-p[kk].x)))+p[kk].y);
        line(p[kk].x, p[kk].y,X,Y);
        X=(l*cos((-M_PI/12)+atan2((p[kn].y-p[kk].y),(p[kn].x-p[kk].x)))+p[kk].x);
        Y=(l*sin((-M_PI/12)+atan2((p[kn].y-p[kk].y),(p[kn].x-p[kk].x)))+p[kk].y);
        line(p[kk].x, p[kk].y,X,Y);
       }
    }
 getch();
 delete p;
 closegraph();
} 
void mtr_sm()
{
 int N=0, i, j;
 clrscr();
 cleardevice();
 do
   {
    printf("Vvedite kolichestvo vershin: ");
    scanf("%d",&N);
    if(N<2) printf("Rebro ne mozhet soderzhat 0 ili 1 vershinu\n\n");
   } while(N<2);
 clrscr();
 cleardevice();
 randomize();
 koord *p = new koord [N];
 for(i=0; i<N; i++)
    {
     p[i].x=random(250)+350;
     p[i].y=random(385)+50;
    }
 int **mtr;
 mtr=(int**)malloc(N*sizeof(int*));
 for(i=0; i<N; i++)
    { mtr[i]=(int*)malloc(N*sizeof(int));
      for(j=0; j<N; j++)
         {
          mtr[i][j]=random(2);
         }
    }
 char *x="X", *toch;
 for(i=0; i<N; i++)
    {
     setcolor(BLUE);
     circle(p[i].x, p[i].y, 5);
     setfillstyle(1,GREEN);
     floodfill(p[i].x, p[i].y, BLUE);
     setcolor(YELLOW);
     gcvt(i+1, 3, toch);
     outtextxy(p[i].x+6, p[i].y+3, x);
     outtextxy(p[i].x+15, p[i].y+3, toch);
    }
 printf("      ");
 for(j=0;j<N;j++)
    {
     if(j<9) printf("X%d  ", j+1);
     else printf("X%d ", j+1);
    }
 printf("\n");
 for(i=0;i<N; i++)
    {
     if(i<9) printf("X%d ",i+1);
     else    printf("X%d",i+1);
     for(j=0; j<N; j++)
        {
         printf("%4d", mtr[i][j]);
        }
     printf("\n");
    }
 int r;
    randomize();
 for(i=0; i<N; i++)
    {
     for(j=0; j<N; j++)
         {
          setcolor(random(15)+1);
          if(i!=j && mtr[i][j]==1) line(p[i].x, p[i].y, p[j].x, p[j].y);
          if(i==j && mtr[i][j]==1)
            {
             r=random(10)+10;
             circle(p[i].x-r, p[i].y, r);
            }
         }
    }
 getch();
 delete p;
 closegraph();
}
eddilou вне форума Ответить с цитированием
Старый 23.04.2011, 09:30   #3
eddilou
 
Регистрация: 27.12.2010
Сообщений: 8
По умолчанию

продолжение 2
Код:
void main()
{
 do
   {
    int c;
    clrscr();
    int gdriver = DETECT, gmode, errorcode;
    initgraph(&gdriver, &gmode, "d:\\BC\\BGI");
    errorcode = graphresult();
    if(errorcode != grOk)
      {
       printf("Graphics error: %s\n", grapherrormsg(errorcode));
       printf("Press any key to halt:");
       getch();
       exit(1);
      }
    printf("Vibirite punkt:\n");
    printf("1. neorientir graf"
         "\n2. orientir graf"
         "\n3. Matrica smezhnosti vershin\n\n");
    do
      {
       c=0;
       printf("Vash vibor: ");
       scanf("%d", &c);
 
       if(c<1 || c>3)
         printf("V spiske net dannogo punkta, vibirite drugoi\n");
       switch (c)
             {
              case 1: neorgraf(); break;
              case 2:   orgraf(); break;
              case 3:   mtr_sm(); break;
             }
      } while(c<1 || c>3);
    printf("\t\tPovtorit li? \n\n\t\tYes/No (AnyKey/ESC)\n");
   } while(getch()!=27);
 exit(1);
}
помогите плиз, уже 2 дня парюсь и не могу понять в чем ошибка, все перепробовал[CODE]
eddilou вне форума Ответить с цитированием
Старый 23.04.2011, 13:33   #4
eddilou
 
Регистрация: 27.12.2010
Сообщений: 8
По умолчанию

мда.. похоже тут нет программистов... ну жаль жаль
eddilou вне форума Ответить с цитированием
Старый 23.04.2011, 16:06   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
похоже тут нет программистов
...которым захочется пересобирать непонятные куски кода. ДЕйствительно жаль что автор не ценит время форумчан, не прикрепив весь проект в архиве.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
меню как на сайте p&g (меню ввиде таблицы) ilma55 WordPress и другие CMS 0 19.09.2010 19:09
И сново sendMessage =) Как нажать пункт верхнего меню и меню правой кнопки? TwiX Win Api 9 15.10.2009 01:57
Для доступа к пунктам главного меню клавиши ALT + подчеркнутая буква меню в офис 2007? Окоча Юра Microsoft Office Word 1 24.02.2009 12:29
Меню с Items в виде набора Bitmap (как меню редактирования в Word'е) chandrasecar Мультимедиа в Delphi 7 14.01.2009 09:20