Jump to content

Препоръчан пост

В магазин за ел. уреди се поддържа иформация за:вид на уреда,модел,производител,едиична цена,количество.Да се състави програма,която поддържа файл с посочените данни с помощта на подпрограми за:

- създаване на нов файл с информация за уредите

- регистриране на продажба на уред

- регистриране доставка на уреди

- пресмятане цената на наличното количество от всички уреди от даден вид

- намиране на уреда от даден вид с най-ниска цена

 

#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.Ако можете ми помогнете.Благодаря Ви.

Редактиран от vendor666
Link to comment
Сподели другаде

Немога да разбера къде трябва да поставя sqrt() за да не ми дава грешка.Трябва да е във функцията на main но пак ми дава 1 грешка.

 

Че не й е мястото точно там, не й е - то е ясно. Може да се разположи в тялото на функцията, между големите скоби { и }. Въпросът е обаче, защо въобще мислиш, че sqrt() има място в тази задача? Тази функция изчислява корен квадратен от определено число, а в тази задача, без да съм изчел обстойно целия сорс, никъде не видях да е необходима.

И основното - дори и да се ползва някъде за нещо, то това няма да е в този й вид, защото като резултат от изпълнението си, функцията връща стойност (която не видях да присвояваш на каквото и да е), и преди това очаква да й бъде подадена като аргумент друга стойност, за която sqrt да изчисли и върне корен квадратен.

Редактиран от netcentric
Link to comment
Сподели другаде

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гост
Отговори на тази тема

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   Не можете да качите директно снимка. Качете или добавете изображението от линк (URL)

Loading...
×
×
  • Създай ново...