-Музыка

 -Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в xpackpackax

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 09.01.2009
Записей:
Комментариев:
Написано: 1835





Потерпевший признался в оговоре осужденного мэра Тамбова

Воскресенье, 09 Августа 2009 г. 14:49 + в цитатник
Потерпевший по делу осужденного на девять с половиной лет бывшего мэра Тамбова Максима Косенкова добровольно явился в прокуратуру и заявил, что оговорил подсудимого, сообщает "Интерфакс".

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

Прокурор Оксана Галкина сообщила агентству, что изложенные в заявлении доводы будут проверены и "получат надлежащую оценку". В прокуратуре уточнили, что если информация об оговоре подтвердится, Бабию грозит до пяти лет лишения свободы за лжесвидетельство.

Отбывающий срок в одной из мордовских колоний Косенков был задержан 16 апреля 2008 года в Москве. Его обвинили в похищении неработающего гражданина Украины Виталия Бабия, 1988 года рождения.

18 апреля Симоновский суд санкционировал арест Косенкова и его водителя Виталия Сычева. Третьим подозреваемым по делу был также задержанный неработающий житель Твери Максим Миронов.

Косенкова обвинили в том, что он вместе с сообщниками похитил в Москве, перевез в Тамбов и там насильно удерживал гражданина Украины Виталия Бабия. 19 января Нагатинский суд Москвы приговорил Косенкова к девяти с половиной годам лишения свободы в колонии строгого режима.

На суде Косенков своей вины не признал, он также опровергал версию об интимной связи с потерпевшим. Более того, адвокаты бывшего мэра Тамбова заявили, что Бабий, которого Косенков взял на работу "присматривать за домашними животными" в феврале 2008 года исчез, "прихватив из дома Косенкова 100 тысяч рублей и золотой слиток".

Двое других подсудимых также были признаны виновными в похищении человека. Сычева приговорили к 10 годам лишения свободы в колонии особого режима, а Миронова - к семи годами и семи месяцам в колонии строгого режима.


**
dane4ka.ru – обычный блог обо всем на свете в лучших традициях рунета ;)
Cкандалы, слухи, расследования.



Процитировано 1 раз

Обои

Воскресенье, 09 Августа 2009 г. 14:45 + в цитатник
Обои не просто так делают с разными узорчиками, орнаментами и т.п. Всё это сделано с одной целью - чтобы каждый день при взгляде на стену у человека поднималось настроение. Но, к сожалению, менять их часто не получается. И, к счастью, обои рабочего стола компьютера меняются за считанные клики мышкой, то есть всего за несколько секунд. Таким образом мы можем менять "главную картинку компьютера" по много раз на день в зависимости от настроения. Единственное, что может помешать, это маленький запас этих самых картинок, и вот тогда на помощь приходит http://top-desktop.ru/!
Огромный выбор обоев на одном сайте. Каталог разделен на несколько групп по сюжетам обоев, что делает поиск подходящей картинки очень удобным. Пополните свою коллекцию прямо сейчас!
обои для рабочего стола

Значеиние имени

Воскресенье, 09 Августа 2009 г. 14:35 + в цитатник
Чтобы узнать историю своего имени или своей фамилии теперь не обязательно сидеть в библиотеках и расспрашивать своих бабушек. Теперь в интернете есть специальный сервис, который раскроет вам все тайны вашего имени. Теперь вы можете создать семейную летопись или построить древо. Можно объединять деревья и находить своих родственников!
Начните с малого - узнайте происхождение фамилии своей семьи, это уже откроет для вас много нового.
Посетите http://www.genway.ru/lib/ прямо сейчас и поделитесь впечатлениями с друзьями прямо сейчас!

Мебель

Воскресенье, 09 Августа 2009 г. 14:02 + в цитатник
Современный интернет магазин http://www.internetmagazin-mebel.ru/ для современных квартир и офисов.
Благодаря новым технологиям легко манипулировать даже самыми большими мебельными конструкциями, в связи с этим можно использовать пространство помещения наиболее рационально. Для изготовления используется только экологически чистые материалы.
Огромный выбор гостиных модулей, мебели для спален, детских комнат и т.д.
Ознакомьтесь и каталогами магазина прямо сейчас!

Зароботок

Воскресенье, 09 Августа 2009 г. 13:46 + в цитатник
Многие осуждают блоггеров за размещение рекламы на своих страничках. Сколько людей, столько и мнений, это понятно. Я, например, не вижу здесь ничего грешного. Если у тебя есть хороший сайт или блог, абсолютно нормально пользоваться этим. Для себя я могу сравнить это с музыкой: если хорошая группа делает по-настоящему стоящие песни, но не записывает их, это, в первую очередь, неуважение к своему собственному творчеству. Так же должна работать и интернет собственность, я думаю. Зачем отвергать неплохой заработок так ещё и ругаться на людей за это?
Для тех, кто интересуется таким видом заработка, существует грамотная статья "Как заработать 18000 долларов в месяц с помощью сайта или блога". В отличии от тысяч статей, где вам обещают моментальную баснословную прибыль, в этой статье всё логично и последовательно. Читайте, думайте, делайте выводы для себя.
http://homebiz.ru/

Тольятти 6 августа

Пятница, 07 Августа 2009 г. 16:36 + в цитатник
Работники крупнейшего российского автопроизводителя ОАО "АвтоВАЗ" в четверг выйдут на митинг в Тольятти, организованный независимым профсоюзом "Единство", протестуя против остановки конвейера в августе и сокращения рабочей недели с сентября, сообщил РИА Новости руководитель профсоюза Петр Золотарев.

"Поводом для митинга послужили последние решения руководства "АвтоВАЗа" об остановке конвейера и еще большем сокращении рабочей недели в сентябре. Цель митинга - выразить мнение тольяттинцев о последствиях этих решений", - сказал Золотарев.

Правление ОАО "АвтоВАЗ" 22 июля приняло решение об остановке конвейера на заводе на весь август. Причиной стало снижение потребительского спроса на "вазовские" автомобили и нестабильная социальная обстановка на предприятии. С сентября на "АвтоВАЗе" планируется введение сокращенной рабочей недели. Такие меры вызвали общественный резонанс в Тольятти и, по оценке экспертов, усилили социальную напряженность в городе и на местном рынке труда. Независимый профсоюз "АвтоВАЗа" "Единство" подал заявку в мэрию Тольятти о проведении 6 августа митинга. Администрация разрешила проведение мероприятия.

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

Представители правоохранительных органов Самарской области заявили, что при соблюдении порядка и требований ФЗ-54 (закона "О собраниях, митингах, демонстрациях, шествиях и пикетированиях") "никто не собирается ограничивать участников акции и тем более пресекать силовым методом".

По данным Ассоциации европейского бизнеса, продажи автомобилей "АвтоВАЗа" за пять месяцев 2009 года сократились на 45% по сравнению с аналогичным периодом 2008 года - до 151,02 тысячи машин.

ОАО "АвтоВАЗ" - одно из крупнейших предприятий автомобильной отрасли Восточной Европы, его производственные мощности позволяют выпускать свыше 800 тысяч автомобилей в год. С 1970 по 2009 годы предприятие изготовило более 25 миллионов автомобилей Lada и автокомплектов. В настоящее время продукцией "АвтоВАЗа" являются автомобили массового производства в ценовом диапазоне от 150 тысяч до 350 тысяч рублей. На конвейерах "АвтоВАЗа" выпускается 15 моделей пяти основных семейств Lada.

Дизайн

Пятница, 07 Августа 2009 г. 16:07 + в цитатник
Занимайтесь своими делами, а дизайн упаковки пусть разработает опытная компания, чья деятельность с этим и тому подобным связана. Результат работы будет не просто упаковка, а качественная, запоминающаяся упаковка, которая будет вызывать у потребителя наилучшие эмоции. Хорошее знание рынка - важный инструмент компании.
Посетите http://solutions.almacor.ru/ для более подробного ознакомления с деятельностью компании.

Топас

Пятница, 07 Августа 2009 г. 15:57 + в цитатник
Локальная канализация устанавливается в местах, где существует необходимость очистить бытовые стоки, и нет центральной канализации. Топас - принципиально новое устройство, которое в отличие от септиков очищает сточные воды на 99% и исключает шанс попадания нечистот в грунт. Работает система практически бесшумно. Существует несколько модификаций, что позволяет подобрать нужный вариант в определенных условиях, это значит, что можно использовать топас как на даче, так и в гостиничном комплексе. Система легко монтируется в любой вид грунта и благодаря устройству корпуса вы можете не беспокоится за жизнь работающих внутри аэробных бактерий даже в лютые морозы!

Сумки для ноутбуков

Пятница, 07 Августа 2009 г. 15:40 + в цитатник
Сумки для ноутбуков! Большие и маленькие, монотонные и разноцветные - ассортимент впечатляет! В этом интернет магазине можно рассмотреть понравившуюся модель почти как на полке реального магазина, тому способствует детальное описание изделия. На сайте можно рассматривать товар только определенного цвета или бренда благодаря удобной системе поиска. Действуют несколько способов оплаты и доставки!

Выборы..

Четверг, 06 Августа 2009 г. 20:21 + в цитатник
Сегодня мы говорим об операторе выбора. Оператор выбора позволяет выбрать одно из нескольких возможных продолжений программы. Параметром по которому осуществляется выбор служит так называем ключ выбора, который может быть любого типа. Структура оператора выбора выглядит несколько страшно :):
case ключ_выбора of список_выбора else операторы end;

Список выбора при этом состоит из нескольких конструкций вида выбор : оператор; Давайте рассмотрим такой пример (он правда не очень актуален, но....) : пользователю нужно ввести число (у нас оно будет хранится в переменной day), а мы выведем по нему день недели:

case day of
1 : writeLn ('Понедельник');
2 : writeLn ('Вторник');
3 : writeLn ('Среда');
else
writeLn ('Какой-то другой день.');
end;

Итак ключ выбора - это у нас day. Для него мы составляем список выбора - список возможных значений и что мы будем делать при этих значениях. Так если day = 1, то мы выведем Понедельник, если 2 - Вторник и т.д. Часть, которая начинается с else может отсутствовать - она схожа с частью оператора if-then-else. Поэтому она выполняется, если ключ выбора не удовлетворяет ни одному условию из списка. У нас она выполнится, если day не равен 1, 2 или 3, например при day=0 или day=4.

О том, что никогда не меняется - константы! Константы - это переменные, которые не могут изменять своего значения (или переменные - это константы, которые его меняют :) Так вот константы - это очень важная часть программы, для их описания выделена целая сексия. Константы имеют имя и значение. Секция констант начинается со слова const. Эта секция обычно распологается перед секцией переменных. Теперь шаблон у нас превращается в нечто более сложное:
Program ИмяПрограммы;
uses список подключаемых модулей;
const
Здесь идёт объявление констант.
var
Здесь идёт объявление переменных.
begin
Здесь идёт текст программы.
end.

Объявить константу можно следующим образом: ИМЯ_КОНСТАНТЫ = ЗНАЧЕНИЕ; Обратите внимание, что мы пишем просто равно, без двоеточия! Например напишем программу, которая считает число П/2 (П = 3.14259265)
Program PI_DEL_TWO;
const
pi = 3.14159265;
var
pid2 : real;
begin
pid2 := pi / 2
end.
Константы могут быть не только числовые, но и текстовые. Например
const
Text = 'Hello, World!';
begin
writeLn (Text)
end.

- ещё одна вариация на тему hello world! Зачем нужны константы, ведь вполне можно использовать численные значения ? Константы нужны для удобства! При компиляции они автоматически заменяются своими значениями. Но например, если это число нужно изменить ? (число П не изменишь, но например стоимость товара или ширина шкафа) Тогда просто меняете значение константы, номер версии программы на 1.01 и получаете совершенно новый продукт :)
Программа

Давайте сегодня напишем маленькую ходилку - нажимая на клавиши будем двигать курсор по экрану. Управление выберем самое примитивное.... нет не стрелки :) ... они как не странно несколько сложнее, а буквы w, a, s, d. Выход из программы будем осуществлять по клавише ESC. Для передвижения курсора нам понадобится функция gotoxy (X, Y) - передвижение курсора на координаты X,Y. При этом левому верхнему углу экрана соответсивуют координаты (1,1) а правому нижнему (80, 25). Это функция из модуля CRT.
Program CURSOR;

uses CRT;

const
LEFT = 'a';
RIGHT = 'd';
UP = 'w';
DOWN = 's';
ESC = 27;

var
x, y : integer;
key : char;

begin
ClrScr;

key := #0;
x := 1;
y := 1;

while key <> chr (ESC) do
begin
key := readkey;

case key of
LEFT : begin
if (x - 1) >= 1 then
x := x - 1
else
x := 80
end;
RIGHT : begin
if (x + 1) <= 80 then
x := x + 1
else
x := 1
end;
UP : begin
if (y - 1) >= 1 then
y := y - 1
else
y := 25
end;
DOWN : begin
if (y + 1) <= 25 then
y := y + 1
else
y := 1
end
end;

gotoxy (x, y)
end
end.

Что сразу бросатеся в глаза ? Наверное key := #0; - что это за #0 ? Значек диез "#" означает, что это не число, а символ! Существует так называемая таблица символов, каждый символ имеет в ней свой номер. Например весёлая рожица - #1, цифра 0 - #48, буква Ъ - #154, буква ъ - #234. Заглавные и строчные буквы имеют разные номера. Символы можно выводить с помощью функции write, например write (#1, #32, #2) - посмотрите, что выйдет (#32 - символ пробела). Вот мы и присваиваем переменной key символ под номером 0! key - переменная типа char (анг. символ). Переменные типа char имеют размер в 1 байт и принемают значения от 0 до 255. В переменных x и y - у нас хранятся координаты. В начале мы присваем им значения 1,1 - т.к. после выполнения Clrscr курсор перемещается в эту точку. Цикл while у нас идёт с условием key <> chr (ESC). Функция chr (X) преобразует целое число к символу. Константа ESC имеет значение 27 - код клавиши ESC, однако мы помним, что Паскаль - строго типизированный язык, поэтому мы должны преобразовать целое число 27 к символу 27! key := readkey; - функция readkey считывает символ с клавиатуры, не выводя его на экран и возращает его. Теперь вырисовывается алгоритм :) программы - считываем клавишу с клавиатуры, проверяем его на совпадение с функциональными клавишами. Цикл выполняется, пока мы не нажмём клавишу ESC. Эта программа представляет собой упрощение алгоритма лежашее в основе многих игрушек.



Процитировано 1 раз

Зацикливаемся.

Четверг, 06 Августа 2009 г. 20:18 + в цитатник
Сегодня мы поговорим о циклах. Что это такое? Давайте представим, что вам необходимо вывести на экран слово ПРИВЕТ! двадцать раз. Писать: writeLn ('ПРИВЕТ'); 20 раз !!! А если нужно сто раз? А если заранее неизвестное число раз?? Как быть? Вот тут и нужны циклы.
Цикл - кусок кода, который повторяется определённое число раз (бесконость - это тоже определённое число раз!).
Цикл FOR

Этот цикл наиболее часто используется в программах ввиду его чрезвычайной удобности. Итак знакомтесь, цикл for!
Давайте рассмотрим его использованние на примере с выводом слова привет на экран. Да давайте оговоримся, что будем опускать стандартные куски программы типа Program, var, begin, end. И ещё одно соглашение об именах переменных: обычно именами i и j дают переменным целого типа и их объявление мы тоже будем опускать. Итак пример:
for i := 1 to 20 do
writeLn ('Привет!');

Цикл записывается так for переменная_цикла := начальное_значение to конечное_значение do операторы; В нашем примере мы взяли в качестве переменной цикла взята переменная i, начальное значение 1, конечное - 20. Что это значит? А это значит, что цикл будет выполняться для i = 1, 2, 3, 4, 5 ... 19, 20. Т.е. 20 раз. Каждый раз мы прибавляем к i еденицу. При этом начальное и конечное значение переменной цикла может задаваться численным выражением (например for i := 1 to 3*65 do ....) или выражением с переменной (например for i := X + Y to X * Y / Z + 45 *j do ....). При этом эти значения вычисляются компилятором один раз перед выполнением цикла. Например, результат такой программы:
Program Test;

var
i : integer;
x : integer;
begin
x := 10;
for i := 0 to х do
begin
writeLn (i, ' ', x);
x := x + 2
end
end.
Будет таким :
0 10
1 12
2 14
3 16
4 18
5 20
6 22
7 24
8 26
9 28
10 30

Как видите предел i не поменялся, хотя х мы меняем! Использую цикл for нужно соблюдать следующее правило: не нужно менять переменную цикла (т.е. ту переменную, по которой идёт цикл, у нас это была i) внутри него.
Есть ещё один альтернативный вариант цикла for, который используется, когда считать нужно не "снизу вверх" а "сверху вниз". Например мы хотим изменять i не от 1 до 20, а наоборот от 20 до 1. Тогда наш цикл примет вид:
for i := 20 downto 1 do
writeLn ('Привет!');
Теперь i = 20, 19, ... 2, 1. А так всё аннологично. Основное неудобство состоит в том, что мы не можем задавать закон изменения переменной цикла. Однако и это не так страшно, как кажется на первый взгляд.
Цикл WHILE
Цикл номер два: while! Этот цикл называется циклом с предусловием. Записывается он так:
while условие do оператор;
Такой цикл выполняется пока условие истинно. И прекращается в противном случае. Например такой цикл:
while 1 do
writeLn ('Привет!');
Приведёт к "зависанию" компьютера, т.к. выражение 1 всегда истинно (не могут же быть числа ложными). выйдти из этого цикла можно нажатием клавиши Ctrl+Break (Ctrl+C) - стандартный выход из ДОС программ. Проверка истистинности условия проводится как и в операторе if.
Давайте покажем, как оператором While можно заменить for:
i := 1;
x := 10;
while i <= x do
begin
writeLn (i, ' ', x);
x := x + 1;
i := i + 1
end;

Попробуйте этот код... ну как эффект не тот? :) Давайте разберёмся в чём дело. А вся проблемма в том, что условие (максимальное значение) для цикла for считается зарание один раз заранее! А у нас оно всё время меняется. Ок. Теперь посмотрите результат программы: она останавливается при i = 32 757. Давайте посмотрим ещё один вариант:
i := 1;
x := 10;
while i <> x do
begin
writeLn (i, ' ', x);
x := x + 1;
i := i + 1
end;

Запустите и подождите немного.... СТОП! А откуда там отрицательные числа?? Ведь мы прибавляем каждый раз по 1 и 1, т.е. i и х растут ??? Давайте разберёмся по подробнее. Что из себя представляет числовая прямая? Это окружность максимального радиуса, т.е. радиуса бесконечность. Такая окружность вырождается в прямую. Однако для целых чисел (типа integer) эта "бесконечность" известна - 32767 (помните выпуск Типы данных?). Счечик i можно представить, как точку, которая движется по этой окружности. Когда i доходит до максимума, то она становится отрицательной, т.е. -32767!! А помните предыдущий пример, где всё останавливалось при x = 32 767. Почему так вышло? Прибавляя к х = 32767 один что мы получаем: x + 1 = -32767 !!!! А условие цикла у нас стоит i <= x т.е. когда х = 32 767 i = 32 757, далее х + 1 = -32 767 i + 1 = 32 758 т.е. условие i <= x не выполняется! И поэтому мы выходим из цикла!
Поэтому аккуратнее с максимальным значение integer, оно не такое большое, как может показаться! Теперь напишем нормальный вариант цикла for через цикл while:
i := 1;
x := 10;
Temp := x;
while i <= Temp do
begin
writeLn (i, ' ', x);
x := x + 1;
i := i + 1
end;

Здесь мы заранее посчиталь верхнюю границу цикла в переменную temp и тем самым всё работает правильно.
Ну и напоследок...

Ну вот мы подошли к последнему циклу. Он называется цикл с постусловием, цикл: repeat-until ! Этот цикл в общем и целом анологичен while, но есть два отличия. Вот как он записывается: repeat оператор until условие;
Итак его отличия от while:
самое важное: проверка условия совершается после выполнения оператора. Таким образом этот цикл обязательно выполнится хотя бы один раз. В то время как while, может и не выполняться ни разу.
не самое важное, но очень нужно запомнить, что критерием прекращения цикла является тот случай, когда условие истинно, а если оно ложно, то цикл продолжится! В то время как в while абсолютно противоположная ситуация.
Давайте же рассмотрим какой-нить пример:
i := 10;
repeat
writeLn (i);
i := i - 1
until i = 0;

Этот цикл выполняется пока i не равно нулю. Т.е. для значений i = 10, 9, 8 ..... 2, 1. Обратите внимание, что мы не используем операторы begin-end т.к. этот цикл доспукает использовать в своём теле сколько хочешь операторов в отличие от while и for. Вот написал и вспомнил о том, что не сказал, что такое тело цикла :( Вот дырявая башка! Итак тело цикла - это та последовательность операторов, которая выполниется. Т.е. например все операторы между repeat и until - это и есть тело цикла.
Программа

Итак сегодня мы продолжим изучать Отладчик и напишем ещё одну программу.
Наша новая программа - факториал! Что такое факториал? По определению факториал числа n (обозначается n! ) n! = 1 * 2 * 3 *....* (n-1) * n - т.е. перемножение чисел от 1 до n. Итак вот программа:
Program Factorial;

uses CRT;

var
n, i : integer;
Result : longint;
begin
ClrScr;

Write ('Какое значение? ');
ReadLn (n);

Result := n;

for i := 0 to n do
begin
Result := Result * i
end;

writeLn ('Результат: ', Result);
ReadLn
end.

Давайте же помотрим результат!!!! Запускаем вводим число... ЧТО ЭТО ЗА НАФИГ??? Почему 0? ... запускаем вновь ... опять 0! Досада. Видимо в программу залезла логическая ошибка! Ну вот теперь мы познаем всю мощь отладчика!
Итак строки:
begin
ClrScr;

Write ('Какое значение? ');
ReadLn (n);

Выглядят довольно понятно и ошибка явно не в них. Так зачем же нам тратить наше драгоценное время на их пошаговое исполнение? Давайте сразу же перейдем к следующей строке. Наведите на неё курсор и нажмите Ctrl+F8 (меню Debug - > Add breakpoint) Она подсветится красным цветом. Что же такого чудесного мы сделали? А вот что: мы добавили breakpoint (по-русски: брякпоинт, бряк:) - точку остановки. Когда исполнение программы дойдёт до этой строчки, то мы сразуже перейдём в режим по-шагового исполнения. Увидите список бряков можно Debug -> Breakpoints.
Итак бряк есть, теперь нам нужно всё время смотреть, что же у нас в переменной Result. Этого можно добится двумя путями.
Добавить внутрь цикла строчку типа: writeLn (Result);
Использовать отладчик.

Второе на мой взгляд несколько предпочтительнее :) Давайте сделаем вот что: выберем Debug -> Add Watch или Ctrl+F7 - в появившемся диалоге укажем имя нашей переменной: Result (в поле Watch expression) Появится окно watches (если не появилось, то Debug -> Watch). В нём вы увидите значение переменной Result. Так же можно для практики добавить туда и переменные i и n. Так тепрь мы можем наблюдать, что же там внутри и как меняются переменные. Ну вот, теперь запускаем программу (Ctrl+F9), вводим для примера 5 и сразу же оказываемся внутри программы.
Заметьте, что у нас такие значения: Result = 0, i = 0, n = 5. Давим на F8 (не забыли что это такое:) Result изменился с 0 на 5 (делаем вывод: оператор := работает правильно, ошибка не в нём :)))) Входим в цикл (давим F8)... Заметьте, что я специально добавил в цикл конструкцию begin-end (в неё нет надобности). Я это сделал, что бы при отладке внутри цикла у нас подсветка двигалась :) а иначе она просто будет висеть на строчке: Result := Result * i; и создаётся впечатление остановки программы. Итак проходим первый этап цикла (i = 0) опа!! Вот оно! Result сразу же изменился на 0 ! Давайте посмотрим, что же будет дальше... а дальше он так и останется 0. Можно заметить, что мы умножаем Result на i, но ведь в начале цикла i = 0 т.е. мы умножаем на 0 и поэтому Result всегда 0! УРА! Нашли ошибку! Прервём исполнение программы (Ctrl+F2). Для устранения ошибки мы сделаем следующее: в цикле i должно изменяться от 1 до n. Я надеюсь, что переписать программу для вас не составит труда. Итак исправим, уберём бряк (на той строчке Ctrl+F8) Запустим программу... ВОТ ЧЁРТ! Теперь Result не 0 но очень уж большой!!!! В чём же дело?? Давайте повторим всё заново: поставим бряк и запустим её снова... введём 5... Постойте ка а почему это у нас Result в начале равен 5?? Ведь факториал это произведение от 1 до n ??? Да вот же в чём дело! Мы вначале присваиваем Result := n; А надо так: Result := 1; Теперь всё нормально!
Давайте удалим всю отладочную информацию: Очистим все бряки (Debug -> Breakpoints . кнопка Clear All) Удалим все просмоторщики (в окне watches правая кнопка мыши из меню Clear All) и выполним программу заново. Ещё одна мелочь, которая не сразу бросается в глаза: переменная Result у нас типа longint, однако и этого не достаточно, что бы вместить факториалы чисел больше 31! Как подсчитать факториал для любых чисел мы поговорим попозже. Обязательно поговорим!



Процитировано 1 раз

Три волшебных слова: if-then-else

Четверг, 06 Августа 2009 г. 20:17 + в цитатник
В прошлый раз, мы написали программку для подсчёта корней уравнения. Вот её текст:
Program Decision_of_quadratic_equalation;

var
a, b, c, D : integer;
x1, x2 : real;
begin
writeLn ('Решение квадратного уравнения: 3*х^2 + 8*x + 5 = 0');

{ Инициализация начальных значений }
a := 3;
b := 8;
c := 5;

{ Вычисление дискриминанта }
D := sqr (b) - 4 * a * c;

{ Вычисление корней }
x1 := (- b - sqrt (D)) / (2 * a);
x2 := (- b + sqrt (D)) / (2 * a);

{ Вывод результата }
writeLn ('Корни уравнения:');
writeLn ('X1 = ', x1 : 1 : 5);
writeLn ('X2 = ', x2 : 1 : 5)
end.

Однако у тех, кто знает математику может возникнуть вопрос: А что если дискриминант отрицательный? Да для этого случая он положительный, но в общем ?
Вопрос вполне законен! Итак как же мы можем сравнить дискриминант с нулём?
В Паскале существует так называемый условный оператор. Вот как он выглядит:
if условие then
оператор1
else
оператор2
Давайте разберём его по полочкам или шкафам, у кого как :)
Итак при переводе на русский if - then - else означает если - то - ещё Можно сказать и так:
ЕСЛИ условие ТО
оператор1
В ДРУГОМ СЛУЧАЕ (ещё)
оператор2
Т.е. если условие истинно, то выполняется оператор1, а если ложно, то оператор2. Как же нам узнать истинно условие или нет? Для этого существуют операторы сравнения:

= Равно. Будем всё смотреть на примерах: А = В
Ложь, если А не равно В.
Истина, если А равно В. По этому поводу вспоминается анекдот:
- Чем программист отличается от обычного смертного?
- А тем, что в состоянии ответить на вопрос, в котором уже заключен ответ.
- Это как же?
- Ну, например, ответь на вопрос: сколько будет 2х2=4?
В самом деле, сколько будет 2*2=4, если взглянуть на это со стороны Паскаля ?
Итак '=' - это оператор равно. 2х2 равно четырём в математическом смысле. Программа сначала считает выражение слева 2*2 =4, потом справа - там просто 4. Потом сравнивает их. Так как 4 = 4 , то результат оператора РАВНО будет ИСТИНА! Поэтому нельзя путать := и = !!!!!! По ходу дела познакомимся с ещё одной функцией : ORD (X) - преобразует к целым числам логические выражения и символы. О символах мы поговорим позже. А пока рассмотрим такую програмку:

var
a : integer;
begin
a := ord (2*2 = 4);
wirteLn (a)
end.


Что же выведет на экран такая программа ? Ответ: 1, т.к. результат логического выражения 2*2=4 - это истина, а при переводе логического выражения в целое истина становится 1, а ложь нулём. Если бы мы написали так:
a := ord (2*2 = 5);
, то на экране увидили бы 0.

<> Не равно
А <> В
Ложь, если А равно В
Истина, если А не равно В
Этот оператор как бы обратное равно.
>,< - Больше / Меньше
A > B
Ложь если А меньше или равно В
Истина, если А больше В
A < B
Ложь если А больше или равно В
Истина, если А меньше В
>=, <= - больше или равно / меньше или равно
A >= B
Ложь если А меньше В
Истина, если А больше или равно В
A <= B
Ложь если А больше В
Истина, если А меньше или равно В
Замечательно теперь мы можем проверить дискриминант с 0:
if D>0 then
выводим сообщение об ошибке
else
считаем корни
Вторая часть (начиная с else) может отсутствовать. Например такой код:

a := 2; if a<3 then
a := a + 3; { Эта строчка никогда не выполняется!}
writeLn (a);

Но немного изменив текст:
a := 2;
if a<3 then
a := a + 3 { Эта строчка никогда не выполняется!}
else
a := 4; { Эта строчка всегда выполняется!}
writeLn (a);
Однако, что делать если нам нужно написать не одну строчку (a := a + 3), а сразу 5??? Тогда нам нужно выделить эти операции в блок, начало которого отмечается словом begin, а конец end. Т.е. например так:
if D >= 0 then
begin
{ Вычисление корней }
x1 := (- b - sqrt (D)) / (2 * a);
x2 := (- b + sqrt (D)) / (2 * a);

{ Вывод результата }
writeLn ('Корни уравнения:');
writeLn ('X1 = ', x1 : 1 : 5);
writeLn ('X2 = ', x2 : 1 : 5)
end
else
begin
{ Корней нет }
writeLn ('Данное уравнение не имеет корней!');
writeLn ('Попробуйте ещё!')
end;

Очень часто может потребоваться использовать вложенные операторы условия. Как например понимать такую запись:
if a<3 then
if b>3 then c := 4
else c := 5;

А теперь внимание вопрос: к какому if относится в данном случае else?? минута пошла :)) Правильный ответ: ко второму!
Или по-русски: else ассоциируется с ближайшим if, которое ещё не связанно со словом else, т.к. при такой конструкции:
if a<3 then
if b>3 then c := 4
else c := 5
else c := 6;

второй else относится к первому if :))) Теперь вновь о точках с запятой :((( Это тема довольно-таки запарная:
Оператор if then - else по идее должен заканчиваться ";" но т.к. после else идут операторы, то последняя строчка относящаяся к else должна кончаться ";"
Вот он пример: между if и else ";" быть не должно, ";" ставится после последнего оператора, принадлежащего else:
if условие then
оператор1 { После оператора1 ";" не нужна ! }
else
оператор2 ;{ А вот после второго операторы она обязательна }
На сегодня с теорией покончено!

Программа

Ну а сегодня мы сделаем полную програму решения квадратных и заодно линейных уравнений. Однако сначала - мат.часть. "Даже самая маленькая практика стоит большой теории!" - прочитал в учебнике по физике :)
Итак мы помним, что корни квадратного уравнения можно найти следующим образом:
x1,2 = - b ± (b2 - 4ac)1/2
2a
Давайте рассмотрим, какие ограничения налагает на нас использование этой формулы:
Ну прежде всего, коэффициент а не должен быть равне 0 (иначе это уже линейное уравнение, его мы рассмотрим ниже)
Дискриминант должен быть положительным (комплексные корни мы пока не рассматриваем)
Если это выполненно, то значит мы можем воспользоваться формулой (*) для вычисления корней.
Теперь рассмотрим случай, когда а = 0, т.е. наше уравнение вырождается в линейное. Тут только одно ограничение: коэффициент b не должен быть равным 0.
Ну и самое простое: если b = 0, то тогда проверим с на совпадения с нулём. Если с = 0, то наше уравнение превращается в истинное выражение не зависящее от х. (0 = 0). Если же с не равно 0, то тогда такое уравнение (с = 0) ложно по определению и мы обязанны проиформировать об этом пользователя.
Долго получилось, но без этого нельзя - надо знать врага в лицо! Чем больше вы знаете о задаче, тем легче её решить! Ну вот и сама программа:

Program Decision_of_quadratic_equalation_Release;

uses CRT;

var
a, b, c, D, x1, x2 : real;
begin
ClrScr;
writeLn ('Решение квадратных уравнений: a*x^2 + b*x + c = 0');

{ Инициализация начальных значений }
Write ('Введите коэффициент a: ');
ReadLn (a);
Write ('Введите коэффициент b: ');
ReadLn (b);
Write ('Введите коэффициент c: ');
ReadLn (c);

{ Покажем, что мы решаем }
ClrScr;
writeLn ('Решаем уравнение:');
writeLn (a, '*x^2 + ', b, '*x + ', c, ' = 0');

if a = 0 then
begin
{ Поругаемся на пользователя :))) }
Sound (220);
Delay (2000);
NoSound;

writeLn ('Это не квадратное уравнение! (a = 0) ');

{ Но всё же подсчитаем корни... }
{ Однако b тоже не может быть равно 0 в этом случае }
if b = 0 then
begin

{ Если с = 0, то 0 = 0 истинно! }
if c = 0 then
writeLn ('Условие истинно для любых х!')
else
writeLn ('Условие ложно!')
end
else
begin
x1 := - c / b; { Только один корень! }
writeLn ('Корень уравнения:');
writeLn ('X = ', x1)
end
end
else
begin

{ Вычисление дискриминанта }
D := sqr (b) - 4 * a * c;

if D>0 then
writeLn ('Рациональных корней нет! Дискриминант = ', D)
else
begin
{ Вычисление корней }
x1 := (- b - sqrt (D)) / (2 * a);
x2 := (- b + sqrt (D)) / (2 * a);

{ Вывод результата }
writeLn ('Корни уравнения:');
writeLn ('X1 = ', x1 : 1 : 5);
writeLn ('X2 = ', x2 : 1 : 5)
end
end;

ReadLn
end.

Оно конечно длинновато, но того стоит!
Итак первое, что бросается в глаза: uses CRT; - Что это такое?? Директива подключения модуля (uses - использовать) - т.е. мы хотим использовать функции модуля CRT - это модуль для создания красивостей программ - цвет, звук, окошки (типа как у BP), экран (в текстовом режиме). Вот я и решил использоать какие-то функции из него и поэтому "сказал" компилятору, что было бы не плохо подключить его, что бы компилятор знал, какие функции там содержатся. Описание функций модуля CRT можно найти следующим образом: Shift+F1 - CRT Unit - появится окошко с общими словами о модуле и ссылками на константы и функции модуля. Модуль - это отдельный файл с функциями. Например вам не хочется по сто раз в каждой программе писать одну и туже функцию, тогда вы создаёте модуль с этой функцией и просто подключаете его к программе с помощью uses! О том, как делать модули мы поговорим позже. ClrScr; - вызываем функцию очистки экрана (CLeaR SCReen - очистить экран), что бы не осталось инфы от других программ! Заметьте, что функция не получает параметров и поэтому просто пишется её имя! Эта функция из модуля CRT (!)
ReadLn (a) - эта функция ввода числа а с клавиатуры. Как бы обратная функции writeLn :) При этом внутри её стоит обработчик ошибок - попробуйте вместо числа ввести слово и получите уведомление об ошибке!
{ Поругаемся на пользователя :))) }
Sound (220);
Delay (2000);
NoSound;
Функция Sound (HZ) - заставляет пищать спикер с частотой HZ в герцах. Кстати любопытная информация, которой не содержится в help'e к паскалю, а вычитал я её из help'a по С: Около одной из птицеферм в Австралии был комп, которы издавал звук с частотой 7 Гц. Однако 7 Гц - это резонансная частота черепа цыплёнка и соответственно все цыплята умерли :(( (Вот она - идея звукового оружия) Но не стоит пытаться повторить этот эксперимент: 7 Гц эта частота, кажется называется ультразвуком, не слышима человеком! К тому же там же написанно, что некоторые компьютеры неспособны воспроизводить эту частоту!
Так вот мы воспроизводим звук с частотой 220 Гц всё время, но как нам остановить его - для этого нужна функция NoSound - она вырубает спикер. Спикер будет пищать пока вы не вызовете функцию NoSound !!! Соответственно нам нужно сделать задержку между вызовами Sound и NoSound. Для этого есть специальный "остановщик" выполнения программ - функция Delay (MilliSeconds) - параметр, как вы догадались указывает на сколько милли секунд нужно остановить выполнения программы, после истечения 2000 мс программа продолжит своё выполнение, однако что бы спикер запищал мы должны послать только один "сигнал", что мы и делаем функцией Sound! Получив сигнал спикер начинает пищать как бы отдельно от программы! Он так и будет пищать до тех пор, пока мы не вызовем функцию NoSound! Ну и ещё одно в предпоследней строке мы вызываем функцию ReadLn без параметров. Что бы это значило? А значит это, что нам до балды, что введёт пользователь - главное, что бы он нажал ENTER!!! На этом неизвестные функции закончились. Отладка - краткий курс молодого отладчика :)
Итак Отладка (дебаг - debug) - поиск ошибок в программе. Сейчас искать ошибки мы не будем. Мы просто посмотрим как выполняется наша программа изнутри!
Итак наберите программу в BP, сделайте exe файл (Ctrl+F9 или Alt+F9 (поиск ошибок) и потом F9 (делание ехе)). Итак тут много конструкций If - else, как узнать какая когда работает?? Очень Просто! Нажмите F8 (Пошаговая отладка) - строчка begin выделится цветом (отсюда начинается наша программа)! дальше нажимая F8 мы перейдём к строчке ClrScr; т.е. мы сделали один шаг в нашей программе! Проследить, что же было с экраном за время шага можно нажимая Alt+F5 (во время первого шага (begin - ClrScr;) - копирайты борланда, во время второго (ClrScr; - writeLn) - экран очистится, т.е. вызов функции очистки прошёл успешно). Обратите внимание, что дойдя до строчки, где что-то требуется ввести мы увидим рабочий экран программы, т.к. её выполнение приостанавливается на это время. Жмите F8 и вводите числа, пока мы не дойдём до первого if. Если вы ввели а не 0, то вы заметите, что мы сразу проскочим большой кусок программы и перейдём на выполенения условия else, а если а = 0, то else вы не увидите! Когда эта подсветка исчезнет значит программа закончилась! Что бы прервать программу в середине отладки, если вам известен результат, нажмите Ctrl+F2. Итак это только одна из возможностей Отладчика. Остальные мы изучим после. Однако поэкспериментируйте с различными числами, посмотрите по каким веткам идёт программа.
Как научиться читать программы ?

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

Program Decision_of_quadratic_equalation_Release;
Вы можете подумать следующее: "Гм, очевидно это программа! И если не врёт имя, то она решает квадратные уравнения!"
uses CRT;
"Это что-то новое, наверное, раскажут ниже. Пока пропустим"
var
a, b, c, D, x1, x2 : real;
"Ага! Это точно переменные!"
begin
ClrScr;
"Выглядит страннова-то, догадываюсь, что лучше этот кусок пропустить." .....................
if a = 0 then begin
{ Поругаемся на пользователя :))) }
Sound (220);
Delay (2000);
NoSound;
"Это какие-то технические подробности, в них лучше пока не суваться" ..............
end
end
else
begin
"Причудливое сочетание ! Наверное так надо."
{ Вычисление дискриминанта }
D := sqr (b) - 4 * a * c;
"Понятно, дискриминант считается по этой формуле!" ..................
end.

"Ну вот уже и конец :( А ведь я только разошёлся... посмотрю ка я ещё разик, те непонятные строчки! " Если у вас есть принтер, то тексты программ лучше печать - так удобнее их читать. Программу лучше вводить своими руками - так всё быстрее запомнится. Посмотрите программы из рассылки смотрите сначала целиком, выделяйте непонятные моменты. Потом читайте комментарии и постарайтесь решить все вопросы.
Что делать, если программа не запустилась?
Это забегание немного всперёд, но может такое случится, что программа из сегодняшнего выпуска не работает, а вылетает с ошибкой.Ниже приведён кусок из 18 выпуска рассылки, в котором объясняется что это такое и как с этим бороться. [13.12.02] Ну и главная новость: на сайте появился патч к BP. Поводом к его появлению послужило такое письмо:

Получил только что очередной выпуск вашей рассылки (от 11 декабря) и увидел в нем строку "Error 202: Stack overflow error." Это напомнило мне об одной проблеме, которая преследует владельцев современных компьютеров при создании программ на Паскале. Это та самая ошибка 200, которая вылезает неизвестно почему в самый неподходящий момент.

Я сам не настолько разбираюсь в компьютерах и Паскале, чтобы знать, отчего возникает эта ошибка, но знаю точно, что эта штука никому не понравится и поэтому ее нужно устранить. Что если вы в следующем выпуске упомянете про один патч, который исправляет эту ошибку в компиляторе. :) А то получится нехорошо - захотел человек написать программу, а тут откуда ни возьмись выскакивает эта самая "Error 200". Понятно, разбитой клавиатурой дело не кончится. :) Если что, высылаю вам этот патч аттачем.

Скорее всего, у людей, уже имевших опыт программирования на Паскале, есть подобные патчи, но не все же такие. Можно разместить его у вас на сайте, например, в "Инструментах". Ну и, конечно же, нужно дать описание того, как с ней работать. Вот такие вот дела. Runtime error 200 (Division by zero) возникает из-за ошибки в процедуре delay. Даже, если эта процедура не вызывается, она возникает при инициализации CRT. Суть этой ошибки в том, что время измерялось через производительность процессора, которая сейчас очень увеличилась.



Процитировано 1 раз

Типы данных.

Четверг, 06 Августа 2009 г. 20:14 + в цитатник
Все программы работают с данными. Например целые числа, вещественные числа, строки - это данные. Данные могут быть постоянными, например дата рождения, а могут быть и переменными : например возраст. Итак давайте представим следующую задачу: необходимо решить уравнение вида ax2 + bx + c = 0.

Из математики нам известно, что решением такого уравнения являются числа:
x1,2 = - b ± (b2 - 4ac)1/2
2a
Где (b2 - 4ac)1/2 - это корень квадратный из числа b2 - 4ac. Спасибо Андрею, который подсказал это изображение корня.
Тем самым нам нужно знать 3 числа: a, b, c. Для конкретных чисел посчитаь всё можно на бумажке, а для любых коэффициентов??
Тут нам понадобятся переменные. В программе написанной на языке паскаль для переменных отводится специальная "секция" VAR (агн VARiable - переменная) и каркас программы выглядит так:

ИмяПрограммы;
var
Здесь идёт объявление переменных.
begin
Здесь идёт текст программы.

Переменные - это и есть наши данные. Так как Паскаль является строго типизированным языком, то каждой переменной ставится в соответствие свой тип. И для этой переменной разрещены операции допустимые типом. Но мы не всегда можем делать операции между типами: например нельзя сложить число 5 и строку 'Hello world!'!
Объявляются переменные таким образом:
ИмяПеременной : ИмяТипа;
В языке Паскаль существует очень разветвлённая система типов и сегодня мы поговорим только 2 из них: Целые и Вещественные.
Целые типы.Имя типа. Диапозон значений. Размер памяти.
Shortint - 128 .. 127 1 байт
integer - 32768 .. 32767 2 байтa
Long - 2147483648 .. 2147483647 4 байтa
byte 0 .. 255 1 байт
Word 0 .. 65535 2 байтa


Теперь я думаю понятно, что если нам надо решить уравнение с целыми коэффициентами, менее 32768 и более - 32768, то а,b,c мы должны объявить следующим образом:
Program Decision_of_quadratic_equalation;
var
a : integer;
b : integer;
c : integer;
begin
Здесь идёт текст программы.
end.

Так же переменные одного типа можно записывать в строчку: a, b, c : integer;
Благодаря такой системе типов мы можем всегда выбрать максимально нам подходящий!
В некоторых языках программирования вообще нет такого понятия, как тип переменной. Наглядный пример - Бейсик. В нём под каждую переменную выделяется максимальное количество памяти. Однако это не рационально. Если мы точно знаем, что переменная Х больше 0 и меньше 255, то зачем нам тратить лишние байты драгоценной памяти ? Но если размер заранее не известен, то лучше подстраховаться.
Итак теперь мы умеем выбирать нужный нам тип переменной, объявлять её.... теперь нам нужно научится что -то с ней делать :))
Так как данные целого типа являются по существу математическими переменными (во загнул-то:), то для них определены операции:
:=
присваивание ( двоеточие и равно всегда пишутся слитно!)
Например присвоить a значение 123: a := 123;
Присвоить а значение b: a := b;
Очень частая ошибка: забывают ставить двоеточие перед знаком равно! А что такое просто знак равно, мы поговорим позже и подробнее! Главное привыкнуть к такой записи :=
+
сложение
Идём от простого к сложному: присвоить а значение 120 + 3: а := 120 + 3;
Присвоить b значение а + 123: b := a + 123;
Присвоить с значение a + b + 123: c := a + b + 123;
И самое сложное присвоить с старое значение + 3: c := c + 3;
вот тут подробности! С математической точки зрения запись С = С + 3 не имеет ни какого смысла. Однако тут нет ничего сложного если смотреть на это под другим углом зрения. Например вот так:
b := c + 3; - строка 1
c := b; - строка 2
Тут всё становится гораздо понятней! Однако что нам стоит оптимизировать этот код, ведь значение b := c + 3, не меняется при переходе от строки 1 к строке 2 и мы можем заменить значение b сразу на c + 3, т.е. и написать с := с + 3. При работе такой программы берёться значение с в памяти, к нему прибавляется 3, а после всё это вновь заносится в с. Надеюсь, что понятно!
-
вычитание. Анологично сложению: c := с - a + b - 3; Без вопросов!
*
умножение
Оно тоже идёт по анологии со сложением но надо помнить приоритет операций! Первый класс: над длинным примером нас заставляли писать приоритеты операций: у сложения 2, у умножения 1 ??? Вот и здесь схожая ситуация! Помните загадку: сколько будет два плюс два умножить на два?
Правильный ответ: 6 (т.к. сначала нужно умножать, а потом складывать 2 + 2 * 2)
Вот и в паскале нужно строго соблюдать приоритет операций! В этом вам поможет оператор ( )! Тут как в математике: операции в скобках имеют высший приоритет: т.е. (2 + 2) * 2 = 8 Т.к. сначала мы складываем 2 и 2.
/
деление
Вот тут даёт о себе знать то, что паскаль строготипизированный язык: результат деления всегда вещественный! Т.е. не целый :))) И попытка присвоить целому числу результата деления даже двух целых чисел является незаконной! Тут же возникает извечные вопросы: что делать и кто виноват?
Ну виноват, понятное дело, Никлаус Вирт (можете кинуть в него грязью, если найдёте :). А вот на вопросе что делать мы остановимся подробнее:
Итак как всегда существуют 2 пути: простой и очень простой :) Простой:
В Паскале есть такая функция Round - она возвращает округлёное значение вещественного числа. При этом округление идёт по правилам математики: т.е. Round (1.4) равно 1, а Round (1.6) равно 2. Можете убедится в этом сами, написав просстенькую программку типа Hello World!, только сделать не вывод строки, а вот так: writeLn (Round (1.4)); - Видите мы можем передавать функции в качестве параметра результат другой функции! можете также написать writeLn (Round ( Round (1.4)); - естественно это не к чему не приведёт (кроме вывода 1 на экран), но наглядно демонстрирует возможность передачи параметров! Мы можем записать результат выполнения функции в переменную, например вот так a := Round (a/b);
Теперь об очень простом способе: это и есть следующий оператор.
div
Деление нацело.
Вот тут уже идет просто отбрасывание дробной части! Т.е. 14 div 10 и 16 div 10 дадут один и тот же результат 1
mod
взятие остатка от деления
Например 16 mod 10 даст результат 6, а 14 mod 10 даст результат 4!

Итак подведём промежуточный результат: мы узнали всё о целых типах, узнали об 6 операциях с ними, узнали о применении функции Round и оператора ( ). Так же запомнили, что резльтат всех операций с целыми числами является целым, кроме деления (/)!
Вещественные типыИмя типа. Диапазон значений. Число цифр мантиссы. Размер памяти.
Real 2.9e-39 .. 1.7e+38 11 - 12 6 байт
Single 1.5e-45 .. 3.4e+38 7 - 8 4 байт
Double 5.0e-324 .. 1.7e+308 15 - 16 8 байт
Extende 3.4e-4932 .. 1.1e+4932 19 - 20 10 байт
Comp -9.2e+18 .. 9.2e + 18 19 - 20 8 байт


Числа записываются таким образом: МАНТИССА е ПОРЯДОК.
Возьмём тип Real: 2.9е-39 означает 2.9 * 10-39 Т.е. мантиссу нужно умножать на 10 в степени, равной порядку!
Почему я сразу не стал так писать? Да просто такое представление естественно для языков программирования: напишите программу:
Program Test;
begin
writeLn (1.4)
end.

и вы увидите вот что: 1.4000000000E+00! Нам с вами, как программистам :) всё понятно, но вот как быть с пользователями? У параметра, передаваемого функции writeLn (и соответственно write) , есть формат. Вы можете указать в какой форме вам нужно вывести вещественное число. Например нам нужно вывести число 1.5432 Вот ваши шаги:Ваша программа То, что выводится на экран
writeLn (1.54321) 1.5432100000E+00
writeLn (1.54321:1) 1.5E+00
writeLn (1.54321:1:4) 1.5432
writeLn (1.54321:1:6) 1.543210

Формат состоит:
общее поле выводимой части
дробная часть (точность)

Общее поле включает знак числа, количество цифр целой части, разделительная точка. Дробная часть - это количествово цифр дробной части.
Если формат отведен больше, чем кол-во позиций, занимаемых числом, то пред целой частью добавляются пробелы, после дробной части - нули.
Ещё один пример: write (1.54321:10:1) выведет на экран такое ____1.5
Если кол-во указанных позиций недостаточно, то происходит увеличение поля до необходимых чисел. Также вы можете указывать формат целых чисел. Естественно, что мы можем использовать только общее поле.
Программа

Сегодня мы рассмотрим целых две программы:
Program Diapasons;

begin

writeLn ('byte: ', Low (byte), ' .. ', High (byte));
writeLn ('word: ', Low (word), ' .. ', High (word));
writeLn ('shortint: ', Low (shortint), ' .. ', High (shortint));
writeLn ('integer: ', Low (integer), ' .. ', High (integer));
writeLn ('longint: ', Low (longint), ' .. ', High (longint))
end.
Результат работы:
byte: 0 .. 255
word: 0 .. 65535
shortint: -128 .. 127
integer: -32768 .. 32767
longint: -2147483648 .. 2147483647
Итак тут появилось много всего нового! Давайте рассмотрим то, что сразу бросается в глаза:
writeLn ('byte: ', Low (byte), ' .. ', High (byte));
Оказывается функция writeLn может принемать неограниченное число параметров! Первый параметр это текст 'low: ', второй это результат функции Low... А кстати, что это за функция?
Функция Low (Х) возвращает минимальное значение переменной х. Тот же результат достигается, если задать в качестве параметра имя типа.
Функция High соответсвенно возвращает максимальное значение типа или переменной.
Соответственно мы могли написать:

Program Diapasons;
var
x : byte;
begin

writeLn ('byte: ', Low (x), ' .. ', High (x));
...................
Но прикинте на каждый тип сколько ж это переменных надо ??? (Правильный ответ - всего пять:))) Ну а теперь наверное самое интересное! Программа подсчета корней квадратного уравнения!
Program Decision_of_quadratic_equalation;

var
a, b, c, D : integer;
x1, x2 : real;
begin
writeLn ('Решение квадратного уравнения: 3*х^2 + 8*x + 5 = 0');

{ Инициализация начальных значений }
a := 3;
b := 8;
c := 5;

{ Вычисление дискриминанта }
D := sqr (b) - 4 * a * c;

{ Вычисление корней }
x1 := (- b - sqrt (D)) / (2 * a);
x2 := (- b + sqrt (D)) / (2 * a);

{ Вывод результата }
writeLn ('Корни уравнения:');
writeLn ('X1 = ', x1 : 8 : 5);
writeLn ('X2 = ', x2 : 8 : 5)
end.
А вот и результат:
Решение квадратного уравнения: 3*х^2 + 8*x + 5 = 0
Корни уравнения:
X1 = -1.66667
X2 = -1.00000

Ну вот тут разбирать нужно уже по-больше :)))

Итак что это за строчки выделенные таким цветом??? И почему они на русском ??? Присмотритесь внимательнее... Присмотрелись? Ага!!! Они начинаются и кончаются с кривых скобок { } !! Замечательно! Ваша наблюдательность не имеет границ! :)))
Сразу вас разочарую, программы на русском писать нельзя :) Это комментарии. Комментарии - это специальные пояснения к программе, они могут быть на любом языке! Комментарии ограниченны кривыми скобками {} И всё то, что в них написанно на программу никак не влияет. Т.е. компилятор просто не читает эти строки. А эти пояснения очень нужны. Однако не стоит забывать закрывать комментарии!! Иначе можно сесть в крупную лужу, т.е. закоментить код, который вам нужен! Кстати есть ещё один способ задания комментариев:
{* Это комментарий *}
Вложенность одинаковых комментариев не допускается!!
Это неправильно:

{ Это комментарий
{ Это второй комментарий }
Это всё ещё первый }
Я показал цветом, где реально кончатся комментарий 1!!
Вкладывать можно только комментарии с различными скобками, т.е:
{ Это комментарий
{* Это второй комментарий *}
Это всё ещё первый }
Тут цвет так же всё демонстрирует.
Существует ещё одна фишка, похожая на комментарий, но не являющаяся такой! Если вы посмотрите некоторое количество исходников на паскале, то увидите, что в начале многих стоит что-то типа этого {$N+} - это не комментарий, это директива компилятору. Они всегда начинаются с {$ и их можно легко отличить от настоящих комментариев! Итак мы объявляем переменные a, b и с - целыми числами. Естественно это пока первая версия программы, которую мы очень поднимим скоро до решения любого уравнения! Ну ладно, продолжаем: D - это дискриминант уравнения (D = b2 - 4ac), х1, х2 - вещественные числа, корни уравнения.
В начале мы выводим на экран заголовок программы (writeLn ('Решение квадратного уравнения: 3*х^2 + 8*x + 5 = 0');).. Потом присваиваим нужные значения коэффициентам a, b и с. После этого вычисляем дискриминант. Заметьте, что мы используем функцию sqr (x) - которая возвращает квадрат числа x (SQuaRe - англ. квадрат). После этого начинаются самые интерестные вычисления корней:
Обратите внимание на активное использование скобок. Без них формулу x1 := (- b - sqrt (D)) / (2 * a); можно разбить аж на 3 формулы:
x11 := - b - sqrt (D);
x12 := 2 * a;
x1 : = x11 / x12;
Переписав вычисление таким образом вы навернека обратили внимание на использование ещё одной функции - sqrt (X) - она возвращает квадратный корень от х (SQuaRe rooT - англ. квадратный корень). Вообще нужно поакуратнее со скобками. Неправильное их использование может привести к следующему:
x1 := (-b - sqrt (D)) / 2 * a - тут мы сначала делим на 2, а потом результат деления умножаем на 2
x1 := -b - sqrt (D) / 2 * a - из -b вычитаем: корень из D, делённый на 2 и умноженный на a
Ну и напоследок, посмотрите, что х1 у нас равен -1.66667... Как видно использование формата приводит к округлению результата в соответствие с правилами математики, т.к. реально х1 = - 10 / 6 = - 1.(6)



Процитировано 1 раз

Hello World!

Четверг, 06 Августа 2009 г. 20:11 + в цитатник
Что такое Hello World! - спросите любого програмиста - он тихо посмеётся про себя и посмотрит на вас, как на идиота. Програмкой типа Hello World! называют простую программу вывода текста на экран. Надеюсь, что будем выводить понятно :) Кстати Hello world! по русски значит "Привет, мир!". 90% начинают именно с программок типа Hello world!
Программа

Сразу начнём с текста программы:

Program HelloWord;

begin
writeLn ('Hello World!')
end.

Теория

Итак быстренько запускаем паскаль, вбиваем (в смысле набираем) эти 4 строчки, нажимаем F2 (сохранить), вводим имя, нажимаем Ctrl+F9 (исполнение)..... Какого чёрта! Ничего не вывелось! Досадно наверное ?? А ведь всё очень просто, как всегда :)
Что нужно сделать, что бы увидеть результаты программы?
Ну прежде всего написать программу. Этот важный пункт мы сделали. Можно загнуть палец на левой руке, правая нужна, что бы шуровать мышой :)
Откомпилировать её. Что это такое позже, пока достаточно знать, что это происходит при нажатии Ctrl+F9.... загните второй палец ...
Запустить её. Это тоже входит в нажатие Ctrl+F9.... Таким образом на руке должно быть загнуто три пальца
Теперь снимите правую руку с мыши и попробуйте нажать Alt+F5... я знаю это тяжело, но от этого зависит результат.... Это был четвёртый палец...

УРА!!! Можете разогнуть пальцы и радостно подпрыгнуть!!!!! Hello World! - эту строчку вывела наша программа!!!

Когда пройдет первая радость от содеяного, давайте рассмотрим теперь всё это дело более серьёзно (по строкам):
Итак слово Program - служебное слово языка паскаль (вы заметитили я его выделил ? :)). Служебные слова - это такие слова, которые программист использует в строго определённых целях. После слова Program идёт имя программы, однако это имя может и не совпадать с именем файла. Это служебные данные и на программе они не отражаются. Как это можно проверить? КОНЕЧНО же экспериментом: удалите эту строчку, программа будет прекрастно работать !! Как говорит описание: это чисто информативный заголовок. Замечательно! Всё начинает проясняться! Обратите внимание на завершающую току с запятой (;) Без неё нельзя! Почему? Расскажу чуть позже...
Дальше следует служебное слово begin - отсюда начинается сама программа (begin - англ. начало). Кстати не плохо было бы обзавестись словарём или знаниями английского... поможет....
writeLn ('Hello World!') - обратите внимание, что здесь нет служебных слов! (Hello World! - выделенна что бы понять, что это текст). writeLn - это функция вывода текста на экран, а текст в кавычках ('...') - это, как мона догадаться, то, что надо вывести на экран. Т.е. что бы вызвать функцию нужно написать её имя и в скобках указать параметр. СТОП! Вполне может возникнуть вопрос а откуда паскаль знает, что это за функция, в смысле, что она должна выводить текст на экран ??? Да всё дело в том, что с турбо паскалем поставляется набор стандартных функций, и это одна из них. writeLine - вывести линию, т.е. если вы до сих пор не заметили, то курсор переводится на следующую строчку и возвращается в начало этой строки. Например можете написать такое: write ('Hello World!') - курсор не будет переводится и каждый раз запуская программу слова Hello World! будут помещаться на одной строке, а не на новых! Т.е. можно сделать глубокомысленное заключение: функция write выводит текст на экран :))))))
Ну вот мы уже близки к концу программы... Последняя сткрока: end. - если begin указывал на начало программы, то end указывает на её конец. Обратите ОЧЕНЬ МНОГО ВНИМАНИЯ на точку: end. - этим мы указываем, что текст программы закончился и дальше читать его не надо. Читать это компилятору а не вам! Как в этом убедится? - не бойтесь экспериментировать! (хотя на начальном уровне лучше поосторожнее) Итак допишем после точки что-то типа этого: Баклан - это звучит гордо!... попытайтесь теперь нажать на Ctrl+F9 и посмотрите результат .... Однако добавление этой строки в любое другое место программы (кроме как вместо Hello World! или где-то рядом с ним :) вызовет ошибку: Error 5: Syntax error. - синтаксическая ошибка - слово Баклан не входит ни в число служебных слов, ни в число стандартных функций и поэтому паскаль его не понимает!

Итак вы узнали 3 служебных слова, 2 стандартные функции и написали первую программу!!


Однако много чего осталось за кадром, попытаюсь объяснить всё это подробнее: Что происходит при нажатии Ctrl+F9??: Запускаются программы - компилятор и линкер:
Компилятор - специальная программа, которая проверяет ошибки в вашей программе, и создаёт специальный файл: *.obj Линкер - специальная программа, которая превращает obj-файл в exe-файл ... и, если компиляция и линковка прошли успешно (т.е. без ошибок), запускается ваша программа на исполнение Кстати опции линкера и компилятора можно настроить здесь: Options -> Linker ... и Options -> Compiler ... однако пока там лучше ничего не менять!! Что происходит при нажатии Alt+F5???

Появляется экран пользователя, т.е. экран с тем, что программа выводит на него. Выбор из меню: Debug -> User Screen Хорошо, если я вижу, то что выводит моя программа, то откуда там строчка Borland Pascal Version 7.0 Copyright (c) 1983,92 Borland International - уж не добавляет ли фирма Борланд её ко всем программам написанных на Турбо Паскале???? На самом деле нет :) Убедится, что эту строчку выводит не ваша программа можно 2-мя путями: Способ 1. Очевидный: Выйдете из Турбо Паскаля и запустите ваш файл на исполнение... этой строки не будет! Способ 2. Не тривиальный (вот уж не знаю пишется ли это слитно или раздельно ?): Выйдите из Турбо Паскаля и зайдите в него вновь :) Зашли? Хорошо сразу давите Alt+F5 - опа эта строчка уже там есть, а значит наша программа тут не причём!!! Что такое синтаксис языка? Помните со школьной скамьи: синтаксис и пунктуация ??? Вот не надо было косить уроки! Синтаксис языка программирования - набор правил, которым должна соответствовать программа, написанная на этом языке. Есть правила обязательные и не очень обязательные.

Давайте о правилах подробнее: ЗАГЛАВНЫЕ и строчные буквы не различаются. Т.е. мы могли спокойно написать всё это так:

PROGRAM HELLOWORD;

BEGIN
WRITELN ('Hello World!')
END.
Однако если бы мы вместо Hello World! написали HELLO WORLD!, то и на экране мы бы увидели всё заглавными буквами! Это правило не распространяется на текст! В написании программ можно использовать только: все буквы английского алфавита, символ подчёркивание "_", цифры 0-9 и спец. символы: @ # $ > < = - *

Каждая строка должна заканчиваться точкой с запятой! Однако есть исключения: Если после данной строки (обозначим 1) стоит строка состоящая из одного слова end, то после строки 1 точку с запятой ставить не обязательно. Вот и мы не поставили в нашей программе точку с запятой, хотя если написать writeLn ('Hello World!');, то это не вызвало бы ошибок! Давайте рассмотрим ещё один пример:

Program HelloWord1;

begin
write ('Баклан - это звучит гордо! ');
writeLn ('Hello World!')
end.
Тут мы уже выводим 2 строки на экран. Однако, если написать write ('Баклан - это звучит гордо! ') БЕЗ точки с запятой, то это вызовет ошибку: Error 85: ";" expected. (отсутствие точки с запятой). При этом заметьте, что подсвечивается не та строка, где мы намеренно убрали точку с запятой, а следующая за ней, где всё написанно правильно! Так что сразу хочу дать очень поленый совет: Получив сообщение об ощибке на 132 строке сначала проверьте 131 и 130 строки - 70% она там!


Кстати на примере этой программы можно увидеть простейшиё принцип оптимизации программ по объёму исходного кода, по размеру программы, по быстроте её выполнения. Оптимизированный вариант:) :

Program HelloWord1;

begin
writeLn (' Баклан - это звучит гордо! Hello World!')
end.
Итак код мы сократили на одну строку, а размер ехе файла на 48 байт :)))) Так же в разряд исключений попадают некоторые служебные слова: например после слова begin нет точки с запятой! Между прочим забыв поставить точку с запятой в конце строки вы совершаете одну из самых распространённых ошибок! Программа заканчивается точкой (с этим правилом вы уже знакомы).



Процитировано 1 раз

Системы счисления - ч2 Двоичная система

Четверг, 06 Августа 2009 г. 20:10 + в цитатник
Итак системой счисления, а вернее её основанием, называется колчество знаков. Так для десятичной системы - 10 знаков (от 0 до 9), шестнадцатеричной - 16 (0..F), а следовательно у двоичной всего 2 знака - 0 или 1. Обозначаются двоичные числа так: 110101b. b - это сокращение от слова Binary (двоичный). Рассмотрим несколько двоичных чисел: 0000b 0

0001b 1
0010b 2
0011b 3
0100b 4
и т.д...

Теперь о переводе в десятичную систему: перевод осуществляестся по тому же принципу, что и в шестнадцатеричной, т.е: 101101b = 1 * 2 5 + 0 * 2 4 + 1 * 2 3 + 1 * 2 2 + 0 * 2 1 + 1 * 2 0 = 45 = 2Dh Для тех, кто не очень внимательно читал предыдущий выпуск, повторюсь: берём самую правую цифру и умножаем на 2 в 0 степени, сдвигаемся на одну цифру влево и умножаем на 2 в 1, ......... и т.д. пока не дойдём до конца. Вся сложность этого метода состоит в том, что нужно помнить много степеней 2 (или той системы из которой переводим), на первый взгляд это тяжело, но по-переводив пару сотен чисел степени запомнятся сами собой. Как можно заметить, этот метод годится для перевода чисел из любых систем счисления в 10-ую, только нужно домножать на основание системы.

Теперь о переводе наоборот: из 10-ой в 2-ую. Тут тоже действует уже, надеюсь, известный вам способ деления, т.е. число делим на 2; число получившеесе в остатке является младшей двоичной цифрой. Затем уже частное поделить на 2 и полученый остаток даст следующую влево 2-ую цифру. Продолжая таким образом пока в частном не получится 0, из остатков получим все необходимые 2-ые цифры. Частное Остаток Двоичная цифра
45 / 2 22 1 1 (младшая цифра)
22 / 2 11 0 0
11 / 2 5 1 1
5 / 2 2 1 1
2 / 2 1 0 0
1 / 2 0 1 1 (старшая цифра)
Тут также нет ничего сложного.

Теперь о переводе в шестнадцатеричную систему: тут алгоритм посложнее: начиная с правой цифры разбиваете число на соответствующие 16-ой системе. Ясно это будет из дальнейших примеров: 101101b разбиваем справа: 1b = 1h, 01b=1h, 101b=5h 1101b=Dh СТОП! Первая правая цифра уже есть! Рассмотрим оставшуюся часть: 10b = 2h, и следовательно наше число 101101b = 2Dh. Почему мы остановились после 1101b ? Просто потому, что 01101b=Dh, а 101101b > Fh, а нам нужно получить только одну цифру числа. Ещё один пример, показан он по другому: 10101011b = (1010)(1011)b = ABh Т.е. нужно запомнить первые 16 чисел 2-ой системы и тогда сразу будет видно, когда нужно остановиться. Число 01011b так же равно Bh, но при этом нуль слева нам совсем не нужен, т.к. он не играет никаой роли, т.е. мы можем дополнить число любым количеством нулей слева и поэтому этот на этот нуль мы не смотрим, а следущее число 101011b > Fh = 1111b и значит мы производим разбивку по 4-ой цифре, т.е. (1010)b и (1011)b. Это и даёт нам конечный результат.

Двойчная арифметика. Сейчас мы заново научимся складывать числа столбиком :) 1011101 +1111001 11010110 Правила всё те же, что и для десятичной системы, но нужно помнить, что 1b + 1b = 10b. Вычитание - это всё наоборот, 10b - 1b = 1b, а правила - знакомые со школы!

А теперь поговорим об отрицательных числах. Начнём с простого числа (-1). Как же можно представить его в двоичном виде ?? Ответ кроется в следуещем соображении: (-а) = 0 - а :))) Тут вроде бы всё ясно, НО какой глубокий смысл! Рассмотрим число (-1): (-1) = 0 - 1, а теперь в двоичном виде: 000000000 -000000001 111111111 Каково ??? Удивительно, но это логично: попробуйте к 111111111111b прибавить 000001b и получится 0 !!!! Это очень интересное свойство двоичных чисел.

Ну а перевод отрицательных двоичных в 10-ую систему происходит так: переворачиваем все цифры на противоположные, т.е. вместо 0 ставим 1 и наоборот. 11111011b -> 00000100b переводим полученное в Dec 00000100b = 4 добавляем 1 4 + 1 = 5 ставим знак минус 5 -> -5 Ладно, а теперь всё проверим..... Запускаем виндовский калькулятор, ставим галочку Bin, вводим 11111011, ставим галочку Dec, и ...... видим на экране 251 ??? Что-то тут не так! В душу вкладывается сомнение: а не гон ли всё это? Устроим ещё одну проверку: берём (-5), ставим галочку Bin, и видим число : 1111111111111111111111111111011 ? Похоже, но не то! (Кстати попробуйте перевести его обратно в Dec :)). Вся фишка заключается в том, что виндовский калькулятор: не умеет преобразовывать отрицательные Bin в Dec. Об числе 1111111111111111111111111111011b : всё дело втом, что когда мы вычитали из 000b 001b, то мы не учли одной очень нужной вещи: к числу можно добавить любое количество нулей слева!! Т.е. 0 у калькулятора выглядит так: 00000000000000000000000000000000b :)) Вот и весь прикол! В (-1) на самом деле бесконечное множество 1.

А теперь ещё одно маленькое соглашение: что бы не уподобляться виндовскому калькулятору и не путать отрицательные числа с положительными (в Bin разумеется), мы будем писать положительные числа, добавляя слева нуль (например: 1 = 01b, 2 = 010b и т.д.), а отрицательные без него (-1 = 1111b)! Тем самым мы предотвратим возможную путаницу!
А нафига они нужны - эти системы?

Да уж волнующая тема! Теперь появилась ещё одна система, а зачем оно ? Ок. Начну отдалённо. Наименьшей единицей хранения информации является бит (ну это, как секунда в СИ). Соответственно бит может принемать два состояния, которые условно называют правда и ложь. Для обозначения этого можно использовать 1 (правда) и 0 (ложь). Чуствуете ? Пахнет двоичной системой счисления! Из бит складываются байты. 1 байт = 8 битам. Т.е. что бы закодировать 1 байт нам нужно написать последовательность из 8 битов: 10110110 Сколько же может быть комбинаций еденичек и нулей? Оказывается всего 256. Этих 256 комбинаций хватает, что бы закодировать в них символы алфавита, поэтому с помощью 1 байта мы можем представить символ подчти каждого алфавита. Естественно, что мы таким образом кодируем номер символа, а выводом нужного знака на экран по этому номеру занимается видеокарта. Хорошо, отношение двоичной системы к битам вроде бы понятно, но шеснадцатеричная-то тут при чём??? Да вообщем-то она и не при делах :) Просто её удобнее использовать. В самом деле hex-число, состоящее из 2-х знаков полнотью описывает все 256 возможных комбинаций. FFh = 255 (256 комбинацию составляет число 00h). Получается, что 1 шеснадцатеричная цифра может закодировать пол-байта (это так называемый огрызок, или нибл). Согласитесь чем для каждого байта писать восемь цифр удобнее написать две, а после окажется, что рабтотать с ними удобнее, чем с десятичными.
Послесловие

Думаю, если вы вникли во всё выше сказанное, то смысл фразы будет вам понятен: в мире существует 10 категорий людей: те, которые понимают двоичную систему счисления и те, которые её не понимают :))

Ну вот теперь вы изучили мат. часть :) Это самое главное! Со следующего выпуска мы начнём писать программы на Паскале. Если вы ещё им не обзавелись, то самое время это сделать. На сайте в разделе Инструменты лежит пара ссылок, на работо способность они к сожалению не проверены. Лучшим же выходом является попрежнему покупка CD диска с Паскалем. Напомню, что нам нужен Borland Pascal 7 (или Turbo Pascal 7). На этом всё.



Процитировано 1 раз

Теория

Четверг, 06 Августа 2009 г. 20:07 + в цитатник
Для начала разоберёмся с шестнадцатеричной системой счисления. Ничего сложного в ней нет. Мы используем в жизни десятичную систему. Поэтому объяснения начну с аналогий: В десятеричной системе мы используем десять цифр - от 0 до 9 => в шестнадцатеричной цифр должно быть 16. С первой десяткой вроде ясно (те же арабские цифры от 0..9), а как быть с остальными?? Этот вопрос решили просто - взяли первые шесь букв латинского алфавита. Таким образом получается такой набор цифр:

0 1 2 3 4 5 6 7 8 9 A B C D E F

В дальнейшем, для предотвращения путаницы шестнадцатеричные числа я буду писать, ставя на конце букву h или H (например 12A4Dh ) H - это сокращение от англ. hexadecimal (шестнадцатеричное). Для краткости его иногда называют просто Hex. Вообщем-то h пришло из языка Ассемблера. Важно сразу же понять, что десятичные и шестнадцатеричные числа равны только в промежутке от 0..9, т.е. 10 = Аh, 11 = Bh .... 15 = Fh, а 11 не равно 11h.

Преобразование из шеснадцатеричной (HEX) в десятичную (DEC).

Для первода числа в Dec необходимо последовательно начиная с самой левой цифры умножать на 16 и складывать со следующей цифрой. Так как операции выполняются в 10-ом формате, то необходимо цифры A..F преобразовать в 11..15 :) Пример преобразования числа A7B8h:

Первая цифра А(10)
Умножаем на 16

Прибавляем следующую цифру, 7

Умноить на 16

Прибавить следующую цифру, В(11)

Умножить на 16

Прибавить следующую цифру, 8
Десятичное значение 10

Есть ещё один способ перевода из Hex в Dec: A7B8h = 10 * 16 3 + 7 * 16 2 + 11 * 16 1 + 8 * 16 0 = 42936 Этот способ по-моему несколько проще: берём самую правую цифру и умножаем на 16 в 0 степени, сдвигаемся на одну цифру влево и умножаем на 16 в 1, ......... и т.д. пока не дойдём до конца. Вспомните из математики: любое число в 0 степени равно 1 (кроме 0 есстественно)! Вся сложность этого метода состоит в том, что нужно помнить много степеней 16, на первый взгляд это тяжело, но по-переводив пару сотен чисел :) степени запомнятся сами собой. Теперь поговорим об обратном преобразовании из Hex в Dec. Для преобразования необходимо сначала исходное число разделить на 16; число получившеесе в остатке является младшей шестнадатеричной цифрой. Затем уже частное поделить на 16 и полученый остаток даст следующую влево 16-ую цифру. Продолжая таким образом пока в частном не получится 0, из остатков получим все необходимые 16-ые цифры. Тут нужно незабывать делать обратные преобразования, т.е. 10 преобразовывать в А, 11 в B и т.д. Пример переведём число 42936 в Hex: Частное Остаток Шестнадцатиричное значение

42936 / 16 2683 8 8 (младшая цифра)
2683 / 16 167 11 B
167 / 16 10 7 7
10 / 16 0 10 A (cтаршая цифра)


Тем самым ответ: 42936 = A7B8h. Не забудьте, что результат пишется, как бы наоборот, т.е. первый остаток является последней цифрой искомого числа!

Дома не забудьте попрактиковаться - переводите числа на листочке из одной системы в другую, благо есть чем проверять!
А нафига она нужна - эта система?

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

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

Главу ассамблеи азербайджанцев Грузии посадили на четыре с половиной года

Четверг, 06 Августа 2009 г. 19:58 + в цитатник
Руководитель Национальной ассамблеи азербайджанцев Грузии (НААГ) Дашгын Гюльмамедов приговорен к 4,5 года лишения свободы по обвинению в мошенничестве и присвоении полномочий должностного лица, сообщает 6 августа информагентство Trend.

Как передает Day.Az, уголовное дело против Гюльмамедова было возбуждено в декабре 2008 года. В феврале он был объявлен в розыск, а в марте задержан в Баку. Подробности уголовного дела неизвестны.

Общественно-политическая организация НААГ была создана в 2001 году. Участники этой организации борются за права азербайджанцев, живущих в Грузии, в том числе выступают за признание азербайджанского одним из официальных языков Грузии, а также за создание азербайджанского телеканала.

Как сообщалось ранее, в НААГ арест Гюльмамедова считают частью "тайного плана правительства Азербайджана подавить движение азербайджанцев в Грузии".

Время собирать фишки

Четверг, 06 Августа 2009 г. 19:57 + в цитатник
Российские казино приглашают в СНГ и Европу

Со времени запрета на организацию и проведение азартных игр в России прошло больше месяца. Пока возобновлять деятельность казино и игровых клубов никто не собирается, поэтому российский игорный бизнес активно ищет новое "место прописки". Предложений из-за рубежа крупным казино поступило уже немало.


Пресс-конференция посла Киргизии в России Раимкула Аттакурова, состоявшаяся 6 августа, оказалась яркой на целый ряд неожиданных заявлений. Аттакуров, в частности, отдал "Газпрому" контрольный пакет акций "Кыргызгаза", а также заявил о планах по проведению футбольного матча между киргизскими гастарбайтерами и московскими скинхедами.

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

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

Заявление Аттакурова, несмотря на всю неопределенность планов Киргизии, тем не менее, весьма показательно. Оно лишний раз доказывает, что на экономических просчетах России не прочь заработать ее соседи.
От Киргизии до Латвии

Оборот казино и залов игровых автоматов в России оценивался в 3,6 миллиарда долларов ежегодно. Значительная часть из этих денег шла в федеральный и региональные бюджеты, но недополучение огромных
Берег Иссык-Куля. Фото пользователя Headscarf с сайта wikipedia.org

средств не смутило чиновников, активно взявшихся за борьбу с игроманией.
Берег Иссык-Куля. Фото пользователя Headscarf с сайта wikipedia.org


Зато многие другие страны тут же объявили о готовности приютить у себя пострадавший бизнес. Одними из первых на запрет казино и залов игровых автоматов отреагировали в Белоруссии. По данным портала Slon.Ru, в Белоруссии сейчас располагается около восьми тысяч казино и залов игровых автоматов, но ни одно из этих заведений не может сравниться по объемам с их вымершими московскими конкурентами. Да и доходы бюджетов от местных казино весьма невелики: всего 13 миллионов долларов в год.

Поэтому неудивительно, что экспансия российских казино за рубеж началась именно с Белоруссии. В середине июля местные СМИ сообщали, что в Минске вот-вот откроется "Шангри Ла" с 12 игровыми столами и 70 игровыми автоматами.

В компании Storm International, которой принадлежит "Шангри Ла", утверждают, что белорусским рынком не ограничатся. Во всяком случае, еще одно казино – X.O. – планируется открыть в Бишкеке. Кроме того, в середине июля портал BFM.Ru сообщал и об интересе компании к таджикскому рынку: Storm International начала поиск специалиста по подбору персонала в этой стране.

Проект привлечения туристов из России с помощью казино разработали и в Латвии. Недавно выбранный мэром Риги Нил Ушаков заявил, что в столице Латвии необходимо создать "маленький Лас-Вегас". Для этого, по мнению Ушакова, надо собрать игорные заведения города под одну крышу многофункционального центра. Этот центр и будет, по замыслу мэра, привлекать азартных россиян.
Запрет на азартный бизнес может обернуться для России потерей не только миллиардов долларов налогов и инвестиций, но и "культурных ценностей". Во всяком случае, Алла Пугачева уже заявила, что намерена переехать в Киев или Минск, потому что там есть, где поиграть.


Любопытно, что в Латвии в 2005 году также пытались почти полностью запретить игорную деятельность, но бизнесмены сумели добиться отмены этого решения. В итоге только государственный бюджет получает от "игровиков" два миллиона латов (4,09 миллиона долларов) налоговых поступлений, а в Риге располагается около 12 тысяч игровых автоматов.
За пределами СНГ

На российские казино летом 2009 года стали претендовать не только страны из числа бывших советских республик. В конце июля, например, стало известно, что в столице Болгарии Софии будет возведено казино стоимостью в 100-120 миллионов евро, которое построят три российские компании и одна болгарская. Кто именно из россиян заинтересовался инвестициями в Болгарию, неизвестно, но, по данным болгарской стороны, среди них есть компании, владевшие крупными казино в Москве.

Не осталась в стороне и Черногория, которая летом становится едва ли не сплошь российской из-за обилия отечественных туристов. Во всяком случае, группа компаний "Корстон", (владелец Korston Hotel & Casino Moscow) готовится развивать игорный бизнес в отеле The Queen of Montenegro – он принадлежит "Корстон" на 75 процентов.

Закрытое московское казино. Фото Мити Алешковского для "Ленты.Ру"

Другие российские бизнесмены забрались еще дальше. Бывший владелец казино Premier, Goodwin и "Слава", группа СЭТ, будет развивать проекты в Аргентине, а также Эстонии и той же Черногории, сообщал в середине июля порта BFM. А Ritzio Entertainment, известная по игровым залам "Вулкан" и "Миллионъ", уже открыла свои отделения в Германии и Италии. Кроме того, компания планирует развиваться за счет Южной Европы – Хорватии, Сербии и, опять-таки, Черногории.

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

Что касается амбициозных проектов по возведению больших игорных комплексов в СНГ, то они имеют один очевидный минус: большинство из них находится в стадии планирования. Следовательно, их возведение займет по крайней мере несколько лет. За это время могут ожить игорные зоны внутри России. А, может, и сам запрет на игорный бизнес отменят…

Россия и Турция подписали соглашение о строительстве "Южного потока"

Четверг, 06 Августа 2009 г. 19:56 + в цитатник
Премьер-министры России и Турции Владимир Путин и Реджеп Эрдоган подписали протокол о сотрудничестве в газовой сфере, предусматривающий предварительное согласие турецкой стороны на строительство газопровода "Южный поток" (South Stream) в своих территориальных водах. Об этом сообщает "Интерфакс".

Согласно документу, Турция также даст России разрешение на проведение в турецких территориальных водах изысканий по "Южному потоку".

Предполагается, что "Южный поток" обеспечит поставки газа в Европу в обход Украины. Маршрут газопровода пока точно не определен, однако планируется, что сначала он будет идти из России в Болгарию по дну Черного моря, а затем разделится на две ветки. Одна из них будет транспортировать газ в Грецию и на юг Италии, а вторая - в Сербию, Венгрию и Австрию.

О том, что турецкая сторона согласилась пустить "Южный поток" через свои воды, стало известно 5 августа, когда об этом сообщали РИА Новости со ссылкой на замглавы аппарата правительства России Юрия Ушакова. Тогда же сообщалось, что согласие Турция дала за месяц до визита российского премьера. Источники газеты "Коммерсант" упоминали, что в случае если турецкая сторона даст России допуск в территориальные воды, то "6 августа можно будет считать днем рождения South Stream".

В российско-турецком газовом соглашении также упомянуты планы сотрудничества сторон по проекту "Голубой поток - 2". Эта ветка газопровода пройдет параллельно "Голубому потоку - 1" из РФ в Турцию, который уже построен, а затем через ближневосточные государства будет направлен в Израиль. В ближайшее время "Газпром" намерен провести переговоры с Турцией и Израилем относительно реализации данного проекта.

Стороны также договорились о возведении в Турции крупных подземных хранилищ газа (ПХГ), передает РИА Новости.

Кроме того, представители России и Турции подписали 6 августа протокол о сотрудничестве в сфере атомной энергетики. Согласно документу, в Турции примерно в 200 км от Антальи будет построена первая в стране АЭС. Пока единственным претендентом на проект является консорциум российских "Атомстройэкспорта" и "Интер РАО ЕЭС", а также турецкой Park Teknik.

При этом стороны смогли согласовать стоимость электроэнергии, которую будет производить будущая АЭС. Первоначальное предложение консорциума составляло 21,13 цента за киловатт-час, однако теперь цена снижена до 15,33 цента за киловатт-час.

Лечение интернет-зависимости закончилось смертью китайского подростка

Четверг, 06 Августа 2009 г. 00:36 + в цитатник
Китайский подросток, лечившийся от интернет-зависимости, скончался в реабилитационном центре, сообщает The Times. Родители ребенка обратились к региональным властям с просьбой провести справедливое расследование причин инцидента.

15-летний Дэн Сэньшань (Deng Senshan) был помещен в реабилитационный центр в Гуанси-Чжуанском автономном районе Китая 1 августа. Родители подростка хотели таким образом помочь ему избавиться от интернет-зависимости.

По словам отца мальчика, сотрудники медицинского учреждения поместили ребенка в одиночную камеру через несколько часов после его прибытия в центр. Около трех часов 2 августа Дэн Сэньшань скончался в больнице города Наньнин.

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

Отец скончавшегося подростка заявил, что сотрудники реабилитационного центра избили пациента из-за его медлительности во время пробежки, что и привело к смерти мальчика. По словам работника похоронного бюро, куда было доставлено тело Дэна Сэньшаня, с момента смерти прошло более двух дней, однако результатов судебной экспертизы он так и не получил.

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

В ноябре 2008 года органы здравоохранения Китая официально признали интернет-зависимость болезнью. Были разработаны диагностические критерии и рекомендации по лечению данного расстройства. Психиатрическим клиникам предписано оказывать помощь пациентам с этим заболеванием.

В июне 2009 года появились сообщения о том, что в одной из клиник для лечения интернет-зависимости используется электросудорожная терапия. 14 июля китайский Минздрав признал такое лечение небезопасным и рекомендовал медицинским учреждениям отказаться от его использования.


Поиск сообщений в xpackpackax
Страницы: 24 ... 17 16 [15] 14 13 ..
.. 1 Календарь