* C for Dummies * Aleph * 2000-07-02 * 001 * -----[!!]----------[Important Note]--------------------------------------- Тем, кто подписался на HTML-версию рассылки, рекомендую незамедлительно изменить подписку на текстовую. Выпуски готовятся и отсылаются исключительно в текстовом виде (я использую текстовый редактор Multi-Edit 7.0 DOS, Copyright (c) 1988, 1993 by American Cybernetics, Inc.) HTML-вариант генерируется на CityCat автоматически из текстового и, наверняка, будет содержать пропуски и искажения, приводящие к полной неработоспособности кода. Вы предупреждены ! -----[00]----------[Quote of Day]----------------------------------------- "Share you knowledge. It's a way to achieve immortality." The Dalai Lama -----[01]----------[Hot News]--------------------------------------------- По адресу http://community.borland.com/museum/borland/software/TC201.zip фирма Borland сделала доступным 'antique' Turbo-C 2.01 (1,100,166). Даже если Вы счастливый обладатель новенького дистрибутива Borland C++ Builder 5.5, я все еще настаиваю, чтобы Вы скачали эту древность, потому что, по крайней мере, на первом этапе (программы для DOS), я буду пользоваться именно им и весьма желательно, чтобы при обсуждении, мы все смотрели на тот же самый экран. Инсталляция не должна вызвать у Вас затруднений: распакуйте архив, перепишите содержимое каталогов Disk1 - Disk3 во временную директорию на диске С, запустите INSTALL.EXE, примите все установки по умолчанию. -----[02]----------[Blah-Blah-Blah]--------------------------------------- На первый взгляд это выглядит разочаровывающим: Как, Вы подписались на рассылку по программированию, рассчитывая овладеть самыми новыми и передовыми технологиями и быстро начать писать "кр-рр-рутые" программы под Windows 32/64, а вместо этого Вам предлагается скачать старый компилятор под DOS с давно забытым названием от ныне не существующей фирмы. На самом деле, стандарт и язык С за это время почти не изменились. Компилятор, который прекрасно работал на Turbo-XT 4.77 MHz, не станет вести себя хуже на Pentium-II/450. Правда, в нем нет поддержки мыши (редкая и дорогая вещь по тому времени), но это с лихвой перекрывается достоинствами интегрированной среды разработки с поддержкой графики всего на одной 3.5" дискете. Это великолепный компилятор для DOS, а простота, удобство и небольшой размер делают его весьма подходящим для учебных целей. До сих пор Вы можете найти в Интернете тонны коммерческого и бесплатного софта, разработанного в те годы в расчете на компилятор Turbo-C 2.0. К слову сказать, именно в этой среде были написаны первые антивирусные программы Евгения Касперского. Большой плюс - это интегрированная среда разработки: Редактор + Компилятор + Линкер + Дебаггер - все в одной оболочке, с единым интерфейсом. После набора текста, программа может быть запущена на исполнение нажатием всего одной клавиши. Хочу отметить, в то время, это была одна из первых систем такого рода (сначала Borland выпустил Turbo-Basic и Turbo-Pascal) и, вообще, именно фирме Borland мы обязаны сотнями идей и решений (незамедлительно украденных конкурентами) ставших на сегодня промышленным стандартом и, уже кажется, всегда бывшими - подобно телефону и автомобилю. Но я еще помню, какой фурор в программистском сообществе производила каждая новинка от Borland - такая как первая в мире интегрированная среда разработки Turbo IDE или первая в мире резидентная программа SideKick - вызвашие потрясение, восторг и шквал подражаний и заимствований. Первые библиотеки классов, первый компилятор с поддержкой Templates, первое дерево проектов и первая интегрированная система VersionControl. Если Вы слышали про OWL или MFC, то я хочу Вам напомнить, что это просто эволюция Borland TurboVision для DOS. -----[03]----------[Topic]------------------------------------------------ Системы счисления. Представление чисел. Элементарные операции. -----[04]----------[Body]------------------------------------------------- Прежде чем переходить собственно к языку С, поговорим немного о том, как "думают" компьютеры. Основные принципы функционирования вычислительных машин были сформулированы задолго до того, как к их названию стали прибавлять слово "электронный" и сводятся к последовательности простых операций над содержимым ячеек памяти. Любые, сколь угодно сложные, алгоритмы строятся из набора этих операций, являющихся базовыми. Для того, чтобы сами эти операции могли быть выполнены, необходимо уметь представлять числа в памяти компьютера и задать правила действий над ними. Представление чисел. -------------------- Способ представления числа называется системой счисления. Их множество, но по крайней мере с одной из них - десятичной - все хорошо знакомы. К несчастью, в компьютерах эта система почти не используется. Рассмотрим, для начала, несколько распространенных систем счисления. Примерно до 18 века на территории всей Европы использовалась римские цифры. Эта система относится к непозиционным - каждая цифра в такой системе всегда представляет саму себя и ее значение не зависит от расположения (позиции) относительно других цифр. Для обозначения небольших чисел используются вертикальные черточки: I - один, II - два, III - три. Сложение весьма наглядно: I + I = II II + I = III Числа пять (V) и десять (X) обозначаются собственными значками. Промежуточные между ними числа обозначаются вычитанием (запись слева) или прибавлением (запись справа) единицы. IV - четыре, VI - шесть, VII - семь, VIII - восемь, IX - девять. Для обозначения больших чисел (50, 100 и.т.д.) используются их сокращенные (по первой букве ?) названия. 50 -> L 100 -> C 500 -> D 1000 -> M Как и раньше, символ помещенный справа от равного или большего значения, означает прибавление, а помещенный слева от него - вычитание. LX -> 60, XL -> 40, DC -> 600, CD -> 400 Повторение того же самого символа будет означать простое сложение: C -> 100, CC -> 200, CCC -> 300 Запись больших чисел и расчеты с ними оказываются не очень удобными. Несмотря на простоту и наглядность, с развитием торговли и мореходства, римские цифры были вытеснены арабскими (индийскими), относящимися уже к другому классу - позиционных систем счисления. Например, в числе 1999, значения всех трех цифр 9 различно и определяется их относительным положением. Количество цифр, используемых в позиционных системах невелико и поэтому правила счета в них проще, несмотря на необходимость учета позиции. Эта же необходимость, привела к появлению (систематически, примерно, с XI века) еще одной дополнительной цифры - нуля. Нуль показывает, что эта позиция занята, но в ней ничего нет. Например, в числе 2000, нуль использован три раза для обозначения того, что в трех самых правых позициях ничего нет. Десятичная система счисления была распространена у многих народов и, вероятно, связана со счетом на пальцах. Другие часто используемые основания счета, - это два, пять и двадцать. Кроме того, из древнего Вавилона до нас дошли системы счета по основанию 12 (счет дюжинами) и 60 (используется для счета времени). Из всех возможных позиционных систем счисления, наибольшее применение в современных компьютерах нашла двоичная, из непозиционных - система остаточных классов (такой системой счета времени пользовались еще индейцы майя. Кстати, их календарь намного точнее грегорианского). О майя и системе остаточных классов мы поговорим в другой раз, а пока вернемся к позиционным системам счисления. Отличный обзор можно найти в Д. Кнут "Искусство программирования для ЭВМ", т. 2, гл. 4 "Арифметика". Легко понять, что любое число в позиционной системе счисления можно записать как сумму составляющих его цифр, помноженных на вес разряда. Например: 1999 = 1*1000 + 9*100 + 9*10 + 9*1 или 2000 = 2*1000 + 0*100 + 0*10 + 0*1 Числа 1000, 100, 10 и 1 являются степенями 10: 10**0 = 1 10**1 = 10 10**2 = 100 10**3 = 1000 Таким образом, номер разряда точно соответствует степени основания. Какое число может использоваться в качестве основания в позиционной системы счисления ? Любое. Целое, дробное, положительное, отрицательное, мнимое, комплексное. Но оказалось, что некоторые числа удобнее других и особенно удобны системы с мнимым основанием. Однако, одной из самых распространенных является система счисления по основанию 2. Это не самая "удобная" система для вычислений, но простейшая в реализации средствами современной техники. Как следует из названия, в двоичной системе счисления используются только две цифры: 0 и 1. Этим двум цифрам можно поставить в соответствие какие-либо взаимоисключающие состояния: "Инь" и "Янь", "Да" и "Нет", "Открыто" и "Закрыто". Таким образом, кроме обычных арифметических действий, двоичные числа оказались исключительно удобны и для реализации логических вычислений ("булева алгебра"). Как именно хранятся в памяти компьютера сами числа ? Весь массив памяти разбит на отдельные блоки, к которым можно обращаться независимо. Минимальная единица адресации называется "байт" и на IBM PC состоит из 8 двоичных разрядов (битов). Каждый двоичный разряд может иметь только одно из двух значений: '0' или '1'. Биты (разряды) в байте нумеруются справа налево, начиная с нулевого. Самый правый бит (нулевой) называется младшим, самый левый (седьмой) - старшим. --------------------------------- | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | --------------------------------- | x | x | x | x | x | x | x | x | --------------------------------- На схематическом рисунке вверху неизвестные биты обозначены через 'x', а их номера (разряды) обозначены цифрами вверху. Используя формулу представления позиционного числа, можно легко представить в двоичном виде несколько из первой сотни чисел натурального ряда. Сначала вычислим вес каждого двоичного разряда: 2**0 = 1 2**1 = 2 2**2 = 4 2**3 = 8 2**4 = 16 2**5 = 32 2**6 = 64 2**7 = 128 Понятно, что самое большое число, какое только можно записать в один байт, получится если во всех разрядах будут стоять единицы: 1*128 + 1*64 + 1*32 + 1*16 + 1*8 + 1*4 + 1*2 + 1*1 = 255 А какое самое маленькое число ? Очевидно, нуль. Таким образом, один байт памяти может быть использован для представления 256 чисел в диапазоне от 0 до 255 включительно. Это совсем не так мало. Сопоставив каждому числу от 0 до 255 свой символ алфавита, мы получаем возможность хранения в одном байте любого символа расширенной таблицы ASCII. А, заодно, и возможность манипулирования этими символами как самыми обычными числами. Легче всего записать в двоичном представлении числа, являющиеся точной степенью двойки. Используя 8-битное представление, запишем: 0 -> 00000000 1 -> 00000001 2 -> 00000010 4 -> 00000100 8 -> 00001000 16 -> 00010000 32 -> 00100000 64 -> 01000000 128 -> 10000000 Теперь несложно получить запись любого числа в диапазоне 0 - 255 - это просто сумма составляющих его чисел. Как, например, записать, число 123 ? 123 = 64 + 32 + 16 + 8 + 2 + 1 -> 01111011 Умея записывать числа, можно заняться и действиями над ними. Элементарные арифметические операции ------------------------------------ Сложим, к примеру, 123 и 321. Число 321 больше чем 255 и не поместится в один байт, поэтому воспользуемся 16-ти разрядным представлением. 123 -> 0000000001111011 321 -> 0000000101000001 --- ---------------- 444 -> 0000000110111100 Как получился этот результат ? Самым обыкновенным, "школьным" методом поразрядного сложения с переносом в следующий разряд при переполнении. Составим таблицу сложения: ------------- | + | 0 | 1 | ------------- | 0 | 0 | 1 | ------------- | 1 | 1 | * | ------------- Самая верхняя строка и самый левый столбец перечисляют операнды (0 и 1), а на пересечении строки и столбца указан результат сложения: 0 + 0 = 0 0 + 1 = 1 + 0 = 1 1 + 1 = Перенос в следующий разряд (обозначен *) Теперь можно выполнить сложение: 0000000001111011 + 0000000101000001 ---------------- 0000000110111100 Зная как выполняется сложение, можно выполнить и умножение (как последовательность сложений). Правда, до сих пор, мы оперировали только целыми положительными числами. О том, как представляются отрицательные числа и как выполняются действия с ними, я решил рассказать в следующий раз, а пока предлагаю Вам прочитать об этом самостоятельно. Подобно арифметическому сложению и умножению вводятся также логическое сложение и умножение. Элементарные логические операции -------------------------------- Важная особенность логических операций - отсутствие переноса. Все логические операции производятся поразрядно, результат в каждом разряде не зависит от соседних и этим обусловлена высокая скорость и эффективность выполнения логических операций. Если арифметическому сложению и умножению соответствовали знаки '+' и '*', то логическое сложение и умножение обозначаются в С символами '|' (OR) и '&' (AND). Мне кажется, проще всего понять эти логические операции на примере двух идиотских электрических схем. Итак, имеются: L - Lamp - Лампочка B - Battery - Батарейка S - Switch - Выключатель Я полагаю, Вы сможете понять работу этих схем, даже не имея диплома инженера-электрика. Идея очень проста: Лампочка (L) подключена к Батарейке (B) через Выключатель (S). Если Выключатель (S) включен, то лампочка горит, а если выключен, то лампочка погашена. "Идиотизм" заключается в том, что вместо одного, у нас два выключателя в каждой схеме и результат (Горит/Погашена) зависит от обоих. 1. Scheme '&' (AND) 2. Scheme '|' (OR) +--- L ---------- B --+ +--- L ---------- B --+ | | | | | | | | +--- S1 -------- S2 --+ +-------- S1 ---------+ | | +-------- S2 ---------+ Применим наше знание двоичной системы и обозначим неактивное состояние (выключено, погашено) через 0, а активное (включено, горит) через 1. Составим таблицы, описывающие работу этих схем: 1. Таблица '&' (AND) 2. Таблица '|' (OR) ------------- ------------- |AND| 0 | 1 | | OR| 0 | 1 | ------------- ------------- | 0 | 0 | 0 | | 0 | 0 | 1 | ------------- ------------- | 1 | 0 | 1 | | 1 | 1 | 1 | ------------- ------------- На этот раз, в качестве операндов у нас выступают состояния выключателей: 0 - Выключен, 1 - Включен, а в качестве результата операции - состояние лампочки: 0 - Погашена, 1 - Горит. Операция AND называется Логическое Умножение - И Операция OR называется Логическое Сложение - ИЛИ Таблица '&' (AND) описывает ситуацию так: Лампочка горит только если включены оба выключателя S1 И S2 0 & 0 = 0 0 & 1 = 0 1 & 0 = 0 1 & 1 = 1 Таблица '|' (OR) описывает ситуацию так: Лампочка горит если включен хотя бы один выключатель S1 ИЛИ S2 0 | 0 = 0 0 | 1 = 1 1 | 0 = 1 1 | 1 = 1 Соответственно, сами таблицы называются Таблицы Истинности. Кроме этих логических операций, в С используются еще две элементарные логические операции: NOT (НЕ), обозначаемое символом '~', и eXclusive OR - XOR (Исключающее ИЛИ), обозначаемое символом '^'. Что такое НЕ (отрицание), думаю, особо объяснять не требуется, это просто инверсия логического значения: было 0 - стало 1, было 1 - стало 0. ~0 = 1 ~1 = 0 А вот eXclusive OR - XOR (Исключающее ИЛИ) намного интереснее. Это весьма популярная операция, без которой не обходится почти ни одна система шифрования. eXclusive OR (Исключающим ИЛИ) она называется потому, что разрешает выбор только одного из двух вариантов. Как, например, в семейной ссоре: ИЛИ я ИЛИ она ! Соответственно выглядит и таблица истинности: 0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 0 = 1 1 ^ 1 = 0 Другое название этой операции - Проверка на Совпадение. Легко понять почему: результат равен 1 только если операнды НЕ совпадают. ------------- |XOR| 0 | 1 | ------------- | 0 | 0 | 1 | ------------- | 1 | 1 | 0 | ------------- Но эта же операция имеет и еще одно название - сложение по Модулю 2. В самом деле, вспомним нашу таблицу сложения для двоичных чисел: ------------- | + | 0 | 1 | ------------- | 0 | 0 | 1 | ------------- | 1 | 1 | * | ------------- Самая верхняя строка и самый левый столбец перечисляют операнды (0 и 1), а на пересечении строки и столбца указан результат сложения: 0 + 0 = 0 0 + 1 = 1 + 0 = 1 1 + 1 = Перенос в следующий разряд (обозначен *) Если "потерять" результат переноса в следующий разряд (а мы уже говорили, что в логических операциях переносы НЕ выполняются), то как раз и получится таблица истинности для XOR. Сейчас я хочу немного отвлечься от двоичной арифметики и поговорить о сложении по модулю. Операции по Модулю ------------------ В реальной жизни нас окружает множество устройств и явлений, связанных с операциями по некоторому модулю - практически всегда, если это связано с движением по окружности или измерением времени. В школе мы привыкаем, что все вычисления проводятся над числами, представленными в виде отметок на бесконечной числовой оси. Часто, однако, удобно использовать прямо противоположное представление, когда вместо бесконечной прямой, отметки располагаются на окружности, так что первое и последнее числа шкалы совпадают. Простейший и привычный прибор для таких вычислений - циферблат часов. Так, например, секунды и минуты отсчитываются по модулю 60, и отметка 60 одновременно является и отметкой 0. Часы отсчитываются по модулю 12 или 24. Другой распространенный прибор для расчетов по модулю - календарь. Следуя восходящей к древнему Шумеру традиции, мы считаем дни недели по модулю 7 (соответственно фазам Луны). Другие модули, используемые в современном грегорианском календаре, это 3 для кварталов, 12 - для месяцев и 365/366 для отсчета лет. Вычисления по модулю обычно возникают при операциях с ограниченным набором предметов. Например, в неделе 7 дней. Если к пятнице прибавить 7 дней, то мы получим опять пятницу. В году 12 месяцев. Если к январю прибавить 12 месяцев, то мы опять получим январь. Разумеется, сама операция 'прибавить' должна иметь смысл. Например, в индуистской космогонии, воплощение при каждом новом рождении зависит от поступков в предыдущей жизни ('анизотропия') и, поэтому, операция сложения по модулю (перевода стрелок часов) неприменима. По счастью, в науке и технике осталось еще достаточно вполне 'изотропных' задач, где с успехом может быть использовано сложение по модулю. Великий полководец, Юлий Цезарь (Gaius Julius Caesar) оставил нам не только юлианский календарь и "Записки о галльской войне" ("De Bello Gallico", 58-50 BC), но и одну из первых систем шифрования, которая так и называется "Код Цезаря". Вот исчерпывающее описание из Encyclopaedia Britannica: > The simplest of all substitution ciphers are those in which the > cipher alphabet is merely a cyclical shift of the plaintext alphabet. > Of these, the best known is the Caesar cipher, used by Julius Caesar, > in which A is encrypted as D, B as E, and so forth. As many a > schoolchild has discovered to his sorrow, cyclical-shift substitution > ciphers are not secure. As is pointed out in the section on > cryptanalysis (see below Cryptanalysis), neither is any other > monoalphabetic substitution cipher in which a given plaintext symbol > is always encrypted into the same ciphertext symbol. Because of the > redundancy of the English language, only about 25 symbols of > ciphertext suffice to permit the cryptanalysis of monoalphabetic > substitution ciphers. The explanation for this weakness is that the > frequency distributions of symbols in the plaintext and in the > ciphertext are identical, only the symbols having been relabeled. In > fact, any given structure or pattern in the plaintext is always > preserved intact in the ciphertext, so that the cryptanalyst's task > is an easy one. Код Цезаря (простейший подстановочный код) состоит в замене (подстановке) буквы, отстоящей от заменяемой на фиксированное число позиций. Сам Цезарь (во время галльской войны) использовал число 3 (A заменялось на D, B на E, C на F итд), но может быть использовано и любое другое число. Обратите внимание на цикличность подстановки - дойдя до конца алфавита мы переходим к его началу. Это можно представить так, словно у нас есть циферблат с 26 латинскими буквами (вместо 12 арабских цифр) и сделав полный круг стрелка снова показывает на первую букву. Понятно, что секретность (криптостойкость) такого кода очень мала, но он иногда применяется как часть более сложных криптосхем. С математической точки зрения, используется операция сложения по модулю 26 (число букв латинского алфавита). Это можно записать так: CipherLetter = (PlainLetter + 3) mod 26 Новая (кодированная) буква получается из старой (оригинальной) буквы сдвигом на три позиции с учетом цикличности подстановки. То есть, вместо 27-й буквы снова используется первая итд. Легко понять, что по модулю можно не только складывать, но и вычитать. На нашем "циферблате" это просто будет обозначать перевод стрелки не вперед, а назад. А как выглядит вычитание по модулю 2 ? В двоичном алфавите только 2 буквы - 0 и 1. При циклическом сдвиге после 1 снова следует 0, а после 0 снова 1. Это означает, что в двоичной системе сложение и вычитание по модулю 2 неразличимы (совпадают). Благодаря этому, сложение по модулю 2 (XOR) очень широко используется в различных криптографических схемах, так как зашифровка и расшифровка выполняются с использованием той же самой операции - XOR. -----[05]----------[Homework]--------------------------------------------- Вот, только, не надо присылать мне домашних заданий "на проверку" - для этого у меня просто не будет времени. Вы делаете это для себя - не для оценки. Вопросы не обязательно основаны на материалах выпуска и, как это обычно и бывает в жизни, могут потребовать от Вас самостоятельного исследования. 1. Запишите в восьмеричной и шестнадцатеричной системах число, месяц и год Вашего рождения. Известно, что эти даты широко используются в нумерологии. Как Вы думаете, какая система счисления используется современными нумерологами, если само это учение основано на древнейших ассирийских культах ? Изменятся ли нумерологические прогнозы при изменении системы счисления ? Какой системой счисления пользовались предсказатели древнего Египта ? Совпадают ли системы счисления использовавшиеся древними и современными предсказателями ? Имеет ли это отношение к точности прогноза ? 2. Напишите римскими цифрами текущую календарную дату и дату Вашего рождения. Рассчитайте, сколько лет, месяцев и дней Вам исполнилось на момент вычисления, используя только римские цифры. Не думаете ли Вы, что система календарных расчетов (унаследованная нами от римлян) нуждается в коренных изменениях ? 3. Как Вы знаете, первый арифмометр был создан французским философом и ученым Блезом Паскалем (Blaise Pascal) в 1642 году. Как Вы думаете, в какой системе счисления работал этот механический калькулятор ? Можете ли Вы, вооруженные современным знанием, предложить основные принципы работы механического калькулятора для календарных расчетов a) в римской системе счисления b) в десятичной системе счисления c) в календаре майя 4. Одна из позиционных систем счисления, вызывающая большой интерес у математиков и специалистов по вычислительной технике, называется "мнимо-четверичная". Напишите краткое изложение основ и достоинств этой системы и пришлите мне на адрес, указанный в конце письма. Лучшая работа будет опубликована в одном из следующих выпусков. 5. Как Вы думаете, могут ли кватернионы (quaternion) быть использованы в качестве основания системы счисления? Почему? Обоснуйте. 6. Вы, конечно, знаете фразу: "The quick brown fox jumps over the lazy dog." Это самое короткое предложение, содержащее все буквы английского алфавита. Оно использовалось телеграфистами для проверки каналов связи. Зашифруйте его "вручную", используя оригинальный код Цезаря (сдвиг на три позиции). Можете ли Вы предложить способ "автоматизации" этой работы? 7. В период второй мировой войны, германский генеральный штаб использовал специальную шифровальную машину "Enigma" ("Загадка"), секреты которой были успешно выкрадены союзниками. Для дешифровки немецких сообщений был построен специальный электромеханический компьютер. Как Вы считаете, значительно ли отличался примененный в "Enigma" метод шифрования от рассмотренного выше кода Цезаря? Используются ли подобные методы в современных схемах шифрования? -----[06]----------[Books]------------------------------------------------ Очень краткий список из нескольких книг, которые Вам стоит изучить. 1. Б. Керниган, Д. Ритчи "Язык программирования С". Книга дважды переиздавалась, в том числе, в русском переводе. На первое издание часто ссылаются, как на "Большое голубое С" (именно оно было на обложке английского оригинала). Эта книга написана в 1978 году авторами языка и, до сих пор, остается одним из лучших руководств по С. 2. К. Тондо, С. Гимпел "Язык С. Книга ответов". В книге КР содержится большое число упражнений для самостоятельной работы, а Тондо и Гимпел привели свои решения для них. Надеюсь, Вы избежите соблазна начать сразу с ответов. 3. Я. Белецкий "Энциклопедия языка С". Исчерпывающее описание среды Turbo C 2.0 4. Р. Жешке "Толковый словарь стандарта языка С". Превосходное дополнение к книгам, перечисленным выше. -----[07]----------[Appendix]--------------------------------------------- На домашней страничке рассылки 'Ассемблер по русски !' (орфография автора, код рассылки: comp.prog.asm, хостинг http://subscribe.ru/) http://www.chat.ru/~rusasm/ Вы можете найти несколько более формальное введение в системы счисления Url: http://www.chat.ru/~rusasm/files/learn/ARIFM.RAR size: 3715 Вопреки тому, что там утверждается, непозиционные системы счисления _ДА_ используются в компьютерах и, более того, наблюдается взрывной рост интереса к ним. Также, прочтите краткий очерк развития вычислительной техники Url: http://www.chat.ru/~rusasm/files/learn/HISTORY.RAR size: 12178 Написан он во времена застоя и весьма неполон, но ошибок, кроме одной, я не заметил. > Первый реализовал идею перфокарт Холлерит. Вот краткая справка, подготовленная с помощью CD Encyclopaedia Britannica (Copyright (c) 1996 Encyclopaedia Britannica, Inc.) Перфокарта (Punch Card) вовсе не была изобретена Г. Холлеритом (Herman Hollerith), а появилась намного раньше и уже Жаккард (Joseph-Marie Jacquard) применил ее в своем ткацком станке (Jacquard loom, 1804-1805). Позднее (1822) эти перфокарты были адаптированы Ч. Бэббиджем (Charles Babbage) для хранения информации и управления разработанным им автоматическим цифровым компьютером (Analytical Engine, 1834). Так что, по крайней мере, уже ко времени восстания луддитов (1811), перфокарты использовались "в промышленных масштабах". Талантливый изобретатель табулятора (1890 - отсюда началась история фирмы IBM), Холлерит, придал перфокартам их "современный" вид и, с этого времени, 80-колонная перфокарта и использованный в ней код повсеместно стали называться "холлеритовскими" (Hollerith Card, Hollerith Code). -----[08]----------[Glossary]--------------------------------------------- ASCII - American Standard Code for Information Interchange -----[09]----------[Info]------------------------------------------------- Вопросы и замечания принимаются по адресу: aleph@canada.com Предыдущий выпуск доступен со страницы архива: http://www.subscribe.ru/archive/comp.prog.c4dummies/ -----[--]----------[The End]----------------------------------------------

© Gazlan 2009 * gazlan@yandex.ru

Hit Counter