Язык Visual C++ 6.0
Основы программирования
Input 3 float */
class CP46Doc:public CDocument
{
protected:
CP46Doc ();
DECLARE_DYNCREATE (CP46Doc);
double aa, ab, ac; // входные данные
char ad [50];
int ag, ah, ai;
double aj;
int am [10]; // результаты
double an [30], ap [11];
CString ao [10];
void bb ();
void bc ();
void bd (); // решение задач - input 3 float
};
#include <math.h>
CP46Doc::CP46Doc ()
{
int a;
ad [0] = 0;
ag = ah = 0;
for (a = 0; a < 11; a++) ap [a] = rand () / 32767.;
}
void CP46Doc::bb ()
{
ah = 1;
ai = 0;
while ((ad [ai] < '0' || ad [ai] > '9') && ad [ai] != '-' && ad [ai] != '.' && ad [ai]) ai++;
bc ();
aa = aj;
while ((ad [ai] < '0' || ad [ai] > '9') && ad [ai] != '-' && ad [ai] != '.' && ad [ai]) ai++;
bc ();
ab = aj;
while ((ad [ai] < '0' || ad [ai] > '9') && ad [ai] != '-' && ad [ai] != '.' && ad [ai]) ai++;
bc ();
ac = aj;
bd ();
}
void CP46Doc::bc ()
{
int a;
double b;
aj = 0;
a = 1;
b = .1;
if (ad [ai] == '-') {a = -1; ai++;}
while (ad [ai] >= '0' && ad [ai] <= '9')
{
aj = aj * 10 + ad [ai] - '0';
ai++;
}
if (ad [ai] == '.')
{
ai++;
while (ad [ai] >= '0' && ad [ai] <= '9')
{
aj += (ad [ai] - '0') * b;
ai++;
b /= 10;
}
}
aj *= a;
}
void CP46Doc::bd ()
{
int a, b, c, j;
double d, e, f, m;
CString g, h;
an [2] = 3.141592653589; // число "пи"
// 19.5.1 Вычисление степени: y = aa ^ ab
a = (int) ab;
b = a;
if (b < 0) b = -b;
d = 1;
for (c = 0; c < b; c++) d *= aa;
if (a < 0)
if (d)
d = 1 / d;
else
d = 0;
an [0] = d;
if (aa == 0) an [0] = 0;
// 21.2.2 Скорость ракеты
if (aa < 7.5) ao [0] = "2. Ракета упадёт на Землю.";
else if (aa == 7.5) ao [0] = "2. Ракета будет двигаться по круговой орбите около Земли.";
else if (aa < 11.2) ao [0] = "2. Ракета будет двигаться по эллипсу вокруг Земли.";
else if (aa == 11.2) ao [0] = "2. Ракета улетит от Земли по параболе.";
else if (aa < 16.4) ao [0] = "2. Ракета будет двигаться по эллипсу вокруг Солнца.";
else if (aa == 16.4) ao [0] = "2. Ракета улетит от Солнца по параболе.";
else ao [0] = "2. Ракета улетит от Солнца по гиперболе.";
// 21.4.3 Квадратное уравнение
if (aa == 0)
if (ab == 0)
if (ac == 0)
ao [1] = "3. Решение - любое число.";
else
ao [1] = "3. Решений нет.";
else
ao [1].Format ("3. x = %.4g.", -ac / ab);
else
{
d = ab * ab - 4 * aa * ac; // дискриминант
if (d < 0) ao [1] = "3. Решений нет.";
else if (d == 0) ao [1].Format ("3. x = %.4g.", -ab / 2 / aa);
else
{
e = (-ab - sqrt (d)) / 2 / aa;
f = (-ab + sqrt (d)) / 2 / aa;
ao [1].Format ("3. x1 = %.4g, x2 = %.4g.", e, f);
}
}
// 21.5.4 Биквадратное уравнение
if (aa == 0)
if (ab == 0)
if (ac == 0)
ao [2] = "4. Решение - любое число.";
else
ao [2] = "4. Решений нет.";
else
{
d = -ac / ab;
if (d < 0)
ao [2] = "4. Решений нет.";
else
if (d == 0)
ao [2] = "4. x = 0.";
else
ao [2].Format ("4. x1 = %.4g, x2 = %.4g.", -sqrt (d), sqrt (d));
}
else
{
d = ab * ab - 4 * aa * ac;
if (d < 0)
ao [2] = "4. Решений нет.";
else
if (d == 0)
{
e = -ab / 2 / aa;
if (e < 0)
ao [2] = "4. Решений нет.";
else
if (e == 0)
ao [2] = "4. x = 0.";
else
ao [2].Format ("4. x1 = %.4g, x2 = %.4g.", -sqrt (e), sqrt (e));
}
else
{
e = (-ab - sqrt (d)) / 2 / aa;
f = (-ab + sqrt (d)) / 2 / aa;
if (e < 0)
if (f < 0)
ao [2] = "4. Решений нет.";
else
if (f == 0)
ao [2] = "4. x = 0.";
else
ao [2].Format ("4. x1 = %.4g, x2 = %.4g.", -sqrt (f), sqrt (f));
else
if (e == 0)
if (f < 0)
ao [2] = "4. x = 0.";
else
ao [2].Format ("4. x1 = %.4g, x2 = 0, x3 = %.4g.", -sqrt (f), sqrt (f));
else
if (f < 0)
ao [2].Format ("4. x1 = %.4g, x2 = %.4g.", -sqrt (e), sqrt (e));
else
if (f == 0)
ao [2].Format ("4. x1 = %.4g, x2 = 0, x3 = %.4g.", -sqrt (e), sqrt (e));
else
ao [2].Format ("4. x1 = %.4g, x2 = %.4g, x3 = %.4g, x4 = %.4g.", -sqrt (f), -sqrt (e), sqrt (e), sqrt (f));
}
}
// 29.3.5
an [1] = aa;
if (aa < 0) an [1] = 0;
if (aa > 1) an [1] = 1;
// 45.2.6 Длина окружности
an [3] = 2 * an [2] * aa;
// 46.3.7 Площадь круга
an [4] = an [2] * aa * aa;
// 44.1.8 Модуль числа
an [5] = aa;
if (aa < 0) an [5] = -aa;
// 45.2.9
an [6] = fabs (2 * aa + 1) - fabs (3 * aa + 7);
// 45.2.10 Возведение в степень: y = aa ^ ab
d = aa;
e = ab;
if (d > 10 || d < -10) d = 0;
if (e > 10 || e < -10) e = 0;
if (e < 0) e = -e;
if (d == 0)
f = 0;
else
if (e == 0)
f = 1;
else
{
if (d < 0) d = -d;
f = exp (e * log (d));
}
if (ab < 0 && f) f = 1 / f;
an [7] = f;
// 47.3.11 y = sign (x)
am [0] = 0;
if (aa < 0) am [0] = -1;
if (aa > 0) am [0] = 1;
// 47.7.12
d = aa;
b = a = (int) ab;
if (b < 0) b = -b;
e = sqrt (b);
g.Format ("12. %i %g %g, %i ", a + 1, d - 1, 4., (int) d);
h.Format ("%i %i, %g %g.", a / 2, (int) d / 2, a / 2., e * e);
ao [3] = g + h;
// 56.2.13
a = aa < (int) aa;
b = ab < (int) ab;
am [1] = a && b;
// 61.2.14 Формула Герона
d = (aa + ab + ac) / 2;
e = d * (d - aa) * (d - ab) * (d - ac);
if (e < 0) e = 0;
an [8] = sqrt (e);
// 64.2.15 Сумма гармонического ряда
d = aa;
if (d < 0) d = -d;
if (d == 0) d = 1;
a = (int) (1 / d);
if (a > 1000000) a = 1000000;
d = 0;
while (a)
{
d += 1. / a;
a--;
}
an [9] = d;
// 75.14.16
if (aa < 0) {a = -1; ao [4].Format ("16. Число %g отрицательное.", aa);}
else if (aa > 0) {a = 1; ao [4].Format ("16. Число %g положительное.", aa);}
else {a = 0; ao [4].Format ("16. Число %g равно нулю.", aa);}
// 84.4.17 y = exp (x)
d = aa; // аргумент экспоненты
if (d > 10) d = 10;
if (d < -10) d = -10;
a = 0; // номер элемента ряда
e = 1; // очередное слагаемое
f = 0; // сумма ряда
while (fabs (e) > ab)
{
f += e;
a++;
e *= d / a;
if (a > 1000000) break;
}
an [10] = f; // сумма экспоненциального ряда
// 85.5.18
a = (int) ab; // число слагаемых
b = 0; // номер элемента ряда
e = 0; // элемент последовательности
d = aa; // аргумент выражения
if (d < 0) d = -d;
while (b < a && b < 100)
{
e = sqrt (d + e);
b++;
}
an [11] = e;
// 189.3.19
am [2] = aa >= 0 && ab >= 0;
am [3] = ab == 0;
am [4] = aa == 0 || ab == 0;
am [5] = ab >= 0 && aa * aa + ab * ab <= 1;
am [6] = ab <= 0 && aa * aa + ab * ab == 1;
am [7] = (aa >= 0 && ab <= 0 || aa <= 0 && ab >= 0) && aa * aa + ab * ab <= 4 && aa * aa + ab * ab >= 1;
ao [5].Format ("19. %i %i %i, %i %i %i.", am [2], am [3], am [4], am [5], am [6], am [7]);
// 189.4.20
d = aa;
d += 2;
an [12] = d;
d = aa;
d /= 10;
an [13] = d;
d = aa;
d *= d + 1;
an [14] = d;
d = aa;
d += d += d += 1;
an [15] = d;
ao [6].Format ("20. %g %g %g %g.", an [12], an [13], an [14], an [15]);
// 189.5.21
an [11] = aa > 1 ? 2 * aa : aa;
an [12] = aa / 5 == 2 ? 5 : aa / 10;
am [2] = aa > 0 && aa <= 1 ? 1 : 0;
// 31.2.22
d = aa;
if (d > 1) d = 1;
if (d < 0) d = -d;
an [13] = d;
// 33.10.23
an [14] = fabs (aa - 1) + fabs (aa - 4);
// 52.6.24 y = sin x
a = 1; // счётчик степени x
d = 0; // сумма
e = aa; // очередное слагаемое
while (a < 10)
{
d += e;
e *= -aa * aa / (a + 1) / (a + 2);
a += 2;
}
an [15] = d;
an [16] = sin (aa);
// 68.4.25
a = 0;
if (aa > 0 && aa < 10)
{
b = (int) log (aa);
d = exp (aa);
if (b < -10000) b = -10000;
if (d > 10001) d = 10001;
for (c = b; c < d; c++)
a += c * c;
}
am [3] = a;
// 68.5.26 Число точек в круге
a = (int) aa;
j = 0;
if (a > 100) a = 0;
for (b = -a; b <= a; b++)
for (c = -a; c <= a; c++)
if (b * b + c * c <= aa * aa)
j++;
if (aa < 0 || aa > 100) j = 0;
am [4] = j;
// 80.1.27 Площадь кольца
an [17] = (ab * ab - aa * aa) * an [2];
// 88.3.28 Схема Горнера
d = aa; // аргумент
e = 0; // сумма многочлена
if (d > 10) d = 10;
if (d < -10) d = -10;
for (a = 10; a; a--)
e = (e + a) * d;
an [18] = e;
// 88.4.29 Цепная дробь
a = (int) ab;
d = aa;
if (a > 100) a = 100;
for (b = a; b > 0; b--)
{
d = d + b;
if (d == 0) break;
d = aa / d;
}
an [19] = d;
// 88.6.30 y = sqrt (x)
// d = y (k) - очередное приближённое значение ряда
// e = aa = x - подкоренное число
// f = epsilon - точность вычислений значения квадратного корня
// m - предыдущее значение ряда y (k - 1)
d = ab;
e = aa;
f = ac;
m = ab;
while (1)
{
if (m <= 0) break;
d = (m + e / m) / 2;
if (fabs (d - m) < f || fabs (d - m) < 1e-6) break;
m = d;
}
an [20] = d;
// 112.2.31 Схема Горнера
d = aa; // аргумент
e = 0; // сумма многочлена
if (d > 10) d = 10;
if (d < -10) d = -10;
for (a = 0; a < 10; a++)
e = (e + ap [a]) * d;
an [21] = e + ap [10];
// 60.4.32
an [22] = aa - 9.81 * ab * ab / 2;
// 62.1.33
a = (int) aa;
b = a % 7 == a / 5 - 1;
g.Format ("33. %i ", b);
b = (int) (10 * aa) % 2;
c = 1 - a % 2;
j = ab && (a % 3 == 0);
h.Format ("%i %i %i ", b, c, j);
g += h;
b = (aa * ab != 0) && (ab > aa);
c = aa || !ab;
h.Format ("%i %i.", b, c);
ao [7] = g + h;
}
void CP46View::OnDraw (CDC *pDC)
{
CP46Doc *pdoc = GetDocument ();
ASSERT_VALID (pdoc);
CString a;
int d;
pDC -> TextOut (10, 10, "Введите 3 рациональных числа:");
pDC -> TextOut (10, 35, pdoc -> ad);
if (pdoc -> ah) // flag - user pressed <Enter>
{
a.Format ("%g %g %g", pdoc -> aa, pdoc -> ab, pdoc -> ac);
pDC -> TextOut (10, 60, a);
a.Format ("1. %.4g.", pdoc -> an [0]);
pDC -> TextOut (10, 110, a);
pDC -> TextOut (10, 135, pdoc -> ao [0]);
pDC -> TextOut (10, 160, pdoc -> ao [1]);
pDC -> TextOut (10, 185, pdoc -> ao [2]);
a.Format ("5. %g.", pdoc -> an [1]);
pDC -> TextOut (10, 210, a);
a.Format ("6. Длина окружности %.4g.", pdoc -> an [3]);
pDC -> TextOut (10, 235, a);
a.Format ("7. Площадь круга %.4g.", pdoc -> an [4]);
pDC -> TextOut (10, 260, a);
a.Format ("8. Модуль числа %g.", pdoc -> an [5]);
pDC -> TextOut (10, 285, a);
a.Format ("9. %g.", pdoc -> an [6]);
pDC -> TextOut (10, 310, a);
a.Format ("10. %.4g.", pdoc -> an [7]);
pDC -> TextOut (10, 335, a);
a.Format ("11. sign (x) = %i.", pdoc -> am [0]);
pDC -> TextOut (10, 360, a);
pDC -> TextOut (10, 385, pdoc -> ao [3]);
a.Format ("13. %i.", pdoc -> am [1]);
pDC -> TextOut (10, 410, a);
a.Format ("14. Площадь треугольника %.4g.", pdoc -> an [8]);
pDC -> TextOut (10, 435, a);
a.Format ("15. Сумма гармонического ряда %g.", pdoc -> an [9]);
pDC -> TextOut (10, 460, a);
pDC -> TextOut (10, 485, pdoc -> ao [4]);
a.Format ("17. Сумма экспоненциального ряда %g.", pdoc -> an [10]);
pDC -> TextOut (10, 510, a);
a.Format ("18. %g.", pdoc -> an [11]);
pDC -> TextOut (10, 535, a);
pDC -> TextOut (10, 560, pdoc -> ao [5]);
pDC -> TextOut (10, 585, pdoc -> ao [6]);
a.Format ("21. %g %g %i.", pdoc -> an [11], pdoc -> an [12], pdoc -> am [2]);
pDC -> TextOut (10, 610, a);
a.Format ("22. %g.", pdoc -> an [13]);
pDC -> TextOut (10, 635, a);
a.Format ("23. %g.", pdoc -> an [14]);
pDC -> TextOut (10, 660, a);
a.Format ("24. y = %g, sin x = %g.", pdoc -> an [15], pdoc -> an [16]);
pDC -> TextOut (10, 685, a);
a.Format ("25. Сумма %i.", pdoc -> am [3]);
pDC -> TextOut (10, 710, a);
a.Format ("26. Число точек в круге %i.", pdoc -> am [4]);
pDC -> TextOut (350, 10, a);
a.Format ("27. Площадь кольца %.4g.", pdoc -> an [17]);
pDC -> TextOut (350, 35, a);
a.Format ("28. %.4g.", pdoc -> an [18]);
pDC -> TextOut (350, 60, a);
a.Format ("29. Цепная дробь %g.", pdoc -> an [19]);
pDC -> TextOut (350, 85, a);
// последовательность случайных чисел
for (d = 0; d < 11; d++)
{
a.Format ("%.3f", pdoc -> ap [d]);
pDC -> TextOut (350 + d * 60, 710, a);
}
a.Format ("30. sqrt (%g) = %g.", pdoc -> aa, pdoc -> an [20]);
pDC -> TextOut (350, 110, a);
a.Format ("31. %.4g.", pdoc -> an [21]);
pDC -> TextOut (350, 160, a);
a.Format ("32. %.4g.", pdoc -> an [22]);
pDC -> TextOut (350, 185, a);
pDC -> TextOut (350, 210, pdoc -> ao [7]);
}
}
void CP46View::OnChar (UINT nChar, UINT nRepCnt, UINT nFlags)
{
CP46Doc *pdoc = GetDocument ();
ASSERT_VALID (pdoc);
if (nChar == 8)
{
if (pdoc -> ag) {pdoc -> ag--; pdoc -> ad [pdoc -> ag] = 0;}
goto aaa;
}
if (nChar == 13) // user pressed <Enter>
{
pdoc -> bb ();
goto aaa;
}
if (pdoc -> ag < 49)
{
pdoc -> ad [pdoc -> ag] = nChar;
pdoc -> ad [pdoc -> ag + 1] = 0;
pdoc -> ag++;
}
aaa:
Invalidate ();
CView::OnChar(nChar, nRepCnt, nFlags);
}
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Нет комментариев