Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Русский_Проект: Изучение Visual Basic C#. Учебный курс


C#. Учебный курс

Здравствуйте, программисты! Сегодня у нас пятое занятие, в котором мы вспомним некоторые уроки из прошлых занятий и познакомимся с новыми понятиями.

Другие типы данных

Итак, на одном из занятий мы использовали в программе переменные типа int, которые могут хранить только целочисленные значения. Для работы с числами с дробной частью нужно использовать типы float и double. Чтобы лучше понять разницу между типами int и double, напишем следующую программу:

class IntDoubleDemo
{
    public static void Main()
    {
        int iVar;   // объявляем переменную типа int
        double dVar;   // объявляем переменную типа double
        iVar = 100;    // присваиваем переменной iVar значение 100
        dVar = 100.0;    // присваиваем переменной dVar значение 100,0

        // Выводим значения переменных на экран
        System.Console.WriteLine("Значение переменной iVar: " + iVar);
        System.Console.WriteLine("Значение переменной dVar: " + dVar);

        // Делим обе переменные на 3
        iVar = iVar / 3;
        dVar = dVar / 3;

        // Выводим значения переменных после деления на экран
        System.Console.WriteLine("Значение переменной iVar после деления: " +  iVar);
        System.Console.WriteLine("Значение переменной dVar после деления: " +  dVar);
    }
}

После запуска программы вы увидите следующее:

Значение переменной iVar: 100
Значение переменной dVar: 100
Значение переменной iVar после деления: 33
Значение переменной dVar после деления: 33,3333333333333

Как видите, после деления значение переменной iVar на 3 получается целое число 33, а дробная часть была отброшена. А при делении значения переменной dVar дробная часть осталась. Таким образом, при необходимости работы с числами с плавающей точкой, ее нужно указать явным образом.

Практическая работа. Преобразование значений температуры

Мы рассматривали достаточно отвлеченные примеры. Давайте теперь напишем более полезную программу. Например, создадим приложение, которое преобразует значение температуры по шкале Фаренгейта в значение по шкале Цельсия.

Для решения задачи нам понадобятся две переменные типа double, в которых будут храниться значения температур по шкале Фаренгейта и Цельсия. Надеюсь, вы понимаете, почему мы выбрали именно тип double для наших переменных? Вспомните, что когда мы говорим о нормальной температуре человека, то подразумеваем температуру 36.6 градусов по Цельсию, т.е. дробное число.

Для преобразования значений температур по шкале Фаренгейта в шкалу по Цельсию используется формула:

C = 5/9 * (F - 32)

В этой формуле C - значение температуры по шкале Цельсия в градусах, а F - значение температуы по шкале Фаренгейта в градусах.

Итак, создаем новый проект FtoC:

// Программа преобразования значений температур по шкале Фаренгейта
// в значения температур по шкале Цельсия

class FtoC
{
    public static void Main()
    {
        double f;  // содержит значение температуры по Фаренгейту
        double c;  // содержит значение температуры по Цельсию

        // Присваиваем переменной f значение 451 градусов по Фаренгейту
        f = 451.0;

        // Выполняем преобразование по формуле
        c = 5.0 / 9.0 * (f - 32.0);

        System.Console.WriteLine(f + " градус по шкале Фаренгейта равны ");
        System.Console.WriteLine(c + " градусам по шкале Цельсия");
    }
}

Теперь, когда вы будете читать книгу американского фантаста Рэя Бредбери 451 градус по Фаренгейту, вы будет представлять о какой температуре идет речь в привычной нам шкале Цельсия.

Арифметические операции

На прошлых занятиях, когда мы изучали различные типы данных, нам приходилось складывать, умножать и делить значения переменных. Иными словами, мы занимались вычислениями. Тема сегодняшнего занятия - арифметические операции. мы немного поработали с переменными.

C# поддерживает все основные арифметические операции: сложение, вычитание, умножение и деление.

Операции сложения и вычитания очень просты и знакомы с детства:

C = A + T;
C = A - T;

Знаки + и - называются арифметическими операторами (arithmetic operators) и относятся к бинарным операторам, так как имеют по два операнда справа и слева.

Но ничто не мешает использовать их как унарные операторы:

C = A + -B;
C = -A + B;

Большого смысла в этом нет, поэтому останавливаться не будем.

Для умножения в C# используется знак * вместо привычного по школьной алгебре знака × или ·.

C = A * T;

Для знака деления C# также использует свой символ. Вместо привычного двоеточия (:) используется слэш (/).

C = A / T;

На операции деления стоит остановиться подробнее. Например, напишем часть программы:

int С, A, T; 

A = 5;
T = 2;
C = A / T;

Так как мы объявили переменные целыми числами, то в результате деления у нас также получится не дробное число 2.5, а целое число 2. Когда делятся два целых числа, получаемый результат усекается, т.е. дробная часть отбрасывается. Усечение иногда называют округлением в сторону нуля. Поэтому при делении отрицательных чисел, если получается результат -1.5, то это число округляется до -1.

Есть еще один интересный оператор, связанный с делением. Этот оператор называется оператором остатка или оператором деления по модулю и обозначается знаком %. Так как в этом операторе содержится символ слэша, то вам будет проще запомнить, что этот оператор имеет связь с делением. В результате применения оператора деления по модулю мы получаем остаток от деления:

int C, A, T;

A = 11;
T = 3;
C = A % T;
System.Console.WriteLine("Значение C равно: " + C);

В результате мы получим значение 2, которое является остатком от деления чисел 11 и 3. При использовании оператора деления по модулю с отрицательными числами, результат всегад имеет тот же знак, что и делимое.

Этот оператор иногда очень удобно использовать в программах. Например, очень легко разбить четырехзначное число на две части. Предположим, вам надо получить две последние цифры года. Для этого достаточно применить следующий код:

int myYear = 1984;
int TwoDigitYear;

TwoDigitYear = myYear % 100;
System.Console.WriteLine("Значение TwoDigitYear равно: " + TwoDigitYear);

В результате деления любого четырехзначного числа на 100 по модулю мы всегда будем получать в остатке числа от 0 до 99.

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

// Программа подсчета продолжительности фильма в часах и минутах

class FilmTime
{
    public static void Main()
    {
        int TotalMinutes;  // общая продолжительность фильма в минутах
        int Hours;   // число часов
        int Minutes; // число минут

        TotalMinutes = 143;

        Hours = TotalMinutes / 60; // столько времени идет фильм в часах
        Minutes = TotalMinutes % 60;  // столько времени идет фильм в минутах

        System.Console.WriteLine("Фильм длительностью в " + TotalMinutes + " 

минуты идет " + Hours + " часа " + Minutes + " минуты");
    }
}

В этой программе значение переменной Minutes всегда будет находится в диапазоне от 0 до 50.

Также можно использовать оператор остатка для определения того, делится ли число нацело на другое. Например, это может пригодиться при определении высокосного года, который должен делиться на 4.

Мы с вами рассмотрели простые примеры с применением одного оператора. Но вы можете объядинять различные операторы в одном выражении. Здесь надо учитывать, что в этом случае будут использоваться те же правила, что и в обычной математике. То есть некоторые операторы будут иметь более высокий приоритет над другими и будут выполняться в выражении раньше других. Итак, операторы умножения и деления имеет более высокий приоритет, чем операторы сложения и вычитания. Если вы хотите изменить порядок вычислений, то используйте круглые скобки.

Сокращения

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

AllCatsOfCity = AllCatsOfCity + AllWildCats;

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

AllCatsOfCity += AllWildCats;

Запомните, что плюс ставится перед знаком равенства. Существуют аналогичные примеры и для вычитания, умножения, деления, получения остатка. Предположим у вас в кармане 300 рублей:

myMoney -= 100;  // вы потратили 100 рублей
myMoney /= 2;    // вы раздели деньги пополам
myMoney *3       // вы увеличили свою сумму в три раза

Часто бывает, что нужно увеличить переменную не на какую-то величину, а всего на единицу. Например, мы подсчитываем число котов, которые перебежали нам дорогу:

blackcat = blackcat + 1;  // прибавляем еще одного кота
blackcat += 1;   // укороченный вариант, который мы только что узнали
blackcat++;      // совсем короткий вариант

В последней строчке использовался оператор инкрементирования. Это унарный оператор с очень высоким приоритетом. Знак инкрементирования может идти после и перед переменной:

++blackcat;
blackcat++;

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

int total, cats;

total = 0;
cats = 0;
total = ++cats;
System.Console.WriteLine("Значение cats равно " + cats);  // равно 1
System.Console.WriteLine("Значение total равно " + total);  // равно 1

// сбрасываем в первоначальные значения
total = 0;
cats = 0;
total = cats++;
System.Console.WriteLine("Значение cats равно " + cats);   // равно 1
System.Console.WriteLine("Значение total равно " + total); // равно 0 

Когда два плюса стоят перед переменной, то переменная cats сначала увеличит свое значение на единицу, а затем присвоит свое значение переменной total.

Если два плюса стоят после переменной cats, то переменная total сначала примент значение переменной cats, а затем переменная cats увеличится на единицу. Обратите внимание, размещение плюсов указывает, когда инкрементируется переменная: cats++ означает, что cats инкрементируется после того, как ее значение будет использовано в выражении, а ++cats означает, что переменная инкрементируется перед тем, как ее значение будет использовано.

Аналогично, существует оператор декремента, уменьшающий значение переменной на единицу:

cats--;
--cats;

Удачного вам программирования!

SMS-Копилка

Хотелось бы выразить свою благодарность тем, кто откликнулся на мой призыв и пополнил sms-копилку. Взамен, я предлагаю скачать один файлик из справочника по функциям Windows API для Visual Basic 6.0. В этом справочнике содержатся несколько функций, которые позволяют работать с реестром. Обратите внимание, что ссылку на файл будет работать только одну неделю. Страница, с которой можно скачать файл, находится здесь. Вы можете также пополнить sms-копилку, чтобы поддержать сайт.


©2006 А.Климов
Русский_Проект

В избранное