Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Задача 1.1. Расчет по формуле
Написать программу, которая переводит температуру в градусах по Фаренгейту в градусы Цельсия по формуле: C = |(f-32), где С - температура по Цельсию, aF — температура по Фаренгейту. Перед написанием любой программы надо четко определить, что в нее требуется ввести и что мы должны получить в результате. В данном случае сомнений нет: в качестве исходных данных выступает одно вещественное число, представляющее собой температуру по Цельсию, в качестве результата — другое вещественное число. Алгоритмических сложностей решение этой задачи также не представляет, поэтому давайте попробуем написать эту программу «в лоб» и посмотрим, что получится. Сразу же оговоримся, что первый блин будет комом, но тем программирование и отличается в лучшую сторону от реальной жизни, что ошибки можно найти и исправить, #include < iostream.h> int main(){ // l float fahr, cels; // 2 cout< < endl< < “Введите температуру no Фаренгейту”< < endl; //3 cin > > fahr; // 4 cels -5/9* (fahr - 32); //5 cout < < ” По Фаренгейту: “< < fahr < < ". в градуса» Цельсия: " < < cels < < endl: // 6 return 0: // 7 } Рассмотрим каждую строку программы отдельно. В начале программы записана директива препроцессора1, по которой к исходному тексту программы подключается заголовочный файл < iocstream.h>. Это текстовый файл, который содержит описания элементов стандартной библиотеки, необходимых для выполнения ввода-вывода. Если говорить более конкретно, то в этом файле описан набор классов для управления вводом/выводом, стандартные объекты-потоки cin:; лн ввода с клавиатуры и cout для вывода на экран, а также операции помещения в поток « (вывода на экран) и извлечения из потока » (ввода с клавиатуры). Объекты мы будем рассматривать во второй части практикума, а пока давайте пользоваться стандартными объектами и операциями с ними как некими волшебными словами, не пытаясь полностью осознать их смысл, ведь и в реальной жизни большинством благ цивилизации мы пользуемся подобным же образом. Директивы препроцессора записываются в отдельной строке, перед знаком # могут находиться только пробельные символы. Программа на С++ состоит из функций. Функция - это именованная последовательность операторов. Функция состоит из заголовка и тела. Строка, помеченная комментарием 1, представляет собой заголовок главной (а в данном случае и единственной) функции программы. Она должна иметь имя main, указывающее, что именно с неё требуется начинать выполнение. Заголовок любой функции пишется по определенным правилам. За именем функции в скобках обычно следует список передаваемых ей параметров. В данном случае он пуст, но скобки необходимы для того, чтобы компилятор мог распознать, что это именно функция, а не другая конструкция языка. Перед именем записан тип значения (int — целое), возвращаемого функцией в точку ее вызова (в данном случае - во внешнюю среду). По стандарту главная функция должна возвращать целочисленное значение. Забегая вперед, скажем, что этим в нашей программе занимается оператор 7. Впрочем, многие компиляторы реагируют спокойно и в случае, если функция ничего не возвращает. После круглых скобок в фигурных скобках записывается тело функции, то есть те операторы, которые требуется выполнить. Для удобства восприятия принято располагать тело с отступом в 3-4 позиции от заголовка. Обратите внимание, что закрывающая скобка находится в той же колонке, что и первый символ заголовка функции. Это требование хорошего стили, а не синтаксиса. Для хранения исходных данных и результатов надо выделить достаточно места в оперативной памяти. Для этого служит оператор 2. В нащей программе требуется хранить два значения; температуру по Цельсию и температуру по Фаренгейту, поэтому в операторе определяются две переменные. Одна, для хранения температуры по Фаренгейту, названа fahr. другая (по Цельсию) — cels. Имена переменным даст программист, исходя из их назначения. Имя может состоять тайно из латинских букв, цифр н знака подчеркивания не должно начинаться не с цифры. От того, насколько удачно подобраны имена в программе, зависит се читаемость — одна из важнейших характеристик программы. При описании любой переменной нужно указать ее тип, чтобы компилятор знал, сколько выделить места в памяти, как интерпретировать значение переменной (то есть ее внутреннее представление), а также какие действия можно будет выполнять с этой величиной. Например, для вещественных чисел в памяти хранится мантисса и порядок, а целые представляются просто в двоичной форме, поэтому внутренние представление одного и того же целого и вещественного числа будут различным. Более того, для действий с целыми и вещественными величинами формируются различные наборы машинных команд. Позтому-то указание типа для каждой переменной является таким важным1. Поскольку температура может принимать не только целые значения, для переменных выбран вещественный тип float. Можно также выбрать тип double, позволяющий представлять вещественные числа большего диапазона значений и с большей точностыо, но для данной задачи это нам кажется излишней роскошью. В общем случае тип переменных выбирается исходя из возможного диапазона значений и требуемой точности представления данных. Например, нет необходимости заводить переменную вещественного типа для хранения величины, которая может принимать только целые значения — хотя бы потому, что целочисленные операции выполняются гораздо быстрее. Для того, чтобы пользователь программы (пока что это вы сами) знал, в какой момент требуется ввести с клавиатуры данные, применяется так называемое приглашение к вводу (оператор 3). На экран выводится указанная в операторе строка символов, и курсор переводится на следующую строку. Строка символов, более строго называемая символьным литералам, — это последовательность любых представнмых в компьютере символов, заключенная в кавычки. Стандартный объект, с помощью которого выполняется вывод на экран, называется cout. Ему с помощью операции « передается то, что мы хотим вывести. Для вывода нескольких элементов используется цепочка таких операций. Для перекода на следующую строку записывается волшебное слово endl. Это — так называемый манипулятор; он управляет, то есть «манипулирует» стандартным объектом cout В операторе 4 выполняется ввод с клавиатуры одного чиста в переменную fahr. Для этого используется стандартный обьект cin и операция извлечения (чтения)». В операторе 5 вычисляется выражение, записанное справа от операции присваивания (обозначаемой знаком -), и результат присваивается переменной cels, то есть заносится в отведенную этой переменной память. Выражение — это правило для вычисления некоторого значения, можно назвать его формулой. Порядок вычислений определяется приоритетом операций. Для вывода результата в операторе 6 применяется объект cout. Выводится цепочка, состоящая из четырех элементов. Это строка " По Фаренгейту: '. значение переменной fahr, строка', в градусах Цельсия: * и значение переменной cels. Обратите внимание, что при выводе строк все символы, находящиеся внутри кавычек, включая и пробелы, выводятся без изменений. При выводе значений переменных выполняется преобразование из внутреннего представления числа в строку символов, представляющую это число. Под значение отводится ровно столько позиций, сколько необходимо для вывода всех его значащих цифр. Это значит, что если вывести две переменные подряд, их значения «склеятся», например: cout < < fahr < < cels; // плохо cout < < fahr < < ' ' « cels: // чуть лучше В одиночные кавычки в языке C++ заключается отдельный символ. В данном примере это пробел. Наконец, последний оператор (оператор 7) этой программы предназначен для возврата из нее и передачи значения во внешнюю среду. В главной функции разрешается его опускать, но в этом случае компилятор может выдать предупреждение (warning) и сформирует возвращаемое значение по умолчанию, равное нулю. Наберите текст программы и скомпилируйте ее Есть один вид локальных переменных, которые, подобно глобальным, размещаются в сегменте данных, существуют на всем протяжении выполнения программы и инициализируются однократно. Это статические переменные. С другой стороны, они. как локальные переменные, видны только в своем блоке. Для описания статических переменных используется ключевое слово static Ниже приведен пример описания трех переменных и таблица, в которой суммируются сведения о вилах переменных: Int а: // глобальная лереиенная Int mainOf static int b - 1: // локальная статическая переиенная int с: // локальная перепенная )
Память под все эти переменные выделяет компилятор. Кроме перечисленных, существуют динамические переменные, память под которые резервируется во время выполнения программы с помощью операции пе- в динамической области памяти. или хипе (heap). Доступ к таким переменным осуществляется не по имени, а через указатели. Во всех рассмотренных выше программах переменные являются локальными. Вариант с глобальными переменными выглядит так: Задача 1.2. Временной интервал Заданы моменты начала и конца некоторого промежутка времени в часах, минутах и секундах (в пределах одних суток). Найти продолжительность этого промежутка в тех же единицах1. Исходными данными для этой задачи являются шесть целых величин, задающих моменты начала и конца интервала, результатами — три целых величины. Вы уже знаете, что тип переменной выбирается, исходя из диапазона и требуемой точности представления данных, а имя дается в соответствии с ее содержимым. Нам потребуется хранить исходные данные, не превышающие величины 60 для минут и секунд и величины 24 для часов, поэтому можно ограничиться коротким целым типом (short 1nt. сокращенно short). Назовем переменные для хранения начала интервала hourl, mini и seel, для хранения конца интервала — hour2. ш1п2 и sec2. а результирующие величины- hour, ml пи sec. Для решения этой задачи необходимо преобразовать оба момента времени в секунды, вычесть первый из второго, а затем преобразовать результат обратно в часы, минуты и секунды. Следовательно, нам потребуется промежуточная переменная, в которой будет храниться интервал в секундах. Она может иметь весьма большие значения, ведь в сутках 86400 секунд. В величинах типа short могут храниться значения, не превышающие 32767 для величин со знаком (signed short) и 65535 для величин без знака (unsigned short), поэтому тип short здесь использовать нельзя. Вот почему для этой переменной следует выбрать длинный целый тип (long Int. сокращенно long). «Обычный» целый тип int в зависимости от архитектуры компьютера может совпадать либо с коротким, либо с длинным целым типом. Ниже приведен текст программы: #include < iostream.h> int мain(){ short hourl, min1, secl, hour2, min22. sec2, hour, min, sec; cout < < endl< < " Введите время начала интервапа (час ими сек)" < < endl; cin> > hourl> > min1> > secl; cout < < endl < < ”Введите время конца интервала (час мин сек)" < < endl; cln > > hour2 > > min2> > sec2; long sum_sec = (hour2 - hourl) * 3600 * (mun2-mun1• 60 * sec2 - secl; hour = sum_sec / 3600; min= (sum_sec - hour * 3600) -min* 60; sec = sum_sec - hour * 3600 - min * 60; cout < < " Продолмдтельность прокежутка от " < < hourl < < ’: ’< < min1< < ': ' < < secl < < " до " < < hour2< < ': '< < min2 < < ': '< < sec2 < < endl < < " равна " < < hour < < ': '< < min< < ': ' < < sec < < endl; return 0: } Популярное: |
Последнее изменение этой страницы: 2016-08-31; Просмотров: 561; Нарушение авторского права страницы