Лабораторная работа №11

Тема: Использование инструментальных CASE-средств для ООП и анализа.

Цель:

- познакомиться с CASE-средствами в С++;

- научиться создавать программы на С++ с использованием инструментальных CASE-средств;

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

Краткая теория.

Операторы выбора в Си/Си++ представлены условным оператором и переключателем. Условный оператор аналогичен условным операторам других языков программирования и может использоваться в сокращенной и полной формах, которым соответствуют схемы:

if (выражение-условие) оператор

if (выражение-условие) оператор-1 else оператор-2

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

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

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

switch ( целое выражение ) оператор

Оператор в этом случае представляет собой тело переключателя, практически всегда является составным и имеет такой вид:

{ case константа-1 : операторы

case константа-2 : операторы

............................

default : операторы

}

Выполнение переключателя состоит в вычислении управляющего выражения и переходе к группе операторов, помеченных case-меткой, равной управляющему выражению, если такой case-метки нет, выполняются операторы по метке default. Пункт default может отсутствовать и тогда, если управляющему выражению не соответствуют ни одна case-метка, весь переключатель эквивалентен пустому оператору. Следует учитывать, что при выполнении переключателя происходит переход на оператор с выбранной case-меткой и дальше операторы выполняются в естественном порядке. Например, в переключателе

switch (count)

{ case 1 : x=1;

case 2 : x=2;

case 3 : x=3;

default : x=4;

}

если значение count равно 1, то после перехода на case 1 будут выполнены все операторы, в результате x станет равным 4. Чтобы разделить ветви переключателя, в конце каждой ветви нужно записать оператор break, не имеющий операндов. По этому оператору происходит выход из переключателя к следующему оператору программы:

switch (count)

{ case 1 : x = 1; break;

case 2 : x = 2; break;

case 3 : x = 3; break;

default : x = 4;

}

Теперь в зависимости от значения count будет выполняться только одна ветвь переключателя и x будет принимать одно из четырех предусмотренных значений.

В Си/Си++ имеется три варианта оператора цикла: цикл с предусловием, цикл с постусловием и цикл с параметром.

Цикл с предусловием строится по схеме

while (выражение-условие) оператор

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

Цикл с постусловием строится по схеме:

do оператор while ( выражение-условие )

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

Цикл с параметром строится по схеме:

for ( E1; E2; E3 ) оператор

где E1, E2 и E3 - выражения скалярного типа. Цикл с параметром реализуется по следующему алгоритму:

1. Вычисляется выражение E1. Обычно это выражение выполняет подготовку к началу цикла.

2. Вычисляется выражение E2 и если оно равно нулю выполняется переход к следующему оператору программы ( выход из цикла ). Если E2 не равно нулю, выполняется шаг 3.

3. Выполняется оператор - тело цикла.

4. Вычисляется выражение E3 - выполняется подготовка к повторению цикла, после чего снова выполняется шаг 2.

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

С использованием цикла с предусловием это можно сделать так:

int s=0;

int i=0;

while (i < n) s +=a[ i ++];

Эта же задача с применением цикла с постусловием решается следующими операторами:

int s = 0;

int i = 0;

do s +=a[ i++]; while ( i < n );

Поскольку в данном случае повторениями цикла управляет параметр i, эту задачу можно решить и с помощью цикла третьего типа:

int i, s;

for ( s = 0, i = 0; i < n; i++) s +=a[ i ];

Объявления переменных можно внести в выражение E1 оператора for и все записать в виде одного оператора for с пустым телом цикла:

for ( int i = 0, s = 0; i < n; s += a [i++] ) ;

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

Несмотря на то, что Си++ содержит полный набор операторов для структурного программирования, в него все же включен оператор перехода:

goto метка ;

Метка задает адрес перехода и должна помечать оператор в том же составном операторе, которому принадлежит оператор goto. Вход в составной оператор, содержащий объявления данных, не через его начало, запрещен.

Практические задания:

1. Написать программу вычисления максимального значения в массивах типа int,float и complex. Функции, вычисления максимума имеют одно и тоже имя.

2. Написать родовую функцию, которая копирует файл в память по адресу первого аргумента, если файл больше, то память должна быть перевыделена в родовой функции. Проверить для данных типа int, float, double.

3. Создать абстрактный тип данных (структура) - картина, у которой есть название, автор, стоимость. Определить функцию, которая устанавливает по умолчанию стоимость - 4 тыс. долларов. Для задания имени использовать оператор new.