vendor666 Публикувано Май 17, 2007 Report Share Публикувано Май 17, 2007 (Редактиран) В магазин за ел. уреди се поддържа иформация за:вид на уреда,модел,производител,едиична цена,количество.Да се състави програма,която поддържа файл с посочените данни с помощта на подпрограми за: - създаване на нов файл с информация за уредите - регистриране на продажба на уред - регистриране доставка на уреди - пресмятане цената на наличното количество от всички уреди от даден вид - намиране на уреда от даден вид с най-ниска цена #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <io.h> #include <math.h> #include <conio.h> #define FN "UREDI" /* FILE NAME */ #define BL 512 /* FILE BUF LEN */ #define RL 52 /* REC LEN */ #define VL 10 /* VID LEN */ #define ML 10 /* MODEL LEN */ #define PL 10 /* PROIZ LEN */ #define CL 10 /* CENA LEN */ #define KL 10 /* KOLICH LEN */ #define NV 10 /* NUM VID */ #define OVID 0 #define OMOD OVID+VL #define OPRZ OMOD+ML #define OCEN OPRZ+PL #define OKOL OCEN+CL typedef struct MT MT; char RB[RL+1]; /* REC BUF */ char FB[bL]; /* FILE BUF */ int BP; /* FILE BUF PTR */ int BN; /* BYTES RW/WR */ int FH; /* FILE HANDLE */ long RN; /* NUM RECS */ float SV; /* SUM VID */ float MV; /* MIN VID */ void (*FM)(MT*); /* FUNC PTR */ char* MS= /* MENU STR */ "[D]OSTAVQ\n" "[K]UPUVA\n" "[s]UMA\n" "[M]INIMALNA\n" "[i]ZHOD\n"; struct MT{ char S[ML]; /* NAME */ long K; /* REC NUM */ MT* L; /* LEFT SUBTREE */ MT* R; /* RIGHT SUBTREE */ }; struct{ char* S; MT* P; }VT[NV]= { {"ANTENA ",0}, {"BATERIQ ",0}, {"CHASOVNIK ",0}, {"HLADILNIK ",0}, {"LAMPA ",0}, {"PECHKA ",0}, {"TELEFON ",0}, {"TELEVIZOR ",0}, {"VENTILATOR",0}, {"VIDEO ",0} }; int WRB(); /* WRITE FILE BUF */ int RDB(); /* READ FILE BUF */ int FLB(); /* FLUSH FILE BUF */ long SEEK(long,int); /* SEEK... */ void CLB(); /* CLEAR REC BUF */ void GET(int,int); /* GET INPUT */ void CPY(char*,char*,int); /* COPY FIX LEN STR */ int CMP(char*,char*,int); /* COMPARE FIX LEN STR */ void F2S(char*,char*,int); /* FILE TO STR */ void S2F(char*,char*,int); /* STR TO FILE */ int VID(char*); /* VID IDX */ long ADI(MT**,char*,long); /* ADD TO IDX */ MT* FNI(MT**,char*); /* FIND IN IDX */ void RVI(MT*); /* ROVE IDX */ void CLI(MT**); /* DESTROY IDX */ void FM1(MT*); /* CALLBACK 1 (SUM) */ void FM2(MT*); /* CALLBACK 2 (MIN) */ void ADR(); /* ADD REC */ void RMR(); /* REMOVE REC */ void IDX(); /* BUILD IDX */ void DLV(); /* DELIVER */ void BUY(); /* BUY...*/ void SUM(); /* CALC SUM */ void MIN(); /* CALC MIN */ void CLR(); /* CLEAR RSRC */ void MNU(); /* MENU */ int main() sqrt() { FH=open(FN,O_RDWR|O_BINARY); if(FH==-1){ FH=_creat(FN,0); if(FH==-1){ printf("Error create file"); return 1;}} else IDX(); MNU(); return 0; } void CLR() { int I; for(I=0;I<NV;I++) CLI(&VT[i].P); close(FH); } void MNU() { char C; L1: system("cls"); //<---- Fixed Here printf("%s\n",MS); C=getch(); switch(C&0XDF){ case 'D': DLV(); break; case 'K': BUY(); break; case 'S': SUM(); getch(); break; case 'M': MIN(); getch(); break; case 'I': CLR(); return;} goto L1; } void IDX() { int I; RN=0; SEEK(0,SEEK_SET); while(RDB()==0){ I=VID(RB+OVID); ADI(&VT[i].P,RB+OMOD,RN++);} } void ADR() { int I; long K; char B[KL+1]; I=VID(RB+OVID); if(I==-1){ printf("Nqma takyv artikul\n"); return;} K=ADI(&VT[i].P,RB+OMOD,RN); if(K!=-1){ SEEK(K*RL,SEEK_SET); RDB(); F2S(B,RB+OKOL,KL); I=atoi(B); itoa(++I,B,10); S2F(RB+OKOL,B,KL); SEEK(K*RL,SEEK_SET);} else{ SEEK(RN*RL,SEEK_SET); RN++;} WRB(); } void RMR() { MT* M; int I,J,K; char B[KL+1]; I=VID(RB+OVID); if(I==-1){ printf("Nqma takyv artikul\n"); return;} M=FNI(&VT[i].P,RB+OMOD); if((int)M==-1){ printf("Nqma takyv model\n"); return;} K=M->K; SEEK(K*RL,SEEK_SET); RDB(); F2S(B,RB+OCEN,CL); printf("CENA : %s\n",B); F2S(B,RB+OKOL,KL); J=atoi(B); if(J==0){ printf("Izcherpano kolichestvo\n"); return;} J--; itoa(J,B,10); S2F(RB+OKOL,B,KL); SEEK(K*RL,SEEK_SET); WRB(); } void DLV() { int C; do{ CLB(); printf("VID : "); GET(OVID,VL); printf("MODEL : "); GET(OMOD,ML); printf("PROIZV : "); GET(OPRZ,PL); printf("CENA : "); GET(OCEN,CL); printf("BROI : "); GET(OKOL,KL); RB[RL-2]=0X0D; RB[RL-1]=0X0A; ADR(); printf("\nOshte?('N' za krai)\n\n"); C=getch();} while((C&0XDF)!='N'); } void BUY() { int C; do{ CLB(); printf("VID : "); GET(OVID,VL); printf("MODEL : "); GET(OMOD,ML); RMR(); printf("\nOshte?('N' za krai)\n\n"); C=getch();} while((C&0XDF)!='N'); } void SUM() { int I; CLB(); printf("VID : "); GET(OVID,VL); I=VID(RB+OVID); if(I==-1){ printf("Nqma takyv artikul"); return;} FM=FM1; SV=0; RVI(VT[i].P); printf("%.2f",SV); } void FM1(MT* P) { char B[CL+1]; SEEK(P->K*RL,SEEK_SET); RDB(); if(RB[OKOL]==0X30) return; F2S(B,RB+OCEN,CL); SV+=atof(B); } void MIN() { int I; CLB(); printf("VID : "); GET(OVID,VL); I=VID(RB+OVID); if(I==-1){ printf("Nqma takyv artikul"); return;} FM=FM2; MV=999999.00; RVI(VT[i].P); printf("%.2f",MV); } void FM2(MT* P) { char B[CL+1]; float I; SEEK(P->K*RL,SEEK_SET); RDB(); if(RB[OKOL]==0X30) return; F2S(B,RB+OCEN,CL); I=atof(B); if(I<MV)MV=I; } void GET(int D,int N) { char C; int I=0; do{ C=getch(); if(C==0X0D) break; putch©; *(RB+D+I++)=C;} while(I<N); printf("\r\n"); } void CLB() { int I=RL; do{ RB[i]=0X20;} while(I--); } int WRB() { int I=0; while(I<RL){ if(BP==BL){ BN=write(FH,FB,BL); if(BN!=BL) return 1; BP=0;} FB[bP++]=RB[i++];} FLB(); return 0; } int RDB() { int I=0; while(I<RL){ if(BP==BN){ BN=read(FH,FB,BL); if(BN==0) return 1; BP=0;} RB[i++]=FB[bP++];} RB[RL]=0; return 0; } int FLB() { if(BP>0){ BN=write(FH,FB,BP); if(BN!=BP) return 1;} BP=0; return 0; } long SEEK(long D,int M) { BP=BN=0; return lseek(FH,D,M); } void CPY(char* D,char* S,int N) { while(N--) *D++=*S++; *D=0; } int CMP(char* D,char* S,int N) { char U,V; while(N--){ U=*D&0XDF; V=*S&0XDF; if(U!=V) return U-V; D++; S++;} return 0; } void F2S(char* D,char *S,int N) { while(N--){ if(*S==0X20) break; *D++=*S++;} *D=0; } void S2F(char* D,char* S,int N) { while(*S){ *D++=*S++; N--;} while(N--) *D++=0X20; } int VID(char *S) { int L=0; int R=NV-1; int M,K; do{ M=(L+R)/2; K=CMP(S,VT[M].S,VL); if(K<0)R=M-1;else if(K>0)L=M+1;else return M;} while(R>=L); return -1; } long ADI(MT** M,char* S,long K) { MT* V=*M; int I; if(V==0){ V=*M=(MT*)malloc(sizeof(MT)); CPY(V->S,S,ML); V->K=K; V->L=0; V->R=0;} else{ I=CMP(S,V->S,ML); if(I<0) return ADI(&V->L,S,K);else if(I>0) return ADI(&V->R,S,K); else return V->K;} return -1; } MT* FNI(MT** M,char* S) { MT* V=*M; int I; if(V==0)return (MT*)-1; I=CMP(S,V->S,ML); if(I<0) return FNI(&V->L,S);else if(I>0) return FNI(&V->R,S); else return V; } void RVI(MT* P) { if(P==0)return; FM(P); RVI(P->L); RVI(P->R); } void CLI(MT** P) { if(*P==0)return; CLI(&(*P)->L); CLI(&(*P)->R); free(*P); *P=0; } Немога да разбера къде трябва да поставя sqrt() за да не ми дава грешка.Трябва да е във функцията на main но пак ми дава 1 грешка.Помогнете ми моля ви.С++ 4.52.Ако можете ми помогнете.Благодаря Ви. Редактиран Май 17, 2007 от vendor666 Цитирай Link to comment Сподели другаде More sharing options...
itodorov Публикувано Май 17, 2007 Report Share Публикувано Май 17, 2007 (Редактиран) Немога да разбера къде трябва да поставя sqrt() за да не ми дава грешка.Трябва да е във функцията на main но пак ми дава 1 грешка. Че не й е мястото точно там, не й е - то е ясно. Може да се разположи в тялото на функцията, между големите скоби { и }. Въпросът е обаче, защо въобще мислиш, че sqrt() има място в тази задача? Тази функция изчислява корен квадратен от определено число, а в тази задача, без да съм изчел обстойно целия сорс, никъде не видях да е необходима. И основното - дори и да се ползва някъде за нещо, то това няма да е в този й вид, защото като резултат от изпълнението си, функцията връща стойност (която не видях да присвояваш на каквото и да е), и преди това очаква да й бъде подадена като аргумент друга стойност, за която sqrt да изчисли и върне корен квадратен. Редактиран Май 17, 2007 от netcentric Цитирай Link to comment Сподели другаде More sharing options...
Препоръчан пост
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.