.Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Кафедра «Інформаційні системи та мережі»
К У Р С О В А Р О Б О Т А
З дисципліни «Проблемно-орієнтовані мови програмування»
На тему:
Львів – 2007
З А В Д А Н Н Я
на курсову роботу з дисципліни
«Проблемно-орієнтовані мови програмування»
студенту групи КН-119
Т е м а: «»
Завдання: комп’ютерна програма «Калькулятор»
ЗМІСТ ЗАВДАННЯ ТА КАЛЕНДАРНИЙ ПЛАН ЙОГО ВИКОНАННЯ
1.
Провести аналітичний огляд літератури по заданій темі
2.
Розробити алгоритм та графічну схему програми розв’язування задачі
3.
Написати програму на мовах С/С++
Вимоги до програми:
Програма повинна бути реалізована на мовах С/С++
Програма повинна працювати у вікні MSDOS під куруванням операційної системи Windows
Для зображення калькулятора використати засоби графічного режиму роботи відеоадаптера
Програма повинна мати інтерфейс у вигляді вікон та меню для виборів режиму її роботи
Керування режимами роботи програми виконати за допомогою клавіатури та миші
4.
Підготувати вхідні дані для контрольного прикладу
5.
Реалізувати та відлагодити програми на вказаних мовах програмування
6.
Оформити записку до курсової роботи згідно вимог Міжнародних стандартів, дотримуючись такого змісту:
Вступ
Формулювання задачі
Алгоритми розв’язування задачі
Методи та засоби розв’язування задачі
Опис програми на мові С/С++
Технологія програмування, виконання та від лагодження програми
Інструкція користувачу
Контрольний приклад та аналіз результатів комп’ютерної реалізації програми
Висновки
Література
додатки
ЗАВДАННЯ ПРИЙНЯТО ДО ВИКОНАННЯ 13.02.2006
Керівник роботи Кравець П.О.
ЗМІСТ
Вступ…………………………………………………………………
Формулювання задачі………………………………………………
Методи та засоби розв’язування задачі…………………………...
Алгоритми розв’язування задачі…………………………………..
Програма та її опис…………………………………………………
Технологія програмування, виконання та від лагодження
програми……………………………………………………………………
Інструкція користувачеві…………………………………..……….
Контрольний приклад та аналіз результатів комп’ютерної
реалізації програми………………………...................................................
Висновки………………………………………………..……………
ВСТУП
Cі — універсальна, процедурна, імперативна мова програмування, розроблена у 1972 році Денісом Рітчі у Bell Telephone Laboratories для використання з операційною системою UNIX. З тих пір її версії з'явилися для багатьох інших операційних систем, і наразі Сі є однією з найбільш поширених мов програмування. Cі також здійснив великий вплив на інші мови програмування, особливо на C++, котра спочатку проектувалася, як розширення для Сі. Найчастіше використовується для написання системного програмного забезпечення, хоча, досить часто на ній пишуть і прикладне програмне забезпечення.
С — мінімалістична мова програмування. Серед її головних цілей: можливість прямолінійної реалізації компіляції, використовуючи відносно простий компілятор, забезпечити низькорівневий доступ до оперативної пам'яті, формувати лише декілька інструкцій машинної мови для кожного елементу мови, і не вимагати обширної динамічної підтримки. У резальтаті, код С придатний для більшості системного програмного забезпечення, котре традиційно писалося на аcемблері.
Незважаючи на її низькорівневі можливості, мова проектувалася для машинно-незалежного програмування. Сумісна зі стандартами та машинно-незалежно написана програма на С може легко компілюватися на великій кількості апаратних платформ та операційних систем з мінімальними змінами. Мова стала доступною для великої кількості платформ, від вбудованих мікроконтроллерів до суперкомп'ютерів.
ФОРМУЛЮВАННЯ ЗАДАЧІ
Калькулятор повинен бути написаний на мові програмування С/С++. Він повинен рахувати основні математичні функції, такі як: «+», «-», «*», «/». Калькулятор повинен мати графічний інтерфейс. По можливості буде розроблено емуляцію натискання клавіш. Управління здійснюватиметься за допомогою клавіатури та миші.
Інтерфейс повинен складатися з:
меню
кнопки від 1 до 9
кнопки позначення дій («+», «-», «*», «/», «=», «С»)
екран
Отже для роботи з калькулятором потрібно буде ввести послідовно ЧИСЛО, ДІЮ над цим числом, і друге ЧИСЛО. Це будуть вхідні дані. В якості вихідних даних буде ЧИСЛО отримане в результаті дії двох вхідних чисел.
Вихідні дані повинні бути відформатовані до заданої кількості знаків.
Вивід помилки при діленні на «0».
МЕТОДИ ТА ЗАСОБИ РОЗВЯЗУВАННЯ ЗАДАЧІ
Программирование в графическом режиме
В данном разделе приводится краткое изложение функций, используемых в графическом режиме.
Borland C++ имеет отдельную библиотеку с более чем 70 графическими функциями, начиная от функций высокого уровня (таких как setviewport, bar3d и drawpoly) и кончая бит-ориентированными функциями (типа getimage и putimage). Графическая библиотека поддерживает многочисленные типы линий и заполнителей, а также предоставляют вам различные текстовые шрифты, которые вы можете изменять по размерам, способу выравнивания, а также ориентировать их либо по горизонтали, либо по вертикали.
Эти функции находятся в библиотечном файле GRAPHICS.LIB, а их прототипы - в файле заголовка graphics.h. Кроме этих двух файлов, в состав графического пакета входят драйверы графических устройств (файлы *.BGI) и символьные шрифты (файлы *.CHR). Эти дополнительные файлы рассматриваются в следующих разделах.
Если вы используете компилятор BCC.EXE, нужно в командной строке указать библиотеку GRAPHICS.LIB. Например, если ваша программа, MYPROG.C, использует графику, то командная строка компилятора BCC должна иметь вид:
BCC MYPROG GRAPHICS.LIB
При построении программы компоновщик автоматически компонует графическую библиотеку С++.
Поскольку графические функции используют указатели far, графика в случае модели памяти tiny не поддерживается.
Графическая библиотека только одна и не имеет версий по моделям памяти (по сравнению со стандартными библиотеками CS.LIB, CC.LIB, CM.LIB и т.д., которые зависят от используемой модели памяти). Каждая функция в файле GRAPHICS.LIB является far (дальней) функцией, а графические функции, использующие указатели работают с дальними указателями. Для правильной работы графических функций в каждом использующем графические функции модуле требуется директива #include graphics.h.
Функции библиотеки graphics
Графические функции Borland C++ делятся на несколько категорий:
функции управления графической системой;
функции черчения и заполнения;
функции манипулирования экранами и графическими окнами;
функции вывода текстов;
функции управления цветами;
функции обработки ошибок;
функции запроса состояния.
Управление графической системой
Ниже приводится краткое перечисление всех функций управления графической системой:
closegraph - Закрывает графическую систему.
detectgraph - Проверяет аппаратное обеспечение и определяет, какие графические драйверы использовать; рекомендует предпочтительный режим.
graphdefaults - Сбрасывает все переменные графической системы в значения по умолчанию.
_graphfreemem - Отменяет выделенную графике память. Используется для определения собственной подпрограммы.
_graphgetmem - Распределяет память графике; используется для определения собственной подпрограммы.
getgraphmode - Возвращает текущий графический режим.
getmoderange - Возвращает минимальный и максимальный допустимые режимы для заданного драйвера.
initgraph - Инициализирует графическую систему и переводит аппаратное обеспечение в графический режим.
Installuserdriver - Устанавливает дополнительный драйвер устройства в таблице драйверов устройства BGI.
installuserfont - Загружает поставляемый файл векторного (штрихового) шрифта в таблицу символьных файлов BGI.
Registerbgldriver - Регистрирует внешний или загруженный пользователем файл драйвера для включения во время компоновки.
restorecrtmode - Восстанавливает первоначальный (существовавший до Initgraph) режим экрана.
setgraphbufsize - Задает размер внутреннего графического буфера.
setgraphmode - Выбирает заданный графический режим, очищает экран и восстанавливает все умолчания.
Графический пакет компилятора Borland C++ обеспечивает графические драйверы для следующих графических адаптеров (и полностью совместимых с ними):
Цветной/графический адаптер (CGA);
Многоцветная графическая матрица (MCGA);
Улучшенный графический адаптер (EGA);
Видеографическая матрица (VGA);
Графический адаптер Hercules;
Графический адаптер серии AT&T 400;
Графический адаптер 3270 PC;
Графический адаптер IBM 8514.
Для запуска графической системы вы должны прежде всего вызвать функцию initgraph. Функция initgraph загружает графический драйвер и переводит систему в графический режим.
Вы можете указать для функции initgraph использование конкретного графического драйвера и конкретный режим, либо задать автообнаружение установленного видеоадаптера и выбор соответственного драйвера уже во время выполнения. Если вы задали в функции initgraph автообнаружение, то она сама вызовет функцию detectgraph для выбора графического драйвера и режима. Если вы задали в initgraph использование конкретного графического драйвера и режима, то вы сами отвечаете за физическое присутствие соответствующего аппаратного обеспечения. Если заставить initgraph пытаться использовать отсутствующее аппаратное обеспечение, то результат в таком случае непредсказуем.
После того, как графический драйвер загружен, вы можете определить его имя при помощи функции getdrivename, а число поддерживаемых драйвером режимов - при помощи функции getmaxmode. Функция getgraphmode сообщит вам, в каком графическом режиме вы находитесь в текущий момент. Имея номер режима, вы можете определить его имя при помощи функции getmodename. Вы также имеете возможность изменить графический режим при помощи функции setgraphmode и вернуть исходный видеорежим (тот, который был установлен до инициализации графики) с помощью restorecrtmode. Функция restorecrtmode вернет экран в текстовый режим, но не закроет при этом графическую систему (загруженные шрифты и драйверы останутся в памяти).
Функция graphdefaults сбрасывает установки состояния графической системы (размеры графического окна, цвет линий, цвет и шаблон заполнителя и т.д.) в исходное состояние. Функции installuserdriver и installuserfont позволяют установить в графической системе новые драйверы устройства и шрифты.
И наконец, закончив работу в графике, вы должны вызвать функцию closegraph для того, чтобы закрыть графическую систему. Функция closegraph выгружает драйвер из памяти и восстанавливает первоначальный видеорежим (через обращение к restorecrtmode).
Обычно подпрограмма initgraph загружает графический драйвер, распределяя для этого драйвера память и затем загружая туда с диска соответствующий файл .BGI. В качестве альтернативы данной схеме динамической загрузки вы можете скомпоновать нужный файл графического драйвера (или несколько таких файлов) непосредственно с файлом выполняемой программы. Для этого файл .BGI сначала преобразуется в файл .OBJ (при помощи утилиты BGIOBJ - см. документацию в файле UTIL.DOC, который поставляется на одном из дистрибутивных дисков), после чего в исходный код помещается вызов функции registerbgidriver (до вызова initgraph), чтобы зарегистрировать графический драйвер(ы) в системе. При построении программы вы должны выполнить компоновку файлов .OBJ всех зарегистрированных драйверов.
После определения того, какой графический драйвер должен использоваться (посредством detectgraph) функция initgraph проверяет, был ли желаемый драйвер зарегистрирован. Если был, то initgraph обращается к зарегистрированному драйверу непосредственно в памяти. В противном случае функция initgraph распределяет память для драйвера и загружает нужный файл .BGI с диска.
Использование функции registerbgidriver относится к более сложным методам программирования, не рекомендуемым для начинающих программистов.
Во время выполнения графической системе может понадобиться распределить память для драйверов, шрифтов и внутренних буферов. При необходимости она вызывает функцию _graphgetmem для распределения памяти и функцию _graphfreemem для ее освобождения. По умолчанию данные подпрограммы просто вызывают функции malloc и free, соответственно.
Действие этих функций по умолчанию можно переопределить, определив собственные функции _graphgetmem и _graphfreemem. Благодаря этому вы можете сами управлять распределением памяти для графики. Однако, ваши варианты функций управления распределением памяти должны иметь те же имена: они заменят собой используемые по умолчанию функции с теми же именами из стандартных библиотек языка Си.
Определив собственные функции _graphgetmem и _graphfreemem, вы можете получить предупреждение "duplicate symbols" ("повторение символических имен"). Это предупреждение можно игнорировать.
Черчение и заполнение
Ниже приводится краткий обзор функций черчения и закраски:
Функция черчения Описание
arc Чертит дугу окружности.
circle Чертит окружность.
drawpoly Чертит контур многоугольника.
ellipse Чертит эллиптическую дугу.
getarccoords Возвращает координаты последнего вызова arc или ellipse.
getaspectratio Возвращает коэффициент сжатия для текущего графического режима.
getlinesettings Возвращает текущий тип линии, шаблон линии и толщину линии.
line Чертит линию из точки (x0,y0) в (x1,y1).
linerel Чертит линию в точку, задаваемую относительным расстоянием от текущей позиции (CP).
lineto Чертит линию из текущей позиции (CP) в (x,y).
moveto Перемещает текущую позицию (CP) в (x,y).
moverel Перемещает текущую позицию (CP) на относительное расстояние.
rectangle Рисует прямоугольник.
setaspectratio Изменяет коэффициент сжатия по умолчанию.
setlinestyle Устанавливает толщину и тип текущей линии.
Функция закраски Описание
bar Чертит и закрашивает столбец.
bar3d Чертит и закрашивает трехмерный столбец.
fillellipse Чертит и закрашивает эллипс.
fillpoly Чертит и закрашивает многоугольник.
getfillpattern Возвращает определяемый пользователем шаблон закраски.
getfillsettings Возвращает информацию о текущем шаблоне и цвете закраски.
pieslice Чертит и закрашивает сектор окружности.
sector Чертит и закрашивает эллиптический сектор.
setfillpattern Выбирает шаблон закраски, определяемый пользователем.
setfillstyle Устанавливает шаблон и цвет закраски.
При помощи функций черчения и раскрашивания Borland C++ вы можете вычерчивать цветные линии, дуги, окружности, эллипсы, прямоугольники, секторы, дву- и трехмерные столбики, многоугольники, а также различные правильные или неправильные формы, являющиеся комбинациями перечисленных графических примитивов. Ограниченную форму изнутри или снаружи можно заполнить одним из 11 предопределенных шаблонов (образцов заполнителей), либо шаблоном, определенным пользователем. Можно также управлять толщиной и стилем линии вычерчивания, а также местоположением текущей позиции (CP).
Линии и незакрашенные формы вычерчиваются при помощи функций arc, circle, drawpoly, ellipse, line, linerel, lineto и rectangle. Затем можно закрасить эти формы с помощью floodfil, либо можно объединить вычерчивание/закраску в одном шаге при помощи функций bar, bar3d, fillellipse, fillpoly, pieslice и sector. Функция setlinestyle позволяет задать тип линий (и граничных линий форм): толстая или тонкая, сплошная, пунктир и т.д., либо для вычерчивания линии можно задать ваш собственный шаблон. При помощи функции setfillstyle можно выбрать предопределенный шаблон заполнения, либо определить собственный шаблон заполнения в setfillpattern. Функция moveto позволяет переместить CP в желаемую позицию, а функция moverel позволяет сдвинуть ее на желаемую величину смещения.
Выяснить текущий тип и толщину линии позволяет функция getlinesettings. Информацию о текущем шаблоне заполнения и цвете заполнителя можно получить через функцию getfillsettings. Определяемый пользователем шаблон заполнения можно получить при помощи функции getfillpattern.
Получить сведения о коэффициенте относительного удлинения (коэффициенте масштабирования, применяемом графической системой для того, чтобы окружности выглядели круглыми) позволяет функция getaspectratio, а получить координаты последней нарисованной дуги или эллипса - функция getarccoords. Если окружности не получаются идеально круглыми, можно исправить дело при помощи функции setaspectratio.АЛГОРИТМИ РОЗВЯЗУВАННЯ ЗАДАЧІ