Рассылка закрыта
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Январь 2001 → | ||||||
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
|
28
|
||
29
|
30
|
31
|
Статистика
за неделю
Программирование для начинающих Выпуск 12
Программирование для начинающихВыпуск 12 ME
|
| Ведущий рассылки: Вячеслав Мацнев 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; {явное объявление переменных целого типа} В предпоследней строке допущена опечатка: 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. Последнее не относится к переменным, конечно, но помните, что элементарная опечатка, на которую в тексте статьи или реферата никто не обратит внимания, в тексте программы или во входных данных может привести к различным неприятным последствиям. Либо программа не будет работать, либо будет работать не так, как надо.
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. Пример вложенного списка:
<UL><B>Средства активного контроля:</B> <LI>Механические приборы <UL><LI>Индикаторы часового типа <LI>Рычажно-зубчатые микрометры <LI>Пружинные измерительные головки </UL> <LI>Фотоэлектрические преобразователи <LI>Электроконтактные приборы <UL><LI>Электроконтактные преобразователи <LI>Электроконтактные рычажные шкальные головки <LI>Усилители командных сигналов, блоки питания и сигнализации <LI>Электронные реле мод. 238 и 238-2 </UL> </UL>
Упорядоченый список Организовать упорядоченный список так же легко, как и маркированный. Но придется использовать тег OL (Ordered List). LI остается, отмечая собственно элементы списка. Нумерация ведется автоматически, по умолчанию в десятичной системе. Способ нумерации можно изменить. За это отвечает параметр type. Применение его аналогично одноименному параметру тега UL. Возможные значения:
1 - десятичные цифры i - римские цифры маленькие I - римские цифры большие a - латинские буквы строчные A - латинские буквы прописные В связи с тем, что элементы списка будут нумероваться, тег OL приобретает новый параметр - start. В качестве его значения нужно указывать начало отсчета. Пример,
<OL start=1999>Годы <LI><i>Рассылка не выходила</i> <LI>Вышло 15 выпусков <LI>Вышел 1 выпуск </OL>
И еще один параметр приобретает тег LI в этом случае. Называется он value. Нетрудно догадаться, что параметр этот определяет номер текущего элемента. Пример,
<ol start=5>Дежурство в феврале <li>Андрианов В.К. <li value=12>Петрова О.С. <li value=19>Мастер Н.Ф. <li value=26>Любимова С.Т. </ol>
Список определений Список определений отличается от предыдущих рассмотренных нами типов списков. Для его организации уже нужно использовать три разных тега: DL - (Definition List) - для разметки самого списка DT - (Definition Term) - для разметки определяемого термина DD - (Definition Description) - для разметки описания термина Т.е. вы можете организовать на своей страничке этакий словарик, вроде нижеследующего:
<DL>Глоссарий <DT>Очередь <DD>Структура типа FIFO. <DT>Стек <DD>Структура типа FILO. </DL>
Пример комбинированного списка Я говорил как-то, что списки могут быть вложенными. Скажу больше, вкладываться друг в друга могут списки разных типов. Сейчас рассмотрим пример комбинированного списка. Давайте сделаем что-то плана событий, который потом где-нибудь повесим, например, на сайте своей организации.
<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>
Успехов вам, друзья, в работе со списками и не только !:-)
В 10-м выпуске я познакомил вас с устройствами, как они понимаются в DOS. Сегодня мы продолжим тот разговор или даже начнем :-). Как-то Емельян Пугачев высказался о рассылке: " Это неплохо, что кто-то делится опытом с другими, но хорошо бы, чтобы и другие вносили свой вклад в общее дело. Сделав первый шаг, Емельян подвиг на это и других подписчиков. Сегодня я хочу познакомить вас с Константином Даниленко. Впрочем, ему слово. Константин Даниленко Устройства
Что же такое устройство?
Исходная информация > компьютер > выходная информация Или, проще: Ввод > обработка > вывод
Отметим, что как ввод, так и вывод, не обязательно представлены в
единственном числе. Информация может вводиться с нескольких «входов» и
выводится на несколько «выходов».
Ввод информации извне > Устройство 1 > Устройство 2 > ... > Устройство N - 1 > Устройство N > Вывод информации вовне
Схема крайне упрощена. Подчеркнем вновь, что как ввод, так и вывод,
могут осуществляться по произвольному количеству путей. Кроме того,
устройства с номерами от 2 до N - 1 могут проводить обмен информацией
по каналам, не указанным на схеме.
Разумеется, этот список далеко не исчерпывает многообразие устройств (всех трех типов). Например, для снятия показаний с какой-либо экспериментальной установки некоторые организации создают уникальные устройства, существующие всего в нескольких или даже в одном экземпляре. Поэтому полный список всех устройств вообще не может быть составлен. Как же происходит обработка и передача информации между этими устройствами? Как мы уже упоминали, без соответствующего программного обеспечения любое устройство – бесполезная конструкция из металла и пластмассы. А программное обеспечение должно состоять как минимум из одного файла, называемого драйвером (driver). Бывают, правда, мощные пакеты прикладных программ, обеспечивающие разнообразные приемы работы с данным устройством, но суть от этого не меняется. Допустим, что к компьютеру подключено несколько устройств, снабженных подходящими драйверами. То есть: клавиатура с драйвером клавиатуры, экран с драйвером экрана, принтер, сканер, мышь, модем – все это также с необходимым софтом. Наверное, найти именно такой компьютер совсем нетрудно. Но каким образом операционная система (в нашем случае DOS) будет знать, к какому устройству как обращаться? Ведь в именах, индексах, модификациях и версиях этих устройств нетрудно запутаться самому и еще проще запутать DOS. Выход был найден простой и гениальный. Вовсе необязательно указывать имя (идентификатор) самого устройства, достаточно лишь указать порт, к которому это устройство подключено. Рассмотрим для примера распечатку некоторого файла на принтере. Итак, пользователь дает DOS команду следующего содержания: «Такой-то файл надо вывести на устройство, подключенное к порту LPT1». DOS должна только найти драйвер того устройства, которое к этому порту подключено, и сказать этому драйверу: «На-ка тебе файл, выводи его на свое устройство, как бишь оно там называется». Дальнейшую работу уже выполняет драйвер. Обратим внимание, что ни пользователю, ни DOS, вообще говоря, нет дела до того, как именно это устройство называется и что делает. Пользователь должен знать, что для получения распечатки (твердой копии) надо обращаться к LPT1, и все, а запомнить это совсем просто. Поскольку количество портов компьютера весьма невелико, необходимо привести их полный (действительно полный!) список:
AUX– последовательный порт по умолчанию Все эти имена являются зарезервированными именами DOS. Это означает, что такие имена нельзя присваивать файлам и директориям. Можете, кстати, попробовать выполнить в DOS команду md prn
Питер Нортон отмечает, что путем некоторых ухищрений создать такую
директорию все-таки можно, но категорически предостерегает от таких
экспериментов, ибо даже он не берется предсказать, чем это может
обернуться. Поэтому следует выучить эти ключевые слова наизусть, благо
их совсем немного.
console.txt
К ключевому слову CON необходимо дать несколько пояснений. Возможно ли
такое, чтобы такие разные по назначению устройства, как клавиатура и
экран, назывались одним и тем же ключевым словом? Ведь порты, к
которым подключаются клавиатура и экран, разумеется, тоже разные!
copy con FROMCON.TXT
Затем вводим произвольный текст и нажимаем Ctrl-Z (или F6), а затем
Enter. Это сочетание клавиш записывает в файл символ с кодом 26,
обозначающий конец файла (EOF). Теперь, набрав в командной строке
type FROMCON.TXT
, убедимся, что файл создан.
|
http://subscribe.ru/
E-mail: ask@subscribe.ru |
|
В избранное | ||