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

UptoLike

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

92
формуле получается ответ s=55. Выполнив программу для N=10, получаем тот же
ответ.
Заметим далее, что программа позволит ввести только целое значение N,
отвергнув данные других типов, например вещественные, строковые и т.д.
Теперь попробуем проверить работу программы для N=300. С удивлением
обнаруживаем, что компьютер выдал ответ: s=-20386. Почему было получено
отрицательное число, ведь складывались
положительные числа? Попробуем
выполнить программу для N=200. Получим ответ 20100. Попробуем выполнить
программу для N=400. Получим ответ 14662. Почему сумма для меньшего
значения N превосходит сумму для большего значения N? Оказывается, все дело в
переполнении. Значения суммы для N=300 и N=400 больше максимально
допустимого значения для типа integer (здесь maxint=32767). Поэтому для этих
значений программу использовать нельзя. Установим максимальное значение N,
для которого программа еще может выдать правильный ответ. Для этого найдем
решения неравенства N·(N+1)/232767. Данное неравенство сводится к
квадратному: N
2
+N-655340. Решением этого неравенства будет интервал -
256.5N255.5. Следовательно, разработанная программа будет верна для всех N
от 1 до 255. Если необходимо получать суммы для больших значений N, то
необходимо перейти к другим типам данных, например longint или real, и внести
соответствующие исправления в программу.
Установив границы применимости программы, можно закончить тестирование.
Заметим, что тот
же цикл можно было записать с помощью оператора for:
s:=0; или s:=0;
for i:=1 to N do s:=s+1; for i:=N downto 1 do s:=s+i;
Записи в этом случае получились более короткими, потому что оператор for
специально предназначен для записи арифметических циклов. Запись с помощью
цикла repeat until может быть такой:
s:=0;
i:=1;
repeat s:=s+i;
i:=i+1
until i>N
Упражнения (Во всех упражнениях n - натуральное число):
1. Выполните трассировку программы PR2.
2. Выполните трассировку приведенного ниже фрагмента прграммы и ответьте
на вопрос: «Какую задачу он решает
s:=0;
i:=n;
while i>0 do
begin s:=s+i;
i:=i-1
end;
Запишите данный фрагмент с помощью операторов for и repeat until.
3. Выполните трассировку приведенного ниже фрагмента прграммы и ответьте
на вопросы:
                                     92

формуле получается ответ s=55. Выполнив программу для N=10, получаем тот же
ответ.
    Заметим далее, что программа позволит ввести только целое значение N,
отвергнув данные других типов, например вещественные, строковые и т.д.
    Теперь попробуем проверить работу программы для N=300. С удивлением
обнаруживаем, что компьютер выдал ответ: s=-20386. Почему было получено
отрицательное число, ведь складывались положительные числа? Попробуем
выполнить программу для N=200. Получим ответ 20100. Попробуем выполнить
программу для N=400. Получим ответ 14662. Почему сумма для меньшего
значения N превосходит сумму для большего значения N? Оказывается, все дело в
переполнении. Значения суммы для N=300 и N=400 больше максимально
допустимого значения для типа integer (здесь maxint=32767). Поэтому для этих
значений программу использовать нельзя. Установим максимальное значение N,
для которого программа еще может выдать правильный ответ. Для этого найдем
решения неравенства N·(N+1)/2≤32767. Данное неравенство сводится к
квадратному: N2+N-65534≤0. Решением этого неравенства будет интервал -
256.5≤N≤255.5. Следовательно, разработанная программа будет верна для всех N
от 1 до 255. Если необходимо получать суммы для больших значений N, то
необходимо перейти к другим типам данных, например longint или real, и внести
соответствующие исправления в программу.
    Установив границы применимости программы, можно закончить тестирование.
    Заметим, что тот же цикл можно было записать с помощью оператора for:
    s:=0;                       или s:=0;
    for i:=1 to N do s:=s+1;    for i:=N downto 1 do s:=s+i;
    Записи в этом случае получились более короткими, потому что оператор for
специально предназначен для записи арифметических циклов. Запись с помощью
цикла repeat until может быть такой:
    s:=0;
    i:=1;
    repeat     s:=s+i;
               i:=i+1
    until i>N
    Упражнения (Во всех упражнениях n - натуральное число):
    1. Выполните трассировку программы PR2.
    2. Выполните трассировку приведенного ниже фрагмента прграммы и ответьте
на вопрос: «Какую задачу он решает?»
    s:=0;
    i:=n;
    while i>0 do
    begin      s:=s+i;
               i:=i-1
    end;
    Запишите данный фрагмент с помощью операторов for и repeat until.
    3. Выполните трассировку приведенного ниже фрагмента прграммы и ответьте
на вопросы: