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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2007, 20:00   #1
KsandR
 
Регистрация: 11.12.2007
Сообщений: 3
По умолчанию Создание меню на С

Здравствуйте! У меня возникла проблема при решении следующей задачи. Нужно создать меню в среде turbo C из 4х пунктов(ну это не важно). Чтобы можно было при помощи стрелок перемещатся по нему и активный пункт был выделен цветом, а при нажатии Enter открывался какой-либо сообтветствующий файл. Нужно использовать функции bioskey() и switch(). Очень прошу помощи.
Толковой литературы по графике в С почему-то не нашел=(
KsandR вне форума Ответить с цитированием
Старый 12.12.2007, 06:32   #2
PuzzleC
Пользователь
 
Регистрация: 01.11.2007
Сообщений: 33
По умолчанию

Имеется ввиду не графика, как я понял, а текмстовое меню!
PuzzleC вне форума Ответить с цитированием
Старый 12.12.2007, 12:56   #3
KsandR
 
Регистрация: 11.12.2007
Сообщений: 3
По умолчанию

Нужно меню в графическом окне(окнах). Напишите хотябы примерный алгоритм. Просто создать окно(несколько окон) - это не проблема, а вот чтобы переключаться в нем по пунктам меню(хотя мб пунк меню это отдельное окно?)...
KsandR вне форума Ответить с цитированием
Старый 13.12.2007, 20:23   #4
KsandR
 
Регистрация: 11.12.2007
Сообщений: 3
По умолчанию

Я конечно понимаю, что сейчас заниматься графикой в C - это извращение, но задание есть задание. Может быть кто-нибудь когда-нибудь находил нормальную книгу по этой теме?
KsandR вне форума Ответить с цитированием
Старый 13.12.2007, 21:34   #5
DIIT
Пользователь
 
Регистрация: 01.12.2007
Сообщений: 12
По умолчанию

у меня есть консольное меню но я использовал getch()/Rjhjxt я тебе кидаю всю прогу свою(она правда еще не совсем рабочая но то что тебе нужно работает)а ты уже сам смотри что тебе там может пригодиться(написана в борланде)
функция main() как раз и содержит меню. надеюсь чемто помог.
DIIT вне форума Ответить с цитированием
Старый 13.12.2007, 21:34   #6
DIIT
Пользователь
 
Регистрация: 01.12.2007
Сообщений: 12
По умолчанию

Код:
#include <stdio.h>
#include <conio.h>
//#include <iostream.h>


void deleteMatr(int **, int);
void vvodMatr(int **, int, int);
void vyvodMatr(int **, int, int);
void changeMatr(int **, int**, int, int);
void vvodNM(int &,int &);
void readMatr(int **, int &, int &);
void saveMatr(int **, int,int);
int **a;


int main()
{
char punkty [][20]={"Open","Save as...","Type matr","Print matr","Change matr","Exit"};

int k=0, q=6,x=30,y=10/*, w=1*/;
int key, j, i, n, m;
int **a=new int *[n];
int **b=new int *[n];
   clrscr();
   for(i=0;i<n;i++)
{
    a[i]=new int [m];
    b[i]=new int [m];
}
   do
   {
      textcolor(7);
      clrscr();
      for(i=0;i<q;i++)
      {
	 gotoxy(x,y+i);
	 cprintf(punkty[i]);
      }
	 do
	 {
	   textcolor(128+7);
	  // w++;
	  // if(w==7||w==16||w==23||w==32||w==39||w==48)
	   //   w++;
	   gotoxy(x,y+k);
	   cprintf(punkty[k]);
	   key=getch();
	   if(!key)
	   key=getch();
	   switch(key)
	   {
	      case 27:
	      return -1;
	      case 72:
	      textcolor(7);
	      gotoxy(x, y+k);
	      cprintf(punkty[k]);
	      if(k==0)
		 k=q-1;
	      else
		 k--;
	      break;
	      case 80:
	      textcolor(7);
	      gotoxy(x,y+k);
	      cprintf(punkty[k]);
	      k++;
	      if(k==q)
		 k=0;
	   }
	}
	while(key!=13);
	switch(k)
	{
	case -1:
	return 0;
	case 0:
	readMatr(a,n,m);
	break;
	case 1:
	saveMatr(a,n,m);
	break;
	case 2:
	vvodNM(n,m);
	vvodMatr(a,n,m);
	break;
	case 3:
	vyvodMatr(a,n,m);
	break;
	case 4:
	changeMatr(a,b,n,m);
	break;
	case 5:
	deleteMatr(a,n);
	return 0;
	}
   }
   while(1);

}

void deleteMatr(int **a, int n)
{
if (a)
for(int i=0; i<n; i++)
   delete[] a[i];
delete[] a;
}

void vvodNM(int &n,int &m)
{
   textcolor(7);
   clrscr();
   printf("Vvedite kolichestvo ryadkov n: ");
   scanf("%d",&n);
   printf("Vvedite kolichestvo stolbcov m: ");
   scanf("%d",&m);
}

void vvodMatr(int **a,int n, int m)
{
   for(int i=0;i<n;i++)
   {
      for(int j=0;j<m;j++)
      {
	 printf("a[%d][%d]=",i+1,j+1);
	 scanf("%d",&a[i][j]);
      }
   }
}

void vyvodMatr(int **a,int n,int m)
{
   textcolor(7);
   clrscr();
   if(a==0)
   printf("ERROR!!!");
   else
   printf("Ishodnaya matrica:\n");
   for(int i=0;i<n;i++)
   {
      for(int j=0;j<m;j++)
      printf("%5d",a[i][j]);
      printf("\n");
   }
   getch();
}

void changeMatr(int **a,int **b,int n, int m)
{
int i,j;
for(i=0;i<n;i++)
   {
      for(j=0;j<m;j++)
      {
	 if(a[0][0]<a[0][1]||a[0][0]<a[1][0])
	    b[0][0]=0;
	 else
	    b[0][0]=a[0][0];

	 if(a[n-1][0]<a[n-1][1]||a[n-1][0]<a[n-2][0])
	    b[n-1][0]=0;
	 else
	    b[n-1][0]=a[n-1][0];

	 if(a[0][m-1]<a[0][m-2]||a[0][m-1]<a[1][m-1])
	    b[0][m-1]=0;
	 else
	    b[0][m-1]=a[0][m-1];

	 if(a[n-1][m-1]<a[n-1][m-2]||a[n-1][m-1]<a[n-2][m-1])
	    b[n-1][m-1]=0;
	 else
	    b[n-1][m-1]=a[n-1][m-1];
      }
   }
   for(j=1;j<m-1;j++)
   {
      if(a[0][j]<a[0][j-1]||a[0][j]<a[0][j+1]||a[0][j]<a[1][j])
	 b[0][j]=0;
      else
	 b[0][j]=a[0][j];

      if(a[n-1][j]<a[n-1][j-1]||a[n-1][j]<a[n-1][j+1]||a[n-1][j]<a[n-2][j])
	 b[n-1][j]=0;
      else
	 b[n-1][j]=a[n-1][j];
   }
   for(i=1;i<n-1;i++)
   {
      if(a[i][0]<a[i-1][0]||a[i][0]<a[i+1][0]||a[i][0]<a[i][1])
	 b[i][0]=0;
      else
	 b[i][0]=a[i][0];

      if(a[i][m-1]<a[i-1][m-1]||a[i][m-1]<a[i+1][m-1]||a[i][m-1]<a[i][m-2])
	 b[i][m-1]=0;
      else
	 b[i][m-1]=a[i][m-1];
   }
   for(i=1;i<n-1;i++)
   {
      for(j=1;j<m-1;j++)
      {
	 if(a[i][j]<a[i-1][j]||a[i][j]<a[i+1][j]||a[i][j]<a[i][j-1]||a[i][j]<a[i][j+1])
	    b[i][j]=0;
	 else
	    b[i][j]=a[i][j];
      }
   }
   for(i=0;i<n;i++)
   {
      for(j=0;j<m;j++)
	 a[i][j]=b[i][j];
   }
   for(i=0;i<n;i++)
      delete[] b[i];
   delete[] b;
}


void readMatr(int **a, int &n, int &m)
{
   textcolor(7);
   clrscr();
   int i=0;
   char *str;
   str=new char[100];
   char fname[256];
   FILE *f;
   m=0;
   n=0;
   printf("Input filename or directory: ");
   gets(fname);
   f=fopen(fname,"rt");
   if (!f)
      {
      printf("Cannot open file '%s'",fname);
      getch();
      }
   else
   {
      fgets(str,100,f);
      while(str[i])
      {
	 if(str[i]==' ')
	    m++;
	 i++;
      }
      fseek(f,0,0);
      i=0;
      while(!feof)
      {
	 fgets(str,100,f);
	 n++;
      }
      fseek(f,0,0);
      for(i=0;i<n;i++)
      {
	 for(int j=0;j<m;j++)
	    fscanf(f,"%d",&a[i][j]);
      }
      fclose(f);
      }
}

void saveMatr(int **a, int n, int m)
{
   FILE *f;
   char fname[100];
   textcolor(7);
   clrscr();
   printf("Input name of file: ");
   gets(fname);
   f=fopen(fname,"wt");
   for(int i=0; i<n;i++)
   {
      for(int j=0;j<m;j++)
	 fprintf(f,"%d ",a[i][j]);
	 fprintf(f,"\n");
   }
   fclose(f);
}
DIIT вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Меню Аlex Общие вопросы Delphi 2 19.08.2008 13:52
Создание своего меню в Exele W50586 Microsoft Office Excel 2 23.06.2008 15:20
Меню Relrin Общие вопросы Delphi 4 28.12.2007 18:52
МЕНЮ Delpher HTML и CSS 4 25.12.2007 15:37
Меню, создание нового пункта Yogik™ Помощь студентам 2 17.08.2007 17:32