Академический Документы
Профессиональный Документы
Культура Документы
1
Жемчужина программирования
1.2. Исследование пространства разработки
Временные
файлы
1 Сортировка 1
слиянием Выходной
Входной файл файл
Третий вариант
Оптимальной была бы программа, работающая по схеме, соединяющей преимущества
предыдущих: входной файл считывается один раз и временные файлы не используются.
1 Многопроходная 1
сортировка Выходной
Входной файл файл
Такую схему можно реализовать, когда все данные при сортировке будут размещены в
1Мб оперативной памяти. Т.о. задача сводится к отображению 10 7 целых семизначных
чисел приблизительно в восемь миллионов доступных бит (1Мб=1024*1024*8
бит=8 388 608 бит а для надо 10 000 000 битов, т.е. недостает еще около 2 000 000 битов).
1.3. Выводы.
Внимательное изучение задачи позволило программистам найти правильный подход к
решению.
Битовые структуры позволили экономно использовать память. Битовые структуры
используются для представления плотного набора элементов конечного множества, в
который элемент может входить не более одного раза, и, где с элементами не связано
более ни каких дополнительных данных.
Использование битового массива привело к сокращению времени выполнения
программы. Это произошло за счет того меньшее количество данных требует меньшего
времени для обработки, а во вторых, хранение данных в оперативной памяти, а не на
диске сокращает затраты на обращение к ним.
Программа получилась достаточно простой. Простота влечет надежность и
эффективность программы, их проще создавать и сопровождать.
При разработке алгоритма использовался подход, основанный на следующих
принципах:
1. Понимание предложенной задачи
2. Постановка абстрактной задачи
3. Неформальное описание программы
«Некоторые программисты размышляют несколько минут, а потом программируют
целый день, вместо того, чтобы подумать час, а потом час программировать»2
Неформальное описание программы – это исследование пространства разработки
(самой задачи). Неформальные языки высокого уровня помогают описывать проекты
программ: псевдокод определяет последовательность выполнения программы, а
абстрактные типы данных представляют основные структуры. Решение одной задачи
может иметь несколько вариантов, которые неформально описаны.
4. Реализация одного решения
Неформальное описание программы может показать, что одно из решений гораздо
предпочтительнее прочих. Реализовать код надо по возможности просто и прямолинейно,
используя самые мощные и доступные средства.
2
Жемчужина программирования
«Задача инженерии программного обеспечения в том, чтобы регулировать
сложность, а не увеличивать ее»3
x=x&(~ (maska<<4));
cout<<(int)x; //результат 239
cin.get();
return 0;
}
4. Задания
1. Напишите выражение, которое решает задачу
- Установить 7 бит в 1.
- Установить 5 и 3 биты в 0.
- Инвертировать 5 бит переменной х.
3 Памелу Зейв
- Вывести все биты значения переменной Х. Размер переменной
неизвестен.
2. Какую задачу реализует код функции?
void coutp(unsigned int x)
{
int n=sizeof(int)*8;
unsigned maska=(1<<n-1);
5. Реализация алгоритма