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

Вниз

Начинающим программистам. Этап 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)

Не понятно как-то.



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

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

Наверх




Память: 0.59 MB
Время: 0.017 c
3-51559
Delphin2002
2002-11-26 13:10
2002.12.16
дублировать значение


3-51609
Соломатин Артем
2002-11-27 22:30
2002.12.16
RecordCount на Oracle


4-52035
cardinal
2002-10-31 02:36
2002.12.16
Как узнать адреса процессов в w98?


1-51782
lety
2002-12-04 22:12
2002.12.16
Курсор в мемо


1-51662
white
2002-12-05 15:39
2002.12.16
Random