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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2009, 21:50   #1
Pecherni
 
Регистрация: 16.03.2009
Сообщений: 4
По умолчанию Алгоритмы на множествах

Добрый вечер,товарищи. Мне необходимо написать и отладить программу решения теоретико-множественных уравнений вида A U X  B , АI Х=В, А \ Х=В, Х \ А=В (где A и B – заданные множества). Покапался я в интернете и собрал программу из различных кусков, отладил её. Но программа не читает файл пишет ,что нет входного файла(это в BC.а в BCW пишет,что нет решений). Помогите отладить.Заранее спасибо.

Файл argv[1]:
3;-Мощность А
A={8 ,10 ,11} -множество А;
7;-Мощность В
B={4 ,5 ,6 ,7 ,8 ,10 ,11};-множество В


Вот сам код программы:
Код:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<io.h>
#include<string.h>
#include<alloc.h>
void main( char* argv[])
{char msA[12], ms[100], tmp[5];
char *mout, *m_in;
char *mnX;
int i, j, r, kA, nA, kB, nB, MA, nX0;
FILE *in, *out;
if( (in = fopen(argv[1], "r")) == NULL )
{ puts("Net vhodnogo faila!");
gets(0);
exit(0);}
fgets(ms, 100, in);
fgets(ms, 100, in);
kA = atoi(ms);
fgets(ms, 100, in); 
r = 0;
msA[0] = atoi(ms+r);
nA = 1<<msA[0];
for(i = 1; i <kA; i++)
{
while(ms[r]!=',') r++;
r++;
msA[i] = atoi(ms+r);
nA |= 1<<msA[i];
}
fgets(ms, 100, in);
kB = atoi(ms);
fgets(ms, 100, in);
r = 0;
nB = 1<< atoi(ms+r);
for(i = 1; i <kB; i++)
{
while(ms[r]!=',') r++;
r++;
nB |= 1<< atoi(ms+r); }
if(nA & nB != nA)
{puts("Net reshenyi!"); exit(0);}
       MA = 1<<kA;
       nX0=nB&(~nA & 4095);
       mnX=(char*)malloc(2*MA);
for(i=0; i <MA; i++)
{
mnX[i] = nX0;

for(j=0; j < kA; j++)
if( i & (1<<j) )
mnX[i] |= (1 << msA[j]);
}
mout=(char*)malloc(80*MA);
for(i=0; i <MA; i++)
{
sprintf(tmp, "{");
strcat(mout, tmp);
for(j=0; j < 12; j++)
if(mnX[i] & (1<<j)) {
sprintf(tmp,"%d, ", j);
strcat(mout, tmp);
}
mout[strlen(mout)-1]='}';
sprintf(tmp,"\n");
strcat(mout, tmp);
}
out=fopen(argv[2],"w");
int fdin = fileno(in);
m_in=(char*) malloc(filelength(fdin));
read(fdin, m_in, strlen(m_in));
int fdout = fileno(out);
write(fdout, m_in,strlen(m_in));
fputs ("Reshenijami uravnenija A U X = B jawljayutsja sledujushie mnozestwa:",out);
write(fdout, mout,strlen(mout));
puts("End");
gets(ms);
fclose(out);
}

Последний раз редактировалось Stilet; 15.10.2009 в 13:16.
Pecherni вне форума Ответить с цитированием
Старый 15.10.2009, 12:41   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

FILE *fopen(const char *filename, const char *mode) ;
Функция fopen открывает файл с именем в виде строки, на которую ссылается указатель filename, и связывает с ним поток
.

Код:
fopen(argv[1],"r"))
файл с каким именем необходимо открыть и где у Вас находится этот файл?

Код:
fgets(ms, 100, in);
fgets(ms, 100, in);
, зачем два раза?

char *fgets(char *s, int n, FILE *stream);
Функция fgets считывает из потока stream в массив, на который ссылается
параметр s, не более п-1 символа. Ввод символов прекращается, как только
встретится символ новой строки (который сохраняется) или символ конца
файла. За последним введенным в строку символом добавляется нулевой сим-
символ.

И вообще зачем Вам нужны файлы? У Вас что в условии задачи данные множества в файле и результаты занести в файл?
Неприятности приходят и уходят, а жизнь продолжается!

Последний раз редактировалось Sweta; 15.10.2009 в 12:57.
Sweta вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритмы Levhik Общие вопросы Delphi 7 14.01.2009 17:38
алгоритмы 2д фигур tarakannn Общие вопросы C/C++ 2 23.11.2008 11:23
Жадные алгоритмы Tony_Bil Паскаль, Turbo Pascal, PascalABC.NET 3 26.02.2008 22:44