Программирование и основы алгоритмизации
Контрольная работа - Компьютеры, программирование
Другие контрольные работы по предмету Компьютеры, программирование
Министерство образования Российской Федерации
ЮЖНО-УРАЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Кафедра Автоматики и управления
Пояснительная записка к курсовому проекту
По дисциплине:
Программирование и основы алгоритмизации
Вариант № 1
Проверил:
доцент кафедры
Вставская Е.В.
“____”_____________2007г
Выполнил:
студент группы ПС-164
Лысенко Д.Г.
“____”_____________2007г
Челябинск
2007 г.
Содержание:
1.Постановка задачи3
2.Метод решения3
3.Текст программы4
4.Схема алгоритма12
5.Вывод результата работы14
6.Проверка правильности программы14
Постановка задачи
Даны целые числа a, b и n. Вычислить.
- Метод решения
Подключаем файл windowA.inc, в котором будут содержаться базовые структуры и константы Win32. Затем в процедуре start первоначально вызываем функции Win32 API, после чего происходит регистрация окна (определения класса окна и регистрация его в системе). Затем создаем и отображаем, собственно, само окно. Потом запускается цикл обработки сообщения, которые будут посылаться ОС программе и обрабатываться в отдельной процедуре WindowProc и затем собственно выход из программы.
В процедуре обработке сообщений, если нажата клавиша Вычислить, то считывается значение из поля редактирования, преобразовывается в числовой формат, производятся нужные вычисления и выводится на экран
Текст программы
STYLBTNequ40000000h + 10000000h
;WSCHILD+WS_VISIBLE
STYLEDTequ40000000h + 10000000h + 800000h + 10000h
;Пример каркасного приложения для Win32
.486
locals
.model flat,STDCALL
include windowA.inc
includelib imp32i.lib
extrnGetModuleHandleA:PROC;дескриптор класса окна
extrnLoadIconA:PROC;дескриптор пиктограммы
extrnLoadCursorA:PROC;дескриптор курсора
extrnGetStockObject:PROC;дескриптор кисти
extrnRegisterClassExA:PROC;регистрация класса окна
extrnCreateWindowExA:PROC;создание экземпляра окна
extrnShowWindow:PROC;отображение окна
extrnUpdateWindow:PROC;перерисовка окна
extrnGetMessageA:PROC;получение сообщения
extrnTranslateMessage:PROC;обнаружение сообщения
extrnDispatchMessageA:PROC;передача сообщения
;оконной функции
extrnExitProcess:PROC;завершение процедуры
extrnBeginPaint:PROC;начало перерисовки
extrnEndPaint:PROC;конец перерисовки
extrnTextOutA:PROC;вывод текста
extrnPostQuitMessage:PROC
extrnDefWindowProcA:PROC;обработчик по умолчанию
extrnMessageBoxA:PROC
extrnSendMessageA:PROC
extrnGetDC:PROC
extrnReleaseDC:PROC
;оконной функции
publicWindowProc
.data
hwnddd0; дескриптор экземпляра окна
hInstdd0; дескриптор класса окна
hdcdd0
;
hedt1dd0;дескриптор поля редактирования
hbtndd0;дескриптор кнопки
hh1dd0
hh2dd0
hh3dd0
hh4dd0
hbtn1dd0
hbtn2dd0
CPBUTdb&Посчитать,0
CPBUT2dbВ&ыход,0
CLSBTNdbBUTTON,0
CPEDTdb,0
CLSEDTdbEDIT,0
TEXTdb
TEXTAdb
TEXTBdbрезультат:
TEXTLEN = $-TEXT
tendw10
temp dw 0
add?
bdd?
ndd?
wclWNDCLASSEX;структура для регистрации класса
; окна
messageMSG;структура для регистрации сообщений
szClassNamedbПриложение Win32,0
szTitleNamedbКурсач Лысенко Д. ПС-164,0
MesWindowdbВведите a,b и n,
MesWindowLen=$-MesWindow
psPAINTSTRUCT
.code
start procnear
;Получение дескриптора класса окна
push 0;
callGetModuleHandleA
movhInst,eax
WinMain:
;для начала инициализируем поля структуры WndClassEx
movwcl.cbSize,type WNDCLASSEX
movwcl.style, CS_HREDRAW+CS_VREDRAW ;полная перерисовка
movwcl.lpfnWndProc,offset WindowProc
movwcl.cbClsExtra,0
movwcl.cbWndExtra,0
moveax,hInst
movwcl.hInstance,eax
pushIDI_APPLICATION ;стандартное приложение 32512
push0
callLoadIconA
movwcl.hIcon,eax
pushIDC_ARROW;стандартный курсор стрелка 32512
push0
callLoadCursorA
movwcl.hCursor,eax
;определим цвет фона окна
pushLTGRAY_BRUSH;1
callGetStockObject
mov eax,5
movwcl.hbrBackground,eax
movdword ptr wcl.lpszMenuName,0;без главного меню
movdword ptr wcl.lpszClassName,offset szClassName
;имя класса окна
movwcl.hIconSm,0
;регистрируем класс окна
pushoffset wcl
callRegisterClassExA
;создаем окно:
push0;lpParam
pushhInst;hInstance
push0;menu
push0;parent hwnd
push200;высота окна
push300;ширина окна
push300;координата y л.в. угла окна
push300;координата x л.в. угла
pushWS_OVERLAPPEDWINDOW;стиль окна
pushoffset szTitleName;Строка заголовка окна
pushoffset szClassName;имя класса окна
push0;дополнительные стили
callCreateWindowExA
movhwnd,eax;hwnd - дескриптор окна
;показать окно:
pushSW_SHOWNORMAL;1
pushhwnd
callShowWindow
;перерисовываем содержимое окна
pushhwnd
callUpdateWindow
;запускаем цикл сообщений:
cycl_msg:
push0
push0
pushNULL
pushoffset message
callGetMessageA
cmpax,0
jeend_cycl_msg
;трансляция ввода с клавиатуры
pushoffset message
callTranslateMessage
;передача сообщения оконной функции
pushoffset message
callDispatchMessageA
jmpcycl_msg
end_cycl_msg:
;выход из приложения
pushNULL
callExitProcess
startendp
;Оконная функция WindowProc для обработки сообщений
WindowProcproc
arg @@hwnd:DWORD, @@mes:DWORD, @@wparam:DWORD, @@lparam:DWORD
uses ebx,edi, esi; регистры должны сохраняться
local@@hdc:DWORD
cmp@@mes,WM_DESTROY
jewmdestroy
cmp@@mes,WM_CREATE
jewmcreate
cmp@@mes,WM_PAINT
jewmpaint
cmp@@mes, WM_COMMAND
jewmcommand
jmpdefault
wmcreate:;создание окна
moveax,0
;;;;поле1
push0
pushhInst
push0
push@@hwnd
push20
push35
push50
push10
pushSTYLEDT
pushoffset CPEDT
pushoffset CLSEDT
push0
callCreateWindowExA
movhh1,eax
movea