Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование для начинающих Выпуск 12


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Программирование для начинающих

Выпуск 12 ME
ЧАСТЬ 1
23 JAN 2001

 
 
 
Ведущий рассылки: Вячеслав Мацнев
e-mail: stac@stacmv.net
Здравствуйте! Поздравляю вас, друзья, с Новым годом, веком и тысячелетием!!!

В этом выпуске читайте:

Вы читаете выпуск 12 Millenium Edition (восстановленный подлинник).

ОТСЕБЯТИНА

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

Поздравляю!

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

Желаю!

Я бесконечно рад, что мне-таки удалось выпустить этот выпуск (простите за каламбур). Потому как, давно я с вами не общался и очень по вам соскучился.

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

Несколько замечаний по поводу ДЗ. Хорошо, что у вас все практически получается (текущие результаты смотрите в конце выпуска. В своих объяснениях я опустил ряд моментов, например, присвоение переменным значений в форме popytki=popytki-1. Нередко в литературе можно встретить пространные описания механизма присвоения переменной значения, включающего в себя значение этой же переменной. Пара абзацев обычно уходит на указание отличий от математики, где подобная запись считается уравнением. Которое, к тому же не имеет решения.

Но вы все поняли правильно, и это меня радует. Но, на всякий случай, я скажу пару слов об этом :-).

ТЕОРИЯ

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

Что есть переменная (variable)? Ну нет, определения я давать не буду. Дело в том, что, как я говорил на ранней стадии нашего знакомства, для описания околокомпьютерных явлений и процессов, а также самого компьютера, можно использовать различные модели. Так вот, переменная (это, кстати, существительное) может быть определена по-разному, в зависимости от модели описания. Чтобы не смущать вас сильно умными :-) словами, приведу пару примеров.

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

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

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

Примерно так.

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

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

Кстати, вы смело можете использовать для имен переменных целые слова и словосочетания, на размере программы это не отразится.

Рассмотрим немного подробнее процесс выделения памяти под переменную. Допустим встретилась компилятору переменная chislo, какой объем памяти под нее надо выделить? По имени переменной мы можем сказать, что она числовая. Также решит и компилятор. Ну что, он один байт выделит что ли? Не думаю. Один байт может содержать число от 0 до 255. А переменной число мы можем присвоить и 1000 и 10000. Значит выделяется больше одного байта. Поскольку транслятор при первой встрече с переменной не может знать какие значения будут ей присваиваться, то памяти он выделяет, так сказать, по максимуму. Но каков этот максимум? Мы, ведь, не можем выделить все свободное место под одну переменную, когда в программе их у нас много. Т.е. мы-то можем, а вот транслятор нет.

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

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

Так или иначе целым числом считается число, находящееся в диапазоне от -32768 до +32767. Для хранения таких чисел нужно два байта (если по максимуму:). Именно два байта транслятор и отводит под такую переменную. Под длинное целое отводится 4 байта. Вещественные числа бывают одинарной точности (4 байта) и двойной точности (8 байт).

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

Чтобы указать компилятору к какому типу относится переменная, в Бейсике используются суффиксы в имени переменной. Помните, $ - это строковая переменная. Суффикс целой переменой - %, длинной целой - &, одинарной точности - !, двойной точности - #. Как-то я уже приводил табличку с этими суффиксами, взятую из хелпа к Бейсику от Майкрософт. Кроме того есть другие способы указания типа переменной. Для этого есть в Бейсике ряд операторов, например, DECLARE, DIM и другие. Мы их рассмотрим позднее.

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

В Паскале и Си, например, объявлять все (не тлько переменные) нужно явно. И если компилятор того же Паскаля встретит необъявленную переменную, он выдаст соответствующее сообщение об ошибке.

Например следующая программа вызовет ошибку:

var chislo,i:integer; {явное объявление переменных целого типа}

begin i:=7; {оператор присвоения в Паскале отличается от бейсиковского} write('Введите число');readln(chislo); writeln('Если к Вашему числу прибавить ',i,' то получится ',cislo+i); end.

В предпоследней строке допущена опечатка: cislo вместо chislo. Компилятор Паскаля скажет, что переменная cislo не определена и мы сразу же найдем ошибку.

Аналогичная программа на Бейсике:

LET i=7
INPUT "Введите число:",chislo
PRINT "Если к Вашему числу прибавить ",i," то получится ",cislo+i

Она не вызовет ошибки, т.к. компилятор будет считать, что chislo и cislo две разные переменные. В этом примере все переменные объявляются неявно. Но если переменным i и chislo мы присваиваем определенные значения, то с переменной cislo этого не происходит. Компилятор, впрочем, сам присвоит ей значение 0. Т.о. наша программа напечатает:

Если к Вашему числу прибавить 7, то получится 7

Вне зависимости от введенного во второй строке числа.

Итак, числовым переменным при их неявном определении (про явное пока не говорим) присваивается 0. Аналогично ведет себя компилятор и со строковыми переменными, им присваивается значение ""(пустая строка).

Но опечатка... . В большой программе найти ее будет очень трудно. Из-за этого, в частности, программисты не любят Бейсик. Но! Современные реализации языка, например, Visual Basic лишены этого недостатка, т.е. могут осуществлять контроль за объявлением переменных.

Проверяя ваши домашние задания, я нередко замечал несколько вольное отношение к именам переменных и другим вещам. Например, в задаче 1, переменные называются каждый раз по-разному (то pas, то pass). Или в письмах вы пишите название курса basik, вместо basic.

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

HTML

5. Списки

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

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

Многие из вас работают с текстовыми редакторами типа Word и знают все о списках. Например, то, что списки бывают нумерованные и маркированные (ненумерованные). Первые характеризуются нумерацией каждого элемента списка, например:

1. Включить компьютер
2. Зарегистрироваться в системе
3. Запустить прикладную программу
4. ....
 ...
18. Закрыть прикладную программу
19. Выйти из системы
20. Выключить компьютер

В маркированном списке каждый элемент выделяется специальным маркером:

- быстродействие
- надежность
- нетребовательность к системным ресурсам

Здесь маркером является знак дефиса.

HTML поддерживает эти два вида списков и добавляет еще один - список определений. Итак, обо всем по порядку.

Маркированный список

По-английски такой список называется неупорядоченным (Unordered List). За его организацию на странице отвечает тег UL. Этот тег размечает сам список, а элементы списка размечаются тегами LI (List Item - элемент списка).

Выглядит это следующим образом:

<UL><u>Дни недели:</u> <LI>Понедельник <LI>Вторник <LI>Среда <LI>Четверг <LI>Пятница <LI>Суббота <LI>Воскресенье </UL>

Маркером по умолчанию назначается закрашенный кружок (хотя это зависит от браузера). Вообще существуют три типа маркеров. Для их задания используется параметр type тега UL или LI. В первом случае маркер задается для всего списка, во втором - для конкретного элемента (IE) или для конкретного элемента и всех последующих (NN).

Параметр type может принимать следующие значения:

  • disc - закрашенный кружок
  • circle - не закрашенный кружок
  • square - закрашенный квадратик
(Кстати, вот пример маркированного списка. Напомню, что конкретное графическое изображение маркеров зависит от браузера и может отличаться для разных программ.

Списки могут быть вложенными. При этом, для списка верхнего уровня маркером по умолчанию служит disc, для списка следующего уровня вложенности - circle, для остальных - square.

Пример вложенного списка:

<UL><B>Средства активного контроля:</B>
<LI>Механические приборы
<UL><LI>Индикаторы часового типа
<LI>Рычажно-зубчатые микрометры
<LI>Пружинные измерительные головки
</UL>
<LI>Фотоэлектрические преобразователи
<LI>Электроконтактные приборы
<UL><LI>Электроконтактные преобразователи
<LI>Электроконтактные рычажные шкальные головки
<LI>Усилители командных сигналов, блоки питания и сигнализации
<LI>Электронные реле мод. 238 и 238-2
</UL>
</UL>

    Средства активного контроля:
  • Механические приборы
    • Индикаторы часового типа
    • Рычажно-зубчатые микрометры
    • Пружинные измерительные головки
  • Фотоэлектрические преобразователи
  • Электроконтактные приборы
    • Электроконтактные преобразователи
    • Электроконтактные рычажные шкальные головки
    • Усилители командных сигналов, блоки питания и сигнализации
    • Электронные реле мод. 238 и 238-2

Упорядоченый список

Организовать упорядоченный список так же легко, как и маркированный. Но придется использовать тег OL (Ordered List). LI остается, отмечая собственно элементы списка.

Нумерация ведется автоматически, по умолчанию в десятичной системе. Способ нумерации можно изменить. За это отвечает параметр type. Применение его аналогично одноименному параметру тега UL.

Возможные значения:

1 - десятичные цифры
i - римские цифры маленькие
I - римские цифры большие
a - латинские буквы строчные
A - латинские буквы прописные

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

Пример,

<OL start=1999>Годы
<LI><i>Рассылка не выходила</i>
<LI>Вышло 15 выпусков
<LI>Вышел 1 выпуск
</OL>

    Годы
  1. Рассылка не выходила
  2. Вышло 15 выпусков
  3. Вышел 1 выпуск

И еще один параметр приобретает тег LI в этом случае. Называется он value. Нетрудно догадаться, что параметр этот определяет номер текущего элемента.

Пример,

<ol start=5>Дежурство в феврале
<li>Андрианов В.К.
<li value=12>Петрова О.С.
<li value=19>Мастер Н.Ф.
<li value=26>Любимова С.Т.
</ol>
    Дежурство в феврале
  1. Андрианов В.К.
  2. Петрова О.С.
  3. Мастер Н.Ф.
  4. Любимова С.Т.

Список определений

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

DL - (Definition List) - для разметки самого списка DT - (Definition Term) - для разметки определяемого термина DD - (Definition Description) - для разметки описания термина

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

<DL>Глоссарий
<DT>Очередь
<DD>Структура типа FIFO.
<DT>Стек
<DD>Структура типа FILO.
</DL>

Глоссарий
Очередь
Структура типа FIFO.
Стек
Структура типа FILO.

Пример комбинированного списка

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

Сейчас рассмотрим пример комбинированного списка. Давайте сделаем что-то плана событий, который потом где-нибудь повесим, например, на сайте своей организации.

--------------------------------------------------------------------
<DL><b><u>Культурная программа на февраль</u></b>
<DT><b>2 февраля, пятница</b>
<DD>День рождения Генерального. Подарки принимаются до 16-00.
<DT><b>3 февраля, суббота</b>
<DD>Собрание руководителей отделов.
  <UL>
    <LI>Председатель: Белов В.В.
    <LI>начало: в 13-30
    <LI>Повестка:
    <OL type="I">
      <LI>Итоги января
      <LI>Вручение наград
      <LI>Вопросы, связанные с расширением предприятия:
      <OL>
        <LI>Увольнение служащих
        <LI>Уплата долгов "ДайСвет-Нет"
        <LI>Строительство дач
      </OL>
    </OL>
  </UL>
<DT>16 февраля, пятница
<DD>Концерт, посвященный памяти Генерального
  <UL>
    <LI>место проведения: конференц зал
    <LI>начало: 9-00
    <LI>Программа:
    <OL>
       <LI>"Секретарша" - "Некролог"
       <LI>"Инициативная группа под руководством первого зама" - "Мы так тебя любили"
       <LI>"Главный инженер" - "Прости, если что не так"
       <LI>"Наемный электрик" - "Неисправный выключатель"
       <LI>"Наемный электрик" - "Замкнуло накоротко"
       <LI>"Скорая помощь" - "Три часа ожиданий"
       <LI>"Скорая помощь" - "Природа взяла свое"
       <LI>"Инициативная группа под руководством первого зама" - "Ария Генерального"
    </OL>
    <UL>На бис:
      <LI>"Инициативная группа под руководством первого зама" - "Raise of Salary"
      <LI>"Наемный электрик" - "Я все еще здесь, если кому надо"
    </UL>
  </UL>
<DT>17 - 22 февраля
<DD>Каникулы.
<DT>23 февраля, пятница
<DD>День Защитника Отечества - выходной.
</DL>
-------------------------------------------------------------------------------------

Культурная программа на февраль
2 февраля, пятница
День рождения Генерального. Подарки принимаются до 16-00.
3 февраля, суббота
Собрание руководителей отделов.
  • Председатель: Белов В.В.
  • начало: в 13-30
  • Повестка:
    1. Итоги января
    2. Вручение наград
    3. Вопросы, связанные с расширением предприятия:
      1. Увольнение служащих
      2. Уплата долгов "ДайСвет-Нет"
      3. Строительство дач
16 февраля, пятница
Концерт, посвященный памяти Генерального
  • место проведения: конференц зал
  • начало: 9-00
  • Программа:
    1. "Секретарша" - "Некролог"
    2. "Инициативная группа под руководством первого зама" - "Мы так тебя любили"
    3. "Главный инженер" - "Прости, если что не так"
    4. "Наемный электрик" - "Неисправный выключатель"
    5. "Наемный электрик" - "Замкнуло накоротко"
    6. "Скорая помощь" - "Три часа ожиданий"
    7. "Скорая помощь" - "Природа взяла свое"
    8. "Инициативная группа под руководством первого зама" - "Ария Генерального"
      На бис:
    • "Инициативная группа под руководством первого зама" - "Raise of Salary"
    • "Наемный электрик" - "Я все еще здесь, если кому надо"
17 - 22 февраля
Каникулы.
23 февраля, пятница
День Защитника Отечества - выходной.

Успехов вам, друзья, в работе со списками и не только !:-)

DOS

В 10-м выпуске я познакомил вас с устройствами, как они понимаются в DOS. Сегодня мы продолжим тот разговор или даже начнем :-).

Как-то Емельян Пугачев высказался о рассылке: " Это неплохо, что кто-то делится опытом с другими, но хорошо бы, чтобы и другие вносили свой вклад в общее дело. Сделав первый шаг, Емельян подвиг на это и других подписчиков. Сегодня я хочу познакомить вас с Константином Даниленко. Впрочем, ему слово.

Константин Даниленко

Устройства

Что же такое устройство?
Справочники этот вопрос затрагивают не так часто, как следовало бы ожидать. Наиболее определенно говорит об этом справочник по DOS: " устройство (device) – элемент аппаратного обеспечения, осуществляющий передачу информации ".
Пожалуй, не следует заучивать ни это, ни другие определения, которые можно найти в литературе. Если понятна суть, определения особой роли уже не играют. А суть надо уяснить как можно лучше.
Итак, компьютер – это средство обработки информации. В компьютер вводится некая информация в определенной форме, компьютер ее заданным образом обрабатывает (преобразует) и выдает другую информацию, опять же, представленную в определенном формате, то есть:

Исходная информация > компьютер > выходная информация

Или, проще:

Ввод > обработка > вывод

Отметим, что как ввод, так и вывод, не обязательно представлены в единственном числе. Информация может вводиться с нескольких «входов» и выводится на несколько «выходов».
Возьмем в качестве аналогии любой завод, скажем, автомобильный. На него поступает сырье, энергия, и т.д., затем все это преобразуется согласно определенному технологическому процессу, и получается автомобиль.
Но для того, чтобы его изготовить, мало иметь станки и прочее заводское оборудование. Без людей все это – груда металла. Аналогично, даже если есть люди с документацией, то без помощи инструментов и станков они автомобиль не соберут. То есть для получения искомого результата нужно иметь «железо» (станки) и «софт» (людские труд и творчество). Вот теперь почти ясно, что такое «устройство» применительно к компьютеру.
Информация («сырье») вводится извне (через клавиатуру, модем, сканер), обрабатывается при помощи программного обеспечения и передается другому устройству, которое опять проводит некую обработку и передает информацию третьему, и т. д., пока наконец последнее устройство (опять-таки не без помощи соответствующих программ) не выдаст результат в заданной форме (текст, рисунок, звук - «продукт»). Вот как это выглядит:

Ввод информации извне > Устройство 1 > Устройство 2 > ... > Устройство N - 1 > Устройство N > Вывод информации вовне

Схема крайне упрощена. Подчеркнем вновь, что как ввод, так и вывод, могут осуществляться по произвольному количеству путей. Кроме того, устройства с номерами от 2 до N - 1 могут проводить обмен информацией по каналам, не указанным на схеме.
В чем принципиальное отличие Устройства 1 от всех остальных? В том, что оно единственное берет информацию из внешнего мира. Такие устройства называются устройствами ввода. Аналогично, Устройство N определяется как устройство вывода. Все остальные носят названия устройств ввода-вывода.
К какому типу устройств относится клавиатура компьютера? Человек нажимает на клавиши, и информация об этих нажатиях передается по заданной цепочке устройств, где и обрабатывается. Человек не является частью компьютера, а следовательно, относится к внешнему миру. Клавиатура выступает в роли посредника между ним и другими устройствами компьютера. Она непосредственно принимает информацию и передает для дальнейшей обработки. Следовательно, клавиатура обозначена на схеме как Устройство 1 и является устройством ввода.
Через экран нельзя передать компьютеру никакой команды, зато узнать о его работе можно почти все. То есть экран является типичным устройством вывода (Устройство N на схеме).
А модем? Через него можно и отправлять сообщения, и получать их. Следовательно, модем является устройством ввода-вывода. Попробуйте самостоятельно распределить перечисленные ниже устройства по трем категориям: ввода; вывода; ввода-вывода.

  • Принтер
  • Мышь
  • Плоттер
  • Сканер
  • Файл
  • Графопостроитель
  • Факс
(Правильные ответы: 2, 4 ; 1, 3, 6 ; 5, 7)
 
Разумеется, этот список далеко не исчерпывает многообразие устройств (всех трех типов). Например, для снятия показаний с какой-либо экспериментальной установки некоторые организации создают уникальные устройства, существующие всего в нескольких или даже в одном экземпляре. Поэтому полный список всех устройств вообще не может быть составлен.
Как же происходит обработка и передача информации между этими устройствами? Как мы уже упоминали, без соответствующего программного обеспечения любое устройство – бесполезная конструкция из металла и пластмассы. А программное обеспечение должно состоять как минимум из одного файла, называемого драйвером (driver). Бывают, правда, мощные пакеты прикладных программ, обеспечивающие разнообразные приемы работы с данным устройством, но суть от этого не меняется.
Допустим, что к компьютеру подключено несколько устройств, снабженных подходящими драйверами. То есть: клавиатура с драйвером клавиатуры, экран с драйвером экрана, принтер, сканер, мышь, модем – все это также с необходимым софтом. Наверное, найти именно такой компьютер совсем нетрудно. Но каким образом операционная система (в нашем случае DOS) будет знать, к какому устройству как обращаться? Ведь в именах, индексах, модификациях и версиях этих устройств нетрудно запутаться самому и еще проще запутать DOS.
Выход был найден простой и гениальный. Вовсе необязательно указывать имя (идентификатор) самого устройства, достаточно лишь указать порт, к которому это устройство подключено. Рассмотрим для примера распечатку некоторого файла на принтере. Итак, пользователь дает DOS команду следующего содержания: «Такой-то файл надо вывести на устройство, подключенное к порту LPT1». DOS должна только найти драйвер того устройства, которое к этому порту подключено, и сказать этому драйверу: «На-ка тебе файл, выводи его на свое устройство, как бишь оно там называется». Дальнейшую работу уже выполняет драйвер.
Обратим внимание, что ни пользователю, ни DOS, вообще говоря, нет дела до того, как именно это устройство называется и что делает. Пользователь должен знать, что для получения распечатки (твердой копии) надо обращаться к LPT1, и все, а запомнить это совсем просто. Поскольку количество портов компьютера весьма невелико, необходимо привести их полный (действительно полный!) список:

AUX– последовательный порт по умолчанию
CON– консоль (клавиатура или экран)
COM1...COM4– последовательные (коммуникационные) порты
LPT1...LPT3– параллельные порты
NUL– нулевое (фиктивное) устройство
PRN– параллельный порт по умолчанию

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

md prn

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

console.txt
com2.aux
nul.bat
comlpt1.exe

К ключевому слову CON необходимо дать несколько пояснений. Возможно ли такое, чтобы такие разные по назначению устройства, как клавиатура и экран, назывались одним и тем же ключевым словом? Ведь порты, к которым подключаются клавиатура и экран, разумеется, тоже разные!
Термин CON является частью слова console (консоль). В некоторых старых книгах можно даже найти термины "ввод с консоли" или "вывод на консоль", которые следует понимать как "ввод с клавиатуры" и "вывод на экран" соответственно. Да и сегодня программы, выполнение которых задается из командной строки, на жаргоне зачастую называются консольными. Поскольку одно из устройств, обозначаемых ключевым словом CON, является только устройством ввода, а другое – исключительно вывода, то спутать их невозможно. Кстати, в некоторых справочниках клавиатура (экран) называются соответственно "устройством ввода (вывода) по умолчанию". Поэтому, если не указано устройство ввода, то по умолчанию предполагается CON (клавиатура), если не указано устройство вывода, то по умолчанию предполагается CON (экран).
Среди всех возможных устройств особое место занимает файл. Во-первых, к нему меньше всего подходит термин "устройство". Правда, если вспомнить, что файл – это просто особым образом намагниченный участок носителя информации, то все встает на свои места. Во-вторых, файл может носить любое имя (с известными ограничениями). В-третьих, файл присутствует на любом компьютере, даже если к оному ничего не подключено (кроме жесткого диска или дисковода). В-четвертых, файл легко контролировать, просматривать и настраивать. В-пятых, файл почти абсолютно безотказен. В-шестых, можно делать его резервные копии. В качестве шутки можно добавить, что это и самое дешевое устройство ввода-вывода: на 1 копейку можно «купить» около полумиллиона таких устройств.
Попробуем создать файл, не пользуясь никаким текстовым редактором. Для этого символы с клавиатуры надо скопировать в искомый файл FROMCON.TXT. Глагол «копировать» подсказывает, что надо воспользоваться командой copy. В качестве ее первого аргумента выступает источник, в нашем случае клавиатура (CON), второго аргумента – назначение. У нас это FROMCON.TXT. Вот так это будет выглядеть:

copy con FROMCON.TXT

Затем вводим произвольный текст и нажимаем Ctrl-Z (или F6), а затем Enter. Это сочетание клавиш записывает в файл символ с кодом 26, обозначающий конец файла (EOF). Теперь, набрав в командной строке type FROMCON.TXT , убедимся, что файл создан.
В дальнейшем мы будем очень часто использовать файл и для ввода, и для вывода, пользуясь преимуществами файла, перечисленными выше.

ПРОДОЛЖЕНИЕ СЛЕДУЕТ
Вячеслав Stac Мацнев mailto:stac@stacmv.net
23.01.01.



http://subscribe.ru/
E-mail: ask@subscribe.ru
Поиск

В избранное