46137 (665404)

Файл №665404 46137 (Методика создания программ)46137 (665404)2016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

Методика создания программ.

Здесь мы рассмотрим один из наиболее важных вопросов: как создавать программу?

До сих пор мы имели дело с относительно небольшими программами для решения несложных алгоритмических проблем. Мы познакомились с важностью и ролью спецификации программы, ясностью формулировки основных шагов алгоритма при обработке данных, трансляцией этих шагов в эффективные последовательности операторов программы на языке Pascal, комментировании программы, проверки ее правильности. Мы убедились, что проверять правильность программы надо, даже тогда, когда корректность использованного алгоритма была доказана. Причем, заметим, что внутренняя организация всех программ, которые мы написали до сих пор, может быть представлена в a’le Pascal форме как на рис. 13.1.

Разработка большой программы отличается от разработки малой в двух основных аспектах.

Текст программы для решения большой проблемы занимает много больше места, чем одна страница.

Создание таких программ путем написания Pascal программы “с листа”практически невозможно.

Как правило, эта разработка предполагает систематический подход:

описание проблемы;

разработка алгоритма;

написание программы.

Созданная программа должна быть читабельной, эффективной и корректной.

Program Exmpl.

{{Q} Exmpl {R}}

{Описание используемых пременных в пред и пост условиях}

begin

{Ввод исходных данных}

{Проверка выполнения предусловия,

т.е. корректности исходных данных}

if {Данные корректны} then

{Q}

begin {Обработка данных}

{R}

{Вывод}

end

else {Сообщение об ошибке ввода}

end

Рис. 13.1. Типичная внутренняя организация программы.

Создание программы - это систематический процесс, состоящий из определённых этапов. В результате этого процесса мы получаем программу. Поскольку мы хотим получать программу

ясную для понимания, т.е. читабельную;

эффективную, т.е. экономно расходующую ресурсы исполнителя и выполняемую им быстро;

правильную, т.е. не содержащую ошибок;

то не любой процесс создания программы нам подходит.

Нам нужна методика создания ясных, правильных, эффективных программ.

Ясность означает, что любой, кто знаком с языком Pascal и прикладной областью, поймет алгоритм, читая текст программы, комментарии и спецификацию проблемы.

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

Корректность означает, что любое исполнение программы с допустимыми исходными данными дает правильный результат.

Под методикой создания какого-либо продукта мы будем понимать чётко определённую последовательность этапов, выполнив которую, мы получим желаемый продукт с нужными характеристиками.

Давайте напишем небольшую программу, сосредоточив теперь наше внимание именно на процессе её создания. Пусть к нам обратились с просьбой написать программу на Pascal, которая размещает компоненты вектора в возрастающем порядке. Пусть после общения с заказчиком нам удалось выяснить, что:

компонентами вектора могут быть только натуральные числа;

компонентов всегда 100;

все компоненты попарно различны.

Мы уже специфицировали исходные данные для этой задачи в лекции 7. Там исходные данные мы специфицировали так:

Q1 = i : 1 i 100 :viN vi>0.

Теперь надо выразить тот факт, что все компоненты различны:

Q2 = i : 1 i 100 : j : 1 j 100 : vi = vj ij.

Отсюда спецификация исходных данных выглядит так:

Q=Q1Q2=i : 1 i 100 : (viN vi>0)j : 1 j 100 : vi = vj ij .

Спецификация множества возможных результатов там была записана в следующей форме:

i : 1 i < 100 :(oiN oi>0 o100N o100>0 oii+1)

i : 1 i 100 : k : 1 k 100 : vi =ok .

Основные шаги нашего алгоритма представлены на рис. 13.1. Нам надо лишь детализировать шаг “Обработка данных”. Для упорядочения компонентов вектора по возрастанию мы воспользуемся известным алгоритмом сортировки, называемым линейный выбор.

Суть этого алгоритма состоит в том, что в цикле по числу компонентов вектора

выбираем наименьший;

размещаем его в первом свободном компоненте результирующего вектора;

наименьший компонент в исходном векторе заменён на предопределённую величину, не встречающуюся в исходном векторе.

Так мы действуем до тех пор, пока не заполним все компоненты вектора - результата. Это алгоритм правильно упорядочивает компоненты исходного вектора. Доказательство его корректности можно посмотреть в книге Г. Ларина “Сортировка и системы сосртировки” Наука 1984 г.

Мы адаптируем этот алгоритм применительно к нашим условиям, а именно:

числу компонентов в рассматриваемых векторах;

типам компонентов наших векторов;

именам наших переменных;

в качестве предопределённой величины, которая используется в алгоритме для замены наименьшего компонента исходного вектора, возьмём - 1

На рис. 13.2 представлена заготовка для программы, где прописан ввод исходных данных. После цикла единственное, что мы можем утверждать - это то, что все компоненты введённого вектора - целые числа. Поэтому, мы указываем после end спецификацию i: 1 i 100: viN .

Теперь, после ввода нам надо убедиться, что все они различны и больше нуля. Эта проверка исходных данных представлена на
рис. 13.3. Там, если условие errngtv=0erreqvl=0 выполнено, мы можем утверждать, что состояние вычислительного процесса удовлетворяет условию Q. При этом вектор из 100 компонентов мы трактуем как 100 разных простых переменных.

Program Exmpl 10.X *) (input, output);

{ Программа Exmpl 10.X

Input:

Q i: 1 i 100: (viNvi>0)j: 1 j 100: vi = vj ij .

Output:

R i: 1 i 100: оiN оi>0 j : 1 j 100 : оi= vj

k : 1 k 100 : îkk+1

}

const M=100 ; {M - число компонентов в векторе}

var v : array [1 … M] of integer ;

0 : array [1 … M] of integer ;

t, i, errngtv, erreqvl : integer ; {errngtv, erreqvl - признаки ошибок в исходных данных;

t - вспомогательная переменная;

i - индекс цикла}

begin

{Ввод исходных данных}

for i:=1 to M do

begin write (‘Введите‘, i ,’-ую_компоненту =’);

readln (v[i])

end {i: 1 i 100: viN }

{Проверка исходных данных}

if {Данные корректны} then {Обработка данных};

end {Program}.

Рис. 13.2.

{Проверка исходных данных}

Q : 1. i: 1 i 100 : v [i]N v [i]>0 ;

i: 1 i 100 : j: 1 j 5: v[i] = v[j] ij .

{Проверка условия Q1: i: 1 i 100 : v[i]N v[i]>0}

errngtv:=0 ; for i:=1 to 100 do if v[i]<=0 then

begin errngtv:=i ;

writeln (i,‘-я компонента не

натуральное число’)

end

{Проверка условия Q2: i: 1 i 100 : j: 1 j 100: v[i] = v[j] ij}

erreqvl:=0 ; for i:=1 to 4 do

for j:=i+1 to M do if v[i]=v[j]

then begin erreqvl:=1;

writeln(‘Все компоненты исходного

вектора должны быть попарно

различны. В заданных

исходных данных _’, i,‘-я_

и_’, j,‘-я_компонента равны’)

end {for j; for i}

if errngtv =0 erreqvl:=0 then {Q}

{Обработка исходных данных} {R}

Рис. 13.3. Фрагмент программы “Проверка исходных данных”.

{Данные корректны} Обработка исходных данных.

i:=1 ;

while i <= M do {Цикл заполнения вектора-результата}

{P1: i: 1 i 100: k : 1 k i : о[k]<о[k+1]}

begin

о[i] :=maxint ;

for j:=1 to M do {Поиск очередного наименьшего

компонента в исходном массиве}

begin {P2: j: 1 j < i: k : 1 k 100: î[j]< v[k]

v[k]=-1}

if (î[i]>v[j]) and (v[j]-1) then

begin î[i]:=v[j];

t:=j

end

end {for};

{î[i]=v[t] P1[t]-1 P2}

v[t]:=-1; {Заменяем в исходном массиве наименьший

компонент на -1, чтобы больше его не выбирать}

i:=i+1 ; {Переход к очередному свободному компоненту

вектора-результата}

end {while}

Рис. 13.4. Фрагмент программы “Обработка исходных данных”.

На рис. 13.4 представлена основная часть нашей программы - обработка данных. Она состоит из двух вложенных циклов. В цикле while мы последовательно заполняем компоненты вектора о. В цикле for мы выбираем наименьший компонент в исходном массиве v, размещаемего в массиве о, а найденный наименьший в массиве v “забиваем” -1, чтобы исключить из рассмотрения при последующих итерациях цикла while.

В качестве комментария к этим циклам мы указали их инварианты. Инвариант цикла for утверждает, что на любой итерации компоненты массива v либо больше уже заполненных компонентов массива о, либо = -1.

Условие

{о[i]=v[t] v[t] -1P2} ,

указанное после цикла for гарантирует нам что массив о в итоге будет содержать только компоненты массива v, т.е. будет его перестановкой. Инвариант цикла while утверждает, что на всех итерациях заполненная часть массива о упорядочена по возрастанию. Это гарантирует нам выполнение постусловия программы по окончании цикла while.

Детальное рассмотрение правильности мы пока отложим. Заметим лишь, что мы можем воспользоваться методом “компьютера с кнопкой”, который мы уже использовали в лекции 11-12.

Итак, подведём итог. Только что проделанный процесс можно разбить на следующие этапы:

Формирование и осознание проблемы. Назовём этот этап постановкой задачи.

Спецификация программы.

Разбиение проблемы на подпроблемы, до тех пор пока не подберём существующий алгоритм, либо не сможем “сходу” выписать свой.

Подбор существующего, т.е. попытаться использовать уже существующие программы или их фрагменты. Здесь очень полезны будут их спецификации, чтобы построить их контекст данной программы.

Запись на языке Pascal программы со спецификациями промежуточных состояний.

Проверка правильности.

Оформление программы.

Список литературы

Для подготовки данной работы были использованы материалы с сайта http://www.ergeal.ru/

**) Заметим, что Exmpl 10.X не удовлетворяет определению имени в языке Pascal, т.к. здесь используется пробел и точка, которые не являются ни буквой, ни цифрой. Однако, в целях наглядности мы будем использовать такой способ именования примеров.

Характеристики

Тип файла
Документ
Размер
66,26 Kb
Тип материала
Учебное заведение
Неизвестно

Тип файла документ

Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.

Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.

Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.

Список файлов реферата

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7028
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее