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

UptoLike

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

96
Решение. Исходными данными для решения задачи являются элементы
последовательности: a
1
=sin(1+1/n), a
2
=sin(2+2/n), ..., a
n
=sin(n+n/n). В результате
получаем либо номер элемента, большего заданного Z, либо ответ: «Такого
элемента нет».
Решение этой задачи может закончиться по двум причинам: первая - перебрали
все элементы последовательности и не нашли нужного элемента; вторая - в
процессе перебора обнаружился элемент, больший Z. В этом случае перебор
прекращается и формируется ответ. Когда будет найден ответ
неизвестно,
следовательно, это поисковый цикл.
Первую причину окончания можно определить, проверив условие: i > n, где i -
текущий элемент последовательности, а n - количество элементов в ней. Вторая
причина имеет два значения: «найдено» или «не найдено», поэтому ее можно
изображать логическим значением, где true соответствует найдено, а false - не
найдено. Таким образом, условие окончания поиска может быть записано
в виде
(i>n) or f, что соответствует фразе русского языка: «Просмотрены все элементы
или найдено». Просмотр элементов последовательности в цикле будет выполняться
в случае ложности приведенного условия. Найдем его отрицание,
воспользовавшись законом де Моргана: отрицание дизъюнкции равно конъюнкции
отрицаний.
not((i>n) or f) = not(i>n) and not f = (i<=n) and not f.
Программа на алгоритмическом языке Паскаль:
program pr4;
{ поиск первого элемента последовательности, заданной формулой общего
члена a(i)=sin(i+i/n), где i=1,2,...,n, большего заданного Z }
var n:integer; { количество элементов в последовательности }
z:real; { заданное число }
i:integer; { номер очередного элемента последовательности }
f:boolean; { true, если найден искомый элемент }
begin
write('Введите n и z ');
readln(n,z);
i:=1; f:=false;
while (i<=n) and not f do { пока есть элементы и не найдено }
if sin(i+i/n)>z
then f:=true { искомый элемент найден }
else i:=i+1; { переходим к следующему элементу }
if f
then writeln('Первый элемент больший ',z,' имеет номер ',i)
else writeln('Среди элементов последовательности нет ',
'больших ',z);
end.
Для тестирования
подготовим три теста.
Тест 1: n=10, z=0.9. В этом случае получим ответ: «Первый элемент, больший
0.9 имеет номер 7».
Тест 2: n=10, z=2. В этом случае получим ответ: «Среди элементов
последовательности нет больших 0.9».
                                       96

    Решение. Исходными данными для решения задачи являются элементы
последовательности: a1=sin(1+1/n), a2=sin(2+2/n), ..., an=sin(n+n/n). В результате
получаем либо номер элемента, большего заданного Z, либо ответ: «Такого
элемента нет».
    Решение этой задачи может закончиться по двум причинам: первая - перебрали
все элементы последовательности и не нашли нужного элемента; вторая - в
процессе перебора обнаружился элемент, больший Z. В этом случае перебор
прекращается и формируется ответ. Когда будет найден ответ неизвестно,
следовательно, это поисковый цикл.
    Первую причину окончания можно определить, проверив условие: i > n, где i -
текущий элемент последовательности, а n - количество элементов в ней. Вторая
причина имеет два значения: «найдено» или «не найдено», поэтому ее можно
изображать логическим значением, где true соответствует найдено, а false - не
найдено. Таким образом, условие окончания поиска может быть записано в виде
(i>n) or f, что соответствует фразе русского языка: «Просмотрены все элементы
или найдено». Просмотр элементов последовательности в цикле будет выполняться
в случае ложности приведенного условия. Найдем его отрицание,
воспользовавшись законом де Моргана: отрицание дизъюнкции равно конъюнкции
отрицаний.
    not((i>n) or f) = not(i>n) and not f = (i<=n) and not f.
    Программа на алгоритмическом языке Паскаль:
    program pr4;
    { поиск первого элемента последовательности, заданной формулой общего
    члена a(i)=sin(i+i/n), где i=1,2,...,n, большего заданного Z }
    var        n:integer; { количество элементов в последовательности }
               z:real; { заданное число }
               i:integer; { номер очередного элемента последовательности }
               f:boolean; { true, если найден искомый элемент }
    begin
       write('Введите n и z ');
       readln(n,z);
       i:=1; f:=false;
       while (i<=n) and not f do { пока есть элементы и не найдено }
               if sin(i+i/n)>z
               then f:=true { искомый элемент найден }
               else i:=i+1; { переходим к следующему элементу }
       if f
       then writeln('Первый элемент больший ',z,' имеет номер ',i)
       else writeln('Среди элементов последовательности нет ',
                           'больших ',z);
    end.
    Для тестирования подготовим три теста.
    Тест 1: n=10, z=0.9. В этом случае получим ответ: «Первый элемент, больший
0.9 имеет номер 7».
    Тест 2: n=10, z=2. В этом случае получим ответ: «Среди элементов
последовательности нет больших 0.9».