Среда, 15.08.2018, 06:36
Discovery
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Форма входа
Категории раздела
PHP [1]
Уроки по PHP для начинающих
C++ [18]
Статьи посвященные С++
XML [2]
Статьи по XML
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
     Каталог статей
    -->
    Главная » Статьи » Программирование » C++

    Числовые типы данных: int, long, long long, float и double. Модификатор unsigned. Арифметические операторы.

    Числовые типы данных: int, long, long long, float и double. Модификатор unsigned. Арифметические операторы.

    Ели бы мы спросили у нашего компьютера, что он умеет делать лучше всего, он мог бы, не задумываясь ответить: «Считать!». Все, начиная от видеоклипа в Интернете и кончая сложными трехмерными моделями, сделанными в Autodesk 3ds Max, лишь благодаря способности нашего компьютера с огромной скоростью складывать большие числа, умножать, вычитать, и делить, возводить их в степень и извлекать из них корни. Но для этого компьютеру нужны подробные инструкции. Именно в этом и заключается работа программиста: объяснить компьютеру, что он должен сделать с полученными данными. Допустим, у нас есть простая программа, которая просит пользователя ввести два числа и результат деления первого числа на второе выводит на экран. Если не предусмотреть варианта, когда пользователь вводит 0 вместо второго числа, может произойти следующее (смотрите рисунок внизу):

    Ошибка приложения при делении на ноль

    В следующем уроке я расскажу, как решить эту проблему. Сейчас это может нас только запутать, вместо того чтобы внести ясность. Давайте для начала напишем программу, которая сначала просит ввести пользователя два числа, потом делит первое на второе и выводит результат на экран. И так что нам для этого потребуется?

    Во-первых, мы должны решить, какой тип данных использовать для наших переменных. Тип char в данном случае нам не подходит. Для этого в C++ есть специальный числовые типы данных. Один из этих типов данных: тип int (сокращение от английского слова integer, что в переводе на русский язык означает «целое»). Теперь мы можем написать нашу программу:


    #include <iostream>
    #include <windows.h>
    using namespace std;

    int main()
    {
        int num1, num2, total;

        cout << "Введите первое число: \n\n";
        cin >> num1;
        cout << "Введите второе число: \n\n";
        cin >> num2;
        total = num1 / num2;
        cout << "Результат: " << total << "\n\n";
        system("PAUSE");
        return 0;
    }

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

    1. 1. Если переменные имею одинаковый тип, их можно объявлять через запятую, указав перед ними тип, которому они принадлежат.
    2. 2. В С++ используются те же знаки арифметических операций, за исключение знака умножения и деления. Вместо знака умножения в C++ ставиться звездочка: *, а вместо знака деления слеш /.

    Все числовые типы данных имеют определенный диапазон, за которое не должно выходить вводимое число. Для int это диапазон равен от -2147483648 до 2147483647. Есть другие целочисленные типы данных в C++, которые позволяют записывать в них числа меньше чем -2147483648  и больше чем 2147483647. Это long long int или просто long long, диапазон которого от -9223372036854775808 до 9223372036854775807. К сожалению, более старые компиляторы его не поддерживают. Есть еще тип short int или просто short. Его диапазон от -32768 до 32767. Конечно, никто вам не может запретить использовать типы данных с большим диапазоном для записи маленьких чисел. При запуске наших простейших программ это никак не скажется на вычислительных ресурсах вашего компьютера. Но если это будет компьютерная игра с реальной физикой или фильм качества HD, то последствия неумелого использования типов будут намного серьезней.

    И в заключение я хотел бы рассказать еще о двух типах данных, которые используются для записи чисел, у которых помимо целой, есть дробная часть. Это float (название происходит от английского слова float – плавающий) и double (название происходит от английского слова double – двойной). Тип float позволяет записать значения от 1.17549e-038 до3.40282e+038 (буква e и следующие за ней цифры означают, что после 1,7549 идут еще тридцать восемь нулей). Тип double позволяет записать значения от 2.22507e-308 до 1.79769e+308. Одно замечание, прежде чем мы двинемся дальше. В любом случае значение того или иного типа нужно уточнить в документации к вашему компилятору, т. к. это зависит, нет от операционной систему, а от компилятора. Теперь мы готовы приступить к написанию более сложных программ.

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

    #include <iostream>
    #include <windows.h>
    using namespace std;

    int main()
    {
        int x = 2;

        cout << "\nНа первой клетке будет лежать 1 зерно.\n\n";
        cout << "На второй клетке будут лежать ";
        cout << x;
        cout << " зерна.\n\n";
        cout << "На третьей клетке будет лежать ";
        cout << x * x;
        cout << " зерна.\n\n";
        cout << "На четвертой клетке будет лежать ";
        cout << x * x * x;
        cout << " зерен.\n\n";
        cout << "На пятой клетке будет лежать ";
        cout << x * x * x * x * x;
        cout << " зерна.\n\n";
        cout << "На шестой клетке будет лежать ";
        cout << x * x * x * x * x * x;
        cout << " зерна.\n\n";
        cout << "На седьмой клетке будет лежать ";
        cout << x * x * x * x * x * x * x;
        cout << " зерен.\n\n";
        cout << "На восьмой клетке будет лежать ";
        cout << x * x * x * x * x * x * x * x;
        cout << " зерен.\n\n";
        cout << "На девятой клетке будет лежать ";
        cout << x * x * x * x * x * x * x * x * x;
        cout << " зерен.\n\n";
        cout << "На десятой клетке будет лежать ";
        cout << x * x * x * x * x * x * x * x * x * x;
        cout << " зерна.\n\n";
        cout << "На одиннадцатой клетке будет лежать ";
        cout << x * x * x * x * x * x * x * x * x * x * x;
        cout << " зерен.\n\n";
        cout << "На двенадцатой клетке будет лежать ";
        cout << x * x * x * x * x * x * x * x * x * x * x * x;
        cout << " зерен.\n\n";
        cout << "На тринадцатой клетке будет лежать ";
        cout << x * x * x * x * x * x * x * x * x * x * x * x * x;
        cout << " зерна.\n\n";
        cout << "На четырнадцатой клетке будет лежать ";
        cout << x * x * x * x * x * x * x * x * x * x * x * x * x * x;
        cout << " зерна.\n\n";
        cout << "На пятнадцатой клетке будет лежать ";
        cout << x * x * x * x * x * x * x * x * x * x * x * x * x * x * x;
        cout << " зерен.\n\n";
        cout << "На шестнадцатой клетке будет лежать ";
        cout << x * x * x * x * x * x * x * x * x * x * x * x * x * x * x * x;
        cout << " зерен.\n\n";

        system("PAUSE");
        return 0;
    }

    Как видим то, что мы выводим нашу фразу с помощью трех инструкций cout, никак не отображается при выводе на экран. Если еще до запуска программы известно значение переменной, можно его инициализировать (то есть присвоить ему значение) во время объявления переменной, что мы и сделали, написав int x = 2;.

    К сожалению задачи, в которых используются только целые числа, в жизни встречаются очень редко. Чаще всего нам приходится иметь дело с дробными числами. И округление до целого числа не всегда помогает. Представьте, если вы вместо полторы ложки соли положите одну или еще хуже две.

    В C++ для этого существуют два специальных типа: float и double. Тип float еще называют числом с плавающей точкой. Называется он так из-за точки, которая отделяет дробную часть от целой (в английском языке для отделения дробной части от целой вместо запятой ставиться точка). Тип double переводиться с английского языка как двойной, т. е. двойной точности.

    Теперь напишем небольшую программу, которая будет переводить километры в американские мили.

    #include <iostream>
    #include <windows.>
    using namespace std;

    int main()
    {
        float kilometers, miles;
        cout << "Введите количество миль: ";
        cin >> miles;
        kilometers = miles * 1.609;
        cout << "Это будет " << kilometers << "km\n\n";
        system("PAUSE");
        return 0;
    }

    Как известно в США в отличие от нас, температура воздуха измеряется не как у нас по шкале Цельсия, а по шкале Фаренгейта. Давайте напишем программу, которая переводит температуру по шкале Цельсия в температуру по шкале Фаренгейта. Рассчитывается он по следующей формуле: F° = C°  *  (212 - 32) / 100 + 32. Вот как будет выглядеть наша программа:


    /*
    *   Программа для преобразования
    *   градусов Цельсия в градусы Фаренгейта
    */

    #include <iostream>
    #include <windows.h>
    using namespace std;

    int main()
    {
        float Celsius, Fahrenheit;

        cout << "Введите температуру по шкале Цельсия:\n\n";
        cin >> Celsius;
        Fahrenheit = Celsius  *  (212 - 32) / 100 + 32;
        cout << "\n" << Celsius << " град. по Цельсию будет "
        << Fahrenheit << " град. по Фаренгейту.\n\n";

        system("PAUSE");
        return 0;
    }

    Так же можно написать программу, которая переводит температуру по шкале фаренгейта в температуру по Цельсию:


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

    #include <iostream>
    #include <windows.h>
    using namespace std;

    int main()
    {
        float Celsius, Fahrenheit;

        cout << "Введите температуру по шкале Фаренгейта:\n\n";
        cin >> Fahrenheit;
        Celsius = (Fahrenheit - 32) * 100 / (212 - 32);
        cout << "\n" << Fahrenheit << " град. по Фаренгейту будет "
        << Celsius << " град. по Цельсию.\n\n";

        system("PAUSE");
        return 0;
    }

    Ну и для полноты изложения те же программы с функцией Rus( ).


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

    #include <<iostream>
    #include <<windows.h>
    using namespace std;

    char* Rus(const char* text);

    int main()
    {
        float Celsius, Fahrenheit;

        cout << Rus("Введите температуру по шкале Цельсия:\n\n");
        cin >> Celsius;
        Fahrenheit = Celsius * (212 - 32) / 100 + 32;
        cout << "\n" << Celsius;
        cout << Rus(" град. по Цельсию будет ");
        cout << Fahrenheit;
        cout << Rus(" град. по Фаренгейту.\n\n");

    system("PAUSE");
    return 0;
    }

    //////////////////////////////////////////
    char bufRus[256];
    char* Rus(const char* text)
    {
        CharToOem(text, bufRus);
        return bufRus;
    }
    //////////////////////////////////////////


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

    #include <iostream>
    #include <windows.h>
    using namespace std;

    char* Rus(const char* text);

    int main()
    {
        float Celsius, Fahrenheit;

        cout << Rus("Введите температуру по шкале Фаренгейта:\n\n");
        cin >> Fahrenheit;
        Celsius = (Fahrenheit - 32) * 100 / (212 - 32);
        cout << "\n" << Fahrenheit;
        cout << " град. по Фаренгейту будет ";
        cout << Celsius;
        cout << " град. по Цельсию.\n\n";

        system("PAUSE");
        return 0;
    }

    //////////////////////////////////////////
    char bufRus[256];
    char* Rus(const char* text)
    {
        CharToOem(text, bufRus);
        return bufRus;
    }
    //////////////////////////////////////////

    И еще один важный момент, все перечисленные типы данных являются знаковыми. То есть самый первый (или как его еще называют старший бит), отводиться под знак введенного значения. Можно расширить диапазон значений, которые можно записать в переменную, пожертвовав возможностью вводить отрицательные значения. Для этого достаточно перед объявлением переменной написать unsigned, что в переводе с английского означает «беззнаковое». Например: unsigned int variable; .

    Категория: C++ | Добавил: stranger140569 (06.08.2012)
    Просмотров: 11415 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *:
    Copyright MyCorp © 2018
    Конструктор сайтов - uCoz