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

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

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

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

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

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

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

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

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


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

STYLBTN equ    40000000h + 10000000h

;WSCHILD+WS_VISIBLE

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

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

.486

locals

.modelflat,STDCALL  

includewindowA.inc   

includelibimp32i.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,typeWNDCLASSEX    

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

         mov  wcl.lpfnWndProc,offsetWindowProc

         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

         moveax,5

         mov  wcl.hbrBackground,eax

        

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

         mov  dwordptr wcl.lpszClassName,offset szClassName    

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

         mov  wcl.hIconSm,0

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

         push           offset wcl

         call             RegisterClassExA

        

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

         push           0       ;lpParam

         push           hInst ;hInstance

         push           0       ;menu

         push           0       ;parenthwnd

         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           offsetmessage

         call             GetMessageA

         cmp            ax,0

         je                end_cycl_msg

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

 push          offset message

         call             TranslateMessage

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

         push           offsetmessage

         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  offsetCPEDT

         push  offsetCLSEDT

         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  offsetCPEDT

         push  offsetCLSEDT

         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  offsetCPEDT

         push  offsetCLSEDT

         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  offsetCPBUT

         push  offsetCLSBTN

         push  0

         call    CreateWindowExA

         mov  hbtn,eax

         mov  eax,0

         push  0

         push  hInst

         push  0

         push  @@hwnd

         push  20

         push  80

         push  80

         push100

         push  STYLBTN           ;STYLBTN

         push  offsetCPBUT2

         push  offsetCLSBTN

         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           offsetMesWindow

         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  offsetTEXTA

         push  150

         push  WM_GETTEXT

         push  hh1

         call    SendMessageA

         push  offsetTEXTA

         call    StringToDig

         mov  a,eax

        

        ; поле2

         push  offsetTEXTA

         push  150

         push  WM_GETTEXT

         push  hh2

         call    SendMessageA

         push  offsetTEXTA

         call    StringToDig

         mov  b,eax

; поле 3

        push   offsetTEXTA

         push  150

         push  WM_GETTEXT

         push  hh3

         call    SendMessageA

         push  offsetTEXTA

         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           offsetTEXTB

         push           120

         push           10

         push           @@hdc

         call             TextOutA

exit_wndproc:

        

         ret

WindowProc        endp

StringToDigproc near

ARG@@TEXT:DWORD

         mov  esi,@@TEXT

         mov  eax,0

         mov  edx,0

         mov  dl,[esi]

         cmp  dl,'-'

         jne N

         movtemp,1        

         incesi

         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

StringToDigendp

end    start


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

/>

/>


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

/>/>

/>/>

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

1) />

2) />

3) />

4) />

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

еще рефераты
Еще работы по информатике, программированию