Конспект лекций по программированию для начинающих. Гладков В.П. - 50 стр.

UptoLike

Составители: 

52
Написав, например, заглушки: f1(x)=сум(1,1), f2(x)=сум(1,1), f3(x)=сум(1,1),
f4(x)=сум(1,1), можно проверить работоспособность написанной программы.
Продолжим детализацию, напишем программу для f1(x)=5(3x
2
+4)
4
. Заметим,
что выражение в скобках повторяется во всех вспомогательных алгоритмах,
поэтому разработаем для него отдельную программу.
ff(x) = 3x
2
+4 = ((3·(x
2
))+4) = сум(умн(3,кв(х)),4).
Четвертую степень можно найти как кв(кв(х)).
Тогда f1(x)=умн(5,кв(кв(ff(x)))). Сейчас заглушку f1(x) можно заменить
написанной программой и проверить правильность работы всей программы.
Третью степень можно найти как умн(кв(х),х).
Тогда f2(x)=умн(3,умн(кв(ff(x)),ff(x))), а f3(x)=умн(7,кв(ff(x))). Одну
четвертую можно представить
как пол(пол(х)), тогда f4(x)=пол(пол(ff(x))).
Все вспомогательные алгоритмы разработаны. Сейчас ими можно заменить
заглушки и проверить работу всей программы. Можно поступить иначе,
подставив написанные вспомогательные алгоритмы в основной. Будет получена
длинная запись с большим количеством скобок, работать с которой нужно
очень осторожно, чтобы не удалить нужную и не подставить лишнюю скобку.
Упражнение
. Подставьте все вспомогательные алгоритмы в основной
алгоритм решения задачи.
8.7. Линейные алгоритмы на Паскале
Запишем пример 8.15 в виде фрагмента программы на Паскале.
Повторяющуюся часть выражения нужно вычислить отдельно, чтобы не
повторять одинаковые вычисления. Затем можно вычислить все выражение. В
этом примере операторы Паскаля запишутся последовательно друг за другом и
выполнять их нужно в порядке записи. Переставить местами эти операторы без
нарушения результата не удается.
Для хранения повторяющейся части выражения можно также использовать
переменную y, потому что при выполнении оператора присваивания сначала
вычисляется значение выражения, стоящее справа, а затем вычисленное
значение пересылается в переменную, указанную слева.
write('Введите x ');
readln(x);
y:=3*sqr(x)+4;
y:=5*sqr(sqr(y))-3*sqr(y)*y+7*sqr(y)-0.25*y;
write('Ответ ',y)
При выполнении второго оператора присваивания потребовалось выполнить
10 операций.
Для сокращения количества операций применим схему Горнера
. Вынесем у
первых двух слагаемых общий множитель за скобки: 5y
4
-3y
3
+7y
2
-1/4·y =
(5y--3)y
3
+7y
2
-0,25y.
Еще раз у первых двух слагаемых вынесем общий множитель за скобки:
(5y--3)y
3
+7y
2
-0,25y=((5y-3)y+7)y
2
-0,25y.
Еще раз проделаем ту же процедуру и окончательно получим ((5y-3)y+7)y
2
-
0,25y = ((5y-3)y+7)y-0,25)y.
                                        52

    Написав, например, заглушки: f1(x)=сум(1,1), f2(x)=сум(1,1), f3(x)=сум(1,1),
f4(x)=сум(1,1), можно проверить работоспособность написанной программы.
    Продолжим детализацию, напишем программу для f1(x)=5(3x2+4)4. Заметим,
что выражение в скобках повторяется во всех вспомогательных алгоритмах,
поэтому разработаем для него отдельную программу.
    ff(x) = 3x2+4 = ((3·(x2))+4) = сум(умн(3,кв(х)),4).
    Четвертую степень можно найти как кв(кв(х)).
    Тогда f1(x)=умн(5,кв(кв(ff(x)))). Сейчас заглушку f1(x) можно заменить
написанной программой и проверить правильность работы всей программы.
    Третью степень можно найти как умн(кв(х),х).
    Тогда f2(x)=умн(3,умн(кв(ff(x)),ff(x))), а f3(x)=умн(7,кв(ff(x))). Одну
четвертую можно представить как пол(пол(х)), тогда f4(x)=пол(пол(ff(x))).
    Все вспомогательные алгоритмы разработаны. Сейчас ими можно заменить
заглушки и проверить работу всей программы. Можно поступить иначе,
подставив написанные вспомогательные алгоритмы в основной. Будет получена
длинная запись с большим количеством скобок, работать с которой нужно
очень осторожно, чтобы не удалить нужную и не подставить лишнюю скобку.
    Упражнение. Подставьте все вспомогательные алгоритмы в основной
алгоритм решения задачи.

                  8.7. Линейные алгоритмы на Паскале
    Запишем пример 8.15 в виде фрагмента программы на Паскале.
Повторяющуюся часть выражения нужно вычислить отдельно, чтобы не
повторять одинаковые вычисления. Затем можно вычислить все выражение. В
этом примере операторы Паскаля запишутся последовательно друг за другом и
выполнять их нужно в порядке записи. Переставить местами эти операторы без
нарушения результата не удается.
    Для хранения повторяющейся части выражения можно также использовать
переменную y, потому что при выполнении оператора присваивания сначала
вычисляется значение выражения, стоящее справа, а затем вычисленное
значение пересылается в переменную, указанную слева.
    write('Введите x ');
    readln(x);
    y:=3*sqr(x)+4;
    y:=5*sqr(sqr(y))-3*sqr(y)*y+7*sqr(y)-0.25*y;
    write('Ответ ',y)
    При выполнении второго оператора присваивания потребовалось выполнить
10 операций.
    Для сокращения количества операций применим схему Горнера. Вынесем у
первых двух слагаемых общий множитель за скобки: 5y4-3y3+7y2-1/4·y =
(5y--3)y3+7y2-0,25y.
    Еще раз у первых двух слагаемых вынесем общий множитель за скобки:
(5y--3)y3+7y2-0,25y=((5y-3)y+7)y2-0,25y.
    Еще раз проделаем ту же процедуру и окончательно получим ((5y-3)y+7)y2-
0,25y = ((5y-3)y+7)y-0,25)y.