|
Программирование и основы алгоритмизации |
Программирование и основы алгоритмизации
23 Министерство образования Российской Федерации ЮЖНО-УРАЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Кафедра Автоматики и управления Пояснительная записка к курсовому проекту По дисциплине: Программирование и основы алгоритмизации Вариант № 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_VISIBLESTYLEDT equ 40000000h + 10000000h + 800000h + 10000h;Пример каркасного приложения для Win32.486locals .model flat,STDCALL include windowA.inc includelib imp32i.libextrn 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:PROCextrn DefWindowProcA:PROC ;обработчик по умолчаниюextrn MessageBoxA:PROCextrn SendMessageA:PROCextrn GetDC:PROCextrn ReleaseDC:PROC ;оконной функцииpublic WindowProc.datahwnd dd 0 ; дескриптор экземпляра окнаhInst dd 0 ; дескриптор класса окнаhdc dd 0;hedt1 dd 0 ;дескриптор поля редактированияhbtn dd 0 ;дескриптор кнопкиhh1 dd 0hh2 dd 0hh3 dd 0hh4 dd 0hbtn1 dd 0hbtn2 dd 0CPBUT db '&Посчитать',0CPBUT2 db 'В&ыход',0CLSBTN db 'BUTTON',0CPEDT db '',0CLSEDT db 'EDIT',0TEXT db ' 'TEXTA db ' 'TEXTB db 'результат: 'TEXTLEN = $-TEXTten dw 10temp dw 0a dd ? b dd ?n dd ?wcl WNDCLASSEX <?> ;структура для регистрации класса ; окнаmessage MSG <?> ;структура для регистрации сообщенийszClassName db 'Приложение Win32',0szTitleName db 'Курсач Лысенко Д. ПС-164',0MesWindow db 'Введите a,b и n,'MesWindowLen = $-MesWindowps PAINTSTRUCT <?>.codestart proc near;Получение дескриптора класса окна push 0; call GetModuleHandleA mov hInst,eaxWinMain:;для начала инициализируем поля структуры 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_msgend_cycl_msg:;выход из приложения push NULL call ExitProcessstart endp;Оконная функция WindowProc для обработки сообщенийWindowProc proc arg @@hwnd:DWORD, @@mes:DWORD, @@wparam:DWORD, @@lparam:DWORDuses 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 defaultwmcreate: ;создание окна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_wndprocwmcommand:mov eax, hbtn cmp @@lparam,eax je calcmov eax, hbtn2 cmp @@lparam,eax je res wmnodestroy: mov eax,0 jmp exit_wndprocres: jmp wmdestroywmpaint: 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_wndprocwmdestroy: ;послать сообщение WM_QUIT push 0 call PostQuitMessage mov eax,0 ;возвращаемое значение 0 jmp exit_wndprocdefault:;обработка по умолчанию push @@lparam push @@wparam push @@mes push @@hwnd call DefWindowProcA jmp exit_wndproccalc:;считываем поле 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,1drepeat: 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 TextOutAexit_wndproc: retWindowProc endpStringToDig proc nearARG @@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 MRETMDIV: div tenMRET:cmp temp,1jne n1imul eax,-1mov temp,0 n1: retStringToDig endpend start2. Схема алгоритмаВывод результата работы3. Проверка правильности программы1) 2) 3) 4) Данные, полученные в результате вычислений, совпадают с теми, что были получены в результате выполнения программы.
|
|
|
© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент. |
|
|