Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Текст програми

Читайте также:
  1. A10. Укажите правильную морфологическую характеристику слова ГОТОВЫ из четвертого (4) предложения текста.
  2. A28. Какое высказывание противоречит содержанию текста?
  3. A28. Какое высказывание противоречит содержанию текста?
  4. A9. Укажите верную характеристику второго (2) предложения текста.
  5. ATTENTION!! тут не описано как проверять партиклы! только модель с текстурами
  6. FontBold, Fontltalic, FontName, FontSize, FontUnderline определяют шрифты текста метки.
  7. John O'Callaghan Feat Sarah Howells — Find Yourself Текст песни

Комп’ютерний практикум №4.1

Тема: Оператори циклу. Робота з масивами.

Завдання:

Написати програму, яка повинна виводити таблицю значень синусів або косинусів

(розрахованих за допомогою розкладання функції в ряд Тейлора) і табличних значень, а

також їх різницю в заданому діапазоні із заданим кроком та точністю.

 

Текст програми

#include "stdafx.h"

#include <iostream>

#include <math.h>

#include <conio.h>

#include <iomanip>

using namespace std;

const double pi=3.141592653589;

 

double perevod (double x,int &znak)

{

if (x<0) {

x=fabs(x);

znak=-1;

}

else {znak=1;}

 

 

while((x/360)>1)

{

 

x=x-360;

}

 

x=(x*pi)/180;

return(x);}

int format (float pre)

{

int i=0;

 

for(i=0;pre<1;i++)

pre*=10;

 

return(i);}

 

bool funF (char *s) { //функція перевірки на коректність вводу. у разі виявлення не цифр, та більше ніж одної коми(ввіділення цілої частини від дробової//Нова спеціально для fgets

// у адресу пам'яті повертаетця значення false. У разі корекного вводу, повертаетця true

bool q;

int i=0; // лічильник циклу

int l=0; //лічільник десятичьних крапок

int e=0;//лічильник символа Е або е

int j=0;//наступна позиція після Е або е, бля того щоб відстежити символ -, також на перевірки чи далі іде число, а не перехід на наступну строку

int p=0;//відстежування якщо десятичьна крапка є, за одну позицію до Е

int w=15;//відстежування крапок після Е

int d=0;//наспупна позиція після Е чи після Е-, для перевірки чи далі іде число, а не перехід на наступну строку

int r=0;//

int a=0;

if (strlen(s)>15||strlen(s)<1) { q=false; }

else {

if ((s[0]=='-')&&((s[1]=='0')||(s[1]=='1')||(s[1]=='2')||(s[1]=='3')||(s[1]=='4')||(s[1]=='5')||(s[1]=='6')||(s[1]=='7')||(s[1]=='8')||(s[1]=='9')))

{a=2;q=true;} else {q=false;}

 

for(i=a;i<strlen(s)-1;i++) {

if ((s[i]=='0')||(s[i]=='1')||(s[i]=='2')||(s[i]=='3')||(s[i]=='4')||(s[i]=='5')||(s[i]=='6')||(s[i]=='7')||(s[i]=='8')||(s[i]=='9'))

 

{q=true;}

else if((s[i]==',')&&(l==0)&&(w>i)&&(i!=0)) {l++;q=true;r=i+1;if ((s[r]=='0')||(s[r]=='1')||(s[r]=='2')||(s[r]=='3')||(s[r]=='4')||(s[r]=='5')||(s[r]=='6')||(s[r]=='7')||(s[r]=='8')||(s[r]=='9'))

{} else {q=false;break;}

}

 

else if (((s[i]=='e')||(s[i]=='E'))&&(e==0)) {e++;q=true;j=i+1;p=i-1;w=i;d=i+2;

if (s[j]=='-') {i++;};

if ((s[p]==',')){q=false;break;}

if (((s[j]=='0')||(s[j]=='1')||(s[j]=='2')||(s[j]=='3')||(s[j]=='4')||(s[j]=='5')||(s[j]=='6')||(s[j]=='7')||(s[j]=='8')||(s[j]=='9'))||(s[d]=='0')||(s[d]=='1')||(s[d]=='2')||(s[d]=='3')||(s[d]=='4')||(s[d]=='5')||(s[d]=='6')||(s[d]=='7')||(s[d]=='8')||(s[d]=='9'))

{}else {q=false;break;}

}

 

else {q=false;break;};

 

} }

 

return(q);}

double read (const char a[])

{char v[17];

double vvod=0;

fflush(stdin);

cout <<a;

do{

 

 

fflush(stdin);

fgets(v,17,stdin);

if(funF(v)==true) {vvod=atof(v);}

else {cout <<"Не коректный ввод!В вашом вводе были не только цифри,а и символы.\nПопробуйте вместо '.' для разделения целой и дробной части ввести','.\nИли сократите количество символов ввода.\n\n"<<a;

}

 

} while (funF(v)!=true);

 

system("cls");

return(vvod);}

 

void table1 (double a,double b,double c,double d,float presic)

{

 

cout<<"| "<<setprecision(0)<<setw(0)<<a<<setw(8)<<setprecision(format(presic))<<" |"<<setw(13)<<b<<setw(9)<<" |"<<setw(14)<<c<<setw(11)<<" |"<<setw(10)<<d<<setw(11)<<""<<endl;

 

}

void table (void)

{

cout<<"--------------------------------------------------------------------------------";

cout<<"| Угол | Тейлор | Табличьное | Разница |\n";

 

}

 

double sin1 (double xe,float p)

{

double q,s;

int n=1;

q=s=xe;

while (fabs(q)>=p){

q=q*(-(xe*xe))/((n+1)*(n+2));

s=s+q;

n=n+2;

}

return(s);}

 

void write (double x1,double x2, double x3,float p){

int i=0,k=0,n=0,w=0,a=0,zn;

double px=0;

bool f=true;

 

const int raz=10;

 

 

table();

 

 

if(x1>x2&&x3<0) {

 

for(x1;x1>=x2;x1+=x3)

{

 

 

i++;

px=perevod(x1,zn);

table1(x1,zn*sin1(px,p),zn*sin(px),(fabs(zn*sin1(px,p)-zn*sin(px)))>p?fabs(zn*sin1(px,p)-zn*sin(px)):0,p);

if (i==raz) {cout<<"Выведено "<<i<<" значений\n";

cout<<"Для продолжения 1, для вихода любую кнопку\n";

if(getch()=='1') {

i=0;

system("cls");

table();

}

else {break;}

}

 

}

if (fabs(x1-x3)==fabs(x2)){}

else

{

px=perevod(x2,zn);

table1(x2,zn*sin1(px,p),zn*sin(px),(fabs(zn*sin1(px,p)-zn*sin(px)))>p?fabs(zn*sin1(px,p)-zn*sin(px)):0,p);

}

 

}

 

 

else{

 

 

for(x1;x1<=x2;x1+=x3)

{

 

 

i++;

px=perevod(x1,zn);

table1(x1,zn*sin1(px,p),zn*sin(px),(fabs(zn*sin1(px,p)-zn*sin(px)))>p?fabs(zn*sin1(px,p)-zn*sin(px)):0,p);

if (i==raz)

{

cout<<"Выведено "<<i<<" значений\n";

cout<<"Для продолжения 1, для вихода любую кнопку\n";

if(getch()=='1') {

i=0;

system("cls");

table();}

else {break;}

}}

if (fabs(x1-x3)==fabs(x2)){}

else

{

px=perevod(x2,zn);

table1(x2,zn*sin1(px,p),zn*sin(px),(fabs(zn*sin1(px,p)-zn*sin(px)))>p?fabs(zn*sin1(px,p)-zn*sin(px)):0,p);

}}

}

 

void main ()

{

setlocale(LC_ALL, "Russian");

const char pov1[]="Введите начяльный угол(не больше 32000)=";

const char pov2[]="Введите конечный угол(не больше 32000)=";

const char pov3[]="Введите шаг изменения угла(не бельше 32000)=";

const char pov4[]="Введите точность(не больше 1е-7)=";

const char err1[]="Ошибка!начяльний угол больше чем конечьный";

const char err2[]="Вы ввели шаг который больше заданого диапазона,или равен диапазону";

const char err3[]="Ошибка!Точьность не может быть 0!";

const char err4[]="Ошибка!Шаг не должен быть 0!";

const char err5[]="Для даного диапазона, шаг не может бить отрицателен\n";

const char err6[]="Вы ввели не допустимое сочетание углов!\n";

const char err7[]="Вы вели слишком большое число, или не верную точьность!";

int z;

double x0,xk,xz,x0r,xkr;

float p;

do{ cin.clear();

system("cls");

cout<<"Привет! Эта програма счетает sin (х) в зависимости от заданового Вами начяльно и конечьного угла\n а также шага изменения угла\n";

x0=read(pov1);

xk=read(pov2);

xz=read(pov3);

p=read(pov4);

cout<<"Начяльный угол="<<x0<<" Конечный угол="<<xk<<" Шаг изменения угла="<<xz<<" Точность="<<p<<"\n";

if(x0<32000&&xk<32000&&xz<32000&&p<1&&p>=0&&p>=0.0000001) {

 

if((p==0)) {cout<<err3<<endl;}

else if ((xz==0)||(x0<xk&&xz<0)||(x0>xk&&xz>0)||(fabs(xz)>=fabs(xk-x0))) {

cout<<err4<<endl;

table();

x0r=perevod(x0,z);

table1(x0,z*sin1(x0r,p),z*sin(x0r),(fabs(z*sin1(x0r,p)-z*sin(x0r)))>p?fabs(z*sin1(x0r,p)-z*sin(x0r)):0,p);

xkr=perevod(xk,z);

table1(xk,z*sin1(xkr,p),z*sin(xkr),(fabs(z*sin1(xkr,p)-z*sin(xkr)))>p?fabs(z*sin1(xkr,p)-z*sin(xkr)):0,p);

 

}

else if((x0<xk&&xz>0)||(x0>xk&&xz<0)) {write(x0,xk,xz,p);}

else {cout<<err6<<endl;}

} else{cout<<err7<<endl;}

 

cout<<"Для нового запуска программы нажмите 1, для выхода любую кнопку\n";

 

}while (getch()=='1');

}

 

Введені та одержані результати:

Висновок: Програма вирішує поставлене завдання. Теоретичні розрахунки відповідають отриманим. Програма працює правильно.


Дата добавления: 2015-10-28; просмотров: 94 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Financial Support| Создание иерархических объектов и их анимация

mybiblioteka.su - 2015-2024 год. (0.019 сек.)