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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2008, 15:20   #1
Ilius
Пользователь
 
Регистрация: 08.12.2007
Сообщений: 20
По умолчанию форма к модулю

помогите сделать форму к этому модулю(подойдет любая).Программа должна считывать из файла матрицу,выполнять вычисления на минимум и максимум, и заносить результат в файл. Заранее спасибо всем за помощь.
Вложения
Тип файла: zip method.zip (1.8 Кб, 17 просмотров)
Ilius вне форума Ответить с цитированием
Старый 06.12.2008, 17:08   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

А что вам не понятно в создании формы? Формулируйте вопрос.
MaTBeu вне форума Ответить с цитированием
Старый 06.12.2008, 19:00   #3
Ilius
Пользователь
 
Регистрация: 08.12.2007
Сообщений: 20
По умолчанию

создавать форму я умею, просто модуль не мой и я не могу сделать форму чтоб программа работала. Мне просто нужна любая форма которая бы выполняла функции модуля, а там я уже сам внешний вид подкорректирую.
Ilius вне форума Ответить с цитированием
Старый 06.12.2008, 20:42   #4
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Разобраться не пробовали? Или выкладывайте код сюда (не в атач), и будем разбираться.
MaTBeu вне форума Ответить с цитированием
Старый 07.12.2008, 03:05   #5
Ilius
Пользователь
 
Регистрация: 08.12.2007
Сообщений: 20
По умолчанию

Код:
#include <windows.h>
#include <stdio.h>
#define N 101

int v[N][N],u[N][N],
    cross0[N][N];	// 1 - отмеченный ноль, -1 - зачеркнутый.
int str0[N],col0[N];	// Помеченные строки и столбцы.
int strround[N],colround[N];	// Пометка кружками (вторая пометка).
int usestr[N];
int n;			// Размерность матриц.
int vmax=0;		// Максимальный элемент матрицы V.

extern char szFileName[200];

	// Функция считывания данных из файла.
int read(){
int a;
int i,j;
FILE* potok = fopen(szFileName,"r");
if(!potok){
   MessageBox(0, "Отсутствует файл входных данных!" , ":-(", 16);
   return 0;
   }
fscanf(potok,"%i",&n);
for(i=0; i<n; i++)
   for(j=0; j<n; j++){
      a=fscanf(potok,"%i",&v[i][j]);
      if(a==0 || a==EOF){
         MessageBox(0,"Неверный формат данных!",":-(",16);
         return 0;
         }
      }
fclose(potok);
return 1;
}

	// Приведение матрицы
void privod(BOOL ToMax){
int i,j,umin;
for(i=0; i<n; i++)
   for(j=0; j<n; j++)
      vmax = vmax > v[i][j] ? vmax : v[i][j];
if(ToMax){
   for(i=0; i<n; i++)
      for(j=0; j<n; j++)
         u[i][j] = vmax-v[i][j];
   }
else{
   for(i=0; i<n; i++)
      for(j=0; j<n; j++)
         u[i][j] = v[i][j];
   }
for(i=0; i<n; i++){	// Приведение по строкам.
   umin=u[i][0];
   for(j=1; j<n; j++)	// Минимум в строке.
      umin = umin < u[i][j] ? umin : u[i][j];
   for(j=0; j<n; j++)
      u[i][j]-=umin;
   }
for(j=0; j<n; j++){	// Приведение по столбцам.
   umin=u[0][j];
   for(i=1; i<n; i++)	// Минимум в столбце.
      umin = umin < u[i][j] ? umin : u[i][j];
   for(i=0; i<n; i++)
      u[i][j]-=umin;
   }
}

void mark0(){	// Отмечаем и зачеркиваем нули.
int i,j;
for(i=0; i<n; i++)
   for(j=0; j<n; j++)
      cross0[i][j]=0;
for(i=0; i<n; i++)
   str0[i]=col0[i]=0;
for(i=0; i<n; i++)
   for(j=0; j<n; j++)
      if(u[i][j]==0)
         if(str0[i]==0 && col0[j]==0){
            cross0[i][j]=1;
            str0[i]=col0[j]=1;
            }
         else
            cross0[i][j]=-1;
}

int findcouple(int i){
int i1,j=0;
while(cross0[i][j]!=1) j++;
for(i1=0; i1<n; i1++)
   // Если ноль зачеркнут и в этой строке еще не были
   if(cross0[i1][j]==-1 && !usestr[i1]){
      // Если строка не помечена
      if(!str0[i1]){
         str0[i1]=1;
         cross0[i1][j]=1;
         cross0[i][j]=-1;
         return 1;
         }
      else{
         usestr[i1]=1;
         if(findcouple(i1)){
            cross0[i1][j]=1;
            cross0[i][j]=-1;
            return 1;
            }
         }
      }
return 0;
}

	// Нахождение паросочетания.
int upcouple(){
int i,j;
for(i=0; i<n; i++)
   usestr[i]=0;		// В какой строке побывали.
for(j=0; j<n; j++)
   if(!col0[j])
      for(i=0; i<n; i++)
         if(cross0[i][j]==-1){	// Зачеркнутый ноль в непомеченном столбце.
            usestr[i]=1;
            if(findcouple(i)){
               col0[j]=1;
               cross0[i][j]=1;
               return 1;
               }
            else
               usestr[i]=0;
            }
return 0;
}

	// Нахождение максимального паросочетания.
void maxcouple(){
while(upcouple());
}

	// Проверка на решенность задачи.
int fin(){
int i;
for(i=0; i<n; i++)
   if(!str0[i])
      return 0;
return 1;
}

	// Нахождение минимальной опоры.
void minsupport(){
int i,j,b;
for(i=0; i<n; i++)
   strround[i]=colround[i]=0;
for(i=0; i<n; i++)
   strround[i]=1-str0[i];
b=1;
while(b){
   b=0;
   for(i=0; i<n; i++)
      if(strround[i])
         for(j=0; j<n; j++)
            if(cross0[i][j]==-1)
               colround[j]=1;
   for(j=0; j<n; j++)
      if(colround[j])
         for(i=0; i<n; i++)
            if(cross0[i][j]==1 && !strround[i]){
               b=1;
               strround[i]=1;
               }
   }
}

	// Перестановка нулей.
void rotate0(){
int i,j,min=vmax;
for(i=0; i<n; i++)
   if(strround[i])
      for(j=0; j<n; j++)
         if(!colround[j])
            if(min>u[i][j])
               min=u[i][j];
for(i=0; i<n; i++)
   if(!strround[i])
      for(j=0; j<n; j++)
         u[i][j]+=min;
for(j=0; j<n; j++)
   if(!colround[j])
      for(i=0; i<n; i++)
         u[i][j]-=min;
}

	// Выдача результата в выходной файл.
void answer(BOOL ToMax){
FILE* potok = fopen("output.txt","w");
int i,j;
int sum=0;
for(i=0; i<n; i++){
   fprintf(potok,"Назначить %3i-го кандидата ",i+1);
   for(j=0; j<n; j++)
      if(cross0[i][j]==1){
         fprintf(potok,"на %3i-ю должность.\n",j+1);
         sum+=v[i][j];
         break;
         }
   }
if(ToMax)
   fprintf(potok,"\n(Максимальная суммарная эффективность: %i)\n",sum);
else
   fprintf(potok,"\n(Минимальный суммарный вред: %i)\n",sum);
fclose(potok);
}

void method(BOOL ToMax){	// ToMax == TRUE  - задача на максимум,
				// ToMax == FALSE  - задача на минимум.
if(!read())
   return;
privod(ToMax);
while(1){
   mark0();
   maxcouple();
   if(fin())
      break;
   minsupport();
   rotate0();
   }
answer(ToMax);
MessageBox(0,"Все просчитано.","См. output.txt",64);
}
Ilius вне форума Ответить с цитированием
Старый 07.12.2008, 11:22   #6
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

А вы случайно не сами собрались писать интерфейс ко всему этому??? Если нет, то Borland C++ Builder вам в помощь - в нем можно за 10 минут сделать довольно приличный интерфейс. А вот этот код советую вам засунуть в хидер файл и подключить к основному файлу формы. А потом просто тыкаете два раза на кнопку и суете туда вызов нужной вам функции. К тому же у вас все откомментировано, так что вы я думаю знаете, что какая функция делает.

ПыСы: или может я чего-то недопонимаю?

Последний раз редактировалось MaTBeu; 07.12.2008 в 11:24.
MaTBeu вне форума Ответить с цитированием
Старый 07.12.2008, 14:53   #7
Ilius
Пользователь
 
Регистрация: 08.12.2007
Сообщений: 20
По умолчанию

что какая функциия делает я знаю, мне надо чтобы при нажатии на одну кнопку, производились все функции и выводился результат в файл!
Еще хотелбы переделать ввод не из файла а из СтрингГрид, но это не так важно.
Ilius вне форума Ответить с цитированием
Старый 07.12.2008, 18:00   #8
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Ввод из СтригГрид
Код:
for(int i=0; i<StringGrid1->RowCount; i++)
for(int j=0; j<StringGrid1->ColCount; j++)
{
     mas[i][j] = StrToInt(StringGrid1->Cells[i][j]);
}
Блин вы формулируйте точно вопросы. То вам надо форму, то ввод из СтрингГрида.
А про все функции - это вообще пустяк. Делаете кнопку, на нее два раза тыкаете, и туда кидаете все, что у вас в функции main().
MaTBeu вне форума Ответить с цитированием
Старый 07.12.2008, 19:09   #9
Ilius
Пользователь
 
Регистрация: 08.12.2007
Сообщений: 20
По умолчанию

про СтрингГрад я ж сказал что не важно, так к слову было что я с прогой буду делать(но все ровно спс), мне главное ФОРМА, которая при нажатии на кнопку производила расчеты вот этого венгерского метода. Просто я С++ тока начал изучать так что мне напряжно очень.
Цитата:
Делаете кнопку, на нее два раза тыкаете, и туда кидаете все, что у вас в функции main().
А где вы эту функцию увидели? Или я не так понял, но ее нет в коде.

Последний раз редактировалось Ilius; 07.12.2008 в 19:13.
Ilius вне форума Ответить с цитированием
Старый 07.12.2008, 21:03   #10
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Блин, сори затупил. Я имел ввиду функцию method(BOOL TMax).
А вы хоть что-то сделали чтобы научиться??? Или вы хотите, чтобы вам тут с нуля все расписали и на блюдечке принесли? Ну уж нет, или вы пишете, что именно у вас не получается в создании формы или ваша тема летит во фриланс.

ПыСы: Компилятор я вам уже посоветовал Borland C++ Builder 6. В нем автоматически создается проект с формой, рядом палитра компонентов, все дела. Так что попробуйте, а потом если не получиться будем разбираться.
MaTBeu вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить максимальный по модулю элемент каждой строки. (Kate) Помощь студентам 2 29.11.2008 21:05
Документация по модулю UrlMon Roman_YRV Работа с сетью в Delphi 0 10.10.2008 18:11
Сортировка по 2-м столбцам по модулю... xamillion Microsoft Office Excel 2 06.10.2008 20:18
Функция которая в массиве ищет максимальный по модулю элемент Absent Помощь студентам 5 19.11.2007 21:23
вычисление больших степеней по модулю - Rsa Студент Общие вопросы C/C++ 2 19.10.2007 18:28