{
protected:
CP30Doc ();
DECLARE_DYNCREATE (CP30Doc);
char aa [50]; // вводимая строка
int ad, ae, af, ag; // указатель на ввод символа
int aj, ak, al, am, an; // получение целых чисел из вводимой строки
int ap [10]; // результаты
CString aq [10];
double ar [10];
void bb (); // получение целых значений
void bc ();
void bd (); // решение задач
};
CP30Doc::CP30Doc ()
{
aa [0] = 0;
ad = ae = 0;
aj = ak = al = am = an = 0;
}
void CP30Doc::bb ()
{
ae = 1; // флаг - пользователь нажал <Enter>
af = 0;
while ((aa [af] < '0' || aa [af] > '9') && aa [af] != '-' && aa [af]) af++;
bc ();
aj = ag;
while ((aa [af] < '0' || aa [af] > '9') && aa [af] != '-' && aa [af]) af++;
bc ();
ak = ag;
while ((aa [af] < '0' || aa [af] > '9') && aa [af] != '-' && aa [af]) af++;
bc ();
al = ag;
while ((aa [af] < '0' || aa [af] > '9') && aa [af] != '-' && aa [af]) af++;
bc ();
am = ag;
while ((aa [af] < '0' || aa [af] > '9') && aa [af] != '-' && aa [af]) af++;
bc ();
an = ag;
bd ();
}
void CP30Doc::bc ()
{
int a; // знак собираемого числа
ag = 0;
a = 1;
if (aa [af] == '-') {a = -1; af++;}
while (aa [af] >= '0' && aa [af] <= '9')
{
ag = ag * 10 + aa [af] - '0';
af++;
}
ag *= a;
}
void CP30Doc::bd ()
{
int a, b, c, d, e;
// 30.1.1
ap [0] = aj * am;
ap [1] = ak * al;
// 51.2.2
a = aj;
if (a < ak) a = ak;
if (a < al) a = al;
if (a < am) a = am;
ap [2] = a;
// 116.2.3
a = 0; // указатель на вторую строку
while (aa [a] != ' ' && aa [a]) a++;
aq [0] = "3. ";
for (b = 'a'; b <= 'z'; b++) // перебираем все символы в алфавите
{
d = 0; // флаг - есть ли буква в строке
for (c = 0; c < a; c++)
if (aa [c] == b)
{
d++;
break;
}
for (c = a; aa [c]; c++)
if (aa [c] == b)
{
d++;
break;
}
if (d > 1) aq [0] += b;
}
// 56.11.4
// a - указатель на вторую строку
// b - число вхождений первой строки во вторую строку
// c - адрес проверяемой подстроки (во второй строке)
// d - сравниваемые символы в двух подстроках
// e - флаг отличия символов в двух строках
// ad - сумма длин обеих строк
b = 0;
for (c = a + 1; c < ad + 1 - a; c++)
{
e = 1;
for (d = 0; d < a; d++)
if (aa [d] - aa [c + d]) e = 0;
b += e; // строки совпадают
}
ap [3] = b;
// 62.4.5
if (ad < 3)
ar [0] = ap [4] = 0;
else
{
b = 0;
for (a = 2; a < ad; a++)
if (aa [a] == aa [0]) b++;
ap [4] = b;
ar [0] = 100. * b / (ad - 2);
}
// 70.2.6
a = 0;
aq [1] = "6. ";
while (1)
{
if (aa [a] && aa [a] != ' ')
aq [1] += aa [a];
else
break;
a++;
}
a++;
while (a < ad)
{
aq [1] += aa [a];
a++;
}
// 70.3.7
a = (abs (aj - al) + abs (ak - am)) * 2;
if (a == an)
aq [2] = "7. молодец";
else
aq [2] = "7. неверно";
// 70.4.8
aq [3] = "8. ";
a = 0;
while (aa [a] && aa [a] != ' ')
{
aq [3] += aa [a];
a++;
}
if (aj < 180)
aq [3] += " -- высота не взята.";
else
aq [3] += " -- норма выполнена.";
// 77.1.9
ap [5] = aj + ak + al;
}
void CP30View::OnDraw (CDC *pDC)
{
CP30Doc *pdoc = GetDocument ();
ASSERT_VALID (pdoc);
CString a;
pDC -> TextOut (10, 10, pdoc -> aa);
if (pdoc -> ae) // флаг - пользователь нажал <Enter>
{
a.Format ("%i %i %i %i %i", pdoc -> aj, pdoc -> ak, pdoc -> al, pdoc -> am, pdoc -> an);
pDC -> TextOut (10, 35, a);
a.Format ("1. %i / %i.", pdoc -> ap [0], pdoc -> ap [1]);
pDC -> TextOut (10, 85, a);
a.Format ("2. Максимум %i.", pdoc -> ap [2]);
pDC -> TextOut (10, 110, a);
pDC -> TextOut (10, 135, pdoc -> aq [0]);
a.Format ("4. Число вхождений строки %i.", pdoc -> ap [3]);
pDC -> TextOut (10, 160, a);
a.Format ("5. Число букв %i, процентное соотношение %.3g%%.", pdoc -> ap [4], pdoc -> ar [0]);
pDC -> TextOut (10, 185, a);
pDC -> TextOut (10, 210, pdoc -> aq [1]);
pDC -> TextOut (10, 235, pdoc -> aq [2]);
pDC -> TextOut (10, 260, pdoc -> aq [3]);
a.Format ("9. Сумма %i.", pdoc -> ap [5]);
pDC -> TextOut (10, 285, a);
}
}
void CP30View::OnChar (UINT nChar, UINT nRepCnt, UINT nFlags)
{
CP30Doc *pdoc = GetDocument ();
ASSERT_VALID (pdoc);
if (nChar == 8)
{
if (pdoc -> ad) {pdoc -> ad--; pdoc -> aa [pdoc -> ad] = 0;}
goto aaa;
}
if (nChar == 13)
{
pdoc -> bb ();
goto aaa;
}
if (pdoc -> ad < 49)
{
pdoc -> aa [pdoc -> ad] = nChar;
pdoc -> aa [pdoc -> ad + 1] = 0;
pdoc -> ad++;
}
aaa:
Invalidate ();
CView::OnChar (nChar, nRepCnt, nFlags);
}
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Нет комментариев