28629

Методика разработки простых программ

Лекция

Информатика, кибернетика и программирование

Разработка проекта программы на Турбо Паскале. Наиболее распространённое и устойчивое заблуждение среди начинающих осваивать программирование стремление немедленно писать текст программы по полученному заданию. Целесообразно поэтому считать процесс разработки программы многоэтапным процессом и придерживаться некоторой дисциплины при разработке даже относительно простых программ. Разработка проекта программы содержащего уточненную постановку задачи в терминах €œвход выход€.

Русский

2013-08-20

91 KB

1 чел.

Лекция 8: Методика разработки простых программ.

1. Введение в методологию программирования.

2. Разработка проекта программы на Турбо Паскале.

3. Методика разработки алгоритма.

4. Примеры разработки программ на Турбо Паскале.

1. Введение в методологию программирования.

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

Целесообразно поэтому считать процесс разработки программы многоэтапным процессом и придерживаться некоторой дисциплины  при разработке даже относительно простых программ. В цикле разработки можно выделить следующие этапы:

1. Разработка проекта программы, содержащего уточненную постановку задачи в терминах “вход - выход”.

2. Разработка (возможно, несколькими последовательными уточнениями) алгоритма задачи, завершающегося текстом программы.

3. Отладка полученной программы.

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

Конечно, человек склонен, почти всегда, действовать “по минимуму”, поэтому желание писать программу “в один этап” всегда привлекательно. Постарайтесь преодолеть это заблуждение! В противном случае вам вряд ли удастся достичь успехов в практическом программировании. В действительности попытка непосредственно писать текст программы (иногда даже не прочитав толком постановку задачи !) всегда приводит к бÓльшим потерям времени, либо вообще не завершается успешно из-за допущенных ошибок.

Если вы намерены быстро и эффективно освоить процесс разработки программ - обязательно придерживайтесь приведенных выше этапов! Они позволят вам безболезненно преодолеть барьер между естественным языком, на котором поставлена задача, и формальным языком программирования, на котором вам необходимо получить решение задачи. Всё что вам потребуется для этого знать на начальном этапе, это - основы структурированной методики построения проекта программы и алгоритма задачи, а также основные конструкции языка программирования. Всё остальное приобретается в процессе практической работы по разработке программ. Ниже приводятся основы такой структурированной методики.

2. Разработка проекта программы на Турбо Паскале.

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

Во-первых, необходимо конкретизировать входные и выходные данные программы. Любая программа представляет некоторую функцию (вычислимую функцию), однозначно отображающую множество входных данных на множество выходных данных. Входные и выходные данные необходимо представить как переменные будущей программы в терминах языка Турбо-Паскаль. Следует внимательно прочитать постановку задачи и определить для неё входные и выходные переменные в терминах Турбо-Паскаля.

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

Входные и выходные переменные, записанные в терминах Турбо-Паскаля, должны иметь уникальные имена (выбираемые программистом). Хороший стиль программирования предполагает также наличие комментариев, отражающих назначение этих переменных в программе. Пока вы не определили все входные и выходные переменные, не следует двигаться дальше! Всё равно вам придётся это сделать, но лучше это сделать раньше. Это пригодится в дальнейшей работе над проектом.

Во-вторых, следует в постановке задачи выявить так называемые аномалии, т.е. такие значения входных переменных, для которых потребуется особая реакция программы. Например, если входной переменной является строка символов, то обычно аномалией является пустая строка, а иногда и строка, содержащая “запрещённые “ для данной программы символы. Конечно, в некоторых задачах, аномалии могут и отсутствовать, однако весьма часто они встречаются, и на них программа должна реагировать. Аномалии следует рассматривать как некоторые ограничения на входные переменные, обычно задаваемые условиями, при выполнении которых должна следовать реакция программы.

Аномалии мы будем записывать в форме:  if <условие> then <реакция>,
где <условие> и <реакция> — либо записываются на естественном языке, либо в терм
инах Турбо-Паскаля (условие - как булевское выражение, а реакция - как оператор). Условие должно зависеть хотя бы от одной входной переменной.

В-третьих, следует уточнить по исходной постановке задачи форму представления выводимых данных. Обычно данные будут выводиться на экран, поэтому будем называть их представление экранной формой.

Экранная форма должна представлять только константы (строковые константы - литералы), и значения выходных переменных в том порядке, в котором они должны быть размещены на экране. Мы ограничимся только текстовым режимом экрана и статическим размещением данных, что вполне достаточно для учебных задач.

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

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

  литерал записывается в апострофах;

  метаописание заключается в угловые скобки и  является описанием о размещаемой в данном  месте  текстовой  информации;

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

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

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

- квадратные скобки для обозначения условного размещения фрагмента;

- фигурные скобки для обозначения возможного повторения фрагмента;  

- угловые скобки  для ссылок на значения переменных или комментирования  размещаемого фрагмента текста.

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

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

В программах, выводящих информацию не только на экран, но и в другие файлы, кроме экранной формы следует планировать и другие выходные файлы.

В целом, представление проекта будем оформлять из пяти разделов:

  заголовок программы;

  постановка задачи;

  входные и выходные переменные;

  аномалии;

  экранная форма.

Такой проект будем представлять в виде:

 

program <имя программы>;

1. Постановка задачи:

< исходная постановка задачи>

2. Входные и выходные переменные:

<имя переменной>: <тип>; <комментарий назначения переменной>

3.Аномалии:

if < условие аномалии>  then <реакция на аномалию>;

4. Экранная форма:

begin

<последовательность размещения выводимой информации на экране>

end.

3. Методика разработки алгоритма.

Разработка алгоритма - творческий и неоднозначный процесс, для которого не существует жёстких правил. Тем не менее, это не означает, что алгоритм должен разрабатываться стихийно, случайным образом. Разработка алгоритма должна быть последовательной и целеустремлённой. Лучшей стратегией для чётко определённых задач является стратегия “сверху вниз”, сводящаяся к постепенным уточнениям деталей алгоритма, начиная от некоторого общего плана. Таким планом вполне может быть разработанная ранее в рамках проекта программы - экранная форма.

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

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

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

Следует иметь в виду, что процесс создания алгоритма не всегда является прямолинейным движением, иногда возникает также необходимость возврата к предшествующему состоянию и его коррекция. Это следует воспринимать как естественное явление, соответствующее самой сущности программирования (да и любого проектирования вообще). В процессе накопления опыта необходимость возвратов будет неуклонно уменьшаться, однако вряд ли от неё можно избавиться совсем.

Для представления алгоритма и его уточнений удобно использовать те средства, которые предусмотрены в самом языке Турбо-Паскаль:

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

  Каждый фрагмент естественного языка должен в последующем раскрываться либо как оператор, либо как операция (функция), либо как описание объектов.

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

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

4. Примеры разработки программ на  языке Турбо Паскаль.

А. Разработка программ с использованием блок-схем алгоритмов.

program quad_eq; {проект}

1. Постановка задачи:

По вводимым коэффициентам А,В,С квадратного уравнения

A*x*x + B*x + C =0 вычислить его корни. Исходные данные и

результаты вычислений представить в удобном виде на экра-

не с учётом возможных аномалий.

2. Входные и выходные переменные:

a,b,c:real; - коэффициенты уравнения

х1,х2: real; - корни уравнения

3. Аномалии:

if <А=0> then  <сообщение об ошибке и выход из программы>

if < корни мнимые> then < вывод сообщения и выход из программы>

4.Экранная форма:

begin

‘Нахождение корней уравнения A*x*x + B*x + C =0’

‘ Введите коэффициенты уравнения:’

‘A=‘ <A>

‘B=‘ <B>

‘C=‘<C>

‘Корни уравнения:’

[‘Ошибка: А=0 ’]

[‘Нет вещественных корней’]

[‘ X1=X2=‘ <корень>]

[‘X1= <x1> ‘  X2=‘ <x2>]

end.

************************************************************************************


{Блок-схема алгоритма задачи quad_eq }

   

                   

           

            

            

      

                                                       

     

 

               

       

      

  

                

                                                

       

                                     

 

               

   

          

 

  

 

      


program quad_eq; {0.2}

 { Корни квадратного уравнения}

 var a,b,c:real; x1,x2:real; d,f:real;

       begin writeln('Нахождение корней уравнения A*x*x + B*x + C =0');

             writeln('Введите коэффициенты уравнения:');

             write('A=');read(a); write('B=');read(b);write('C=');read(c);

             writeln('Корни уравнения:');

                              if (a=0)  then writeln('Ошибка: А=0 ')

   else begin d:= (b*b -4*a*c); f:=-b/(2*a);

      x1:=f +sqrt(d)/(2*a); x2:=f-sqrt(d)/(2*a);

                         if d<0 then writeln('Нет вещественных корней');

                          if d=0 then writeln('X1=X2=',f);

          if d>0 then writeln('X1=',x1:2:3,'  X2=',x2:2:3);

                                end;

       end.

 Б. Разработка программ с использованием псевдокода.

program decomp; {проект}

     1.Постановка задачи:

      Для заданного целого числа N вычислить разложение его на простые

      множители в виде N=j1*j2*...jm, где: j1=1, j1<=j2<=...<=jm, все jк - простые,

    1  к m.

      Исходные данные и результат представить в удобной форме на экране.

     2.Входные и выходные переменные:

       N:integer; - исходное число

       j:integer; - текущий простой множитель числа N

     3.Аномалии:

                if N=0 then writeln('N=0:ошибка'); Повторить ввод N;

                if N<0 then Вычисление для abs(N).

     4.Экранная форма:

 begin

        { 'Введите n ='<N>

          ['N=0:ошибка'] }

          <N> =1{'*' <j > }

 end.

******************************************************************************************

{ Разработка алгоритма задачи decomp}

       program decomp;{0.1}

       var n,j:integer;

       begin repeat write('Введите n=');readln(n);

                    if n=0 then writeln('n=0:ошибка')

                  until n<>0;

             {1*  проверка n<0 } write(n,'=1');

             {2* вычисление и вывод очередного множителя}

       end.

       **********************************************************


        program decomp;{0.2}

       var n,j:integer;

       begin repeat write('Введите n=');readln(n);

                    if n=0 then writeln('n=0:ошибка')

                  until n<>0;

                    if n<0 then n:=abs(n); write(n,'=1');

                    j:=2; while n>=j do

                 if {3*   j является делителем n}

                 then begin {4*  вывести j и удалить делитель j  из n } end

                 else j:=j+1;

       end.

       ***********************************************************

       program decomp;{0.3}

       var n,j:integer;

       begin repeat write('Введите n=');readln(n);

                    if n=0 then writeln('n=0:ошибка')

                  until n<>0;

              if n<0 then n:=abs(n);

              write(n,'=1'); j:=2; while n>=j do

              if (n mod j =0) then 

              begin {4*  вывести j и удалить делитель j  из n } end

                                      else j:=j+1;                                         

       end.

       ***********************************************************

       

        program decomp;{0.4}

       var n,j:integer;

       begin repeat write('Введите n=');readln(n);

                    if n=0 then writeln('n=0:ошибка')

                  until n<>0;

              if n<0 then n:=abs(n);

              write(n,'=1'); j:=2; while n>=j do

              if (n mod j =0) then 

              begin write('*', j);n:=n div j end

                                      else j:=j+1;                                         

       end.


program dec_bin; {проект}

1.Постановка задачи:

Перевести вводимое десятичное число в эквивалентное

ему двоичное число. Исходное число и результат пред-

ставить в удобном виде на экране (в отдельных окнах).

2.Входные и выходные переменные:

dec: integer; - входное десятичное число

bin:string; - результирующее двоичное число

3.Аномалии: нет

4. Экранная форма:

begin

- - - - - - - - - - - - - - - - - - - - - - - -- - - - -

‘Введите десятичное число:’ <dec>

 - - - - - - - - - - - - - - - - - - - - - - - - - - - -

‘Двоичное число:’  <bin>                  

 - - - - - - - - - - - - - - - - - - - - - - - - - - - -

end.

*************************************************************************

{Разработка алгоритма задачи dec_bin}

       program dec_bin; {0.1}

var dec:integer; bin:string;C:char;

       begin {0 * Установка окна для ввода данных }

                  write('Введите десятичное число:');read(dec);

                  bin:='';repeat {1* вычисление C=  остатку dec по модулю 2}

          {2* добавление C к текущему значению bin}

          {3* целочисленное деление dec на 2}

                             until    dec=0;

                  {4* Установка окна для представления результата}

                  writeln('Двоичное число:', bin);

       end.

*********************************************************************************

 

       program dec_bin; {0.2}

        {Перевод десятичного числа в двоичное}

          uses CRT;

          var dec:integer; bin:string;c:char;

       begin Clrscr;TextBackground(blue);window(1,10, 60,12);Clrscr;

                  write('Введите десятичное число:');read(dec);

                  bin:='';repeat if dec mod 2=1 then c:='1' else c:='0';

                                         bin:=c+bin;dec:=dec div 2;

                             until    dec=0;

       TextBackground(green);window(1,15, 60,17);Clrscr;

                  writeln('Двоичное число:', bin);

       end.


конец

alse

Вычисление и вывод

Х1 и Х2

true

D>0?

Вычисление и вывод

вывод ‘Х1=Х2=’<F>

true

false

D=0 ?

false

true

Нет вещественных

корней

false

true

Ошибка:А=0

Вывод заголовка
и запроса коэффициентов

Ввод коэффициентов A,B,C
Вывод “Корни уравнения”

A=0?

D:= B*B-4*A*C;

F:= -B/(2*A);

D<0 ?


 

А также другие работы, которые могут Вас заинтересовать

34310. Структура технологической системы производства 25.5 KB
  Структура технологической системы производства. Свойства элементарных технологических процессов распространяются и на технологические системы более высокого иерархического уровня которые образованы совокупностями технологических процессов. Таким образом технологическую систему производства образуют параллельные последовательные и комбинированные системы технологических процессов. Еще одним важным фактором в формировании технологических систем являются технологические связи между элементами системы а также их характер.
34311. Взаимосвязь технологических и организационных структур производства 26 KB
  Взаимосвязь технологических и организационных структур производства. Характер формирования систем технологических процессов а также связей между ними имеет определяющее значение для формирования управляющих воздействий. Поэтому можно четко проследить взаимосвязь технологических и организационных структур производства. Например ремесленный цех с его ярко выраженной параллельной системой технологических процессов на определенном этапе исторического развития видоизменился в мануфактуру с последовательными технологическими процессами.
34312. Специфика развития параллельных и последовательных технологических систем 26 KB
  Перевод слабых составляющих системы на более высокую ступень позволит улучшить характеристики системы так как в ней ликвидируются звенья которые обуславливали в наибольшей степени неудовлетворительное функционирование системы. Таким образом ориентация на два различных типа развития позволит ставить задачу определения предпочтительности одного из них применительно к составляющим элементам параллельной системы. Такое целенаправленное развитие дает больший эффект чем при одновременном развитии всех составляющих изза различной готовности...
34313. Основные закономерности и направления развития систем технологических процессов 23.5 KB
  При этом важной особенностью развития технологических систем является их тип параллельной или последовательной связи элементов системы. Технологические системы в общем случае развиваются как и технологические процессы эволюционным и революционным путем. Однако системы технологических процессов неоднородны по восприятию рационалистического и эвристического развития. Как и в случае развития технологических процессов необходимым и достаточным условием революционного развития является совершенствование рабочих процессов хотя бы в...
34314. Реальный и потенциальный уровень технологии системы 25.5 KB
  Реальный и потенциальный уровень технологии системы. Реальная технологическая система характеризуется не только величиной уровня технологии который соответствует конкретным пропорциям между производительностью и затратами прошлого труда то есть реальным уровнем технологии но и максимальным потенциальным уровнем технологии который может быть достигнут в данной технологической системе при неизменных уровнях технологии ее составляющих. Потенциальный уровень технологии является верхней границей достижение которой будет означать что...
34315. Природное сырье и его характеристика 24.5 KB
  Природное сырье и его характеристика Сырьем наз. По агрегатному состоянию сырье делится на твердое жидкое и газообразное. По составу сырье делят на органическое и неорганическое. По происхождению различают сырье минеральное растительное и животное.
34316. Пути рационального использования природного сырья 22.5 KB
  Пути рационального использования природного сырья Известно что экономика производства зависит от характера использования сырья. Наиболее важными из них являются: правильный выбор сырья комплексная его переработка повторное использование высококачественная первичная обработка и обогащение максимальное использование отходов производства. Выбор сырья определяет тип применяемого технологического оборудования характер технологии длительность производственного цикла и влияет на многие техникоэкономические показатели работы предприятий....
34317. Методы обогащения сырьевых материалов 24 KB
  Методы обогащения сырьевых материалов Качество сырья состав и свва в значительной степени характеризуют техникохимические показатели производства. Оно выражается содержанием полезных элементов в руде либо другом виде сырья. Известны такие методы обогащения сырья как физические механический термический электромагнитный метод гравитационного обогащения и др. применение более чистого концентрированного сырья позволяет получить качественную продукцию которая обладает более высокой стоимостью.
34318. Обогащение сырьевых материалов методами флотации и выщелачивания 24 KB
  Обогащение сырьевых материалов методами флотации и выщелачивания Наиболее широко применимы такие методы обогащения как флотация и выщелачивание. Скорость выщелачивания зависит от структуры степени пористости размера пор обрабатываемого материала. Чем выше содержание растворимой фазы и крупнее поры тем быстрее идет процесс выщелачивания. На процесс выщелачивания влияет также тонона измельчения.