Автор работы: Пользователь скрыл имя, 14 Марта 2012 в 19:55, курсовая работа
Цель курсовой работы – систематизация, углубление и активное применение знаний по системному программированию, закрепление знаний, полученных в лекционном курсе, а также на практических и лабораторных занятиях.
Метод исследования – изучение литературы, составление и отладка программ на компьютере.
1.Введение
2.Разработка программы
3.Руководство программиста
4.Руководство пользователя
5.Заключение
6. Список использованной литературы
7. Листинг программы
}
else
{
sound(freq);
delay(deltime);
nosound();
}
}
else
{
carriage(x,y,BLACK);
len=strlen(let);
strcpy(p,let);
setcolor(WHITE);
if(len>1)
x+=dx;
moveto(x+dx,y+5);
if(len>1)
x-=dx;
outtext(let);
x+=dx*len;
p+=len;
carriage(x,y,WHITE);
}
}
if(BackSpace.Pressed())
{
if(x<LB+dx)
{
if(y>UB)
{
carriage(x,y,BLACK);
x=RB-2*dx;
y-=dy;
carriage(x,y,WHITE);
}
else
{
sound(freq);
delay(deltime);
nosound();
}
}
else
{
carriage(x,y,BLACK);
x-=dx;
*p--=0;
setfillstyle(1,getbkcolor());
bar(x+3,y,x+12,y+12);
setfillstyle(1,WHITE);
carriage(x,y,WHITE);
}
}
if(ClearAll.Pressed())
{
setfillstyle(1,BLACK);
bar(LB-1,UB,RB+1,DB);
x=LB,y=UB;
carriage(x,y,WHITE);
}
if(obuts[4].Pressed()) break;
if(CloseBut.Pressed()) return 1;
}
return 0;
}
void PrintAns(char *s)
{
setfillstyle(1,BLACK);
bar(LB,DB+20,RB,DB+38);
settextjustify(RIGHT_TEXT,TOP_
outtextxy(RB-3,DB+23,s);
settextjustify(LEFT_TEXT,TOP_
}
void main()
{
char s[300],ans[20];
double a;
long t1;
igraph();
ButInit();
iface();
mouse->setVrange(0,480);
mouse->show();
while(1)
{
*s=0;
if(getstring(s)) break;
if(s)
a=Calculate(s);
sprintf(ans,"%f",a);
PrintAns(ans);
}
closegraph();
free(mouse);
}
Файл "CALC.H"
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
struct stk
{
double c;
stk *next;
};
stk *push(stk *head,double a)
{
stk *ptr;
if (!(ptr=(stk*)malloc(sizeof (stk))))
{
printf("\nNot enough memory!\n");
exit(-1);
}
ptr -> c = a;
ptr -> next=head;
return ptr;
}
double pop (stk **head)
{
stk *ptr;
double a=0;
if (!*head)return 0;
ptr = *head;
a = ptr->c;
*head=ptr->next;
free(ptr);
return a;
}
void del(char *src,int pos,int len)
{
char *temp=(char*)malloc(strlen(
strcpy(temp,src+pos+len-1);
*(src+pos-1)=0;
strcat(src,temp);
free(temp);
}
void insert(char *src,char *sub,int pos)
{
int srclen=strlen(src);
int slen=strlen(sub);
char *tmp=(char*)malloc(srclen-
strcpy(tmp,src+pos-1);
*(src+pos-1)=0;
strcat(src,sub);
strcat(src,tmp);
free(tmp);
}
int prior(char c)
{
switch (c)
{
case '^' : return 4;
case '*' : return 3;
case '/' : return 3;
case '+' : return 2;
case '-' : return 2;
case '(' : return 1;
}
return 0;
}
double calcopz(char *s)
{
stk *val=NULL;
double n1,n2,res;
char sn[10],*s1=sn;
while(*s)
{
s1=sn;
if (*s=='^'||*s=='+'||*s=='-'||*
{
n2=pop(&val);
n1=pop(&val);
switch (*s)
{
case '^' : res=pow(n1,n2); break;
case '+' : res=n1+n2; break;
case '-' : res=n1-n2; break;
case '*' : res=n1*n2; break;
case '/' : res=n1/n2; break;
}
// printf("\n%f",res);
val=push(val,res);
}
else
{
s++;
while(*s!='|'&&(isdigit(*s)||*
*s1=0;
val=push(val,atof(sn));
s--;
}
s++;
}
return pop(&val);
}
void makeopz(char *exp,char *opz)
{
stk *opers=0;
char *e=exp,*op=opz;
while (*e)
{
if(*e=='(') opers=push(opers,*e);
if(isdigit(*e))
{
*op++='|';
while (isdigit(*e)||*e=='.') *op++=*e++;
e--;
}
if(*e=='^'||*e=='+'||*e=='-'||
{
if (!opers) opers=push(opers,*e);
else
if(prior(opers->c)<prior(*e))
opers=push(opers,*e);
else
{
while(opers&&(prior(opers->c)>
*op++=pop(&opers);
opers=push(opers,*e);
}
}
if (*e==')')
{
while(opers->c!='(')
*op++=pop(&opers);
pop(&opers);
}
e++;
}
while(opers) *op++=pop(&opers);
*op=0;
}
double calcfun(char *fun,double arg)
{
double (*pf)(double);
pf=0;
if(!strcmpi(fun,"sqrt")) pf=sqrt;
if(!strcmpi(fun,"abs")) pf=fabs;
if(!strcmpi(fun,"sin")) pf=sin;
if(!strcmpi(fun,"cos")) pf=cos;
if(!strcmpi(fun,"tan")) pf=tan;
if(!strcmpi(fun,"exp")) pf=exp;
return pf?(pf)(arg):0;
}
double find(char *s,int &k);
void delfun(char *s)
{
char fstr[10];
double fval;
int k=0;
char *p=s;
while(*p)
{
if(isalpha(*p))
{
fval=find(p,k);
sprintf(fstr,"%f",fval);
del(s,p-s+1,k);
insert(s,fstr,p-s+1);
}
p++;
}
}
double Calculate(char *exp)
{
char opz[100];
delfun(exp);
makeopz(exp,opz);
return calcopz(opz);
}
double find(char *s,int &k)
{
char *p1=s;
int br=1;
double a=0;
char f[5],arg[80],*p2=f,*p3=arg;
while(isalpha(*p1))
{
*p2++=*p1++;
k++;
}
*p2=0;
while(*p1)
{
*p3++=*p1;
k++;
if(*p1=='(') br++;
else
if(*p1==')')br--;
if(br==1)break;
p1++;
}
*p3=0;
a=Calculate(arg);
return calcfun(f,a);
}
Файл "MOUSE.H"
#include <dos.h>
class Mouse
{
public:
int but;
int x,y;
Mouse();
~Mouse();
int IsIn(int x1,int y1,int x2,int y2);
void show();
void hide();
void getstate();
void setVrange(int MYMax,int MYMin);
};
Mouse::Mouse()
{