Программирование и основы алгоритмизации
Поля редактирования. Каркасное приложение для Win32. Определение класса окна и регистрация его в системе. Считывание значения из поля редактирования. Цикл обработки сообщения. Числовой формат. Схема алгоритма. Вывод результата работы программы на экран.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | практическая работа |
Язык | русский |
Дата добавления | 11.10.2008 |
Размер файла | 290,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
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_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)
Данные, полученные в результате вычислений, совпадают с теми, что были получены в результате выполнения программы.
Подобные документы
Рассмотрение особенностей среды программирования Delphi. Разработка программы для пересчета длины из фунтов в килограммы с использованием следующих объектов: Edit, Label, Button. Значения свойств поля ввода-редактирования и командной кнопки Перерасчет.
практическая работа [177,2 K], добавлен 18.10.2012Приложение в среде Delphi, реализующее ввод двух целых чисел, по щелчку на кнопке с символом "=", вычисление результата операции вещественного деления с выводом значения на экран. Дополнение программы обработчика события: изменение цвета и ширины окна.
лабораторная работа [13,3 K], добавлен 15.07.2009Понятие алгоритма. Цикл программы. Структурная схема алгоритма. Элементы языка Тurbo Рascal. Алфавит. Идентификаторы. Комментарии. Лексика языка С++. ESC-последовательности. Операции. Ключевые слова. Комментарии.
контрольная работа [43,0 K], добавлен 24.04.2006Основные элементы окна программы MathCAD. Выполнение операций с файлами, редактирование, настройка программы. Способы ввода и редактирования в рабочем поле окна программы. Задание на рабочей области необходимых функций и матриц, выполнение вычислений.
контрольная работа [18,0 K], добавлен 11.09.2019Методы языка программирования C#. Алгоритмизация и программирование задач на языке высокого уровня C#. Внутренний цикл, ветвление, внешний цикл, вложенные друг в друга структуры ветвления. Вывод элементов массива на экран. Остальные элементы матрицы.
курсовая работа [250,2 K], добавлен 27.02.2015Основы организации приложения в Windows. Посылка и передача сообщений для окон. Создание и отображение главного окна приложения. Деактивация приложения, его фазы. Сообщения клавиатуры и функции для работы с ней. Определение состояния отдельных клавиш.
лекция [65,7 K], добавлен 24.06.2009Создание работоспособного модуля по работе с мобильными картами АЗС. Разработка базы данных в среде программирования Турбо Паскаль для работы с текстами и файловыми структурами. Описание методов алгоритмизации процессов сортировки и редактирования.
курсовая работа [1,9 M], добавлен 05.12.2011Проектирование приложения "Тетрис", осуществляющего вывод различных фигур на экран случайным образом и их падение. Описание логической структуры программы, ее тестирование. Требования к аппаратной и программной средам. Функции для работы с приложением.
курсовая работа [343,7 K], добавлен 20.01.2015Обзор основных возможностей и инструментов пакета Audacity. Запуск приложения, поддерживаемые звуковые форматы. Настройка параметров, оцифровка и редактирование звука. Использование фильтров и озвучивание презентации. Применение программы Audacity.
курсовая работа [151,6 K], добавлен 08.05.2011Запись в массив листа Excel c именем "Эксперимент". Среднее арифметическое значение элементов массива. Вывод диалогового окна. Фрагмент программы, организующий считывание исходного массива в программу для обработки. Адрес ячейки электронной таблицы.
контрольная работа [1,1 M], добавлен 16.08.2011