name FIO; };
struct table { info data[50];
int n; };
void output(table T,int i,FILE *out)
{ int j; name *k; machine *p;
fprintf(out,"\n %d FIO: ",i+1);
for(k=T.data[i].FIO.next; k->next!=NULL ;k=k->next)
fprintf(out,"%c",k->sim);
fprintf(out," : ");
p=T.data[i].mach.next;
do
{ fprintf(out,"\n Nomer: ");
for(j=0;j!=6;j++) fprintf(out,"%c",p->nomer[j]);
fprintf(out," Marka: ");
k=p->marka;
do
{ k=k->next;
fprintf(out,"%c",k->sim);
}
while(k->next!=NULL);
if(p->next!=NULL) j=1; else j=0;
p=p->next;
}
while (j);
}
void moving(table & T,int i,int j)
{ machine *p,*k; int l,q=1; name *v;
T.data[i].FIO=T.data[j].FIO;
p=T.data[j].mach.next;
k=T.data[i].mach.next;
do
{ k->next=new machine;
for(l=0;l!=6;l++) k->nomer[l]=p->nomer[l];
k->marka=p->marka;
if(p->next!=NULL) { p=p->next; k=k->next; } else q=0;
}
while (q);
k->next=NULL;
}
void mach(table & T,int i)
{ machine *p; int l=0;
for(p=T.data[i].mach.next;p->next!=NULL;p=p->next);
Определение структур
Функция вывод таблицы в файл
Вывод ФИО
Цикл перебора машин
Вывод номера
Вывод марки
Функция перестановки 2 элементов таблицы
Изменение указателя на ФИО изменяемого элемента на указатель на ФИО переносимого элемента.
Цикл по созданию у изменяемого элемента машин и присваивание указателей на марку и номер машины переносимого элемента.
Проверка, что машины у переносимого элемента закончились.
Функция добавления машины из элемента (T.n+1) в конец списка машин у переданного элемента
p->next=new machine;
p=p->next;
p->next=NULL;
p->marka=T.data[T.n+1].mach.next->marka;
for(l=0;l!=6;l++) p->nomer[l]=T.data[T.n+1].mach.next->nomer[l];
for(p=T.data[i].mach.next;p->next!=NULL;p=p->next) l++;
}
void main()
{ table T; FILE *in,*out; int i,j,id,kol,per,vtr,l; char g; machine *p; name *k,*buf;
T.n=-1;
if((in=fopen("D:\AUTO.txt","r"))==NULL)
{perror("Error"); exit(0);}
if((out=fopen("D:\AUTO2.txt","w"))==NULL)
{perror("Error"); exit(0);}
do
{ T.n=T.n+1;
if (T.n==49) {perror("Underline"); exit(0);}
T.data[T.n+1].mach.next=new machine;
p=T.data[T.n+1].mach.next;
p->next=NULL;
for(i=0;i!=6;i++) fscanf(in,"%c",&p->nomer[i]);
fscanf(in,"%c",g);
k=p->marka;
k->next=new name;
fscanf(in,"%c",&g);
while (g!=',')
{ k->next=new name;
k=k->next;
k->sim=g;
fscanf(in,"%c",&g);
}
k->next=NULL;
T.data[T.n+1].FIO.next=new name;
k=T.data[T.n+1].FIO.next;
fscanf(in,"%c",&g);
while (g!='\n' && !feof(in))
{ k->sim=g;
k->next=new name;
k=k->next;
if (!feof(in)) fscanf(in,"%c",&g);
}
k->next=NULL;
buf=T.data[T.n+1].FIO.next;
k=T.data[T.n-1].FIO.next;
id=0;
l=0;
i=T.n-1;
while(i>-1 && !id && !l)
{ if(k->sim>buf->sim)
{ i--;
k=T.data[i].FIO.next;
buf=T.data[T.n+1].FIO.next;
}
if(k->sim==buf->sim)
{ if(k->next->next==NULL && buf->next->next==NULL) id=1;
k=k->next;
buf=buf->next;
}
if(k->sim<buf->sim) l=1;
}
if (!id) { i++;
per=T.n; vtr=T.n-1;
for(kol=T.n-i; kol!=0 ; kol--)
{ moving(T,per,vtr);
per--; vtr--;
}
moving(T,i,T.n+1);
}
else { mach(T,i);
T.n=T.n-1;
}
}
while(!feof(in));
fclose(in);
for (i=0;i!=T.n+1;i++) output(T,i,out);
fclose(out);
}
4. Набор тестов
№ |
Файл “AUTO.txt” |
Результат |
Предназначение теста |
1 |
|||
2 |
|||
3 |
|||
4 |
5. Результат работы программы
Программа решает поставленную перед ней задачу, что можно увидеть на примерах тестов.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.