Мегаобучалка Главная | О нас | Обратная связь


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



2020-02-03 203 Обсуждений (0)
Вывод результата работы 0.00 из 5.00 0 оценок




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

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

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

Вариант № 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 и затем собственно выход из программы.

В процедуре обработке сообщений, если нажата клавиша «Вычислить», то считывается значение из поля редактирования, преобразовывается в числовой формат, производятся нужные вычисления и выводится на экран


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

 

STYLBTN equ 40000000h + 10000000h

;WSCHILD+WS_VISIBLE

STYLEDT equ 40000000h + 10000000h + 800000h + 10000h

;Пример каркасного приложения для Win32

.486

locals

.model flat,STDCALL  

include windowA.inc   

includelib imp32i.lib

 

extrn GetModuleHandleA:PROC         ;дескриптор класса окна

extrn LoadIconA:PROC                       ;дескриптор пиктограммы

extrn LoadCursorA:PROC                  ;дескриптор курсора

extrn GetStockObject:PROC      ;дескриптор кисти

extrn RegisterClassExA:PROC            ;регистрация класса окна

extrn CreateWindowExA:PROC         ;создание экземпляра окна

extrn ShowWindow:PROC                  ;отображение окна

extrn UpdateWindow:PROC      ;перерисовка окна

 

extrn GetMessageA:PROC                  ;получение сообщения

extrn TranslateMessage:PROC            ;обнаружение сообщения

extrn DispatchMessageA:PROC          ;передача сообщения

                                                                      ;оконной функции

extrn ExitProcess:PROC                      ;завершение процедуры

 

extrn BeginPaint:PROC                       ;начало перерисовки

extrn EndPaint:PROC                ;конец перерисовки

extrn TextOutA:PROC               ;вывод текста

extrn PostQuitMessage:PROC

extrn DefWindowProcA:PROC           ;обработчик по умолчанию

 

extrn MessageBoxA:PROC

extrn SendMessageA:PROC

extrn GetDC:PROC

extrn ReleaseDC:PROC

                                                                      ;оконной функции

 

public    WindowProc

.data

hwnd dd 0  ; дескриптор экземпляра окна

hInst dd 0  ; дескриптор класса окна

hdc dd 0

;

hedt1 dd 0  ;дескриптор поля редактирования

hbtn dd 0  ;дескриптор кнопки

hh1 dd 0

hh2 dd 0

hh3 dd 0

hh4 dd 0

hbtn1 dd 0

hbtn2 dd 0

CPBUT db '&Посчитать',0

CPBUT2 db 'В&ыход',0

CLSBTN db 'BUTTON',0

CPEDT db '',0

CLSEDT db 'EDIT',0

 

TEXT             db '           '

TEXTA db '           '

TEXTB db 'результат:   '

 

TEXTLEN = $-TEXT

ten dw 10

temp dw 0

a   dd ?       

b  dd ?

n  dd ?

 

 

wcl WNDCLASSEX <?> ;структура для регистрации класса

                                               ; окна

message MSG <?> ;структура для регистрации сообщений

 

szClassName  db 'Приложение Win32',0

szTitleName    db 'Курсач Лысенко Д. ПС-164',0

MesWindow             db 'Введите a,b и n,'

 

MesWindowLen =  $-MesWindow

 

ps PAINTSTRUCT <?>

 

.code

start proc near

;Получение дескриптора класса окна

    push 0;

    call GetModuleHandleA     

    mov hInst,eax

 

WinMain:

;для начала инициализируем поля структуры WndClassEx

    mov wcl.cbSize,type WNDCLASSEX    

    mov wcl.style, CS_HREDRAW+CS_VREDRAW ;полная перерисовка

    mov wcl.lpfnWndProc,offset WindowProc

    mov wcl.cbClsExtra,0

    mov wcl.cbWndExtra,0

    mov eax,hInst

    mov wcl.hInstance,eax

 

    push      IDI_APPLICATION ;стандартное приложение 32512

    push      0                         

    call        LoadIconA

    mov wcl.hIcon,eax      

 

    push      IDC_ARROW ;стандартный курсор стрелка 32512

    push      0

    call        LoadCursorA

    mov wcl.hCursor,eax 

 

;определим цвет фона окна

    push      LTGRAY_BRUSH           ;1

    call        GetStockObject

    mov eax,5

    mov wcl.hbrBackground,eax

        

mov dword ptr wcl.lpszMenuName,0 ;без главного меню

    mov dword ptr wcl.lpszClassName,offset szClassName    

;имя класса окна

    mov wcl.hIconSm,0

 

;регистрируем класс окна

    push      offset wcl

    call        RegisterClassExA

        

;создаем окно:

    push      0  ;lpParam

    push      hInst ;hInstance

    push      0  ;menu

    push      0  ;parent hwnd

    push      200 ;высота окна

    push      300 ;ширина окна

    push      300 ;координата y л.в. угла окна

    push      300 ;координата x л.в. угла

    push      WS_OVERLAPPEDWINDOW  ;стиль окна

    push      offset szTitleName   ;Строка заголовка окна

    push      offset szClassName  ;имя класса окна

    push      0                               ;дополнительные стили

    call        CreateWindowExA

    mov       hwnd,eax                 ;hwnd - дескриптор окна

 

;показать окно:

    push      SW_SHOWNORMAL ;1

    push      hwnd

    call        ShowWindow

 

;перерисовываем содержимое окна

    push      hwnd

    call        UpdateWindow

 

;запускаем цикл сообщений:

 

cycl_msg:

    push      0

    push      0

    push     NULL

    push      offset message

    call        GetMessageA

    cmp       ax,0

    je           end_cycl_msg

 

;трансляция ввода с клавиатуры

 push     offset message

    call        TranslateMessage

;передача сообщения оконной функции

    push      offset message

    call        DispatchMessageA

    jmp cycl_msg

end_cycl_msg:

 

;выход из приложения

    push      NULL

    call        ExitProcess

start       endp

 

;Оконная функция WindowProc для обработки сообщений

WindowProc   proc

arg @@hwnd:DWORD, @@mes:DWORD, @@wparam:DWORD, @@lparam:DWORD

uses ebx,edi, esi ; регистры должны сохраняться

local @@hdc:DWORD

    cmp @@mes,WM_DESTROY

    je  wmdestroy

    cmp @@mes,WM_CREATE

    je  wmcreate

    cmp @@mes,WM_PAINT

    je  wmpaint

    cmp @@mes, WM_COMMAND

    je  wmcommand

    jmp default

 

 

wmcreate:                 ;создание окна

mov eax,0

 

;;;;поле1

 

    push 0

    push hInst

    push 0

    push @@hwnd

    push 20

    push 35

    push 50

    push 10

    push STYLEDT          

    push offset CPEDT

    push offset CLSEDT

    push 0

    call CreateWindowExA

    mov hh1,eax

    mov eax,0

;;; поле2

 

    push 0

    push hInst

    push 0

    push @@hwnd

    push 20

    push 35

    push 50

    push 50

    push STYLEDT          

    push offset CPEDT

    push offset CLSEDT

    push 0

    call CreateWindowExA

    mov hh2,eax

    mov eax,0

 

;;;;;;3

 

    push 0

    push hInst

    push 0

    push @@hwnd

    push 20

    push 35

    push 50

    push 90

    push STYLEDT          

    push offset CPEDT

    push offset CLSEDT

    push 0

    call CreateWindowExA

    mov hh3,eax

    mov eax,0

 

 

;;;;;

 

    push 0

    push hInst

    push 0

    push @@hwnd

    push 20

    push 80

    push 80

    push 10

    push STYLBTN      ;STYLBTN

    push offset CPBUT

    push offset CLSBTN

    push 0

    call CreateWindowExA

    mov hbtn,eax

    mov eax,0

 

    push 0

    push hInst

    push 0

    push @@hwnd

    push 20

    push 80

    push 80

    push 100

    push STYLBTN      ;STYLBTN

    push offset CPBUT2

    push offset CLSBTN

    push 0

    call CreateWindowExA

    mov hbtn2,eax

    mov eax,0

 

                       ;возвращаемое значение 0

    jmp exit_wndproc

wmcommand:

mov eax, hbtn

    cmp @@lparam,eax

    je  calc

mov eax, hbtn2

    cmp @@lparam,eax

    je  res

 

 

        

 

 

wmnodestroy:

    mov eax,0

    jmp exit_wndproc

 

res:

        

jmp wmdestroy

 

wmpaint:

   push       offset ps

    push      @@hwnd

    call        BeginPaint

    mov @@hdc,eax

 

    push      MesWindowLen 

    push      offset MesWindow

    push      20

    push      10

    push      @@hdc

    call        TextOutA

 

;освободить контекст

 push     offset ps

 push     @@hdc

 call       EndPaint

 mov eax,0 ;возвращаемое значение 0

 jmp exit_wndproc

 

wmdestroy: ;послать сообщение WM_QUIT

    push      0

    call        PostQuitMessage

    mov eax,0 ;возвращаемое значение 0

    jmp exit_wndproc

 

default:

;обработка по умолчанию

    push      @@lparam

    push      @@wparam

    push      @@mes

    push      @@hwnd

    call        DefWindowProcA

    jmp        exit_wndproc

 

calc:

 

;считываем поле 1

    push offset TEXTA

    push 150

    push WM_GETTEXT

    push hh1

    call SendMessageA

 

    push offset TEXTA

    call StringToDig

    mov a,eax

 

        

    ;поле 2

    push offset TEXTA

    push 150

    push WM_GETTEXT

    push hh2

    call SendMessageA

 

    push offset TEXTA

    call StringToDig

    mov b,eax

 

 

;поле 3

   push offset TEXTA

    push 150

    push WM_GETTEXT

    push hh3

    call SendMessageA

 

    push offset TEXTA

    call StringToDig

    mov n,eax

 

                  

    mov ecx,n

    mov eax,1d

repeat:

    imul a

    loop repeat

    imul b

 

    aam

    or ax,3030h

    mov [TEXTB+12],ah

    mov [TEXTB+13],al

 

    push @@hwnd

    call GetDC

    mov @@hdc,eax

 

    push      18    

    push      offset TEXTB

    push      120

    push      10

    push      @@hdc

    call        TextOutA

 

 

exit_wndproc:

        

    ret

WindowProc   endp

 

 

StringToDig proc near

ARG @@TEXT:DWORD

    mov esi,@@TEXT

    mov eax,0

    mov edx,0

    mov dl,[esi]

    cmp dl,'-'

    jne N

    mov temp,1        

    inc esi

    mov dl,[esi]

 

N: cmp dl,'0'

        

    jl  MRET

    cmp dl,'9'

    jg  MRET

 

    and dl,0Fh             ; ASCII->BCD

    add eax,edx

    mul ten

    inc esi

    mov dl,[esi]

 

    cmp dl,'0'

    jl  MDIV

    cmp dl,'9'

    jg  MDIV

 

;   mul ten

    and dl,0Fh

    add eax,edx

    jmp MRET

 

MDIV:   div ten

MRET:

cmp temp,1

jne n1

imul eax,-1

mov temp,0        

 

n1: ret

StringToDig endp

 

end start


Схема алгоритма


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

 

 

 



2020-02-03 203 Обсуждений (0)
Вывод результата работы 0.00 из 5.00 0 оценок









Обсуждение в статье: Вывод результата работы

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (203)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)