Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2





НазваниеПрограмма по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2
страница9/12
Дата публикации19.02.2014
Размер1.28 Mb.
ТипДокументы
100-bal.ru > Информатика > Документы
1   ...   4   5   6   7   8   9   10   11   12

    Первый блок начинается с оператора "LDI XL,$20" с меткой "SubName", а завершается оператором безусловного перехода "RJMP", два других - начинаются с оператора "SBI" с метками "Label1" и "Label2", соответственно, а заканчиваются оператором "RET".

    Визуальное разделение таких блоков на плоскости является одним из принципов графических методов. Другим принципом является возможность графического отображения алгоритма программы. Благодаря этому, обеспечивается возможность ввода программы на плоскости в двух измерениях в виде алгоритма с древовидной структурой, с визуальным отображением направления условных и безусловных переходов. В результате - вся логическая структура как на ладони.

    На рис. 1 показано отображение вышеприведенной программы в графической среде "Algorithm Builder".


Рис. 1. Отображение программы в среде "Algorithm Builder"


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

    Графическая технология ассемблера в среде "Algorithm Builder" реализуется посредством нескольких базовых объектов, из которых выстраивается конструкция алгоритма. Среди них:

  • "Label" (метка) - отображается в виде вертикального штриха, расположенного на оси блока операторов. Метка может иметь необязательное имя, которое располагается слева или справа от штриха. Метки предназначены для подвода концов векторов переходов;

  • "Vertex" (вершина) используется в качестве начала блока, а по своему отображению и назначению аналогичен метке;

  • "Field" (поле) предназначен для записи операторов алгоритма и представляет собой отцентрированную строку в блоке;

  • "Condition" (условие) предназначен для обозначения операторов условных переходов. Конструктивно наиболее сложный. Графически представляет собой контур, располагающийся посредине блока, внутри которого вписывается текст с условием перехода и возможный вектор перехода в виде ломаной линии, исходящей от одного из краев контура, со стрелкой на конце, которая должна заканчиваться на метке или вершине. Действие интерпретируется как ветвление, если вписанное условие выполняется;

  • "JMP Vector" предназначен для представления безусловного перехода. Графически представляет собой ломаную линию, исходящую из середины блока операторов, аналогичную вектору объекта "Condition".

    Редактор среды позволяет свободно вносить на рабочее поле любые необходимые объекты, модифицировать их, вставлять и так далее. Принципы редактирования аналогичны используемым в других графических редакторах.


Рис. 2. Основное окно редактора


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


Рис. 3. Окно программиста


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


Рис. 4. Окно настройки таймеров


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


Рис. 5. Работа симулятора


    Среда "Algor ithm Builder" предна- значена для работы в операционной системе Windows 95/98.

    На рис. 6 приведен более сложный пример фрагмента программы. Слева - в классическом ассемблере, а справа - полная его копия в среде "Algor ithm Builder".


Рис. 6. Ассемблер: классика и графика


    Конечно, в рамках одной статьи невозможно достаточно подробно описать все особенности работы в графической среде.

    В ближайшее время среда "Algor ithm Builder" будет адаптирована под иные типы микропроцессорных архитектур.

    Переход к использованию такой среды труден психологически. В голове многих проскользнет мысль: "может, ассемблер и не располагает этими возможностями, но я к нему очень привык, мне и с ним хорошо". Это чем-то сродни переходу от командной (DOS) к графической оболочке (Windows). Однако, освоение этого инструмента и последующая работа с ним заметно проще классического ассемблера. Во всяком случае, те, кто его уже используют, пути назад не ищат.

Algorithm Builder fo AVR, Начинаем

http://vrtp.ru/index.php?showtopic=2211&st=0

Качаем и устанавливаем Algorithm Builder fo AVR http://algrom.net/russian.html
Внимательно читаем Manual.pdf

За основу берём ATMega8 http://www.hth.com/filelibrary/PDFFILES/ATmega8.pdf
Далее набираем алгоритм как на рисунке.

ПОМИГАЕМ КА СВЕТОДИОДОМ???

Теперь попорядку:

RESET(жирным) - отсюда идёт начало программы

Блок SP - инициализация стека

#b00000001->DDRD - настраиваем порт PD0 на выход

1->LED - записываем в PORTD единицу, т.е. устанавливаем на
выводе МК 1(вывод 2 для ATMega8)

Paus - вызываем подпрограмму

0->LED - записываем в PORTD ноль, т.е. устанавливаем на
выводе МК 0(вывод 2 для ATMega8)

Paus - опять вызываем подпрограмму

-> - далее стрелкой зацикливаем подпрограмму

Paus - имя подпрограммы

300000->Vremya - записываем в регистры с именем Vremya число 300000

Vremya-- - декремент(т.е. вычитаем из Vremya единицу)

-= - этот блок означает: если Vremya не равно 0, то переходим по стрелке, иначе вниз

RET - выход из подпрограммы


Присоединённое изображение


Переключаем с алгоритма на таблицу(или наоборот):
Жмём F12(или соответствующие пункты, или значки на панеле)
Заполняем поля как на рисунке:

Vremya - присваиваем имя регистру(ам)

2 - номер регистра

Int24 - занимаем 3-и регистра под имя Vremya(т.е. будем работать с 3-я регистрами как с одним -> СУПЕР)

Led PORTD.0 - присваиваем имя LED регистру ввода/вывода PORTD.0(т.е. порту PD0)

Далее жмём:
Опции -> Опции проекта, в появившемся окне выбираем кристал ATMega8 и ставим частоту 4000000Гц -> Применить

Программы-> Компилировать. Теперь в папке проекта появится файл с расширением .hex, которым можно прошить микроконтроллер

Присоединённое изображение


Отлаживаем:
Жмём F9(или соответствующие пункты, или значки на панеле)

Открываем окна:
Открыть -> Working registers -> Table - это окно будет показывать, что происходит в каждом
регистре(вообще изначално во всех 0)

Открыть -> Process time -> #0 - это окно будет показывать время выполнения программы

Открыть -> I/O Registers -> PortD - это окно будет показывать, что происходит на выходе PD0

Отлаживаем

Присоединённое изображение


Симулируем в Proteus:
Собираем схемку..
Мигаем светодиодом

Присоединённое изображение


Ââèäó îãðàíè÷åí-

íîãî îáúåìà æóðíàëà êîäû ïðîãðàì-

ìû çäåñü íå ïðèâîäÿòñÿ, è òå, êîìó

îíè íåîáõîäèìû, ìîãóò îáðàòèòüñÿ â

ðåäàêöèþ èëè íà ñàéò æóðíàëà (www.

compitech.ru/data/shem/01_00/#1)

www.compitech.ru

Грызем микроконтроллеры. Урок 1.

http://datagor.ru/microcontrollers/664-s-chem-edjat-jeti-kamni-ili-gryzem.html



8 декабря 2008. Разместил: Spirit




Эту статью (а точнее цикл статей…) я решил полностью посвятить микроконтроллерам фирмы Atmel. Конечно, тема эта избитая… НО! На собственном опыте знаю, что познать истину среди этого, извините, БАРДАКА, очень и очень сложно! Поэтому решил попытаться внести хотя бы какую-нибудь ясность в головы жаждущих познать этого страшного зверя, зовущегося «Микроконтроллер».

Итак, цель этой статьи в том, чтобы описать и по возможности показать весь процесс создания устройства на основе микроконтроллера с «нуля». То есть, от задумки (например, решили мы собрать новогоднюю мигалку, подобную описанной уважаемым alx32 в статье «Анатомия микроконтроллеров ATmega»…) до воплощения в железе. Разумеется, минуя все промежуточные стадии: постановка задачи, выбор МК, подбор обвязки, формулировка алгоритма, написание программы, отладка, создание платы и, самое долгожданное – запуск!!!



Обновлено: добавлены файлы.

Итак, задача: нам нужно создать устройство, способное зажигать в определенном порядке (пусть будет по очереди) , N-ное количество светодиодов (пускай будет 8 штук).
(это для начала……..)
Выберем микроконтроллер: на мой взгляд, нам очень подходит МК ATtiny2313, т.к. у него достаточное количество портов ввода-вывода (очень советую почитать о архитектуре микроконтроллеров в статье, написанной alx32,
«Анатомия микроконтроллеров ATmega»). Потом он не дорог и легкодоступен.

Теперь, ДО(!) того, как браться за написание программы для микроконтроллера, прикидываем схему в железе, чтобы потом писать программу именно под эту схему (см. выше).


Каждый выход порта микроконтроллера может отдать в нагрузку ток до 20мА, чего вполне достаточно для питания светодиода, поэтому подключаем светодиоды через токоограничительные резисторы прямо к выходам МК.
На этом с железом пока всё.

Теперь можно браться за программирование. Писать можно на чем угодно, но начинающим советую отдать предпочтение языку C, т.к. программировать проще и нагляднее. Лично я пользуюсь компилятором CodeVision AVR (он есть в файловом архиве), дальнейшие листинги программ будут приводиться именно для этого компилятора.

Определимся с алгоритмом. Нам нужно по очереди через определенный промежуток времени активировать один из выходов МК.

Включать/выключать можно разными способами:
- присваивать значения каждому выводу отдельно;
- записывать значения сразу всех выводов.


Значения (последовательность) можно получить:
- набрав все команды вручную;
- из массива;
- математическим методом.


Временной интервал можно задать:
- функциями delay (задержка);
- через таймер.


Поэкспериментируем со всеми этими способами. Но сначала нужна заготовка…

Чтобы создать заготовку программы воспользуемся генератором кода, встроенным в CVAVR. Для этого запускаем программу, нажимаем File -> New, в открывшемся окне выбираем “Project” и жмем OK. На вопрос «Воспользоваться генератором кода?» отвечаем “Yes”.
Появилось окно генератора кода. В нем выбираем тип МК и его тактовую частоту, остальное оставляем как есть:




Далее переходим на вкладку “Ports” и там в “PortB” и выставляем следующее:




Так мы определили все выводы порта B как выходы, а нолики означают, что при включении питания на них будет устанавливаться логический "0".
Остальные функции нам пока не нужны.

Жмем “File -> Generate, Save and Exit”, выбираем куда сохранить файлы проекта и видим окно с созданным генератором кодом.

Теперь давайте введем в программу наш код.
Простейший вариант реализации (хотя и самы не красивый с точки зрения программирования) – записываем значения каждого вывода, а задержки делаем через функцию delay.

delay_ms(x); - задержка на x миллисекунд

delay_us(x); - задержка на x микросекунд

PORTB - порт, с которым мы работаем.

PORTB.x - обращение к выводу x порта B

Находим в конце текста такие строки




Это бесконечный цикл (т.е.выполняется всё время, пока включено питание) нашей программы . Всё, что перед ним – команды предварительной настройки микроконтроллера. Строки, начинающиеся с “//” – комментарии, их тоже полезно иногда читать.

Вводим вместо слов “// Place your code here” следующие строки:

       PORTB.0=1;
       delay_ms(500);
       PORTB.0=0;
       PORTB.1=1;
       delay_ms(500);
       PORTB.1=0;
       PORTB.2=1;
       delay_ms(500);
       PORTB.2=0;
       PORTB.3=1;
       delay_ms(500);
       PORTB.3=0;
       PORTB.4=1;
       delay_ms(500);
       PORTB.4=0;
       PORTB.5=1;
       delay_ms(500);
       PORTB.5=0;
       PORTB.6=1;
       delay_ms(500);
       PORTB.6=0;
       PORTB.7=1;
       delay_ms(500);
       PORTB.7=0;
       delay_ms(500);

Обратите внимание – каждая строка должна заканчиваться точкой_с_запятой, иначе компилятор будет ругать вас матом.

Жмем кнопочку Make the project



(в панели инструментов).

Матерится?
И правильно! Компилятор не знает функции delay_ms(), поэтому надо указать ему файл, в котором эта функция описана.
Для этого в самом начале текста программы нужно вставить строку

#include

(тут точка_с_запятой не нужна!)
Примерно вот так:



Снова жмем волшебную кнопочку.
Проект создан.
Теперь в папке, в которую мы сохранили сам проект, появился файл название_проекта.hex – это и есть прошивка микроконтроллера!

Но подождите, не торопитесь хвататься за паяльник… Мы вед учимся программировать, а не паять!

Именно поэтому предлагаю проверить нашу программу в виртуальном режиме, а именно – в таком замечательном и любимом мною продукте от Labcenter Electronics - Proteus VSM Там можно моделировать абсолютно любые схемы (даже примитивы Лапласа есть!). Взять ее можно в прикрепленном архиве, вместе с файлами проекта. Правда версия не совсем крякнутая, поэтому не работает сохранение. Что с этим делать расскажу в отдельной статье.

Итак, запускаем ISIS (среда разработки принципиальных схем). В этом окне нажимам кнопочку “P”.



В строке “Keywords” вводим “attiny2313” и справа получаем:




Выбирать особо не из чего, поэтому щелкаем дважды по этой одинокой строке и видим слева в основном окне:




Это значит, что элемент добавлен.

Теперь введите в поле “Keywords” слова “LED-RED” и “RES”. Добавьте резистор и светодиод в проект и закройте окно выбора элементов.

Пробуем собрать схему (вывод RESET обязательно подключите к +5V, иначе ничего не заработает! и в жизни это тоже желательно!)



Вот небольшая подсказка:



А для редактирования свойств элементов достаточно щелкнуть по ним дважды.

Собрали? Надеюсь, не покалечили при этом себя, близких и окружающие предметы.

Простите за издевательство, просто если разберешься сам – уже не забудешь, так что, постигайте, программа очень мощная и она стоит того, чтобы ее освоить!

Когда схема собрана, можно прошить наш виртуальный МК. Для этого щелкаем по нему дважды и видим окно:




В поле “Program file” указываем наш файл прошивки, остальное не трогаем, пока. Жмем кнопку OK. И запускаем анимацию:



Вот и замигала наша мигающая мега-мигалка!!!

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

Попробуйте сами найти причину этой неприятной неожиданности…



В общем, продолжение следует… Будем разбираться с записью во все выводы сразу и использованием таймеров, массивов и прерываний…


Демо-версия с офсайта:
Proteus 7 Demo ( 52,3 Mb )

Кряк для протеуса:
 proteus_7.4_demo__crack.zip [925.53 Kb] (cкачиваний: 120)

Схема для ISIS:
 migalka.rar [12.19 Kb] (cкачиваний: 124)








Грызем микроконтроллеры. Урок 2.



10 декабря 2008. Разместил: Spirit




Предлагаю продолжить изучение микроконтроллеров…

Второй урок будет посвящен по большей части описанию языка C.
Очень много текста… Но ведь не все всё знают, а с чего-то надо начинать!
Тем более, что без знания основ и кое-каких хитростей программирования, сделать что-то интересное может не получиться...

Кстати, вопрос по поводу ошибки в программе предыдущей статьи остается открытым


Директивы.
Любая строчка программы, начинающаяся с символа “#”, называется директивой препроцессора (составной части компилятора).
Задача любой директивы – указать что-либо компилятору.


Директива #define
Перевод: определить, задать, описать.

Служит для задания текстовых и численных констант. Описывается ДО первого обращения к константе в программе. Удобнее всего вписывать в самое начало

Синтаксис: #define имя_константы значение_константы

“имя_константы” не должно содержать пробелов “значение_константы” – одна строка (можно с пробелами).

При компиляции все слова “имя_константы” будут заменяться на “значение_константы”

Например, один из выводов микропроцессора используется для подключения кнопки. Пусть это будет PORTD.0. Не очень удобно писать это везде, где мы обращаемся к этой кнопке… Поэтому определим ее как “BUT”:

#define BUT PORTD.0


Теперь и программа становится нагляднее и запутаться сложнее. А самое главное, если мы захотим подключить кнопку к другому выводу, нам достаточно будет изменить только эту строчку, не трогая самой программы. На мой взгляд – ОООчень удобно!

Так же, можно заменить даже целые функции. Например:

#define LED_ON PORTD.0=1


Или

#define LED PORTD.0
#define LED_ON LED=1


А можно и так:

#define udvoenie(x) x+x


Или даже так:

#define LED PORTD.0
#define miganie(x) for(i=0;i

Мигнуть светодиодом x раз. Теперь не надо каждый раз писать код для мигания, а можно просто написать miganie(10)…


Директива #include

Дословно переводится как «включить» и служит для включения в программу какого-либо файла. При компиляции содержимое этого файла вставляется туда, где написана директива.

Например, CodeVision автоматически генерирует строку “#include ”, чем добавляет его содержимое в самое начало программы. В этом файле содержаться описания портов ввода-вывода и служебных регистров микроконтроллера Attiny2313, нужные для того, чтобы компилятор правильно обработал код нашей программы, а так же, чтобы мы могли использовать более понятные определения, например PORTA, PORTB и т.д. Кстати, они тоже описаны директивой #define и ссылаются на аппаратные адреса регистров МК.

Эту директиву тоже очень удобно использовать при написании программ. Например, можем сделать так…
В цикл нашей программы впишем

#include “programma.c”



а саму программу напишем в файле programma.c, который надо сохранить в ту же папку, в которой находится весь проект.

Или можно включить в начало программы стандартные библиотеки функций:
delay.h – функции временных задержек
math.h – математические функции (корни, логарифмы и т.п.)

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

Обратите внимание, имена стандартных библиотек нужно указывать в треугольных скобках, а файлов, находящихся в папке проекта – в кавычках!

Остальные директивы нам особо не нужны, поэтому на них останавливаться не буду.


Переменные.
определение         |        длинна(в битах)  |  диапазон значений

bit (бит)                                        1                           0 , 1
char (символ)                             8    от 0 до 255
unsigned char                             8    от 0 до 255
signed char (символ)                         8    от -128 до 127
int (целое)                               16    от -32768 до 32767
unsigned int                               16    от 0 до 65535
long int                                        32    от -2147483648 до 2147483647
unsigned long int                        32    от 0 до 4294967295
float (с плавающей точкой)    32    ±1.175e-38 до ±3.402e38


Как можно заметить, префикс unsigned означает, что переменная должна быть без знака (т.е., больше нуля), а signed – наоборот. Беззнаковые переменные МК обрабатывает быстрее. Какой тип переменной использовать – это решать вам. Всё зависит от того, какие данные вы собираетесь там хранить. Чем меньше длинна переменной, тем быстрее ее обрабатывает МК. Это стоит учитывать, если в программе важна скорость. А переменную char можно использовать не только для хранения символов. Этот тип так назван в основном потому, что язык C изначально писался для 16-и битных процессоров, поэтому основным типом там был int, а char использовался для хранения текстовых переменных, т.к. в таблице ASCII каждому символу соответствует всего 8 бит, хотя и может использоваться как простая численная переменная. По умолчанию в CVAvr этот тип unsigned . А так как наша архитектура 8-и битная, предпочтительнее использовать именно тип char,если не нужны значения больше 255.

Описание переменных производится так:

char a;
int b=3;
float c, d, pi=3.14;

Переменные бывают глобальные (могут использоваться в любом месте программы) и локальные (доступны только для функции, в которой описаны).

Глобальные переменные должны быть описаны вначале программы до самой первой функции.
А локальные – в самом начале функции.

Значения переменным можно присваивать двоичные, десятичные или шестнадцатичные.
По умолчанию, если написать число, например 33 , оно считается деятичным.
Если нужно указать его как шестнадцатичное, то перед ним нужно поставить “0x”, т.е., 0x33 – это уже 51, если перевести в десятичную систему. А двоичные определяются так: 0b00110011.


Следующий этап – функция.

Функции могут получать какие-то переменные, а могут и не получать…
Могут возвращать какое-то значение, а могут и не возвращать :)
Всё зависит только от того, что мы хотим этой функцией делать.

Но в любом случае, объявление функции начинается с определения ее типа:

char func()
int func()


и так далее

а вот если функция ничего не возвращает, то она объявляется как void

void func()

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

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

void  func(char a, int b, float c)


Описывается сама функция в фигурных скобках. А вычисленные значения возвращаются оператором return:

int summa(char a, char b)
{
return a+b;
}


или вот так:

int srednee(char a, char b, char c)
{
int srednee;
srednee=(a+b+c)/3;
return srednee;
}

Для функции void оператор return можно не писать, тогда выполнение функции закончится после последней строки, или, если нужно выйти раньше – просто написать return (без параметров)

void (char x)
{
if(x > 20) return;
LED=1;
}


Если x меньше или равен 20 – включаем светодиод, а если больше – просто выходим из функции.


Операторы

Операторы побитового сдвига (“<< “ и “>>”)
Любая переменная – это некоторая последовательность бит.
Например, число 1 в переменной char – 00000001
А эти операторы, как уже понятно из названия, сдвигают эти биты.
Сдвиг влево:

char a=1, b;
b=a<<1; // в b запишется 0b00000010
b=a<<7; // в b запишется 0b10000000


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

Побитовое И (“&&”)
Если в одном и том же бите у двух операндов “1”, то и результат “1”, а если хоть один “0”, то результат “0”

char a=0b00100010;
char b=0b10101010, c;
c=a&&b; // результат – 0b00100010

Побитовое ИЛИ (“||”)
В результате “1” будет там, где хотя бы у одного операнда есть “1”, и “0” там, где у обоих “0”

char a=0b00100010;
char b=0b10101010, c;
c=a||b; // результат – 0b10101010
ИСКЛЮЧАЮЩЕЕ-ИЛИ (“^”)
В результате “1” будет там, где значения битов не равны, а “0” там, где равны

char a=0b00100010;
char b=0b10101010, c;
c=a^b; // результат – 0b10001000

Инверсия (“~”)
Там, где было “0”, становится “1” и наоборот

char a=0b01010101, b;
b=~a; // результат – 0b10101010

Увеличение или уменьшение на единицу (“++”, “--“)

int i=0, j=5;
i++; // к значению i прибавили 1 и записали обратно а i, т.е., i теперь равно единице.
j--; // о значения j отняли 1 и записали обратно а j, т.е., j теперь равно четырем.

Логические операции

Результатом любой логической операции может быть “0” (ложь) или “1” (истина). А если в условие подставить просто переменную, то при любом значении этой переменной, отличном от нуля, результат будет истина.

Думаю, операторы “”, “=”, будут понятны всем.
А вот равенство проверяется двойным знаком равно “==”, если поставить одно равно, то это уже будет присвоение и программа будет работать неправильно!
Отрицание “!” – ставится перед логической операцией и инвертирует ее результат, т.е., если результатистина, то !результатложь
например, если

char a=2, b=2;
aa<=b - истина
a!=b - ложь
a==b - истина
!(a==b) - ложь


и т.д.


Применение логических операций.
В основном, это оператор

if()

, параметром для которого и является наша логическая операция.

if(a==b) команда_если_значение_истина;
else команда_если_значение_ложь;


если при ложном значении никакие действия не нужны, то else можно не писать.

А еще, группы команд можно объединять в блоки фигурными скобками

if(a!=b)
{
// много команд
}


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

Фуф……. Что-то получилось очень даже много :) Надеюсь, хоть кто-то осилит, а главное, поймет


1   ...   4   5   6   7   8   9   10   11   12

Похожие:

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Проектно-образовательная деятельность по формированию у детей навыков безопасного поведения на улицах и дорогах города
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Цель: Создание условий для формирования у школьников устойчивых навыков безопасного поведения на улицах и дорогах
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
«Организация воспитательно- образовательного процесса по формированию и развитию у дошкольников умений и навыков безопасного поведения...
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Цель: формировать у учащихся устойчивые навыки безопасного поведения на улицах и дорогах, способствующие сокращению количества дорожно-...
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Конечно, главная роль в привитии навыков безопасного поведения на проезжей части отводится родителям. Но я считаю, что процесс воспитания...
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Поэтому очень важно воспитывать у детей чувство дисциплинированности и организованности, чтобы соблюдение правил безопасного поведения...
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Всероссийский конкур сочинений «Пусть помнит мир спасённый» (проводит газета «Добрая дорога детства»)
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Поэтому очень важно воспиты­вать у детей чувство дисциплинированности, добиваться, чтобы соблюдение правил безопасного поведения...
Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...



Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск