{
cprintf("\n\rПомилка при вiдкриттi файла допомоги %s",FileName);
cprintf("\n\rДопомога недоступна");
cprintf("\n\rНажмiть будь-яку клавiшу...");
getch();
}
else //Иначе выводим файл помощи
{
char ch;
fread(&ch,sizeof(char),1,help_f);
while(!feof(help_f))
{
if (ch=='\n') cprintf("\n\r");
else
cprintf("%c",ch);
fread(&ch,sizeof(char),1,help_f);
}
fclose(help_f);
cprintf("\n\rНажмiть будь-яку клавiшу...");
getch();
}
win1.HideWindow();
}
//*********************** Математические ф-и *********
float f(CD fd){
return sqrt(1-fd.kt*fd.kt*sin(fd.fit)*sin(fd.fit));
}
float f1(CD fd){
return fd.fit;
}
float f2(CD fd){
return fd.fit*exp(-fd.fit);
}
// Ф-и метода Симпсона
float simp(CD sd, float F(CD)=f)
{
float A=sd.fip,
B=sd.fik,
S=0.0;
sd.fit=sd.fip;
int N=int((B-A)/(2.0*sd.hi));
float E=1;
float H;
if(N==0)
{H=0;}
else
{H=(B-A)/(2.0*N);};
//////////////////////
sd.fit=sd.fip;
S=F(sd);
sd.fit=sd.fik;
S=S+F(sd);
for(int i=1;i<=2*N-1;i++){
sd.fit=sd.fip+(i*H);
S=S+(3+E)*F(sd);
E=-E;
}
S=S*H/3;
return S;
}
void ResultSimps(CD rsd){
window(1,1,80,25);
CWindows win1(2,6,79,22,"Метод Сiмпсона");
win1.ShowWindow();
cprintf(" k F(k,f) X F(k,f) X F(k,f) X F(k,f) X F(k,f) X F(k,f)");
cprintf("\n\r----------");
rsd.kt=rsd.kp;
int xpos=1,
ypos=3;
do{
gotoxy(xpos,ypos++);
if (ypos>15) {ypos=3;xpos+=12;}
cprintf("¦%4.2f %6.4f",rsd.kt,simp(rsd));
rsd.kt=rsd.kt+rsd.h;
}while(rsd.kt<=rsd.kk);
gotoxy(xpos,ypos++);
float eps=pow(rsd.kk-rsd.kp,5)/(180*pow(2*(rsd.kk-rsd.kp)/rsd.hi,2))*1000;
cprintf("eps = %10.8f",eps);
getch();
win1.HideWindow();
}
// Ф-и метода Нютона-Котеса
float nuton(CD fd, float F(CD)=f){
float A=fd.fip,
B=fd.fik,
S=0,
H[8];
int i;
int n=7;
float h=(B-A)/(n*1.00);
H[0]=751.0/17280;H[7]=H[0]; H[1]=3577.0/17280;H[6]=H[1];
H[2]=1323.0/17280;H[5]=H[2]; H[3]=2989.0/17280;H[4]=H[3];
fd.fit=A;
for(i=0;i<=n;i++){
S=S+F(fd)*H[i];
fd.fit+=h;
}
S=S*(B-A);
return S;
}
void ResultNuton(CD rtd){
window(1,1,80,25);
CWindows win1(2,6,79,22,"Метод Нютона-Котеса");
win1.ShowWindow();
//cprintf("");
cprintf(" k F(k,f) X F(k,f) X F(k,f) X F(k,f) X F(k,f) X F(k,f)");
cprintf("\n\r--------------");
rtd.kt=rtd.kp;
int xpos=1,
ypos=3;
do{
gotoxy(xpos,ypos++);
if (ypos>15) {ypos=3;xpos+=12;}
cprintf("¦%4.2f %6.4f",rtd.kt,nuton(rtd));
rtd.kt=rtd.kt+rtd.h;
}while(rtd.kt<=rtd.kk);
getch();
win1.HideWindow();
}
// Ф-и метода Чебышева
float cheb(CD fd,float F(CD)=f){
float A=fd.fip,
B=fd.fik,
S=0,
Z[8],
X[8],
C[8];
int n=7;
int i;
X[1]=-0.883862; X[7]=-X[1];
X[2]=-0.529657; X[6]=-X[2];
X[3]=-0.323912; X[5]=-X[3];
X[4]=-0.000000;
for(i=1;i<=n;i++){
Z[i]=(B+A)/2.0+(B-A)*X[i]/2.0;
}
for(i=1;i<=n;i++){
fd.fit=Z[i];
S=S+F(fd);
}
S=S*(B-A)/n;
return S;
}
void ResultCheb(CD rtd){
window(1,1,80,25);
CWindows win1(2,6,79,22,"Метод Чебышева");
win1.ShowWindow();
//cprintf("");
cprintf(" k F(k,f) X F(k,f) X F(k,f) X F(k,f) X F(k,f) X F(k,f)");
cprintf("\n\r--------------");
rtd.kt=rtd.kp;
int xpos=1,
ypos=3;
do{
gotoxy(xpos,ypos++);
if (ypos>15) {ypos=3;xpos+=12;}
cprintf("¦%4.2f %6.4f",rtd.kt,cheb(rtd));
rtd.kt=rtd.kt+rtd.h;
}while(rtd.kt<=rtd.kk);
getch();
win1.HideWindow();
}
void Sravnenia(CD rtd){
window(1,1,80,25);
CWindows win1(2,6,79,22,"Порiвняння методiв");
win1.ShowWindow();
cprintf(" k Y(Сiмпс) Y(Нют) Y(Чеб) ");
cprintf("\n\r--------------------------");
rtd.kt=rtd.kp;
do{
cprintf("\n\r ¦%4.2f %10.8f %10.8f %10.8f",rtd.kt,simp(rtd),nuton(rtd),cheb(rtd));
rtd.kt=rtd.kt+rtd.h;
}while(rtd.kt<=rtd.kk);
float eps=pow(rtd.kk-rtd.kp,5)/(180*pow(2*(rtd.kk-rtd.kp)/rtd.hi,2))*1000;
cprintf("\n\r eps = %4.3f",eps);
getch();
win1.HideWindow();
}
void Test(CD rtd,float FF(CD)){
window(1,1,80,25);
CWindows win1(2,6,79,22,"Тестування методiв");
win1.ShowWindow();
cprintf(" k Y(Сiмпс) Y(Нют) Y(Чеб) ");
cprintf("\n\r------------------------");
rtd.fik=rtd.fip;
do{
cprintf("\n\r ¦%4.2f %10.8f %10.8f %10.8f",rtd.fik,simp(rtd,FF),nuton(rtd,FF),cheb(rtd,FF));
rtd.fik=rtd.fik+rtd.h;
}while(rtd.fik<=1.02);
getch();
win1.HideWindow();
}
//*********************** Главная программа *********
void main()
{
// textbackground(3);
// clrscr();
// textcolor(14);
CD d(0.0,1.0,0,1.0,0.1); //Глобальные данные
Ramky();
VievZavd();
d.Viev();
int exit=1;
do
{
switch(menu())
{
case 1:{
switch(menu_x(3,2,15,4,2,"Про автора","Про прогаму")){
case 1:HelpAbout("int_aut.hlp");break;
case 2:HelpAbout("int_prg.hlp");break;
}break;
}
case 2:{
switch(menu_x(6,2,25,6,4,"Метод Сiмпсона","Метод Нютона-Котеса","Метод Чебишева","Порiвнян. м-дiв")){
case 1:ResultSimps(d);break;
case 2:ResultNuton(d);break;
case 3:ResultCheb(d);break;
case 4:Sravnenia(d);break;
}break;
}
case 3:{
switch(menu_x(19,2,25,4,2,"Тест1|y=S x dx","Тест2|y=Sx*exp(-x)dx")){
case 1:Test(d,f1);break;
case 2:Test(d,f2);break;
case 3:;break;
}break;
}
case 4:{
switch(menu_x(31,2,25,5,3,"Крок","Межi iнтергув.","Межi коеф. k")){
case 1:d.Change_h();;break;
case 2:d.Change_fi();break;
case 3:d.Change_k();break;
}break;
}
case 5:exit=0;break;
}
}
while (exit);
}
Лістинг бібліотеки CWindow.cpp
#include <stdio.h>
#include <conio.h>
#include <dos.h>
class CAplication{
public:
text_info TextInfo;
CAplication();
};
CAplication::CAplication(){
gettextinfo(&TextInfo);
}
class CWindows{
private:
int x1,y1,x2,y2;
intSizeMatrix; // Размер матрицы окна(к-во елементов для массива)
char CharFrame[9];
char FrameColor, // Цвет рамки
FrameBackGround, // Фон рамки
TextColorInWin, // Цвет текста в окне
TextBackGroundInWin, // Цвет фона в окне
*Caption[20];
protected:
char *MemWindowTXT;
int *MemWindowATR;
void PrintScreenWindow();
void ScreenPrintWindow();
void get_char(int *, char *);
void put_char(int,char);
public:
CWindows();
CWindows(int,int,int,int,char*);
~CWindows();
void ShowWindow();
void HideWindow();
};
CWindows::CWindows(int _x1,int _y1,int _x2,int _y2,char _c[20]=""){
x1=_x1;
y1=_y1;
x2=_x2;
y2=_y2;
SizeMatrix=(x2-x1+1)*(y2-y1+1);
CharFrame[0]='-';
CharFrame[1]='-';
CharFrame[2]='-';
CharFrame[3]='¦';
CharFrame[4]='-';
CharFrame[5]='=';
CharFrame[6]='L';
CharFrame[7]='¦';
FrameColor=15,
FrameBackGround=7,
TextColorInWin=15,
TextBackGroundInWin=7;
*Caption=_c;
}
CWindows::CWindows(void){
CWindows(21,6,60,20);
}
CWindows::~CWindows(){
delete MemWindowTXT;
delete MemWindowATR;
}
void CWindows::PrintScreenWindow(){
MemWindowATR=new int[SizeMatrix];
MemWindowTXT=new char[SizeMatrix];
if(MemWindowATR==NULL) {printf("Ошибка"); getch();}
if(MemWindowTXT==NULL) {printf("Ошибка"); getch();}
int k=0;
for(int i=y1;i<=y2;i++)
for(int j=x1;j<=x2;j++){
gotoxy(j,i);
get_char(MemWindowATR+k,MemWindowTXT+k);
++k;
}
//printf("\n%i",k);
}
void CWindows::ScreenPrintWindow(){
window(1,1,80,25);
int k=0;
for(int i=y1;i<=y2;i++)
for(int j=x1;j<=x2;j++){
gotoxy(j,i);
put_char(*(MemWindowATR+k),*(MemWindowTXT+k));
++k;
}
}
void CWindows::ShowWindow(){
window(1,1,80,25);
PrintScreenWindow();
textcolor(FrameColor);
textbackground(FrameBackGround);
gotoxy(x1,y1); cprintf("-");
for(int i=x1+1;i<=x2-1;i++)
cprintf("-");
cprintf("-");
gotoxy(x1+2,y1);cprintf("[%s]",*Caption);
for(i=y1+1;i<=y2-1;i++){
gotoxy(x1,i);
cprintf("¦ ");
}
gotoxy(x1,y2); cprintf("L");
for(i=x1+1;i<=x2-1;i++)
cprintf("=");
cprintf("-");
for(i=y1+1;i<=y2-1;i++){
gotoxy(x2-1,i);
cprintf(" ¦");
}
window(x1+2,y1+1,x2-2,y2-1);
textbackground(TextBackGroundInWin);
textcolor(TextColorInWin);
clrscr();
}
void CWindows::get_char(int *attr, char *ch){
union REGS r;
r.h.ah= 0x8;
r.h.bh= 0;
int86(0x10,&r,&r);
*attr=r.h.ah;
*ch=(char)r.h.al;
}
void CWindows::put_char(int attr,char ch){
union REGS r;
r.h.ah= 0x9;
r.h.al= ch;
r.h.bl= attr;
r.h.bh= 0;
r.x.cx= 1;
int86(0x10,&r,&r);
}
void CWindows::HideWindow(){
ScreenPrintWindow();
}
Додаток В
Структура дискети
1. Методичні вказівки до лабораторних робіт з курсу „Обчислювальні методи та застосування ЕОМ”. Частина ІІІ. Вінниця ВПІ 1992р.
2. Лященко М.Я., Головань М.С. Чисельні методи:Підручник.-К.:Либідь.
3. Волков Е.А. Численые методы: Учеб. пособие для вузов. – 2-е издание.
4. Краскевич В.Е., Зеленский К.Х. Численые методы в инжинерных расчетах. – К.: Вища школа.
5. Язык Си++: учеб. пособие. – 5-е изд. –М:. Финансы и статистика, 2001.
6. Пискунов Н. С. Дифферинциальное и интегральное исчисление для втузов, т 2: Учебное пособие для втузов. – 13-е изд.– М.: Наука, 1985.–560 с.
7. Информатика: Учебник / под ред. Проф. Н.В. Макаровой. - М.: Финансы и статистика, 1997.