// Язык Visual C++ 6.0
// Основы информатики и вычислительной техники
// Начальный курс C
class CP10Doc:public CDocument
{
protected:
CP10Doc ();
DECLARE_DYNCREATE (CP10Doc);
int aa, ab, ac; // input 3 int
char ad [50]; // вводимая строка символов
int ag, ah, ai, aj; // ввод 3 целых чисел
double ap, aq, ar; // input 3 float
double as;
int am [20]; // результаты
CString an [10];
double ao [10];
int cc [10], cd [10]; // массив случайных чисел
void bb (); // ввод 3 целых чисел
void bc ();
void bd (); // решение задач - input 3 int
void be (); // решение задач - нет ввода данных
void bf (); // решение задач - input 3 float
void bg (); // ввод 3 рациональных чисел
void bh ();
};
#include <math.h>
CP10Doc::CP10Doc ()
{
int a;
ad [0] = 0;
aa = ab = ac = 0;
ag = ah = 0;
am [0] = 0;
for (a = 0; a < 10; a++) // генерация массива случайных чисел
cc [a] = rand () % 11 - 5;
ap = aq = ar = 0;
}
void CP10Doc::bb ()
{
ah = 1;
ai = 0;
while ((ad [ai] < '0' || ad [ai] > '9') && ad [ai] != '-' && ad [ai]) ai++;
bc ();
aa = aj;
while ((ad [ai] < '0' || ad [ai] > '9') && ad [ai] != '-' && ad [ai]) ai++;
bc ();
ab = aj;
while ((ad [ai] < '0' || ad [ai] > '9') && ad [ai] != '-' && ad [ai]) ai++;
bc ();
ac = aj;
bd (); // решение задач
}
void CP10Doc::bc ()
{
int a;
aj = 0;
a = 1;
if (ad [ai] == '-') {a = -1; ai++;}
while (ad [ai] >= '0' && ad [ai] <= '9')
{
aj = aj * 10 + ad [ai] - '0';
ai++;
}
aj *= a;
}
void CP10Doc::bg ()
{
ai = 0;
while ((ad [ai] < '0' || ad [ai] > '9') && ad [ai] != '-' && ad [ai] != '.' && ad [ai]) ai++;
bh ();
ap = as;
while ((ad [ai] < '0' || ad [ai] > '9') && ad [ai] != '-' && ad [ai] != '.' && ad [ai]) ai++;
bh ();
aq = as;
while ((ad [ai] < '0' || ad [ai] > '9') && ad [ai] != '-' && ad [ai] != '.' && ad [ai]) ai++;
bh ();
ar = as;
}
void CP10Doc::bh ()
{
int a;
double b; // множитель для десятичной точки
as = 0;
a = 1;
b = .1;
if (ad [ai] == '-') {a = -1; ai++;}
while (ad [ai] >= '0' && ad [ai] <= '9')
{
as = as * 10 + ad [ai] - '0';
ai++;
}
if (ad [ai] == '.')
{
ai++;
while (ad [ai] >= '0' && ad [ai] <= '9')
{
as += (ad [ai] - '0') * b;
ai++;
b /= 10;
}
}
as *= a;
}
void CP10Doc::bd () // решение задач - input 3 int
{
int a, b, c, d;
double z = 3.141592653589; // число 'пи'
// 10.3.1
am [0] = aa + ab;
// 13.3.2
am [1] = aa;
if (ab > aa) am [1] = ab;
// 15.4.3
a = 0; // сумма
b = aa; // максимум
if (b > 1000) b = 1000;
for (c = 1; c <= b; c++) a += c;
am [2] = a;
// 28.1.4
a = 0;
if (aa == 0) a = 1;
if (aa > 0) a = 2;
am [3] = a;
// 29.2.5
switch (aa)
{
case 5: an [0] = "5. отлично"; break;
case 4: an [0] = "5. хорошо"; break;
case 3: an [0] = "5. удовлетворительно"; break;
case 2: an [0] = "5. неудовлетворительно"; break;
case 1: an [0] = "5. плохо"; break;
default: an [0] = "5. такой отметки нет";
}
// 44.1.6
am [4] = aa;
if (aa < 0) am [4] = -aa;
// 46.3.7
a = aa;
if (a < ab) a = ab;
if (a < ac) a = ac;
am [5] = a;
// 49.6.8
a = 1; // произведение
b = aa; // максимум
if (b > 12) b = -1;
for (c = 1; c <= b; c++) a *= c;
if (b > 12 || b < 0) a = 0;
am [6] = a;
// 53.1.9
a = b = 0;
while (ad [a])
{
if (ad [a] == 'а') b++;
a++;
}
am [7] = b;
// 54.2.10
a = ag; // число букв в строке
an [1] = "10. ";
while (a) an [1] += ad [--a];
// 55.3.11
a = 0;
an [2] = "11. ";
while (a < ag)
{
if (ad [a] == 'а')
an [2] += 'б';
else
an [2] += ad [a];
a++;
}
// 60.1.12
a = aa;
b = ab;
if (a < 0) a = -a;
if (b < 0) b = -b;
if (a > 1000000) a = 1000000;
if (b > 1000000) b = 1000000;
if (!a) a = 1;
if (!b) b = 1;
while (a - b) if (a > b) a -= b; else b -= a;
am [8] = a;
// 107.4.13
an [3] = "13. Небольшое.";
if (aa > 10) an [3] = "13. Большое.";
if (aa > 100) an [3] = "13. Очень большое.";
// 108.5.14
a = aa;
if (a > 1000000) a = 1000000;
while (a >= 10) a -= 10;
am [9] = a;
// 113.6.15
a = ab;
if (!a) a = 1;
am [10] = aa / a;
am [11] = aa % a;
// 114.9.16
a = aa; // делимое
if (a < 1) a = 1;
b = a; // наибольший делитель
d = (int) sqrt (a) + 1; // наибольший возможный делитель
for (c = 2; c < d; c++)
if (a % c == 0) // найден наименьший делитель
{
b = c;
break;
}
am [12] = b;
// 45.2.17
ao [0] = 2 * z * aa;
// 60.8.18
// 61.9.19
// 68.10.20
a = ab;
if (!a) a = 1;
am [13] = aa / a;
am [14] = aa % a;
}
void CP10Doc::be () // решение задач - нет ввода данных
{
int a, b, c;
CString d, e;
unsigned g;
CString j [10];
// 33.1.1
for (a = 0; a < 10; a++)
cd [a] = 0;
// 34.2.2
b = 0;
for (a = 0; a < 10; a++)
b += cc [a];
am [0] = b;
// 36.4.3
for (a = 0; a < 10; a++)
cd [a] = cc [a];
// 37.5.4
for (a = 0; a < 10; a++)
cd [a] = cc [9 - a];
// 37.5.5
am [1] = am [2] = am [3] = 0;
for (a = 0; a < 10; a++)
{
if (cc [a] < 0) am [1]++;
if (cc [a] == 0) am [2]++;
if (cc [a] > 0) am [3]++;
}
// 40.8.6
b = 0;
for (a = 11; a < 100; a += 2)
b += a;
am [4] = b;
// 48.4.7
// 49.6.8
a = 1; // факториал
b = 0; // сумма факториалов
for (c = 1; c < 11; c++)
{
a *= c;
b += a;
}
am [5] = b;
// 108.6.9
b = 0;
for (a = -2; a < 11; a += 3) b += a;
am [6] = b;
// 108.7.10
b = 0;
for (a = 1; a < 11; a++) b += a;
am [7] = b;
// 42.1.11
am [8] = 1996;
// 50.7.12
an [0] = "12. ";
for (a = 10; a; a--)
{
d.Format ("%i ", a);
an [0] += d;
}
an [0] += "Старт";
// 54.8.13
g = 60000;
a = g;
an [1].Format ("13. a = %i, g = %u.", a, g);
// 59.7.14
an [2] = "14. ";
an [2] += 'c';
an [2] += '+';
an [2] += '+';
// 68.11.15
a = 5;
b = 60;
a++;
++b;
an [3].Format ("15. a = %i, b = %i.", a, b);
an [4].Format ("a = %i, b = %i.", a++, ++b);
// 69.12.16
am [9] = 101 <= 105;
am [10] = 101 > 105;
// 81.20.17
an [5] = "17. ";
for (a = 0; a < 1000; a++)
{
d.Format ("%i - %i ", a, a * a * a);
an [5] += d;
if (a * a * a > 2000) break;
}
// 82.21.18
an [6] = "18. ";
for (a = 0; a < 200; a++)
{
if (a % 7) continue;
d.Format ("%i ", a);
an [6] += d;
}
// 85.23.19
an [7] = "19. ";
d = "Привет, ";
e = "мир. ";
an [7] = an [7] + d + e;
d += e;
an [7] = an [7] + d + e;
// 87.25.20
j [0] = "Turbo Basic";
j [1] = "Turbo Pascal";
j [2] = "Borland C++";
j [3] = "Turbo Prolog";
j [4] = "Paradox";
}
void CP10Doc::bf () // решение задач - input 3 float
{
int a;
double d, e, f;
double z = 3.141592653589; // число 'пи'
bg (); // анализ вводимой строки ad [50], получение 3 рациональных чисел
// 29.3.1 Знак числа ap, sign (ap).
d = ap;
if (d < 0) d = 0;
if (d > 1) d = 1;
ao [0] = d;
// 45.2.2
ao [1] = fabs (2 * ap + 1) - fabs (3 * ap + 7);
// 47.3.3
a = 0;
if (ap > 0) a = 1;
if (ap < 0) a = -1;
am [0] = a;
// 58.1.4 Решение квадратного уравнения
if (ap == 0)
if (aq == 0)
if (ar == 0)
an [0] = "4. Решение - любое число.";
else
an [0] = "4. Нет решений.";
else
an [0].Format ("4. x = %.4g.", -ar / aq);
else
{
d = aq * aq - 4 * ap * ar;
if (d < 0)
an [0] = "4. Нет решений.";
else
if (d == 0)
an [0].Format ("4. x = %.4g.", -aq / 2 / ap);
else
{
e = (-aq - sqrt (d)) / 2 / ap;
f = (-aq + sqrt (d)) / 2 / ap;
an [0].Format ("4. x1 = %.4g, x2 = %.4g.", e, f);
}
}
// 61.2.5 Формула Герона
d = (ap + aq + ar) / 2;
e = d * (d - ap) * (d - aq) * (d - ar);
if (e < 0) e = 0;
ao [2] = sqrt (e);
// 46.3.6
ao [3] = z * ap * 2; // длина окружности
ao [4] = z * ap * ap; // площадь круга
}
void CP10View::OnDraw (CDC *pDC)
{
CP10Doc *pdoc = GetDocument ();
ASSERT_VALID (pdoc);
CString a, b;
int d;
if (pdoc -> ah != 2)
pDC -> TextOut (10, 10, pdoc -> ad); // отображение вводимой строки
if (pdoc -> ah == 1) // input 3 int
{
a.Format ("%i %i %i", pdoc -> aa, pdoc -> ab, pdoc -> ac);
pDC -> TextOut (10, 35, a);
a.Format ("1. Сумма %i.", pdoc -> am [0]);
pDC -> TextOut (10, 85, a);
a.Format ("2. Большее %i.", pdoc -> am [1]);
pDC -> TextOut (10, 110, a);
a.Format ("3. Сумма %i.", pdoc -> am [2]);
pDC -> TextOut (10, 135, a);
a.Format ("4. Число корней %i.", pdoc -> am [3]);
pDC -> TextOut (10, 160, a);
pDC -> TextOut (10, 185, pdoc -> an [0]);
a.Format ("6. Модуль %i.", pdoc -> am [4]);
pDC -> TextOut (10, 210, a);
a.Format ("7. Максимум %i.", pdoc -> am [5]);
pDC -> TextOut (10, 235, a);
a.Format ("8. %i! = %i.", pdoc -> aa, pdoc -> am [6]);
pDC -> TextOut (10, 260, a);
a.Format ("9. Число букв 'а' %i.", pdoc -> am [7]);
pDC -> TextOut (10, 285, a);
pDC -> TextOut (10, 310, pdoc -> an [1]);
pDC -> TextOut (10, 335, pdoc -> an [2]);
a.Format ("12. НОД %i.", pdoc -> am [8]);
pDC -> TextOut (10, 360, a);
pDC -> TextOut (10, 385, pdoc -> an [3]);
a.Format ("14. Остаток %i.", pdoc -> am [9]);
pDC -> TextOut (10, 410, a);
a.Format ("15. Частное %i, остаток %i.", pdoc -> am [10], pdoc -> am [11]);
pDC -> TextOut (10, 435, a);
a.Format ("16. Наименьший делитель %i.", pdoc -> am [12]);
pDC -> TextOut (10, 460, a);
a.Format ("17. Радиус %i, длина %.4g.", pdoc -> aa, pdoc -> ao [0]);
pDC -> TextOut (10, 485, a);
a.Format ("18. Вы нажали клавишу %c.", pdoc -> ad [0]);
pDC -> TextOut (10, 510, a);
a.Format ("19. Я знаю ваше имя, ваше имя %s.", pdoc -> ad);
pDC -> TextOut (10, 535, a);
a.Format ("20. Частное %i, остаток %i.", pdoc -> am [13], pdoc -> am [14]);
pDC -> TextOut (10, 560, a);
}
if (pdoc -> ah == 2) // нет ввода данных
{
a = "";
for (d = 0; d < 10; d++)
{
b.Format ("%i ", pdoc -> cc [d]);
a += b;
}
pDC -> TextOut (10, 10, a);
a.Format ("2. Сумма %i.", pdoc -> am [0]);
pDC -> TextOut (10, 60, a);
a = "4. ";
for (d = 0; d < 10; d++)
{
b.Format ("%i ", pdoc -> cd [d]);
a += b;
}
pDC -> TextOut (10, 85, a);
a.Format ("5. %i, %i, %i.", pdoc -> am [1], pdoc -> am [2], pdoc -> am [3]);
pDC -> TextOut (10, 110, a);
a.Format ("6. Сумма %i.", pdoc -> am [4]);
pDC -> TextOut (10, 135, a);
a.Format ("7. Среднее %.4g.", pdoc -> am [0] / 10.);
pDC -> TextOut (10, 160, a);
a.Format ("8. Сумма факториалов %i.", pdoc -> am [5]);
pDC -> TextOut (10, 185, a);
a.Format ("9. Сумма %i.", pdoc -> am [6]);
pDC -> TextOut (10, 210, a);
a.Format ("10. Сумма %i.", pdoc -> am [7]);
pDC -> TextOut (10, 235, a);
a.Format ("11. Сейчас %i год.", pdoc -> am [8]);
pDC -> TextOut (10, 260, a);
pDC -> TextOut (10, 285, pdoc -> an [0]);
pDC -> TextOut (10, 310, pdoc -> an [1]);
pDC -> TextOut (10, 335, pdoc -> an [2]);
pDC -> TextOut (10, 360, pdoc -> an [3]);
pDC -> TextOut (10, 385, pdoc -> an [4]);
a.Format ("16. true - %i, false - %i.", pdoc -> am [9], pdoc -> am [10]);
pDC -> TextOut (10, 410, a);
pDC -> TextOut (10, 435, pdoc -> an [5]);
pDC -> TextOut (10, 460, pdoc -> an [6]);
pDC -> TextOut (10, 485, pdoc -> an [7]);
}
if (pdoc -> ah == 3) // input 3 float
{
a.Format ("%g %g %g", pdoc -> ap, pdoc -> aq, pdoc -> ar);
pDC -> TextOut (10, 35, a);
a.Format ("1. %g.", pdoc -> ao [0]);
pDC -> TextOut (10, 85, a);
a.Format ("2. %g.", pdoc -> ao [1]);
pDC -> TextOut (10, 110, a);
a.Format ("3. sign = %i.", pdoc -> am [0]);
pDC -> TextOut (10, 135, a);
pDC -> TextOut (10, 160, pdoc -> an [0]);
a.Format ("5. Площадь треугольника %.4g.", pdoc -> ao [2]);
pDC -> TextOut (10, 185, a);
a.Format ("6. Радиус %.4g, длина окружности %.4g, площадь круга %.4g.",
pdoc -> ap, pdoc -> ao [3], pdoc -> ao [4]);
pDC -> TextOut (10, 210, a);
}
}
void CP10View::OnChar (UINT nChar, UINT nRepCnt, UINT nFlags)
{
CP10Doc *pdoc = GetDocument ();
ASSERT_VALID (pdoc);
if (nChar == 8)
{
if (pdoc -> ag) {pdoc -> ag--; pdoc -> ad [pdoc -> ag] = 0;}
goto aaa;
}
if (nChar == 13)
{
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);
}
void CP10View::OnCommandNoinput ()
{
CP10Doc *pdoc = GetDocument ();
ASSERT_VALID (pdoc);
// команда меню "command -> no input"; вычисления без ввода данных
pdoc -> ah = 2;
pdoc -> be ();
Invalidate ();
}
void CP10View::OnCommandInput3float ()
{
CP10Doc *pdoc = GetDocument ();
ASSERT_VALID (pdoc);
pdoc -> ah = 3; // команда меню "command -> input 3 float"
pdoc -> bf ();
Invalidate ();
}
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Комментарии 1