Pascal

С, C++, Java

If <условие> then <действие1>

else <действие2>

If <условие> <действие1>

else <действие2>

3.выбор

Pascal

С, C++, Java

Case N of

1: <действие1>

2: <действие2>

N: <действие N>

End;

Switch (N)

{ case 1: <действие1>; break;

case 2: <действие1>; break;

case N: <действиеN>; break;

}

4. выбор—иначе

Pascal

С, C++, Java

Case N of

1: <действие1>

2: <действие2>

N: <действие N>

Else <действие N+1>

End;

Switch (N)

{ case 1: <действие1>; break;

case 2: <действие1>; break;

case N: <действиеN>; break;

default: <действиеN+1>

}

3) Базовая структура  "цикл". Обеспечивает многократное выполнение некоторой совокупности действий, которая называется телом цикла. Основные разновидности циклов представлены в таблице:

1. Цикл типа пока.
Предписывает выполнять тело цикла до тех пор,
пока выполняется условие, записанное после слова пока.

Pascal

С, C++, Java

While <условие> do

<тело цикла>

While <условие>

<тело цикла>

2. Цикл типа для.
Предписывает выполнять тело цикла для всех значений
      некоторой переменной (параметра цикла) в заданном диапазоне.

     

Pascal

С, C++, Java

For i:=i1 to i2 do

<тело цикла>

For ( i=i1; i<= i2; i++ )

{

<тело цикла>

}

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

НЕ нашли? Не то? Что вы ищете?

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

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

Тема 3. Переменная и тип.

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

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

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

Описание переменных

Pascal

C, C++, Java

Var

a, b: real;

m, n: integer;

c: char;

Float a, b;

Int m, n;

Character c;

Мы рассмотрим следующие пользовательские типы:

перечисляемый тип,

тип-диапазон,

массивы,

записи.

Тема 4. Структурное программирование

Структурное программирование имеет три основные составляющие:

· проектирование сверху вниз;

· модульное, или процедурное, программирование;

· структурное кодирование.

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

Модуль должен иметь следующие свойства:

· быть правильным;

· не зависеть от модулей, в которых он используется;

· не зависеть от источника входных данных и места назначения выходных (быть параметризованным);

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

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

Структурное кодирование — это метод написания прог-рамм, имеющих опреде­ленную структуру. Он основан на исполь-зовании небольшого набора структур­ных операторов, правиль-ность которых легко проанализировать и установить.При этом одни операторы состоят из других, вложенных в них.

Тема 5. Понятие программного модуля.

Модуль (Unit) в паскале - это специальным образом оформленная библиотека определений типов, констант, переменных, а также процедур и функций. Модуль компилируется отдельно, в результате чего создается файл с расширением tpu (turbo pascal unit). Он не может быть запущен на выполнение самостоятельно, а может использоваться только из других программ. Для этого в программах указывается список имен используемых модулей в разделе Uses, после чего программа может использовать константы, типы и переменные, описанные в этих модулях.

Существует возможность создавать новые модули. Файл модуля имеет следующую структуру:

UNIT <имя модуля>;

INTERFACE

<раздел объявлений>

IMPLEMENTATION

<раздел реализации>

Begin

<раздел инициализации>

End.

Инкапсуляция – это объединение данных и подпрограмм их обработки.

Именно инкапсуляция позволяет:

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

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

повторно использовать код, не записывая одни и те же определения типови подпрограммы в разных программах и программных единицах;

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

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

1. Представление объектов этого типа и операции над объектами определены
в одной программной единице, а переменные этого типа можно создавать так­
же и в других программных единицах.

2. Представление объектов этого типа скрыто от других программных единиц (использующих тип, т. е. его клиен-тов), так что к объектам применимы только операции, предусмотрен-ные определением типа.

Сокрытие представления объектов абстрактного типа имеет два важных преимущества:

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

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

Тема 6. Грамматики и языки

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

Некоторые свойства грамматик

· Различные грамматики могут порождать один и тот же язык. Такие грамматики называются эквивалентными

· Левые части правил могут содержать другие нетерминалы (помимо определяемого)

· По соглашению, можно объединять несколько правил с одинаковой левой частью, записывая правые части через символ '|' ("или")

Грамматикой Хомского называется четвёрка G=<Х,N,P, S>, где:

1. Х – это алфавит языка, или множество терминалов;

2. S - это множество обозначений понятий языка, или нетерминалов;

3. P - множество правил вывода (продукций) вида a®b, где a (XÈN)*N(XÈN)*, b(XÈN)*, элемент (a,b) множества P называется правилом (продукцией) и записывается в виде;

4. S – начальный нетерминал из множества N, или обозначение главного понятия, представителем которого является слово.

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

LA(1)- грамматики позволяют выбирать необходимую для развертки продукцию при нисходящем анализе по первому символу еще не распознанной части слова.

Распознавание входной цепочки методом рекурсивного спуска начинается с запуска распознающей процедуры, соответствующей начальному символу грамматики. В процессе распознавания эта процедура просматривает входную цепочку символ за символом и при необходимости обращается к другим распознающим процедурам. Если цепочка действительно принадлежит языку, порождаемому заданной грамматикой, работа алгоритма благополучно закончится, результатом работы распознающих процедур будет "ДА, входная цепочка принадлежит языку". Но где же будет структура входной цепочки, на основе которой мы хотели построить семантические вычисления? После работы распознающих процедур кроме "ДА" или "НЕТ" мы ничего другого не получим!

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

Тема 7. Автоматы.

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

Конечный автомат – это пятерка M = (Q, Σ, δ, q0, F), где

· Q – конечное множество состояний

· Σ – конечное множество допустимых входных символов

· δ – отображение множества QxΣ в множество P(Q), определяющее поведение управляющего устройства (эту функцию часто называют функцией переходов)

· q0– начальное состояние управляющего устройства

· F – множество заключительных состояний

Легко видеть, что граф автоматной грамматики есть просто граф конечного автомата, распознающего этот язык. Состояниями конечного автомата, соответствующего грамматике, является множество нетерминалов грамматики и дополнительное состояние Ф, метка которого не совпадает ни с одним нетерминалом грамматики. Начальным состоянием автомата является состояние S, заключительными состояниями –состояние Ф и каждое такое состояние А, что для соответствующего нетерминала А в грамматике есть продукция вида A→ε. В автомате из состояния А в состояние В есть переход под воздействием входного символа а, если A→aВ – продукция грамматики. Из состояния А в состояние Ф есть переход под воздействием символа а, если A→a – продукция грамматики.

Каждая автоматная грамматика может быть представлена графом, который строится по следующим правилам:

1. Вершины (кроме одной) соответствуют элементам из, включая S - начальный символ. Кроме того, вводится специальная терминальная вершина, обозначаемая T.

2. Каждой продукции вида соответствует дуга от вершины к вершине, на которой пишется a.

3. Каждой продукции вида соответствует дуга от вершины к вершине T, на которой пишется a.

Таким образом из T никакая дуга не выходит, а в S никакая дуга не входит.

окончания работы над созданием ПС мы не сможем убедиться, что достигли цели.

Тема 8. Общие принципы разработки программных средств

Под жизненным циклом ПС (software life cycle) понимают весь период его разработки и эксплуатации (использования), начиная от момента возникновения замысла ПС и кончая прекращением всех видов его использования [3.1-3.4].

Качество (quality) ПС - это совокупность его черт и характеристик, которые влияют на его способность удовлетворять заданные потребности пользователей [3.6].

В технике известны четыре подхода обеспечению надежности [3.11]:

· предупреждение ошибок;

· самообнаружение ошибок;

· самоисправление ошибок;

· обеспечение устойчивости к ошибкам.

Известны два общих метода борьбы со сложностью систем:

· обеспечения независимости компонент системы;

· использование в системах иерархических структур.

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

Основная литература: 1, 4, 5, 8

Дополнительная литература: 12, 15,19, 20

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

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

Модульное программирование является воплощением в процессе разработки программ обоих общих методов борьбы со сложностью: и обеспечение независимости компонент системы, и использование иерархических структур. Для воплощения первого метода формулируются определенные требования, которым должен удовлетворять программный модуль, т. е. выявляются основные характеристики «хорошего» программного модуля. Для воплощения второго метода используют древовидные модульные структуры программ (включая деревья со сросшимися ветвями).

Майерс [7.5] предлагает для оценки приемлемости программного модуля использовать более конструктивные его характеристики:

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6