« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга


ПнВтСрЧтПтСбВс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
    Популярное
Использование Microsoft Agent в Delphi.Часть 1 Введение

Глава 3. Работа с таблицей.

"Мы делали IE8 с книгой стандартов в руках"

Свойства и методы документа(объект XML Document)

Функция AccessResource

Производные Классы

Размещение полей таблиц и надписей к ним с использованием построителя формы

Работа с таймером на Win API

Перспективы Microsoft Silverlight

Программирование устройств на Java




    Архив файлов



    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 85
Пользователей: 0

Статьи:: C# C Sharp) :: Документация :: А что если..? (операторы if...else в C#)



отправить ссылку другу версия для печати  Обсудить на форуме

А что если..? (операторы if...else в C#)

До сих пор наши программы были линейными. То есть, они делали одно и то же. Единственное разнообразие было лишь тогда, когда пользователь неправильно вводил данные, и программа выдавала ошибку! А что, если мы хотим сделать программу, которая будет реагировать на то или иное обстоятельство? А что, если программа даже будет принимать решения, в зависимости от ввода пользователя? Действительно, " А что, если?"... Рассмотрим оператор "if" во всем его величестве:



Console.Write("Введите свой возраст: ");
int age = Convert.ToInt32( Console.ReadLine() );

if( age == 16 )
{
  Console.WriteLine("В этом возрасте уже можно водить машину!");
}
  Первые две строки должны быть уже знакомы... мы спрашиваем пользователя его возраст. Следующие 4 строки "составляют" наш оператор. На первой линии, где "if" действительно упомянут, мы пишем наши логические выражения. Если перевести на русский, там написано: "если возраст пользователя 16, то выполнить код между символам "{" и "}"". То есть, если пользователь введет 16 как свой возраст, то получит это сообщение. В любом другом случае, код в "if" операторе будет пропущен.
  Конечно, == не единственное сравнение, которое мы можем использовать. Вот более полный список:
== (равен)
< (меньше чем)
> (больше чем)
!= (не равен)
<= (меньше или равен)
>= (больше или равен)
  Нужно быть осторожным и не спутать = с ==. Обычное = используется для присвоения значений и, практически, не имеет никакого отношения к "if" оператору. == используется для проверки абсолютного равенства. Еще надо опасаться использования == на типах double и decimal, т.к. редко когда бывает, что их значение совпадает с искомым.
  Кстати о различиях, надо запомнить, что "age < 17" и "age <= 16" абсолютно одно и то же. Первое означает "любое число меньше 17", а второе "любое число меньшее или равное 16", а результат этих логических выражений одинаков(оба верны для чисел меньше 17).
  Все выражения, которые можно вписать в утверждение оператора "if" сводятся к булевому типу - то есть эти выражения либо верны (true) либо неверны (false). Для этого в С# есть специальный тип данных - "bool"(булевой тип). Познакомимся поближе:
bool userAgeIs16 = age == 16;
if( userAgeIs16 )
{
  Console.WriteLine("В этом возрасте уже можно водить машину!");
}
  Этот код делает то же самое, что и в первом примере, только на этот раз мы передали значени "true/false" через булевую переменную. Надо заметить, что большинство начинающих программистов "зависают" на знаках равенства в "if" операторе. Они настолько привыкают видеть вещи типа "age == 16" в условиях, что для них просто неприемлемо, да и непонятно, видеть там булевую переменную. Не надо думать, что необходимо постоянно создавать лишние переменные, просто это показывает, что все эти "==" и цифры, и вообще, выражения в "if" операторе сводятся к одному булевому "верно-неверно"...
  А что, если мы хотим, чтобы "if" проверяло сразу несколько вещей? Например, возраст и IQ? Тогда делаем так:
Console.Write("Введите свой возраст: ");
int age = Convert.ToInt32( Console.ReadLine() );
Console.Write("Введите свой IQ: ");
int iq = Convert.ToInt32( Console.ReadLine() );

if( age >= 16 && iq > 75 )
{
  Console.WriteLine("С таким умом и в таком возрасте можно водить машину!");
}
  "&&" , которое означает "И", позволяет нашему условию быть более конкретным. Теперь мы получим сообщение, если будут введен возраст больше или равный 16 И IQ больший или равный 75. Если хотя бы одно из выражений неверно, все условие автоматом считается неверным и код из тела "if" будет пропущен.
  В противоположность "&&", "||" означает "ИЛИ". В выражении с "ИЛИ", если хотя бы одно из условий верно, все выражение считается верным. Все как и в русском. Если бы я сказал "чтобы купить водку, надо быть старше 18, или попросить дядю Вову из соседнего подъезда". Сразу понятно, что для покупки водки надо быть совершеннолетним ИЛИ попросить дядю Вову. Не надо просить соседа И быть совершеннолетним одновременно. Нужно только ОДНО из этих условий. Мдя, нехороший был пример... Зато все понятно, не так ли?
  Можно и поэкспериментировать, использовать все вперемешку. Например, следующее выражение (хотя и достаточно сложное) абсолютно разрешимо:
if( (age != 5 && age < 50) || (age > 60 && iq > 90) )
  Условие верно, если возраст меньше 50 и не равен 5, ИЛИ если он больше 60 и IQ выше 90. Это, конечно сложно, но зато прямолинейно. В любом выражении, как это && будет выполняться раньше ||. Несмотря на это, мы можем заставить С# сначала выполнять содержимое скобок. А еще можно вставлять скобки для улучшения читаемости кода.
  Ну что ж , продолжаем. Стоит заметить, что в тело "if" можно вписывать сколько угодно строк кода. Можно даже объявлять новые переменные...
if( age > 15 )
{
  Console.Write("А теперь введите имя: ");
  string name = Console.ReadLine();
  Console.WriteLine(name + ", ты можешь водить машину!");
}
  Нужно заметить, что все переменные, объявленные внутри "if" оператора, существуют только в нем. Если мы попытаемся использовать переменную вне фигурных скобок, "{}" оператора "if", то программа не заработает - переменная находится "out of scope", т.е. фактически "вне досягаемости". А что если нам надо вызвать переменную после "if"? В этом случае просто объявляем ее до него, вот так...
string name = "";
if( age > 15 )
{
  Console.Write("А теперь введите имя: ");
  name = Console.ReadLine();
  Console.WriteLine(name + ", ты можешь водить машину!");
}
…вот и все. Мы поговорим о границах видимости переменных позже, при рассмотрении функций, а пока надо запомнить: если надо, чтобы у нас был доступ к переменной по всей программе, не надо объявлять переменные внутри "if" оператора. Кстати, если после оператора условия мы планируем только одну строку кода, то можно "{}" опустить... Можно просто...:
if( age > 15 )
  Console.WriteLine("Это тоже работает!");
  Надо запомнить,что при пренебрежении "{}" только строка следующая непосредственно после "if" считается частью условия. Ну, а сейчас ситуация немного усложнится...
if( age > 15 )
{
  Console.WriteLine("Можно водить машину.");
}
else
{
  Console.WriteLine("Мал еще!");
}
  Мы не только говорим программе, что делать при определенных условиях, но и что же делать, если эти условия не встречаются! Дополнительный блок "else" в "if" операторе пишется в конце и работает так же. Основное различие в том, что мы не передали условное выражение, потому что "else" "ловит" все те условия, которые не соответствуют основному(которое в "if"). А что если нам необходимо иметь несколько определенных путей развития? Можно сделать так:
if( age == 16 )
{
  Console.WriteLine("Можно водить машину.");
}
else if( age > 15 )
{
  Console.WriteLine("Едва ли может водить!");
}
else
{
  Console.WriteLine("Мал еще!");
}
Можно добавлять сколько угодно "else if" блоков к "if" оператору, чтобы предусмотреть различные ситуации. Как "else if", так и "else" блок является необязательным для "if" оператора; как бы то ни было, если "else" все же используется, он должен быть в самом конце. Еще надо заметить и объяснить почему мы написали условие age > 15 в блоке "else if". Дело в том, что в любой if/else if/else структуре, С# выполняет только первое попавшееся совпадение. Значит, если age >15 стоял бы в начале, и пользователь вписал бы 16 как свой возраст, age >15 было бы первым встречным совпадением. Выполнится "Можно водить машину." код, вместо более конкретного "Едва ли может водить!", т.е. вместо того, который нам нужен. Нужно быть осторожным при написании условий, приходится следить за тем, чтобы первые выражения не "крали" условия у других.
  Ну чтож, мы изрядно потрудились, но еще не все кончено! Прежде чем продолжить, рассмотрим пример кода...
using System;

namespace A_If
{
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            // Запрашиваем возраст
            Console.Write("Введите свой возраст: ");
            int age = Convert.ToInt32(Console.ReadLine());

            // Простой if/else if/else
            if (age == 16)
            {
                Console.WriteLine("В этом возрасте уже можно водить машину!");
            }
            else if (age < 16)
            {
                Console.WriteLine("Слишко мал для вождения!");
            }
            else if (age > 16 && age < 150)
            {
                Console.WriteLine("Уже можно было бы и получить права!");
            }
            else
            {
                Console.WriteLine("Ну да, конечно...");
            }

            // Одностроковый if оператор
            if (age < 0)
                Console.WriteLine("Минуточку, возраст не может быть отрицательным!");

            // Булевые переменные - то "горючее", на котором "работают" if операторы
            bool oldEnough = age >= 18;
            if (oldEnough)
                Console.WriteLine(Environment.NewLine + "Можно голосовать на выборах.");
            else
                Console.WriteLine(Environment.NewLine + "Слишком молод для голосования.");

            // "or" логика
            Console.Write(Environment.NewLine + "Введите число делимое либо на 4, ЛИБО на 5: ");
            int num = Convert.ToInt32(Console.ReadLine());
            if ((num % 4 == 0) || (num % 5 == 0))
                Console.WriteLine("Правильно.");
            else
                Console.WriteLine("Неправильно.");

            // "and" логика
            Console.Write(Environment.NewLine + "Введите число, делимое на 4 И на 5: ");
            num = Convert.ToInt32(Console.ReadLine());
            if ((num % 4 == 0) && (num % 5 == 0))
                Console.WriteLine("Правильно.");
            else
                Console.WriteLine("Неправильно.");

            // Ждем выхода...
            Console.Write(Environment.NewLine + "Программа завершена. Нажмите "Enter" для выхода...");
            Console.ReadLine();
        }
    }
}


Автор: Макагон Сергей
Источник: http://devoid.com.ua




Рубрика: Документация




Вышел MySQL 5.1.30, первый стабильный рели....

MySQL

После публикации 29 тестовых версий анонсирован первый стабильный релиз MySQL 5.1, пригодный для промышленной эксплуатации и обеспечивающий увеличение производительности для "тяжелых" SQL запросов, по сравнению с MySQL 5.0, примерно на 15-20%. Главные новшества появившиеся в MySQL 5.1:


Подробнее... | Рубрика: MySQL | Добавлено: 28.11.2008

Тестирование параллельных программ.

Тестирование

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


Подробнее... | Рубрика: Тестирование | Добавлено: 28.11.2008

Архитектура AMD64 (EM64T).

Архитектура AMD

Аннотация. В статье кратко рассматривается архитектура AMD64 компании AMD и ее реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности, достоинства и недостатки.


Подробнее... | Рубрика: Архитектура AMD | Добавлено: 27.11.2008

Остальные статьи:

Платформа 2009. Определяя будущее
Windows Vista Bridge Sample Library - упра...
Оптимизация 64-битных программ
Подгрузка через AJAX HTML-кода, содержащег...
Обзор нового релиза самой мощной Ajax библ...
Firebug 1.3 и 1.4 alpha — что нового и инт...
Релиз Microsoft Silverlight 2.0. Что новог...
XML документация в C#
Курсоры в MySQL 5
Microsoft опубликовала подробности о сесси...
Microsoft делится подробностями о том, что...
Тестируем новый javascript от нового брауз...
MySQL Query Cache
Использование провайдеров компиляции в As...
Чего мы ждем от C# 4.0
Delphi 2009 и C++Builder 2009
Джоэл Спольски и Джеф Этвуд запустили новы...
Поиск кода Google /* что нового? */
10 jQuery скриптов для улучшения интерфейс...
Генераторы отчетов FastReport 4 и QuickRep...


Цитата дня (все,добавить):

Портал фрилансеров

работа на дому


    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование


Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия