Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Задача 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 с: // локальная перепенная

)

  Глобальная Локальная статическая Локальная  
Имя а 1 Ь с  
Размещали* сегмент данных сегмент данных сегмент стека  
Времи жизни вся программа вся программа блок  
Область видимости файл блок блок  
Инициализация т да нет  

Память под все эти переменные выделяет компилятор. Кроме перечисленных, существуют динамические переменные, память под которые резервируется во время выполнения программы с помощью операции пе- в динамической области памяти. или хипе (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; Просмотров: 518; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.018 с.)
Главная | Случайная страница | Обратная связь