Выявление функциональной зависимости в массиве данных
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
>f=fopen (dat.txt, a+);
fprintf (f, new_matrica\n);
for (i=1; i<=m; i++)
fprintf (f, a % 1d, dn[i] [1]);
fprintf (f, "\n);
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
if (b[i] [j]>0)
fprintf (f, , d [b[i] [j]+dn [j-1] [2]] [1]);
else
fprintf (f, , b[i] [j]);
fprintf (f, "\n);
}
fprintf (f, "\n);
fclose(f);
}
// //
void create_domain()
{
FILE *f;
unsigned short i, j, ii, jj, num;
unsigned short dt [n-1] [1];
f=fopen (dat.txt, a+);
dn[0] [2]=0;
for (num=1; num<m; num++)
{
dn[num] [2]=dn [num-1] [2];
j=0;
for (i=0; i<n; i++)
if (a[i] [num]!=0)
{
ii=1;
while ((ii<=j)&&(dt[ii] [1]<a[i] [num]))
ii=ii+1;
if (ii<=j)
{
if (a[i] [num]=dt[ii] [1])
dt[ii] [2]=dt[ii] [2]+1;
else
{
for (jj=j; jj>ii; jj)
{
dt [jj+1] [1]=dt[jj] [1];
dt [jj+1] [2]=dt[jj] [2];
}
j=j+1;
dt[ii] [1]=a[i] [num];
dt[ii] [2]=1;
}
}
else
{
j=j+1;
dt[j] [1]=a[i] [num];
dt[j] [2]=1;
}
}
for (i=0; i<j; i++)
if (dt[i] [2]>1)
{
dn[num] [2]=dn[num] [2]+1;
d [dn[num] [2]] [1]=dt[i] [1];
d [dn[num] [2]] [2]=dt[i] [2];
}
fprintf (f, dom=, num);
for (i=dn [num-1] [2]; i<dn[num] [2]; i++)
for (j=0; j<=2; j++)
fprintf (f, ", d[i] [j]);
fprintf (f, "\n);
}
fclose(f);
}
void first_key()
{
unsigned short i;
for (i=0; i<Lt; i++)
kt[i]=i;
}
void next_key()
{
unsigned short i, j;
j=Lt;
while ((j>0)&& (kt[j]>=mt-Lt+j))
j=j-1;
if (j>0)
{
kt[j]=kt[j]+1;
for (i=j+1; i<Lt; i++)
kt[i]=kt [i-1]+1;
}
else
kt[1]=0;
}
void new_table()
{
unsigned short i, j, ii;
for (i=1; i<n; i++)
for (j=1; j<mt; j++)
if (a[i] [dn[j] [1]]=0)
b[i] [j]=-1;
else
{
ii=dn [j-1] [2]+1;
while ((iid[ii] [1]))
ii=ii+1;
if ((ii<=dn[j] [2])&&(a[i] [dn[j] [1]]=d[ii] [1]))
b[i] [j]=ii-dn [j-1] [2];
else
b[i] [j]=0;
}
}
void analiz_1 ()
{
unsigned short i, j;
kn[0]=0;
kn[1]=0;
j=0;
for (i=1; i<m; i++)
if (dn[i] [2]=dn[j] [2])
{
kn[1]=kn[1]+1;
k [kn[1]]=i;
}
else
{
j=j+1;
dn[j] [1]=i;
dn[j] [2]=dn[i] [2];
}
mt=j;
}
void analiz_n()
{
unsigned short mm [m-1];
unsigned short i, j, ii, jj;
char yes_key;
unsigned long s[8];
for (i=1; i<mt; i++)
mm[i]=dn[i] [2] dn [i-1] [2];
kn[2]=kn[1];
for (Lt=2; Lt<mt; Lt++)
{
first_key();
do
{
yes_key=1;
i=2;
while (yes_key&& (i<Lt))
{
j=kn [i-1]+1;
while (yes_key&& (j<=kn[i]))
{
jj=j;
ii=1;
while (yes_key&& (jj-j<i)&& (ii<=Lt))
{
if (k[jj]<kt[ii]) {
j+=i;
break;
}
else
if (k[jj]=kt[ii])
{
jj=jj+1;
ii=ii+1;
if (jj-j>=i)
yes_key=0;
}
else
if (Lt-ii<i+j-jj)
{
j+=i;
break;
}
else
ii=ii+1;
}
}
i=i+1;
}
if (yes_key)
{
i=1;
for (i=0; i<8; i++)
s[i]=0;
while (yes_key&& (i<=n))
{
j=1;
ii=0;
while ((j0))
{
ii=ii*mm [kt[j]]+b[i] [kt[j]] 1;
j=j+1;
}
i=i+1;
if (j>Lt)
{
if (s [ii>>5]&(1<<(ii&0x1F)))
yes_key=0;
else
s [ii>>5]|=(1<<(ii&0x1F));
}
}
if (yes_key)
{
kk=kk+1;
for (i=1; i<Lt; i++)
{
k [kn[Lt]+i]=kt[i];
}
kn[Lt]=kn[Lt]+Lt;
}
}
next_key();
} while (kt[1]=0);
kn [Lt+1]=kn[Lt];
for (i=2; i<mt; i++)
for (j=kn [i-1]+1; j<kn[i]; j++)
k[j]=dn [k[j]] [1];
}
}
// //
void main ()
{
FILE *f;
clrscr();
int handle;
handle = creat (d:\\Kursovik\\dat.txt, S_IREAD |S_IWRITE);
f=fopen (dat.txt, a+);
mt=m;
tabl();
vivod_1 ();
fprintf (f, "\n);
create_domain();
analiz_1 ();
new_table();
vivod_2 ();
analiz_n();
fprintf (f, "\n);
fprintf (f, Keys\n);
kk=1;
for (Lt=1; Lt<=m; Lt++)
{
fprintf (f, Lt=\n, Lt);
j=kn [Lt-1]+1;
while (j<=kn[Lt])
{
for (i=1; i<Lt; i++)
fprintf (f, , k [j+i-1]);
fprintf (f, "\n);
j=j+Lt;
}
}
fclose(f);
}
Список использованной литературы
- С.В.Самуйлов Алгоритмы поиска и сортировки. Пенза: изд-во ПГУ, 1998 36с.
- Б.Карпов, Т.Баранова С++ Специальный справочник. С-Петербург: Изд-во Питер, 2009 480с.
- В.М.Линьков, В.В.Дрождин Программирование на языке паскаль Пенза, ПГПУ им. В.Г.Белинского, 2007 70.
- В.В.Подбельский, С.С.Фомин Программирование на языке С++ Москва, 2008600с.
- Уоллес Вонг, Основы программирования для чайников 2002 336с.
- О.Л.Голицына, И.И.Попов Основы алгоритмизации и программирования, 2008446с.