PDA

Просмотр полной версии : [Урок] [Цикл уроков программиста] 6. Программа "Fahrenheit to Celsius"



Tracker1
30.07.2013, 20:28
В данной статье мы продолжим знакомиться с C++. Так как мы пока ещё очень мало знаем о программировании, то примеров из компьютерных игр пока не будет. Вместо этого мы будем считать градусы, что тоже, согласитесь, неплохо.
Добавление проекта в решение "solution"

Для начала нам нужно создать ещё один проект. Откройте IDE и выберите решение solution. Выберите в меню File → New → Project (Файл → Создать → Проект) или на панели инструментов щёлкните кнопку New Project.

В Project type должно быть выбрано Win32, в Templates - Win32 Console Application.

В поле Name (имя) пишем Fahrenheit to Celsius, а в выпадающем списке Solution (решение) выберите Add to solution (Добавить к решению). Жмём OK.

В появившемся помошнике жмём Next, а дальше для Application type (Тип приложения)выбираем Console application (Консольное приложение). В Addition options (Дополнительные свойства) ставим флажок напротив Empty project (Пустой проект). И нажимаем Finish.

В обозревателе решений появился новый проект. Сейчас нам нужно добавить в него файл. Жмём CTRL+N, выбираем C++ File (.cpp) и нажимаем Open.

В редакторе кода отобразится содержимое файла. Пока что тут пусто. В меню выбираем пункт File → Move Source1.cpp into -> 2. Fahrenheit to Celsius. В появившемся диалоговом окне Save file As в поле для имени впишите - main.cpp и нажмите Сохранить.
Программа Fahrenheit to Celsius

Программа сначала печатает значения по Фаренгейту для нуля и ста градусов Цельсия. Затем просит ввести пользователя значение температуры по Фаренгейту и переводит его в значение по Цельсию.

Полный листинг программы можно найти в конце урока. Ниже в примере приводится фрагмент кода идущий сразу после директивы using namspace:


#define BOILING_POINT_F 212

int main()
{
setlocale(LC_CTYPE,"Russian");
const int FREEZE_POINT_F = 32;
float f, c;

cout << "0 C = " << FREEZE_POINT_F << " F\n";
cout << "100 C = " << BOILING_POINT_F << " F\n\n";

cout << "Введите температуру по Фаренгейту: ";
cin >> f;

c = (f-32)*5/9;
cout << "Температура по Цельсию равна " << c << "\n";

_getch();
return 0;
}


Приступим к осмотру пациента. Прежде всего мы добавили ещё один заголовочный файл - clocale. Он нужен нам для того, чтобы использовать функцию setlocale() в программе, которая в свою очередь позволяет выводить текст в консоли на русском языке.
Константы

Константы - это какие-то величины, которые нельзя изменять. Например, число Pi = 3,14, является константой. В С++, если вам нужно какое-то значение, которое будет постоянным во время выполнения программы, его лучше сделать константным. Сделать это можно двумя способами. И оба два представлены в нашей программе.

Первый. До определения функции main(), использовать директиву препроцессора #define:


#define BOILING_POINT_F 212


BOILING_POINT_F - это идентификатор (или имя) константы. Идентификатор позволяет использовать (ссылаться на) константу в программе. Этой константе пррисваивается значение 212.

Второй (более предпочтительный) способ объявления констант. Использование ключевого слова const:


const int FREEZE_POINT_F = 32;

FREEZE_POINT_F - это идентификатор (имя). Ключевое слово int - это тип данных. int от integer (целое число). Данной константе нельзя присвоить никаких данных, кроме целого числа.

Например следующие примеры верны:


const int FREEZE_POINT_F = 12;
const int FREEZE_POINT_F = 0;
const int FREEZE_POINT_F = 3282;


а вот эти, нет:


const int FREEZE_POINT_F = 12.2; // для использования этих значений поменяйте
const int FREEZE_POINT_F = 0.5; // int на float или в последнем случае на
const int FREEZE_POINT_F = 'Я'; // char


Обратите внимание на отличие синтаксиса при использовании #define и const:
#define расположена за пределами определения функции main(), а const внутри.
После директивы #define нет точки с запятой, это обычно для директив препроцессора.
В #define не используется оператор присваивания =, а идентификатор отделяется от значения пробелом, в отличии от const, где идентификатор и значение разделены этим знаком.
И последнее: при использовании const обязательно нужно указывать какого типа константа (целое число - int, вещественное - float, строка текста).
Поддержка русского языка

В первой программе мы выводили текст на английском языке. Консольные приложения не поддерживают русский язык. И чтобы это исправить нам нужна функция setlocale():


setlocale(LC_CTYPE,"Russian");

В этом операторе происходит вызов функции setlocale(). То что это функция, можно догадаться по скобкам. То что находится в скобках мы пока обсуждать не будем. Просто если хотите использовать в своих программах русский язык, добавтье заголовочный файл clocale с помощью директивы #include, а в теле main() вызовите функцию setlocale(LC_CTYPE,"Russian").
Использование переменных

С константами мы разобрались. Но что если нам нужно использовать величины, которые будут изменяться во время выполнения программы? Например, данные которые введёт пользователь? Для этого как раз и существуют переменные (variable - переменная). Значения переменных могут меняться во время выполнения программы

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

Обьявление и определение происходят в одной строке:


float f, c;

Здесь мы обьявили и определили две вещественные (числа с десятичной запятой) переменные f - для температуры по Фаренгейту и c - Для температуры по Цельсию.

При обьявлении переменной компилятор узнаёт о её существовании.
При определении, операционная система (ОС) выделяет место в памяти для переменной.
При инициализации, переменной присваивается начальное значение.
Все три действия можно выполнить в одной строке, например:


int var = 0; // целой переменной var присваивается ноль

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

Следующий оператор, который мы пока не знаем:


cin >> f;

cin - обьект для работы с ввводом с клавиатуры. Операция >> - это операция извлечения. Она помещает в то что стоит справа, значение из левой своей части. То есть в переменную f будет помещено то, что содержится в cin. А содержаться в cin будет то, что пользователь введёт с клавиатуры во время работы программы.
Использование переменных

Следующий оператор довольно простой:


c = (f-32)*5/9;

Здесь высчитываются градусы по Цельсию исходя из значения температуры по Фаренгейту. Операции разности, произведения, деления и скобок используются точно так же как и в математике. Знак равно = называется оператором присваивания. То что находится слева принимает значение того что находится справа. Т.е. переменной c присваивается значение выражения (f-32)*5/9.
Каскадирование операции вставки <<

И последний оператор, который мы обсудим:


cout << "Температура по Цельсию равна " << c << "\n";

Мы уже встречались и с обьектом cout и с операцией <<. Но здесь используется каскадирование операции вставка <<. Сначала в cout копируется константная строка, затем переменная c и затем ещё одна константая строка содержащая символ конца строки.
Запуск программы
Теперь давайте запустим программу. Нажимаем F7, а затем F5. Но у нас запустилась программа hello world. Закройте её. В обозревателе решений вызовите контекстное меню для Fahrenheit to Celsius (Щёлкните на названии проекта правой кнопкой мыши) и выберите Set As StartUp Project (Сделать проектом по умолчанию). Попробуйте снова запустить проект, на этот раз должно получиться.

На этом всё.

Упражнения:
1. Измените программу так, чтобы она преобразовывала значения по Цельсию в градусы по Фаренгейту.
Формула: f = c*9/5+32
2. Добавьте к решению subscribe новый проект Area of a circle. Добавьте к проетку одноимённый файл. Напишите программу вычисляющую площадь окружности. Пользователь должен ввести радиус круга. Создайте константу PI = 3.1415 используя const. формула площади окружности: area = PI * rad * rad, где rad - радиус окружности.




// Программа Fahrenheit to Celsius

#include <conio.h>
#include <iostream>
#include <clocale>

using namespace std;

#define BOILING_POINT_F 212

int main()
{
setlocale(LC_CTYPE,"Russian");
const int FREEZE_POINT_F = 32;
float f, c;

cout << "0 C = " << FREEZE_POINT_F << " F\n";
cout << "100 C = " << BOILING_POINT_F << " F\n\n";

cout << "Введите температуру по Фаренгейту: ";
cin >> f;
c = (f-32)*5/9;
cout << "Температура по Цельсию равна " << c << "\n";

_getch();
return 0;
}