У вас вопросы?
У нас ответы:) SamZan.net

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

Работа добавлена на сайт samzan.net: 2016-03-30

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

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

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

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 6.4.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 h + 10000000h

;WSCHILD+WS_VISIBLE

STYLEDT equ h + 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  ; дескриптор экземпляра окна

hInst dd  ; дескриптор класса окна

hdc dd 

;

hedt1 dd  ;дескриптор поля редактирования

hbtn dd  ;дескриптор кнопки

hh1 dd 

hh2 dd 

hh3 dd 

hh4 dd 

hbtn1 dd 

hbtn2 dd 

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 

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     

call  LoadIconA

mov wcl.hIcon,eax 

push  IDC_ARROW ;стандартный курсор стрелка 32512

 push  

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   ;lpParam

push  hInst ;hInstance

push   ;menu

push   ;parent hwnd

push   ;высота окна

 push   ;ширина окна

 push   ;координата y л.в. угла окна

 push   ;координата x л.в. угла

 push  WS_OVERLAPPEDWINDOW ;стиль окна

 push  offset szTitleName ;Строка заголовка окна

 push  offset szClassName ;имя класса окна

 push      ;дополнительные стили

 call  CreateWindowExA

 mov  hwnd,eax   ;hwnd - дескриптор окна

;показать окно:

 push  SW_SHOWNORMAL ;1

 push  hwnd

call  ShowWindow

;перерисовываем содержимое окна

push  hwnd

call  UpdateWindow

;запускаем цикл сообщений:

cycl_msg:

 push  

push  

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 

push hInst

push 

push @@hwnd

push 

push 

push 

push 

push STYLEDT  

push offset CPEDT

push offset CLSEDT

push 

call CreateWindowExA

mov hh1,eax

mov eax,0

;;; поле2

 push 

push hInst

push 

push @@hwnd

push 

push 

push 

push 

push STYLEDT  

push offset CPEDT

push offset CLSEDT

push 

call CreateWindowExA

mov hh2,eax

mov eax,0

;;;;;;3

 push 

push hInst

push 

push @@hwnd

push 

push 

push 

push 

push STYLEDT  

push offset CPEDT

push offset CLSEDT

push 

call CreateWindowExA

mov hh3,eax

mov eax,0

;;;;;

push 

push hInst

push 

push @@hwnd

push 

push 

push 

push 

push STYLBTN  ;STYLBTN

push offset CPBUT

push offset CLSBTN

push 

call CreateWindowExA

mov hbtn,eax

mov eax,0

 push 

push hInst

push 

push @@hwnd

push 

push 

push 

push 100

 push STYLBTN  ;STYLBTN

push offset CPBUT2

 push offset CLSBTN

push 

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  

push  

push  @@hdc

 call  TextOutA

;освободить контекст 

push  offset ps

push  @@hdc

call  EndPaint

mov eax,0 ;возвращаемое значение 0

jmp exit_wndproc

wmdestroy: ;послать сообщение WM_QUIT

 push  

 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 

push WM_GETTEXT

push hh1

 call SendMessageA

push offset TEXTA

call StringToDig

mov a,eax

 

;поле 2

 push offset TEXTA

push 

push WM_GETTEXT

push hh2

 call SendMessageA

push offset TEXTA

call StringToDig

mov b,eax

;поле 3

push offset TEXTA

push 

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   

push  offset TEXTB

push  

push  

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

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


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

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

1)

2)

3)

4)

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




1. Разработка интернет-магазина
2. Исторические этапы возникновения прокурорского надзора в государственном механизме [2] 2
3. Стили лидерства
4. Разработка эквалайзера
5. реферат дисертації на здобуття наукового ступеня кандидата технічних наук Вінниц
6. Контрольная работа- Основы статуса человека и гражданина в РФ
7. тема сохранения жизни и здоровья работников в процессе трудовой деятельности включающая в себя правовые со
8. Исследование эффективности лизинговых сделок предприятия на примере ОАО
9. Введение Даже когда его путь завершился люди не могут прийти к единому мнению о роли Стива Джобса соучре
10. Как правило неспециалисты сбитые с толку сенсационными сказками прессы и кино представляют себе взаимо