Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Конкурс-загадка

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Треп] >> Конкурс-загадка
Имя
Сообщение << Старые топики   Новые топики >>
Конкурс-загадка - 2008-07-02 19:37:32.546666   
Cool_Alex

Сообщений: 4
Оценки: 0
Присоединился: 2008-07-01 22:34:17.920000
Скучно что то тут, никто ничего нового не создает; вот и решил создать тему "Конкурс-загадка". Вы выставляете icq-номер без пароля, а пасс как нибудь зашифровываете. И примеру нум 6473154, пароль (5х * 0,5) + …
——+——
Сам и начну: 370071172 и 370071941, пасс: *@*9*7. Под * стоит число, под @ другое, на 1 меньше числа стоящего под *.
Кто отгадает, отпишитесь
Post #: 1
RE: Конкурс-загадка - 2008-07-02 21:42:32.160000   
BadRedHat

Сообщений: 154
Оценки: 0
Присоединился: 2006-06-07 21:54:19
Математически грамотно пишется *=n, @=n-1, где n-целое число. Эх жаль что я уезжаю..а то бы поотгадывал:)
Post #: 2
RE: Конкурс-загадка - 2008-07-02 21:50:38.680000   
MrOMG

Сообщений: 316
Оценки: 0
Присоединился: 2008-07-02 21:05:33.240000
9ти знаки =/
Post #: 3
RE: Конкурс-загадка - 2008-07-04 01:21:05.670000   
fromRIDDER

Сообщений: 1075
Оценки: 30
Присоединился: 2008-01-14 20:20:53.380000
Из формулы следует, что существует всего 9 вариантов пароля, правильный - 656967.

Для поднятия интереса к теме предлягаю, тот кто находит пароль первым, меняет на свой и пишет формулу пароля.

Пароль: "abcde", где

a = цифра;
b = a * 4;
c = b / 2;
d = b + c;
e = d * a;

Приятных рассчётов.

Post #: 4
RE: Конкурс-загадка - 2008-07-04 11:54:59.850000   
жжж^слоник^жжот

Сообщений: 1806
Оценки: 10
Присоединился: 2008-05-20 11:08:35.946666
14266
Post #: 5
RE: Конкурс-загадка - 2008-07-04 13:47:05.316666   
Bios Nielsеn

Сообщений: 6266
Оценки: 321
Присоединился: 2007-10-22 19:45:18.176666
quote:

ORIGINAL: fromRIDDER

Из формулы следует, что существует всего 9 вариантов пароля, правильный - 656967.

Для поднятия интереса к теме предлягаю, тот кто находит пароль первым, меняет на свой и пишет формулу пароля.

Пароль: "abcde", где

a = цифра;
b = a * 4;
c = b / 2;
d = b + c;
e = d * a;

Приятных рассчётов.

правельный пасс 2841224 - легковато, перебор даже не потребовался.
значит так - сменил пасы
условие такое:
Пароль - производная от abcde представленная в 16-ричной системе и без последнего символа.

abcde - получаем по той же схеме:
a = цифра;
b = a * 4;
c = b / 2;
d = b + c;
e = d * a;
но только теперь вам нужно перевести всё это в 16- ричную систему исчисления и убрать последнюю цифру:-)

напоминаю пасы подбираем к номерам 370071172 и 370071941
Post #: 6
RE: Конкурс-загадка - 2008-07-04 17:22:58.303333   
easyyy

Сообщений: 229
Оценки: 0
Присоединился: 2008-05-19 19:35:03.066666
303310935; 303309058; pass 8*591@8 где * любая цифра, а @ любая маленькая буква латинского алфавита, отписывайтесь кто забрал, с каждым разом аськи будут красивее, а задания сложнее
Post #: 7
RE: Конкурс-загадка - 2008-07-04 23:47:44.540000   
fromRIDDER

Сообщений: 1075
Оценки: 30
Присоединился: 2008-01-14 20:20:53.380000
quote:

ORIGINAL: Bios Nielsеn

Пароль - производная от abcde представленная в 16-ричной системе и без последнего символа.

abcde - получаем по той же схеме:
a = цифра;
b = a * 4;
c = b / 2;
d = b + c;
e = d * a;
но только теперь вам нужно перевести всё это в 16- ричную систему исчисления и убрать последнюю цифру:-)

напоминаю пасы подбираем к номерам 370071172 и 370071941


На этот раз пароль посложнее 1b201fdf.


ICQ: 370071172 и 370071941
Новый пароль: edcba - схема немного другая, ^ - это возведение в степень 8|

a = цифра;
b = a * 4;
c = b / 2;
d = b + c;
e = (d + 4) ^ (a + 2).

Post #: 8
RE: Конкурс-загадка - 2008-07-04 23:54:02.306666   
fromRIDDER

Сообщений: 1075
Оценки: 30
Присоединился: 2008-01-14 20:20:53.380000
quote:

ORIGINAL: easyyy

303310935; 303309058; pass 8*591@8 где * любая цифра, а @ любая маленькая буква латинского алфавита, отписывайтесь кто забрал, с каждым разом аськи будут красивее, а задания сложнее


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

Post #: 9
RE: Конкурс-загадка - 2008-07-05 00:45:15.530000   
BacRTKa

Сообщений: 753
Оценки: 0
Присоединился: 2007-02-22 12:30:49.403333
Ну лините хоть почитать где новичку… )
слово
двойное слово…

А то блин пишете тут загадками какими то , сами для себя..
Калькулятором то можно хоть пользоватся? ))

Для тех кому не понятно о чем речь.

Основные принципы работы компьютера • ; Прежде чем начинать программировать, необходимо понять, как работает компьютер. Как говорил какой — то полководец: "Нужно хорошо изучить своего врага!!!" Возможно, это говорил и не полководец, но это неважно. Программирование — это постоянная борьба с машиной. Нужно заставлять ее делать то, что вам нужно. Поэтому любой программист просто обязан знать структуру компьютера. ...... • / • ; ; . • : ; ' 1.1. Основы работы персонального компьютера В общем случае компьютер состоит из следующих основных компонентов: процессор, память, видеокарта, винчестер (жесткий диск) и различные разъ- емы для подключения дополнительных устройств. Все эти компоненты свя- заны между собой с помощью шлейфов и шин. Вся информация в компьютере хранится на винчестере. Когда запускается на выполнение какая-либо программа, она сначала загружается во внутрен- нюю или оперативную память (ОП) и только потом процессор начинает выполнять содержащиеся в ней инструкции. Чем больше программа, тем дольше она загружается, и это желательно учитывать всегда. Если у вас по- лучается слишком большой программный код, то для ускорения выполне-' ния программы можно в основном файле задействовать только основные возможности. Все дополнительные возможности, которые используются не всегда, можно вынести в отдельные файлы, например, динамически под- ключаемые библиотеки DLL (Dynamic Link Library), о которых будет от- дельный разговор. Результат работы программы выводится на экран через видеокарту. На любой видеокарте есть чип памяти, в котором отображается все содержи- мое экрана. Когда вам нужно вывести что-то на экран, вы просто копи- руете эти данные в видеопамять, и видеокарта автоматически выводит их _8 Глава 1 на монитор. Именно такой способ использовался в среде ОС MS-DOS (Операционная система MS-DOS). В Windows запрещен прямой доступ к видеопамяти (не считая DirectX), и вывод работает здесь немного по- другому. Как именно, мы будем рассматривать, когда придет время знако- миться с графикой в Delphi. Это пока все, что необходимо знать о работе компьютера. В следующих раз- делах некоторые, наиболее важные, моменты будут рассмотрены более под- робно. Сейчас же нас будет интересовать работа процессора, поэтому ему уделяется здесь особое внимание. 1.2. Двоичная система работы процессора Компьютеры изобрели достаточно давно. В те далекие времена об электро- нике даже и не упоминалось. Первые компьютеры были ламповыми и за- нимали очень много места. Для того чтобы управлять такой махиной, нужно было очень много обслуживающего персонала. Однако именно тогда были заложены основные принципы работы компью- тера, которые действует до сих пор. Суть их заключается в следующем. Дан- ные передаются с помощью какого-то сигнала (для нас не имеет значения какого, потому что мы не электронщики) методом "есть сигнал или нет" или, по-другому, "включен или выключен". Так появился "бит" (bit). Бит это единица информации, которая может принимать значение 0 или 1, т. е. "включен или выключен ". Восемь бит объединяются в байт, один байт ра- вен 8 битам. Почему именно 8? Да потому, что первые компьютеры были восьмиразрядными и могли работать одновременно только с 8 битами, на- пример, 010000111. Все первые нули можно удалять, поэтому число 010000111 можно записать как— 10000111. Это то же самое, что и в привычной для нас десятичной системе счисления, где каждый разряд может принимать значения от 0 до 9. Здесь так же никто не будет писать число 5743 как 0005743. В один байт можно записать любое число от 0 до 255. Почему? Об этом не- много позже. Указанный диапазон чисел довольно мал. Поэтому чаще ис- пользуют более крупные градации: П два байта = слово; О два слова = двойное слово. Итак, компьютер стал работать в двоичной системе счисления. Но как же тогда записать число 135, если у нас единица информации может принимать значения 0 или 1? Это можно сделать в двоичной системе. Давайте разбе- ремся, как это работает. Для начала вспомним, как действует десятичная система счисления, к кото- рой мы привыкли. Для этого рассмотрим число 519 578 246. Я специально Основные принципы работы компьютера £ выбрал такое число, чтобы оно состояло из восьми разрядов (цифр). Теперь запишем его, как показано на рис. 1.1. Номер разряда 7 6 5 4 3 2 1 0 1 9 5 7 8 2 4 6 Рис. 1.1. Число 519 578 246 в десятичной системе исчисления i Как видите, я пронумеровал разряды, начиная с нуля до восьми, и справа налево. Теперь представьте себе, что это не целое число, а просто набор разрядов. 1, 9, 5, 7, 8, 2, 4 и 6. Как из этих разрядов получить целое число? Наверно некоторые скажут, что надо просто записать их подряд. А если я спрошу, почему? Вот тут появляется математика. Нужно каждый разряд ум- ножить на 10 (степень счисления, возведенную в степень номера разряда). Непонятно? Попробую оформить сказанное в виде формулы, показанной на рис. 1.2. г-&gt; л * 1л /1 Номер разряда Номер разряда Разряд 0 (10 )+Разряд 1 * (10 )+... Рис. 1.2. Работа с десятичными числами Давайте посчитаем значение числа по этой формуле, начиная с нулевого разряда. Получается, что 6 нужно умножить на 10 в нулевой степени 6 х 10° = 6. Потом прибавить 4 х 10 в 1 степени, или 4 х 101 = 40 (и того уже 46). Потом 2 х 10 во второй степени, 2 х 102 = 200 (итого 246). Потом 8 х 10 в 3 степени, 8 х 103 = 8000 (и того 8246) и т. д." В итоге получится число 519 578 246. А теперь рассмотрим двоичную систему счисления. Здесь каждый разряд может принимать значение 0 или 1 (2 состояния). Кстати, в десятичной сис- теме у нас каждый разряд мог принимать значения от 0 до 9, т. е. имел де- сять состояний. Давайте рассмотрим следующий байт — 010000111. Запи- шем его на листке бумаги так, как показано на рис. 1.3. Номер разряда 8 7 6 5 4 3 2 1 О Биты 010000111 Рис. 1.3. Двоичное число 10 Глава 1 Здесь действует та же самая формула, только нужно возводить в степень не 10, а число 2. Опять же произведем расчет, начиная с нулевого разряда, т. е. справа налево. Получается, что первую 1 мы должны умножить на 2 в нулевой степени (1x2°= 1). Следующую единицу нужно умножить на 2', получается 2 (итого 2 + 1 = 3) и т. д. Вот как это будет выглядеть полностью: (1 х 2°) + (1 х 21) + (1 х 22) + (0 х 23) + (0 х 24) + (0 х 25) + + (0 х 26) + (1 х 27) + (0 х 28) = 135 Вот так, оказывается, выглядит в двоичной системе счисления число 135. Давайте теперь научимся пересчитывать числа из десятичной системы в двоичную. Для этого нужно число 135 разделить на 2. Получается 67 и оста- ток 1 (запомним 1, т. к. она определяет первый двоичный разряд искомого числа). Теперь 67 снова делим на 2, получается 33 и остаток 1 (таким обра- зом получено уже две двоичные единицы, т. е. 11). 33 делим на 2, получаем 16 и остаток 1 ( в результате получаем три двоичные единицы, 111). 16 де- лим на 2, получаем 8 и остаток 0 (результат 0111). И наконец, 8 делим на 2 = 4, остаток от деления при этом будет 0 (получаем 00111); 4 делим на 2 = 2, остаток 0 (получаем 000111). 2 делим на 2=1, остаток 0 (итого 0000111). Оставшаяся 1 частного на 2 не делится, значит, это последний, самый старший разряд искомого числа. Просто дописываем ее к ранее сформированным разрядам и получаем окончательный ответ— 10000111. Получилось первоначальное число. Вот так происходит преобразование чисел в двоичную систему счисления. Таким же образом можно перевести число в любую другую систему (двоичную, восьмеричную, шестнадцатеричную). Для более полного закреп- ления материала в табл. 1.1 показано соответствие десятичных чисел двоич- ным. Попробуйте сами перевести пару чисел из одной системы счисления в другую. ' Таблица 1.1. Таблица соответствия десятичных и двоичных чисел Десятичное 0 1 2 3 4 5 Двоичное 0 1 10 11 100 101 Десятичное 6 7 8 9 10 Двоичное 110 111 1000 1001 1010 Например, попробуйте перевести число, состоящее из 8 бит (1 байт), у ко- торого все биты состоят из единиц, в десятичную систему. Вы должны по- Основные принципы работы компьютера 11 лучить 255. Это максимальное число, которое можно записать в одном бай- те, потому что все его биты равны 1. Вот так и получается, что в 8 битах можно записать числа от 0 до 255. В 16 битах (2 байта или слово) можно записать число от 0 до 65 535. В 32 битах (двойное слово) можно уже запи- сать число от 0 до 4 294 967 295. В компьютере принято вести расчет в двоичной или шестнадцатеричной системе. Вторая вошла в обиход, когда компьютеры стали 16-разрядными. Шестнадцатеричная система выглядит немного по-другому. Каждый разряд содержит уже не 2 состояния (как в двоичной системе) или десять (как в десятичной системе), а шестнадцать. Поэтому один разряд может принимать значения: 1, 2, 3, 4, 5, 6, 7, 8, 9, А, В, С, D, E, F. Буква "А" соответствует цифре 10 в десятичной системе "В" соответствует 11 и т. д. Например, число 1А в шестнадцатеричной системе равно 26 в десятичной. Почему? Да в со- ответствии все с той же формулой. Только здесь нужно возводить уже 16 в степень номера разряда. "А" — десять, нужно умножить на 16°. В результате получится 10. 1 — первый разряд нужно умножить на 16', получится значе- ние 16. Затем полученные результаты складываются и определяется искомое число — 10 + 16 = 26. В результате, как показано в табл. 1.2, можно устано- вить соответствие между числами, записанными в различных системах счис- ления. Таблица 1.2. Таблица соответствия десятичных, двоичных и шестнадцатеричных чисел Десятичное 6 1 2 3 4 5 " 6 7 8 9 10 • • • 11 12 Двоичное 0 1 10 11 100 101 110 111 1000 1001 , 1010 1011 1100 Шестнадцатиричное 0 1 • .- 2 3 4 5 " 6 7 8 9 . А . В С Глава 1 Таблица 1.2 (окончание) Десятичное 13 14 15 16 17 18 19 20 Двоичное 1101 1110 V. 1111 10000 10001 10010 10011 10100 Шестнадцатеричное D Е F 10 11 12 13 14 На протяжении всей книги мы будем иногда встречаться с шестнадцатерич- ной системой счисления (без этого никуда не денешься). В этом случае, когда нужно будет показать, что число шестнадцатеричное, перед ним будет ставиться знак решетки #, например, #13. В других языках, например Assembler или C++, принято ставить в конце числа букву h (13h). Но эта книга о Delphi, поэтому здесь будем писать так, как принято в этой среде разработки, чтобы потом не возникало никаких вопросов. До сих пор рассматривались целые числа. С числами с плавающей точкой совершенно другая история. Если заранее предусмотрено, что число может быть отрицательным, то его длина сокращается ровно на один бит (этот бит отводится под знак числа). Так, неотрицательное целое число может быть 8- битным, тогда как число со знаком будет 7-битным. Первый бит будет озна- чать знак. Если первый бит равен 1, то число отрицательное, иначе положи- тельное. В дробных числах один байт может быть отведен для целой части и один для дробной. Никогда не смешивают целую и дробную части в одно целое. За счет этого дробные числа всегда будут занимать больше памяти, и опера- ции с ними будут проходить намного дольше. На первый взгляд перевод чисел очень сложный процесс, но вручную им пользоваться необязательно. Человек уже давно придумал для себя хорошего помощника — калькулятор. С его помощью без проблем можно перевести число в любую систему счисления. Запустите встроенный в Windows калькулятор (Пуск | Программы | Стан- дартные | Калькулятор). Теперь выберите из меню Вид пункт Инженерный. На рис. 1.4 показано окно, которое вы должны увидеть. Основные принципы работы компьютера 13 FF225ED532255DC2 Цр Hex Г Dec Г Oct Г Bin"] |&lt;? 8байт Т 4байга С 2байга Г 1 байт |Г Inv Г Hyp Sta F-E МС MR MS 1ft Backspace СЕ С 7 4 1 0 A 8 5 9 6 2 3 +Л / « + B j С 1 D Mod Or Lsh = E And Xor Not Int F Рис. 1.4. Внешний вид калькулятора Для перевода числа в другую систему просто наберите его в окне ввода калькулятора и потом чвыберите нужную систему счисления. На рисунке красным цветом выделены кнопки переключения из одной системы счисле- ния в другую: О Hex — шестнадцатеричная; П Dec — десятичная; П Oct — восьмеричная; П Bin — двоичная. Возникает вопрос — зачем здесь так долго рассказывалось о преобразованиях чисел, когда так легко можно воспользоваться калькулятором? Ответ прост — это нужно знать. Поверьте мне. Если вы будете понимать, как происходит преобразование, то вам потом легче будет работать с этими числами. Никогда не полагайтесь только на технику. Всегда полезно знать, как и за- чем она что-то делает. Если вы разберетесь с шестнадцатеричным представ- лением данных, то сможете простые преобразования делать в уме. Ну, а ес- ли вы еще собираетесь стать и хакером, то вам просто необходимо научиться хорошо оперировать разными системами счисления. 1.3. Машинный язык Данные на диске хранятся в двоичном виде. Даже текстовые файлы на дис- ке выглядят в виде нулей и единиц. Точно так же выглядит и любая про- 14 Глава 1 грамма, только ее называют машинным кодом. Давайте познакомимся с ним немного поближе. Любая программа представляет собой последовательность команд. Эти команды называются процессорными инструкциями. В точном соответствии этим инструкциям процессор определяет, что и как ему нужно делать. Когда вы запускаете программу, компьютер загружает ее машинный код в опера- тивную память и начинает выполнять команду за командой. Наша задача как программистов написать эти инструкции таким образом, чтобы компь- ютер понял, что мы от него хотим. Реальная программа, которую выполняет компьютер, представляет собой последовательность единиц и нулей. Такую последовательность называют машинным языком. Человек не способен эффективно думать единицами и нулями. Для нас легче воспринимается осмысленный текст, а не сумасшед- шие числа в двоичной системе счисления, с которой мы не привыкли рабо- тать. Например, команда сложения двух регистров выглядит так: #ОЗСЗ. Это мало о чем говорит, и запомнить такую команду очень тяжело. На- много проще написать "сложить число! и число2 ". Первое время программисты писали программы в машинных кодах, пока кому-то не пришла в голову идея: "Почему бы не писать текст программы на понятном языке, а потом заставлять компьютер переводить этот текст в машинный код?" Идея действительно заслуживала внимания. Так появился первый компилятор — программа, которая переводила текст программ в машинный код. Таким\ образом, пользователи стали писать программы бо- лее осмысленно, а всю рутинную работу по переводу текста программы в машинный код возложили на компьютер. Здесь настало время сделать паузу и рассказать вам небольшую историю языков программирования. Она достаточно интересна и поучительна. Ну, а потом мы продолжим изучение принципов работы компьютера и познако- мимся со структурой процессора и его работой при выполнении программы. 1.4. История языков программирования Как мы уже выяснили, компьютер — примитивное существо, которое мыс- лит нулями и единицами, из которых складываются числа. Основное его устройство — процессор. Все, что может делать процессор, это оперировать двоичными числами. Программы — это тоже числа, которые воспринима- ются процессором как некоторая совокупность команд процессору с целью выполнения им определенных действий. Мы также выяснили, что первые программисты писали программы в ма- шинных кодах. Тогда еще не было компиляторов и приходилось все писать числами. Вы даже представить себе не можете, какой это адский труд. По- стоянно держать в памяти таблицу машинных кодов (это не таблица умно- Основные принципы работы компьютера 15 жения). Например, вам понятно шестнадцатеричное число 8ВСЗ? Нет? А это обычная команда копирования между двумя ячейками регистров. Это просто пример, потому что тогда регистры были другие и процессоры были намного проще. Со временем компьютер стал умнеть, но самое главное, он все также опери- ровал двоичными числами, однако делал это намного быстрее. Програм- мист — это человек, а не железка, и ему очень тяжело создавать логику в числах. Намного легче работать с привычными словами. Например, все ту же команду пересылки удобней записать словами типа "скопировать ebx в еах". Но что делать, если компьютер не понимает слов, а только числа? Вы- ход есть — написать такую программу, которая будет превращать текст в машинные коды. Пусть компьютер сам создает байт-кол. Программу, вы- полняющую эти действия, назвали компилятором, а язык, на котором пи- сался исходный текст программы, назвали языком программирования. 00527F7E E84BQ100QO call TSbocDataFoti», InitViewScid HainUn 11. pas .132: Ini tP rograim,; pOS2'?F83 8BC3 №QV eax,ebx . ; . '.." OQ527F85 E8B6030000 call TSborDataFocro.InitPrograma MainUnit.pas.133: 1£ !DeviceHum&gt;=0 then 00527F8A 83BB±004000000 c»p dword ptr (ebx+S00000410],«00 00527F91 7C26 ji +126 MainUnit.pa».135: ScanPortthr := TScanPortThrea&lt;J.Create&lt;true) OOS27F93 8101 IWJV cl,$Ql 00527F95 B201 . »ov dl,$0l : : . &gt;••• . OOS27F97 A1C4A4S200 MOV еахЛ?OOS2a4d4J OOS27F9C E8EB94RFFF call TThread.Create 00527FM 8BFO wov esi,eax OOS27FA3 89В314040ФОО nwv [ebx+5000004141,esi MainUnit.pas. 136: ScanPortthr.lJ)eviceMum:-J-Devtt;eHum; OOS27FH9 8B8310040000 KK»v eax,[ebx*S00000410] OOS27FAF 89464C roov [esi+S4c]reax MainUnit.pa*.137: ScanPortThr.Resume; OOS27FB2 8BC6 tnov eax,esi 00527FB4 E81F98EFFF call TThread. Resume HalnUnlt.pac.141: try OOS27FB9 33CO 00527FBB 55 OOS27FBC 680B80S200 OOS27FC1 64FF30 xor eax,eax push efo jj push ;OOS2800b push dworcJ ptr t»s [aax] Рис. 1.5. Программа в машинных кодах и Assembler И вот был разработан первый компилятор. Эту программу назвали Assembler, что переводится, как "сборщик". Писать на нем практически так же сложно, как и в машинных кодах, однако теперь уже использовались не числа, а по- _/6 Глава 7 нятные, как показано на рис. 1.5, человеку слова. Например, все та же ко- манда копирования регистров теперь выглядела так: mov eax, ebx. То есть цифры заменились на понятные слова. Вроде все прекрасно и удобно, но почему-то среди программистов возникли споры и разногласия. Кто-то воспринял новый метод с удовольствием. А кто-то говорил, что машинные коды лучше. Любители языка Assembler хвалили компилятор за то, что программировать стало проще и быстрее, а противники утверждали, что программа, написанная в кодах, работает быст- рей. Говорят, что эти споры доходили до драк и иногда лучшие друзья ста- новились врагами. В принципе, и те, и другие были правы. На языке Assembler действительно программу писать легче и быстрей, но программа, написанная в машинных кодах, работала быстрее. Тогда никто не мог себе представить, чем же все может закончиться. Но время показало свое. С помощью Assembler программы писались быстрее, а это один из основных факторов успеха любой программы на рынке. Люди начинают пользоваться тем продуктом, который выходит на рынок первым. Даже если более поздний вариант лучше, человека трудно переубедить пе- рейти на другую версию. Здесь начинает играть большую роль фактор при- вычки. К тому же, когда программист напишет свою первую версию про- граммы в машинных кодах, программист на языке Assembler выпустит уже пару новых версий. Вот так и получилось, что те, кто программировал на языке Assembler, пре- вратились в убегающих вперед, а те, кто программировал в машинных кодах превратились в постоянно догоняющих. В конце концов, первые убежали настолько "далеко", что вторые не смогли догнать и вынуждены были или перейти на Assembler, или отойти от программирования совсем. С этого момента начался бум. Языки программирования стали появляться один за другим. Так появились С, ADA, FoxPro, Fortran, Basic, Pascal и др. Не- которые из них были предназначены только для школьников или обучения, другие были ориентированы на профессиональных программистов. И тут спо- ры перенеслись в другую плоскость — какой язык лучше. Некоторые говори- ли, что это Pascal, другие утверждали что С, ну, а кое-кто утверждал, что это Visual Basic. Этот спор длится уже около 30 лет, и конца ему не видно. При этом все спорные вопросы разделились на две части: 1. Какой язык самый лучший? 2. Что лучше — язык высокого уровня или низкого? Спор по первому пункту не может закончиться до сих пор. Каждый пытается доказать, что его язык программирования самый мощный, удобный и созда- ет самый быстрый профаммный код. Мне кажется, что этот спор не закон- чится никогда. В принципе, такое положение дел устраивает всех, потому что это своеобразная конкуренция. Благодаря ей происходит развитие язы- ков профаммирования, и мы быстро продвигаемся вперед. Основные принципы работы компьютера 17 i Так все же, какой язык лучше? На этот вопрос можно дать ответ, но об этом немного позже. Наиболее интересным был спор: "Что лучше — язык высокого уровня или низкого?" Язык низкого уровня это тот, который ориентирован на команды процессора, т. е. Assembler. К языкам высокого уровня относят С, Pascal, Basic и др. Они ориентированы на людей и создают им максимум удобства при написании программ. Этот спор проходил в той же манере, как и спор между любителями Assembler и любителями программирования в машинных кодах. Только теперь приверженцы языка Assembler утверждали, что их код самый быстрый, а любители языков высокого уровня утверждали, что они напишут программу быстрей, чем самый лучший программист на языке Assembler. Спор продолжался достаточно долгое время. И опять победила скорость разработки и "удобство" языка программирования. Любителям Assembler пришлось отступить, потому что теперь они превратились в " догоняющих". Конечно же, нельзя сказать, что машинные коды и Assembler окончательно ушли из нашей жизни. Они используются до сих пор, но в очень ограни- ченном количестве. Язык Assembler используется только в качестве вставок для языков высокого уровня, а машинные коды используются для написа- ния того, что не может сделать компилятор (да и для написания самого компилятора они могут потребоваться). Ушедшие технологии живут и будут жить, но рядовой программист очень редко встречается с ними. Следующей ступенью стало объектно-ориентированное программирование. Язык С превратился в C++, Pascal превратился в Object Pascal и т. д. И снова борьба. И снова скорость разработки против скорости выполнения программного кода. Опять споры, драки и оскорбления. Война длилась несколько лет. Сколько времени было потрачено в спорах, сколько волос было вырвано на голове в процессе доказательств силы именно его программного кода. А в результате победила скорость и удобство разработки, т. е. объектно-ориентированное программирование (ООП). Последней крупной революцией, происходящей в программировании, счи- тется переход на визуальное программирование. Этот переход происходит прямо на наших глазах. Визуальность дает нам еще более удобные средства разработки для более быстрого написания кода, но проигрывает ООП по быстроте работы. Вот почему многие начинающие программисты стоят на перекрестке, не зная, какой язык выбрать. Лидером в разработке визуальных языков программирования является Borland, а приверженцем ООП остается Microsoft. Конечно же, Билл Гейтс пы- тается встроить в свои языки визуальность, но она примитивна по сравне- нию с такими гигантами, как Delphi, Kylix или C++ Builder. Это связано с изначальной неправильной разработкой MFC (Microsoft Foundation Classes — 18 Глава 1 Основные классы Microsoft), которая не может работать визуально. Нужна глобальная переработка кода, которую почему-то не хотят делать. Вот народ и стоит на двух атомных бомбах, ожидая взрыва одной из них. Как вы ду- маете, какая бомба рванет? Что победит — скорость разработки или ско- рость кода? Я не буду отвечать на этот вопрос. История говорит сама за се- бя, а мы подождем подтверждение этому. Считается, что информационные процессы не будут стоять на одном месте и переход на новые технологии программирования рано или поздно состо- ится. Поэтому я уже перешел на Delphi. Если вы хотите успеть за прогрес- сом, то тоже обязаны вступить в партию любителей Borland. Выбирайте лю- бой из его компиляторов, и вы не ошибетесь. Для вас есть все, что угодно: Delphi, JBuilder, Kylix или C++ Builder. Как видите, у корпорации Borland есть визуальные варианты всех языков, и они действительно лучшие. Как ранее уже говорилось, самая лучшая технология программирования это та, в которой поддерживается визуальность. Ваша среда разработки просто обязана быть визуальной, потому что за этим наше будущее. Если вы хоти- те получить визуальность плюс мощь разработки — ваша среда от Borland. С помощью языков этой фирмы можно сделать абсолютно все. Так что с этим мы покончили. Вердикт окончательный и обжалованию не подлежит. Осталось только ответить на вопрос: "Какой язык программирования луч- ше?" Я уже несколько лет пытаюсь ответить на этот вопрос, но окончатель- ного решения вынести не могу. Даже у того же Visual C++ от Microsoft есть свои плюсы. Как это ни странно, но положительные стороны есть у всех. Вопрос остается только за тем, какие программы будут создаваться? Здесь можно дать примерно такую градацию: 1. Если вы будете писать базы данных, программы общего значения или утилиты, то ваш язык Delphi или C++ Builder. 2. Если это игры, то желательно Visual C++ или Watcome С плюс знание Assembler. Но это не значит, что нельзя использовать Delphi или C++ Builder. В этих средах вы потеряете не намного больше в скорости рабо- ты, поэтому в большинстве игр можно не обращать внимания на эту по- терю. Если правильно использовать свои знания, то и на самом медлен- ном и слабом языке программирования можно создать шедевр. 3. Если это будут драйверы и работа с "железом", где критичен размер фай- ла, ваш язык — чистый С или Assembler. И все же большую массу программ занимают утилиты и базы данных. А тут визуальность необходима, если вы хотите оказаться впереди. Визуальные языки будут жить и за ними будущее. На протяжении всей этой книги будет рассматриваться самый лучший (это на мой взгляд, и он может отличаться от других) язык программирования — Delphi. Основные принципы работы компьютера 19 Корпорация Microsoft тоже движется в сторону визуальное™ и простоты разработки программных продуктов. Об этом говорит их новая разработка С#. Но этот язык я считаю самой неудачной их разработкой и самым на- глым маркетинговым ходом. Поэтому хочу вас предостеречь от бесполезной траты времени на него. ( Совет ) Я не могу описывать здесь как сам этот язык программирования, так и его про- блемы. Это выходит за рамки данной книги. Однако советую вам прочитать мою статью о технологии .NET, которая опубликована на сайте (или на диске к этой книге) в разделе "Без рамки". 1.5. Исполнение машинных инструкций Прежде чем переходить к дальнейшему изучению материала, необходимо рассмотреть ряд понятий. Сегмент — это область внутренней (оперативной) памяти компьютера (внешняя память представлена накопителями на магнитных дисках и лен- тах). Раньше, когда операционные системы были 16-битными, процессор не мог работать с памятью размером более 64 килобайт (это максимальный размер области памяти, который можно адресовать, используя в этих целях адрес длиной в два байта). Поэтому память делилась на сегменты по размеру и по назначению. На данный момент мы используем 32-разрядную ОС, ко- торая может адресовать до 4 Гбайт оперативной памяти (длина адреса — 32 бита или 4 байта). Поэтому можно сказать, что память стала сплошной. Од- нако деление ее по назначению все-таки осталось. Существуют следующие сегменты памяти: О сегмент кода — в эту область памяти загружается машинный код, кото- рый будет потом выполняться процессором; О сегмент данных — это область памяти для хранения данных; П сегмент стека — область памяти для хранения временных (локальных) данных и адресов возврата из процедур. Каждой запущенной программе отводится свой сегмент кода, данных и сте- ка. Поэтому данные одной программы не могут пересекаться с данными или кодом другой программы, если, конечно же, не произошел сбой с ошибкой доступа краспределенной области оперативной памяти. Регистр — ячейка памяти в процессоре. Размер ячейки зависит от ее раз- рядности. В 32-разрядных процессорах ячейки 32-битные. Мы будем гово- рить о 32-разрядных процессорах, а значит и о 32-битных регистрах. Таких регистров у процессора несколько и каждый из них предназначен для опре- деленных целей. 20 Глава 1 Когда компьютер был 16-битным, все регистры были тоже 16-битными. С появлением 32-разрядной платформы размер ячейки регистра тоже увели- чился до 32 бит. Для совместимости со старыми программами такие регист- ры как бы делятся на две части (две ячейки по 16 бит). Первая — определя- ет старый регистр, а вторая — дополнительные 16 бит. На словах не совсем понятно, поэтому давайте посмотрим на рис. 1.6. ЕАХ \ 16 бит /Ч Ц АХ Ч7 16 бит Рис. 1.6. Программа в машинных кодах и Assembler На этом рисунке показан регистр ЕАХ. Полная его длинна 32 бита, но млад- шая половина — это регистр АХ (16-битный вариант регистра). То есть если мы "попросим" процессор показать нам содержимое регистра АХ, то мы уви- дим половину регистра ЕАХ. Иногда это очень удобно, особенно когда требу- ется прочитать только половину числа из регистра. Рассмотрим пример. Пусть в регистре ЕАХ находится шестнадцатеричное число #21CD52B, тогда в регистре АХ будут находиться последние 16 бит, а именно число #D52B. Теперь рассмотрим описание регистров процессора. При этом будем иметь в виду следующее: если имя регистра будет начинаться с буквы "Е", это зна- чит, что он 32-битный и для него существует и 16-битный вариант без бук- вы " Е". Все регистры можно разделить на несколько групп. П Сегментные регистры — CS, DS, SS и ES (в данную группу входит еще ряд регистров, но нас пока интересуют только эти). • Регистр CS — регистр сегмента кода, в нем хранится начальный адрес сегмента кода. • Регистр DS — регистр сегмента данных, в нем хранится начальный адрес сегмента данных. В этом сегменте располагаются глобальные переменные. • Регистр SS — регистр сегмента стека, в нем хранится начальный адрес сегмента стека. Здесь располагаются локальные переменные. • Регистр ES — регистр дополнительного сегмента. Применяется при использовании в программе дополнительного сегмента.:
(с)ФлёновБиблия Делфи
Post #: 10
RE: Конкурс-загадка - 2008-07-05 09:47:04.880000   
fromRIDDER

Сообщений: 1075
Оценки: 30
Присоединился: 2008-01-14 20:20:53.380000
Пользуйся чем хочешь, хоть калькулятором, хоть в голове. Знание слов, двойных слов и т.д. не надо, здесь простая арифметика.

Post #: 11
RE: Конкурс-загадка - 2008-07-17 21:40:33.973333   
Necrom

Сообщений: 3
Оценки: 0
Присоединился: 2008-05-05 19:29:33.483333
а цифры в 16 системе или 10 :)
Post #: 12
Страниц:  [1]
Все форумы >> [Треп] >> Конкурс-загадка







Связаться:
Вопросы по сайту / xakep@glc.ru

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