Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Интегрирование Глава 5.doc
Скачиваний:
0
Добавлен:
12.11.2018
Размер:
598.53 Кб
Скачать

Алгоритмизация структурой цикла с постусловием

Словесная формулировка алгоритма:

  1. Ввести исходные данные (одномерный массив стоимостей кладов и процент вознаграждения).

  2. Присвоить параметру цикла i его начальное значение (i=1).

  3. Выполнить тело цикла (рассчитать текущее значение функции для соответствующего значения аргумента пi = f(сi) и вывести их на печать).

  4. Сформировать новое значение параметра цикла через предыдущее (i=i+1).

  5. Проверить полученное значение параметра на соответствие диапазону изменения ():

  • если i соответствует диапазону (), передать управление на п. 3;

  • если i не соответствует диапазону (i>7), прекратить вычисления в цикле.

Графическое изображение алгоритма выполнено на рис. 5.9.

Алгоритмизация структурой цикла с параметром

Словесная формулировка алгоритма:

  1. Ввести исходные данные (одномерный массив стоимостей кладов и процент вознаграждения).

  2. Сформировать заголовок цикла:

  • Присвоить параметру цикла i начальное значение (i=1).

  • Проверить полученное значение параметра на соответствие диапазону изменения ():

  • если i соответствует диапазону, выполнить тело цикла (рассчитать текущее значение функции для соответствующего значения аргумента пi = f(сi) и вывести их на печать), сформировать новое значение параметра цикла через предыдущее (i=i+1) и передать управление на п. 2.2;

  • если i не соответствует диапазону (i>7), прекратить вычисления.

Графическое изображение представлено на рис. 5.10.

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

Программирование задачи

В Си/Си++, как в математике, можно оперировать с массивами в целом и с их элементами. При этом в зависимости от типов составляющих массив элементов в языке Си/Си++ существуют понятия массива и структуры.

Массив в Си/Си++ – совокупность элементов одного типа.

Структура в Си/Си++ – совокупность разнотипных элементов.

Поэтому программирование задачи начинается с определения принадлежности используемых данных к массиву или структуре. В большинстве случаев элементы приводятся к одному типу, что позволяет объединить их в языке Си/Си++ понятием массив. Обязательными условиями работы с массивом или его элементами (элементом) являются:

  • описание массива;

  • обозначение элементов.

      1. Описание массивов в Си/Си++

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

Описание массива предписывает резервирование в оперативной памяти ЭВМ необходимого количества последовательно расположенных ячеек для хранения его элементов. Число ячеек выделяемого участка должно соответствовать количеству элементов массива. Желательно предусматривать увеличенный размер массива (по отношению к реально заданному). При этом возможные изменения условия задачи не потребуют модификации описания.

Например, для реально заданного массива X(7) возможно в описании указывать X(7), X(10), X(15), что позволит во втором и третьем вариантах использовать программу для работы с массивом X на 10 и 15 элементов соответственно.

Аналогично выбираются размеры массивов, численные значения которых конкретно не определены.

Например, для массива Y(m) в соответствии с логикой задачи необходимо определить максимально возможное значение m (50, или 100, или 150) и использовать его в описании.

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

Структура отдельного оператора описания одномерного массива:

описатель имя[размер];

где описатель – ключевое слово, определяющее тип элементов массива;

имя – идентификатор массива (формируется аналогично имени переменной);

размер – целая константа, определяющая количество элементов массива;

[ ] – ограничители размера массива.

Так, описатель одномерного массива целочисленных элементов с именем D размером 16 элементов имеет вид:

int d[16]; или увеличено int d[20];

Одномерный массив А в 30 вещественных элементов описывается:

float a[30];

Одномерный вещественный массив Y(m) может быть описан:

float y[50]; или float y[100]; или float y[150];

Совместное описание вещественных переменных x, y, z, а также одномерных массивов T(120) и S(70) может иметь вид:

float x, y, z, t[120], s[70]; или float y, t[120], x, s[70], z;

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

      1. Обозначение элементов массива в Си/Си++

Описание массива позволяет использовать в программе любой из его элементов. Для обозначения элементов массива в Си/Си++ используются индексированные переменные.

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

  • Внимание! Особенность обозначения элементов массива в Си/Си++ - нумерация индексов от 0, а не от 1. Поэтому индексы в Си/Си++ на единицу меньше заданных математически. Это обстоятельство должно учитываться в программе, особенно при формировании условия повторения (выхода из) цикла.

Схема распределения памяти для хранения одномерного массива такова:

индекс 0

индекс 1

индекс 2

индекс i-1

индекс n-2

индекс n-1

1-й

элемент

2-й

элемент

3-й

элемент

..

..

..

i-й

элемент

..

..

..

n-1-й

элемент

n-й

элемент

Длина ячейки для хранения каждого элемента определяется типом массива:

  • символьный – 1 байт;

  • целочисленный – 2 байта;

  • вещественный – 4 байта;

  • двойной точности – 8 байт.

Структура обозначения индексированной переменной одномерного массива:

имя[индекс]

, где имя – идентификатор массива;

индекс – операнд целого типа, определяющий номер элемента в ряду других, составляющих массив;

[ ] – ограничители индекса.

Так, в описанном ранее массиве D(16) первый элемент обозначается индексным выражением d[0], второй – d[1], текущий – d[i], предпоследний – d[14] и последний – d[15].

При необходимости, индекс может задаваться арифметическим выражением. Например, d[i+2] или d[j*5+3]. В любом случае на момент использования переменной индекс должен быть определен (рассчитан) и полученное значение должно укладываться в заданный описателем диапазон.

Рассмотренный пример идентификации элементов массива D применим к любому из описанных одномерных массивов.

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

Адрес любой переменной определяется операцией &. Следовательно, у элемента d[0] адрес – &d[0], у d[i] – &d[i], т.е. все элементы массива располагаются в оперативной памяти линейно, начиная с адреса &d[0].

В языке Си/Си++ идентификатор одномерного массива однозначно определяет адрес его первого элемента. Например, c  &c[0], d  &d[0].

Адрес каждого элемента одномерного массива выражается зависимостью

имя+индекс

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

Так, адрес i-го элемента массива С (&c[i]) вычисляется как c + i.

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

С учетом изложенного выполним программирование задачи 5.2.