📄 amplit.cpp
字号:
ch = getch();
if (ch >= '0' && ch <= '9')
{
if (wherex() != 10)
putch(ch);
else
{
writechar(ch,LIGHTGRAY,BLUE,1);
beep();
}
}
else
if (ch != 0)
{
switch(ch)
{
case 13 : fk = 1; ch = 80; break; //enter key pressed
case 8 : //backspace key
if (wherex() != 1)
{
writechar(0,LIGHTGRAY,BLUE,1);
putch(ch);
writechar(0,LIGHTGRAY,BLUE,1);
}
else beep();
break;
case '.' :
X = wherex();
gotoxy(1, wherey());
period = 0;
for (loop = 1; loop <= 10; loop++)
{
gotoxy(loop, wherey());
if (read_char() == '.') period = 1;
}
gotoxy(X,wherey());
if (period == 1) beep();
else
putch(ch);
break;
case '+' :
if (wherex() == 1)
putch(ch);
else
beep();
break;
case '-' :
if (wherex() == 1)
putch(ch);
else
beep();
break;
case 9 :
if (num)
num = 0;
else
num = 1;
switch_line();
if (!num)
window(47,8,59,18);
else
window(27,8,59,18);
gotoxy(1,1);
for (loop = 0; loop <= 9; loop++)
{
str[loop] = read_char();
gotoxy(wherex()+1,wherey());
}
reverse_video();
gotoxy(1,wherey());
for (loop = 0; loop <= 9; loop++)
{
putch(str[loop]);
}
gotoxy(1,wherey());
tab = 1;
break;
default : beep(); break;
}
}
else
{
ch = getch();
fk = 0;
switch (ch)
{
case 75 : //left arrow key pressed
if (wherex() != 1)
gotoxy(wherex()-1,wherey());
else
beep();
break;
case 77 : //right arrow key pressed
if (wherex() != 10)
gotoxy(wherex()+1,wherey());
else
beep();
break;
case 59 : help(); break; // F1 key pressed
case 63 : // F5 key pressed
window (1,1,80,25);
textbackground(BLACK);
textcolor(WHITE);
clrscr();
exit(0);
default : fk = 1;
}
}
}
while (!fk || tab);
if (fk == 1)
{
fk = 0;
switch (ch)
{
case 72 : //up arrow key pressed
switch_line();
if (wherey() != 1)
gotoxy(1,wherey()-1);
else
gotoxy(1,11);
break;
case 80 : //down arrow key pressed
switch_line();
if (wherey() != 11)
gotoxy(1,wherey()+1);
else
gotoxy(1,1);
break;
case 68 : test = 1; break; // F10 key pressed
default : beep(); gotoxy(1,wherey()); break;
}
}
}
while (!test);
}
main()
{
int left, top, right, bottom, maxx, maxy, loop, loop1;
double v, mag, mag_1, real_part, imag_part, phase, phase_1;
char str[10];
char ch;
double A[11] = {0.0};
double B[11] = {0.0};
complex NUM, DEN;
textmode(C80);
coeff_box();
window(27,8,59,18);
for (loop = 0; loop <= 10; loop++) //reads data info from the display
{
for (loop1 = 1; loop1 <= 10; loop1++)
{
gotoxy(loop1,loop+1); //move cursor to read next char
str[loop1-1] = read_char();
}
A[loop] = atof(str); //converts string to float
for (loop1 = 1; loop1 <= 10; loop1++)
{
gotoxy(loop1+20,loop+1);
str[loop1-1] = read_char();
}
B[loop] = atof(str);
}
window(1,1,80,25);
clrscr();
int gdriver = DETECT, gmode, errorcode; // request auto detection
initgraph(&gdriver, &gmode, ""); // initialize graphics mode
errorcode = graphresult(); // read result of initialization
if (errorcode != grOk) // an error occurred
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
}
maxx = getmaxx(); //number of horizonal screen pixel
maxy = getmaxy(); //number of vertical screen pixel
left = maxx/2 - 200; //left side of graph
right = maxx/2 + 200; //right side of graph
top = maxy/2 - 170; //top side of graph
bottom = maxy/2 + 130; //bottom side of graph
rectangle (left, top, right, bottom);
setviewport (left, top, right, bottom, 1);
for (loop = 1; loop <= 5; loop++)
{
line(loop*80,300,loop*80,292); //draws vert hash marks
line(0,loop*100,5,loop*100); //draws horz hash marks
}
setlinestyle (SOLID_LINE,1,1);
setviewport (left, top, right, bottom, 0);
settextjustify(CENTER_TEXT,CENTER_TEXT);
outtextxy(200,330, "Normalized Frequency = f/fN");
outtextxy(200,345, "F1 for PRINTOUT ENTER to continue");
for (loop = 0; loop <= 5; loop++)
{
gcvt(loop/5.0, 10, str); //converts float to string
outtextxy(loop*80,310,str);
}
settextstyle(DEFAULT_FONT, VERT_DIR, 1);
outtextxy(-75,150, "Magnitude");
settextstyle(DEFAULT_FONT, HORIZ_DIR, 1);
settextjustify (RIGHT_TEXT,CENTER_TEXT);
outtextxy(-10,300,"0.0");
outtextxy(-10,200,"0.5");
outtextxy(-10,100,"1.0");
outtextxy(-10,0,"1.5");
setviewport (left, top, right, bottom, 1);
for (loop = 1; loop <= 400; loop++) //loop to plot graph
{
v = loop/400.0;
NUM = complex(A[0],0); //numerator
DEN = complex(B[0],0); //denominator
for (loop1 = 1; loop1 <= 10; loop1++) //transfer fuction
{
NUM += complex(A[loop1]*cos(pi*v*loop1),-A[loop1]*sin(pi*v*loop1));
DEN += complex(B[loop1]*cos(pi*v*loop1),-B[loop1]*sin(pi*v*loop1));
}
mag = sqrt(norm(NUM/DEN)); //magnitude of transfer function
if (loop == 1)
mag_1 = mag;
else //plot graph
{
line (loop-1, 300 - mag_1*200, loop, 300 - mag*200);
mag_1 = mag;
}
}
while(!kbhit());
ch = getch();
if (ch == 0)
{
ch = getch();
if (ch == 59)
LJ_Graphic(); //print graphics
}
setviewport(0,0,115,maxy,0);
clearviewport();
setviewport(left+1,top+1,right-1,bottom-1,1);
clearviewport();
setviewport(left,top,right,bottom,0);
setlinestyle(DASHED_LINE,1,1);
line(0,150,400,150);
setlinestyle(SOLID_LINE,1,1);
for (loop = 1; loop <= 5; loop++)
line(loop*80,300,loop*80,292); //draws vert hash marks
outtextxy(-15,0,"1.57");
outtextxy(-15,150,"0.0");
outtextxy(-15,300,"-1.57");
settextstyle(DEFAULT_FONT,VERT_DIR,1);
outtextxy(-75,150,"RADIANS");
settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
setviewport (left, top, right, bottom, 1);
for (loop = 1; loop <= 400; loop++)
{
v = loop/400.0;
NUM = complex(A[0],0);
DEN = complex(B[0],0);
for (loop1 = 1; loop1 <= 10; loop1++)
{
NUM += complex(A[loop1]*cos(pi*v*loop1),-A[loop1]*sin(pi*v*loop1));
DEN += complex(B[loop1]*cos(pi*v*loop1),-B[loop1]*sin(pi*v*loop1));
}
real_part = real(NUM/DEN);
imag_part = imag(NUM/DEN);
phase = atan(imag_part/real_part); //phase of transfer function
if (loop == 1)
phase_1 = phase;
else //plot phase
{
line (loop-1, 150-(150*phase_1/(pi*0.5)), loop, 150-(150*phase)/(pi*0.5));
phase_1 = phase;
}
}
while (!kbhit());
ch = getch();
if (ch == 0)
{
ch = getch();
if (ch == 59)
LJ_Graphic();
}
closegraph();
textcolor(WHITE);
textbackground(BLACK);
clrscr();
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -