Программирование >>  Структурное программирование 

1 ... 35 36 37 [ 38 ] 39 40 41 ... 342


Задать начальное значение О переменной total Задать начальное значение 1переменной counter

Ввести первую оценку ПОКА пользователь не ввел метку

Добавить введенную оценку к текущему значению total Добавить единицу с счетчику оценок counter Ввести следующую оценку (возможно, что это будет метка)

ЕСЛИ счетчик counter не равен нулю

Рассчитать среднюю оценку average как total, деленная на counter Напечатать среднюю оценку ИНАЧЕ

Напечатать Оценки не введены

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

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

Замечание по технике программирования 2.4

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

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

Замечание по технике программирования 2.5

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

Программа на С++ и пример ее выполнения приведены на рис. 2.9. Несмотря на то, что вводятся только целые значения оценок, расчет средней величины оценки вероятно даст число с десятичной запятой (т.е. действительное число). Тип int не может описывать действительные числа. Поэтому в программу вводится переменная типа float, чтобы оперировать с числами с десятичной запятой (называемыми также числами с плавающей запятой), и вводится специальная операция, называемая операцией приведения к типу для обработки вычисления среднего значения. Эти особенности будут объяснены более детально после рассмотрения программы.



Программа для расчета среднего значения с повторением, управляемым меткой #include <iostreara.h> #include <iomanip.h>

mam ( {

float average; число с десятичной запятой

int counter, grade, total;

этап задания начальных значений total = 0; counter = 0;

этап обработки данных

cout << Введите оценку или -1 для завершения: ; cin grade;

while (grade != -1) {

total = total + grade; counter = counter + 1;

cout << Введите оценку или -1 для завершения: ; cin >> grade;

завершающий этап if (counter != 0) {

average = (float) total / counter;

cout << Среднее значение равно << setprecision(2) setiosflags(ios::fixed ios::showpoint) << average endl;

else

cout << Оценки не введены << endl;

return }

0; указание, что программа успешно завершена

Введите

оценку

завершения:

Введите

оценку

завершения:

Введите

оценку

завершения:

Введите

оценку

завершения:

Введите

оценку

завершения:

Введите

оценку

завершения:

Введите

оценку

завершения:

Введите

оценку

завершения:

Введите

оценку

завершения:

Средняя оценка равна 82.50

Рис. 2.9. Программа С++ для расчета среднего значения с помощью повторения,

управляемого меткой

Отметим, составной оператор в цикле wMle на рис. 2.9. Без фигурных скобок последние три оператора тела цикла выпали бы из этого цикла, приведя к такой неправильной интерпретации компилятором этого кода:



while (grade != -1)

total = total + grade; counter = counter + 1;

cout Введите оценку или -1 для завершения: ; cin grade;

Это привело бы к бесконечному циклу (зацикливанию), если бы только пользователь не ввел -1 в качестве первой оценки.

Хороший стиль программирования 2.8

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

Средние значения не всегда выражаются целыми числами. Часто среднее значение имеет величину типа 7,2 или -93,5, содержащую дробную часть. Подобные числа описываются как числа с плавающей запятой и представляются типом данных float. Переменная average объявлена как переменная типа float, чтобы учесть дробную часть результатов вычислений. Однако, результат вычисления total / counter является целым числом, поскольку и total и counter - переменные целого типа. Деление двух целых чисел осуществляется как целочисленное деление, при котором любая дробная часть результата теряется (т.е. отсекается). Поскольку сначала осуществляется деление, дробная часть потеряется прежде, чем результат будет присвоен переменной average. Чтобы осуществлять над целыми числами вычисления с плавающей запятой, надо создавать для вычислений временные величины с плавающей запятой. В С-Н- для решения этой задачи вводится унарная операция приведения к типу. Оператор

average = (float) total / counter;

включает операцию приведения к типу (float), которая создает временную копию с плавающей запятой своего операнда total. Подобное использование операции приведения к типу называется явным преобразованием. Величина, сохраняемая в total, остается целой. А вычисления теперь сводятся к делению величины с плавающей запятой (временной копии total типа float) на целую величину counter.

Компилятор C-I-+ знает только, как вычислять выражения с операндами, имеющими идентичные типы. Чтобы обеспечить одинаковый тип операндов, компилятор осуществляет операцию преобразования по умолчанию (называемую также неявным преобразованием типов) над выделенными операндами. Например, в выражении, содержащем данные типов int и float, операнд типа int преобразуется в тип float. В нашем примере после того, как counter будет преобразован во float, осуществляются вычисления и результат деления с плавающей запятой присваивается переменной average. Позднее в данном разделе мы обсудим все стандартные типы данных и последовательность их преобразования.

Операции приведения к типу применимы к любым типам данных. Операция оформляется как имя типа данных, помещенное в круглые скобки. Приведение к типу является унарной операцией, т.е. операцией, имеющей всего один операнд. В главе 1 мы изучили бинарные арифметические операции. С-Ь+ поддерживает также унарные операции унарный плюс (+) и унарный минус (-), благодаря которым программист может писать выражения типа -7 или 4-5. Операции приведения к типу имеют ассоциативность справа



1 ... 35 36 37 [ 38 ] 39 40 41 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика