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

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

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

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

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

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

от 25%

Подписываем

договор

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

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


Министерство образования Российской Федерации
ЮЖНО-УРАЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Кафедра Автоматики и управления
Пояснительная записка к курсовому проекту
По дисциплине:
Программирование и основы алгоритмизации
Вариант № 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. Реферат Основы построения бухгалтерского баланса
5. Статья Особенности эксплуатации установок внутрипластового обезжелезивания воды
6. Биография Список известных художников и скульпторов, связанных с Ташкентом
7. Реферат Теоретический анализ современного состояния науки психологии
8. Курсовая на тему Характеристика твору Дж Свіфта Мандри Гулівера 2
9. Реферат Сущность современной концепции маркетинга
10. Контрольная работа Теории воспроизводства населения