Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.21;
Скачать: CL | DM;

Вниз

---|Ветка была без названия|---   Найти похожие ветки 

 
Юрий Зотов ©   (2003-03-04 23:16) [0]

Что ж, не прошло, как говорится, и полгода... Приношу всем свои извинения за длительную задержку. Впрочем, нет худа без добра - надеюсь, времени было достаточно, и ВСЕ четко усвоили ВСЁ, что нам положено было четко усвоить. Список этого см. на предыдущем этапе:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1038768556&n=3

Итак, приступаем к этапу 4. На этом этапе мы будем работать с MK-61, но ГЛАВНАЯ наша задача - это, конечно, не освоить программирование калькулятора, а ПОНЯТЬ принципы УСТРОЙСТВА компьютера и схему его РАБОТЫ. А также усвоить ПРИНЦИПЫ написания программ в машинных кодах (или на Ассемблере, что почти одно и то же) и понять, ВО ЧТО превращает нашу Delphi-программу компилятор и КАК она после этого работает. Как я уже не раз говорил, программируемые калькуляторы могут служить для всех этих целей великолепным учебным пособием - чем мы и воспользуемся.

В задание предыдущего этапа входило изучить устройство МК-61 и освоить работу с ним в режиме вычислений - то есть, просто научиться считать на нем. По инструкции. Надеюсь, все это сделали (а кто не сделал - надо СРОЧНО сделать), поэтому далее мы на этом особо останавливаться не будем, а будем осваивать режим ПРОГРАММИРОВАНИЯ. Но прежде давайте все же немного разберемся в устройстве MK и посмотрим, какое же отношение оно имеет к компьютеру, которым мы пользуемся.

Итак, МК имеет регистры Х и Y (далее мы будем обозначать их RX и RY). Содержимое RX всегда отображается на дисплее, а RY всегда остается невидимым. Вводимое с клавиатуры число всегда попадает в RX (и поэтому автоматически становится видимым). При нажатии клавиши операции (+, - и пр.) эта операция выполняется над числами (операндами), содержащимися в RX и RY, а результат снова попадает в RX (и поэтому тоже автоматически становится видимым). Конечно, при изменении RX его предыдущее содержимое затирается новым.

Теперь смотрим наш "большой" ПК. Сразу оговорюсь - речь пойдет о ПК на основе CPU Intel x86 и совместимых с ними, но чтобы не зацикливаться только на этой линейке, мы не будем рассматривать подробные детали конкретной аппаратной реализации, а будем рассматривать ПРИНЦИПЫ построения практически ЛЮБОГО компьютера.

Так вот - CPU нашего ПК тоже имеет подобные регистры, только их не 2, а гораздо больше, и их содержимое нигде не отображается. А вот как выглядит на Ассемблере команда сложения целых чисел (ADD) в ее простейшем варианте (регистр-регистр):
ADD EAX, EBX
что означает - сложить содержимое регистров EAX и EBX, а результат записать в регистр EAX. Заметьте - практически то же самое в MK делает клавиша + (сложить содержимое регистров RX и RY, а результат записать в регистр RX).

Напишем МК-программу, складывающую число 3 с числом, содержащимся в регистре RX (здесь и далее В^ обозначает клавишу, на которой написано "В" и "стрелка вверх", а символом ; будем отделять комментарии).

В^ ; скопировать (переслать) RX в RY
3 ; записать (загрузить) в RX число 3
+ ; сложить RX и RY. Результат получаем в RX.

По ходу дела будем привыкать к "настоящей" программистской терминологии - в этой программе и далее такие термины я буду приводить в скобках. Старайтесь понять их и запомнить.

А вот та же программа на Ассемблере x86:

MOV EBX, EAX ; переслать EAX в EBX
MOV EAX, 3 ; загрузить в EAX число 3
ADD EAX, EBX ; сложить EAX и EBX. Результат получаем в EAX.

Сравните эти две программы. Не правда ли - близнецы?

Пара примечаний для любителей придираться
1. Я в курсе, что в команде ADD источником может быть непосредственный операнд и поэтому приведенные выше три команды можно заменить одной. Однако, здесь и далее я собираюсь приводить не ОПТИМАЛЬНЫЕ примеры, а ТЕ, КОТОРЫЕ НУЖНЫ ДЛЯ ЛУЧШЕГО ПОНИМАНИЯ ТЕКУЩЕГО МАТЕРИАЛА. Потому что прежде, чем учиться программировать ОПТИМАЛЬНО, надо научиться программировать С ПОНИМАНИЕМ ТОГО, ЧТО ТЫ ДЕЛАЕШЬ И КАК ОНО РАБОТАЕТ. Именно этим мы и занимаемся.
2. Я также где-то когда-то слышал о том, что регистры нужно сохранять/восстанавливать, что существуют PUSH/POP и пр. Однако, здесь и далее я НЕ БУДУ ЗАСОРЯТЬ ПРИМЕРЫ НЕ ОТНОСЯЩИМИСЯ К ТЕМЕ И ЕЩЕ НЕ ИЗУЧЕННЫМИ НАМИ ДЕТАЛЯМИ. Детали мы будем вводить по мере их освоения. В школе нам сначала тоже сказали, что на ноль делить просто нельзя и лишь спустя много лет рассказали о понятии "бесконечность".

========== см. часть 2 ==========


 
Юрий Зотов ©   (2003-03-04 23:17) [1]

========== часть 2 ==========

Но идем дальше. СТОП - скажет себе кто-то. А на фига мне все это нужно, если я пишу на Delphi и могу написать просто:
X := X + 3;
или еще лучше:
Inc(X, 3);

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

Идем дальше. Итак, мы написали нашу первую МК-программу (см. выше). Что же дальше? Как ввести ее в машину и запустить на выполнение?

Любая программа состоит из команд. Чтобы она могла работать, эти команды должны находиться в памяти. Значит, "ввести в машину программу" означает: "записать в память последовательность ее команд". В ПК это делает специальная системная программа - загрузчик других программ, а в МК мы должны сделать это вручную. Но возникает вопрос - а в какое место памяти надо записывать нашу программу? То есть - по какому АДРЕСУ должна размещаться первая команда нашей программы?

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

В MK есть специальный регистр - счетчик команд (будем называть его СК). Это служебный регистр, для операций с данными он не используется. А используется он для того, что в нем хранится адрес той машинной команды, которая должна быть выполнена следующей. Значит, если мы ввели программу по адресу A, то для ее запуска надо записать в СК значение A и нажать кнопку "Пуск". И все - программа начала работать. То есть, МК начал по очереди выполнять команды, из которых она состоит. И при переходе на выполнение каждой следующей команды он будет автоматически (аппаратно) изменять СК. Схема здесь примерно такая (запомните ее навсегда!):
1. Выполнить команду, адрес которой хранится в СК.
2. Увеличить значение СК на длину только что выполненной команды.
3. Повторить, начиная с п.1.

Таким образом, выполнение программы - это как бы бесконечный цикл выполнения ее команд. Чтобы прервать его, надо выполнить специальную команду "Стоп" - то есть, если в п.1 будет выполнена команда "Стоп", то выполнение нашей программа прервется. Но заметьте - сам МК при этом не останавливается! Он переходит к ожиданию наших действий - то есть, начинает выполнять какую-то свою внутреннюю программу, обрабатывающую наши нажатия на кнопки. Иначе, если бы он остановился совсем, то он перестал бы воспринимать вообще всё и превратился бы в мертвый кусок пластмассы.

Зачем я тут все это рассказал? А вот зачем - в ПК происходит ТО ЖЕ САМОЕ!!! В его CPU тоже есть СК (регистр IP - Instruction Pointer). И смысл этого регистра точно такой же. И CPU работает по той же самой схеме. И после завершения нашей программы CPU вовсе не останавливается (если он остановится, наш ПК тоже остановится), а переходит к выполнению другой программы - например, системной программы, которая ожидает действий юзера и обрабатывает их. Вот так, аналогия c МК здесь практически полная.

Договоримся, что все наши программы мы будем записывать в память МК по адресу 0 - то есть, с начала памяти. И, наконец включаем калькулятор (или запускаем его программный эмулятор).

Мы собираемся ввести программу, а для этого надо перевести МК в режим программирования. Нажимаем клавиши F Прг - и в правой части дисплейчика видим нули. Это показывается содержимое СК - то есть, сейчас мы начнем ввод программы по адресу 0. С вводом каждой команды МК будет показывать ее код в левой части дисплея и автоматически увеличивать СК. На дисплее умещается не более 3-х команд, поэтому по мере ввода они прокручиваются вправо, а самой последней (чей адрес отображен справа на дисплее) получается самая левая команда. Нажимая в режиме программирвания клавиши "Шаг назад" и "Шаг вперед" (это Шг со стрелками), мы можем перемещаться по памяти МК, просматривать и править ее.

========== см. часть 3 ==========


 
Юрий Зотов ©   (2003-03-04 23:18) [2]

========== часть 3 ==========

Примечания.
1. Клавииша Прг - это клавиша, на которой написано ВП (ввод порядка). Но над ней ЖЕЛТЫМ цветом написано Прг - это значит, что если сначала была нажата клавиша F (обратите внимание, что она тоже желтая), то смысл клавиши ВП меняется и МК воспринимает ее как крманду "перейти в режим программирования). То же самое относится ко ВСЕМ клавишам, над которыми что-то написано ЖЕЛТЫМ цветом - они имеют двойной смысл.
2. Такие клавииши, как F называются "модификаторы" и служат они для изменения кодов других клавиш (кстати, клавиши CapsLock, Shift и Ctrl на клавиатуре ПК - тоже модификаторы). Кроме F, у МК есть еще один модификатор - клавиша К. Она СИНЕГО цвета - то есть, придает другим клавишам смысл, обозначенный над ними тоже СИНИМ цветом. Таким образом, некоторые клавиши МК имеют двойную или тройную нагрузку.

Итак, набираем нашу программу. Напоминаю - она прибавляет 3 к введенному числу.

В^ ; переслать RX в RY
3 ; загрузить 3 в RX
+ ; сложить RX и RY
С/П ; стоп

Обратите внимание на последнюю команду - если бы ее не было, МК спокойно пошел бы "считать" дальше. Только вот что бы он "считал"? Ведь дальше в памяти сидят либо нули, либо какой-то случайный мусор, оставшийся от предыдущей работы.

Переводим МК обратно в автоматический режим - нажимаем F Авт. Но запускать программу еще рано - ведь сейчас в СК находится число 4, а это значит, что он насчет счет с адреса 4, находящегося ВНЕ кода нашей программы. А нам надо, чтобы он стартовал с нуля - поэтому обнуляем СК нажатием клавиши В/О.

Ну, теперь все готово. Вводим число 7, нажимаем С/П ("пуск") - и получаем число 10.

Ура! Программа работает! И мы, конечно же, захотим немного ее погонять. Что ж, вводим новое число, снова жмем С/П - и получаем какой-то бред. МК надолго задумывается, на дисплее что-то мелькает - в чем дело?

А дело в том, что мы забыли нажать В/О (обнулить СК). Ведь при первом запуске программы МК выполнил команду "стоп" и мы увидели число 10. При этом в СК, как и положено, содержал адрес следующей команды - то есть, число 4. И когда мы нажали С/П во второй раз, то глупая железка сделала то, что и должна была сделать - выполнила нашу команду "пуск", а затем начала выполнять команды, начиная с адреса, содержащегося в СК. А там было 4! То есть, МК начал "выполнять" уже не нашу программу, а какой-то бред, идущий после нее.

Но такая ли уж эта железка глупая? Нет, конечно. Она четко делает то, что должна делать и (самое главное!) не делает того, чего не должна. А должна она делать только то, что ей приказали написавший программу программист и выполняющий эту программу оператор. Так что глупость проявила не железка, а тот, кто приказал ей эту глупость сделать. И ЗАПОМНИТЕ НА ВСЮ СВОЮ ОСТАВШУЮСЯ ПРОГРАММИСТСКУЮ ЖИЗНЬ - ВО ВСЕХ ГЛЮКАХ ВИНИТЕ СНАЧАЛА СЕБЯ, А УЖ ПОТОМ МАШИНУ, СИСТЕМУ, DELPHI И СОСЕДА ДЯДЮ ВАСЮ. И ошибку ВСЕГДА ищите прежде всего в СВОЕЙ программе!!! И чем чаще Вы будете нарушать это железное правило - тем больше времени и нервов Вы будете тратить на поиск и устранение ошибок. С момента появления первой ЭВМ этот закон проверен уже миллионы раз, всеми поколениями программистов, на всех машинах системах и языках.

Вопрос: так что ж, нам всегда придется перед стартом программы нажимать В/О, чтобы обнулить СК?
Ответ: перед стартом ЭТОЙ программы - да, придется.
Тогда второй вопрос - а как этого избежать?
Ответ - заставить делать это саму программу.
Тогда третий вопрос - а как это сделать?
Ответ - использовать безусловный переход.

Дело в том, что смысл некоторых машинных команд состоит как раз в том (и только в том), чтобы изменить содержимое СК. Естественно, после выполнения такой команды в СК будет записан не адрес следующей после нее, а тот адрес, который записала сама команда. И компьютер, как ему и положено (вспомните схему его работы, которая приводилась выше), продолжит выполнение программы, начиная именно с этого адреса. То есть, произойдет переход - поэтому такие команды называют командами перехода. Пока что мы рассмотрим простейшую такую команду - безусловный переход (то есть, переход всегда, без проверки каких-либо условий). Зачем нам это надо? А затем, что такие команды существуют не только в МК, а в ЛЮБОМ компьютере. И в любой программе, где есть циклы, операторы if, case и им подобные (не говоря уже об операторе goto, который сам и есть безусловный переход).

========== см. часть 4 ==========


 
Юрий Зотов ©   (2003-03-04 23:18) [3]

========== часть 4 ==========

Команда безусловного перехода состоит из двух частей:
- сама команда (клавиша БП);
- адрес, на который нужно перейти (двузначное число, набирается как обычно, цифровыми клавишами).

Итак, наша программа теперь будет выглядеть таким образом:

В^ ; переслать RX в RY
3 ; загрузить 3 в RX
+ ; сложить RX и RY
С/П ; стоп
БП ; безусловный переход
00 ; на адрес 0 (для ввода нажать клавишу 0 два раза) - то есть, на первую команду нашей программы (В^)

Давайте исправим ее (если Ваш МК все еще мучается бесполезным трудом, остановите его клавишей С/П).

Сначала используем команду БП в режиме Авт - нажимаем БП и 05. То есть, переходим на адрес 4 - ведь именно он идет после нашей программы, а в режиме Авт надо набирать адрес на 1 больше того, куда хочешь перейти (кстати, домашнее задание для особо умных, дотошных и внимательных - почему так?). Переходим в режим Прг, нажимаем БП и 00. Все, программа исправлена - мы добавили к ней команду БП и адрес перехода.

Теперь переходим в режим Авт, нажимаем В/О, набираем любое число, запускаем, получаем результат - и больше нам не нужно нажимать В/О каждый раз - программа будет сама обнулять СК. Если бы в программе не было команды "стоп", то мы получили бы бесконечный цикл - но ведь она есть, и при ее выполнении МК "останавливается" (помните? на самом деле он никогда не останавливается), а мы в этот момент видим результат. Что и требовалось!

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

Ну вот, мы написали нашу первую МК-программу. Она же - программа в машинных кодах (то есть, не на каком-то там языке, а прямо в кодах, на внутреннем языке самой машины). Она же, если хотите - программа на Асемблере.

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

1. Как следует освоить работу с МК в режиме программирования (ввод программы, ее просмотр, правку и запуск).
2. Внимательно просмотреть перечень команд МК в инструкции (но не зацикливаться на нем).
3. Модифицировать написанную нами программу так, чтобы она прибавляла к RX не число 3, а любое число, хранящееся в нулевой ячейке памяти.
4. Написать МК-программу, вычисляющую корень линейного уравнения AX + B = 0 (с проверкой A на ноль).
5. Написать МК-программу, вычисляющую корни квадратного уравнения AX^2 + BX + C = 0 (с проверкой A на ноль, а также с проверкой знака дискриминанта). Нужные формулы есть в школьном учебнике по алгебре.

При написании программ пока что ЗАПРЕЩАЕТСЯ использовать:
- подпрограммы.
- команды косвенных переходов и вообще любую косвенную адресацию.

Срок выполнения - примерно три недели.
Успехов!


 
Mihey   (2003-03-04 23:20) [4]

А это где-нить кроме форума выложено?


 
Marser ©   (2003-03-04 23:46) [5]


> Юрий Зотов ©

А ведь Михей подал идею - можно это и где-нибудь выложить.


 
Rouse_ ©   (2003-03-04 23:51) [6]

> Mihey (04.03.03 23:20)
Предыдущие уроки должны быть в архивах, а то что было сказано Юрием сейчас - только в голове, причем у любого уважающего себя программиста.
ЗЫ: Хотя МК это круто, многие могут просто не понять причем тут он и программирование :)



 
Malder ©   (2003-03-05 00:42) [7]

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


 
Marser ©   (2003-03-05 00:58) [8]


> Rouse_ © (04.03.03 23:51)


> ЗЫ: Хотя МК это круто, многие могут просто не понять причем
> тут он и программирование :)

Вот для того господин магистр и трудится.


 
vuk ©   (2003-03-05 02:46) [9]

to Юрий Зотов:
Не флейма ради.

>Она четко делает то, что должна делать и (самое главное!) не
>делает того, чего не должна.
На самом деле машинка умеет делать много того, чего она делать не должна, стоит только хорошо попросить. :o) По поводу глюков и особенностей работы этой линейки калькуляторов в свое время люди целые статьи в журналах писали.

to Rouse_:
>Хотя МК это круто, многие могут просто не понять причем тут он
>и программирование
Пусть тогда поверят мне, как человеку, который программировать начинал с этого самого МК (того самого, что у Юрия :o)), штука настолько полезная (во всяком случае, она оказалась такой для меня в свое время), что даже описать полезность трудно. Девайсу этому до сих пор благодарен. Это вроде бы и калькулятор, но в то же время когда пишешь программу для него, используешь практически ассемблер в чистом виде. И язык там достаточно простой, оперирующий достаточно сложными операциями. На такой машинке легко понять что такое стек, условные и безусловные переходы, циклы, прямая и косвенная адресация. Ну, в общем-то Юрий все это уже написал...

P.S. Кстати, если вопросы возникнут по поводу - могу ответить, поскольку многое еще помню.

P.P.S. Когда я впервые увидел Lisp, я сказал себе - "О! Это мы уже проходили! :o) Почти та же самая обратная запись выражений, что была в калькуляторе!"


 
Юрий Зотов ©   (2003-03-05 04:44) [10]

Полезная информация.

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

1. Вверху окошка эмулятора есть надпись "MK61.mk". Сделайте по ней двойной клик мышкой - справа добавится еще одно окошко с 4-мя закладками.

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

3. Нажмите на закладку "Память" и выполняйте все те действия, о которых шла речь выше. Справа будет отображаться все текущее состояние МК - содержимое всех регистров, программной памяти, СК и ячеек памяти. Вот это и есть главное. Очень наглядно и очень полезно. Вся эта информация отображается и в режиме Авт, и в режиме Прг, и во время работы программы. Последнее особо ценно.


 
Юрий Зотов ©   (2003-03-05 16:12) [11]

Up.
Чтобы не прозевали те, кому это нужно.
Наивно полагаю, что такие все же есть.


 
MsGuns ©   (2003-03-05 18:16) [12]

>Юрий Зотов © (05.03.03 16:12)
>Наивно полагаю, что такие все же есть.

Есть-есть. Сам баловался с МК, а еще раньше с "Проминь". Была такая железяка. В любом случае интересно читать вас, Юрий.


 
BigBadMutuh ©   (2003-03-05 20:43) [13]

Я тоже читаю, выполняю. Так что up.


 
michael_b   (2003-03-05 20:49) [14]

В каком кнкретоно архиве лежат описания 1-го и 2-го этапа? А то у меня не выделенка чтоб лазить по всем, апрочитать очень хочется.


 
Юрий Зотов ©   (2003-03-05 23:38) [15]

Вот вся история:
Идея и ее обсуждение - архив от 16.01.2003
Этап 1 - архив от 16.12.2002.
Этап 2 - архив от 23.12.2002.
Этап 3 - еще не в архиве.


 
Malder ©   (2003-03-06 00:15) [16]

Вот выложил на http://www.baseprogram.narod.ru

Там есть как Этапы в виде отдельных страничек, так и архивы всех веток здесь создаваемых


 
SergeN   (2003-03-06 07:24) [17]

Юрий Зотов, жду не дождусь этапа № 5.


 
Malder ©   (2003-03-06 20:03) [18]

Удалено модератором
Примечание: Создание пустых сообщений


 
Mihey   (2003-03-06 20:10) [19]

2 Rouse_:

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

Вот так всегда, как же народу учиться, когда его встречает ТАКОЕ НАПРАВЛЕННОЕ ПРОТИВОДЕЙСТВИЕ????????


 
sancho{ne_hochu_parol_v_ceshe_ostavit'}   (2003-03-06 20:44) [20]


> программу-эмулятор MK61.exe


Где её скачать?
Но его я там не видел :(


 
Юрий Зотов ©   (2003-03-06 23:29) [21]

Ссылки, где скачать эмуляторы МК-61 были даны на этапе 3. Повторяю для невнимательных:

http://www.emulator3000.com/rus-c3.htm
http://umbra.chat.ru/mk61ins.exe

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

А здесь лежит руководство по использованию МК-61:
http://www.neox.pri.ee/mk61manual


 
Феликс ©   (2003-03-06 23:58) [22]

Снимаю свою бейсболку перед теми, кто следит за посланиями Юрия Зотова. Меня хватило на первые 2 предложения 1 этапа. Скоро ребята вы не только напишите МК-программу, складывающую число 3 с числом, а к примеру, к числу 5, а там гляди и к числу 6, а то и 7 (правда это все будет на 9, а то и на 10 этапе).

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


 
Malder ©   (2003-03-08 12:20) [23]

Удалено модератором
Примечание: Создание пустых сообщений


 
Lancelot ©   (2003-03-09 23:09) [24]

В то время, когда я начинал (лет 10-15 назад) школьник, который хотел заниматься компьютерами (что тогда означало - программировать), шел в библиотеку, брал тучу книжек по программированию, заводил толстую тетрадку для листингов, после уроков осаждал учителя информатики (или руководителя компьютерного клуба), носил домой распечатки и т.д. Только такие энтузиасты могли рассчитывать на то, что им можно будет пользоваться Машиной :)
А сейчас школьнику дарят персоналку, он начинает шляться по интернету, ставит себе дельфу, играется компонентами, пытается писать вирус, сниффер и троян, натыкается на конференцию "Мастера Дельфи" и только после этого заводит себе толстую тетрадку и т.д. И героический Юрий Зотов пишет для них книжки, потому что мысль, что можно самим, ногами и безо всякого компьютера пойти в библиотеку и взять каку-нибудь "жутко устаревшую" книгу 80-х годов по алгоритмам, программам и языкам, для них кажется дикой...


 
wnew ©   (2003-03-09 23:28) [25]


> Lancelot © (09.03.03 23:09)

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


 
Pat ©   (2003-03-11 12:30) [26]

Что-то далеко опустились...
У меня возникло несколько вопросов по заданиям 4 и 5..точнее, не вопросы, а просто уточнения нужны.
А и В нужно вводить "с клавиатуры" или можно записывать их в регистры?
В принципе, №4 двумя способами уже сделал. :)


 
Pat ©   (2003-03-11 12:37) [27]

P.S. Под регистром я понимаю:
Клавиша [П->X]

Вызов в регистр X содержимого регистра, номер
которого необходимо указать нажатием следующей
клавиши.
[П->X] - [0]..[e]
T = Z
Z = Y
Y = X
X = RG..


 
Юрий Зотов ©   (2003-03-11 16:09) [28]

> А и В нужно вводить "с клавиатуры" или можно записывать их в
> регистры?

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


 
Юрий Зотов ©   (2003-03-13 10:22) [29]

Пока что Up. Пока не улетело.
А там посмотрим.


 
Satirus   (2003-03-13 12:33) [30]

Маэстро! Отсканируйте, пожалуйста, Рэя Конопку.
Вам столько народу спасибо скажет...

С. Уважением.


 
Юрий Зотов ©   (2003-03-13 13:42) [31]

> Satirus (13.03.03 12:33)

Около 500 страниц.
Интересно, как Вы себе это представляете на практике?


 
Satirus   (2003-03-13 15:44) [32]

Ну как, как? Включаю сканер, открываю книгу на первой странице, нажимаю Scan. Сохраняю 1-2.jpeg, ну и так до пятисотой страницы.
Если мне гонор не позволяет заниматься рутинной работой, прошу сделать это свою секретаршу или подругу за чай-конфету. А потом выкладываю всё это в инете. И все довольны:)

С. Уважением.


 
vuk ©   (2003-03-13 15:47) [33]

to Satirus:
У кого есть книга, у того нет на это времени и наоборот.


 
Satirus   (2003-03-13 16:25) [34]

2vuk © (13.03.03 15:47)
так выпьем же за то, чтоб наши желания исполнялись в валидно-ликвидный срок:)


 
Anatoly Podgoretsky ©   (2003-03-13 16:36) [35]

Satirus (13.03.03 15:44)
Кроме авторов книги и книгоиздателей, их обокрали.


 
Satirus   (2003-03-13 16:49) [36]

2Anatoly Podgoretsky © (13.03.03 16:36)
их, это тех, которые выступают в роли учеников в Этапах?


 
Юрий Зотов ©   (2003-03-13 18:15) [37]

> Satirus (13.03.03 15:44)

Все замечательно Вы придумали, вот только есть небольшие "но":

1. Сканер мне доступен только на работе, да и то он в другой комнате, подключен к чужому компьютеру и т.д.

2. Секретарши у меня нет (к сожалению). Подруга есть, но не на работе (к счастью), а дома, поэтому у подруги сканера тоже нет.

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

4. Даже если все это сделать, объем 250 рисунков будет, мягко говоря, немалым. При моих нынешних возможностях выхода в Сеть (dial-up, максимум 33600, один компьютер на всю контору) придется потратить еще неколько дней на их выкладывание. Далее см. п.2.

5. В книге есть такое слово - copyright. И когда мне предъявят иск, то платить за меня будете Вы? Почему-то есть сомнения.


> Satirus (13.03.03 16:49)

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

А вот как насчет помочь? Вместо того, чтобы острить. Работа найдется, уверяю Вас.


 
Satirus   (2003-03-13 18:28) [38]

2Юрий Зотов © (13.03.03 18:15)
Очень остроумное замечание. Правда, непонятно, кто же все-таки обокрал этих несчастных учеников. Не я, надеюсь? Тем, что не дал бедолагам книжку поюзать (вот жмот-то, правда?).
А это Вы, уважаемый, уже у г-на Подгорецкого спрашивайте. Я всего-лишь попытался понять смысл его реплики, дая наводящий вопрос.

>А вот как насчет помочь? Вместо того, чтобы острить. Работа найдется, уверяю Вас.
Да я бы не против. Даже сам когда-то предподавал курсы Дэлфи для новичков в группе из 4-х человек: одна девятикласница, один одиннадцатикласник и два третьекурсника. Так что опыт имеется и хотелось бы его продолжить с учетом накопившихся пожеланий. Так что Ваша практика полезна не только для учеников. Продолжайте, пожалуйста, а про книжку забудьте. Это я так, для поддержания разговора предложил, да и самому взгянуть было бы интересно, а на книжном рынке её уже не продают. Вот и пытаюсь её достать. Вообщем, про книжку забудьте. Постараюсь её выпросить у malkolinge и отсканирую сам.
А на счёт копирайта - истина дороже.

С. Уважением.


 
Mihey   (2003-03-13 18:33) [39]

Хорошо, пускай старания Юрия Зотова пропадают в аналах бесчисленного архива...


 
Юрий Зотов ©   (2003-03-13 18:39) [40]

Почему пропадают? Вот, спасибо Malder"у:
http://www.baseprogram.narod.ru

И потом, я надеюсь, что главный архив остается все же в головах. А там ничего не пропадает.






 
Anatoly Podgoretsky ©   (2003-03-13 18:45) [41]

Satirus (13.03.03 18:28)
Смысл моей реплики касался (c) и Юрий сразу понял о последствиях данного шага. Другое дело если бы кто то другой сделал, разместил в Интернете, тогда последствия падали бы на него.
А книга конечно ценная, даже не понятно почему не переиздают, наверно автор против.


 
Satirus   (2003-03-13 18:50) [42]

2Anatoly Podgoretsky © (13.03.03 18:45)
>даже не понятно почему не переиздают, наверно автор против.
когда на раскладке спросил, сказали, что есть уже новая версия, которая написана почти также как и у Конопки, но автор другой. И даже попытались мне её всучить. Но хотелось бы всё таки ознакомиться с оригиналом, чтобы созреть для покупки...


 
vuk ©   (2003-03-13 18:50) [43]

to Anatoly Podgoretsky:
>А книга конечно ценная
У нее, вроде как, вторая редакция была на английском языке, под более свежую на тот момент версию Delphi. Но у нас книга не переиздавалась.


 
Anatoly Podgoretsky ©   (2003-03-13 18:56) [44]

Satirus (13.03.03 18:50)
Насчет другого автора ничего сказать не могу, а оригинал считается классикой.


 
vuk ©   (2003-03-13 19:05) [45]

В подтверждение слов про второе издание:
http://www.raize.com/DevTools/DCDC/Default.htm


 
MBo ©   (2003-03-13 22:04) [46]

Тираж у Конопки всего 2000.
Вторая английская редакция была по Дельфи 3, т.е. в районе 97 года. Есть еще (только на английском) книга Дэнни Торпа (тоже 96-97 года). С тех пор никто ничего не писал, на конференциях Борланд это постоянно обсуждают.



 
vuk ©   (2003-03-13 22:09) [47]

to MBo:
>Тираж у Конопки всего 2000.
Странно, что при этом в Москве она продавалась много где. Я, помнится, свой экземпляр аж на радиорынке покупал. :o)


 
Mihey   (2003-03-13 23:06) [48]

Ну вот, хвала демонам.


 
Malder ©   (2003-03-14 19:14) [49]

Если уж пошел такой флуд:

MBo, что означает "С тех пор никто ничего не писал, на конференциях Борланд это постоянно обсуждают." ? Чтр больше не пишутся книги по Дельфе ? Ну я не согласен категорически. Самый яркий пример, наверное, Тэйксер и Пачеко


 
vuk ©   (2003-03-14 19:38) [50]

>Чтр больше не пишутся книги по Дельфе ?
Книг по разработке компонентов нет нифига. Это немного другого уровня и назначения литература.


 
Victor aka Slider   (2003-03-17 20:51) [51]

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

Контрольный вопрос на эту тему - разложить параметр LParam сообщения WM_KEYDOWN на отдельные составляющие:
type
TKeyState = (ksPressed, ksReleased);
var
RepeatCount: word;
ScanCode: byte;
ExtendedKey: boolean;
PreviousKeyState: TKeyState;


объясните пожалуйста что здесь нужно сделать?
P.S.Когда будет выложен следующий этап?


 
Юрий Зотов ©   (2003-03-17 22:28) [52]

> что здесь нужно сделать

Посмотреть в справке API описание сообщения WM_KEYDOWN, и, считая LParam заданным, проинициализировать в соответствии с ним переменные RepeatCount, ScanCode, ExtendedKey и PreviousKeyState.


> Когда будет выложен следующий этап?

Планирую сделать в выходные. Надеюсь, ничто не помешает.


 
Malder ©   (2003-03-17 23:53) [53]

А говорил я Юрию, что данное задание для новичков окажется немного сложным.

Давайте попытаюсь объяснить.

Victor aka Slider, тебе сказали, что нужно разложить wm_keydown.

Отлично, лезем в справку. Файл win32sdk.hlp, если не знаешь (справка по WinApi). Ищешь wm_keydown. Это сообщение windows, от префикса wm - windows message. А точнее wm_keydown - сообщение windows о нажатии кнопки на клавиатуре. Смотрим на описание:

WM_KEYDOWN
nVirtKey = (int) wParam; // virtual-key code
lKeyData = lParam;


У этого сообщения два параметра. nVirtKey и lKeyData.

Они представлены в стандартном для сообщений windows виде: как wParam и как lParam. Каждое - это 32-ух битные целое, причем первый параметр нам рекомендуют расматривать как integer (потому что это число).
То есть, считай, что каждое сообщение windows может нести с собой всего 64 бита дополнительной информации. Некоторые биты могут быть зарезирвированы и не использоваться. wParam и lParam есть в каждом сообщении.

Итак, тебя попросили разбить lParam, то есть, в данном случает, параметр lKeyData. Это не число, не буква. Это набор битов, а как их расматривать нам пишут далее.
Читая по тексту, видим описание lKeyData:

lKeyData

Value of lParam. Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table:

Value Description
0-15 Specifies the repeat count. The value is the number of times the keystroke is repeated as a result of the user holding down the key.
16-23 Specifies the scan code. The value depends on the original equipment manufacturer (OEM).
24 Specifies whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.
25-28 Reserved; do not use.
29 Specifies the context code. The value is always 0 for a WM_KEYDOWN message.
30 Specifies the previous key state. The value is 1 if the key is down before the message is sent, or it is 0 if the key is up.
31 Specifies the transition state. The value is always 0 for a WM_KEYDOWN message.


Все по битам, начиная с нулевого.

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

Итак, попытаемся осознать. Каждое сообщения windows имеет два параметра wParam и lParam. Для сообщения wm_keydown второй параметр разделен еще на 7 параметров из которых несут информацию только четыре.

Юрий зотов предложил как раз заполнить четыре переменных:

RepeatCount: word;
ScanCode: byte;
ExtendedKey: boolean;
PreviousKeyState: TKeyState


И пояснил, что TKeyState имеет два состояния: ksPressed или ksReleased.

Ну а далее дело техники. Сравниваем описание lKeyData и эти четыре переменных.
Думаю, далее понятно.

P.S. to Юрий Зотов, если вы считаете, что я не так что-то говорю и что подсказывать не надо - вы скажите. Я не буду. Просто мне кажется задание сложноватое


 
Malder ©   (2003-03-18 00:07) [54]

Дополнительная информация, если все же непонятно:

Иногда эти два параметра wParam и lParam раскладываются на четыре параметра, то есть два 32-ух битных целых раскладываются на четыре 16-ти битных.
Например, можно посмотреть на сообщение WM_MOUSEWHEEL - первые два параметра - это wParam, который разложен на две части.
Третий и четвертый параметр - это соответственно lParam, который тоже разложен на две части.
Чтобы разложить 32-ух битное на два 16-ти битных используется: функция hiword - возвращает первые 16 бит 32-ух битного целого.

function HiWord(L: DWORD): Word;
begin
Result := L shr 16;
end;


Передается 32-ух битное целое (DWORD):

Например, 100100110101001100101010011001101101

С помошью логического сдвига вправо на 16 бит получается:

00000000000000001001001101010011

Result у нас 16 битное целое, из-за приведения типов получается: 1001001101010011
Вот мы и получили первые 16 бит (WORD)

Другие 16 бит получаются с помощью LoWord. Просто приведение типов, так как LoWord=Word

Собственно говоря, HiWord и LoWord стандарт для разбиения 32-ух бит на два по 16. А Юрий вас просит сделать немного сложнее. Написать функции своего разбиения 32-ух бит на 16,8,1,1 бит (пропуская некоторые).

Вы можете написать что-то типа функций по аналогии с HiWord. Например:

function lKeyDataToScanCode(L: DWORD): byte;
begin
...
end;


и т.д.


 
Victor aka Slider   (2003-03-18 00:39) [55]

to Malder: спасибо за такой подробный ответ, теперь все ясно.
будем ждать продолжения...


 
Victor aka Slider   (2003-03-18 00:58) [56]

UP.
все ясно относительно того, что требуется сделать и как этого достичь с точки зрения задания первого этапа, но неясно как это сделать в дельфи. Я не работал никогда с WinApi и хотелось бы узнать куда wm_keydown нужно поместить в программе чтобы дальше уже его раскладывать?


 
Юрий Зотов ©   (2003-03-18 08:45) [57]

> Malder & всем мастерам & не только им.

ТАКИЕ подсказки только приветствуются. И даже ОЧЕНЬ желательны. Как раз то, что нужно - написано четко, ясно, простым и понятным для неискушенных языком. И в то же время не содержат прямого решения задачи. Рассматриваю такие сообщения, как помощь. Спасибо.

Единственное пожелание - на данном этапе не нужно было бы использовать HiWord, LoWord и т.п. Мы изучали биты и побитовые операции, поэтому человек должен научиться делать раскладку "ручками", с помощью элементарных OR, XOR, AND, NOT, SHR и SHL, а не с помощью готовых встроенных функций. Главное ведь не в том чтобы просто сделать что-то, а в том, чтобы ПОНЯТЬ, как это делается - а встроенные функции "прячут" внутреннюю кухню.

> данное задание для новичков окажется немного сложным.

И очень хорошо. Раскрою небольшую хитрость - я постоянно пытаюсь заставить обучаемого думать самостоятельно и как бы немного "вперед". То есть - задача не содержит ничего такого, что он еще не ЗНАЕТ, но содержит то, что он еще не УМЕЕТ. Идеальный вариант - человек сам додумывается до решения, прыгает по комнате с воплем "Вау!!! Я сделал ЭТО!!!" - и он уже НИКОГДА не забудет, как работать с битами. Менее идеальный вариант - он делает это после одной или нескольких подсказок. Тоже хорошо.


> Victor aka Slider (18.03.03 00:58)

> неясно как это сделать в дельфи.

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


> хотелось бы узнать куда wm_keydown нужно поместить в программе
> чтобы дальше уже его раскладывать?

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


 
Malder ©   (2003-03-19 21:49) [58]

Юрий Зотов, да за что спасибо то. Вам спасибо за нелегкий труд


 
Top Gun   (2003-03-29 21:23) [59]

Юрий Зотов ! Как там с продолжением ?


 
Top Gun   (2003-04-03 20:04) [60]

все таки хотелось бы узнать


 
Top Gun   (2003-04-07 19:29) [61]

ау


 
lipskiy ©   (2003-04-07 22:31) [62]

Послушай, Малдер, если уж содрал мой дизайн, так хоть содрал бы полностью. Дать тебе все необходимое?
Кстати, если кто готов дооформить последние этапы и оформлять их дальше в стиле http://delphi.adlen.ru/ - милости прошу, все выложу (у самого, сорри, времени нет).


 
DeMoN-777 ©   (2003-04-08 01:44) [63]

Постоянно слежу за развитием веток и заметил что очень многие из начинающих пропали. Согласен, непростые задания. Но без труда... Юрий огромное Вам спасибо за терпение! Обещать не буду, но если время хоть немного будет постораюсь сделать отдельный сайт с возможностью интерактива.


 
al_ ©   (2003-04-08 16:20) [64]

Удалено модератором


 
al_ ©   (2003-04-08 16:21) [65]

Удалено модератором


 
Pat ©   (2003-04-08 23:37) [66]

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


 
Malder ©   (2003-04-09 19:50) [67]

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

>Дать тебе все необходимое?

Что дать ? Код HTML и так видно :)


 
al_ ©   (2003-04-11 13:05) [68]

Посмотрите, я вот так решил 3-е задание:
Тип: АХ + В = 0
например берем уравнение 2x + 6 = 0;

00. 6
01. /-/
02. B^
03. 2
04. Проверка на 0
05. Переход на 03 если условие выполнилось (т.е. 0)
06. делим
07. С/П
08. БП {безусловный переход}
09. к 00

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


 
Pat ©   (2003-04-11 22:28) [69]

>как организовать ввод с переменных А и В в ручном режиме
Останавливай выполнение программы С/П, вводи число и продолжай.
Посмотри, как это в примерах сделано


 
lipskiy ©   (2003-04-17 00:11) [70]


> Malder © (09.04.03 19:50)

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

А вообще жаль, что все это все равно пропадет со временем, один туда скопировал, другой сюда...
Это все нужно на ЭТОМ сайте выложить, на самом деле.


 
Anatoly Podgoretsky ©   (2003-04-18 11:13) [71]

lipskiy © (17.04.03 00:11)
Да обижаешься и по делу, надо было спрашивать разрешение и ты точно его дал и полность все необходимое.


 
malkolinge ©   (2003-04-18 12:36) [72]

Итак первое !
Я фанат МК-61 про него не только газеты писало, но книги :) У меня даже джома он до сих пор сохранился а еще на нем играть можно

2. Сатир 1 Рей Конопка есть на петровке причем его очень много и стоит 3 доллара (Киев) для справки Фаронов стоит около 10 :))))))

3. Кроме этого Рея Конопку в Киеве можно купить
http://shop.bambook.com/ Правда там он будет стоит баксов 20.ъ




 
DeMoN-777 ©   (2003-04-18 15:16) [73]

>malkolinge © (18.04.03 12:36)
Если что из инфы по МК-61 сохранилось кинь плиз на е-майл, на досуге прочитаю.


 
Malder ©   (2003-04-19 03:19) [74]

Anatoly Podgoretsky, lipskiy, вы только скажите - сайт будет закрыт


 
Anatoly Podgoretsky ©   (2003-04-19 09:48) [75]

Malder © (19.04.03 03:19)
Да нет это просто напоиминание, что так не надо делать, могут быть обиды и не этично. Никогда не вредно спросить разрешения у автора, если на сайте не указыны явно правила распространения, очень редки случаии отказаЮ просто иногда надо дважды просить.


 
lipskiy ©   (2003-04-19 12:53) [76]


> Malder © (19.04.03 03:19)

Делай наздоровье, я не против, я просто хотел, чтоб было красиво.
Хотя спросить заранее было бы действительно этичнее.


 
blackman ©   (2003-04-19 16:33) [77]

>Фаронов стоит около 10 :))))))
Он ничего не должен стоить. Читать просто вредно.


 
Top Gun   (2003-04-19 17:29) [78]

А вот Юрий Зотов говорил, что Фаронов ему нравится.

P.S. Развожу флейм только чтобы ветка не умерла


 
blackman ©   (2003-04-19 17:56) [79]

Поддержу падающих!
Лично Фаронов или книга ?


 
sancho ©   (2003-04-19 18:00) [80]

Фаронов... мне нравиться как он пишет: коротко и ясно.


 
Top Gun   (2003-04-19 20:05) [81]

>Лично Фаронов или книга ?

Не смешно. Книга, конечно


 
al_ ©   (2003-04-21 13:57) [82]

Удалено модератором


 
DeMoN-777 ©   (2003-04-27 12:53) [83]

Фаронов КЛАССНЫЙ учитель!


 
Top Gun   (2003-04-30 16:29) [84]

Удалено модератором


 
Grrey   (2003-05-03 10:21) [85]

Все сделал. Проверил, работает. Остался один вопрос. Говорят, что любую программу можно сократить хотябы на одну команду. Я думал очень долго, но у меня остался первый вариант, может я смотрю как-то не так? И еще вопрос о "правильности" показывания здесь своих результатов. Ведь кто-то только начинает делать задания и сталкивается сразу с готовым ответом. Как то не очень интересно становится. Хотя мне бы хотелось показать свою програмку для проверки на оптимальность. Что скажут люди?


 
Top Gun   (2003-05-06 18:17) [86]

ВВЕРХ !


 
Top Gun   (2003-05-09 23:03) [87]

А где продолжение ? Или его не будет ?


 
StAL ©   (2003-05-10 13:19) [88]

Здравствуйте!
Прошу прощения за долгое отсутствие, удаляли гланды и аденоиды.
Продолжаю занятия. Уже почти догнал. По крайней мере программу решения лин. ур-я уже написал.
Кстати калькулятор у меня реальный, правда не МК61, а электроника, однако все кнопки совпадают.
С ув. Алексей


 
Top Gun   (2003-05-10 20:39) [89]

Юрий Зотов, неужели вы не замечаете этой темы ? Ну скажите что-нибудь


 
Stvaffniy ©   (2003-05-11 01:03) [90]

Zajdalsya. Spasibo chto ne brosili horoshee delo.


 
Aldor ©   (2003-05-11 10:17) [91]

Просто АП. Сделаем в этой стране настоящих программистов.


 
Top Gun   (2003-05-11 22:41) [92]

Юрий Зотов, прием !


 
Юрий Зотов ©   (2003-05-11 23:36) [93]

Ох, народ, ну чего насели? Думаете, времени вагон, а все это так просто делается, за 10 минут, что-ли? Тут, елы-палы, с работы приходишь то в 2, то в 3 ночи, задача горит, шеф жмет, а по выходным семейство своего требует... и отоспаться тупо хочется... елы-палы...

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

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

Вот в эти стороны пока и начинайте копать потихоньку. Главное - старайтесь ПОНЯТЬ СУТЬ. Чаще задавайте себе вопрос - а ПОЧЕМУ вот это сделано так, а не иначе? И пытайтесь сами себе на него ответить.


 
Malder ©   (2003-05-18 23:21) [94]

Чтоб не умерло раньше времени и можно было здесь ссылку на след. этап дать


 
StAL ©   (2003-05-19 16:51) [95]

Up
Спасибо Юрию Зотову


 
Top Gun   (2003-05-20 22:57) [96]

С нетерпением ждем ! По крайней мере, я жду


 
Top Gun   (2003-05-26 17:52) [97]

Мы верим и ждем ! Чтобы ветка не умерла !


 
Top Gun   (2003-05-28 20:25) [98]

Удалено модератором


 
Top Gun   (2003-05-31 11:17) [99]

Удалено модератором


 
k-man ©   (2003-05-31 11:50) [100]

Много раз я видел эту ветку но прочитал только сейчас.
Нашел для себя много нового и интересного.
Кстати, может это здесь и написано но я не видел:
очень удобно испытывать все рассказанное Юрием Зотовым
на Досовском отладчике.
debug в командную строку и изучайте все приведенное в первых постах. Пишите в память команды и данные, Трассируйте их(команды), Меняйте IP. Причем можно писать и на машинном языке а на асме.Удобно для начинающих.
Очень интересная вешь.
А для нетерпеливых:
Почитайте Абеля.


 
Top Gun   (2003-06-02 17:20) [101]

Удалено модератором


 
MalkoLinge ©   (2003-06-02 18:22) [102]

А почему нету нету ничего для програмистом среднего уровня ? :)))) Дискриминация !


 
Malder ©   (2003-06-04 23:54) [103]

Тейксера и Пачеко, Рихтер. Мало ?


 
Gun Top   (2003-06-07 17:22) [104]

Удалено модератором


 
Gala Media   (2003-06-10 17:31) [105]

Ну где ?


 
Fly Iron Man   (2003-06-11 21:37) [106]

Между выпусками проходит больше пары месяцев. Судя по темпам, если курс и будет "прочитан" - то лет через пять. Имеет ли это смысл ?
Пусть уж Юрий Зотов оффициально объявит, что идея накрылась медным тазом, чтоб уж народ не мучить.
Или пусть выложит последний, пятый этап, коли
>Примерно половина готова
не пропадать же добру


 
Marser ©   (2003-06-12 11:27) [107]


> Fly Iron Man (11.06.03 21:37)

"Начинающим программистам. Этап n" Всемирная история, сберкасса № 2. :-))


 
Anatoly Podgoretsky ©   (2003-06-12 11:35) [108]

Это уже не прилично так настаивать.


 
StAL ©   (2003-06-12 12:00) [109]

Удалено модератором
Примечание: А как насчет Down всем твоим сообщениям?


 
KSergey ©   (2003-06-12 12:25) [110]

> Anatoly Podgoretsky © (12.06.03 11:35)

Это если мягко сказать.


 
Fly Iron Man   (2003-06-12 18:40) [111]

Осталось дождаться ответа Ю.З. Закрывается лавочка или нет ? Люблю определенность


 
Юрий Зотов ©   (2003-06-12 20:42) [112]

> Fly Iron Man (12.06.03 18:40)

Нэт. Нэ закрываицца. Апрэделенно.


 
Fly Iron Man   (2003-06-12 22:07) [113]

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

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


 
Юрий Зотов ©   (2003-06-12 23:38) [114]

> Но если вы дальше не можете продолжать

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


> то уж придется выуживать

Можно и не выуживать. Абсолютно все, о чем я говорил (и буду говорить дальше), есть в книгах. Даже в обыкновенном школьном учебнике по информатике - и то уже многое есть. Далее - в книгах по языкам программирования. Не по тому, как таскать компоненты по формам и на какие кнопки кликать в Delphi, а по ЯЗЫКАМ ПРОГРАММИРОВАНИЯ. Что, собственно, программирование и есть, потому что накидать на форму компонентов можно и вообще без всяких знаний, а вот написать код, да еще и грамотный - это уже совсем другое дело.

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

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

Посмотрите, сколько на форуме проблем с вызовом строковых функций API? Много. А ведь человек, вроде бы, все делает строго по хелпу. Беда лишь в том, что он не понимает, что PChar - это самый обыкновенный указатель, а главу "указатели и динамическая память" ни в одной книге никогда не читал. А в хелпе этого нет, в хелпе предполагается, что основы человек уже знает - вот поэтому ему и хелп не помощник.

Сейчас четыре выходных дня. Завтра мне предстоит дальняя поездка и поэтому сегодня я должен был подготовить к ней машину (чем почти весь день и занимался). А вот послезавтра, похоже, наконец, смогу дописать следующий этап и сразу его выложу. Есть, правда, шанс, что судорожно-аварийно вызовут на работу, но будем надеяться, что этого не произойдет.


 
Malder ©   (2003-06-17 00:58) [115]

Получил письмо по почте от одного из учеников :-)

Если честно, затрудняюсь с ответом, так как не очень представляю как объяснять - не знаю о уровне знаний. Возможно, Юрий ответит

Помогите пожауйста решить следующие задачи:

4. Написать на Паскале функцию, вычисляющую машинное эпсилон для чисел типа Extended.
При вычислениях учеть реально используемый аппаратный тип FPU.

5. Как следует изменить условие if X=Y, чтобы добиться его надежной проверки,
если известно, что X и Y имеют тип Double и их значения были вычислены с точностью
5 десятичных цифр?

При работе с целыми числами, все получалось.

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

Представление о вещественном числе я имею.


 
Gilbert   (2003-06-21 17:14) [116]

Ну где же


 
Top Gun   (2003-06-26 17:39) [117]

Я потерял всякую надежду... сроки отодвигаются и отодвигаются...

может правда не надо ?


 
Gilbert   (2003-07-02 10:05) [118]

вотблинчертпоберилажаполная


 
Dmitriy O. ©   (2003-07-02 10:58) [119]

По моему MK-61 уже не выпускается хотя в свое время он вызвал настоящий бум программирования игр на калькуляторе (сейчас это трудно представить).Специализировался на таких играх журнал "Техника молодежи".Но сейчас это уже даавно устарело.


 
Skier ©   (2003-07-02 11:07) [120]

Ждём-с !


 
Юрий Зотов ©   (2003-07-06 13:36) [121]

Следующий этап см. здесь:
http://delphimaster.net/view/14-1057483936/



Страницы: 1 2 3 4 вся ветка

Текущий архив: 2003.07.21;
Скачать: CL | DM;

Наверх




Память: 0.86 MB
Время: 0.023 c
4-68133
erw
2003-05-19 09:36
2003.07.21
Переход в режим переименования узла в TreeView через API


3-67722
FormCoord
2003-06-27 17:04
2003.07.21
Певый свободный номер в поле таблицы.


14-67993
Lary King
2003-07-03 21:47
2003.07.21
Оплата за показы банеров


7-68103
SPeller
2003-05-11 14:24
2003.07.21
Создание отдельной нити, но не простой...


1-67798
jiura1
2003-07-09 13:23
2003.07.21
Как корректно скопировать русский шрифт из Stringgrid в Буфер?