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


Использование драйвера ASCII для файлов с разделительной запятой 06-10-2009 22:09


Delphi (и BDE) имеют способность использовать ASCII файлы для хранения таблиц. Драйвер ASCII имеет возможность транслировать значения данных ASCII-поля фиксированной длины или файла с разделительной запятой в поля и величины, которые могут отображаться компонентом TTable. Трансляция ASCII файла целиком зависит от сопровождающего файла схемы (Schema File). Файл схемы для файла ASCII данных определяет различные атрибуты, необходимые для преобразования данных ASCII файла в значения отдельных полей. Определения полей для файла с ASCII полями фиксированной длины достаточно простая задача, необходимо знать позиции всех полей, для всех строк они одинаковы. Для файлов с разделительной запятой данный процесс чуть более усложнен из-за того, что не все данные в таком файле во всех строках имеют одинаковую длину. Данный совет как раз и концентрируется на описании этой трудной темы, связанной с чтением данных из файлов с разделительной запятой, имеющих варьируемую длину поля.


Файл схемы

Файл схемы для файла данных ASCII содержит информацию, которая определяет оба типа файла (версии с разделительной запятой и полем с фиксированной длиной), а также определяет поля, которые представлены значениями данных в каждой строке файла данных ASCII. (Все поля файла схемы нечуствительны к регистру, поэтому написание "ascii" равнозначно написанию "ASCII".) Для того, чтобы файл схемы был признан в качестве такового, он должен иметь то же имя, что и файл данных ASCII, для которого он содержит схему, но иметь расширение .SCH (SCHema - схема). Атрибуты описания файла:
File name: Располагаемый в квадратных скобках, данный атрибут определяет
имя файла ASCII данных (с расширением имени файла,
которое должно быть .TXT).

Filetype: Определяет, имеет ли файл ASCII данных структуру файла с
полями фиксированной длины (используется атрибут FIXED) или
файлом с разделительной запятой (со значениями данных, которые
потенциально могут изменять длину (используется атрибут VARYING).

Delimiter: Определяет символ, которым "окантуривают" значения данных типа
String (обычно двойные кавычки, десятичный ASCII код 34).

Separator: Определяет символ, который используется для разделения отдельных
значений данных (обычно запятая). Данный символ должен быть
видимым символом, т.е. не может быть пробелом (десятичный ASCII
код 32).

CharSet: Определяет драйвер языка (используется атрибут ASCII).
Расположенные ниже атрибуты файла являются определениями поля, задающими правила для каждой строки файла данных ASCII. Данные определения служат источником информации для Delphi и BDE, первоначально необходимой для создания виртуального поля в памяти, в свою очередь служащее для хранения значений данных; тип данных виртуального поля определяется после чтения и трансляции данных из ASCII файла, определения размера и применения атрибутов. Различные атрибуты, определяющие поле файла данных ASCII:

Field: Имя виртуального поля (всегда будет "Field"), сопровождаемое
целым числом, определяющим порядковый номер поля относительно
других полей в файле данных ASCII. Например, первое поле -
Field1, второе Field2, и т.д..

Field name: Определяет выводимое имя поля, отображаемое в виде
заголовка колонки в TDBGrid. Соглашения имен для
таблиц ASCII такие же, как и для таблиц Paradox.

Field type: Определяет, какой тип данных BDE должен использоваться при
трансляции значений данных каждого поля и сообщает
Delphi тип виртуального поля, которое необходимо создать.

Используйте определение Для значений типа
----------------------- ----------------------------
CHAR Символ
FLOAT 64-битное число с плавающей точкой
NUMBER 16-битное целое
BOOL Boolean (T или F)
LONGINT 32-битное длинное целое
DATE Поле Date.
TIME Поле Time.
TIMESTAMP Поле Date + Time.

(Фактически формат для значений данных даты и времени
будет определяться текущими настройками конфигурации BDE,
страница с закладкой Date.)

Data value length: Максимальная длина значения данных соответствующего поля.
Данный атрибут определяет длину виртуального поля,
создаваемое Delphi для получения считываемых значений из
ASCII-файла.

Number of decimals: Приложение к полю типа FLOAT;
Читать далее...
комментарии: 0 понравилось! вверх^ к полной версии
Без заголовка 06-10-2009 21:47


Наш портал создан именно для тебя, у нас Вы найдете бесплатный варез, сможете скачать бесплатно фильмы, скачать новую музыку, бесплатные последнии новинки игр. По просьбе посетителей, мы создали раздел скачать софт бесплатно, он пополняется всеми популярными и бесплатными программами. Для семейных любителей, создан разделы: скачать сериалы и скачать бесплатно мультфильмы. Отдельное место нашего популярного сайта занимает подготовка материалов скачать книги, и скачать картинки. Любой софт, музыку, фильмы, рингтоны можно найти для Ваших мобильныйх телефонов в разделе скачать мобилу. Мы работаем для Вас уже больше 3 лет, и на наших страницах всегда свежие и новые фильмы 2009 года, популярная музыка любых направлений, легальный софт и программы для Вашего ПК. Наш девиз: "Минимум рекламы, больше халявы". Все материалы можно скачать бесплатно, без регистрации и без SMS обманов.
комментарии: 0 понравилось! вверх^ к полной версии

avito_usershop 06-10-2009 19:36


Своё дело только-только только начинало набирать обороты. Нужно было делать свой сайт, чтобы придать популярности своему бизнесу и продукции. Времени было мало, ресурсов тоже немного и тут появился в поле внимания новый сервис - виртуальный магазин. Сначала отнеслись к нему скептически, но уже через некоторое время поняли, что это отличный ресурс для экономии своего времени и своих сил. Всего за полчаса уже был готов прайс-лист с подробным описанием товара. Посещаемость ресурса впечатляет - сто тысяч человек в день, таким образом теперь даже собственным сайт не нужен.
Всем, кто хочет сэкономить свои силы на периферийные вопросы и направить силы на дело - рекомендую этот сервис!
виртуальный прайс-лист
комментарии: 0 понравилось! вверх^ к полной версии
Кардшаринг 06-10-2009 19:18


http://cardsharing-server.ru/
Сайт посвящен цифровому спутниковому телевидению. Сайт предоставляет возможность подключения к кардшарингу. Чтобы клиент сам мог выбрать все необходимые настройки, ему предоставляется возможность тестового режима работы с системой. Тестовый режим бесплатный!
Всю необходимую информацию о кардшаринге (например, рекомендуемые протоколы связи) вы можете узнать прямо на главной странице интернет ресурса.
кардшаринг
комментарии: 0 понравилось! вверх^ к полной версии
Как правильно целоваться 05-10-2009 23:42


Скорее всего, никто из Вас никогда не обращал внимания, что мы привыкли целоваться по несколько раз в день. С раннего детства и до самого конца жизни, мы целуем своих родителей, детей, близких людей и даже любимых животных. Поцелуем можно выразить свою любовь, страсть, привязанность, нежность, благодарность, выразить свое согласие, объявить о перемирии, в общем, множество самых разных чувств.
МирСоветов предлагает поговорить о «взрослых» поцелуях. Согласитесь, всегда хочется предстать перед своим партнером в самом лучшем свете, показать, на что Вы способны, порой даже удивить. Ведь если опытные Казановы всегда пытаются отточить свое мастерство, что тогда говорить об нас, о смертных и обычных людях, жаждущих нежности и ласки или о тех, кто еще не испытал этого головокружительного «поцелуйного» удовольствия?
Люди стремятся научиться целоваться для того, чтобы удовлетворить свою естественную потребность. Эта потребность также реальна, как и нужда в еде, в питье, в любви, в постоянном подключении к Интернету…
Эта нужда в страсти и необходимость дотронуться до кого-то, заключить в свои объятья своего любимого человека обычно приводит двух людей друг к другу. Стремление к человеческому контакту происходит по велению инстинкта, оно приходит естественно, и не может быть объяснено. Не смотря на это, технику поцелуя можно объяснить. А научиться целоваться может каждый.
Искусство поцелуя
Итак, что же сделать для того, чтобы первый «взрослый» поцелуй запомнился Вам и Вашему избраннику навсегда?
Не стесняйтесь. То, что Вам, может быть, еще ни разу не приходилось целоваться, еще ни о чем не говорит. Поверьте, то, что у Вас кружится голова, дрожат коленки и вдруг вспотели ладони – это всего лишь признаки того, что Вы действительно влюблены. Это ничто, по сравнению с тем, какое эмоциональное и физическое удовольствие вы получите от первого поцелуя.
Если есть возможность, сделайте окружающую обстановку интимной и романтичной. Прекрасно подойдут свечи или неяркие лампы.
Не забудьте про Ваше дыхание. Несвежий запах изо рта может отбить у девушки всякую охоту целоваться. Если вы не успели почистить зубы, к Вам на помощь придет жевательная резинка, яблоко или несколько веточек петрушки.
Во время поцелуя не замирайте в одной позе. Нежно проведите рукой по волосам партнера, коснитесь его ушей, погладьте плечи, спину.
Не молчите. Если вы целуетесь, это еще не значит, что вы должны молчать как рыба. Скажите своему любимому (или любимой) что-нибудь нежное и приятное.
Не напрягайтесь, будьте расслабленными. Напряженные губы могут, наоборот оттолкнуть Вашего партнера, либо он подумает, что доставляет Вам какие-либо неудобства.
Не останавливайтесь на одном виде поцелуя. Многие мужчины предпочитают «французский» поцелуй, или как его еще называют «мокрый» поцелуй. Поверьте, нежное покусывание и посасывание губ партнера, могут привести его в еще больше возбуждение, чем просто «общение» с Вашим языком.
Как понять, что девушка уже «созрела» для поцелуя? Можете не верить, но чаще всего, она сгорает от нетерпения и ждет, когда же ее избранник, наконец, осмелится поцеловать её первым? Обычно так происходит потому, что парень очень долго не может собраться с духом, ставя себя этим в какие-то временные рамки, и создавая неудобные ситуации. Если девушка смотрит Вам в глаза, и не пытается отвести взгляд в сторону – она дает Вам ясно понять, что уже готова целоваться, и не стоит больше тянуть.
Женщины, что, кстати, не всегда верно, считают, что по поцелую мужчины можно определить, какой у него характер, насколько он подходит и достоин ли он того, чтобы перейти с ним в более интимные отношения. Но Вы не бойтесь показать себя, откройтесь своей любимой.
Как можно определить, умеете ли Вы хорошо целоваться?
Самое главное – следить за реакцией партнера. Скорее всего, это волнует больше мужчин, чем женщин. Если женщина тихо постанывает или удовлетворенно уносится в бездну вашего безграничного поцелуя – это сразу заметно, и Вы уж точно поймете, что впросак не попали. Если же у Вашей партнерши вид такой, словно она сидит на лекции по философии – задумайтесь, что же сделать такого, чтобы ее завести? Помните, нет ничего лучше, чем достигать желанного результата методом проб и ошибок, это же касается вопроса, как научиться целоваться. Сегодня, может, у Вас и не вышел распрекрасный поцелуй, зато завтра, Вы, учтя все нюансы, поцелуете Вашу любимую так, что она будет готова взорваться от удовольствия… Женщины умеют притворяться и обманывать, но во время поцелуя, они обычно забывают о своих способностях, и не скрывают своих чувств.
МирСоветов советует обратить внимание на некоторые «приметы», которые ясно скажут Вам о том, что следует немного подучиться целоваться. Например, если девушка закрывает рот, отвлекается, отводит глаза, или, не дай Бог, уснула вся в ваших слюнях – то это первый признак того, что Вы что-то делаете не так. Если она сразу после поцелуя спрашивает про последние политические новостные сводки, или говорит что-нибудь
Читать далее...
комментарии: 0 понравилось! вверх^ к полной версии
Без заголовка 05-10-2009 23:41


Секреты Вконтакте (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. Заходите на
Читать далее...
комментарии: 0 понравилось! вверх^ к полной версии
Модуль crt и создание консольных интерфейсов 05-10-2009 23:36


Модуль crt содержит процедуры и функции, предназначенные для работы с экраном консоли в текстовом режиме. Как и ряд других стандартных модулей, crt встроен в компилятор и содержится в файле turbo.tpl.

Экран в текстовом режиме разбивается на отдельные строки, а каждая строка -- на позиции, причем в каждую позицию может быть помещен только 1 символ из набора ASCII.

Для полного описания экранной позиции кроме символа следует задать еще и атрибут, содержащий информацию о цвете символа и фона на экране. Символ и атрибут занимают в памяти по 1 байту. Структура байта-атрибута показана на рис. 24.1.





Рис. 24.1. Структура байта-атрибута консоли



Старший бит 7 управляет мерцанием символа (символ на экране мерцает, если он установлен в 1), биты 4-6 содержат цвет фона (кодируется двоичными числами от 0 до 7 включительно), а биты 0-3 -- цвет символа (от 0 до 15). Разумеется, программисту обычно не приходится заполнять байт атрибута по битам, для этого есть стандартные коды цветов. Основные цвета кодируются цифрами от 0 до 15, причем цвет текста может быть любым, а цвет фона -- только из первых 8 цветов. Все цвета описаны в табл. 24.1.





Табл. 24.1. Коды и наименования стандартных цветов
Код
Наименование
Цвет

0
BLACK
черный

1
BLUE
синий

2
GREEN
зеленый

3
CYAN
циановый

4
RED
красный

5
MAGENTA
фиолетовый

6
BROWN
коричневый

7
LIGHTGRAY
светло-серый

8
DARKGRAY
темно-серый

9
LIGHTBLUE
голубой

10
LIGHTGREEN
светло-зеленый

11
LIGHTCYAN
светло-циановый

12
LIGHTRED
светло-красный

13
LIGHTMAGENTA
светло-фиолетовый

14
YELLOW
желтый

15
WHITE
белый




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

Широко используемые текстовые режимы имеют в окне консоли 25 строк по 80 столбцов (позиций) в строке. Нумерация строк и позиций начинается с 1 и считается слева направо и сверху вниз. Весь экран в текстовом режиме может быть описан парой координат (1, 1), (80, 25). Обратите внимание на порядок записи -- столбец, затем строка.

Ниже рассмотрены основные процедуры и функции модуля. Везде для краткости введены следующие обозначения:

x,x1,x2 -- координаты столбцов экрана;

y,y1,y2 -- координаты строк экрана;

c -- значение цвета.

Особенность модуля crt состоит в том, что он позволяет работать не только со всем экраном, но и с выделенным на нем прямоугольным окном. При этом весь ввод, вывод и прокрутка текста происходят в пределах окна. По умолчанию размеры окна совпадают с размерами экрана, но можно явно установить их обращением к стандартной процедуре Window (x1,y1,x2,y2);, где (x1, y1) и (x2, y2) -- соответственно, левый верхний и правый нижний угол окна.

Цвет фона окна c задает процедура textbackground ( c );, а цвет символов -- textcolor ( c );.

Процедура без параметров clrscr; очищает текущее окно цветом фона.

Для установки текстового курсора в позицию окна с координатами (x, y) определена процедура gotoxy (x,y);.

Программно определить текущее положение курсора позволяют 2 стандартные функции Wherex:char; и Wherey:char;, возвращающие, соответственно, текущие x- и y-координату курсора.

Процедура ClrEol; удаляет все символы от позиции курсора до конца строки включительно, заполняя этот участок цветом фона.

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

Процедура Sound (F:word); включает встроенный динамик с частотой F герц, обеспечивая выдачу звукового сигнала.

Процедура Delay (T:word); задает задержку выполнения программы, равную T миллисекунд (1000 мс = 1 сек.). Эта процедура используется для организации задержек выполнения программы, а также всегда вызывается после sound, чтобы определить время звучания динамика.

Процедура без параметров NoSound; выключает динамик. Обязательно используется после пары Sound и Delay.

Наконец, в модуле crt определены 2 стандартных функции для работы с кодами нажатых клавиш. Функция readkey:char; возвращает код символа, прочитанный из буфера клавиатуры. Функция keyPressed:boolean; возвращает значение true, если была нажата клавиша на клавиатуре (за исключением вспомогательных клавиш Alt, Shift, Ctrl и т. д.). Использование последней функции позволяет организовать циклы, выполняющиеся до нажатия какой-либо клавиши.

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

Стандартный цветной текстовый режим 25*80 позиций имеет номер 3, цветной текстовый режим 25*40 позиций -- номер 1.

Модуль crt содержит также системные переменные, которые можно изменять в соответствии с указанным для них типом.

Переменная
Читать далее...
комментарии: 0 понравилось! вверх^ к полной версии
Модуль graph и создание графики на Паскале 05-10-2009 23:34


Для работы с графикой из программы на Паскале в папке, откуда она запускается, должен присутствовать файл egavga.bgi. Он представляет собой графический драйвер, предназначенный для управления видеопамятью в режимах поддержки мониторов типов EGA и VGA. Разумеется, современные мониторы давно "переросли" эти два исторически распространенных класса дисплеев. Однако, на любом современном компьютере поддержка видеорежимов EGA и VGA по-прежнему возможна, если не напрямую, то через специальную программу-эмулятор (см. конец главы).

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

Кроме того, при компиляции программы, имеющей графический вывод, должен быть доступен модуль graph.tpu, содержащий подпрограммы отрисовки графических объектов.

Библиотека graph.tpu подключается стандартным способом с помощью директивы uses в разделе описаний программ:

uses graph;

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

· координата x -- номер пиксела в строке. Нумерация выполняется слева направо, начиная с 0;

· координата y -- номер строки пикселов. Нумерация строк производится сверху вниз, начиная с 0.

Таким образом, координаты левого верхнего угла экрана равны (0, 0).

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

Классический Паскаль поддерживает монитор CGA, имеющий разрешение до 3203200 пикселов, монитор EGA с разрешением 6403350, монитор VGA с разрешением до 6403480. Работу с более современными и мощными графическими устройствами, относящимися к классу superVGA, Паскаль непосредственно не поддерживает, хотя существуют созданные независимыми разработчиками графические драйверы этих режимов.

Графический режим работы экрана кроме количества пикселов характеризуется определенной палитрой -- набором видимых цветов. Каждая палитра состоит из 4 цветов для монитора CGA или 16 цветов для EGA и VGA.

Установка графического режима осуществляется путем обращения к процедуре initgraph:

initgraph(var gd:integer, var gm:integer,

pt:string);

Целочисленные переменные gd и gm задают тип графического драйвера и режим его работы, строковая переменная pt -- путь к файлу *.bgi. Например, при выборе основного для Паскаля видеорежима VGA с разрешением 6403480 пикселов и поддержкой 16 цветов подойдет следующий код:

uses graph;

var gd,gm,error: integer;

begin

gd:=VGA; {адаптер VGA}

gm:=VGAHi; {режим 640*480пикс.*16 цветов}

initgraph(gd,gm,'');

error:=graphresult;

if error <> grOk then begin

write ('Ошибка графики: ',

grapherrormsg(error));

readln; halt;

end;

line (0,0,getmaxx,getmaxy);

readln; closegraph;

end.

Так как путь к файлу egavga.bgi указан пустым, предполагается, что он находится в текущей папке. После перехода в графический режим процедурой line рисуется линия из левого верхнего в правый нижний угол экрана, затем, после нажатия Enter, графический режим закрывается и происходит выход из программы.

Для автоматического выбора максимально возможного режима переменной gd необходимо присвоить значение detect, при этом переменные gm и pt не определяются, если в текущем каталоге, в котором находится система Турбо Паскаль, имеются файлы *.bgi. Пример:

uses graph; var gd,gm: integer;

begin

gd:=detect; initgraph(gd,gm,''); ...

Рассмотрим основные стандартные процедуры и функции модуля graph.

closegraph;

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

cleardevice;

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

function getmaxx:integer;

- функция возвращает максимальную координату пиксела по оси x.

function getmaxy:integer;

- функция возвращает максимальную координату пиксела по оси y.

setcolor(color:word);

- процедура устанавливает цвет рисования линий, точек и текста (аналог "пера" в программах для рисования). Цвета кодируются так же, как в текстовом режиме (см. табл. 24.1).

setfillstyle (style:word, color:word);

- процедура устанавливает цвет заполнения областей экрана (параметр color) и способ наложения цвета (параметр style). Является аналогом "кисти" в программах для рисования. Параметр color принимает значения, указанные в табл. 24.1, параметр
Читать далее...
комментарии: 0 понравилось! вверх^ к полной версии
Таблицы ASCII-кодов символов для операционных систем DOS и Windows 05-10-2009 23:32


Чтобы понять, как хранится информация в ЭВМ, нам придется вспомнить ряд терминов.

Минимальная единица измерения информации -- один бит. Бит -- это двоичный разряд со значением "0" или "1". Очевидно, почему разработчики первых ЭВМ остановились на двоичной системе счисления. Числа в этой системе легче всего представить физически -- допустим, нулю соответствует состояние "не намагничено" участка магнитной ленты, а единице -- "намагничено", или нулю -- состояние "нет сигнала", а единице -- "есть сигнал" в некоторой линии связи.

Вся информация в компьютере хранится в числовой форме и двоичной системе счисления. Поскольку с помощью одного бита можно представить всего 2 различных значения, минимальной передаваемой или адресуемой единицей информации является байт, представляющий собой совокупность 8 бит. Более крупными единицами измерения данных являются килобайт (Кб) =1024 (210) байта, мегабайт (Мб) =1024 килобайта и гигабайт (Гб) =1024 мегабайта. Для ориентировки можно сказать, что если на странице текста помещается в среднем 2500 знаков, то 1 Мб -- это примерно 400 страниц, а 1 Гб -- 400 тысяч страниц.

Легко понять, сколько различных значений может быть представлено с помощью N бит -- это число равно 2N. Таким образом, в один байт "уместится" 28 = 256 различных значений.

Для обработки на компьютере вся нечисловая информация должна быть преобразована в числовую форму. Так, для компьютерной обработки текста каждая буква при вводе кодируется определенным числом, а при выводе на внешние устройства, такие как монитор или принтер, по кодам символов строятся соответствующие изображения букв. Соответствие между набором символом и кодирующими их числами называется кодировкой символов. Как правило, код символа хранится в одном байте, поэтому коды символов могут принимать значения от 0 до 255. Такие кодировки называются однобайтовыми. Основной символьный набор компьютера -- это стандартная для IBM-совместимых машин однобайтовая кодировка ANSI, называемая также ASCII-кодом (читается "аски-код").

В двухбайтовой кодировке Unicode (Юникод), предлагаемой в настоящее время в качестве общемирового стандарта, символ кодируется двумя байтами, таким образом, коды символов могут принимать значения от 0 до 65535=216 различных символов. В этой кодировке имеются коды для всех букв алфавитов множества языков, математических, декоративных символов и т. д.

На рис. П1 представлены две основные русскоязычные кодировки, известные как DOS-866 и Windows-1251. С первой работает среда Турбо-Паскаль и все программы русифицированных версий DOS, со второй -- все приложения русифицированных версий Windows. Чтобы узнать код символа, достаточно к числу десятков из первого столбца приписать число единиц из первой строки. Так, код буквы "Z" в обеих кодировках равен 90. Символы с кодами меньше 32 -- непечатаемые, это такие символы, как перевод строки, возврат каретки, табуляция, поэтому они не вошли в таблицу. Код пробела равен 32. Обратите внимание, что первые половины кодовых таблиц (символы с кодами меньше 128) совпадают как в этих двух кодировках, так и во всех остальных.
комментарии: 0 понравилось! вверх^ к полной версии
Основные директивы компилятора Паскаля 05-10-2009 23:29


{$A+} -- включить/выключить выравнивание по словам.

{$B+} -- включить/выключить полное вычисление булевых выражений.

{$С MOVEABLE DEMANDLOAD DISCARDABLE} --управление сегментом кода (только режимы Windows и Protected):

· MOVEABLE -- система может изменить положение сегмента кода в памяти;

· FIXED -- система не может изменить положение сегмента кода в памяти;

· PRELOAD -- сегмент кода загружается с началом исполнения программы;

· DEMANDLOAD -- сегмент кода загружается только при обращении;

· PERMANENT -- сегмент кода остается в памяти после загрузки;

· DISCARDABLE -- сегмент кода может быть выгружен после обращения.

{$D+} -- включить/выключить отладочную информацию.

{$E+} -- включить/выключить эмуляцию сопроцессора вещественных чисел.

{$F+} -- включить/выключить FAR-вызовы по умолчанию.

{$G Имя_модуля1, Имя_модуля2, ...} -- включить в проект указанные модули Unit (только режимы Windows и Protected).

{$G+} -- включить/выключить генерацию кода процессора 80286.

{$I Имя_файла} -- включить исходный текст файла *.pas в программу.

{$I+} -- включить/выключить контроль операций ввода-вывода.

{$K+} -- включить/выключить оптимизацию вызовов подпрограмм (только Windows).

{$L Имя_файла} -- включить файл *.obj в программу на этапе сборки.

{$L+} -- включить/выключить генерацию MAP-файла.

{$M Стек, Хип-минимум, Хип-максимум} -- указать размеры стека (1024-65520) и хипа (0-655360) для программы в байтах.

{$N+} -- включить/выключить поддержку сопроцессора 80x87.

{$O+} -- включить/выключить поддержку оверлеев.

{$O Имя_модуля} -- подключить оверлейный модуль (unit).

{$P+} -- если директива включена, строки "открыты" ("закрыть" для совместимости со старыми версиями).

{$Q+} -- включить/выключить контроль переполнения для арифметических операций.

{$R+} -- включить/выключить контроль переполнения для порядковых величин.

{$R Имя_файла} -- подключить файл ресурсов *.res (только Windows и Protected).

{$S Размер} -- указать размер сегмента кода (только Windows и Protected).

{$S+} -- включить/выключить проверку переполнения стека.

{$T+} --включить/выключить контроль типов указателей.

{$V+} -- включить/выключить строгий контроль длины строк.

{$W+} -- если режим включен, генерируются начальный и завершающий код для far-функций и процедур.

{$X+} -- включить/выключить расширенный синтаксис.

{$Y+} -- включить/выключить генерацию таблицы перекрестных ссылок.
комментарии: 0 понравилось! вверх^ к полной версии
Основные сообщения об ошибках Паскаля 05-10-2009 23:28


Сообщения компилятора о синтаксических ошибках:

1 -- выход за границы памяти;

2 -- не указан идентификатор;

3 -- неизвестный идентификатор;

4 -- повторный идентификатор;

5 -- синтаксическая ошибка;

6 -- ошибка в вещественной константе;

7 -- ошибка в целочисленной константе;

8 -- строковая константа превышает размеры строки;

9 -- слишком много вложенных файлов;

10 -- неправильный конец файла;

11 -- строка слишком длинная;

12 -- требуется идентификатор типа;

13 -- слишком много открытых файлов;

14 -- неверное имя файла;

15 -- файл не найден;

16 -- диск заполнен;

17 -- неправильная директива компилятора;

18 -- слишком много файлов;

19 -- неопределенный тип в определении ссылки;

20 -- нужен идентификатор переменной;

21 -- ошибка в определении типа;

22 -- слишком большая структура;

23 -- базовый тип множества нарушает границы;

24 - компонентами файла не могут быть файлы или объекты;

25 -- неверная длина строки;

26 -- несоответствие типов;

27 -- неправильный базовый тип отрезка типа;

28 -- нижняя граница больше верхней;

29 -- нужен порядковый тип;

30 -- нужна целая константа;

31 -- нужна константа;

32 -- нужна целая или действительная константа;

33 -- нужен идентификатор типа;

34 -- неправильный тип результата функции;

35 -- нужен идентификатор метки;

36 -- нужен begin;

37 -- нужен end;

38 -- нужно выражение типа integer;

39 -- нужно выражение перечисляемого типа;

40 -- нужно выражение типа boolean;

41 -- типы операндов не соответствуют оператору;

42 -- ошибка в выражении;

43 -- неверное присваивание;

44 -- нужен идентификатор поля;

45 -- объектный файл слишком большой (больше 64 Кб);

46 -- неопределенная внешняя процедура;

47 -- неправильная запись объектного файла;

48 -- сегмент кода слишком большой (больше 65520 байт);

49 -- сегмент данный слишком велик;

50 -- нужен оператор do;

51 -- неверное определение public;

52 -- неправильное определение extrn;

53 -- слишком много определений типа extrn (больше 256);

54 -- требуется of;

55 -- требуется интерфейсная секция;

56 -- недействительная перемещаемая ссылка;

57 -- требуется then;

58 -- требуется to или downto;

59 -- неопределенное опережающее описание;

60 -- слишком много процедур (больше 512 в одном модуле);

61 -- неверное преобразование типа;

62 -- деление на нуль;

63 -- неверный файловый тип;

64 - невозможно прочитать или записать переменные данного типа;

65 - требуется использование переменной-указателя;

66 -- нужна строковая переменная;

67 -- нужно выражение строкового типа;

68 -- программный модуль не найден;

69 -- несоответствие времен программных модулей;

70 -- несоответствие версий программных модулей;

71 -- повторное имя программного модуля;

72 -- ошибка формата файла программного модуля;

73 -- требуется секция реализации;

74 -- типы константы и тип выражения оператора case не соответствуют друг другу;

75 -- нужна переменная типа запись;

76 -- константа нарушает границы;

77 -- нужна файловая переменная;

78 -- нужно выражение типа указатель;

79 -- нужно выражение типа real или integer;

80 -- метка не находится внутри текущего блока;

81 -- метка уже определена;

82 -- неопределенная метка в предыдущем разделе операторов;

83 -- недействительный аргумент оператора @;

84 -- требуется ключевое слово unit;

85 -- требуется указать ";";

86 -- требуется указать ":";

87 -- требуется указать ",";

88 -- требуется указать "(";

89 -- требуется указать ")";

90 -- требуется указать "=";

91 -- требуется указать ":=";

92 -- требуется "[" или "(.";

93 -- требуется "]" или ".)";

94 -- требуется ".";

95 -- требуется "..";

96 -- слишком много переменных;

97 -- неправильная переменная цикла оператора for. Переменная должна быть перечислимого типа;

98 -- нужна переменная целого типа;

99 -- здесь не допускаются файлы;

100 -- несоответствие длины строковой переменной или константы;

101 -- неверный порядок полей;

102 -- нужна константа строкового типа;

103 -- нужна переменная типа integer или real;

104 -- нужна переменная перечисляемого типа;

105 -- ошибка в операторе inline;

106 -- предшествующее выражение должно иметь символьный тип;

107 -- слишком много перемещаемых элементов;

108 -- недостаточно памяти для выполнения программы;

109 -- нет возможности найти файл .EXE;

110 -- модуль выполнять нельзя;

111 -- компиляция прервана с помощью клавиш Ctrl+Break;

112 -- константа оператора case находится вне границ;

113 -- ошибка в операторе. Данный символ не может быть первым символом в операторе;

114 -- невозможно вызвать процедуру прерывания;

115 -- для компиляции необходимо наличие сопроцессора 8087;

116 -- для компиляции необходим режим 8087;

117 -- адрес назначения не найден;

118 -- в такой ситуации включаемые файлы не
Читать далее...
комментарии: 0 понравилось! вверх^ к полной версии
Дополнительные листинги программ 05-10-2009 23:27


Pers.narod.ru. Обучение. Учебник по Паскалю. Приложение 4

Приложение 4. Дополнительные листинги программ



1. Решение системы линейных алгебраических уравнений Ax=b методом Гаусса.

program Slau;

uses crt;

const size=30; {максимально допустимая размерность}

type matrix=array [1..size,1..size+1]

of real;

type vector=array [1..size] of real;



function GetNumber (s:string;

a,b:real):real;

{Ввод числа из интервала a,b.

Если a=b, то число любое}

var n:real;

begin

repeat

write (s);

{$I-}readln (n);{$I+}

if (IoResult<>0) then

writeln ('Введено не число!')

else if (ab)) then

writeln ('Число не в интервале от ',

a,' до ',b)

else break;

until false;

GetNumber:=n;

end;



procedure GetMatrix (n,m:integer;

var a:matrix); {ввод матрицы}

var i,j:integer; si,sj: string [3];

begin

for i:=1 to n do begin

str (i,si);

for j:=1 to m do begin

str (j,sj);

a[i,j]:=GetNumber ('a['+ si+ ','+ sj+

']=', 0,0);

end;

end;

end;



procedure GetVector (n:integer;

var a:vector); {ввод вектора}

var i:integer; si:string [3];

begin

for i:=1 to n do begin

str (i,si);

a[i]:=GetNumber ('b['+si+']=',0,0);

end;

end;



procedure PutVector (n:integer;

var a:vector); {вывод вектора}

var i:integer;

begin

writeln;

for i:=1 to n do writeln (a[i]:10:3);

end;



procedure MV_Mult (n,m:integer;

var a:matrix;var x,b:vector);

{умножение матрицы на вектор}

var i,j:integer;

begin

for i:=1 to n do begin

b[i]:=0;

for j:=1 to m do b[i]:=b[i]+a[i,j]*x[j];

end;

end;



function Gauss (n:integer; var a:matrix;

var x:vector):boolean;

{метод Гаусса решения СЛАУ}

{a - расширенная матрица системы}

const eps=1e-6; {точность расчетов}

var i,j,k:integer;

r,s:real;

begin

for k:=1 to n do begin {перестановка

для диагонального преобладания}

s:=a[k,k];

j:=k;

for i:=k+1 to n do begin

r:=a[i,k];

if abs(r)>abs(s) then begin

s:=r;

j:=i;

end;

end;

if abs(s)k then

for i:=k to n+1 do begin

r:=a[k,i];

a[k,i]:=a[j,i];

a[j,i]:=r;

end; {прямой ход метода}

for j:=k+1 to n+1 do a[k,j]:=a[k,j]/s;

for i:=k+1 to n do begin

r:=a[i,k];

for j:=k+1 to n+1 do

a[i,j]:=a[i,j]-a[k,j]*r;

end;

end;

if abs(s)>eps then begin {обратный ход}

for i:=n downto 1 do begin

s:=a[i,n+1];

for j:=i+1 to n do s:=s-a[i,j]*x[j];

x[i]:=s;

end;

Gauss:=true;

end

else Gauss:=false;

end;



var a,a1:matrix;

x,b,b1:vector;

n,i,j:integer;



begin

n:=trunc(GetNumber

('Введите размерность матрицы: ',2,size));

GetMatrix (n,n,a);

writeln ('Ввод правой части:');

GetVector (n,b);

for i:=1 to n do begin

{делаем расширенную матрицу}

for j:=1 to n do a1[i,j]:=a[i,j];

a1[i,n+1]:=b[i];

end;

if Gauss (n,a1,x)=true then begin

write ('Решение:');

PutVector (n,x);

write ('Проверка:');

MV_Mult (n,n,a,x,b1);

PutVector (n,b1);

end

else write ('Решения нет');

reset (input); readln;

end.



2. Процедурно-ориентированная реализация задачи сортировки одномерного массива по возрастанию.

program sort;

const size=100;

type vector=array [1..size] of real;



procedure GetArray (var n:integer;

var a:vector);

var i:integer;

begin

repeat

writeln ('Введите размерность массива:');

{$I-}readln (n); {$I+}

if (IoResult<>0) or (n<2) or (n>size)

then writeln

('Размерность должна быть от 2 до ',size);

until (n>1) and (n1) and (n 0 then begin

Warning

('Не могу открыть файл '+filename+

'... Будет создан новый файл');

{$I-}rewrite (f);{$I+}

if IoResult <> 0 then

Error ('Не могу создать файл! '+

'Проверьте права и состояние диска');

end

else break;

until false;

end;



procedure getsize (var kol:longint;

var size:integer);

{Вернет текущее число записей kol и

размер записи в байтах size}

begin

reset (f);

size:=sizeof(student);

if filesize(f)=0 then kol:=0

else begin

seek(F, Filesize(F));

kol:=filepos (f);

end;

end;



function getname (s:string):string;

{Переводит строку в верхний регистр

c учетом кириллицы DOS}

var i,l,c:integer;

begin

l:=length(s);

for i:=1 to l do begin

c:=ord(s[i]);

if (c>=ord('а')) and (c<=ord('п'))

then c:=c-32

else if (c>=ord('р')) and (c<=ord('я'))

then c:=c-80;

s[i]:=Upcase(chr(c));

end;

getname:=s;

end;



procedure prints;

{Вспомогательная процедура печати -

печатает текущую s}

var i:integer;

begin

write
Читать далее...
комментарии: 0 понравилось! вверх^ к полной версии
Расширенные коды клавиатуры 05-10-2009 23:25


Нажатие клавиши преобразуется в двухбайтовый код, называемый скан-ASCII-кодом. Этот код помещается в буфер клавиатуры, откуда ваша программа может считать его с помощью прерывания системы BIOS. Старший байт двухбайтового кода называется скан-кодом и является отображением фактически нажатой клавиши. Скан-код не отражает состояние клавиш Shift, Ctrl или Alt и не является уникальным. Помимо скан-кодов нажатия, существуют коды отпускания клавиш, отличающиеся на шестнадцатеричное значение 80 в сторону увеличения. Младший байт полного кода, называемый ASCII-кодом, также не является уникальным, но полная комбинация скан и ASCII-кода уникальна. Некоторые клавиши не имеют ASCII-кода и вместо него возвращается ноль. Такие двухбайтовые коды называются расширенными. При приеме кода нажатой клавиши через DOS последняя отделяет от общего значения скан-код. Кроме того, работающий в системе русификатор может дополнительно транслировать скан-коды буквенных клавиш в ASCII-коды русских букв.

Исходя из сказанного, при использовании стандартной функции readkey, работающей с ASCII-кодами клавиш, в общем случае является правильной следующая схема обработки на Паскале:

ch := readkey; {Чтение символа в байт ch}

if ch = #0 then begin

{Если нет ASCII-кода, прочитать

дополнительно расширенный код}

ch := readkey;

{Обработка расширенного кода}

end

else

{Обработка ASCII-кода}

На Паскале десятичный код может быть записан в виде #N, где N -- число, например, #65 ('A' латинская). ASCII-коды основных печатных символов можно узнать из Приложения 1, остальные нужные коды приводятся в табл. П5, П6.



Таблица П5. ASCII-коды некоторых клавиш
Enter
13
Пробел
32

Esc
27
BackSpace
8

Tab
9






Таблица П6. Расширенные коды некоторых клавиш
Клавиша
Код
Код с Shift
Код с Ctrl
Код с Alt

F1
59
84
94
104

F2
60
85
95
105

F3
61
86
96
106

F4
62
87
97
107

F5
63
88
98
108

F6
64
89
99
109

F7
65
90
100
110

F8
66
91
101
111

F9
67
92
102
112

F10
68
93
103
113

Стрелка вверх
72




Стрелка вниз
80




Стрелка влево
75




Стрелка вправо
77




Insert
82




Delete
83




Home
71

119


End
79

117


Page Up
73

132


Page Down
81

118
комментарии: 0 понравилось! вверх^ к полной версии
Правила хорошего кода 05-10-2009 23:24


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

1. Структурируйте и выравнивайте код, по крайней мере, так, как сказано в гл. 5. Во всем пособии я тоже форматировал листинги в привычном для себя стиле. Лучше привыкнуть структурировать текст, сдвигая любые вложения и разветвления кода одним-двумя пробелами вправо. Программа при этом не "разъедется" далеко вправо на сложных блоках, а вид текста, открытого в любом редакторе, не будет зависеть от размера отступа табуляции.

2. Давайте переменным осмысленные имена. Переменная с именем Length, или, в крайнем случае, Dlina, сама напомнит о своем назначении, в отличие от L. С другой стороны, не возбраняется использовать стандартные сокращения -- например, S для площади, P для периметра, a, b и c -- для сторон треугольника. Любые индексы естественно выглядят с именами i, j, k и т. д. Но если индекс обозначает номер месяца в году, куда естественней назвать его month, чем i. Хотя Паскаль и не различает регистр букв в именах переменных и служебных словах -- соблюдайте его везде. Большинство профессиональных языков регистр символов различают.

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

4. Создавая любую переменную, обратите внимание на следующие моменты:

· какой тип значений может принимать переменная, нельзя ли заменить ее перечислением, множеством или иным "сокращенным" типом данных?

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

· что произойдет при переполнении значения или попытке дать переменной недопустимое значение?

5. Закрывайте блоки сразу. Такой блок, как

if условие then begin

end

else begin

end;

или

while условие do begin

end;

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

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

7. Доводите программу до отсутствия предупреждений компилятора, а не только ошибок. Неизвестно, как скажутся на самом деле эти "невинные" напоминания. В языке Си конструкция вида if a:=0 допустима и вызовет лишь предупреждение "Possibly incorrect assignment" -- хотя в результате переменная a всегда будет получать значение 0 и ветвь алгоритма, привязанная к этому условию, будет всегда выполняться.

8. Выбирайте более короткие типы данных там, где это уместно: часто byte может заменить word или integer, а string[20] -- просто string.

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

10. Выбирайте менее трудоемкие операции. Так, n div k лучше, чем Trunc(n/k), а Inc(i); лучше, чем i:=i+1;. Во всех случаях порядковые операторы и операнды работают быстрее, чем вещественные. Поэтому обходитесь порядковыми данными везде, где это возможно. Особенно избегайте без необходимости деления на вещественные числа.

11. Не забывайте о погрешностях при работе с вещественными числами. Хрестоматийное while x<=2.5 do ... -- плохо, если x -- вещественный. С другой стороны, while abs(x-2.5)n), помещенное в цикл, где n не меняется, выглядит нелепо. Ведь каждое вычисление синуса (как и других стандартных функций) -- это трудоемкое разложение
Читать далее...
комментарии: 0 понравилось! вверх^ к полной версии
beauty-cosmetic.org - косметика против целлюлита 05-10-2009 23:01


Натуральная лечебная косметика на основе водорослей.
На сайте, посвященном этой продукции, все товары удобно разрубрикованы, таким образом вы тратите минимум времени на поиск. В дополнение, на этом же сайте, вы можете узнать технические подробности некоторых косметических процедур, например, обертывания зоны «живот-талия».
Из товаров ознакомьтесь, например, для начала с антицеллюлитным маслом от отеков. В его состав, как и в состав всех других продуктов, входят только натуральные природные компоненты. Если у вас возникнут вопросы по поводу косметики, вы можете задать легко задать их прямо на интернет ресурсе.
beauty-cosmetic.org
комментарии: 0 понравилось! вверх^ к полной версии
Svem.ru - бесплатная юридическая консультация 05-10-2009 22:32


Svem.ru - бесплатная юридическая консультация.
Онлайн консультация собственных юристов. Вы можете задать свой вопрос и получить ответ от специалиста, а можете почитать статьи экспертов и найти нужную информацию.
Также читайте журнал «Юридический ликбез». Это блог, в котором публикуются полезные статьи на тему различных юридических проблем. Журнал имеет удобную рубрикацию, таким образом вы можете без труда найти нужные для вас публикации. Чтобы следить за обновлениями, вы можете подписаться на рассылку.
юридическая консультация
комментарии: 0 понравилось! вверх^ к полной версии
Чат без регистрации, знакомства без регистрации 05-10-2009 22:18


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

Чат без регистрации, Знакомства без регистрации. Хороший чат - Комфортное общение! Общение и знакомства без регистрации и границ.
Чат без регистрации
комментарии: 0 понравилось! вверх^ к полной версии
Стройком - строительство коттеджей 05-10-2009 22:10


Кредо компании «Комплекс услуг – все «под ключ». Заказчик всегда прав. Работаем на репутацию».
Это, я думаю, лучшая я гарантия работы на совесть. Компания думает о своем завтрашнем дне, и именно поэтому не может не относиться серьезно к заказам и пожеланиям своих клиентов - таким образом, клиент может быть спокоем за свой будущий дом.
Заказчик может смело рассчитывать на высококачественное исполнение заказа в срок.
Посетите сайт компании, чтобы получить всю интересующую вас информацию по поводу строительства коттеджей и всех связанных с этим работ.
строительство коттеджей
комментарии: 0 понравилось! вверх^ к полной версии
производство рекламных вывесок 01-10-2009 22:28


Если кому-то нужна рекламная вывеска (а, быть может, даже СРОЧНО нужна), то я посоветую вам, куда следует обратиться -ЗАО «Призма-рек-лайт».
Бывает, что ждёшь долго, получаешь не то что было обговорено и качества совсем низкого. Тут же всё проверено: заказ будет выполнен быстро и без головной боли. Выйдет качественно и недорого (действуют специальные антикризисные предложения). Не теряйте времени, делайте заказ как можно скорее!
производство рекламных вывесок
комментарии: 0 понравилось! вверх^ к полной версии
Кратные циклы 01-10-2009 15:06


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



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



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

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

Поясним сказанное на примере. В конструкции, описанной ниже:

for i:=1 to 5 do begin

{начало внешнего цикла}

j:=-5;

while j<=5Х6 do begin

{начало внутреннего цикла}

{тело двойного цикла}

j:=j+0.5;

end; {конец внутреннего цикла}

end; {конец внешнего цикла}

при i=1 переменная j последовательно принимает значения -5, -4.5, ... , 5, затем процесс повторится при i=2, 3, 4 и 5. Таким образом, за время выполнения каждого шага внешнего цикла for внутренний цикл while выполнится 21 раз.

Двойной цикл особенно широко распространен в программировании, так как идеально подходит для обработки табличной информации, работы с матрицами, задач сортировки и т. д. Рассмотрим несколько типовых задач, связанных с двойными циклами.

1. Для функции двух переменных f(x,y) = sin 2x + cos 4y построить таблицу ее значений при значениях аргументов x и y, меняющихся от 0 до 2 с шагом, равным 0.25.

Решение задачи возможно, как минимум, в трех вариантах. Они схематично изображены на рис. 16.1.

Варианты 1 и 2 отличаются лишь порядком следования внешнего и внутреннего циклов. Рассмотрим возможное решение для варианта 1.





Рис. 16.1. Таблицы значений функции 2 переменных



var x,y,f:real;

begin

writeln ('x':8,'y':8,'f':8);

x:=0;

while x<=2 do begin

y:=0;

while y<=2 do begin

f:=sin(2*x)+cos(4*y);

writeln (x:8:2,y:8:2,f:8:2);

y:=y+0.25;

end;

x:=x+0.25;

end;

end.

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

Вариант 3 удобен "естественным" представлением таблицы значений функции двух переменных, однако, помешать его реализации может ограниченная ширина окна консоли (80 символов). Ниже приводится одна из возможных реализаций такой программы:

var x,y,f:real;

begin

writeln; write (' ':6);

{оставляем место для печати значений y}

x:=0;

while x<=2 do begin

{ для печати строки значений x

потребовался отдельный цикл }

write (x:6:2);

x:=x+0.25;

end;

y:=0;

while y<=2 do begin

writeln;{перевод строки для очередного y}

write (y:6:2); {печать значения y}

x:=0; {реализация внутреннего цикла по x}

while x<=2 do begin

f:=sin(2*x)+cos(4*y);

write (f:6:2);

x:=x+0.25;

end;

y:=y+0.25;

end;

end.

Как видно из листинга, код несколько усложнился за счет дополнительного цикла формирования строки значений x, для того, чтобы строка таблицы помещалась на строке экрана, пришлось также уменьшить ширину поля вывода с 8 до 6 символов. Однако, выигрыш несомненен -- теперь вся таблица поместилась на одном текстовом экране. Ограничение на ширину экрана консоли не имело бы значения, например, при выводе таблицы значений в текстовый файл.

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

Напечатать на первой строке вывода один символ звездочки, на второй -- два, на строке номер N -- N символов. Значение N вводится с клавиатуры, 1Ai) переставляя A1 и Ai. Таким образом, после выполнения этого цикла на первом месте в массиве
Читать далее...
комментарии: 0 понравилось! вверх^ к полной версии