// p147

// Язык Visual C++ 6.0
// Работа с арифметическими дробями
// Функции для работы с дробями
void add (int a [6]); // сложение
void bigger (int a [6]); // сравнение
void multiply (int a [6]); // умножение
void shorten (int a [6]); // сокращение
void subtract (int a [6]); // вычитание
void CP147View::OnDraw (CDC *pDC)
{
CP147Doc *pdoc = GetDocument ();
ASSERT_VALID (pdoc);
int a, b;
CString d;
int g [10], h [6]; // массив дробей
for (a = 0; a < 10; a++) // создание массива дробей
g [a] = rand () % 9 + 1;
d.Format ("%i / %i, %i / %i, %i / %i, %i / %i, %i / %i",
g [0], g [1], g [2], g [3], g [4], g [5], g [6], g [7], g [8], g [9]);
pDC -> TextOut (10, 10, d); // вывод массива дробей
// Найти сумму всех элементов и их среднее арифметическое.
// Результаты представить в виде несократимых дробей.
h [0] = 0;
h [1] = 1;
for (a = 0; a < 9; a += 2)
{
h [2] = g [a];
h [3] = g [a + 1];
add (h);
h [0] = h [4];
h [1] = h [5];
}
shorten (h);
d.Format ("Сумма дробей %i / %i.", h [2], h [3]);
pDC -> TextOut (10, 60, d);
h [0] = h [2];
h [1] = h [3] * 5;
shorten (h);
d.Format ("Среднее арифметическое дробей %i / %i.",
h [2], h [3]);
pDC -> TextOut (10, 85, d);
// Отсортировать массив дробей в порядке возрастания.
for (a = 0; a < 4; a++)
for (b = 0; b < 4 - a; b++)
{
h [0] = g [b * 2];
h [1] = g [b * 2 + 1];
h [2] = g [b * 2 + 2];
h [3] = g [b * 2 + 3];
bigger (h); // сравниваем дроби
if (h [4]) // меняем дроби местами
{
g [b * 2] = h [2];
g [b * 2 + 1] = h [3];
g [b * 2 + 2] = h [0];
g [b * 2 + 3] = h [1];
}
}
d.Format ("%i / %i, %i / %i, %i / %i, %i / %i, %i / %i",
g [0], g [1], g [2], g [3], g [4], g [5], g [6], g [7], g [8], g [9]);
pDC -> TextOut (10, 135, d); // вывод массива дробей
}
void add (int a [6]) // сложение дробей
{
a [4] = a [0] * a [3] + a [2] * a [1];
a [5] = a [1] * a [3];
}
void subtract (int a [6]) // вычитание дробей
{
a [4] = a [0] * a [3] - a [2] * a [1];
a [5] = a [1] * a [3];
}
void multiply (int a [6]) // умножение дробей
{
a [4] = a [0] * a [2];
a [5] = a [1] * a [3];
}
void shorten (int a [6]) // сокращение дроби
{
int b, c;
b = a [0];
c = a [1];
if (b < 0) b = -b;
if (c < 0) c = -c;
if (b == 0) b = 1;
if (c == 0) c = 1;
while (b - c) if (b > c) b -= c; else c -= b;
a [2] = a [0] / b;
a [3] = a [1] / b;
}
void bigger (int a [6]) // сравнение дробей
{
subtract (a);
if (a [4] * a [5] > 0) // первая дробь больше
a [4] = 1;
else
a [4] = 0;
}

Комментарии

Комментариев нет.