Форум: "Потрепаться";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
ВнизНачинающим программистам. Этап 1 Найти похожие ветки
← →
Malder (2002-10-21 22:47) [0]Данная конференция создана для помощи начинающим программистам.
Будут выкладываться задания и по возможности ссылки из сети для их выполнения. Все абсолютно добровольно. Работаете вы исключительно для себя.
Это первый этап обучения.
Идею можете почитать по адресу http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035122594&n=3
Итак, начнем.
--------------------------------------------
Юрий Зотов
Задание 1.
На время забыть про Windows, Delphi и Паскаль, а также забыть, что Вы вообще что-то знаете. Считать, что ничего.
Задание 2.
Разобраться с позиционными системами счисления. Уметь свободно переводить целые (пока только целые) числа из любой системы в любую другую. Уметь складывать, вычитать, делить и умножать в любой системе. Двоичную и шестнадцатиричную знать почти так же, как десятичную. Знать способы кодировки чисел (прямая, обратная, дополнительная). Что такое переполнение и знаковый бит, как он формируется при сложении-вычитании. Назубок - все побитовые операции (NOT, AND, OR, XOR, SHL, SHR). Уметь проверить и выставить любой бит в любое значение. То же самое - c любой комбинацией битов.
Задание 3.
Найти любой программируемый калькулятор и описание его команд (обычно в инструкции). Понадобится для дальнейшего.
Задание 4.
Найти книгу по Паскалю или Delphi с ХОРОШИМ описанием ЯЗЫКА. Не компонентов там всяких, а самого ЯЗЫКА - типы данных, операторы, работа с памятью и пр. Тоже понадобится для дальнейшего.
--------------------------------------------
Ссылки по заданиям:
http://www.i-u.ru/biblio/arhiv/books/noname_uchInform/ec4.asp
http://www.sgu.ru/kafedra/teorin/Lekciya_99.htm
http://www.happytown.ru/prog/data/simple.html
Эмулятор калькуляторов MKXX вы можете взять по адресу: http://www.emulator3000.com/Calculators3000/Calculators3000_Inst.exe (~1Mb)
Выдержки:
NeyroSpace © (21.10.02 18:14)
Из 16ричной в 2ичную минуя 10чную...
если помнить, что
0 = 0000 4 = 0100 8 = 1000 C = 1100
1 = 0001 5 = 0101 9 = 1001 D = 1101
2 = 0010 6 = 0110 A = 1010 E = 1110
3 = 0011 7 = 0111 B = 1011 F = 1111
A1FEB6 =
A 1 F E B 6 =
101000011111111010110110
Проверьте усвоенный материал:
10 AND 11 = 10
10 AND 01 = 00
10 OR 01 = 11
10 XOR 01 = 11
10 XOR 11 = 01
10 SHR = 01
10 SHL = 100
P.S. Никакие обсуждения в данной конференции НЕ ДОПУСКАЮТСЯ.
Пожалуйста, не засоряйте ветку. ТОЛЬКО вопросы по заданиям, если что непонятно.
Обсуждение первого этапа http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035122594&n=3
← →
Юрий Зотов (2002-10-23 01:59) [1]1. Поднимаю ветку вверх.
2. ТОЛЬКО к обучающимся:
Нет вопросов по заданию. Почему? Все слишком просто? Все слишком сложно? Стесняетесь? Или это никому не нужно?
Важно знать, ответьте. Tnx.
← →
Николай Быков (2002-10-23 02:15) [2]2 Юрий Зотов
Ествественно это нужно (ну хотябы мне)
Я, например, только вчера интернет-карту купил и поэтому еще не успел столкнуться с затруднениями при выполнении задания.
← →
IronHawk (2002-10-23 02:50) [3]
> Юрий Зотов © (23.10.02 01:59)
> Нет вопросов по заданию. Почему?
Читаю, пока что!
> Все слишком просто?
Не совсем.
> Все слишком сложно?
Вообще не совсем.
> Стесняетесь?
Нет.
> Или это никому не нужно?
НУЖНО!
Просто жду когда до дела дойдет.
← →
Юрий Зотов (2002-10-23 03:02) [4]> Просто жду когда до дела дойдет.
Стоп! Текущее задание - это УЖЕ дело!!! ЭТО И ЕСТЬ САМОЕ ГЛАВНОЕ!!! Без знания и УВЕРЕННОГО понимания двоичных дел и булевой алгебры НИКОГДА не быть программистом!!! Даже и не мечтайте!!! Без этого можно только компоненты по форме гонять. Всю жизнь.
Ребята, я не даю заданий просто так, уж поверьте. Не усвоив хотя бы одного, Вы не сможете двигаться дальше. Так что никакой расслабухи!
Короче говоря: срок выполнения задания - до воскресенья. Потом идем дальше. Не теряйте времени, есть вопросы - спрашивайте.
← →
esu (2002-10-23 05:29) [5]
> Назубок - все побитовые операции (NOT, AND, OR, XOR, SHL,
> SHR). Уметь проверить и выставить любой бит в любое значение.
> То же самое - c любой комбинацией битов
Помоему достаточно:
"Назубок - все побитовые операции (NOT, AND, OR, XOR, SHL, SHR)".
А "Уметь проверить и выставить любой бит в любое значение. То же самое - c любой комбинацией битов" вроде как уже входит в побитовые операции, или я ошибаюсь ?
> Из 16ричной в 2ичную минуя 10чную...
> если помнить, что
> 0 = 0000 4 = 0100 8 = 1000 C = 1100
....
зачем же это помнить ? IMHO просто понимать почему так.
← →
RV (2002-10-23 10:09) [6]не понял как работать с десячной дробью
Пpи переводе правильной десятичной дpоби в систему счисления с основанием q необходимо сначала саму дробь, а затем дробные части всех последующих произведений последовательно умножать на q, отделяя после каждого умножения целую часть пpоизведения. Число в новой системе счисления записывается как последовательность полученных целых частей пpоизведения.
Умножение пpоизводится до тех поp, пока дpобная часть пpоизведения не станет pавной нулю. Это значит, что сделан точный пеpевод. В пpотивном случае пеpевод осуществляется до заданной точности. Достаточно того количества цифp в pезультате, котоpое поместится в ячейку.
в частности как из 0.35 получили 0,01011b
← →
NeyroSpace (2002-10-23 10:55) [7]если я правильно понял:
0,
0.35*2=0.7 -> 0
0.7*2 =1.4 -> 1
0.4*2 =0.8 -> 0
0.8*2 =1.6 -> 1
0.6*2 =1.2 -> 1
Или я ошибся?
← →
esu (2002-10-23 11:01) [8]
> NeyroSpace © (23.10.02 10:55)
Нормально
← →
Николай Быков (2002-10-23 11:03) [9]стоп.
Задание же вроде бы было только с целыми числами, а не с дробными.
← →
Юрий Зотов (2002-10-23 11:38) [10]Народ, ВНИМАТЕЛЬНЕЕ!!!
Пока только ЦЕЛЫЕ, не бегите впереди паровоза. ВЕЩЕСТВЕННЫЕ числа - это особая тема, мы их будем рассматривать позже. Там надо знать не только перевод, там дело обстоит сложнее.
Так что - пока только ЦЕЛЫЕ, но КАЧЕСТВЕННО.
← →
Николай Быков (2002-10-23 11:40) [11]http://user.rol.ru/~voidmain/asm.zip
← →
Юрий Зотов (2002-10-23 11:59) [12]"Уметь проверить и выставить любой бит в любое значение. То же самое - c любой комбинацией битов" - да, это выполняется с помощью побитовых операций. Важно понимать, как это делается и уметь это делать.
Контрольный вопрос на эту тему - разложить параметр LParam сообщения WM_KEYDOWN на отдельные составляющие:
type
TKeyState = (ksPressed, ksReleased);
var
RepeatCount: word;
ScanCode: byte;
ExtendedKey: boolean;
PreviousKeyState: TKeyState;
Дано: значение LParam (32-битное целое). Временно вспомнить Паскаль и заполнить все 4 указанные переменные. Значения отдельных бит см. в справке API.
← →
zzet (2002-10-23 16:01) [13]down
Че-то все попропустил...
← →
IronHawk (2002-10-25 01:28) [14]
> Юрий Зотов © (23.10.02 03:02)
> > Просто жду когда до дела дойдет.
>
> Стоп! Текущее задание - это УЖЕ дело!!! ЭТО И ЕСТЬ САМОЕ
> ГЛАВНОЕ!!! Без знания и УВЕРЕННОГО понимания двоичных дел
> и булевой алгебры НИКОГДА не быть программистом!!! Даже
> и не мечтайте!!! Без этого можно только компоненты по форме
> гонять. Всю жизнь.
>
> Ребята, я не даю заданий просто так, уж поверьте.
Я верю!
Я нехочу быть "настоящим" программером, я хочу быть программистом который может решить определённый ряд задач, для которых "булевая алгебра" явно неглавоне... не в обиду.
← →
Mystic (2002-10-25 03:05) [15]> Я нехочу быть "настоящим" программером, я хочу быть
> программистом который может решить определённый ряд задач,
> для которых "булевая алгебра" явно неглавоне... не в обиду.
1. Битовые операции применяются в 100% программ
2. Кому нужен программист, который умеет решать столь ограниченный набор задач? Лично мне даже тяжело и задачу такую придумать...
Разве только если ты только намекаешь на раздел общей алгебры под названием "булева алгебра". Знать это раздел вовсе не обязательно (для примера: "...Булева решетка, рассматриваемая как универсальная алгебра сигнатуры (+, ., ", 0, 1) типа (2, 2, 1, 0, 0) называется булевой алгеброй. Понятие изоморфизма, подалгебры, гомоморфизма, факторалгебры, прямого и подпрямого произведений имеют обычный алгебраичекий смысл...")
← →
Akella (2002-10-25 08:33) [16]> Юрий Зотов ©
Давай дальше
← →
Niki (2002-10-25 11:31) [17]Всем привет!
Вопрос-как производить операции деления и умнож. в 8-ричной и 16-ричной системах? Без использования бинарной системы?
Я имею в виду-нет ли спец.способов вычисления?
Например-613О/14О и 1A80E/1B и их же умножить
← →
vuk (2002-10-25 12:35) [18]to IronHawk:
>Я нехочу быть "настоящим" программером
А ничего, что логические операции нужно знать даже для написания условий для элементарных операторой типа if и while? А ведь побитовые операции и логические выражения - это вещи, которые тесно связаны, потому, что в обоих случаях надо понимать как это работает и держать в голове таблицы истинности.
← →
Юрий Зотов (2002-10-25 13:55) [19]> IronHawk © (25.10.02 01:28)
> Я нехочу быть "настоящим" программером. Я хочу быть
> программистом который может решить определённый ряд задач,
1. А разве Вас кто-то заставляет? Можете быть кем хотите, это Ваше личное дело. Но без знания двоичного кода и булевой алгебры "определённый ряд задач", которые Вы сможете решить будет весьма узким. Мягко говоря. А прямо говоря - настолько узким, что "программист", не умеющий даже выставить/проверить логическое выражение или набор флагов вряд ли вообще кому-то будет нужен. Потому что без этого он не напишет ничего сложнее 2х2=4. Это как водитель, умеющий ездить только вперед, только по прямой и только на первой передаче. Так что выбирайте сами. Только потом не спрашивайте, как в клавиатурном хуке проверить, нажата или отпущена клавиша, почему неверно округляются числа с плавающей точкой и почему для них не работает проверка if X=Y then... И еще ОЧЕНЬ многое "как" и "почему".
2. Эта ветка предназначена для тех, кто свой выбор уже сделал. Точнее, для конкретных вопросов по заданиям и ответов на них. Конечно, никто не может запретить постить сюда что угодно, но я бы ОЧЕНЬ просил воздержаться от ее замусоривания. Если хочется высказать свое мнение или обсудить что-то иное - заведите свою ветку, или используйте уже имеющуюся:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035122594&n=3
> Akella © (25.10.02 08:33)
Готовлю. В воскресенье планирую опубликовать.
> Niki (25.10.02 11:31)
Надо расписать таблицу умножения и пользоваться ею. Точно так же, как мы это делаем и в десятичной системе. Например, для 5-ричной системы она выглядит так (первая строка и первый столбец - сомножители, а на пересечении - результат):
1 2 3 4
1 1 2 3 4
2 2 4 11 13
3 3 11 14 22
4 4 13 22 31
И тогда, например, 41x32:
41
x 32
----
132
+ 223
------
2412
Сравните с десятичной - все точно так же:
21
x 17
-----
147
+ 21
-----
357
Для 16-ричной - то же самое. Распишите таблицу и используйте ее. Скажем, BxF=A5. Очень полезно построить такую таблицу вручную, а потом проверить себя стандартным калькулятором из Windows (меню - вид - инженерный - Hex).
← →
Niki (2002-10-25 16:45) [20]Значит, перевод из 8-ричной в 16-ти и обратно (а также для других), без использования 10 и 2-ных систем как промежуточных, тоже происходит по правилам этих таблиц умножения.
Нет ли других правил для систем: 4 <-> 8 <-> 16?
← →
al_ (2002-10-25 22:24) [21]подскажите как это FF + 1 = 100 на бытовом уровне - че-то переклинило не могу дойти :(
← →
777 (2002-10-25 22:32) [22]
> al_ © (25.10.02 22:24)
FF+1=100 h
← →
al_ (2002-10-25 22:55) [23]
> 777 © (25.10.02 22:32)
Я понимаю что hex, но как это???
← →
TTCustomDelphiMaster (2002-10-25 22:57) [24]al_ © (25.10.02 22:24)
253 - $FD
254 - $FE
255 - $FF
256 - $100
257 - $101
← →
777 (2002-10-25 23:17) [25]
> > 777 © (25.10.02 22:32)
>
> Я понимаю что hex, но как это???
Нужен алгоритм? Я когда-то давненько уже делал ради любопытства
перевод hex->int, int->hex ручками в дельфях.
Если найду и если надо -дам.
← →
777 (2002-10-25 23:20) [26]Ааа... тут же сложение hex непонятно...
Щасс, гляну что у меня есть на этот счет
← →
Юрий Зотов (2002-10-25 23:28) [27]> al_ © (25.10.02 22:24)
F - наибольшая из всех возможных цифр (как 9 в 10-ной системе). Поэтому прибавление к ней 1 вызывает обнуление текущего разряда и перенос 1 в старший разряд: F + 1 = 10 (сравните с 10-ной системой: 9 + 1 = 10).
А теперь складываем столбиком:
FF
+ 1
---
100
Когда к младшей F прибавили 1, то в младшем разряде результата получился 0, а 1 "на ум пошла". Эту 1 "из ума" прибавляем к старшей F - снова происходит то же самое. Число кончилось, но "в уме" осталась 1. Дописывем ее слева и получаем 100.
В 10-ной (да и в любой другой) системе все точно так же:
99
+ 1
---
100
← →
lipskiy (2002-10-25 23:50) [28]Готова пилот-версия отдельного сайта для этого учебного материала:
http://delphi.adlen.ru
Юрий Зотов почему-то игнорирует мои письма, поэтому его мнения пока не знаю. Так что посмотрите. Покритикуйте. Расскажите что под Нетскейпом - нет ли глюков.
Отдельный форум для сайта и всякие интерактивные тесты начали писать другие люди (по крайней мере - они мне так сказали).
Прошу все же Юрия отреагировать как-то.
← →
al_ (2002-10-25 23:56) [29]
> Юрий Зотов © (25.10.02 23:28)
Вот СПАСИБО! Все предельно ясно и понятно! Чуствуется преподавательская нотка!
← →
al_ (2002-10-26 04:05) [30]Извините за частоту вопросов но все-таки, как сделать вещь:
ABCDE16> в .....8> интересует естественно принцип. СПАСИБО</>
← →
Юрий Зотов (2002-10-26 10:17) [31]Так... стоп.
Что сказано в задании?
КОНКРЕТНЫЙ вопрос. После 10-й попытки.
Перевод из системы в систему рассмотрен в материале по ссылкам. Рассмотрен подробно, с примерами и пояснениями. Нужно подробно эти примеры разобрать и, если после 10-й попытки есть вопрос - вот тогда. Например, "куда записывается такая-то цифра при выполнении такой-то операции".
Без обид, ОК? Такой подход просто необходим, иначе это будет не учеба, а "спросил-ответил-забыл". А вот это "забыл" нам как раз и не нужно.
← →
al_ (2002-10-26 22:31) [32]
> Юрий Зотов © (26.10.02 10:17)
ага я до 4 утра искал как мне реализовать 16 - 8...
← →
TTCustomDelphiMaster (2002-10-26 22:42) [33]al_ © (26.10.02 22:31)
Что непронятно то?
ЗЫ: Говорите точно, сколько вешать!!!
← →
zzet (2002-10-28 18:08) [34]Выдержка из:
Лекции по информатике
Лекция 4
Арифметические основы компьютеров
Сама же запись числа 757,7 означает сокращенную запись выражения
700 + 50 + 7 + 0,7 = 7•10 + 5•10 + 7•10 + 7•10 = 757,7.
Ну, это: 700 + 50 + 7 + 0,7 = 757,7 понятно и моему сыну,
а вот это:
7•10 + 5•10 + 7•10 + 7•10 = 757,7 честно говоря, не понимаю..
В позиционной системе =260, В непозиционной? 0.7 записано как 7•10, а если
бы было 757,777 писали бы 7•10 + 5•10 + 7•10 + 7•10 + 7•10 + 7•10 ??
Почему 7•10 ? Получается что ли 7 = 7•10 и 0,7 = 7•10 ?
Запись числа 757777 будет выглядеть так же?
А отделить дробную часть? Ничо не понимаю..
Может где-то можно поподробнее об этом почитать?
Может вопрос не по теме, но не хотелось бы оставлять непонятных моментов.
Заранее благодарю..
← →
TTCustomDelphiMaster (2002-10-28 18:16) [35]
> 7•10 + 5•10 + 7•10 + 7•10 = 757,7
Судя повсему здесь пропущены степени
7•10^2 + 5•10^1 + 7•10^0 + 7•10^(-1) = 757,7
← →
zzet (2002-10-28 20:04) [36]Спасибо! Врубился..
← →
Юрий Зотов (2002-10-28 23:22) [37]Свершилось! Переходим к этапу 2:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035836141&n=3
← →
Niki (2002-10-29 18:27) [38]Привет всем!
Объясните, пож-ста, как вычитать числа в двоичной системе, не прибегая к NEG и сложению? Т.е. по аналогии с 10-ной, с заемами?
В статье http://www.happytown.ru/prog/data/simple.html сказано что "Как и операция сложения, операция вычитания очень похожа на вычитание обычных десятичных чисел. Точно так же, как и при обычном вычитании, формируются междуразрядные заемы ...
Теперь небольшой пример:
00110000
01100011
----------
11001101 "
Мне кажется, что если в данном примере производить опер. вычитания обычным способом ("столбиком"), то в разряде 0 должен стоять 0 (1-1=0). Хотя с помощью NEG и ADD получается как надо.
По моему я где-то путаюсь с этими заемами :)
Спасибо.
← →
esu (2002-10-29 18:37) [39]
> производить опер. вычитания
Нету операции вычитания столбиком, есть знаковый бит...
← →
Niki (2002-10-29 18:40) [40]> esu © (29.10.02 18:37)
Не понятно как-то.
← →
Fog (2002-10-29 18:51) [41]Меня поставили в тупик. Жизнь потеряла смысл... :)
← →
TTCustomDelphiMaster (2002-10-29 18:58) [42]Там же все написано. Читайте главу "Машинные форматы данных" - "Байт"
← →
DeMoN-777 (2002-10-29 19:14) [43]lipskiy http://delphi.adlen.ru/ нам нужен
← →
Niki (2002-10-29 19:31) [44]СТОП! (see --- Niki (29.10.02 18:27))
Вопрос: можно ли вычитать числа в 2-ной системе столбиком, на бумаге?
Я прекрасно знаю, что a-b=a+(-b), дело не в этом. Хочу разобраться. Мы же здесь учимся, верно?
И спасибо за толковые разъяснения, а не за "Там же все написано".
>TTCustomDelphiMaster © (29.10.02 18:58)
Объясните, пожалуйста, Ваш ответ, относительно моего вопроса.
← →
esu (2002-10-29 19:57) [45]
> Niki (29.10.02 19:31)
положительное-отридцательное
(для простоты 4 бита)
0101 (десятичное 5)
Инверсные биты:
1010
Плюс 1 (дополнительный код)
1011 (детятичное -5)
отридцательное-положительное
1011
Инверсные биты
0100
+1 (доп код)
0101 (десятичное 5)
1011
+
0101
----
0000
(-5 + 5 = 0)
← →
esu (2002-10-29 20:18) [46]
> отридцательное
отрицательное :( Вторые сутки не сплю...
← →
Niki (2002-10-29 20:20) [47]Я извиняюсь, что повторяюсь, и прошу прощения за неумение сформулировать вопрос.
Вопрос: можно ли вычитать числа в 2-ной системе столбиком, на бумаге?
Так, как мы делаем с обычными цифрами, например:
4582
-
2199
-----
2383
мы же не делаем так:
4582+(-2199), а применяя элементарные правила просто вычитаем.
Хочу понять эти правила для 2-ной системы.
Меня смутила эта фраза из статьи "Как и операция сложения, операция вычитания очень похожа на вычитание обычных десятичных чисел. Точно так же, как и при обычном вычитании, формируются междуразрядные заемы."
Теперь небольшой пример:
00110000
01100011
--------
11001101
Мне кажется, что если в данном примере производить опер. вычитания обычным способом, на бумаге ("столбиком"), то в разряде 0 должен стоять 0 (1-1=0). Хотя с помощью NEG и ADD получается как надо.
По моему я где-то путаюсь с этими заемами :)
Я прекрасно знаю, что a-b=a+(-b), дело не в этом. Хочу разобраться. Мы же здесь учимся, верно?
Спасибо.
← →
Anatoly Podgoretsky (2002-10-29 21:07) [48]
001 10000 заем из xxx1000.0 0010111.0
0 110001 1 0110001.1
-------- =========
11001101 xx00110.1
00110000 заем из 1.00xxxxxx 00xxxxxx
01xxxxxx
========
11xxxxxx
11001101
1.xxxxxxxx - это невидимый дополнительный разряд, также как при вычитании из 1.00 например 09 есть невидимый разряд 1*10^2
1.090
987
===
103 проверяем обратное вычисление
987 +
103 =
1.090
старший разряд ообрасываем, для выше приведенных двоичных это
01100011 +
11001101 =
1.00110000
Естественно вместо вычитания в процессоре делается сложение с дополнением до двух
01100011 -> 10011100 + 1 -> 10011101 (not B + 1)
00110000 +
10011101
========
11001101
← →
LongIsland (2002-10-29 22:10) [49]Я думаю, что эта ссылка не помешает... Жаль, что этого не было, когда я начинал:-( Многие вопросы сами собой отпали бы...
← →
LongIsland (2002-10-29 22:10) [50]Черт, а ссылку забыл:-(
http://www.wasm.ru/article.php?article=1022001
← →
Niki (2002-10-30 11:56) [51]> Anatoly Podgoretsky © (29.10.02 21:07)
Большое спасибо. Все понятно. Вижу свою ошибку.
← →
Niki (2002-10-31 11:55) [52]Не дам умереть ветке :)
Привет всем!
Вот тут вопрос родился, опять по статье http://www.happytown.ru/prog/data/simple.html
В разделе Операции с байтами говорится, что "Операции АРИФМЕТИЧЕСКОГО СДВИГА ВПРАВО (SAR) и АРИФМЕТИЧЕСКОГО СДВИГА ВЛЕВО (SAL) имеют смысл для знаковых байт. Аналогичны операциям логических сдвигов, за исключением сохранения знака байта при сдвиге вправо. Логический и арифметический сдвиги влево полностью идентичны.
"
Обратите внимание, что при сдвиге вправо знаковый бит дублируется. Это позволяет сохранять знак байта. Как в операциях логических сдвигов флажек CF принимает значение последнего выдвинутого байта.
Вопрос следующий: А из каких соображений это сделано именно так? Почему не сохраняется знак при ариф. сдвиге влево, а вправо сохраняется? В чем заключается идея?
Спасибо.
← →
al_ (2002-10-31 23:58) [53]Лекции по информатике
Лекция 4
Арифметические основы компьютеров - очень много пропущено при объяснении, там ссылаются на пример, а пример не показан :(
Тяжеловато так вот разбираться, тут мысли в голове путаются, а еще и при объяснении путают :(
P.s. Все-таки желательно проверять материал на осознабельность прежде чем давать на него ссылку ИМХО. Вот сами посудите:
http://www.i-u.ru/biblio/arhiv/books/noname_uchInform/ec4.asp
а так была бы полноценная лекция.
> LongIsland © (29.10.02 22:10)
Где ты раньше был =)
← →
al_ (2002-11-02 17:30) [54]Совершенно не понятно упражнение 6! =(
← →
al_ (2002-11-02 17:48) [55]и еще: подскажите принцип разложения -128 в обратный и дополнительный код!
← →
Николай Быков (2002-11-02 18:18) [56]Если я правильно понял, то число -128 в дополнительном коде будет так же выглядеть, как и 128 в нормальном состоянии, только в регистре процессора флаг поднят будет. Я прав?
← →
Anatoly Podgoretsky (2002-11-02 18:27) [57]В отрыве от разрядной сетки, ты понял неправильно, выглядеть будет ка +128, если же сетка 8 разрядная, то как -128
← →
Николай Быков (2002-11-02 18:34) [58]
> Anatoly Podgoretsky © (02.11.02 18:27)
> В отрыве от разрядной сетки, ты понял неправильно, выглядеть
> будет ка +128, если же сетка 8 разрядная, то как -128
Ну а вот трудно было подробнее объяснить?
ЗЫ
Рискую быть битым, но все же...
← →
Anatoly Podgoretsky (2002-11-02 20:13) [59]Николай Быков © (02.11.02 18:34)
Это очень трудно объяснить, если ты не задаешь конкретного вопроса, а так какой то набор слов. Я например до сих пор не знаю, а что ты хочешь узнать, ты свой вопрос до сих пор не расшифровал, абсолютно любой ответ подходит на твой вопрос.
Особенно про какой то таинственный флаг, какой тебя именно флаг интересует, какова разрядность, процессор работает с дополнение до единицы или до двух?
← →
Юрий Зотов (2002-11-02 20:40) [60]> Николай Быков © (02.11.02 18:18)
> Если я правильно понял, то число -128 в дополнительном коде
> будет так же выглядеть, как и 128 в нормальном состоянии,
Зависит от длины разрядной сетки. Об этом и говорит Анатолий. Напишите -128 в 8-битной и 16-битной сетках - увидите сами.
← →
Anatoly Podgoretsky (2002-11-02 20:51) [61]Юрий Зотов © (02.11.02 20:40)
Я тут еще упомянул и процессоры с дополнением до единицы, а не до двух (IBM) про них уже многие забыли, вот там отричательные и положительные выглядят одинаково, за исключением знакового разряда, зато у них два нудя +0 и -0, может помнишь такие?
А упомянул я их потому что это имеет отношение к теории. Нам правда не стоит в них углубляться но упомянуть их стоит, для понимания общей теории.
← →
Юрий Зотов (2002-11-02 21:27) [62]> al_ © (02.11.02 17:30)
Пожалуйста, приводите прямо в вопросе ссылку на Web-страницу, чтобы можно было просто кликнуть, а не искать.
> Anatoly Podgoretsky © (02.11.02 20:51)
Ох... да я был бы счастлив, если бы народ хотя бы этот минимум как следует понял... что уж там про общую теорию вспоминать...
← →
Niki (2002-11-04 12:42) [63]?
Смотри ---> Niki (31.10.02 11:55)
← →
han_malign (2002-11-04 12:49) [64]-i == (not i)+1
← →
DeMoN-777 (2002-11-04 12:59) [65]Абалдеть, народ помогите плиз. Прочитал почти все статьи на которые линковали в этих ветках. Читал внимательно, старался понять, перечитывал. Только не понятно как это всё работает ?
Можно линк на более начальный материал ?
← →
han_malign (2002-11-04 13:03) [66]и в Дельфях был класный прикол
var dw: DWORD;
begin
for dw:=0 to $8000 do ...
внутри параметр приводился к знаковому и происходило заворачивание счетчика на -($7FFF)(естественно < +($8000)) и получался вечный цикл(не помню сейчас убрано или нет, но для беззнаковых приходилось пользовать while)
← →
Oleg_Gashev (2002-11-04 13:04) [67]Еще стоит рассмотреть двоично-десятичное представление чисел. Но я вроде Вас тороплю.
← →
Niki (2002-11-04 16:22) [68]> han_malign © (04.11.02 12:49)
Это ответ на мой вопрос о SAR и SAL?
> All Смотри ---> Niki (31.10.02 11:55)
← →
al_ (2002-11-05 01:51) [69]У меня накопилось куча вопросов:
1) Почему в этом случае -120-15 у меня получается +7?
10000111 обр. (-120)
11110000 обр. (-15)
101110111 (переполнение стека)
1
01111000 => 00000111 = 7
Где ошибка?
2) Нужно ли разбирать вычисления с плавающей запятой?
3) Из упражнений, что вы привели я НИ ОДНОГО НЕ СМОГ РЕШИТЬ! (хотя очень досканально читал и прорешивал все)
4) Упражнение 6 - это наверно разговор на разных языках, достал справку WinAPI, прочитал ничерта не понял :(
P.s. Я уже как 6 часов нахожусь в преддаунском состоянии.
← →
DeMoN-777 (2002-11-06 23:57) [70]1. Не дам умереть ветке.
2. А как же на счёт моего поста ? DeMoN-777 © (04.11.02 12:59)
← →
al_ (2002-11-07 12:36) [71]
> Юрий Зотов ©
>Короче говоря: срок выполнения задания - до воскресенья.
> Потом идем дальше. Не теряйте времени, есть вопросы - спрашивайте.
Спрашивать, то мы спрашиваем, а вот отвечать некому :(
← →
Набережных С. (2002-11-07 16:18) [72]>al_ © (05.11.02 01:51)
1)Будь внимательнее.
10000111 обр. (-120)
11110000 обр. (-15)
101110111 (переполнение стека)
1
01111000 => 10000111 = 135
2)Когда Учитель скажет
3)См. п.1.
← →
al_ (2002-11-08 01:13) [73]
> Набережных С. (07.11.02 16:18)
Я стараюсь быть максимально внимательным, но:
по п.1. у меня те же цифры получились, только откула появилась
первая единица (это происходит при переполнении стека), т.е. она меняет разрядность?
по п.3. - не серьезно, что-то сложноваты задания :(
может с кем-нибудь по мылу пообщаемся на тему упражнений. А то ведь на мертвой точке нахожусь :(
← →
al_ (2002-11-08 01:15) [74]
> Набережных С. (07.11.02 16:18)
Я стараюсь быть максимально внимательным, но:
по п.1. у меня те же цифры получились, что при переполнении стека в двух отрицательных числах потом меняем знаковый бит на противоположный?
по п.3. - не серьезно, что-то сложноваты задания :(
может с кем-нибудь по мылу пообщаемся на тему упражнений. А то ведь на мертвой точке нахожусь :(
← →
Николай Быков (2002-11-08 01:21) [75]А что конкретно ты в справке по WinAPI не понял? Какой ты раздел читал? Надеюсь ты не читал справку по WinАРI на русском языке?
Думаю, что смогу тебе с WinAPI помочь
← →
al_ (2002-11-08 01:54) [76]
> Николай Быков © (08.11.02 01:21)
Да, читал именно рускую справку про wm_keydown. Но я не врубаюсь, как это разложить, как понимать??? Где раскладывать, в чем раскладывать, каким образом??? Так что ВОТ
← →
Николай Быков (2002-11-08 04:16) [77]НАчнем по порядку:
> Да, читал именно рускую справку про wm_keydown
Ни в коем случае не читай эту лабуду!!! У тебя есть Delphi, там есть замечательная справка, называется Windows SDK HELP. Все по WInAPI нужно читать именно там.
> Но я не врубаюсь
> как понимать???
Я тебе принцип работы win32 приложений чуть выше объяснил. Если все равно не понятно, то приведи конкретнострочку, в которой тебе не понятно. Если все вместе не понятно, то не отчаивайся, Я раньше не мог понять производные и интегралы.
> каким образом???
Это в статьях по занятиям Юрия Зотова написано
> Где раскладывать
В WinMIN приложении. Если тебе интересно, то ищешь примеры к книге Б. Красного по OpenGL. Там в самом начале находишь это WinMIN приложение(самое первое, которое ни на что реагировать не умеет еще), дополняешь Оконную процедуру реакцией на WM_KEYDOWN и пробуешь раскладывать. Результаты удобно в Caption формы выводить. + тут можно поискать про создание WinMIN приложений, но я сомневаюсь что они есть на этом сайте, а поиск зарускать лень+он не очень тут нормально функционирует :-)
← →
Набережных С. (2002-11-08 12:15) [78]>al_ © (08.11.02 01:54)
Старшая единица - это и есть переполнение разрядной сетки. И у тебя ошибка при инвертировании в последней строке.
Однако удобней пользоваться дополнительным кодом:
8 разрядов позволяют представить числа от 10000000(-128) до 01111111(+127). Старший разряд - знак, единица - минус, ноль - плюс. Есть два способа перевода в дополнительный код.
Первый:
1) 0000 0101 -> Берем модуль числа -5
2) 1111 1010 -> инвертируем все разряды
3) 1 -> прибавляем 1(переполнение отбросим, если будет)
4) 1111 1011 -> получили -5 в дополнительном коде
Второй:
1) 0000 0101 -> Берем модуль числа -5
2) 1111 1111 -> прибавляем число с единицами во всех разрядах
3) 1 0000 0100 -> переполнение отбрасываем
4) 1111 1011 -> инвертируем сумму,получили то-же самое.
С дополнительными числами можно выполнять обычные операции. В арифметике: 7-5=7+(-5), т.е. к 7 прибавить -5:
0000 0111 -> 7
1111 1011 -> -5 в дополнительном коде, суммируем
1 0000 0010 -> переполнение сетки отбрасываем, получаем 2.
Если выполнить -7+5:
1111 1001 -> -7 в дополн. коде
0000 0101 -> 5
1111 1110 -> -2 в доп. коде.
Единица в старшем разряде говорит об отрицательном результате. Чтобы получить модуль, нужно выполнить то-же самое, т.е. методика обратимая:
1111 1110 -> -2
0000 0001 -> инверсия
1 -> прибавляем 1, отбрасываем переполнение
1 0000 0010 -> получили 2, модуль числа -2.
← →
Набережных С. (2002-11-08 12:22) [79]Тэги спутал
Удобней пользоваться дополнительным кодом:
8 разрядов позволяют представить числа от 10000000(-128) до 01111111(+127). Старший разряд - знак, единица - минус, ноль - плюс. Есть два способа перевода в дополнительный код.
Первый:
1) 0000 0101 -> Берем модуль числа -5
2) 1111 1010 -> инвертируем все разряды
3) 1 -> прибавляем 1(переполнение отбросим, если будет)
4) 1111 1011 -> получили -5 в дополнительном коде
Второй:
1) 0000 0101 -> Берем модуль числа -5
2) 1111 1111 -> прибавляем число с единицами во всех разрядах
3) 1 0000 0100 -> переполнение отбрасываем
4) 1111 1011 -> инвертируем сумму,получили то-же самое.
С дополнительными числами можно выполнять обычные операции. В арифметике: 7-5=7+(-5), т.е. к 7 прибавить -5:
0000 0111 -> 7
1111 1011 -> -5 в дополнительном коде, суммируем
1 0000 0010 -> переполнение сетки отбрасываем, получаем 2.
Если выполнить -7+5:
1111 1001 -> -7 в дополн. коде
0000 0101 -> 5
1111 1110 -> -2 в доп. коде.
Единица в старшем разряде говорит об отрицательном результате. Чтобы получить модуль, нужно выполнить то-же самое, т.е. методика обратимая:
1111 1110 -> -2
0000 0001 -> инверсия
1 -> прибавляем 1, отбрасываем переполнение
1 0000 0010 -> получили 2, модуль числа -2.
← →
al_ (2002-11-11 19:54) [80]
> Набережных С. (08.11.02 12:22)
Спасибки!!! А у меня еще есть один-два вопроса!
1. Как понять "Уметь проверить и выставить любой бит в любое значение"?
2. Пойдет ли книга, В.В.Фараонов "Delphi 6 - учебный курс" М.: 2001 г., для обучения?
← →
Юрий Зотов (2002-11-11 20:36) [81]1. Это значит: дано N-битное целое число и номер бита i (i < N).
a). Определить, в каком состоянии находится этот бит (0 или 1).
б). Выставить этот бит в состояние 0.
в). Выставить этот бит в состояние 1.
Не обязательно решать задачу в общем виде, достаточно решить ее на нескольких примерах (т.е., взяв конкретные значения N и i).
2. Конкретно эту книгу я не знаю, но в тех книгах В.В.Фаронова, которые я видел, большое внимание уделено самому языку Паскаль. Если и в этой книге так же, то это как раз то, что нужно.
← →
al_ (2002-11-12 00:20) [82]
> Юрий Зотов © (11.11.02 20:36)
:( Первый пункт не ясен. Я чего-то недопонимаю :(
← →
MBo (2002-11-12 06:24) [83]>al_
Пусть у нас имеется Integer число 17=$11=10001b
чтобы узнать, в каком состоянии находится 5-й справа бит (при общепринятой нумерации с нуля он называется 4-ым), нужно извлечь его, игнорируя остальные. Для этого производим такую логическую операцию, при которой остальные биты сбрасываются в 0, а нужный не меняется. Это будет логическое AND c 10000b.
10001b and 10000b = 10000b
а
10001b and 1000b =0
чтобы легко задать нужный бит маски, получаем ее путем сдвига влево числа 1 (у которого установлен только нулевой бит) на нужное число позиций. В результате:
if ( X and (1 shl 4) ) <>0 (в условии можно вместо неравенства и так: (...)=$10 )
then 4 бит установлен в 1
Про выставление бита сам попробуй
← →
AndrewVolkov (2002-11-24 00:56) [84]>не понял как работать с десячной дробью
Пpи переводе правильной десятичной дpоби в систему счисления с основанием q необходимо сначала саму дробь, а затем дробные части всех последующих произведений последовательно умножать на q, отделяя после каждого умножения целую часть пpоизведения. Число в новой системе счисления записывается как последовательность полученных целых частей пpоизведения.
Умножение пpоизводится до тех поp, пока дpобная часть пpоизведения не станет pавной нулю. Это значит, что сделан точный пеpевод. В пpотивном случае пеpевод осуществляется до заданной точности. Достаточно того количества цифp в pезультате, котоpое поместится в ячейку.
в частности как из 0.35 получили 0,01011b
Я не совсем понял про пункт останова
"пока дpобная часть пpоизведения не станет pавной нулю"
0.35*2=0.7 -> 0
0.7*2 =1.4 -> 1
0.4*2 =0.8 -> 0
0.8*2 =1.6 -> 1
0.6*2 =1.2 -> 1
она же не стала = 0 ->0.2
можно же дальше продолжать
0.2*2 = 0.4 ->0
0.4*2 = 0.8 ->0
0.8*2 =1.6 -> 1
0.6*2 =1.2 -> 1
и так в цикле... где останавливаться???
← →
AndrewVolkov (2002-11-24 01:53) [85]И насчет VM_KeyDown подскажите, как с ним работать???
У меня он все время 256 дает???
← →
Anatoly Podgoretsky (2002-11-24 09:04) [86]AndrewVolkov (24.11.02 00:56)
"В пpотивном случае пеpевод осуществляется до заданной точности"
В данном случае точность 6 бит
Страницы: 1 2 3 вся ветка
Форум: "Потрепаться";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
Память: 0.71 MB
Время: 0.009 c