• Авторизация


Спайс 30-09-2009 16:33


Шаманы, жрецы, ведуны с древнейших времен использовали различные травяные смеси для вхождения в "мистические состояния".
Сегодня появился спайс. Миксы можно приобрести во многих городах России, в том числе, в Москве.
Ароматические смеси Spice - это сочетание различных экзотических трав. Производители обещают, что в миксах нет никакой химии.
А вы что думаете на этот счет?
комментарии: 2 понравилось! вверх^ к полной версии
новый год 2010 30-09-2009 16:15


Готовь сани летом!
Это я к тому, что самое время обдумать новый год 2010. Итак, наступает новый год тигра, стало быть и встретить его надо как-то соответсвующе, чтобы угодить строптивому зверю. Чтобы составить новогоднее меню заходите на prazdnik-land.ru/celebrations/ny. Тут же вы найдете новогодние костюмы, оригинальные поздравления с новым годом и много другое.
Счастливых праздников :)
комментарии: 0 понравилось! вверх^ к полной версии

Наручные швейцарские часы 30-09-2009 16:00


Теперь "выглядеть на миллион" под силу каждому!
Символ успешного человека с хорошим вкусом это, конечно же, стильные наручные часы. К сожалению, далеко не каждый мог себе это позволить - дорогая всё-таки вещь.
С недавних пор всё гораздо проще: теперь можно получить стильный аксессуар за деньги, на порядок меньшие - в продаже появились полные копии часов именитых марок. Мало того, что дизайн абсолютно идентичен, так ещё и добрая половина деталей оригинальная. В итоге вы получаете качественное изделие дорогой марки по доступной цене :)
часики
комментарии: 0 понравилось! вверх^ к полной версии
Компания, специализирующаяся на аренде офисов и помещений 30-09-2009 15:48


Отличная возможность снять офис непосредственно у владельца. Только честная и юридически чистая деятельность. Корпорация «АС» практикует индивидуальный подход к каждому арендатору, таким образом довольным останется даже самый требовательный клиент.
Для наиболее удобного и продуктивного поиска объекта разработана система классификации: помещения условно разделены на классы «А», «B», «С», «D». Чтобы узнать подробнее об этом, перейдите по ссылке, представленной ниже и начните свое сотрудничество с «АС» прямо сейчас.
снять офис без посредника
комментарии: 0 понравилось! вверх^ к полной версии
Мини отель Санкт Петербурга "Невский клуб" 30-09-2009 15:36


Мини отели Санкт Петербурга "Невский клуб"
Мини отель, расположенный в самом центре города. В отеле 22 номера 4-х категорий: люкс, полулюкс, стандарт, эконом-класс. Есть возможность выхода в интернет. Телефон и телевизор в каждом номере.
Гостям будет предложен полный спектр туристических услуг. Приветливые администраторы общаются с иностранными постояльцами на английском языке, что немаловажно для комфортного отдыха.
отели Петербурга
комментарии: 0 понравилось! вверх^ к полной версии
Интернет-магазин "Бумажно-беловая продукция АЛЬТ" 29-09-2009 20:58


Интернет-магазин "Бумажно-беловая продукция АЛЬТ"
Тетради, ежедневники, блокноты, товары для художников, папки из высококачественных практичных материалов.
Огромный ассортимент товаров, превосходных по своим техническим характеристикам.
Компания "АЛЬТ" также заостряет своё внимание на индивидуализации канцелярских товаров: теперь каждый человек, независимо от сферы деятельности, выберет продукцию по своему собственному вкусу. Особенно понравится возможность выбора школьникам, чьи канцтовары не только инструмент, но и аксессуар.
тетради дисней
школьные дневники


комментарии: 0 понравилось! вверх^ к полной версии
Шины 29-09-2009 20:27


Интернет магазин шин.
Лучшие модели от именитых производителей по разумным ценам! "Обувь" для любых типов автомобилей и дорог. Специальные предложения на сезонные товары - зимние шины. Не забывайте о своей безопасности и безопасности близких людей: комплект резины для автомобиля, соответствующий сезону - залог уверенной безаварийной езды.
Для поиска подходящего комплекта шин воспользуйтесь удобным сервисом поиска. Задайте интересующие вас параметры и выберите подходящий вариант!
шины Yokohama
шины Michelin
комментарии: 0 понравилось! вверх^ к полной версии
Определение позиций сайта 29-09-2009 19:29


Определение позиций сайта в популярных поисковых системах.
Подробный и широкий анализ вашего сайта за считанные секунды.
Для знакомства с системой воспользуйтесь демо-режимом просмотра сервиса, однако куда продуктивнее пройти регистрацию прямо сейчас и начать работу по анализу позиций и продвижению вашего сайта. Для расчета ресурсов, необходимых для продуктивного продвижения сайта создан специальный калькулятор!
определение позиций сайта в поисковых системах
комментарии: 0 понравилось! вверх^ к полной версии
Самоучитель рисования Меха (Mecha) 29-09-2009 16:25


Меха (ударение на первый слог) - это японский робот. Честно признаться, я не мастер рисовать японских роботов. Давайте просто рассмотрим некоторые базовые аспекты, которые могут навеять вам какие-либо ценные мысли.
[показать]
Шаг 1 : Структура
Как и всегда, я начинаю с «болванчика». У роботов можно не церемониться с пропорциями. Не надо делать их слишком похожими на человеческие.
Я убедился, что плечи широкие и ноги достаточно широко расставлены, чтобы выдержать вес тела.

[показать]
Шаг 2: Заполняем плотью
Этот шаг отличается от аналогичного, когда мы рисуем человека. Здесь нам не понадобятся традиционные конусы и цилиндры. Если их использовать, получается меха, похожий на трансформера.

Этот будет громоздким и неуклюжим. Мощная броня, сенсоры…и т.д.

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

Какую функцию будет исполнять меха? Работать в космосе или на земле? Поднимать тяжести или быстро бегать? Будет приспособлен к неблагоприятным условиям?

[показать]
Шаг 3: Детализация
Теперь, когда мы наконец покончили с формой, начнем стирать ненужные линии. Я добавил различные панельки с кнопками и дырочками везде, кроме грудной клетки - там находится мотор.
Этот робот почти три метра высотой и не управляется человеком.

[показать]

Шаг 4: Обводим

Добавляем еще деталей и обводим ручкой. Детали обводите тоньше. Машины выглядят лучше, когда имеют жирную линию в качестве контура.
комментарии: 0 понравилось! вверх^ к полной версии
Самоучитель рисования (манга) 29-09-2009 16:22


В этом уроке я обучу вас рисовать типичные аниме-лица под разными углами. Хотя все они типичные женские , пропорции, которые я покажу вам, применимы ко всем персонажам, каких только вы захотите нарисовать. ^_^
[показать]
Вид спереди
Начните с рисования большого круга. Разделите его на трети по горизонтали, и проведите вертикальную центральную линию. Не беспокойтесь, если трети получились не равными; пропорции могут варьироваться в зависимости от стиля персонажа, в любом случае, все нормально, если трети не одинаковые.
[показать]
Дальше рисуем небольшую короткую черточку прямо под кругом. На этой картинке ее расстояние от круга равно высоте нижней трети. Эта черточка будет подбородком, так что следите, чтобы она не была точкой, иначе подбородком будет острым. Изменение расстояния этой черты от круга — один из способов изменить черты лица. Далее, рисуем две тонкие диагональные линии. Они должны быть касательными к сторонам круга и проходить через края будущего подбородка
[показать]
Далее необходимо наполнить лицо «плотью» чтобы оно не было таким худющим. Нарисуйте две скругленных треугольных фигуры по краям лица. Варьируя толщину этих фигур и высоту скул (это то место, где треугольные фигуры перегибаются) можно добиться изменения характера персонажа, которого вы рисуете.
[показать]
Теперь, когда у вас есть базовая форма лица, «подложка, вам может захотеться изобразить глаза, рот и нос. Положение глаз немного отличается у разных героев, но в целом они должны быть помещены внутрь нижней трети круга. Нос составляет половину высоты все той же нижней части круга и рисуется прямо до ней, а рот — под носом (странно, да? :) — прим.пер).
[показать]
Теперь сотрите эти диагональные касательные и детализируйте глаза. Сейчас, когда у вас есть полностью отрисованная базовая форма лица вы можете добавлять в нее все, что вам заблагорассудится: волосы, головные уборы, шрамы, украшения, татуировки и т.д…
*
*
[показать]
Вид «три четверти»
Начните с большого круга, как и в предыдущем случае, только теперь поверните ве вспомогательные линии влево. Эта часть головы представляет собой трехмерную сферу, так что, поворачивая линии, смотрите, чтобы они шли именно по сфере. Разделите шар на трети по горизонтали и на половинки по вертикали. Конечно, теперь, когда мы повернули голову на три четверти, эти части будут неравными, но надо следить за тем, чтобы они выглядели так же, как и в виде спереди, если мы повернем голову героя обратно.
[показать]
Продолжите центральную линию вниз, и выберите точку вдоль нее для подбородка. Расстояние до этой точки должно быть чуть больше нижней части шара. Проведите две касательных к шару, идущих через подбородок. Убедитесь, что левая прямая идет под более отвесным углом, чем правая..
[показать]
Заполняем лицо плотью: рисуем скругленные треугольники по сторонам от касательных. Левая сторона лица искривлена под шаром, изгиб правой должен быть мягким и пологим. Чтобы нарисовать все правильно, может потребоваться некоторая практика.
[показать]
комментарии: 0 понравилось! вверх^ к полной версии
4. Линейный вычислительный процесс 29-09-2009 16:16


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


4.1. Оператор присваивания



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

переменная := выражение;

Знак := читается как "присвоить".

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

k:=k+2;

текущее значение переменной k увеличится на 2.

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

Приведем примеры.

1. Записать оператор присваивания, который позволяет вычислить расстояние между двумя точками на плоскости с координатами (x1, y1) и (x2, y2).

Оператор будет иметь вид

d:=sqrt(sqr(x1-x2)+sqr(y1-y2));

2. Записать последовательность операторов присваивания, обеспечивающих обмен значениями переменных x и y в памяти компьютера.

c:=x; x:=y; y:=c;

Здесь с -- дополнительная переменная того же типа, что x и y, через которую осуществляется обмен. Грубой ошибкой было бы, например, попытаться выполнить обмен операторами x:=y; y:=x; -- ведь уже после первого из них мы имеем два значения y, а исходное значение x потеряно.


4.2. Оператор ввода



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

read(список_переменных);

readln(список_переменных);

Имена переменных в списке перечисляются через запятую. Здесь и далее список данных, передаваемых любому оператору (а позднее и написанным нами подпрограммам), мы будем называть параметрами. Таким образом, параметрами оператора (точней, стандартной процедуры) read являются имена переменных, описанных ранее в разделе var.

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

Оператор readln отличается от read только тем, что все переменные должны быть введены в одну строку экрана, клавиша Enter нажимается один раз по окончании ввода. Форма записи readln используется, в основном, для ввода строк текста, для ввода числовых значений лучше использовать read, т. к. в этом случае пользователь может вводить данные более свободно (и в одну, и в несколько строк экрана).

Если пользователь вводит данные недопустимого типа (например, строку текста вместо числа), то выводится системное сообщение об ошибке и работа программы прерывается.

В качестве примера организуем ввод исходных данных для решения квадратного уравнения:

var a,b,c:real;

...

read (a,b,c);

Для задания значений a=1, b=4, c=2.5 на экране вводится:

1_4_2.5¬

Здесь и далее "_" означает пробел, а "¬" -- нажатие Enter. Другой вариант ввода с клавиатуры:





2.5¬

Третий вариант:



4_2.5¬

Во всех вариантах пробелов может быть и несколько, лишние будут проигнорированы оператором.

Как правило, перед оператором ввода ставится оператор вывода, служащий приглашением к вводу и поясняющий пользователю, что именно следует сделать (см. п. 4.3).


4.3. Оператор вывода



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

write(список);

writeln(список);

Элементы списка перечисляются через запятую.

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

Оператор writeln отличается от write тем, что после вывода значения последнего элемента списка выполняется перевод курсора на следующую строку экрана.

Приведем примеры.

1. Нужно дать пользователю возможность ввести с клавиатуры число, затем программа возведет это число в квадрат и выведет результат на экран.

var a,a2:integer;

...

writeln ('Введите целое число:');

{это приглашение к вводу}

read (a);

a2:=sqr(a);

writeln ('Квадрат числа=',a2);

Если ввести значение a=2, на экране будет напечатано

Квадрат числа=4

|

Символ |здесь и далее обозначает курсор. Видно, что оператор writeln перевел курсор на следующую
Читать далее...
комментарии: 0 понравилось! вверх^ к полной версии
3. Арифметические выражения 29-09-2009 16:13


Арифметические выражения (АВ) строятся из операндов, которыми могут быть константы, переменные и стандартные функции. В АВ также входят арифметические операции и круглые скобки. В языке Паскаль определено 6 арифметических операций, перечислим их в соответствии с приоритетом, то есть, старшинством (табл. 3.1). Операции с одинаковым приоритетом равноправны между собой и выполняются слева направо, как и в математике.



Табл. 3.1. Арифметические операции языка Паскаль
Приоритет
Знак операции
Описание операции

1
*
умножение

/
деление

div
деление 2 целых значений с отбрасыванием остатка

mod
взятие остатка от деления 2 целых значений

2
+
сложение

-
вычитание




Операции div и mod определены только для целочисленных операндов. Приведем пример их использования:

var y,c,n:integer;

. . .

y:=2009;

c:=y div 100;

n:=y mod 100;

Здесь переменная c получит значение 20, а n -- значение 9.

Примеры арифметических выражений мы приведем после рассмотрения стандартных функций языка Паскаль.

Стандартные функции служат для выполнения элементарных математических расчетов, часто требуемых при написании программ. Разработчики Паскаля стремились сделать его программное ядро максимально компактным, поэтому в него не вошел ряд функций, обычно имеющихся в других языках, таких, как вычисление максимума и минимума, возведение числа в произвольную степень и др. Физически коды стандартных функций хранятся в стандартной библиотеке Паскаля -- файле с именем turbo.tpl. Все функции оформляются одинаково: после имени функции следует ее аргумент, заключенный в круглые скобки. Если аргументов несколько, они разделяются запятыми. Информация об основных стандартных функциях представлена в табл. 3.2.



Табл. 3.2. Стандартные функции языка Паскаль
Математическая запись
Запись на Паскале
Пояснение
Тип

аргумента и результата

|x|
abs(x)
Модуль аргумента x
Integer (I) или Real (R)

x2
sqr(x)
Квадрат аргумента x
аргумент - I или R, результат - r

sin x

cos x

arctg x
sin(x)

cos(x)

arctan(x)
Остальные тригонометрические функции выражаются через эти
аргумент - I или R, результат - R

ex

ln x
exp(x)

ln(x)
Экспонента и натуральный логарифм
аргумент - I или R, результат - R


sqrt(x)
Квадратный корень от аргумента x
аргумент - I или R, результат - R

p
pi
Функция без аргументов, вернет число p
R


trunc(x)
Функция отбрасывает дробную часть аргумента, аргумент не округляется
аргумент R, результат I


frac(x)
Функция выделяет

дробную часть своего

аргумента
R


round(x)
Округление вещественного числа до ближайшего целого
аргумент R, результат I




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

Приведем примеры арифметических выражений.

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

2. Возвести величину a в произвольную степень x. Так как в Паскале нет функции возведения в произвольную степень, воспользуемся формулой ax=ex*ln a:

a:=2.5; x:=0.25;

ax:=exp(x*ln(a));

Обратите внимание, что все круглые скобки в выражении должны быть парными. Другой пример применения этого способа: = exp(1/3*ln(x)).

3. Вычислить sin2x . Запись на Паскале: sqr(sin(x)). Сравните с выражением sin x2, которое записывается как sin(sqr(x)).

4. Вычислить k=tg(t). Т. к. функции тангенса в Паскале нет, распишем тангенс в виде k:=sin(t)/cos(t);.

5. При необходимости изменить обычное старшинство операций в записи выражения используются дополнительные круглые скобки. Например, правильная запись выражения выглядит как y:=(a+b)/2;. Запись y:=a+b/2; неверна, т. к. это означает .

6. В записи выражений нельзя пропускать знак *, как часто делается в математике: b2-4ac записывается как sqr(b)-4*a*c. Нельзя писать sin*x или sin x, после имени функции может следовать только ее аргумент в круглых скобках.

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

Например, для переменных

var i,j:integer; f:real;

выражение i+4*j имеет целый тип, и его результат можно записать в целую переменную. Выражение f+i*0.5 дает вещественный, результат, который должен быть записан в вещественную переменную.

Операция деления / в Паскале всегда дает вещественное число. Для деления целых чисел с целым результатом (остаток отбрасывается) используйте
Читать далее...
комментарии: 0 понравилось! вверх^ к полной версии
2. Данные в языке Паскаль 29-09-2009 16:12


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

· имена могут включать латинские буквы, цифры и знак подчеркивания (для простоты опустим некоторые другие символы, разрешенные в именах);

· имя состоит из одного слова; если требуется пробел в имени, он заменяется на подчеркивание: так, My_1 будет правильным идентификатором, а My 1 -- нет;

· имя всегда начинается с буквы: возможен объект с именем A1, но не 1A; прописные и строчные буквы в именах не различаются Паскалем: x1 и X1 -- это одна и та же величина;

· имена не могут совпадать с зарезервированными в языке служебными словами, обозначающими разрешенные в языке операции над данными: например, нельзя назвать Begin или BEGIN ни одну величину в программе, так как begin --зарезервированное служебное слово, а прописные и строчные буквы в служебных словах также не различаются. Познакомиться с большинством служебных слов мы сможем в процессе изучения языка.


2.1. Константы



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

Числовые константы служат для записи чисел. Различают следующие их виды:

Целочисленные (целые) константы: записываются со знаком + или -, или без знака, по обычным арифметическим правилам:

-10 +5 5

Вещественные числа могут записываться в одной из двух форм:

обычная запись: 2.5 -3.14 2. -- обратите внимание, что целая часть отделяется от дробной символом точки;

экспоненциальная ("научная") форма: в этой записи вещественное число представляется в виде m*10p, где m -- мантисса или основание числа, 0.1≤|m|≤1, p -- порядок числа, заданный целочисленной константой. Действительно, любое вещественное число можно представить в экспоненциальной форме:

-153.5 -0.1535*103

99.005 0.99005*102

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

-153.5 -0.1535*103 -0.1535E3 или -1.535E02

99.005 0.99005*102 0.99005E+2 или 9.9005e+01

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

1030 1e30

-1020 -1E20

10-30 1E-30

Поскольку размер памяти, отводимой под мантиссу и порядок, ограничен, то вещественные числа всегда представляются в памяти компьютера с некоторой погрешностью. Например, простейшая вещественная дробь 2/3 дает в десятичном представлении 0,666666... и, независимо от размера памяти, выделяемой для хранения числа, невозможно хранить все его знаки в дробной части. Одной из типичных проблем программирования является учет возможных погрешностей при работе с вещественными числами.

Кроме числовых констант существуют и другие их виды:

логические константы служат для проверки истинности или ложности некоторых условий в программе и могут принимать только одно из двух значений: служебное слово true обозначает истину, а false -- ложь;

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

'Y' 'я' ' '

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

К символьным также относятся константы вида #X, где X -- числовое значение от 0 до 255 включительно, представляющее собой десятичный ASCII-код символа. Таблицы ASCII-кодов, используемых операционными системами DOS и Windows, приведены в Приложении 1. Например, значение #65 будет соответствовать коду буквы 'A' латинской. Обработка нажатий клавиш и расширенные коды клавиатуры описаны в гл. 24 и Приложении 5.

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

'Введите значение X:'

'Ответ='

Если в строковой константе необходимо записать сам символ апострофа, это делается так же, как для символьных констант.

Именованные константы перечисляются в разделе описаний программы оператором следующего вида:

const Имя1=Значение1;

Имя2=Значение2;

...

ИмяN=ЗначениеN;

Ключевое слово const показывает начало раздела описаний именованных констант. Ясно, что
Читать далее...
комментарии: 0 понравилось! вверх^ к полной версии
Часть 1. Основы языка Паскаль 29-09-2009 16:11


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



Написанию программы всегда предшествует разработка некоторого плана (алгоритма) решения задачи. Кратко опишем основные понятия теоретической информатики, связанные с алгоритмами.


1.1. Алгоритм



Алгоритм -- это однозначно определенная последовательность действий, записанная на понятном исполнителю алгоритмическом языке и определяющая процесс перехода от исходных данных к результату.

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


1.2. Свойства алгоритма



Перечислим выделенные в п. 1.1 свойства алгоритма.

· Дискретность -- алгоритм состоит из отдельных инструкций (шагов).

· Однозначность -- каждый шаг понимается исполнителем единственным образом.

· Массовость -- алгоритм работает при меняющихся в некоторых пределах входных данных.

· Результативность -- за конечное число шагов достигается некоторый результат.


1.3. Формы записи алгоритма



Принято выделять 2 основных формы записи алгоритма.

Графическая форма записи (блок-схема) характерна тем, что отдельные шаги алгоритма изображаются геометрическими фигурами, а последовательность выполнения шагов -- связями между этими фигурами. На рис. 1.1 указаны основные элементы блок-схем.





Рис. 1.1. Основные элементы блок-схем



Указанные на рис. 1.1 геометрические фигуры интерпретируются так:

Прямоугольник -- любая последовательность действий; внутри прямоугольника записываются формулы или словесное описание выполняемых действий;

Ромб -- блок проверки условия; так как любое условие может быть только истинно или ложно, у блока 1 вход и 2 выхода, соответствующие действиям, выполняемым в случаях, когда условие истинно и когда оно ложно. Выходы подписывают символами "+" и "-", "да" и "нет", "1" и "0" и т. п.

Параллелограмм -- блок ввода исходных данных. Внутри фигуры обычно пишется, какие именно данные должны быть введены;

Лист с разрывом -- блок вывода данных. Внутри блока указывается, какие данные или сообщения программа выводит для представления пользователю;

Закругленные прямоугольники -- необязательные блоки начала и конца программы, внутри блоков обычно указываются ключевые слова "нач" и "кон" соответственно;

Последняя фигура служит для изображения циклов, как правило, у нее 2 входа (первый и повторный вход в цикл) и 1 выход, соответствующий завершению циклического процесса.

На рис. 1.2 приведен пример блок-схемы, иллюстрирующей известный процесс решения квадратного уравнения.

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

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

· нач -- начало программы;

· кон -- конец программы;

· если ... то ...иначе -- проверка условия;

· ввод -- ввод данных;

· вывод -- вывод данных;

· для ... от .. до ... нц ... кц -- цикл со счетчиком (нц -- начало цикла, кц -- конец);

· пока ... нц ...кц -- цикл с предусловием;

· нц ... кц ... пока -- цикл с постусловием.





Рис. 1.2. Блок-схема решения квадратного уравнения



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


1.4. Программа и программное обеспечение



Программа -- это реализация алгоритма на конкретном языке программирования. Совокупность существующих программ
Читать далее...
комментарии: 0 понравилось! вверх^ к полной версии
Секреты «Вконтакте» 17-09-2009 10:45


Секреты Вконтакте (vkontakte.ru): 0. Узнавайте обо всех событиях сразу!

Хотите сразу узнавать о новых сообщениях, комментариях к вашим фотографиям, новых статусах друзей и многих событиях Вконтакте? Тогда обязательно установите бесплатную программу «Агент Вконтакте». С ее помощью вы запросто сможете менять свой статус, добавлять в друзья, видеть обновления у ваших друзей а также переписываться с ними так, как это происходит, например, в ICQ. Об обновлениях программа сигнализирует специальным окошком в трее (рядом с часами) что очень удобно. При этом программа не нагружает ваш ПК и позволяет использовать прокси (что особенно актуально для тех, кто работает в офисе и не может жить без «Вконтакте»). Скачивайте «Агент Вконтакте» — будьте онлайн!

Секреты Вконтакте (vkontakte.ru): 1. Просмотр закрытых страниц (профилей)

Это один из самых желанных секретов. Ну кто хоть раз не мечтал посмотреть фотографии шикарной незнакомки, при этом не добавляя ее в друзья? А если доступ к ее странице закрыт? Выход есть! Итак, секрет довольно прост. Необходимым условием является открытость фотоальбома, видеозаписей, аудиозаписей, заметок и т.д. Для начала нужно узнать ID пользователя. Как узнать ID «Вконтакте»? Очень просто! ID — это номер, который идет в УРЛ после «http://vkontakte.ru/id». Например у Павла Дурова ID 1, а у меня — 17110449 (добавляйте в друзья, я не против). После того, как вы узнали ID остается только подставить его в нужный УРЛ. Ниже представлен список «секретных» УРЛ для доступа к различным разделам пользователя. Вместо «*» подставляйте ID нужного вам пользователя.

Записи на стене:
http://vkontakte.ru/wall.php?id=*

Фотоальбомы:
http://vkontakte.ru/photos.php?id=*

Видеозаписи:
http://vkontakte.ru/video.php?id=*

Аудиозаписи:
http://vkontakte.ru/audio.php?id=*

Заметки:
http://vkontakte.ru/notes.php?id=*

Группы:
http://vkontakte.ru/groups.php?id=*

Секреты Вконтакте: 2. Специальные символы для «Вконтакте»

Вы, наверное, замечали, что у некоторых пользователей в имени, статусе или просто в профиле имеются прикольные необычные символы. С клавиатуры их, естественно, ввести нельзя, но секрет прост. Эти символы называются специальными и вводятся посредством HTML кода. Узнать какой код для какого символа «Вконтакте» нужен можно тут. По этому адресу вы найдете практически все коды для «Вконтакте».

Секреты Вконтакте: 3. Лишаемся имени (как убрать имя и фамилию)

Многие хотели бы быть инкогнито как в жизни, так и «Вконтакте». Вы все видите, все знаете, а о вас не знает никто. Это возможно! Вы с легкостью можете создать себе аккаунт без имени. Секрет с одним небольшим минусом — для начала вам нужно будет зарегистрироваться заново.

Заново регистрируемся «Вконтакте». Заполняем все поля кроме «Имя» и «Фамилия».
Копируем в адресную строку браузера код: javascript: this.disabled=true; document.regMe.submit();
Нажимаем «Enter» или кнопочку «Переход» в браузере.
Готово! Вы зарегистрированы без имени и фамилии!
Секреты Вконтакте: 4. Становимся невидимым

Еще один способ приблизиться к человеку-невидимке. Благодаря этому секрету вы сможете ходить по страницам социальной сети, а другие пользователи будут думать, что вы в оффлайне. Но при этом нельзя посещать страницу «profile.php», т.е. свой профиль и главные страницы профилей других пользователей. Есть 3 способа, точнее секрета:

Секрет № 1 (подходит только для Firefox)

Вводим в адресную строку Firefox «about:config». Появятся настройки браузера.
Нам нужно временно запретить переадресацию. Для этого в поле «Фильтр» вводим «network.http.redirection-limit» и меняем его значение на 0. У меня по умолчанию он равнялся 20-ти.
Открываем новую вкладку и заходи на страницу http://vkontakte.ru/login.php и вводим логин и пароль.
Появится сообщение об ошибке. Не волнуйтесь, так и должно быть.
Идем на любую другую страницу «Вконтакте» (кроме «profile.php»).
Возвращаемся на вкладку с настройками и обратно меняем параметр «network.http.redirection-limit» на то, что было по умолчанию.
Секрет № 2 (подходит только для Opera)

Заходим в «Инструменты» > «Настройки» > «Дополнительно» > «Сеть».
Убираем галочку «Включить автоматическое перенаправление».
Повторяем действия для браузера Firefox, начиная с 3 пункта.
Секрет № 3 (простой, но требует времени)

Заходим в раздел «Личные сообщения»
Ждем 15 минут (тайм-аут для соединения с «Вконтакте»).
Все готово. Можно перемещаться по страницам социальной сети, кроме «profile.php».
Секрет № 4

Тоже самое можно сделать при помощи программы Vk A-Vision. Речь о программах для «Вконтакте» пойдет в одном из следующих постов. Обязательно подписывайтесь на RSS, чтобы не пропустить.

Секреты Вконтакте: 5. Как жениться на себе

Особой пользы в этом секрете нет, но выделиться перед друзьями все же хочется. Жениться на себе довольно просто. Для началу объясню как это делает в браузере Opera. Заходите на
Читать далее...
комментарии: 2 понравилось! вверх^ к полной версии
Без заголовка 10-09-2009 17:10


Меню

Стандартная программа содержит поле MenuBar типа ТМепиВаr. По умолчанию Метод TApplicatlon.InitMenuBar устанавливает это поле в NIL, что означает отказ от меню. Если Вы хотите использовать меню в Вашей программе, необходимо перекрыть этот метод. В следующем примере создается двухуровневое меню, показанное на рис.23. 1.



Рис. 23.1. Двухуровневое меню

Опцию «Подменю...» можно выбрать следующими способами:
нажатием клавиш F10 - <смещение указателя> - Enter;
командой Alt-S;
отметкой мышью.

Опции «Первый выбор» и «Второй выбор» можно выбрать клавишами F1 и F2 без развертывания подменю. После развертывания подменю можно использовать те же клавиши, а также использовать клавиши с цифрами 1 и 2, отметку мышью или смещение указателя к нужной опции и Enter. Опция «Третий выбор» доступна только после развертывания подменю. Выбор каждой из этих трех опций приводит к появлению на экране окна с сообщением. Кроме того, опция «Третий выбор» попеременно запреща-ет или разрешает действие команд cm1, cm2 и cmQuit.

{$X+}

Uses Objects,App,Menus,Drivers,Views,MsgBox;

type

MyApp = object (TApplication)

Procedure InitMenuBar; Virtual;

Procedure HandleEvent(var Event: TEvent); Virtual;

end;

const

cm1 = 201;

cm2 = 202;

cm3 = 203;

{----------------}

Procedure MyApp. InitMenuBar;

var

R: TRect;

begin

GetExtent (R) ;

R.B.Y := succ(R.A.Y) ;

MenuBar := New ( PMenuBar , Init(R,

NewMenu ( {Главная полоса меню}

NewSubMenu ( {Первый элемент главного меню}

' ~S~ Подменю. ..', hcNoContext,

NewMenu ( {Определить выпадающее подменю}

NewItem( '~1~ Первый выбор ' , ' F1 ' , kbF1, cm1, 0,

NewItem('~2~ Второй выбор' , ' F2 ' , kbF2, cm2, 0,

NewLine( {Определить разделяющую линию}

NewItem('~3~ Третий выбор' , ' ' , 0, cm3, 0,

NIL) ) ) ) ) ,

NewItem( {Второй элемент главного меню}

'-ESO Выход' , '~ESC~' , kbEsc,cmQuit, 0, NIL))))); end {MyApp. InitMenuBar} ;

{------------------}

Procedure MyApp . HandleEvent ;

const

Flag: Boolean = True;

cms = [cm1, cm2, cmQuit] ;

begin

Inherited HandleEvent (Event) ;

case Event . Command of

cm1: MessageBox (#3 'Первый выбор', NIL,0);

cm2 : MessageBox (#3 'Второй выбор', NIL,0);

cm3 :

begin

MessageBox (#3' Третий выбор', NIL,0);

if Flag then

DisableCommands (cms)

else

EnableCommands (cms) ;

Flag := not Flag

end

end

end {MyApp .HandleEvent } ;

{------------------}

var

P: MyApp;

begin

P.Init;

P.Run;

P.Done

end.
комментарии: 0 понравилось! вверх^ к полной версии
Без заголовка 10-09-2009 17:09


Строка статуса

В следующей программе создается строка статуса, содержание которой зависит от установленного контекста подсказки (определяется значением поля TProgram.HelpCtx). В зависимости от действий пользователя эта строка будет содержать текст

Esc Выход F1 Сменить контекст на 1

Однажды в студеную, зимнюю пору

либо

ESC Выход F2 Сменить контекст на 0

Я из лесу вышел. Был сильный мороз...

Переключение строки осуществляется клавишами F1 и F2, для выхода из программы используется клавиша Esc.

Uses Objects,App,Menus,Drivers,Views;

type

PMyStatusLine = TMyStatusLine;

TMyStatusLine = object (TStatusLine)

Function Hint(Cntx: Word): String; Virtual;

end;

MyApp = object (TApplication)

StatLine: PMyStatusLine;

Constructor Init;

Procedure InitStatusLine; Virtual;

Procedure HandleEvent(var Event: Tevent); Virtual;

end;

const

cmCntxl =200;

cmCntx2 = 201;

{-----------------}

Constructor MyApp.Init ;

begin

Inherited Init;

Insert (StatLine) {Использовать нестандартную строку статуса}

end {MyApp .Init} ;

Procedure MyApp. Ini tstatusLine ;

{Инициация нестандартного поля MyApp. StatLine}

var

R: Trect;

begin

GetExtent (R) ;

R.A.Y := pred(R.B.Y) ;

StatLine := New(PMyStatusLine, Init(R,

NewStatusDef (0, 0, {Первый вариант строки}

NewStatusKey ( ' ~Esc~ Выход1 , kbEsc, cmQuit,

NewStatusKey (' ~F1~ Сменить контекст на 1', kbF1 , cmCntxl , NIL) ) ,

NewStatusDef (1, 1, {Второй вариант строки}

NewStatusKey (' ~Esc~ Выход ', kbEsc, cmQuit,

NewStatusKey (' ~F2~ Сменить контекст на 0 ' , kbF2 , cmCntx2 , NIL)) ,

NIL) ) ) ) ; end {MyApp. Ini tstatusLine} ;

{--------------------}

Procedure MyApp. HandleEvent;

{Переключение контекста и обновление строки статуса}

begin

Inherited HandleEvent (Event) ;

case Event . Command of

cmCntxl: HelpCtx := 1;

cmCntx2: HelpCtx := 0;

else

ClearEvent (Event) ;

end;

if Event. What <> evNothing then

begin

StatLine. Update;

ClearEvent (Event)

end

end {MyApp . HandleEvent } ;

{---------------------}

Function TMyStatusLine. Hint (Cntx: Word):String;

{Переключение поля подсказки}

const

Prompt: array [0..1] of String =(

'Однажды в студеную, зимнюю пору',

'Я из лесу вышел. Был сильный мороз...');

begin

Hint : = Prompt [Cntx]

end {TMyStatusLine.Hint} ;

{---------------------}

var

P : MyApp ;

begin

P.Init;

P . Run ;

P . Done

end .
комментарии: 0 понравилось! вверх^ к полной версии
Без заголовка 10-09-2009 17:08


Другие методы

Порядок вызова наследуемого метода зависит от конкретного алгоритма. В большинстве случаев наследуемый метод вызывается первым, но могут использоваться и другие последовательности. Особое значение имеет вызов наследуемого обработчика событий HandleEvent. В самом общем виде структура нового обработчика будет такой:

Procedure MyObject.HandleEvent(var Event: TEvent);

begin

{Изменение наследуемых свойств}

{Вызов наследуемого обработчика}

{Добавление новых свойств}

end;

Таким образом, вначале Вы должны запрограммировать те действия, которые изменяют стандартное поведение перекрытого обработчика, затем вызвать его и, наконец, осуществить новую обработку событий. Разумеется, любая из этих трех частей может отсутствовать. Например, стандартный обработчик TDialog.HandleEvent лишь расширяет свойства наследуемого метода TWindow.HandleEvent, добавляя в него обработку событий от клавиатуры и событий-команд:

Procedure TDialog.HandleEvent(var Event: TEvent);

begin

Inherited HandleEvent(Event);

case Event.what of

evKeyDown:

.....

evCommand:

.....

end ;

end;

Этот обработчик перехватывает все события от клавиатуры и мыши, в том числе и нажатие на клавишу Tab. Если Вы хотите обработать событие от клавиши Tab особым способом, Вы должны перехватить это событие до вызова стандартного обработчика. Например:

Procedure TNoTabsDialog.HandleEvent(var Event: TEvent);

begin

if (Event.What = evKeyDown) then

if (Event.KeyCode = kbTab) or

(Event.KeyCode = kbShiftTab) then

ClearEvent(Event); Inherited HandleEvent(Event);

end;
комментарии: 0 понравилось! вверх^ к полной версии
Без заголовка 10-09-2009 17:08


Деструктор

Вызывайте наследуемый метод после реализации дополнительных действий:

Procedure MyObject.Done;

begin

{Реализация дополнительных действий}

{Вызов наследуемого деструктора Done}

end;

Работа деструктора проходит в обратном порядке по отношению к конструктору. Вначале Вы должны освободить всю дополнительно распределенную динамическую память, а уже затем вызвать наследуемый деструктор, чтобы уничтожить весь объект.
комментарии: 0 понравилось! вверх^ к полной версии
Без заголовка 10-09-2009 17:07


Конструктор

Вызывайте наследуемый Метод до реализации дополнительных действий:

Procedure MyObject.Init(.....);

begin

{Вызов наследуемого конструктора Init}

{Реализация дополнительных действий}

end;

Такая последовательность необходима по той простой причине, что вызов наследуемого конструктора приводит к обнулению всех дополнительных полей объекта MyObject. Если, например, Вы используете следующий фрагмент программы:

type

MyObject = object (TWindow)

Value: Word;

Ok : Boolean;

Constructor Init(var Bounds: TRect; ATitle: TTitleStr;

AValue: Word; AOk: Boolean);

end;

Constructor MyObject.Init;

begin

Inherited Init(Bounds, ATitle, wnNoNumber);

Value := 16;

Ok := True;

end;

то дополнительные поля Value и Ok получат нужные значения 16 и True. Однако, если обращение TWindow.Init (Bounds, ATitle, wnNoNumber); поставить после оператора Ok := True, в них будут помещены значения 0 и False. Из этого правила существует одно исключение, связанное с загрузкой коллекции из потока конструктором Load. Дело в том, что в наследуемом методе TCollection.Load реализуется следующий цикл:

Constructor TCollection.Load (var S: TStream);

begin

.....

for I := 0 to Count - 1 do

AtPut(I, GetItem(S));

end;

Если элементами коллекции являются произвольные наборы двоичных данных (не объекты), Вам потребуется перед чтением очередного элемента сначала получить из потока его длину. Следующий пример иллюстрирует сказанное.

type

PDataCollection = ATDataCollection;

TDataCollection = object (TStringCollection)

ItemSize: Word;

Constructor Load(var S: TStream);

Function GetItem(var S: TStream): Pointer; Virtual;

.....

end;

Constructor TDataCollection.Load(var S: TStream);

begin

S.Read(ItemSize, SizeOf(ItemSize));

Inherited Load(S);

end;

Function TDataCollection.GetItem(var S: TStream): Pointer;

var

Item: Pointer;

begin

GetMem(Item, ItemSize);

S.Read(Item, ItemSize);

GetItem := Item;

end;

В этом примере конструктор Load сначала загружает из потока поле ItemSize, содержащее длину читаемого элемента. Затем вызывается конструктор TCollection.Load, в котором осуществляется вызов GetItem. Новый GetItem использует поле ItemSize, чтобы определить размер читаемых данных, и резервирует нужный буфер в динамической памяти. Разумеется, запись полиморфных коллекций в поток должна происходить в том же порядке, т.е. сначала записывается длина очередного элемента, а уже потом - его данные.
комментарии: 0 понравилось! вверх^ к полной версии