Программирование и основы алгоритмизации

Контрольная работа - Компьютеры, программирование

Другие контрольные работы по предмету Компьютеры, программирование

Министерство образования Российской Федерации

ЮЖНО-УРАЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Кафедра Автоматики и управления

 

 

 

 

 

 

Пояснительная записка к курсовому проекту

По дисциплине:

Программирование и основы алгоритмизации

Вариант № 1

 

 

 

 

 

Проверил:

доцент кафедры

Вставская Е.В.

“____”_____________2007г

Выполнил:

студент группы ПС-164

Лысенко Д.Г.

“____”_____________2007г

 

Челябинск

2007 г.

Содержание:

 

1.Постановка задачи3

2.Метод решения3

3.Текст программы4

4.Схема алгоритма12

5.Вывод результата работы14

6.Проверка правильности программы14

 

Постановка задачи

Даны целые числа a, b и n. Вычислить.

 

  1. Метод решения

 

Подключаем файл 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