Практическая работа

Практическая работа на тему Программирование и основы алгоритмизации 2

Работа добавлена на сайт bukvasha.net: 2014-07-27

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 13.1.2025


Министерство образования Российской Федерации
ЮЖНО-УРАЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Кафедра Автоматики и управления
Пояснительная записка к курсовому проекту
По дисциплине:
Программирование и основы алгоритмизации
Вариант № 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
.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

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




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


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

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

1. Реферат на тему Естествознание в науке и культуре
2. Контрольная работа Понятие преступления и невменяемости
3. Сочинение на тему Булгаков м. а. - Москва м. а. булгакова
4. Реферат на тему Internet Micropayments Essay Research Paper Internet Micropayments
5. Реферат на тему Методика оценки радиационной и химической обстановки при чрезвычайных ситуациях
6. Реферат Рыночная трансформация аграрной сферы экономики России
7. Реферат на тему Life Of Frederick Douglass Essay Research Paper
8. Сочинение на тему Пастернак б. л. - Язык поэзии
9. Курсовая Общие положения договора поставки
10. Реферат на тему Озоновые дыры Разрушение озонового слоя Земли хлорфторуглеводородами