Свершилось! Я решил 7 задач из задачника. Ввод данных представляет собой довольно длинный, нудный процесс; поэтому, чтобы не повторять его 7 раз, я решил сэкономить и дать исходные данные семи задачам сразу. Это значит, что вы вводите данные (6 целых чисел) для всех задач одним махом. И они начинают считать. Пробуйте!
Программа написана для Windows 32-bit. Работает во всех версиях от Windows 95 до Windows Vista. Скачать программу, текст программы и условия задач можно здесь:
https://yadi.sk/d/_35psXXri4V5HЗадачи:
» Кликните сюда для просмотра оффтоп текста.. «
1-1. (1) Угол α задан в градусах, минутах и секундах. Найти его величину в радианах с максимально возможной точностью. Рекомендуется проверить работоспособность программы для углов, больших развёрнутого, а также для отрицательных углов.
1-3. (2) Длина отрезка задана в дюймах, 1 дюйм = 2,54 мм. Перевести значение длины в метрическую систему, то есть выразить её в метрах, сантиметрах и миллиметрах. Так, например, 21 дюйм = 0 м 53 см 3,4 мм.
1-4. (3) Заданы моменты начала и конца некоторого промежутка времени в часах, минутах и секундах в пределах одних суток. Найти продолжительность этого промежутка в тех же единицах измерения.
1-5. (4) В такси одновременно сели три пассажира. Когда вышел первый пассажир, на счётчике было p1 рублей; когда вышел второй – p2 рублей. Сколько должен был заплатить каждый пассажир, если по окончании поездки счётчик показал p3 рублей? Плата за посадку составляет p0 рублей.
1-6. (5) Коммерсант, имея стартовый капитал k рублей, занялся торговлей, которая ежемесячно увеличивает капитал на p%. Через сколько лет он накопит сумму s, достаточную для покупки собственного магазина?
1-10. (6) Найти корни квадратного уравнения, заданного своими коэффициентами, с положительным дискриминантом; подстановкой в уравнение убедиться в погрешности вычислений.
1-15. (7) У квадрата ABCD на плоскости известны координаты двух противоположных вершин – точек A и C. Найти координаты точек B и D.
Программа:
» Кликните сюда для просмотра оффтоп текста.. «
Код
Файл “p1Doc.h”
class CP1Doc:public CDocument
{
protected:
CP1Doc ();
DECLARE_DYNCREATE (CP1Doc);
char aa [50]; // ìåñòî äëÿ ââîäèìûõ ñèìâîëîâ
int ba, bb, bc, bd, be, bf; // èñõîäíûå äàííûå - öåëûå ÷èñëà
int ca, cb; // óêàçàòåëü ââîäà â ñòðîêó äàííûõ, <Enter>
int da [10]; // ìåñòî õðàíåíèÿ äàííûõ äëÿ âûâîäà íà ýêðàí
double db [10];
CString dc [10];
int ea, eb;
void fa (); // ïåðåâîä äàííûõ èç ñèìâîëüíîé ôîðìû â öèôðîâóþ
void fb ();
void fc (); // Çàäà÷à p19 - 1 (1)
void fd (); // Çàäà÷à p19 - 3 (2)
void fe (); // Çàäà÷à p19 - 4 (3)
void fg (); // Çàäà÷à p20 - 5 (4)
void fh (); // Çàäà÷à p20 - 6 (5)
void fi (); // Çàäà÷à p21 - 10 (6)
void fj (); // Çàäà÷à p22 - 15 (7)
};
Файл “p1Doc.cpp”
#include "stdafx.h"
#include "math.h"
#include "p1.h"
#include "p1Doc.h"
CP1Doc::CP1Doc ()
{
aa [0] = 0;
ba = bb = bc = bd = be = bf = 0;
ca = cb = 0;
da [0] = 0;
}
void CP1Doc::fa ()
{
cb = 1;
ea = 0;
while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++;
fb ();
ba = eb;
while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++;
fb ();
bb = eb;
while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++;
fb ();
bc = eb;
while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++;
fb ();
bd = eb;
while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++;
fb ();
be = eb;
while ((aa [ea] < '0' || aa [ea] > '9') && aa [ea] != '-' && aa [ea]) ea++;
fb ();
bf = eb;
fc (); fd (); fe (); fg (); fh (); fi (); fj ();
}
void CP1Doc::fb ()
{
int a;
eb = 0;
a = 1;
if (aa [ea] == '-') {a = -1; ea++;}
while (aa [ea] >= '0' && aa [ea] <= '9')
{
eb = eb * 10 + aa [ea] - '0';
ea++;
}
eb *= a;
}
void CP1Doc::fc ()
{
int a;
double b;
a = ba;
if (ba < 0) a = -a;
b = ((bc / 60. + bb) / 60 + a) / 180 * 3.141592653589;
if (ba < 0) b = -b;
db [0] = b;
}
void CP1Doc::fd ()
{
int a, b;
double c;
c = ba * .0254;
if (c < 0) c = 0;
a = (int) c;
c = (c - a) * 100;
b = (int) c;
c = (c - b) * 10;
da [1] = a;
da [2] = b;
db [1] = c;
}
void CP1Doc::fe ()
{
int a, b, c, d, e, f;
a = ba * 3600 + bb * 60 + bc;
b = bd * 3600 + be * 60 + bf;
c = b - a;
d = c / 3600;
c -= d * 3600;
e = c / 60;
f = c - e * 60;
da [3] = d;
da [4] = e;
da [5] = f;
}
void CP1Doc::fg ()
{
int a, b, c;
a = (ba + bb) / 3;
b = (2 * ba - bb + 3 * bc) / 6;
c = ba + bd - a - b;
da [6] = a;
da [7] = b;
da [8] = c;
}
void CP1Doc::fh ()
{
double a, b;
db [2] = 0;
if (!ba) return;
a = (double) bc / ba;
if (a <= 0) return;
b = 1 + bb / 100.;
if (b <= 0) return;
db [2] = log (a) / log (b);
}
void CP1Doc::fi ()
{
double a, b, c;
dc [1].Format ("");
if (!ba)
{
if (!bb)
{
if (!bc) {dc [0].Format ("p21 - 10. Ðåøåíèå - ëþáîå ÷èñëî."); return;}
dc [0].Format ("p21 - 10. Ðåøåíèé íåò."); return;
}
a = -bc / (double) bb;
dc [0].Format ("p21 - 10. x = %.4g.", a);
dc [1].Format ("%i * x + %i = %.4g.", bb, bc, bb * a + bc);
return;
}
a = bb * bb - 4 * ba * bc;
if (a < 0) {dc [0].Format ("p21 - 10. Ðåøåíèé íåò."); return;}
if (!a)
{
a = -bb / 2. / ba;
dc [0].Format ("p21 - 10. x = %.4g.", a);
dc [1].Format ("%i * x^2 + %i * x + %i = %.4g.", ba, bb, bc, ba * a * a + bb * a + bc);
return;
}
b = (-bb + sqrt (a)) / 2 / ba;
c = (-bb - sqrt (a)) / 2 / ba;
dc [0].Format ("p21 - 10. x1 = %.4g, x2 = %.4g.", b, c);
dc [1].Format ("%i * x1^2 + %i * x1 + %i = %.4g. %i * x2^2 + %i * x2 + %i = %.4g.",
ba, bb, bc, ba * b * b + bb * b + bc,
ba, bb, bc, ba * c * c + bb * c + bc);
}
void CP1Doc::fj ()
{
double a, b, c, d;
a = (ba + bc) / 2.;
b = (bb + bd) / 2.;
c = a - ba;
d = b - bb;
db [3] = a - d;
db [4] = b + c;
db [5] = a + d;
db [6] = b - c;
}
Файл “p1View.cpp”
void CP1View::OnDraw (CDC *pDC)
{
CP1Doc *pdoc = GetDocument ();
ASSERT_VALID (pdoc);
CString a;
pDC -> TextOut (5, 5, "Ââåäèòå øåñòü öåëûõ ÷èñåë:");
pDC -> TextOut (5, 30, pdoc -> aa);
a.Format ("code = %i", pdoc -> da [0]);
pDC -> TextOut (5, 55, a);
if (pdoc -> cb)
{
a.Format ("%i %i %i %i %i %i",
pdoc -> ba, pdoc -> bb, pdoc -> bc, pdoc -> bd, pdoc -> be, pdoc -> bf);
pDC -> TextOut (5, 80, a);
a.Format ("p19 - 1. Óãîë ðàâåí %.12g ðàäèàí.", pdoc -> db [0]);
pDC -> TextOut (5, 105, a);
a.Format ("p19 - 3. %i äþéìîâ = %i ì %i ñì %g ìì.",
pdoc -> ba, pdoc -> da [1], pdoc -> da [2], pdoc -> db [1]);
pDC -> TextOut (5, 130, a);
a.Format ("p19 - 4. Äëèíà èíòåðâàëà ðàâíà %i ÷ %i ìèí %i ñ.",
pdoc -> da [3], pdoc -> da [4], pdoc -> da [5]);
pDC -> TextOut (5, 155, a);
a.Format ("p20 - 5. Ïåðâûé ïàññàæèð ïëàòèò %i ð., âòîðîé - %i ð., òðåòèé - %i ð.",
pdoc -> da [6], pdoc -> da [7], pdoc -> da [8]);
pDC -> TextOut (5, 180, a);
a.Format ("p20 - 6. Íåîáõîäèìàÿ ñóììà áóäåò íàêîïëåíà ÷åðåç %.4g ëåò.",
pdoc -> db [2]);
pDC -> TextOut (5, 205, a);
pDC -> TextOut (5, 230, pdoc -> dc [0]);
pDC -> TextOut (5, 255, pdoc -> dc [1]);
a.Format ("p22 - 15. Êîîðäèíàòû âåðøèí êâàäðàòà: B (%.4g; %.4g), D (%.4g; %.4g).",
pdoc -> db [3], pdoc -> db [4], pdoc -> db [5], pdoc -> db [6]);
pDC -> TextOut (5, 280, a);
}
}
void CP1View::OnChar (UINT nChar, UINT nRepCnt, UINT nFlags)
{
CP1Doc *pdoc = GetDocument ();
ASSERT_VALID (pdoc);
pdoc -> da [0] = nChar;
if (nChar == 8)
{
if (pdoc -> ca) {pdoc -> ca--; pdoc -> aa [pdoc -> ca] = 0;}
goto aaa;
}
if (nChar == 13)
{
pdoc -> fa ();
goto aaa;
}
if (pdoc -> ca < 49)
{
pdoc -> aa [pdoc -> ca] = nChar;
pdoc -> aa [pdoc -> ca + 1] = 0;
pdoc -> ca++;
}
aaa:
Invalidate ();
CView::OnChar (nChar, nRepCnt, nFlags);
}
Вот почему букеты из шаров придумали, а аниме-библиотеку – нет? Ведь то же самое (bunch – связка).