Реферат по предмету "Информатика, программирование"


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

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


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

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

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :