Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Алгоритмы и теория программирования


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

solowey
Статус: 9-й класс
Рейтинг: 146
∙ повысить рейтинг »
CradleA
Статус: Профессионал
Рейтинг: 48
∙ повысить рейтинг »
Роман Селиверстов
Статус: Советник
Рейтинг: 0
∙ повысить рейтинг »

∙ Алгоритмы и теория программирования

Номер выпуска:213
Дата выхода:10.04.2018, 19:45
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:22 / 9
Вопросов / ответов:3 / 3

Консультация # 183989: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: 1. Содержимое одного байта можно интерпретировать либо как неотрицательное целое число в диапазоне 0...255, либо как число со знаком в диапазоне -128...127. Какое число со знаком имеет тот же двоичный код, что и неотрицательное число 254? 2. Содержимое одного байта можно интерпретироват...
Консультация # 124562: Здравствуйте, уважаемые эксперты! Помогите составить алгоритм или подскажите направление или идею реализации следующего: На листе бумаги формата А4, портретной ориентации нужно расположить печатные формы нескольких накладных так, чтобы пустое поле внизу листа было минимальным, а сами накладные не разрывались краем листа на две час...
Консультация # 72922: Здравствуйте! Посоветуйте пожалуйста ресурс или книгу в электронном виде по составлению алгоритмов програмирования. И вообще по теории программирования (без привязки к языкам). Спасибо!...

Консультация # 183989:

Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
1. Содержимое одного байта можно интерпретировать либо как неотрицательное целое число в диапазоне 0...255, либо как число со знаком в диапазоне -128...127. Какое число со знаком имеет тот же двоичный код, что и неотрицательное число 254?

2. Содержимое одного байта можно интерпретировать либо как число со знаком в диапазоне -128...127, либо как неотрицательное целое число в диапазоне 0...255. Какое неотрицательное число имеет тот же двоичный код, что и число со знаком -5?

3. Содержимое двухбайтового слова можно интерпретировать либо как неотрицательное целое число в диапазоне 0...65535, либо как число со знаком в диапазоне -32768...32767. Какое число со знаком имеет тот же двоичный код, что и неотрицательное число 65533?

4. Целочисленная переменная x представляет короткое целое число со знаком в диапазоне -128...127 и занимает 1 байт. Чему равно значение x после выполнения приведенного ниже фр агмента программы?
x := 30;
x := x * 5;

5. Целочисленная переменная x представляет короткое целое число со знаком в диапазоне -32768...32767 и занимает 2 байта. Чему равно значение x после выполнения приведенного ниже фрагмента программы?
x := 32760;
x := x + 10;

6. Что представляет собой двоичный код мантиссы вещественного числа 1.5 типа double?

7. Что представляет собой двоичный код мантиссы вещественного числа 0.75 типа double? Мантисса больше или равна 0 и меньше 1.

8. Что представляет собой двоичный код мантиссы вещественного числа 2.5 типа double?

9. Можно ли сохранить произвольное целое число длиной в четыре байта в вещественных переменных типа float и типа double без потери точности?

10. Всегда ли равны выражения
(x - y) + (y * 2.0), x + y
для произвольных вещественных переменных x, y типа double?

11. Всегда ли равны выражения
(x + y) + z, x + (y + z)
для произвольных вещественных переменных x, y, z типа double?

Дата отправки: 08.09.2011, 10:06
Вопрос задал: Заречнева Вера Михайловна
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Асмик Гаряка (Советник):

Здравствуйте, Заречнева Вера Михайловна!

1. Это -2 в дополнительном коде. Это можно понять так 254+2=256=0(переполнение).
-2+2=0
Код 11111110.
2. 256-5=251
3. 65533 имеет тот же код, что и 65533-65536=-3
4. Умножение вызовет переполнение. Значение x=150, то есть 128+22, это будет понято как отрицательное число 150-256=-106.
5. x=32760+10-65536=-32766
6. В нормализованном виде 1.5 =0.75*2.
0.75=0.5+0.25=0.11(двоичная)
Мантисса равна 11....0
Первый бит подразумевается и не пишется, хранится в памяти будет 1....0
7.11....0
8. В нормализованном виде 2.5 =0625*4.
0.625=0.5+0.125=1/2+1/8=0.101(двоичная)
Мантисса равна 101....0
9. В типе float на мантиссу отводится 23 бита, 32 байта в нем сохранить нельзя.
В типе double на мантиссу отводится 53 бита, 32 байта в нем можно сохранить.
10. Нет, не всегда. Пусть y близко к максимальному хранящемуся числу. Тогда умножение на 2 вызовет переполнение и результат будет не точен.
11. Аналогично. Сложение x + y вызовет переполнение.

Консультировал: Асмик Гаряка (Советник)
Дата отправки: 08.09.2011, 10:21

5
спасибо большое. Все стало понятно.
-----
Дата оценки: 08.09.2011, 10:46

Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 124562:

Здравствуйте, уважаемые эксперты!

Помогите составить алгоритм или подскажите направление или идею реализации следующего:

На листе бумаги формата А4, портретной ориентации нужно расположить печатные формы нескольких накладных так, чтобы пустое поле внизу листа было минимальным, а сами накладные не разрывались краем листа на две части (есть аналогичная настройка в текстовых редакторах - "Не разрывать абзац" и "Запрет висячих строк"). Минимальное количество строк накладной фиксировано и состоит из заголовка (номер накладной, дата, клиент, строка заголовка таблицы = 3 строки), подвала таблицы (строка Итого плюс разделитель накладной = 2 строки) и одна строка табличной части.

Что для меня не сложно и практически готово: получить общее количество накладных из журнала за указанный период (например, день), прочитать их в память, составить линейный массив из количества строк:
Элемент[i] = Заголовок+Подвал+СтрокНакладной
(т.е. 3+2+КоличествоСтрокНакладной).

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

Наглядный пример:

В листе вмещается 60 строк с учетом технологических отступов принтера сверху и снизу.
Минимальная длина накладной - 6 строк (Заголовок 3 строки + 1 строка таблицы + Подвал 1 строка + строка-разделитель накладных). Допускается, чтобы разделитель печатался на последней строке листа.
10 накладных за день с количество строк: 3, 7, 4, 5, 6, 6, 3, 1, 1, 1.
После обработки накладных, получился массив длин печатных форм этих накладных: 3+5=8, 7+5=12, 4+5=9, 5+5=10, 6+5=11, 6+5=11, 3+5=8, 1+5=6, 1+5=6, 1+5=6.
Теперь из элементов массива 8, 12, 9, 10, 11, 11, 8, 6, 6, 6 нужно составить суммы, не более 60 (строк в листе) и не менее 55 (60-длина зголовка и подвала накладной). Послежнюю страницу в не берём в счет.
Должно получиться:
1-й лист: 12+10+11+11+8+8 = 60 строк (лиист заполнен рационально)
2-й лист: 8+9+8+6+6+6 = 43 строки (примерно 75% использования).

Аналогичный алгоритм я видел в системе Базис-мебельщик для раскроя листов фанеры (ДСП) на детали для сборки, но там используется двумерный массив.

Спасибо за внимание.
С уважением, Владимир.

Дата отправки: 24.02.2008, 00:47
Вопрос задал: Владимир Лазурко [Vladal]
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Megaloman (Академик):

Здравствуйте, Владимир Лазурко [Vladal]!
Ваш пример я или недопонял (разъясните, пожалуйста в форуме), или не совсем корректен- Вы привели массив из 10 элементов 8, 12, 9, 10, 11, 11, 8, 6, 6, 6, а суммы составляете из 12 элементов, 12+10+11+11+8+8; 8+9+8+6+6+6. Да и задача, наверное, в таких жестких условиях (не более 60 (строк в листе) и не менее 55) в принципе не решаема для любых данных. В частности, может и повезти. Вообще, задача оптимизации - это вопрос к математикам, если сами этим аппаратом не владеем.
Могу предложить примитивный алгоритм (я тоже мат аппаратом минимаксных задач оптимизации не владею):

1. Пересортируем массив по убыванию. Для Ваших данных это
12 11 11 10 9 8 8 6 6 6
Я назову его исходным.

2. Сопоставим исходному массиву такой-же по длине логический массив, все элементы которого =true
Назову этот массив индикаторным.

3. Перепишем исходный массив в массив для печати (Назову его выходным) следующим образом:

Цикл (1) до тех пор пока все элементы индикаторного массива не станут false

В переменной, для определенности, L, контролируем длину сформированной для печати страницы (L<=60).
*Начальное значение L=0

Цикл (2)- вложенный в (1)- по всем элементам исходного массива.
Просматриваем исходный массив от первого (максимального) до последнего (минимального) элемента. В переменной, для определенности, L, контролируем длину сформированной для печати страницы (L<=60).

Если элемент индикаторного массива =false (т. е. эта накладная еще не записана для печати), то:

Если L+элемент исходного массива <= 60 переписываем элемент исходного на первое незаполненное место выходного массива. Делаем L=L+элемент исходного массива. Элемент индикаторного массива делаем равным true.

В результате этого процесса для Вашего примера получим выходной массив:
12 11 11 10 9 6 8 8 6 6
Т е на 1 листе 59 строк, на последнем - 28

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

Очевидный недостаток: на последних листах скорее всего собирутся все самые короткие накладные.

Консультировал: Megaloman (Академик)
Дата отправки: 24.02.2008, 13:04
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 72922:

Здравствуйте!
Посоветуйте пожалуйста ресурс или книгу в электронном виде по составлению алгоритмов програмирования. И вообще по теории программирования (без привязки к языкам).
Спасибо!

Дата отправки: 27.01.2007, 21:30
Вопрос задал: Valeraorg
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Neil:

Здравствуйте, Valeraorg!

Вероятно, Кнут smile "Искусство программирования", в трёх томах. Например, тут: http://lib.ru/CTOTOR/KNUT/
http://www.publishe.ru/modules.php?name=News&file=print&sid=447
http://elib.uriit.ru/library.php?op=./origin/Elib/Программирование/Фундамент

ну и так далее по Яндексу.

Консультировал: Neil
Дата отправки: 27.01.2007, 21:39
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное