-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathheader.cpp
119 lines (110 loc) · 2.69 KB
/
header.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
#include <cmath>
#include <gtest/gtest.h>
#include "header.h"
using namespace std;
void Cardioid::set(long double value){
if (!cin || value<0)
throw exception();
a=value;
}
long double Cardioid::get(){
return a;
}
long double Cardioid::distance(long double f){
return 2*a*(1-cos(f));
}
long double Cardioid::square(){
return 6*a*a*M_PI;
}
long double Cardioid::length(long double f){
return 8*a*(1-cos(f/2));
}
long double Cardioid::curvature(long double f){
return 8.0/3.0*a*sin(f/2);
}
long double *Cardioid::extreme(){
long double *array=new long double[4];
array[0]=2*a*(1-cos(2*M_PI/3))*cos(2*M_PI/3);
array[1]=2*a*(1-cos(2*M_PI/3))*sin(2*M_PI/3);
array[2]=2*a*(1-cos(2*M_PI/3))*cos(2*M_PI/3);
array[3]=2*a*(cos(2*M_PI/3)-1)*sin(2*M_PI/3);
return array;
}
void dialogue(){
Cardioid card;
string commands[]={"0: Quit", "1: Setting radius", "2: Getting radius", "3: Getting distance", "4: Getting square", "5: Getting length", "6: Getting radius of curvature", "7: Getting maximum and minimum\n"};
cout<<endl;
long long res=sizeof(commands)/sizeof(commands[0]);
while (res){
cout<<"MENU:"<<endl;
for (long long i=0; i<sizeof(commands)/sizeof(commands[0]); i++){
cout<<commands[i]<<endl;
}
cout<<"Enter number of a command:"<<endl;
res=1;
try{
cin>>res;
if (!cin || res>=sizeof(commands)/sizeof(commands[0]) || res<0)
throw exception();
}catch (exception &ex){
res=1;
scanf("%*c");
cin.clear();
cout<<"Invalid command!"<<endl<<endl;
continue;
}
cout<<endl;
long double f;
long double a;
long double *array;
switch (res){
case 0:
break;
case 1:
try{
cout<<"Enter a radius:"<<endl;
cin>>a;
card.set(a);
}catch (exception &ex){
res=1;
scanf("%*c");
cin.clear();
cout<<"Invalid radius!"<<endl<<endl;
continue;
}
cout<<endl;
break;
case 2:
cout<<"Radius: "<<card.get()<<endl<<endl;
break;
case 3:
cout<<"Enter an angle:"<<endl;
cin>>f;
cout<<endl;
cout<<"Distance: "<<card.distance(f)<<endl<<endl;
break;
case 4:
cout<<"Square: "<<card.square()<<endl<<endl;
break;
case 5:
cout<<"Enter an angle:"<<endl;
cin>>f;
cout<<endl;
cout<<"Square: "<<card.length(f)<<endl<<endl;
break;
case 6:
cout<<"Enter an angle:"<<endl;
cin>>f;
cout<<endl;
cout<<"Radius of curvature: "<<card.curvature(f)<<endl<<endl;
break;
case 7:
array=card.extreme();
cout<<"Maximum: x="<<array[0]<<" y="<<array[1]<<endl;
cout<<"Minimum: x="<<array[2]<<" y="<<array[3]<<endl<<endl;
delete[] array;
break;
}
}
}