Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГОСы - ответы [2012].doc
Скачиваний:
48
Добавлен:
22.05.2015
Размер:
4.09 Mб
Скачать

Алгоритм упорядоченного возбуждения

Xmin, Xmax, Ymin, Ymax — пределы растра Mod — функция, возвращающая остаток от целого деления первого аргумента на второй   for y = Ymax to Ymin step -1     для каждого пиксела на строке (слева направо)     for x = Xmin to Xmax         определяем позицию в матрице возбуждения         i = (x Mod n) + 1         j = (y Mod n) + 1         определяем выводимое значение пиксела         if I(x, y) < D(i, j) then             Пиксел(x, y) = Черный         else             Пиксел(x, y) = Белый         end if         изображаем пиксел     Display Пиксел(x, y)     next x   next y finish

Для создания несуществующего оттенка серого цвета на мониторе используется этот метод.

5 градаций серого.

N*N + 1, где N- размерность матрицы возбуждения.

Для цвета укрупненные пэлы как бы разбавляются двумя основными цветами в третий.

0 1 2 3 - 4 градации зеленого.

1- красный

2- зеленый.

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

Матрица возбуждения может быть 3 на 3.

- последовательность зажигания точки.

Кроме матрицы 3 на 3 , используют матрицы 4 на 4.

Метод упорядоченного возбуждения.

Пусть требуется вывести растровое изображение n*m на черно-белое устройство. Для каждой точки изображения будем сравнивать соотв. Значения из матрицы возбуждения и яркость.

Если I(x,y)>D[x mod n, y mod m], то выводим по координате (x,y) 1, иначе выводим 0.

3. Представить алгоритм определения тактовой частоты цп

Алгоритм:

  1. #include <stdio.h>

  2. #include <dos.h>

  3. const unsigned long cnt=2000000000;

  4. int main(void)

  5. {

  6. struct time t1,t2,tp1,tp2;

  7. unsigned long i;

  8. int dt1,dt2;

  9. float f;

  10. printf("Начинаем цикл c mov...\n");

  11. gettime(&t1);

  12. for (i=1;i<=cnt;i++)

  13. asm {

  14. mov ax,bx;

  15. };

  16. gettime(&t2);

  17. dt1=(t2.ti_hund+((int)t2.ti_sec)*100)-(t1.ti_hund+((int)t1.ti_sec)*100);

  18. printf("Начинаем пустой цикл...\n");

  19. gettime(&t1);

  20. for (i=1;i<=cnt;i++)

  21. asm {

  22. };

  23. gettime(&t2);

  24. dt2=t2.ti_hund+((int)t2.ti_sec)*100-(t1.ti_hund+((int)t1.ti_sec)*100);

  25. printf("dt1 = %d\n",dt1);

  26. printf("dt2 = %d\n",dt2);

  27. // Команда mov выполняется за 1 такт процессора

  28. double F = 1/( (dt1-dt2)*100 );

  29. printf("Частота процессора: %lf МГц\n",F/1000000);

  30. return 0;

  31. }

Билет 13

1. Структурное программирование при разработке программы.

2. Понятие критерия оптимального проектирования и его связь с варьируемыми переменными через уравнения математической модели. Постановка задачи оптимального проектирования.

3. Представить алгоритм определения быстродействия нгмд в режиме записи данных.

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

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

Не следует создавать большие текстовые файлы. Подпрограммы лучше компоновать в отдельные модули, размещая их в отдельные файлы.

При написании программы целесообразно использовать систему отступов. Это позволяет проще разобраться со структурой программы, понять ее содержание, быстрее найти некоторые ошибки (например, отсутствие END при соответствующим BEGIN).

Не следует в одной строке объединять несколько операторов, за исключением простейших. И т.д.

  1. Структурное программирование при разработке программ.

На протяжении 70х годов произошел переход с ламповой элементарной базы построения ЭВМ на полупроводниковую, а затем, на базу интегральных схем. Это было связано с повышением ее компактности, удешевлением, серьезным повышением эффективности. В результате этого перехода потребовались сложные программные комплексы для решения новых проблем и задач. Появилась проблема, которая выражалась в том, что используемые ранее методы конструкторского программирования оказались неэффективными. С появлением необходимости разработки программируемых систем резко встает вопрос о повышении производительности труда программиста, об облегчении этапов отладки и тестирования программ, о понимании большими коллективами программистов не только своих участков работы, но и всей решаемой проблемы, а также облегчении решения этапа объединения отдельных частей в большой комплекс.

Одним из пионеров новой методики стал Дейкстра, в 1968 году заявил о необходимости исключить из состава языков программирования высокого уровня оператора goto. Позднее была сформулирована четкая система правил, названная структурным программированием.

Эта система представляет собой ряд ограничений и правил, которые обеспечивают соответствие любой программы строгому образцу, исключая запутанность, порождающую ошибки и затрудняющую тестирование. Одним из главных вопросов. Побудивших Дейкстру к новой методике стала необходимость облегчения тестирования программных комплексов в наиболее полном объеме. Необходимость в этой процедуре вызвана следующим:

  1. трудоемкость и стоимость тестирования больших программных комплексов возрастает экспоненциально с увеличением их размеров. При этом есть мнение, что стоимость проверки любого изменения в сложном комплексе более чем в сто раз превышает стоимость внесения этого изменения.

  2. В сложных системах, требующих постоянного сопровождения и развития, ошибки присутствуют всегда

  3. Издержки от испытания сложных комплексов постоянно возрастают, по мере того, как люди возлагают на ЭВМ все более ответственные функции.

Одним из выходов может стать разработка сложных и дорогостоящих методов тестирования программ (их эффективность является спорной). Дейкстра заложил в своей методике автоматическое доказательство правильности создаваемой программы, то есть требование правильности программы выполняется на любом этапе ее конструирования. Структурное программирование обладает тем дополнительным преимуществом, что повышает читаемость программы.

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

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

В области практического применения структурного программирования основные исследования были направлена на решение проблемы разработки программы таким способом, чтобы ее правильность подавалась доказательству. Все усилия прилагались для анализа программы, организованной по нисходящей схеме, где вся программа рассматривалась как независимый вызываемый модуль. На следующем этапе исходная программа разбивается на комбинацию модулей 1го уровня. Общий процесс декомпозиции продолжается до тех пор, пока проектировщик не получит легкокодируемые модули. Необходимость легкого тестирования любой структуры к+1го независимо от смысла, вкладываемого в не на катом уровне декомпозиции, привела к требованию, чтобы любой модуль программы изначально проектируемой с одним входом и выходом, что приводит к представлению о программе, как о множестве вложенных друг в друга модулей. В классических работах по структурному программированию доказано, что такая реализация программы может быть воплощена с использованием всего двух управляющих конструкций, конкретная реализация которых может быть различной в разных языках программирования. Этот базовый принцип часто называют структурной теоремой. Согласно ей для построения программы необходимы всего три функциональных блока:

1) представляет собой отдельный оператор или логически связанную последовательность операторов, имеющую один вход и выход.

2) конструкция обобщенного цикла

3) конструкция двоичного решения