Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
20
Добавлен:
30.04.2013
Размер:
130.56 Кб
Скачать

Program Simple; {Версия 2}

label LabErr;

var

N : integer;

I : integer;

F : boolean;

begin

readln(N);

if N<=0 then goto LabErr;

F:= false;

for I:=2 to N-1 do

if (N mod I) = 0 then

F:= true;

If f then

writeln('Число не является простым')

else

writeln('Число простое');

LabErr:

end.

Теперь программа будет функционировать надежнее.

Удобство применения – это способность программы обеспечивать простоту ввода исходных данных и получение результатов в наиболее понятной и наглядной форме.

Для этого программа должна:

  • формировать запрос на ввод данных в понятной форме

  • снабжать комментариями вывод результатов

  • информировать пользователя об ошибках при задании входных данных и (при диалоговом режиме работы программы) дать ему возможность исправить ошибку.

Наша программа (ее вторая версия):

  • не выводит запрос на ввод данных

  • не информирует об ошибке (вводе отрицательного числа)

  • не позволяет исправить эту ошибку.

Исправим программу следующим образом:

Вместо оператора «goto LabErr» используем конструкцию «repeat … until», обеспечив циклический запрос на ввод данных до тех пор, пока они не будут введены правильно. Кроме этого дополнительно поместим операторы вывода текста, характеризующего назначение программы, для пользователя.

Текст программы теперь примет следующий вид:

Program Simple; {Версия 3}

var

N : integer;

I : integer;

F : boolean;

begin

writeln('Программа определения принадлежности');

writeln(' числа множеству простых чисел');

repeat

write('Введите исходное натуральное число ');

readln(N);

if N<=0 then

writeln('Число должно быть больше 0');

until N>0;

F:= false;

for I:=2 to N-1 do

if (N mod I) = 0 then

F:= true;

If f then

writeln('Число не является простым')

else

writeln('Число простое');

end.

Эффективность по быстродействию и по затратам памяти характеризуется зависимостью времени работы программы или затрат основной памяти от размера исходных данных. В этом контексте говорят о временнóй (ударение на «о») и емкостной сложности программы.

Поведение временнóй сложности в пределе при увеличении размера задачи называется асимптотической временнóй сложностью программы.

Зависимости могут быть различными, например:

  • линейными, когда временнáя сложность линейно зависит от N (например, при вычислении суммы элементов массива)

  • квадратичными, когда временнáя сложность имеет порядок N2 (например, при сортировке массива)

  • логарифмическими, когда время решения пропорционально log2N (например, при поиске в упорядоченном массива методом деления интервала пополам).

Асимптотическая временнáя сложность – важная характеристика алгоритма и программы, построенной на ее основе. Выбор более оптимального алгоритма, если это в принципе возможно, с меньшей асимптотической временнóй сложностью позволит значительно сократить время работы программы.

В нашей программе асимптотическая временнáя сложность – линейная (за счет использования цикла со счетчиком «for I:=2 to N-1 do». Однако можно заметить, что для поиска делителя достаточно просмотреть числа от 2 до корня квадратного от N, и в этом случае асимптотическая временнáя сложность программы уменьшится и станет пропорциональной корню квадратному от N. При этом вместо приведенного выше оператора потребуется два:

imax:=round(sqrt(N));

for I:=2 to imax do

Кроме того, время работы программы можно сократить еще, если прекращать выполнение цикла, как только будет найден первый делитель. Для этого заменим оператор цикла со счетчиком (for) на оператор цикла с предусловием (while).

Текст новой (четвертой) версии программы приведен на следующей странице.

Эта программа будет работать значительно быстрее. А говорить о ее емкостной сложности нет смысла.

Удобство сопровождения - это способность программы обеспечивать простоту процесса поддержания программы (программного обеспечения) в работоспособном состоянии и простоту внесения в нее необходимых модификаций.

Соседние файлы в папке лекции