Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.04.03;
Скачать: [xml.tar.bz2];

Вниз

Начинающим программистам. Этап 3.   Найти похожие ветки 

 
Юрий Зотов   (2002-12-01 21:49) [0]

Итак, снова идем дальше и начинаем этап 3. Предыдущие этапы см. здесь:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035226023&n=3
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035836141&n=3

Как и ранее, сначала контрольные вопросы по предыдущему этапу.

1. Сколько десятичных знаков могут хранить числа типов Single, Double и Extended? Какой диапазон значений они имеют?

2. Какие особенности имеют типы Comp и Currency по сравнению с другими вещественными типами?

3. Что такое:
- значащие цифры и незначащие нули?
- абсолютная и относительная погрешность?
- мантисса и порядок?
- нормализация мантиссы?
- приведение (или выравнивание) порядка?
- исчезновение порядка?
- машинный ноль?
- машинное эпсилон?
- ошибка округления?
- накопление ошибки округления?

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

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

6. Даны вещественные числа X и Y, каждое из которых имеет относительную погрешность E. Доказать, что относительная погрешность их разности E1 будет равна E*Abs((X+Y)/(X-Y)). Во сколько раз E1 будет превышать E, если Y=0.999*X?

7. Даны числа X=1.23456 и Y=1.23457. Каждое из них имеет погрешность в 5-м десятичном знаке. В каком знаке будет иметь погрешность разности этих чисел?

8. Даны числа X=1.23456 и Y=1.23457. Написать функцию, вычисляющую их сумму для 2-х случаев - когда оба числа имеют тип Single и Double. Почему результаты различаются?

9. Дано выражение R:=A-B+1, в котором все переменные имеют тип Single. Известно, что значения A и B очень близки друг к другу. Как следует переписать это выражение, чтобы получить результат с минимальной погрешностью?

Если мы точно, аккуратно и полностью выполнили это и все предыдущие задания, то мы должны знать и понимать:

- позиционные системы счисления и все виды машинной кодировки чисел;
- их 2-ное и 16-ное строковые представления;
- различие между знаковыми и беззнаковыми целыми числами;
- все арифметические и логические операции, включая унарные;
- принятое в Delphi старшинство операций;
- как проверить или выставить любую комбинацию бит в любом целом числе;
- что такое знаковый бит, разрядная сетка и ее переполнение;
- назначение флагов CF и OF в регистре флагов CPU;
- все типы целых чисел в Delphi (включая Int64), их размер и диапазон значений;
- "непаскалевские" типы целых чисел и их соответствие "паскалевским";
- все функции Delphi для работы с целыми числами, их переводом в строку и обратно;
- директивы компилятора $Q и $R, управление ими при помощи мышки;
- "научную" нотацию и машинный формат вещественных чисел;
- что такое мантисса и порядок (экспонента), нормализация и приведение порядка;
- все типы вещественных чисел в Delphi, включая Comp, Currency, TDate/Time, Real и Real48;
- директиву компилятора $REALCOMPATIBILITY;
- размер, точность и диапазон значений всех вещественных типов;
- что такое INF, NAN, управляющее слово FPU, переменная Default8087CW и процедура Set8087CW;
- термины Underfow и Overflow, "исчезновение порядка", "машинный ноль" и "машинное эпсилон";
- усечение, округление и бухгалтерское округление вещественных чисел;
- ошибки округления и их накопление в цепочках вычислений;
- особенности сравнения вещественных чисел и других операций с ними;
- все функции Delphi для работы с вещественными числами, включая содержащиеся в модуле Math.

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

См. окончание.


 
Юрий Зотов   (2002-12-01 21:50) [1]

===== окончание ======

А теперь - задание на текущий, третий этап.

Следующая наша задача - завершить освоение простых (их еще называют скалярными) типов данных (кроме указателей, о которых речь пойдет особо). К простым типам относятся:
- целые и вещественные числа (которые мы, надеюсь, уже изучили);
- символьный тип char (или character - не путать со строками и PChar!!!);
- логический тип boolean;
- перечисляемый тип (enumerated);
- тип-диапазон (subrange);
- указатели (которые мы пока не трогаем, потому что это очень важная тема и мы будем рассматривать ее особо и подробно).

Все простые типы (simple types), кроме вещественных чисел, относятся к так называемым порядковым типам (ordinal types). Слово "порядковый тип" означает, что данные такого типа имеют конечное число возможных значений, упорядоченных по возрастанию. Вещественные же числа (real types или floating-point types) имеют неограниченное количество значений и поэтому к порядковым не относятся. Строго говоря, из-за конечности своего представления вещественные числа тоже имеют ограниченное количество значений, но в математике это не так, и поэтому в программировании тоже считается, что вещественные типы имеют как бы бесконечное количество возможных значений. Во всяком случае, это количество если и не бесконечно, то огромно.

Задача - разобраться со всей этой кухней. В справке набираем "data types", жмем "показать" и выбираем раздел "Data types and variables. Overview". На открывшейся странице сразу кликаем линк "Topic groups" и слева получаем боковое окно, в котором перечислены все интересующие нас типы данных. Кликаем, читаем, изучаем.

НАСТАЛО САМОЕ ВРЕМЯ ИСПОЛЬЗОВАТЬ ЕЩЕ И КНИГУ, А НЕ ТОЛЬКО ХЕЛП!!! Исключительно полезно найти таблицу ASCII-символов и изучать тип char прямо по ней. Таблица эта есть в очень многих книжках - загляните в приложения в конце.

Что нужно усвоить:
- размер данных каждого типа и диапазон их возможных значений;
- что char и byte - это одно и то же, только по-разному трактуется;
- что все порядковые типы - это фактически просто целые числа;
- как задавать собственные переслимые типы и собственный тип-диапазон;
- как приводить данные олного порядкового типа к другому;
- директиву компилятора $R.

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

1. Скачать себе эмулятор MK-61.
Он есть здесь: http://www.emulator3000.com/rus-c3.htm
и здесь: http://umbra.chat.ru/mk61ins.exe
Это две разные программы, пользоваться можно любой из них. Первая содержит в себе целую кучу красивых калькуляторов (из которых нам нужен ТОЛЬКО MK-61). Вторая не такая красивая, зато с хелпом (раскрывается в боковом окне и дает подсказку по клавише при наведении мыши на нее).

2. Освоить скачанную программу и научиться пользоваться калькулятором в АВТОМАТИЧЕСКОМ (то есть РУЧНОМ) режиме. Режим ПРОГРАММИРОВАНИЯ пока не трогайте, его мы и будем изучать вместе. Инструкция по MK-61 находится здесь:
http://neox.pri.ee/mk61manual
Нужно освоить главы 4 и 6 - то есть, просто научиться считать не этой машинке вручную, но делать это уверенно.

Там нет ничего хитрого, только надо усвоить что сначала вводятся ОБА числа, а уже потом нажимаем ЗНАК действия и получаем результат (то есть XY+, а не X+Y, как на бухгалтерских калькуляторах). Кстати, это хорошая иллюстрация использования так называемой "польской записи", о которой мы еще, надеюсь, поговорим - а сейчас скажу о ней только вот что.

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

Итак - скачать MK-61 и освоить его в режиме ручных вычислений. И, конечно, выполнить 9 приведенных в начале упражнений на закрепление пройденного, а также закончить изучение простых типов данных. Срок на все на это - примерно пара недель, а потом двинемся дальше.


 
Юрий Зотов   (2002-12-01 22:00) [2]

Забыл добавить.

Народ, внимание! Перед запуском калькуляторов рекомендую все же проверить их на вирусы. Если кто что обнаружит - срочно пишите сюда.


 
Shadow   (2002-12-01 22:06) [3]

2Юрий Зотов
Достойное у вас занятие!


 
Denvor   (2002-12-01 23:33) [4]

2Юрий Зотов:
Вы, конечно, хорошим делом занимаетесь, но эти уроки уйдут в архив и все про них забудут, ведь в форуме поддерживаются обсуждаемые ветки.
Лучше забросить это на сайт-домашнюю страничку и давать тут ссылки. Тогда люди при возникшей необходимости будут заходить к вам время от времени.
Хорошо бы было поподробнее рассказать о событиях в МАСТ ДАЕ и прочих, частозадаваемых и надоевшим вам темам. Что бы быть всегда интересным мастеру надо понемногу раскрывать свои секреты, но не доконца (без секретов мастер не есть мастер).
А ещё лучше написать книгу для неновичков. У нас в Киеве просто вакуум на такую литературу.


 
Юрий Зотов   (2002-12-02 00:09) [5]

Напоминаю просьбу ко всем.

Эти ветки предназначены для вопросы по сабжам и ответов на них. Конечно, никто не может запретить постить сюда что угодно, но ОЧЕНЬ прошу не замусоривать их ничем, не относящимся НАПРЯМУЮ к теме.

Все мнения, пожелания и пр. приветствуются и Вы можете высказать их здесь:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035122594&n=3


 
StAL   (2002-12-02 17:31) [6]

To Юрий Зотов
Спасибо за обучение!
Принялся за третий этап, и сразу огромное количество вопросов по заданиям
3)
- значащие цифры и незначащие нули? ?????
Значащие цифры - просто цифры числа? А незначащие нули - нули, слева от целой части? Так?
- абсолютная и относительная погрешность? ?????
?????
- мантисса и порядок? понятно, но не до конца. Где-то на 7 баллов
Мантисса - к-во дес. знаков? E-?????
- нормализация мантиссы?
----"----
Как-то не понятно это описано в статье А. Григорьева. Хотя, наверное, это для тех, кто уже прошел ВУЗ, а я еще школу даже не закончил. Еще 1,5 года
- приведение (или выравнивание) порядка? ?????
Это вовсе первый раз слышу
- исчезновение порядка? ?????
----"----
- машинный ноль? ?????
----"----
- машинное эпсилон? вроде-бы понятно
- ошибка округления? ?????
----"----
- накопление ошибки округления? ?????
----"----
4) Я даже не понимаю, что такое FPU
5), 6), 7), 8), 9) Я НИЧЕГО НЕ ПОНИМАЮ!!!! :"( ОТКУДА ЭТО ВСЕ БРАТЬ. РАНЬШЕ ХОТЬ СТАТЬИ БЫЛИ? :(((((((((((((
Я понимаю, что со мной много мороки, что я еще мало знаю, но все-же, не могли-бы Вы направить меня.
ПОМОГИТЕ!!!!

Большое Вам спасибо! Жду Вашего ответа с нетерпением.
С ув. Алексей


 
al_   (2002-12-17 20:26) [7]

Инструкцию по кальк.МК61 изучил :) Готовность №1. Скоро продолжение?


 
Jeer   (2002-12-17 22:38) [8]

http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035122594&n=3


 
Top Gun   (2002-12-27 22:46) [9]

Интересно насчет следующих этапов узнать

И почему на сайте delphi.adlen.ru третий этап не выложен ?


 
Top Gun   (2002-12-27 22:47) [10]

http://neox.pri.ee/mk61manual тоже не работает

Проект загнулся ?


 
Хмырь   (2002-12-28 02:15) [11]

2Юрий Зотов
Е-мое! И Вы молчите о своих персональных уроках????
Да я три месяца на мастаковском форуме висю, и только шас узнал!
Уже сейчас берусь за наверстывание упущенного :-)

2ALL
Господин Зотов - герой! От имени всех ламеров и чайников, вернее (пардон, я оговорился) начинающих программистов, выражаю Вам безграничную благодарность!

2Denvor
Полностью с Вами согласен.


 
Top Gun   (2002-12-28 12:06) [12]

Дико извиняюсь, что пишу сюда... Но ответьте, ПОЖАЛУЙСТА, проект загнулся или как ?


 
Neox   (2002-12-28 13:04) [13]

2Top Gun
http://neox.pri.ee/mk61manual не работал из-за проблем с сервером, где это лежит (не обрабытываются php файлы). Админу я уже отписал, а пока поменял расширения на html.


 
Юрий Зотов   (2002-12-28 13:20) [14]

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

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

По поводу запуска проекта на отдельном сайте - вопрос решается. Вероятно, изменится и его организация - она приблизится к обычной (и проверенной временем) организации заочного обучения.

Просьба к Мастерам и ко всем тем, кто хорошо усвоил материал - ответить в этой ветке на вопросы StAL"а. Только без флейма, pls - коротко, точно, конкретно, четко и ясно. Это помогло бы мне сэкономить время, а всем остальным - лучше понять материал. Заранее спасибо.


 
Abu   (2002-12-28 16:42) [15]

to StAL

1. Значащие цифры в приближённых вычислениях, все цифры числа, начиная с первой слева, отличной от нуля, до последней, за правильность которой можно ручаться. Например, в записи результата взвешивания 0,03020 кг значащими цифрами будут 3, 0, 2 и 0.
2. Незначащие нули -- нули записанные слева в числе

3. Если a - точное значение некоторой величины, а* - известное приближение к нему, то абсолютной погрешностью приближения a* называют обычно некоторую величину d(a) , про которую известно, что она удовлетворяет неравенству:
| a* - a| =< d(a)

Относительной погрешностью называют некоторую величину o(a) , про которую известно, что она удовлетворяет неравенству:
| (a* - a)/a* |=< o(a)

Относительную погрешность часто выражают в процентах. Она дает более точное представление о величине ошибки, содержащейся в некоторой величине.

4. Любое число N в системе счисления с основанием q можно записать в виде N = M * q в степени p, где M — множитель, содержащий все цифры числа (мантисса), а p — целое число, называемое порядком. Например, в десятичной с-ме счисления :
0,0123 представляется как 0,123 * 10 в степени -1,
где 0,123 - мантисса
-1 - порядок
Такой способ записи чисел называется представлением числа с плавающей точкой.

5. Число называется нормализованным, если мантисса(М) является правильной дробью, у которой первая цифра после точки (запятой в обычной записи) отлична от нуля и выполняется условие:
0.1 <= |M| < 1.
Если это требование выполнено, то число называется нормализованным.

6. Если результат арифметической операции имеет тип с плавающей точкой, то он может оказаться меньше того, которое может быть записано в разрядной сетке. Этот случай называется исчезновением порядка.

7. Числа по абсолютной величине меньше Аmin (единицы младшего разряда n-разрядной машинной сетки) называется машинным нулем;

8. Ошибка округления - разность между реальным числом и его приближением.
Например, в 10-чной системе счисления:
реальное число - 0.1234567123456
приближенное - 0.123
ошибка округления - 0.0004567123456

в 2-чной:
реальное число - 0,000110011001100110011001100... (0.1 - в 10-чной)
приближенное - 0,000110011
ошибка округления - 0,000000000001100110011001100...

В большинстве прикладных программ двоичные числа предпочтительны, однако в некоторых ситуациях ошибка округления в преобразованиях между системами счисления с основаниями 2 и 10 нежелательна. Наиболее характерным случаем здесь являются финансовые или учетные задачи, где предполагается сложение центов. Рассмотрим программу, складывающую по 1-му до 100 центов и вычитающую доллар:


i : Integer;
x : Single;

x:=0.0;
for i:= 0 to 100 do
x = x + 0.01;
x = x - 1.0;
Label1.Caption:=FloatToStr(x);

Правильным ответом является 0.0, однако ответ, полученный данной программой, будет малой величиной, близкой к 0.0. При вычислении ошибка округления, возникающая во время преобразования 0.01 в двоичное число, накапливается. Изменение типа x на double или extended только уменьшает ошибку вычисления, но не устраняет ее вообще. Поэтому в этих случаях используется тип Currency.



 
StAL   (2003-01-03 14:44) [16]

To Abu
Спасибо!!!!!!!!!!!
Распечатал и повесил на стенке.
С нетерпением жду статьи Юрия Зотова и след. этапа!
СПАСИБО Юрию Зотову и Abu!
С ув. Алексей


 
Shadow   (2003-01-03 15:18) [17]

up


 
Top Gun   (2003-01-12 15:53) [18]

Эх...

Наверное, у Юрия Зотова что-то в жизни происходит...

Жедаю побыстрее избавиться от проблем, чтобы продолжить обучающий курс !

P.S. Все мы эгоисты...


 
Юрий Зотов   (2003-01-12 16:06) [19]

Увы, да, происходит, очень неприятное и очень серьезное. От исхода во многом будет зависеть вся будущая жизнь и судьба. Без преувеличения. Поэтому приходится очень много времени тратить на решение этого вопроса, а он совсем непростой.

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


 
Top Gun   (2003-01-16 18:11) [20]

чтобы тема не удалилась...


 
Top Gun   (2003-01-18 18:19) [21]

блин, а через сколько дней тема удаляется, если в нее нет новых постов ?


 
Abu   (2003-01-22 11:08) [22]

Up


 
Top Gun   (2003-01-29 17:57) [23]

Up
&
down


 
Top Gun   (2003-02-02 20:34) [24]

Я верю в чууудесааа


 
Иванов Сергей   (2003-02-02 21:08) [25]

http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035226023&n=3
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035836141&n=3

не работает. а хочется посмотреть.


 
Иванов Сергей   (2003-02-02 21:23) [26]

кстати,

1. Значащие цифры в приближённых вычислениях, все цифры числа, начиная с первой слева, отличной от нуля, до последней, за правильность которой можно ручаться. Например, в записи результата взвешивания 0,03020 кг значащими цифрами будут 3, 0, 2 и 0.
2. Незначащие нули -- нули записанные слева в числе

а может справа?//


 
Top Gun   (2003-02-09 14:08) [27]

Мы верим
Мы надеемся


 
Top Gun   (2003-02-15 13:24) [28]

ау


 
Труп Васи Доброго   (2003-02-15 14:12) [29]


> Мы верим
> Мы надеемся

Мы ждём и не дождёмся!!!


 
Abu   (2003-02-24 18:10) [30]

Ой


 
Marser   (2003-02-25 09:40) [31]

>Юрий Зотов ©
От всего сердца желаю вам выйти из трудной ситуации с минимальными потерями!


 
al_   (2003-02-26 18:52) [32]

Скажите пожалуйста продолжение будет или нет? Почему стоим?


 
jack128   (2003-02-26 21:40) [33]

2 Иванов Сергей (02.02.03 21:08)
видимо надо рыть в архивах..
2 al_ © (26.02.03 18:52)
Стоим потому что Юрий Зотов не может продолжить (надеюсь "пока не может")
2 Юрий Зотов © Присоединяюсь к пожеланию Marser"a. А ещё лудше, чтоб вы вышли из этой ситуации с прибылью


 
Top Gun   (2003-02-28 18:00) [34]

up


 
app   (2003-02-28 19:13) [35]

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


 
Top Gun   (2003-03-01 20:06) [36]

Хм. Да ? А я как заметил, если ветку не поднимать - то она удаляется =(


А никто случаем не знает, что с Юрием ? Его теперь вообще что-то не видно...


 
Andryk   (2003-03-01 23:00) [37]

2Top Gun Да у нас на работе все телефоны полетели, вот уже две недели :о(, вот поэтому Юрий и пропал.


 
Anatoly Podgoretsky   (2003-03-01 23:15) [38]

Top Gun (01.03.03 20:06)
Это не страшно, если будет продолжение, то будет новая ветка, так что не надо поднимать, сохрани если нужно в архиве вместе со ссылкой.


 
Top Gun   (2003-03-04 18:23) [39]

Andryk, вы с ним в однои месте работает ? У него все ок ?


 
Юрий Зотов   (2003-03-04 23:26) [40]

Сбылось! Здесь этап 4:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1046809017&n=3



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

Форум: "Потрепаться";
Текущий архив: 2003.04.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.009 c
1-6574
Alex-21
2003-03-20 21:29
2003.04.03
TPopupMenu


1-6603
OxOTHuK
2003-03-21 22:11
2003.04.03
снова DLL


1-6550
Ihtiandr
2003-03-21 11:39
2003.04.03
paramstr(0)


14-6787
Malder
2003-03-16 23:05
2003.04.03
Просмотр DLL


14-6705
Softik
2003-03-15 16:35
2003.04.03
Подскажите аналог QReport, который быстрее и по функциональнее!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский