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

UptoLike

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

125
* * *
для n=5
* * * * *
*
* ****
*
* ****
для n=7
* * * * * * *
*
* * * * * * *
*
* * * * * * *
*
* * * * * * *
Пример 10.48. Напечатать таблицу функции a·sin(x)+b·cos(x) на отрезке от -
π/2 до 3π/2 с шагом π/18. Подсчитать количество смен знака в этой таблице.
Решение. Выберем длины выводимых данных (:6:3) и рассчитаем длину
печатной строки. В строку входят: стенка (|), пробел, заголовок x, который
печатается в шести позициях, так как его длина меньше длины печатаемого
значения, пробел, стенка, пробел, заголовок <число> * sin(x) + <число> * cos(x),
пробел, стенка. Будем считать, что числа во втором заголовке однозначные. В этом
случае длина заголовка 2 (17 символов)
больше длины печатаемого значения,
поэтому он учтен в длине печатной строки. В результате длина печатной строки
получилась равной 40. Структура программы будет такой: вначале программируем
вывод шапки, затем в цикле вычисляем значение функции и выводим текущую
строку таблицы. Нужно хранить предыдущее значение функции, если
произведение текущего значения функции на предыдущее меньше нуля
, то
функция сменила знак, следовательно, счетчик смен знака увеличиваем на 1.
{ фрагмент 49 }
var a,b:real; { коэффициенты функции }
x:real; { аргумент }
y:real; { функция }
y1:real; { предыдущее значение функции }
i, { счетчик для печати линии подчеркивания }
s:integer; { количество смен знака }
a1,b1:string; { коэффициенты функции в символьном виде }
begin
write('Введите A и B ');
readln(a,b);
{ печать шапки }
for i:=1 to 40 do write('-');writeln; { линия подчеркивания }
str(a:6:3,a1);str(b:6:3,b1); { коэффициенты в символьном виде }
writeln('| x | '+a1+'*sin(x)+'+b1+'*cos(x) |');
{ вывели строку заголовков
}
for i:=1 to 40 do write('-');writeln; { линия подчеркивания }
s:=0; { начальное значение счетчика смен знаков функции }
x:=-pi/2; { начальное значение аргумента }
y1:=a*sin(x)+b*cos(x); { предыдущее значение функции }
while x<=3*pi/2 do { пока не напечатали всю таблицу }
begin
y:=a*sin(x)+b*cos(x); { текущее значение функции }
writeln('| ',x:6:3,' | ',y:6:3,' |'); { вывод строки таблицы }
x:=x+pi/18; { изменили аргумент на шаг }
                                        125

* * *                         *                                         * * * * * * *
                              * * * * *                                 *
                              *                                         * * * * * * *
                              * * * * *                                 *
                                                                        * * * * * * *
для n=5                                                                 *
* * * * *                             для n=7                           * * * * * * *
    Пример 10.48. Напечатать таблицу функции a·sin(x)+b·cos(x) на отрезке от -
π/2 до 3π/2 с шагом π/18. Подсчитать количество смен знака в этой таблице.
    Решение. Выберем длины выводимых данных (:6:3) и рассчитаем длину
печатной строки. В строку входят: стенка (|), пробел, заголовок x, который
печатается в шести позициях, так как его длина меньше длины печатаемого
значения, пробел, стенка, пробел, заголовок <число> * sin(x) + <число> * cos(x),
пробел, стенка. Будем считать, что числа во втором заголовке однозначные. В этом
случае длина заголовка 2 (17 символов) больше длины печатаемого значения,
поэтому он учтен в длине печатной строки. В результате длина печатной строки
получилась равной 40. Структура программы будет такой: вначале программируем
вывод шапки, затем в цикле вычисляем значение функции и выводим текущую
строку таблицы. Нужно хранить предыдущее значение функции, если
произведение текущего значения функции на предыдущее меньше нуля, то
функция сменила знак, следовательно, счетчик смен знака увеличиваем на 1.
    { фрагмент 49 }
    var        a,b:real; { коэффициенты функции }
               x:real; { аргумент }
               y:real; { функция }
               y1:real; { предыдущее значение функции }
               i, { счетчик для печати линии подчеркивания }
               s:integer; { количество смен знака }
               a1,b1:string; { коэффициенты функции в символьном виде }
    begin
       write('Введите A и B ');
       readln(a,b);
       { печать шапки }
       for i:=1 to 40 do write('-');writeln; { линия подчеркивания }
       str(a:6:3,a1);str(b:6:3,b1); { коэффициенты в символьном виде }
       writeln('| x | '+a1+'*sin(x)+'+b1+'*cos(x) |');
       { вывели строку заголовков }
       for i:=1 to 40 do write('-');writeln; { линия подчеркивания }
       s:=0; { начальное значение счетчика смен знаков функции }
       x:=-pi/2; { начальное значение аргумента }
       y1:=a*sin(x)+b*cos(x); { предыдущее значение функции }
       while x<=3*pi/2 do { пока не напечатали всю таблицу }
       begin
               y:=a*sin(x)+b*cos(x); { текущее значение функции }
               writeln('| ',x:6:3,' | ',y:6:3,' |'); { вывод строки таблицы }
               x:=x+pi/18; { изменили аргумент на шаг }