#pragma hdrstop #pragma argsused #include #include #include #include #include struct TMass { char *date; int len; int beg,end; }; struct TPart { char *s1; char *s2; char *s3; char *s4; int start, finish; }; int CheckIt(TMass*name) { int i; int n=name->len; for (i = 0; i < n; i++) { if (name->date[i]!=NULL) { return 1; } } return 0; } void InitialList (int n, TMass*name) { int i; name->date=new char[n]; name->len=n; name->beg=0; name->end=2000; for (i = 0; i < n; i++) { name->date[i]=NULL; } } void CreateList (TMass*name) { int i,k=0; char s1[20]; char s2[3]; char s3[3]; char s4[3]; int ls1,ls2,ls3,ls4; int n=name->len; printf("Введите название товара (или ** для создания пустого списка)\n:"); scanf("%s",s1); if (strcmp(s1,"**")==0){ printf("Пустой список создан\n"); printf("Клац по фасту эни кею\n"); getch(); return; } else{ printf("Введите час,минуту и секунду прибытия через ENTRE \n(не больше 2 цифр в каждой)\n"); scanf("%s",s2); scanf("%s",s3); scanf("%s",s4); //======================проверка===================================== if (atoi(s2)==NULL || atoi(s3)==NULL || atoi(s4)==NULL ) { printf("Время не должно содиржать символов, список не создан"); getch(); return; } if (atoi(s2)>99 || atoi(s3)>99 || atoi(s4)>99 || atoi(s2)<0 || atoi(s3)<0 || atoi(s4)<0 ) { printf("Время вводится в формате xx:xx:xx, список не создан"); getch(); return; } if (strlen(s2)!=2 || strlen(s3)!=2 || strlen(s4)!=2 ) { printf("Время вводится в формате xx:xx:xx, список не создан"); getch(); return; } //=========================проверка================================== else{ for (i = 1000; i<(ls1=1000+strlen(s1)) ; i++) { name->date[i]=s1[i-1000]; } for (i = ls1+3; i<(ls2=ls1+strlen(s2)+3); i++) { (name->date[i]=s2[i-ls1-3]); } for (i = ls2+1; i<(ls3=ls2+strlen(s3)+1); i++) { (name->date[i]=s3[i-ls2-1]); } for (i = ls3+1; i<(ls4=ls3+strlen(s4)+1); i++) { (name->date[i]=s4[i-ls3-1]); } name->date[ls1]=' '; name->date[ls1+1]='-'; name->date[ls1+2]=' '; name->date[ls2]=':'; name->date[ls3]=':'; name->date[ls4]='\n'; } name->beg=1000; name->end=(ls4+1); printf("Cоздан список из одной позиции\n"); } getch(); return; } void ShowList(int p,TMass*name) { int i; int n=name->len; int first=name->beg; int last=name->end; if (!p) { printf ("Список пуст"); return; } else{ for (i = 1; i < n ; i++) { printf("%c",name->date[i]); } } } void addElem(int z,TMass*name) { int i,k=0; char s1[20]; char s2[3]; char s3[3]; char s4[3]; int ls1,ls2,ls3,ls4,start; int n=name->len; int first=name->beg; int last=name->end; printf("Введите название товара\n"); scanf("%s",s1); printf("Введите час,минуту и секунду прибытия через ENTRE \n(не больше 2 цифр в каждой)\n"); scanf("%s",s2); scanf("%s",s3); scanf("%s",s4); //длинна на которую отличается это (length+12) //======================проверка===================================== if (atoi(s2)==NULL || atoi(s3)==NULL || atoi(s4)==NULL ) { printf("Время не должно содиржать символов, список не создан"); getch(); return; } if (atoi(s2)>99 || atoi(s3)>99 || atoi(s4)>99 || atoi(s2)<0 || atoi(s3)<0 || atoi(s4)<0 ) { printf("Время вводится в формате xx:xx:xx, список не создан"); getch(); return; } if (strlen(s2)!=2 || strlen(s3)!=2 || strlen(s4)!=2 ) { printf("Время вводится в формате xx:xx:xx, список не создан"); getch(); return; } //================================================================== //z=0 в начало z=-1 в конец z >1 произвол if (z==0) { for (i=(start=(first-strlen(s1)-12)); i<(ls1=(start+strlen(s1))) ; i++) { name->date[i]=s1[i-start]; } for (i = ls1+3; i<(ls2=ls1+strlen(s2)+3); i++) { (name->date[i]=s2[i-ls1-3]); } for (i = ls2+1; i<(ls3=ls2+strlen(s3)+1); i++) { (name->date[i]=s3[i-ls2-1]); } for (i = ls3+1; i<(ls4=ls3+strlen(s4)+1); i++) { (name->date[i]=s4[i-ls3-1]); } name->date[ls1]=' '; name->date[ls1+1]='-'; name->date[ls1+2]=' '; name->date[ls2]=':'; name->date[ls3]=':'; name->date[ls4]='\n'; name->beg=start; } if (z==-1) { for (i=(start=last); i<(ls1=start+strlen(s1)) ; i++) { name->date[i]=s1[i-start]; } for (i = ls1+3; i<(ls2=ls1+strlen(s2)+3); i++) { (name->date[i]=s2[i-ls1-3]); } for (i = ls2+1; i<(ls3=ls2+strlen(s3)+1); i++) { (name->date[i]=s3[i-ls2-1]); } for (i = ls3+1; i<(ls4=ls3+strlen(s4)+1); i++) { (name->date[i]=s4[i-ls3-1]); } name->date[ls1]=' '; name->date[ls1+1]='-'; name->date[ls1+2]=' '; name->date[ls2]=':'; name->date[ls3]=':'; name->date[ls4]='\n'; name->end=ls4; first=first; } if (z!=0 && z!=-1) { for (i = first; idate[i]== '\n') { k++; if (k==z) { start=i+1; break; } } } for (i = start; i<(n - strlen(s1)-12); i++) { name->date[i+strlen(s1)+12]=name->date[i]; } for (i=start; i<(ls1=start+strlen(s1)) ; i++) { name->date[i]=s1[i-start]; } for (i = ls1+3; i<(ls2=ls1+strlen(s2)+3); i++) { (name->date[i]=s2[i-ls1-3]); } for (i = ls2+1; i<(ls3=ls2+strlen(s3)+1); i++) { (name->date[i]=s3[i-ls2-1]); } for (i = ls3+1; i<(ls4=ls3+strlen(s4)+1); i++) { (name->date[i]=s4[i-ls3-1]); } name->date[ls1]=' '; name->date[ls1+1]='-'; name->date[ls1+2]=' '; name->date[ls2]=':'; name->date[ls3]=':'; name->date[ls4]='\n'; name->end=last+strlen(s1)+12; for (i = name->end; i < n; i++) { name->date[i]=NULL; } } printf("Элемент добавлен\n"); printf("%d первый\n", name->beg); getch(); return; } void delElem(int z,TMass*name) { int i,k=0,kol=0; int ls1,ls2,ls3,ls4,start,finish; int n=name->len; int first=name->beg; int last=name->end; //================================================================== //z=0 в начало z=-1 в конец z >1 произвол for (i = first; i < last; i++) { if (name->date[i]=='\n') { kol++; } } if (z==0) { for (i = first; i < last; i++) { if (name->date[i]=='\n') { finish=i; break; } } for (i=first; idate[i]=NULL; } name->beg=finish+1; } if (z==-1) { for (i = first; i < last; i++) { if (name->date[i]=='\n') { k++; if (k==(kol)) { start=i+1; } break; } } for (i=start; idate[i]=NULL; } name->end=start; } if (z!=0 && z!=-1) { for (i = first; i < n; i++) { if (name->date[i]=='\n') { k++; if (k==z) { start=i+1; } if (z==(k-1)) { finish=i; break; } } } for (i=start; idate[i]=NULL; } } printf("\nЭлемент удален\n"); getch(); return; } void doElem(int z,int p,TMass*name) { int i,k=0,kol=0; int ls1,ls2,ls3,ls4,start,finish,length,startOUR, finishOUR, lengthOUR; int n=name->len; int first=name->beg; int last=name->end; int k1=p-1; //================================================================== //z=0 в начало z=-1 в конец z=1 предыдущий z=2 следующий //=================================================================== int kourstart; int metka=1; for (i = 0; i < n; i++) { if (name->date[i]=='\n') k++; if (k1==k && metka) { startOUR=i+1; metka=0; kourstart=k; } if (k1==(k-1)) { finishOUR=i; break; } } int mainkol=0; for (i = 1; i < n; i++) { if (name->date[i]=='\n') { mainkol++; } } printf("всего перескоков%d\n ",mainkol); lengthOUR=finishOUR-startOUR; //============================================= if (z==0) {/////satrt for (i = first; i < last; i++) { if (name->date[i]=='\n') { finish=i; break; } } for (i = startOUR; i < finishOUR+1; i++) { name->date[i]=NULL; } char *second; second = new char[n]; int length=finish-first; int diff=length-lengthOUR; const ff1=first; if (diff<=0) { for (i = first; i < finish+1; i++) { name->date[(startOUR-ff1)+i]=name->date[i];} } if (diff>0) { for (i =startOUR ; i < n; i++) { second[i+diff]=name->date[i]; name->date[i]=NULL; } for (i = finishOUR+diff+1; i < n; i++) { name->date[i]=second[i]; } for (i = first; i < finish+1; i++) { name->date[(startOUR-ff1)+i]=name->date[i];} name->end=name->end+diff; } } if (z==-1) { //не работает ((( int search=0; for (i = 0; i < n; i++) { if (name->date[i]=='\n') { search++; } if (search==(mainkol-1)) { start=i+1; break; } } printf("начало конца %d\n",start); for (i = startOUR; i < finishOUR+1; i++) { name->date[i]=NULL; } char *second; second = new char[n]; int length=last-start; int diff=length-lengthOUR; printf("длинна %d",length); printf("разница %d",diff); const ff1=start; if (diff<=0) { for (i = start; i < last+1; i++) { name->date[(startOUR-ff1)+i]=name->date[i];} } if (diff>0) { //запихивает в доп массив for (i =startOUR ; i < n; i++) { second[i+diff]=name->date[i]; name->date[i]=NULL; } for (i = finishOUR+diff; i < n; i++) { //востонавливает в старый name->date[i]=second[i+1]; } for (i = start; i < last+1; i++) { //заменяет но проглатывает один символ след name->date[(startOUR-ff1)+i]=name->date[i];} name->end=name->end+diff; } } //============================================================================ printf("\nЗамена произведена\n"); } void readElem(int num, TMass*name, char*s1,char*s2,char*s3,char*s4){ int i,j,k,startOUR,finishOUR,ends1; int k1=num-1; int n=name->len; int first=name->beg; int last=name->end; int kourstart; int metka=1; for (i = 0; i < n; i++) { if (name->date[i]=='\n') k++; if (k1==k && metka) { startOUR=i+1; metka=0; kourstart=k; } if (k1==(k-1)) { finishOUR=i; break; } } for (i = startOUR; i < finishOUR; i++) { if (name->date[i]==' ') { ends1=i-1; } } for (i = startOUR; i < ends1; i++) { s1[i-startOUR]=name->date[i]; } for (i = ends1+4; i < ends1+5; i++) { s2[i-(ends1+4)]=name->date[i]; } for (i = ends1+7; i < ends1+8; i++) { s3[i-(ends1+7)]=name->date[i]; } for (i = ends1+10; i < ends1+11; i++) { s4[i-(ends1+10)]=name->date[i]; } printf("первый %s\n %s\n %s\n %s\n",s1,s2,s3,s4); } //не доделано int main(){ SetConsoleOutputCP(1251); SetConsoleCP(1251); const n=2000; TMass name; char s1[20]; char s2[3]; char s3[3]; char s4[3]; InitialList (n,&name); CreateList(&name); addElem( 1,&name); addElem(-1,&name); int p=CheckIt(&name); ShowList(p,&name); getch(); readElem(1,&name,&s1,&s2,&s3,&s4); p=CheckIt(&name); ShowList(p,&name); getch(); }